Version 0.65 of tkoutline contains real-time syntax highlighting for wiki-links. I'm thinking about making the syntax highlighting code general and releasing it as a separate library package. In addition to the generic syntax highlighting code, I will include wiki-like markup as an example use.
Update 06/18/02: Version 0.77 of tkoutline 1 contains code that implements the following API's. All you need is the code in lib/markup. Use "package require markup", or "package require wikimarkup" and the following commands will be available. This code depends on the wcb package 2 which can also be found in the tkoutline distribution.
API for general syntax highlighting
The code implementing this functionality can be viewed online at http://tkoutline.sourceforge.net/cvs/lib/markup/markup.tcl
The general syntax highlighting will provide a way to specify patterns (or literal text) for which tags will be automatically applied. The using application can then configure these tags with color, style, event bindings. These commands are all in the markup namespace.
Turning it on and off
- enableHighlighting win
- disableHighlighting win
Adding rules
- addRule win ?-regexp? pattern -tag tag
- addRule win ?-regexp? pattern -callback script
The first way of adding a rule causes the given tag to automatically be applied when the given pattern is encountered. The second way causes the given script to be called whenever the pattern is encountered. This script can then apply multiple tags in a more complex manner. The window, start index, and end index will be appended to the script before it is called. The script is expected to return a list of the tags it applied (so they can be automatically removed when rehighlighting needs to be applied).
Removing a rule for the given pattern
- removeRule win pattern
Utility functions
- getTagRange win tag index
- flashTag win tag flashtag
The first function will return a list containing the start index and end index of the given tag. This is useful for event bindings. The flashTag function will configure the given tag so that any mouseover event will cause the given flashtag to be applied until the mouse leaves the tag.
Examples
The easiest way to try these examples is to run the code within tkoutline's console (console is launched with F2 key).
# Any occurrence of the word red will be colored red set win textcmd ;# Current outline text widget $win tag configure red -foreground red ::markup::addRule $win red -tag blue# All sequences of digits will be green $win tag configure green -background green ::markup::addRule $win -regexp {\d+} -tag green
# The word "flash" will be blue until moused-over, when it will turn red $win tag configure red -foreground red $win tag configure flash -foreground blue ::markup::flashTag $win flash red ::markup::addRule $win flash -tag flash
API for wiki syntax highlighting
The code implementing this functionality can be viewed online at http://tkoutline.sourceforge.net/cvs/lib/markup/wikimarkup.tcl
These commands are all in the wikimarkup namespace.
- addWikiRules win
- setLinkJumpCmd win script
Link markup is similar to wikit rules:
- Text like Nonexistent wikilink will appear as a Nonexistent wikilink if a file with the name doesn't exist
- If a file matching the wiki link does exist, then it will appear as Wiki syntax highlighting for the text widget
- Urls can be specified as http://www.google.com for example.
The function setLinkJumpCmd is used to configure what will happen when a wiki link is clicked. Url links are launched in an external browser when clicked.
The syntax used for style markup is different from "standard" wiki markup:
- Text like *bold* will appear as bold
- Text like /italics/ will appear as italics
- Text like _underline_ will appear as underline (with the text underlined, of course)
- Text like -strikeout- will appear as strikeout (with the text sriked out)