Browse Source

Replace not-so-smart characters in journals.

pull/355/head
Adam Johnson 2 years ago
parent
commit
807ab99ae9
  1. 34
      korman/exporter/locman.py

34
korman/exporter/locman.py

@ -21,6 +21,7 @@ from contextlib import contextmanager
import itertools import itertools
from pathlib import Path from pathlib import Path
import re import re
from typing import NamedTuple, Union
from xml.sax.saxutils import escape as xml_escape from xml.sax.saxutils import escape as xml_escape
import weakref import weakref
@ -34,6 +35,26 @@ _SP_LANGUAGES = {"English", "French", "German", "Italian", "Spanish"}
# as CDATA instead of XML encoding the entry. # as CDATA instead of XML encoding the entry.
_ESHTML_REGEX = re.compile("<.+>") _ESHTML_REGEX = re.compile("<.+>")
# Converts smart characters to the not-so-smart variety to fix common problems related to
# limitations in the Plasma font system.
class _DumbCharacter(NamedTuple):
desc: str
needle: Union[re.Pattern, str]
sub: str = ""
_DUMB_CHARACTERS = [
_DumbCharacter(
"smart single quote (probably copypasta'd from Microsoft Word)",
re.compile("[\u2018\u2019\u201A\u201B]"), "'"
),
_DumbCharacter(
"smart double quote (probably copypasta'd from Microsoft Word)",
re.compile("[\u201C\u201D\u201E\u201F\u2E42]"), '"'
),
]
class LocalizationConverter: class LocalizationConverter:
def __init__(self, exporter=None, **kwargs): def __init__(self, exporter=None, **kwargs):
if exporter is not None: if exporter is not None:
@ -55,6 +76,19 @@ class LocalizationConverter:
self._report.warn("'{}' translation for '{}' is modified on the disk but not reloaded in Blender.", self._report.warn("'{}' translation for '{}' is modified on the disk but not reloaded in Blender.",
element_name, language, indent=indent) element_name, language, indent=indent)
value = value.as_string() value = value.as_string()
for dc in _DUMB_CHARACTERS:
old_value = value
if isinstance(dc.needle, str):
value = value.replace(dc.needle, dc.sub)
else:
value = dc.needle.sub(dc.sub, value)
if value != old_value:
self._report.warn(
"'{}' translation for '{}' has an illegal {}, which was replaced with: {}",
element_name, language, dc.desc, dc.sub, indent=indent
)
self._strings[set_name][element_name][language] = value self._strings[set_name][element_name][language] = value
@contextmanager @contextmanager

Loading…
Cancel
Save