You can subscribe to this list here.
| 2007 |
Jan
(6) |
Feb
(19) |
Mar
(14) |
Apr
(32) |
May
(19) |
Jun
(15) |
Jul
(9) |
Aug
(34) |
Sep
|
Oct
(104) |
Nov
(10) |
Dec
(26) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2008 |
Jan
(26) |
Feb
(3) |
Mar
(163) |
Apr
(45) |
May
|
Jun
(1) |
Jul
(1) |
Aug
(1) |
Sep
(8) |
Oct
(1) |
Nov
(5) |
Dec
(43) |
| 2009 |
Jan
(11) |
Feb
(21) |
Mar
(23) |
Apr
(18) |
May
(68) |
Jun
(20) |
Jul
(6) |
Aug
(17) |
Sep
(29) |
Oct
(20) |
Nov
(61) |
Dec
(52) |
| 2010 |
Jan
(36) |
Feb
(25) |
Mar
(11) |
Apr
(3) |
May
(21) |
Jun
(1) |
Jul
(1) |
Aug
(25) |
Sep
(25) |
Oct
(19) |
Nov
(1) |
Dec
|
| 2011 |
Jan
(23) |
Feb
(34) |
Mar
(81) |
Apr
(5) |
May
(38) |
Jun
(14) |
Jul
(5) |
Aug
(87) |
Sep
(41) |
Oct
(49) |
Nov
(24) |
Dec
(25) |
| 2012 |
Jan
(23) |
Feb
(19) |
Mar
(37) |
Apr
(93) |
May
(17) |
Jun
(128) |
Jul
(119) |
Aug
(96) |
Sep
(32) |
Oct
(26) |
Nov
(52) |
Dec
(25) |
| 2013 |
Jan
(20) |
Feb
(92) |
Mar
(98) |
Apr
(6) |
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
|
| 2014 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
| 2015 |
Jan
|
Feb
(40) |
Mar
(12) |
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
(8) |
Oct
(1) |
Nov
(1) |
Dec
(3) |
| 2016 |
Jan
|
Feb
|
Mar
(5) |
Apr
(2) |
May
|
Jun
|
Jul
(9) |
Aug
(2) |
Sep
|
Oct
|
Nov
|
Dec
|
| 2017 |
Jan
(9) |
Feb
|
Mar
|
Apr
|
May
|
Jun
(5) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: <fri...@us...> - 2008-12-24 10:20:02
|
Revision: 9640
http://zaf.svn.sourceforge.net/zaf/?rev=9640&view=rev
Author: friedelwolff
Date: 2008-12-24 10:19:57 +0000 (Wed, 24 Dec 2008)
Log Message:
-----------
Move validation and member initialisation from the .add_... methods to each class' constructor
Modified Paths:
--------------
trunk/dict/zu/hunspell/hunspell_format.py
Modified: trunk/dict/zu/hunspell/hunspell_format.py
===================================================================
--- trunk/dict/zu/hunspell/hunspell_format.py 2008-12-24 07:15:56 UTC (rev 9639)
+++ trunk/dict/zu/hunspell/hunspell_format.py 2008-12-24 10:19:57 UTC (rev 9640)
@@ -82,9 +82,7 @@
def add_group(self, **kwargs):
"""Adds a new group to the file"""
- assert "flag" in kwargs
- new_group = AffixGroup()
- new_group.__dict__.update(kwargs)
+ new_group = AffixGroup(**kwargs)
self.groups.append(new_group)
return new_group
@@ -101,12 +99,15 @@
rules = []
"""A list with all the affixes in this group"""
- def __init__(self):
+ def __init__(self, **kwargs):
self.suffix = True
self.flag = ""
self.cross_product = True
self.rules = []
+ assert "flag" in kwargs
+ self.__dict__.update(kwargs)
+
def hunspell(self, options):
"""Output this affix class for the hunspell affix file"""
option = self.suffix and "SFX" or "PFX"
@@ -133,11 +134,7 @@
def add_rule(self, **kwargs):
"""Inserts a new rule in this affix class"""
- new_rule = Affix()
- new_rule.__dict__.update(kwargs)
- assert "group" not in kwargs
- assert "suffix" not in kwargs
- assert "prefix" not in kwargs
+ new_rule = Affix(**kwargs)
new_rule.group = self
self.rules.append(new_rule)
return new_rule
@@ -162,7 +159,7 @@
morphology = ""
"""Extra information about morphology"""
- def __init__(self):
+ def __init__(self, **kwargs):
self.group = None
self.strip = ""
self.affix = ""
@@ -172,6 +169,11 @@
self.circumfix = False
self.morphology = ""
+ assert "group" not in kwargs
+ assert "suffix" not in kwargs
+ assert "prefix" not in kwargs
+ self.__dict__.update(kwargs)
+
def _sort_key(self):
"""Return a key suitable for sorting"""
return (self.affix, self.strip, self.condition, self.morphology)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fri...@us...> - 2008-12-24 07:16:07
|
Revision: 9639
http://zaf.svn.sourceforge.net/zaf/?rev=9639&view=rev
Author: friedelwolff
Date: 2008-12-24 07:15:56 +0000 (Wed, 24 Dec 2008)
Log Message:
-----------
Handle imperatives as two cases to distinguish vowel verbs. This does not yet handle mono-syllabic verbs.
Modified Paths:
--------------
trunk/dict/zu/hunspell/zu_aff.py
Modified: trunk/dict/zu/hunspell/zu_aff.py
===================================================================
--- trunk/dict/zu/hunspell/zu_aff.py 2008-12-24 06:15:20 UTC (rev 9638)
+++ trunk/dict/zu/hunspell/zu_aff.py 2008-12-24 07:15:56 UTC (rev 9639)
@@ -380,7 +380,8 @@
infixes.add_rule(affix="ku", needaffix=True, morphology="OBJ_ku", continuation_classes=[main_subjects])#
infixes.add_rule(affix="saku", needaffix=True, continuation_classes=[main_subjects])
infixes.add_rule(affix="uku", morphology="INFINITIVE", continuation_classes=[locative])
- infixes.add_rule(affix="", morphology="IMPERATIVE", continuation_classes=[imperative])
+ infixes.add_rule(affix="", condition="[^aeiou]", morphology="IMPERATIVE", continuation_classes=[imperative])
+ infixes.add_rule(affix="y", condition="[aeiou]", morphology="IMPERATIVE", continuation_classes=[imperative])
past_indicative.add_rule(affix="e", strip="a", morphology="RECENT_PAST_IND_SHORT")
past_indicative.add_rule(affix="ile", strip="a", morphology="RECENT_PAST_IND_LONG")
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fri...@us...> - 2008-12-24 06:15:27
|
Revision: 9638
http://zaf.svn.sourceforge.net/zaf/?rev=9638&view=rev
Author: friedelwolff
Date: 2008-12-24 06:15:20 +0000 (Wed, 24 Dec 2008)
Log Message:
-----------
Indicative long form, present, positive with subject morpheme only
Modified Paths:
--------------
trunk/dict/zu/hunspell/zu_aff.py
Modified: trunk/dict/zu/hunspell/zu_aff.py
===================================================================
--- trunk/dict/zu/hunspell/zu_aff.py 2008-12-24 05:56:55 UTC (rev 9637)
+++ trunk/dict/zu/hunspell/zu_aff.py 2008-12-24 06:15:20 UTC (rev 9638)
@@ -242,8 +242,6 @@
#Mode specific ones:
for i in subject_morphemes:
- #Indicative:
- a_rules.extend(verb_rules(i+"ya"))
#TODO: be- and se- forms
#Negative future tenses:
@@ -366,14 +364,16 @@
# This group will contain rules for locative suffixes
for morpheme in subject_morphemes:
+ # Indicative short form, present, positive with subject morpheme only
main_subjects.add_rule(affix=morpheme, continuation_classes=[past_indicative, question])
+ # Duplicate it for the sake of the indicative long form, present, positive
+ simple_subjects.add_rule(affix=morpheme)
+ # Indicative, present, negative with subject morpheme only
main_subjects.add_rule(affix=add_semivowels("a"+morpheme), needaffix=True, circumfix=True, continuation_classes=[negative_indicative])
# We handle class 1 negative separately:
main_subjects.add_rule(affix="aka", needaffix=True, circumfix=True, continuation_classes=[negative_indicative])
- simple_subjects.add_rule(affix="ngi", morphology="1st_person_flag_s")
-
infixes.add_rule(affix="ya", needaffix=True, morphology="PRESENT_IND_LONG", continuation_classes=[simple_subjects])
infixes.add_rule(affix="yaku", needaffix=True, morphology="PRESENT_IND_LONG_OBJ_ku", continuation_classes=[simple_subjects])
infixes.add_rule(affix="sa", needaffix=True, morphology="STILL", continuation_classes=[main_subjects])
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fri...@us...> - 2008-12-24 05:56:57
|
Revision: 9637
http://zaf.svn.sourceforge.net/zaf/?rev=9637&view=rev
Author: friedelwolff
Date: 2008-12-24 05:56:55 +0000 (Wed, 24 Dec 2008)
Log Message:
-----------
Indicative, present, negative with subject morpheme only
Modified Paths:
--------------
trunk/dict/zu/hunspell/zu_aff.py
Modified: trunk/dict/zu/hunspell/zu_aff.py
===================================================================
--- trunk/dict/zu/hunspell/zu_aff.py 2008-12-24 05:55:34 UTC (rev 9636)
+++ trunk/dict/zu/hunspell/zu_aff.py 2008-12-24 05:56:55 UTC (rev 9637)
@@ -365,9 +365,11 @@
locative_sfx = aff.add_group(suffix=True, flag="M")
# This group will contain rules for locative suffixes
- #main_subjects.add_rule(affix="angi", morphology="1st_person_NEG", needaffix=True, circumfix=True, continuation_classes=[negative_indicative])
for morpheme in subject_morphemes:
main_subjects.add_rule(affix=morpheme, continuation_classes=[past_indicative, question])
+ main_subjects.add_rule(affix=add_semivowels("a"+morpheme), needaffix=True, circumfix=True, continuation_classes=[negative_indicative])
+ # We handle class 1 negative separately:
+ main_subjects.add_rule(affix="aka", needaffix=True, circumfix=True, continuation_classes=[negative_indicative])
simple_subjects.add_rule(affix="ngi", morphology="1st_person_flag_s")
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fri...@us...> - 2008-12-24 05:55:40
|
Revision: 9636
http://zaf.svn.sourceforge.net/zaf/?rev=9636&view=rev
Author: friedelwolff
Date: 2008-12-24 05:55:34 +0000 (Wed, 24 Dec 2008)
Log Message:
-----------
Indicative short form, present, positive with subject morpheme only
Modified Paths:
--------------
trunk/dict/zu/hunspell/zu_aff.py
Modified: trunk/dict/zu/hunspell/zu_aff.py
===================================================================
--- trunk/dict/zu/hunspell/zu_aff.py 2008-12-24 05:37:54 UTC (rev 9635)
+++ trunk/dict/zu/hunspell/zu_aff.py 2008-12-24 05:55:34 UTC (rev 9636)
@@ -35,10 +35,10 @@
from hunspell_format import *
import re
-subject_concords = ["ngi", "u", "si", "ni", "u", "ba", "i", "li", "a", "si", "zi", "lu", "bu", "ku"]
+subject_morphemes = ["ngi", "u", "si", "ni", "u", "ba", "i", "li", "a", "si", "zi", "lu", "bu", "ku"]
relative_prefixes = ["engi", "esi", "eni", "o", "aba", "e", "eli", "a", "esi", "ezi", "olu", "obu", "oku"]
situative_prefixes = ["e", "be"]
-concords = subject_concords + relative_prefixes + situative_prefixes
+concords = subject_morphemes + relative_prefixes + situative_prefixes
object_concords = ["ngi", "ku", "si", "ni", "m", "ba", "wu", "yi", "li", "wa", "zi", "lu", "bu"]
a_rules = [["a", "Y", "PFX"]]
@@ -206,8 +206,6 @@
################################################################################
for i in concords:
- A_rules.extend(verb_rules(i))
-
A_rules.extend(verb_rules(i+"nga"))
A_rules.extend(verb_rules(i+"sa"))
@@ -243,7 +241,7 @@
a_rules.extend(verb_rules(i+"sayoku"+j))
#Mode specific ones:
-for i in subject_concords:
+for i in subject_morphemes:
#Indicative:
a_rules.extend(verb_rules(i+"ya"))
#TODO: be- and se- forms
@@ -367,9 +365,11 @@
locative_sfx = aff.add_group(suffix=True, flag="M")
# This group will contain rules for locative suffixes
- main_subjects.add_rule(affix="ngi", morphology="1st_person", continuation_classes=[past_indicative, question])
- main_subjects.add_rule(affix="angi", morphology="1st_person_NEG", needaffix=True, circumfix=True, continuation_classes=[negative_indicative])
+ #main_subjects.add_rule(affix="angi", morphology="1st_person_NEG", needaffix=True, circumfix=True, continuation_classes=[negative_indicative])
+ for morpheme in subject_morphemes:
+ main_subjects.add_rule(affix=morpheme, continuation_classes=[past_indicative, question])
+
simple_subjects.add_rule(affix="ngi", morphology="1st_person_flag_s")
infixes.add_rule(affix="ya", needaffix=True, morphology="PRESENT_IND_LONG", continuation_classes=[simple_subjects])
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fri...@us...> - 2008-12-24 05:37:57
|
Revision: 9635
http://zaf.svn.sourceforge.net/zaf/?rev=9635&view=rev
Author: friedelwolff
Date: 2008-12-24 05:37:54 +0000 (Wed, 24 Dec 2008)
Log Message:
-----------
Comment out the current rules generation, and rater implement a plain skeleton that was tested manually with hunspell. This implements a few examples of several features, and hopefully these classes are close to what we'll need.
Modified Paths:
--------------
trunk/dict/zu/hunspell/zu_aff.py
Modified: trunk/dict/zu/hunspell/zu_aff.py
===================================================================
--- trunk/dict/zu/hunspell/zu_aff.py 2008-12-24 05:34:59 UTC (rev 9634)
+++ trunk/dict/zu/hunspell/zu_aff.py 2008-12-24 05:37:54 UTC (rev 9635)
@@ -328,11 +328,74 @@
aff.needaffix = "Y"
aff.complexprefixes = True
- for rule_set in rules:
- flag, cross_product, type = rule_set[0]
- group = aff.add_group(suffix=type=="SFX", cross_product=cross_product, flag=flag)
- for rule in rule_set[1:]:
- strip, affix, condition = rule
- group.add_rule(strip=strip, affix=affix, condition=condition)
+# for rule_set in rules:
+# flag, cross_product, type = rule_set[0]
+# group = aff.add_group(suffix=type=="SFX", cross_product=cross_product, flag=flag)
+# for rule in rule_set[1:]:
+# strip, affix, condition = rule
+# group.add_rule(strip=strip, affix=affix, condition=condition)
+ main_subjects = aff.add_group(suffix=False, flag="B")
+ # This group will contain all the major subject morphemes
+
+ simple_subjects = aff.add_group(suffix=False, flag="s")
+ # This group will contain plain positive indicate subject morphemes that
+ # can combine with -ya-. This will duplicate some contents of main_subjects.
+
+ infixes = aff.add_group(suffix=False, flag="C")
+ # This group will contain all prefix groups inserted between the subject
+ # morpheme and the root. Combinations will be compacted as one prefix.#
+ # These rules will in most cases be dependent on combining with other rules
+ # such as those in main_subjects
+
+ past_indicative = aff.add_group(suffix=True, flag="d")
+ # This group contains the suffixes for the past indicative (positive)
+
+ negative_indicative = aff.add_group(suffix=True, flag="e")
+ # This groups contains the suffixes for the negative indicative (future and
+ # present)
+
+ imperative = aff.add_group(suffix=True, flag="F")
+ # This contains suffixes for imperative mode
+
+ question = aff.add_group(suffix=True, flag="I")
+ # This group contains rules for forming question words
+
+ locative = aff.add_group(suffix=False, flag="N")
+ # This group will contain rules for locative prefixes
+
+ locative_sfx = aff.add_group(suffix=True, flag="M")
+ # This group will contain rules for locative suffixes
+
+ main_subjects.add_rule(affix="ngi", morphology="1st_person", continuation_classes=[past_indicative, question])
+ main_subjects.add_rule(affix="angi", morphology="1st_person_NEG", needaffix=True, circumfix=True, continuation_classes=[negative_indicative])
+
+ simple_subjects.add_rule(affix="ngi", morphology="1st_person_flag_s")
+
+ infixes.add_rule(affix="ya", needaffix=True, morphology="PRESENT_IND_LONG", continuation_classes=[simple_subjects])
+ infixes.add_rule(affix="yaku", needaffix=True, morphology="PRESENT_IND_LONG_OBJ_ku", continuation_classes=[simple_subjects])
+ infixes.add_rule(affix="sa", needaffix=True, morphology="STILL", continuation_classes=[main_subjects])
+ infixes.add_rule(affix="ku", needaffix=True, morphology="OBJ_ku", continuation_classes=[main_subjects])#
+ infixes.add_rule(affix="saku", needaffix=True, continuation_classes=[main_subjects])
+ infixes.add_rule(affix="uku", morphology="INFINITIVE", continuation_classes=[locative])
+ infixes.add_rule(affix="", morphology="IMPERATIVE", continuation_classes=[imperative])
+
+ past_indicative.add_rule(affix="e", strip="a", morphology="RECENT_PAST_IND_SHORT")
+ past_indicative.add_rule(affix="ile", strip="a", morphology="RECENT_PAST_IND_LONG")
+
+ negative_indicative.add_rule(affix="i", circumfix=True, strip="a", morphology="PRESENT_IND_NEGATIVE")
+ negative_indicative.add_rule(affix="nga", circumfix=True, morphology="PAST_IND_NEGATIVE")
+
+ imperative.add_rule(affix="ni", condition="a", morphology="IMPERATIVE_(PLURAL)")
+
+ question.add_rule(affix="ni", morphology="Q_what")
+ question.add_rule(affix="phi", morphology="Q_where")
+ question.add_rule(affix="elani", strip="a", condition="a", morphology="Q_PRESENT_why")
+ question.add_rule(affix="eleni", strip="a", condition="a", morphology="Q_PAST_why")
+
+ locative.add_rule(affix="e", strip="u", morphology="LOC_pfx", circumfix=True, continuation_classes=[locative_sfx])
+
+ locative_sfx.add_rule(affix="eni", strip="a", circumfix=True, morphology="LOC_sfx")
+
+
print aff.hunspell()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fri...@us...> - 2008-12-24 05:35:07
|
Revision: 9634
http://zaf.svn.sourceforge.net/zaf/?rev=9634&view=rev
Author: friedelwolff
Date: 2008-12-24 05:34:59 +0000 (Wed, 24 Dec 2008)
Log Message:
-----------
Test for some some typos in the argument dictionary. Use shorthand in remove_duplicates()
Modified Paths:
--------------
trunk/dict/zu/hunspell/hunspell_format.py
Modified: trunk/dict/zu/hunspell/hunspell_format.py
===================================================================
--- trunk/dict/zu/hunspell/hunspell_format.py 2008-12-23 19:24:42 UTC (rev 9633)
+++ trunk/dict/zu/hunspell/hunspell_format.py 2008-12-24 05:34:59 UTC (rev 9634)
@@ -123,7 +123,7 @@
rules = self.rules #XXX: not making a copy!
if not rules:
return rules
- self.rules.sort(key=lambda x: x._sort_key())
+ rules.sort(key=lambda x: x._sort_key())
trimmed = [rules[0]]
for i in rules[1:]:
@@ -136,6 +136,8 @@
new_rule = Affix()
new_rule.__dict__.update(kwargs)
assert "group" not in kwargs
+ assert "suffix" not in kwargs
+ assert "prefix" not in kwargs
new_rule.group = self
self.rules.append(new_rule)
return new_rule
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fri...@us...> - 2008-12-23 19:24:47
|
Revision: 9633
http://zaf.svn.sourceforge.net/zaf/?rev=9633&view=rev
Author: friedelwolff
Date: 2008-12-23 19:24:42 +0000 (Tue, 23 Dec 2008)
Log Message:
-----------
Expand some comments and docstrings. Slight whitespace cleanup.
Modified Paths:
--------------
trunk/dict/zu/hunspell/zu_aff.py
Modified: trunk/dict/zu/hunspell/zu_aff.py
===================================================================
--- trunk/dict/zu/hunspell/zu_aff.py 2008-12-23 18:39:15 UTC (rev 9632)
+++ trunk/dict/zu/hunspell/zu_aff.py 2008-12-23 19:24:42 UTC (rev 9633)
@@ -3,7 +3,7 @@
#
# Copyright 2008 Friedel Wolff
#
-# This file is part of Virtaal.
+# This file is part of the Zulu spell checker for Hunspell.
#
# 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
@@ -18,8 +18,20 @@
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
-"""This module creates an affix file for a Zulu spell checker."""
+"""This module creates an affix file for a Zulu spell checker.
+Done:
+ - frequency list (TRY)
+ - replacement map (REP)
+"""
+
+# This currently only handles morphology for verbs. More to follow later.
+
+#TODO: be- and se- verbs
+#TODO: monosyllabic verbs
+#TODO: statives
+#TODO: auxilary verbs
+
from hunspell_format import *
import re
@@ -114,11 +126,10 @@
return True
return False
-
def add_semivowels(prefix):
"""Handle the insertion of semi-vowels (y or w) between vowels."""
prefix = re.sub(r"([aeiou])a", r"\1wa", prefix)
- #TODO: maybe iya?
+ #TODO: maybe iya? (would this even be used with iya?)
prefix = re.sub(r"([aeiou])i", r"\1yi", prefix)
prefix = re.sub(r"([aeiou])u", r"\1wu", prefix)
return prefix
@@ -166,7 +177,7 @@
#example: i + enza = yenza
#
#otherwise, change 'i' to 'y'
- if len(prefix) > 1:
+ if len(prefix) > 1:
prefix = prefix[0:-1]
changed.append(["y", prefix, "y[^i]"])
#changed.append(["y", prefix, "y"])
@@ -188,11 +199,10 @@
if prefix[-1] == "e":
#TODO: situative e- and be- should be handled (entirely thrown away?).
#We can probably just generate them, and duplicate handling should take
- #care of them.
+ #care of them. Then we need to handle relatives with ending on e.
pass
return changed
-
################################################################################
for i in concords:
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fri...@us...> - 2008-12-23 18:39:19
|
Revision: 9632
http://zaf.svn.sourceforge.net/zaf/?rev=9632&view=rev
Author: friedelwolff
Date: 2008-12-23 18:39:15 +0000 (Tue, 23 Dec 2008)
Log Message:
-----------
Put existing rule sets into the hunspell_format API. Output of the .aff compares well with the old implentation, but proper removal of duplicates causes a (wanted) diff
Modified Paths:
--------------
trunk/dict/zu/hunspell/zu_aff.py
Modified: trunk/dict/zu/hunspell/zu_aff.py
===================================================================
--- trunk/dict/zu/hunspell/zu_aff.py 2008-12-23 17:40:17 UTC (rev 9631)
+++ trunk/dict/zu/hunspell/zu_aff.py 2008-12-23 18:39:15 UTC (rev 9632)
@@ -318,4 +318,11 @@
aff.needaffix = "Y"
aff.complexprefixes = True
+ for rule_set in rules:
+ flag, cross_product, type = rule_set[0]
+ group = aff.add_group(suffix=type=="SFX", cross_product=cross_product, flag=flag)
+ for rule in rule_set[1:]:
+ strip, affix, condition = rule
+ group.add_rule(strip=strip, affix=affix, condition=condition)
+
print aff.hunspell()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fri...@us...> - 2008-12-23 17:40:25
|
Revision: 9631
http://zaf.svn.sourceforge.net/zaf/?rev=9631&view=rev
Author: friedelwolff
Date: 2008-12-23 17:40:17 +0000 (Tue, 23 Dec 2008)
Log Message:
-----------
Output REP replacement rules before the affix rules. This makes diffing with the old implementation easier
Modified Paths:
--------------
trunk/dict/zu/hunspell/hunspell_format.py
Modified: trunk/dict/zu/hunspell/hunspell_format.py
===================================================================
--- trunk/dict/zu/hunspell/hunspell_format.py 2008-12-23 17:38:51 UTC (rev 9630)
+++ trunk/dict/zu/hunspell/hunspell_format.py 2008-12-23 17:40:17 UTC (rev 9631)
@@ -69,13 +69,15 @@
output.append("COMPLEXPREFIXES")
output.append("")
+ output.append("REP %d" % len(self.replace_list))
+ for rep in self.replace_list:
+ output.append("REP %s %s" % (rep[0], rep[1].replace(' ', '_')))
+ output.append("")
+
for group in self.groups:
output.append(group.hunspell(self))
output.append("")
- output.append("REP %d" % len(self.replace_list))
- for rep in self.replace_list:
- output.append("REP %s %s" % (rep[0], rep[1].replace(' ', '_')))
return "\n".join(output)
def add_group(self, **kwargs):
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fri...@us...> - 2008-12-23 17:39:02
|
Revision: 9630
http://zaf.svn.sourceforge.net/zaf/?rev=9630&view=rev
Author: friedelwolff
Date: 2008-12-23 17:38:51 +0000 (Tue, 23 Dec 2008)
Log Message:
-----------
Make morphology output optional for Affix - this way we avoid an unnecesary space if no morphologyinformation was specified
Modified Paths:
--------------
trunk/dict/zu/hunspell/hunspell_format.py
Modified: trunk/dict/zu/hunspell/hunspell_format.py
===================================================================
--- trunk/dict/zu/hunspell/hunspell_format.py 2008-12-23 17:37:30 UTC (rev 9629)
+++ trunk/dict/zu/hunspell/hunspell_format.py 2008-12-23 17:38:51 UTC (rev 9630)
@@ -195,8 +195,11 @@
continuation_classes += options.circumfix
if continuation_classes:
affix += "/" + continuation_classes
- return "%s %s %s %s %s %s" % \
- (option, flagname, strip, affix, condition, self.morphology)
+ output = "%s %s %s %s %s" % \
+ (option, flagname, strip, affix, condition)
+ if self.morphology:
+ output += " " + self.morphology
+ return output
if __name__ == '__main__':
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fri...@us...> - 2008-12-23 17:37:42
|
Revision: 9629
http://zaf.svn.sourceforge.net/zaf/?rev=9629&view=rev
Author: friedelwolff
Date: 2008-12-23 17:37:30 +0000 (Tue, 23 Dec 2008)
Log Message:
-----------
provide a sort key for Affix so that we don't need to override __cmp__. Sorting is very fast, and we actually remove all duplicates now. (There were thousands of duplicates left with the old implementation due to incorrect sorting.)
Modified Paths:
--------------
trunk/dict/zu/hunspell/hunspell_format.py
Modified: trunk/dict/zu/hunspell/hunspell_format.py
===================================================================
--- trunk/dict/zu/hunspell/hunspell_format.py 2008-12-23 15:23:29 UTC (rev 9628)
+++ trunk/dict/zu/hunspell/hunspell_format.py 2008-12-23 17:37:30 UTC (rev 9629)
@@ -118,19 +118,17 @@
def remove_duplicates(self):
"""Remove duplicate rules and return the trimmed rules list."""
- rules = self.rules[:]
+ rules = self.rules #XXX: not making a copy!
if not rules:
return rules
- rules.sort()
+ self.rules.sort(key=lambda x: x._sort_key())
- before = rules[0]
+ trimmed = [rules[0]]
for i in rules[1:]:
- if i == before:
- rules.remove(i)
- before = i
+ if i._sort_key() != trimmed[-1]._sort_key():
+ trimmed.append(i)
+ return trimmed
- return rules
-
def add_rule(self, **kwargs):
"""Inserts a new rule in this affix class"""
new_rule = Affix()
@@ -170,16 +168,13 @@
self.circumfix = False
self.morphology = ""
- def __cmp__(self, other):
- ret = 0
- for column in ("affix", "strip", "condition", "morphology"):
- a = getattr(self, column, "")
- b = getattr(other, column, "")
- ret = cmp(a, b)
- if ret:
- return ret
- return ret
+ def _sort_key(self):
+ """Return a key suitable for sorting"""
+ return (self.affix, self.strip, self.condition, self.morphology)
+# def __cmp__(self, other):
+# return cmp(self._sort_key(), other._sort_key())
+
def __str__(self):
return "(group=%s, strip=%s, affix=%s, condition=%s)" % \
(self.group.flag, self.strip, self.affix, self.condition)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fri...@us...> - 2008-12-23 15:23:37
|
Revision: 9628
http://zaf.svn.sourceforge.net/zaf/?rev=9628&view=rev
Author: friedelwolff
Date: 2008-12-23 15:23:29 +0000 (Tue, 23 Dec 2008)
Log Message:
-----------
Remove format handling. Provide basic hunspell skeleton using hunspell_format.py
Modified Paths:
--------------
trunk/dict/zu/hunspell/zu_aff.py
Modified: trunk/dict/zu/hunspell/zu_aff.py
===================================================================
--- trunk/dict/zu/hunspell/zu_aff.py 2008-12-23 15:16:09 UTC (rev 9627)
+++ trunk/dict/zu/hunspell/zu_aff.py 2008-12-23 15:23:29 UTC (rev 9628)
@@ -20,6 +20,7 @@
"""This module creates an affix file for a Zulu spell checker."""
+from hunspell_format import *
import re
subject_concords = ["ngi", "u", "si", "ni", "u", "ba", "i", "li", "a", "si", "zi", "lu", "bu", "ku"]
@@ -191,53 +192,7 @@
pass
return changed
-def quicksort(l):
- if l == []:
- return []
- return quicksort([x for x in l[1:] if x[1] < l[0][1]]) + \
- l[0:1] + \
- quicksort([x for x in l[1:] if x[1] >= l[0][1]])
-def remove_duplicates(rules):
- """Remove duplicate rules and return the trimmed rules list."""
- rules = [rules[0]] + quicksort(rules[1:])
-
- before = rules[0]
- for i in rules[1:]:
- if i == before:
- rules.remove(i)
- before = i
-
- return rules
-
-def output_myspell():
- """Output the generated rules in the format required for a myspell affix
- file."""
- print """# Automatically generated by zu_aff.py"
-SET ISO8859-1
-TRY aeinulkhosbgywmztdpfcqrvj-ASJMHxEKBGNPTRLDIZFOUWVYC
-
-"""
- print "REP %d" % len(replace_list)
- for rep in replace_list:
- print "REP %s %s" % (rep[0], rep[1].replace(' ', '_'))
- print
-
- for rule_set in rules:
- identifier = rule_set[0][0]
- rule_set[0][0] = ''
- affix_type = rule_set[0][2]
- rule_set[0][2] = str(len(rule_set)-1)
- #remember that the first element does not count
- for rule in rule_set:
- print affix_type + " " + identifier + ' ' + rule[0],
- if len(rule[1]) > 0:
- print rule[1],
- else:
- print "0",
- print rule[2]
- print
-
################################################################################
for i in concords:
@@ -352,7 +307,15 @@
V_rules.append(['a', 'waphi', '[^w]a'])
#The above can also be used with negatives, can't they? As in: Igama alipelwa.
-for i in range(len(rules)):
- rules[i] = remove_duplicates(rules[i])
-output_myspell()
+if __name__ == '__main__':
+ aff = HunspellOptions()
+ aff.header = "Automatically generated by zu_aff.py. For copyright information, see zu_aff.py"
+ aff.try_list = "aeinulkhosbgywmztdpfcqrvj-ASJMHxEKBGNPTRLDIZFOUWVYC"
+ aff.encoding = "ISO8859-1"
+ aff.replace_list = replace_list
+ aff.circumfix = "X"
+ aff.needaffix = "Y"
+ aff.complexprefixes = True
+
+ print aff.hunspell()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fri...@us...> - 2008-12-23 15:16:19
|
Revision: 9627
http://zaf.svn.sourceforge.net/zaf/?rev=9627&view=rev
Author: friedelwolff
Date: 2008-12-23 15:16:09 +0000 (Tue, 23 Dec 2008)
Log Message:
-----------
Some helper classes to work more easily with the hunspell .aff file format
Added Paths:
-----------
trunk/dict/zu/hunspell/hunspell_format.py
Added: trunk/dict/zu/hunspell/hunspell_format.py
===================================================================
--- trunk/dict/zu/hunspell/hunspell_format.py (rev 0)
+++ trunk/dict/zu/hunspell/hunspell_format.py 2008-12-23 15:16:09 UTC (rev 9627)
@@ -0,0 +1,223 @@
+#! /usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright 2008 Friedel Wolff
+#
+# This file is part of the Zulu Hunspell spell checker.
+#
+# 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, see <http://www.gnu.org/licenses/>.
+
+"""This module contains helper classes for making a Hunspell checker."""
+
+#TODO: use unicode and handle encoding properly
+#TODO: more hunspell file level options
+#TODO: extended hunspell affix classes
+#TODO: allow to optionally remove the morphological information
+
+class HunspellOptions(object):
+ """A complete affix file for hunspell"""
+
+ header = ""
+ """ The header at the top of the file (like copyright notice)"""
+ encoding = "utf-8"
+ """The encoding to use to write out the file"""
+ try_list = ""
+ """A string of characters sorted by frequency to use for replacements"""
+ groups = []
+ """A list of all the affix groups"""
+ replace_list = []
+ """A list of suggestions for replacement"""
+ circumfix = ""
+ """The flag name to mark circumfixes with"""
+ needaffix = ""
+ """The flag name to indicate affix dependency requirement"""
+ complexprefixes = False
+ """Whether to enable complex prefix support"""
+
+ def __init__(self):
+ self.header = ""
+ self.encoding = "utf-8"
+ self.try_list = ""
+ self.groups = []
+ self.replace_list = []
+ self.circumfix = ""
+ self.needaffix = ""
+ self.complexprefixes = False
+
+ def hunspell(self):
+ """Output the whole affix file for Hunspell"""
+ output = ["# " + self.header]
+ output.append("SET %s" % self.encoding)
+ if self.try_list:
+ output.append("TRY " + self.try_list)
+ if self.circumfix:
+ output.append("CIRCUMFIX %s" % self.circumfix)
+ if self.needaffix:
+ output.append("NEEDAFFIX %s" % self.needaffix)
+ if self.complexprefixes:
+ output.append("COMPLEXPREFIXES")
+ output.append("")
+
+ for group in self.groups:
+ output.append(group.hunspell(self))
+ output.append("")
+
+ output.append("REP %d" % len(self.replace_list))
+ for rep in self.replace_list:
+ output.append("REP %s %s" % (rep[0], rep[1].replace(' ', '_')))
+ return "\n".join(output)
+
+ def add_group(self, **kwargs):
+ """Adds a new group to the file"""
+ assert "flag" in kwargs
+ new_group = AffixGroup()
+ new_group.__dict__.update(kwargs)
+ self.groups.append(new_group)
+ return new_group
+
+
+class AffixGroup(object):
+ """An affix class containing multiple rules"""
+
+ suffix = True
+ """True if this is a suffix, False if this is a prefix"""
+ flag = ""
+ """The flag name"""
+ cross_product = True
+ """Whether to allow combining prefixes and suffixes"""
+ rules = []
+ """A list with all the affixes in this group"""
+
+ def __init__(self):
+ self.suffix = True
+ self.flag = ""
+ self.cross_product = True
+ self.rules = []
+
+ def hunspell(self, options):
+ """Output this affix class for the hunspell affix file"""
+ option = self.suffix and "SFX" or "PFX"
+ assert self.flag
+ rules = self.remove_duplicates()
+ cross_product = self.cross_product and "Y" or "N"
+ output = ["%s %s %s %d" % (option, self.flag, cross_product, len(rules))]
+ for rule in rules:
+ output.append(rule.hunspell(options))
+ return "\n".join(output)
+
+ def remove_duplicates(self):
+ """Remove duplicate rules and return the trimmed rules list."""
+ rules = self.rules[:]
+ if not rules:
+ return rules
+ rules.sort()
+
+ before = rules[0]
+ for i in rules[1:]:
+ if i == before:
+ rules.remove(i)
+ before = i
+
+ return rules
+
+ def add_rule(self, **kwargs):
+ """Inserts a new rule in this affix class"""
+ new_rule = Affix()
+ new_rule.__dict__.update(kwargs)
+ assert "group" not in kwargs
+ new_rule.group = self
+ self.rules.append(new_rule)
+ return new_rule
+
+class Affix(object):
+ """A single affix rule with all its options"""
+
+ group = None
+ """The AffixGroup that this affix belongs to"""
+ strip = ""
+ """The stripping characters from beginning (at prefix rules) or end (at suffix rules) of the word"""
+ affix = ""
+ """The appended / prepended characters"""
+ condition = ""
+ """The simplified regex to indicate when this affix applies"""
+ continuation_classes = []
+ """list of AffixGroups with which this affix can combine"""
+ needaffix = False
+ """Whether combination with another affix is needed"""
+ circumfix = False
+ """Whether to allow affixation as a circumfix"""
+ morphology = ""
+ """Extra information about morphology"""
+
+ def __init__(self):
+ self.group = None
+ self.strip = ""
+ self.affix = ""
+ self.condition = ""
+ self.continuation_classes = []
+ self.needaffix = False
+ self.circumfix = False
+ self.morphology = ""
+
+ def __cmp__(self, other):
+ ret = 0
+ for column in ("affix", "strip", "condition", "morphology"):
+ a = getattr(self, column, "")
+ b = getattr(other, column, "")
+ ret = cmp(a, b)
+ if ret:
+ return ret
+ return ret
+
+ def __str__(self):
+ return "(group=%s, strip=%s, affix=%s, condition=%s)" % \
+ (self.group.flag, self.strip, self.affix, self.condition)
+
+ def hunspell(self, options):
+ """Output this rule as a single line for the Hunspell affix file"""
+ option = self.group.suffix and "SFX" or "PFX"
+ flagname = self.group.flag
+ strip = self.strip or "0"
+ affix = self.affix or "0"
+ condition = self.condition or "."
+ continuation_classes = "".join([group.flag for group in self.continuation_classes])
+ if self.needaffix:
+ assert options.needaffix
+ continuation_classes += options.needaffix
+ if self.circumfix:
+ assert options.circumfix
+ continuation_classes += options.circumfix
+ if continuation_classes:
+ affix += "/" + continuation_classes
+ return "%s %s %s %s %s %s" % \
+ (option, flagname, strip, affix, condition, self.morphology)
+
+
+if __name__ == '__main__':
+ # This is mainly meant as an example and a simple test
+ aff = HunspellOptions()
+ aff.header = "Comment at the top"
+ aff.try_list = "abc"
+ aff.replace_list = [["coow", "cow"], ["phuliezeman", "please man"]]
+
+ group_a = aff.add_group(flag="A")
+ group_a.add_rule(affix="s")
+ group_a.add_rule(affix="ces", condition="ix", strip="x", morphology="funny_plural")
+ group_a.add_rule(affix="s")
+
+ group_b = aff.add_group(flag="B")
+ rule = group_b.add_rule(continuation_classes=[group_a])
+
+ print aff.hunspell()
+
Property changes on: trunk/dict/zu/hunspell/hunspell_format.py
___________________________________________________________________
Added: svn:executable
+ *
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fri...@us...> - 2008-12-23 15:07:07
|
Revision: 9626
http://zaf.svn.sourceforge.net/zaf/?rev=9626&view=rev
Author: friedelwolff
Date: 2008-12-23 15:07:03 +0000 (Tue, 23 Dec 2008)
Log Message:
-----------
Fork myspell implementation to start working on hunspell specific things
Added Paths:
-----------
trunk/dict/zu/hunspell/
trunk/dict/zu/hunspell/zu_aff.py
Copied: trunk/dict/zu/hunspell/zu_aff.py (from rev 9624, trunk/dict/zu/myspell/zu_aff.py)
===================================================================
--- trunk/dict/zu/hunspell/zu_aff.py (rev 0)
+++ trunk/dict/zu/hunspell/zu_aff.py 2008-12-23 15:07:03 UTC (rev 9626)
@@ -0,0 +1,358 @@
+#! /usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright 2008 Friedel Wolff
+#
+# This file is part of Virtaal.
+#
+# 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, see <http://www.gnu.org/licenses/>.
+
+"""This module creates an affix file for a Zulu spell checker."""
+
+import re
+
+subject_concords = ["ngi", "u", "si", "ni", "u", "ba", "i", "li", "a", "si", "zi", "lu", "bu", "ku"]
+relative_prefixes = ["engi", "esi", "eni", "o", "aba", "e", "eli", "a", "esi", "ezi", "olu", "obu", "oku"]
+situative_prefixes = ["e", "be"]
+concords = subject_concords + relative_prefixes + situative_prefixes
+object_concords = ["ngi", "ku", "si", "ni", "m", "ba", "wu", "yi", "li", "wa", "zi", "lu", "bu"]
+
+a_rules = [["a", "Y", "PFX"]]
+"""prefixes only applicable to verbs ending on -a"""
+A_rules = [["A", "Y", "PFX"]]
+"""prefixes for almost all positive verbs and future negatives"""
+V_rules = [["V", "Y", "SFX"]]
+"""common suffixes for verbs ending on -a"""
+rules = [a_rules, A_rules, V_rules]
+"""all rules"""
+
+#These regular expressions will be used to do search-replace palatalisation. It
+#is defined outside the function so that it only needs to be done once. It is
+#crucial that the palatalisations starting on 'm' be listed first. Otherwise
+#the rules for the m-less forms will fire first. Hash signs indicate the more
+#common ones.
+
+palatalisation_list = [
+ ["mbw", "njw"],#
+ ["mpw", "ntshw"],
+ ["mw", "nyw"], #
+ ["bw", "tshw"],
+ ["bhw", "jw"],
+ ["phw", "shw"],#
+]
+
+palatalisation_re_list = []
+for palatalisation in palatalisation_list:
+ palatalisation_re_list.append([re.compile(palatalisation[0]), palatalisation[1]])
+
+def palatalise(string):
+ """Perform palatalisation substitutions on the given string."""
+ new_string = string
+ for palatalisation_re in palatalisation_re_list:
+ new_string = palatalisation_re[0].sub(palatalisation_re[1], new_string)
+ return new_string
+
+replace_list = [
+ ["bh", "b"],
+ ["b", "bh"],
+ ["ch", "c"],
+ ["c", "ch"],
+ ["dh", "d"],
+ # dh doesn't occur
+ ["hh", "h"],
+ ["h", "hh"],
+ ["kh", "k"],
+ ["k", "kh"],
+ ["k", "g"],
+ ["g", "k"],
+ ["mg", "mng"],
+ ["g", "k"],
+ ["ph", "p"],
+ ["p", "ph"],
+ ["qh", "q"],
+ ["q", "qh"],
+ ["th", "t"],
+ ["t", "th"],
+ ["xh", "x"],
+ ["x", "xh"],
+]
+"""These are suggestions for replacement."""
+
+replace_list.extend(palatalisation_list)
+
+def illegal_reflexive(subject, object):
+ """Returns whether using the given concords together would result in an
+ illegal reflexive
+
+ Although the object concord will always change to 'zi' if reflexivity
+ is intended, most combinations are actually valid for non-reflexive
+ usage. Example:
+ Umama uyamsiza (ubaba).
+ Both subject and object are class 1A nouns, but since since they refer
+ to different entities, the word is valid. Reflexives are not handled
+ explicitly anyware since they are undistinguishable from the case where
+ the object is in the 'zi' class. There are therefore actually only two
+ illegal cases.
+ """
+ if subject != object:
+ return False
+ if subject == "ngi":
+ return True
+ if subject == "ni":
+ return True
+ return False
+
+
+def add_semivowels(prefix):
+ """Handle the insertion of semi-vowels (y or w) between vowels."""
+ prefix = re.sub(r"([aeiou])a", r"\1wa", prefix)
+ #TODO: maybe iya?
+ prefix = re.sub(r"([aeiou])i", r"\1yi", prefix)
+ prefix = re.sub(r"([aeiou])u", r"\1wu", prefix)
+ return prefix
+
+def contract(prefix):
+ """Contract two vowels into a single vowel."""
+ prefix = re.sub(r"[aeiou]([aeiou])", r"\1", prefix)
+ return prefix
+
+def verb_rules(prefix):
+ """Generate the necessary rules to prepend the given prefix to a verb
+
+ It receives a string with the already built (complete) prefix and
+ returns a list of lists, with each list presenting one affix rule. The
+ consequence of vowel verbs are taken into account here, and no users of
+ this function need to take vowel verbs into account.
+ """
+ changed = []
+ #normal verb starting on consonant:
+ changed.append(["0", prefix, "[^y]"])
+ #monosyllabic verbs: in the dictionary in imperative form, e.g. yidla
+ changed.append(["yi", prefix, "yi"])
+
+ #now for the complicated part: verbs starting on vowels. (e.g. yakha)
+ if prefix[-1] == 'u':
+ #the 'u' always needs to be removed, we probably need a 'w'
+ prefix = prefix[0:-1]
+ #if the original prefix ended on 'wu', we don't want to add
+ #another 'w' as this will result in 'ww'
+ if len(prefix) > 0 and prefix[-1] == 'w':
+ changed.append(["y", prefix, "y[ae]"])
+ else:
+ changed.append(["y", prefix + 'w', "y[ae]"])
+ if len(prefix) == 0:
+ #if prefix == 'u' before 'o' we change to 'w' as above
+ changed.append(["y", 'w', "yo"])
+ else:
+ #for a prefix ending on 'u' before 'o' we simply remove the 'u'
+ #without adding 'w', e.g. lu + osa -> losa
+ changed.append(["y", prefix, "yo"])
+ return changed
+ if prefix[-1] == 'i':
+ #if the complete prefix is 'i' before a vowel verb, we can
+ #ignore it, as it is simply the same as the imperative form
+ #example: i + enza = yenza
+ #
+ #otherwise, change 'i' to 'y'
+ if len(prefix) > 1:
+ prefix = prefix[0:-1]
+ changed.append(["y", prefix, "y[^i]"])
+ #changed.append(["y", prefix, "y"])
+ #TODO: this just made the "yi", prefix "yi" rule (above) unnecessary
+ return changed
+ if prefix[-1] == 'a':
+ prefix = prefix[0:-1]
+ changed.append(["y", prefix, "y[^i]"])
+ #changed.append(["y", prefix, "y"])
+ #TODO: this just made the "yi", prefix "yi" rule (above) unnecessary
+ return changed
+ if prefix == "o":
+ #Although other prefixes can end on 'o' ('zo' or 'yo'), these
+ #are only used with consonant verbs and not with monosyllabics.
+ #TODO: verify if others are possible
+ #TODO: verify if 'zo' and 'yo' are only used before consonants
+
+ return changed
+ if prefix[-1] == "e":
+ #TODO: situative e- and be- should be handled (entirely thrown away?).
+ #We can probably just generate them, and duplicate handling should take
+ #care of them.
+ pass
+ return changed
+
+def quicksort(l):
+ if l == []:
+ return []
+ return quicksort([x for x in l[1:] if x[1] < l[0][1]]) + \
+ l[0:1] + \
+ quicksort([x for x in l[1:] if x[1] >= l[0][1]])
+
+def remove_duplicates(rules):
+ """Remove duplicate rules and return the trimmed rules list."""
+ rules = [rules[0]] + quicksort(rules[1:])
+
+ before = rules[0]
+ for i in rules[1:]:
+ if i == before:
+ rules.remove(i)
+ before = i
+
+ return rules
+
+def output_myspell():
+ """Output the generated rules in the format required for a myspell affix
+ file."""
+ print """# Automatically generated by zu_aff.py"
+SET ISO8859-1
+TRY aeinulkhosbgywmztdpfcqrvj-ASJMHxEKBGNPTRLDIZFOUWVYC
+
+"""
+ print "REP %d" % len(replace_list)
+ for rep in replace_list:
+ print "REP %s %s" % (rep[0], rep[1].replace(' ', '_'))
+ print
+
+ for rule_set in rules:
+ identifier = rule_set[0][0]
+ rule_set[0][0] = ''
+ affix_type = rule_set[0][2]
+ rule_set[0][2] = str(len(rule_set)-1)
+ #remember that the first element does not count
+ for rule in rule_set:
+ print affix_type + " " + identifier + ' ' + rule[0],
+ if len(rule[1]) > 0:
+ print rule[1],
+ else:
+ print "0",
+ print rule[2]
+ print
+
+################################################################################
+
+for i in concords:
+ A_rules.extend(verb_rules(i))
+
+ A_rules.extend(verb_rules(i+"nga"))
+ A_rules.extend(verb_rules(i+"sa"))
+
+ #Future tenses:
+ a_rules.extend(verb_rules(i+"zo"))
+ a_rules.extend(verb_rules(i+"zoku"))
+ a_rules.extend(verb_rules(i+"yo"))
+ a_rules.extend(verb_rules(i+"yoku"))
+
+ #-sa- + future tenses:
+ a_rules.extend(verb_rules(i+"sazo"))
+ a_rules.extend(verb_rules(i+"sazoku"))
+ a_rules.extend(verb_rules(i+"sayo"))
+ a_rules.extend(verb_rules(i+"sayoku"))
+
+ for j in object_concords:
+ if illegal_reflexive(i, j):
+ continue
+ A_rules.extend(verb_rules(i+j))
+ A_rules.extend(verb_rules(i+"nga"+j)) #confusable with negatives
+ A_rules.extend(verb_rules(i+"sa"+j))
+
+ #Future tenses:
+ a_rules.extend(verb_rules(i+"zo"+j))
+ a_rules.extend(verb_rules(i+"zoku"+j))
+ a_rules.extend(verb_rules(i+"yo"+j))
+ a_rules.extend(verb_rules(i+"yoku"+j))
+
+ #-sa- + future tenses:
+ a_rules.extend(verb_rules(i+"sazo"+j))
+ a_rules.extend(verb_rules(i+"sazoku"+j))
+ a_rules.extend(verb_rules(i+"sayo"+j))
+ a_rules.extend(verb_rules(i+"sayoku"+j))
+
+#Mode specific ones:
+for i in subject_concords:
+ #Indicative:
+ a_rules.extend(verb_rules(i+"ya"))
+ #TODO: be- and se- forms
+
+ #Negative future tenses:
+ a_rules.extend(verb_rules(add_semivowels("a"+ i) +"zu"))
+ a_rules.extend(verb_rules(add_semivowels("a"+ i) +"zuku"))
+ a_rules.extend(verb_rules(add_semivowels("a"+ i) +"yu"))
+ a_rules.extend(verb_rules(add_semivowels("a"+ i) +"yuku"))
+
+ #-ka- + negative future tenses:
+ a_rules.extend(verb_rules(add_semivowels("a"+ i) +"kazu"))
+ a_rules.extend(verb_rules(add_semivowels("a"+ i) +"kazuku"))
+ a_rules.extend(verb_rules(add_semivowels("a"+ i) +"kayu"))
+ a_rules.extend(verb_rules(add_semivowels("a"+ i) +"kayuku"))
+
+ #Remote past tense:
+ a_rules.extend(verb_rules(contract(i+"a")))
+
+ for j in object_concords:
+ if illegal_reflexive(i, j):
+ continue
+ #Indicative:
+ a_rules.extend(verb_rules(i + "ya" + j))
+ #Infinitive
+ a_rules.extend(verb_rules("uku" + j))
+ a_rules.extend(verb_rules("uku" + j))
+ a_rules.extend(verb_rules("uku" + j))
+ a_rules.extend(verb_rules("uku" + j))
+
+ #Negative future tenses:
+ a_rules.extend(verb_rules(add_semivowels("a"+ i) +"zu"+j))
+ a_rules.extend(verb_rules(add_semivowels("a"+ i) +"zuku"+j))
+ a_rules.extend(verb_rules(add_semivowels("a"+ i) +"yu"+j))
+ a_rules.extend(verb_rules(add_semivowels("a"+ i) +"yuku"+j))
+
+ #-ka- + negative future tenses:
+ a_rules.extend(verb_rules(add_semivowels("a"+ i) +"kazu"+j))
+ a_rules.extend(verb_rules(add_semivowels("a"+ i) +"kazuku"+j))
+ a_rules.extend(verb_rules(add_semivowels("a"+ i) +"kayu"+j))
+ a_rules.extend(verb_rules(add_semivowels("a"+ i) +"kayuku"+j))
+
+ #TODO: be- and se- forms
+
+ #Remote past tense:
+ a_rules.extend(verb_rules(contract(i+"a")+j))
+
+
+a_rules.extend(verb_rules("loku"))
+a_rules.extend(verb_rules("ngoku"))
+a_rules.extend(verb_rules("noku"))
+
+#Lines below indicated with hashes will cause incorect imperatives
+V_rules.append(['a', 'ela', 'a'])
+V_rules.append(['a', 'elani', 'a'])
+V_rules.append(['a', 'elaphi', 'a']) #
+V_rules.append(['a', 'eka', 'a'])
+V_rules.append(['a', 'ekana', 'a'])
+V_rules.append(['a', 'ekani', 'a'])
+V_rules.append(['a', 'ekaphi', 'a']) #
+V_rules.append(['a', 'isa', 'a'])
+V_rules.append(['a', 'isana', 'a'])
+V_rules.append(['a', 'isani', 'a'])
+V_rules.append(['a', 'isaphi', 'a']) #
+V_rules.append(['0', 'na', 'a'])
+V_rules.append(['0', 'ni', 'a'])
+V_rules.append(['0', 'phi', 'a']) #
+V_rules.append(['a', 'wa', '[^w]a'])
+#The above can create problems with monosyllabic verbs
+V_rules.append(['a', 'wani', '[^w]a'])
+V_rules.append(['a', 'waphi', '[^w]a'])
+#The above can also be used with negatives, can't they? As in: Igama alipelwa.
+
+for i in range(len(rules)):
+ rules[i] = remove_duplicates(rules[i])
+
+output_myspell()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fri...@us...> - 2008-12-23 13:22:51
|
Revision: 9623
http://zaf.svn.sourceforge.net/zaf/?rev=9623&view=rev
Author: friedelwolff
Date: 2008-12-23 11:44:15 +0000 (Tue, 23 Dec 2008)
Log Message:
-----------
Move comment to the appropriate code that generates remote past tenses.
Modified Paths:
--------------
trunk/dict/zu/myspell/zu_aff.py
Modified: trunk/dict/zu/myspell/zu_aff.py
===================================================================
--- trunk/dict/zu/myspell/zu_aff.py 2008-12-23 09:05:40 UTC (rev 9622)
+++ trunk/dict/zu/myspell/zu_aff.py 2008-12-23 11:44:15 UTC (rev 9623)
@@ -287,7 +287,6 @@
#Indicative:
a_rules.extend(verb_rules(i+"ya"))
#TODO: be- and se- forms
- #Remote past tense:
#Negative future tenses:
a_rules.extend(verb_rules(add_semivowels("a"+ i) +"zu"))
@@ -301,6 +300,7 @@
a_rules.extend(verb_rules(add_semivowels("a"+ i) +"kayu"))
a_rules.extend(verb_rules(add_semivowels("a"+ i) +"kayuku"))
+ #Remote past tense:
a_rules.extend(verb_rules(contract(i+"a")))
for j in object_concords:
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fri...@us...> - 2008-12-23 13:22:03
|
Revision: 9624
http://zaf.svn.sourceforge.net/zaf/?rev=9624&view=rev
Author: friedelwolff
Date: 2008-12-23 11:49:31 +0000 (Tue, 23 Dec 2008)
Log Message:
-----------
Remove e_rules. They weren't used yet, and should rather be done properly with affix dependencies.
Modified Paths:
--------------
trunk/dict/zu/myspell/zu_aff.py
Modified: trunk/dict/zu/myspell/zu_aff.py
===================================================================
--- trunk/dict/zu/myspell/zu_aff.py 2008-12-23 11:44:15 UTC (rev 9623)
+++ trunk/dict/zu/myspell/zu_aff.py 2008-12-23 11:49:31 UTC (rev 9624)
@@ -34,8 +34,6 @@
"""prefixes for almost all positive verbs and future negatives"""
V_rules = [["V", "Y", "SFX"]]
"""common suffixes for verbs ending on -a"""
-e_rules = [["e", "N", "SFX"]]
-"""long form of immediate past tense, etc."""
rules = [a_rules, A_rules, V_rules]
"""all rules"""
@@ -193,7 +191,6 @@
pass
return changed
-
def quicksort(l):
if l == []:
return []
@@ -201,7 +198,6 @@
l[0:1] + \
quicksort([x for x in l[1:] if x[1] >= l[0][1]])
-
def remove_duplicates(rules):
"""Remove duplicate rules and return the trimmed rules list."""
rules = [rules[0]] + quicksort(rules[1:])
@@ -214,7 +210,6 @@
return rules
-
def output_myspell():
"""Output the generated rules in the format required for a myspell affix
file."""
@@ -336,7 +331,6 @@
a_rules.extend(verb_rules("ngoku"))
a_rules.extend(verb_rules("noku"))
-
#Lines below indicated with hashes will cause incorect imperatives
V_rules.append(['a', 'ela', 'a'])
V_rules.append(['a', 'elani', 'a'])
@@ -358,21 +352,6 @@
V_rules.append(['a', 'waphi', '[^w]a'])
#The above can also be used with negatives, can't they? As in: Igama alipelwa.
-
-e_rules.append(['e', 'ele', 'e'])
-e_rules.append(['e', 'eleni', 'e'])
-e_rules.append(['e', 'elephi', 'e'])
-e_rules.append(['e', 'elile', 'e'])
-e_rules.append(['e', 'ile', 'e'])
-e_rules.append(['e', 'ise', 'e'])
-e_rules.append(['e', 'ise', 'e'])
-e_rules.append(['e', 'iseni', 'e'])
-e_rules.append(['e', 'isephi', 'e'])
-e_rules.append(['e', 'ephi', 'e'])
-e_rules.append(['e', 'iwe', 'e'])
-#e_rules.append(['e', 'ile', 'e'])
-#remember -ana -> ene, ala -> ele ...?
-#not combined, only imperative: V_rules.append(['', 'ni', 'a'])
for i in range(len(rules)):
rules[i] = remove_duplicates(rules[i])
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fri...@us...> - 2008-12-23 12:33:50
|
Revision: 9625
http://zaf.svn.sourceforge.net/zaf/?rev=9625&view=rev
Author: friedelwolff
Date: 2008-12-23 12:33:41 +0000 (Tue, 23 Dec 2008)
Log Message:
-----------
A few more common verbs
Modified Paths:
--------------
trunk/dict/zu/myspell/munchedlist.verb.1.in
Modified: trunk/dict/zu/myspell/munchedlist.verb.1.in
===================================================================
--- trunk/dict/zu/myspell/munchedlist.verb.1.in 2008-12-23 11:49:31 UTC (rev 9624)
+++ trunk/dict/zu/myspell/munchedlist.verb.1.in 2008-12-23 12:33:41 UTC (rev 9625)
@@ -2,10 +2,12 @@
bhala/AVa
bona/AVa
bonga/AVa
+buya/AVa
buza/AVa
cabanga/AVa
cela/AVa
cula/AVa
+dinga/AVa
dlala/AVa
duma/AVa
fana/AVa
@@ -16,14 +18,17 @@
hlala/AVa
hlupa/AVa
khala/AVa
+khula/AVa
khuluma/AVa
lala/AVa
letha/AVa
nika/AVa
+ngena/AVa
pheka/AVa
phendula/AVa
phila/AVa
phuma/AVa
+phumula/AVa
qala/AVa
qeda/AVa
sala/AVa
@@ -34,6 +39,7 @@
thanda/AVa
themba/AVa
thenga/AVa
+thola/AVa
vala/AVa
vula/AVa
xoxa/AVa
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fri...@us...> - 2008-12-23 09:05:45
|
Revision: 9622
http://zaf.svn.sourceforge.net/zaf/?rev=9622&view=rev
Author: friedelwolff
Date: 2008-12-23 09:05:40 +0000 (Tue, 23 Dec 2008)
Log Message:
-----------
Remove (currently) unused i_rules - this will be handled differently
Modified Paths:
--------------
trunk/dict/zu/myspell/zu_aff.py
Modified: trunk/dict/zu/myspell/zu_aff.py
===================================================================
--- trunk/dict/zu/myspell/zu_aff.py 2008-12-22 16:50:18 UTC (rev 9621)
+++ trunk/dict/zu/myspell/zu_aff.py 2008-12-23 09:05:40 UTC (rev 9622)
@@ -30,15 +30,13 @@
a_rules = [["a", "Y", "PFX"]]
"""prefixes only applicable to verbs ending on -a"""
-i_rules = [["i", "N", "PFX"]]
-"""prefixes only applicable to verbs ending on -i"""
A_rules = [["A", "Y", "PFX"]]
"""prefixes for almost all positive verbs and future negatives"""
V_rules = [["V", "Y", "SFX"]]
"""common suffixes for verbs ending on -a"""
e_rules = [["e", "N", "SFX"]]
"""long form of immediate past tense, etc."""
-rules = [a_rules, A_rules, V_rules, i_rules]
+rules = [a_rules, A_rules, V_rules]
"""all rules"""
#These regular expressions will be used to do search-replace palatalisation. It
@@ -288,7 +286,6 @@
for i in subject_concords:
#Indicative:
a_rules.extend(verb_rules(i+"ya"))
- i_rules.extend(verb_rules(add_semivowels("a"+i)))
#TODO: be- and se- forms
#Remote past tense:
@@ -338,8 +335,6 @@
a_rules.extend(verb_rules("loku"))
a_rules.extend(verb_rules("ngoku"))
a_rules.extend(verb_rules("noku"))
-#class 1 indicative negative
-i_rules.extend(verb_rules("aka"))
#Lines below indicated with hashes will cause incorect imperatives
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fri...@us...> - 2008-12-22 16:50:41
|
Revision: 9621
http://zaf.svn.sourceforge.net/zaf/?rev=9621&view=rev
Author: friedelwolff
Date: 2008-12-22 16:50:18 +0000 (Mon, 22 Dec 2008)
Log Message:
-----------
Some extra comments and layout changes
Modified Paths:
--------------
trunk/dict/zu/myspell/zu_aff.py
Modified: trunk/dict/zu/myspell/zu_aff.py
===================================================================
--- trunk/dict/zu/myspell/zu_aff.py 2008-12-19 09:28:30 UTC (rev 9620)
+++ trunk/dict/zu/myspell/zu_aff.py 2008-12-22 16:50:18 UTC (rev 9621)
@@ -147,21 +147,20 @@
#now for the complicated part: verbs starting on vowels. (e.g. yakha)
if prefix[-1] == 'u':
- #the 'u' always needs to be removed, we need a 'w'
+ #the 'u' always needs to be removed, we probably need a 'w'
prefix = prefix[0:-1]
#if the original prefix ended on 'wu', we don't want to add
#another 'w' as this will result in 'ww'
- if len(prefix)>0 and prefix[-1] == 'w':
+ if len(prefix) > 0 and prefix[-1] == 'w':
changed.append(["y", prefix, "y[ae]"])
else:
changed.append(["y", prefix + 'w', "y[ae]"])
- if len(prefix) == 0:
+ if len(prefix) == 0:
#if prefix == 'u' before 'o' we change to 'w' as above
changed.append(["y", 'w', "yo"])
else:
- #(if len(prefix) > 0:)
- #for a prefix ending on 'u' before 'o' we simply
- #remove the 'u' without adding 'w'
+ #for a prefix ending on 'u' before 'o' we simply remove the 'u'
+ #without adding 'w', e.g. lu + osa -> losa
changed.append(["y", prefix, "yo"])
return changed
if prefix[-1] == 'i':
@@ -189,6 +188,11 @@
#TODO: verify if 'zo' and 'yo' are only used before consonants
return changed
+ if prefix[-1] == "e":
+ #TODO: situative e- and be- should be handled (entirely thrown away?).
+ #We can probably just generate them, and duplicate handling should take
+ #care of them.
+ pass
return changed
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fri...@us...> - 2008-12-19 09:28:34
|
Revision: 9620
http://zaf.svn.sourceforge.net/zaf/?rev=9620&view=rev
Author: friedelwolff
Date: 2008-12-19 09:28:30 +0000 (Fri, 19 Dec 2008)
Log Message:
-----------
Extend the list of replacements with the palatalisations
Modified Paths:
--------------
trunk/dict/zu/myspell/zu_aff.py
Modified: trunk/dict/zu/myspell/zu_aff.py
===================================================================
--- trunk/dict/zu/myspell/zu_aff.py 2008-12-19 09:26:25 UTC (rev 9619)
+++ trunk/dict/zu/myspell/zu_aff.py 2008-12-19 09:28:30 UTC (rev 9620)
@@ -93,6 +93,8 @@
]
"""These are suggestions for replacement."""
+replace_list.extend(palatalisation_list)
+
def illegal_reflexive(subject, object):
"""Returns whether using the given concords together would result in an
illegal reflexive
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fri...@us...> - 2008-12-19 09:26:30
|
Revision: 9619
http://zaf.svn.sourceforge.net/zaf/?rev=9619&view=rev
Author: friedelwolff
Date: 2008-12-19 09:26:25 +0000 (Fri, 19 Dec 2008)
Log Message:
-----------
Keep a list of useful replacements and output it to REP statements for myspell
Modified Paths:
--------------
trunk/dict/zu/myspell/zu_aff.py
Modified: trunk/dict/zu/myspell/zu_aff.py
===================================================================
--- trunk/dict/zu/myspell/zu_aff.py 2008-12-19 09:22:23 UTC (rev 9618)
+++ trunk/dict/zu/myspell/zu_aff.py 2008-12-19 09:26:25 UTC (rev 9619)
@@ -67,6 +67,32 @@
new_string = palatalisation_re[0].sub(palatalisation_re[1], new_string)
return new_string
+replace_list = [
+ ["bh", "b"],
+ ["b", "bh"],
+ ["ch", "c"],
+ ["c", "ch"],
+ ["dh", "d"],
+ # dh doesn't occur
+ ["hh", "h"],
+ ["h", "hh"],
+ ["kh", "k"],
+ ["k", "kh"],
+ ["k", "g"],
+ ["g", "k"],
+ ["mg", "mng"],
+ ["g", "k"],
+ ["ph", "p"],
+ ["p", "ph"],
+ ["qh", "q"],
+ ["q", "qh"],
+ ["th", "t"],
+ ["t", "th"],
+ ["xh", "x"],
+ ["x", "xh"],
+]
+"""These are suggestions for replacement."""
+
def illegal_reflexive(subject, object):
"""Returns whether using the given concords together would result in an
illegal reflexive
@@ -193,6 +219,11 @@
TRY aeinulkhosbgywmztdpfcqrvj-ASJMHxEKBGNPTRLDIZFOUWVYC
"""
+ print "REP %d" % len(replace_list)
+ for rep in replace_list:
+ print "REP %s %s" % (rep[0], rep[1].replace(' ', '_'))
+ print
+
for rule_set in rules:
identifier = rule_set[0][0]
rule_set[0][0] = ''
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fri...@us...> - 2008-12-19 09:22:28
|
Revision: 9618
http://zaf.svn.sourceforge.net/zaf/?rev=9618&view=rev
Author: friedelwolff
Date: 2008-12-19 09:22:23 +0000 (Fri, 19 Dec 2008)
Log Message:
-----------
Move definitions of palatalisations and define them as a plain list first
Modified Paths:
--------------
trunk/dict/zu/myspell/zu_aff.py
Modified: trunk/dict/zu/myspell/zu_aff.py
===================================================================
--- trunk/dict/zu/myspell/zu_aff.py 2008-12-15 11:12:11 UTC (rev 9617)
+++ trunk/dict/zu/myspell/zu_aff.py 2008-12-19 09:22:23 UTC (rev 9618)
@@ -41,6 +41,32 @@
rules = [a_rules, A_rules, V_rules, i_rules]
"""all rules"""
+#These regular expressions will be used to do search-replace palatalisation. It
+#is defined outside the function so that it only needs to be done once. It is
+#crucial that the palatalisations starting on 'm' be listed first. Otherwise
+#the rules for the m-less forms will fire first. Hash signs indicate the more
+#common ones.
+
+palatalisation_list = [
+ ["mbw", "njw"],#
+ ["mpw", "ntshw"],
+ ["mw", "nyw"], #
+ ["bw", "tshw"],
+ ["bhw", "jw"],
+ ["phw", "shw"],#
+]
+
+palatalisation_re_list = []
+for palatalisation in palatalisation_list:
+ palatalisation_re_list.append([re.compile(palatalisation[0]), palatalisation[1]])
+
+def palatalise(string):
+ """Perform palatalisation substitutions on the given string."""
+ new_string = string
+ for palatalisation_re in palatalisation_re_list:
+ new_string = palatalisation_re[0].sub(palatalisation_re[1], new_string)
+ return new_string
+
def illegal_reflexive(subject, object):
"""Returns whether using the given concords together would result in an
illegal reflexive
@@ -138,26 +164,6 @@
return changed
-#These regular expressions will be used to do search-replace palatalisation. It
-#is defined outside the function so that it only needs to be done once. It is
-#crucial that the palatalisations starting on 'm' be listed first. Otherwise
-#the rules for the m-less forms will fire first. Hash signs indicate the more
-#common ones.
-palatalisations = []
-palatalisations.append([re.compile("mbw"), "njw"]) #
-palatalisations.append([re.compile("mpw"), "ntshw"])
-palatalisations.append([re.compile("mw"), "nyw"]) #
-palatalisations.append([re.compile("bw"), "tshw"])
-palatalisations.append([re.compile("bhw"), "jw"])
-palatalisations.append([re.compile("phw"), "shw"]) #
-
-def palatalise(string):
- """Perform palatalisation substitutions on the given string."""
- new_string = string
- for palatalisation in palatalisations:
- new_string = palatalisation[0].sub(palatalisation[1], new_string)
- return new_string
-
def quicksort(l):
if l == []:
return []
@@ -182,10 +188,11 @@
def output_myspell():
"""Output the generated rules in the format required for a myspell affix
file."""
- print "# Automatically generated by zu_aff.py"
- print "SET ISO8859-1"
- print "TRY aeinulkhosbgywmztdpfcqrvj-ASJMHxEKBGNPTRLDIZFOUWVYC"
- print
+ print """# Automatically generated by zu_aff.py"
+SET ISO8859-1
+TRY aeinulkhosbgywmztdpfcqrvj-ASJMHxEKBGNPTRLDIZFOUWVYC
+
+"""
for rule_set in rules:
identifier = rule_set[0][0]
rule_set[0][0] = ''
@@ -338,4 +345,3 @@
rules[i] = remove_duplicates(rules[i])
output_myspell()
-
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dwa...@us...> - 2008-12-15 11:12:16
|
Revision: 9617
http://zaf.svn.sourceforge.net/zaf/?rev=9617&view=rev
Author: dwaynebailey
Date: 2008-12-15 11:12:11 +0000 (Mon, 15 Dec 2008)
Log Message:
-----------
Drop broken unit
Modified Paths:
--------------
trunk/po/glossary/af/languages.po
Modified: trunk/po/glossary/af/languages.po
===================================================================
--- trunk/po/glossary/af/languages.po 2008-12-15 11:11:33 UTC (rev 9616)
+++ trunk/po/glossary/af/languages.po 2008-12-15 11:12:11 UTC (rev 9617)
@@ -412,8 +412,3 @@
#: Zulu
msgid "Zulu"
msgstr "isiZulu"
-
-#:
-msgid ""
-msgstr "Oesbekies"
-
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dwa...@us...> - 2008-12-15 11:11:43
|
Revision: 9616
http://zaf.svn.sourceforge.net/zaf/?rev=9616&view=rev
Author: dwaynebailey
Date: 2008-12-15 11:11:33 +0000 (Mon, 15 Dec 2008)
Log Message:
-----------
Fix headers
Modified Paths:
--------------
trunk/po/glossary/af/colours.po
trunk/po/glossary/af/glossary.po
trunk/po/glossary/af/languages.po
Modified: trunk/po/glossary/af/colours.po
===================================================================
--- trunk/po/glossary/af/colours.po 2008-12-03 11:30:15 UTC (rev 9615)
+++ trunk/po/glossary/af/colours.po 2008-12-15 11:11:33 UTC (rev 9616)
@@ -1,3 +1,18 @@
+# Afrikaans (af) colours
+# Copyright (C) 2004 Samuel Murray
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: colours\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2004-05-26 04:31+0100\n"
+"PO-Revision-Date: 2004-05-26 04:31+0100\n"
+"Last-Translator: \n"
+"Language-Team: tra...@li...\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
#: Azul
msgid "Azul"
msgstr "Asuur"
Modified: trunk/po/glossary/af/glossary.po
===================================================================
--- trunk/po/glossary/af/glossary.po 2008-12-03 11:30:15 UTC (rev 9615)
+++ trunk/po/glossary/af/glossary.po 2008-12-15 11:11:33 UTC (rev 9616)
@@ -1,7 +1,6 @@
# Afrikaans (af) computer terms glossary
# Copyright (C) 2003 Samuel Murray
#
-#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: glossary\n"
Modified: trunk/po/glossary/af/languages.po
===================================================================
--- trunk/po/glossary/af/languages.po 2008-12-03 11:30:15 UTC (rev 9615)
+++ trunk/po/glossary/af/languages.po 2008-12-15 11:11:33 UTC (rev 9616)
@@ -1,3 +1,18 @@
+# Afrikaans (af) language names
+# Copyright (C) 2004 Samuel Murray
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Language-Names\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2004-05-26 04:31+0100\n"
+"PO-Revision-Date: 2004-05-26 04:31+0100\n"
+"Last-Translator: \n"
+"Language-Team: tra...@li...\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
#: Afrikaans
msgid "Afrikaans"
msgstr "Afrikaans"
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|