Umwandlung ASCII->Unicode mit styles (bold, italics, monospace) in Perl

Begonnen von Adimarantis, 31 Januar 2022, 13:25:15

Vorheriges Thema - Nächstes Thema

Adimarantis

Hallo,

ich habe einen Anwendungsfall für den ich eine Routine/Library bräuchte, mit der ich normalen Text in Unicode umwandeln kann - aber eben dabei gleich bestimmte Stile anwenden kann.
Es gibt ja eine Menge Internetseiten die sowas können, z.B. https://yaytext.com/
Das funktioniert per copy&paste auch sehr gut - aber eben nur für statischen Text - sobald es dynamisch wird, wird es komplex.
Anscheinend ist der gängige Weg tatsächlich hier Übersetzungstabellen zu generieren. Grundsätzlich klappt das auch, z.B. kann ich einen normalen Text in der Variable $nachricht mit
$nachricht =~ tr/a-zA-Z0-9/\x{1D68A}-\x{1D6A3}\x{1D670}-\x{1D689}\x{1D7F6}-\x{1D7FF}/;
wunderbar in Monospace umwandeln.
Allerdings sind da jetzt schon mal keine Sonderzeichen dabei und die Werte rauszufinden war Handarbeit.

Kennt jemand einen einfachen Weg oder eine Library für Perl die sowas erledigt (oder zumindest irgendeinen Code der eine schöne Umsetzungstabelle hat, die man kopieren kann)?

Danke,
Jörg
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

andies

Hi Jörg,

Mir ist bei der Suche diese Seite aufgefallen, aber da ich vom programmieren keine Ahnung habe, wusste ich nicht, ob das passt: https://metacpan.org/pod/Unicode::Tussle.

Viele Grüße, Andreas
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Adimarantis

Ich habe mich jetzt ein bisschen damit beschäftigt und zwei relativ kompakte Perl Routinen geschrieben, die folgendes leisten:

newstring=formatStringUnicode(style,string)
Wandelt einen ASCII String komplett in die Stile bold, italic, bold-italic, script, fraktur, square und mono um.
newtext=formatTextUnicode(mode,string)
interpretiert wahlweise html-änliche Tags oder Markdown um Bereiche im Text umzuwandeln. (mode= html, markdown, both)

Ich habe von Beta-User schon die Anregung bekommen, ob man diese Routinen nicht allgemein zur Verfügung stellen könnte. Derzeit existieren die nur in mein Testversion von Signalbot auf GitHub.

Besteht da Interesse? Wo sollten Sie dann am Besten hin (im Modul mit globalem Namen, lib ....)?

Hier noch die bisher implemetierten Umwandlungen und deren Tags:

U̲n̲t̲e̲r̲s̲t̲r̲i̲c̲h̲e̲n̲e̲r̲ ̲T̲e̲x̲t̲ ̲1̲2̲3̲ - <u>text</u> / __text__
D̶u̶r̶c̶h̶g̶e̶s̶t̶r̶i̶c̶h̶e̶n̶e̶r̶ ̶T̶e̶x̶t̶ ̶1̶2̶3̶ - <s>text</s> / ~~text~~
𝐅𝐞𝐭𝐭𝐞𝐫 𝐓𝐞𝐱𝐭 𝟏𝟐𝟑 - <b>text</b> / **bold**
𝐾𝑢𝑟𝑠𝑖𝑣𝑒𝑟 𝑇𝑒𝑥𝑡 𝘩 123 - <i>text</i>
𝑭𝒆𝒕𝒕𝒆𝒓 𝒌𝒖𝒓𝒔𝒊𝒗𝒆𝒓 𝑻𝒆𝒙𝒕 123 - <bi>text</bi>
𝓢𝓬𝓻𝓲𝓹𝓽 𝓣𝓮𝔁𝓽 123 - <script>text</script>
𝕱𝖗𝖆𝖐𝖙𝖚𝖗 𝕿𝖊𝖝𝖙 123 - <fraktur>text</fraktur>
🅂🅀🅄🄰🅁🄴 🅃🄴🅇🅃 123 - <square>text</square>
𝙼𝚘𝚗𝚘𝚜𝚙𝚊𝚌𝚎 𝚃𝚎𝚡𝚝 123 - <code>text</code> / ``text``
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

