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

sile-typesetter / sile / 8736205729

18 Apr 2024 10:16AM UTC coverage: 63.747% (-11.0%) from 74.718%
8736205729

push

github

alerque
chore(classes): Correct typos in user facing deprecation message

10118 of 15872 relevant lines covered (63.75%)

6751.63 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

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

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

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

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

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

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

53
local getSpaceGlue = function(options, parameter)
54
  local sg
55
  if SILE.settings:get("languages.fr.debugspace") then
×
56
    sg = SILE.nodefactory.kern("5spc")
×
57
  else
58
    sg = SILE.settings:get(parameter)
×
59
  end
60
  -- Return the absolute (kern) length of the specified spacing parameter
61
  -- with a particular set of font options.
62
  -- As for SILE.shapers.base.measureSpace(), which has the same type of
63
  -- logic, caching this doesn't seem to have any significant speedup.
64
  SILE.settings:temporarily(function ()
×
65
    SILE.settings:set("font.size", options.size)
×
66
    SILE.settings:set("font.family", options.family)
×
67
    SILE.settings:set("font.filename", options.filename)
×
68
    sg = sg:absolute()
×
69
  end)
70
  return sg
×
71
end
72

73
SILE.nodeMakers.fr = pl.class(SILE.nodeMakers.unicode)
×
74

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

95
-- overriden properties from parent class
96
SILE.nodeMakers.fr.quoteTypes = { qu = true } -- split tokens at apostrophes &c.
×
97

98
-- methods defined in this class
99

100
function SILE.nodeMakers.fr.isIn (_, set, text)
×
101
  for _, v in ipairs(set) do
×
102
    if v == text then
×
103
      return true
×
104
    end
105
  end
106
  return false
×
107
end
108

109
function SILE.nodeMakers.fr:isOpeningQuote (text)
×
110
  return self:isIn(self.openingQuotes, text)
×
111
end
112

113
function SILE.nodeMakers.fr:isClosingQuote (text)
×
114
  return self:isIn(self.closingQuotes, text)
×
115
end
116

117
function SILE.nodeMakers.fr:isColonPunctuation (text)
×
118
  return self:isIn(self.colonPunctuations, text)
×
119
end
120

121
function SILE.nodeMakers.fr:isHighPunctuation (text)
×
122
  return self:isIn(self.highPunctuations, text)
×
123
end
124

125
function SILE.nodeMakers.fr:isSpaceException (text)
×
126
  return self:isIn(self.spaceExceptions, text)
×
127
end
128

129
function SILE.nodeMakers.fr:isPrevSpaceException ()
×
130
  return self.i > 1 and self:isSpaceException(self.items[self.i-1].text) or false
×
131
end
132

133
function SILE.nodeMakers.fr:makeUnbreakableSpace (parameter)
×
134
  self:makeToken()
×
135
  self.lastnode = "glue"
×
136
  coroutine.yield(getSpaceGlue(self.options, parameter))
×
137
end
138

139
function SILE.nodeMakers.fr:handleSpaceBefore (item)
×
140
  if self:isHighPunctuation(item.text) and not self:isPrevSpaceException() then
×
141
    self:makeUnbreakableSpace("languages.fr.thinspace")
×
142
    self:makeToken()
×
143
    self:addToken(item.text, item)
×
144
    return true
×
145
  end
146
  if self:isColonPunctuation(item.text) and not self:isPrevSpaceException() then
×
147
    self:makeUnbreakableSpace("languages.fr.colonspace")
×
148
    self:makeToken()
×
149
    self:addToken(item.text, item)
×
150
    return true
×
151
  end
152
  if self:isClosingQuote(item.text) then
×
153
    self:makeUnbreakableSpace("languages.fr.guillspace")
×
154
    self:makeToken()
×
155
    self:addToken(item.text, item)
×
156
    return true
×
157
  end
158
  return false
×
159
end
160

161
function SILE.nodeMakers.fr:handleSpaceAfter (item)
×
162
  if self:isOpeningQuote(item.text) then
×
163
    self:addToken(item.text, item)
×
164
    self:makeUnbreakableSpace("languages.fr.guillspace")
×
165
    self:makeToken()
×
166
    return true
×
167
  end
168
  return false
×
169
end
170

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

196
-- overriden methods from parent class
197

198
function SILE.nodeMakers.fr:dealWith (item)
×
199
  if self:handleSpaceBefore(item) then return end
×
200
  if self:handleSpaceAfter(item) then return end
×
201
  self._base.dealWith(self, item)
×
202
end
203

204
function SILE.nodeMakers.fr:handleWordBreak (item)
×
205
  if self:handleSpaceBefore(item) then return end
×
206
  if self:handleSpaceAfter(item) then return end
×
207
  self._base.handleWordBreak(self, item)
×
208
end
209

210
function SILE.nodeMakers.fr:handleLineBreak (item, subtype)
×
211
  if self:isSpace(item.text) then
×
212
    self:handleWordBreak(item)
×
213
    return
×
214
  end
215
  if self:handleSpaceBefore(item) then return end
×
216
  if self:handleSpaceAfter(item) then return end
×
217

218
  self._base.handleLineBreak(self, item, subtype)
×
219
end
220

221
function SILE.nodeMakers.fr:iterator (items)
×
222
  -- We start by cleaning up the input once for all.
223
  local cleanItems = {}
×
224
  local removed = 0
×
225
  for k = 1, #items do
×
226
    if self:mustRemove(k, items) then
×
227
      -- the index is actually a character position in the byte stream.
228
      -- So we need to take its actual byte length into account.
229
      -- For instance, U+00A0 NBSP is 2 bytes long (0xC2 0xA0) in UTF-8.
230
      removed = removed + string.len(items[k].text)
×
231
    else
232
      -- index has changed due to removals
233
      items[k].index = items[k].index - removed
×
234
      table.insert(cleanItems, items[k])
×
235
    end
236
  end
237
  return self._base.iterator(self, cleanItems)
×
238
end
239

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