197 new DefaultMutableTreeNode(new Isabelle_Sidekick.Asset(s, start, stop)) |
197 new DefaultMutableTreeNode(new Isabelle_Sidekick.Asset(s, start, stop)) |
198 |
198 |
199 override def parser(buffer: Buffer, syntax: Outer_Syntax, data: SideKickParsedData): Boolean = |
199 override def parser(buffer: Buffer, syntax: Outer_Syntax, data: SideKickParsedData): Boolean = |
200 { |
200 { |
201 var offset = 0 |
201 var offset = 0 |
|
202 var end_offset = 0 |
|
203 |
|
204 var start1: Option[(Int, String, Vector[DefaultMutableTreeNode])] = None |
|
205 var start2: Option[(Int, String)] = None |
|
206 |
|
207 def close1: Unit = |
|
208 start1 match { |
|
209 case Some((start_offset, s, body)) => |
|
210 val node = make_node(s, start_offset, end_offset) |
|
211 body.foreach(node.add(_)) |
|
212 data.root.add(node) |
|
213 start1 = None |
|
214 case None => |
|
215 } |
|
216 |
|
217 def close2: Unit = |
|
218 start2 match { |
|
219 case Some((start_offset, s)) => |
|
220 start1 match { |
|
221 case Some((start_offset1, s1, body)) => |
|
222 val node = make_node(s, start_offset, end_offset) |
|
223 start1 = Some((start_offset1, s1, body :+ node)) |
|
224 case None => |
|
225 } |
|
226 start2 = None |
|
227 case None => |
|
228 } |
202 |
229 |
203 for (line <- split_lines(JEdit_Lib.buffer_text(buffer)) if !stopped) { |
230 for (line <- split_lines(JEdit_Lib.buffer_text(buffer)) if !stopped) { |
204 line match { |
231 line match { |
205 case Heading1(s) => |
232 case Heading1(s) => close2; close1; start1 = Some((offset, s, Vector())) |
206 data.root.add(make_node(s, offset, offset + line.length)) |
233 case Heading2(s) => close2; start2 = Some((offset, s)) |
207 case Heading2(s) => |
|
208 data.root.getLastChild.asInstanceOf[DefaultMutableTreeNode] |
|
209 .add(make_node(s, offset, offset + line.length)) |
|
210 case _ => |
234 case _ => |
211 } |
235 } |
212 offset += line.length + 1 |
236 offset += line.length + 1 |
213 } |
237 if (!line.forall(Character.isSpaceChar(_))) end_offset = offset |
|
238 } |
|
239 if (!stopped) { close2; close1 } |
214 |
240 |
215 true |
241 true |
216 } |
242 } |
217 } |
243 } |
218 |
244 |