src/Tools/jEdit/src/fold_handling.scala
changeset 75393 87ebf5a50283
parent 73909 1d0d9772fff0
equal deleted inserted replaced
75388:b3ca4a6ed74b 75393:87ebf5a50283
    16 import scala.jdk.CollectionConverters._
    16 import scala.jdk.CollectionConverters._
    17 
    17 
    18 import org.gjt.sp.jedit.buffer.{JEditBuffer, FoldHandler}
    18 import org.gjt.sp.jedit.buffer.{JEditBuffer, FoldHandler}
    19 
    19 
    20 
    20 
    21 object Fold_Handling
    21 object Fold_Handling {
    22 {
       
    23   /* input: dynamic line context  */
    22   /* input: dynamic line context  */
    24 
    23 
    25   class Fold_Handler extends FoldHandler("isabelle")
    24   class Fold_Handler extends FoldHandler("isabelle") {
    26   {
       
    27     override def equals(other: Any): Boolean =
    25     override def equals(other: Any): Boolean =
    28       other match {
    26       other match {
    29         case that: Fold_Handler => true
    27         case that: Fold_Handler => true
    30         case _ => false
    28         case _ => false
    31       }
    29       }
    32 
    30 
    33     override def getFoldLevel(buffer: JEditBuffer, line: Int, seg: Segment): Int =
    31     override def getFoldLevel(buffer: JEditBuffer, line: Int, seg: Segment): Int =
    34       Token_Markup.Line_Context.after(buffer, line).structure.depth max 0
    32       Token_Markup.Line_Context.after(buffer, line).structure.depth max 0
    35 
    33 
    36     override def getPrecedingFoldLevels(
    34     override def getPrecedingFoldLevels(
    37       buffer: JEditBuffer, line: Int, seg: Segment, level: Int): JList[Integer] =
    35       buffer: JEditBuffer,
    38     {
    36       line: Int,
       
    37       seg: Segment, level: Int
       
    38     ): JList[Integer] = {
    39       val structure = Token_Markup.Line_Context.after(buffer, line).structure
    39       val structure = Token_Markup.Line_Context.after(buffer, line).structure
    40       val result =
    40       val result =
    41         if (line > 0 && structure.command)
    41         if (line > 0 && structure.command)
    42           Range.inclusive(line - 1, 0, -1).iterator.
    42           Range.inclusive(line - 1, 0, -1).iterator.
    43             map(i => Token_Markup.Line_Context.after(buffer, i).structure).
    43             map(i => Token_Markup.Line_Context.after(buffer, i).structure).
    50 
    50 
    51 
    51 
    52   /* output: static document rendering */
    52   /* output: static document rendering */
    53 
    53 
    54   class Document_Fold_Handler(private val rendering: JEdit_Rendering)
    54   class Document_Fold_Handler(private val rendering: JEdit_Rendering)
    55     extends FoldHandler("isabelle-document")
    55   extends FoldHandler("isabelle-document") {
    56   {
       
    57     override def equals(other: Any): Boolean =
    56     override def equals(other: Any): Boolean =
    58       other match {
    57       other match {
    59         case that: Document_Fold_Handler => this.rendering == that.rendering
    58         case that: Document_Fold_Handler => this.rendering == that.rendering
    60         case _ => false
    59         case _ => false
    61       }
    60       }
    62 
    61 
    63     override def getFoldLevel(buffer: JEditBuffer, line: Int, seg: Segment): Int =
    62     override def getFoldLevel(buffer: JEditBuffer, line: Int, seg: Segment): Int = {
    64     {
       
    65       def depth(i: Text.Offset): Int =
    63       def depth(i: Text.Offset): Int =
    66         if (i < 0) 0
    64         if (i < 0) 0
    67         else {
    65         else {
    68           rendering.fold_depth(Text.Range(i, i + 1)) match {
    66           rendering.fold_depth(Text.Range(i, i + 1)) match {
    69             case Text.Info(_, d) :: _ => d
    67             case Text.Info(_, d) :: _ => d