UNPKG

bramble-parser

Version:

Bramble is a lightweight recursive descent parser that processes .havenfs files, returning a structured Json tree that can be used to construct an in-memory FS representation. The parser is based on line-based grammar, chunk headers, and metadata declarat

66 lines (58 loc) 3.22 kB
import { ELexerTokens } from "../common"; class BrambleLexerRule { pattern: RegExp; tokenToMatch: ELexerTokens; constructor(_pattern: RegExp, _tokenToMatch: ELexerTokens) { this.pattern = _pattern; this.tokenToMatch = _tokenToMatch; } } export const LexerRules: BrambleLexerRule[] = [ new BrambleLexerRule(/^#[0-9a-fA-F]{6}\b/, ELexerTokens.ATT_COLOR), // PRIORITY collision # new BrambleLexerRule(/^x-[^\s]+/, ELexerTokens.DEPRECATED), new BrambleLexerRule(/^#/, ELexerTokens.HASH), // GENERAL collision # new BrambleLexerRule(/^@/, ELexerTokens.AT), new BrambleLexerRule(/^-/, ELexerTokens.LINE), new BrambleLexerRule(/^=/, ELexerTokens.OPERATOR), new BrambleLexerRule(/^:/, ELexerTokens.DOTS), new BrambleLexerRule(/^,/, ELexerTokens.COMMA), new BrambleLexerRule(/^BRANCH\b/, ELexerTokens.KW_BRANCH), new BrambleLexerRule(/^CHUNK\b/, ELexerTokens.KW_CHUNK), new BrambleLexerRule(/^FILE\b/, ELexerTokens.KW_FILE), new BrambleLexerRule(/^META\b/, ELexerTokens.KW_META), new BrambleLexerRule(/^LIB\b/, ELexerTokens.KW_LIB), new BrambleLexerRule(/^TAG\b/, ELexerTokens.KW_TAG), new BrambleLexerRule(/^FR\b/, ELexerTokens.KW_FR), new BrambleLexerRule(/^DIR\b/, ELexerTokens.KW_DIR), new BrambleLexerRule(/^REF\b/, ELexerTokens.KW_REF), new BrambleLexerRule(/^HIST\b/, ELexerTokens.KW_HIST), new BrambleLexerRule(/^base\b/, ELexerTokens.ATT_BASE), new BrambleLexerRule(/^head\b/, ELexerTokens.ATT_HEAD), new BrambleLexerRule(/^parent\b/, ELexerTokens.ATT_PARENT), new BrambleLexerRule(/^name\b/, ELexerTokens.ATT_NAME), new BrambleLexerRule(/^size\b/, ELexerTokens.ATT_SIZE), new BrambleLexerRule(/^tags\b/, ELexerTokens.ATT_TAGS), new BrambleLexerRule(/^libs\b/, ELexerTokens.ATT_LIBS), new BrambleLexerRule(/^modified\b/, ELexerTokens.ATT_MODIFIED), // ACTION new BrambleLexerRule(/^created\b/, ELexerTokens.ATT_CREATED), // ACTION new BrambleLexerRule(/^updated\b/, ELexerTokens.ATT_UPDATE), // ACTION new BrambleLexerRule(/^deleted\b/, ELexerTokens.ATT_DELETED), // ACTION new BrambleLexerRule(/^restored\b/, ELexerTokens.ATT_RESTORED), // ACTION new BrambleLexerRule(/^mimetype\b/, ELexerTokens.ATT_MIMETYPE), new BrambleLexerRule(/^to\b/, ELexerTokens.ATT_TO), new BrambleLexerRule(/^type\b/, ELexerTokens.ATT_TYPE), new BrambleLexerRule(/^context\b/, ELexerTokens.ATT_CONTEXT), new BrambleLexerRule(/^user\b/, ELexerTokens.ATT_USER), new BrambleLexerRule(/^action\b/, ELexerTokens.ATT_ACTION), new BrambleLexerRule(/^hash\b/, ELexerTokens.ATT_HASH), new BrambleLexerRule(/^[a-f0-9]+\b/i, ELexerTokens.ID), new BrambleLexerRule(/^root\b/, ELexerTokens.ROOT), new BrambleLexerRule(/^\d+-\d+/, ELexerTokens.RANGE), new BrambleLexerRule(/^\d{8}T\d{4}/, ELexerTokens.TIMESTAMP), new BrambleLexerRule(/^[a-z]+\/[a-z0-9\-\.+]+/i, ELexerTokens.MIME_TYPE), new BrambleLexerRule(/^[^ \s#@=]+(,[^ \s#@=]+)+/, ELexerTokens.LIST), new BrambleLexerRule(/^\d+/, ELexerTokens.NUMBER), new BrambleLexerRule(/^[a-zA-Z0-9_\-\.\/]+/, ELexerTokens.STRING), new BrambleLexerRule(/^\n/, ELexerTokens.NEWLINE), new BrambleLexerRule(/^[ \t]+/, ELexerTokens.WHITESPACE), ];