mirror of
https://github.com/gryf/ebook-converter.git
synced 2026-04-16 19:13:32 +02:00
Removed iteritems and itervalues, which are redundant
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
import numbers
|
||||
from collections import OrderedDict
|
||||
from ebook_converter.polyglot.builtins import iteritems
|
||||
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
@@ -133,11 +132,11 @@ def read_border(parent, dest, XPath, get, border_edges=border_edges, name='pBdr'
|
||||
|
||||
for border in XPath('./w:' + name)(parent):
|
||||
for edge in border_edges:
|
||||
for prop, val in iteritems(read_single_border(border, edge, XPath, get)):
|
||||
for prop, val in read_single_border(border, edge, XPath, get).items():
|
||||
if val is not None:
|
||||
vals[prop % edge] = val
|
||||
|
||||
for key, val in iteritems(vals):
|
||||
for key, val in vals.items():
|
||||
setattr(dest, key, val)
|
||||
|
||||
|
||||
@@ -472,4 +471,4 @@ class ParagraphStyle(object):
|
||||
return False
|
||||
|
||||
|
||||
read_funcs = {k[5:]:v for k, v in iteritems(globals()) if k.startswith('read_')}
|
||||
read_funcs = {k[5:]:v for k, v in globals().items() if k.startswith('read_')}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import os
|
||||
from ebook_converter.polyglot.builtins import itervalues
|
||||
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
@@ -143,7 +142,7 @@ def cleanup_markup(log, root, styles, dest_dir, detect_cover, XPath):
|
||||
current_run = [span]
|
||||
|
||||
# Process dir attributes
|
||||
class_map = dict(itervalues(styles.classes))
|
||||
class_map = dict(styles.classes.values())
|
||||
parents = ('p', 'div') + tuple('h%d' % i for i in range(1, 7))
|
||||
for parent in root.xpath('//*[(%s)]' % ' or '.join('name()="%s"' % t for t in parents)):
|
||||
# Ensure that children of rtl parents that are not rtl have an
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import re
|
||||
|
||||
from ebook_converter.ebooks.docx.index import process_index, polish_index_markup
|
||||
from ebook_converter.polyglot.builtins import iteritems, native_string_type
|
||||
from ebook_converter.polyglot.builtins import native_string_type
|
||||
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
@@ -234,7 +234,7 @@ class Fields(object):
|
||||
def polish_markup(self, object_map):
|
||||
if not self.index_fields:
|
||||
return
|
||||
rmap = {v:k for k, v in iteritems(object_map)}
|
||||
rmap = {v:k for k, v in object_map.items()}
|
||||
for idx, blocks in self.index_fields:
|
||||
polish_index_markup(idx, [rmap[b] for b in blocks])
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@ from ebook_converter.utils.filenames import ascii_filename
|
||||
from ebook_converter.utils.fonts.scanner import font_scanner, NoFonts
|
||||
from ebook_converter.utils.fonts.utils import panose_to_css_generic_family, is_truetype_font
|
||||
from ebook_converter.utils.icu import ord_string
|
||||
from ebook_converter.polyglot.builtins import iteritems
|
||||
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
@@ -168,7 +167,7 @@ class Fonts(object):
|
||||
d['font-weight'] = 'bold'
|
||||
if 'Italic' in variant:
|
||||
d['font-style'] = 'italic'
|
||||
d = ['%s: %s' % (k, v) for k, v in iteritems(d)]
|
||||
d = ['%s: %s' % (k, v) for k, v in d.items()]
|
||||
d = ';\n\t'.join(d)
|
||||
defs.append('@font-face {\n\t%s\n}\n' % d)
|
||||
return '\n'.join(defs)
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
from collections import OrderedDict
|
||||
from ebook_converter.polyglot.builtins import iteritems
|
||||
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
@@ -54,7 +53,7 @@ class Footnotes(object):
|
||||
return None, None
|
||||
|
||||
def __iter__(self):
|
||||
for anchor, (counter, note) in iteritems(self.notes):
|
||||
for anchor, (counter, note) in self.notes.items():
|
||||
yield anchor, counter, note
|
||||
|
||||
@property
|
||||
|
||||
@@ -7,7 +7,6 @@ from ebook_converter.ebooks.docx.names import barename
|
||||
from ebook_converter.utils.filenames import ascii_filename
|
||||
from ebook_converter.utils.img import resize_to_fit, image_to_data
|
||||
from ebook_converter.utils.imghdr import what
|
||||
from ebook_converter.polyglot.builtins import iteritems, itervalues
|
||||
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
@@ -63,7 +62,7 @@ def get_image_properties(parent, XPath, get):
|
||||
|
||||
def get_image_margins(elem):
|
||||
ans = {}
|
||||
for w, css in iteritems({'L':'left', 'T':'top', 'R':'right', 'B':'bottom'}):
|
||||
for w, css in {'L':'left', 'T':'top', 'R':'right', 'B':'bottom'}.items():
|
||||
val = elem.get('dist%s' % w, None)
|
||||
if val is not None:
|
||||
try:
|
||||
@@ -154,7 +153,7 @@ class Images(object):
|
||||
return raw, base
|
||||
|
||||
def unique_name(self, base):
|
||||
exists = frozenset(itervalues(self.used))
|
||||
exists = frozenset(self.used.values())
|
||||
c = 1
|
||||
name = base
|
||||
while name in exists:
|
||||
@@ -239,7 +238,7 @@ class Images(object):
|
||||
ans = self.pic_to_img(pic, alt, inline, title)
|
||||
if ans is not None:
|
||||
if style:
|
||||
ans.set('style', '; '.join('%s: %s' % (k, v) for k, v in iteritems(style)))
|
||||
ans.set('style', '; '.join('%s: %s' % (k, v) for k, v in style.items()))
|
||||
yield ans
|
||||
|
||||
# Now process the floats
|
||||
@@ -250,7 +249,7 @@ class Images(object):
|
||||
ans = self.pic_to_img(pic, alt, anchor, title)
|
||||
if ans is not None:
|
||||
if style:
|
||||
ans.set('style', '; '.join('%s: %s' % (k, v) for k, v in iteritems(style)))
|
||||
ans.set('style', '; '.join('%s: %s' % (k, v) for k, v in style.items()))
|
||||
yield ans
|
||||
|
||||
def pict_to_html(self, pict, page):
|
||||
@@ -272,7 +271,7 @@ class Images(object):
|
||||
style['margin-left'] = '0' if align == 'left' else 'auto'
|
||||
style['margin-right'] = 'auto' if align == 'left' else '0'
|
||||
if style:
|
||||
hr.set('style', '; '.join(('%s:%s' % (k, v) for k, v in iteritems(style))))
|
||||
hr.set('style', '; '.join(('%s:%s' % (k, v) for k, v in style.items())))
|
||||
yield hr
|
||||
|
||||
for imagedata in XPath('descendant::v:imagedata[@r:id]')(pict):
|
||||
|
||||
@@ -3,7 +3,6 @@ from operator import itemgetter
|
||||
from lxml import etree
|
||||
|
||||
from ebook_converter.utils.icu import partition_by_first_letter, sort_key
|
||||
from ebook_converter.polyglot.builtins import iteritems
|
||||
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
@@ -99,7 +98,7 @@ def process_index(field, index, xe_fields, log, XPath, expand):
|
||||
if heading_text is not None:
|
||||
groups = partition_by_first_letter(xe_fields, key=itemgetter('text'))
|
||||
items = []
|
||||
for key, fields in iteritems(groups):
|
||||
for key, fields in groups.items():
|
||||
items.append(key), items.extend(fields)
|
||||
if styles:
|
||||
heading_style = styles[0]
|
||||
|
||||
@@ -3,7 +3,6 @@ import re
|
||||
from lxml.etree import XPath as X
|
||||
|
||||
from ebook_converter.utils.filenames import ascii_text
|
||||
from ebook_converter.polyglot.builtins import iteritems
|
||||
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
@@ -29,7 +28,7 @@ TRANSITIONAL_NAMES = {
|
||||
|
||||
STRICT_NAMES = {
|
||||
k:v.replace('http://schemas.openxmlformats.org/officeDocument/2006', 'http://purl.oclc.org/ooxml/officeDocument')
|
||||
for k, v in iteritems(TRANSITIONAL_NAMES)
|
||||
for k, v in TRANSITIONAL_NAMES.items()
|
||||
}
|
||||
|
||||
TRANSITIONAL_NAMESPACES = {
|
||||
@@ -69,7 +68,7 @@ STRICT_NAMESPACES = {
|
||||
'http://schemas.openxmlformats.org/officeDocument/2006', 'http://purl.oclc.org/ooxml/officeDocument').replace(
|
||||
'http://schemas.openxmlformats.org/wordprocessingml/2006', 'http://purl.oclc.org/ooxml/wordprocessingml').replace(
|
||||
'http://schemas.openxmlformats.org/drawingml/2006', 'http://purl.oclc.org/ooxml/drawingml')
|
||||
for k, v in iteritems(TRANSITIONAL_NAMESPACES)
|
||||
for k, v in TRANSITIONAL_NAMESPACES.items()
|
||||
}
|
||||
# }}}
|
||||
|
||||
@@ -135,7 +134,7 @@ class DOCXNamespace(object):
|
||||
return self.XPath('|'.join('descendant::%s' % a for a in args))(elem)
|
||||
|
||||
def makeelement(self, root, tag, append=True, **attrs):
|
||||
ans = root.makeelement(self.expand(tag), **{self.expand(k, sep='_'):v for k, v in iteritems(attrs)})
|
||||
ans = root.makeelement(self.expand(tag), **{self.expand(k, sep='_'):v for k, v in attrs.items()})
|
||||
if append:
|
||||
root.append(ans)
|
||||
return ans
|
||||
|
||||
@@ -7,7 +7,6 @@ from lxml.html.builder import OL, UL, SPAN
|
||||
from ebook_converter.ebooks.docx.block_styles import ParagraphStyle
|
||||
from ebook_converter.ebooks.docx.char_styles import RunStyle, inherit
|
||||
from ebook_converter.ebooks.metadata import roman
|
||||
from ebook_converter.polyglot.builtins import iteritems
|
||||
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
@@ -166,7 +165,7 @@ class NumberingDefinition(object):
|
||||
|
||||
def copy(self):
|
||||
ans = NumberingDefinition(self.namespace, an_id=self.abstract_numbering_definition_id)
|
||||
for l, lvl in iteritems(self.levels):
|
||||
for l, lvl in self.levels.items():
|
||||
ans.levels[l] = lvl.copy()
|
||||
return ans
|
||||
|
||||
@@ -222,7 +221,7 @@ class Numbering(object):
|
||||
if alvl is None:
|
||||
alvl = Level(self.namespace)
|
||||
alvl.read_from_xml(lvl, override=True)
|
||||
for ilvl, so in iteritems(start_overrides):
|
||||
for ilvl, so in start_overrides.items():
|
||||
try:
|
||||
nd.levels[ilvl].start = start_override
|
||||
except KeyError:
|
||||
@@ -242,22 +241,22 @@ class Numbering(object):
|
||||
self.instances[num_id] = create_instance(n, d)
|
||||
|
||||
numbering_links = styles.numbering_style_links
|
||||
for an_id, style_link in iteritems(lazy_load):
|
||||
for an_id, style_link in lazy_load.items():
|
||||
num_id = numbering_links[style_link]
|
||||
self.definitions[an_id] = self.instances[num_id].copy()
|
||||
|
||||
for num_id, (an_id, n) in iteritems(next_pass):
|
||||
for num_id, (an_id, n) in next_pass.items():
|
||||
d = self.definitions.get(an_id, None)
|
||||
if d is not None:
|
||||
self.instances[num_id] = create_instance(n, d)
|
||||
|
||||
for num_id, d in iteritems(self.instances):
|
||||
for num_id, d in self.instances.items():
|
||||
self.starts[num_id] = {lvl:d.levels[lvl].start for lvl in d.levels}
|
||||
|
||||
def get_pstyle(self, num_id, style_id):
|
||||
d = self.instances.get(num_id, None)
|
||||
if d is not None:
|
||||
for ilvl, lvl in iteritems(d.levels):
|
||||
for ilvl, lvl in d.levels.items():
|
||||
if lvl.para_link == style_id:
|
||||
return ilvl
|
||||
|
||||
@@ -269,7 +268,7 @@ class Numbering(object):
|
||||
|
||||
def update_counter(self, counter, levelnum, levels):
|
||||
counter[levelnum] += 1
|
||||
for ilvl, lvl in iteritems(levels):
|
||||
for ilvl, lvl in levels.items():
|
||||
restart = lvl.restart
|
||||
if (restart is None and ilvl == levelnum + 1) or restart == levelnum + 1:
|
||||
counter[ilvl] = lvl.start
|
||||
|
||||
@@ -4,7 +4,6 @@ from collections import OrderedDict, Counter
|
||||
from ebook_converter.ebooks.docx.block_styles import ParagraphStyle, inherit, twips
|
||||
from ebook_converter.ebooks.docx.char_styles import RunStyle
|
||||
from ebook_converter.ebooks.docx.tables import TableStyle
|
||||
from ebook_converter.polyglot.builtins import iteritems, itervalues
|
||||
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
@@ -121,7 +120,7 @@ class Styles(object):
|
||||
self.default_paragraph_style = self.default_character_style = None
|
||||
|
||||
def __iter__(self):
|
||||
for s in itervalues(self.id_map):
|
||||
for s in self.id_map.values():
|
||||
yield s
|
||||
|
||||
def __getitem__(self, key):
|
||||
@@ -340,7 +339,7 @@ class Styles(object):
|
||||
setattr(s, prop, inherit)
|
||||
setattr(block_style, prop, next(iter(vals)))
|
||||
|
||||
for p, runs in iteritems(layers):
|
||||
for p, runs in layers.items():
|
||||
has_links = '1' in {r.get('is-link', None) for r in runs}
|
||||
char_styles = [self.resolve_run(r) for r in runs]
|
||||
block_style = self.resolve_paragraph(p)
|
||||
@@ -420,7 +419,7 @@ class Styles(object):
|
||||
ps.pageBreakBefore = True
|
||||
|
||||
def register(self, css, prefix):
|
||||
h = hash(frozenset(iteritems(css)))
|
||||
h = hash(frozenset(css.items()))
|
||||
ans, _ = self.classes.get(h, (None, None))
|
||||
if ans is None:
|
||||
self.counter[prefix] += 1
|
||||
@@ -429,17 +428,17 @@ class Styles(object):
|
||||
return ans
|
||||
|
||||
def generate_classes(self):
|
||||
for bs in itervalues(self.para_cache):
|
||||
for bs in self.para_cache.values():
|
||||
css = bs.css
|
||||
if css:
|
||||
self.register(css, 'block')
|
||||
for bs in itervalues(self.run_cache):
|
||||
for bs in self.run_cache.values():
|
||||
css = bs.css
|
||||
if css:
|
||||
self.register(css, 'text')
|
||||
|
||||
def class_name(self, css):
|
||||
h = hash(frozenset(iteritems(css)))
|
||||
h = hash(frozenset(css.items()))
|
||||
return self.classes.get(h, (None, None))[0]
|
||||
|
||||
def generate_css(self, dest_dir, docx, notes_nopb, nosupsub):
|
||||
@@ -494,8 +493,8 @@ class Styles(object):
|
||||
prefix = ef + '\n' + prefix
|
||||
|
||||
ans = []
|
||||
for (cls, css) in sorted(itervalues(self.classes), key=lambda x:x[0]):
|
||||
b = ('\t%s: %s;' % (k, v) for k, v in iteritems(css))
|
||||
for (cls, css) in sorted(self.classes.values(), key=lambda x:x[0]):
|
||||
b = ('\t%s: %s;' % (k, v) for k, v in css.items())
|
||||
b = '\n'.join(b)
|
||||
ans.append('.%s {\n%s\n}\n' % (cls, b.rstrip(';')))
|
||||
return prefix + '\n' + '\n'.join(ans)
|
||||
|
||||
@@ -2,7 +2,6 @@ from lxml.html.builder import TABLE, TR, TD
|
||||
|
||||
from ebook_converter.ebooks.docx.block_styles import inherit, read_shd as rs, read_border, binary_property, border_props, ParagraphStyle, border_to_css
|
||||
from ebook_converter.ebooks.docx.char_styles import RunStyle
|
||||
from ebook_converter.polyglot.builtins import iteritems, itervalues
|
||||
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
@@ -82,7 +81,7 @@ def read_spacing(parent, dest, XPath, get):
|
||||
def read_float(parent, dest, XPath, get):
|
||||
ans = inherit
|
||||
for x in XPath('./w:tblpPr')(parent):
|
||||
ans = {k.rpartition('}')[-1]: v for k, v in iteritems(x.attrib)}
|
||||
ans = {k.rpartition('}')[-1]: v for k, v in x.attrib.items()}
|
||||
setattr(dest, 'float', ans)
|
||||
|
||||
|
||||
@@ -614,7 +613,7 @@ class Table(object):
|
||||
def __iter__(self):
|
||||
for p in self.paragraphs:
|
||||
yield p
|
||||
for t in itervalues(self.sub_tables):
|
||||
for t in self.sub_tables.values():
|
||||
for p in t:
|
||||
yield p
|
||||
|
||||
@@ -661,7 +660,7 @@ class Table(object):
|
||||
table_style = self.table_style.css
|
||||
if table_style:
|
||||
table.set('class', self.styles.register(table_style, 'table'))
|
||||
for elem, style in iteritems(style_map):
|
||||
for elem, style in style_map.items():
|
||||
css = style.css
|
||||
if css:
|
||||
elem.set('class', self.styles.register(css, elem.tag))
|
||||
@@ -682,7 +681,7 @@ class Tables(object):
|
||||
self.sub_tables |= set(self.tables[-1].sub_tables)
|
||||
|
||||
def apply_markup(self, object_map, page_map):
|
||||
rmap = {v:k for k, v in iteritems(object_map)}
|
||||
rmap = {v:k for k, v in object_map.items()}
|
||||
for table in self.tables:
|
||||
table.apply_markup(rmap, page_map[table.tbl])
|
||||
|
||||
|
||||
@@ -21,7 +21,6 @@ from ebook_converter.ebooks.docx.fields import Fields
|
||||
from ebook_converter.ebooks.docx.settings import Settings
|
||||
from ebook_converter.ebooks.metadata.opf2 import OPFCreator
|
||||
from ebook_converter.utils.localization import canonicalize_lang, lang_as_iso639_1
|
||||
from ebook_converter.polyglot.builtins import iteritems, itervalues
|
||||
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
@@ -119,7 +118,7 @@ class Convert(object):
|
||||
|
||||
self.read_page_properties(doc)
|
||||
self.current_rels = relationships_by_id
|
||||
for wp, page_properties in iteritems(self.page_map):
|
||||
for wp, page_properties in self.page_map.items():
|
||||
self.current_page = page_properties
|
||||
if wp.tag.endswith('}p'):
|
||||
p = self.convert_p(wp)
|
||||
@@ -159,7 +158,7 @@ class Convert(object):
|
||||
self.styles.apply_contextual_spacing(paras)
|
||||
self.mark_block_runs(paras)
|
||||
|
||||
for p, wp in iteritems(self.object_map):
|
||||
for p, wp in self.object_map.items():
|
||||
if len(p) > 0 and not p.text and len(p[0]) > 0 and not p[0].text and p[0][0].get('class', None) == 'tab':
|
||||
# Paragraph uses tabs for indentation, convert to text-indent
|
||||
parent = p[0]
|
||||
@@ -189,7 +188,7 @@ class Convert(object):
|
||||
self.tables.apply_markup(self.object_map, self.page_map)
|
||||
|
||||
numbered = []
|
||||
for html_obj, obj in iteritems(self.object_map):
|
||||
for html_obj, obj in self.object_map.items():
|
||||
raw = obj.get('calibre_num_id', None)
|
||||
if raw is not None:
|
||||
lvl, num_id = raw.partition(':')[0::2]
|
||||
@@ -209,7 +208,7 @@ class Convert(object):
|
||||
|
||||
self.log.debug('Converting styles to CSS')
|
||||
self.styles.generate_classes()
|
||||
for html_obj, obj in iteritems(self.object_map):
|
||||
for html_obj, obj in self.object_map.items():
|
||||
style = self.styles.resolve(obj)
|
||||
if style is not None:
|
||||
css = style.css
|
||||
@@ -217,7 +216,7 @@ class Convert(object):
|
||||
cls = self.styles.class_name(css)
|
||||
if cls:
|
||||
html_obj.set('class', cls)
|
||||
for html_obj, css in iteritems(self.framed_map):
|
||||
for html_obj, css in self.framed_map.items():
|
||||
cls = self.styles.class_name(css)
|
||||
if cls:
|
||||
html_obj.set('class', cls)
|
||||
@@ -404,13 +403,13 @@ class Convert(object):
|
||||
doc_anchors = frozenset(self.namespace.XPath('./w:body/w:bookmarkStart[@w:name]')(doc))
|
||||
if doc_anchors:
|
||||
current_bm = set()
|
||||
rmap = {v:k for k, v in iteritems(self.object_map)}
|
||||
rmap = {v:k for k, v in self.object_map.items()}
|
||||
for p in self.namespace.descendants(doc, 'w:p', 'w:bookmarkStart[@w:name]'):
|
||||
if p.tag.endswith('}p'):
|
||||
if current_bm and p in rmap:
|
||||
para = rmap[p]
|
||||
if 'id' not in para.attrib:
|
||||
para.set('id', generate_anchor(next(iter(current_bm)), frozenset(itervalues(self.anchor_map))))
|
||||
para.set('id', generate_anchor(next(iter(current_bm)), frozenset(self.anchor_map.values())))
|
||||
for name in current_bm:
|
||||
self.anchor_map[name] = para.get('id')
|
||||
current_bm = set()
|
||||
@@ -466,10 +465,10 @@ class Convert(object):
|
||||
# _GoBack is a special bookmark inserted by Word 2010 for
|
||||
# the return to previous edit feature, we ignore it
|
||||
old_anchor = current_anchor
|
||||
self.anchor_map[anchor] = current_anchor = generate_anchor(anchor, frozenset(itervalues(self.anchor_map)))
|
||||
self.anchor_map[anchor] = current_anchor = generate_anchor(anchor, frozenset(self.anchor_map.values()))
|
||||
if old_anchor is not None:
|
||||
# The previous anchor was not applied to any element
|
||||
for a, t in tuple(iteritems(self.anchor_map)):
|
||||
for a, t in tuple(self.anchor_map.items()):
|
||||
if t == old_anchor:
|
||||
self.anchor_map[a] = current_anchor
|
||||
elif x.tag.endswith('}hyperlink'):
|
||||
@@ -477,11 +476,11 @@ class Convert(object):
|
||||
elif x.tag.endswith('}instrText') and x.text and x.text.strip().startswith('TOC '):
|
||||
old_anchor = current_anchor
|
||||
anchor = str(uuid.uuid4())
|
||||
self.anchor_map[anchor] = current_anchor = generate_anchor('toc', frozenset(itervalues(self.anchor_map)))
|
||||
self.anchor_map[anchor] = current_anchor = generate_anchor('toc', frozenset(self.anchor_map.values()))
|
||||
self.toc_anchor = current_anchor
|
||||
if old_anchor is not None:
|
||||
# The previous anchor was not applied to any element
|
||||
for a, t in tuple(iteritems(self.anchor_map)):
|
||||
for a, t in tuple(self.anchor_map.items()):
|
||||
if t == old_anchor:
|
||||
self.anchor_map[a] = current_anchor
|
||||
if current_anchor is not None:
|
||||
@@ -557,7 +556,7 @@ class Convert(object):
|
||||
|
||||
def resolve_links(self):
|
||||
self.resolved_link_map = {}
|
||||
for hyperlink, spans in iteritems(self.link_map):
|
||||
for hyperlink, spans in self.link_map.items():
|
||||
relationships_by_id = self.link_source_map[hyperlink]
|
||||
span = spans[0]
|
||||
if len(spans) > 1:
|
||||
@@ -583,7 +582,7 @@ class Convert(object):
|
||||
# hrefs that point nowhere give epubcheck a hernia. The element
|
||||
# should be styled explicitly by Word anyway.
|
||||
# span.set('href', '#')
|
||||
rmap = {v:k for k, v in iteritems(self.object_map)}
|
||||
rmap = {v:k for k, v in self.object_map.items()}
|
||||
for hyperlink, runs in self.fields.hyperlink_fields:
|
||||
spans = [rmap[r] for r in runs if r in rmap]
|
||||
if not spans:
|
||||
@@ -743,7 +742,7 @@ class Convert(object):
|
||||
|
||||
if not self.block_runs:
|
||||
return
|
||||
rmap = {v:k for k, v in iteritems(self.object_map)}
|
||||
rmap = {v:k for k, v in self.object_map.items()}
|
||||
for border_style, blocks in self.block_runs:
|
||||
paras = tuple(rmap[p] for p in blocks)
|
||||
for p in paras:
|
||||
|
||||
@@ -5,7 +5,6 @@ from lxml.etree import tostring
|
||||
|
||||
from ebook_converter.ebooks.metadata.toc import TOC
|
||||
from ebook_converter.ebooks.oeb.polish.toc import elem_to_toc_text
|
||||
from ebook_converter.polyglot.builtins import iteritems
|
||||
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
@@ -21,7 +20,7 @@ def from_headings(body, log, namespace, num_levels=3):
|
||||
level_item_map = {i:frozenset(
|
||||
x for x in all_heading_nodes if int(x.get('data-heading-level')) == i)
|
||||
for i in range(1, num_levels+1)}
|
||||
item_level_map = {e:i for i, elems in iteritems(level_item_map) for e in elems}
|
||||
item_level_map = {e:i for i, elems in level_item_map.items() for e in elems}
|
||||
|
||||
idcount = count()
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ from ebook_converter.ebooks.pdf.render.common import PAPER_SIZES
|
||||
from ebook_converter.utils.date import utcnow
|
||||
from ebook_converter.utils.localization import canonicalize_lang, lang_as_iso639_1
|
||||
from ebook_converter.utils.zipfile import ZipFile
|
||||
from ebook_converter.polyglot.builtins import iteritems, native_string_type
|
||||
from ebook_converter.polyglot.builtins import native_string_type
|
||||
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
@@ -52,7 +52,7 @@ def create_skeleton(opts, namespaces=None):
|
||||
|
||||
def w(x):
|
||||
return '{%s}%s' % (namespaces['w'], x)
|
||||
dn = {k:v for k, v in iteritems(namespaces) if k in {'w', 'r', 'm', 've', 'o', 'wp', 'w10', 'wne', 'a', 'pic'}}
|
||||
dn = {k:v for k, v in namespaces.items() if k in {'w', 'r', 'm', 've', 'o', 'wp', 'w10', 'wne', 'a', 'pic'}}
|
||||
E = ElementMaker(namespace=dn['w'], nsmap=dn)
|
||||
doc = E.document()
|
||||
body = E.body()
|
||||
@@ -70,7 +70,7 @@ def create_skeleton(opts, namespaces=None):
|
||||
E.docGrid(**{w('linePitch'):"360"}),
|
||||
))
|
||||
|
||||
dn = {k:v for k, v in iteritems(namespaces) if k in tuple('wra') + ('wp',)}
|
||||
dn = {k:v for k, v in namespaces.items() if k in tuple('wra') + ('wp',)}
|
||||
E = ElementMaker(namespace=dn['w'], nsmap=dn)
|
||||
styles = E.styles(
|
||||
E.docDefaults(
|
||||
@@ -117,12 +117,11 @@ class DocumentRelationships(object):
|
||||
def __init__(self, namespace):
|
||||
self.rmap = {}
|
||||
self.namespace = namespace
|
||||
for typ, target in iteritems({
|
||||
namespace.names['STYLES']: 'styles.xml',
|
||||
namespace.names['NUMBERING']: 'numbering.xml',
|
||||
namespace.names['WEB_SETTINGS']: 'webSettings.xml',
|
||||
namespace.names['FONTS']: 'fontTable.xml',
|
||||
}):
|
||||
for typ, target in {namespace.names['STYLES']: 'styles.xml',
|
||||
namespace.names['NUMBERING']: 'numbering.xml',
|
||||
namespace.names['WEB_SETTINGS']: 'webSettings.xml',
|
||||
namespace.names['FONTS']: 'fontTable.xml',
|
||||
}.items():
|
||||
self.add_relationship(target, typ)
|
||||
|
||||
def get_relationship_id(self, target, rtype, target_mode=None):
|
||||
@@ -142,7 +141,7 @@ class DocumentRelationships(object):
|
||||
namespaces = self.namespace.namespaces
|
||||
E = ElementMaker(namespace=namespaces['pr'], nsmap={None:namespaces['pr']})
|
||||
relationships = E.Relationships()
|
||||
for (target, rtype, target_mode), rid in iteritems(self.rmap):
|
||||
for (target, rtype, target_mode), rid in self.rmap.items():
|
||||
r = E.Relationship(Id=rid, Type=rtype, Target=target)
|
||||
if target_mode is not None:
|
||||
r.set('TargetMode', target_mode)
|
||||
@@ -169,7 +168,7 @@ class DOCX(object):
|
||||
def contenttypes(self):
|
||||
E = ElementMaker(namespace=self.namespace.namespaces['ct'], nsmap={None:self.namespace.namespaces['ct']})
|
||||
types = E.Types()
|
||||
for partname, mt in iteritems({
|
||||
for partname, mt in {
|
||||
"/word/footnotes.xml": "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml",
|
||||
"/word/document.xml": "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml",
|
||||
"/word/numbering.xml": "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml",
|
||||
@@ -181,15 +180,13 @@ class DOCX(object):
|
||||
"/word/webSettings.xml": "application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml",
|
||||
"/docProps/core.xml": "application/vnd.openxmlformats-package.core-properties+xml",
|
||||
"/docProps/app.xml": "application/vnd.openxmlformats-officedocument.extended-properties+xml",
|
||||
}):
|
||||
}.items():
|
||||
types.append(E.Override(PartName=partname, ContentType=mt))
|
||||
added = {'png', 'gif', 'jpeg', 'jpg', 'svg', 'xml'}
|
||||
for ext in added:
|
||||
types.append(E.Default(Extension=ext, ContentType=guess_type('a.'+ext)[0]))
|
||||
for ext, mt in iteritems({
|
||||
"rels": "application/vnd.openxmlformats-package.relationships+xml",
|
||||
"odttf": "application/vnd.openxmlformats-officedocument.obfuscatedFont",
|
||||
}):
|
||||
for ext, mt in {"rels": "application/vnd.openxmlformats-package.relationships+xml",
|
||||
"odttf": "application/vnd.openxmlformats-officedocument.obfuscatedFont"}.items():
|
||||
added.add(ext)
|
||||
types.append(E.Default(Extension=ext, ContentType=mt))
|
||||
for fname in self.images:
|
||||
@@ -267,9 +264,9 @@ class DOCX(object):
|
||||
zf.writestr('word/fontTable.xml', xml2str(self.font_table))
|
||||
zf.writestr('word/_rels/document.xml.rels', self.document_relationships.serialize())
|
||||
zf.writestr('word/_rels/fontTable.xml.rels', xml2str(self.embedded_fonts))
|
||||
for fname, data_getter in iteritems(self.images):
|
||||
for fname, data_getter in self.images.items():
|
||||
zf.writestr(fname, data_getter())
|
||||
for fname, data in iteritems(self.fonts):
|
||||
for fname, data in self.fonts.items():
|
||||
zf.writestr(fname, data)
|
||||
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@ import os
|
||||
import posixpath
|
||||
from collections import namedtuple
|
||||
from functools import partial
|
||||
from ebook_converter.polyglot.builtins import iteritems, itervalues
|
||||
|
||||
from lxml import etree
|
||||
|
||||
@@ -127,7 +126,7 @@ class ImagesManager(object):
|
||||
if fake_margins:
|
||||
# DOCX does not support setting margins for inline images, so we
|
||||
# fake it by using effect extents to simulate margins
|
||||
makeelement(parent, 'wp:effectExtent', **{k[-1].lower():v for k, v in iteritems(get_image_margins(style))})
|
||||
makeelement(parent, 'wp:effectExtent', **{k[-1].lower():v for k, v in get_image_margins(style).items()})
|
||||
else:
|
||||
makeelement(parent, 'wp:effectExtent', l='0', r='0', t='0', b='0')
|
||||
if floating is not None:
|
||||
@@ -171,7 +170,7 @@ class ImagesManager(object):
|
||||
return fname
|
||||
|
||||
def serialize(self, images_map):
|
||||
for img in itervalues(self.images):
|
||||
for img in self.images.values():
|
||||
images_map['word/' + img.fname] = partial(self.get_data, img.item)
|
||||
|
||||
def get_data(self, item):
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
from collections import defaultdict
|
||||
from operator import attrgetter
|
||||
|
||||
from ebook_converter.polyglot.builtins import iteritems, itervalues
|
||||
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
__copyright__ = '2015, Kovid Goyal <kovid at kovidgoyal.net>'
|
||||
@@ -60,7 +58,7 @@ class NumberingDefinition(object):
|
||||
items_for_level = defaultdict(list)
|
||||
container_for_level = {}
|
||||
type_for_level = {}
|
||||
for ilvl, items in iteritems(self.level_map):
|
||||
for ilvl, items in self.level_map.items():
|
||||
for container, list_tag, block, list_type, tag_style in items:
|
||||
items_for_level[ilvl].append(list_tag)
|
||||
container_for_level[ilvl] = container
|
||||
@@ -74,7 +72,7 @@ class NumberingDefinition(object):
|
||||
return hash(self.levels)
|
||||
|
||||
def link_blocks(self):
|
||||
for ilvl, items in iteritems(self.level_map):
|
||||
for ilvl, items in self.level_map.items():
|
||||
for container, list_tag, block, list_type, tag_style in items:
|
||||
block.numbering_id = (self.num_id + 1, ilvl)
|
||||
|
||||
@@ -146,16 +144,16 @@ class ListsManager(object):
|
||||
ilvl = len(container_tags) - 1
|
||||
l.level_map[ilvl].append((container_tags[0], list_tag, block, list_type, tag_style))
|
||||
|
||||
[nd.finalize() for nd in itervalues(lists)]
|
||||
[nd.finalize() for nd in lists.values()]
|
||||
definitions = {}
|
||||
for defn in itervalues(lists):
|
||||
for defn in lists.values():
|
||||
try:
|
||||
defn = definitions[defn]
|
||||
except KeyError:
|
||||
definitions[defn] = defn
|
||||
defn.num_id = len(definitions) - 1
|
||||
defn.link_blocks()
|
||||
self.definitions = sorted(itervalues(definitions), key=attrgetter('num_id'))
|
||||
self.definitions = sorted(definitions.values(), key=attrgetter('num_id'))
|
||||
|
||||
def serialize(self, parent):
|
||||
for defn in self.definitions:
|
||||
|
||||
@@ -7,7 +7,6 @@ from lxml import etree
|
||||
from ebook_converter.ebooks import parse_css_length
|
||||
from ebook_converter.ebooks.docx.writer.utils import convert_color, int_or_zero
|
||||
from ebook_converter.utils.localization import lang_as_iso639_1
|
||||
from ebook_converter.polyglot.builtins import iteritems
|
||||
from ebook_converter.tinycss.css21 import CSS21Parser
|
||||
|
||||
|
||||
@@ -155,7 +154,7 @@ class DOCXStyle(object):
|
||||
getattr(self, x) for x in self.ALL_PROPS))
|
||||
|
||||
def makeelement(self, parent, name, **attrs):
|
||||
return parent.makeelement(self.w(name), **{self.w(k):v for k, v in iteritems(attrs)})
|
||||
return parent.makeelement(self.w(name), **{self.w(k):v for k, v in attrs.items()})
|
||||
|
||||
def __hash__(self):
|
||||
return self._hash
|
||||
@@ -362,7 +361,7 @@ class DescendantTextStyle(object):
|
||||
p = []
|
||||
|
||||
def add(name, **props):
|
||||
p.append((name, frozenset(iteritems(props))))
|
||||
p.append((name, frozenset(props.items())))
|
||||
|
||||
def vals(attr):
|
||||
return getattr(parent_style, attr), getattr(child_style, attr)
|
||||
@@ -559,7 +558,7 @@ class BlockStyle(DOCXStyle):
|
||||
def serialize_properties(self, pPr, normal_style):
|
||||
makeelement, w = self.makeelement, self.w
|
||||
spacing = makeelement(pPr, 'spacing')
|
||||
for edge, attr in iteritems({'top':'before', 'bottom':'after'}):
|
||||
for edge, attr in {'top':'before', 'bottom':'after'}.items():
|
||||
getter = attrgetter('css_margin_' + edge)
|
||||
css_val, css_unit = parse_css_length(getter(self))
|
||||
if css_unit in ('em', 'ex'):
|
||||
@@ -693,7 +692,7 @@ class StylesManager(object):
|
||||
|
||||
counts = Counter()
|
||||
smap = {}
|
||||
for (bs, rs), blocks in iteritems(used_pairs):
|
||||
for (bs, rs), blocks in used_pairs.items():
|
||||
s = CombinedStyle(bs, rs, blocks, self.namespace)
|
||||
smap[(bs, rs)] = s
|
||||
counts[s] += sum(1 for b in blocks if not b.is_empty())
|
||||
|
||||
@@ -2,7 +2,6 @@ from collections import namedtuple
|
||||
|
||||
from ebook_converter.ebooks.docx.writer.utils import convert_color
|
||||
from ebook_converter.ebooks.docx.writer.styles import read_css_block_borders as rcbb, border_edges
|
||||
from ebook_converter.polyglot.builtins import iteritems
|
||||
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
@@ -121,7 +120,7 @@ class Cell(object):
|
||||
makeelement(tcPr, 'w:shd', w_val="clear", w_color="auto", w_fill=bc)
|
||||
|
||||
b = makeelement(tcPr, 'w:tcBorders', append=False)
|
||||
for edge, border in iteritems(self.borders):
|
||||
for edge, border in self.borders.items():
|
||||
if border is not None and border.width > 0 and border.style != 'none':
|
||||
makeelement(b, 'w:' + edge, w_val=border.style, w_sz=str(border.width), w_color=border.color)
|
||||
if len(b) > 0:
|
||||
|
||||
Reference in New Issue
Block a user