Lade...
 

FrameMaker ExtendScript

GetText() liefert UTF8-kodierten Text

Aus der ersten Zelle einer im Dokument selektierten Reihe wird im folgenden Snipped der Text ermittelt und als Meldung an der Oberfläche ausgegeben.
GetText - UTF8
  1 . var row = app.ActiveDoc.SelectedTbl.TopRowSelection;
  2 . var cell = row.FirstCellInRow;
  3 . var textItems = cell.GetText (Constants.FTI_String) ;
  4 . var text = "" ;
  5 . for (var i = 0 ; i < textItems.length; i++)
  6 . {
  7 .   text += textItems[i].sdata ;
  8 . }
  9 . alert(text) ;
Enthält der Text Zeichen, die oberhalb des ASCII-Bereichs definiert sind (etwas Umlaute oder kyrillische Zeichen), werden diese Zeichen jetzt in derOberfläche UTF8-kodiert angezeigt. GetText liefert also in diesem Fall den internen FrameMaker Zeichencode zurück, wohingegen die Funktion AddText, mit der Text in die Zelle eingefügt werden kann, wie erwartet mit Unicode-Zeichenfolgen umgeht. Aus meiner Sicht also ein Bug, der nur umgangen werden kann, in dem die mit GetText() gelieferte Zeichenfolge dekodiert wird.
decode_utf8
  1 . function decode_utf8(utftext) 
  2 . {
  3 .   var plaintext = ""; 
  4 .   var i=0; 
  5 .   var c=c1=c2=0;
  6 .   while(i191) && (c<224)) 
  7 .     {
  8 .       c2 = utftext.charCodeAt(i+1);
  9 .       plaintext += 
 10 .              String.fromCharCode(((c&31)<<6) | 
 11 .              (c2&63));
 12 .       i+=2;
 13 .     }
 14 .     else 
 15 .     {
 16 .       c2 = utftext.charCodeAt(i+1); 
 17 .       c3 = utftext.charCodeAt(i+2);
 18 .       plaintext += 
 19 .              String.fromCharCode(((c&15)<<12) | 
 20 .               ((c2&63)<<6) | 
 21 .               (c3&63));
 22 .       i+=3;
 23 .     }
 24 .   }
 25 .   return plaintext;
 26 . }
Quelle: SelfHTML.de(externer Link)
Der Aufruf der Funktion ''decode_utf8" wird in Zeile 7 in das Beispiel integriert und die Meldung gibt den gewünschten Unicode-Text aus:
GetText - Unicode
  1 . var row = app.ActiveDoc.SelectedTbl.TopRowSelection;
  2 . var cell = row.FirstCellInRow;
  3 . var textItems = cell.GetText (Constants.FTI_String) ;
  4 . var text = "" ;
  5 . for (var i = 0 ; i < textItems.length; i++)
  6 . {
  7 .   text += decode_uft8(textItems[i].sdata) ;
  8 . }
  9 . alert(text)
veröffentlicht am 23 10 2011
Drucken