from lxml import etree
from lxml.etree import XMLSyntaxError, XSLTApplyError
+from librarian.dcparser import Person
from librarian.parser import WLDocument
-from librarian import ParseError
+from librarian import ParseError, DCNS
from librarian import functions
-
functions.reg_substitute_entities()
-functions.reg_person_name()
functions.reg_strip()
functions.reg_starts_white()
functions.reg_ends_white()
+functions.reg_texcommand()
STYLESHEETS = {
'wl2tex': 'xslt/wl2tex.xslt',
<a><b>A<d/>B<d/>C</b>X<d/>Y<d/>Z</a>
"""
- for elem in doc.iter():
- try:
- if elem.text:
- chunks = split_re.split(elem.text)
- while len(chunks) > 1:
- ins = etree.Element(tagname)
- ins.tail = chunks.pop()
- elem.insert(0, ins)
- elem.text = chunks.pop(0)
- if elem.tail:
- chunks = split_re.split(elem.tail)
- parent = elem.getparent()
- ins_index = parent.index(elem) + 1
- while len(chunks) > 1:
- ins = etree.Element(tagname)
- ins.tail = chunks.pop()
- parent.insert(ins_index, ins)
- elem.tail = chunks.pop(0)
- except TypeError, e:
- # element with no children, like comment
- pass
+ for elem in doc.iter(tag=etree.Element):
+ if elem.text:
+ chunks = split_re.split(elem.text)
+ while len(chunks) > 1:
+ ins = etree.Element(tagname)
+ ins.tail = chunks.pop()
+ elem.insert(0, ins)
+ elem.text = chunks.pop(0)
+ if elem.tail:
+ chunks = split_re.split(elem.tail)
+ parent = elem.getparent()
+ ins_index = parent.index(elem) + 1
+ while len(chunks) > 1:
+ ins = etree.Element(tagname)
+ ins.tail = chunks.pop()
+ parent.insert(ins_index, ins)
+ elem.tail = chunks.pop(0)
def substitute_hyphens(doc):
""" moves motifs to be into block elements """
for master in doc.xpath('//powiesc|//opowiadanie|//liryka_l|//liryka_lp|//dramat_wierszowany_l|//dramat_wierszowany_lp|//dramat_wspolczesny'):
for motif in master.xpath('motyw'):
- print motif.text
for sib in motif.itersiblings():
if sib.tag not in ('sekcja_swiatlo', 'sekcja_asterysk', 'separator_linia', 'begin', 'end', 'motyw', 'extra', 'uwaga'):
# motif shouldn't have a tail - it would be untagged text
break
+def parse_creator(doc):
+ """ find all dc:creator tags and add dc:creator_parsed with forenames first """
+ for creator in doc.findall('//'+DCNS('creator')):
+ p = Person.from_text(creator.text)
+ creator_parsed = deepcopy(creator)
+ creator_parsed.tag = DCNS('creator_parsed')
+ creator_parsed.text = ' '.join(p.first_names + (p.last_name,))
+ creator.getparent().insert(0, creator_parsed)
+
+
def get_resource(path):
return os.path.join(os.path.dirname(__file__), path)
# hack the tree
move_motifs_inside(document.edoc)
hack_motifs(document.edoc)
+ parse_creator(document.edoc)
substitute_hyphens(document.edoc)
fix_hanging(document.edoc)