view contrib/gettext_parser/ @ 33:55ff4feb0f59

src cosmetics: remove TODOs, CVS stuff imported from: moin--main--1.5--patch-34
author Thomas Waldmann <>
date Sun, 25 Sep 2005 11:36:51 +0000
parents 77665d8e2254
children 01f05e74aa9c
line wrap: on
line source
# -*- coding: iso-8859-15 -*-
    MoinMoin - GetText .po parser for moin 1.3.x


    Either begin your page like this:
    #format gettext
    (followed by .po file content only)

    Or attach the .po file and inline it:
    ... (wiki markup) ...
    ... (wiki markup) ...

    Of course, if you just attach the file, you won't be able to edit it in
    the wiki. So the #format method is better for online editing.
    * requires Python 2.4 and installed "gettext" package (msgfmt)
    * requires wiki page content to be in config.charset, so do not put non-
      utf-8 content into a utf-8 wiki or it will crash.

    @copyright: 2005 by MoinMoin:AlexanderSchremmer
    @license: GNU GPL, see COPYING for details.

Dependencies = []

import subprocess
from MoinMoin import config

class Parser:
    extensions = ['.po']
    def __init__ (self, raw, request, **kw):
        self.raw = raw
        self.request = request

    def format(self, formatter):
        PIPE = subprocess.PIPE
        STDOUT = subprocess.STDOUT
        p = subprocess.Popen(("msgfmt", "-c", "--statistics", "-",), shell=False,
                             stdin=PIPE, stdout=PIPE, stderr=STDOUT)
        charset = config.charset
        textin = self.raw.encode(charset)
        out = p.communicate(input=textin)[0]
        if out is None:
            out = ''
        out = out.decode(charset).replace('<stdin>:', 'input data line ')

        # show po file data with line numbers as msgfmt refers to them
        text, lineno = [], 0
        for l in self.raw.splitlines():
            lineno += 1
            text.append("%04d: %s" % (lineno, l))

        textout = [formatter.heading(1, 3),
                   'Gettext status messages:',
                   formatter.heading(0, 3),
                   formatter.heading(1, 3),
                   formatter.heading(0, 3),