- # Numbers
- ## Integers
- ### Binary
- - constant.number: "-?0[bB][01][01_]*"
- ### Octal
- - constant.number: "-?0[oO][0-7][0-7_]*"
- ### Decimal
- - constant.number: "-?\\d[\\d_]*"
- ### Hexadecimal
- - constant.number: "-?0[xX][0-9a-fA-F][0-9a-fA-F_]*"
- ## Real
- ### Decimal
- - constant.number: "-?\\d[\\d_]*.\\d[\\d_]*([eE][+-]\\d[\\d_]*.\\d[\\d_]*)?"
- ### Hexadecimal
- - constant.number: "-?0[xX][0-9a-fA-F][0-9a-fA-F_]*.[0-9a-fA-F][0-9a-fA-F_]*([pP][+-][0-9a-fA-F][0-9a-fA-F_]*.[0-9a-fA-F][0-9a-fA-F_]*)?"
- # Comments
+ - identifier: "\\b[A-Z][0-9a-z_]{2,}\\b"
+ #declarations
+ - statement: "\\b(let|val|method|in|and|rec|private|virtual|constraint)\\b"
+ #structure items
+ - type: "\\b(type|open|class|module|exception|external)\\b"
+ #patterns
+ - statement: "\\b(fun|function|functor|match|try|with)\\b"
+ #patterns-modifiers
+ - statement: "\\b(as|when|of)\\b"
+ #conditions
+ - statement: "\\b(if|then|else)\\b"
+ #blocs
+ - type: "\\b(begin|end|object|struct|sig|for|while|do|done|to|downto)\\b"
+ #constantes
+ - constant.bool: "\\b(true|false)\\b"
+ #modules/classes
+ - special: "\\b(include|inherit|initializer)\\b"
+ #expr modifiers
+ - special: "\\b(new|ref|mutable|lazy|assert|raise)\\b"
+ - constant.string:
+ start: "'"
+ end: "'"
+ skip: "\\\\."
+ rules:
+ - constant.specialChar: "%."
+ - constant.specialChar: "\\\\[abfnrtv'\\\"\\\\]"
+ - constant.specialChar: "\\\\([0-7]{3}|x[A-Fa-f0-9]{2}|u[A-Fa-f0-9]{4}|U[A-Fa-f0-9]{8})"
+ - constant.string:
+ start: "\""
+ end: "\""
+ skip: "\\\\."
+ rules:
+ - constant.specialChar: "%."
+ - constant.specialChar: "\\\\[abfnrtv'\\\"\\\\]"
+ - constant.specialChar: "\\\\([0-7]{3}|x[A-Fa-f0-9]{2}|u[A-Fa-f0-9]{4}|U[A-Fa-f0-9]{8})"