Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
18e70f3
upload v1.14.0
JorjMcKie Nov 9, 2018
3f88440
update documentation to v1.14.0
JorjMcKie Nov 9, 2018
be4bf3a
.travis.yml: try xz archive
JorjMcKie Nov 9, 2018
705497f
Update .travis.yml
JorjMcKie Nov 9, 2018
c767c36
try fix mupdf download 1
JorjMcKie Nov 10, 2018
0ab2625
try another mupdf download
JorjMcKie Nov 10, 2018
c30ecf9
try alternative download
JorjMcKie Nov 10, 2018
1e48610
Update .travis.yml
JorjMcKie Nov 11, 2018
48324bf
Update .travis.yml
JorjMcKie Nov 11, 2018
3642f6a
next try
JorjMcKie Nov 11, 2018
b9b1658
Update .travis.yml
JorjMcKie Nov 11, 2018
d983254
yet another try
JorjMcKie Nov 11, 2018
48ad3c8
Update .travis.yml
JorjMcKie Nov 11, 2018
a133a59
Update .travis.yml
JorjMcKie Nov 11, 2018
34cc715
Update .travis.yml
JorjMcKie Nov 12, 2018
23ef882
Merge branch 'master' of https://github.com/JorjMcKie/py-mupdf
JorjMcKie Nov 12, 2018
01b8c4b
Update .travis.yml
JorjMcKie Nov 12, 2018
989c6d9
avoid use of FLT_EPSILON
JorjMcKie Nov 12, 2018
6429fb9
try tar.gz after re-compressing
JorjMcKie Nov 12, 2018
5732662
Update .travis.yml
JorjMcKie Nov 12, 2018
83d1e70
Update .travis.yml
JorjMcKie Nov 12, 2018
d9c84de
Update .travis.yml
JorjMcKie Nov 12, 2018
12f5724
apply corrections
JorjMcKie Nov 13, 2018
faa1b9d
Update .travis.yml
JorjMcKie Nov 13, 2018
c3c7dde
.travis.yml: gbu99 in linux only
JorjMcKie Nov 13, 2018
c9294ff
upload v1.14.0 docu and corrected pdf-device.c (MuPDF)
JorjMcKie Nov 14, 2018
5939401
try redirection of stderr & stdout
JorjMcKie Nov 15, 2018
5be2eef
redirecting stderr of MuPDF
JorjMcKie Nov 16, 2018
f2fbee4
Merge branch 'master' into master
JorjMcKie Nov 16, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
redirecting stderr of MuPDF
  • Loading branch information
JorjMcKie committed Nov 16, 2018
commit 5be2eefad407f1a45a7536201f37ce1eaac40383
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

Release date: November 15, 2018

