some convenience actions/shortcuts for control symbols;
authorwenzelm
Wed, 17 Aug 2011 16:01:27 +0200
changeset 44238 36120feb70ed
parent 44237 2a2040c9d898
child 44239 47ecd30e018d
some convenience actions/shortcuts for control symbols;
src/Pure/General/symbol.scala
src/Pure/Thy/html.scala
src/Tools/jEdit/src/Isabelle.props
src/Tools/jEdit/src/actions.xml
src/Tools/jEdit/src/plugin.scala
src/Tools/jEdit/src/token_markup.scala
--- a/src/Pure/General/symbol.scala	Wed Aug 17 15:14:48 2011 +0200
+++ b/src/Pure/General/symbol.scala	Wed Aug 17 16:01:27 2011 +0200
@@ -356,14 +356,15 @@
     val ctrl_decoded: Set[Symbol] =
       Set((for ((sym, _) <- symbols if sym.startsWith("\\<^")) yield decode(sym)): _*)
 
-    val subscript_decoded = Set(decode("\\<^sub>"), decode("\\<^isub>"))
-    val superscript_decoded = Set(decode("\\<^sup>"), decode("\\<^isup>"))
-
-    val bold_decoded = decode("\\<^bold>")
+    val sub_decoded = decode("\\<^sub>")
+    val sup_decoded = decode("\\<^sup>")
+    val isub_decoded = decode("\\<^isub>")
+    val isup_decoded = decode("\\<^isup>")
     val bsub_decoded = decode("\\<^bsub>")
     val esub_decoded = decode("\\<^esub>")
     val bsup_decoded = decode("\\<^bsup>")
     val esup_decoded = decode("\\<^esup>")
+    val bold_decoded = decode("\\<^bold>")
   }
 
 
@@ -401,11 +402,13 @@
   def is_controllable(sym: Symbol): Boolean =
     !is_blank(sym) && !is_ctrl(sym) && !is_malformed(sym)
 
-  def is_subscript_decoded(sym: Symbol): Boolean = symbols.subscript_decoded.contains(sym)
-  def is_superscript_decoded(sym: Symbol): Boolean = symbols.superscript_decoded.contains(sym)
-  def is_bold_decoded(sym: Symbol): Boolean = sym == symbols.bold_decoded
-  def is_bsub_decoded(sym: Symbol): Boolean = sym == symbols.bsub_decoded
-  def is_esub_decoded(sym: Symbol): Boolean = sym == symbols.esub_decoded
-  def is_bsup_decoded(sym: Symbol): Boolean = sym == symbols.bsup_decoded
-  def is_esup_decoded(sym: Symbol): Boolean = sym == symbols.esup_decoded
+  def sub_decoded: Symbol = symbols.sub_decoded
+  def sup_decoded: Symbol = symbols.sup_decoded
+  def isub_decoded: Symbol = symbols.isub_decoded
+  def isup_decoded: Symbol = symbols.isup_decoded
+  def bsub_decoded: Symbol = symbols.bsub_decoded
+  def esub_decoded: Symbol = symbols.esub_decoded
+  def bsup_decoded: Symbol = symbols.bsup_decoded
+  def esup_decoded: Symbol = symbols.esup_decoded
+  def bold_decoded: Symbol = symbols.bold_decoded
 }
--- a/src/Pure/Thy/html.scala	Wed Aug 17 15:14:48 2011 +0200
+++ b/src/Pure/Thy/html.scala	Wed Aug 17 16:01:27 2011 +0200
@@ -83,13 +83,15 @@
             val s1 = syms.next
             def s2() = if (syms.hasNext) syms.next else ""
             if (s1 == "\n") add(XML.elem(BR))
-            else if (Symbol.is_bsub_decoded(s1)) t ++= s1  // FIXME
-            else if (Symbol.is_esub_decoded(s1)) t ++= s1  // FIXME
-            else if (Symbol.is_bsup_decoded(s1)) t ++= s1  // FIXME
-            else if (Symbol.is_esup_decoded(s1)) t ++= s1  // FIXME
-            else if (Symbol.is_subscript_decoded(s1)) { add(hidden(s1)); add(sub(s2())) }
-            else if (Symbol.is_superscript_decoded(s1)) { add(hidden(s1)); add(sup(s2())) }
-            else if (Symbol.is_bold_decoded(s1)) { add(hidden(s1)); add(bold(s2())) }
+            else if (s1 == Symbol.sub_decoded || s1 == Symbol.isub_decoded)
+              { add(hidden(s1)); add(sub(s2())) }
+            else if (s1 == Symbol.sup_decoded || s1 == Symbol.isup_decoded)
+              { add(hidden(s1)); add(sup(s2())) }
+            else if (s1 == Symbol.bsub_decoded) t ++= s1  // FIXME
+            else if (s1 == Symbol.esub_decoded) t ++= s1  // FIXME
+            else if (s1 == Symbol.bsup_decoded) t ++= s1  // FIXME
+            else if (s1 == Symbol.esup_decoded) t ++= s1  // FIXME
+            else if (s1 == Symbol.bold_decoded) { add(hidden(s1)); add(bold(s2())) }
             else if (Symbol.fonts.isDefinedAt(s1)) { add(user_font(Symbol.fonts(s1), s1)) }
             else t ++= s1
           }
