aboutsummaryrefslogtreecommitdiff
path: root/src/utils/parse
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils/parse')
-rw-r--r--src/utils/parse/__init__.py7
-rw-r--r--src/utils/parse/sed.py4
-rw-r--r--src/utils/parse/spec.py18
3 files changed, 23 insertions, 6 deletions
diff --git a/src/utils/parse/__init__.py b/src/utils/parse/__init__.py
index 262edf4a..36da8ffb 100644
--- a/src/utils/parse/__init__.py
+++ b/src/utils/parse/__init__.py
@@ -131,7 +131,7 @@ def format_tokens(s: str, sigil: str="$"
return tokens
def format_token_replace(s: str, vars: typing.Dict[str, str],
- sigil: str="$") -> str:
+ sigil: str="$") -> typing.Tuple[typing.List[str], str]:
vars = vars.copy()
vars.update({sigil: sigil})
@@ -140,7 +140,10 @@ def format_token_replace(s: str, vars: typing.Dict[str, str],
tokens.sort(key=lambda x: x[0])
tokens.reverse()
+ not_found: typing.List[str] = []
for start, end, token in tokens:
if token in vars:
s = s[:start] + vars[token] + s[end+1:]
- return s
+ else:
+ not_found += token
+ return not_found, s
diff --git a/src/utils/parse/sed.py b/src/utils/parse/sed.py
index 76b9e567..8a1c895d 100644
--- a/src/utils/parse/sed.py
+++ b/src/utils/parse/sed.py
@@ -76,6 +76,6 @@ def parse(sed_s: str) -> typing.Optional[Sed]:
return SedMatch(type, re.compile(pattern, flags))
return None
-def sed(sed_obj: Sed, s: str) -> typing.Tuple[str, typing.Optional[str]]:
+def sed(sed_obj: Sed, s: str) -> typing.Optional[str]:
out = sed_obj.match(s)
- return sed_obj.type, out
+ return out
diff --git a/src/utils/parse/spec.py b/src/utils/parse/spec.py
index 7d7ffd3a..2a682c3a 100644
--- a/src/utils/parse/spec.py
+++ b/src/utils/parse/spec.py
@@ -15,6 +15,7 @@ class SpecArgumentContext(enum.IntFlag):
class SpecArgumentType(object):
context = SpecArgumentContext.ALL
+ _modifier: typing.Optional[str]
def __init__(self, type_name: str, name: typing.Optional[str],
modifier: typing.Optional[str], exported: typing.Optional[str]):
@@ -24,7 +25,7 @@ class SpecArgumentType(object):
self.exported = exported
def _set_modifier(self, modifier: typing.Optional[str]):
- pass
+ self._modifier = modifier
def name(self) -> typing.Optional[str]:
return self._name
@@ -102,6 +103,18 @@ class SpecArgumentTypeDate(SpecArgumentType):
return date_human(args[0]), 1
return None, 1
+class SpecArgumentTypeFlag(SpecArgumentType):
+ def _str(self):
+ pref = "-" if len(self._modifier) == 1 else "--"
+ return f"{pref}{self._modifier}"
+ def name(self):
+ return self._str()
+ def simple(self, args):
+ print("flag _str()", self._str())
+ if args and args[0] == self._str():
+ return True, 1
+ return None, 1
+
class SpecArgumentPrivateType(SpecArgumentType):
context = SpecArgumentContext.PRIVATE
@@ -115,7 +128,8 @@ SPEC_ARGUMENT_TYPES = {
"int": SpecArgumentTypeInt,
"date": SpecArgumentTypeDate,
"duration": SpecArgumentTypeDuration,
- "pattern": SpecArgumentTypePattern
+ "pattern": SpecArgumentTypePattern,
+ "flag": SpecArgumentTypeFlag
}
class SpecArgument(object):