From 64eec884e7456bbd1236bc43624ad3e49e4cad55 Mon Sep 17 00:00:00 2001
From: Neil
To achieve portability, only a subset of C++ features are used. @@ -139,6 +141,10 @@ maintaining FORTRAN programs. The union feature is not used as it can lead to non-type-safe value access.
++ The SCI_METHOD preprocessor definition should be used when implementing + interfaces which include it like ILexer and only there. +
Ensure there are no warnings under the compiler you use. Warnings from other compilers will be noted on the feature request.
sc.ch is an int: do not pass this around as a char.
+The ctype functions like isalnum and isdigit only work on ASCII (0..127) and may cause + undefined behaviour including crashes if used on other values. Check with IsASCII before calling is*.
+Functions, structs and classes in lexers should be in an unnamed namespace (see LexCPP) + or be marked "static" so they will not leak into other lexers.
+If you copy from an existing lexer, remove any code that is not needed since it makes it + more difficult to maintain and review.
+When modifying an existing lexer, try to maintain as much compatibility as possible. + Do not renumber lexical styles as current client code may be built against the earlier values.
++ Properties provided by a new lexer should follow the naming conventions + and should include a comment suitable for showing to end users. + The convention is for properties that control styling to be named + lexer.<lexername>.* and those that control folding to be named + fold.<lexername>.*. + Examples are "lexer.python.literals.binary" and "fold.haskell.imports". +
++ The properties "fold" and "fold.comment" are generic and can be used by + any lexer. +
++ See LexPython for examples of properties in an object lexer and LexHTML for a functional lexer. +