equal
deleted
inserted
replaced
104 |
104 |
105 fun merge_tokentrtabs tabs1 tabs2 = |
105 fun merge_tokentrtabs tabs1 tabs2 = |
106 let |
106 let |
107 fun eq_tr ((c1, (_, s1)), (c2, (_, s2))) = c1 = c2 andalso s1 = s2; |
107 fun eq_tr ((c1, (_, s1)), (c2, (_, s2))) = c1 = c2 andalso s1 = s2; |
108 |
108 |
|
109 fun name (s, _) = implode (tl (explode s)); |
|
110 |
109 fun merge mode = |
111 fun merge mode = |
110 let |
112 let |
111 val trs1 = assocs tabs1 mode; |
113 val trs1 = assocs tabs1 mode; |
112 val trs2 = assocs tabs2 mode; |
114 val trs2 = assocs tabs2 mode; |
113 val trs = gen_distinct eq_tr (trs1 @ trs2); |
115 val trs = gen_distinct eq_tr (trs1 @ trs2); |
114 in |
116 in |
115 (case gen_duplicates eq_fst trs of |
117 (case gen_duplicates eq_fst trs of |
116 [] => (mode, trs) |
118 [] => (mode, trs) |
117 | dups => error ("More than one token translation function in mode " ^ |
119 | dups => error ("More than one token translation function in mode " ^ |
118 quote mode ^ " for " ^ commas_quote (map fst dups))) |
120 quote mode ^ " for " ^ commas_quote (map name dups))) |
119 end; |
121 end; |
120 in |
122 in |
121 map merge (distinct (map fst (tabs1 @ tabs2))) |
123 map merge (distinct (map fst (tabs1 @ tabs2))) |
122 end; |
124 end; |
123 |
125 |