]> matita.cs.unibo.it Git - helm.git/commitdiff
added ligatures expansion support functions
authorStefano Zacchiroli <zack@upsilon.cc>
Fri, 4 Nov 2005 14:03:47 +0000 (14:03 +0000)
committerStefano Zacchiroli <zack@upsilon.cc>
Fri, 4 Nov 2005 14:03:47 +0000 (14:03 +0000)
helm/ocaml/cic_notation/cicNotationLexer.ml
helm/ocaml/cic_notation/cicNotationLexer.mli

index 9fa6270eec91ce4260a1dc85a6ec3f5aad78036f..17d77f9028e46dcde96f2287902d24dbc959d692 100644 (file)
@@ -34,9 +34,19 @@ let regexp number = xml_digit+
 
 let regexp ident_letter = [ 'a' - 'z' 'A' - 'Z' ]
 
+  (* must be in sync with "is_ligature_char" below *)
 let regexp ligature_char = [ "'`~!?@*()[]<>-+=|:;.,/\"" ]
 let regexp ligature = ligature_char ligature_char+
 
+let is_ligature_char =
+  (* must be in sync with "regexp ligature_char" above *)
+  let chars = "'`~!?@*()[]<>-+=|:;.,/\"" in
+  (fun char ->
+    (try
+      ignore (String.index chars char);
+      true
+    with Not_found -> false))
+
 let regexp ident_decoration = '\'' | '?' | '`'
 let regexp ident_cont = ident_letter | xml_digit | '_'
 let regexp ident = ident_letter ident_cont* ident_decoration*
@@ -245,17 +255,18 @@ let rec comment_token acc depth =
       let acc = acc ^ Ulexing.utf8_lexeme lexbuf in
       comment_token acc depth lexbuf
 
+let lookup_ligatures lexeme = List.rev (Hashtbl.find_all ligatures lexeme)
+
   (** @param k continuation to be invoked when no ligature has been found *)
 let rec ligatures_token k =
   lexer
   | ligature ->
       let lexeme = Ulexing.utf8_lexeme lexbuf in
-      (match Hashtbl.find_all ligatures lexeme with
+      (match lookup_ligatures lexeme with
       | [] -> (* ligature not found, rollback and try default lexer *)
           Ulexing.rollback lexbuf;
           k lexbuf
-      | ligs -> (* ligatures found, use the default one *)
-          let default_lig = List.hd (List.rev ligs) in
+      | default_lig :: _ -> (* ligatures found, use the default one *)
           return_symbol lexbuf default_lig)
   | eof -> return_eoi lexbuf
   | _ ->  (* not a ligature, rollback and try default lexer *)
index 765a554f4172292d4881daf932034353925418bf..cd5f0876dd2fe4d715a5791c27f7f6ffeb7fb5ff 100644 (file)
@@ -41,5 +41,8 @@ val level2_meta_lexer: (string * string) Token.glexer
 val add_level2_ast_keyword: string -> unit    (** non idempotent *)
 val remove_level2_ast_keyword: string -> unit (** non idempotent *)
 
-(* val lookup_ligatures: string -> string list *)
+(** {2 Ligatures} *)
+
+val is_ligature_char: char -> bool
+val lookup_ligatures: string -> string list