Clean-up the imported text based on the Slovak typographic rules
Jump to navigation
Jump to search
A common problem when receiving text from other people is that it is often not as consistently formatted as you might like. Some common things that need to be fixed are:
- removing double spaces
- removing spaces before full stops, commas, colons, semicolons, question marks or exclamation marks
- removing extra spaces or tabs at the beginning and at the end of the paragraphs
- removing blank lines between paragraphs
Fixing these items manually can become very time consuming. This script will help you clean-up the imported text based on the Slovak typographic rules.
The script
#!/usr/bin/env python # -*- coding: utf-8 -*- """ Author: Richard Sitányi (cdbox@zilina.net) File: clean-up.py (Clean-up the imported text based on the Slovak typographic rules.) Version: 1.0 Date: 06/02/2013 LICENSE: This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place – Suite 330, Boston, MA 02111-1307, USA. DESCRIPTION: A common problem when receiving text from other people is that it is often not as consistently formatted as you might like. Some common things that need to be fixed are: * removing double spaces * removing spaces before full stops, commas, colons, semicolons, question marks or exclamation marks * removing extra spaces or tabs at the beginning and at the end of the paragraphs * removing blank lines between paragraphs Fixing these items manually can become very time consuming. This script will help you clean-up the imported text based on the Slovak typographic rules. USAGE: Create new document, insert text frame, import text from file, run the script and enjoy ;-) """ import sys import re try: import scribus except ImportError,err: print 'This Python script is written for the Scribus scripting interface. It can only be run from within Scribus.' sys.exit(1) if not scribus.haveDoc(): scribus.messageBox('Warning', 'You should open a document.', scribus.ICON_WARNING, scribus.BUTTON_OK) sys.exit(1) if scribus.selectionCount() == 0: scribus.messageBox('Warning', 'You should select a text frame.', scribus.ICON_WARNING, scribus.BUTTON_OK) sys.exit(1) if scribus.selectionCount() > 1: scribus.messageBox('Warning', 'You should select one text frame.', scribus.ICON_WARNING, scribus.BUTTON_OK) sys.exit(1) replacements = ( # tab and non breaking space to single space (r'['+u'\u0009'+u'\u00a0'+r']+',u'\u0020'), # space+hyphen+space to space+en dash+space (u'\u0020'+u'\u002d'+r'+'+u'\u0020',u'\u0020'+u'\u2013'+u'\u0020'), # double space to single space (u'\u0020'+u'\u0020'+r'+',u'\u0020'), # space+solidus or solidus+space to solidus (u'\u0020'+r'\/|\/'+u'\u0020',u'\u002f'), # space+hyphen or hyphen+space to hyphen (u'\u0020'+r'\-|\-'+u'\u0020',u'\u002d'), # ampersand to space+ampersand; if there is not a space before the ampersand (r'(?<!'+u'\u0020'+r')'+u'\u0026',u'\u0020'+u'\u0026'), # ampersand to ampersand+space; if there is not a space after the ampersand (u'\u0026'+r'(?!'+u'\u0020'+r')',u'\u0026'+u'\u0020'), # percent sign to space+percent sign; if there is not a space before the percent sign # WARNING: In Slovak the percent sign is spaced if the number is used as a noun, while no space is inserted if the number is used as an adjective (e.g. “a 50% increase”). # Therefore consider carefully the use of the replacement. # (r'(?<!'+u'\u0020'+r')\%',u'\u0020'+u'\u0025'), # percent sign to percent sign+space; if there are not a space, full stop, comma, semicolon, colon, question mark, exclamation mark, slovak right single quotation mark, # slovak right double quotation mark, new line (SHIFT+ENTER) or carriage return after the percent sign (r'\%(?!'+u'\u0020'+r'|\.|\,|\;|\:|\?|\!'+u'\u2018'+r'|'+u'\u201c'+r'|'+u'\u001c'+r'|'+u'\u000d'+r')',u'\u0025'+u'\u0020'), # left parenthesis to space+left parenthesis; if there is not a space before the left parenthesis (r'(?<!'+u'\u0020'+r')\(',u'\u0020'+u'\u0028'), # right parenthesis to right parenthesis+space; if there are not a space, full stop, comma, semicolon, colon, question mark, exclamation mark, # slovak right single quotation mark, slovak right double quotation mark, new line (SHIFT+ENTER) or carriage return after the right parenthesis (r'\)(?!'+u'\u0020'+r'|\.|\,|\;|\:|\?|\!'+u'\u2018'+r'|'+u'\u201c'+r'|'+u'\u001c'+r'|'+u'\u000d'+r')',u'\u0029'+u'\u0020'), # left parenthesis+space to left parenthesis (r'\('+u'\u0020',u'\u0028'), # space+right parenthesis to right parenthesis (u'\u0020'+r'\)',u'\u0029'), # three full stops to ellipsis (r'\.\.\.+',u'\u2026'), # space+ellipsis to ellipsis (u'\u0020'+u'\u2026',u'\u2026'), # double ellipsis to ellipsis (u'\u2026'+u'\u2026'+r'+',u'\u2026'), # ellipsis to ellipsis+space; if there are not a space, question mark, exclamation mark, slovak right single quotation mark, # slovak right double quotation mark, new line (SHIFT+ENTER), carriage return or end of text after the ellipsis (u'\u2026'+r'(?!'+u'\u0020'+r'|\?|\!|'+u'\u2018'+r'|'+u'\u201c'+r'|'+u'\u001c'+r'|'+u'\u000d'+r'|'+r''+r')',u'\u2026'+u'\u0020'), # space+full stop to full stop (u'\u0020'+r'\.',u'\u002e'), # double full stop to full stop (r'\.\.+',u'\u002e'), # full stop to full stop+space; if there are not a space, comma, semicolon, colon, slovak right single quotation mark, # slovak right double quotation mark, new line (SHIFT+ENTER), carriage return or end of text after the full stop (r'\.(?!'+u'\u0020'+r'|\,|\;|\:|'+u'\u2018'+r'|'+u'\u201c'+r'|'+u'\u001c'+r'|'+u'\u000d'+r'|'+r''+r')',u'\u002e'+u'\u0020'), # space+comma to comma (u'\u0020'+r'\,',u'\u002c'), # double comma to comma (r'\,\,+',u'\u002c'), # comma to coma+space; if there are not a space, number, slovak right single quotation mark, slovak right double quotation mark, # new line (SHIFT+ENTER) or carriage return after the comma (r'\,(?!'+u'\u0020'+r'|[0-9]|'+u'\u2018'+r'|'+u'\u201c'+r'|'+u'\u001c'+r'|'+u'\u000d'+r')',u'\u002c'+u'\u0020'), # space+colon to colon (u'\u0020'+r'\:',u'\u003a'), # double colon to colon (r'\:\:+',u'\u003a'), # colon to colon+space; if there are not a space, new line (SHIFT+ENTER) or carriage return after the colon (r'\:(?!'+u'\u0020'+r'|'+u'\u001c'+r'|'+u'\u000d'+r')',u'\u003a'+u'\u0020'), # space+semicolon to semicolon (u'\u0020'+r'\;',u'\u003b'), # double semicolon to semicolon (r'\;\;+',u'\u003b'), # semicolon to semicolon+space; if there are not a space, new line (SHIFT+ENTER) or carriage return after the semicolon (r'\;(?!'+u'\u0020'+r'|'+u'\u001c'+r'|'+u'\u000d'+r')',u'\u003b'+u'\u0020'), # space+question mark to question mark (u'\u0020'+r'\?',u'\u003f'), # question mark to question mark+space; if there are not a space, question mark, exclamation mark, slovak right single quotation mark, # slovak right double quotation mark, new line (SHIFT+ENTER), carriage return or end of text after the question mark (r'\?'+r'(?!'+u'\u0020'+r'|\?|\!|'+u'\u2018'+r'|'+u'\u201c'+r'|'+u'\u001c'+r'|'+u'\u000d'+r'|'+r''+r')',u'\u2026'+u'\u0020'), # space+exclamation mark to exclamation mark (u'\u0020'+r'\!',u'\u0021'), # exclamation mark to exclamation mark+space; if there are not a space, question mark, exclamation mark, slovak right single quotation mark, # slovak right double quotation mark, new line (SHIFT+ENTER), carriage return or end of text after the exclamation mark (r'\!'+r'(?!'+u'\u0020'+r'|\?|\!|'+u'\u2018'+r'|'+u'\u201c'+r'|'+u'\u001c'+r'|'+u'\u000d'+r'|'+r''+r')',u'\u2026'+u'\u0020'), # slovak left single quotation mark+space to slovak left single quotation mark (u'\u201a'+u'\u0020',u'\u201a'), # slovak left double quotation mark+space to slovak left double quotation mark (u'\u201e'+u'\u0020',u'\u201e'), # space+slovak right single quotation mark to slovak right single quotation mark (u'\u0020'+u'\u2018',u'\u2018'), # space+slovak right double quotation mark to slovak right double quotation mark (u'\u0020'+u'\u201c',u'\u201c'), # slovak left single quotation mark to slovak left single quotation mark+space; if there is not a space before the slovak left single quotation mark (r'(?<!'+u'\u0020'+r')\(',u'\u0020'+u'\u201a'), # slovak left double quotation mark to slovak left double quotation mark+space; if there is not a space before the slovak left double quotation mark (r'(?<!'+u'\u0020'+r')\(',u'\u0020'+u'\u201e'), # slovak right single quotation mark to slovak right single quotation mark+space; if there are not a space, full stop, comma, semicolon, colon, question mark, # exclamation mark, slovak right double quotation mark, new line (SHIFT+ENTER) or carriage return after the slovak right single quotation mark (u'\u2018'+r'(?!'+u'\u0020'+r'|\.|\,|\;|\:|\?|\!|'+u'\u201c'+r'|'+u'\u001c'+r'|'+u'\u000d'+r')',u'\u2018'+u'\u0020'), # slovak right double quotation mark to slovak right double quotation mark+space; if there are not a space, full stop, comma, semicolon, colon, question mark, # exclamation mark, new line (SHIFT+ENTER), carriage return or end of text after the slovak right double quotation mark (u'\u201c'+r'(?!'+u'\u0020'+r'|\.|\,|\;|\:|\?|\!|'+u'\u001c'+r'|'+u'\u000d'+r'|'+r''+r')',u'\u201c'+u'\u0020'), # new line (SHIFT+ENTER) to carriage return (u'\u001c'+r'+',u'\u000d'), # space+carriage return to carriage return (u'\u0020'+u'\u000d'+r'+',u'\u000d'), # carriage return+space to carriage return (u'\u000d'+u'\u0020'+r'+',u'\u000d'), # double carriage return to carriage return (u'\u000d'+u'\u000d'+r'+',u'\u000d'), # remove extra spaces from start and end of a text (r'^'+u'\u0020'+r'|'+u'\u0020'+r'$','') ) d = scribus.getSelectedObject() if scribus.getObjectType(d) != 'TextFrame': scribus.messageBox('Warning', 'You should select a text frame.', scribus.ICON_WARNING, scribus.BUTTON_OK) sys.exit(1) else: for item in replacements: content = unicode(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 finished successfully.', scribus.ICON_INFORMATION, scribus.BUTTON_OK)