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)

Eine Textdatei kann einen der folgenden End Of Line-(EOL-)Marker (Zeilenumbruchsmarker) haben:
  • 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:

  1. Der Parser sendet folgende Daten an Passolo:

    a, CR, LF, b, \

  2. Der Parser geht davon aus, dass CR LF der EOL-Marker ist.
  3. Aber Passolo geht davon aus, dass: LF der EOL-Marker ist.
  4. Um nichtdruckbare Zeichen anzuzeigen, werden diese maskiert: CR -> \, r und \ -> \, \

    Dies ergibt:

    a, \, r, LF, b, \, \

  5. Dann wird LF in den RichEdit-EOL-Marker umgewandelt, mit dem Ergebnis: a, \, r, CR, LF, b, \, \
  6. 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.