CoolTux

Vielleicht unter

./lib/FHEM

ein Verzeichnis Helper oder Tools oder ähnliches anlegen und dann da rein stecken.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Beta-User

Vorab mal Danke für's Aufgreifen der Anregung!
./lib/dürfte auf alle Fälle passen. Da es hier (ausnahmsweise!) eigentlich nicht um was geht, das direkt mit FHEM zu tun hat, wäre ggf. sogar ein neues Unterverzeichnis (TEXT?) korrekt? (Bin aber auch nicht firm in den Perl-Konventionen zu dem Thema).

kurz partly OT:
@CoolTux: Da wir grade beim Thema libs sind - wegen https://forum.fhem.de/index.php/topic,117195.0/topicseen.html bin ich grade über 75_MSG.pm gestolpert. Das verwendet intern auch wieder eine Art lib (msgSchema.pm). Zum einen "fehlt" in der SignalBot - kann/sollte man das ggf. einpflegen? Und dann direkt auch an einen "korrekten" Ort verschieben?
Kannst du das mal mit loredo klären?

@Adimarantis:
Kannst du dir mal ansehen, was an Ergänzung aaO. erforderlich wäre?

zurück on topic:
Hintergrund meiner Anfrage war der, dass ich zwischenzeitlich ja msgDialog betreue, und sich da auch das "Problem" stellt, ob man z.B. für einen bestimmten Empfänger
- überhaupt ein Keyboard anzeigt;
- es ein "inline"-Keyboard sein darf, und
- wie ggf. der Text "umzuformatieren" sein könnte, damit auch andere Messenger wie Telegram (den sowohl igami wie auch ich benutzen) besser integriert werden können. Der Haken an der Sache ist folgender: Beim Abschicken der Reaktion auf eine eingehende Nachricht weiß msgDialog nicht, wie die Gegenstelle aussieht...

Ergo müßte das irgendwo auf dem Weg zum Messenger ausgewertet und ggf. umgewandelt werden.




Etwas anders gesagt:
Nach meinem Gefühl sollte man aus "Konfigurator"-Sicht nur in seinen jeweiligen "sag Adressat xy folgendes: ..."-Code in FHEM eine einheitliche Vor-Formatierung vorsehen können, damit am Ende was ansehliches (oder vernünftig hörbares) ankommt.

Es geht also m.E. ggf. auch darum, eine Art Standard festzulegen, wie Infos an msg sinnvollerweise übergeben werden sollten (und sich ggf. vorab dahingehend zu verständigen, dass das genutzt werden sollte?).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

CoolTux

Zitat von: Beta-User am 03 Februar 2022, 10:35:16
kurz partly OT:
@CoolTux: Da wir grade beim Thema libs sind - wegen https://forum.fhem.de/index.php/topic,117195.0/topicseen.html bin ich grade über 75_MSG.pm gestolpert. Das verwendet intern auch wieder eine Art lib (msgSchema.pm). Zum einen "fehlt" in der SignalBot - kann/sollte man das ggf. einpflegen? Und dann direkt auch an einen "korrekten" Ort verschieben?
Kannst du das mal mit loredo klären?

Man kann es einpflegen. Werde mal bei Julian anfragen. Man muss es aber nicht. Es soll wohl laut meiner alten Info auch gehen wenn man es per den entsprechenden Attributen selber in sein System konfiguriert.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Beta-User

...vermutlich...

