From ebc770a2912edb30f57530b956c468510605dd95 Mon Sep 17 00:00:00 2001
From: ST-Imrie <117174577+ST-Imrie@users.noreply.github.com>
Date: Thu, 1 May 2025 11:39:48 +0100
Subject: [PATCH] Updated RichText Jinja tags from rr/rp to r/q and updated
test template
---
docxtpl/template.py | 26 ++++++++++----------
tests/richtextparagraph.py | 13 +++++++++-
tests/templates/richtext_paragraph_tpl.docx | Bin 18357 -> 20437 bytes
3 files changed, 25 insertions(+), 14 deletions(-)
diff --git a/docxtpl/template.py b/docxtpl/template.py
index e9c9cc4..20dc43e 100644
--- a/docxtpl/template.py
+++ b/docxtpl/template.py
@@ -160,7 +160,7 @@ class DocxTemplate(object):
flags=re.DOTALL,
)
src_xml = re.sub(
- r"({{r.\s.*?}}|{%r.\s.*?%})",
+ r"({{[rq]\s.*?}}|{%[rq].\s.*?%})",
r'\1',
src_xml,
flags=re.DOTALL,
@@ -173,7 +173,7 @@ class DocxTemplate(object):
r"-%}(?:(?!]|{%|{{).)*?]*?>", "%}", src_xml, flags=re.DOTALL
)
- for y in ["tr", "tc", "p"]:
+ for y in ["tr", "tc", "p", "r"]:
# replace into xml code the row/paragraph/run containing
# {%y xxx %} or {{y xxx}} template tag
# by {% xxx %} or {{ xx }} without any surrounding tags :
@@ -184,17 +184,17 @@ class DocxTemplate(object):
)
src_xml = re.sub(pat, r"\1 \2", src_xml, flags=re.DOTALL)
- for y in ["p", "r"]:
- # replace into xml paragraph or run containing
- # {%rp xxx %} or {{rp xxx}} template tag
- # by {% xxx %} or {{ xx }} without any surrounding tags
- # This allow for inline {rr }} and paragraph {rp }) styling
- # This is mandatory to have jinja2 generating correct xml code
- pat = (
- r"](?:(?!]).)*({%%|{{)r%(y)s ([^}%%]*(?:%%}|}})).*?"
- % {"y": y}
- )
- src_xml = re.sub(pat, r"\1 \2", src_xml, flags=re.DOTALL)
+ # For paragraph level richtext
+ # replace into xml paragraph containing
+ # {%q xxx %} or {{q xxx}} template tag
+ # by {% xxx %} or {{ xx }} without any surrounding tags
+ # This allow for inline {r }} and paragraph {q }) styling
+ # This is mandatory to have jinja2 generating correct xml code
+ pat = (
+ r"](?:(?!]).)*({%%|{{)q ([^}%%]*(?:%%}|}})).*?"
+
+ )
+ src_xml = re.sub(pat, r"\1 \2", src_xml, flags=re.DOTALL)
for y in ["tr", "tc", "p"]:
# same thing, but for {#y xxx #} (but not where y == 'r', since that
diff --git a/tests/richtextparagraph.py b/tests/richtextparagraph.py
index e06bf47..e63f91c 100644
--- a/tests/richtextparagraph.py
+++ b/tests/richtextparagraph.py
@@ -12,9 +12,20 @@ rtp = RichTextParagraph()
rt = RichText()
rtp.add("The rich text paragraph function allows paragraph styles to be added to text",parastyle="myrichparastyle")
+rtp.add("Any built in paragraph style can be used", parastyle="IntenseQuote")
+rtp.add("or you can add your own, unlocking all style options", parastyle="createdStyle")
+rtp.add("To use, just create a style in your template word doc with the formatting you want and call it in the code.", parastyle="normal")
rtp.add("This allows for the use of")
-rtp.add("bullet\apoints.", parastyle="SquareBullet")
+rtp.add("custom bullet\apoints", parastyle="SquareBullet")
+rtp.add("Numbered Bullet Points", parastyle="BasicNumbered")
+rtp.add("and Alpha Bullet Points.", parastyle="alphaBracketNumbering")
+rtp.add("You can", parastyle="normal")
+rtp.add("set the", parastyle="centerAlign")
+rtp.add("text alignment", parastyle="rightAlign")
+rtp.add("as well as the spacing between lines of text. Like this for example, this text has very tight spacing between the lines.\aIt also has no space between paragraphs of the same style.", parastyle="TightLineSpacing")
+rtp.add("Unlike this one, which has extra large spacing between lines for when you want to space things out a bit or just write a little less.", parastyle="WideLineSpacing")
+rtp.add("You can also set the background colour of a line.", parastyle="LineShadingGreen")
rt.add("This works with ")
rt.add("Rich ", bold=True)
diff --git a/tests/templates/richtext_paragraph_tpl.docx b/tests/templates/richtext_paragraph_tpl.docx
index 738c5025ba172ecaa1d41abfc64a3c1a2174eb5c..993b466d3386e91070482e66ead1938b608b40b9 100644
GIT binary patch
delta 13244
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
TQbOQGGD$!w7N~N$e@y-#KPw=u
delta 11253
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
sMGo+m3^~F7`FH%w1^~>t!6dRgkkNc#9a(b%7