• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

sile-typesetter / sile / 9428435077

08 Jun 2024 11:35AM UTC coverage: 64.56% (-9.9%) from 74.46%
9428435077

push

github

web-flow
Merge pull request #2047 from alerque/end-pars

23 of 46 new or added lines in 5 files covered. (50.0%)

1684 existing lines in 60 files now uncovered.

11145 of 17263 relevant lines covered (64.56%)

4562.45 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/languages/fr.lua
1
--- French language rules
2
-- @submodule languages
3

4
local computeSpaces = function ()
5
   -- Computes:
6
   --  -  regular inter-word space,
7
   --  -  half inter-word fixed space,
8
   --  -  "guillemet space", as defined in LaTeX's babel-french which is based
9
   --     on Thierry Bouche's recommendations,
10
   --  These should be usual for France and Canada. The Swiss may prefer a thin
11
   --  space for guillemets, that's why we are having settings hereafter.
UNCOV
12
   local enlargement = SILE.settings:get("shaper.spaceenlargementfactor")
×
UNCOV
13
   local stretch = SILE.settings:get("shaper.spacestretchfactor")
×
UNCOV
14
   local shrink = SILE.settings:get("shaper.spaceshrinkfactor")
×
UNCOV
15
   return {
×
16
      colonspace = SILE.types.length(enlargement .. "spc plus " .. stretch .. "spc minus " .. shrink .. "spc"),
17
      thinspace = SILE.types.length((0.5 * enlargement) .. "spc"),
UNCOV
18
      guillspace = SILE.types.length(
×
UNCOV
19
         (0.8 * enlargement) .. "spc plus " .. (0.3 * stretch) .. "spc minus " .. (0.8 * shrink) .. "spc"
×
UNCOV
20
      ),
×
21
   }
22
end
23

UNCOV
24
local spaces = computeSpaces()
×
25
-- NOTE: We are only doing it at load time. We don't expect the shaper settings to be often
26
-- changed arbitrarily _after_ having selected a language...
27

UNCOV
28
SILE.settings:declare({
×
29
   parameter = "languages.fr.colonspace",
30
   type = "kern",
31
   default = SILE.types.node.kern(spaces.colonspace),
32
   help = "The amount of space before a colon, theoretically a non-breakable, shrinkable, stretchable inter-word space",
33
})
34

UNCOV
35
SILE.settings:declare({
×
36
   parameter = "languages.fr.thinspace",
37
   type = "kern",
38
   default = SILE.types.node.kern(spaces.thinspace),
39
   help = "The amount of space before high punctuations, theoretically a fixed, non-breakable space, around half the inter-word space",
40
})
41

UNCOV
42
SILE.settings:declare({
×
43
   parameter = "languages.fr.guillspace",
44
   type = "kern",
45
   default = SILE.types.node.kern(spaces.guillspace),
46
   help = "The amount of space applying to guillemets, theoretically smaller than a non-breakable inter-word space, with reduced stretchability",
47
})
48

UNCOV
49
SILE.settings:declare({
×
50
   parameter = "languages.fr.debugspace",
51
   type = "boolean",
52
   default = false,
53
   help = "If switched to true, uses large spaces instead of the regular punctuation ones",
54
})
55

56
local getSpaceGlue = function (options, parameter)
57
   local sg
UNCOV
58
   if SILE.settings:get("languages.fr.debugspace") then
×
59
      sg = SILE.types.node.kern("5spc")
×
60
   else
UNCOV
61
      sg = SILE.settings:get(parameter)
×
62
   end
63
   -- Return the absolute (kern) length of the specified spacing parameter
64
   -- with a particular set of font options.
65
   -- As for SILE.shapers.base.measureSpace(), which has the same type of
66
   -- logic, caching this doesn't seem to have any significant speedup.
UNCOV
67
   SILE.settings:temporarily(function ()
×
UNCOV
68
      SILE.settings:set("font.size", options.size)
×
UNCOV
69
      SILE.settings:set("font.family", options.family)
×
UNCOV
70
      SILE.settings:set("font.filename", options.filename)
×
UNCOV
71
      sg = sg:absolute()
×
72
   end)
73
   -- Track a subtype on that kern:
74
   -- See automated italic correction at the typesetter level.
UNCOV
75
   sg.subtype = "punctspace"
×
UNCOV
76
   return sg
×
77
end
78

UNCOV
79
SILE.nodeMakers.fr = pl.class(SILE.nodeMakers.unicode)
×
80

81
-- Unfortunately, there is nothing in the Unicode properties
82
-- database which distinguishes between high and low punctuation, etc.
83
-- But in a way that's precisely why we can't just rely on Unicode
84
-- for everything and need our language-specific typesetting
85
-- processors.
UNCOV
86
SILE.nodeMakers.fr.colonPunctuations = { ":" }
×
UNCOV
87
SILE.nodeMakers.fr.openingQuotes = { "«", "‹" }
×
UNCOV
88
SILE.nodeMakers.fr.closingQuotes = { "»", "›" }
×
89
-- There's catch below: the shaper may have already processed common ligatures (!!, ?!, !?)
90
-- as a single item...
UNCOV
91
SILE.nodeMakers.fr.highPunctuations = { ";", "!", "?", "!!", "?!", "!?" }
×
92
-- High punctuations have some (kern) space before them... except in some cases!
93
-- By the books, they have it "after a letter or digit", at least. After a closing
94
-- punctuation, too, seems usual.
95
-- Otherwise, one shall have no space inside e.g. (?), ?!, [!], …?, !!! etc.
96
-- As a simplication, we reverse the rule and define after which characters the space
97
-- shall not be added. This is by no mean perfect, I couldn't find an explicit list
98
-- of exceptions. French typography is a delicate beast.
UNCOV
99
SILE.nodeMakers.fr.spaceExceptions =
×
UNCOV
100
   { "!", "?", ":", ".", "…", "(", "[", "{", "<", "«", "‹", "“", "‘", "?!", "!!", "!?" }
×
101

102
-- overriden properties from parent class
UNCOV
103
SILE.nodeMakers.fr.quoteTypes = { qu = true } -- split tokens at apostrophes &c.
×
104

105
-- methods defined in this class
106

UNCOV
107
function SILE.nodeMakers.fr.isIn (_, set, text)
×
UNCOV
108
   for _, v in ipairs(set) do
×
UNCOV
109
      if v == text then
×
UNCOV
110
         return true
×
111
      end
112
   end
UNCOV
113
   return false
×
114
end
115

UNCOV
116
function SILE.nodeMakers.fr:isOpeningQuote (text)
×
UNCOV
117
   return self:isIn(self.openingQuotes, text)
×
118
end
119

UNCOV
120
function SILE.nodeMakers.fr:isClosingQuote (text)
×
UNCOV
121
   return self:isIn(self.closingQuotes, text)
×
122
end
123

