mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
KG changes
This commit is contained in:
commit
535005a17a
@ -85,6 +85,32 @@ extern "C" {
|
|||||||
return ans;
|
return ans;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
pdfreflow_get_numpages(PyObject *self, PyObject *args) {
|
||||||
|
char *pdfdata;
|
||||||
|
int num = 0;
|
||||||
|
Py_ssize_t size;
|
||||||
|
map<string,string> info;
|
||||||
|
|
||||||
|
if (!PyArg_ParseTuple(args, "s#", &pdfdata, &size))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
Reflow *reflow = NULL;
|
||||||
|
try {
|
||||||
|
reflow = new Reflow(pdfdata, size);
|
||||||
|
num = reflow->numpages();
|
||||||
|
} catch (std::exception &e) {
|
||||||
|
PyErr_SetString(PyExc_RuntimeError, e.what()); delete reflow; return NULL;
|
||||||
|
} catch (...) {
|
||||||
|
PyErr_SetString(PyExc_RuntimeError,
|
||||||
|
"Unknown exception raised while getting metadata from PDF"); delete reflow; return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
delete reflow; reflow = NULL;
|
||||||
|
return Py_BuildValue("i", num);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
pdfreflow_set_metadata(PyObject *self, PyObject *args) {
|
pdfreflow_set_metadata(PyObject *self, PyObject *args) {
|
||||||
char *pdfdata;
|
char *pdfdata;
|
||||||
@ -144,6 +170,10 @@ extern "C" {
|
|||||||
"get_metadata(info_dict)\n\n"
|
"get_metadata(info_dict)\n\n"
|
||||||
"Set metadata in the specified PDF. Currently broken."
|
"Set metadata in the specified PDF. Currently broken."
|
||||||
},
|
},
|
||||||
|
{"get_numpages", pdfreflow_get_numpages, METH_VARARGS,
|
||||||
|
"get_numpages(pdf_data)\n\n"
|
||||||
|
"Get number of pages in the PDF."
|
||||||
|
},
|
||||||
|
|
||||||
{NULL, NULL, 0, NULL}
|
{NULL, NULL, 0, NULL}
|
||||||
};
|
};
|
||||||
|
@ -1041,34 +1041,34 @@ class ODF2XHTML(handler.ContentHandler):
|
|||||||
of <text:list> elements on the tagstack.
|
of <text:list> elements on the tagstack.
|
||||||
"""
|
"""
|
||||||
name = attrs.get( (TEXTNS,'style-name') )
|
name = attrs.get( (TEXTNS,'style-name') )
|
||||||
|
level = self.tagstack.count_tags(tag) + 1
|
||||||
if name:
|
if name:
|
||||||
name = name.replace(".","_")
|
name = name.replace(".","_")
|
||||||
level = 1
|
|
||||||
else:
|
else:
|
||||||
# FIXME: If a list is contained in a table cell or text box,
|
# FIXME: If a list is contained in a table cell or text box,
|
||||||
# the list level must return to 1, even though the table or
|
# the list level must return to 1, even though the table or
|
||||||
# textbox itself may be nested within another list.
|
# textbox itself may be nested within another list.
|
||||||
level = self.tagstack.count_tags(tag) + 1
|
|
||||||
name = self.tagstack.rfindattr( (TEXTNS,'style-name') )
|
name = self.tagstack.rfindattr( (TEXTNS,'style-name') )
|
||||||
|
list_class = "%s_%d" % (name, level)
|
||||||
if self.generate_css:
|
if self.generate_css:
|
||||||
self.opentag('%s' % self.listtypes.get(name), {'class':"%s_%d" % (name, level) })
|
self.opentag('%s' % self.listtypes.get(list_class,'UL'), {'class': list_class })
|
||||||
else:
|
else:
|
||||||
self.opentag('%s' % self.listtypes.get(name))
|
self.opentag('%s' % self.listtypes.get(list_class,'UL'))
|
||||||
self.purgedata()
|
self.purgedata()
|
||||||
|
|
||||||
def e_text_list(self, tag, attrs):
|
def e_text_list(self, tag, attrs):
|
||||||
self.writedata()
|
self.writedata()
|
||||||
name = attrs.get( (TEXTNS,'style-name') )
|
name = attrs.get( (TEXTNS,'style-name') )
|
||||||
|
level = self.tagstack.count_tags(tag) + 1
|
||||||
if name:
|
if name:
|
||||||
name = name.replace(".","_")
|
name = name.replace(".","_")
|
||||||
level = 1
|
|
||||||
else:
|
else:
|
||||||
# FIXME: If a list is contained in a table cell or text box,
|
# FIXME: If a list is contained in a table cell or text box,
|
||||||
# the list level must return to 1, even though the table or
|
# the list level must return to 1, even though the table or
|
||||||
# textbox itself may be nested within another list.
|
# textbox itself may be nested within another list.
|
||||||
level = self.tagstack.count_tags(tag) + 1
|
|
||||||
name = self.tagstack.rfindattr( (TEXTNS,'style-name') )
|
name = self.tagstack.rfindattr( (TEXTNS,'style-name') )
|
||||||
self.closetag(self.listtypes.get(name))
|
list_class = "%s_%d" % (name, level)
|
||||||
|
self.closetag(self.listtypes.get(list_class,'UL'))
|
||||||
self.purgedata()
|
self.purgedata()
|
||||||
|
|
||||||
def s_text_list_item(self, tag, attrs):
|
def s_text_list_item(self, tag, attrs):
|
||||||
@ -1086,9 +1086,10 @@ class ODF2XHTML(handler.ContentHandler):
|
|||||||
the available glyphs
|
the available glyphs
|
||||||
"""
|
"""
|
||||||
name = self.tagstack.rfindattr( (STYLENS,'name') )
|
name = self.tagstack.rfindattr( (STYLENS,'name') )
|
||||||
self.listtypes[name] = 'ul'
|
|
||||||
level = attrs[(TEXTNS,'level')]
|
level = attrs[(TEXTNS,'level')]
|
||||||
self.prevstyle = self.currentstyle
|
self.prevstyle = self.currentstyle
|
||||||
|
list_class = "%s_%s" % (name, level)
|
||||||
|
self.listtypes[list_class] = 'ul'
|
||||||
self.currentstyle = ".%s_%s" % ( name.replace(".","_"), level)
|
self.currentstyle = ".%s_%s" % ( name.replace(".","_"), level)
|
||||||
self.stylestack.append(self.currentstyle)
|
self.stylestack.append(self.currentstyle)
|
||||||
self.styledict[self.currentstyle] = {}
|
self.styledict[self.currentstyle] = {}
|
||||||
@ -1103,11 +1104,12 @@ class ODF2XHTML(handler.ContentHandler):
|
|||||||
|
|
||||||
def s_text_list_level_style_number(self, tag, attrs):
|
def s_text_list_level_style_number(self, tag, attrs):
|
||||||
name = self.tagstack.stackparent()[(STYLENS,'name')]
|
name = self.tagstack.stackparent()[(STYLENS,'name')]
|
||||||
self.listtypes[name] = 'ol'
|
|
||||||
level = attrs[(TEXTNS,'level')]
|
level = attrs[(TEXTNS,'level')]
|
||||||
num_format = attrs.get( (STYLENS,'name'),"1")
|
num_format = attrs.get( (STYLENS,'name'),"1")
|
||||||
|
list_class = "%s_%s" % (name, level)
|
||||||
self.prevstyle = self.currentstyle
|
self.prevstyle = self.currentstyle
|
||||||
self.currentstyle = ".%s_%s" % ( name.replace(".","_"), level)
|
self.currentstyle = ".%s_%s" % ( name.replace(".","_"), level)
|
||||||
|
self.listtypes[list_class] = 'ol'
|
||||||
self.stylestack.append(self.currentstyle)
|
self.stylestack.append(self.currentstyle)
|
||||||
self.styledict[self.currentstyle] = {}
|
self.styledict[self.currentstyle] = {}
|
||||||
if num_format == "1": listtype = "decimal"
|
if num_format == "1": listtype = "decimal"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user