lino 24.11.0__py3-none-any.whl → 25.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lino/__init__.py +1 -1
- lino/core/actions.py +2 -4
- lino/core/actors.py +35 -14
- lino/core/dbtables.py +12 -12
- lino/core/fields.py +27 -18
- lino/core/inject.py +9 -2
- lino/core/kernel.py +11 -12
- lino/core/model.py +25 -39
- lino/core/renderer.py +3 -4
- lino/core/requests.py +91 -92
- lino/core/site.py +5 -46
- lino/core/store.py +4 -4
- lino/core/tables.py +0 -16
- lino/core/utils.py +5 -2
- lino/help_texts.py +7 -5
- lino/locale/bn/LC_MESSAGES/django.po +1225 -909
- lino/locale/de/LC_MESSAGES/django.mo +0 -0
- lino/locale/de/LC_MESSAGES/django.po +1748 -1392
- lino/locale/django.pot +1150 -909
- lino/locale/es/LC_MESSAGES/django.po +1721 -1347
- lino/locale/et/LC_MESSAGES/django.po +1267 -954
- lino/locale/fr/LC_MESSAGES/django.mo +0 -0
- lino/locale/fr/LC_MESSAGES/django.po +1207 -925
- lino/locale/nl/LC_MESSAGES/django.po +1261 -942
- lino/locale/pt_BR/LC_MESSAGES/django.po +1204 -906
- lino/locale/zh_Hant/LC_MESSAGES/django.po +1204 -906
- lino/mixins/dupable.py +8 -7
- lino/mixins/periods.py +10 -8
- lino/modlib/checkdata/__init__.py +1 -1
- lino/modlib/comments/choicelists.py +1 -1
- lino/modlib/comments/fixtures/demo2.py +4 -1
- lino/modlib/comments/mixins.py +9 -10
- lino/modlib/comments/models.py +4 -4
- lino/modlib/comments/ui.py +11 -2
- lino/modlib/dupable/models.py +10 -14
- lino/modlib/gfks/mixins.py +8 -1
- lino/modlib/jinja/choicelists.py +3 -3
- lino/modlib/jinja/renderer.py +2 -0
- lino/modlib/languages/fixtures/all_languages.py +4 -6
- lino/modlib/linod/mixins.py +3 -2
- lino/modlib/memo/mixins.py +17 -215
- lino/modlib/memo/models.py +41 -12
- lino/modlib/memo/parser.py +7 -3
- lino/modlib/notify/mixins.py +35 -34
- lino/modlib/periods/choicelists.py +46 -0
- lino/modlib/periods/mixins.py +26 -1
- lino/modlib/periods/models.py +17 -45
- lino/modlib/printing/choicelists.py +3 -3
- lino/modlib/publisher/choicelists.py +1 -4
- lino/modlib/search/models.py +17 -11
- lino/modlib/system/fixtures/__init__.py +0 -0
- lino/modlib/system/fixtures/std.py +5 -0
- lino/modlib/system/models.py +3 -2
- lino/modlib/uploads/__init__.py +10 -1
- lino/modlib/uploads/choicelists.py +3 -3
- lino/modlib/uploads/mixins.py +49 -51
- lino/modlib/uploads/models.py +144 -61
- lino/modlib/uploads/ui.py +12 -6
- lino/modlib/uploads/utils.py +113 -0
- lino/modlib/users/mixins.py +9 -6
- lino/modlib/weasyprint/choicelists.py +17 -7
- lino/utils/__init__.py +6 -0
- lino/utils/choosers.py +21 -8
- lino/utils/html.py +1 -1
- lino/utils/instantiator.py +9 -0
- lino/utils/media.py +2 -3
- lino/utils/soup.py +311 -0
- {lino-24.11.0.dist-info → lino-25.1.0.dist-info}/METADATA +2 -2
- {lino-24.11.0.dist-info → lino-25.1.0.dist-info}/RECORD +72 -67
- {lino-24.11.0.dist-info → lino-25.1.0.dist-info}/WHEEL +1 -1
- {lino-24.11.0.dist-info → lino-25.1.0.dist-info}/licenses/AUTHORS.rst +0 -0
- {lino-24.11.0.dist-info → lino-25.1.0.dist-info}/licenses/COPYING +0 -0
lino/mixins/dupable.py
CHANGED
@@ -9,7 +9,7 @@ Don't mix up this module with :mod:`lino.mixins.duplicable`. Models
|
|
9
9
|
are "duplicable" if users may *want* to duplicate some instance
|
10
10
|
thereof, while "dupable" implies that the duplicates are *unwanted*.
|
11
11
|
To dupe *somebody* means "to make a dupe of; deceive; delude; trick."
|
12
|
-
(`reference.com <
|
12
|
+
(`reference.com <https://dictionary.reference.com/browse/dupe>`_), and
|
13
13
|
to dupe *something* means to duplicate it (eventually in order to
|
14
14
|
cheat somebody e.g. by making a cheap copy of a valuable object).
|
15
15
|
|
@@ -31,9 +31,6 @@ in Python
|
|
31
31
|
by Frank Hofmann (2018-02-12)
|
32
32
|
"""
|
33
33
|
|
34
|
-
import six
|
35
|
-
from builtins import map
|
36
|
-
|
37
34
|
from django.conf import settings
|
38
35
|
from django.db import models
|
39
36
|
|
@@ -76,6 +73,10 @@ class CheckedSubmitInsert(SubmitInsert):
|
|
76
73
|
else:
|
77
74
|
ok(ar)
|
78
75
|
|
76
|
+
# TODO: remove duplicate code. PhoneticWordBase.reduce_word() is exactly the
|
77
|
+
# same code as lino.modlib.dupable.models.PhoneticWord.reduce_word(). One of
|
78
|
+
# them is used in welfare, the other in avanti.
|
79
|
+
|
79
80
|
|
80
81
|
class PhoneticWordBase(dd.Model):
|
81
82
|
"""Base class for the table of phonetic words of a given dupable
|
@@ -88,7 +89,7 @@ class PhoneticWordBase(dd.Model):
|
|
88
89
|
|
89
90
|
"""
|
90
91
|
|
91
|
-
class Meta
|
92
|
+
class Meta:
|
92
93
|
abstract = True
|
93
94
|
|
94
95
|
allow_cascaded_delete = ["owner"]
|
@@ -118,7 +119,7 @@ class PhoneticWordBase(dd.Model):
|
|
118
119
|
dms = dm[0] or dm[1]
|
119
120
|
if dms is None:
|
120
121
|
return ""
|
121
|
-
if isinstance(dms,
|
122
|
+
if isinstance(dms, bytes):
|
122
123
|
dms = dms.decode("utf8")
|
123
124
|
return dms
|
124
125
|
|
@@ -141,7 +142,7 @@ class Dupable(dd.Model):
|
|
141
142
|
:mod:`lino_welfare.modlib.dupable_clients`
|
142
143
|
"""
|
143
144
|
|
144
|
-
class Meta
|
145
|
+
class Meta:
|
145
146
|
abstract = True
|
146
147
|
|
147
148
|
submit_insert = CheckedSubmitInsert()
|
lino/mixins/periods.py
CHANGED
@@ -7,10 +7,10 @@ Defines classes related to date ranges.
|
|
7
7
|
|
8
8
|
import datetime
|
9
9
|
|
10
|
-
try:
|
11
|
-
|
12
|
-
except ImportError:
|
13
|
-
|
10
|
+
# try:
|
11
|
+
# import pytz
|
12
|
+
# except ImportError:
|
13
|
+
# pytz = None
|
14
14
|
|
15
15
|
from django.db import models
|
16
16
|
from django.conf import settings
|
@@ -204,6 +204,7 @@ class Ended(CombinedDateTime):
|
|
204
204
|
|
205
205
|
|
206
206
|
class DateRangeObservable(Model):
|
207
|
+
|
207
208
|
class Meta(object):
|
208
209
|
abstract = True
|
209
210
|
|
@@ -235,8 +236,9 @@ class DateRangeObservable(Model):
|
|
235
236
|
|
236
237
|
class DateRange(DateRangeObservable):
|
237
238
|
"""
|
238
|
-
|
239
|
-
|
239
|
+
|
240
|
+
A model mixin that adds two fields `start_date` and `end_date`.
|
241
|
+
:class:`DateRangeObservable`
|
240
242
|
|
241
243
|
Designed for usage with
|
242
244
|
:class:`lino.modlib.system.PeriodEvents`.
|
@@ -280,9 +282,9 @@ DateRange.set_widget_options("end_date", width=10)
|
|
280
282
|
|
281
283
|
class ObservedDateRange(ParameterPanel):
|
282
284
|
""":class:`lino.core.param_panel.ParameterPanel` with two fields
|
283
|
-
`start_date` and `end_date
|
285
|
+
`start_date` and `end_date`.
|
284
286
|
|
285
|
-
|
287
|
+
You must define yourself a :meth:`get_request_queryset` method in order to
|
286
288
|
actually use these two parameter fields.
|
287
289
|
|
288
290
|
"""
|
@@ -33,7 +33,7 @@ elif emotion_range == "social":
|
|
33
33
|
|
34
34
|
class ObservedTime(ObservedEvent):
|
35
35
|
def __init__(self, value, name, text):
|
36
|
-
super(
|
36
|
+
super().__init__(value, text=text, name=name)
|
37
37
|
|
38
38
|
def add_filter(self, qs, pv):
|
39
39
|
if pv.start_date:
|
@@ -14,6 +14,7 @@ from django.utils.timezone import make_aware
|
|
14
14
|
from lino.modlib.comments.mixins import Commentable
|
15
15
|
|
16
16
|
styled = """<h1 style="color: #5e9ca0;">Styled comment <span style="color: #2b2301;">pasted from word!</span> </h1>"""
|
17
|
+
|
17
18
|
table = """<table class="editorDemoTable"><thead>
|
18
19
|
<tr><td>Who</td><td>What</td><td>Done?</td></tr></thead><tbody><tr><td>Him</td><td>Bar</td><td> </td></tr><tr><td>Her</td><td>Foo the Bar</td><td><strong style="font-size: 17px; color: #2b2301;">x</strong></td></tr><tr><td>Them</td><td><span id="demoId">Floop the pig<br /></span></td><td>x</td></tr></tbody></table>"""
|
19
20
|
lorem = """<p>Lorem ipsum <strong> dolor sit amet</strong>, consectetur adipiscing elit. Nunc cursus felis nisi, eu pellentesque lorem lobortis non. Aenean non sodales neque, vitae venenatis lectus. In eros dui, gravida et dolor at, pellentesque hendrerit magna. Quisque vel lectus dictum, rhoncus massa feugiat, condimentum sem. Donec elit nisl, placerat vitae imperdiet eget, hendrerit nec quam. Ut elementum ligula vitae odio efficitur rhoncus. Duis in blandit neque. Sed dictum mollis volutpat. Morbi at est et nisi euismod viverra. Nulla quis lacus vitae ante sollicitudin tincidunt. Donec nec enim in leo vulputate ultrices. Suspendisse potenti. Ut elit nibh, porta ut enim ac, convallis molestie risus. Praesent consectetur lacus lacus, in faucibus justo fringilla vel.</p>
|
@@ -22,7 +23,8 @@ short_lorem = """<p>Lorem ipsum <strong> dolor sit amet</strong>, consectetur ad
|
|
22
23
|
<p>Phasellus gravida ullamcorper eros, sit amet blandit sapien laoreet quis.</p>
|
23
24
|
<p>Donec accumsan mauris at risus lobortis, nec pretium tortor aliquam. Nulla vel enim vel eros venenatis congue.</p>"""
|
24
25
|
|
25
|
-
breaking = '<p>breaking <!--[if gte mso 9]><xml>\n <o:OfficeDocumentSettings>\n <o:AllowPNG/>\n </o:OfficeDocumentSettings>\n</xml><![endif]--></p>\n<p><!--[if gte mso 9]><xml>\n <w:WordDocument>\n <w:View>Normal</w:View>\n <w:Zoom>0</w:Zoom>\n <w:TrackMoves/>\n <w:TrackFormatting/>\n <w:HyphenationZone>21</w:HyphenationZone>\n <w:PunctuationKerning/>\n <w:ValidateAgainstSchemas/>\n <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>\n <w:IgnoreMixedContent>false</w:IgnoreMixedContent>\n <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>\n <w:DoNotPromoteQF/>\n <w:LidThemeOther>FR-BE</w:LidThemeOther>\n <w:LidThemeAsian>X-NONE</w:LidThemeAsian>\n <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>\n <w:Compatibility>\n <w:BreakWrappedTables/>\n <w:SnapToGridInCell/>\n <w:WrapTextWithPunct/>\n <w:UseAsianBreakRules/>\n <w:DontGrowAutofit/>\n <w:SplitPgBreakAndParaMark/>\n <w:EnableOpenTypeKerning/>\n <w:DontFlipMirrorIndents/>\n <w:OverrideTableStyleHps/>\n </w:Compatibility>\n <m:mathPr>\n <m:mathFont m:val="Cambria Math"/>\n <m:brkBin m:val="before"/>\n <m:brkBinSub m:val="--"/>\n <m:smallFrac m:val="off"/>\n <m:dispDef/>\n <m:lMargin m:val="0"/>\n <m:rMargin m:val="0"/>\n <m:defJc m:val="centerGroup"/>\n <m:wrapIndent m:val="1440"/>\n <m:intLim m:val="subSup"/>\n <m:naryLim m:val="undOvr"/>\n </m:mathPr></w:WordDocument>\n</xml><![endif]--><!--[if gte mso 9]><xml>\n <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"\n DefSemiHidden="true" DefQFormat="false" DefPriority="99"\n LatentStyleCount="267">\n <w:LsdException Locked="false" Priority="0" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Normal"/>\n <w:LsdException Locked="false" Priority="9" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 1"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 2"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 3"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 4"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 5"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 6"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 7"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 8"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 9"/>\n <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>\n <w:LsdException Locked="false" Priority="10" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Title"/>\n <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>\n <w:LsdException Locked="false" Priority="11" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>\n <w:LsdException Locked="false" Priority="22" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Strong"/>\n <w:LsdException Locked="false" Priority="20" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>\n <w:LsdException Locked="false" Priority="59" SemiHidden="false"\n UnhideWhenUsed="false" Name="Table Grid"/>\n <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>\n <w:LsdException Locked="false" Priority="1" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading Accent 1"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List Accent 1"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid Accent 1"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>\n <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>\n <w:LsdException Locked="false" Priority="34" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>\n <w:LsdException Locked="false" Priority="29" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Quote"/>\n <w:LsdException Locked="false" Priority="30" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List Accent 1"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List Accent 1"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading Accent 2"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List Accent 2"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid Accent 2"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List Accent 2"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List Accent 2"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading Accent 3"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List Accent 3"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid Accent 3"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List Accent 3"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List Accent 3"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading Accent 4"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List Accent 4"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid Accent 4"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List Accent 4"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List Accent 4"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading Accent 5"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List Accent 5"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid Accent 5"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List Accent 5"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List Accent 5"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading Accent 6"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List Accent 6"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid Accent 6"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List Accent 6"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List Accent 6"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>\n <w:LsdException Locked="false" Priority="19" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>\n <w:LsdException Locked="false" Priority="21" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>\n <w:LsdException Locked="false" Priority="31" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>\n <w:LsdException Locked="false" Priority="32" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>\n <w:LsdException Locked="false" Priority="33" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>\n <w:LsdException Locked="false" Priority="37" Name="Bibliography"/>\n <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>\n </w:LatentStyles>\n</xml><![endif]--><!--[if gte mso 10]>\n<style>\n /* Style Definitions */\n table.MsoNormalTable\n\t{mso-style-name:"Tableau Normal";\n\tmso-tstyle-rowband-size:0;\n\tmso-tstyle-colband-size:0;\n\tmso-style-noshow:yes;\n\tmso-style-priority:99;\n\tmso-style-parent:"";\n\tmso-padding-alt:0cm 5.4pt 0cm 5.4pt;\n\tmso-para-margin:0cm;\n\tmso-para-margin-bottom:.0001pt;\n\tmso-pagination:widow-orphan;\n\tfont-size:10.0pt;\n\tfont-family:"Times New Roman","serif";}\n</style>\n<![endif]--></p>\n<p class="MsoNormal" style="mso-outline-level: 1;"><strong><span style="font-size: 11.0pt; font-family: \'Calibri\',\'sans-serif\'; mso-ansi-language: FR;" lang="FR">De :</span></strong><span style="font-size: 11.0pt; font-family: \'Calibri\',\'sans-serif\'; mso-ansi-language: FR;" lang="FR"> <a href="mailto:lino@foo.net">lino@foo.net</a> [<a href="mailto:foo@bar.com">mailto:foo@bar.com</a>] <br /> <strong>Envoyé :</strong> mardi 18 octobre 2016 08:52<br /> <strong>À :</strong> <a href="mailto:Far@baz.net">eexample@foo.com</a><br /> <strong>Objet :</strong> [welcht] YOU modified FOO BAR</span></p>\n<p class="MsoNormal"> </p>\n<p>Dear Aurélie ,</p>\n<p>this is to notify / BAR</p>\n<p>BAR modified </p>\n<p>TODO: include a summary of the modifications.</p>\n<p>Any subsequent notifications about foo/ until you view this notification in the Lino web interface. Please visit</p>\n<p class="MsoNormal"><a href="None">None</a></p>\n<p>and follow your welcome messages.</p>'
|
26
|
+
breaking = """<p>breaking <!--[if gte mso 9]><xml>\n <o:OfficeDocumentSettings>\n <o:AllowPNG/>\n </o:OfficeDocumentSettings>\n</xml><![endif]--></p>\n<p><!--[if gte mso 9]><xml>\n <w:WordDocument>\n <w:View>Normal</w:View>\n <w:Zoom>0</w:Zoom>\n <w:TrackMoves/>\n <w:TrackFormatting/>\n <w:HyphenationZone>21</w:HyphenationZone>\n <w:PunctuationKerning/>\n <w:ValidateAgainstSchemas/>\n <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>\n <w:IgnoreMixedContent>false</w:IgnoreMixedContent>\n <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>\n <w:DoNotPromoteQF/>\n <w:LidThemeOther>FR-BE</w:LidThemeOther>\n <w:LidThemeAsian>X-NONE</w:LidThemeAsian>\n <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>\n <w:Compatibility>\n <w:BreakWrappedTables/>\n <w:SnapToGridInCell/>\n <w:WrapTextWithPunct/>\n <w:UseAsianBreakRules/>\n <w:DontGrowAutofit/>\n <w:SplitPgBreakAndParaMark/>\n <w:EnableOpenTypeKerning/>\n <w:DontFlipMirrorIndents/>\n <w:OverrideTableStyleHps/>\n </w:Compatibility>\n <m:mathPr>\n <m:mathFont m:val="Cambria Math"/>\n <m:brkBin m:val="before"/>\n <m:brkBinSub m:val="--"/>\n <m:smallFrac m:val="off"/>\n <m:dispDef/>\n <m:lMargin m:val="0"/>\n <m:rMargin m:val="0"/>\n <m:defJc m:val="centerGroup"/>\n <m:wrapIndent m:val="1440"/>\n <m:intLim m:val="subSup"/>\n <m:naryLim m:val="undOvr"/>\n </m:mathPr></w:WordDocument>\n</xml><![endif]--><!--[if gte mso 9]><xml>\n <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"\n DefSemiHidden="true" DefQFormat="false" DefPriority="99"\n LatentStyleCount="267">\n <w:LsdException Locked="false" Priority="0" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Normal"/>\n <w:LsdException Locked="false" Priority="9" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 1"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 2"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 3"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 4"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 5"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 6"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 7"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 8"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 9"/>\n <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>\n <w:LsdException Locked="false" Priority="10" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Title"/>\n <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>\n <w:LsdException Locked="false" Priority="11" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>\n <w:LsdException Locked="false" Priority="22" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Strong"/>\n <w:LsdException Locked="false" Priority="20" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>\n <w:LsdException Locked="false" Priority="59" SemiHidden="false"\n UnhideWhenUsed="false" Name="Table Grid"/>\n <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>\n <w:LsdException Locked="false" Priority="1" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading Accent 1"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List Accent 1"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid Accent 1"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>\n <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>\n <w:LsdException Locked="false" Priority="34" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>\n <w:LsdException Locked="false" Priority="29" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Quote"/>\n <w:LsdException Locked="false" Priority="30" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List Accent 1"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List Accent 1"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading Accent 2"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List Accent 2"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid Accent 2"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List Accent 2"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List Accent 2"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading Accent 3"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List Accent 3"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid Accent 3"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List Accent 3"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List Accent 3"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading Accent 4"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List Accent 4"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid Accent 4"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List Accent 4"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List Accent 4"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading Accent 5"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List Accent 5"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid Accent 5"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List Accent 5"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List Accent 5"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading Accent 6"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List Accent 6"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid Accent 6"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List Accent 6"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List Accent 6"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>\n <w:LsdException Locked="false" Priority="19" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>\n <w:LsdException Locked="false" Priority="21" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>\n <w:LsdException Locked="false" Priority="31" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>\n <w:LsdException Locked="false" Priority="32" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>\n <w:LsdException Locked="false" Priority="33" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>\n <w:LsdException Locked="false" Priority="37" Name="Bibliography"/>\n <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>\n </w:LatentStyles>\n</xml><![endif]--><!--[if gte mso 10]>\n<style>\n /* Style Definitions */\n table.MsoNormalTable\n\t{mso-style-name:"Tableau Normal";\n\tmso-tstyle-rowband-size:0;\n\tmso-tstyle-colband-size:0;\n\tmso-style-noshow:yes;\n\tmso-style-priority:99;\n\tmso-style-parent:"";\n\tmso-padding-alt:0cm 5.4pt 0cm 5.4pt;\n\tmso-para-margin:0cm;\n\tmso-para-margin-bottom:.0001pt;\n\tmso-pagination:widow-orphan;\n\tfont-size:10.0pt;\n\tfont-family:"Times New Roman","serif";}\n</style>\n<![endif]--></p>\n<p class="MsoNormal" style="mso-outline-level: 1;"><strong><span style="font-size: 11.0pt; font-family: \'Calibri\',\'sans-serif\'; mso-ansi-language: FR;" lang="FR">De :</span></strong><span style="font-size: 11.0pt; font-family: \'Calibri\',\'sans-serif\'; mso-ansi-language: FR;" lang="FR"> <a href="mailto:lino@foo.net">lino@foo.net</a> [<a href="mailto:foo@bar.com">mailto:foo@bar.com</a>] <br /> <strong>Envoyé :</strong> mardi 18 octobre 2016 08:52<br /> <strong>À :</strong> <a href="mailto:Far@baz.net">eexample@foo.com</a><br /> <strong>Objet :</strong> [welcht] YOU modified FOO BAR</span></p>\n<p class="MsoNormal"> </p>\n<p>Dear Aurélie ,</p>\n<p>this is to notify / BAR</p>\n<p>BAR modified </p>\n<p>TODO: include a summary of the modifications.</p>\n<p>Any subsequent notifications about foo/ until you view this notification in the Lino web interface. Please visit</p>\n<p class="MsoNormal"><a href="None">None</a></p>\n<p>and follow your welcome messages.</p>"""
|
27
|
+
|
26
28
|
cond_comment = (
|
27
29
|
"<p><!--[if gte foo 123]>A conditional comment<![endif]--></p>\n<p>Hello</p>"
|
28
30
|
)
|
@@ -67,6 +69,7 @@ def objects():
|
|
67
69
|
obj.after_ui_create(ses)
|
68
70
|
obj.before_ui_save(ses, None)
|
69
71
|
# obj.full_clean()
|
72
|
+
obj.created = now
|
70
73
|
obj.modified = now
|
71
74
|
yield obj
|
72
75
|
obj.after_ui_save(ses, None)
|
lino/modlib/comments/mixins.py
CHANGED
@@ -89,10 +89,9 @@ class AddCommentField(dd.VirtualField):
|
|
89
89
|
|
90
90
|
|
91
91
|
class Commentable(MemoReferrable):
|
92
|
-
class Meta(object):
|
93
|
-
abstract = True
|
94
92
|
|
95
|
-
|
93
|
+
class Meta:
|
94
|
+
abstract = True
|
96
95
|
|
97
96
|
# add_comment = AddCommentField("comments.CommentsByRFC")
|
98
97
|
|
@@ -102,8 +101,8 @@ class Commentable(MemoReferrable):
|
|
102
101
|
def get_rfc_description(self, ar):
|
103
102
|
return ""
|
104
103
|
|
105
|
-
def get_comment_group(self):
|
106
|
-
|
104
|
+
# def get_comment_group(self):
|
105
|
+
# return None
|
107
106
|
|
108
107
|
if dd.is_installed("comments"):
|
109
108
|
|
@@ -112,17 +111,17 @@ class Commentable(MemoReferrable):
|
|
112
111
|
if rt.settings.SITE.loading_from_dump:
|
113
112
|
return
|
114
113
|
|
115
|
-
if self.
|
116
|
-
txt = self.create_comment_template.format(
|
117
|
-
model=self.__class__._meta.verbose_name, obj=self
|
118
|
-
)
|
119
|
-
# txt = self.get_create_comment(ar)
|
114
|
+
if (txt := self.get_create_comment_text(ar)) is not None:
|
120
115
|
comment = rt.models.comments.Comment(body=txt, owner=self)
|
121
116
|
comment.on_create(ar)
|
122
117
|
comment.full_clean()
|
123
118
|
comment.save_new_instance(ar)
|
124
119
|
# print("20220916 save_new_instance() created", comment, txt)
|
125
120
|
|
121
|
+
def get_create_comment_text(self, ar):
|
122
|
+
return _("Created new {model} {obj}.").format(
|
123
|
+
model=self.__class__._meta.verbose_name, obj=self)
|
124
|
+
|
126
125
|
@classmethod
|
127
126
|
def add_comments_filter(cls, qs, ar):
|
128
127
|
return qs
|
lino/modlib/comments/models.py
CHANGED
@@ -213,10 +213,10 @@ class Comment(
|
|
213
213
|
# s += ar.row_as_paragraph(o.owner)
|
214
214
|
s += ar.obj2htmls(o.owner)
|
215
215
|
# s += ar.obj2htmls(o.owner)
|
216
|
-
if False: # tickets show themselves their group in __str__()
|
217
|
-
|
218
|
-
|
219
|
-
|
216
|
+
# if False: # tickets show themselves their group in __str__()
|
217
|
+
# group = o.owner.get_comment_group()
|
218
|
+
# if group and group.ref:
|
219
|
+
# s += "@" + group.ref
|
220
220
|
|
221
221
|
if False and o.num_reactions:
|
222
222
|
txt = ngettext("{} reaction", "{} reactions", o.num_reactions).format(
|
lino/modlib/comments/ui.py
CHANGED
@@ -55,9 +55,12 @@ class CommentDetail(dd.DetailLayout):
|
|
55
55
|
body #body_full_preview
|
56
56
|
"""
|
57
57
|
general2 = """
|
58
|
-
reply
|
59
58
|
RepliesByComment
|
59
|
+
reply
|
60
60
|
"""
|
61
|
+
# i moved the reply field to the bottom because i stopped using it after
|
62
|
+
# repeated cases where my editing got lost because there was a traceback
|
63
|
+
# after hitting submit, and these tracebacks are difficult to reproduce.
|
61
64
|
|
62
65
|
more = dd.Panel(
|
63
66
|
"""
|
@@ -118,6 +121,12 @@ class Comments(dd.Table):
|
|
118
121
|
yield p
|
119
122
|
yield "reply_to"
|
120
123
|
|
124
|
+
@classmethod
|
125
|
+
def comments_created(cls, user, sd, ed):
|
126
|
+
pv = dict(user=user, start_date=sd, end_date=ed, observed_event=CommentEvents.created)
|
127
|
+
# pv = dict(start_date=sd, end_date=ed, observed_event=CommentEvents.created)
|
128
|
+
return cls.request(user=user, param_values=pv)
|
129
|
+
|
121
130
|
# @classmethod
|
122
131
|
# def get_card_title(cls, ar, obj):
|
123
132
|
# """Overrides the default behaviour"""
|
@@ -263,7 +272,7 @@ class CommentsByMentioned(CommentsByX):
|
|
263
272
|
Mention = rt.models.memo.Mention
|
264
273
|
assert not cls.model._meta.abstract
|
265
274
|
ct = ContentType.objects.get_for_model(cls.model)
|
266
|
-
mkw = gfk2lookup(Mention.
|
275
|
+
mkw = gfk2lookup(Mention.target, mi, owner_type=ct)
|
267
276
|
mentions = Mention.objects.filter(**mkw).values_list("owner_id", flat=True)
|
268
277
|
# mentions = [o.comment_id for o in Mention.objects.filter(**mkw)]
|
269
278
|
# print(mkw, mentions)
|
lino/modlib/dupable/models.py
CHANGED
@@ -8,7 +8,7 @@ Don't mix up this module with :mod:`lino.mixins.duplicable`. Models
|
|
8
8
|
are "duplicable" if users may *want* to duplicate some instance
|
9
9
|
thereof, while "dupable" implies that the duplicates are *unwanted*.
|
10
10
|
To dupe *somebody* means "to make a dupe of; deceive; delude; trick."
|
11
|
-
(`reference.com <
|
11
|
+
(`reference.com <https://dictionary.reference.com/browse/dupe>`_), and
|
12
12
|
to dupe *something* means to duplicate it (eventually in order to
|
13
13
|
cheat somebody e.g. by making a cheap copy of a valuable object).
|
14
14
|
|
@@ -23,15 +23,11 @@ and the `Double Metaphone
|
|
23
23
|
<https://en.wikipedia.org/wiki/Metaphone#Double_Metaphone>`_
|
24
24
|
algorithm. Read also Doug Hellmann about `Using Fuzzy Matching to
|
25
25
|
Search by Sound with Python
|
26
|
-
<
|
26
|
+
<https://www.informit.com/articles/article.aspx?p=1848528>`_
|
27
27
|
(2012-03-22).
|
28
28
|
|
29
29
|
"""
|
30
30
|
|
31
|
-
from __future__ import unicode_literals
|
32
|
-
import six
|
33
|
-
from builtins import object
|
34
|
-
|
35
31
|
from django.db import models
|
36
32
|
|
37
33
|
from lino.api import dd, _
|
@@ -54,7 +50,7 @@ class PhoneticWord(Controllable):
|
|
54
50
|
|
55
51
|
"""
|
56
52
|
|
57
|
-
class Meta
|
53
|
+
class Meta:
|
58
54
|
verbose_name = _("Phonetic word")
|
59
55
|
verbose_name_plural = _("Phonetic words")
|
60
56
|
|
@@ -86,16 +82,16 @@ class PhoneticWord(Controllable):
|
|
86
82
|
dms = dm[0] or dm[1]
|
87
83
|
if dms is None:
|
88
84
|
return ""
|
89
|
-
if isinstance(dms,
|
85
|
+
if isinstance(dms, bytes):
|
90
86
|
dms = dms.decode("utf8")
|
91
87
|
return dms
|
92
88
|
|
93
|
-
@classmethod
|
94
|
-
def get_simple_parameters(cls):
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
89
|
+
# @classmethod
|
90
|
+
# def get_simple_parameters(cls):
|
91
|
+
# for p in super(PhoneticWord, cls).get_simple_parameters():
|
92
|
+
# yield p
|
93
|
+
# yield "owner_id"
|
94
|
+
# yield "owner_type"
|
99
95
|
|
100
96
|
|
101
97
|
class PhoneticWords(dd.Table):
|
lino/modlib/gfks/mixins.py
CHANGED
@@ -56,7 +56,7 @@ class Controllable(dd.Model):
|
|
56
56
|
def update_owned_instance(self, controllable):
|
57
57
|
if self.owner:
|
58
58
|
self.owner.update_owned_instance(controllable)
|
59
|
-
super(
|
59
|
+
super().update_owned_instance(controllable)
|
60
60
|
|
61
61
|
def save(self, *args, **kw):
|
62
62
|
if settings.SITE.loading_from_dump:
|
@@ -72,3 +72,10 @@ class Controllable(dd.Model):
|
|
72
72
|
gfk = self._meta.get_field("owner")
|
73
73
|
kwargs = gfk2lookup(gfk, self, **kwargs)
|
74
74
|
return model.objects.filter(**kwargs)
|
75
|
+
|
76
|
+
@classmethod
|
77
|
+
def get_simple_parameters(cls):
|
78
|
+
for p in super().get_simple_parameters():
|
79
|
+
yield p
|
80
|
+
yield "owner_type"
|
81
|
+
yield "owner_id"
|
lino/modlib/jinja/choicelists.py
CHANGED
@@ -37,8 +37,8 @@ class JinjaBuildMethod(DjangoBuildMethod):
|
|
37
37
|
)
|
38
38
|
context = elem.get_printable_context(ar)
|
39
39
|
html = tpl.render(context)
|
40
|
-
self.html2file(html, filename)
|
40
|
+
self.html2file(html, filename, context)
|
41
41
|
return os.path.getmtime(filename)
|
42
42
|
|
43
|
-
def html2file(self, html, filename):
|
44
|
-
|
43
|
+
def html2file(self, html, filename, context):
|
44
|
+
open(filename, "w").write(html)
|
lino/modlib/jinja/renderer.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# -*- coding: UTF-8 -*-
|
2
|
-
# Copyright 2011-
|
2
|
+
# Copyright 2011-2025 Rumma & Ko Ltd
|
3
3
|
# License: GNU Affero General Public License v3 (see file COPYING for details)
|
4
4
|
"""
|
5
5
|
Adds all languages of the world to your database.
|
@@ -22,8 +22,6 @@ import codecs
|
|
22
22
|
|
23
23
|
from django.conf import settings
|
24
24
|
|
25
|
-
# from lino.utils import dblogger as logger
|
26
|
-
|
27
25
|
from lino.api import dd
|
28
26
|
from lino.modlib.languages.models import Language
|
29
27
|
|
@@ -752,7 +750,7 @@ def objects():
|
|
752
750
|
if ln:
|
753
751
|
ln = ln.strip()
|
754
752
|
if not ln[-4:-3].isspace():
|
755
|
-
logger.warning("german %d: syntax", n)
|
753
|
+
dd.logger.warning("german %d: syntax", n)
|
756
754
|
else:
|
757
755
|
code = ln[-3:]
|
758
756
|
name = ln[:-4]
|
@@ -772,7 +770,7 @@ def objects():
|
|
772
770
|
ln = ln.strip()
|
773
771
|
rec = ln.split("\t")
|
774
772
|
if len(rec) < 6:
|
775
|
-
logger.warning("Ignored french:%d:%s (len(rec) is %d)", n, ln, len(rec))
|
773
|
+
dd.logger.warning("Ignored french:%d:%s (len(rec) is %d)", n, ln, len(rec))
|
776
774
|
code = rec[1]
|
777
775
|
if len(code) == 7:
|
778
776
|
if code[3:4] == "/":
|
@@ -794,7 +792,7 @@ def objects():
|
|
794
792
|
kw.update(iso2=iso2)
|
795
793
|
yield Language(id=code, **kw)
|
796
794
|
else:
|
797
|
-
logger.debug(
|
795
|
+
dd.logger.debug(
|
798
796
|
"%r : no name for default site language %s",
|
799
797
|
code,
|
800
798
|
settings.SITE.DEFAULT_LANGUAGE.django_code,
|
lino/modlib/linod/mixins.py
CHANGED
@@ -69,7 +69,7 @@ class Runnable(Sequenced, RecurrenceSet):
|
|
69
69
|
message = dd.RichTextField(_("Logged messages"), format="plain", editable=False)
|
70
70
|
|
71
71
|
# procedure = Procedures.field(strict=False, unique=True, editable=False)
|
72
|
-
procedure = Procedures.field(strict=False
|
72
|
+
procedure = Procedures.field(strict=False)
|
73
73
|
name = models.CharField(_("Name"), max_length=200, blank=True)
|
74
74
|
|
75
75
|
run_now = RunNow()
|
@@ -203,7 +203,8 @@ async def start_task_runner(ar, max_count=None):
|
|
203
203
|
nst = await sync_to_async(self.get_next_suggested_date)(
|
204
204
|
self.last_end_time, ar.logger
|
205
205
|
)
|
206
|
-
|
206
|
+
if nst is not None:
|
207
|
+
next_time = min(next_time, nst)
|
207
208
|
|
208
209
|
count += 1
|
209
210
|
if max_count is not None and count >= max_count:
|