}
-def insert_tags(doc, split_re, tagname):
+def insert_tags(doc, split_re, tagname, exclude=None):
""" inserts <tagname> for every occurence of `split_re' in text nodes in the `doc' tree
>>> t = etree.fromstring('<a><b>A-B-C</b>X-Y-Z</a>');
"""
for elem in doc.iter(tag=etree.Element):
+ if exclude and elem.tag in exclude:
+ continue
if elem.text:
chunks = split_re.split(elem.text)
while len(chunks) > 1:
def substitute_hyphens(doc):
insert_tags(doc,
re.compile("(?<=[^-\s])-(?=[^-\s])"),
- "dywiz")
+ "dywiz",
+ exclude=[DCNS("identifier.url"), DCNS("rights.license")]
+ )
def fix_hanging(doc):
insert_tags(doc,
re.compile("(?<=\s\w)\s+"),
- "nbsp")
+ "nbsp",
+ exclude=[DCNS("identifier.url"), DCNS("rights.license")]
+ )
def move_motifs_inside(doc):
return p == 0
-def transform(provider, slug=None, file_path=None, output_file=None, output_dir=None, make_dir=False, verbose=False, save_tex=None):
+def transform(provider, slug=None, file_path=None,
+ output_file=None, output_dir=None, make_dir=False, verbose=False, save_tex=None, morefloats=None):
""" produces a PDF file with XeLaTeX
provider: a DocProvider
make_dir: writes output to <output_dir>/<author>/<slug>.pdf istead of <output_dir>/<slug>.pdf
verbose: prints all output from LaTeX
save_tex: path to save the intermediary LaTeX file to
+ morefloats (old/new/none): force specific morefloats
"""
# Parse XSLT
document = load_including_children(provider, slug=slug)
# check for LaTeX packages
- if not package_available('morefloats', 'maxfloats=19'):
- # using old morefloats or none at all
- document.edoc.getroot().set('old-morefloats', 'yes')
+ if morefloats:
+ document.edoc.getroot().set('morefloats', morefloats.lower())
+ elif package_available('morefloats', 'maxfloats=19'):
+ document.edoc.getroot().set('morefloats', 'new')
# hack the tree
move_motifs_inside(document.edoc)
raise ValueError('Neither slug, URI nor file path provided for a book.')
document = WLDocument.from_file(f, True,
- parse_dublincore=True,
- preserve_lines=False)
+ parse_dublincore=True)
f.close()