Skip to main content

Uniform way to write simple text extended with DOCX and ODT files

Project description

mformat-ext

The mformat package contains a number of classes providing a uniform way for a python program to write to a number of different file formats.

The primary intended use is for text output from a python program, where the programmer would like the user to be able to select the output file formats. Some users may want the text as a Microsoft Word file, others as a LibreOffice Open Document Text file, while still others might want it as Markdown. By using the uniform way of writing provided by mformat the same python code can produce output in a number of different formats.

This is intended to provide an easy and uniform way to produce information in different formats. The emphasis is on getting the same information into the different formats. This will allow you to get a correct (but perhaps rudimentary) document in several formats. If you want to produce the most esthetically pleasing document in a particular format, this is not the correct library to use.

Installing mformat (base package)

The base package contains support for the output formats that are supported with a minimum of dependencies. Use this if you for some reason want to avoid extra dependencies.

If you want to use it, install it using pip from https://pypi.org/project/mformat . There is no need to download anything from Bitbucket to write Python programs that use the library.

Installing base mformat on mac and Linux

pip3 install --upgrade mformat

Installing base mformat on Microsoft Windows

pip install --upgrade mformat

Installing mformat-ext (extended package, this package)

The extended package contains support also for output formats that require some additional dependencies. Use this if you want the full selection of output formats.

If you want to use it, install it using pip from https://pypi.org/project/mformat-ext . There is no need to download anything from Bitbucket to write Python programs that use the library.

Installing extended mformat on mac and Linux

pip3 install --upgrade mformat-ext

Installing extended mformat on Microsoft Windows

pip install --upgrade mformat-ext

What it does

The main features supported in a uniform way for all supported output file formats are:

  • Factory function that takes file format and output file name as arguments

  • It opens and closes a file in the selected format, with protection against accidentically overwriting an existing file

  • The recommended way to use it is as a context manager in a with-clause, opening and closing the file

  • Headings (several levels)

  • Paragraphs

  • Nested bullet point lists

  • Nested numbered point lists

  • Mixed nested numbered point and bullet point lists

  • Tables

  • URLs in paragraphs, headings, numbered point list items and in bullet point list items

Design of program that uses mformat

It is recommended that the ouput function(s) of the a Python program using mformat should have a with-clause getting the formatting object from the factory (easiest with with create_mf(file_format=fmt, file_name=output_file_name) as ).

In the context of the with-clause the programmer just calls a minimum of member functions:

  • new_paragraph to start a new paragraph with some provided text content.

  • new_heading to start a new heading with some provided text content.

  • new_bullet_item to start a new bullet point list item with some provided text content, and if needed to start the bullet point list with the bullet point item.

  • new_numbered_point_item to start a new numbered point list item with some provided text content, and if needed to start the numbered point list with the number point list item.

  • new_block_quote to start a new block quote with some provided text content.

  • add_text to add more text to an already started paragraph, heading, block quote, numbered point list item, bullet point list item or numbered point list item.

  • add_url to add a URL (link) to an already started paragraph, heading, block quote, numbered point list item, bullet point list item or numbered point list item.

  • add_code_in_text to add some short text (function name, variable name, etc.) as code to an already started paragraph, heading, block quote, bullet point list item or numbered point list item.

  • new_table to start a new table with the provided first row.

  • add_table_row to add another row to an already started table.

  • write_complete_table to write a table all at once.

  • write_code_block to write some preformatted text as a code block

There are no member functions to end or close any document item. Each document item is automatically closed as another docuemnt item is started (or when closing the file at the end of the context manager scope). new_bullet_item and new_numbered_point_item take an optional level argument, that is used to change to another nesting level.

Example programs

A number of minimal but complete example programs are provided to help the programmer new to mformat. See list of examples .

API documentation

API documentation automatically extracted from the Python code and docstrings are available here for the public API for programmers using the API and here for the protected API for programmers that want to extend the API by adding their own derived class that provide some other output format.

Even though some may like reading API documentation, the example programs probably provide a better introduction.

Version history

Version Date Python version Description
0.6 14 Mar 2026 3.12 or newer Added PDF and LaTeX formats
0.5 07 Mar 2026 3.12 or newer Added RTF, TXT and reST formats
0.4 21 Feb 2026 3.12 or newer Added block quote support
0.3 18 Feb 2026 3.12 or newer Improved API and fixes
0.2.2 31 Jan 2026 3.12 or newer Dependency corrected
0.2.1 30 Jan 2026 3.12 or newer Minor documentation fix
0.2 30 Jan 2026 3.12 or newer First released version

Output file formats

The following table provides information about in which version support for a format was introduced.

Format Full name of format Which package Starting at version
docx Microsoft Word mformat-ext 0.2
html HTML Web page mformat 0.2
LaTeX LaTeX typesetting mformat 0.6
md Markdown mformat 0.2
odt Open Document Text mformat-ext 0.2
pdf Portable Document Format mformat-ext 0.6
reST reStructured Text mformat 0.5
rtf Rich Text Format mformat-ext 0.5
txt Plain text mformat 0.5

API changes in version 0.3 (deprecated methods)

In version 0.2.x the public API was build around methods that started document items, like start_paragraph. However, experience showed that this was not intuitive for the user. Many users were trying to use end or stop methods (that do not exist) in pair with the start methods. To address this, the public API was changed in version 0.3.0 to use methods named new something, like new_paragraph. With this naming the intuition should hopefully not tell users to look for end or stop methods (that do not exist). People have also pointed out that phrases like "new paragraph" are commonly used in dictation.

The old methods are still available, but are deprecated and will be removed in the next version.

New method Deprecated method
new_paragraph start_paragraph
new_heading start_heading
new_bullet_item start_bullet_item
new_numbered_point_item start_numbered_point_item
new_table start_table

Test summary

  • Test result: 2790 passed in 41s
  • No Flake8 warnings.
  • No mypy errors found.
  • Built version(s): 0.6
  • Build and test using Python 3.14.3

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

mformat_ext-0.6.tar.gz (25.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mformat_ext-0.6-py3-none-any.whl (29.5 kB view details)

Uploaded Python 3

File details

Details for the file mformat_ext-0.6.tar.gz.

File metadata

  • Download URL: mformat_ext-0.6.tar.gz
  • Upload date:
  • Size: 25.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.14.3

File hashes

Hashes for mformat_ext-0.6.tar.gz
Algorithm Hash digest
SHA256 71d69e8e4fb465c3fc07faf7c2acc84ff7ce91cb7038c84011841c856352ba31
MD5 abcb468700514b2c764b99f86d4b765d
BLAKE2b-256 b85da21f2be409f286f2aa00dadf7bcba0d43107b66e5d8dab55014e852b827d

See more details on using hashes here.

File details

Details for the file mformat_ext-0.6-py3-none-any.whl.

File metadata

  • Download URL: mformat_ext-0.6-py3-none-any.whl
  • Upload date:
  • Size: 29.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.14.3

File hashes

Hashes for mformat_ext-0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 c5903af7609f557a6193fed577463996b5ce8d86e744cabb4024568783450e71
MD5 69c6004487aff93c4fedaa827cd5991f
BLAKE2b-256 4337c771233dfc1fa17c404256b4f1943e778db971383ea0ae0025a59c649edc

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