1
0
mirror of https://github.com/KanjiVG/kanjivg.git synced 2026-03-27 01:23:10 +01:00

Found the bug in kanjivg.py and fixed 08332.svg

This commit is contained in:
Ben Bullock
2024-08-04 17:13:13 +09:00
parent c9e17f23a5
commit 500010c51e
2 changed files with 16 additions and 11 deletions

View File

@@ -54,7 +54,7 @@ kvg:type CDATA #IMPLIED >
<path id="kvg:08332-s6" kvg:type="" d="M42.04,74.12c3.5,3.26,9.04,13.42,9.91,18.5"/>
</g>
</g>
<g id="kvg:08332-g7" kvg:element="玄" kvg:part="2" kvg:number="2" kvg:partial="true" kvg:position="right">
<g id="kvg:08332-g7" kvg:element="玄" kvg:partial="true" kvg:position="right">
<g id="kvg:08332-g8" kvg:element="幺">
<path id="kvg:08332-s7" kvg:type="㇜" d="M70.62,40.62c0.34,1.18,0.41,2.05-0.17,3.34C67.75,50,63,56.75,58.59,61.71c-0.59,0.67-0.67,2.72,0,2.95c3.53,1.18,12.63,2.78,15.66,4.94"/>
<path id="kvg:08332-s8" kvg:type="㇜" d="M84.66,50.36c0.37,1.3,0.15,3.98-0.34,4.71c-6.57,9.68-14.7,22.06-24.66,35.12c-1.14,1.5-0.71,2.21,0.69,1.88c8.42-1.99,19.4-5.71,26.76-7.59"/>

View File

@@ -256,6 +256,7 @@ class KanjisHandler(BasicHandler):
self.kanjis = {}
self.group = None
self.groups = []
# This stores the components for checking
self.compCpt = {}
self.metComponents = set()
@@ -271,7 +272,7 @@ class KanjisHandler(BasicHandler):
raise Exception("Each kanji should have id formatted as kvg:kanji_XXXXX.")
idVariant = idVariantStr.split('-')
self.kanji = Kanji(*idVariant)
self.compCpt = {}
def handle_end_kanji(self):
if self.group is not None:
@@ -301,7 +302,6 @@ class KanjisHandler(BasicHandler):
if "kvg:radical" in attrs: group.radical = unicode(attrs["kvg:radical"])
if "kvg:phon" in attrs: group.phon = unicode(attrs["kvg:phon"])
# print("ID is %s" % (attrs["id"]))
group.ID = str(attrs["id"])
self.group = group
@@ -309,18 +309,21 @@ class KanjisHandler(BasicHandler):
if group.original: self.metComponents.add(group.original)
if group.number:
if not group.part: print("%s: Number specified, but part missing" % (self.kanji.kId()))
if not group.part:
print("%s: group %s has number %d, but no part" % (self.kanji.kId(), group.ID, group.number))
ged = group.element + "n" + str(group.number)
# The group must exist already
if group.part > 1:
if (group.element + str(group.number)) not in self.compCpt:
print("%s: Missing numbered group" % (self.kanji.kId()))
elif self.compCpt[group.element + str(group.number)] != group.part - 1:
if (ged) not in self.compCpt:
print("%s: Numbered group %s with no first part" % (self.kanji.kId(), group.ID))
elif self.compCpt[ged] != group.part - 1:
print("%s: Incorrectly numbered group" % (self.kanji.kId()))
# The group must not exist
else:
if (group.element + str(group.number)) in self.compCpt:
print("%s: Duplicate numbered group %s for %s - %d" % (self.kanji.kId(), group.ID, group.element, group.number))
self.compCpt[group.element + str(group.number)] = group.part
if (ged) in self.compCpt:
if self.compCpt[ged] == group.part:
print("%s: Duplicate group %s %s for %s part %d - %d" % (self.kanji.kId(), group.ID, ged,group.element, group.part, group.number))
self.compCpt[ged] = group.part
# No number, just a part - groups restart with part 1, otherwise must
# increase correctly
elif group.part:
@@ -346,6 +349,8 @@ class KanjisHandler(BasicHandler):
if "d" in attrs: stroke.svg = unicode(attrs["d"])
self.group.childs.append(stroke)
class SVGHandler(BasicHandler):
"""SVG handler for parsing final kanji files. It can handle single-kanji files or aggregation files. After parsing, the kanji are accessible through the kanjis member, indexed by their svg file name."""
def __init__(self):
@@ -396,7 +401,7 @@ class SVGHandler(BasicHandler):
if not group.part: print("%s: Number specified, but part missing" % (self.currentKanji.kId()))
# The group must exist already
if group.part > 1:
if not self.compCpt.has_key(group.element + str(group.number)):
if not self.compCpt.has_key(group.element + "n" + str(group.number)):
print("%s: Missing numbered group" % (self.currentKanji.kId()))
elif self.compCpt[group.element + str(group.number)] != group.part - 1:
print("%s: Incorrectly numbered group" % (self.currentKanji.kId()))