debian-python-odf/contrib/xliff/xliff2table.py

88 lines
3.1 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright (C) 2007 Søren Roug, European Environment Agency
#
# This is free software. You may redistribute it under the terms
# of the Apache license and the GNU General Public License Version
# 2 or at your option any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#
# Contributor(s):
#
from xliff_parser import HandleXliffParsing
import sys
from odf.opendocument import OpenDocumentText
from odf import style, table
from odf.text import P, UserFieldDecls, UserFieldDecl, UserFieldInput
from odf.namespaces import TABLENS
textdoc = OpenDocumentText()
# Create a style for the table content. One we can modify
# later in the word processor.
tablecontents = style.Style(name="Table Contents", family="paragraph")
tablecontents.addElement(style.ParagraphProperties(numberlines="false", linenumber="0"))
textdoc.styles.addElement(tablecontents)
#tablestyle = style.Style(name="Table style", family="table")
#tablestyle.addElement(style.TableProperties(protected="true"))
#textdoc.automaticstyles.addElement(tablestyle)
# Create automatic styles for the column widths.
widthwide = style.Style(name="Wwide", family="table-column")
widthwide.addElement(style.TableColumnProperties(columnwidth="8cm"))
textdoc.automaticstyles.addElement(widthwide)
tcstyle = style.Style(name="Table Cell", family="table-cell")
tcstyle.addElement(style.TableCellProperties(cellprotect="protected"))
textdoc.automaticstyles.addElement(tcstyle)
parser = HandleXliffParsing()
xliff = file('global.xlf').read()
chandler = parser.parseXLIFFSTring(xliff)
if chandler is None:
print "Unable to parse XLIFF file"
sys.exit(0)
header_info = chandler.getFileTag()
body_info = chandler.getBody() #return a dictionary
uf = UserFieldDecls()
textdoc.text.addElement(uf)
# Add user fields
for id,transunit in body_info.items():
uf.addElement(UserFieldDecl(name=id,valuetype="string", stringvalue=transunit['target']))
# Start the table, and describe the columns
mytable = table.Table(protected="true")
mytable.addElement(table.TableColumn(numbercolumnsrepeated=2,stylename=widthwide))
for id,transunit in body_info.items():
tr = table.TableRow()
mytable.addElement(tr)
tc = table.TableCell(stylename=tcstyle, qattributes={(TABLENS,'protected'):'true'})
tr.addElement(tc)
p = P(stylename=tablecontents,text=transunit['source'])
tc.addElement(p)
tc = table.TableCell(qattributes={(TABLENS,'protected'):'true'})
tr.addElement(tc)
p = P(stylename=tablecontents)
tc.addElement(p)
f = UserFieldInput(name=id,description="Enter translation")
p.addElement(f)
textdoc.text.addElement(mytable)
textdoc.save("translations.odt")