From 76e31a6a8cfd52ce6b8bcf42dde6b8c8cee2053a Mon Sep 17 00:00:00 2001 From: "Philippe Le Van (@plv)" Date: Fri, 12 Apr 2024 18:23:33 +0200 Subject: [PATCH] fix_too_many_endif_buggy_43 (#35) fix_too_many_endif_buggy : issue 43 --- README.md | 3 +++ lotemplate/Statement/IfStatement.py | 8 ++++--- .../too_many_endif_strange.expected.txt | 5 +++++ .../files/content/too_many_endif_strange.json | 21 ++++++++++++++++++ .../files/content/too_many_endif_strange.odt | Bin 0 -> 14188 bytes lotemplate/unittest/test_content.py | 3 +++ 6 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 lotemplate/unittest/files/content/too_many_endif_strange.expected.txt create mode 100644 lotemplate/unittest/files/content/too_many_endif_strange.json create mode 100644 lotemplate/unittest/files/content/too_many_endif_strange.odt diff --git a/README.md b/README.md index a5d7dc7..85da15d 100644 --- a/README.md +++ b/README.md @@ -839,6 +839,9 @@ For trying to fix these problems, you can try: Versions ------------------------------- + +- v1.6.1 : 2024-04-12 : bugfix + - fix the issue https://github.com/Probesys/lotemplate/issues/34 : too many endif buggy - v1.6.0 : 2024-04-11 - allow put variables inside headers and footers - fix a bug when a variable is both inside the text content and inside a table (it should not arrive, but it is fixed) diff --git a/lotemplate/Statement/IfStatement.py b/lotemplate/Statement/IfStatement.py index 6947da9..d02b846 100644 --- a/lotemplate/Statement/IfStatement.py +++ b/lotemplate/Statement/IfStatement.py @@ -65,9 +65,11 @@ class IfStatement: end_regex = r'\[\s*endif\s*\]' start_regex_light = r""" - \[\s*if\s* # [if detection - (?:(?:.*?)\[\s*for(?:.*?)\])? # [foritem xxx] et [forindex] detection - (?:.*?) # anything but not too greedy + \[\s*if\s* # [if detection + (?:[^\[\]]*) # anything before the foritem or forindex + # ex: [if $foo.[forindex] == PP] + (?:\[\s*for(?:.*?)\])? # [foritem xxx] et [forindex] detection + (?:[^\]]*) # anything but not too greedy \] """ # remove comments, spaces and newlines diff --git a/lotemplate/unittest/files/content/too_many_endif_strange.expected.txt b/lotemplate/unittest/files/content/too_many_endif_strange.expected.txt new file mode 100644 index 0000000..3c00acd --- /dev/null +++ b/lotemplate/unittest/files/content/too_many_endif_strange.expected.txt @@ -0,0 +1,5 @@ +Test SAS + + nom= nom1, titre=titre1 ; + + diff --git a/lotemplate/unittest/files/content/too_many_endif_strange.json b/lotemplate/unittest/files/content/too_many_endif_strange.json new file mode 100644 index 0000000..985cf9e --- /dev/null +++ b/lotemplate/unittest/files/content/too_many_endif_strange.json @@ -0,0 +1,21 @@ +{ + "odoo(coop_forme_juridique)": { + "type": "text", + "value": "SAS" + }, + "odoo(mandataires_sas)": { + "type": "array", + "value": [ + { + "type": "PP", + "nom": "nom1", + "titre": "titre1" + }, + { + "type": "type2", + "nom": "nom2", + "titre": "titre2" + } + ] + } +} \ No newline at end of file diff --git a/lotemplate/unittest/files/content/too_many_endif_strange.odt b/lotemplate/unittest/files/content/too_many_endif_strange.odt new file mode 100644 index 0000000000000000000000000000000000000000..48805dd8807729a1ea094283d62a98c05a9a51b7 GIT binary patch literal 14188 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

$CTH82H`ULTw(kix5Djm>K=yzob% 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 Q