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 |