blob: d9968450b198aba8b726d5a7f77bd959121a7a48 [file] [log] [blame]
from kinds import lowercase_first_word
class Trivia(object):
def __init__(self, name, comment, characters=[], swift_characters=[],
is_new_line=False, is_comment=False):
self.name = name
self.comment = comment
self.characters = characters
self.lower_name = lowercase_first_word(name)
self.is_new_line = is_new_line
self.is_comment = is_comment
# Swift sometimes doesn't support escaped characters like \f or \v;
# we should allow specifying alternatives explicitly.
self.swift_characters = swift_characters if swift_characters else\
characters
assert len(self.swift_characters) == len(self.characters)
def characters_len(self):
return len(self.characters)
def is_collection(self):
return self.characters_len() > 0
TRIVIAS = [
Trivia('Space', 'A space \' \' character.', characters=[' ']),
Trivia('Tab', 'A tab \'\\t\' character.', characters=['\\t']),
Trivia('VerticalTab', 'A vertical tab \'\\v\' character.',
characters=['\\v'], swift_characters=['\\u{2B7F}']),
Trivia('Formfeed', 'A form-feed \'f\' character.', characters=['\\f'],
swift_characters=['\\u{240C}']),
Trivia('Newline', 'A newline \'\\n\' character.', characters=['\\n'],
is_new_line=True),
Trivia('CarriageReturn', 'A newline \'\\r\' character.',
characters=['\\r'],
is_new_line=True),
Trivia('CarriageReturnLineFeed',
'A newline consists of contiguous \'\\r\' and \'\\n\' characters.',
characters=['\\r', '\\n'], is_new_line=True),
Trivia('Backtick',
'A backtick \'`\' character, used to escape identifiers.',
characters=['`']),
Trivia('LineComment', 'A developer line comment, starting with \'//\'',
is_comment=True),
Trivia('BlockComment',
'A developer block comment, starting with \'/*\' and ending with'
' \'*/\'.',
is_comment=True),
Trivia('DocLineComment',
'A documentation line comment, starting with \'///\'.',
is_comment=True),
Trivia('DocBlockComment',
'A documentation block comment, starting with \'/**\' and ending '
'with \'*/\'.',
is_comment=True),
Trivia('GarbageText', 'Any skipped garbage text.'),
]