class_docstr: For `Modula-2 <http://www.modula2.org/>`_ source code.
  
  The Modula-2 lexer supports several dialects.  By default, it operates in
  fallback mode, recognising the *combined* literals, punctuation symbols
  and operators of all supported dialects, and the *combined* reserved words
  and builtins of PIM Modula-2, ISO Modula-2 and Modula-2 R10, while not
  differentiating between library defined identifiers.
  
  To select a specific dialect, a dialect option may be passed
  or a dialect tag may be embedded into a source file.
  
  Dialect Options:
  
  `m2pim`
      Select PIM Modula-2 dialect.
  `m2iso`
      Select ISO Modula-2 dialect.
  `m2r10`
      Select Modula-2 R10 dialect.
  `objm2`
      Select Objective Modula-2 dialect.
  
  The PIM and ISO dialect options may be qualified with a language extension.
  
  Language Extensions:
  
  `+aglet`
      Select Aglet Modula-2 extensions, available with m2iso.
  `+gm2`
      Select GNU Modula-2 extensions, available with m2pim.
  `+p1`
      Select p1 Modula-2 extensions, available with m2iso.
  `+xds`
      Select XDS Modula-2 extensions, available with m2iso.
  
  
  Passing a Dialect Option via Unix Commandline Interface
  
  Dialect options may be passed to the lexer using the `dialect` key.
  Only one such option should be passed. If multiple dialect options are
  passed, the first valid option is used, any subsequent options are ignored.
  
  Examples:
  
  `$ pygmentize -O full,dialect=m2iso -f html -o /path/to/output /path/to/input`
      Use ISO dialect to render input to HTML output
  `$ pygmentize -O full,dialect=m2iso+p1 -f rtf -o /path/to/output /path/to/input`
      Use ISO dialect with p1 extensions to render input to RTF output
  
  
  Embedding a Dialect Option within a source file
  
  A dialect option may be embedded in a source file in form of a dialect
  tag, a specially formatted comment that specifies a dialect option.
  
  Dialect Tag EBNF::
  
     dialectTag :
         OpeningCommentDelim Prefix dialectOption ClosingCommentDelim ;
  
     dialectOption :
         'm2pim' | 'm2iso' | 'm2r10' | 'objm2' |
         'm2iso+aglet' | 'm2pim+gm2' | 'm2iso+p1' | 'm2iso+xds' ;
  
     Prefix : '!' ;
  
     OpeningCommentDelim : '(*' ;
  
     ClosingCommentDelim : '*)' ;
  
  No whitespace is permitted between the tokens of a dialect tag.
  
  In the event that a source file contains multiple dialect tags, the first
  tag that contains a valid dialect option will be used and any subsequent
  dialect tags will be ignored.  Ideally, a dialect tag should be placed
  at the beginning of a source file.
  
  An embedded dialect tag overrides a dialect option set via command line.
  
  Examples:
  
  ``(*!m2r10*) DEFINITION MODULE Foobar; ...``
      Use Modula2 R10 dialect to render this source file.
  ``(*!m2pim+gm2*) DEFINITION MODULE Bazbam; ...``
      Use PIM dialect with GNU extensions to render this source file.
  
  
  Algol Publication Mode:
  
  In Algol publication mode, source text is rendered for publication of
  algorithms in scientific papers and academic texts, following the format
  of the Revised Algol-60 Language Report.  It is activated by passing
  one of two corresponding styles as an option:
  
  `algol`
      render reserved words lowercase underline boldface
      and builtins lowercase boldface italic
  `algol_nu`
      render reserved words lowercase boldface (no underlining)
      and builtins lowercase boldface italic
  
  The lexer automatically performs the required lowercase conversion when
  this mode is activated.
  
  Example:
  
  ``$ pygmentize -O full,style=algol -f latex -o /path/to/output /path/to/input``
      Render input file in Algol publication mode to LaTeX output.
  
  
  Rendering Mode of First Class ADT Identifiers:
  
  The rendering of standard library first class ADT identifiers is controlled
  by option flag "treat_stdlib_adts_as_builtins".
  
  When this option is turned on, standard library ADT identifiers are rendered
  as builtins.  When it is turned off, they are rendered as ordinary library
  identifiers.
  
  `treat_stdlib_adts_as_builtins` (default: On)
  
  The option is useful for dialects that support ADTs as first class objects
  and provide ADTs in the standard library that would otherwise be built-in.
  
  At present, only Modula-2 R10 supports library ADTs as first class objects
  and therefore, no ADT identifiers are defined for any other dialects.
  
  Example:
  
  ``$ pygmentize -O full,dialect=m2r10,treat_stdlib_adts_as_builtins=Off ...``
      Render standard library ADTs as ordinary library types.
  
  .. versionadded:: 1.3
  
  .. versionchanged:: 2.1
     Added multi-dialect support.
