aboutsummaryrefslogtreecommitdiffhomepage
path: root/ide/config_lexer.mll
diff options
context:
space:
mode:
authorGravatar monate <monate@85f007b7-540e-0410-9357-904b9bb8a0f7>2003-03-03 08:40:42 +0000
committerGravatar monate <monate@85f007b7-540e-0410-9357-904b9bb8a0f7>2003-03-03 08:40:42 +0000
commit19d01ae7c286b3d0f0acee9280e416149264d39f (patch)
treef2c38a49ff928560c5cd8dece40cfacfb96b5f1f /ide/config_lexer.mll
parent98ebcece4ff6d2d9450dc96206b271516167daa5 (diff)
coqide: preferences support and optimizations
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@3724 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'ide/config_lexer.mll')
-rw-r--r--ide/config_lexer.mll61
1 files changed, 61 insertions, 0 deletions
diff --git a/ide/config_lexer.mll b/ide/config_lexer.mll
new file mode 100644
index 000000000..467f68704
--- /dev/null
+++ b/ide/config_lexer.mll
@@ -0,0 +1,61 @@
+{
+
+ open Lexing
+}
+
+let space =
+ [' ' '\010' '\013' '\009' '\012']
+let char = ['A'-'Z' 'a'-'z' '_' '0'-'9']
+
+let ident = char+
+
+let value = ('"'|'[')( [^ '='] | ('\\''"') )*('"'|']')
+let list_value = [^';']+ ';'
+
+rule next_config = parse
+ | ident
+ { let id = lexeme lexbuf in
+ let v = value lexbuf in
+ (id,v)
+ }
+ | _ { next_config lexbuf}
+ | eof { raise End_of_file }
+
+and value = parse
+ | value { let s = lexeme lexbuf in
+ String.sub s 1 (String.length s - 2)}
+ | _ { value lexbuf }
+ | eof { raise End_of_file }
+
+and split_list = parse
+ | list_value {
+ let h = lexeme lexbuf in
+ h::(split_list lexbuf)
+ }
+ | _ { split_list lexbuf}
+ | eof {[]}
+
+{
+ let get_config f =
+ let ci = open_in f in
+ let lb = from_channel ci in
+ let result = ref [] in
+ begin try
+ while true do
+ let r = next_config lb in
+ prerr_endline (fst r);
+ result := r::!result
+ done
+ with End_of_file -> close_in ci;
+ end;
+ !result
+
+ let split s =
+ let cs = ref "" in
+ let l = ref [] in
+ String.iter
+ (fun c -> if c = ';' then begin l:= !cs::!l; cs:="" end
+ else cs := !cs^(Char.escaped c))
+ s;
+ if !cs ="" then !l else !cs::!l
+}