--- a/src/Tools/jEdit/src/text_structure.scala Mon Nov 21 14:47:15 2016 +0100
+++ b/src/Tools/jEdit/src/text_structure.scala Mon Nov 21 14:49:52 2016 +0100
@@ -44,7 +44,7 @@
private val keyword_open = Keyword.theory_goal ++ Keyword.proof_open
private val keyword_close = Keyword.proof_close
- def apply(buffer: JEditBuffer, current_line: Int, prev_line: Int, prev_prev_line: Int,
+ def apply(buffer: JEditBuffer, current_line: Int, prev_line0: Int, prev_prev_line0: Int,
actions: java.util.List[IndentAction])
{
Isabelle.buffer_syntax(buffer) match {
@@ -68,6 +68,11 @@
case Some(Text.Info(_, tok)) => keywords.is_quasi_command(tok)
}
+ val prev_line: Int =
+ Range.inclusive(current_line - 1, 0, -1).find(line =>
+ Token_Markup.Line_Context.prev(buffer, line).get_context == Scan.Finished &&
+ !Token_Markup.Line_Context.next(buffer, line).structure.improper) getOrElse -1
+
def prev_line_command: Option[Token] =
nav.reverse_iterator(prev_line, 1).
collectFirst({ case Text.Info(_, tok) if tok.is_begin_or_command => tok })
@@ -135,33 +140,36 @@
else 0
val indent =
- line_head(current_line) match {
- case None => indent_structure + indent_brackets + indent_extra
- case Some(info @ Text.Info(range, tok)) =>
- if (tok.is_begin ||
- keywords.is_before_command(tok) ||
- keywords.is_command(tok, Keyword.theory)) 0
- else if (keywords.is_command(tok, Keyword.proof_enclose))
- indent_structure + script_indent(info) - indent_offset(tok)
- else if (keywords.is_command(tok, Keyword.proof))
- (indent_structure + script_indent(info) - indent_offset(tok)) max indent_size
- else if (tok.is_command) indent_structure - indent_offset(tok)
- else {
- prev_line_command match {
- case None =>
- val extra =
- (keywords.is_quasi_command(tok), head_is_quasi_command(prev_line)) match {
- case (true, true) | (false, false) => 0
- case (true, false) => - indent_extra
- case (false, true) => indent_extra
- }
- line_indent(prev_line) + indent_brackets + extra - indent_offset(tok)
- case Some(prev_tok) =>
- indent_structure + indent_brackets + indent_size - indent_offset(tok) -
- indent_offset(prev_tok) - indent_indent(prev_tok)
- }
- }
+ if (Token_Markup.Line_Context.prev(buffer, current_line).get_context == Scan.Finished) {
+ line_head(current_line) match {
+ case None => indent_structure + indent_brackets + indent_extra
+ case Some(info @ Text.Info(range, tok)) =>
+ if (tok.is_begin ||
+ keywords.is_before_command(tok) ||
+ keywords.is_command(tok, Keyword.theory)) 0
+ else if (keywords.is_command(tok, Keyword.proof_enclose))
+ indent_structure + script_indent(info) - indent_offset(tok)
+ else if (keywords.is_command(tok, Keyword.proof))
+ (indent_structure + script_indent(info) - indent_offset(tok)) max indent_size
+ else if (tok.is_command) indent_structure - indent_offset(tok)
+ else {
+ prev_line_command match {
+ case None =>
+ val extra =
+ (keywords.is_quasi_command(tok), head_is_quasi_command(prev_line)) match {
+ case (true, true) | (false, false) => 0
+ case (true, false) => - indent_extra
+ case (false, true) => indent_extra
+ }
+ line_indent(prev_line) + indent_brackets + extra - indent_offset(tok)
+ case Some(prev_tok) =>
+ indent_structure + indent_brackets + indent_size - indent_offset(tok) -
+ indent_offset(prev_tok) - indent_indent(prev_tok)
+ }
+ }
+ }
}
+ else line_indent(current_line)
actions.clear()
actions.add(new IndentAction.AlignOffset(indent max 0))