code: def set_dialect(self, dialect_id):
      #
      # if __debug__:
      #    print 'entered set_dialect with arg: ', dialect_id
      #
      # check dialect name against known dialects
      if dialect_id not in self.dialects:
          dialect = "unknown"  # default
      else:
          dialect = dialect_id
      #
      # compose lexemes to reject set
      lexemes_to_reject_set = set()
      # add each list of reject lexemes for this dialect
      for list in self.lexemes_to_reject_db[dialect]:
          lexemes_to_reject_set.update(set(list))
      #
      # compose reserved words set
      reswords_set = set()
      # add each list of reserved words for this dialect
      for list in self.reserved_words_db[dialect]:
          reswords_set.update(set(list))
      #
      # compose builtins set
      builtins_set = set()
      # add each list of builtins for this dialect excluding reserved words
      for list in self.builtins_db[dialect]:
          builtins_set.update(set(list).difference(reswords_set))
      #
      # compose pseudo-builtins set
      pseudo_builtins_set = set()
      # add each list of builtins for this dialect excluding reserved words
      for list in self.pseudo_builtins_db[dialect]:
          pseudo_builtins_set.update(set(list).difference(reswords_set))
      #
      # compose ADTs set
      adts_set = set()
      # add each list of ADTs for this dialect excluding reserved words
      for list in self.stdlib_adts_db[dialect]:
          adts_set.update(set(list).difference(reswords_set))
      #
      # compose modules set
      modules_set = set()
      # add each list of builtins for this dialect excluding builtins
      for list in self.stdlib_modules_db[dialect]:
          modules_set.update(set(list).difference(builtins_set))
      #
      # compose types set
      types_set = set()
      # add each list of types for this dialect excluding builtins
      for list in self.stdlib_types_db[dialect]:
          types_set.update(set(list).difference(builtins_set))
      #
      # compose procedures set
      procedures_set = set()
      # add each list of procedures for this dialect excluding builtins
      for list in self.stdlib_procedures_db[dialect]:
          procedures_set.update(set(list).difference(builtins_set))
      #
      # compose variables set
      variables_set = set()
      # add each list of variables for this dialect excluding builtins
      for list in self.stdlib_variables_db[dialect]:
          variables_set.update(set(list).difference(builtins_set))
      #
      # compose constants set
      constants_set = set()
      # add each list of constants for this dialect excluding builtins
      for list in self.stdlib_constants_db[dialect]:
          constants_set.update(set(list).difference(builtins_set))
      #
      # update lexer state
      self.dialect = dialect
      self.lexemes_to_reject = lexemes_to_reject_set
      self.reserved_words = reswords_set
      self.builtins = builtins_set
      self.pseudo_builtins = pseudo_builtins_set
      self.adts = adts_set
      self.modules = modules_set
      self.types = types_set
      self.procedures = procedures_set
      self.variables = variables_set
      self.constants = constants_set
  
file_path: catboost/contrib/python/Pygments/py2/pygments/lexers/modula2.py
imports: import re
  from pygments.lexer import RegexLexer, include
  from pygments.util import get_bool_opt, get_list_opt
  from pygments.token import Text, Comment, Operator, Keyword, Name, String, Number, Punctuation, Error
label_desc: Use image node_id 2 for calling the Modula2Lexer obj's underlying member method code with example usage: obj.set_dialect(dialect_id) without return types