#!/usr/bin/env python # -*- coding: utf-8 -*- """ Author: Richard Brunet File: RR_Article.py (Clean-up the imported text from Openoffice html.) Version: 1.0 Date: 11/11/2021 """ import sys, re try: from scribus import * except ImportError: print ('Ce script est écrit en Python. Il ne peut être lancé que depuis Scribus.') sys.exit(1) if not scribus.haveDoc(): scribus.messageBox ('Warning', 'Vous devez ouvrir un document.', scribus.ICON_WARNING, scribus.BUTTON_OK) sys.exit(1) if scribus.selectionCount() == 0: scribus.messageBox ('Warning', 'Vous devez sélectionner un cadre de texte.', scribus.ICON_WARNING, scribus.BUTTON_OK) sys.exit(1) if scribus.selectionCount() > 1: scribus.messageBox ('Warning', 'Vous devez sélectionner un cadre de texte.', scribus.ICON_WARNING, scribus.BUTTON_OK) sys.exit(1) replacements = ( # espace insecable etroit = u'\u202F', Esp. Insecable = u'\u00A0', Espace = u'\u0020', Point = u'\u002E' # virgule = u'\u002C', ¤ = u'\u00A4', Espace = u'\u0020', Point = u'\u002E' ('\u00A4','\u0020'), # ¤ en espace ('\u0020\u0020','\u0020'), # deux espaces en un ('\u0020,\u20AC','\u202F\u20AC'), # espace + € to espace insécable étroit + € ('\u0020\u0070\005C\u002E\u0020','\u00A0\u0070\005C\u002E\u00A0'), # espace p. espace en espace p. insécable ('\u0070\005C\u002E\u0020','\u0070\005C\u002E\u00A0'), # (p. espace en p. insécable ('\u2116','\u0020\u2116\u00A0'), # № en espace N° insécable ('\u0020\u0025','\u202F\u0025'), # espace % en insécable % ('\u00AB\u00BB','\u00AB'), # parenthèse O/F en ouvrante ('\u2019\u00BB','\u2019\u00AB'), # 'parenthèse fermante en 'ouvrante ('\u00A7','\u202F'), # § en U+202F NARROW NO-BREAK SPACE ("""\(""",""" ("""), # une parenthèse ouvrantes en espace + ('\u00ab\u0020','\u00ab\u202f'), # U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK ('\u0020\u00bb','\u202f\u00bb'), # U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK ('\u0020\u003b','\u202f\u003b'), # U+003B SEMICOLON ('\u0020\u202f','\u202f'), # U+202F NARROW NO-BREAK SPACE ('\u202f\u0020','\u202f'), # U+202F NARROW NO-BREAK SPACE ("""atel’""","""atelʹ"""), # signe mou \u2019 RIGHT SINGLE QUOTATION MARK en \u02CA MODIFIER LETTER ACUTE ACCENT ("""d’t""","""dʹt"""), # signe mou ("""s’m""","""sʹm"""), # signe mou ("""L’C""","""LʹC"""), # signe mou ("""l’k""","""lʹk"""), # signe mou ("""l’n""","""lʹn"""), # signe mou ("""l’t""","""lʹt"""), # signe mou ("""n’g""","""nʹg"""), # signe mou ("""l’k""","""lʹk"""), # signe mou ("""st’""","""stʹ"""), # signe mou ("""st’""","""stʹ"""), # signe mou ("""zn’""","""znʹ"""), # signe mou ('\u002C','\u002C\u0020'), # virgule collée ('\u002C\u0020\u0020','\u002C\u0020'), # virgule collée #(""" ,""",""" ,"""), # virgule collée ('\u0020\u0021','\u00A0\u0021'), # point virgule insécable ('\u0020\u003A','\u00A0\u003A'), # espace : par insécable : ('\u0020\u0020\u0020','\u0020'), # 3 espaces en un ('\u0020\u0020','\u0020'), # 2 espaces en un ('\u0020\u00A0','\u00A0'), # espace+insécable par insecable ('\u00A0\u0020','\u00A0'), # insécable+space to insécable ) d = scribus.getSelectedObject() if scribus.getObjectType(d) != 'TextFrame': scribus.messageBox ('Warning', 'Vous devez sélectionner un cadre de texte.', scribus.ICON_WARNING, scribus.BUTTON_OK) sys.exit(1) else: for item in replacements: content = (scribus.getAllText(d)) p = re.compile (item[0]) r = re.finditer (p, content) for i in reversed (tuple(r)): count = i.end()-i.start() scribus.selectText (i.start(), count, d) scribus.deleteText(d) scribus.insertText (item[1], i.start(), d) scribus.setRedraw (True) scribus.docChanged (True) scribus.messageBox ('Info', 'Script terminé avec succès.', scribus.ICON_INFORMATION, scribus.BUTTON_OK)