Stefan Ram:
> Andreas Borutta <
bor...@gmx.de> writes:
>>Das Skript funktionierte nicht mit mehr als einem <p>. Daher habe ich
>>erstmal die <br> eingefügt.
>>Falls Du noch Muße hast, füge doch bitte noch eine Option zum Ersetzen
>>der anderen Leerzeichen ein.
>
> Dieses Skript hier ersetzt auch in mehreren Absätzen. Allerdings
> kann es sein, daß die hier eingesetzte Technik bei anderem
> oder komplizierterem Aufbau des Dokuments doch versagt.
Gäbe es denn andere Techniken, die vorhersagbar zuverlässig bei
umfangreichem und komplexem HTML sind?
Wichtig wäre auch, dass es nicht mit anderen JS kollidiert.
Wir setzen z.B. MathJax für hochwertigen Formelsatz ein.
https://de.wikipedia.org/wiki/MathJax
Das produziert gewaltige Mengen Markup.
https://borumat.de/-/fahrradzukunft/mathjax-latex
Ideal wäre es, wenn die Technik des Skriptes (wir könnten es
"invisibles.js" nennen) z.B. erlaubt Elemente (und ihre Kinder)
auszuschließen.
> Jetzt werden auch "202F" und "2009" modifiziert. Dabei sucht das
> Skript entweder nach numerischen Entitätsreferenzen genau der
> angegebenen Form oder nach den entsprechenden Unicode-Zeichen.
> Es würde also Varianten von Entitätsreferenzen nicht finden.
>
> <!DOCTYPE html><html xmlns="
http://www.w3.org/1999/xhtml"
> lang="de" xml:lang="de">
> <head><meta charset="UTF-8" /><title>Programm 2023-05-27T19:59</title>
> </head><body><p>Durch die Verwendung nicht-trennbarer
> Leerzeichen heben wir uns deutlich von anderen Radfahrer-Magazinen
> ab.</p><p>Durch die Verwendung nicht-trennbarer
> Leerzeichen heben wir uns deutlich von anderen Radfahrer-Magazinen
> ab.</p><p>Nach <i>Kursivschrif</i>  wird noch etwas Leerraum
> hinzugefügt</p><p>Subtile Veränderungen erleichtern das Lesen
> des Wortes "Schiff fahrt".</p><script
> type="text/javascript">
>
> function srp( parent, code )
> {
> parent.innerHTML = parent.innerHTML.replace
> ( new RegExp( "\\#x" + code + ";" ),
> "<span style='background: rgb(190,190,190);'>" + "&#x" + code +
> ";" + "</span>" );
>
> n = new Number( "0x" + code )
> c = String.fromCharCode( n )
> parent.innerHTML = parent.innerHTML.replace
> ( c,
> "<span style='background: rgb(190,190,190);'>" + c + "</span>" ); }
>
> function processNode( node )
> { if( node.nodeType == Node.TEXT_NODE )
> { parent = node.parentElement;
> ok = parent.nodeName in{ "P":0, "H1":0 /* ... */ }
> if( ok )
> {
> parent.innerHTML = parent.innerHTML.replace
> ( / /g,
> "<span style='background: rgb(190,190,190);'>" +
> String.fromCharCode( 160 )+ "</span>" );
>
> srp( parent, "202F" );
> srp( parent, "2009" ); }}}
>
> function walk( domObject, extractorCallback )
> { if( !domObject )return;
> processNode( domObject );
> if( domObject.nodeType != Node.ELEMENT_NODE )return;
> const childs = domObject.childNodes;
> for( let i = 0; i < childs.length; ++i )walk( childs[ i ]); }
>
> walk( document.body )
>
> </script></body></html>
Ich verstehe den Code mangels Kenntnissen nicht, sehe aber, dass
"<span ...>" dreimal vorkommt.
Das erschwert etwas die Wartbarkeit.
Ich schrieb ja im letzten Posting, dass ich "Custom Elements"
verwende, statt "<span>", weil das die moderne, prägnantere und besser
lesbare Technik ist.
Und auch für die Wartbarkeit und Lesbarkeit des Skriptes bezüglich der
verschiedenen Leerzeichen, wäre es ideal, wenn jedes Leerzeichen ein
anderes "Custom Element" bekommen kann. Denn sonst wären sie ja nicht
mehr unterscheidbar.
IMHO sowas in der Art:
// Nicht anwenden in diesen Elementen:
// mjx-container
[Skriptcode]
// Unicode: U+00A0
// Name: NO-BREAK SPACE
// Entity:
// HTML Custom Element: <fz-nbsp>
[Skriptcode]
// Unicode: U+202F
// Name: NARROW NO-BREAK SPACE
// Entity:  
// Custom Element: <fz-nbsp>
[Skriptcode]
// Unicode: U+2009
// Name: THIN SPACE
// Entity:  
// Custom Element: <fz-nsp>
[Skriptcode]
Was denkst Du bitte zu diesen Ideen?
Andreas
--
http://fahrradzukunft.de