Added multilingual text rendering

This commit is contained in:
Mark Qvist 2024-01-05 01:49:25 +01:00
parent f51796a184
commit 22be3b6067
5 changed files with 131 additions and 6 deletions

View File

@ -5,12 +5,12 @@ package.domain = io.unsigned
source.dir = .
source.include_exts = py,png,jpg,jpeg,webp,ttf,kv,pyi,typed,so,0,1,2,3,atlas,frag,html,css,js,whl,zip,gz,woff2,pdf,epub
source.include_patterns = assets/*,share/*
source.include_patterns = assets/*,assets/fonts/*,share/*
source.exclude_patterns = app_storage/*,venv/*,Makefile,./Makefil*,requirements,precompiled/*,parked/*,./setup.py,Makef*,./Makefile,Makefile
version.regex = __version__ = ['"](.*)['"]
version.filename = %(source.dir)s/main.py
android.numeric_version = 20231207
android.numeric_version = 20240103
# Cryptography recipe is currently broken, using RNS-internal crypto for now
requirements = kivy==2.2.1,libbz2,pillow,qrcode==7.3.1,usb4a,usbserial4a

View File

@ -1,6 +1,6 @@
__debug_build__ = False
__disable_shaders__ = False
__version__ = "0.7.7"
__version__ = "0.7.8"
__variant__ = "beta"
import sys
@ -179,6 +179,7 @@ class SidebandApp(MDApp):
self.sideband = SidebandCore(self, is_client=False, verbose=(args.verbose or __debug_build__))
self.set_ui_theme()
self.font_config()
self.dark_theme_text_color = dark_theme_text_color
self.conversations_view = None
@ -347,6 +348,27 @@ class SidebandApp(MDApp):
self.update_ui_colors()
def font_config(self):
from kivy.core.text import LabelBase, DEFAULT_FONT
fb_path = "assets/fonts/"
LabelBase.register(name="hebrew",
fn_regular=fb_path+"NotoSansHebrew-Regular.ttf",
fn_bold=fb_path+"NotoSansHebrew-Bold.ttf",)
LabelBase.register(name="japanese",
fn_regular=fb_path+"NotoSansJP-Regular.ttf")
LabelBase.register(name="chinese",
fn_regular=fb_path+"NotoSansSC-Regular.ttf")
LabelBase.register(name="korean",
fn_regular=fb_path+"NotoSansKR-Regular.ttf")
LabelBase.register(name="emoji",
fn_regular=fb_path+"NotoEmoji-Regular.ttf")
def update_ui_colors(self):
if self.sideband.config["dark_ui"]:
self.color_reject = colors["DeepOrange"]["900"]

View File

@ -27,6 +27,8 @@
<!-- Allow writing to external storage -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- Legacy permissions for bluetooth access (Android < 12) -->
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />

File diff suppressed because one or more lines are too long

View File

@ -12,10 +12,16 @@ from kivy.properties import StringProperty, BooleanProperty
from kivy.uix.gridlayout import GridLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.clock import Clock
from kivy.utils import escape_markup
from kivymd.uix.button import MDRectangleFlatButton, MDRectangleFlatIconButton
from kivymd.uix.dialog import MDDialog
if RNS.vendor.platformutils.get_platform() == "android":
from ui.helpers import multilingual_markup
else:
from .helpers import multilingual_markup
import os
import plyer
import subprocess
@ -175,6 +181,13 @@ class Messages():
for m in self.new_messages:
if not m["hash"] in self.added_item_hashes:
if not self.is_trusted:
message_input = str( escape_markup(m["content"].decode("utf-8")) ).encode("utf-8")
else:
message_input = m["content"]
message_markup = multilingual_markup(message_input)
txstr = time.strftime(ts_format, time.localtime(m["sent"]))
rxstr = time.strftime(ts_format, time.localtime(m["received"]))
titlestr = ""
@ -305,7 +318,7 @@ class Messages():
force_markup = True
item = ListLXMessageCard(
text=pre_content+m["content"].decode("utf-8")+extra_content,
text=pre_content+message_markup.decode("utf-8")+extra_content,
heading=heading_str,
md_bg_color=msg_color,
)
@ -320,7 +333,6 @@ class Messages():
item.ids.content_text.text_color = mt_color
item.ids.msg_submenu.theme_text_color = "Custom"
item.ids.msg_submenu.text_color = mt_color
item.ids.content_text.markup = self.is_trusted or force_markup
def gen_del(mhash, item):
def x():
@ -759,7 +771,7 @@ Builder.load_string("""
MDLabel:
id: content_text
text: root.text
markup: False
markup: True
size_hint_y: None
text_size: self.width, None
height: self.texture_size[1]