Я пытаюсь выделить кучу слов, поэтому я написал расширение pygments. В принципе это работает, но все еще не к моему удовлетворению.
Вот простая идея, которая должна сработать: выделяйте слова соответствующим образом, а весь остальной текст, не соответствующий этим словам, — в тексте. Но это зависает:
from pygments.lexer import RegexLexer
from pygments.token import *
class HotKeyPoetry(RegexLexer):
name = 'HotKeyPoetry'
aliases = ['HotKeyPoetry']
filenames = ['*.hkp']
tokens = {
'root': [
(r'\bAlt\b', Generic.Traceback),
(r'\bShft\b', Name.Variable),
(r'\bSpc\b', Operator),
(r'\bCtrl\b', Keyword.Type),
(r'\bRet\b', Name.Label),
(r'\bBkSpc\b', Generic.Inserted),
(r'\bTab\b', Keyword.Type),
(r'\bCpsLk\b', String.Char),
(r'\bNmLk\b', Generic.Output),
(r'\bScrlLk\b', String.Double),
(r'\bPgUp\b', Name.Attribute),
(r'\bPgDwn\b', Name.Builtin),
(r'\bHome\b', Number.Oct),
(r'\bEnd\b', Name.Constant),
(r'\bDel\b', Name.Decorator),
(r'\bIns\b', Number.Integer.Long),
(r'\bWin\b', Name.Builtin.Pseudo),
(r'\bF1?[1-9]\b', Name.Function),
(r'(?!\b(Alt|Shft|Spc|Ctrl|Ret|BkSpc|Tab|CpsLk|NmLk|ScrlLk|PgUp|PgDwn|Home|End|Del|Ins|Win|F5)\b)', Text),
]
}
Может быть, мне лучше использовать другой лексер для работы?
Изменить 1
So
r"(.+?)(?:$|\b(?=(Alt|Shft|Spc|Ctrl|Ret|BkSpc|Tab|CpsLk|NmLk|ScrlLk|PgUp|PgDwn|Home|End|Del|Ins|Win|F[12]?[1-9])\b))"
Исключающее регулярное выражение, которое я искал.
Теперь я пытаюсь сделать #
символом комментария, чтобы все после него (внутри строки) было комментарием: я пробовал:
r"(.+?)(?:$|#.*$|\b(?=(Alt|Shft|Spc|Ctrl|Ret|BkSpc|Tab|CpsLk|NmLk|ScrlLk|PgUp|PgDwn|Home|End|Del|Ins|Win|F[12]?[1-9])\b))"
а также
r"([^#]+?)(?:$|\b(?=(Alt|Shft|Spc|Ctrl|Ret|BkSpc|Tab|CpsLk|NmLk|ScrlLk|PgUp|PgDwn|Home|End|Del|Ins|Win|F[12]?[1-9])\b))"
с последующим
(r'#.*$', Comment),
Я также попытался добавить второе состояние:
'comment': [
(r'#.*$', Comment),
],
-- но ничего не работает.
Редактировать 2
Полный рабочий пакет расширения pygments для Python находится здесь. Вы можете получить и
python setup.py build
python setup.py install --user
это зарегистрировать его в pygments. Затем вы можете протестировать его с помощью:
pygmentize -f html -O full -o test.html test.hkp
или укажите язык:
pygmentize -f html -O full -l HotKeyPoetry -o test.html test.hkp
Вот пример test.hkp
:
Ctrl-Alt-{Home/End} ⇒ {beginning/end}-of-visual-line
Ctrl-Alt-{b/↓/↑} ⇒ {set/goto next/goto previous} bookmark # I have it in okular and emacs
Alt-{o/O} ⇒ switch-to-buffer{/-other-window}
Ctrl-{o/O} ⇒ find-file{/-other-window}
Ctrl-x o ⇒ ergo-undo-close-buffer # it uses ergoemacs' recently-closed-buffers
Ctrl-Alt-O ⇒ find-alternate-file
(комментарии не очень полезны для горячих клавиш, но они мне нужны для PyMOL ).
(?!...)
является отрицательным опережением, он никогда не будет потреблять никаких символов. - person MRAB   schedule 16.08.2012