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 |