From 17d3e10079cb277e5428fbe359665269b60a58a4 Mon Sep 17 00:00:00 2001 From: Vanessa Stehr <vanessa.stehr@ptb.de> Date: Wed, 20 Sep 2023 13:59:07 +0200 Subject: [PATCH] Refactor code to better represent the parser --- dist/dsiParser-1.0.0-py3-none-any.whl | Bin 0 -> 4645 bytes dist/dsiParser-1.0.0.tar.gz | Bin 0 -> 5242 bytes setup.cfg | 2 +- src/dsiParser.py | 262 ++++++++++++-------------- 4 files changed, 126 insertions(+), 138 deletions(-) create mode 100644 dist/dsiParser-1.0.0-py3-none-any.whl create mode 100644 dist/dsiParser-1.0.0.tar.gz diff --git a/dist/dsiParser-1.0.0-py3-none-any.whl b/dist/dsiParser-1.0.0-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..fe1664a79c4ec84e9ff95c4d64cce91e010352e3 GIT binary patch literal 4645 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 XI>4Ki4WyclfsJ7^BLhQ>0Eh<w$n`3J literal 0 HcmV?d00001 diff --git a/dist/dsiParser-1.0.0.tar.gz b/dist/dsiParser-1.0.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..41bc5dee470fc1cd6a27ea6042c9aae1632583a5 GIT binary patch literal 5242 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 IPB1V40CfC<qW}N^ literal 0 HcmV?d00001 diff --git a/setup.cfg b/setup.cfg index c567c9e..5662678 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = dsiParser -version = 0.2.0 +version = 1.0.0 description = Parse D-SI unit strings to LaTeX long_description = file: README.md diff --git a/src/dsiParser.py b/src/dsiParser.py index 313c839..8d1d204 100644 --- a/src/dsiParser.py +++ b/src/dsiParser.py @@ -17,27 +17,145 @@ class dsiParser: self.latexDefaultSuffix = latexDefaultSuffix def parse(self, dsiString: str): - """Parse D-SI unit string into tree structure + """parses a D-SI string into a tree structure + + + Args: + dsiString (str): D-SI unit raw string + + Raises: + RuntimeWarning: double backslashes in D-SI string + RuntimeWarning: empty D-SI string + + Returns: + dsiTree: dsiTree object containing the D-SI unit + """ + warningMessages = [] + # Catch any double (triple...) \ before they annoy us + while r'\\' in dsiString: + warningMessages.append(_warn(f"Double backslash found in string, treating as one backslash: \"{dsiString}\"", RuntimeWarning)) + dsiString = dsiString.replace(r'\\', '\\') + + if dsiString == "": + warningMessages.append(_warn("Given D-SI string is empty!", RuntimeWarning)) + return _dsiTree(dsiString, [], warningMessages, self.latexDefaultWrapper, self.latexDefaultPrefix, self.latexDefaultSuffix) + + tree = [] + (tree, fractionWarnings) = self._parseDsiFraction(dsiString) + warningMessages += fractionWarnings + for i, node in enumerate(tree): + (tree[i], fractionlessWarnings) = self._parseFractionlessDsi(node) + warningMessages += fractionlessWarnings + return _dsiTree(dsiString, tree, warningMessages, self.latexDefaultWrapper, self.latexDefaultPrefix, self.latexDefaultSuffix) + + def _parseDsiFraction(self, dsiString: str): + """parses D-SI fraction into list of fraction elements Args: - dsiString (str): The D-SI string to be parsed + dsiString (str): D-SI unit raw string + + Raises: + RuntimeWarning: String must not contain more than one "per", + as defined in the D-SI specs Returns: - _dsiTree: The generated tree + list: strings separated by the "per" + list: warning messages of problems encountered while parsing """ - return _dsiTree(dsiString, self.latexDefaultWrapper, self.latexDefaultPrefix, self.latexDefaultSuffix) + tree = [] + warningMessages = [] + tree = dsiString.split(r"\per") + if len(tree) > 2: + warningMessages.append(_warn(r"The dsi string contains more than one \per, does not "+ + f"match specs! Given string: {dsiString}", + RuntimeWarning)) + return (tree, warningMessages) + + def _parseFractionlessDsi(self, dsiString:str): + """parses D-SI unit string without fractions + Args: + dsiString (str): D-SI unit raw string, not containing any fractions + + Raises: + RuntimeWarning: if string does not meet the specs + + Returns: + list: list of nodes + list: warning messages of problems encountered while parsing + """ + warningMessages = [] + items = dsiString.split("\\") + if items[0] == '': #first item of List should be empty, remove it + items.pop(0) + else: + warningMessages.append(_warn(f"string should start with \\, string given was \"{dsiString}\"", RuntimeWarning)) + nodes = [] + + (prefix, unit, exponent) = ('','','') + item = items.pop(0) + while True: + if item in _dsiPrefixesLatex: + prefix = item + try: + item = items.pop(0) + except IndexError: + item = '' + if item in _dsiUnitsLatex: + unit = item + try: + item = items.pop(0) + except IndexError: + item = '' + if re.match(r'tothe\{-?\d+\.?\d?\}', item): + exponent = item.split('{')[1].split('}')[0] + try: + item = items.pop(0) + except IndexError: + item = '' + elif re.match(r'tothe\{.*\}', item): + exponent = item.split('{')[1].split('}')[0] + _warn(f"The exponent \"{exponent}\" is not a number!", RuntimeWarning) + try: + item = items.pop(0) + except IndexError: + item = '' + if (prefix, unit, exponent) == ('','',''): + unit = item + try: + item = items.pop(0) + except IndexError: + item = '' + warningMessages.append(_warn(f"The identifier \"{unit}\" does not match any D-SI units!", RuntimeWarning)) + elif unit == '': + itemStr = "" + if prefix != "": + itemStr = itemStr + "\\" + prefix + if exponent != "": + itemStr = itemStr + r"\tothe{" + exponent + r"}" + warningMessages.append(_warn(f"This D-SI unit seems to be missing the base unit! \"{itemStr}\"", RuntimeWarning)) + + nodes.append(_node(prefix, unit, exponent)) + if (len(items) == 0) and (item == ''): break + (prefix, unit, exponent) = ('','','') + + return (nodes, warningMessages) class _dsiTree: - """D-SI representation in tree form, also includes validity check and warnings about D-SI string + """D-SI representation in tree form, also includes validity check and warnings about D-SI string. + Tree format: list of lists: + List format: + First layer: items of the fraction + Second layer: nodes containing prefix, unit, power """ - def __init__(self, dsiString: str, latexDefaultWrapper='$$', latexDefaultPrefix='', latexDefaultSuffix=''): + def __init__(self, dsiString: str, dsiTree, warningMessages, latexDefaultWrapper='$$', latexDefaultPrefix='', latexDefaultSuffix=''): """ Args: dsiString (str): the D-SI unit string to be parsed """ self.dsiString = dsiString - (self.tree, self.warnings) = _parseDsi(dsiString) + self.tree = dsiTree + self.warnings = warningMessages self.valid = len(self.warnings) == 0 self._latexDefaultWrapper = latexDefaultWrapper self._latexDefaultPrefix = latexDefaultPrefix @@ -126,136 +244,6 @@ class _node: return latexString - -def _parseDsi(dsiString: str): - """parses a D-SI string into a list of lists: - List format: - First layer: items of the fraction - Second layer: nodes containing prefix, unit, power - - - Args: - dsiString (str): D-SI unit raw string - - Raises: - RuntimeWarning: double backslashes in D-SI string - RuntimeWarning: empty D-SI string - - Returns: - list: tree containing the D-SI unit - list: warning messages of problems encountered while parsing - """ - warningMessages = [] - # Catch any double (triple...) \ before they annoy us - while r'\\' in dsiString: - warningMessages.append(_warn(f"Double backslash found in string, treating as one backslash: \"{dsiString}\"", RuntimeWarning)) - dsiString = dsiString.replace(r'\\', '\\') - - if dsiString == "": - warningMessages.append(_warn("Given D-SI string is empty!", RuntimeWarning)) - return ([], warningMessages) - - tree = [] - (tree, fractionWarnings) = _parseDsiFraction(dsiString) - warningMessages += fractionWarnings - for i, node in enumerate(tree): - (tree[i], fractionlessWarnings) = _parseFractionlessDsi(node) - warningMessages += fractionlessWarnings - return (tree, warningMessages) - -def _parseDsiFraction(dsiString: str): - """parses D-SI fraction into list of fraction elements - - Args: - dsiString (str): D-SI unit raw string - - Raises: - RuntimeWarning: String must not contain more than one "per", - as defined in the D-SI specs - - Returns: - list: strings separated by the "per" - list: warning messages of problems encountered while parsing - """ - tree = [] - warningMessages = [] - tree = dsiString.split(r"\per") - if len(tree) > 2: - warningMessages.append(_warn(r"The dsi string contains more than one \per, does not "+ - f"match specs! Given string: {dsiString}", - RuntimeWarning)) - return (tree, warningMessages) - -def _parseFractionlessDsi(dsiString:str): - """parses D-SI unit string without fractions - - Args: - dsiString (str): D-SI unit raw string, not containing any fractions - - Raises: - RuntimeWarning: if string does not meet the specs - - Returns: - list: list of nodes - list: warning messages of problems encountered while parsing - """ - warningMessages = [] - items = dsiString.split("\\") - if items[0] == '': #first item of List should be empty, remove it - items.pop(0) - else: - warningMessages.append(_warn(f"string should start with \\, string given was \"{dsiString}\"", RuntimeWarning)) - nodes = [] - - (prefix, unit, exponent) = ('','','') - item = items.pop(0) - while True: - if item in _dsiPrefixesLatex: - prefix = item - try: - item = items.pop(0) - except IndexError: - item = '' - if item in _dsiUnitsLatex: - unit = item - try: - item = items.pop(0) - except IndexError: - item = '' - if re.match(r'tothe\{-?\d+\.?\d?\}', item): - exponent = item.split('{')[1].split('}')[0] - try: - item = items.pop(0) - except IndexError: - item = '' - elif re.match(r'tothe\{.*\}', item): - exponent = item.split('{')[1].split('}')[0] - _warn(f"The exponent \"{exponent}\" is not a number!", RuntimeWarning) - try: - item = items.pop(0) - except IndexError: - item = '' - if (prefix, unit, exponent) == ('','',''): - unit = item - try: - item = items.pop(0) - except IndexError: - item = '' - warningMessages.append(_warn(f"The identifier \"{unit}\" does not match any D-SI units!", RuntimeWarning)) - elif unit == '': - itemStr = "" - if prefix != "": - itemStr = itemStr + "\\" + prefix - if exponent != "": - itemStr = itemStr + r"\tothe{" + exponent + r"}" - warningMessages.append(_warn(f"This D-SI unit seems to be missing the base unit! \"{itemStr}\"", RuntimeWarning)) - - nodes.append(_node(prefix, unit, exponent)) - if (len(items) == 0) and (item == ''): break - (prefix, unit, exponent) = ('','','') - - return (nodes, warningMessages) - def _warn(message: str, warningClass): """Output warning on command line and return warning message -- GitLab