doc-src/antiquote_setup.ML
changeset 26897 044619358d3a
parent 26894 1120f6cc10b0
child 26903 0542898ab667
equal deleted inserted replaced
26896:d6fb318ba24e 26897:044619358d3a
    13 
    13 
    14 (* misc utils *)
    14 (* misc utils *)
    15 
    15 
    16 val clean_string = translate_string
    16 val clean_string = translate_string
    17   (fn "_" => "\\_"
    17   (fn "_" => "\\_"
       
    18     | "<" => "$<$"
    18     | ">" => "$>$"
    19     | ">" => "$>$"
    19     | "#" => "\\#"
    20     | "#" => "\\#"
    20     | "{" => "\\{"
    21     | "{" => "\\{"
    21     | "}" => "\\}"
    22     | "}" => "\\}"
    22     | c => c);
    23     | c => c);
       
    24 
       
    25 fun clean_name "\\<dots>" = "dots"
       
    26   | clean_name ".." = "ddot"
       
    27   | clean_name "." = "dot"
       
    28   | clean_name "{" = "braceleft"
       
    29   | clean_name "}" = "braceright"
       
    30   | clean_name s = s;
    23 
    31 
    24 val str_of_source = space_implode " " o map Args.string_of o #2 o #1 o Args.dest_src;
    32 val str_of_source = space_implode " " o map Args.string_of o #2 o #1 o Args.dest_src;
    25 
    33 
    26 fun tweak_line s =
    34 fun tweak_line s =
    27   if ! O.display then s else Symbol.strip_blanks s;
    35   if ! O.display then s else Symbol.strip_blanks s;
   145   in defined thy o intern thy end;
   153   in defined thy o intern thy end;
   146 
   154 
   147 val arg = enclose "{" "}" o clean_string;
   155 val arg = enclose "{" "}" o clean_string;
   148 
   156 
   149 fun output_entity check markup index kind ctxt (logic, name) =
   157 fun output_entity check markup index kind ctxt (logic, name) =
   150   if check ctxt name then
   158   let
   151     (case index of
   159     val hyper_name = "{" ^ NameSpace.append kind (NameSpace.append logic (clean_name name)) ^ "}";
   152       NONE => ""
   160     val hyper =
   153     | SOME is_def =>
   161       enclose ("\\hyperlink" ^ hyper_name ^ "{") "}" #>
   154         "\\index" ^ (if is_def then "def" else "ref") ^ arg logic ^ arg kind ^ arg name)
   162       index = SOME true ? enclose ("\\hypertarget" ^ hyper_name ^ "{") "}";
   155     ^
   163     val idx =
   156     (Output.output name
   164       (case index of
   157       |> (if markup = "" then I else enclose ("\\" ^ markup ^ "{") "}")                                    
   165         NONE => ""
   158       |> (if ! O.quotes then quote else I)
   166       | SOME is_def =>
   159       |> (if ! O.display then enclose "\\begin{isabelle}%\n" "%\n\\end{isabelle}"
   167           "\\index" ^ (if is_def then "def" else "ref") ^ arg logic ^ arg kind ^ arg name);
   160           else enclose "\\mbox{\\isa{" "}}"))
   168   in
   161   else error ("Undefined " ^ kind ^ " " ^ quote name);
   169     if check ctxt name then
       
   170       idx ^
       
   171       (Output.output name
       
   172         |> (if markup = "" then I else enclose ("\\" ^ markup ^ "{") "}")
       
   173         |> (if ! O.quotes then quote else I)
       
   174         |> (if ! O.display then enclose "\\begin{isabelle}%\n" "%\n\\end{isabelle}"
       
   175             else hyper o enclose "\\mbox{\\isa{" "}}"))
       
   176     else error ("Undefined " ^ kind ^ " " ^ quote name)
       
   177   end;
   162 
   178 
   163 fun entity check markup index kind =
   179 fun entity check markup index kind =
   164   O.args (Scan.lift (Scan.optional (Args.parens Args.name) "" -- Args.name))
   180   O.args (Scan.lift (Scan.optional (Args.parens Args.name) "" -- Args.name))
   165     (K (output_entity check markup index kind));
   181     (K (output_entity check markup index kind));
   166     
   182 
   167 fun entity_antiqs check markup kind =
   183 fun entity_antiqs check markup kind =
   168  [(kind, entity check markup NONE kind),
   184  [(kind, entity check markup NONE kind),
   169   (kind ^ "_def", entity check markup (SOME true) kind), 
   185   (kind ^ "_def", entity check markup (SOME true) kind),
   170   (kind ^ "_ref", entity check markup (SOME false) kind)];
   186   (kind ^ "_ref", entity check markup (SOME false) kind)];
   171 
   187 
   172 in
   188 in
   173 
   189 
   174 val _ = O.add_commands
   190 val _ = O.add_commands