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.'), ]