我試圖強調一堆詞 - 所以我寫了一個pygments擴展。基本上它有效,但仍然不令我滿意。突出顯示一堆單詞?
下面是一個應該起作用的簡單概念:適當地突出顯示單詞,以及所有其他與這些單詞不匹配的文本 - 在文本中。但是,這hungs起來:
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
所以
r"(.+?)(?:$|\b(?=(Alt|Shft|Spc|Ctrl|Ret|BkSpc|Tab|CpsLk|NmLk|ScrlLk|PgUp|PgDwn|Home|End|Del|Ins|Win|F[12]?[1-9])\b))"
是exlusing正則表達式我一直在尋找。
現在,我試圖讓#
評論焦 - 這樣經過它的一切(行內) - 是一個註釋:我已經試過:
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
的complite工作Pygments來做擴展蟒包是here。你可以得到和
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)。
是否有正則表達式匹配至少一個字符?也許問題是最後一個正則表達式匹配一個空字符串,所以沒有字符被「消耗」,並且它永遠不會前進。 – MRAB 2012-08-16 15:24:18
也許你rihgt。其實我認爲 - 最後一個正則表達式必須匹配(|)指定的單詞。我會檢查它是否匹配空字符串。 – Adobe 2012-08-16 16:19:43
真的,我的意思是,因爲「(?!...)」是一個負向預測,它永遠不會消耗任何字符。 – MRAB 2012-08-16 16:23:36