Commit a56530e0 authored by Robin Sonnabend's avatar Robin Sonnabend
Browse files

Do not accept broken Tag-like structures

e.g. [todo:who:what]
e.g. [todo;who]

/close #95
parent 2d22bca3
......@@ -170,7 +170,7 @@ class Protocol(DatabaseModel):
def create_localtops(self):
local_tops = []
for default_top in self.protocoltype.default_tops:
local_tops.append(LocalTOP(defaulttop_id=defaul_top.id,
local_tops.append(LocalTOP(defaulttop_id=default_top.id,
protocol_id=self.id, description=""))
return local_tops
......
......@@ -251,7 +251,11 @@ class Tag:
# v1: matches [text without semicolons]
#PATTERN = r"\[(?<content>(?:[^;\]]*;)*(?:[^;\]]*))\]"
# v2: needs at least two parts separated by a semicolon
PATTERN = r"\[(?<content>(?:[^;\]]*;)+(?:[^;\]]*))\]"
#PATTERN = r"\[(?<content>(?:[^;\]]*;)+(?:[^;\]]*))\]"
# v3: also match [] without semicolons inbetween, as there is not other use for that
PATTERN = r"\[(?<content>[^\]]*)\]"
KNOWN_TAGS = ["todo", "url", "beschluss"]
class Empty(Element):
......@@ -514,7 +518,7 @@ def main(test_file_name=None):
source = f.read()
try:
tree = parse(source)
tree.dump()
print(tree.dump())
except ParserException as e:
print(e)
else:
......
......@@ -477,7 +477,7 @@ def new_protocol():
form.populate_obj(protocol)
db.session.add(protocol)
db.session.commit()
for local_top in protocol.create_localtops:
for local_top in protocol.create_localtops():
db.session.add(local_top)
db.session.commit()
tasks.push_tops_to_calendar(protocol)
......
......@@ -18,8 +18,8 @@ latex_chars = [
('_', '\\_'),
('{', '\\{'),
('}', '\\}'),
#('[', '\\['),
#(']', '\\]'),
('[', '\\['),
(']', '\\]'),
#('"', '"\''),
('~', r'$\sim{}$'),
('^', r'\textasciicircum{}'),
......
......@@ -148,6 +148,17 @@ def parse_protocol_async_inner(protocol, encoded_kwargs):
db.session.add(error)
db.session.commit()
return
# tags
tags = tree.get_tags()
for tag in tags:
if tag.name not in Tag.KNOWN_TAGS:
error = protocol.create_error("Parsing", "Invalid tag",
"The tag in line {} has the kind '{}', which is "
"not defined. This is probably an error mit a missing "
"semicolon.".format(tag.linenumber, tag.name))
db.session.add(error)
db.session.commit()
return
# todos
old_todo_number_map = {}
for todo in protocol.todos:
......@@ -158,14 +169,14 @@ def parse_protocol_async_inner(protocol, encoded_kwargs):
for todo in old_todos:
protocol.todos.remove(todo)
db.session.commit()
tags = tree.get_tags()
todo_tags = [tag for tag in tags if tag.name == "todo"]
for todo_tag in todo_tags:
if len(todo_tag.values) < 2:
error = protocol.create_error("Parsing", "Invalid todo-tag",
"The todo tag in line {} needs at least "
"information on who and what, "
"but has less than that.".format(todo_tag.linenumber))
"but has less than that. This is probably "
"a missing semicolon.".format(todo_tag.linenumber))
db.session.add(error)
db.session.commit()
return
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment