equal
deleted
inserted
replaced
158 else if (is_empty) other |
158 else if (is_empty) other |
159 else { |
159 else { |
160 val kinds1 = |
160 val kinds1 = |
161 if (kinds eq other.kinds) kinds |
161 if (kinds eq other.kinds) kinds |
162 else if (kinds.isEmpty) other.kinds |
162 else if (kinds.isEmpty) other.kinds |
163 else (kinds /: other.kinds) { case (m, e) => if (m.isDefinedAt(e._1)) m else m + e } |
163 else other.kinds.foldLeft(kinds) { case (m, e) => if (m.isDefinedAt(e._1)) m else m + e } |
164 val load_commands1 = |
164 val load_commands1 = |
165 if (load_commands eq other.load_commands) load_commands |
165 if (load_commands eq other.load_commands) load_commands |
166 else if (load_commands.isEmpty) other.load_commands |
166 else if (load_commands.isEmpty) other.load_commands |
167 else |
167 else { |
168 (load_commands /: other.load_commands) { |
168 other.load_commands.foldLeft(load_commands) { |
169 case (m, e) => if (m.isDefinedAt(e._1)) m else m + e } |
169 case (m, e) => if (m.isDefinedAt(e._1)) m else m + e |
|
170 } |
|
171 } |
170 new Keywords(kinds1, load_commands1) |
172 new Keywords(kinds1, load_commands1) |
171 } |
173 } |
172 |
174 |
173 |
175 |
174 /* add keywords */ |
176 /* add keywords */ |
185 else load_commands |
187 else load_commands |
186 new Keywords(kinds1, load_commands1) |
188 new Keywords(kinds1, load_commands1) |
187 } |
189 } |
188 |
190 |
189 def add_keywords(header: Thy_Header.Keywords): Keywords = |
191 def add_keywords(header: Thy_Header.Keywords): Keywords = |
190 (this /: header) { |
192 header.foldLeft(this) { |
191 case (keywords, (name, spec)) => |
193 case (keywords, (name, spec)) => |
192 if (spec.kind.isEmpty) |
194 if (spec.kind.isEmpty) |
193 keywords + Symbol.decode(name) + Symbol.encode(name) |
195 keywords + Symbol.decode(name) + Symbol.encode(name) |
194 else |
196 else |
195 keywords + |
197 keywords + |
215 |
217 |
216 |
218 |
217 /* lexicons */ |
219 /* lexicons */ |
218 |
220 |
219 private def make_lexicon(is_minor: Boolean): Scan.Lexicon = |
221 private def make_lexicon(is_minor: Boolean): Scan.Lexicon = |
220 (Scan.Lexicon.empty /: kinds)( |
222 kinds.foldLeft(Scan.Lexicon.empty) { |
221 { |
223 case (lex, (name, kind)) => |
222 case (lex, (name, kind)) => |
224 if ((kind == "" || kind == BEFORE_COMMAND || kind == QUASI_COMMAND) == is_minor) |
223 if ((kind == "" || kind == BEFORE_COMMAND || kind == QUASI_COMMAND) == is_minor) |
225 lex + name |
224 lex + name |
226 else lex |
225 else lex |
227 } |
226 }) |
|
227 |
228 |
228 lazy val minor: Scan.Lexicon = make_lexicon(true) |
229 lazy val minor: Scan.Lexicon = make_lexicon(true) |
229 lazy val major: Scan.Lexicon = make_lexicon(false) |
230 lazy val major: Scan.Lexicon = make_lexicon(false) |
230 } |
231 } |
231 } |
232 } |