src/Tools/jEdit/src/isabelle.scala
author wenzelm
Wed, 31 Jul 2013 19:59:14 +0200
changeset 52815 eaad5fe7bb1b
parent 51533 3f6280aedbcc
child 52816 c608e0ade554
permissions -rw-r--r--
actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable); just one module for Isabelle/jEdit actions;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50208
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
     1
/*  Title:      Tools/jEdit/src/isabelle.scala
50183
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
     3
50208
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
     4
Convenience operations for Isabelle/jEdit.
50183
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
     5
*/
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
     6
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
     7
package isabelle.jedit
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
     8
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
     9
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
    10
import isabelle._
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
    11
50198
0c7b351a6871 added convenience actions isabelle.increase-font-size and isabelle.decrease-font-size;
wenzelm
parents: 50187
diff changeset
    12
import org.gjt.sp.jedit.{jEdit, View, Buffer}
50183
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
    13
import org.gjt.sp.jedit.textarea.JEditTextArea
50208
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    14
import org.gjt.sp.jedit.gui.DockableWindowManager
50183
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
    15
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
    16
50208
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    17
object Isabelle
50183
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
    18
{
50208
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    19
  /* dockable windows */
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    20
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    21
  private def wm(view: View): DockableWindowManager = view.getDockableWindowManager
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    22
50299
f70b3712040f renamed dockable "Prover Session" to "Theories";
wenzelm
parents: 50209
diff changeset
    23
  def docked_theories(view: View): Option[Theories_Dockable] =
f70b3712040f renamed dockable "Prover Session" to "Theories";
wenzelm
parents: 50209
diff changeset
    24
    wm(view).getDockableWindow("isabelle-theories") match {
f70b3712040f renamed dockable "Prover Session" to "Theories";
wenzelm
parents: 50209
diff changeset
    25
      case dockable: Theories_Dockable => Some(dockable)
50208
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    26
      case _ => None
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    27
    }
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    28
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents: 50775
diff changeset
    29
  def docked_timing(view: View): Option[Timing_Dockable] =
3f6280aedbcc dockable window for timing information;
wenzelm
parents: 50775
diff changeset
    30
    wm(view).getDockableWindow("isabelle-timing") match {
3f6280aedbcc dockable window for timing information;
wenzelm
parents: 50775
diff changeset
    31
      case dockable: Timing_Dockable => Some(dockable)
3f6280aedbcc dockable window for timing information;
wenzelm
parents: 50775
diff changeset
    32
      case _ => None
3f6280aedbcc dockable window for timing information;
wenzelm
parents: 50775
diff changeset
    33
    }
3f6280aedbcc dockable window for timing information;
wenzelm
parents: 50775
diff changeset
    34
50208
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    35
  def docked_output(view: View): Option[Output_Dockable] =
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    36
    wm(view).getDockableWindow("isabelle-output") match {
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    37
      case dockable: Output_Dockable => Some(dockable)
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    38
      case _ => None
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    39
    }
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    40
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    41
  def docked_raw_output(view: View): Option[Raw_Output_Dockable] =
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    42
    wm(view).getDockableWindow("isabelle-raw-output") match {
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    43
      case dockable: Raw_Output_Dockable => Some(dockable)
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    44
      case _ => None
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    45
    }
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    46
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    47
  def docked_protocol(view: View): Option[Protocol_Dockable] =
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    48
    wm(view).getDockableWindow("isabelle-protocol") match {
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    49
      case dockable: Protocol_Dockable => Some(dockable)
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    50
      case _ => None
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    51
    }
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    52
50433
9131dadb2bf7 basic monitor panel, using the powerful jfreechart library;
wenzelm
parents: 50341
diff changeset
    53
  def docked_monitor(view: View): Option[Monitor_Dockable] =
9131dadb2bf7 basic monitor panel, using the powerful jfreechart library;
wenzelm
parents: 50341
diff changeset
    54
    wm(view).getDockableWindow("isabelle-monitor") match {
9131dadb2bf7 basic monitor panel, using the powerful jfreechart library;
wenzelm
parents: 50341
diff changeset
    55
      case dockable: Monitor_Dockable => Some(dockable)
9131dadb2bf7 basic monitor panel, using the powerful jfreechart library;
wenzelm
parents: 50341
diff changeset
    56
      case _ => None
9131dadb2bf7 basic monitor panel, using the powerful jfreechart library;
wenzelm
parents: 50341
diff changeset
    57
    }
9131dadb2bf7 basic monitor panel, using the powerful jfreechart library;
wenzelm
parents: 50341
diff changeset
    58
50208
1382ad6d4774 tuned signature;
wenzelm
parents: 50206
diff changeset
    59
52815
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    60
  /* continuous checking */
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    61
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    62
  private val CONTINUOUS_CHECKING = "editor_continuous_checking"
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    63
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    64
  def continuous_checking: Boolean = PIDE.options.bool(CONTINUOUS_CHECKING)
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    65
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    66
  def continuous_checking_=(b: Boolean)
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    67
  {
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    68
    Swing_Thread.require()
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    69
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    70
    if (continuous_checking != b) {
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    71
      PIDE.options.bool(CONTINUOUS_CHECKING) = b
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    72
      PIDE.options_changed()
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    73
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    74
      PIDE.session.update(
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    75
        (List.empty[Document.Edit_Text] /: JEdit_Lib.jedit_buffers().toList) {
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    76
          case (edits, buffer) =>
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    77
            JEdit_Lib.buffer_lock(buffer) {
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    78
              PIDE.document_model(buffer) match {
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    79
                case Some(model) => model.flushed_edits() ::: edits
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    80
                case None => edits
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    81
              }
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    82
            }
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    83
        }
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    84
      )
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    85
    }
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    86
  }
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    87
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    88
  def set_continuous_checking() { continuous_checking = true }
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    89
  def reset_continuous_checking() { continuous_checking = false }
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    90
  def toggle_continuous_checking() { continuous_checking = !continuous_checking }
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    91
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    92
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    93
  /* required document nodes */
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    94
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    95
  private def node_required_update(view: View, toggle: Boolean = false, set: Boolean = false)
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    96
  {
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    97
    Swing_Thread.require()
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    98
    PIDE.document_model(view.getBuffer) match {
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
    99
      case Some(model) =>
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
   100
        val b = if (toggle) !model.node_required else set
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
   101
        if (model.node_required != b) {
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
   102
          model.node_required = b
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
   103
          PIDE.options_changed()
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
   104
        }
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
   105
      case None =>
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
   106
    }
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
   107
  }
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
   108
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
   109
  def set_node_required(view: View) { node_required_update(view, set = true) }
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
   110
  def reset_node_required(view: View) { node_required_update(view, set = false) }
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
   111
  def toggle_node_required(view: View) { node_required_update(view, toggle = true) }
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
   112
eaad5fe7bb1b actions and shortcuts to change node_required status, with painter that looks like CheckBox (non-clickable);
wenzelm
parents: 51533
diff changeset
   113
50198
0c7b351a6871 added convenience actions isabelle.increase-font-size and isabelle.decrease-font-size;
wenzelm
parents: 50187
diff changeset
   114
  /* font size */
0c7b351a6871 added convenience actions isabelle.increase-font-size and isabelle.decrease-font-size;
wenzelm
parents: 50187
diff changeset
   115
0c7b351a6871 added convenience actions isabelle.increase-font-size and isabelle.decrease-font-size;
wenzelm
parents: 50187
diff changeset
   116
  def change_font_size(view: View, change: Int => Int)
0c7b351a6871 added convenience actions isabelle.increase-font-size and isabelle.decrease-font-size;
wenzelm
parents: 50187
diff changeset
   117
  {
50775
8c1cda8ad833 upper bound for font size;
wenzelm
parents: 50433
diff changeset
   118
    val size = change(jEdit.getIntegerProperty("view.fontsize", 16)) max 5 min 250
50206
6626bc5ed053 tuned signature;
wenzelm
parents: 50205
diff changeset
   119
    jEdit.setIntegerProperty("view.fontsize", size)
50198
0c7b351a6871 added convenience actions isabelle.increase-font-size and isabelle.decrease-font-size;
wenzelm
parents: 50187
diff changeset
   120
    jEdit.propertiesChanged()
0c7b351a6871 added convenience actions isabelle.increase-font-size and isabelle.decrease-font-size;
wenzelm
parents: 50187
diff changeset
   121
    jEdit.saveSettings()
0c7b351a6871 added convenience actions isabelle.increase-font-size and isabelle.decrease-font-size;
wenzelm
parents: 50187
diff changeset
   122
    view.getStatus.setMessageAndClear("Text font size: " + size)
0c7b351a6871 added convenience actions isabelle.increase-font-size and isabelle.decrease-font-size;
wenzelm
parents: 50187
diff changeset
   123
  }
0c7b351a6871 added convenience actions isabelle.increase-font-size and isabelle.decrease-font-size;
wenzelm
parents: 50187
diff changeset
   124
0c7b351a6871 added convenience actions isabelle.increase-font-size and isabelle.decrease-font-size;
wenzelm
parents: 50187
diff changeset
   125
  def increase_font_size(view: View): Unit = change_font_size(view, i => i + ((i / 10) max 1))
0c7b351a6871 added convenience actions isabelle.increase-font-size and isabelle.decrease-font-size;
wenzelm
parents: 50187
diff changeset
   126
  def decrease_font_size(view: View): Unit = change_font_size(view, i => i - ((i / 10) max 1))
0c7b351a6871 added convenience actions isabelle.increase-font-size and isabelle.decrease-font-size;
wenzelm
parents: 50187
diff changeset
   127
0c7b351a6871 added convenience actions isabelle.increase-font-size and isabelle.decrease-font-size;
wenzelm
parents: 50187
diff changeset
   128
50341
0c65a7cfc0f3 provide general insert_line_padding as convenience operation, e.g. for BeanShell macros;
wenzelm
parents: 50299
diff changeset
   129
  /* structured insert */
0c65a7cfc0f3 provide general insert_line_padding as convenience operation, e.g. for BeanShell macros;
wenzelm
parents: 50299
diff changeset
   130
0c65a7cfc0f3 provide general insert_line_padding as convenience operation, e.g. for BeanShell macros;
wenzelm
parents: 50299
diff changeset
   131
  def insert_line_padding(text_area: JEditTextArea, text: String)
0c65a7cfc0f3 provide general insert_line_padding as convenience operation, e.g. for BeanShell macros;
wenzelm
parents: 50299
diff changeset
   132
  {
0c65a7cfc0f3 provide general insert_line_padding as convenience operation, e.g. for BeanShell macros;
wenzelm
parents: 50299
diff changeset
   133
    val buffer = text_area.getBuffer
0c65a7cfc0f3 provide general insert_line_padding as convenience operation, e.g. for BeanShell macros;
wenzelm
parents: 50299
diff changeset
   134
    JEdit_Lib.buffer_edit(buffer) {
0c65a7cfc0f3 provide general insert_line_padding as convenience operation, e.g. for BeanShell macros;
wenzelm
parents: 50299
diff changeset
   135
      val text1 =
0c65a7cfc0f3 provide general insert_line_padding as convenience operation, e.g. for BeanShell macros;
wenzelm
parents: 50299
diff changeset
   136
        if (text_area.getSelectionCount == 0) {
0c65a7cfc0f3 provide general insert_line_padding as convenience operation, e.g. for BeanShell macros;
wenzelm
parents: 50299
diff changeset
   137
          def pad(range: Text.Range): String =
0c65a7cfc0f3 provide general insert_line_padding as convenience operation, e.g. for BeanShell macros;
wenzelm
parents: 50299
diff changeset
   138
            if (JEdit_Lib.try_get_text(buffer, range) == Some("\n")) "" else "\n"
0c65a7cfc0f3 provide general insert_line_padding as convenience operation, e.g. for BeanShell macros;
wenzelm
parents: 50299
diff changeset
   139
0c65a7cfc0f3 provide general insert_line_padding as convenience operation, e.g. for BeanShell macros;
wenzelm
parents: 50299
diff changeset
   140
          val caret = JEdit_Lib.point_range(buffer, text_area.getCaretPosition)
0c65a7cfc0f3 provide general insert_line_padding as convenience operation, e.g. for BeanShell macros;
wenzelm
parents: 50299
diff changeset
   141
          val before_caret = JEdit_Lib.point_range(buffer, caret.start - 1)
0c65a7cfc0f3 provide general insert_line_padding as convenience operation, e.g. for BeanShell macros;
wenzelm
parents: 50299
diff changeset
   142
          pad(before_caret) + text + pad(caret)
0c65a7cfc0f3 provide general insert_line_padding as convenience operation, e.g. for BeanShell macros;
wenzelm
parents: 50299
diff changeset
   143
        }
0c65a7cfc0f3 provide general insert_line_padding as convenience operation, e.g. for BeanShell macros;
wenzelm
parents: 50299
diff changeset
   144
        else text
0c65a7cfc0f3 provide general insert_line_padding as convenience operation, e.g. for BeanShell macros;
wenzelm
parents: 50299
diff changeset
   145
      text_area.setSelectedText(text1)
0c65a7cfc0f3 provide general insert_line_padding as convenience operation, e.g. for BeanShell macros;
wenzelm
parents: 50299
diff changeset
   146
    }
0c65a7cfc0f3 provide general insert_line_padding as convenience operation, e.g. for BeanShell macros;
wenzelm
parents: 50299
diff changeset
   147
  }
0c65a7cfc0f3 provide general insert_line_padding as convenience operation, e.g. for BeanShell macros;
wenzelm
parents: 50299
diff changeset
   148
0c65a7cfc0f3 provide general insert_line_padding as convenience operation, e.g. for BeanShell macros;
wenzelm
parents: 50299
diff changeset
   149
50183
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   150
  /* control styles */
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   151
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   152
  def control_sub(text_area: JEditTextArea)
50187
b5a09812abc4 special handling of control symbols in Symbols dockable;
wenzelm
parents: 50183
diff changeset
   153
  { Token_Markup.edit_control_style(text_area, Symbol.sub_decoded) }
50183
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   154
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   155
  def control_sup(text_area: JEditTextArea)
50187
b5a09812abc4 special handling of control symbols in Symbols dockable;
wenzelm
parents: 50183
diff changeset
   156
  { Token_Markup.edit_control_style(text_area, Symbol.sup_decoded) }
50183
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   157
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   158
  def control_isub(text_area: JEditTextArea)
50187
b5a09812abc4 special handling of control symbols in Symbols dockable;
wenzelm
parents: 50183
diff changeset
   159
  { Token_Markup.edit_control_style(text_area, Symbol.isub_decoded) }
50183
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   160
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   161
  def control_isup(text_area: JEditTextArea)
50187
b5a09812abc4 special handling of control symbols in Symbols dockable;
wenzelm
parents: 50183
diff changeset
   162
  { Token_Markup.edit_control_style(text_area, Symbol.isup_decoded) }
50183
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   163
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   164
  def control_bold(text_area: JEditTextArea)
50187
b5a09812abc4 special handling of control symbols in Symbols dockable;
wenzelm
parents: 50183
diff changeset
   165
  { Token_Markup.edit_control_style(text_area, Symbol.bold_decoded) }
50183
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   166
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   167
  def control_reset(text_area: JEditTextArea)
50187
b5a09812abc4 special handling of control symbols in Symbols dockable;
wenzelm
parents: 50183
diff changeset
   168
  { Token_Markup.edit_control_style(text_area, "") }
50183
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   169
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   170
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   171
  /* block styles */
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   172
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   173
  private def enclose_input(text_area: JEditTextArea, s1: String, s2: String)
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   174
  {
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   175
    s1.foreach(text_area.userInput(_))
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   176
    s2.foreach(text_area.userInput(_))
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   177
    s2.foreach(_ => text_area.goToPrevCharacter(false))
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   178
  }
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   179
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   180
  def input_bsub(text_area: JEditTextArea)
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   181
  { enclose_input(text_area, Symbol.bsub_decoded, Symbol.esub_decoded) }
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   182
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   183
  def input_bsup(text_area: JEditTextArea)
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   184
  { enclose_input(text_area, Symbol.bsup_decoded, Symbol.esup_decoded) }
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   185
}
2b3e24e1c9e7 improved editing support for control styles;
wenzelm
parents:
diff changeset
   186