Index: gc_lang/fr/modules-js/textformatter.js ================================================================== --- gc_lang/fr/modules-js/textformatter.js +++ gc_lang/fr/modules-js/textformatter.js @@ -55,10 +55,11 @@ [/«[  ]+/g, "« "], [/([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ.!?])»/g, "$1 »"], [/[  ]+»/g, " »"] ], "nnbsp_within_numbers": [ [/(\d)[  ](\d)/g, "$1 $2"] ], // common + "nbsp_titles": [ [/\bM(mes?|ᵐᵉˢ?|grs?|ᵍʳˢ?|lles?|ˡˡᵉˢ?|rs?|ʳˢ?|M[.]) /g, "M$1 "] ], "nbsp_before_symbol": [ [/(\d) ?([%‰€$£¥˚Ω℃])/g, "$1 $2"] ], "nbsp_before_units": [ [/([0-9⁰¹²³⁴⁵⁶⁷⁸⁹]) ?([kcmµn]?(?:[slgJKΩ]|m[²³]?|Wh?|Hz|dB)|[%‰]|°C)\b/g, "$1 $2"] ], "nbsp_repair": [ [/([\[(])[   ]([!?:;])/g, "$1$2"], [/(https?|ftp)[   ]:\/\//g, "$1://"], [/&([a-z]+)[   ];/g, "&$1;"], @@ -213,10 +214,11 @@ ["nbsp_within_quotation_marks", true], ["nbsp_within_numbers", true], ["nnbsp_before_punctuation", false], ["nnbsp_within_quotation_marks", false], ["nnbsp_within_numbers", false], + ["nbsp_titles", false], ["nbsp_before_symbol", true], ["nbsp_before_units", true], ["nbsp_repair", true], ["add_space_after_punctuation", true], ["add_space_around_hyphens", true], Index: gc_lang/fr/modules/textformatter.py ================================================================== --- gc_lang/fr/modules/textformatter.py +++ gc_lang/fr/modules/textformatter.py @@ -37,10 +37,11 @@ ("«[  ]+", "« "), ("(?<=[\\w.!?])»", " »"), ("[  ]+»", " »")], "nnbsp_within_numbers": [("(\\d)[  ](\\d)", "\\1 \\2")], # common + "nbsp_titles": [("M(mes?|ᵐᵉˢ?|grs?|ᵍʳˢ?|lles?|ˡˡᵉˢ?|rs?|ʳˢ?|M\\.) ", "M\\1 ")], "nbsp_before_symbol": [("(\\d) ?([%‰€$£¥˚Ω℃])", "\\1 \\2")], "nbsp_before_units": [("(?<=[0-9⁰¹²³⁴⁵⁶⁷⁸⁹]) ?([kcmµn]?(?:[slgJKΩ]|m[²³]?|Wh?|Hz|dB)|[%‰]|°C)\\b", " \\1")], "nbsp_repair": [("(?<=[[(])[   ]([!?:;])", "\\1"), ("(https?|ftp)[   ]:(?=//)", "\\1:"), ("&([a-z]+)[   ];", "&\\1;"), @@ -194,10 +195,11 @@ ("nbsp_within_quotation_marks", True), ("nbsp_within_numbers", True), ("nnbsp_before_punctuation", False), ("nnbsp_within_quotation_marks", False), ("nnbsp_within_numbers", False), + ("nbsp_titles", False), ("nbsp_before_symbol", True), ("nbsp_before_units", True), ("nbsp_repair", True), ("add_space_after_punctuation", True), ("add_space_around_hyphens", True), Index: gc_lang/fr/oxt/TextFormatter/TextFormatter.py ================================================================== --- gc_lang/fr/oxt/TextFormatter/TextFormatter.py +++ gc_lang/fr/oxt/TextFormatter/TextFormatter.py @@ -124,29 +124,31 @@ self.space1_res = self._addWidget('space1_res', 'FixedText', nPosRes, y+15, 20, nHeight, Label = "", Align = 2) self.space2_res = self._addWidget('space2_res', 'FixedText', nPosRes, y+25, 20, nHeight, Label = "", Align = 2) # group box // non-breaking spaces x = 10; y = 145 - gbm3 = self._addWidget('groupbox3', 'GroupBox', x-5, y, nGroupBoxWith, 70, Label = " " * len(self.dUI.get('nbsp', "#err")), FontDescriptor = xFD1) + gbm3 = self._addWidget('groupbox3', 'GroupBox', x-5, y, nGroupBoxWith, 80, Label = " " * len(self.dUI.get('nbsp', "#err")), FontDescriptor = xFD1) self.nbsp = self._addWidget('nbsp', 'CheckBox', x, y+2, nWidth, nHeight, Label = self.dUI.get('nbsp', "#err"), FontDescriptor = xFD1, \ FontRelief = 1, TextColor = nColor, State = True) self.nbsp1 = self._addWidget('nbsp1', 'CheckBox', x, y+15, 85, nHeight, Label = self.dUI.get('nbsp1', "#err"), State = True) self.nbsp2 = self._addWidget('nbsp2', 'CheckBox', x, y+25, 85, nHeight, Label = self.dUI.get('nbsp2', "#err"), State = True) self.nbsp3 = self._addWidget('nbsp3', 'CheckBox', x, y+35, nWidth, nHeight, Label = self.dUI.get('nbsp3', "#err"), State = True) self.nbsp4 = self._addWidget('nbsp4', 'CheckBox', x, y+45, 85, nHeight, Label = self.dUI.get('nbsp4', "#err"), State = True) self.nbsp5 = self._addWidget('nbsp5', 'CheckBox', x, y+55, 85, nHeight, Label = self.dUI.get('nbsp5', "#err"), State = True) + self.nbsp6 = self._addWidget('nbsp6', 'CheckBox', x, y+65, 85, nHeight, Label = self.dUI.get('nbsp6', "#err"), State = True) self.nnbsp1 = self._addWidget('nnbsp1', 'CheckBox', x+85, y+15, 30, nHeight, Label = self.dUI.get('nnbsp', "#err"), HelpText = self.dUI.get('nnbsp_help', "#err"), State = False) self.nnbsp2 = self._addWidget('nnbsp2', 'CheckBox', x+85, y+25, 30, nHeight, Label = self.dUI.get('nnbsp', "#err"), State = False) self.nnbsp4 = self._addWidget('nnbsp4', 'CheckBox', x+85, y+45, 30, nHeight, Label = self.dUI.get('nnbsp', "#err"), State = False) self.nbsp1_res = self._addWidget('nbsp1_res', 'FixedText', nPosRes, y+15, 20, nHeight, Label = "", Align = 2) self.nbsp2_res = self._addWidget('nbsp2_res', 'FixedText', nPosRes, y+25, 20, nHeight, Label = "", Align = 2) self.nbsp3_res = self._addWidget('nbsp3_res', 'FixedText', nPosRes, y+35, 20, nHeight, Label = "", Align = 2) self.nbsp4_res = self._addWidget('nbsp4_res', 'FixedText', nPosRes, y+45, 20, nHeight, Label = "", Align = 2) self.nbsp5_res = self._addWidget('nbsp5_res', 'FixedText', nPosRes, y+55, 20, nHeight, Label = "", Align = 2) + self.nbsp6_res = self._addWidget('nbsp6_res', 'FixedText', nPosRes, y+65, 20, nHeight, Label = "", Align = 2) # group box // deletion - x = 10; y = 220 + x = 10; y = 230 gbm7 = self._addWidget('groupbox7', 'GroupBox', x-5, y, nGroupBoxWith, 50, Label = " " * len(self.dUI.get('delete', "#err")), FontDescriptor = xFD1) self.delete = self._addWidget('delete', 'CheckBox', x, y+2, nWidth, nHeight, Label = self.dUI.get('delete', "#err"), FontDescriptor = xFD1, \ FontRelief = 1, TextColor = nColor, State = True) self.delete1 = self._addWidget('delete1', 'CheckBox', x, y+15, nWidth, nHeight, Label = self.dUI.get('delete1', "#err"), State = True) self.delete2 = self._addWidget('delete2', 'CheckBox', x, y+25, nWidth, nHeight, Label = self.dUI.get('delete2', "#err"), State = True) @@ -225,20 +227,20 @@ self.struct1_res = self._addWidget('struct1_res', 'FixedText', nPosRes, y+15, 20, nHeight, Label = "", Align = 2) self.struct2_res = self._addWidget('struct2_res', 'FixedText', nPosRes, y+25, 20, nHeight, Label = "", Align = 2) self.struct3_res = self._addWidget('struct3_res', 'FixedText', nPosRes, y+35, 20, nHeight, Label = "", Align = 2) # dialog height - self.xDialog.Height = 292 + self.xDialog.Height = 302 xWindowSize = helpers.getWindowSize() self.xDialog.PositionX = int((xWindowSize.Width / 2) - (self.xDialog.Width / 2)) self.xDialog.PositionY = int((xWindowSize.Height / 2) - (self.xDialog.Height / 2)) # lists of checkbox widgets self.dCheckboxWidgets = { "ssp": [self.ssp1, self.ssp2, self.ssp3, self.ssp4, self.ssp5, self.ssp6, self.ssp7], "space": [self.space1, self.space2], - "nbsp": [self.nbsp1, self.nbsp2, self.nbsp3, self.nbsp4, self.nbsp5, self.nnbsp1, self.nnbsp2, self.nnbsp4], + "nbsp": [self.nbsp1, self.nbsp2, self.nbsp3, self.nbsp4, self.nbsp5, self.nbsp6, self.nnbsp1, self.nnbsp2, self.nnbsp4], "delete": [self.delete1, self.delete2, self.delete2a, self.delete2b, self.delete2c], "typo": [self.typo1, self.typo2, self.typo3, self.typo3a, self.typo3b, self.typo4, self.typo4a, self.typo4b, self.typo5, self.typo6, \ self.typo7, self.typo8, self.typo8a, self.typo8b, self.typo_ff, self.typo_fi, self.typo_ffi, self.typo_fl, self.typo_ffl, \ self.typo_ft, self.typo_st], "misc": [self.misc1, self.misc2, self.misc3, self.misc5, self.misc1a, self.misc5b, self.misc5c], #self.misc4, @@ -246,11 +248,11 @@ } # progress bar self.pbar = self._addWidget('pbar', 'ProgressBar', 22, self.xDialog.Height-16, 210, 10) self.pbar.ProgressValueMin = 0 - self.pbar.ProgressValueMax = 31 + self.pbar.ProgressValueMax = 32 # time counter self.time_res = self._addWidget('time_res', 'FixedText', self.xDialog.Width-80, self.xDialog.Height-15, 20, nHeight, Label = "", Align = 2) # buttons self.bdefault = self._addWidget('default', 'Button', 5, self.xDialog.Height-19, 15, 15, Label = self.dUI.get('default', "#err"), \ @@ -514,17 +516,17 @@ self.pbar.ProgressValue += 1 if self.nbsp5.State: n = self._replaceList(xElem, "nbsp5") self.nbsp5_res.Label = str(n) self.pbar.ProgressValue += 1 - if False: + if self.nbsp6.State: n = self._replaceList(xElem, "nbsp6") - self.nbsp3_res.Label = str(n) + self.nbsp6_res.Label = str(n) self.pbar.ProgressValue += 1 self.nbsp.State = False self._switchCheckBox(self.nbsp) - self.pbar.ProgressValue = 15 + self.pbar.ProgressValue = 16 # points médians if self.typo.State: if self.typo6.State: n = self._replaceList(xElem, "typo6") self.typo6_res.Label = str(n) @@ -541,11 +543,11 @@ n = self._replaceList(xElem, "space2") self.space2_res.Label = str(n) self.pbar.ProgressValue += 1 self.space.State = False self._switchCheckBox(self.space) - self.pbar.ProgressValue = 17 + self.pbar.ProgressValue = 18 # Suppression if self.delete.State: if self.delete1.State: n = self._replaceList(xElem, "delete1") self.delete1_res.Label = str(n) @@ -554,11 +556,11 @@ n = self._replaceBulletsByEmDash(xElem) self.delete2_res.Label = str(n) self.pbar.ProgressValue += 1 self.delete.State = False self._switchCheckBox(self.delete) - self.pbar.ProgressValue = 20 + self.pbar.ProgressValue = 21 # signes typographiques if self.typo.State: if self.typo1.State: n = self._replaceList(xElem, "typo1") self.typo1_res.Label = str(n) @@ -628,11 +630,11 @@ n += self._replaceText(xElem, "st", "st", False, True) self.typo8_res.Label = str(n) self.pbar.ProgressValue += 1 self.typo.State = False self._switchCheckBox(self.typo) - self.pbar.ProgressValue = 28 + self.pbar.ProgressValue = 29 # divers if self.misc.State: if self.misc1.State: if self.misc1a.State: n = self._replaceList(xElem, "misc1a") Index: gc_lang/fr/oxt/TextFormatter/tf_options.py ================================================================== --- gc_lang/fr/oxt/TextFormatter/tf_options.py +++ gc_lang/fr/oxt/TextFormatter/tf_options.py @@ -1,17 +1,17 @@ dDefaultOpt = { 'ssp': 1, 'ssp1': 1, 'ssp2': 1, 'ssp3': 1, 'ssp4': 1, 'ssp5': 1, 'ssp6': 1, 'ssp7': 1, - 'nbsp': 1, 'nbsp1': 1, 'nbsp2': 1, 'nbsp3': 1, 'nbsp4': 1, 'nbsp5': 1, 'nnbsp1': 0, 'nnbsp2': 0, 'nnbsp4': 0, + 'nbsp': 1, 'nbsp1': 1, 'nbsp2': 1, 'nbsp3': 1, 'nbsp4': 1, 'nbsp5': 1, 'nbsp6': 1, 'nnbsp1': 0, 'nnbsp2': 0, 'nnbsp4': 0, 'space': 1, 'space1': 1, 'space2': 1, 'delete': 0, 'delete1': 1, 'delete2': 1, 'delete2a': 0, 'delete2b': 1, 'delete2c': 0, 'typo': 1, 'typo1': 1, 'typo2': 1, 'typo3': 1, 'typo4': 1, 'typo5': 1, 'typo6': 1, 'typo7': 1, 'typo8': 0, 'typo3a': 0, 'typo3b': 1, 'typo4a': 1, 'typo4b': 0, 'typo8a': 0, 'typo8b': 1, 'typo_ff': 1, 'typo_fi':1, 'typo_ffi':1, 'typo_fl':1, 'typo_ffl':1, 'typo_ft':1, 'typo_st': 1, 'misc': 1, 'misc1': 1, 'misc2': 1, 'misc3': 1, 'misc5': 1, 'misc1a': 0, 'misc5b': 0, 'misc5c': 0, 'struct': 0, 'struct1': 1, 'struct2': 1, 'struct3': 0, } dOpt = { 'ssp': 1, 'ssp1': 1, 'ssp2': 1, 'ssp3': 1, 'ssp4': 1, 'ssp5': 1, 'ssp6': 1, 'ssp7': 1, - 'nbsp': 1, 'nbsp1': 1, 'nbsp2': 1, 'nbsp3': 1, 'nbsp4': 1, 'nbsp5': 1, 'nnbsp1': 0, 'nnbsp2': 0, 'nnbsp4': 0, + 'nbsp': 1, 'nbsp1': 1, 'nbsp2': 1, 'nbsp3': 1, 'nbsp4': 1, 'nbsp5': 1, 'nbsp6': 1, 'nnbsp1': 0, 'nnbsp2': 0, 'nnbsp4': 0, 'space': 1, 'space1': 1, 'space2': 1, 'delete': 0, 'delete1': 1, 'delete2': 1, 'delete2a': 0, 'delete2b': 1, 'delete2c': 0, 'typo': 1, 'typo1': 1, 'typo2': 1, 'typo3': 1, 'typo4': 1, 'typo5': 1, 'typo6': 1, 'typo7': 1, 'typo8': 0, 'typo3a': 0, 'typo3b': 1, 'typo4a': 1, 'typo4b': 0, 'typo8a': 0, 'typo8b': 1, 'typo_ff': 1, 'typo_fi':1, 'typo_ffi':1, 'typo_fl':1, 'typo_ffl':1, 'typo_ft':1, 'typo_st': 1, 'misc': 1, 'misc1': 1, 'misc2': 1, 'misc3': 1, 'misc5': 1, 'misc1a': 0, 'misc5b': 0, 'misc5c': 0, 'struct': 0, 'struct1': 1, 'struct2': 1, 'struct3': 0, Index: gc_lang/fr/oxt/TextFormatter/tf_strings.py ================================================================== --- gc_lang/fr/oxt/TextFormatter/tf_strings.py +++ gc_lang/fr/oxt/TextFormatter/tf_strings.py @@ -26,10 +26,11 @@ "nbsp1": "Avant : ; ? et !", "nbsp2": "Avec les guillemets « et »", "nbsp3": "Avant % ‰ € $ £ ¥ ˚C", "nbsp4": "À l’intérieur des nombres", "nbsp5": "Avant les unités de mesure", + "nbsp6": "Après les titres de civilité", "nnbsp": "fins", "nnbsp_help": "sauf avec “:”", "delete": "Su~ppressions", "delete1": "Tirets conditionnels", @@ -108,10 +109,11 @@ "nbsp1": "Before : ; ? and !", "nbsp2": "With quoting marks « and »", "nbsp3": "Before % ‰ € $ £ ¥ ˚C", "nbsp4": "Within numbers", "nbsp5": "Before units of measurement", + "nbsp6": "After titles", "nnbsp": "narrow", "nnbsp_help": "except with “:”", "delete": "~Deletions", "delete1": "Soft hyphens", Index: gc_lang/fr/oxt/TextFormatter/tf_tabrep.py ================================================================== --- gc_lang/fr/oxt/TextFormatter/tf_tabrep.py +++ gc_lang/fr/oxt/TextFormatter/tf_tabrep.py @@ -119,11 +119,11 @@ ], "nbsp5": [ ("(?<=[0-9⁰¹²³⁴⁵⁶⁷⁸⁹]) ?([kcmµnd]?(?:[slgJKΩΩℓ]|m[²³]?|Wh?|Hz|dB)|[%‰]|°C)\\b", " $1", True, True) ], "nbsp6": [ - ("\\b(MM?\\.|Mlle|Mgr) ", "$1 ", True, True) + ("\\bM(mes?|ᵐᵉˢ?|grs?|ᵍʳˢ?|lles?|ˡˡᵉˢ?|rs?|ʳˢ?|M\\.) ", "M$1 ", True, True) ], # espaces manquants "space1": [ (";(?=[:alnum:])", "; ", True, True), Index: gc_lang/fr/tb/content/overlay.js ================================================================== --- gc_lang/fr/tb/content/overlay.js +++ gc_lang/fr/tb/content/overlay.js @@ -692,11 +692,11 @@ document.getElementById("o_group_ssp").checked = false; this.switchGroup("o_group_ssp"); } document.getElementById('progressbar').value = 1; - // espaces typographiques + // espaces insécables if (document.getElementById("o_group_nbsp").checked) { if (document.getElementById("o_nbsp_before_punctuation").checked) { [sText, n1] = this.formatText(sText, "nbsp_before_punctuation"); [sText, n2] = this.formatText(sText, "nbsp_repair"); document.getElementById('res_o_nbsp_before_punctuation').textContent = n1 - n2; @@ -715,10 +715,14 @@ } if (document.getElementById("o_nbsp_before_units").checked) { [sText, n1] = this.formatText(sText, "nbsp_before_units"); document.getElementById('res_o_nbsp_before_units').textContent = n1; } + if (document.getElementById("o_nbsp_titles").checked) { + [sText, n1] = this.formatText(sText, "nbsp_titles"); + document.getElementById('res_o_nbsp_titles').textContent = n1; + } document.getElementById("o_group_nbsp").checked = false; this.switchGroup("o_group_nbsp"); } document.getElementById('progressbar').value = 2; Index: gc_lang/fr/tb/content/overlay.xul ================================================================== --- gc_lang/fr/tb/content/overlay.xul +++ gc_lang/fr/tb/content/overlay.xul @@ -169,10 +169,15 @@ + + + + Index: gc_lang/fr/tb/locale/en/overlay.dtd ================================================================== --- gc_lang/fr/tb/locale/en/overlay.dtd +++ gc_lang/fr/tb/locale/en/overlay.dtd @@ -35,10 +35,11 @@ + Index: gc_lang/fr/tb/locale/fr/overlay.dtd ================================================================== --- gc_lang/fr/tb/locale/fr/overlay.dtd +++ gc_lang/fr/tb/locale/fr/overlay.dtd @@ -35,10 +35,11 @@ + Index: gc_lang/fr/webext/content_scripts/panel_tf.js ================================================================== --- gc_lang/fr/webext/content_scripts/panel_tf.js +++ gc_lang/fr/webext/content_scripts/panel_tf.js @@ -34,10 +34,11 @@ xNBSP.appendChild(this._createBlockOption("o_nbsp_before_punctuation", true, "Avant : ; ? et !")); xNBSP.appendChild(this._createBlockOption("o_nbsp_within_quotation_marks", true, "Avec les guillemets « et »")); xNBSP.appendChild(this._createBlockOption("o_nbsp_before_symbol", true, "Avant % ‰ € $ £ ¥ ˚C")); xNBSP.appendChild(this._createBlockOption("o_nbsp_within_numbers", true, "À l’intérieur des nombres")); xNBSP.appendChild(this._createBlockOption("o_nbsp_before_units", true, "Avant les unités de mesure")); + xNBSP.appendChild(this._createBlockOption("o_nbsp_titles", true, "Après les titres de civilité")); let xDelete = this._createFieldset("group_delete", true, "Suppressions"); xDelete.appendChild(this._createBlockOption("o_erase_non_breaking_hyphens", true, "Tirets conditionnels")); let xColumn2 = oGrammalecte.createNode("div", {className: "grammalecte_tf_column"}); let xTypo = this._createFieldset("group_typo", true, "Signes typographiques"); xTypo.appendChild(this._createBlockOption("o_ts_apostrophe", true, "Apostrophe (’)")); @@ -308,11 +309,11 @@ this.setOption("o_group_ssp", false); this.switchGroup("o_group_ssp"); } document.getElementById('grammalecte_tf_progressbar').value = 2; - // espaces typographiques + // espaces insécables if (this.isSelected("o_group_nbsp")) { if (this.isSelected("o_nbsp_before_punctuation")) { [sText, n1] = this.formatText(sText, "nbsp_before_punctuation"); [sText, n2] = this.formatText(sText, "nbsp_repair"); document.getElementById('res_o_nbsp_before_punctuation').textContent = n1 - n2; @@ -331,10 +332,14 @@ } if (this.isSelected("o_nbsp_before_units")) { [sText, n1] = this.formatText(sText, "nbsp_before_units"); document.getElementById('res_o_nbsp_before_units').textContent = n1; } + if (this.isSelected("o_nbsp_titles")) { + [sText, n1] = this.formatText(sText, "nbsp_titles"); + document.getElementById('res_o_nbsp_titles').textContent = n1; + } this.setOption("o_group_nbsp", false); this.switchGroup("o_group_nbsp"); } document.getElementById('grammalecte_tf_progressbar').value = 3;