Methods Summary |
---|
public org.xmlpull.v1.XmlSerializer | attribute(java.lang.String namespace, java.lang.String name, java.lang.String value)
attributes.addElement(name);
attributes.addElement(value);
return this;
|
public void | cdsect(java.lang.String cdsect)
text (cdsect);
|
public void | checkPending(boolean degenerated)
if (pending == null)
return;
int len = attributes.size();
int[] idx = (int[]) tagTable.get(pending);
// if no entry in known table, then add as literal
if (idx == null) {
buf.write(
len == 0
? (degenerated ? Wbxml.LITERAL : Wbxml.LITERAL_C)
: (degenerated ? Wbxml.LITERAL_A : Wbxml.LITERAL_AC));
writeStrT(pending, false);
}
else {
if(idx[0] != tagPage){
tagPage=idx[0];
buf.write(Wbxml.SWITCH_PAGE);
buf.write(tagPage);
}
buf.write(
len == 0
? (degenerated ? idx[1] : idx[1] | 64)
: (degenerated
? idx[1] | 128
: idx[1] | 192));
}
for (int i = 0; i < len;) {
idx = (int[]) attrStartTable.get(attributes.elementAt(i));
if (idx == null) {
buf.write(Wbxml.LITERAL);
writeStrT((String) attributes.elementAt(i), false);
}
else {
if(idx[0] != attrPage){
attrPage = idx[0];
buf.write(0);
buf.write(attrPage);
}
buf.write(idx[1]);
}
idx = (int[]) attrValueTable.get(attributes.elementAt(++i));
if (idx == null) {
writeStr((String) attributes.elementAt(i));
}
else {
if(idx[0] != attrPage){
attrPage = idx[0];
buf.write(0);
buf.write(attrPage);
}
buf.write(idx[1]);
}
++i;
}
if (len > 0)
buf.write(Wbxml.END);
pending = null;
attributes.removeAllElements();
|
public void | comment(java.lang.String comment)
|
public void | docdecl(java.lang.String docdecl)
throw new RuntimeException ("Cannot write docdecl for WBXML");
|
public void | endDocument()
writeInt(out, stringTableBuf.size());
// write StringTable
out.write(stringTableBuf.toByteArray());
// write buf
out.write(buf.toByteArray());
// ready!
out.flush();
|
public org.xmlpull.v1.XmlSerializer | endTag(java.lang.String namespace, java.lang.String name)
// current = current.prev;
if (pending != null)
checkPending(true);
else
buf.write(Wbxml.END);
depth--;
return this;
|
public void | entityRef(java.lang.String er)
throw new RuntimeException ("EntityReference not supported for WBXML");
|
public void | flush()ATTENTION: flush cannot work since Wbxml documents require
buffering. Thus, this call does nothing.
|
public int | getDepth()
return depth;
|
public boolean | getFeature(java.lang.String name)
return false;
|
public java.lang.String | getName()
throw new RuntimeException("NYI");
|
public java.lang.String | getNamespace()
throw new RuntimeException("NYI");
|
public java.lang.String | getPrefix(java.lang.String nsp, boolean create)
throw new RuntimeException ("NYI");
|
public java.lang.Object | getProperty(java.lang.String name)
return null;
|
public void | ignorableWhitespace(java.lang.String sp)
|
public void | processingInstruction(java.lang.String pi)
throw new RuntimeException ("PI NYI");
|
public void | setAttrStartTable(int page, java.lang.String[] attrStartTable)Sets the attribute start Table for a given page.
The first string in the array defines attribute
5, the second attribute 6 etc.
Please use the
character '=' (without quote!) as delimiter
between the attribute name and the (start of the) value
for (int i = 0; i < attrStartTable.length; i++) {
if (attrStartTable[i] != null) {
Object idx = new int[] {page, i + 5};
this.attrStartTable.put(attrStartTable[i], idx);
}
}
|
public void | setAttrValueTable(int page, java.lang.String[] attrValueTable)Sets the attribute value Table for a given page.
The first string in the array defines attribute value 0x85,
the second attribute value 0x86 etc.
// clear entries in this.table!
for (int i = 0; i < attrValueTable.length; i++) {
if (attrValueTable[i] != null) {
Object idx = new int[]{page, i + 0x085};
this.attrValueTable.put(attrValueTable[i], idx);
}
}
|
public void | setFeature(java.lang.String name, boolean value)
throw new IllegalArgumentException ("unknown feature "+name);
|
public void | setOutput(java.io.Writer writer)
throw new RuntimeException ("Wbxml requires an OutputStream!");
|
public void | setOutput(java.io.OutputStream out, java.lang.String encoding)
this.encoding = encoding == null ? "UTF-8" : encoding;
this.out = out;
buf = new ByteArrayOutputStream();
stringTableBuf = new ByteArrayOutputStream();
// ok, write header
|
public void | setPrefix(java.lang.String prefix, java.lang.String nsp)
throw new RuntimeException("NYI");
|
public void | setProperty(java.lang.String property, java.lang.Object value)
throw new IllegalArgumentException ("unknown property "+property);
|
public void | setTagTable(int page, java.lang.String[] tagTable)Sets the tag table for a given page.
The first string in the array defines tag 5, the second tag 6 etc.
// TODO: clear entries in tagTable?
for (int i = 0; i < tagTable.length; i++) {
if (tagTable[i] != null) {
Object idx = new int[]{page, i+5};
this.tagTable.put(tagTable[i], idx);
}
}
|
public void | startDocument(java.lang.String s, java.lang.Boolean b)
out.write(0x03); // version 1.3
// http://www.openmobilealliance.org/tech/omna/omna-wbxml-public-docid.htm
out.write(0x01); // unknown or missing public identifier
// default encoding is UTF-8
if(s != null){
encoding = s;
}
if (encoding.toUpperCase().equals("UTF-8")){
out.write(106);
}else if (encoding.toUpperCase().equals("ISO-8859-1")){
out.write(0x04);
}else{
throw new UnsupportedEncodingException(s);
}
|
public org.xmlpull.v1.XmlSerializer | startTag(java.lang.String namespace, java.lang.String name)
if (namespace != null && !"".equals(namespace))
throw new RuntimeException ("NSP NYI");
//current = new State(current, prefixMap, name);
checkPending(false);
pending = name;
depth++;
return this;
|
public org.xmlpull.v1.XmlSerializer | text(char[] chars, int start, int len)
checkPending(false);
writeStr(new String(chars, start, len));
return this;
|
public org.xmlpull.v1.XmlSerializer | text(java.lang.String text)
checkPending(false);
writeStr(text);
return this;
|
static void | writeInt(java.io.OutputStream out, int i)
byte[] buf = new byte[5];
int idx = 0;
do {
buf[idx++] = (byte) (i & 0x7f);
i = i >> 7;
}
while (i != 0);
while (idx > 1) {
out.write(buf[--idx] | 0x80);
}
out.write(buf[0]);
|
private void | writeStr(java.lang.String text)Used in text() and attribute() to write text
int p0 = 0;
int lastCut = 0;
int len = text.length();
while(p0 < len){
while(p0 < len && text.charAt(p0) < 'A" ){ // skip interpunctation
p0++;
}
int p1 = p0;
while(p1 < len && text.charAt(p1) >= 'A"){
p1++;
}
if(p1 - p0 > 10) {
if(p0 > lastCut && text.charAt(p0-1) == ' "
&& stringTable.get(text.substring(p0, p1)) == null){
buf.write(Wbxml.STR_T);
writeStrT(text.substring(lastCut, p1), false);
}
else {
if(p0 > lastCut && text.charAt(p0-1) == ' "){
p0--;
}
if(p0 > lastCut){
buf.write(Wbxml.STR_T);
writeStrT(text.substring(lastCut, p0), false);
}
buf.write(Wbxml.STR_T);
writeStrT(text.substring(p0, p1), true);
}
lastCut = p1;
}
p0 = p1;
}
if(lastCut < len){
buf.write(Wbxml.STR_T);
writeStrT(text.substring(lastCut, len), false);
}
|
void | writeStrI(java.io.OutputStream out, java.lang.String s)
byte[] data = s.getBytes(encoding);
out.write(data);
out.write(0);
|
private final void | writeStrT(java.lang.String s, boolean mayPrependSpace)
Integer idx = (Integer) stringTable.get(s);
if (idx != null) {
writeInt(buf, idx.intValue());
}
else{
int i = stringTableBuf.size();
if(s.charAt(0) >= '0" && mayPrependSpace){
s = ' " + s;
writeInt(buf, i+1);
}
else{
writeInt(buf, i);
}
stringTable.put(s, new Integer(i));
if(s.charAt(0) == ' "){
stringTable.put(s.substring(1), new Integer(i+1));
}
int j = s.lastIndexOf(' ");
if(j > 1){
stringTable.put(s.substring(j), new Integer(i+j));
stringTable.put(s.substring(j+1), new Integer(i+j+1));
}
writeStrI(stringTableBuf, s);
stringTableBuf.flush();
}
|
public void | writeWapExtension(int type, java.lang.Object data)
checkPending(false);
buf.write(type);
switch(type){
case Wbxml.EXT_0:
case Wbxml.EXT_1:
case Wbxml.EXT_2:
break;
case Wbxml.OPAQUE:
byte[] bytes = (byte[]) data;
writeInt(buf, bytes.length);
buf.write(bytes);
break;
case Wbxml.EXT_I_0:
case Wbxml.EXT_I_1:
case Wbxml.EXT_I_2:
writeStrI(buf, (String) data);
break;
case Wbxml.EXT_T_0:
case Wbxml.EXT_T_1:
case Wbxml.EXT_T_2:
writeStrT((String) data, false);
break;
default:
throw new IllegalArgumentException();
}
|