diff options
author | László Németh <nemeth@numbertext.org> | 2011-12-05 19:18:07 +0100 |
---|---|---|
committer | Andras Timar <atimar@suse.com> | 2011-12-14 22:03:22 +0100 |
commit | 705f45939b4adccf62066b37155ef09543161601 (patch) | |
tree | 0c53f1cf4ad4b525f2be24d67b31f561debb6c5f | |
parent | 1ad492bcfb2857ca55d7d799cddfa5f1e5347ab5 (diff) |
English sentence checking
Signed-off-by: Andras Timar <atimar@suse.com>
-rw-r--r-- | dictionaries/en/Lightproof.py | 410 | ||||
-rw-r--r-- | dictionaries/en/Linguistic.xcu | 18 | ||||
-rw-r--r-- | dictionaries/en/README_lightproof_en.txt | 3 | ||||
-rw-r--r-- | dictionaries/en/description.xml | 2 | ||||
-rw-r--r-- | dictionaries/en/dialog/OptionsDialog.xcs | 74 | ||||
-rw-r--r-- | dictionaries/en/dialog/OptionsDialog.xcu | 37 | ||||
-rw-r--r-- | dictionaries/en/dialog/en.xdl | 26 | ||||
-rw-r--r-- | dictionaries/en/dialog/en_en_US.default | 0 | ||||
-rw-r--r-- | dictionaries/en/dialog/en_en_US.properties | 37 | ||||
-rw-r--r-- | dictionaries/en/makefile.mk | 14 | ||||
-rw-r--r-- | dictionaries/en/manifest.xml | 9 | ||||
-rw-r--r-- | dictionaries/en/pythonpath/lightproof_en.py | 1 | ||||
-rw-r--r-- | dictionaries/en/pythonpath/lightproof_handler_en.py | 121 | ||||
-rw-r--r-- | dictionaries/en/pythonpath/lightproof_impl_en.py | 6 | ||||
-rw-r--r-- | dictionaries/en/pythonpath/lightproof_opts_en.py | 4 |
15 files changed, 760 insertions, 2 deletions
diff --git a/dictionaries/en/Lightproof.py b/dictionaries/en/Lightproof.py new file mode 100644 index 0000000..a6b669c --- /dev/null +++ b/dictionaries/en/Lightproof.py @@ -0,0 +1,410 @@ +# -*- encoding: UTF-8 -*- +# Lightproof grammar checker for LibreOffice and OpenOffice.org +# http://launchpad.net/lightproof +# version 1.4.3 (2011-12-05) +# +# 2009-2011 (c) László Németh (nemeth at numbertext org), license: MPL 1.1 / GPLv3+ / LGPLv3+ + +import uno, unohelper, sys, traceback, re +from lightproof_impl_en import locales +from lightproof_impl_en import pkg +import lightproof_handler_en +from string import join + +from com.sun.star.linguistic2 import XProofreader, XSupportedLocales +from com.sun.star.linguistic2 import ProofreadingResult, SingleProofreadingError +from com.sun.star.lang import XServiceInfo, XServiceName, XServiceDisplayName +from com.sun.star.lang import Locale +from com.sun.star.text.TextMarkupType import PROOFREADING + +# loaded rules +langrule = {} +# ignored rules +ignore = {} + +# cache for morphogical analyses +analyses = {} +stems = {} +suggestions = {} + +# assign Calc functions +calcfunc = None + +# check settings +def option(lang, opt): + return lightproof_handler_en.get_option(lang.Language + "_" + lang.Country, opt) + +# filtering affix fields (ds, is, ts etc.) +def onlymorph(st): + if st != None: + st = re.sub(r"^.*(st:|po:)", r"\1", st) # keep last word part + st = re.sub(r"\b(?=[dit][sp]:)","@", st) # and its affixes + st = re.sub(r"(?<!@)\b\w\w:\w+","", st).replace('@','').strip() + return st + +# if the pattern matches all analyses of the input word, +# return the last matched substring +def _morph(rLoc, word, pattern, all, onlyaffix): + global analyses + if word == None: + return None + if word not in analyses: + x = spellchecker.spell(u"<?xml?><query type='analyze'><word>" + word + "</word></query>", rLoc, ()) + if not x: + return None + t = x.getAlternatives() + if not t: + t = [""] + analyses[word] = t[0] + a = analyses[word].split("</a>")[:-1] + result = None + p = re.compile(pattern) + for i in a: + if onlyaffix: + i = onlymorph(i) + result = p.search(i) + if result: + result = result.group(0) + if not all: + return result + elif all: + return None + return result + +def morph(rLoc, word, pattern, all=True): + return _morph(rLoc, word, pattern, all, False) + +def affix(rLoc, word, pattern, all=True): + return _morph(rLoc, word, pattern, all, True) + +def spell(rLoc, word): + if word == None: + return None + return spellchecker.isValid(word, rLoc, ()) + +# get the tuple of the stem of the word or an empty array +def stem(rLoc, word): + global stems + if word == None: + return [] + if not word in stems: + x = spellchecker.spell(u"<?xml?><query type='stem'><word>" + word + "</word></query>", rLoc, ()) + if not x: + return [] + t = x.getAlternatives() + if not t: + t = [] + stems[word] = list(t) + return stems[word] + +# get the tuple of the morphological generation of a word or an empty array +def generate(rLoc, word, example): + if word == None: + return [] + x = spellchecker.spell(u"<?xml?><query type='generate'><word>" + word + "</word><word>" + example + "</word></query>", rLoc, ()) + if not x: + return [] + t = x.getAlternatives() + if not t: + t = [] + return list(t) + +# get suggestions +def suggest(rLoc, word): + global suggestions + if word == None: + return word + if word not in suggestions: + x = spellchecker.spell("_" + word, rLoc, ()) + if not x: + return word + t = x.getAlternatives() + suggestions[word] = join(t, "\n") + return suggestions[word] + +# get the nth word of the input string or None +def word(s, n): + a = re.match("(?u)( [-.\w%]+){" + str(n-1) + "}( [-.\w%]+)", s) + if not a: + return None + return a.group(2)[1:] + +# get the (-)nth word of the input string or None +def wordmin(s, n): + a = re.search("(?u)([-.\w%]+ )([-.\w%]+ ){" + str(n-1) + "}$", s) + if not a: + return None + return a.group(1)[:-1] + +def calc(funcname, par): + global calcfunc + global SMGR + if calcfunc == None: + calcfunc = SMGR.createInstance( "com.sun.star.sheet.FunctionAccess") + if calcfunc == None: + return None + return calcfunc.callFunction(funcname, par) + +def proofread( nDocId, TEXT, LOCALE, nStartOfSentencePos, nSuggestedSentenceEndPos, rProperties ): + global ignore + aErrs = [] + s = TEXT[nStartOfSentencePos:nSuggestedSentenceEndPos] + for i in get_rule(LOCALE): + if i[0] and not str(i[0]) in ignore: + for m in i[0].finditer(s): + if not i[3] or eval(i[3]): + aErr = uno.createUnoStruct( "com.sun.star.linguistic2.SingleProofreadingError" ) + aErr.nErrorStart = nStartOfSentencePos + m.start(0) # nStartOfSentencePos + aErr.nErrorLength = m.end(0) - m.start(0) + aErr.nErrorType = PROOFREADING + aErr.aRuleIdentifier = str(i[0]) + iscap = (i[4] and m.group(0)[0:1].isupper()) + if i[1][0:1] == "=": + aErr.aSuggestions = tuple(cap(eval(i[1][1:]).split("\n"), iscap, LOCALE)) + else: + aErr.aSuggestions = tuple(cap(m.expand(i[1]).split("\n"), iscap, LOCALE)) + comment = i[2] + if comment[0:1] == "=": + comment = eval(comment[1:]) + aErr.aShortComment = comment.split("\n")[0] + aErr.aFullComment = comment.split("\n")[-1] + aErr.aProperties = () + aErrs = aErrs + [aErr] + return tuple(aErrs) + +def cap(a, iscap, rLoc): + if iscap: + for i in range(0, len(a)): + if a[i][0:1] == "i": + if rLoc.Language == "tr" or rLoc.Language == "az": + a[i] = u"\u0130" + a[i][1:] + elif a[i][1:2] == "j" and rLoc.Language == "nl": + a[i] = "IJ" + a[i][2:] + else: + a[i] = "I" + a[i][1:] + else: + a[i] = a[i].capitalize() + return a + +def get_rule(rLocale): + module = rLocale.Language + if rLocale.Country != "": + module = module + "_" + rLocale.Country + try: + return langrule[module] + except: + try: + module = rLocale.Language + return langrule[module] + except: + try: + d = __import__("lightproof_" + pkg) + except: + print "Error: missing language data: " + module + return None + # compile regular expressions + for i in d.dic: + try: + if re.compile("[(][?]iu[)]").match(i[0]): + i += [True] + i[0] = re.sub("[(][?]iu[)]", "(?u)", i[0]) + else: + i += [False] + i[0] = re.compile(i[0]) + except: + print "Lightproof: bad rule -- ", i[0] + i[0] = None + langrule[module] = d.dic + return langrule[module] + +class Lightproof( unohelper.Base, XProofreader, XServiceInfo, XServiceName, XServiceDisplayName, XSupportedLocales): + + def __init__( self, ctx, *args ): + global spellchecker + global SMGR + self.ctx = ctx + self.ServiceName = "com.sun.star.linguistic2.Proofreader" + self.ImplementationName = "org.openoffice.comp.pyuno.Lightproof." + pkg + self.SupportedServiceNames = (self.ServiceName, ) + self.locales = [] + for i in locales: + l = locales[i] + self.locales += [Locale(l[0], l[1], l[2])] + self.locales = tuple(self.locales) + currentContext = uno.getComponentContext() + SMGR = currentContext.ServiceManager + spellchecker = SMGR.createInstanceWithContext("com.sun.star.linguistic2.SpellChecker", currentContext) + lightproof_handler_en.load(currentContext) + + # XServiceName method implementations + def getServiceName(self): + return self.ImplementationName + + # XServiceInfo method implementations + def getImplementationName (self): + return self.ImplementationName + + def supportsService(self, ServiceName): + return (ServiceName in self.SupportedServiceNames) + + def getSupportedServiceNames (self): + return self.SupportedServiceNames + + # XSupportedLocales + def hasLocale(self, aLocale): + if aLocale in self.locales: + return True + for i in self.locales: + if (i.Country == aLocale.Country or i.Country == "") and aLocale.Language == i.Language: + return True + return False + + def getLocales(self): + return self.locales + + # XProofreader + def isSpellChecker(self): + return False + + def doProofreading(self, nDocId, rText, rLocale, nStartOfSentencePos, \ + nSuggestedSentenceEndPos, rProperties): + aRes = uno.createUnoStruct( "com.sun.star.linguistic2.ProofreadingResult" ) + aRes.aDocumentIdentifier = nDocId + aRes.aText = rText + aRes.aLocale = rLocale + aRes.nStartOfSentencePosition = nStartOfSentencePos + aRes.nStartOfNextSentencePosition = nSuggestedSentenceEndPos + l = rText[nSuggestedSentenceEndPos:nSuggestedSentenceEndPos+1] + while l == " ": + aRes.nStartOfNextSentencePosition = aRes.nStartOfNextSentencePosition + 1 + l = rText[aRes.nStartOfNextSentencePosition:aRes.nStartOfNextSentencePosition+1] + if aRes.nStartOfNextSentencePosition == nSuggestedSentenceEndPos and l!="": + aRes.nStartOfNextSentencePosition = nSuggestedSentenceEndPos + 1 + aRes.nBehindEndOfSentencePosition = aRes.nStartOfNextSentencePosition + + try: + aRes.aErrors = proofread( nDocId, rText, rLocale, \ + nStartOfSentencePos, aRes.nBehindEndOfSentencePosition, rProperties) + except: + traceback.print_exc(file=sys.stdout) + aRes.aErrors = () + aRes.aProperties = () + aRes.xProofreader = self + return aRes + + def ignoreRule(self, rid, aLocale): + global ignore + ignore[rid] = 1 + + def resetIgnoreRules(self): + global ignore + ignore = {} + + # XServiceDisplayName + def getServiceDisplayName(self, aLocale): + return "Lightproof Grammar Checker (" + pkg + ")" + +g_ImplementationHelper = unohelper.ImplementationHelper() +g_ImplementationHelper.addImplementation( Lightproof, \ + "org.openoffice.comp.pyuno.Lightproof." + pkg, + ("com.sun.star.linguistic2.Proofreader",),) + +g_ImplementationHelper.addImplementation( lightproof_handler_en.LightproofOptionsEventHandler, \ + "org.openoffice.comp.pyuno.LightproofOptionsEventHandler." + pkg, + ("com.sun.star.awt.XContainerWindowEventHandler",),) +# pattern matching for common English abbreviations +abbrev = re.compile("(?i)\\b([a-z]|acct|approx|appt|apr|apt|assoc|asst|aug|ave|avg|co(nt|rp)?|ct|dec|defn|dept|dr|eg|equip|esp|est|etc|excl|ext|feb|fri|ft|govt?|hrs?|ib(id)?|ie|in(c|t)?|jan|jr|jul|lit|ln|mar|max|mi(n|sc)?|mon|Mrs?|mun|natl?|neg?|no(rm|s|v)?|nw|obj|oct|org|orig|pl|pos|prev|proj|psi|qty|rd|rec|rel|reqd?|resp|rev|sat|sci|se(p|pt)?|spec(if)?|sq|sr|st|subj|sun|sw|temp|thurs|tot|tues|univ|var|vs)\\.") + + +punct = { "?": "question mark", "!": "exclamation mark", + ",": "comma", ":": "colon", ";": "semicolon", + "(": "opening parenthesis", ")": "closing parenthesis", + "[": "opening square bracket", "]": "closing square bracket", + u"\u201c": "opening quotation mark", u"\u201d": "closing quotation mark"} + + +aA = set(["eucalypti", "eucalyptus", "Eucharist", "Eucharistic", +"euchre", "euchred", "euchring", "Euclid", "euclidean", "Eudora", +"eugene", "Eugenia", "eugenic", "eugenically", "eugenicist", +"eugenicists", "eugenics", "Eugenio", "eukaryote", "Eula", "eulogies", +"eulogist", "eulogists", "eulogistic", "eulogized", "eulogizer", +"eulogizers", "eulogizing", "eulogy", "eulogies", "Eunice", "eunuch", +"eunuchs", "Euphemia", "euphemism", "euphemisms", "euphemist", +"euphemists", "euphemistic", "euphemistically", "euphonious", +"euphoniously", "euphonium", "euphony", "euphoria", "euphoric", +"Euphrates", "euphuism", "Eurasia", "Eurasian", "Eurasians", "eureka", +"eurekas", "eurhythmic", "eurhythmy", "Euridyce", "Euripides", "euripus", +"Euro", "Eurocentric", "Euroclydon", "Eurocommunism", "Eurocrat", +"eurodollar", "Eurodollar", "Eurodollars", "Euromarket", "Europa", +"Europe", "European", "Europeanisation", "Europeanise", "Europeanised", +"Europeanization", "Europeanize", "Europeanized", "Europeans", "europium", +"Eurovision", "Eustace", "Eustachian", "Eustacia", "euthanasia", +"Ewart", "ewe", "Ewell", "ewer", "ewers", "Ewing", "once", "one", +"oneness", "ones", "oneself", "onetime", "oneway", "oneyear", "u", +"U", "UART", "ubiquitous", "ubiquity", "Udale", "Udall", "UEFA", +"Uganda", "Ugandan", "ugric", "UK", "ukase", "Ukraine", "Ukrainian", +"Ukrainians", "ukulele", "Ula", "ululated", "ululation", "Ulysses", +"UN", "unanimity", "unanimous", "unanimously", "unary", "Unesco", +"UNESCO", "UNHCR", "uni", "unicameral", "unicameralism", "Unicef", +"UNICEF", "unicellular", "Unicode", "unicorn", "unicorns", "unicycle", +"unicyclist", "unicyclists", "unidimensional", "unidirectional", +"unidirectionality", "unifiable", "unification", "unified", "unifier", +"unifilar", "uniform", "uniformally", "uniformed", "uniformer", +"uniforming", "uniformisation", "uniformise", "uniformitarian", +"uniformitarianism", "uniformity", "uniformly", "uniformness", "uniforms", +"unify", "unifying", "unijugate", "unilateral", "unilateralisation", +"unilateralise", "unilateralism", "unilateralist", "unilaterally", +"unilinear", "unilingual", "uniliteral", "uniliteralism", "uniliteralist", +"unimodal", "union", "unionism", "unionist", "unionists", "unionisation", +"unionise", "unionised", "unionising", "unionization", "unionize", +"unionized", "unionizing", "unions", "unipolar", "uniprocessor", +"unique", "uniquely", "uniqueness", "uniquer", "Uniroyal", "unisex", +"unison", "Unisys", "unit", "Unitarian", "Unitarianism", "Unitarians", +"unitary", "unite", "united", "unitedly", "uniter", "unites", "uniting", +"unitize", "unitizing", "unitless", "units", "unity", "univ", "Univac", +"univalent", "univalve", "univariate", "universal", "universalisation", +"universalise", "universalised", "universaliser", "universalisers", +"universalising", "universalism", "universalist", "universalistic", +"universality", "universalisation", "universalization", "universalize", +"universalized", "universalizer", "universalizers", "universalizing", +"universally", "universalness", "universe", "universes", "universities", +"university", "univocal", "Unix", "uracil", "Urals", "uranium", "Uranus", +"uranyl", "urate", "urea", "uremia", "uremic", "ureter", "urethane", +"urethra", "urethral", "urethritis", "Urey", "Uri", "uric", "urinal", +"urinalysis", "urinary", "urinated", "urinating", "urination", "urine", +"urogenital", "urokinase", "urologist", "urologists", "urology", +"Uruguay", "Uruguayan", "Uruguayans", "US", "USA", "usable", "usage", +"usages", "use", "used", "useful", "usefulness", "usefully", "useless", +"uselessly", "uselessness", "Usenet", "user", "users", "uses", "using", +"usual", "usually", "usurer", "usurers", "usuress", "usurial", "usurious", +"usurp", "usurpation", "usurped", "usurper", "usurping", "usurps", +"usury", "Utah", "utensil", "utensils", "uterine", "uterus", "Utica", +"utilitarian", "utilitarianism", "utilities", "utility", "utilizable", +"utilization", "utilize", "utilized", "utilizes", "utilizing", "utopia", +"utopian", "utopians", "utopias", "Utrecht", "Uttoxeter", "uvula", +"uvular"]) + +aAN = set(["f", "F", "FBI", "FDA", "heir", "heirdom", "heired", +"heirer", "heiress", "heiring", "heirloom", "heirship", "honest", +"honester", "honestly", "honesty", "honor", "honorable", "honorableness", +"honorably", "honorarium", "honorary", "honored", "honorer", "honorific", +"honoring", "honors", "honour", "honourable", "honourableness", +"honourably", "honourarium", "honourary", "honoured", "honourer", +"honourific", "honouring", "Honours", "hors", "hour", "hourglass", "hourlong", +"hourly", "hours", "l", "L", "LCD", "m", "M", "MBA", "MP", "mpg", "mph", +"MRI", "MSc", "MTV", "n", "N", "NBA", "NBC", "NFL", "NGO", "NHL", "r", +"R", "s", "S", "SMS", "sos", "SOS", "SPF", "std", "STD", "SUV", "x", +"X", "XML"]) + +aB = set(["H", "hallucination", "haute", "hauteur", "herb", "herbaceous", "herbal", +"herbalist", "herbalism", "heroic", "hilarious", "historian", "historic", "historical", +"homage", "homophone", "horrendous", "hospitable", "horrific", "hotel", "hypothesis", "Xmas"]) + +def measurement(mnum, min, mout, mstr, decimal, remove): + if min == "ft" or min == "in" or min == "mi": + mnum = mnum.replace(" 1/2", ".5").replace(u" \xbd", ".5").replace(u"\xbd",".5") + m = calc("CONVERT_ADD", (float(eval(mnum.replace(remove, "").replace(decimal, ".").replace(u"\u2212", "-"))), min, mout)) + a = list(set([str(calc("ROUND", (m, 0)))[:-2], str(calc("ROUND", (m, 1))), str(calc("ROUND", (m, 2))), str(m)])) # remove duplicated rounded items + a.sort(lambda x, y: len(x) - len(y)) # sort by string length + return join(a, mstr + "\n").replace(".", decimal).replace("-", u"\u2212") + mstr + diff --git a/dictionaries/en/Linguistic.xcu b/dictionaries/en/Linguistic.xcu new file mode 100644 index 0000000..78fdd21 --- /dev/null +++ b/dictionaries/en/Linguistic.xcu @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<oor:component-data oor:name="Linguistic" + oor:package="org.openoffice.Office" xmlns:oor="http://openoffice.org/2001/registry" + xmlns:xs="http://www.w3.org/2001/XMLSchema"> + <node oor:name="ServiceManager"> + + <node oor:name="GrammarCheckers"> + <node oor:name="org.openoffice.comp.pyuno.Lightproof.en" + oor:op="fuse"> + <prop oor:name="Locales" oor:type="oor:string-list"> + <value>en-GB en-US en-PH en-ZA en-NA en-ZW en-AU en-CA en-IE en-IN en-BZ en-BS en-GH en-JM en-NZ en-TT</value> + </prop> + </node> + </node> + + </node> + +</oor:component-data> diff --git a/dictionaries/en/README_lightproof_en.txt b/dictionaries/en/README_lightproof_en.txt new file mode 100644 index 0000000..0e6f33b --- /dev/null +++ b/dictionaries/en/README_lightproof_en.txt @@ -0,0 +1,3 @@ +English sentence checker for LibreOffice +see http://launchpad.net/lightproof and http://numbertext.org/lightproof +2011 (c) László Németh, license: MPL 1.1 / GPLv3+ / LGPLv3+ diff --git a/dictionaries/en/description.xml b/dictionaries/en/description.xml index 0ace9f5..f34df5b 100644 --- a/dictionaries/en/description.xml +++ b/dictionaries/en/description.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <description xmlns="http://openoffice.org/extensions/description/2006" xmlns:d="http://openoffice.org/extensions/description/2006" xmlns:xlink="http://www.w3.org/1999/xlink"> - <version value="2010.03.16" /> + <version value="2011.12.05" /> <identifier value="org.openoffice.en.hunspell.dictionaries" /> <display-name> <name lang="en-US">English (Australia, Canada, South Africa, UK, USA) spelling dictionaries, hyphenation rules, and thesaurus</name> diff --git a/dictionaries/en/dialog/OptionsDialog.xcs b/dictionaries/en/dialog/OptionsDialog.xcs new file mode 100644 index 0000000..a5a9963 --- /dev/null +++ b/dictionaries/en/dialog/OptionsDialog.xcs @@ -0,0 +1,74 @@ +<?xml version="1.0" encoding="UTF-8"?> +<oor:component-schema xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +oor:name="Lightproof_en" oor:package="org.openoffice" xml:lang="en-US"> +<info> +<author></author> +<desc>Contains the options data used for the test extensions.</desc> +</info> +<templates> + + <group oor:name="en"> + <info> + <desc>The data for one leaf.</desc> + </info> +<prop oor:name="grammar" oor:type="xs:string"> + <value></value> +</prop> +<prop oor:name="cap" oor:type="xs:string"> + <value></value> +</prop> +<prop oor:name="dup" oor:type="xs:string"> + <value></value> +</prop> +<prop oor:name="pair" oor:type="xs:string"> + <value></value> +</prop> +<prop oor:name="spaces" oor:type="xs:string"> + <value></value> +</prop> +<prop oor:name="mdash" oor:type="xs:string"> + <value></value> +</prop> +<prop oor:name="quotation" oor:type="xs:string"> + <value></value> +</prop> +<prop oor:name="times" oor:type="xs:string"> + <value></value> +</prop> +<prop oor:name="spaces2" oor:type="xs:string"> + <value></value> +</prop> +<prop oor:name="ndash" oor:type="xs:string"> + <value></value> +</prop> +<prop oor:name="apostrophe" oor:type="xs:string"> + <value></value> +</prop> +<prop oor:name="ellipsis" oor:type="xs:string"> + <value></value> +</prop> +<prop oor:name="spaces3" oor:type="xs:string"> + <value></value> +</prop> +<prop oor:name="minus" oor:type="xs:string"> + <value></value> +</prop> +<prop oor:name="metric" oor:type="xs:string"> + <value></value> +</prop> +<prop oor:name="numsep" oor:type="xs:string"> + <value></value> +</prop> +<prop oor:name="nonmetric" oor:type="xs:string"> + <value></value> +</prop> + </group> + </templates> + <component> + <group oor:name="Leaves"> + + <node-ref oor:name="en" oor:node-type="en"/> + </group> + </component> + +</oor:component-schema> diff --git a/dictionaries/en/dialog/OptionsDialog.xcu b/dictionaries/en/dialog/OptionsDialog.xcu new file mode 100644 index 0000000..2ccb6db --- /dev/null +++ b/dictionaries/en/dialog/OptionsDialog.xcu @@ -0,0 +1,37 @@ +<?xml version='1.0' encoding='UTF-8'?> +<!DOCTYPE oor:component-data SYSTEM "../../../../component-update.dtd"> +<oor:component-data oor:name="OptionsDialog" oor:package="org.openoffice.Office" xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <node oor:name="Nodes"> + <node oor:name="org.openoffice.lightproof" oor:op="fuse"> + <prop oor:name="Label"> + <value xml:lang="en">Dictionaries</value> + <value xml:lang="hu">Szótárak</value> + </prop> + <node oor:name="Leaves"> + + <node oor:name="org.openoffice.lightproof.en" oor:op="fuse"> + + <prop oor:name="Id"> + <value>org.openoffice.en.hunspell.dictionaries</value> + </prop> + + <prop oor:name="Label"> + + <value xml:lang="en">English sentence checking</value> + + </prop> + + <prop oor:name="OptionsPage"> + <value>%origin%/en.xdl</value> + </prop> + + <prop oor:name="EventHandlerService"> + <value>org.openoffice.comp.pyuno.LightproofOptionsEventHandler.en</value> + </prop> + + </node> + + </node> + </node> + </node> +</oor:component-data> diff --git a/dictionaries/en/dialog/en.xdl b/dictionaries/en/dialog/en.xdl new file mode 100644 index 0000000..6e161bd --- /dev/null +++ b/dictionaries/en/dialog/en.xdl @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd"> +<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="en" dlg:left="101" dlg:top="52" dlg:width="196" dlg:height="72" dlg:closeable="true" dlg:moveable="true" dlg:withtitlebar="false"> + <dlg:bulletinboard> +<dlg:fixedline dlg:id="spelling" dlg:tab-index="0" dlg:left="5" dlg:top="5" dlg:width="240" dlg:height="10" dlg:value="&spelling"/> +<dlg:checkbox dlg:id="grammar" dlg:tab-index="1" dlg:left="10" dlg:top="15" dlg:width="60" dlg:height="10" dlg:value="&grammar" dlg:checked="false" dlg:help-text="&hlp_grammar"/> +<dlg:checkbox dlg:id="cap" dlg:tab-index="2" dlg:left="70" dlg:top="15" dlg:width="60" dlg:height="10" dlg:value="&cap" dlg:checked="false" dlg:help-text="&hlp_cap"/> +<dlg:checkbox dlg:id="dup" dlg:tab-index="3" dlg:left="130" dlg:top="15" dlg:width="60" dlg:height="10" dlg:value="&dup" dlg:checked="false" dlg:help-text="&hlp_dup"/> +<dlg:checkbox dlg:id="pair" dlg:tab-index="4" dlg:left="190" dlg:top="15" dlg:width="60" dlg:height="10" dlg:value="&pair" dlg:checked="false" dlg:help-text="&hlp_pair"/> +<dlg:fixedline dlg:id="punctuation" dlg:tab-index="6" dlg:left="5" dlg:top="25" dlg:width="240" dlg:height="10" dlg:value="&punctuation"/> +<dlg:checkbox dlg:id="spaces" dlg:tab-index="7" dlg:left="10" dlg:top="35" dlg:width="60" dlg:height="10" dlg:value="&spaces" dlg:checked="true" dlg:help-text="&hlp_spaces"/> +<dlg:checkbox dlg:id="mdash" dlg:tab-index="8" dlg:left="70" dlg:top="35" dlg:width="60" dlg:height="10" dlg:value="&mdash" dlg:checked="false" dlg:help-text="&hlp_mdash"/> +<dlg:checkbox dlg:id="quotation" dlg:tab-index="9" dlg:left="130" dlg:top="35" dlg:width="60" dlg:height="10" dlg:value="&quotation" dlg:checked="false" dlg:help-text="&hlp_quotation"/> +<dlg:checkbox dlg:id="times" dlg:tab-index="10" dlg:left="190" dlg:top="35" dlg:width="60" dlg:height="10" dlg:value="&times" dlg:checked="true" dlg:help-text="&hlp_times"/> +<dlg:checkbox dlg:id="spaces2" dlg:tab-index="12" dlg:left="10" dlg:top="45" dlg:width="60" dlg:height="10" dlg:value="&spaces2" dlg:checked="false" dlg:help-text="&hlp_spaces2"/> +<dlg:checkbox dlg:id="ndash" dlg:tab-index="13" dlg:left="70" dlg:top="45" dlg:width="60" dlg:height="10" dlg:value="&ndash" dlg:checked="false" dlg:help-text="&hlp_ndash"/> +<dlg:checkbox dlg:id="apostrophe" dlg:tab-index="14" dlg:left="130" dlg:top="45" dlg:width="60" dlg:height="10" dlg:value="&apostrophe" dlg:checked="false" dlg:help-text="&hlp_apostrophe"/> +<dlg:checkbox dlg:id="ellipsis" dlg:tab-index="15" dlg:left="190" dlg:top="45" dlg:width="60" dlg:height="10" dlg:value="&ellipsis" dlg:checked="false" dlg:help-text="&hlp_ellipsis"/> +<dlg:checkbox dlg:id="spaces3" dlg:tab-index="17" dlg:left="10" dlg:top="55" dlg:width="60" dlg:height="10" dlg:value="&spaces3" dlg:checked="false" dlg:help-text="&hlp_spaces3"/> +<dlg:checkbox dlg:id="minus" dlg:tab-index="18" dlg:left="70" dlg:top="55" dlg:width="60" dlg:height="10" dlg:value="&minus" dlg:checked="false" dlg:help-text="&hlp_minus"/> +<dlg:fixedline dlg:id="others" dlg:tab-index="20" dlg:left="5" dlg:top="65" dlg:width="240" dlg:height="10" dlg:value="&others"/> +<dlg:checkbox dlg:id="metric" dlg:tab-index="21" dlg:left="10" dlg:top="75" dlg:width="120" dlg:height="10" dlg:value="&metric" dlg:checked="false" dlg:help-text="&hlp_metric"/> +<dlg:checkbox dlg:id="numsep" dlg:tab-index="22" dlg:left="130" dlg:top="75" dlg:width="120" dlg:height="10" dlg:value="&numsep" dlg:checked="false" dlg:help-text="&hlp_numsep"/> +<dlg:checkbox dlg:id="nonmetric" dlg:tab-index="24" dlg:left="10" dlg:top="85" dlg:width="240" dlg:height="10" dlg:value="&nonmetric" dlg:checked="false" dlg:help-text="&hlp_nonmetric"/> +</dlg:bulletinboard> +</dlg:window> diff --git a/dictionaries/en/dialog/en_en_US.default b/dictionaries/en/dialog/en_en_US.default new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/dictionaries/en/dialog/en_en_US.default diff --git a/dictionaries/en/dialog/en_en_US.properties b/dictionaries/en/dialog/en_en_US.properties new file mode 100644 index 0000000..6bc215e --- /dev/null +++ b/dictionaries/en/dialog/en_en_US.properties @@ -0,0 +1,37 @@ +spelling=Grammar checking +hlp_grammar= Check more grammar errors. +grammar=Possible mistakes +hlp_cap= Check missing capitalization of sentences. +cap=Capitalization +hlp_dup= Check repeated words. +dup=Word duplication +hlp_pair= Check missing or extra parentheses and quotation marks. +pair=Parentheses +punctuation=Punctuation +hlp_spaces=Check single spaces between words. +spaces=Word spacing +hlp_mdash=Force unspaced em dash instead of spaced en dash. +mdash=Em dash +hlp_ndash=Force spaced en dash instead of unspaced em dash. +ndash=En dash +hlp_quotation=Check double quotation marks: "x" \u2192 \u201cx\u201d +quotation=Quotation marks +hlp_times=Check true multipliction sign: 5x5 \u2192 5\u00d75 +times=Multiplication sign +hlp_spaces2=Check single spaces between sentences. +spaces2=Sentence spacing +hlp_spaces3=Check more than two extra space characters between words and sentences. +spaces3=More spaces +hlp_minus=Change hyphen characters to real minus signs. +minus=Minus sign +hlp_apostrophe=Change typewriter apostrophe, single quotation marks and correct double primes. +apostrophe=Apostrophe +hlp_ellipsis=Change three dots with ellipsis. +ellipsis=Ellipsis +others=Others +hlp_metric=Measurement conversion from \u00b0F, mph, ft, in, lb, gal and miles. +metric=Convert to metric (\u00b0C, km/h, m, kg, l) +hlp_numsep=Common (1000000 \u2192 1,000,000) or ISO (1000000 \u2192 1 000 000). +numsep=Thousand separation of large numbers +hlp_nonmetric=Measurement conversion from \u00b0C; km/h; cm, m, km; kg; l. +nonmetric=Convert to non-metric (\u00b0F, mph, ft, lb, gal) diff --git a/dictionaries/en/makefile.mk b/dictionaries/en/makefile.mk index e2c7091..fc51ec1 100644 --- a/dictionaries/en/makefile.mk +++ b/dictionaries/en/makefile.mk @@ -77,7 +77,19 @@ COMPONENT_FILES= \ $(EXTENSIONDIR)$/README_hyph_en_US.txt \ $(EXTENSIONDIR)$/README.txt \ $(EXTENSIONDIR)$/th_en_US_v2.dat \ - $(EXTENSIONDIR)$/WordNet_license.txt + $(EXTENSIONDIR)$/WordNet_license.txt \ + $(EXTENSIONDIR)$/README_lightproof_en.txt \ + $(EXTENSIONDIR)$/Lightproof.py \ + $(EXTENSIONDIR)$/Linguistic.xcu \ + $(EXTENSIONDIR)$/pythonpath/lightproof_en.py \ + $(EXTENSIONDIR)$/pythonpath/lightproof_handler_en.py \ + $(EXTENSIONDIR)$/pythonpath/lightproof_impl_en.py \ + $(EXTENSIONDIR)$/pythonpath/lightproof_opts_en.py \ + $(EXTENSIONDIR)$/dialog/en_en_US.default \ + $(EXTENSIONDIR)$/dialog/en_en_US.properties \ + $(EXTENSIONDIR)$/dialog/en.xdl \ + $(EXTENSIONDIR)$/dialog/OptionsDialog.xcu \ + $(EXTENSIONDIR)$/dialog/OptionsDialog.xcs COMPONENT_CONFIGDEST=. COMPONENT_XCU= \ diff --git a/dictionaries/en/manifest.xml b/dictionaries/en/manifest.xml index f54199b..9a1b9c3 100644 --- a/dictionaries/en/manifest.xml +++ b/dictionaries/en/manifest.xml @@ -3,4 +3,13 @@ <manifest:manifest xmlns:manifest="http://openoffice.org/2001/manifest"> <manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data" manifest:full-path="dictionaries.xcu"/> + <manifest:file-entry manifest:full-path="dialog/OptionsDialog.xcs" + manifest:media-type="application/vnd.sun.star.configuration-schema" /> + <manifest:file-entry manifest:full-path="dialog/OptionsDialog.xcu" + manifest:media-type="application/vnd.sun.star.configuration-data" /> + <manifest:file-entry manifest:media-type="application/vnd.sun.star.uno-component;type=Python" + manifest:full-path="Lightproof.py"/> + <manifest:file-entry + manifest:media-type="application/vnd.sun.star.configuration-data" + manifest:full-path="Linguistic.xcu" /> </manifest:manifest> diff --git a/dictionaries/en/pythonpath/lightproof_en.py b/dictionaries/en/pythonpath/lightproof_en.py new file mode 100644 index 0000000..d0e48b5 --- /dev/null +++ b/dictionaries/en/pythonpath/lightproof_en.py @@ -0,0 +1 @@ +dic = [[u'(?u)(?<![-\\w\u2013.,\xad])and and(?![-\\w\u2013\xad])', u'and', u'Did you mean:', False], [u'(?u)(?<![-\\w\u2013.,\xad])or or(?![-\\w\u2013\xad])', u'or', u'Did you mean:', False], [u'(?u)(?<![-\\w\u2013.,\xad])for for(?![-\\w\u2013\xad])', u'for', u'Did you mean:', False], [u'(?u)(?<![-\\w\u2013.,\xad])the the(?![-\\w\u2013\xad])', u'the', u'Did you mean:', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Yy][Ii][Nn][Gg] [Aa][Nn][Dd] [Yy][Aa][Nn][Gg](?![-\\w\u2013\xad])', u'yin and yang', u'Did you mean:', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Ss][Cc][Oo][Tt] [Ff][Rr][Ee][Ee](?![-\\w\u2013\xad])', u'scot-free\\nscotfree', u'Did you mean:', False], [u"(?iu)(?<![-\\w\u2013.,\xad])([Yy][Oo][Uu][Rr]|[Hh][Ee][Rr]|[Oo][Uu][Rr]|[Tt][Hh][Ee][Ii][Rr])['\u2019][Ss](?![-\\w\u2013\xad])", u'\\1s', u'Possessive pronoun:', False], [u'(?u)(?<![-\\w\u2013.,\xad])(?P<a_1>[Aa])n(?P<_>[ ][\'\u2018"\u201c]?)(?P<vow_1>[aeiouAEIOU]\\w*)(?P<etc_1>[-\u2013\'\u2019\\w]*)(?![-\\w\u2013\xad])', u'\\g<a_1>\\g<_>\\g<vow_1>\\g<etc_1>', u'Did you mean:', u'm.group("vow_1") in aA or m.group("vow_1").lower() in aA'], [u'(?u)(?<![-\\w\u2013.,\xad])a(?P<_>[ ][\'\u2018"\u201c]?)(?P<vow_1>[aeiouAEIOU]\\w*)(?P<etc_1>[-\u2013\'\u2019\\w]*)(?![-\\w\u2013\xad])', u'an\\g<_>\\g<vow_1>\\g<etc_1>', u'Bad article?', u'(m.group("vow_1") <> m.group("vow_1").upper()) and not (m.group("vow_1") in aA or m.group("vow_1").lower() in aA) and spell(LOCALE,m.group("vow_1"))'], [u'(?u)(?<![-\\w\u2013.,\xad])a(?P<_>[ ][\'\u2018"\u201c]?)(?P<con_1>[bcdfghj-np-tv-zBCDFGHJ-NP-TV-Z]\\w*)(?P<etc_1>[-\u2013\'\u2019\\w]*)(?![-\\w\u2013\xad])', u'an\\g<_>\\g<con_1>\\g<etc_1>', u'Did you mean:', u'm.group("con_1") in aAN or m.group("con_1").lower() in aAN'], [u'(?u)(?<![-\\w\u2013.,\xad])(?P<a_1>[Aa])n(?P<_>[ ][\'\u2018"\u201c]?)(?P<con_1>[bcdfghj-np-tv-zBCDFGHJ-NP-TV-Z]\\w*)(?P<etc_1>[-\u2013\'\u2019\\w]*)(?![-\\w\u2013\xad])', u'\\g<a_1>\\g<_>\\g<con_1>\\g<etc_1>', u'Bad article?', u'(m.group("con_1") <> m.group("con_1").upper()) and not (m.group("con_1") in aA or m.group("con_1").lower() in aAN) and not m.group("con_1") in aB and spell(LOCALE,m.group("con_1"))'], [u'(?u)((?<=[!?.] )|^)A(?P<_>[ ][\'\u2018"\u201c]?)(?P<vow_1>[aeiouAEIOU]\\w*)(?P<etc_1>[-\u2013\'\u2019\\w]*)(?![-\\w\u2013\xad])', u'An\\g<_>\\g<vow_1>\\g<etc_1>', u'Bad article?', u'(m.group("vow_1") <> m.group("vow_1").upper()) and not (m.group("vow_1") in aA or m.group("vow_1").lower() in aA) and spell(LOCALE,m.group("vow_1"))'], [u'(?u)((?<=[!?.] )|^)A(?P<_>[ ][\'\u2018"\u201c]?)(?P<con_1>[bcdfghj-np-tv-zBCDFGHJ-NP-TV-Z]\\w*)(?P<etc_1>[-\u2013\'\u2019\\w]*)(?![-\\w\u2013\xad])', u'An\\g<_>\\g<con_1>\\g<etc_1>', u'Did you mean:', u'm.group("con_1") in aAN or m.group("con_1").lower() in aAN'], [u'(?u)(?<![-\\w\u2013.,\xad])a(?P<_>[ ][\'\u2018"\u201c]?)(?P<nvow_1>(8[0-9]*|1[18](000)*)(th)?)(?P<etc_1>[-\u2013\'\u2019\\w]*)(?![-\\w\u2013\xad])', u'an\\g<_>\\g<nvow_1>\\g<etc_1>', u'Did you mean:', False], [u'(?u)((?<=[!?.] )|^)A(?P<_>[ ][\'\u2018"\u201c]?)(?P<nvow_1>(8[0-9]*|1[18](000)*)(th)?)(?P<etc_1>[-\u2013\'\u2019\\w]*)(?![-\\w\u2013\xad])', u'An\\g<_>\\g<nvow_1>\\g<etc_1>', u'Did you mean:', False], [u'(?u)(?<![-\\w\u2013.,\xad])(?P<a_1>[Aa])n(?P<_>[ ][\'\u2018"\u201c]?)(?P<ncon_1>[0-79][0-9]*)(?P<etc_1>[-\u2013\'\u2019\\w]*)(?![-\\w\u2013\xad])', u'\\g<a_1>\\g<_>\\g<ncon_1>\\g<etc_1>', u'Did you mean:', u'not m.group("ncon_1")[:2] in ["11", "18"]'], [u'(?u)((?<=[!?.] )|^)(?P<low_1>[a-z]+)(?![-\\w\u2013\xad])', u'= m.group("low_1").capitalize()', u'Missing capitalization?', u're.match("[a-z].*[.?!] [A-Z]", TEXT) and not abbrev.search(TEXT)'], [u'(?u)((?<=[!?.] )|^)(?P<low_1>[a-z]+)(?![-\\w\u2013\xad])', u'= m.group("low_1").capitalize()', u'Missing capitalization?', u'option(LOCALE,"cap") and not abbrev.search(TEXT)'], [u'(?u) ([.?!,:;)\u201d\\[\\]])\\b', u'\\1 ', u'Reversed space and punctuation?', False], [u'(?u) +[.]', u'.', u'Extra space before the period?', u'LOCALE.Country == "US"'], [u'(?u) +[.]', u'.', u'Extra space before the full stop?', u'LOCALE.Country != "US"'], [u'(?u) +([?!,:;)\u201d\\]])', u'\\1', u'= "Extra space before the " + punct[m.group(1)] + "?"', False], [u'(?u)([([\u201c]) ', u'\\1', u'= "Extra space after the " + punct[m.group(1)] + "?"', False], [u'(?u)\\b(---?| --? )\\b', u' \u2013 \\n\u2014', u'En dash or em dash:', u'not option(LOCALE,"ndash") and not option(LOCALE,"mdash")'], [u'(?u)\\b(---?| --? |\u2014)\\b', u' \u2013 ', u'En dash:', u'option(LOCALE,"ndash") and not option(LOCALE,"mdash")'], [u'(?u)\\b(---?| --? | \u2013 )\\b', u'\u2014', u'Em dash:', u'option(LOCALE,"mdash")'], [u'(?u)(?P<number_1>\\d+([.]\\d+)?)(x| x )(?P<number_2>\\d+([.]\\d+)?)', u'\\g<number_1>\xd7\\g<number_2>', u'Multiplication sign.', u'option(LOCALE,"times")'], [u'(?u)(?P<Abc_1>[a-zA-Z]+)(?P<pun_1>[?!,:;%\u2030\u2031\u02da\u201c\u201d\u2018])(?P<Abc_2>[a-zA-Z]+)', u'\\g<Abc_1>\\g<pun_1> \\g<Abc_2>', u'Missing space?', False], [u'(?u)(?P<abc_1>[a-z]+)[.](?P<ABC_1>[A-Z]+)', u'\\g<abc_1>. \\g<ABC_1>', u'Missing space?', False], [u'(?u)[)]', u'', u'Extra closing parenthesis?', u'option(LOCALE,"pair") and not "(" in TEXT'], [u'(?u)[(]', u'', u'Extra opening parenthesis?', u'option(LOCALE,"pair") and TEXT[-1] in u"?!;:\u201d\u2019" and not ")" in TEXT'], [u'(?u)(?<![0-9])\u201d', u'', u'Extra quotation mark?', u'option(LOCALE,"pair") and not u"\u201c" in TEXT'], [u'(?u)(?<=[0-9])\u201d', u'\u2033\\n', u'Bad double prime or extra quotation mark?', u'option(LOCALE,"apostrophe") and not u"\u201c" in TEXT'], [u'(?u)\u201c', u'', u'Extra quotation mark?', u'option(LOCALE,"pair") and TEXT[-1] in u"?!;:\u201d\u2019" and not u"\u201d" in TEXT'], [u'(?u)[.]{3}', u'\u2026', u'Ellipsis.', u'option(LOCALE,"ellipsis")'], [u'(?u)\\b {2,3}(\\b|$)', u'\\1 ', u'Extra space.', u'option(LOCALE,"spaces")'], [u'(?u)(^|\\b|(?P<pun_1>[?!,:;%\u2030\u2031\u02da\u201c\u201d\u2018])|[.]) {2,3}(\\b|$)', u'\\1 ', u'Extra space.', u'option(LOCALE,"spaces2")'], [u'(?u)(^|\\b|(?P<pun_1>[?!,:;%\u2030\u2031\u02da\u201c\u201d\u2018])|[.]) {4,}(\\b|$)', u'\\1 \\n\t', u'Change multiple spaces to a single space or a tabulator:', u'option(LOCALE,"spaces3")'], [u'(?iu)[\\"\u201c\u201d\u201f\u201e]((?P<abc_1>[a-zA-Z]+)[^\\"\u201c\u201d\u201f\u201e]*)[\\"\u201c\u201f]', u'\u201c\\1\u201d', u'Quotation marks.', u'option(LOCALE,"quotation")'], [u'(?iu)[\\"\u201d\u201f\u201e]((?P<abc_1>[a-zA-Z]+)[^\\"\u201c\u201d\u201f\u201e]*)[\\"\u201c\u201d\u201f]', u'\u201c\\1\u201d', u'Quotation marks.', u'option(LOCALE,"quotation")'], [u"(?iu)'(?P<abc_1>[a-zA-Z]+)'", u'\u2018\\g<abc_1>\u2019', u'Quotation marks.', u'option(LOCALE,"apostrophe")'], [u'(?iu)[\\"\u201d\u201f\u201e]((?P<abc_1>[a-zA-Z]+)[^\\"\u201c\u201d\u201f\u201e]*)[\\"\u201c\u201d\u201f]', u'\u201c\\1\u201d', u'Quotation marks.', u'option(LOCALE,"apostrophe")'], [u"(?iu)(?P<Abc_1>[a-zA-ZA-Z]+)'(?P<w_1>\\w*)", u'\\g<Abc_1>\u2019\\g<w_1>', u'Replace typewriter apostrophe or quotation mark:', u'option(LOCALE,"apostrophe")'], [u"(?u)(?<= )'(?P<Abc_1>[a-zA-Z]+)", u'\u2018\\g<Abc_1>\\n\u2019\\g<Abc_1>', u'Replace typewriter quotation mark or apostrophe:', u'option(LOCALE,"apostrophe")'], [u"(?u)^'(?P<Abc_1>[a-zA-Z]+)", u'\u2018\\g<Abc_1>\\n\u2019\\g<Abc_1>', u'Replace typewriter quotation mark or apostrophe:', u'option(LOCALE,"apostrophe")'], [u'(?u)\\b(?P<d2_1>\\d\\d)(?P<d_1>\\d\\d\\d)\\b', u'\\g<d2_1>,\\g<d_1>\\n\\g<d2_1>\u202f\\g<d_1>', u'Use thousand separator (common or ISO).', u'option(LOCALE,"numsep")'], [u'(?u)\\b(?P<D_1>\\d{1,3})(?P<d_1>\\d\\d\\d)(?P<d_2>\\d\\d\\d)\\b', u'\\g<D_1>,\\g<d_1>,\\g<d_2>\\n\\g<D_1>\u202f\\g<d_1>\u202f\\g<d_2>', u'Use thousand separators (common or ISO).', u'option(LOCALE,"numsep")'], [u'(?u)\\b(?P<D_1>\\d{1,3})(?P<d_1>\\d\\d\\d)(?P<d_2>\\d\\d\\d)(?P<d_3>\\d\\d\\d)\\b', u'\\g<D_1>,\\g<d_1>,\\g<d_2>,\\g<d_3>\\n\\g<D_1>\u202f\\g<d_1>\u202f\\g<d_2>\u202f\\g<d_3>', u'Use thousand separators (common or ISO).', u'option(LOCALE,"numsep")'], [u'(?u)(?<![-\\w\u2013.,\xad])(?P<Abc_1>[a-zA-Z]+) \\1(?![-\\w\u2013\xad])', u'\\g<Abc_1>', u'Word duplication?', u'option(LOCALE,"dup")'], [u'(?u)(?<![-\\w\u2013.,\xad])([Tt])his (?P<abc_1>[a-z]+)(?![-\\w\u2013\xad])', u'\\1hese \\g<abc_1>\\n\\1his, \\g<abc_1>', u'Did you mean:', u'option(LOCALE,"grammar") and morph(LOCALE,m.group("abc_1"), "Ns")'], [u"(?u)(?<![-\\w\u2013.,\xad])with it['\u2019]s(?![-\\w\u2013\xad])", u'with its\\nwith, it\u2019s', u'Did you mean:', u'option(LOCALE,"grammar")'], [u"(?iu)(?<![-\\w\u2013.,\xad])([Ii][Tt]|[Ss]?[Hh][Ee]) [Dd][Oo][Nn]['\u2019][Tt](?![-\\w\u2013\xad])", u'\\1 doesn\u2019t', u'Did you mean:', u'option(LOCALE,"grammar")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*) (\xb0F|Fahrenheit)(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "F", "C", u" \xb0C", ".", ",")', u'Convert to Celsius:', u'option(LOCALE,"metric")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*) (\xb0C|Celsius)(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "C", "F", u" \xb0F", ".", ",")', u'Convert to Fahrenheit:', u'option(LOCALE,"nonmetric")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*(?: 1/2| ?\xbd)?) (ft|foot|feet)(?! [1-9])(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "ft", "cm", " cm", ".", ",") + "\\n" + measurement(m.group(1), "ft", "m", " m", ".", ",")', u'Convert to metric:', u'option(LOCALE,"metric")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*(?: 1/2| ?\xbd)?) ft[.]? ([0-9]+(?: 1/2| ?\xbd)?) in(?![-\\w\u2013\xad])', u'= measurement(m.group(1) + "*12+" + m.group(2), "in", "cm", " cm", ".", ",") + "\\n" + measurement(m.group(1) + "*12+" + m.group(2), "in", "m", " m", ".", ",")', u'Convert to metric:', u'option(LOCALE,"metric")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*(?: 1/2| ?\xbd)?) in(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "in", "mm", " mm", ".", ",") + "\\n" + measurement(m.group(1), "in", "cm", " cm", ".", ",") + "\\n" + measurement(m.group(1), "in", "m", " m", ".", ",")', u'Convert to metric:', u'option(LOCALE,"metric")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*) mm(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "mm", "in", " in", ".", ",")', u'Convert from metric:', u'option(LOCALE,"nonmetric")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*) cm(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "cm", "in", " in", ".", ",") + "\\n" + measurement(m.group(1), "cm", "ft", " ft", ".", ",")', u'Convert from metric:', u'option(LOCALE,"nonmetric")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*) (m|meter|metre)(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "m", "in", " in", ".", ",") + "\\n" + measurement(m.group(1), "m", "ft", " ft", ".", ",") + "\\n" + measurement(m.group(1), "m", "mi", " mi", ".", ",")', u'Convert from metric:', u'option(LOCALE,"nonmetric")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*(?: 1/2| ?\xbd)?) miles?(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "mi", "m", " m", ".", ",") + "\\n" + measurement(m.group(1), "mi", "km", " km", ".", ",")', u'Convert to metric:', u'option(LOCALE,"metric")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*) km(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "km", "mi", " mi", ".", ",")', u'Convert to miles:', u'option(LOCALE,"nonmetric")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:,\\d+)?) (yd|yards?)(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "yd", "m", " m", ".", ",")', u'Convert to metric:', u'option(LOCALE,"metric")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:,\\d+)?) (gal(lons?)?)(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "gal", "l", " l", ".", ",") + "\\n" + measurement(m.group(1), "uk_gal", "l", " l (in UK)", ".", ",")', u'Convert to metric:', u'option(LOCALE,"metric")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:,\\d+)?) (pint)(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "pt", "dl", " dl", ".", ",") + "\\n" + measurement(m.group(1), "uk_pt", "dl", " dl (in UK)", ".", ",") + "\\n" + measurement(m.group(1), "pt", "l", " l", ".", ",") + "\\n" + measurement(m.group(1), "uk_pt", "l", " l (in UK)", ".", ",")', u'Convert to metric:', u'option(LOCALE,"metric")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:,\\d+)?) (l|L|litres?|liters?)(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "l", "gal", " gal", ".", ",") + "\\n" + measurement(m.group(1), "l", "gal", " gal (in UK)", ".", ",")', u'Convert to gallons:', u'option(LOCALE,"nonmetric")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*) lbs?[.]?(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "lbm", "kg", " kg", ".", ",")', u'Convert to metric:', u'option(LOCALE,"metric")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*) kg[.]?(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "kg", "lbm", " lb", ".", ",")', u'Convert to pounds:', u'option(LOCALE,"nonmetric")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*) mph(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "mph", "km/h", " km/h", ".", ",")', u'Convert to km/hour:', u'option(LOCALE,"metric")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*) km/h(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "km/h", "mph", " mph", ".", ",")', u'Convert to miles/hour:', u'option(LOCALE,"nonmetric")']]
\ No newline at end of file diff --git a/dictionaries/en/pythonpath/lightproof_handler_en.py b/dictionaries/en/pythonpath/lightproof_handler_en.py new file mode 100644 index 0000000..e8c458a --- /dev/null +++ b/dictionaries/en/pythonpath/lightproof_handler_en.py @@ -0,0 +1,121 @@ +import uno +import unohelper + +from lightproof_opts_en import lopts +from lightproof_opts_en import lopts_default +from lightproof_impl_en import pkg + +from com.sun.star.lang import XServiceInfo +from com.sun.star.awt import XContainerWindowEventHandler + +# options +options = {} + +def load(context): + try: + l = LightproofOptionsEventHandler(context) + for i in lopts: + l.load(i) + except: + pass + +def get_option(page, option): + try: + return options[page + "," + option] + except: + try: + return options[page[:2] + "," + option] + except: + return 0 + +def set_option(page, option, value): + options[page + "," + option] = int(value) + +class LightproofOptionsEventHandler( unohelper.Base, XServiceInfo, XContainerWindowEventHandler ): + def __init__( self, ctx ): + p = uno.createUnoStruct( "com.sun.star.beans.PropertyValue" ) + p.Name = "nodepath" + p.Value = "/org.openoffice.Lightproof_%s/Leaves"%pkg + self.xConfig = ctx.ServiceManager.createInstance( 'com.sun.star.configuration.ConfigurationProvider' ) + self.node = self.xConfig.createInstanceWithArguments( 'com.sun.star.configuration.ConfigurationUpdateAccess', (p, ) ) + self.service = "org.openoffice.comp.pyuno.LightproofOptionsEventHandler." + pkg + self.ImplementationName = self.service + self.services = (self.service, ) + + # XContainerWindowEventHandler + def callHandlerMethod(self, aWindow, aEventObject, sMethod): + if sMethod == "external_event": + return self.handleExternalEvent(aWindow, aEventObject) + + def getSupportedMethodNames(self): + return ("external_event", ) + + def handleExternalEvent(self, aWindow, aEventObject): + sMethod = aEventObject + if sMethod == "ok": + self.saveData(aWindow) + elif sMethod == "back" or sMethod == "initialize": + self.loadData(aWindow) + return True + + def load(self, sWindowName): + child = self.getChild(sWindowName) + for i in lopts[sWindowName]: + sValue = child.getPropertyValue(i) + if sValue == '': + if i in lopts_default[sWindowName]: + sValue = 1 + else: + sValue = 0 + set_option(sWindowName, i, sValue) + + def loadData(self, aWindow): + sWindowName = self.getWindowName(aWindow) + if (sWindowName == None): + return + child = self.getChild(sWindowName) + for i in lopts[sWindowName]: + sValue = child.getPropertyValue(i) + if sValue == '': + if i in lopts_default[sWindowName]: + sValue = 1 + else: + sValue = 0 + xControl = aWindow.getControl(i) + xControl.State = sValue + set_option(sWindowName, i, sValue) + + def saveData(self, aWindow): + sWindowName = self.getWindowName(aWindow) + if (sWindowName == None): + return + child = self.getChild(sWindowName) + for i in lopts[sWindowName]: + xControl = aWindow.getControl(i) + sValue = xControl.State + child.setPropertyValue(i, str(sValue)) + set_option(sWindowName, i, sValue) + self.commitChanges() + + def getWindowName(self, aWindow): + sName = aWindow.getModel().Name + if sName in lopts: + return sName + return None + + # XServiceInfo method implementations + def getImplementationName (self): + return self.ImplementationName + + def supportsService(self, ServiceName): + return (ServiceName in self.services) + + def getSupportedServiceNames (self): + return self.services + + def getChild(self, name): + return self.node.getByName(name) + + def commitChanges(self): + self.node.commitChanges() + return True diff --git a/dictionaries/en/pythonpath/lightproof_impl_en.py b/dictionaries/en/pythonpath/lightproof_impl_en.py new file mode 100644 index 0000000..b09902b --- /dev/null +++ b/dictionaries/en/pythonpath/lightproof_impl_en.py @@ -0,0 +1,6 @@ +# -*- encoding: UTF-8 -*- +pkg = "en" +lang = "en" +locales = {'en-GB': ['en', 'GB', ''], 'en-ZW': ['en', 'ZW', ''], 'en-PH': ['en', 'PH', ''], 'en-TT': ['en', 'TT', ''], 'en-BZ': ['en', 'BZ', ''], 'en-NA': ['en', 'NA', ''], 'en-IE': ['en', 'IE', ''], 'en-GH': ['en', 'GH', ''], 'en-US': ['en', 'US', ''], 'en-IN': ['en', 'IN', ''], 'en-BS': ['en', 'BS', ''], 'en-JM': ['en', 'JM', ''], 'en-AU': ['en', 'AU', ''], 'en-NZ': ['en', 'NZ', ''], 'en-ZA': ['en', 'ZA', ''], 'en-CA': ['en', 'CA', '']} +version = "0.2" +author = "" diff --git a/dictionaries/en/pythonpath/lightproof_opts_en.py b/dictionaries/en/pythonpath/lightproof_opts_en.py new file mode 100644 index 0000000..aa43156 --- /dev/null +++ b/dictionaries/en/pythonpath/lightproof_opts_en.py @@ -0,0 +1,4 @@ +lopts = {} +lopts_default = {} +lopts['en'] = [u'grammar', u'cap', u'dup', u'pair', u'spaces', u'mdash', u'quotation', u'times', u'spaces2', u'ndash', u'apostrophe', u'ellipsis', u'spaces3', u'minus', u'metric', u'numsep', u'nonmetric'] +lopts_default['en'] = [u'spaces', u'times'] |