Skip to main content

Python bindings for libcdr (CorelDRAW/CMX parser).

Project description

Python bindings for libcdr

DOI PyPI

Intro

Simple Python bindings for the libcdr. The binding chain is:

Python (CDRParser) → Cython (.pyx) → C++ (parser.cxx) → libcdr / librevenge

Installation

First, the libcdr newer than v0.1.8 must be compiled.

E.g. on Debian:

apt-get install automake cmake libtool libboost-all-dev libicu-dev liblcms2-dev librevenge-dev libcppunit-dev zlib1g-dev
git clone https://git.libreoffice.org/libcdr
cd libcdr
./autogen.sh
./configure
make && sudo make install

Then: pip install git+https://github.com/mpds-io/pylibcdr

The build steps (orchestrated automatically):

  1. CMake configures using pylibcdr/CMakeLists.txt.
  2. CMake invokes Cython to transpile libcdr_interface.pyx into libcdr_interface.cpp (via add_custom_command).
  3. CMake compiles the generated .cpp and core/parser.cxx into the Python extension libcdr_interface (via Python_add_library), linking against libcdr and librevenge.

If CMake fails, delete any _skbuild/ or build/ temp directories before retrying.

Usage

import sys
from pylibcdr import CDRParser
parser = CDRParser(sys.argv[1])
print(parser.xml)   # raw XHTML/SVG string
print(parser.dict)  # parsed as a nested dict

Architecture

File Role
pylibcdr/__init__.py CDRParser class; converts XML string to dict via dictify()
pylibcdr/libcdr_interface.pyx Cython bridge; calls svg(char*) from C++, raises CDRException on error strings
pylibcdr/core/parser.cxx C++ core; uses libcdr/librevenge to parse CDR files, returns XHTML wrapping SVG pages
pylibcdr/core/parser.h Header declaring std::string svg(char* file)
pylibcdr/CMakeLists.txt CMake build: Cython transpilation + Python_add_library for the extension
pylibcdr/cmake/ Custom Find*.cmake modules for libcdr and librevenge
pyproject.toml Project metadata and scikit-build-core configuration

The C++ svg() function returns an error string prefixed with "ERROR" on failure; the Cython layer detects this and raises CDRException.

The output of svg() is XHTML wrapping one or more SVG documents (one per page). CDRParser.xml exposes this raw string; CDRParser.dict parses it with xml.etree.ElementTree into a nested dict where repeated child tags become lists.

License

Inherited from the libcdr (MPL 2.0).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pylibcdr-0.1.1.tar.gz (4.8 kB view details)

Uploaded Source

File details

Details for the file pylibcdr-0.1.1.tar.gz.

File metadata

  • Download URL: pylibcdr-0.1.1.tar.gz
  • Upload date:
  • Size: 4.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.10

File hashes

Hashes for pylibcdr-0.1.1.tar.gz
Algorithm Hash digest
SHA256 9b964f4497477bb867c12f03d44f50b10b6f49e278c3780c891a68a38519faba
MD5 1c6268043cb82c1b90309a24f6d167fc
BLAKE2b-256 8fdc530ed53b44bd159f9480670b8837c31040c670e1be324e281f2dea015cee

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page