equal
deleted
inserted
replaced
37 |
37 |
38 val first_upper = implode o nth_map 0 Symbol.to_ascii_upper o explode; |
38 val first_upper = implode o nth_map 0 Symbol.to_ascii_upper o explode; |
39 val first_lower = implode o nth_map 0 Symbol.to_ascii_lower o explode; |
39 val first_lower = implode o nth_map 0 Symbol.to_ascii_lower o explode; |
40 |
40 |
41 val dest_name = |
41 val dest_name = |
42 apfst NameSpace.implode o split_last o fst o split_last o NameSpace.explode; |
42 apfst Long_Name.implode o split_last o fst o split_last o Long_Name.explode; |
43 |
43 |
44 |
44 |
45 (** purification **) |
45 (** purification **) |
46 |
46 |
47 fun purify_name upper lower = |
47 fun purify_name upper lower = |
78 explode |
78 explode |
79 (*FIMXE should disappear as soon as hierarchical theory name spaces are available*) |
79 (*FIMXE should disappear as soon as hierarchical theory name spaces are available*) |
80 #> Symbol.scanner "Malformed name" |
80 #> Symbol.scanner "Malformed name" |
81 (Scan.repeat ($$ "_" |-- $$ "_" >> (fn _ => ".") || Scan.one Symbol.is_regular)) |
81 (Scan.repeat ($$ "_" |-- $$ "_" >> (fn _ => ".") || Scan.one Symbol.is_regular)) |
82 #> implode |
82 #> implode |
83 #> NameSpace.explode |
83 #> Long_Name.explode |
84 #> map (purify_name true false); |
84 #> map (purify_name true false); |
85 |
85 |
86 (*FIMXE non-canonical function treating non-canonical names*) |
86 (*FIMXE non-canonical function treating non-canonical names*) |
87 fun purify_base _ "op &" = "and" |
87 fun purify_base _ "op &" = "and" |
88 | purify_base _ "op |" = "or" |
88 | purify_base _ "op |" = "or" |
99 |
99 |
100 val purify_sym = purify_base false; |
100 val purify_sym = purify_base false; |
101 |
101 |
102 fun check_modulename mn = |
102 fun check_modulename mn = |
103 let |
103 let |
104 val mns = NameSpace.explode mn; |
104 val mns = Long_Name.explode mn; |
105 val mns' = map (purify_name true false) mns; |
105 val mns' = map (purify_name true false) mns; |
106 in |
106 in |
107 if mns' = mns then mn else error ("Invalid module name: " ^ quote mn ^ "\n" |
107 if mns' = mns then mn else error ("Invalid module name: " ^ quote mn ^ "\n" |
108 ^ "perhaps try " ^ quote (NameSpace.implode mns')) |
108 ^ "perhaps try " ^ quote (Long_Name.implode mns')) |
109 end; |
109 end; |
110 |
110 |
111 |
111 |
112 (** variable name contexts **) |
112 (** variable name contexts **) |
113 |
113 |
153 fun mk_name_module reserved_names module_prefix module_alias program = |
153 fun mk_name_module reserved_names module_prefix module_alias program = |
154 let |
154 let |
155 fun mk_alias name = case module_alias name |
155 fun mk_alias name = case module_alias name |
156 of SOME name' => name' |
156 of SOME name' => name' |
157 | NONE => name |
157 | NONE => name |
158 |> NameSpace.explode |
158 |> Long_Name.explode |
159 |> map (fn name => (the_single o fst) (Name.variants [name] reserved_names)) |
159 |> map (fn name => (the_single o fst) (Name.variants [name] reserved_names)) |
160 |> NameSpace.implode; |
160 |> Long_Name.implode; |
161 fun mk_prefix name = case module_prefix |
161 fun mk_prefix name = case module_prefix |
162 of SOME module_prefix => NameSpace.append module_prefix name |
162 of SOME module_prefix => Long_Name.append module_prefix name |
163 | NONE => name; |
163 | NONE => name; |
164 val tab = |
164 val tab = |
165 Symtab.empty |
165 Symtab.empty |
166 |> Graph.fold ((fn name => Symtab.default (name, (mk_alias #> mk_prefix) name)) |
166 |> Graph.fold ((fn name => Symtab.default (name, (mk_alias #> mk_prefix) name)) |
167 o fst o dest_name o fst) |
167 o fst o dest_name o fst) |