From e7a741e4c74d64359694f18f7455e02c2878cc6f Mon Sep 17 00:00:00 2001 From: anseki Date: Sun, 19 Jul 2015 18:56:51 +0900 Subject: [PATCH 1/2] Fix: End of JavaScript comments are not parsed --- lib/regexrules.js | 152 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 105 insertions(+), 47 deletions(-) diff --git a/lib/regexrules.js b/lib/regexrules.js index e0c154a..8306bb3 100644 --- a/lib/regexrules.js +++ b/lib/regexrules.js @@ -1,87 +1,145 @@ +var + SP = '[ \\t]', + NL_OPTIONAL = '(?:' + SP + '*\\n)?', + NLS_OPTIONAL = '(?:' + SP + '*\\n+)?', + IND = '^(.*?)', // indent (all cols from 0 col) + + ARGS = SP + '+(.+?)', // require separator(SPs) + ARGS_OPTIONAL = '(?:' + ARGS + ')?', + FUNC = ARGS + SP + '*\\((.*)\\)', // Not `\\((.*?)\\)` + + // ======================== html + START_HTML = '|!>)', + END_HTML_NL = END_HTML + NL_OPTIONAL, + END_HTML_NLS = END_HTML + NLS_OPTIONAL, + + // ======================== js + _START_JS1 = '//', + _START_JS2 = '/\\*', + START_JS1 = _START_JS1 + SP + '*', // include inside SPs + START_JS2 = _START_JS2 + SP + '*', // include inside SPs + START_JS = '(?:' + _START_JS1 + '|' + _START_JS2 + ')' + SP + '*', // include inside SPs + SP_START_JS = SP + '*' + START_JS, + IND_START_JS1 = IND + START_JS1, + IND_START_JS2 = IND + START_JS2, + END_JS_LINE = SP + '*(?:\\*\\*|\\*/|$)', + _END_JS = '(?:\\*\\*|\\*/)', + END_JS = SP + '*' + _END_JS, + END_JS_NL = SP + '*(?:' + _END_JS + NL_OPTIONAL + '|(?:\\n|$))', + END_JS_NLS = SP + '*(?:' + _END_JS + NLS_OPTIONAL + '|(?:\\n+|$))', + + // ======================== coffee + START_COFFEE = '#+' + SP + '*', // include inside SPs + SP_START_COFFEE = SP + '*' + START_COFFEE, + IND_START_COFFEE = IND + START_COFFEE, + END_COFFEE_LINE = SP + '*$', + END_COFFEE_NL = SP + '*(?:\\n|$)', + END_COFFEE_NLS = SP + '*(?:\\n+|$)', + + // ======================== directives + DIR_ECHO = '@echo' + ARGS, + DIR_EXEC = '@exec' + FUNC, + DIR_INCLUDE = '@include(?!-)' + ARGS, + DIR_INCLUDE_STATIC = '@include-static' + ARGS, + DIR_EXCLUDE_START = '@exclude' + ARGS_OPTIONAL, + DIR_EXCLUDE_END = '@endexclude', + DIR_EXTEND_START = '@extend(?!able)' + ARGS, + DIR_EXTEND_END = '@endextend', + DIR_EXTENDABLE = '@extendable', + DIR_IF_START = '@(ifndef|ifdef|if)' + ARGS, + DIR_IF_END = '@endif', + DIR_FOREACH_START = '@foreach' + ARGS, + DIR_FOREACH_END = '@endfor' + ; + module.exports = { simple : { - echo : "^@echo[ \t]+(.*?)[ \t]*$", - exec : "^@exec[ \t]+(\\S+)[ \t]*\\((.*)\\)[ \t]*$", - include : "^(.*)@include(?!-)[ \t]+(.*?)[ \t]*$", // allow prefix characters to specify the indent level of included file - 'include-static' : "^(.*)@include-static[ \t]+(.*?)[ \t]*$" + echo : '^' + DIR_ECHO + '[ \t]*$', + exec : '^' + DIR_EXEC + '[ \t]*$', + include : IND + DIR_INCLUDE + '[ \t]*$', + // allow prefix characters to specify the indent level of included file + 'include-static' : IND + DIR_INCLUDE_STATIC + '[ \t]*$' }, html : { - echo : "|!>)", - exec : "|!>)", - include : "(.*)|!>)", - 'include-static' : "(.*)|!>)", + echo : START_HTML + DIR_ECHO + END_HTML, + exec : START_HTML + DIR_EXEC + END_HTML, + include : IND_START_HTML + DIR_INCLUDE + END_HTML, + 'include-static' : IND_START_HTML + DIR_INCLUDE_STATIC + END_HTML, exclude : { - start : "[ \t]*|!>)(?:[ \t]*\n+)?", - end : "[ \t]*|!>)(?:[ \t]*\n)?" + start : SP_START_HTML + DIR_EXCLUDE_START + END_HTML_NLS, + end : SP_START_HTML + DIR_EXCLUDE_END + END_HTML_NL }, extend : { - start : "[ \t]*|!>)(?:[ \t]*\n+)?", - end : "[ \t]*|!>)(?:[ \t]*\n)?" + start : SP_START_HTML + DIR_EXTEND_START + END_HTML_NLS, + end : SP_START_HTML + DIR_EXTEND_END + END_HTML_NL }, - extendable : "|!>)", + extendable : SP_START_HTML + DIR_EXTENDABLE + END_HTML, if : { - start : "[ \t]*|!>)(?:[ \t]*\n+)?", - end : "[ \t]*|!>)(?:[ \t]*\n)?" + start : SP_START_HTML + DIR_IF_START + END_HTML_NLS, + end : SP_START_HTML + DIR_IF_END + END_HTML_NL }, foreach : { - start : "[ \t]*|!>)(?:[ \t]*\n+)?", - end : "[ \t]*|!>)(?:[ \t]*\n)?" + start : SP_START_HTML + DIR_FOREACH_START + END_HTML_NLS, + end : SP_START_HTML + DIR_FOREACH_END + END_HTML_NL } }, js : { echo : [ - "/\\*[ \t]*@echo[ \t]+(.*?)[ \t]*\\*(?:\\*|/)", - "//[ \t]*@echo[ \t]+(.*?)[ \t]*$" + START_JS1 + DIR_ECHO + END_JS_LINE, + START_JS2 + DIR_ECHO + END_JS_LINE ], - exec : "(?://|/\\*)[ \t]*@exec[ \t]+(\\S+)[ \t]*\\((.*)\\)[ \t]*(?:\\*(?:\\*|/))?", + exec : START_JS + DIR_EXEC + END_JS_LINE, include : [ - "^(.*)/\\*[ \t]*@include(?!-)[ \t]+(.*?)[ \t]*\\*(?:\\*|/)", - "^(.*)//[ \t]*@include(?!-)[ \t]+(.*?)[ \t]*$" + IND_START_JS1 + DIR_INCLUDE + END_JS_LINE, + IND_START_JS2 + DIR_INCLUDE + END_JS_LINE ], - 'include-static': [ - "^(.*)/\\*[ \t]*@include-static[ \t]+(.*?)[ \t]*\\*(?:\\*|/)", - "^(.*)//[ \t]*@include-static[ \t]+(.*?)[ \t]*$" + 'include-static' : [ + IND_START_JS1 + DIR_INCLUDE_STATIC + END_JS_LINE, + IND_START_JS2 + DIR_INCLUDE_STATIC + END_JS_LINE ], exclude : { - start : "[ \t]*(?://|/\\*)[ \t]*@exclude(?:[ \t]+([^\n*]*))?[ \t]*(?:\\*(?:\\*|/))?(?:[ \t]*\n+)?", - end : "[ \t]*(?://|/\\*)[ \t]*@endexclude[ \t]*(?:\\*(?:\\*|/))?(?:[ \t]*\n)?" + start : SP_START_JS + DIR_EXCLUDE_START + END_JS_NLS, + end : SP_START_JS + DIR_EXCLUDE_END + END_JS_NL }, extend : { - start : "[ \t]*(?://|/\\*)[ \t]*@extend(?!able)[ \t]+([^\n*]*)(?:\\*(?:\\*|/))?(?:[ \t]*\n+)?", - end : "[ \t]*(?://|/\\*)[ \t]*@endextend[ \t]*(?:\\*(?:\\*|/))?(?:[ \t]*\n)?" + start : SP_START_JS + DIR_EXTEND_START + END_JS_NLS, + end : SP_START_JS + DIR_EXTEND_END + END_JS_NL }, - extendable : "[ \t]*(?://|/\\*)[ \t]*@extendable[ \t]*(?:\\*/)?", + extendable : SP_START_JS + DIR_EXTENDABLE + END_JS_LINE, if : { - start : "[ \t]*(?://|/\\*)[ \t]*@(ifndef|ifdef|if)[ \t]+([^\n*]*)(?:\\*(?:\\*|/))?(?:[ \t]*\n+)?", - end : "[ \t]*(?://|/\\*)[ \t]*@endif[ \t]*(?:\\*(?:\\*|/))?(?:[ \t]*\n)?" + start : SP_START_JS + DIR_IF_START + END_JS_NLS, + end : SP_START_JS + DIR_IF_END + END_JS_NL }, foreach : { - start : "[ \t]*(?://|/\\*)[ \t]*@foreach[ \t]+([^\n*]*)(?:\\*(?:\\*|/))?(?:[ \t]*\n+)?", - end : "[ \t]*(?://|/\\*)[ \t]*@endfor[ \t]*(?:\\*(?:\\*|/))?(?:[ \t]*\n)?" + start : SP_START_JS + DIR_FOREACH_START + END_JS_NLS, + end : SP_START_JS + DIR_FOREACH_END + END_JS_NL } }, coffee : { - echo : "#+[ \t]*@echo[ \t]+(.*?)[ \t]*$", - exec : "#+[ \t]*@exec[ \t]+(\\S+)[ \t]*\\((.*)\\)[ \t]*$", - include : "^(.*?)#+[ \t]*@include(?!-)[ \t]+(.*?)[ \t]*$", - 'include-static' : "^(.*?)#+[ \t]*@include-static[ \t]+(.*?)[ \t]*$", + echo : START_COFFEE + DIR_ECHO + END_COFFEE_LINE, + exec : START_COFFEE + DIR_EXEC + END_COFFEE_LINE, + include : IND_START_COFFEE + DIR_INCLUDE + END_COFFEE_LINE, + 'include-static' : IND_START_COFFEE + DIR_INCLUDE_STATIC + END_COFFEE_LINE, exclude : { - start : "^[ \t]*#+[ \t]*@exclude(?:[ \t]+(.*?))?[ \t]*\n+", - end : "^[ \t]*#+[ \t]*@endexclude[ \t]*\n?" + start : SP_START_COFFEE + DIR_EXCLUDE_START + END_COFFEE_NLS, + end : SP_START_COFFEE + DIR_EXCLUDE_END + END_COFFEE_NL }, extend : { - start : "^[ \t]*#+[ \t]*@extend(?!able)[ \t]+(.*?)\n+", - end : "^[ \t]*#+[ \t]*@endextend[ \t]*\n?" + start : SP_START_COFFEE + DIR_EXTEND_START + END_COFFEE_NLS, + end : SP_START_COFFEE + DIR_EXTEND_END + END_COFFEE_NL }, - extendable : "^[ \t]*#+[ \t]*@extendable[ \t]*$", + extendable : SP_START_COFFEE + DIR_EXTENDABLE + END_COFFEE_LINE, if : { - start : "^[ \t]*#+[ \t]*@(ifndef|ifdef|if)[ \t]+(.*?)[ \t]*\n+", - end : "^[ \t]*#+[ \t]*@endif[ \t]*\n?" + start : SP_START_COFFEE + DIR_IF_START + END_COFFEE_NLS, + end : SP_START_COFFEE + DIR_IF_END + END_COFFEE_NL }, foreach : { - start : "^[ \t]*#+[ \t]*@foreach[ \t]+(.*?)[ \t]*\n+", - end : "^[ \t]*#+[ \t]*@endfor[ \t]*\n?" + start : SP_START_COFFEE + DIR_FOREACH_START + END_COFFEE_NLS, + end : SP_START_COFFEE + DIR_FOREACH_END + END_COFFEE_NL } } }; From b353bc5520799be914ddec4981c2d66e1058ebd2 Mon Sep 17 00:00:00 2001 From: anseki Date: Mon, 20 Jul 2015 00:30:14 +0900 Subject: [PATCH 2/2] Rename vars --- lib/regexrules.js | 142 +++++++++++++++++++++++----------------------- 1 file changed, 71 insertions(+), 71 deletions(-) diff --git a/lib/regexrules.js b/lib/regexrules.js index 8306bb3..01fd1d5 100644 --- a/lib/regexrules.js +++ b/lib/regexrules.js @@ -10,35 +10,35 @@ var FUNC = ARGS + SP + '*\\((.*)\\)', // Not `\\((.*?)\\)` // ======================== html - START_HTML = '|!>)', - END_HTML_NL = END_HTML + NL_OPTIONAL, - END_HTML_NLS = END_HTML + NLS_OPTIONAL, + HTML_START = '|!>)', // include inside SPs + HTML_END_NL = HTML_END + NL_OPTIONAL, + HTML_END_NLS = HTML_END + NLS_OPTIONAL, // ======================== js - _START_JS1 = '//', - _START_JS2 = '/\\*', - START_JS1 = _START_JS1 + SP + '*', // include inside SPs - START_JS2 = _START_JS2 + SP + '*', // include inside SPs - START_JS = '(?:' + _START_JS1 + '|' + _START_JS2 + ')' + SP + '*', // include inside SPs - SP_START_JS = SP + '*' + START_JS, - IND_START_JS1 = IND + START_JS1, - IND_START_JS2 = IND + START_JS2, - END_JS_LINE = SP + '*(?:\\*\\*|\\*/|$)', - _END_JS = '(?:\\*\\*|\\*/)', - END_JS = SP + '*' + _END_JS, - END_JS_NL = SP + '*(?:' + _END_JS + NL_OPTIONAL + '|(?:\\n|$))', - END_JS_NLS = SP + '*(?:' + _END_JS + NLS_OPTIONAL + '|(?:\\n+|$))', + _JS_START1 = '//', + _JS_START2 = '/\\*', + JS_START1 = _JS_START1 + SP + '*', // include inside SPs + JS_START2 = _JS_START2 + SP + '*', // include inside SPs + JS_START = '(?:' + _JS_START1 + '|' + _JS_START2 + ')' + SP + '*', // include inside SPs + JS_SP_START = SP + '*' + JS_START, + JS_IND_START1 = IND + JS_START1, + JS_IND_START2 = IND + JS_START2, + JS_END_LINE = SP + '*(?:\\*\\*|\\*/|$)', // include inside SPs + _JS_END = '(?:\\*\\*|\\*/)', + JS_END = SP + '*' + _JS_END, // include inside SPs + JS_END_NL = SP + '*(?:' + _JS_END + NL_OPTIONAL + '|(?:\\n|$))', // include inside SPs + JS_END_NLS = SP + '*(?:' + _JS_END + NLS_OPTIONAL + '|(?:\\n+|$))', // include inside SPs // ======================== coffee - START_COFFEE = '#+' + SP + '*', // include inside SPs - SP_START_COFFEE = SP + '*' + START_COFFEE, - IND_START_COFFEE = IND + START_COFFEE, - END_COFFEE_LINE = SP + '*$', - END_COFFEE_NL = SP + '*(?:\\n|$)', - END_COFFEE_NLS = SP + '*(?:\\n+|$)', + COFFEE_START = '#+' + SP + '*', // include inside SPs + COFFEE_SP_START = SP + '*' + COFFEE_START, + COFFEE_IND_START = IND + COFFEE_START, + COFFEE_END_LINE = SP + '*$', // include inside SPs + COFFEE_END_NL = SP + '*(?:\\n|$)', // include inside SPs + COFFEE_END_NLS = SP + '*(?:\\n+|$)', // include inside SPs // ======================== directives DIR_ECHO = '@echo' + ARGS, @@ -58,88 +58,88 @@ var module.exports = { simple : { - echo : '^' + DIR_ECHO + '[ \t]*$', - exec : '^' + DIR_EXEC + '[ \t]*$', - include : IND + DIR_INCLUDE + '[ \t]*$', + echo : '^' + DIR_ECHO + SP + '*$', + exec : '^' + DIR_EXEC + SP + '*$', + include : IND + DIR_INCLUDE + SP + '*$', // allow prefix characters to specify the indent level of included file - 'include-static' : IND + DIR_INCLUDE_STATIC + '[ \t]*$' + 'include-static' : IND + DIR_INCLUDE_STATIC + SP + '*$' }, html : { - echo : START_HTML + DIR_ECHO + END_HTML, - exec : START_HTML + DIR_EXEC + END_HTML, - include : IND_START_HTML + DIR_INCLUDE + END_HTML, - 'include-static' : IND_START_HTML + DIR_INCLUDE_STATIC + END_HTML, + echo : HTML_START + DIR_ECHO + HTML_END, + exec : HTML_START + DIR_EXEC + HTML_END, + include : HTML_IND_START + DIR_INCLUDE + HTML_END, + 'include-static' : HTML_IND_START + DIR_INCLUDE_STATIC + HTML_END, exclude : { - start : SP_START_HTML + DIR_EXCLUDE_START + END_HTML_NLS, - end : SP_START_HTML + DIR_EXCLUDE_END + END_HTML_NL + start : HTML_SP_START + DIR_EXCLUDE_START + HTML_END_NLS, + end : HTML_SP_START + DIR_EXCLUDE_END + HTML_END_NL }, extend : { - start : SP_START_HTML + DIR_EXTEND_START + END_HTML_NLS, - end : SP_START_HTML + DIR_EXTEND_END + END_HTML_NL + start : HTML_SP_START + DIR_EXTEND_START + HTML_END_NLS, + end : HTML_SP_START + DIR_EXTEND_END + HTML_END_NL }, - extendable : SP_START_HTML + DIR_EXTENDABLE + END_HTML, + extendable : HTML_SP_START + DIR_EXTENDABLE + HTML_END, if : { - start : SP_START_HTML + DIR_IF_START + END_HTML_NLS, - end : SP_START_HTML + DIR_IF_END + END_HTML_NL + start : HTML_SP_START + DIR_IF_START + HTML_END_NLS, + end : HTML_SP_START + DIR_IF_END + HTML_END_NL }, foreach : { - start : SP_START_HTML + DIR_FOREACH_START + END_HTML_NLS, - end : SP_START_HTML + DIR_FOREACH_END + END_HTML_NL + start : HTML_SP_START + DIR_FOREACH_START + HTML_END_NLS, + end : HTML_SP_START + DIR_FOREACH_END + HTML_END_NL } }, js : { echo : [ - START_JS1 + DIR_ECHO + END_JS_LINE, - START_JS2 + DIR_ECHO + END_JS_LINE + JS_START1 + DIR_ECHO + JS_END_LINE, + JS_START2 + DIR_ECHO + JS_END_LINE ], - exec : START_JS + DIR_EXEC + END_JS_LINE, + exec : JS_START + DIR_EXEC + JS_END_LINE, include : [ - IND_START_JS1 + DIR_INCLUDE + END_JS_LINE, - IND_START_JS2 + DIR_INCLUDE + END_JS_LINE + JS_IND_START1 + DIR_INCLUDE + JS_END_LINE, + JS_IND_START2 + DIR_INCLUDE + JS_END_LINE ], 'include-static' : [ - IND_START_JS1 + DIR_INCLUDE_STATIC + END_JS_LINE, - IND_START_JS2 + DIR_INCLUDE_STATIC + END_JS_LINE + JS_IND_START1 + DIR_INCLUDE_STATIC + JS_END_LINE, + JS_IND_START2 + DIR_INCLUDE_STATIC + JS_END_LINE ], exclude : { - start : SP_START_JS + DIR_EXCLUDE_START + END_JS_NLS, - end : SP_START_JS + DIR_EXCLUDE_END + END_JS_NL + start : JS_SP_START + DIR_EXCLUDE_START + JS_END_NLS, + end : JS_SP_START + DIR_EXCLUDE_END + JS_END_NL }, extend : { - start : SP_START_JS + DIR_EXTEND_START + END_JS_NLS, - end : SP_START_JS + DIR_EXTEND_END + END_JS_NL + start : JS_SP_START + DIR_EXTEND_START + JS_END_NLS, + end : JS_SP_START + DIR_EXTEND_END + JS_END_NL }, - extendable : SP_START_JS + DIR_EXTENDABLE + END_JS_LINE, + extendable : JS_SP_START + DIR_EXTENDABLE + JS_END_LINE, if : { - start : SP_START_JS + DIR_IF_START + END_JS_NLS, - end : SP_START_JS + DIR_IF_END + END_JS_NL + start : JS_SP_START + DIR_IF_START + JS_END_NLS, + end : JS_SP_START + DIR_IF_END + JS_END_NL }, foreach : { - start : SP_START_JS + DIR_FOREACH_START + END_JS_NLS, - end : SP_START_JS + DIR_FOREACH_END + END_JS_NL + start : JS_SP_START + DIR_FOREACH_START + JS_END_NLS, + end : JS_SP_START + DIR_FOREACH_END + JS_END_NL } }, coffee : { - echo : START_COFFEE + DIR_ECHO + END_COFFEE_LINE, - exec : START_COFFEE + DIR_EXEC + END_COFFEE_LINE, - include : IND_START_COFFEE + DIR_INCLUDE + END_COFFEE_LINE, - 'include-static' : IND_START_COFFEE + DIR_INCLUDE_STATIC + END_COFFEE_LINE, + echo : COFFEE_START + DIR_ECHO + COFFEE_END_LINE, + exec : COFFEE_START + DIR_EXEC + COFFEE_END_LINE, + include : COFFEE_IND_START + DIR_INCLUDE + COFFEE_END_LINE, + 'include-static' : COFFEE_IND_START + DIR_INCLUDE_STATIC + COFFEE_END_LINE, exclude : { - start : SP_START_COFFEE + DIR_EXCLUDE_START + END_COFFEE_NLS, - end : SP_START_COFFEE + DIR_EXCLUDE_END + END_COFFEE_NL + start : COFFEE_SP_START + DIR_EXCLUDE_START + COFFEE_END_NLS, + end : COFFEE_SP_START + DIR_EXCLUDE_END + COFFEE_END_NL }, extend : { - start : SP_START_COFFEE + DIR_EXTEND_START + END_COFFEE_NLS, - end : SP_START_COFFEE + DIR_EXTEND_END + END_COFFEE_NL + start : COFFEE_SP_START + DIR_EXTEND_START + COFFEE_END_NLS, + end : COFFEE_SP_START + DIR_EXTEND_END + COFFEE_END_NL }, - extendable : SP_START_COFFEE + DIR_EXTENDABLE + END_COFFEE_LINE, + extendable : COFFEE_SP_START + DIR_EXTENDABLE + COFFEE_END_LINE, if : { - start : SP_START_COFFEE + DIR_IF_START + END_COFFEE_NLS, - end : SP_START_COFFEE + DIR_IF_END + END_COFFEE_NL + start : COFFEE_SP_START + DIR_IF_START + COFFEE_END_NLS, + end : COFFEE_SP_START + DIR_IF_END + COFFEE_END_NL }, foreach : { - start : SP_START_COFFEE + DIR_FOREACH_START + END_COFFEE_NLS, - end : SP_START_COFFEE + DIR_FOREACH_END + END_COFFEE_NL + start : COFFEE_SP_START + DIR_FOREACH_START + COFFEE_END_NLS, + end : COFFEE_SP_START + DIR_FOREACH_END + COFFEE_END_NL } } };