Skip to content

Commit 49afd8a

Browse files
authored
added WordLexer support for txt files
1 parent 008dc61 commit 49afd8a

2 files changed

Lines changed: 24 additions & 2 deletions

File tree

compare50/_data.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import pygments
99
import pygments.lexers
1010

11+
from .lexers import WordLexer
12+
1113

1214
__all__ = ["Pass", "Comparator", "File", "Submission",
1315
"Pass", "Span", "Score", "Comparison", "Token"]
@@ -191,14 +193,18 @@ def lexer(self):
191193

192194
# get lexer for this file type
193195
try:
194-
lexer = pygments.lexers.get_lexer_for_filename(self.name.name)
196+
if ext == ".txt":
197+
lexer = WordLexer()
198+
else:
199+
lexer = pygments.lexers.get_lexer_for_filename(self.name.name)
200+
195201
self._lexer_cache[ext] = lexer
196202
return lexer
197203
except pygments.util.ClassNotFound:
198204
try:
199205
return pygments.lexers.guess_lexer(self.read())
200206
except pygments.util.ClassNotFound:
201-
return pygments.lexers.special.TextLexer()
207+
return WordLexer()
202208

203209
@classmethod
204210
def get(cls, id):

compare50/lexers.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from pygments.lexer import RegexLexer
2+
from pygments.token import Text, Name
3+
4+
class WordLexer(RegexLexer):
5+
"""Custom compare50 lexer that creates a token based on each 'word'."""
6+
name = "WordLexer"
7+
aliases = ["word"]
8+
filenames = ["*.txt"]
9+
10+
tokens = {
11+
"root": [
12+
(r"\s+", Text), # whitespace
13+
(r"\w+", Name), # word (alphanumeric)
14+
(r"\W", Text), # punctuation or other
15+
]
16+
}

0 commit comments

Comments
 (0)