This is a silly hack that turns out isn't entirely useful, but I'm going to post it to preserve it "just in case" and because I probably spent an hour too much on it. Basically, I've been playing around with writing interactive fiction in Inform 7. Inform 7 is a unique natural language-based approach to interactive fiction. Because of that is has a deceptively simple subset of highlight-able syntax, with comparison to most other programming or even interactive fiction description languages. I use Pygments as a common syntax highlighter in a number of situations, including and particularly for syntax highlighting of fragments I post to my blog. Thinking ahead to wanting to post snippets of my works to my blog I set about creating a simple lexer for Pygments.
Unfortunately, it isn't all that useful. Due to the unique nature of the language it is best expressed in a non-fixed-width font with "word wrapping", both of which are entirely unusual for syntax highlighting and don't have existing support in Pygments. I think my best bet will be to attempt to use Inform's existing HTML output or to hand optimize some reST-based solution.
Here's the lexer in case it might find some use further down the road:
from pygments.lexer import RegexLexer
from pygments.token import *
import re
I7_HEADINGS = ['Volume', 'Book', 'Part', 'Chapter', 'Section', 'Table']
class Inform7Lexer(RegexLexer):
"""
Inform 7 is a natural language-based approach to buiding interactive
fiction. Because of the English-based nature of the language there
is little overt syntax in the classic sense that might be highlighted.
"""
name='Inform 7'
aliases=['I7']
filenames=['*.inform', '*.i7x', '*.ni']
flags=re.IGNORECASE | re.MULTILINE
tokens = {
'root': [
(r'^"[^"]*" by ("[^"]*"|[\w ]+)$', Generic.Heading),
(r'^(%s)[^\n]*$' % "|".join(I7_HEADINGS), Generic.Heading),
(r'\[', Comment, "comment"),
(r'"', String, "string"),
(r'[^"\n\[]+', Text),
(r'.', Text),
],
'comment': [
(r'\]', Comment, "#pop"),
(r'\[', Comment, "#push"),
(r'[^\]\[]+', Comment),
],
'string': [
(r'"', String, "#pop"),
(r'\[[^\]]*\]', Name),
(r'[^"\[]*', String),
],
}
# vim: ai et ts=4 sts=4 sw=4
A quick screenshot with obviously lots of scrolling and a Firefox rendering glitch from lexing Graham Nelson's The Reliques of Tolti-Aph.