UNCOV
124
function SILE.nodeMakers.fr:isColonPunctuation (text)
×
UNCOV
125
   return self:isIn(self.colonPunctuations, text)
×
126
end
127

UNCOV
128
function SILE.nodeMakers.fr:isHighPunctuation (text)
×
UNCOV
129
   return self:isIn(self.highPunctuations, text)
×
130
end
131

UNCOV
132
function SILE.nodeMakers.fr:isSpaceException (text)
×
UNCOV
133
   return self:isIn(self.spaceExceptions, text)
×
134
end
135

UNCOV
136
function SILE.nodeMakers.fr:isPrevSpaceException ()
×
UNCOV
137
   return self.i > 1 and self:isSpaceException(self.items[self.i - 1].text) or false
×
138
end
139

UNCOV
140
function SILE.nodeMakers.fr:makeUnbreakableSpace (parameter)
×
UNCOV
141
   self:makeToken()
×
UNCOV
142
   self.lastnode = "glue"
×
UNCOV
143
   coroutine.yield(getSpaceGlue(self.options, parameter))
×
144
end
145

UNCOV
146
function SILE.nodeMakers.fr:handleSpaceBefore (item)
×
UNCOV
147
   if self:isHighPunctuation(item.text) and not self:isPrevSpaceException() then
×
UNCOV
148
      self:makeUnbreakableSpace("languages.fr.thinspace")
×
UNCOV
149
      self:makeToken()
×
UNCOV
150
      self:addToken(item.text, item)
×
UNCOV
151
      return true
×
152
   end
UNCOV
153
   if self:isColonPunctuation(item.text) and not self:isPrevSpaceException() then
×
UNCOV
154
      self:makeUnbreakableSpace("languages.fr.colonspace")
×
UNCOV
155
      self:makeToken()
×
UNCOV
156
      self:addToken(item.text, item)
×
UNCOV
157
      return true
×
158
   end
UNCOV
159
   if self:isClosingQuote(item.text) then
×
UNCOV
160
      self:makeUnbreakableSpace("languages.fr.guillspace")
×
UNCOV
161
      self:makeToken()
×
UNCOV
162
      self:addToken(item.text, item)
×
UNCOV
163
      return true
×
164
   end
UNCOV
165
   return false
×
166
end
167

UNCOV
168
function SILE.nodeMakers.fr:handleSpaceAfter (item)
×
UNCOV
169
   if self:isOpeningQuote(item.text) then
×
UNCOV
170
      self:addToken(item.text, item)
×
UNCOV
171
      self:makeUnbreakableSpace("languages.fr.guillspace")
×
UNCOV
172
      self:makeToken()
×
UNCOV
173
      return true
×
174
   end
UNCOV
175
   return false
×
176
end
177

UNCOV
178
function SILE.nodeMakers.fr:mustRemove (i, items)
×
179
   -- Clear "manual" spaces we do not want, so that later we only have to
180
   -- insert the relevant kerns.
UNCOV
181
   local curr = items[i].text
×
UNCOV
182
   if self:isSpace(curr) or self:isNonBreakingSpace(curr) then
×
UNCOV
183
      if i < #items then
×
UNCOV
184
         local next = items[i + 1].text
×
185
         if
UNCOV
186
            self:isSpace(next)
×
UNCOV
187
            or self:isNonBreakingSpace(next)
×
UNCOV
188
            or self:isHighPunctuation(next)
×
UNCOV
189
            or self:isColonPunctuation(next)
×
UNCOV
190
            or self:isClosingQuote(next)
×
191
         then
UNCOV
192
            return true
×
193
         end
194
      end
UNCOV
195
      if i > 1 then
×
UNCOV
196
         local prev = items[i - 1].text
×
UNCOV
197
         if self:isOpeningQuote(prev) then
×
UNCOV
198
            return true
×
199
         end
200
      end
201
   end
UNCOV
202
   return false
×
203
end
204

205
-- overriden methods from parent class
206

UNCOV
207
function SILE.nodeMakers.fr:dealWith (item)
×
UNCOV
208
   if self:handleSpaceBefore(item) then
×
UNCOV
209
      return
×
210
   end
UNCOV
211
   if self:handleSpaceAfter(item) then
×
UNCOV
212
      return
×
213
   end
UNCOV
214
   self._base.dealWith(self, item)
×
215
end
216

UNCOV
217
function SILE.nodeMakers.fr:handleWordBreak (item)
×
UNCOV
218
   if self:handleSpaceBefore(item) then
×
UNCOV
219
      return
×
220
   end
UNCOV
221
   if self:handleSpaceAfter(item) then
×
222
      return
×
223
   end
UNCOV
224
   self._base.handleWordBreak(self, item)
×
225
end
226

UNCOV
227
function SILE.nodeMakers.fr:handleLineBreak (item, subtype)
×
UNCOV
228
   if self:isSpace(item.text) then
×
229
      self:handleWordBreak(item)
×
230
      return
×
231
   end
UNCOV
232
   if self:handleSpaceBefore(item) then
×
233
      return
×
234
   end
UNCOV
235
   if self:handleSpaceAfter(item) then
×
UNCOV
236
      return
×
237
   end
238

UNCOV
239
   self._base.handleLineBreak(self, item, subtype)
×
240
end
241

UNCOV
242
function SILE.nodeMakers.fr:iterator (items)
×
243
   -- We start by cleaning up the input once for all.
UNCOV
244
   local cleanItems = {}
×
UNCOV
245
   local removed = 0
×
UNCOV
246
   for k = 1, #items do
×
UNCOV
247
      if self:mustRemove(k, items) then
×
248
         -- the index is actually a character position in the byte stream.
249
         -- So we need to take its actual byte length into account.
250
         -- For instance, U+00A0 NBSP is 2 bytes long (0xC2 0xA0) in UTF-8.
UNCOV
251
         removed = removed + string.len(items[k].text)
×
252
      else
253
         -- index has changed due to removals
UNCOV
254
         items[k].index = items[k].index - removed
×
UNCOV
255
         table.insert(cleanItems, items[k])
×
256
      end
257
   end
UNCOV
258
   return self._base.iterator(self, cleanItems)
×
259
end
260

