this repo has no description
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 []