summaryrefslogtreecommitdiff
path: root/ocamldoc/odoc_text_lexer.mll
diff options
context:
space:
mode:
Diffstat (limited to 'ocamldoc/odoc_text_lexer.mll')
-rw-r--r--ocamldoc/odoc_text_lexer.mll730
1 files changed, 0 insertions, 730 deletions
diff --git a/ocamldoc/odoc_text_lexer.mll b/ocamldoc/odoc_text_lexer.mll
deleted file mode 100644
index f21ec9ae39..0000000000
--- a/ocamldoc/odoc_text_lexer.mll
+++ /dev/null
@@ -1,730 +0,0 @@
-{
-(***********************************************************************)
-(* OCamldoc *)
-(* *)
-(* Maxence Guesdon, projet Cristal, INRIA Rocquencourt *)
-(* *)
-(* Copyright 2001 Institut National de Recherche en Informatique et *)
-(* en Automatique. All rights reserved. This file is distributed *)
-(* under the terms of the Q Public License version 1.0. *)
-(* *)
-(***********************************************************************)
-
-(* $Id$ *)
-
-(** The lexer for string to build text structures. *)
-
-open Lexing
-open Odoc_text_parser
-
-let line_number = ref 0
-let char_number = ref 0
-
-let string_buffer = Buffer.create 32
-
-(** Fonction de remise à zéro de la chaine de caractères tampon *)
-let reset_string_buffer () = Buffer.reset string_buffer
-
-(** Fonction d'ajout d'un caractère dans la chaine de caractères tampon *)
-let ajout_char_string = Buffer.add_char string_buffer
-
-(** Add a string to the buffer. *)
-let ajout_string = Buffer.add_string string_buffer
-
-let lecture_string () = Buffer.contents string_buffer
-
-
-(** the variable which will contain the description string.
- Is initialized when we encounter the start of a special comment. *)
-
-let description = ref ""
-
-let blank = "[ \013\009\012]"
-
-
-let print_DEBUG s = print_string s; print_newline ()
-
-(** this flag indicates whether we're in a string between begin_code and end_code tokens, to
- remember the number of open '[' and handle ']' correctly. *)
-let open_brackets = ref 0
-
-(** this flag indicates if we're in verbatim mode or not, to handle any special expression
- like a string when we're in verbatim mode.*)
-let verb_mode = ref false
-
-(** this flag indicates if we're in latex mode or not, to handle any special expression
- like a string when we're in latex mode.*)
-let latex_mode = ref false
-
-(** this flag indicates if we're in shortcut list mode or not, to handle end_shortcut_list correctly.*)
-let shortcut_list_mode = ref false
-
-(** this flag indicates if we're in an element reference. *)
-let ele_ref_mode = ref false
-
-(** this flag indicates if we're in a preformatted code string. *)
-let code_pre_mode = ref false
-
-let init () =
- open_brackets := 0;
- verb_mode := false;
- latex_mode := false;
- shortcut_list_mode := false;
- ele_ref_mode := false ;
- code_pre_mode := false ;
- line_number := 0 ;
- char_number := 0
-
-let incr_cpts lexbuf =
- let s = Lexing.lexeme lexbuf in
- let l = Str.split_delim (Str.regexp_string "\n") s in
- match List.rev l with
- [] -> () (* should not occur *)
- | [s2] -> (* no newline *)
- char_number := !char_number + (String.length s2)
- | s2 :: _ ->
- line_number := !line_number + ((List.length l) - 1) ;
- char_number := String.length s2
-
-}
-
-(** html marks, to use as alternative possible special strings *)
-
-let html_bold = "<"('b'|'B')">"
-let html_end_bold = "</"('b'|'B')">"
-let html_italic = "<"('i'|'I')">"
-let html_end_italic = "</"('i'|'I')">"
-let html_title = "<"('h'|'H')(['0'-'9'])+">"
-let html_end_title = "</"('h'|'H')(['0'-'9'])+">"
-let html_list = "<"('u'|'U')('l'|'L')">"
-let html_end_list = "</"('u'|'U')('l'|'L')">"
-let html_enum = "<"('o'|'O')('l'|'L')">"
-let html_end_enum = "</"('o'|'O')('l'|'L')">"
-let html_item = "<"('l'|'L')('i'|'I')">"
-let html_end_item = "</"('l'|'L')('i'|'I')">"
-let html_code = "<"('c'|'C')('o'|'O')('d'|'D')('e'|'E')">"
-let html_end_code = "</"('c'|'C')('o'|'O')('d'|'D')('e'|'E')">"
-let html_center = "<"('c'|'C')('e'|'E')('n'|'N')('t'|'T')('e'|'E')('r'|'R')">"
-let html_end_center = "</"('c'|'C')('e'|'E')('n'|'N')('t'|'T')('e'|'E')('r'|'R')">"
-let html_left = "<"('l'|'L')('e'|'E')('f'|'F')('t'|'T')">"
-let html_end_left = "</"('l'|'L')('e'|'E')('f'|'F')('t'|'T')">"
-let html_right = "<"('r'|'R')('i'|'I')('g'|'G')('h'|'H')('t'|'T')">"
-let html_end_right = "</"('r'|'R')('i'|'I')('g'|'G')('h'|'H')('t'|'T')">"
-
-
-let blank = [' ' '\013' '\009' '\012']
-let blank_nl = [' ' '\013' '\009' '\012' '\010']
-let label = ['a'-'z']+['a'-'z' 'A'-'Z' '0'-'9' '_']*
-
-(** special strings *)
-
-let end = "}"
- | html_end_bold
- | html_end_italic
- | html_end_title
- | html_end_list
- | html_end_enum
- | html_end_item
- | html_end_center
-let begin_title =
- ("{" ['0'-'9']+(":"label)? blank_nl)
- | html_title
-
-let begin_bold = "{b"blank_nl | html_bold
-let begin_emp = "{e"blank_nl
-let begin_center = "{C"blank_nl | html_center
-let begin_left = "{L"blank_nl
-let begin_right = "{R"blank_nl
-let begin_italic = "{i"blank_nl | html_italic
-let begin_list = "{ul" | html_list
-let begin_enum = "{ol" | html_enum
-let begin_item = "{li"blank_nl | "{- " | html_item
-let begin_link = "{{:"
-let begin_latex = "{%"blank_nl
-let end_latex = "%}"
-let begin_code = "[" | html_code
-let end_code = "]" | html_end_code
-let begin_code_pre = "{["
-let end_code_pre = "]}"
-let begin_verb = "{v"blank_nl
-let end_verb = blank_nl"v}"
-
-let begin_ele_ref = "{!"blank_nl | "{!"
-let begin_val_ref = "{!val:"blank_nl | "{!val:"
-let begin_typ_ref = "{!type:"blank_nl | "{!type:"
-let begin_exc_ref = "{!exception:"blank_nl | "{!exception:"
-let begin_mod_ref = "{!module:"blank_nl | "{!module:"
-let begin_modt_ref = "{!modtype:"blank_nl | "{!modtype:"
-let begin_cla_ref = "{!class:"blank_nl | "{!class:"
-let begin_clt_ref = "{!classtype:"blank_nl | "{!classtype:"
-let begin_att_ref = "{!attribute:"blank_nl | "{!attribute:"
-let begin_met_ref = "{!method:"blank_nl | "{!method:"
-let begin_sec_ref = "{!section:"blank_nl | "{!section:"
-
-
-let begin_superscript = "{^"blank_nl | "{^"
-let begin_subscript = "{_"blank_nl | "{_"
-
-let shortcut_list_item = '\n'blank*"- "
-let shortcut_enum_item = '\n'blank*"+ "
-let end_shortcut_list = '\n'(blank*'\n')+
-
-rule main = parse
-| "\\{"
-| "\\}"
-| "\\["
-| "\\]"
- {
- incr_cpts lexbuf ;
- let s = Lexing.lexeme lexbuf in
- Char (String.sub s 1 1)
- }
-
-| end
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or
- (!open_brackets >= 1) then
- Char (Lexing.lexeme lexbuf)
- else
- let _ =
- if !ele_ref_mode then
- ele_ref_mode := false
- in
- END
- }
-| begin_title
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or
- (!open_brackets >= 1) or !ele_ref_mode then
- Char (Lexing.lexeme lexbuf)
- else
- let s = Lexing.lexeme lexbuf in
- try
- (* chech if the "{..." or html_title mark was used. *)
- if s.[0] = '<' then
- let (n, l) = (2, (String.length s - 3)) in
- let s2 = String.sub s n l in
- Title (int_of_string s2, None)
- else
- let (n, l) = (1, (String.length s - 2)) in
- let s2 = String.sub s n l in
- try
- let i = String.index s2 ':' in
- let s_n = String.sub s2 0 i in
- let s_label = String.sub s2 (i+1) (l-i-1) in
- Title (int_of_string s_n, Some s_label)
- with
- Not_found ->
- Title (int_of_string s2, None)
- with
- _ ->
- Title (1, None)
- }
-| begin_bold
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or
- (!open_brackets >= 1) or !ele_ref_mode then
- Char (Lexing.lexeme lexbuf)
- else
- BOLD
- }
-| begin_italic
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or
- (!open_brackets >= 1) or !ele_ref_mode then
- Char (Lexing.lexeme lexbuf)
- else
- ITALIC
- }
-| begin_link
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or
- (!open_brackets >= 1) or !ele_ref_mode then
- Char (Lexing.lexeme lexbuf)
- else
- LINK
- }
-| begin_emp
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or
- (!open_brackets >= 1) or !ele_ref_mode then
- Char (Lexing.lexeme lexbuf)
- else
- EMP
- }
-| begin_superscript
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or
- (!open_brackets >= 1) or !ele_ref_mode then
- Char (Lexing.lexeme lexbuf)
- else
- SUPERSCRIPT
- }
-| begin_subscript
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or
- (!open_brackets >= 1) or !ele_ref_mode then
- Char (Lexing.lexeme lexbuf)
- else
- SUBSCRIPT
- }
-| begin_center
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or
- (!open_brackets >= 1) or !ele_ref_mode then
- Char (Lexing.lexeme lexbuf)
- else
- CENTER
- }
-| begin_left
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or
- (!open_brackets >= 1) or !ele_ref_mode then
- Char (Lexing.lexeme lexbuf)
- else
- LEFT
- }
-| begin_right
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode
- or (!open_brackets >= 1) or !ele_ref_mode then
- Char (Lexing.lexeme lexbuf)
- else
- RIGHT
- }
-| begin_list
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or
- (!open_brackets >= 1) or !ele_ref_mode then
- Char (Lexing.lexeme lexbuf)
- else
- LIST
- }
-| begin_enum
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or
- (!open_brackets >= 1) or !ele_ref_mode then
- Char (Lexing.lexeme lexbuf)
- else
- ENUM
- }
-| begin_item
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or
- (!open_brackets >= 1) or !ele_ref_mode then
- Char (Lexing.lexeme lexbuf)
- else
- ITEM
- }
-| begin_latex
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or
- (!open_brackets >= 1) or !ele_ref_mode then
- Char (Lexing.lexeme lexbuf)
- else
- (
- latex_mode := true;
- LATEX
- )
- }
-| end_latex
- {
- incr_cpts lexbuf ;
- if !verb_mode or (!open_brackets >= 1) or !code_pre_mode or
- !ele_ref_mode then
- Char (Lexing.lexeme lexbuf)
- else
- (
- latex_mode := false;
- END_LATEX
- )
- }
-| begin_code end_code
- {
- incr_cpts lexbuf ;
- Char (Lexing.lexeme lexbuf)
- }
-
-| begin_code
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or !ele_ref_mode then
- Char (Lexing.lexeme lexbuf)
- else
- if !open_brackets <= 0 then
- (
- open_brackets := 1;
- CODE
- )
- else
- (
- incr open_brackets;
- Char (Lexing.lexeme lexbuf)
- )
- }
-| end_code
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or !ele_ref_mode then
- Char (Lexing.lexeme lexbuf)
- else
- if !open_brackets > 1 then
- (
- decr open_brackets;
- Char "]"
- )
- else
- (
- open_brackets := 0;
- END_CODE
- )
- }
-
-| begin_code_pre end_code_pre
- {
- incr_cpts lexbuf ;
- Char (Lexing.lexeme lexbuf)
- }
-
-| begin_code_pre
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or !ele_ref_mode then
- Char (Lexing.lexeme lexbuf)
- else
- (
- code_pre_mode := true;
- CODE_PRE
- )
- }
-| end_code_pre
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !ele_ref_mode then
- Char (Lexing.lexeme lexbuf)
- else
- if !open_brackets >= 1 then
- (
- lexbuf.Lexing.lex_curr_pos <- lexbuf.Lexing.lex_curr_pos - 1;
- lexbuf.Lexing.lex_curr_p <-
- { lexbuf.Lexing.lex_curr_p with
- pos_cnum = lexbuf.Lexing.lex_curr_p.pos_cnum - 1
- } ;
- decr char_number ;
- if !open_brackets > 1 then
- (
- decr open_brackets;
- Char "]"
- )
- else
- (
- open_brackets := 0;
- END_CODE
- )
- )
- else
- if !code_pre_mode then
- (
- code_pre_mode := false;
- END_CODE_PRE
- )
- else
- Char (Lexing.lexeme lexbuf)
- }
-
-| begin_ele_ref end
- {
- incr_cpts lexbuf ;
- Char (Lexing.lexeme lexbuf)
- }
-
-| begin_ele_ref
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or !open_brackets >= 1 then
- Char (Lexing.lexeme lexbuf)
- else
- if not !ele_ref_mode then
- (
- ele_ref_mode := true;
- ELE_REF
- )
- else
- (
- Char (Lexing.lexeme lexbuf)
- )
- }
-
-
-| begin_val_ref
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or !open_brackets >= 1 then
- Char (Lexing.lexeme lexbuf)
- else
- if not !ele_ref_mode then
- (
- ele_ref_mode := true;
- VAL_REF
- )
- else
- (
- Char (Lexing.lexeme lexbuf)
- )
- }
-
-| begin_typ_ref
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or !open_brackets >= 1 then
- Char (Lexing.lexeme lexbuf)
- else
- if not !ele_ref_mode then
- (
- ele_ref_mode := true;
- TYP_REF
- )
- else
- (
- Char (Lexing.lexeme lexbuf)
- )
- }
-
-| begin_exc_ref
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or !open_brackets >= 1 then
- Char (Lexing.lexeme lexbuf)
- else
- if not !ele_ref_mode then
- (
- ele_ref_mode := true;
- EXC_REF
- )
- else
- (
- Char (Lexing.lexeme lexbuf)
- )
- }
-
-| begin_mod_ref
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or !open_brackets >= 1 then
- Char (Lexing.lexeme lexbuf)
- else
- if not !ele_ref_mode then
- (
- ele_ref_mode := true;
- MOD_REF
- )
- else
- (
- Char (Lexing.lexeme lexbuf)
- )
- }
-
-| begin_modt_ref
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or !open_brackets >= 1 then
- Char (Lexing.lexeme lexbuf)
- else
- if not !ele_ref_mode then
- (
- ele_ref_mode := true;
- MODT_REF
- )
- else
- (
- Char (Lexing.lexeme lexbuf)
- )
- }
-
-| begin_cla_ref
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or !open_brackets >= 1 then
- Char (Lexing.lexeme lexbuf)
- else
- if not !ele_ref_mode then
- (
- ele_ref_mode := true;
- CLA_REF
- )
- else
- (
- Char (Lexing.lexeme lexbuf)
- )
- }
-
-| begin_clt_ref
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or !open_brackets >= 1 then
- Char (Lexing.lexeme lexbuf)
- else
- if not !ele_ref_mode then
- (
- ele_ref_mode := true;
- CLT_REF
- )
- else
- (
- Char (Lexing.lexeme lexbuf)
- )
- }
-
-| begin_att_ref
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or !open_brackets >= 1 then
- Char (Lexing.lexeme lexbuf)
- else
- if not !ele_ref_mode then
- (
- ele_ref_mode := true;
- ATT_REF
- )
- else
- (
- Char (Lexing.lexeme lexbuf)
- )
- }
-
-| begin_met_ref
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or !open_brackets >= 1 then
- Char (Lexing.lexeme lexbuf)
- else
- if not !ele_ref_mode then
- (
- ele_ref_mode := true;
- MET_REF
- )
- else
- (
- Char (Lexing.lexeme lexbuf)
- )
- }
-
-| begin_sec_ref
- {
- incr_cpts lexbuf ;
- if !verb_mode or !latex_mode or !code_pre_mode or !open_brackets >= 1 then
- Char (Lexing.lexeme lexbuf)
- else
- if not !ele_ref_mode then
- (
- ele_ref_mode := true;
- SEC_REF
- )
- else
- (
- Char (Lexing.lexeme lexbuf)
- )
- }
-
-
-| begin_verb
- {
- incr_cpts lexbuf ;
- if !latex_mode or (!open_brackets >= 1) or !code_pre_mode or !ele_ref_mode then
- Char (Lexing.lexeme lexbuf)
- else
- (
- verb_mode := true;
- VERB
- )
- }
-| end_verb
- {
- incr_cpts lexbuf ;
- if !latex_mode or (!open_brackets >= 1) or !code_pre_mode or !ele_ref_mode then
- Char (Lexing.lexeme lexbuf)
- else
- (
- verb_mode := false;
- END_VERB
- )
- }
-
-| shortcut_list_item
- {
- incr_cpts lexbuf ;
- if !shortcut_list_mode then
- (
- SHORTCUT_LIST_ITEM
- )
- else
- (
- shortcut_list_mode := true;
- BEGIN_SHORTCUT_LIST_ITEM
- )
- }
-
-| shortcut_enum_item
- {
- incr_cpts lexbuf ;
- if !shortcut_list_mode then
- SHORTCUT_ENUM_ITEM
- else
- (
- shortcut_list_mode := true;
- BEGIN_SHORTCUT_ENUM_ITEM
- )
- }
-| end_shortcut_list
- {
- incr_cpts lexbuf ;
- lexbuf.Lexing.lex_curr_pos <- lexbuf.Lexing.lex_curr_pos - 1;
- lexbuf.Lexing.lex_curr_p <-
- { lexbuf.Lexing.lex_curr_p with
- pos_cnum = lexbuf.Lexing.lex_curr_p.pos_cnum - 1 ;
- } ;
- decr line_number ;
- if !shortcut_list_mode then
- (
- shortcut_list_mode := false;
- (* go back one char to re-use the last '\n', so we can
- restart another shortcut-list with a single blank line,
- and not two.*)
- END_SHORTCUT_LIST
- )
- else
- BLANK_LINE
- }
-
-| eof { EOF }
-
-| "{"
- {
- incr_cpts lexbuf ;
- if !latex_mode or (!open_brackets >= 1) or !code_pre_mode or !ele_ref_mode then
- Char (Lexing.lexeme lexbuf)
- else
- ERROR
- }
-| _
- {
- incr_cpts lexbuf ;
- Char (Lexing.lexeme lexbuf)
- }
-
-