diff options
author | Kevin Van Brunt <kmvanbrunt@gmail.com> | 2018-09-27 13:08:14 -0400 |
---|---|---|
committer | Kevin Van Brunt <kmvanbrunt@gmail.com> | 2018-09-27 13:08:14 -0400 |
commit | 0f2f798586d4b680baa20c24086709b9faec9c24 (patch) | |
tree | 1b11a12dc3a773108c47bf898f5a3c03bcd866d7 /cmd2/parsing.py | |
parent | 19cdd5ff086a7bc8714e011084a1aaecacbf1900 (diff) | |
parent | 86f27ac241c2366022c55e891e449a2ed08b308a (diff) | |
download | cmd2-git-0f2f798586d4b680baa20c24086709b9faec9c24.tar.gz |
Merge branch 'macro' into argparse_conversion
Diffstat (limited to 'cmd2/parsing.py')
-rw-r--r-- | cmd2/parsing.py | 42 |
1 files changed, 23 insertions, 19 deletions
diff --git a/cmd2/parsing.py b/cmd2/parsing.py index 498834cf..949be42e 100644 --- a/cmd2/parsing.py +++ b/cmd2/parsing.py @@ -12,17 +12,6 @@ import attr from . import constants from . import utils -# Pattern used to find normal argument -# Match strings like: {5}, {{{{{4}, {2}}}}} -macro_normal_arg_pattern = re.compile(r'(?<!\{)\{\d+\}|\{\d+\}(?!\})') - -# Pattern used to find escaped arguments (2 or more braces on each side of digit) -# Match strings like: {{5}}, {{{{{4}}, {{2}}}}}, {{{4}}} -macro_escaped_arg_pattern = re.compile(r'\{{2}\d+\}{2}') - -# Finds a string of digits -digit_pattern = re.compile(r'\d+') - @attr.s(frozen=True) class MacroArg: @@ -32,13 +21,28 @@ class MacroArg: Escaped argument syntax: {{5}} """ # The starting index of this argument in the macro value - start_index = attr.ib(validator=attr.validators.instance_of(int), type=int) + start_index = attr.ib(validator=attr.validators.instance_of(int)) - # The number that appears between the braces - number = attr.ib(validator=attr.validators.instance_of(int), type=int) + # The number string that appears between the braces + # This is a string instead of an int because we support unicode digits and must be able + # to reproduce this string later + number_str = attr.ib(validator=attr.validators.instance_of(str)) # Tells if this argument is escaped and therefore needs to be unescaped - is_escaped = attr.ib(validator=attr.validators.instance_of(bool), type=bool) + is_escaped = attr.ib(validator=attr.validators.instance_of(bool)) + + # Pattern used to find normal argument + # Digits surrounded by exactly 1 brace on a side and 1 or more braces on the opposite side + # Match strings like: {5}, {{{{{4}, {2}}}}} + macro_normal_arg_pattern = re.compile(r'(?<!\{)\{\d+\}|\{\d+\}(?!\})') + + # Pattern used to find escaped arguments + # Digits surrounded by 2 or more braces on both sides + # Match strings like: {{5}}, {{{{{4}}, {{2}}}}} + macro_escaped_arg_pattern = re.compile(r'\{{2}\d+\}{2}') + + # Finds a string of digits + digit_pattern = re.compile(r'\d+') @attr.s(frozen=True) @@ -46,16 +50,16 @@ class Macro: """Defines a cmd2 macro""" # Name of the macro - name = attr.ib(validator=attr.validators.instance_of(str), type=str) + name = attr.ib(validator=attr.validators.instance_of(str)) # The string the macro resolves to - value = attr.ib(validator=attr.validators.instance_of(str), type=str) + value = attr.ib(validator=attr.validators.instance_of(str)) # The required number of args the user has to pass to this macro - required_arg_count = attr.ib(validator=attr.validators.instance_of(int), type=int) + required_arg_count = attr.ib(validator=attr.validators.instance_of(int)) # Used to fill in argument placeholders in the macro - arg_list = attr.ib(factory=list, validator=attr.validators.instance_of(list), type=List[MacroArg]) + arg_list = attr.ib(factory=list, validator=attr.validators.instance_of(list)) @attr.s(frozen=True) |