diff options
| -rw-r--r-- | Makefile | 5 | ||||
| -rw-r--r-- | bpeg.c | 16 | ||||
| -rw-r--r-- | grammar.c | 45 |
3 files changed, 14 insertions, 52 deletions
@@ -27,7 +27,9 @@ install: $(NAME) read prefix; \ fi; \ [ ! "$$prefix" ] && prefix="/usr/local"; \ + [ ! "$$sysconfdir" ] && sysconfdir=/etc; \ mkdir -pv -m 755 "$$prefix/share/man/man1" "$$prefix/bin" \ + && cp -rv grammars/* "$$sysconfdir/xdg/bpeg/" \ && cp -v $(NAME).1 "$$prefix/share/man/man1/" \ && rm -f "$$prefix/bin/$(NAME)" \ && cp -v $(NAME) "$$prefix/bin/" @@ -39,8 +41,9 @@ uninstall: read prefix; \ fi; \ [ ! "$$prefix" ] && prefix="/usr/local"; \ + [ ! "$$sysconfdir" ] && sysconfdir=/etc; \ echo "Deleting..."; \ - rm -rvf "$$prefix/bin/$(NAME)" "$$prefix/share/man/man1/$(NAME).1" ; \ + rm -rvf "$$prefix/bin/$(NAME)" "$$prefix/share/man/man1/$(NAME).1" "$$sysconfdir/xdg/bpeg"; \ printf "\033[1mIf you created any config files in ~/.config/$(NAME), you may want to delete them manually.\033[0m\n" .PHONY: all, clean, install, uninstall @@ -75,6 +75,12 @@ int main(int argc, char *argv[]) grammar_t *g = new_grammar(); + int fd; + if ((fd=open("/etc/xdg/bpeg/builtins.bpeg", O_RDONLY)) >= 0) + load_grammar(g, readfile(fd)); + if ((fd=open("/etc/xdg/bpeg/builtins.bpeg", O_RDONLY)) >= 0) + load_grammar(g, readfile(fd)); + int i, npatterns = 0; for (i = 1; i < argc; i++) { if (streq(argv[i], "--")) { @@ -93,17 +99,15 @@ int main(int argc, char *argv[]) add_def(g, flag, "replacement", p); rule = "replace-all"; } else if (FLAG("--grammar") || FLAG("-g")) { + int fd; const char *grammarfile = flag; - // load grammar from a file (semicolon mode) - char *grammar; if (streq(grammarfile, "-")) { - grammar = readfile(STDIN_FILENO); + fd = STDIN_FILENO; } else { - int fd = open(grammarfile, O_RDONLY); + fd = open(grammarfile, O_RDONLY); check(fd >= 0, "Couldn't open file: %s", argv[2]); - grammar = readfile(fd); } - load_grammar(g, grammar); + load_grammar(g, readfile(fd)); } else if (FLAG("--define") || FLAG("-d")) { char *def = flag; char *eq = strchr(def, '='); @@ -6,55 +6,10 @@ #include "compiler.h" #include "utils.h" -const char *BPEG_BUILTIN_GRAMMAR = ( - // Meta-rules for acting on everything - "pattern = !(/);\n" // Not defined by default - "replacement = {!(/)=>};\n" // Not defined by default - "replace-all = *&&@replacement &&$$;\n" - "find-all = *(matching-line / {&&(\\n/$$)=>});\n" - "matching-line = +&@pattern *. $ ?\\n;\n" - "only-matches = *{&&@pattern=>'@1\\n'};\n" - - // Helper definitions (commonly used) - "crlf=\\r\\n;\n" - "cr=\\r;\n" "r=\\r;\n" - "anglebraces=`< *(anglebraces / ~~`>) `>;\n" - "brackets=`[ *(brackets / ~~`]) `];\n" - "braces=`{ *(braces / ~~`}) `};\n" - "parens=`( *(parens / ~~`)) `);\n" - "id=(`a-z/`A-Z/`_) *(`a-z/`A-Z/`_/`0-9);\n" - "HEX=`0-9/`A-F;\n" - "Hex=`0-9/`a-f/`A-F;\n" - "hex=`0-9/`a-f;\n" - "number=+`0-9 ?(`. *`0-9) / `. +`0-9;\n" - "int=+`0-9;\n" - "digit=`0-9;\n" - "Abc=`a-z/`A-Z;\n" - "ABC=`A-Z;\n" - "abc=`a-z;\n" - "esc=\\e;\n" "e=\\e;\n" - "tab=\\t;\n" "t=\\t;\n" - "nl=\\n;\n" "lf=\\n;\n" "n=\\n;\n" - "c-block-comment='/*' &&'*/';\n" - "c-line-comment='//' &$;\n" - "c-comment=c-line-comment / c-block-comment;\n" - "hash-comment=`# &$;\n" - "comment=!(/);\n" // No default definition, can be overridden - "WS=` /\\t/\\n/\\r/comment;\n" - "ws=` /\\t;\n" - "$$=!$.;\n" - "$=!.;\n" - "^^=!<$.;\n" - "^=!<.;\n" - "__=*(` /\\t/\\n/\\r/comment);\n" - "_=*(` /\\t);\n" - ); - grammar_t *new_grammar(void) { grammar_t *g = calloc(sizeof(grammar_t), 1); g->definitions = calloc(sizeof(def_t), (g->capacity = 128)); - load_grammar(g, BPEG_BUILTIN_GRAMMAR); return g; } |
