RichEdit
In diesem Kapitel wird beschrieben, wie SDL Passolo Rich Text verarbeitet.
Es wird folgende Notation verwendet:
LF = ASCII-Zeichen 10 (in C als \n notiert)
CR = ASCII-Zeichen 13 (in C als \r notiert)
- CR LF
- LF
- CR
Zum Beispiel sehen wir in einer Textdatei mit CR LF als EOL-Marker Folgendes:
<item>a
b\</item>
Die Daten des Elements enthalten 5 Zeichen:
a, CR, LF, b, \
In SDL Passolo wird dies mit RichEdit anzeigt als:
a
b\
da der Text in RichEdit 8 Zeichen enthält:
a, \, r, CR, LF, b, \, \
Dies wird durch eine Kombination aus 2 Problemen verursacht:
- Mehrdeutiges Protokoll hinsichtlich EOL-Darstellung, wenn Daten zwischen Parser und RichEdit ausgetauscht werden
- Falsche Anzeige des \-Zeichens und der nichtdruckbaren Zeichen
Die Schritte sind folgende:
- Der Parser sendet folgende Daten an Passolo:
a, CR, LF, b, \
- Der Parser geht davon aus, dass CR LF der EOL-Marker ist.
- Aber Passolo geht davon aus, dass: LF der EOL-Marker ist.
- Um nichtdruckbare Zeichen anzuzeigen, werden diese maskiert: CR -> \, r und \ -> \, \
Dies ergibt:
a, \, r, LF, b, \, \
- Dann wird LF in den RichEdit-EOL-Marker umgewandelt, mit dem Ergebnis: a, \, r, CR, LF, b, \, \
- Da CR LF als Zeilenumbruch konfiguriert ist, wird dies angezeigt als:
a, \, r
b, \, \
Da die meisten der Zeichen im Bereich [0–31] keine visuelle Darstellung haben (und nicht in den Windows-Schriftarten definiert sind), maskiert sie Passolo folgendermaßen:
7 \a
8 \b
9 \t
10 \n oder manchmal physisches Enter
11 \v
12 \f
13 \r
Der Rest wird als \nnn maskiert, wobei nnn die oktale Darstellung des ASCII-Codes des Zeichens ist
0 -> '\000'
14 -> '\012'
31 -> '\037'
Dabei muss auch \ maskiert werden:
\ -> '
'
Die aktuelle Escape-Methode (Maskierungsmethode) sollte entfernt und folgendermaßen durch eine Alternative ersetzt werden:
- Zeichencodes im Bereich [0–4] müssen verboten und von den Parsern gefiltert werden
- Der Zeichencode 0 ist der C-Marker für das Ende einer Zeichenfolge
- Der Zeichencode 1 wird manchmal als Trennzeichen für mehrere Strings verwendet
- Die Zeichen mit den Codes 2, 3, 4 werden in RichEdit als Inline-Tag-Marker verwendet
Die restlichen Zeichen im Bereich [5–31] sollten in ähnlicher Weise angezeigt werden, wie Inline-Tags angezeigt werden.
Sonderzeichen:
Unicode-Zeichen
Tag 0–4 verboten
5 ENQ – kann als Alt+Num0+Num5 (Zahlenblockzeichen) eingegeben werden
6 ACK
7 BEL
8 BS
9 (→) U+2192 Tabulator
10 (↵) U+21b5 Enter – kann als Strg+Enter eingegeben werden
11 VT
12 FF
13 Nicht verwendet
14 SO
15 SI
16 DLE
17 DC1
18 DC2
19 DC3
20 DC4
21 NAK
22 SYN
23 ETB
24 CAN
25 EM
26 SUB
27 ESC
28 FS
29 GS
30 RS
31 US
32 ' ' Leerzeichen -> (·) U+00B7, wenn Leerzeichen angezeigt werden
U+00B7 – (MIDDOT) Mittelpunkt
U+00A0 – (NBSP) Geschütztes Leerzeichen – kann eingegeben werden als Umschalt+Strg+Leertaste oder Alt+Num2,Num5,Num5 U+200B – (ZWS) Breitenloses Leerzeichen – kann eingegeben werden als Strg+Alt+Leertaste
U+200E – (LRM) Links-nach-rechts-Zeichen U+200F – (RLM) Rechts-nach-links-Zeichen
U+2039 – (LSAQUO) statt ‹, einfaches spitzes Anführungszeichen links U+203a – (RSAQUO) statt ›, einfaches spitzes Anführungszeichen rechts
U+2192 – → (RARR) Pfeil nach rechts U+21b5 – ↵ (CRARR) Pfeil nach unten mit Spitze nach links
Die restlichen Zeichen können mit speziellen Inline-Tags angezeigt werden, die deren jeweilige Namen enthalten.