From 16bf37bf0141446f46dfce2d1ba2b9ed0de7ec44 Mon Sep 17 00:00:00 2001 From: kotfu Date: Fri, 27 Apr 2018 07:52:14 -0600 Subject: Add description of comment-matching regex --- cmd2/parsing.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'cmd2/parsing.py') diff --git a/cmd2/parsing.py b/cmd2/parsing.py index 45715b32..b6c58db7 100644 --- a/cmd2/parsing.py +++ b/cmd2/parsing.py @@ -69,6 +69,30 @@ class StatementParser(): self.aliases = aliases self.shortcuts = shortcuts + # this regular expression matches C-style comments and quoted + # strings, i.e. stuff between single or double quote marks + # it's used with _comment_replacer() to strip out the C-style + # comments, while leaving C-style comments that are inside either + # double or single quotes. + # + # this big regular expression can be broken down into 3 regular + # expressions that are OR'ed together. + # + # /\*.*?(\*/|$) matches C-style comments, with an optional + # closing '*/'. The optional closing '*/' is + # there to retain backward compatibility with + # the pyparsing implementation of cmd2 < 0.9.0 + # \'(?:\\.|[^\\\'])*\' matches a single quoted string, allowing + # for embedded backslash escaped single quote + # marks + # "(?:\\.|[^\\"])*" matches a double quoted string, allowing + # for embedded backslash escaped double quote + # marks + # + # by way of reminder the (?:...) regular expression syntax is just + # a non-capturing version of regular parenthesis. We need the non- + # capturing syntax because _comment_replacer() looks at match + # groups self.comment_pattern = re.compile( r'/\*.*?(\*/|$)|\'(?:\\.|[^\\\'])*\'|"(?:\\.|[^\\"])*"', re.DOTALL | re.MULTILINE -- cgit v1.2.1