**Travis-CI:** [![Build Status](https://travis-ci.org/rk700/PyMuPDF.svg?branch=master)](https://travis-ci.org/rk700/PyMuPDF)
**Travis-CI:** [![Build Status](https://travis-ci.org/JorjMcKie/py-mupdf.svg?branch=master)](https://travis-ci.org/JorjMcKie/py-mupdf)

On **[PyPI](https://pypi.org/project/PyMuPDF)** since August 2016: [![](https://pepy.tech/badge/pymupdf)](https://pepy.tech/project/pymupdf)

Expand Down Expand Up @@ -32,14 +32,14 @@ The platform tag for Linux is `manylinux1_x86_64`, which makes these wheels usab

On other operating systems you need to generate PyMuPDF yourself. Before you can do this, you must download and generate MuPDF. This process depends very much on your system. For most platforms, the MuPDF source contains prepared procedures for achieving this.

Be sure to download the official MuPDF source release from [here](https://mupdf.com/downloads). Do **not use** MuPDF's [GitHub repo](https://github.com/ArtifexSoftware/mupdf). It contains their current **development source**, which is **not compatible** with the published PyMuPDF version most of the time.
Be sure to download the official MuPDF source release from [here](https://mupdf.com/downloads). Do **not use** MuPDF's [GitHub repo](https://github.com/ArtifexSoftware/mupdf). It contains their current **development source**, which is **not compatible** with this PyMuPDF version most of the time.

Once this is done, adjust directories in ``setup.py`` and the rest should be as easy as running the usual ``python setup.py install``.
Once this is done, adjust directories in ``setup.py`` and run ``python setup.py install``.

The following sections contain some platform-specific comments.
The following sections contain further comments for some platforms.

## Ubuntu
One of our users (thanks to **@gileadslostson**!) has documented his MuPDF installation experience from sources in this [Wiki page](https://github.com/rk700/PyMuPDF/wiki/Experience-from-an-Ubuntu-installation).
Our users (thanks to **@gileadslostson** and **@jbarlow83**!) have documented their MuPDF installation experiences from sources in this [Wiki page](https://github.com/rk700/PyMuPDF/wiki/Experience-from-an-Ubuntu-installation).

## OSX
First, install the MuPDF headers and libraries, which are provided by mupdf-tools: ``brew install mupdf-tools``.
Expand Down
24 changes: 18 additions & 6 deletions fitz/fitz.i
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,11 @@ fz_set_stderr(gctx, JM_fitz_stderr);
if (JM_fitz_stderr && JM_fitz_stdout)
{;}
else
PySys_WriteStdout("error redefining stdout/stderr!\n");
PySys_WriteStdout("error redirecting stdout/stderr!\n");

JM_error_log = PyList_New(0);
JM_output_log = PyList_New(0);

//-----------------------------------------------------------------------------
// STOP redirect stdout/stderr
//-----------------------------------------------------------------------------
Expand Down Expand Up @@ -5987,17 +5991,25 @@ struct Tools
return JM_fitz_config();
}

void _store_debug()
{
fz_debug_store(gctx);
}

%feature("autodoc","Empty the glyph cache.") glyph_cache_empty;
void glyph_cache_empty()
{
fz_purge_glyph_cache(gctx);
}

%pythoncode%{@property%}
PyObject *fitz_stderr()
{
return PyUnicode_Join(Py_BuildValue("s", ""), JM_error_log);
}

%feature("autodoc","Empty fitz error log.") empty_error_log;
void fitz_stderr_reset()
{
Py_CLEAR(JM_error_log);
JM_error_log = PyList_New(0);
}

PyObject *transform_rect(PyObject *rect, PyObject *matrix)
{
return JM_py_from_rect(fz_transform_rect(JM_rect_from_py(rect), JM_matrix_from_py(matrix)));
Expand Down
20 changes: 13 additions & 7 deletions fitz/fitz.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,8 +106,8 @@ class _object:

VersionFitz = "1.14.0"
VersionBind = "1.14.0"
VersionDate = "2018-11-15 05:11:14"
version = (VersionBind, VersionFitz, "20181115051114")
VersionDate = "2018-11-16 05:14:22"
version = (VersionBind, VersionFitz, "20181116051422")


class Matrix():
Expand Down Expand Up @@ -4089,15 +4089,21 @@ def fitz_config(self):
return _fitz.Tools_fitz_config(self)


def _store_debug(self):
"""_store_debug(self)"""
return _fitz.Tools__store_debug(self)


def glyph_cache_empty(self):
"""Empty the glyph cache."""
return _fitz.Tools_glyph_cache_empty(self)

@property

def fitz_stderr(self):
"""fitz_stderr(self) -> PyObject *"""
return _fitz.Tools_fitz_stderr(self)


def fitz_stderr_reset(self):
"""fitz_stderr_reset(self)"""
return _fitz.Tools_fitz_stderr_reset(self)


def transform_rect(self, rect, matrix):
"""transform_rect(self, rect, matrix) -> PyObject *"""
Expand Down
80 changes: 57 additions & 23 deletions fitz/fitz_wrap.c
Original file line number Diff line number Diff line change
Expand Up @@ -4086,26 +4086,29 @@ struct fz_store_s
//-----------------------------------------------------------------------------
// START redirect stdout/stderr
//-----------------------------------------------------------------------------
PyObject *JM_error_log;
PyObject *JM_output_log;

static void
JM_write_stdout(fz_context *ctx, void *opaque, const void *buffer, size_t count)
{
if (!buffer || !count) return;
PyObject *c = Py_BuildValue("s#", (char *) buffer, (int) count);
char *text = JM_Python_str_AsChar(c);
PySys_WriteStdout("%s", text);
JM_Python_str_DelForPy3(text);
Py_DECREF(c);
PyObject *c = Py_BuildValue("s#", (const char *) buffer, (Py_ssize_t) count);
if (!c || c == NONE) return;
PyList_Append(JM_output_log, c);
Py_CLEAR(c);
return;
}

static void
JM_write_stderr(fz_context *ctx, void *opaque, const void *buffer, size_t count)
{
if (!buffer || !count) return;
PyObject *c = Py_BuildValue("s#", (char *) buffer, (int) count);
char *text = JM_Python_str_AsChar(c);
PySys_WriteStderr("%s", text);
JM_Python_str_DelForPy3(text);
Py_DECREF(c);
PyObject *c = Py_BuildValue("s#", (const char *) buffer, (Py_ssize_t) count);
if (!c || c == NONE) return;
PyList_Append(JM_error_log, c);
Py_CLEAR(c);
return;
}

fz_output *JM_fitz_stdout;
Expand Down Expand Up @@ -13341,12 +13344,16 @@ SWIGINTERN size_t Tools_store_maxsize(struct Tools *self){
SWIGINTERN PyObject *Tools_fitz_config(struct Tools *self){
return JM_fitz_config();
}
SWIGINTERN void Tools__store_debug(struct Tools *self){
fz_debug_store(gctx);
}
SWIGINTERN void Tools_glyph_cache_empty(struct Tools *self){
fz_purge_glyph_cache(gctx);
}
SWIGINTERN PyObject *Tools_fitz_stderr(struct Tools *self){
return PyUnicode_Join(Py_BuildValue("s", ""), JM_error_log);
}
SWIGINTERN void Tools_fitz_stderr_reset(struct Tools *self){
Py_CLEAR(JM_error_log);
JM_error_log = PyList_New(0);
}
SWIGINTERN PyObject *Tools_transform_rect(struct Tools *self,PyObject *rect,PyObject *matrix){
return JM_py_from_rect(fz_transform_rect(JM_rect_from_py(rect), JM_matrix_from_py(matrix)));
}
Expand Down Expand Up @@ -20956,41 +20963,63 @@ SWIGINTERN PyObject *_wrap_Tools_fitz_config(PyObject *SWIGUNUSEDPARM(self), PyO
}


SWIGINTERN PyObject *_wrap_Tools__store_debug(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
SWIGINTERN PyObject *_wrap_Tools_glyph_cache_empty(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
struct Tools *arg1 = (struct Tools *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;

if (!PyArg_ParseTuple(args,(char *)"O:Tools__store_debug",&obj0)) SWIG_fail;
if (!PyArg_ParseTuple(args,(char *)"O:Tools_glyph_cache_empty",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_Tools, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Tools__store_debug" "', argument " "1"" of type '" "struct Tools *""'");
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Tools_glyph_cache_empty" "', argument " "1"" of type '" "struct Tools *""'");
}
arg1 = (struct Tools *)(argp1);
Tools__store_debug(arg1);
Tools_glyph_cache_empty(arg1);
resultobj = SWIG_Py_Void();
return resultobj;
fail:
return NULL;
}


SWIGINTERN PyObject *_wrap_Tools_glyph_cache_empty(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
SWIGINTERN PyObject *_wrap_Tools_fitz_stderr(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
struct Tools *arg1 = (struct Tools *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;
PyObject *result = 0 ;

if (!PyArg_ParseTuple(args,(char *)"O:Tools_glyph_cache_empty",&obj0)) SWIG_fail;
if (!PyArg_ParseTuple(args,(char *)"O:Tools_fitz_stderr",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_Tools, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Tools_glyph_cache_empty" "', argument " "1"" of type '" "struct Tools *""'");
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Tools_fitz_stderr" "', argument " "1"" of type '" "struct Tools *""'");
}
arg1 = (struct Tools *)(argp1);
Tools_glyph_cache_empty(arg1);
result = (PyObject *)Tools_fitz_stderr(arg1);
resultobj = result;
return resultobj;
fail:
return NULL;
}


SWIGINTERN PyObject *_wrap_Tools_fitz_stderr_reset(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
struct Tools *arg1 = (struct Tools *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;

if (!PyArg_ParseTuple(args,(char *)"O:Tools_fitz_stderr_reset",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_Tools, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Tools_fitz_stderr_reset" "', argument " "1"" of type '" "struct Tools *""'");
}
arg1 = (struct Tools *)(argp1);
Tools_fitz_stderr_reset(arg1);
resultobj = SWIG_Py_Void();
return resultobj;
fail:
Expand Down Expand Up @@ -21323,8 +21352,9 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"Tools_store_size", _wrap_Tools_store_size, METH_VARARGS, (char *)"Current store size."},
{ (char *)"Tools_store_maxsize", _wrap_Tools_store_maxsize, METH_VARARGS, (char *)"Maximum store size."},
{ (char *)"Tools_fitz_config", _wrap_Tools_fitz_config, METH_VARARGS, (char *)"Show configuration data."},
{ (char *)"Tools__store_debug", _wrap_Tools__store_debug, METH_VARARGS, (char *)"Tools__store_debug(self)"},
{ (char *)"Tools_glyph_cache_empty", _wrap_Tools_glyph_cache_empty, METH_VARARGS, (char *)"Empty the glyph cache."},
{ (char *)"Tools_fitz_stderr", _wrap_Tools_fitz_stderr, METH_VARARGS, (char *)"Tools_fitz_stderr(self) -> PyObject *"},
{ (char *)"Tools_fitz_stderr_reset", _wrap_Tools_fitz_stderr_reset, METH_VARARGS, (char *)"Tools_fitz_stderr_reset(self)"},
{ (char *)"Tools_transform_rect", _wrap_Tools_transform_rect, METH_VARARGS, (char *)"Tools_transform_rect(self, rect, matrix) -> PyObject *"},
{ (char *)"Tools_invert_matrix", _wrap_Tools_invert_matrix, METH_VARARGS, (char *)"Tools_invert_matrix(self, matrix) -> PyObject *"},
{ (char *)"new_Tools", _wrap_new_Tools, METH_VARARGS, (char *)"new_Tools() -> Tools"},
Expand Down Expand Up @@ -22118,7 +22148,11 @@ SWIG_init(void) {
;
}
else
PySys_WriteStdout("error redefining stdout/stderr!\n");
PySys_WriteStdout("error redirecting stdout/stderr!\n");

JM_error_log = PyList_New(0);
JM_output_log = PyList_New(0);

//-----------------------------------------------------------------------------
// STOP redirect stdout/stderr
//-----------------------------------------------------------------------------
Expand Down
23 changes: 13 additions & 10 deletions fitz/helper-other.i
Original file line number Diff line number Diff line change
Expand Up @@ -744,26 +744,29 @@ struct fz_store_s
//-----------------------------------------------------------------------------
// START redirect stdout/stderr
//-----------------------------------------------------------------------------
PyObject *JM_error_log;
PyObject *JM_output_log;

static void
JM_write_stdout(fz_context *ctx, void *opaque, const void *buffer, size_t count)
{
if (!buffer || !count) return;
PyObject *c = Py_BuildValue("s#", (char *) buffer, (int) count);
char *text = JM_Python_str_AsChar(c);
PySys_WriteStdout("%s", text);
JM_Python_str_DelForPy3(text);
Py_DECREF(c);
PyObject *c = Py_BuildValue("s#", (const char *) buffer, (Py_ssize_t) count);
if (!c || c == NONE) return;
PyList_Append(JM_output_log, c);
Py_CLEAR(c);
return;
}

static void
JM_write_stderr(fz_context *ctx, void *opaque, const void *buffer, size_t count)
{
if (!buffer || !count) return;
PyObject *c = Py_BuildValue("s#", (char *) buffer, (int) count);
char *text = JM_Python_str_AsChar(c);
PySys_WriteStderr("%s", text);
JM_Python_str_DelForPy3(text);
Py_DECREF(c);
PyObject *c = Py_BuildValue("s#", (const char *) buffer, (Py_ssize_t) count);
if (!c || c == NONE) return;
PyList_Append(JM_error_log, c);
Py_CLEAR(c);
return;
}

fz_output *JM_fitz_stdout;
Expand Down
4 changes: 2 additions & 2 deletions fitz/version.i
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
%pythoncode %{
VersionFitz = "1.14.0"
VersionBind = "1.14.0"
VersionDate = "2018-11-15 05:11:14"
version = (VersionBind, VersionFitz, "20181115051114")
VersionDate = "2018-11-16 05:14:22"
version = (VersionBind, VersionFitz, "20181116051422")
%}