equal
deleted
inserted
replaced
18 { |
18 { |
19 /* construct trees */ |
19 /* construct trees */ |
20 |
20 |
21 val empty: Markup_Tree = new Markup_Tree(Branches.empty) |
21 val empty: Markup_Tree = new Markup_Tree(Branches.empty) |
22 |
22 |
23 def merge(trees: List[Markup_Tree], range: Text.Range, elements: Document.Elements): Markup_Tree = |
23 def merge(trees: List[Markup_Tree], range: Text.Range, elements: Markup.Elements): Markup_Tree = |
24 (empty /: trees)(_.merge(_, range, elements)) |
24 (empty /: trees)(_.merge(_, range, elements)) |
25 |
25 |
26 def merge_disjoint(trees: List[Markup_Tree]): Markup_Tree = |
26 def merge_disjoint(trees: List[Markup_Tree]): Markup_Tree = |
27 trees match { |
27 trees match { |
28 case Nil => empty |
28 case Nil => empty |
52 rev_markup: List[XML.Elem], |
52 rev_markup: List[XML.Elem], |
53 subtree: Markup_Tree) |
53 subtree: Markup_Tree) |
54 { |
54 { |
55 def markup: List[XML.Elem] = rev_markup.reverse |
55 def markup: List[XML.Elem] = rev_markup.reverse |
56 |
56 |
57 def filter_markup(elements: Document.Elements): List[XML.Elem] = |
57 def filter_markup(elements: Markup.Elements): List[XML.Elem] = |
58 { |
58 { |
59 var result: List[XML.Elem] = Nil |
59 var result: List[XML.Elem] = Nil |
60 for { elem <- rev_markup; if (elements(elem.name)) } |
60 for { elem <- rev_markup; if (elements(elem.name)) } |
61 result ::= elem |
61 result ::= elem |
62 result.toList |
62 result.toList |
159 } |
159 } |
160 } |
160 } |
161 } |
161 } |
162 } |
162 } |
163 |
163 |
164 def merge(other: Markup_Tree, root_range: Text.Range, elements: Document.Elements): Markup_Tree = |
164 def merge(other: Markup_Tree, root_range: Text.Range, elements: Markup.Elements): Markup_Tree = |
165 { |
165 { |
166 def merge_trees(tree1: Markup_Tree, tree2: Markup_Tree): Markup_Tree = |
166 def merge_trees(tree1: Markup_Tree, tree2: Markup_Tree): Markup_Tree = |
167 (tree1 /: tree2.branches)( |
167 (tree1 /: tree2.branches)( |
168 { case (tree, (range, entry)) => |
168 { case (tree, (range, entry)) => |
169 if (!range.overlaps(root_range)) tree |
169 if (!range.overlaps(root_range)) tree |
179 if (tree1.is_empty) tree2 |
179 if (tree1.is_empty) tree2 |
180 else merge_trees(tree1, tree2) |
180 else merge_trees(tree1, tree2) |
181 } |
181 } |
182 } |
182 } |
183 |
183 |
184 def cumulate[A](root_range: Text.Range, root_info: A, elements: Document.Elements, |
184 def cumulate[A](root_range: Text.Range, root_info: A, elements: Markup.Elements, |
185 result: (A, Text.Markup) => Option[A]): List[Text.Info[A]] = |
185 result: (A, Text.Markup) => Option[A]): List[Text.Info[A]] = |
186 { |
186 { |
187 def results(x: A, entry: Entry): Option[A] = |
187 def results(x: A, entry: Entry): Option[A] = |
188 { |
188 { |
189 var y = x |
189 var y = x |
228 } |
228 } |
229 traverse(root_range.start, |
229 traverse(root_range.start, |
230 List((Text.Info(root_range, root_info), overlapping(root_range).toList))) |
230 List((Text.Info(root_range, root_info), overlapping(root_range).toList))) |
231 } |
231 } |
232 |
232 |
233 def to_XML(root_range: Text.Range, text: CharSequence, elements: Document.Elements): XML.Body = |
233 def to_XML(root_range: Text.Range, text: CharSequence, elements: Markup.Elements): XML.Body = |
234 { |
234 { |
235 def make_text(start: Text.Offset, stop: Text.Offset): XML.Body = |
235 def make_text(start: Text.Offset, stop: Text.Offset): XML.Body = |
236 if (start == stop) Nil |
236 if (start == stop) Nil |
237 else List(XML.Text(text.subSequence(start, stop).toString)) |
237 else List(XML.Text(text.subSequence(start, stop).toString)) |
238 |
238 |