While working on our replacement for flex / flex++, I was getting lost in all the comments and regular expressions in our lexer-file. I needed syntax highlighting badly.
So, I opened up the bundle editor and wrote a language-file for flexc++. Because it’s basically the same syntax, it also works on lexers for flex.
If someone’s interested, drop me a line at jp@thisdomain, and I’ll send the bundle to you (to save you some cut’n’paste work :)
{ scopeName = 'source.flexc++';
fileTypes = ( );
foldingStartMarker = '/\*\*|[^%]\{\s*$';
foldingStopMarker = '\*\*/|^\s*\}';
patterns = (
{ name = 'comment.block.flexc++';
begin = '\s*/\*';
end = '\*/\s*';
},
{ name = 'meta.codeblock.flexc++';
begin = '%\{';
end = '%\}';
patterns = ( { include = 'source.c++'; } );
},
{ name = 'constant.other.namedefinition.flexc++';
match = '^\s*[A-Z_0-9]+';
},
{ name = 'string.regexp.namedefinition.flexc++';
match = '(?<=[A-Z_0-9])\s+.+$';
},
{ name = 'meta.rulessection.flexc++';
begin = '^%%$';
end = '%%';
patterns = (
{ name = 'meta.blankline.flexc++';
match = '^$';
},
{ name = 'comment.block.rulessection.flexc++';
begin = '\s*/\*';
end = '\*/\s*';
},
{ name = 'entity.name.other.startconditionlist.flexc++';
match = '^\s*<[a-zA-Z_,]+>';
},
{ name = 'string.regexp.flexc++';
begin = '^\s*(?=[^\s\n])|(?<=>)(?=[^\s])';
end = '(?=\s|\n)';
patterns = (
{ name = 'string.regexp.characterclass.flexc++';
match = '\[.+\]';
},
{ name = 'string.regexp.escape.flexc++';
match = '\\.';
},
{ name = 'string.regexp.string.flexc++';
begin = '"';
end = '"';
patterns = (
{ name = 'string.regexp.string.escapechar.flexc++';
match = '\\.';
},
);
},
{ name = 'constant.other.name.flexc++';
match = '\{[A-Z_0-9]*[A-Z_][A-Z_0-9]+\}';
},
);
},
{ name = 'meta.actionblock.flexc++';
begin = '\{';
end = '\}';
patterns = (
{ name = 'entity.name.function.builtin.flexc++';
match = '\b(BEGIN)\b';
},
{ name = 'meta.actionblock.source.flexc++';
include = 'source.c++';
},
);
},
{ name = 'entity.function.builtin.flexc++';
match = '\b(BEGIN)\b';
},
{ name = 'meta.action.flexc++';
contentName = 'source.c++';
match = '(?<=[^\s\n])\s+.+$';
include = 'source.c++';
},
);
},
{ name = 'entity.other.attribute-name.flexc++';
match = '^%[^ ]+';
},
);
}