UNCOV
261
SILE.hyphenator.languages["fr"] = {}
×
UNCOV
262
SILE.hyphenator.languages["fr"].patterns = {
×
263
   ------------------------------------------------
264
   -- phonetic patterns -- etymological patterns --
265
   ------------------------------------------------
266
   ----*
267
   "2'2",
268
   ------------------------------------------------
269
   -- phonetic patterns -- etymological patterns --
270
   ------------------------------------------------
271
   ----a
272
   ".a4",
273
   "'a4",
274
   ".â4",
275
   "'â4",
276
   "ab2h", -- df-bg 1998/02/07 for abhorrer
277
   ".ab3réa",
278
   "'ab3réa",
279
   "ad2h", -- df-bg 1998/02/07 for adhèsion & co
280
   "a1è2dre",
281
   ".ae3s4ch",
282
   "'ae3s4ch",
283
   "1alcool",
284
   "'2alcool",
285
   "a2l1algi",
286
   ".amino1a2c",
287
   "'amino1a2c",
288
   ".ana3s4tr",
289
   "'ana3s4tr",
290
   "1a2nesthési",
291
   "'2a2nesthési",
292
   ".anti1a2",
293
   "'anti1a2",
294
   ".anti1e2",
295
   "'anti1e2",
296
   ".anti1é2",
297
   ".anti2enne",
298
   "'anti2enne",
299
   "'anti1é2",
300
   ".anti1s2",
301
   "'anti1s2",
302
   ".apo2s3ta",
303
   "'apo2s3ta",
304
   "apo2s3tr",
305
   "archi1é2pis",
306
   ".as2ta",
307
   "'as2ta",
308
   "a2s3tro",
309
   ------------------------------------------------
310
   -- phonetic patterns -- etymological patterns --
311
   ------------------------------------------------
312
   ----b
313
   "1ba",
314
   "1bâ",
315
   ".bai2se3main", -- hyphen disappeared from french  5/2/94
316
   "1be",
317
   "1bé",
318
   "1bè",
319
   "1bê",
320
   "4be.",
321
   "4bes.",
322
   "2bent.", -- mute syllable: tombent (df) 22/02/94
323
   "1bi",
324
   "1bî",
325
   ".bi1a2c",
326
   ".bi1a2t", -- like .tri1a2t for tri-athlon bg 12/27/93
327
   ".bi1au",
328
   ".bio1a2",
329
   ".bi2s1a2",
330
   ".bi1u2",
331
   "1b2l",
332
   "4ble.",
333
   "4bles.",
334
   "2blent.", -- mute syllable: troublent (df) 28/02/94
335
   "1bo",
336
   "1bô",
337
   "1b2r",
338
   "4bre.",
339
   "4bres.",
340
   "2brent.", -- mute syllable: palabrent (df) 28/02/94
341
   "1bu",
342
   "1bû",
343
   "1by",
344
   ------------------------------------------------
345
   -- phonetic patterns -- etymological patterns --
346
   ------------------------------------------------
347
   ----c
348
   "1ç",
349
   "1ca",
350
   "1câ",
351
   "ca3ou3t2", -- for caoutchou... added 3/1/94 df-bg
352
   "1ce",
353
   "1cé",
354
   "1cè",
355
   "1cê",
356
   "4ce.",
357
   "4ces.",
358
   -- words ending with -cent (df) 22/02/94
359
   "2cent.",
360
   "ja3cent.",
361
   "ac3cent.",
362
   "é3cent.",
363
   "munifi3cent.",
364
   "réti3cent.",
365
   "privatdo3cent.",
366
   "inno3cent.",
367
   "es3cent.",
368
   "acquies4cent.",
369
   "is3cent.",
370
   "immis4cent.",
371
   --
372
   ".ch4",
373
   "1c2h",
374
   "4ch.",
375
   "2chb",
376
   "4che.",
377
   "4ches.",
378
   "2chent.", -- mute syllable: touchent (df) 22/02/94
379
   ".chè2vre3feuille", -- hyphen disappeared from french 5/2/94
380
   "2chg",
381
   "ch2l",
382
   "4chle.",
383
   "4chles.",
384
   "chlo2r3a2c",
385
   "chlo2r3é2t",
386
   "2chm",
387
   "2chn",
388
   "2chp",
389
   "ch2r",
390
   "4chre.",
391
   "4chres.",
392
   "2chs",
393
   "2cht",
394
   "2chw",
395
   "1ci",
396
   "1cî",
397
   ".ci2s1alp",
398
   "1c2k",
399
   "4ck.",
400
   "2ckb",
401
   "4cke.",
402
   "4ckes.",
403
   "2ckent.", -- mute syllable: stockent (df) 22/02/94
404
   "2ckf",
405
   "2ckg",
406
   "2ck3h",
407
   "2ckp",
408
   "2cks",
409
   "2ckt",
410
   "1c2l",
411
   "4cle.",
412
   "4cles.",
413
   "2clent.", -- mute syllable: encerclent (df) 28/02/94
414
   "1co",
415
   "1cô",
416
   "co1acc",
417
   "co1acq",
418
   "co1a2d",
419
   "co1ap",
420
   "co1ar",
421
   "co1assoc",
422
   "co1assur",
423
   "co1au",
424
   "co1ax",
425
   "1cœ",
426
   "co1é2",
427
   "co1ef",
428
   "co1en",
429
   "co1ex",
430
   ".con4", -- missing from nb list
431
   ".cons4", -- missing from nb list
432
   ".contre1s2c",
433
   ".contre3maître", -- hyphen disappeared from french 5/2/94
434
   "co2nurb",
435
   ".co1o2",
436
   ".co2o3lie",
437
   "1c2r",
438
   "4cre.",
439
   "4cres.",
440
   "2crent.", -- mute syllable: massacrent (df) 28/02/94
441
   "1cu",
442
   "1cû",
443
   "1cy",
444
   ".cul4", -- -- as .con4 .cons4 (march 92)
445
   ------------------------------------------------
446
   -- phonetic patterns -- etymological patterns --
447
   ------------------------------------------------
448
   ----d
449
   "1d'",
450
   "1da",
451
   "1dâ",
452
   ".dacryo1a2",
453
   "d1d2h",
454
   "1de",
455
   "1dé",
456
   "1dè",
457
   "1dê",
458
   "4de.",
459
   "4des.",
460
   -- words ending with -dent (df) 22/02/94
461
   "2dent.",
462
   "déca3dent.",
463
   "é3dent.",
464
   "cci3dent.",
465
   "inci3dent.",
466
   "confi3dent.",
467
   "tri3dent.",
468
   "dissi3dent.",
469
   "chien3dent.",
470
   ".ar3dent.",
471
   "impu3dent.",
472
   "pru3dent.",
473
   ".dé1a2",
474
   ".dé1io",
475
   ".dé1o2",
476
   ".dé2s", -- originaly in JD file
477
   -- .dé2s1a2 removed 09/17/92 because wrong for the
478
   --  original JD 500 words test
479
   ".dé3s2a3cr",
480
   ".dés2a3m", -- .dés2a2mi introduced 09/17/92 bec. i
481
   -- can't see why désamidonner ran in JD.
482
   -- Moved to .dés2a3m df 12/27/93.
483
   ".dé3s2a3tell",
484
   ".dé3s2astr",
485
   ".dé3s2c", -- 1 moved 3 due to .dé2s 09/17/92
486
   --.dé2s1e2 removed 09/17/92 because wrong for the
487
   -- original JD 500 words test
488
   ".dé2s1é2",
489
   ".dé3s2é3gr",
490
   ".dé3s2ensib",
491
   ".dé3s2ert",
492
   ".dé3s2exu",
493
   --.dé2s3h removed 09/17/92 because wrong for the
494
   -- original JD 500 words test
495
   ".dé2s1i2",
496
   ".dé3s2i3d",
497
   ".dé3s2i3gn",
498
   ".dé3s2i3li",
499
   ".dé3s2i3nen",
500
   ".dé3s2invo",
501
   ".dé3s2i3r",
502
   ".dé3s2ist",
503
   --.dé2s1o2 removed 09/17/92 because wrong for the
504
   -- original JD 500 words test
505
   ".dé3s2o3dé",
506
   ".dé2s1œ",
507
   ".dé3s2o3l",
508
   ".dé3s2o3pil",
509
   ".dé3s2orm",
510
   ".dé3s2orp",
511
   ".dé3s2oufr",
512
   ".dé3s2p", -- 1 moved 3 due to .dé2s 09/17/92
513
   ".dé3s2t", -- 1 moved 3 due to .dé2s 09/17/92
514
   ".dé2s1u2n",
515
   "3d2hal",
516
   "3d2houd",
517
   "1di",
518
   "1dî",
519
   "di2s3cop",
520
   ".di1a2cé",
521
   ".di1a2cid",
522
   ".di1ald",
523
   ".di1a2mi",
524
   ".di1a2tom",
525
   ".di1e2n",
526
   ".di2s3h",
527
   "2dlent.", -- mute syllable: jodlent (df) 28/02/94
528
   "1do",
529
   "1dô",
530
   "1d2r",
531
   "4dre.",
532
   "4dres.",
533
   "2drent.", -- mute syllable: engendrent (df) 28/02/94
534
   "d1s2",
535
   "1du",
536
   "1dû",
537
   "1dy",
538
   ".dy2s3",
539
   ".dy2s1a2",
540
   ".dy2s1i2",
541
   ".dy2s1o2", -- missing from nb list
542
   ".dy2s1u2",
543
   ------------------------------------------------
544
   -- phonetic patterns -- etymological patterns --
545
   ------------------------------------------------
546
   ----e
547
   ".e4",
548
   "'e4",
549
   ".ê4",
550
   "'ê4",
551
   ".é4",
552
   "'é4",
553
   ".è4",
554
   "'è4",
555
   "éd2hi", -- df-bg 1998/02/07 for rédhibitoire
556
   "1é2drie",
557
   "1é2drique",
558
   "1é2lectr",
559
   "1é2lément",
560
   ".en1a2",
561
   "'en1a2",
562
   "1é2nerg",
563
   "e2n1i2vr",
564
   ".en1o2",
565
   "'en1o2",
566
   "épi2s3cop",
567
   "épi3s4cope",
568
   "e2s3cop",
569
   ".eu2r1a2",
570
   "'eu2r1a2",
571
   "eu1s2tat",
572
   "extra1",
573
   "extra2c",
574
   "extra2i",
575
   ------------------------------------------------
576
   -- phonetic patterns -- etymological patterns --
577
   ------------------------------------------------
578
   ----f
579
   "1fa",
580
   "1fâ",
581
   "1fe",
582
   "1fé",
583
   "1fè",
584
   "1fê",
585
   "4fe.",
586
   "4fes.",
587
   "2fent.", -- mute syllable: agrafent chauffent (df) 22/02/94
588
   --
589
   "1fi",
590
   "1fî",
591
   "1f2l",
592
   "4fle.",
593
   "4fles.",
594
   "2flent.", -- mute syllable: gonflent (df) 28/02/94
595
   "1fo",
596
   "1fô",
597
   "1f2r",
598
   "4fre.",
599
   "4fres.",
600
   "2frent.", -- mute syllable: balafrent (df) 28/02/94
601
   "f1s2",
602
   "1fu",
603
   "1fû",
604
   "1fy",
605
   ------------------------------------------------
606
   -- phonetic patterns -- etymological patterns --
607
   ------------------------------------------------
608
   ----g
609
   "1ga",
610
   "1gâ",
611
   "1ge",
612
   "1gé",
613
   "1gè",
614
   "1gê",
615
   "4ge.",
616
   "4ges.",
617
   -- words ending with -gent (df) 22/02/94
618
   "2gent.",
619
   "ré3gent.",
620
   "entre3gent.",
621
   "indi3gent.",
622
   "dili3gent.",
623
   "intelli3gent.",
624
   "indul3gent.",
625
   "tan3gent.",
626
   "rin3gent.",
627
   "contin3gent.",
628
   ".ar3gent.",
629
   "'ar3gent.",
630
   "ser3gent.",
631
   "ter3gent.",
632
   "résur3gent.",
633
   --
634
   "1g2ha",
635
   "1g2he",
636
   "1g2hi",
637
   "1g2ho",
638
   "1g2hy",
639
   "1gi",
640
   "1gî",
641
   "1g2l",
642
   "4gle.",
643
   "4gles.",
644
   "2glent.", -- mute syllable: meuglent (df) 28/02/94
645
   "1g2n",
646
   "'a2g3nat", -- (df) 16/01/02
647
   ".a2g3nat", -- (df) 16/01/02
648
   "a2g3nos", -- (df) 16/01/02 (pattern dia2g3n deleted)
649
   "co2g3niti", -- (df) 16/01/02
650
   "'i2g3né", -- (df) 16/01/02
651
   ".i2g3né", -- (df) 16/01/02
652
   "'i2g3ni", -- (df) 16/01/02
653
   ".i2g3ni", -- (df) 16/01/02
654
   ".ma2g3nicide", -- (df) 16/01/02
655
   ".ma2g3nificat", -- (df) 16/01/02
656
   ".ma2g3num", -- (df) 16/01/02
657
   "o2g3nomoni", -- (df) 16/01/02
658
   "o2g3nosi", -- (df) 16/01/02
659
   ".pro2g3nath", -- (df) 16/01/02
660
   "pu2g3nable", -- (df) 16/01/02
661
   "pu2g3nac", -- (df) 16/01/02
662
   ".sta2g3n",
663
   ".syn2g3nath", -- (df) 16/01/02
664
   "wa2g3n",
665
   "4gne.",
666
   "4gnes.",
667
   "2gnent.", -- mute syllable: accompagnent (df) 28/02/94
668
   "1go",
669
   "1gô",
670
   "1g2r",
671
   "4gre.",
672
   "4gres.",
673
   "2grent.", -- mute syllable: immigrent (df) 28/02/94
674
   "1gu",
675
   "1gû",
676
   "g1s2",
677
   "4gue.",
678
   "4gues.",
679
   -- words ending with -guent (df) 22/02/94
680
   "2guent.",
681
   ".on3guent.",
682
   "'on3guent.",
683
   --
684
   "1gy",
685
   ------------------------------------------------
686
   -- phonetic patterns -- etymological patterns --
687
   ------------------------------------------------
688
   ----h
689
   "1ha",
690
   "1hâ",
691
   "1he",
692
   "1hé",
693
   "1hè",
694
   "1hê",
695
   "hémi1é",
696
   "hémo1p2t",
697
   "4he.",
698
   "4hes.",
699
   "1hi",
700
   "1hî",
701
   "1ho",
702
   "1hô",
703
   "1hu",
704
   "1hû",
705
   "1hy",
706
   "hypera2",
707
   "hypere2",
708
   "hyperé2",
709
   "hyperi2",
710
   "hypero2",
711
   "hypers2",
712
   "hype4r1",
713
   "hyperu2",
714
   "hypo1a2",
715
   "hypo1e2", -- missing from nb list
716
   "hypo1é2",
717
   "hypo1i2",
718
   "hypo1o2",
719
   "hypo1s2",
720
   "hypo1u2",
721
   ------------------------------------------------
722
   -- phonetic patterns -- etymological patterns --
723
   ------------------------------------------------
724
   ----i
725
   ".i4",
726
   "'i4",
727
   ".î4",
728
   "'î4",
729
   "i1algi",
730
   "i1arthr",
731
   "i1è2dre",
732
   -- ill patterns missing from nb list
733
   "il2l",
734
   "cil3l",
735
   "rcil4l",
736
   "ucil4l",
737
   "vacil4l",
738
   "gil3l",
739
   "hil3l",
740
   "lil3l",
741
   "l3lion",
742
   "mil3l",
743
   "mil4let",
744
   "émil4l",
745
   "semil4l",
746
   "rmil4l",
747
   "armil5l",
748
   "capil3l",
749
   "papil3la",
750
   "papil3le",
751
   "papil3li",
752
   "papil3lom",
753
   "pupil3l",
754
   "piril3l",
755
   "thril3l",
756
   "cyril3l",
757
   "ibril3l",
758
   "pusil3l",
759
   ".stil3l",
760
   "distil3l",
761
   "instil3l",
762
   "fritil3l",
763
   "boutil3l",
764
   "vanil3lin",
765
   "vanil3lis",
766
   "vil3l",
767
   "avil4l",
768
   "chevil4l",
769
   "uevil4l",
770
   "uvil4l",
771
   "xil3l",
772
   -- end of ill patterns
773
   "1informat", -- missing from nb list
774
   "'2informat",
775
   ".in1a2",
776
   "'in1a2",
777
   ".in2a3nit",
778
   "'in2a3nit",
779
   ".in2augur",
780
   "'in2augur",
781
   ".in1e2",
782
   "'in1e2",
783
   ".in1é2",
784
   "'in1é2",
785
   ".in2effab", -- missing from nb list
786
   "'in2effab",
787
   ".in2é3lucta",
788
   "'in2é3lucta",
789
   ".in2é3narra",
790
   "'in2é3narra",
791
   ".in2ept",
792
   "'in2ept",
793
   ".in2er",
794
   "'in2er",
795
   ".in2exora", -- missing from nb list
796
   "'in2exora",
797
   ".in1i2",
798
   "'in1i2",
799
   ".in2i3miti",
800
   "'in2i3miti",
801
   ".in2i3q",
802
   "'in2i3q",
803
   ".in2i3t",
804
   "'in2i3t",
805
   ".in1o2",
806
   "'in1o2",
807
   ".in2o3cul",
808
   "'in2o3cul",
809
   ".in2ond",
810
   "'in2ond",
811
   ".in1s2tab",
812
   "'in1s2tab",
813
   "'inte4r3",
814
   ".intera2",
815
   "'intera2",
816
   ".intere2",
817
   "'intere2",
818
   ".interé2",
819
   "'interé2",
820
   ".interi2",
821
   "'interi2",
822
   ".intero2",
823
   "'intero2",
824
   ".inte4r3",
825
   ".interu2",
826
   "'interu2",
827
   ".inters2",
828
   "'inters2",
829
   ".in1u2",
830
   "'in1u2",
831
   ".in2uit",
832
   "'in2uit",
833
   ".in2u3l",
834
   "'in2u3l",
835
   "io1a2ct",
836
   "i1oxy",
837
   "i1s2tat",
838
   ------------------------------------------------
839
   -- phonetic patterns -- etymological patterns --
840
   ------------------------------------------------
841
   ----j
842
   "1j",
843
   "2jk",
844
   "4je.",
845
   "4jes.",
846
   "2jent.", -- mute syllable: galèjent (df) 22/02/94
847
   ------------------------------------------------
848
   -- phonetic patterns -- etymological patterns --
849
   ------------------------------------------------
850
   ----k
851
   "1ka",
852
   "1kâ",
853
   "1ke",
854
   "1ké",
855
   "1kè",
856
   "1kê",
857
   "4ke.",
858
   "4kes.",
859
   "2kent.", -- mute syllable: jerkent (df) 22/02/94
860
   "1k2h",
861
   "4kh.",
862
   ".kh4",
863
   "1ki",
864
   "1kî",
865
   "1ko",
866
   "1kô",
867
   "1k2r",
868
   "1ku",
869
   "1kû",
870
   "1ky",
871
   ------------------------------------------------
872
   -- phonetic patterns -- etymological patterns --
873
   ------------------------------------------------
874
   ----l
875
   "1la",
876
   "1lâ",
877
   "1là",
878
   "la2w3re",
879
   "1le",
880
   "1lé",
881
   "1lè",
882
   "1lê",
883
   "4le.",
884
   "4les.",
885
   -- words ending with -lent (df) 22/02/94
886
   "2lent.",
887
   ".ta3lent.",
888
   "iva3lent.",
889
   "équiva4lent.",
890
   "monova3lent.",
891
   "polyva3lent.",
892
   "re3lent.",
893
   ".do3lent.",
894
   "indo3lent.",
895
   "inso3lent.",
896
   "turbu3lent.",
897
   "succu3lent.",
898
   "fécu3lent.",
899
   "trucu3lent.",
900
   "opu3lent.",
901
   "corpu3lent.",
902
   "ru3lent.",
903
   "sporu4lent.",
904
   --
905
   "1li",
906
   "1lî",
907
   "1lo",
908
   "1lô",
909
   "l1s2t",
910
   "1lu",
911
   "1lû",
912
   "1ly",
913
   ------------------------------------------------
914
   -- phonetic patterns -- etymological patterns --
915
   ------------------------------------------------
916
   ----m
917
   "1ma",
918
   "1mâ",
919
   ".ma2c3k",
920
   ".macro1s2c",
921
   ".ma2l1a2dres",
922
   ".ma2l1a2dro",
923
   ".ma2l1aisé",
924
   ".ma2l1ap",
925
   ".ma2l1a2v",
926
   ".ma2l1en",
927
   ".ma2l1int",
928
   ".ma2l1oc",
929
   ".ma2l1o2d",
930
   ".ma2r1x", -- nb (jbb: ?)
931
   "1me",
932
   "1mé",
933
   "1mè",
934
   "1mê",
935
   ".mé2g1oh",
936
   ".mé2sa", -- missing from nb list
937
   ".mé3san", -- missing from nb list
938
   ".mé2s1es",
939
   ".mé2s1i",
940
   ".mé2s1u2s",
941
   ".méta1s2ta",
942
   "4me.",
943
   "4mes.",
944
   -- words ending with -ment (df) 22/02/94
945
   "â2ment.",
946
   "da2ment.",
947
   "fa2ment.",
948
   "amalga2ment.",
949
   "cla2ment.",
950
   "ra2ment.",
951
   "tempéra3ment.",
952
   "ta2ment.",
953
   "testa3ment.",
954
   "qua2ment.",
955
   "è2ment.",
956
   "carê2ment.",
957
   "diaphrag2ment.",
958
   "ryth2ment.",
959
   "ai2ment.",
960
   "rai3ment.",
961
   "abî2ment.",
962
   "éci2ment.",
963
   "vidi2ment.",
964
   "subli2ment.",
965
   "éli2ment.",
966
   "reli2ment.",
967
   "mi2ment.",
968
   "ani2ment.",
969
   "veni2ment.",
970
   "ri2ment.",
971
   "détri3ment.",
972
   "nutri3ment.",
973
   "inti2ment.",
974
   "esti2ment.",
975
   "l2ment.",
976
   "flam2ment.",
977
   "gram2ment.",
978
   ".gem2ment.",
979
   "om2ment.",
980
   ".com3ment.",
981
   "ô2ment.",
982
   "slalo2ment.",
983
   "chro2ment.",
984
   "to2ment.",
985
   "ar2ment.",
986
   ".sar3ment.",
987
   "er2ment.",
988
   "antifer3ment.",
989
   ".ser3ment.",
990
   "fir2ment.",
991
   "or2ment.",
992
   "as2ment.",
993
   "au2ment.",
994
   "écu2ment.",
995
   "fu2ment.",
996
   "hu2ment.",
997
   "fichu3ment.",
998
   "llu2ment.",
999
   "plu2ment.",
1000
   "bou2ment.",
1001
   "bru2ment.",
1002
   "su2ment.",
1003
   "tu2ment.",
1004
   --
1005
   "1mi",
1006
   "1mî",
1007
   ".milli1am",
1008
   "1m2némo",
1009
   "1m2nès",
1010
   "1m2nési",
1011
   "1mo",
1012
   "1mô",
1013
   "1mœ",
1014
   ".mono1a2",
1015
   ".mono1e2",
1016
   ".mono1é2",
1017
   ".mono1i2",
1018
   ".mono1ï2dé",
1019
   ".mono1o2",
1020
   ".mono1u2",
1021
   ".mono1s2",
1022
   "mon2t3réal", -- missing from nb list
1023
   "m1s2",
1024
   "1mu",
1025
   "1mû",
1026
   "1my",
1027
   "moye2n1â2g",
1028
   ------------------------------------------------
1029
   -- phonetic patterns -- etymological patterns --
1030
   ------------------------------------------------
1031
   ----n
1032
   "1na",
1033
   "1nâ",
1034
   "1ne",
1035
   "1né",
1036
   "1nè",
1037
   "1nê",
1038
   "4ne.",
1039
   "4nes.",
1040
   -- words ending with -nent (df) 22/02/94
1041
   "2nent.", -- fric-tionnent - syllable muette - bg 27/12/93
1042
   "réma3nent.",
1043
   "imma3nent.",
1044
   "perma3nent.",
1045
   ".émi3nent.",
1046
   "préémi3nent.",
1047
   "proémi3nent.",
1048
   "surémi3nent.",
1049
   "immi3nent.",
1050
   "conti3nent.",
1051
   "perti3nent.",
1052
   "absti3nent.",
1053
   --
1054
   "1ni",
1055
   "1nî",
1056
   "1no",
1057
   "1nô",
1058
   "1nœ",
1059
   ".no2n1obs",
1060
   "1nu",
1061
   "1nû",
1062
   "n3s2at.",
1063
   "n3s2ats.",
1064
   "n1x",
1065
   "1ny",
1066
   ------------------------------------------------
1067
   -- phonetic patterns -- etymological patterns --
1068
   ------------------------------------------------
1069
   ----o
1070
   ".o4",
1071
   "'o4",
1072
   "'ô4",
1073
   ".ô4",
1074
   --'ö2 -- mjf -- deleted 3/1/94 df-bg
1075
   "o2b3long",
1076
   "1octet", -- missing from nb list
1077
   "'2octet",
1078
   "o1d2l",
1079
   "o1è2dre",
1080
   "o1ioni",
1081
   "ombud2s3",
1082
   "omni1s2",
1083
   "o1s2tas",
1084
   "o1s2tat",
1085
   "o1s2téro",
1086
   "o1s2tim",
1087
   "o1s2tom",
1088
   "o1s2trad",
1089
   "o1s2tratu",
1090
   "o1s2triction",
1091
   ".oua1ou",
1092
   "'oua1ou",
1093
   ".ovi1s2c",
1094
   "'ovi1s2c",
1095
   "oxy1a2",
1096
   ------------------------------------------------
1097
   -- phonetic patterns -- etymological patterns --
1098
   ------------------------------------------------
1099
   ----p
1100
   "1pa",
1101
   "1pâ",
1102
   "paléo1é2",
1103
   ".pa2n1a2f",
1104
   ".pa2n1a2mé",
1105
   ".pa2n1a2ra",
1106
   ".pa2n1is",
1107
   ".pa2n1o2ph",
1108
   ".pa2n1opt",
1109
   ".pa2r1a2che",
1110
   ".pa2r1a2chè",
1111
   ".para1s2",
1112
   ".pa2r3hé",
1113
   "1pe",
1114
   "1pé",
1115
   "1pè",
1116
   "1pê",
1117
   "4pe.",
1118
   "4pes.",
1119
   -- words ending with -pent (df) 22/02/94
1120
   "2pent.",
1121
   "re3pent.",
1122
   ".ar3pent.",
1123
   "'ar3pent.",
1124
   "ser3pent.",
1125
   --
1126
   ".pen2ta", -- pent- or penta- but never pen-ta bg 12/27/93
1127
   "per3h",
1128
   "pé2nul", -- pé2n1ul moved back 09/17/92 to JD def.
1129
   ".pe4r",
1130
   ".per1a2",
1131
   ".per1e2",
1132
   ".per1é2",
1133
   ".per1i2",
1134
   ".per1o2",
1135
   ".per1u2",
1136
   "pé1r2é2q", -- 2r1 moved 09/17/92 to 1r2(it was a typo)
1137
   ".péri1os",
1138
   ".péri1s2",
1139
   ".péri2s3s",
1140
   ".péri2s3ta",
1141
   ".péri1u2",
1142
   "1p2h",
1143
   ".ph4",
1144
   "4ph.",
1145
   ".phalan3s2t",
1146
   "4phe.",
1147
   "4phes.",
1148
   "2phent.", -- mute syllable: triomphent (df) 22/02/94
1149
   "ph2l",
1150
   "4phle.",
1151
   "4phles.",
1152
   "2phn",
1153
   "photo1s2",
1154
   "ph2r",
1155
   "4phre.",
1156
   "4phres.",
1157
   "2phs",
1158
   "2pht",
1159
   "3ph2talé",
1160
   "3ph2tis",
1161
   -------- Here is an example of a pb involving phonetic and etymologic patterns 5/94
1162
   --------                .phyto3ph2 -- originaly, but wrong for phy-toph-thora   9/92
1163
   --------                .phy2topha -- for -pharmacie but wrong for phyto-biol.. 5/94
1164
   "1pi",
1165
   "1pî",
1166
   "1p2l",
1167
   "4ple.",
1168
   "4ples.",
1169
   "2plent.", -- mute syllable: accouplent (df) 28/02/94
1170
   ".pluri1a",
1171
   "1p2né",
1172
   "1p2neu",
1173
   "1po",
1174
   "1pô",
1175
   "po1astre",
1176
   "poly1a2",
1177
   "poly1e2",
1178
   "poly1é2",
1179
   "poly1è2",
1180
   "poly1i2",
1181
   "poly1o2",
1182
   "poly1s2",
1183
   "poly1u2",
1184
   ".pon2tet", -- JD hypenated it asis 09/17/92, exception
1185
   ".pos2t3h",
1186
   ".pos2t1in",
1187
   ".pos2t1o2",
1188
   ".pos2t3r",
1189
   ".post1s2",
1190
   "1p2r",
1191
   "4pre.",
1192
   "4pres.",
1193
   "2prent.", -- mute syllable: empourprent (df) 28/02/94
1194
   ".pré1a2",
1195
   ".pré2a3la", -- missing from nb list
1196
   ".pré2au",
1197
   ".pré1é2",
1198
   ".pré1e2",
1199
   ".pré1i2",
1200
   ".pré1o2",
1201
   ".pré1u2",
1202
   ".pré1s2",
1203
   ".pro1é2",
1204
   ".pro1s2cé",
1205
   "pro2s3tat",
1206
   ".prou3d2h",
1207
   "1p2sych",
1208
   ".psycho1a2n",
1209
   "1p2tèr",
1210
   "1p2tér",
1211
   "1pu",
1212
   ".pud1d2l",
1213
   "1pû",
1214
   "1py",
1215
   ------------------------------------------------
1216
   -- phonetic patterns -- etymological patterns --
1217
   ------------------------------------------------
1218
   ----q
1219
   "1q",
1220
   "4que.",
1221
   "4ques.",
1222
   -- words ending with -quent (df) 22/02/94
1223
   "2quent.",
1224
   "é3quent.",
1225
   "élo3quent.",
1226
   "grandilo3quent.",
1227
   ------------------------------------------------
1228
   -- phonetic patterns -- etymological patterns --
1229
   ------------------------------------------------
1230
   ----r
1231
   "1ra",
1232
   "1râ",
1233
   "radio1a2", -- missing from nb list
1234
   "1re",
1235
   "1ré",
1236
   "1rè",
1237
   "1rê",
1238
   ".ré1a2",
1239
   ".ré2a3le",
1240
   ".ré2a3lis",
1241
   ".ré2a3lit",
1242
   ".ré2aux",
1243
   ".ré1é2",
1244
   ".ré1e2",
1245
   ".ré2el",
1246
   ".ré2er",
1247
   ".ré2èr",
1248
   ".ré1i2",
1249
   ".ré2i3fi",
1250
   ".ré1o2",
1251
   ".re1s2",
1252
   ".re2s3cap",
1253
   ".re2s3cisi", -- for res-cision  09/17/92 (missing from nb)
1254
   ".re2s3ciso", -- for res-cisoire 09/17/92(missing from nb)
1255
   ".re2s3cou",
1256
   ".re2s3cri",
1257
   ".re2s3pect",
1258
   ".re2s3pir",
1259
   ".re2s3plend",
1260
   ".re2s3pons",
1261
   ".re2s3quil",
1262
   ".re2s3s",
1263
   ".re2s3t",
1264
   ".re3s4tab",
1265
   ".re3s4tag",
1266
   ".re3s4tand",
1267
   ".re3s4tat",
1268
   ".re3s4tén",
1269
   ".re3s4tér",
1270
   ".re3s4tim",
1271
   ".re3s4tip",
1272
   ".re3s4toc",
1273
   ".re3s4top",
1274
   ".re3s4tr",
1275
   ".re4s5trein",
1276
   ".re4s5trict",
1277
   ".re4s5trin",
1278
   ".re3s4tu",
1279
   ".re3s4ty",
1280
   ".réu2", --.ré1u2 -- pattern rejected 12/2/92
1281
   -- (don't hyphenate as ré-union nor réu-nion)
1282
   ".ré2uss",
1283
   ".rétro1a2",
1284
   "4re.",
1285
   "4res.",
1286
   -- words ending with -rent (df) 22/02/94
1287
   "2rent.", -- es-pèrent - syllable muette - bg 27/12/93
1288
   ".pa3rent.",
1289
   "appa3rent.",
1290
   "transpa3rent.",
1291
   "é3rent.",
1292
   "tor3rent.",
1293
   "cur3rent.",
1294
   --
1295
   "1r2h",
1296
   "4rhe.",
1297
   "4rhes.",
1298
   "2r3heur",
1299
   "2r3hydr",
1300
   "1ri",
1301
   "1rî",
1302
   "1ro",
1303
   "1rô",
1304
   "1ru",
1305
   "1rû",
1306
   "1ry",
1307
   ------------------------------------------------
1308
   -- phonetic patterns -- etymological patterns --
1309
   ------------------------------------------------
1310
   ----s
1311
   "1sa",
1312
   "1sâ",
1313
   ".sch4",
1314
   "1s2caph",
1315
   "1s2clér",
1316
   "1s2cop",
1317
   "1s2ch",
1318
   "e2s3ch",
1319
   "i2s3ché",
1320
   "i2s3chia",
1321
   "i2s3chio",
1322
   "4sch.",
1323
   "4sche.",
1324
   "4sches.",
1325
   "2schs",
1326
   "1se",
1327
   "1sé",
1328
   "1sè",
1329
   "1sê",
1330
   "sesqui1a2",
1331
   "4se.",
1332
   "4ses.",
1333
   -- words ending with -sent (df) 22/02/94
1334
   "2sent.", -- massent - syllable muette - bg 27/12/93
1335
   "ab3sent.",
1336
   "pré3sent.",
1337
   ".res3sent.",
1338
   --
1339
   ".seu2le", -- jbb
1340
   ".sh4",
1341
   "1s2h",
1342
   "4sh.",
1343
   "4she.",
1344
   "4shes.",
1345
   "2shent.", -- mute syllable: smashent (df) 22/02/94
1346
   "2shm",
1347
   "2s3hom",
1348
   "2shr",
1349
   "2shs",
1350
   "1si",
1351
   "1sî",
1352
   "1s2lav",
1353
   "1s2lov",
1354
   "1so",
1355
   "1sô",
1356
   "1sœ",
1357
   "1s2patia",
1358
   "1s2perm",
1359
   "1s2por",
1360
   "1s2phèr",
1361
   "1s2phér",
1362
   "1s2piel",
1363
   "1s2piros",
1364
   "1s2tandard",
1365
   "1s2tein",
1366
   "stéréo1s2",
1367
   "1s2tigm",
1368
   "1s2tock",
1369
   "1s2tomos",
1370
   "1s2troph",
1371
   "1s2tructu",
1372
   "1s2tyle",
1373
   "1su",
1374
   "1sû",
1375
   ".su2b1a2",
1376
   ".su3b2alt",
1377
   ".su2b1é2",
1378
   ".su3b2é3r",
1379
   ".su2b1in",
1380
   ".su2b3limin",
1381
   ".su2b3lin",
1382
   ".su2b3lu",
1383
   "sub1s2",
1384
   ".su2b1ur",
1385
   "supero2",
1386
   "supe4r1",
1387
   "supers2",
1388
   ".su2r1a2",
1389
   "su3r2ah",
1390
   ".su3r2a3t",
1391
   ".su2r1e2",
1392
   ".su3r2eau",
1393
   ".su3r2ell",
1394
   ".su3r2et",
1395
   ".su2r1é2",
1396
   ".su2r3h",
1397
   ".su2r1i2m",
1398
   ".su2r1inf",
1399
   ".su2r1int",
1400
   ".su2r1of",
1401
   ".su2r1ox",
1402
   "1sy",
1403
   ------------------------------------------------
1404
   -- phonetic patterns -- etymological patterns --
1405
   ------------------------------------------------
1406
   ----t
1407
   "1ta",
1408
   "1tâ",
1409
   "1tà",
1410
   "tachy1a2",
1411
   "tchin3t2",
1412
   "1te",
1413
   "1té",
1414
   "1tè",
1415
   "1tê",
1416
   "télé1e2",
1417
   "télé1i2",
1418
   "télé1o2b",
1419
   "télé1o2p",
1420
   "télé1s2",
1421
   "4te.",
1422
   "4tes.",
1423
   -- words ending with -tent (df) 22/02/94
1424
   "2tent.", -- mentent - syllable muette - bg 27/12/93
1425
   ".la3tent.",
1426
   ".pa3tent.",
1427
   "compé3tent.",
1428
   "éni3tent.",
1429
   "mécon3tent.",
1430
   "omnipo3tent.",
1431
   "ventripo3tent.",
1432
   "équipo3tent.",
1433
   "impo3tent.",
1434
   "mit3tent.",
1435
   --
1436
   ".th4",
1437
   "1t2h",
1438
   "4th.",
1439
   "4the.",
1440
   "4thes.",
1441
   "thermo1s2",
1442
   "2t3heur",
1443
   "2thl", -- th2l  was wrong for ...ath-lon (jd said 2thl) df 12/27/93
1444
   "2thm",
1445
   "2thn",
1446
   "th2r",
1447
   "4thre.",
1448
   "4thres.",
1449
   "2ths",
1450
   "1ti",
1451
   "1tî",
1452
   "1to",
1453
   "1tô",
1454
   "1t2r",
1455
   "tran2s1a2",
1456
   "tran3s2act",
1457
   "tran3s2ats",
1458
   "tran2s3h",
1459
   "tran2s1o2",
1460
   "tran2s3p",
1461
   "tran2s1u2",
1462
   "4tre.",
1463
   "4tres.",
1464
   "2trent.", -- mute syllable: infiltrent (df) 28/02/94
1465
   ".tri1a2c",
1466
   ".tri1a2n",
1467
   ".tri1a2t",
1468
   ".tri1o2n",
1469
   "t1t2l",
1470
   "1tu",
1471
   "1tû",
1472
   "tung2s3",
1473
   "1ty",
1474
   ------------------------------------------------
1475
   -- phonetic patterns -- etymological patterns --
1476
   ------------------------------------------------
1477
   ----u
1478
   ".u4",
1479
   "'u4",
1480
   ".û4",
1481
   "'û4",
1482
   "uni1o2v",
1483
   "uni1a2x",
1484
   "u2s3tr",
1485
   ------------------------------------------------
1486
   -- phonetic patterns -- etymological patterns --
1487
   ------------------------------------------------
1488
   ----v
1489
   "1va",
1490
   "1vâ",
1491
   "1ve",
1492
   "1vé",
1493
   "1vè",
1494
   "1vê",
1495
   "vélo1s2ki",
1496
   "4ve.",
1497
   "4ves.",
1498
   -- words ending with -vent (df) 22/02/94
1499
   "2vent.",
1500
   "conni3vent.",
1501
   ".sou3vent.",
1502
   --
1503
   "1vi",
1504
   "1vî",
1505
   "1vo",
1506
   "1vô",
1507
   "vol2t1amp",
1508
   "1v2r",
1509
   "4vre.",
1510
   "4vres.",
1511
   "2vrent.", -- mute syllable: recouvrent (df) 28/02/94
1512
   "1vu",
1513
   "1vû",
1514
   "1vy",
1515
   ------------------------------------------------
1516
   -- phonetic patterns -- etymological patterns --
1517
   ------------------------------------------------
1518
   ----w
1519
   "1wa",
1520
   "1we",
1521
   "4we.",
1522
   "4wes.",
1523
   "2went.", -- mute syllable: interviewent (df) 22/02/94
1524
   "1wi",
1525
   "1wo",
1526
   "1wu",
1527
   "1w2r",
1528
   ------------------------------------------------
1529
   -- phonetic patterns -- etymological patterns --
1530
   ------------------------------------------------
1531
   ----x
1532
   "2xent.", -- mute syllable:  malaxent (df) 22/02/94
1533
   ------------------------------------------------
1534
   -- phonetic patterns -- etymological patterns --
1535
   ------------------------------------------------
1536
   ----y
1537
   ".y4",
1538
   "'y4",
1539
   "y1asth",
1540
   "y1s2tom",
1541
   "y1algi",
1542
   ------------------------------------------------
1543
   -- phonetic patterns -- etymological patterns --
1544
   ------------------------------------------------
1545
   ----z
1546
   "1za",
1547
   "1ze",
1548
   "1zé",
1549
   "1zè",
1550
   "4ze.",
1551
   "4zes.",
1552
   -- words ending with -zent (df) 22/02/94
1553
   "2zent.",
1554
   "privatdo3zent.",
1555
   --
1556
   "1zi",
1557
   "1zo",
1558
   "1zu",
1559
   "1zy",
1560
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc