public GMLTokenMarker() {
    super();
    schemes.add(new BlockDescriptor(S_DOC_COMMENT, "/\\*(?=\\*)", "\\*/", profile)); //$NON-NLS-1$ //$NON-NLS-2$
    schemes.add(new BlockDescriptor(S_BLOCK_COMMENT, "/(?=\\*)", "\\*/", profile)); //$NON-NLS-1$ //$NON-NLS-2$
    schemes.add(new BlockDescriptor(S_DOC_LINE_COMMENT, "///", "$", profile)); //$NON-NLS-1$ //$NON-NLS-2$
    schemes.add(new BlockDescriptor(S_LINE_COMMENT, "//", "$", profile)); //$NON-NLS-1$ //$NON-NLS-2$
    schemes.add(new BlockDescriptor(S_DOUBLEQ_STRING, "\"", "\"", profile)); //$NON-NLS-1$ //$NON-NLS-2$
    schemes.add(new BlockDescriptor(S_SINGLEQ_STRING, "'", "'", profile)); //$NON-NLS-1$ //$NON-NLS-2$

    functions = addKeywordSet(S_FUNCTIONS, profile);
    for (Function f : GMLKeywords.FUNCTIONS) {
      Collections.addAll(functions.words, f.getName());
    }
    constructs = addKeywordSet(S_CONSTRUCTS, profile);
    for (Construct c : GMLKeywords.CONSTRUCTS) {
      Collections.addAll(constructs.words, c.getName());
    }
    operators = addKeywordSet(S_OPERATORS, profile);
    for (Operator o : GMLKeywords.OPERATORS) {
      Collections.addAll(operators.words, o.getName());
    }
    constants = addKeywordSet(S_CONSTANTS, profile);
    for (Constant c : GMLKeywords.CONSTANTS) {
      Collections.addAll(constants.words, c.getName());
    }
    variables = addKeywordSet(S_VARIABLES, profile);
    for (Variable v : GMLKeywords.VARIABLES) {
      Collections.addAll(variables.words, v.getName());
    }

    tmKeywords.add(functions);
    tmKeywords.add(constructs);
    tmKeywords.add(operators);
    tmKeywords.add(constants);
    tmKeywords.add(variables);

    CharSymbolSet css = new CharSymbolSet(S_OPS_AND_SEPS, profile);
    char[] ca = "{[()]}!%^&*-/+=?:~<>.,;".toCharArray(); //$NON-NLS-1$
    for (int i = 0; i < ca.length; i++) {
      css.chars.add(ca[i]);
    }
    tmChars.add(css);

    otherTokens.add(new SimpleToken(S_NUMERIC_LITERAL, "[0-9]+", profile)); //$NON-NLS-1$
    otherTokens.add(new SimpleToken(S_HEX_LITERAL, "\\$[0-9A-Fa-f]+", profile)); //$NON-NLS-1$
  }