Es geht aber doch tendenziell darum, dass "selbstverständliche" Dinge in FHEM einfach so funktionieren sollten, ohne dass man sich als "Konfigurator" groß im Detail darum kümmern muss ;) .
Das gilt zumindest für "häufige" Problemstellungen, und SignalBot hat m.E. jetzt einen Verbreitungsgrad, der es wohl rechtfertigen dürfte, ihn in die Automatik mit einzubinden, oder?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Adimarantis

zu "msg": Da hatte ich schon Anfragen im Signalbot thread ob das "native" unterstützt werden könnte. Hab da auch mal einen Post im msg-thread gemacht, aber wie wohl schon angemerkt ist Loredo wohl nicht sehr aktiv.

bzgl lib/FHEM: Ich meine dass irgendwann erwähnt wurde, dass ein neues Verzeichnis extra eingepflegt werden muss, damit es von "update" unterstützt wird. Passt es evtl hier und ist die Definition so konform?

package FHEM::Core::Utils::Unicode;
use strict;
use warnings;
use Exporter 'import';
our @EXPORT_OK = qw (formatTextUnicode formatStringUnicode);
our %EXPORT_TAGS = (ALL => [@EXPORT_OK]);


Klappt zumindest, aber das Entwickeln ist etwas mühsam - kann man eine lib auch anders aktualisieren als FHEM neu zu starten?

Der aktuelle Entwicklungsstand im Anhang.
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Adimarantis

Ich hab jetzt noch zwei "demo" Funktionen hinzugefügt
demoUnicode() erzeugt einen String der direkt alle Ersetzungen enthält (kann man aus FHEM dann in der Kommandozeile mit {FHEM::Core::Utils::Unicode::demoUnicode();;} aufrufen und eine abgeleitete demoUnicodeHTML() die entsprechende Ersetzungen macht, damit es auch per HTML - also z.B. per "get" Befehl angezeigt wird (siehe Bild).

Jetzt bleiben wirklich nur noch die Fragen:
- Welches Verzeichnis?  - lib/FHEM/Core/Utils ist ja eventuell für das FHEM Framework vorbehalten
- Wird das per Update synchronisiert - insbesondere wenn ein neues Verzeichnis angelegt wird?

Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

CoolTux

Zitat von: Adimarantis am 04 Februar 2022, 16:29:00
Ich hab jetzt noch zwei "demo" Funktionen hinzugefügt
demoUnicode() erzeugt einen String der direkt alle Ersetzungen enthält (kann man aus FHEM dann in der Kommandozeile mit {FHEM::Core::Utils::Unicode::demoUnicode();;} aufrufen und eine abgeleitete demoUnicodeHTML() die entsprechende Ersetzungen macht, damit es auch per HTML - also z.B. per "get" Befehl angezeigt wird (siehe Bild).

Jetzt bleiben wirklich nur noch die Fragen:
- Welches Verzeichnis?  - lib/FHEM/Core/Utils ist ja eventuell für das FHEM Framework vorbehalten
- Wird das per Update synchronisiert - insbesondere wenn ein neues Verzeichnis angelegt wird?

Ja das wird gesynct. Ist aber denke ich nicht der richtige Platz. Ich wäre für lib/FHEM/Tools
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Beta-User

...sind unter lib nicht alles "Tools"...?
Würde nochmal Text in den Raum stellen.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

CoolTux

Zitat von: Beta-User am 04 Februar 2022, 18:43:41
...sind unter lib nicht alles "Tools"...?
Würde nochmal Text in den Raum stellen.

Würde ich jetzt nicht so sehen. Sind ja auch ganze Module. So was würde ich nicht als Tools bezeichnen. Text würde auch Sinn ergeben.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Adimarantis

Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Beta-User

...von mir aus...

Eine Anregung zum Coding hätte ich noch: Geht es ohne Prototypen? Probleme lassen sich uU. mit "carp" gezielter zurückmelden :) .
Die lib ist ja zur Verwendung durch Modulautoren gedacht, und die sollten dann schon wissen, wie/mit welchen Parametern eine Funktion aufgerufen werden muss.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net