Check-in [cc30af6872]
Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | update http version to 2.0, freeze requests at 2.25 for Py2/AOO, update six, apply .skip() for draw documents |
|---|---|
| Downloads: | Tarball | ZIP archive | SQL archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
cc30af68726d28206e794e88ef801042 |
| User & Date: | mario 2022-10-15 04:20:44 |
Context
|
2022-10-15
| ||
| 17:07 | Prepare **params for different frontend, add __str__ for log decoration. check-in: e3207de9d6 user: mario tags: trunk | |
| 04:20 | update http version to 2.0, freeze requests at 2.25 for Py2/AOO, update six, apply .skip() for draw documents check-in: cc30af6872 user: mario tags: trunk | |
| 04:18 | split BackendUtils from GoogleWeb, document API check-in: 204f7ec8ff user: mario tags: trunk | |
Changes
Changes to description.xml.
1 2 3 | <?xml version="1.0" encoding="UTF-8"?> <description xmlns="http://openoffice.org/extensions/description/2006" xmlns:dep="http://openoffice.org/extensions/description/2006" xmlns:xlink="http://www.w3.org/1999/xlink"> <identifier value="vnd.include-once.pagetranslate"/> | | | 1 2 3 4 5 6 7 8 9 10 11 |
<?xml version="1.0" encoding="UTF-8"?>
<description xmlns="http://openoffice.org/extensions/description/2006" xmlns:dep="http://openoffice.org/extensions/description/2006" xmlns:xlink="http://www.w3.org/1999/xlink">
<identifier value="vnd.include-once.pagetranslate"/>
<version value="1.9.200"/>
<display-name>
<name lang="en">PageTranslate</name>
</display-name>
<dependencies>
<OpenOffice.org-minimal-version value="3.0" dep:name="OpenOffice.org 3.0"/>
</dependencies>
<registration>
|
| ︙ | ︙ |
Changes to pagetranslate.py.
1 2 3 4 5 6 7 | #!/usr/bin/python # encoding: utf-8 # api: uno ##type: callback # category: language # title: PageTranslate # description: Action button to get whole Writer document translated | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#!/usr/bin/python
# encoding: utf-8
# api: uno
##type: callback
# category: language
# title: PageTranslate
# description: Action button to get whole Writer document translated
# version: 1.9.200
# state: beta
# author: mario
# url: https://fossil.include-once.org/pagetranslate/
# depends: python:requests (>= 2.5), python:uno
# pack: *.py, pythonpath/*.py, META-INF/*, pkg-desc, *.x*, icons/*
# config:
# { name: frames, type: bool, value: 0, description: traverse TextFrames }
|
| ︙ | ︙ | |||
188 189 190 191 192 193 194 195 196 197 198 199 200 201 |
# table/cells
if para.supportsService("com.sun.star.text.TextTable"):
for cellname in para.getCellNames():
self.log.debug("table/cells:cellname = %r", cellname)
text = para.getCellByName(cellname).getText()
# not an enumeration, but simple linebreak-formatting in cells
orig = text.getString()
text.setString(self.t.linebreakwise(orig))
self.add_comment(text, orig)
# subdocuments?
elif para.supportsService("com.sun.star.text.TextFrame"):
self.log.debug(".traverse: TextFrame.Enumeration…")
self.traverse(para.getText().createEnumeration())
# ignore existing textfields/comments?
| > > | > | > | | 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 |
# table/cells
if para.supportsService("com.sun.star.text.TextTable"):
for cellname in para.getCellNames():
self.log.debug("table/cells:cellname = %r", cellname)
text = para.getCellByName(cellname).getText()
# not an enumeration, but simple linebreak-formatting in cells
orig = text.getString()
if self.t.skip(orig):
continue
text.setString(self.t.linebreakwise(orig))
self.add_comment(text, orig)
# subdocuments?
elif para.supportsService("com.sun.star.text.TextFrame"):
self.log.debug(".traverse: TextFrame.Enumeration…")
self.traverse(para.getText().createEnumeration())
# ignore existing textfields/comments?
elif para.supportsService("com.sun.star.text.textfield.Annotation"):
pass
elif para.supportsService("com.sun.star.text.XTextField"):
pass
# a paragraph can be further enumerated for text portions (same character/style attributes),
# but that will obviously slow things down further / also complicate coherent translations
elif slow and para.supportsService("com.sun.star.text.Paragraph"): # doesn't work with com.sun.star.container.XEnumerationAccess?
self.traverse(para.createEnumeration(), slow=0) # list of TextPortion`s
# normal flow text / paragraph
elif para.supportsService("com.sun.star.text.TextContent") or para.supportsService("com.sun.star.text.TextPortion"):
orig = para.getString()
if self.t.skip(orig): # preempt short/empty segments (incidentally preserves Annotations and TextFields)
continue
text = self.t.translate(orig)
para.setString(text)
self.add_comment(para, orig)
else:
self.log.warning(".traverse: Unsupported document element.")
#self.mri(para)
|
| ︙ | ︙ | |||
241 242 243 244 245 246 247 |
def drawtranslate(self, pages):
for page_index in range(0, pages.getCount()):
page = pages.getByIndex(page_index)
for shape_index in range(0, page.getCount()):
shape = page.getByIndex(shape_index)
if shape.supportsService("com.sun.star.drawing.TextShape"):
self.log.info(".drawtranslate: shape = %r", str(shape))
| > > > | | 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 |
def drawtranslate(self, pages):
for page_index in range(0, pages.getCount()):
page = pages.getByIndex(page_index)
for shape_index in range(0, page.getCount()):
shape = page.getByIndex(shape_index)
if shape.supportsService("com.sun.star.drawing.TextShape"):
self.log.info(".drawtranslate: shape = %r", str(shape))
text = shape.Text.getString()
if self.t.skip(text):
continue
shape.Text.setString(self.t.translate(text))
#-- TradutorLibreText (selection rewrite)
def rewrite_selection(self, xTextRange):
self.log.info(".rewrite_selection() ---- begin ----")
# Get selected text and language
string = xTextRange.getString()
|
| ︙ | ︙ |
Changes to pythonpath/Makefile.
1 2 3 4 5 6 7 | # The pythonpath/ directory can be packaged alongside, to inject new python # packages into LibreOffices` python bundle. Which really just makes sense # for the Windows package, because distro-packaged Office setups utilize the # system python path. all: | < > > | 1 2 3 4 5 6 7 8 9 10 11 12 | # The pythonpath/ directory can be packaged alongside, to inject new python # packages into LibreOffices` python bundle. Which really just makes sense # for the Windows package, because distro-packaged Office setups utilize the # system python path. all: #pip install translate -t ./ --upgrade --no-compile pip3 install deep-translator -t ./ --upgrade --no-compile # freeze requests at 2.25 (last Python2.7-compatible) pip2 install requests==2.25.1 langdetect six -t ./ --upgrade --no-compile |
Changes to pythonpath/httprequests.py.
| ︙ | ︙ | |||
64 65 66 67 68 69 70 |
return self
http = FakeRequests()
log.info("using fake_requests() for now")
# headers
http.headers.update({
| | | 64 65 66 67 68 69 70 71 72 73 74 |
return self
http = FakeRequests()
log.info("using fake_requests() for now")
# headers
http.headers.update({
"User-Agent": "Mozilla/5.0 (X11; Linux; LibreOffice/7.4), PageTranslate/2.0",
"Accept-Language": "*; q=1.0",
"Accept-Encoding": "utf-8"
})
|
Changes to pythonpath/six.py.
| ︙ | ︙ | |||
25 26 27 28 29 30 31 | import functools import itertools import operator import sys import types __author__ = "Benjamin Peterson <benjamin@python.org>" | | | 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | import functools import itertools import operator import sys import types __author__ = "Benjamin Peterson <benjamin@python.org>" __version__ = "1.16.0" # Useful for very coarse version differentiation. PY2 = sys.version_info[0] == 2 PY3 = sys.version_info[0] == 3 PY34 = sys.version_info[0:2] >= (3, 4) |
| ︙ | ︙ | |||
67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# 32-bit
MAXSIZE = int((1 << 31) - 1)
else:
# 64-bit
MAXSIZE = int((1 << 63) - 1)
del X
def _add_doc(func, doc):
"""Add documentation to a function."""
func.__doc__ = doc
def _import_module(name):
| > > > > > | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# 32-bit
MAXSIZE = int((1 << 31) - 1)
else:
# 64-bit
MAXSIZE = int((1 << 63) - 1)
del X
if PY34:
from importlib.util import spec_from_loader
else:
spec_from_loader = None
def _add_doc(func, doc):
"""Add documentation to a function."""
func.__doc__ = doc
def _import_module(name):
|
| ︙ | ︙ | |||
181 182 183 184 185 186 187 188 189 190 191 192 193 194 |
def _get_module(self, fullname):
return self.known_modules[self.name + "." + fullname]
def find_module(self, fullname, path=None):
if fullname in self.known_modules:
return self
return None
def __get_module(self, fullname):
try:
return self.known_modules[fullname]
except KeyError:
raise ImportError("This loader does not know module " + fullname)
| > > > > > | 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 |
def _get_module(self, fullname):
return self.known_modules[self.name + "." + fullname]
def find_module(self, fullname, path=None):
if fullname in self.known_modules:
return self
return None
def find_spec(self, fullname, path, target=None):
if fullname in self.known_modules:
return spec_from_loader(fullname, self)
return None
def __get_module(self, fullname):
try:
return self.known_modules[fullname]
except KeyError:
raise ImportError("This loader does not know module " + fullname)
|
| ︙ | ︙ | |||
218 219 220 221 222 223 224 225 226 227 228 229 230 231 |
def get_code(self, fullname):
"""Return None
Required, if is_package is implemented"""
self.__get_module(fullname) # eventually raises ImportError
return None
get_source = get_code # same as get_code
_importer = _SixMetaPathImporter(__name__)
class _MovedItems(_LazyModule):
"""Lazy loading of moved objects"""
| > > > > > > | 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 |
def get_code(self, fullname):
"""Return None
Required, if is_package is implemented"""
self.__get_module(fullname) # eventually raises ImportError
return None
get_source = get_code # same as get_code
def create_module(self, spec):
return self.load_module(spec.name)
def exec_module(self, module):
pass
_importer = _SixMetaPathImporter(__name__)
class _MovedItems(_LazyModule):
"""Lazy loading of moved objects"""
|
| ︙ | ︙ |