Not part of regular build, a=leaf. Updated the UTF-8 printing, hopefully I

handle this correctly.
This commit is contained in:
kvisco%ziplink.net 2000-09-06 09:48:12 +00:00
Родитель 1b3682c462
Коммит e040784aba
1 изменённых файлов: 54 добавлений и 10 удалений

Просмотреть файл

@ -23,7 +23,7 @@
* Bob Miller, kbob@oblix.com
* -- plugged core leak.
*
* $Id: XMLPrinter.cpp,v 1.5 2000-07-23 06:45:59 kvisco%ziplink.net Exp $
* $Id: XMLPrinter.cpp,v 1.6 2000-09-06 09:48:12 kvisco%ziplink.net Exp $
*/
#include "printers.h"
@ -36,7 +36,7 @@
* A class for printing XML nodes.
* This class was ported from XSL:P Java source
* @author <a href="kvisco@ziplink.net">Keith Visco</a>
* @version $Revision: 1.5 $ $Date: 2000-07-23 06:45:59 $
* @version $Revision: 1.6 $ $Date: 2000-09-06 09:48:12 $
**/
/**
@ -366,27 +366,71 @@ MBool XMLPrinter::print(Node* node, String& currentIndent) {
} //-- print
/**
* Print the proper UTF8 character
* based on code submitted by Majkel Kretschmar
* Print the proper UTF8 characters (ISO 10646)
**/
void XMLPrinter::printUTF8Char(DOM_CHAR ch) const {
ostream& out = *this->ostreamPtr;
if (ch >= 128) {
// DOM_CHAR is 16-bits so we only need to cover up to 0xFFFF
//-- 0x0000-0x007F
if (ch < 128)
out << (char)ch;
/*
else {
out << HEX_ENTITY;
if ( ch >= 256 ) out << (ch % 256);
else out << ch;
out << ch;
out << SEMICOLON;
}
else out << (char)ch;
*/
//-- 0x0080-0x07FF
else if (ch < 2048) {
out << (192+(ch/64)); // 0xC0 + x/64
out << (128+(ch%64)); // 0x80 + x%64
}
//-- 0x800-0xFFFF
else {
out << (224+(ch/4096)); // 0xE0 + x/64^2
out << (128+((ch/64)%64)); // 0x80 + (x/64)%64
out << (128+(ch%64)); // 0x80 + x%64
}
} //-- printUTF8Char
/**
* Print the proper UTF8 characters
* Print the proper UTF8 characters (ISO 10646)
* based on code submitted by Majkel Kretschmar
**/
void XMLPrinter::printUTF8Chars(const String& data) {
ostream& out = *this->ostreamPtr;
int i = 0;
while(i < data.length()) printUTF8Char(data.charAt(i++));
while(i < data.length()) {
DOM_CHAR ch = data.charAt(i++);
// DOM_CHAR is 16-bits so we only need to cover up to 0xFFFF
//-- 0x0000-0x007F
if (ch < 128)
out << (char)ch;
/*
else {
out << HEX_ENTITY;
out << ch;
out << SEMICOLON;
}
*/
//-- 0x0080-0x07FF
else if (ch < 2048) {
out << (192+(ch/64)); // 0xC0 + x/64
out << (128+(ch%64)); // 0x80 + x%64
}
//-- 0x800-0xFFFF
else {
out << (224+(ch/4096)); // 0xE0 + x/64^2
out << (128+((ch/64)%64)); // 0x80 + (x/64)%64
out << (128+(ch%64)); // 0x80 + x%64
}
}
} //-- printUTF8Chars
//-------------------/