package embedded_ocaml_templates

  1. Overview
  2. Docs

Source file lexer.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
open Parser
let get_text buffer first =
  let text = CCVector.of_array first in
  let rec aux () =
    match%sedlex buffer with
    | "<%#" -> Sedlexing.rollback buffer
    | "<%-" -> Sedlexing.rollback buffer
    | "<%" -> Sedlexing.rollback buffer
    | "%>" -> Sedlexing.rollback buffer
    | eof -> ()
    | any ->
        CCVector.append_array text (Sedlexing.lexeme buffer);
        aux ()
    | _ -> assert false
  in
  aux ();
  CCVector.to_array text

let token buffer =
  match%sedlex buffer with
  | "<%" -> LeftPar
  | "<%#" -> LeftParArgs
  | "<%-" -> LeftParOutput
  | "%>" -> RightPar
  | eof -> EOF
  | any -> Text (Ustring.to_string (get_text buffer (Sedlexing.lexeme buffer)))
  | _ -> assert false

let lexer buffer = Sedlexing.with_tokenizer token buffer
OCaml

Innovation. Community. Security.