improved handling of extended styles and hard tabs when prover is inactive;
authorwenzelm
Sun, 04 Sep 2011 17:35:34 +0200
changeset 44702 eb00752507c7
parent 44701 0fd2bf8eaa9f
child 44703 f2bfe19239bc
improved handling of extended styles and hard tabs when prover is inactive;
src/Tools/jEdit/src/token_markup.scala
--- a/src/Tools/jEdit/src/token_markup.scala	Sun Sep 04 17:21:11 2011 +0200
+++ b/src/Tools/jEdit/src/token_markup.scala	Sun Sep 04 17:35:34 2011 +0200
@@ -173,42 +173,42 @@
           case _ => Some(Scan.Finished)
         }
       val context1 =
-        if (line_ctxt.isDefined && Isabelle.session.is_ready) {
-          val syntax = Isabelle.session.current_syntax()
-    
-          val (tokens, ctxt1) = syntax.scan_context(line, line_ctxt.get)
-          val context1 = new Line_Context(Some(ctxt1))
-    
-          val extended = extended_styles(line)
-    
-          var offset = 0
-          for (token <- tokens) {
-            val style = Isabelle_Markup.token_markup(syntax, token)
-            val length = token.source.length
-            val end_offset = offset + length
-            if ((offset until end_offset) exists
-                (i => extended.isDefinedAt(i) || line.charAt(i) == '\t')) {
-              for (i <- offset until end_offset) {
-                val style1 =
-                  extended.get(i) match {
-                    case None => style
-                    case Some(ext) => ext(style)
-                  }
-                handler.handleToken(line, style1, i, 1, context1)
-              }
+      {
+        val (styled_tokens, context1) =
+          if (line_ctxt.isDefined && Isabelle.session.is_ready) {
+            val syntax = Isabelle.session.current_syntax()
+            val (tokens, ctxt1) = syntax.scan_context(line, line_ctxt.get)
+            val styled_tokens = tokens.map(tok => (Isabelle_Markup.token_markup(syntax, tok), tok))
+            (styled_tokens, new Line_Context(Some(ctxt1)))
+          }
+          else {
+            val token = Token(Token.Kind.UNPARSED, line.subSequence(0, line.count).toString)
+            (List((JEditToken.NULL, token)), new Line_Context(None))
+          }
+
+        val extended = extended_styles(line)
+
+        var offset = 0
+        for ((style, token) <- styled_tokens) {
+          val length = token.source.length
+          val end_offset = offset + length
+          if ((offset until end_offset) exists
+              (i => extended.isDefinedAt(i) || line.charAt(i) == '\t')) {
+            for (i <- offset until end_offset) {
+              val style1 =
+                extended.get(i) match {
+                  case None => style
+                  case Some(ext) => ext(style)
+                }
+              handler.handleToken(line, style1, i, 1, context1)
             }
-            else handler.handleToken(line, style, offset, length, context1)
-            offset += length
           }
-          handler.handleToken(line, JEditToken.END, line.count, 0, context1)
-          context1
+          else handler.handleToken(line, style, offset, length, context1)
+          offset += length
         }
-        else {
-          val context1 = new Line_Context(None)
-          handler.handleToken(line, JEditToken.NULL, 0, line.count, context1)
-          handler.handleToken(line, JEditToken.END, line.count, 0, context1)
-          context1
-        }
+        handler.handleToken(line, JEditToken.END, line.count, 0, context1)
+        context1
+      }
       val context2 = context1.intern
       handler.setLineContext(context2)
       context2