2
0
mirror of https://expo.survex.com/repositories/troggle/.git synced 2024-11-25 08:41:51 +00:00

working regex

This commit is contained in:
Philip Sargent 2023-11-17 12:53:05 +02:00
parent 5961175193
commit 41e64a217c

View File

@ -300,7 +300,6 @@ class LoadingSurvex:
rx_commteam = re.compile(r"(?i)\s*(Messteam|Zeichner)\s*[:]?(.*)")
rx_quotedtitle = re.compile(r'(?i)^"(.*)"$')
rx_fixline = re.compile(r"(?i)^\s*([\w\d_\.\-]+)\s+(?:reference)?\s*([\d\.]*)\s+([\d\.]*)\s+([\d\.]*)(.*)$")
@ -615,19 +614,25 @@ class LoadingSurvex:
def LoadSurvexFix(self, survexblock, line):
"""*fix is a station geolocation, units depend on a previous *cs setting
NOTE 'line' is not the full line, it is 'arg' and the comments have been stripped !
SO we have to recognise the '*fix' too
"""
# fixline = re.match("(?i)\s*([\w\d_\.\-]+)\s+(?:reference)?\s*([\d\.]*)\s+([\d\.]*)\s+([\d\.]*)\s*(.*)$", line)
fixline = self.rx_fixline.match(line)
# *fix|36|reference|36359.40|82216.08|2000.00\n
rx_fixline = re.compile(r"(?i)^\s*[*]fix\s+([\w\d_\.\-]+)\s+(?:reference)?\s*([\d\.]*)\s+([\d\.]*)\s+([\d\.]*).*$")
line = line.replace("\n","")
#fixline = self.rx_fixline.match(line)
fixline = rx_fixline.match(line)
if not fixline:
message = f'BAD fix regex {line.replace(" ","|")} {survexblock.survexfile.path}:{survexblock}'
display = line.replace(" ","|")
message = f'BAD fix regex {display}++{survexblock.parent}:{survexblock}@{survexblock.survexfile}'
print(self.insp + message)
stash_data_issue(parser="survex", message=message)
else:
fixdata = fixline.groups()
#print(fixline.group(1), fixline.group(5))
print(f"'{line}'")
#print(f"'{line}'")
name = fixdata[0]
if name in self.fixes:
if (survexblock, name) in self.fixes:
message = f"! Duplicate *FIX: id '{line}' ({survexblock}) {survexblock.survexfile.path}"
print(self.insp + message)
stash_data_issue(parser="survex", message=message)
@ -636,10 +641,10 @@ class LoadingSurvex:
return
try:
#_, _, alt, *rest = (fixdata + [None]*4)[:4]
name, _, _, alt, comment = fixdata
#_, _, alt, *rest = (fixdata + [None]*5)[:5]
name, _, _, alt, comment = (list(fixdata) + [None]*5)[:5]
fixid = str(survexblock.id)+ ":"+ name
self.fixes[fixid] = (survexblock, alt, comment)
self.fixes[fixid] = (survexblock, name)
message = f"{name}, {fixdata=}, last:{fixline.groups()[-1]}"
print(self.insp + message)
except Exception as e:
@ -1718,7 +1723,7 @@ class LoadingSurvex:
if oldflags["skiplegs"] != self.flagsstar["skiplegs"]:
print(f" # POP 'any' flag now:'{self.flagsstar['skiplegs']}' was:{oldflags['skiplegs']} ")
def starstatement(star):
def starstatement(star, fullline):
"""Interprets a survex comamnd where * is the first character on the line, e.g. *begin"""
nonlocal survexblock
nonlocal blkid
@ -1837,7 +1842,7 @@ class LoadingSurvex:
elif self.rx_date.match(cmd):
self.LoadSurvexDate(survexblock, args)
elif self.rx_fix.match(cmd):
self.LoadSurvexFix(survexblock, args)
self.LoadSurvexFix(survexblock, fullline) # but we want the comment on this line
elif self.rx_units.match(cmd):
self.LoadSurvexUnits(survexblock, args)
elif self.rx_team.match(cmd):
@ -1863,6 +1868,7 @@ class LoadingSurvex:
self.lineno += 1
sline, comment = self.rx_comment.match(svxline).groups()
if comment:
# ; at beginning of line
# this catches the ;|*include NEWFILE and ;|*edulcni ENDOFFILE lines too
self.LoadSurvexComment(survexblock, comment)
else:
@ -1885,7 +1891,7 @@ class LoadingSurvex:
star = self.rx_star.match(sline)
if star:
# yes we are reading a *command
starstatement(star)
starstatement(star, svxline)
else: # not a *cmd so we are reading data OR a ";" rx_comment failed. We hope.
self.LoadSurvexLeg(survexblock, sline, comment, svxline)