src/Tools/jEdit/src/isabelle_sidekick.scala
changeset 58542 19e062fbfea0
parent 58539 b31af96b7f5b
child 58546 72e2b2a609c4
equal deleted inserted replaced
58541:48e23e342415 58542:19e062fbfea0
   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