--- a/src/Tools/jEdit/src/Isabelle.props	Wed Aug 17 15:14:48 2011 +0200
+++ b/src/Tools/jEdit/src/Isabelle.props	Wed Aug 17 16:01:27 2011 +0200
@@ -37,6 +37,11 @@
 options.isabelle.auto-start.title=Auto Start
 options.isabelle.auto-start=true
 
+#actions
+isabelle.input-isub.shortcut=C+e DOWN
+isabelle.input-isup.shortcut=C+e UP
+isabelle.input-bold.shortcut=C+e RIGHT
+
 #menu actions
 plugin.isabelle.jedit.Plugin.menu.label=Isabelle
 plugin.isabelle.jedit.Plugin.menu=isabelle.session-panel isabelle.output-panel isabelle.raw-output-panel isabelle.protocol-panel
--- a/src/Tools/jEdit/src/actions.xml	Wed Aug 17 15:14:48 2011 +0200
+++ b/src/Tools/jEdit/src/actions.xml	Wed Aug 17 16:01:27 2011 +0200
@@ -22,4 +22,40 @@
 			wm.addDockableWindow("isabelle-protocol");
 		</CODE>
 	</ACTION>
+	<ACTION NAME="isabelle.input-sub">
+	  <CODE>
+	    isabelle.jedit.Isabelle.input_sub(textArea);
+	  </CODE>
+	</ACTION>
+	<ACTION NAME="isabelle.input-sup">
+	  <CODE>
+	    isabelle.jedit.Isabelle.input_sup(textArea);
+	  </CODE>
+	</ACTION>
+	<ACTION NAME="isabelle.input-isub">
+	  <CODE>
+	    isabelle.jedit.Isabelle.input_isub(textArea);
+	  </CODE>
+	</ACTION>
+	<ACTION NAME="isabelle.input-isup">
+	  <CODE>
+	    isabelle.jedit.Isabelle.input_isup(textArea);
+	  </CODE>
+	</ACTION>
+	<ACTION NAME="isabelle.input-bsub">
+	  <CODE>
+	    isabelle.jedit.Isabelle.input_bsub(textArea);
+	  </CODE>
+	</ACTION>
+	<ACTION NAME="isabelle.input-bsup">
+	  <CODE>
+	    isabelle.jedit.Isabelle.input_bsup(textArea);
+	  </CODE>
+	</ACTION>
+	<ACTION NAME="isabelle.input-bold">
+	  <CODE>
+	    isabelle.jedit.Isabelle.input_bold(textArea);
+	  </CODE>
+	</ACTION>
+
 </ACTIONS>
\ No newline at end of file
--- a/src/Tools/jEdit/src/plugin.scala	Wed Aug 17 15:14:48 2011 +0200
+++ b/src/Tools/jEdit/src/plugin.scala	Wed Aug 17 16:01:27 2011 +0200
@@ -316,6 +316,24 @@
     }
     session.start(timeout, modes ::: List(logic))
   }
+
+
+  /* convenience actions */
+
+  private def user_input(text_area: JEditTextArea, s1: String, s2: String = "")
+  {
+    s1.foreach(text_area.userInput(_))
+    s2.foreach(text_area.userInput(_))
+    s2.foreach(_ => text_area.goToPrevCharacter(false))
+  }
+
+  def input_sub(text_area: JEditTextArea): Unit = user_input(text_area, Symbol.sub_decoded)
+  def input_sup(text_area: JEditTextArea): Unit = user_input(text_area, Symbol.sup_decoded)
+  def input_isub(text_area: JEditTextArea): Unit = user_input(text_area, Symbol.isub_decoded)
+  def input_isup(text_area: JEditTextArea): Unit = user_input(text_area, Symbol.isup_decoded)
+  def input_bsub(text_area: JEditTextArea): Unit = user_input(text_area, Symbol.bsub_decoded, Symbol.esub_decoded)
+  def input_bsup(text_area: JEditTextArea): Unit = user_input(text_area, Symbol.bsup_decoded, Symbol.esup_decoded)
+  def input_bold(text_area: JEditTextArea): Unit = user_input(text_area, Symbol.bold_decoded)
 }
 
 
--- a/src/Tools/jEdit/src/token_markup.scala	Wed Aug 17 15:14:48 2011 +0200
+++ b/src/Tools/jEdit/src/token_markup.scala	Wed Aug 17 16:01:27 2011 +0200
@@ -107,11 +107,11 @@
 
   def extended_styles(text: CharSequence): Map[Text.Offset, Byte => Byte] =
   {
-    // FIXME Symbol.is_bsub_decoded etc.
+    // FIXME Symbol.bsub_decoded etc.
     def ctrl_style(sym: String): Option[Byte => Byte] =
-      if (Symbol.is_subscript_decoded(sym)) Some(subscript(_))
-      else if (Symbol.is_superscript_decoded(sym)) Some(superscript(_))
-      else if (Symbol.is_bold_decoded(sym)) Some(bold(_))
+      if (sym == Symbol.sub_decoded || sym == Symbol.isub_decoded) Some(subscript(_))
+      else if (sym == Symbol.sup_decoded || sym == Symbol.isup_decoded) Some(superscript(_))
+      else if (sym == Symbol.bold_decoded) Some(bold(_))
       else None
 
     var result = Map[Text.Offset, Byte => Byte]()