Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions compare50/_data.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import abc
from collections.abc import Mapping, Sequence
import os
import pathlib
import numbers

import attr
import pygments
import pygments.lexers
from .lexers import WordLexer


__all__ = ["Pass", "Comparator", "File", "Submission",
Expand Down Expand Up @@ -191,14 +191,18 @@ def lexer(self):

# get lexer for this file type
try:
lexer = pygments.lexers.get_lexer_for_filename(self.name.name)
if ext == ".txt":
lexer = WordLexer()
else:
lexer = pygments.lexers.get_lexer_for_filename(self.name.name)

self._lexer_cache[ext] = lexer
return lexer
except pygments.util.ClassNotFound:
try:
return pygments.lexers.guess_lexer(self.read())
except pygments.util.ClassNotFound:
return pygments.lexers.special.TextLexer()
return WordLexer()

@classmethod
def get(cls, id):
Expand Down
16 changes: 16 additions & 0 deletions compare50/lexers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from pygments.lexer import RegexLexer
from pygments.token import Text, Name

class WordLexer(RegexLexer):
"""Custom compare50 lexer that creates a token based on each 'word'."""
name = "WordLexer"
aliases = ["word"]
filenames = ["*.txt"]

tokens = {
"root": [
(r"\s+", Text), # whitespace
(r"\w+", Name), # word (alphanumeric)
(r"\W", Text), # punctuation or other
]
}