this repo has no description
at main 207 lines 5.4 kB view raw
1type infos = (string * (int * int)) list 2 3let tag_of_token (tok : Parser.token) = 4 match tok with 5 | AMPERAMPER -> "AMPERAMPER" 6 | AMPERSAND -> "AMPERSAND" 7 | AND -> "AND" 8 | AS -> "AS" 9 | ASSERT -> "ASSERT" 10 | BACKQUOTE -> "BACKQUOTE" 11 | BANG -> "BANG" 12 | BAR -> "BAR" 13 | BARBAR -> "BARBAR" 14 | BARRBRACKET -> "BARRBRACKET" 15 | BEGIN -> "BEGIN" 16 | CHAR _ -> "CHAR" 17 | CLASS -> "CLASS" 18 | COLON -> "COLON" 19 | COLONCOLON -> "COLONCOLON" 20 | COLONEQUAL -> "COLONEQUAL" 21 | COLONGREATER -> "COLONGREATER" 22 | COMMA -> "COMMA" 23 | COMMENT _ -> "COMMENT" 24 | CONSTRAINT -> "CONSTRAINT" 25 | DO -> "DO" 26 | DOCSTRING _ -> "DOCSTRING" 27 | DONE -> "DONE" 28 | DOT -> "DOT" 29 | DOTDOT -> "DOTDOT" 30 | DOWNTO -> "DOWNTO" 31 | ELSE -> "ELSE" 32 | END -> "END" 33 | EOF -> "EOF" 34 | EOL -> "EOL" 35 | EQUAL -> "EQUAL" 36 | EXCEPTION -> "EXCEPTION" 37 | EXTERNAL -> "EXTERNAL" 38 | FALSE -> "FALSE" 39 | FLOAT _ -> "FLOAT" 40 | FOR -> "FOR" 41 | FUN -> "FUN" 42 | FUNCTION -> "FUNCTION" 43 | FUNCTOR -> "FUNCTOR" 44 | GREATER -> "GREATER" 45 | GREATERRBRACE -> "GREATERRBRACE" 46 | GREATERRBRACKET -> "GREATERRBRACKET" 47 | IF -> "IF" 48 | IN -> "IN" 49 | INCLUDE -> "INCLUDE" 50 | INFIXOP0 _ -> "INFIXOP0" 51 | INFIXOP1 _ -> "INFIXOP1" 52 | INFIXOP2 _ -> "INFIXOP2" 53 | INFIXOP3 _ -> "INFIXOP3" 54 | INFIXOP4 _ -> "INFIXOP4" 55 | INHERIT -> "INHERIT" 56 | INITIALIZER -> "INITIALIZER" 57 | INT _ -> "INT" 58 | LABEL _ -> "LABEL" 59 | LAZY -> "LAZY" 60 | LBRACE -> "LBRACE" 61 | LBRACELESS -> "LBRACELESS" 62 | LBRACKET -> "LBRACKET" 63 | LBRACKETAT -> "LBRACKETAT" 64 | LBRACKETATAT -> "LBRACKETATAT" 65 | LBRACKETATATAT -> "LBRACKETATATAT" 66 | LBRACKETBAR -> "LBRACKETBAR" 67 | LBRACKETGREATER -> "LBRACKETGREATER" 68 | LBRACKETLESS -> "LBRACKETLESS" 69 | LBRACKETPERCENT -> "LBRACKETPERCENT" 70 | LBRACKETPERCENTPERCENT -> "LBRACKETPERCENTPERCENT" 71 | LESS -> "LESS" 72 | LESSMINUS -> "LESSMINUS" 73 | LET -> "LET" 74 | LIDENT "failwith" -> "failwith" 75 | LIDENT _ -> "LIDENT" 76 | LPAREN -> "LPAREN" 77 | MATCH -> "MATCH" 78 | METHOD -> "METHOD" 79 | MINUS -> "MINUS" 80 | MINUSDOT -> "MINUSDOT" 81 | MINUSGREATER -> "MINUSGREATER" 82 | MODULE -> "MODULE" 83 | MUTABLE -> "MUTABLE" 84 | NEW -> "NEW" 85 | NONREC -> "NONREC" 86 | OBJECT -> "OBJECT" 87 | OF -> "OF" 88 | OPEN -> "OPEN" 89 | OPTLABEL _ -> "OPTLABEL" 90 | OR -> "OR" 91 | PERCENT -> "PERCENT" 92 | PLUS -> "PLUS" 93 | PLUSDOT -> "PLUSDOT" 94 | PLUSEQ -> "PLUSEQ" 95 | PREFIXOP _ -> "PREFIXOP" 96 | PRIVATE -> "PRIVATE" 97 | QUESTION -> "QUESTION" 98 | QUOTE -> "QUOTE" 99 | RBRACE -> "RBRACE" 100 | RBRACKET -> "RBRACKET" 101 | REC -> "REC" 102 | RPAREN -> "RPAREN" 103 | SEMI -> "SEMI" 104 | SEMISEMI -> "SEMISEMI" 105 | SIG -> "SIG" 106 | STAR -> "STAR" 107 | STRING _ -> "STRING" 108 | STRUCT -> "STRUCT" 109 | THEN -> "THEN" 110 | TILDE -> "TILDE" 111 | TO -> "TO" 112 | TRUE -> "TRUE" 113 | TRY -> "TRY" 114 | TYPE -> "TYPE" 115 | UIDENT _ -> "UIDENT" 116 | UNDERSCORE -> "UNDERSCORE" 117 | VAL -> "VAL" 118 | VIRTUAL -> "VIRTUAL" 119 | WHEN -> "WHEN" 120 | WHILE -> "WHILE" 121 | WITH -> "WITH" 122(* Removed *) 123#if OCAML_VERSION <= (4,2,3) 124 | INT32 _ -> "INT32" 125 | INT64 _ -> "INT64" 126 | NATIVEINT _ -> "NATIVEINT" 127#endif 128#if OCAML_VERSION <= (4,3,0) 129 | SHARP -> "SHARP" 130 | SHARPOP _ -> "SHARPOP" 131#endif 132(* Added *) 133#if OCAML_VERSION >= (4,4,0) 134 | HASH -> "HASH" 135 | HASHOP _ -> "HASHOP" 136#endif 137#if OCAML_VERSION >= (4,6,0) 138 | DOTOP _ -> "DOTOP" 139#endif 140#if OCAML_VERSION >= (4,11,0) 141 | QUOTED_STRING_EXPR _ -> "QUOTED_STRING_EXPR" 142 | QUOTED_STRING_ITEM _ -> "QUOTED_STRING_ITEM" 143#endif 144#if OCAML_VERSION >= (4,8,0) 145 | ANDOP _ -> "ANDOP" 146 | LETOP _ -> "LETOP" 147#endif 148#if defined OXCAML 149 | AT -> "AT" 150 | ATAT -> "ATAT" 151 | COLONRBRACKET -> "COLONRBRACKET" 152 | DOLLAR -> "DOLLAR" 153 | DOTHASH -> "DOTHASH" 154 | EXCLAVE -> "EXCLAVE" 155 | GLOBAL -> "GLOBAL" 156 | HASHLBRACE -> "HASHLBRACE" 157 | HASHLPAREN -> "HASHLPAREN" 158 | HASH_CHAR _ -> "HASH_CHAR" 159 | HASH_FLOAT _ -> "HASH_FLOAT" 160 | HASH_INT _ -> "HASH_INT" 161 | HASH_SUFFIX -> "HASH_SUFFIX" 162 | KIND_ABBREV -> "KIND_ABBREV" 163 | KIND_OF -> "KIND_OF" 164 | LBRACKETCOLON -> "LBRACKETCOLON" 165 | LESSLBRACKET -> "LESSLBRACKET" 166 | LOCAL -> "LOCAL" 167 | MOD -> "MOD" 168 | ONCE -> "ONCE" 169 | OVERWRITE -> "OVERWRITE" 170 | RBRACKETGREATER -> "RBRACKETGREATER" 171 | STACK -> "STACK" 172 | UNIQUE -> "UNIQUE" 173#endif 174#if OCAML_VERSION >= (5,3,0) 175 | METAOCAML_ESCAPE -> "METAOCAML_ESCAPE" 176 | METAOCAML_BRACKET_OPEN -> "METAOCAML_BRACKET_OPEN" 177 | METAOCAML_BRACKET_CLOSE -> "METAOCAML_BRACKET_CLOSE" 178 | EFFECT -> "EFFECT" 179#endif 180 181 182let syntax_highlighting_locs src = 183 try 184 Lexer.init (); 185 let lexbuf = Lexing.from_string 186 #if OCAML_VERSION >= (4,8,0) 187 ~with_positions:true 188 #endif 189 src in 190 let rec collect lexbuf tokens = 191 let tok = Lexer.token_with_comments lexbuf in 192 let loc_start, loc_end = (lexbuf.lex_start_p, lexbuf.lex_curr_p) in 193 let tag = tag_of_token tok in 194 match tok with 195 | EOF -> List.rev tokens 196 | COMMENT (_, loc) -> 197 collect lexbuf ((tag, (loc.loc_start.pos_cnum, loc.loc_end.pos_cnum)) :: tokens) 198 | DOCSTRING doc -> 199 let loc = Docstrings.docstring_loc doc in 200 collect lexbuf ((tag, (loc.loc_start.pos_cnum, loc.loc_end.pos_cnum)) :: tokens) 201 | _ -> collect lexbuf ((tag, (loc_start.pos_cnum, loc_end.pos_cnum)) :: tokens) 202 in 203 let result = collect lexbuf [] in 204 result 205 with e -> 206 Format.eprintf "Error during syntax highlighting: %s\n%!" (Printexc.to_string e); 207 []