def shift(y: Float): Font =
GUI.transform_font(font1, AffineTransform.getTranslateInstance(0.0, y.toDouble))
val m0 = GUI.line_metrics(font0) val m1 = GUI.line_metrics(font1) val a = m1.getAscent - m0.getAscent val b = (m1.getDescent + m1.getLeading) - (m0.getDescent + m0.getLeading) if (a > 0.0f) shift(a) elseif (b > 0.0f) shift(- b) else font1
})
}
def extended(text: CharSequence): Map[Text.Offset, Byte => Byte] = { var result = Map[Text.Offset, Byte => Byte]() def mark(start: Text.Offset, stop: Text.Offset, style: Byte => Byte): Unit = { for (i <- start until stop) result += (i -> style)
}
var offset = 0 var control_sym = "" for (sym <- Symbol.iterator(text)) { val end_offset = offset + sym.length
if (Symbol.is_control_encoded(sym)) { val a = offset + Symbol.control_prefix.length val b = end_offset - Symbol.control_suffix.length
mark(offset, a, _ => hidden)
mark(a, b, _ => control)
mark(b, end_offset, _ => hidden)
}
Symbol.symbols.lookup_font(sym) match { case Some(idx) => mark(offset, end_offset, user_font(idx, _)) case _ =>
}
offset = end_offset
}
result
}
/* editing support for control symbols */
def edit_control_style(text_area: TextArea, control_sym: String): Unit = {
GUI_Thread.assert {}
val buffer = text_area.getBuffer
val control_decoded = Isabelle_Encoding.perhaps_decode(buffer, control_sym)
def update_style(text: String): String =
Library.string_builder() { result => for (sym <- Symbol.iterator(text) if !HTML.is_control(sym)) { if (Symbol.is_controllable(sym)) result ++= control_decoded
result ++= sym
}
}
text_area.getSelection.foreach { sel => val before = JEdit_Lib.point_range(buffer, sel.getStart - 1)
JEdit_Lib.get_text(buffer, before) match { case Some(s) if HTML.is_control(s) =>
text_area.extendSelection(before.start, before.stop) case _ =>
}
}
text_area.getSelection.toList match { case Nil =>
text_area.setSelectedText(control_decoded) case sels =>
JEdit_Lib.buffer_edit(buffer) {
sels.foreach(sel =>
text_area.setSelectedText(sel, update_style(text_area.getSelectedText(sel))))
}
}
}
}
¤ Dauer der Verarbeitung: 0.16 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.