From: ishmal Date: Sun, 21 May 2006 21:51:51 +0000 (+0000) Subject: Unix-ify the sources X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=5d8a2d163e4927fffb4efae5d811a4e644c170ce;p=inkscape.git Unix-ify the sources --- diff --git a/src/dom/charclass.cpp b/src/dom/charclass.cpp index 132402f34..28a9dc1b6 100644 --- a/src/dom/charclass.cpp +++ b/src/dom/charclass.cpp @@ -1,545 +1,545 @@ -/** - * Phoebe DOM Implementation. - * - * This is a C++ approximation of the W3C DOM model, which follows - * fairly closely the specifications in the various .idl files, copies of - * which are provided for reference. Most important is this one: - * - * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html - * - * Authors: - * Bob Jamison - * - * Copyright (C) 2005 Bob Jamison - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "charclass.h" - - -/** - * (impl) LetterOrDigit ::= - * Letter | Digit - */ -bool isLetterOrDigit(int ch) -{ - if (isLetter(ch)) - return true; - if (isDigit(ch)) - return true; - return false; -} - -/** - * (84) Letter ::= - * BaseChar | Ideographic - */ -bool isLetter(int ch) -{ - if (isBaseChar(ch)) - return true; - if (isIdeographic(ch)) - return true; - return false; -} - - -/** - * (85) BaseChar ::= - */ -bool isBaseChar(int ch) -{ - - if ( (0x0041 <= ch && ch <= 0x005A) | - (0x0061 <= ch && ch <= 0x007A) | - (0x00C0 <= ch && ch <= 0x00D6) | - (0x00D8 <= ch && ch <= 0x00F6) | - (0x00F8 <= ch && ch <= 0x00FF) | - (0x0100 <= ch && ch <= 0x0131) | - (0x0134 <= ch && ch <= 0x013E) | - (0x0141 <= ch && ch <= 0x0148) | - (0x014A <= ch && ch <= 0x017E) | - (0x0180 <= ch && ch <= 0x01C3) | - (0x01CD <= ch && ch <= 0x01F0) | - (0x01F4 <= ch && ch <= 0x01F5) | - (0x01FA <= ch && ch <= 0x0217) | - (0x0250 <= ch && ch <= 0x02A8) | - (0x02BB <= ch && ch <= 0x02C1) | - ch == 0x0386 | - (0x0388 <= ch && ch <= 0x038A) | - ch == 0x038C | - (0x038E <= ch && ch <= 0x03A1) | - (0x03A3 <= ch && ch <= 0x03CE) | - (0x03D0 <= ch && ch <= 0x03D6) | - ch == 0x03DA | - ch == 0x03DC | - ch == 0x03DE | - ch == 0x03E0 | - (0x03E2 <= ch && ch <= 0x03F3) | - (0x0401 <= ch && ch <= 0x040C) | - (0x040E <= ch && ch <= 0x044F) | - (0x0451 <= ch && ch <= 0x045C) | - (0x045E <= ch && ch <= 0x0481) | - (0x0490 <= ch && ch <= 0x04C4) | - (0x04C7 <= ch && ch <= 0x04C8) | - (0x04CB <= ch && ch <= 0x04CC) | - (0x04D0 <= ch && ch <= 0x04EB) | - (0x04EE <= ch && ch <= 0x04F5) | - (0x04F8 <= ch && ch <= 0x04F9) | - (0x0531 <= ch && ch <= 0x0556) | - ch == 0x0559 | - (0x0561 <= ch && ch <= 0x0586) | - (0x05D0 <= ch && ch <= 0x05EA) | - (0x05F0 <= ch && ch <= 0x05F2) | - (0x0621 <= ch && ch <= 0x063A) | - (0x0641 <= ch && ch <= 0x064A) | - (0x0671 <= ch && ch <= 0x06B7) | - (0x06BA <= ch && ch <= 0x06BE) | - (0x06C0 <= ch && ch <= 0x06CE) | - (0x06D0 <= ch && ch <= 0x06D3) | - ch == 0x06D5 | - (0x06E5 <= ch && ch <= 0x06E6) | - (0x0905 <= ch && ch <= 0x0939) | - ch == 0x093D | - (0x0958 <= ch && ch <= 0x0961) | - (0x0985 <= ch && ch <= 0x098C) | - (0x098F <= ch && ch <= 0x0990) | - (0x0993 <= ch && ch <= 0x09A8) | - (0x09AA <= ch && ch <= 0x09B0) | - ch == 0x09B2 | - (0x09B6 <= ch && ch <= 0x09B9) | - (0x09DC <= ch && ch <= 0x09DD) | - (0x09DF <= ch && ch <= 0x09E1) | - (0x09F0 <= ch && ch <= 0x09F1) | - (0x0A05 <= ch && ch <= 0x0A0A) | - (0x0A0F <= ch && ch <= 0x0A10) | - (0x0A13 <= ch && ch <= 0x0A28) | - (0x0A2A <= ch && ch <= 0x0A30) | - (0x0A32 <= ch && ch <= 0x0A33) | - (0x0A35 <= ch && ch <= 0x0A36) | - (0x0A38 <= ch && ch <= 0x0A39) | - (0x0A59 <= ch && ch <= 0x0A5C) | - ch == 0x0A5E | - (0x0A72 <= ch && ch <= 0x0A74) | - (0x0A85 <= ch && ch <= 0x0A8B) | - ch == 0x0A8D | - (0x0A8F <= ch && ch <= 0x0A91) | - (0x0A93 <= ch && ch <= 0x0AA8) | - (0x0AAA <= ch && ch <= 0x0AB0) | - (0x0AB2 <= ch && ch <= 0x0AB3) | - (0x0AB5 <= ch && ch <= 0x0AB9) | - ch == 0x0ABD | - ch == 0x0AE0 | - (0x0B05 <= ch && ch <= 0x0B0C) | - (0x0B0F <= ch && ch <= 0x0B10) | - (0x0B13 <= ch && ch <= 0x0B28) | - (0x0B2A <= ch && ch <= 0x0B30) | - (0x0B32 <= ch && ch <= 0x0B33) | - (0x0B36 <= ch && ch <= 0x0B39) | - ch == 0x0B3D | - (0x0B5C <= ch && ch <= 0x0B5D) | - (0x0B5F <= ch && ch <= 0x0B61) | - (0x0B85 <= ch && ch <= 0x0B8A) | - (0x0B8E <= ch && ch <= 0x0B90) | - (0x0B92 <= ch && ch <= 0x0B95) | - (0x0B99 <= ch && ch <= 0x0B9A) | - ch == 0x0B9C | - (0x0B9E <= ch && ch <= 0x0B9F) | - (0x0BA3 <= ch && ch <= 0x0BA4) | - (0x0BA8 <= ch && ch <= 0x0BAA) | - (0x0BAE <= ch && ch <= 0x0BB5) | - (0x0BB7 <= ch && ch <= 0x0BB9) | - (0x0C05 <= ch && ch <= 0x0C0C) | - (0x0C0E <= ch && ch <= 0x0C10) | - (0x0C12 <= ch && ch <= 0x0C28) | - (0x0C2A <= ch && ch <= 0x0C33) | - (0x0C35 <= ch && ch <= 0x0C39) | - (0x0C60 <= ch && ch <= 0x0C61) | - (0x0C85 <= ch && ch <= 0x0C8C) | - (0x0C8E <= ch && ch <= 0x0C90) | - (0x0C92 <= ch && ch <= 0x0CA8) | - (0x0CAA <= ch && ch <= 0x0CB3) | - (0x0CB5 <= ch && ch <= 0x0CB9) | - ch == 0x0CDE | - (0x0CE0 <= ch && ch <= 0x0CE1) | - (0x0D05 <= ch && ch <= 0x0D0C) | - (0x0D0E <= ch && ch <= 0x0D10) | - (0x0D12 <= ch && ch <= 0x0D28) | - (0x0D2A <= ch && ch <= 0x0D39) | - (0x0D60 <= ch && ch <= 0x0D61) | - (0x0E01 <= ch && ch <= 0x0E2E) | - ch == 0x0E30 | - (0x0E32 <= ch && ch <= 0x0E33) | - (0x0E40 <= ch && ch <= 0x0E45) | - (0x0E81 <= ch && ch <= 0x0E82) | - ch == 0x0E84 | - (0x0E87 <= ch && ch <= 0x0E88) | - ch == 0x0E8A | - ch == 0x0E8D | - (0x0E94 <= ch && ch <= 0x0E97) | - (0x0E99 <= ch && ch <= 0x0E9F) | - (0x0EA1 <= ch && ch <= 0x0EA3) | - ch == 0x0EA5 | - ch == 0x0EA7 | - (0x0EAA <= ch && ch <= 0x0EAB) | - (0x0EAD <= ch && ch <= 0x0EAE) | - ch == 0x0EB0 | - (0x0EB2 <= ch && ch <= 0x0EB3) | - ch == 0x0EBD | - (0x0EC0 <= ch && ch <= 0x0EC4) | - (0x0F40 <= ch && ch <= 0x0F47) | - (0x0F49 <= ch && ch <= 0x0F69) | - (0x10A0 <= ch && ch <= 0x10C5) | - (0x10D0 <= ch && ch <= 0x10F6) | - ch == 0x1100 | - (0x1102 <= ch && ch <= 0x1103) | - (0x1105 <= ch && ch <= 0x1107) | - ch == 0x1109 | - (0x110B <= ch && ch <= 0x110C) | - (0x110E <= ch && ch <= 0x1112) | - ch == 0x113C | - ch == 0x113E | - ch == 0x1140 | - ch == 0x114C | - ch == 0x114E | - ch == 0x1150 | - (0x1154 <= ch && ch <= 0x1155) | - ch == 0x1159 | - (0x115F <= ch && ch <= 0x1161) | - ch == 0x1163 | - ch == 0x1165 | - ch == 0x1167 | - ch == 0x1169 | - (0x116D <= ch && ch <= 0x116E) | - (0x1172 <= ch && ch <= 0x1173) | - ch == 0x1175 | - ch == 0x119E | - ch == 0x11A8 | - ch == 0x11AB | - (0x11AE <= ch && ch <= 0x11AF) | - (0x11B7 <= ch && ch <= 0x11B8) | - ch == 0x11BA | - (0x11BC <= ch && ch <= 0x11C2) | - ch == 0x11EB | - ch == 0x11F0 | - ch == 0x11F9 | - (0x1E00 <= ch && ch <= 0x1E9B) | - (0x1EA0 <= ch && ch <= 0x1EF9) | - (0x1F00 <= ch && ch <= 0x1F15) | - (0x1F18 <= ch && ch <= 0x1F1D) | - (0x1F20 <= ch && ch <= 0x1F45) | - (0x1F48 <= ch && ch <= 0x1F4D) | - (0x1F50 <= ch && ch <= 0x1F57) | - ch == 0x1F59 | - ch == 0x1F5B | - ch == 0x1F5D | - (0x1F5F <= ch && ch <= 0x1F7D) | - (0x1F80 <= ch && ch <= 0x1FB4) | - (0x1FB6 <= ch && ch <= 0x1FBC) | - ch == 0x1FBE | - (0x1FC2 <= ch && ch <= 0x1FC4) | - (0x1FC6 <= ch && ch <= 0x1FCC) | - (0x1FD0 <= ch && ch <= 0x1FD3) | - (0x1FD6 <= ch && ch <= 0x1FDB) | - (0x1FE0 <= ch && ch <= 0x1FEC) | - (0x1FF2 <= ch && ch <= 0x1FF4) | - (0x1FF6 <= ch && ch <= 0x1FFC) | - ch == 0x2126 | - (0x212A <= ch && ch <= 0x212B) | - ch == 0x212E | - (0x2180 <= ch && ch <= 0x2182) | - (0x3041 <= ch && ch <= 0x3094) | - (0x30A1 <= ch && ch <= 0x30FA) | - (0x3105 <= ch && ch <= 0x312C) | - (0xAC00 <= ch && ch <= 0xD7A3) ) - return true; - return false; -} - - - -/** - * (86) Ideographic ::= - */ -bool isIdeographic(int ch) -{ - if ( (0x4E00 <= ch && ch <=0x9FA5) | - ch == 0x3007 | - (0x3021 <= ch && ch <=0x3029) ) - return true; - return false; -} - -/** - * (87) CombiningChar ::= - */ -bool isCombiningChar(int ch) -{ - if ( (0x0300 <= ch && ch <= 0x0345) | - (0x0360 <= ch && ch <= 0x0361) | - (0x0483 <= ch && ch <= 0x0486) | - (0x0591 <= ch && ch <= 0x05A1) | - (0x05A3 <= ch && ch <= 0x05B9) | - (0x05BB <= ch && ch <= 0x05BD) | - ch == 0x05BF | - (0x05C1 <= ch && ch <= 0x05C2) | - ch == 0x05C4 | - (0x064B <= ch && ch <= 0x0652) | - ch == 0x0670 | - (0x06D6 <= ch && ch <= 0x06DC) | - (0x06DD <= ch && ch <= 0x06DF) | - (0x06E0 <= ch && ch <= 0x06E4) | - (0x06E7 <= ch && ch <= 0x06E8) | - (0x06EA <= ch && ch <= 0x06ED) | - (0x0901 <= ch && ch <= 0x0903) | - ch == 0x093C | - (0x093E <= ch && ch <= 0x094C) | - ch == 0x094D | - (0x0951 <= ch && ch <= 0x0954) | - (0x0962 <= ch && ch <= 0x0963) | - (0x0981 <= ch && ch <= 0x0983) | - ch == 0x09BC | - ch == 0x09BE | - ch == 0x09BF | - (0x09C0 <= ch && ch <= 0x09C4) | - (0x09C7 <= ch && ch <= 0x09C8) | - (0x09CB <= ch && ch <= 0x09CD) | - ch == 0x09D7 | - (0x09E2 <= ch && ch <= 0x09E3) | - ch == 0x0A02 | - ch == 0x0A3C | - ch == 0x0A3E | - ch == 0x0A3F | - (0x0A40 <= ch && ch <= 0x0A42) | - (0x0A47 <= ch && ch <= 0x0A48) | - (0x0A4B <= ch && ch <= 0x0A4D) | - (0x0A70 <= ch && ch <= 0x0A71) | - (0x0A81 <= ch && ch <= 0x0A83) | - ch == 0x0ABC | - (0x0ABE <= ch && ch <= 0x0AC5) | - (0x0AC7 <= ch && ch <= 0x0AC9) | - (0x0ACB <= ch && ch <= 0x0ACD) | - (0x0B01 <= ch && ch <= 0x0B03) | - ch == 0x0B3C | - (0x0B3E <= ch && ch <= 0x0B43) | - (0x0B47 <= ch && ch <= 0x0B48) | - (0x0B4B <= ch && ch <= 0x0B4D) | - (0x0B56 <= ch && ch <= 0x0B57) | - (0x0B82 <= ch && ch <= 0x0B83) | - (0x0BBE <= ch && ch <= 0x0BC2) | - (0x0BC6 <= ch && ch <= 0x0BC8) | - (0x0BCA <= ch && ch <= 0x0BCD) | - ch == 0x0BD7 | - (0x0C01 <= ch && ch <= 0x0C03) | - (0x0C3E <= ch && ch <= 0x0C44) | - (0x0C46 <= ch && ch <= 0x0C48) | - (0x0C4A <= ch && ch <= 0x0C4D) | - (0x0C55 <= ch && ch <= 0x0C56) | - (0x0C82 <= ch && ch <= 0x0C83) | - (0x0CBE <= ch && ch <= 0x0CC4) | - (0x0CC6 <= ch && ch <= 0x0CC8) | - (0x0CCA <= ch && ch <= 0x0CCD) | - (0x0CD5 <= ch && ch <= 0x0CD6) | - (0x0D02 <= ch && ch <= 0x0D03) | - (0x0D3E <= ch && ch <= 0x0D43) | - (0x0D46 <= ch && ch <= 0x0D48) | - (0x0D4A <= ch && ch <= 0x0D4D) | - ch == 0x0D57 | - ch == 0x0E31 | - (0x0E34 <= ch && ch <= 0x0E3A) | - (0x0E47 <= ch && ch <= 0x0E4E) | - ch == 0x0EB1 | - (0x0EB4 <= ch && ch <= 0x0EB9) | - (0x0EBB <= ch && ch <= 0x0EBC) | - (0x0EC8 <= ch && ch <= 0x0ECD) | - (0x0F18 <= ch && ch <= 0x0F19) | - ch == 0x0F35 | - ch == 0x0F37 | - ch == 0x0F39 | - ch == 0x0F3E | - ch == 0x0F3F | - (0x0F71 <= ch && ch <= 0x0F84) | - (0x0F86 <= ch && ch <= 0x0F8B) | - (0x0F90 <= ch && ch <= 0x0F95) | - ch == 0x0F97 | - (0x0F99 <= ch && ch <= 0x0FAD) | - (0x0FB1 <= ch && ch <= 0x0FB7) | - ch == 0x0FB9 | - (0x20D0 <= ch && ch <= 0x20DC) | - ch == 0x20E1 | - (0x302A <= ch && ch <= 0x302F) | - ch == 0x3099 | - ch == 0x309A ) - return true; - return false; -} - - -/** - * (88) Digit ::= - */ -bool isDigit(int ch) -{ - if ( (0x0030 <= ch && ch <= 0x0039) | - (0x0660 <= ch && ch <= 0x0669) | - (0x06F0 <= ch && ch <= 0x06F9) | - (0x0966 <= ch && ch <= 0x096F) | - (0x09E6 <= ch && ch <= 0x09EF) | - (0x0A66 <= ch && ch <= 0x0A6F) | - (0x0AE6 <= ch && ch <= 0x0AEF) | - (0x0B66 <= ch && ch <= 0x0B6F) | - (0x0BE7 <= ch && ch <= 0x0BEF) | - (0x0C66 <= ch && ch <= 0x0C6F) | - (0x0CE6 <= ch && ch <= 0x0CEF) | - (0x0D66 <= ch && ch <= 0x0D6F) | - (0x0E50 <= ch && ch <= 0x0E59) | - (0x0ED0 <= ch && ch <= 0x0ED9) | - (0x0F20 <= ch && ch <= 0x0F29) ) - return true; - return false; -} - - -/** - * (89) Extender ::= - */ -bool isExtender(int ch) -{ - if ( ch == 0x00B7 | - ch == 0x02D0 | - ch == 0x02D1 | - ch == 0x0387 | - ch == 0x0640 | - ch == 0x0E46 | - ch == 0x0EC6 | - ch == 0x3005 | - (0x3031 <= ch && ch <= 0x3035) | - (0x309D <= ch && ch <= 0x309E) | - (0x30FC <= ch && ch <= 0x30FE) ) - return true; - return false; -} - - - - - - -/** - * - * Following are from unicode.org, in the UnicodeData file - * in the Unicode Database - */ - -/** - * UNICODE general class Zs - */ -bool isSpaceSeparator(int ch) -{ - if (ch == 0x0020 || - ch == 0x200A || - ch == 0x2003 || - ch == 0x205F || - ch == 0x2005 || - ch == 0x202F || - ch == 0x2000 || - ch == 0x180E || - ch == 0x2001 || - ch == 0x2004 || - ch == 0x3000 || - ch == 0x2008 || - ch == 0x2006 || - ch == 0x2002 || - ch == 0x2007 || - ch == 0x2009 || - ch == 0x00A0 || - ch == 0x1680) - return true; - return false; -} - -/** - * UNICODE general class Zl - */ -bool isLineSeparator(int ch) -{ - if (ch == 0x2028) - return true; - return false; -} - -/** - * UNICODE general class Zp - */ -bool isParagraphSeparator(int ch) -{ - if (ch == 0x2029) - return true; - return false; -} - -/** - * The union of the 3 space types. - */ -bool isSpaceChar(int ch) -{ - if ( isSpaceSeparator(ch) || - isLineSeparator(ch) || - isParagraphSeparator(ch)) - return true; - return false; -} - -/** - * 3 spaces in isSpaceChar() which don't break - */ -bool isNonBreakingSpace(int ch) -{ - if (ch == 0x00A0 || ch == 0x2007 || ch == 0x202F) - return true; - return false; -} - -/** - * - */ -bool isWhitespace(int ch) -{ - if (isSpaceChar(ch) && !isNonBreakingSpace(ch)) - return true; - if (ch == 0x0009 || // HORIZONTAL TABULATION - ch == 0x000A || // LINE FEED. - ch == 0x000B || // VERTICAL TABULATION. - ch == 0x000C || // FORM FEED. - ch == 0x000D || // CARRIAGE RETURN. - ch == 0x001C || // FILE SEPARATOR. - ch == 0x001D || // GROUP SEPARATOR. - ch == 0x001E || // RECORD SEPARATOR. - ch == 0x001F) // UNIT SEPARATOR. - return true; - return false; -} - - - - - - - - - - - +/** + * Phoebe DOM Implementation. + * + * This is a C++ approximation of the W3C DOM model, which follows + * fairly closely the specifications in the various .idl files, copies of + * which are provided for reference. Most important is this one: + * + * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2005 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "charclass.h" + + +/** + * (impl) LetterOrDigit ::= + * Letter | Digit + */ +bool isLetterOrDigit(int ch) +{ + if (isLetter(ch)) + return true; + if (isDigit(ch)) + return true; + return false; +} + +/** + * (84) Letter ::= + * BaseChar | Ideographic + */ +bool isLetter(int ch) +{ + if (isBaseChar(ch)) + return true; + if (isIdeographic(ch)) + return true; + return false; +} + + +/** + * (85) BaseChar ::= + */ +bool isBaseChar(int ch) +{ + + if ( (0x0041 <= ch && ch <= 0x005A) | + (0x0061 <= ch && ch <= 0x007A) | + (0x00C0 <= ch && ch <= 0x00D6) | + (0x00D8 <= ch && ch <= 0x00F6) | + (0x00F8 <= ch && ch <= 0x00FF) | + (0x0100 <= ch && ch <= 0x0131) | + (0x0134 <= ch && ch <= 0x013E) | + (0x0141 <= ch && ch <= 0x0148) | + (0x014A <= ch && ch <= 0x017E) | + (0x0180 <= ch && ch <= 0x01C3) | + (0x01CD <= ch && ch <= 0x01F0) | + (0x01F4 <= ch && ch <= 0x01F5) | + (0x01FA <= ch && ch <= 0x0217) | + (0x0250 <= ch && ch <= 0x02A8) | + (0x02BB <= ch && ch <= 0x02C1) | + ch == 0x0386 | + (0x0388 <= ch && ch <= 0x038A) | + ch == 0x038C | + (0x038E <= ch && ch <= 0x03A1) | + (0x03A3 <= ch && ch <= 0x03CE) | + (0x03D0 <= ch && ch <= 0x03D6) | + ch == 0x03DA | + ch == 0x03DC | + ch == 0x03DE | + ch == 0x03E0 | + (0x03E2 <= ch && ch <= 0x03F3) | + (0x0401 <= ch && ch <= 0x040C) | + (0x040E <= ch && ch <= 0x044F) | + (0x0451 <= ch && ch <= 0x045C) | + (0x045E <= ch && ch <= 0x0481) | + (0x0490 <= ch && ch <= 0x04C4) | + (0x04C7 <= ch && ch <= 0x04C8) | + (0x04CB <= ch && ch <= 0x04CC) | + (0x04D0 <= ch && ch <= 0x04EB) | + (0x04EE <= ch && ch <= 0x04F5) | + (0x04F8 <= ch && ch <= 0x04F9) | + (0x0531 <= ch && ch <= 0x0556) | + ch == 0x0559 | + (0x0561 <= ch && ch <= 0x0586) | + (0x05D0 <= ch && ch <= 0x05EA) | + (0x05F0 <= ch && ch <= 0x05F2) | + (0x0621 <= ch && ch <= 0x063A) | + (0x0641 <= ch && ch <= 0x064A) | + (0x0671 <= ch && ch <= 0x06B7) | + (0x06BA <= ch && ch <= 0x06BE) | + (0x06C0 <= ch && ch <= 0x06CE) | + (0x06D0 <= ch && ch <= 0x06D3) | + ch == 0x06D5 | + (0x06E5 <= ch && ch <= 0x06E6) | + (0x0905 <= ch && ch <= 0x0939) | + ch == 0x093D | + (0x0958 <= ch && ch <= 0x0961) | + (0x0985 <= ch && ch <= 0x098C) | + (0x098F <= ch && ch <= 0x0990) | + (0x0993 <= ch && ch <= 0x09A8) | + (0x09AA <= ch && ch <= 0x09B0) | + ch == 0x09B2 | + (0x09B6 <= ch && ch <= 0x09B9) | + (0x09DC <= ch && ch <= 0x09DD) | + (0x09DF <= ch && ch <= 0x09E1) | + (0x09F0 <= ch && ch <= 0x09F1) | + (0x0A05 <= ch && ch <= 0x0A0A) | + (0x0A0F <= ch && ch <= 0x0A10) | + (0x0A13 <= ch && ch <= 0x0A28) | + (0x0A2A <= ch && ch <= 0x0A30) | + (0x0A32 <= ch && ch <= 0x0A33) | + (0x0A35 <= ch && ch <= 0x0A36) | + (0x0A38 <= ch && ch <= 0x0A39) | + (0x0A59 <= ch && ch <= 0x0A5C) | + ch == 0x0A5E | + (0x0A72 <= ch && ch <= 0x0A74) | + (0x0A85 <= ch && ch <= 0x0A8B) | + ch == 0x0A8D | + (0x0A8F <= ch && ch <= 0x0A91) | + (0x0A93 <= ch && ch <= 0x0AA8) | + (0x0AAA <= ch && ch <= 0x0AB0) | + (0x0AB2 <= ch && ch <= 0x0AB3) | + (0x0AB5 <= ch && ch <= 0x0AB9) | + ch == 0x0ABD | + ch == 0x0AE0 | + (0x0B05 <= ch && ch <= 0x0B0C) | + (0x0B0F <= ch && ch <= 0x0B10) | + (0x0B13 <= ch && ch <= 0x0B28) | + (0x0B2A <= ch && ch <= 0x0B30) | + (0x0B32 <= ch && ch <= 0x0B33) | + (0x0B36 <= ch && ch <= 0x0B39) | + ch == 0x0B3D | + (0x0B5C <= ch && ch <= 0x0B5D) | + (0x0B5F <= ch && ch <= 0x0B61) | + (0x0B85 <= ch && ch <= 0x0B8A) | + (0x0B8E <= ch && ch <= 0x0B90) | + (0x0B92 <= ch && ch <= 0x0B95) | + (0x0B99 <= ch && ch <= 0x0B9A) | + ch == 0x0B9C | + (0x0B9E <= ch && ch <= 0x0B9F) | + (0x0BA3 <= ch && ch <= 0x0BA4) | + (0x0BA8 <= ch && ch <= 0x0BAA) | + (0x0BAE <= ch && ch <= 0x0BB5) | + (0x0BB7 <= ch && ch <= 0x0BB9) | + (0x0C05 <= ch && ch <= 0x0C0C) | + (0x0C0E <= ch && ch <= 0x0C10) | + (0x0C12 <= ch && ch <= 0x0C28) | + (0x0C2A <= ch && ch <= 0x0C33) | + (0x0C35 <= ch && ch <= 0x0C39) | + (0x0C60 <= ch && ch <= 0x0C61) | + (0x0C85 <= ch && ch <= 0x0C8C) | + (0x0C8E <= ch && ch <= 0x0C90) | + (0x0C92 <= ch && ch <= 0x0CA8) | + (0x0CAA <= ch && ch <= 0x0CB3) | + (0x0CB5 <= ch && ch <= 0x0CB9) | + ch == 0x0CDE | + (0x0CE0 <= ch && ch <= 0x0CE1) | + (0x0D05 <= ch && ch <= 0x0D0C) | + (0x0D0E <= ch && ch <= 0x0D10) | + (0x0D12 <= ch && ch <= 0x0D28) | + (0x0D2A <= ch && ch <= 0x0D39) | + (0x0D60 <= ch && ch <= 0x0D61) | + (0x0E01 <= ch && ch <= 0x0E2E) | + ch == 0x0E30 | + (0x0E32 <= ch && ch <= 0x0E33) | + (0x0E40 <= ch && ch <= 0x0E45) | + (0x0E81 <= ch && ch <= 0x0E82) | + ch == 0x0E84 | + (0x0E87 <= ch && ch <= 0x0E88) | + ch == 0x0E8A | + ch == 0x0E8D | + (0x0E94 <= ch && ch <= 0x0E97) | + (0x0E99 <= ch && ch <= 0x0E9F) | + (0x0EA1 <= ch && ch <= 0x0EA3) | + ch == 0x0EA5 | + ch == 0x0EA7 | + (0x0EAA <= ch && ch <= 0x0EAB) | + (0x0EAD <= ch && ch <= 0x0EAE) | + ch == 0x0EB0 | + (0x0EB2 <= ch && ch <= 0x0EB3) | + ch == 0x0EBD | + (0x0EC0 <= ch && ch <= 0x0EC4) | + (0x0F40 <= ch && ch <= 0x0F47) | + (0x0F49 <= ch && ch <= 0x0F69) | + (0x10A0 <= ch && ch <= 0x10C5) | + (0x10D0 <= ch && ch <= 0x10F6) | + ch == 0x1100 | + (0x1102 <= ch && ch <= 0x1103) | + (0x1105 <= ch && ch <= 0x1107) | + ch == 0x1109 | + (0x110B <= ch && ch <= 0x110C) | + (0x110E <= ch && ch <= 0x1112) | + ch == 0x113C | + ch == 0x113E | + ch == 0x1140 | + ch == 0x114C | + ch == 0x114E | + ch == 0x1150 | + (0x1154 <= ch && ch <= 0x1155) | + ch == 0x1159 | + (0x115F <= ch && ch <= 0x1161) | + ch == 0x1163 | + ch == 0x1165 | + ch == 0x1167 | + ch == 0x1169 | + (0x116D <= ch && ch <= 0x116E) | + (0x1172 <= ch && ch <= 0x1173) | + ch == 0x1175 | + ch == 0x119E | + ch == 0x11A8 | + ch == 0x11AB | + (0x11AE <= ch && ch <= 0x11AF) | + (0x11B7 <= ch && ch <= 0x11B8) | + ch == 0x11BA | + (0x11BC <= ch && ch <= 0x11C2) | + ch == 0x11EB | + ch == 0x11F0 | + ch == 0x11F9 | + (0x1E00 <= ch && ch <= 0x1E9B) | + (0x1EA0 <= ch && ch <= 0x1EF9) | + (0x1F00 <= ch && ch <= 0x1F15) | + (0x1F18 <= ch && ch <= 0x1F1D) | + (0x1F20 <= ch && ch <= 0x1F45) | + (0x1F48 <= ch && ch <= 0x1F4D) | + (0x1F50 <= ch && ch <= 0x1F57) | + ch == 0x1F59 | + ch == 0x1F5B | + ch == 0x1F5D | + (0x1F5F <= ch && ch <= 0x1F7D) | + (0x1F80 <= ch && ch <= 0x1FB4) | + (0x1FB6 <= ch && ch <= 0x1FBC) | + ch == 0x1FBE | + (0x1FC2 <= ch && ch <= 0x1FC4) | + (0x1FC6 <= ch && ch <= 0x1FCC) | + (0x1FD0 <= ch && ch <= 0x1FD3) | + (0x1FD6 <= ch && ch <= 0x1FDB) | + (0x1FE0 <= ch && ch <= 0x1FEC) | + (0x1FF2 <= ch && ch <= 0x1FF4) | + (0x1FF6 <= ch && ch <= 0x1FFC) | + ch == 0x2126 | + (0x212A <= ch && ch <= 0x212B) | + ch == 0x212E | + (0x2180 <= ch && ch <= 0x2182) | + (0x3041 <= ch && ch <= 0x3094) | + (0x30A1 <= ch && ch <= 0x30FA) | + (0x3105 <= ch && ch <= 0x312C) | + (0xAC00 <= ch && ch <= 0xD7A3) ) + return true; + return false; +} + + + +/** + * (86) Ideographic ::= + */ +bool isIdeographic(int ch) +{ + if ( (0x4E00 <= ch && ch <=0x9FA5) | + ch == 0x3007 | + (0x3021 <= ch && ch <=0x3029) ) + return true; + return false; +} + +/** + * (87) CombiningChar ::= + */ +bool isCombiningChar(int ch) +{ + if ( (0x0300 <= ch && ch <= 0x0345) | + (0x0360 <= ch && ch <= 0x0361) | + (0x0483 <= ch && ch <= 0x0486) | + (0x0591 <= ch && ch <= 0x05A1) | + (0x05A3 <= ch && ch <= 0x05B9) | + (0x05BB <= ch && ch <= 0x05BD) | + ch == 0x05BF | + (0x05C1 <= ch && ch <= 0x05C2) | + ch == 0x05C4 | + (0x064B <= ch && ch <= 0x0652) | + ch == 0x0670 | + (0x06D6 <= ch && ch <= 0x06DC) | + (0x06DD <= ch && ch <= 0x06DF) | + (0x06E0 <= ch && ch <= 0x06E4) | + (0x06E7 <= ch && ch <= 0x06E8) | + (0x06EA <= ch && ch <= 0x06ED) | + (0x0901 <= ch && ch <= 0x0903) | + ch == 0x093C | + (0x093E <= ch && ch <= 0x094C) | + ch == 0x094D | + (0x0951 <= ch && ch <= 0x0954) | + (0x0962 <= ch && ch <= 0x0963) | + (0x0981 <= ch && ch <= 0x0983) | + ch == 0x09BC | + ch == 0x09BE | + ch == 0x09BF | + (0x09C0 <= ch && ch <= 0x09C4) | + (0x09C7 <= ch && ch <= 0x09C8) | + (0x09CB <= ch && ch <= 0x09CD) | + ch == 0x09D7 | + (0x09E2 <= ch && ch <= 0x09E3) | + ch == 0x0A02 | + ch == 0x0A3C | + ch == 0x0A3E | + ch == 0x0A3F | + (0x0A40 <= ch && ch <= 0x0A42) | + (0x0A47 <= ch && ch <= 0x0A48) | + (0x0A4B <= ch && ch <= 0x0A4D) | + (0x0A70 <= ch && ch <= 0x0A71) | + (0x0A81 <= ch && ch <= 0x0A83) | + ch == 0x0ABC | + (0x0ABE <= ch && ch <= 0x0AC5) | + (0x0AC7 <= ch && ch <= 0x0AC9) | + (0x0ACB <= ch && ch <= 0x0ACD) | + (0x0B01 <= ch && ch <= 0x0B03) | + ch == 0x0B3C | + (0x0B3E <= ch && ch <= 0x0B43) | + (0x0B47 <= ch && ch <= 0x0B48) | + (0x0B4B <= ch && ch <= 0x0B4D) | + (0x0B56 <= ch && ch <= 0x0B57) | + (0x0B82 <= ch && ch <= 0x0B83) | + (0x0BBE <= ch && ch <= 0x0BC2) | + (0x0BC6 <= ch && ch <= 0x0BC8) | + (0x0BCA <= ch && ch <= 0x0BCD) | + ch == 0x0BD7 | + (0x0C01 <= ch && ch <= 0x0C03) | + (0x0C3E <= ch && ch <= 0x0C44) | + (0x0C46 <= ch && ch <= 0x0C48) | + (0x0C4A <= ch && ch <= 0x0C4D) | + (0x0C55 <= ch && ch <= 0x0C56) | + (0x0C82 <= ch && ch <= 0x0C83) | + (0x0CBE <= ch && ch <= 0x0CC4) | + (0x0CC6 <= ch && ch <= 0x0CC8) | + (0x0CCA <= ch && ch <= 0x0CCD) | + (0x0CD5 <= ch && ch <= 0x0CD6) | + (0x0D02 <= ch && ch <= 0x0D03) | + (0x0D3E <= ch && ch <= 0x0D43) | + (0x0D46 <= ch && ch <= 0x0D48) | + (0x0D4A <= ch && ch <= 0x0D4D) | + ch == 0x0D57 | + ch == 0x0E31 | + (0x0E34 <= ch && ch <= 0x0E3A) | + (0x0E47 <= ch && ch <= 0x0E4E) | + ch == 0x0EB1 | + (0x0EB4 <= ch && ch <= 0x0EB9) | + (0x0EBB <= ch && ch <= 0x0EBC) | + (0x0EC8 <= ch && ch <= 0x0ECD) | + (0x0F18 <= ch && ch <= 0x0F19) | + ch == 0x0F35 | + ch == 0x0F37 | + ch == 0x0F39 | + ch == 0x0F3E | + ch == 0x0F3F | + (0x0F71 <= ch && ch <= 0x0F84) | + (0x0F86 <= ch && ch <= 0x0F8B) | + (0x0F90 <= ch && ch <= 0x0F95) | + ch == 0x0F97 | + (0x0F99 <= ch && ch <= 0x0FAD) | + (0x0FB1 <= ch && ch <= 0x0FB7) | + ch == 0x0FB9 | + (0x20D0 <= ch && ch <= 0x20DC) | + ch == 0x20E1 | + (0x302A <= ch && ch <= 0x302F) | + ch == 0x3099 | + ch == 0x309A ) + return true; + return false; +} + + +/** + * (88) Digit ::= + */ +bool isDigit(int ch) +{ + if ( (0x0030 <= ch && ch <= 0x0039) | + (0x0660 <= ch && ch <= 0x0669) | + (0x06F0 <= ch && ch <= 0x06F9) | + (0x0966 <= ch && ch <= 0x096F) | + (0x09E6 <= ch && ch <= 0x09EF) | + (0x0A66 <= ch && ch <= 0x0A6F) | + (0x0AE6 <= ch && ch <= 0x0AEF) | + (0x0B66 <= ch && ch <= 0x0B6F) | + (0x0BE7 <= ch && ch <= 0x0BEF) | + (0x0C66 <= ch && ch <= 0x0C6F) | + (0x0CE6 <= ch && ch <= 0x0CEF) | + (0x0D66 <= ch && ch <= 0x0D6F) | + (0x0E50 <= ch && ch <= 0x0E59) | + (0x0ED0 <= ch && ch <= 0x0ED9) | + (0x0F20 <= ch && ch <= 0x0F29) ) + return true; + return false; +} + + +/** + * (89) Extender ::= + */ +bool isExtender(int ch) +{ + if ( ch == 0x00B7 | + ch == 0x02D0 | + ch == 0x02D1 | + ch == 0x0387 | + ch == 0x0640 | + ch == 0x0E46 | + ch == 0x0EC6 | + ch == 0x3005 | + (0x3031 <= ch && ch <= 0x3035) | + (0x309D <= ch && ch <= 0x309E) | + (0x30FC <= ch && ch <= 0x30FE) ) + return true; + return false; +} + + + + + + +/** + * + * Following are from unicode.org, in the UnicodeData file + * in the Unicode Database + */ + +/** + * UNICODE general class Zs + */ +bool isSpaceSeparator(int ch) +{ + if (ch == 0x0020 || + ch == 0x200A || + ch == 0x2003 || + ch == 0x205F || + ch == 0x2005 || + ch == 0x202F || + ch == 0x2000 || + ch == 0x180E || + ch == 0x2001 || + ch == 0x2004 || + ch == 0x3000 || + ch == 0x2008 || + ch == 0x2006 || + ch == 0x2002 || + ch == 0x2007 || + ch == 0x2009 || + ch == 0x00A0 || + ch == 0x1680) + return true; + return false; +} + +/** + * UNICODE general class Zl + */ +bool isLineSeparator(int ch) +{ + if (ch == 0x2028) + return true; + return false; +} + +/** + * UNICODE general class Zp + */ +bool isParagraphSeparator(int ch) +{ + if (ch == 0x2029) + return true; + return false; +} + +/** + * The union of the 3 space types. + */ +bool isSpaceChar(int ch) +{ + if ( isSpaceSeparator(ch) || + isLineSeparator(ch) || + isParagraphSeparator(ch)) + return true; + return false; +} + +/** + * 3 spaces in isSpaceChar() which don't break + */ +bool isNonBreakingSpace(int ch) +{ + if (ch == 0x00A0 || ch == 0x2007 || ch == 0x202F) + return true; + return false; +} + +/** + * + */ +bool isWhitespace(int ch) +{ + if (isSpaceChar(ch) && !isNonBreakingSpace(ch)) + return true; + if (ch == 0x0009 || // HORIZONTAL TABULATION + ch == 0x000A || // LINE FEED. + ch == 0x000B || // VERTICAL TABULATION. + ch == 0x000C || // FORM FEED. + ch == 0x000D || // CARRIAGE RETURN. + ch == 0x001C || // FILE SEPARATOR. + ch == 0x001D || // GROUP SEPARATOR. + ch == 0x001E || // RECORD SEPARATOR. + ch == 0x001F) // UNIT SEPARATOR. + return true; + return false; +} + + + + + + + + + + + diff --git a/src/dom/charclass.h b/src/dom/charclass.h index 8b3546ea7..1f39c7e8d 100644 --- a/src/dom/charclass.h +++ b/src/dom/charclass.h @@ -1,220 +1,220 @@ -#ifndef __CHARCLASS_H__ -#define __CHARCLASS_H__ -/** - * Phoebe DOM Implementation. - * - * This is a C++ approximation of the W3C DOM model, which follows - * fairly closely the specifications in the various .idl files, copies of - * which are provided for reference. Most important is this one: - * - * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html - * - * Authors: - * Bob Jamison - * - * Copyright (C) 2005 Bob Jamison - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - - -/** - * Utility classes to test characters for their class, as specified in - * http://www.w3.org/TR/REC-xml/#CharClasses - */ - -/** - * Convenience method. Not in spec - * [impl] LetterOrDigit ::= - * Letter | Digit - */ -bool isLetterOrDigit(int ch); - - -/** - * [84] Letter ::= - * BaseChar | Ideographic - */ -bool isLetter(int ch); - - -/** - * [85] BaseChar ::= - * [#x0041-#x005A] | [#x0061-#x007A] | [#x00C0-#x00D6] | [#x00D8-#x00F6] | - * [#x00F8-#x00FF] | [#x0100-#x0131] | [#x0134-#x013E] | [#x0141-#x0148] | - * [#x014A-#x017E] | [#x0180-#x01C3] | [#x01CD-#x01F0] | [#x01F4-#x01F5] | - * [#x01FA-#x0217] | [#x0250-#x02A8] | [#x02BB-#x02C1] | #x0386 | - * [#x0388-#x038A] | #x038C | [#x038E-#x03A1] | [#x03A3-#x03CE] | - * [#x03D0-#x03D6] | #x03DA | #x03DC | #x03DE | #x03E0 | [#x03E2-#x03F3] | - * [#x0401-#x040C] | [#x040E-#x044F] | [#x0451-#x045C] | [#x045E-#x0481] | - * [#x0490-#x04C4] | [#x04C7-#x04C8] | [#x04CB-#x04CC] | [#x04D0-#x04EB] | - * [#x04EE-#x04F5] | [#x04F8-#x04F9] | [#x0531-#x0556] | #x0559 | - * [#x0561-#x0586] | [#x05D0-#x05EA] | [#x05F0-#x05F2] | [#x0621-#x063A] | - * [#x0641-#x064A] | [#x0671-#x06B7] | [#x06BA-#x06BE] | [#x06C0-#x06CE] | - * [#x06D0-#x06D3] | #x06D5 | [#x06E5-#x06E6] | [#x0905-#x0939] | #x093D | - * [#x0958-#x0961] | [#x0985-#x098C] | [#x098F-#x0990] | [#x0993-#x09A8] | - * [#x09AA-#x09B0] | #x09B2 | [#x09B6-#x09B9] | [#x09DC-#x09DD] | - * [#x09DF-#x09E1] | [#x09F0-#x09F1] | [#x0A05-#x0A0A] | [#x0A0F-#x0A10] | - * [#x0A13-#x0A28] | [#x0A2A-#x0A30] | [#x0A32-#x0A33] | [#x0A35-#x0A36] | - * [#x0A38-#x0A39] | [#x0A59-#x0A5C] | #x0A5E | [#x0A72-#x0A74] | - * [#x0A85-#x0A8B] | #x0A8D | [#x0A8F-#x0A91] | [#x0A93-#x0AA8] | - * [#x0AAA-#x0AB0] | [#x0AB2-#x0AB3] | [#x0AB5-#x0AB9] | #x0ABD | #x0AE0 | - * [#x0B05-#x0B0C] | [#x0B0F-#x0B10] | [#x0B13-#x0B28] | [#x0B2A-#x0B30] | - * [#x0B32-#x0B33] | [#x0B36-#x0B39] | #x0B3D | [#x0B5C-#x0B5D] | - * [#x0B5F-#x0B61] | [#x0B85-#x0B8A] | [#x0B8E-#x0B90] | [#x0B92-#x0B95] | - * [#x0B99-#x0B9A] | #x0B9C | [#x0B9E-#x0B9F] | [#x0BA3-#x0BA4] | - * [#x0BA8-#x0BAA] | [#x0BAE-#x0BB5] | [#x0BB7-#x0BB9] | [#x0C05-#x0C0C] | - * [#x0C0E-#x0C10] | [#x0C12-#x0C28] | [#x0C2A-#x0C33] | - * [#x0C35-#x0C39] | [#x0C60-#x0C61] | [#x0C85-#x0C8C] | [#x0C8E-#x0C90] | - * [#x0C92-#x0CA8] | [#x0CAA-#x0CB3] | [#x0CB5-#x0CB9] | #x0CDE | - * [#x0CE0-#x0CE1] | [#x0D05-#x0D0C] | [#x0D0E-#x0D10] | [#x0D12-#x0D28] | - * [#x0D2A-#x0D39] | [#x0D60-#x0D61] | [#x0E01-#x0E2E] | #x0E30 | - * [#x0E32-#x0E33] | [#x0E40-#x0E45] | [#x0E81-#x0E82] | #x0E84 | - * [#x0E87-#x0E88] | #x0E8A | #x0E8D | [#x0E94-#x0E97] | [#x0E99-#x0E9F] | - * [#x0EA1-#x0EA3] | #x0EA5 | #x0EA7 | [#x0EAA-#x0EAB] | [#x0EAD-#x0EAE] | - * #x0EB0 | [#x0EB2-#x0EB3] | #x0EBD | [#x0EC0-#x0EC4] | [#x0F40-#x0F47] | - * [#x0F49-#x0F69] | [#x10A0-#x10C5] | [#x10D0-#x10F6] | #x1100 | - * [#x1102-#x1103] | [#x1105-#x1107] | #x1109 | [#x110B-#x110C] | - * [#x110E-#x1112] | #x113C | #x113E | #x1140 | #x114C | #x114E | - * #x1150 | [#x1154-#x1155] | #x1159 | [#x115F-#x1161] | #x1163 | - * #x1165 | #x1167 | #x1169 | [#x116D-#x116E] | [#x1172-#x1173] | #x1175 | - * #x119E | #x11A8 | #x11AB | [#x11AE-#x11AF] | [#x11B7-#x11B8] | #x11BA | - * [#x11BC-#x11C2] | #x11EB | #x11F0 | #x11F9 | [#x1E00-#x1E9B] | - * [#x1EA0-#x1EF9] | [#x1F00-#x1F15] | [#x1F18-#x1F1D] | [#x1F20-#x1F45] | - * [#x1F48-#x1F4D] | [#x1F50-#x1F57] | #x1F59 | #x1F5B | #x1F5D | - * [#x1F5F-#x1F7D] | [#x1F80-#x1FB4] | [#x1FB6-#x1FBC] | #x1FBE | - * [#x1FC2-#x1FC4] | [#x1FC6-#x1FCC] | [#x1FD0-#x1FD3] | [#x1FD6-#x1FDB] | - * [#x1FE0-#x1FEC] | [#x1FF2-#x1FF4] | [#x1FF6-#x1FFC] | #x2126 | - * [#x212A-#x212B] | #x212E | [#x2180-#x2182] | [#x3041-#x3094] | - * [#x30A1-#x30FA] | [#x3105-#x312C] | [#xAC00-#xD7A3] - */ -bool isBaseChar(int ch); - - -/** - * [86] Ideographic ::= - * [#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029] - */ -bool isIdeographic(int ch); - - - - - -/** - * [87] CombiningChar ::= - * [#x0300-#x0345] | [#x0360-#x0361] | [#x0483-#x0486] | [#x0591-#x05A1] | - * [#x05A3-#x05B9] | [#x05BB-#x05BD] | #x05BF | [#x05C1-#x05C2] | #x05C4 | - * [#x064B-#x0652] | #x0670 | [#x06D6-#x06DC] | [#x06DD-#x06DF] | - * [#x06E0-#x06E4] | [#x06E7-#x06E8] | [#x06EA-#x06ED] | [#x0901-#x0903] | - * #x093C | [#x093E-#x094C] | #x094D | [#x0951-#x0954] |[#x0962-#x0963] | - * [#x0981-#x0983] | #x09BC | #x09BE | #x09BF | [#x09C0-#x09C4] | - * [#x09C7-#x09C8] | [#x09CB-#x09CD] | #x09D7 | [#x09E2-#x09E3] | - * #x0A02 | #x0A3C | #x0A3E | #x0A3F | [#x0A40-#x0A42] | [#x0A47-#x0A48] | - * [#x0A4B-#x0A4D] | [#x0A70-#x0A71] | [#x0A81-#x0A83] | #x0ABC | - * [#x0ABE-#x0AC5] | [#x0AC7-#x0AC9] | [#x0ACB-#x0ACD] | [#x0B01-#x0B03] | - * #x0B3C | [#x0B3E-#x0B43] | [#x0B47-#x0B48] | [#x0B4B-#x0B4D] | - * [#x0B56-#x0B57] | [#x0B82-#x0B83] | [#x0BBE-#x0BC2] | [#x0BC6-#x0BC8] | - * [#x0BCA-#x0BCD] | #x0BD7 | [#x0C01-#x0C03] | [#x0C3E-#x0C44] | - * [#x0C46-#x0C48] | [#x0C4A-#x0C4D] | [#x0C55-#x0C56] | [#x0C82-#x0C83] | - * [#x0CBE-#x0CC4] | [#x0CC6-#x0CC8] | [#x0CCA-#x0CCD] | [#x0CD5-#x0CD6] | - * [#x0D02-#x0D03] | [#x0D3E-#x0D43] | [#x0D46-#x0D48] | [#x0D4A-#x0D4D] | - * #x0D57 | #x0E31 | [#x0E34-#x0E3A] | [#x0E47-#x0E4E] | #x0EB1 | - * [#x0EB4-#x0EB9] | [#x0EBB-#x0EBC] | [#x0EC8-#x0ECD] | [#x0F18-#x0F19] | - * #x0F35 | #x0F37 | #x0F39 | #x0F3E | #x0F3F | [#x0F71-#x0F84] | - * [#x0F86-#x0F8B] | [#x0F90-#x0F95] | #x0F97 | [#x0F99-#x0FAD] | - * [#x0FB1-#x0FB7] | #x0FB9 | [#x20D0-#x20DC] | #x20E1 | [#x302A-#x302F] | - * #x3099 | #x309A - */ -bool isCombiningChar(int ch); - - - -/** - * [88] Digit ::= - * [#x0030-#x0039] | [#x0660-#x0669] | [#x06F0-#x06F9] | - * [#x0966-#x096F] | [#x09E6-#x09EF] | [#x0A66-#x0A6F] | [#x0AE6-#x0AEF] | - * [#x0B66-#x0B6F] | [#x0BE7-#x0BEF] | [#x0C66-#x0C6F] | [#x0CE6-#x0CEF] | - * [#x0D66-#x0D6F] | [#x0E50-#x0E59] | [#x0ED0-#x0ED9] | [#x0F20-#x0F29] - */ -bool isDigit(int ch); - - - - -/** - * [89] Extender ::= - * #x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 | #x0E46 | #x0EC6 | - * #x3005 | [#x3031-#x3035] | [#x309D-#x309E] | [#x30FC-#x30FE] - */ -bool isExtender(int ch); - - - -/** - * - * Following are from unicode.org, in the UnicodeData file - * in the Unicode Database - */ - -/** - * - */ -bool isSpaceSeparator(int ch); - -/** - * - */ -bool isLineSeparator(int ch); - -/** - * - */ -bool isParagraphSeparator(int ch); - -/** - * - */ -bool isSpaceChar(int ch); - -/** - * - */ -bool isNonBreakingSpace(int ch); - -/** - * - */ -bool isWhitespace(int ch); - -#endif /* __CHARCLASS_H__ */ - - - - - - - - - - - - - - - - - +#ifndef __CHARCLASS_H__ +#define __CHARCLASS_H__ +/** + * Phoebe DOM Implementation. + * + * This is a C++ approximation of the W3C DOM model, which follows + * fairly closely the specifications in the various .idl files, copies of + * which are provided for reference. Most important is this one: + * + * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2005 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + + +/** + * Utility classes to test characters for their class, as specified in + * http://www.w3.org/TR/REC-xml/#CharClasses + */ + +/** + * Convenience method. Not in spec + * [impl] LetterOrDigit ::= + * Letter | Digit + */ +bool isLetterOrDigit(int ch); + + +/** + * [84] Letter ::= + * BaseChar | Ideographic + */ +bool isLetter(int ch); + + +/** + * [85] BaseChar ::= + * [#x0041-#x005A] | [#x0061-#x007A] | [#x00C0-#x00D6] | [#x00D8-#x00F6] | + * [#x00F8-#x00FF] | [#x0100-#x0131] | [#x0134-#x013E] | [#x0141-#x0148] | + * [#x014A-#x017E] | [#x0180-#x01C3] | [#x01CD-#x01F0] | [#x01F4-#x01F5] | + * [#x01FA-#x0217] | [#x0250-#x02A8] | [#x02BB-#x02C1] | #x0386 | + * [#x0388-#x038A] | #x038C | [#x038E-#x03A1] | [#x03A3-#x03CE] | + * [#x03D0-#x03D6] | #x03DA | #x03DC | #x03DE | #x03E0 | [#x03E2-#x03F3] | + * [#x0401-#x040C] | [#x040E-#x044F] | [#x0451-#x045C] | [#x045E-#x0481] | + * [#x0490-#x04C4] | [#x04C7-#x04C8] | [#x04CB-#x04CC] | [#x04D0-#x04EB] | + * [#x04EE-#x04F5] | [#x04F8-#x04F9] | [#x0531-#x0556] | #x0559 | + * [#x0561-#x0586] | [#x05D0-#x05EA] | [#x05F0-#x05F2] | [#x0621-#x063A] | + * [#x0641-#x064A] | [#x0671-#x06B7] | [#x06BA-#x06BE] | [#x06C0-#x06CE] | + * [#x06D0-#x06D3] | #x06D5 | [#x06E5-#x06E6] | [#x0905-#x0939] | #x093D | + * [#x0958-#x0961] | [#x0985-#x098C] | [#x098F-#x0990] | [#x0993-#x09A8] | + * [#x09AA-#x09B0] | #x09B2 | [#x09B6-#x09B9] | [#x09DC-#x09DD] | + * [#x09DF-#x09E1] | [#x09F0-#x09F1] | [#x0A05-#x0A0A] | [#x0A0F-#x0A10] | + * [#x0A13-#x0A28] | [#x0A2A-#x0A30] | [#x0A32-#x0A33] | [#x0A35-#x0A36] | + * [#x0A38-#x0A39] | [#x0A59-#x0A5C] | #x0A5E | [#x0A72-#x0A74] | + * [#x0A85-#x0A8B] | #x0A8D | [#x0A8F-#x0A91] | [#x0A93-#x0AA8] | + * [#x0AAA-#x0AB0] | [#x0AB2-#x0AB3] | [#x0AB5-#x0AB9] | #x0ABD | #x0AE0 | + * [#x0B05-#x0B0C] | [#x0B0F-#x0B10] | [#x0B13-#x0B28] | [#x0B2A-#x0B30] | + * [#x0B32-#x0B33] | [#x0B36-#x0B39] | #x0B3D | [#x0B5C-#x0B5D] | + * [#x0B5F-#x0B61] | [#x0B85-#x0B8A] | [#x0B8E-#x0B90] | [#x0B92-#x0B95] | + * [#x0B99-#x0B9A] | #x0B9C | [#x0B9E-#x0B9F] | [#x0BA3-#x0BA4] | + * [#x0BA8-#x0BAA] | [#x0BAE-#x0BB5] | [#x0BB7-#x0BB9] | [#x0C05-#x0C0C] | + * [#x0C0E-#x0C10] | [#x0C12-#x0C28] | [#x0C2A-#x0C33] | + * [#x0C35-#x0C39] | [#x0C60-#x0C61] | [#x0C85-#x0C8C] | [#x0C8E-#x0C90] | + * [#x0C92-#x0CA8] | [#x0CAA-#x0CB3] | [#x0CB5-#x0CB9] | #x0CDE | + * [#x0CE0-#x0CE1] | [#x0D05-#x0D0C] | [#x0D0E-#x0D10] | [#x0D12-#x0D28] | + * [#x0D2A-#x0D39] | [#x0D60-#x0D61] | [#x0E01-#x0E2E] | #x0E30 | + * [#x0E32-#x0E33] | [#x0E40-#x0E45] | [#x0E81-#x0E82] | #x0E84 | + * [#x0E87-#x0E88] | #x0E8A | #x0E8D | [#x0E94-#x0E97] | [#x0E99-#x0E9F] | + * [#x0EA1-#x0EA3] | #x0EA5 | #x0EA7 | [#x0EAA-#x0EAB] | [#x0EAD-#x0EAE] | + * #x0EB0 | [#x0EB2-#x0EB3] | #x0EBD | [#x0EC0-#x0EC4] | [#x0F40-#x0F47] | + * [#x0F49-#x0F69] | [#x10A0-#x10C5] | [#x10D0-#x10F6] | #x1100 | + * [#x1102-#x1103] | [#x1105-#x1107] | #x1109 | [#x110B-#x110C] | + * [#x110E-#x1112] | #x113C | #x113E | #x1140 | #x114C | #x114E | + * #x1150 | [#x1154-#x1155] | #x1159 | [#x115F-#x1161] | #x1163 | + * #x1165 | #x1167 | #x1169 | [#x116D-#x116E] | [#x1172-#x1173] | #x1175 | + * #x119E | #x11A8 | #x11AB | [#x11AE-#x11AF] | [#x11B7-#x11B8] | #x11BA | + * [#x11BC-#x11C2] | #x11EB | #x11F0 | #x11F9 | [#x1E00-#x1E9B] | + * [#x1EA0-#x1EF9] | [#x1F00-#x1F15] | [#x1F18-#x1F1D] | [#x1F20-#x1F45] | + * [#x1F48-#x1F4D] | [#x1F50-#x1F57] | #x1F59 | #x1F5B | #x1F5D | + * [#x1F5F-#x1F7D] | [#x1F80-#x1FB4] | [#x1FB6-#x1FBC] | #x1FBE | + * [#x1FC2-#x1FC4] | [#x1FC6-#x1FCC] | [#x1FD0-#x1FD3] | [#x1FD6-#x1FDB] | + * [#x1FE0-#x1FEC] | [#x1FF2-#x1FF4] | [#x1FF6-#x1FFC] | #x2126 | + * [#x212A-#x212B] | #x212E | [#x2180-#x2182] | [#x3041-#x3094] | + * [#x30A1-#x30FA] | [#x3105-#x312C] | [#xAC00-#xD7A3] + */ +bool isBaseChar(int ch); + + +/** + * [86] Ideographic ::= + * [#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029] + */ +bool isIdeographic(int ch); + + + + + +/** + * [87] CombiningChar ::= + * [#x0300-#x0345] | [#x0360-#x0361] | [#x0483-#x0486] | [#x0591-#x05A1] | + * [#x05A3-#x05B9] | [#x05BB-#x05BD] | #x05BF | [#x05C1-#x05C2] | #x05C4 | + * [#x064B-#x0652] | #x0670 | [#x06D6-#x06DC] | [#x06DD-#x06DF] | + * [#x06E0-#x06E4] | [#x06E7-#x06E8] | [#x06EA-#x06ED] | [#x0901-#x0903] | + * #x093C | [#x093E-#x094C] | #x094D | [#x0951-#x0954] |[#x0962-#x0963] | + * [#x0981-#x0983] | #x09BC | #x09BE | #x09BF | [#x09C0-#x09C4] | + * [#x09C7-#x09C8] | [#x09CB-#x09CD] | #x09D7 | [#x09E2-#x09E3] | + * #x0A02 | #x0A3C | #x0A3E | #x0A3F | [#x0A40-#x0A42] | [#x0A47-#x0A48] | + * [#x0A4B-#x0A4D] | [#x0A70-#x0A71] | [#x0A81-#x0A83] | #x0ABC | + * [#x0ABE-#x0AC5] | [#x0AC7-#x0AC9] | [#x0ACB-#x0ACD] | [#x0B01-#x0B03] | + * #x0B3C | [#x0B3E-#x0B43] | [#x0B47-#x0B48] | [#x0B4B-#x0B4D] | + * [#x0B56-#x0B57] | [#x0B82-#x0B83] | [#x0BBE-#x0BC2] | [#x0BC6-#x0BC8] | + * [#x0BCA-#x0BCD] | #x0BD7 | [#x0C01-#x0C03] | [#x0C3E-#x0C44] | + * [#x0C46-#x0C48] | [#x0C4A-#x0C4D] | [#x0C55-#x0C56] | [#x0C82-#x0C83] | + * [#x0CBE-#x0CC4] | [#x0CC6-#x0CC8] | [#x0CCA-#x0CCD] | [#x0CD5-#x0CD6] | + * [#x0D02-#x0D03] | [#x0D3E-#x0D43] | [#x0D46-#x0D48] | [#x0D4A-#x0D4D] | + * #x0D57 | #x0E31 | [#x0E34-#x0E3A] | [#x0E47-#x0E4E] | #x0EB1 | + * [#x0EB4-#x0EB9] | [#x0EBB-#x0EBC] | [#x0EC8-#x0ECD] | [#x0F18-#x0F19] | + * #x0F35 | #x0F37 | #x0F39 | #x0F3E | #x0F3F | [#x0F71-#x0F84] | + * [#x0F86-#x0F8B] | [#x0F90-#x0F95] | #x0F97 | [#x0F99-#x0FAD] | + * [#x0FB1-#x0FB7] | #x0FB9 | [#x20D0-#x20DC] | #x20E1 | [#x302A-#x302F] | + * #x3099 | #x309A + */ +bool isCombiningChar(int ch); + + + +/** + * [88] Digit ::= + * [#x0030-#x0039] | [#x0660-#x0669] | [#x06F0-#x06F9] | + * [#x0966-#x096F] | [#x09E6-#x09EF] | [#x0A66-#x0A6F] | [#x0AE6-#x0AEF] | + * [#x0B66-#x0B6F] | [#x0BE7-#x0BEF] | [#x0C66-#x0C6F] | [#x0CE6-#x0CEF] | + * [#x0D66-#x0D6F] | [#x0E50-#x0E59] | [#x0ED0-#x0ED9] | [#x0F20-#x0F29] + */ +bool isDigit(int ch); + + + + +/** + * [89] Extender ::= + * #x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 | #x0E46 | #x0EC6 | + * #x3005 | [#x3031-#x3035] | [#x309D-#x309E] | [#x30FC-#x30FE] + */ +bool isExtender(int ch); + + + +/** + * + * Following are from unicode.org, in the UnicodeData file + * in the Unicode Database + */ + +/** + * + */ +bool isSpaceSeparator(int ch); + +/** + * + */ +bool isLineSeparator(int ch); + +/** + * + */ +bool isParagraphSeparator(int ch); + +/** + * + */ +bool isSpaceChar(int ch); + +/** + * + */ +bool isNonBreakingSpace(int ch); + +/** + * + */ +bool isWhitespace(int ch); + +#endif /* __CHARCLASS_H__ */ + + + + + + + + + + + + + + + + + diff --git a/src/dom/domconfig.h b/src/dom/domconfig.h index ec9e76b31..41dce7a10 100644 --- a/src/dom/domconfig.h +++ b/src/dom/domconfig.h @@ -1,52 +1,52 @@ -#ifndef __DOMCONFIG_H__ -#define __DOMCONFIG_H__ -/** - * Phoebe DOM Implementation. - * - * This is a C++ approximation of the W3C DOM model, which follows - * fairly closely the specifications in the various .idl files, copies of - * which are provided for reference. Most important is this one: - * - * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html - * - * Authors: - * Bob Jamison - * - * Copyright (C) 2006 Bob Jamison - * - * rwjj@earthlink.net - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * What kind of implementation of DOMString and XMLCh do we want? - * Define one of the two below for either our own implementation, - * or GlibMM's Glib::ustring. If neither one is defined, then DOMString - * is defined as stdc++'s std::string. - */ -#define DOM_STRING_GLIBMM -//#define DOM_STRING_OWN - - - - - -#endif /* __DOMCONFIG_H__ */ -/*######################################################################### -## E N D O F F I L E -#########################################################################*/ - - +#ifndef __DOMCONFIG_H__ +#define __DOMCONFIG_H__ +/** + * Phoebe DOM Implementation. + * + * This is a C++ approximation of the W3C DOM model, which follows + * fairly closely the specifications in the various .idl files, copies of + * which are provided for reference. Most important is this one: + * + * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2006 Bob Jamison + * + * rwjj@earthlink.net + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * What kind of implementation of DOMString and XMLCh do we want? + * Define one of the two below for either our own implementation, + * or GlibMM's Glib::ustring. If neither one is defined, then DOMString + * is defined as stdc++'s std::string. + */ +#define DOM_STRING_GLIBMM +//#define DOM_STRING_OWN + + + + + +#endif /* __DOMCONFIG_H__ */ +/*######################################################################### +## E N D O F F I L E +#########################################################################*/ + + diff --git a/src/dom/io/base64stream.cpp b/src/dom/io/base64stream.cpp index 42df842c4..f71532e8b 100644 --- a/src/dom/io/base64stream.cpp +++ b/src/dom/io/base64stream.cpp @@ -1,339 +1,339 @@ -/** - * Phoebe DOM Implementation. - * - * Base64-enabled input and output streams - * - * This class allows easy encoding and decoding - * of Base64 data with a stream interface, hiding - * the implementation from the user. - * - * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html - * - * Authors: - * Bob Jamison - * - * Copyright (C) 2006 Bob Jamison - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - - -#include "base64stream.h" - - -namespace org -{ -namespace w3c -{ -namespace dom -{ -namespace io -{ - - -//######################################################################### -//# B A S E 6 4 I N P U T S T R E A M -//######################################################################### - -static int base64decode[] = -{ -/*00*/ -1, -1, -1, -1, -1, -1, -1, -1, -/*08*/ -1, -1, -1, -1, -1, -1, -1, -1, -/*10*/ -1, -1, -1, -1, -1, -1, -1, -1, -/*18*/ -1, -1, -1, -1, -1, -1, -1, -1, -/*20*/ -1, -1, -1, -1, -1, -1, -1, -1, -/*28*/ -1, -1, -1, 62, -1, -1, -1, 63, -/*30*/ 52, 53, 54, 55, 56, 57, 58, 59, -/*38*/ 60, 61, -1, -1, -1, -1, -1, -1, -/*40*/ -1, 0, 1, 2, 3, 4, 5, 6, -/*48*/ 7, 8, 9, 10, 11, 12, 13, 14, -/*50*/ 15, 16, 17, 18, 19, 20, 21, 22, -/*58*/ 23, 24, 25, -1, -1, -1, -1, -1, -/*60*/ -1, 26, 27, 28, 29, 30, 31, 32, -/*68*/ 33, 34, 35, 36, 37, 38, 39, 40, -/*70*/ 41, 42, 43, 44, 45, 46, 47, 48, -/*78*/ 49, 50, 51, -1, -1, -1, -1, -1 -}; - - -/** - * - */ -Base64InputStream::Base64InputStream(InputStream &sourceStream) - : BasicInputStream(sourceStream) -{ - outCount = 0; - padCount = 0; - closed = false; - done = false; -} - -/** - * - */ -Base64InputStream::~Base64InputStream() -{ - close(); -} - -/** - * Returns the number of bytes that can be read (or skipped over) from - * this input stream without blocking by the next caller of a method for - * this input stream. - */ -int Base64InputStream::available() -{ - if (closed ) - return 0; - int len = source.available() * 2 / 3; - return len; -} - - -/** - * Closes this input stream and releases any system resources - * associated with the stream. - */ -void Base64InputStream::close() -{ - if (closed) - return; - source.close(); - closed = true; -} - -/** - * Reads the next byte of data from the input stream. -1 if EOF - */ -int Base64InputStream::get() -{ - if (closed) - return -1; - - if (outCount - padCount > 0) - { - return outBytes[3-(outCount--)]; - } - - if (done) - return -1; - - int inBytes[4]; - int inCount = 0; - while (inCount < 4) - { - int ch = source.get(); - if (ch < 0) - { - while (inCount < 4) //pad if needed - { - inBytes[inCount++] = 0; - padCount++; - } - done = true; - break; - } - if (isspace(ch)) //ascii whitespace - { - //nothing - } - else if (ch == '=') //padding - { - inBytes[inCount++] = 0; - padCount++; - } - else - { - int byteVal = base64decode[ch & 0x7f]; - //printf("char:%c %d\n", ch, byteVal); - if (byteVal < 0) - { - //Bad lookup value - } - inBytes[inCount++] = byteVal; - } - } - - outBytes[0] = ((inBytes[0]<<2) & 0xfc) | ((inBytes[1]>>4) & 0x03); - outBytes[1] = ((inBytes[1]<<4) & 0xf0) | ((inBytes[2]>>2) & 0x0f); - outBytes[2] = ((inBytes[2]<<6) & 0xc0) | ((inBytes[3] ) & 0x3f); - - outCount = 3; - - //try again - if (outCount - padCount > 0) - { - return outBytes[3-(outCount--)]; - } - - return -1; - -} - - -//######################################################################### -//# B A S E 6 4 O U T P U T S T R E A M -//######################################################################### - -static char *base64encode = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - -/** - * - */ -Base64OutputStream::Base64OutputStream(OutputStream &destinationStream) - : BasicOutputStream(destinationStream) -{ - column = 0; - columnWidth = 72; - outBuf = 0L; - bitCount = 0; -} - -/** - * - */ -Base64OutputStream::~Base64OutputStream() -{ - close(); -} - -/** - * Closes this output stream and releases any system resources - * associated with this stream. - */ -void Base64OutputStream::close() -{ - if (closed) - return; - - //get any last bytes (1 or 2) out of the buffer - if (bitCount == 16) - { - outBuf <<= 2; //pad to make 18 bits - - int indx = (int)((outBuf & 0x0003f000L) >> 12); - int obyte = (int)base64encode[indx & 63]; - putCh(obyte); - - indx = (int)((outBuf & 0x00000fc0L) >> 6); - obyte = (int)base64encode[indx & 63]; - putCh(obyte); - - indx = (int)((outBuf & 0x0000003fL) ); - obyte = (int)base64encode[indx & 63]; - putCh(obyte); - - putCh('='); - } - else if (bitCount == 8) - { - outBuf <<= 4; //pad to make 12 bits - - int indx = (int)((outBuf & 0x00000fc0L) >> 6); - int obyte = (int)base64encode[indx & 63]; - putCh(obyte); - - indx = (int)((outBuf & 0x0000003fL) ); - obyte = (int)base64encode[indx & 63]; - putCh(obyte); - - putCh('='); - putCh('='); - } - - if (columnWidth > 0) //if <=0, no newlines - destination.put('\n'); - - destination.close(); - closed = true; -} - -/** - * Flushes this output stream and forces any buffered output - * bytes to be written out. - */ -void Base64OutputStream::flush() -{ - if (closed) - return; - //dont flush here. do it on close() - destination.flush(); -} - -/** - * Private. Put a char to the output stream, checking for line length - */ -void Base64OutputStream::putCh(int ch) -{ - destination.put(ch); - column++; - if (columnWidth > 0 && column >= columnWidth) - { - destination.put('\n'); - column = 0; - } -} - - -/** - * Writes the specified byte to this output stream. - */ -void Base64OutputStream::put(XMLCh ch) -{ - if (closed) - { - //probably throw an exception here - return; - } - - outBuf <<= 8; - outBuf |= (ch & 0xff); - bitCount += 8; - if (bitCount >= 24) - { - int indx = (int)((outBuf & 0x00fc0000L) >> 18); - int obyte = (int)base64encode[indx & 63]; - putCh(obyte); - - indx = (int)((outBuf & 0x0003f000L) >> 12); - obyte = (int)base64encode[indx & 63]; - putCh(obyte); - - indx = (int)((outBuf & 0x00000fc0L) >> 6); - obyte = (int)base64encode[indx & 63]; - putCh(obyte); - - indx = (int)((outBuf & 0x0000003fL) ); - obyte = (int)base64encode[indx & 63]; - putCh(obyte); - - bitCount = 0; - outBuf = 0L; - } -} - - - -} //namespace io -} //namespace dom -} //namespace w3c -} //namespace org - - -//######################################################################### -//# E N D O F F I L E -//######################################################################### +/** + * Phoebe DOM Implementation. + * + * Base64-enabled input and output streams + * + * This class allows easy encoding and decoding + * of Base64 data with a stream interface, hiding + * the implementation from the user. + * + * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2006 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + + +#include "base64stream.h" + + +namespace org +{ +namespace w3c +{ +namespace dom +{ +namespace io +{ + + +//######################################################################### +//# B A S E 6 4 I N P U T S T R E A M +//######################################################################### + +static int base64decode[] = +{ +/*00*/ -1, -1, -1, -1, -1, -1, -1, -1, +/*08*/ -1, -1, -1, -1, -1, -1, -1, -1, +/*10*/ -1, -1, -1, -1, -1, -1, -1, -1, +/*18*/ -1, -1, -1, -1, -1, -1, -1, -1, +/*20*/ -1, -1, -1, -1, -1, -1, -1, -1, +/*28*/ -1, -1, -1, 62, -1, -1, -1, 63, +/*30*/ 52, 53, 54, 55, 56, 57, 58, 59, +/*38*/ 60, 61, -1, -1, -1, -1, -1, -1, +/*40*/ -1, 0, 1, 2, 3, 4, 5, 6, +/*48*/ 7, 8, 9, 10, 11, 12, 13, 14, +/*50*/ 15, 16, 17, 18, 19, 20, 21, 22, +/*58*/ 23, 24, 25, -1, -1, -1, -1, -1, +/*60*/ -1, 26, 27, 28, 29, 30, 31, 32, +/*68*/ 33, 34, 35, 36, 37, 38, 39, 40, +/*70*/ 41, 42, 43, 44, 45, 46, 47, 48, +/*78*/ 49, 50, 51, -1, -1, -1, -1, -1 +}; + + +/** + * + */ +Base64InputStream::Base64InputStream(InputStream &sourceStream) + : BasicInputStream(sourceStream) +{ + outCount = 0; + padCount = 0; + closed = false; + done = false; +} + +/** + * + */ +Base64InputStream::~Base64InputStream() +{ + close(); +} + +/** + * Returns the number of bytes that can be read (or skipped over) from + * this input stream without blocking by the next caller of a method for + * this input stream. + */ +int Base64InputStream::available() +{ + if (closed ) + return 0; + int len = source.available() * 2 / 3; + return len; +} + + +/** + * Closes this input stream and releases any system resources + * associated with the stream. + */ +void Base64InputStream::close() +{ + if (closed) + return; + source.close(); + closed = true; +} + +/** + * Reads the next byte of data from the input stream. -1 if EOF + */ +int Base64InputStream::get() +{ + if (closed) + return -1; + + if (outCount - padCount > 0) + { + return outBytes[3-(outCount--)]; + } + + if (done) + return -1; + + int inBytes[4]; + int inCount = 0; + while (inCount < 4) + { + int ch = source.get(); + if (ch < 0) + { + while (inCount < 4) //pad if needed + { + inBytes[inCount++] = 0; + padCount++; + } + done = true; + break; + } + if (isspace(ch)) //ascii whitespace + { + //nothing + } + else if (ch == '=') //padding + { + inBytes[inCount++] = 0; + padCount++; + } + else + { + int byteVal = base64decode[ch & 0x7f]; + //printf("char:%c %d\n", ch, byteVal); + if (byteVal < 0) + { + //Bad lookup value + } + inBytes[inCount++] = byteVal; + } + } + + outBytes[0] = ((inBytes[0]<<2) & 0xfc) | ((inBytes[1]>>4) & 0x03); + outBytes[1] = ((inBytes[1]<<4) & 0xf0) | ((inBytes[2]>>2) & 0x0f); + outBytes[2] = ((inBytes[2]<<6) & 0xc0) | ((inBytes[3] ) & 0x3f); + + outCount = 3; + + //try again + if (outCount - padCount > 0) + { + return outBytes[3-(outCount--)]; + } + + return -1; + +} + + +//######################################################################### +//# B A S E 6 4 O U T P U T S T R E A M +//######################################################################### + +static char *base64encode = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +/** + * + */ +Base64OutputStream::Base64OutputStream(OutputStream &destinationStream) + : BasicOutputStream(destinationStream) +{ + column = 0; + columnWidth = 72; + outBuf = 0L; + bitCount = 0; +} + +/** + * + */ +Base64OutputStream::~Base64OutputStream() +{ + close(); +} + +/** + * Closes this output stream and releases any system resources + * associated with this stream. + */ +void Base64OutputStream::close() +{ + if (closed) + return; + + //get any last bytes (1 or 2) out of the buffer + if (bitCount == 16) + { + outBuf <<= 2; //pad to make 18 bits + + int indx = (int)((outBuf & 0x0003f000L) >> 12); + int obyte = (int)base64encode[indx & 63]; + putCh(obyte); + + indx = (int)((outBuf & 0x00000fc0L) >> 6); + obyte = (int)base64encode[indx & 63]; + putCh(obyte); + + indx = (int)((outBuf & 0x0000003fL) ); + obyte = (int)base64encode[indx & 63]; + putCh(obyte); + + putCh('='); + } + else if (bitCount == 8) + { + outBuf <<= 4; //pad to make 12 bits + + int indx = (int)((outBuf & 0x00000fc0L) >> 6); + int obyte = (int)base64encode[indx & 63]; + putCh(obyte); + + indx = (int)((outBuf & 0x0000003fL) ); + obyte = (int)base64encode[indx & 63]; + putCh(obyte); + + putCh('='); + putCh('='); + } + + if (columnWidth > 0) //if <=0, no newlines + destination.put('\n'); + + destination.close(); + closed = true; +} + +/** + * Flushes this output stream and forces any buffered output + * bytes to be written out. + */ +void Base64OutputStream::flush() +{ + if (closed) + return; + //dont flush here. do it on close() + destination.flush(); +} + +/** + * Private. Put a char to the output stream, checking for line length + */ +void Base64OutputStream::putCh(int ch) +{ + destination.put(ch); + column++; + if (columnWidth > 0 && column >= columnWidth) + { + destination.put('\n'); + column = 0; + } +} + + +/** + * Writes the specified byte to this output stream. + */ +void Base64OutputStream::put(XMLCh ch) +{ + if (closed) + { + //probably throw an exception here + return; + } + + outBuf <<= 8; + outBuf |= (ch & 0xff); + bitCount += 8; + if (bitCount >= 24) + { + int indx = (int)((outBuf & 0x00fc0000L) >> 18); + int obyte = (int)base64encode[indx & 63]; + putCh(obyte); + + indx = (int)((outBuf & 0x0003f000L) >> 12); + obyte = (int)base64encode[indx & 63]; + putCh(obyte); + + indx = (int)((outBuf & 0x00000fc0L) >> 6); + obyte = (int)base64encode[indx & 63]; + putCh(obyte); + + indx = (int)((outBuf & 0x0000003fL) ); + obyte = (int)base64encode[indx & 63]; + putCh(obyte); + + bitCount = 0; + outBuf = 0L; + } +} + + + +} //namespace io +} //namespace dom +} //namespace w3c +} //namespace org + + +//######################################################################### +//# E N D O F F I L E +//######################################################################### diff --git a/src/dom/io/base64stream.h b/src/dom/io/base64stream.h index ed5159b3c..23ec1ce07 100644 --- a/src/dom/io/base64stream.h +++ b/src/dom/io/base64stream.h @@ -1,146 +1,146 @@ -#ifndef __DOM_IO_BASE64STREAM_H__ -#define __DOM_IO_BASE64STREAM_H__ - -/** - * Phoebe DOM Implementation. - * - * Base64-enabled input and output streams - * - * This class allows easy encoding and decoding - * of Base64 data with a stream interface, hiding - * the implementation from the user. - * - * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html - * - * Authors: - * Bob Jamison - * - * Copyright (C) 2006 Bob Jamison - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - - -#include "domstream.h" - - -namespace org -{ -namespace w3c -{ -namespace dom -{ -namespace io -{ - - - -//######################################################################### -//# B A S E 6 4 I N P U T S T R E A M -//######################################################################### - -/** - * This class is for decoding a Base-64 encoded InputStream source - * - */ -class Base64InputStream : public BasicInputStream -{ - -public: - - Base64InputStream(InputStream &sourceStream); - - virtual ~Base64InputStream(); - - virtual int available(); - - virtual void close(); - - virtual int get(); - -private: - - int outBytes[3]; - - int outCount; - - int padCount; - - bool done; - -}; // class Base64InputStream - - - - -//######################################################################### -//# B A S E 6 4 O U T P U T S T R E A M -//######################################################################### - -/** - * This class is for Base-64 encoding data going to the - * destination OutputStream - * - */ -class Base64OutputStream : public BasicOutputStream -{ - -public: - - Base64OutputStream(OutputStream &destinationStream); - - virtual ~Base64OutputStream(); - - virtual void close(); - - virtual void flush(); - - virtual void put(XMLCh ch); - - /** - * Sets the maximum line length for base64 output. If - * set to <=0, then there will be no line breaks; - */ - virtual void setColumnWidth(int val) - { columnWidth = val; } - -private: - - void putCh(int ch); - - int column; - - int columnWidth; - - unsigned long outBuf; - - int bitCount; - -}; // class Base64OutputStream - - - - - - - -} //namespace io -} //namespace dom -} //namespace w3c -} //namespace org - - -#endif /* __INKSCAPE_IO_BASE64STREAM_H__ */ +#ifndef __DOM_IO_BASE64STREAM_H__ +#define __DOM_IO_BASE64STREAM_H__ + +/** + * Phoebe DOM Implementation. + * + * Base64-enabled input and output streams + * + * This class allows easy encoding and decoding + * of Base64 data with a stream interface, hiding + * the implementation from the user. + * + * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2006 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + + +#include "domstream.h" + + +namespace org +{ +namespace w3c +{ +namespace dom +{ +namespace io +{ + + + +//######################################################################### +//# B A S E 6 4 I N P U T S T R E A M +//######################################################################### + +/** + * This class is for decoding a Base-64 encoded InputStream source + * + */ +class Base64InputStream : public BasicInputStream +{ + +public: + + Base64InputStream(InputStream &sourceStream); + + virtual ~Base64InputStream(); + + virtual int available(); + + virtual void close(); + + virtual int get(); + +private: + + int outBytes[3]; + + int outCount; + + int padCount; + + bool done; + +}; // class Base64InputStream + + + + +//######################################################################### +//# B A S E 6 4 O U T P U T S T R E A M +//######################################################################### + +/** + * This class is for Base-64 encoding data going to the + * destination OutputStream + * + */ +class Base64OutputStream : public BasicOutputStream +{ + +public: + + Base64OutputStream(OutputStream &destinationStream); + + virtual ~Base64OutputStream(); + + virtual void close(); + + virtual void flush(); + + virtual void put(XMLCh ch); + + /** + * Sets the maximum line length for base64 output. If + * set to <=0, then there will be no line breaks; + */ + virtual void setColumnWidth(int val) + { columnWidth = val; } + +private: + + void putCh(int ch); + + int column; + + int columnWidth; + + unsigned long outBuf; + + int bitCount; + +}; // class Base64OutputStream + + + + + + + +} //namespace io +} //namespace dom +} //namespace w3c +} //namespace org + + +#endif /* __INKSCAPE_IO_BASE64STREAM_H__ */ diff --git a/src/dom/io/gzipstream.cpp b/src/dom/io/gzipstream.cpp index 510101553..19369b6dc 100644 --- a/src/dom/io/gzipstream.cpp +++ b/src/dom/io/gzipstream.cpp @@ -1,245 +1,245 @@ -/** - * Zlib-enabled input and output streams - * - * This is a thin wrapper of libz calls, in order - * to provide a simple interface to our developers - * for gzip input and output. - * - * Authors: - * Bob Jamison - * - * Copyright (C) 2006 Bob Jamison - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - - -#include "gzipstream.h" - -#include "dom/util/ziptool.h" - - -namespace org -{ -namespace w3c -{ -namespace dom -{ -namespace io -{ - - -//######################################################################### -//# G Z I P I N P U T S T R E A M -//######################################################################### - -/** - * - */ -GzipInputStream::GzipInputStream(InputStream &sourceStream) - : BasicInputStream(sourceStream) -{ - loaded = false; - bufPos = 0; -} - -/** - * - */ -GzipInputStream::~GzipInputStream() -{ - close(); -} - -/** - * Returns the number of bytes that can be read (or skipped over) from - * this input stream without blocking by the next caller of a method for - * this input stream. - */ -int GzipInputStream::available() -{ - if (closed) - return 0; - if (!loaded) - if (!load()) - return 0; - return (int) buffer.size(); -} - - -/** - * Closes this input stream and releases any system resources - * associated with the stream. - */ -void GzipInputStream::close() -{ - if (closed) - return; - - closed = true; -} - -/** - * Reads the next byte of data from the input stream. -1 if EOF - */ -int GzipInputStream::get() -{ - if (closed) - return -1; - - if (!loaded) - if (!load()) - return -1; - - if (bufPos >= buffer.size()) - return -1; - int ch = (int) buffer[bufPos++]; - - return ch; -} - -/** - * Processes input. Fills read buffer. - */ -bool GzipInputStream::load() -{ - if (closed) - return false; - - if (loaded) - return true; - - std::vector compBuf; - while (true) - { - int ch = source.get(); - if (ch < 0) - break; - compBuf.push_back(ch); - } - GzipFile gz; - if (!gz.readBuffer(compBuf)) - { - return -1; - } - buffer = gz.getData(); - bufPos = 0; - loaded = true; - return true; -} - - - - - - -//######################################################################### -//# G Z I P O U T P U T S T R E A M -//######################################################################### - -/** - * - */ -GzipOutputStream::GzipOutputStream(OutputStream &destinationStream) - : BasicOutputStream(destinationStream) -{ - - closed = false; -} - -/** - * - */ -GzipOutputStream::~GzipOutputStream() -{ - close(); -} - -/** - * Closes this output stream and releases any system resources - * associated with this stream. - */ -void GzipOutputStream::close() -{ - if (closed) - return; - - flush(); - - closed = true; -} - -/** - * Flushes this output stream and forces any buffered output - * bytes to be written out. - */ -void GzipOutputStream::flush() -{ - if (closed || buffer.size()<1) - return; - - std::vector compBuf; - GzipFile gz; - - gz.writeBuffer(buffer); - - std::vector::iterator iter; - for (iter=compBuf.begin() ; iter!=compBuf.end() ; iter++) - { - int ch = (int) *iter; - destination.put(ch); - } - - buffer.clear(); - - //printf("done\n"); - -} - - - -/** - * Writes the specified byte to this output stream. - */ -void GzipOutputStream::put(XMLCh ch) -{ - if (closed) - { - //probably throw an exception here - return; - } - - //Add char to buffer - buffer.push_back(ch); - -} - - - -} // namespace io -} // namespace dom -} // namespace w3c -} // namespace org - - - - -//######################################################################### -//# E N D O F F I L E -//######################################################################### - - - +/** + * Zlib-enabled input and output streams + * + * This is a thin wrapper of libz calls, in order + * to provide a simple interface to our developers + * for gzip input and output. + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2006 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + + +#include "gzipstream.h" + +#include "dom/util/ziptool.h" + + +namespace org +{ +namespace w3c +{ +namespace dom +{ +namespace io +{ + + +//######################################################################### +//# G Z I P I N P U T S T R E A M +//######################################################################### + +/** + * + */ +GzipInputStream::GzipInputStream(InputStream &sourceStream) + : BasicInputStream(sourceStream) +{ + loaded = false; + bufPos = 0; +} + +/** + * + */ +GzipInputStream::~GzipInputStream() +{ + close(); +} + +/** + * Returns the number of bytes that can be read (or skipped over) from + * this input stream without blocking by the next caller of a method for + * this input stream. + */ +int GzipInputStream::available() +{ + if (closed) + return 0; + if (!loaded) + if (!load()) + return 0; + return (int) buffer.size(); +} + + +/** + * Closes this input stream and releases any system resources + * associated with the stream. + */ +void GzipInputStream::close() +{ + if (closed) + return; + + closed = true; +} + +/** + * Reads the next byte of data from the input stream. -1 if EOF + */ +int GzipInputStream::get() +{ + if (closed) + return -1; + + if (!loaded) + if (!load()) + return -1; + + if (bufPos >= buffer.size()) + return -1; + int ch = (int) buffer[bufPos++]; + + return ch; +} + +/** + * Processes input. Fills read buffer. + */ +bool GzipInputStream::load() +{ + if (closed) + return false; + + if (loaded) + return true; + + std::vector compBuf; + while (true) + { + int ch = source.get(); + if (ch < 0) + break; + compBuf.push_back(ch); + } + GzipFile gz; + if (!gz.readBuffer(compBuf)) + { + return -1; + } + buffer = gz.getData(); + bufPos = 0; + loaded = true; + return true; +} + + + + + + +//######################################################################### +//# G Z I P O U T P U T S T R E A M +//######################################################################### + +/** + * + */ +GzipOutputStream::GzipOutputStream(OutputStream &destinationStream) + : BasicOutputStream(destinationStream) +{ + + closed = false; +} + +/** + * + */ +GzipOutputStream::~GzipOutputStream() +{ + close(); +} + +/** + * Closes this output stream and releases any system resources + * associated with this stream. + */ +void GzipOutputStream::close() +{ + if (closed) + return; + + flush(); + + closed = true; +} + +/** + * Flushes this output stream and forces any buffered output + * bytes to be written out. + */ +void GzipOutputStream::flush() +{ + if (closed || buffer.size()<1) + return; + + std::vector compBuf; + GzipFile gz; + + gz.writeBuffer(buffer); + + std::vector::iterator iter; + for (iter=compBuf.begin() ; iter!=compBuf.end() ; iter++) + { + int ch = (int) *iter; + destination.put(ch); + } + + buffer.clear(); + + //printf("done\n"); + +} + + + +/** + * Writes the specified byte to this output stream. + */ +void GzipOutputStream::put(XMLCh ch) +{ + if (closed) + { + //probably throw an exception here + return; + } + + //Add char to buffer + buffer.push_back(ch); + +} + + + +} // namespace io +} // namespace dom +} // namespace w3c +} // namespace org + + + + +//######################################################################### +//# E N D O F F I L E +//######################################################################### + + + diff --git a/src/dom/io/gzipstream.h b/src/dom/io/gzipstream.h index 8fc26f0a2..6396772a5 100644 --- a/src/dom/io/gzipstream.h +++ b/src/dom/io/gzipstream.h @@ -1,125 +1,125 @@ -#ifndef __GZIPSTREAM_H__ -#define __GZIPSTREAM_H__ -/** - * Zlib-enabled input and output streams - * - * This provides a simple mechanism for reading and - * writing Gzip files. We use our own 'ZipTool' class - * to accomplish this, avoiding a zlib dependency. - * - * Authors: - * Bob Jamison - * - * Copyright (C) 2006 Bob Jamison - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - - - -#include "domstream.h" - -namespace org -{ -namespace w3c -{ -namespace dom -{ -namespace io -{ - -//######################################################################### -//# G Z I P I N P U T S T R E A M -//######################################################################### - -/** - * This class is for deflating a gzip-compressed InputStream source - * - */ -class GzipInputStream : public BasicInputStream -{ - -public: - - GzipInputStream(InputStream &sourceStream); - - virtual ~GzipInputStream(); - - virtual int available(); - - virtual void close(); - - virtual int get(); - -private: - - bool load(); - - bool loaded; - - std::vector buffer; - unsigned int bufPos; - - -}; // class GzipInputStream - - - - -//######################################################################### -//# G Z I P O U T P U T S T R E A M -//######################################################################### - -/** - * This class is for gzip-compressing data going to the - * destination OutputStream - * - */ -class GzipOutputStream : public BasicOutputStream -{ - -public: - - GzipOutputStream(OutputStream &destinationStream); - - virtual ~GzipOutputStream(); - - virtual void close(); - - virtual void flush(); - - virtual void put(XMLCh ch); - -private: - - std::vector buffer; - - -}; // class GzipOutputStream - - - - - - - -} // namespace io -} // namespace dom -} // namespace w3c -} // namespace org - - -#endif /* __GZIPSTREAM_H__ */ +#ifndef __GZIPSTREAM_H__ +#define __GZIPSTREAM_H__ +/** + * Zlib-enabled input and output streams + * + * This provides a simple mechanism for reading and + * writing Gzip files. We use our own 'ZipTool' class + * to accomplish this, avoiding a zlib dependency. + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2006 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + + + +#include "domstream.h" + +namespace org +{ +namespace w3c +{ +namespace dom +{ +namespace io +{ + +//######################################################################### +//# G Z I P I N P U T S T R E A M +//######################################################################### + +/** + * This class is for deflating a gzip-compressed InputStream source + * + */ +class GzipInputStream : public BasicInputStream +{ + +public: + + GzipInputStream(InputStream &sourceStream); + + virtual ~GzipInputStream(); + + virtual int available(); + + virtual void close(); + + virtual int get(); + +private: + + bool load(); + + bool loaded; + + std::vector buffer; + unsigned int bufPos; + + +}; // class GzipInputStream + + + + +//######################################################################### +//# G Z I P O U T P U T S T R E A M +//######################################################################### + +/** + * This class is for gzip-compressing data going to the + * destination OutputStream + * + */ +class GzipOutputStream : public BasicOutputStream +{ + +public: + + GzipOutputStream(OutputStream &destinationStream); + + virtual ~GzipOutputStream(); + + virtual void close(); + + virtual void flush(); + + virtual void put(XMLCh ch); + +private: + + std::vector buffer; + + +}; // class GzipOutputStream + + + + + + + +} // namespace io +} // namespace dom +} // namespace w3c +} // namespace org + + +#endif /* __GZIPSTREAM_H__ */ diff --git a/src/dom/io/httpclient.cpp b/src/dom/io/httpclient.cpp index b81e9aedf..4245d71f2 100644 --- a/src/dom/io/httpclient.cpp +++ b/src/dom/io/httpclient.cpp @@ -1,167 +1,167 @@ -/** - * Phoebe DOM Implementation. - * - * This is a C++ approximation of the W3C DOM model, which follows - * fairly closely the specifications in the various .idl files, copies of - * which are provided for reference. Most important is this one: - * - * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html - * - * Authors: - * Bob Jamison - * - * Copyright (C) 2006 Bob Jamison - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - - -#include "httpclient.h" - -namespace org -{ -namespace w3c -{ -namespace dom -{ -namespace io -{ - - - - -/** - * - */ -HttpClient::HttpClient() -{ -} - - -/** - * - */ -HttpClient::~HttpClient() -{ -} - - -/** - * - */ -bool HttpClient::openGet(const URI &uri) -{ - - socket.disconnect(); - - if (uri.getScheme() == URI::SCHEME_HTTP) - socket.enableSSL(false); - else if (uri.getScheme() == URI::SCHEME_HTTPS) - socket.enableSSL(true); - else - { - printf("Bad proto scheme:%d\n", uri.getScheme()); - return false; - } - - DOMString host = uri.getHost(); - int port = uri.getPort(); - DOMString path = uri.getPath(); - if (path.size() == 0) - path = "/"; - - //printf("host:%s port:%d, path:%s\n", host.c_str(), port, path.c_str()); - - if (!socket.connect(host, port)) - { - return false; - } - - DOMString msg = "GET "; - msg.append(path); - msg.append(" HTTP/1.0\r\n\r\n"); - //printf("msg:'%s'\n", msg.c_str()); - - //# Make the request - if (!socket.write(msg)) - { - return false; - } - - //# Read the HTTP headers - while (true) - { - if (!socket.readLine(msg)) - return false; - printf("header:'%s'\n", msg.c_str()); - if (msg.size() < 1) - break; - } - - return true; -} - - -/** - * - */ -int HttpClient::read() -{ - int ret = socket.read(); - return ret; -} - -/** - * - */ -bool HttpClient::write(int ch) -{ - if (!socket.write(ch)) - return false; - return true; -} - -/** - * - */ -bool HttpClient::write(const DOMString &msg) -{ - if (!socket.write(msg)) - return false; - return true; -} - -/** - * - */ -bool HttpClient::close() -{ - socket.disconnect(); - return true; -} - - - -} //namespace io -} //namespace dom -} //namespace w3c -} //namespace org - - -//######################################################################### -//# E N D O F F I L E -//######################################################################### - +/** + * Phoebe DOM Implementation. + * + * This is a C++ approximation of the W3C DOM model, which follows + * fairly closely the specifications in the various .idl files, copies of + * which are provided for reference. Most important is this one: + * + * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2006 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + + +#include "httpclient.h" + +namespace org +{ +namespace w3c +{ +namespace dom +{ +namespace io +{ + + + + +/** + * + */ +HttpClient::HttpClient() +{ +} + + +/** + * + */ +HttpClient::~HttpClient() +{ +} + + +/** + * + */ +bool HttpClient::openGet(const URI &uri) +{ + + socket.disconnect(); + + if (uri.getScheme() == URI::SCHEME_HTTP) + socket.enableSSL(false); + else if (uri.getScheme() == URI::SCHEME_HTTPS) + socket.enableSSL(true); + else + { + printf("Bad proto scheme:%d\n", uri.getScheme()); + return false; + } + + DOMString host = uri.getHost(); + int port = uri.getPort(); + DOMString path = uri.getPath(); + if (path.size() == 0) + path = "/"; + + //printf("host:%s port:%d, path:%s\n", host.c_str(), port, path.c_str()); + + if (!socket.connect(host, port)) + { + return false; + } + + DOMString msg = "GET "; + msg.append(path); + msg.append(" HTTP/1.0\r\n\r\n"); + //printf("msg:'%s'\n", msg.c_str()); + + //# Make the request + if (!socket.write(msg)) + { + return false; + } + + //# Read the HTTP headers + while (true) + { + if (!socket.readLine(msg)) + return false; + printf("header:'%s'\n", msg.c_str()); + if (msg.size() < 1) + break; + } + + return true; +} + + +/** + * + */ +int HttpClient::read() +{ + int ret = socket.read(); + return ret; +} + +/** + * + */ +bool HttpClient::write(int ch) +{ + if (!socket.write(ch)) + return false; + return true; +} + +/** + * + */ +bool HttpClient::write(const DOMString &msg) +{ + if (!socket.write(msg)) + return false; + return true; +} + +/** + * + */ +bool HttpClient::close() +{ + socket.disconnect(); + return true; +} + + + +} //namespace io +} //namespace dom +} //namespace w3c +} //namespace org + + +//######################################################################### +//# E N D O F F I L E +//######################################################################### + diff --git a/src/dom/io/httpclient.h b/src/dom/io/httpclient.h index 4c4bbcfe6..50538d0f5 100644 --- a/src/dom/io/httpclient.h +++ b/src/dom/io/httpclient.h @@ -1,115 +1,115 @@ -#ifndef __HTTPCLIENT_H__ -#define __HTTPCLIENT_H__ -/** - * Phoebe DOM Implementation. - * - * This is a C++ approximation of the W3C DOM model, which follows - * fairly closely the specifications in the various .idl files, copies of - * which are provided for reference. Most important is this one: - * - * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html - * - * Authors: - * Bob Jamison - * - * Copyright (C) 2006 Bob Jamison - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - - -#include "dom/dom.h" -#include "dom/uri.h" -#include "dom/io/socket.h" - -namespace org -{ -namespace w3c -{ -namespace dom -{ -namespace io -{ - - - - - - -class HttpClient -{ - -public: - - /** - * - */ - HttpClient(); - - /** - * - */ - virtual ~HttpClient(); - - /** - * - */ - bool openGet(const URI &uri); - - /** - * - */ - int read(); - - /** - * - */ - bool write(int ch); - - /** - * - */ - bool write(const DOMString &msg); - - /** - * - */ - bool close(); - - -private: - - - TcpSocket socket; - -}; - - - - -} //namespace io -} //namespace dom -} //namespace w3c -} //namespace org - - -#endif /* __HTTPCLIENT_H__ */ - - -//######################################################################### -//# E N D O F F I L E -//######################################################################### - +#ifndef __HTTPCLIENT_H__ +#define __HTTPCLIENT_H__ +/** + * Phoebe DOM Implementation. + * + * This is a C++ approximation of the W3C DOM model, which follows + * fairly closely the specifications in the various .idl files, copies of + * which are provided for reference. Most important is this one: + * + * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2006 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + + +#include "dom/dom.h" +#include "dom/uri.h" +#include "dom/io/socket.h" + +namespace org +{ +namespace w3c +{ +namespace dom +{ +namespace io +{ + + + + + + +class HttpClient +{ + +public: + + /** + * + */ + HttpClient(); + + /** + * + */ + virtual ~HttpClient(); + + /** + * + */ + bool openGet(const URI &uri); + + /** + * + */ + int read(); + + /** + * + */ + bool write(int ch); + + /** + * + */ + bool write(const DOMString &msg); + + /** + * + */ + bool close(); + + +private: + + + TcpSocket socket; + +}; + + + + +} //namespace io +} //namespace dom +} //namespace w3c +} //namespace org + + +#endif /* __HTTPCLIENT_H__ */ + + +//######################################################################### +//# E N D O F F I L E +//######################################################################### + diff --git a/src/dom/minidom.cpp b/src/dom/minidom.cpp index 0a5001eaa..bdb1065b2 100644 --- a/src/dom/minidom.cpp +++ b/src/dom/minidom.cpp @@ -1,690 +1,690 @@ - - - -#include -#include -#include -#include -#include -#include - - -#include "minidom.h" - -namespace MiniDom -{ - - - -//######################################################################## -//# E L E M E N T -//######################################################################## - -void Element::findElementsRecursive(std::vector&res, const DOMString &name) -{ - if (getName() == name) - res.push_back(this); - for (unsigned int i=0; ifindElementsRecursive(res, name); -} - -std::vector Element::findElements(const DOMString &name) -{ - std::vector res; - findElementsRecursive(res, name); - return res; -} - -DOMString Element::getAttribute(const DOMString &name) -{ - for (unsigned int i=0 ; i\n"); - - //Between the tags - if (value.size() > 0) - { - for (int i=0;iwriteIndentedRecursive(f, indent+2); - - //Closing tag - for (int i=0; i\n", name.c_str()); -} - -void Element::writeIndented(FILE *f) -{ - writeIndentedRecursive(f, 0); -} - -void Element::print() -{ - writeIndented(stdout); -} - - -//######################################################################## -//# P A R S E R -//######################################################################## - - - -typedef struct - { - char *escaped; - char value; - } EntityEntry; - -static EntityEntry entities[] = -{ - { "&" , '&' }, - { "<" , '<' }, - { ">" , '>' }, - { "'", '\'' }, - { """, '"' }, - { NULL , '\0' } -}; - - - -void Parser::getLineAndColumn(long pos, long *lineNr, long *colNr) -{ - long line = 1; - long col = 1; - for (long i=0 ; i= parselen) - return -1; - currentPosition = pos; - int ch = parsebuf[pos]; - //printf("ch:%c\n", ch); - return ch; -} - - - -int Parser::match(long p0, const char *text) -{ - int p = p0; - while (*text) - { - if (peek(p) != *text) - return p0; - p++; text++; - } - return p; -} - - - -int Parser::skipwhite(long p) -{ - - while (p p) - { - p = p2; - while (p"); - if (p2 > p) - { - p = p2; - break; - } - p++; - } - } - XMLCh b = peek(p); - if (!isspace(b)) - break; - p++; - } - return p; -} - -/* modify this to allow all chars for an element or attribute name*/ -int Parser::getWord(int p0, DOMString &buf) -{ - int p = p0; - while (p' || b=='=') - break; - buf.push_back(b); - p++; - } - return p; -} - -int Parser::getQuoted(int p0, DOMString &buf, int do_i_parse) -{ - - int p = p0; - if (peek(p) != '"' && peek(p) != '\'') - return p0; - p++; - - while ( pvalue ; ee++) - { - int p2 = match(p, ee->escaped); - if (p2>p) - { - buf.push_back(ee->value); - p = p2; - found = true; - break; - } - } - if (!found) - { - error("unterminated entity"); - return false; - } - } - else - { - buf.push_back(b); - p++; - } - } - return p; -} - -int Parser::parseVersion(int p0) -{ - //printf("### parseVersion: %d\n", p0); - - int p = p0; - - p = skipwhite(p0); - - if (peek(p) != '<') - return p0; - - p++; - if (p>=parselen || peek(p)!='?') - return p0; - - p++; - - DOMString buf; - - while (p=parselen || peek(p)!='<') - return p0; - - p++; - - if (peek(p)!='!' || peek(p+1)=='-') - return p0; - p++; - - DOMString buf; - while (p') - { - p++; - break; - } - buf.push_back(ch); - p++; - } - - //printf("Got doctype:%s\n",buf.c_str()); - return p; -} - -int Parser::parseElement(int p0, Element *par,int depth) -{ - - int p = p0; - - int p2 = p; - - p = skipwhite(p); - - //## Get open tag - XMLCh ch = peek(p); - if (ch!='<') - return p0; - - p++; - - DOMString openTagName; - p = skipwhite(p); - p = getWord(p, openTagName); - //printf("####tag :%s\n", openTagName.c_str()); - p = skipwhite(p); - - //Add element to tree - Element *n = new Element(openTagName); - n->parent = par; - par->addChild(n); - - // Get attributes - if (peek(p) != '>') - { - while (p') - break; - else if (ch=='/' && p') - { - p++; - //printf("quick close\n"); - return p; - } - } - DOMString attrName; - p2 = getWord(p, attrName); - if (p2==p) - break; - //printf("name:%s",buf); - p=p2; - p = skipwhite(p); - ch = peek(p); - //printf("ch:%c\n",ch); - if (ch!='=') - break; - p++; - p = skipwhite(p); - // ch = parsebuf[p]; - // printf("ch:%c\n",ch); - DOMString attrVal; - p2 = getQuoted(p, attrVal, true); - p=p2+1; - //printf("name:'%s' value:'%s'\n",attrName.c_str(),attrVal.c_str()); - char *namestr = (char *)attrName.c_str(); - if (strncmp(namestr, "xmlns:", 6)==0) - n->addNamespace(attrName, attrVal); - else - n->addAttribute(attrName, attrVal); - } - } - - bool cdata = false; - - p++; - // ### Get intervening data ### */ - DOMString data; - while (pp) - { - p = p2; - while (p"); - if (p2 > p) - { - p = p2; - break; - } - p++; - } - } - - ch = peek(p); - //# END TAG - if (ch=='<' && !cdata && peek(p+1)=='/') - { - break; - } - //# CDATA - p2 = match(p, " p) - { - cdata = true; - p = p2; - continue; - } - - //# CHILD ELEMENT - if (ch == '<') - { - p2 = parseElement(p, n, depth+1); - if (p2 == p) - { - /* - printf("problem on element:%s. p2:%d p:%d\n", - openTagName.c_str(), p2, p); - */ - return p0; - } - p = p2; - continue; - } - //# ENTITY - if (ch=='&' && !cdata) - { - bool found = false; - for (EntityEntry *ee = entities ; ee->value ; ee++) - { - int p2 = match(p, ee->escaped); - if (p2>p) - { - data.push_back(ee->value); - p = p2; - found = true; - break; - } - } - if (!found) - { - error("unterminated entity"); - return -1; - } - continue; - } - - //# NONE OF THE ABOVE - data.push_back(ch); - p++; - }/*while*/ - - - n->value = data; - //printf("%d : data:%s\n",p,data.c_str()); - - //## Get close tag - p = skipwhite(p); - ch = peek(p); - if (ch != '<') - { - error("no < for end tag\n"); - return p0; - } - p++; - ch = peek(p); - if (ch != '/') - { - error("no / on end tag"); - return p0; - } - p++; - ch = peek(p); - p = skipwhite(p); - DOMString closeTagName; - p = getWord(p, closeTagName); - if (openTagName != closeTagName) - { - error("Mismatched closing tag. Expected . Got '%S'.", - openTagName.c_str(), closeTagName.c_str()); - return p0; - } - p = skipwhite(p); - if (peek(p) != '>') - { - error("no > on end tag for '%s'", closeTagName.c_str()); - return p0; - } - p++; - // printf("close element:%s\n",closeTagName.c_str()); - p = skipwhite(p); - return p; -} - - - - -Element *Parser::parse(XMLCh *buf,int pos,int len) -{ - parselen = len; - parsebuf = buf; - Element *rootNode = new Element("root"); - pos = parseVersion(pos); - pos = parseDoctype(pos); - pos = parseElement(pos, rootNode, 0); - return rootNode; -} - - -Element *Parser::parse(const char *buf, int pos, int len) -{ - - XMLCh *charbuf = (XMLCh *)malloc((len+1) * sizeof(XMLCh)); - long i = 0; - while (i< len) - { - charbuf[i] = (XMLCh)buf[i]; - i++; - } - charbuf[i] = '\0'; - Element *n = parse(charbuf, 0, len-1); - free(charbuf); - return n; -} - -Element *Parser::parse(const DOMString &buf) -{ - long len = buf.size(); - XMLCh *charbuf = (XMLCh *)malloc((len+1) * sizeof(XMLCh)); - long i = 0; - while (i< len) - { - charbuf[i] = (XMLCh)buf[i]; - i++; - } - charbuf[i] = '\0'; - Element *n = parse(charbuf, 0, len-1); - free(charbuf); - return n; -} - -Element *Parser::parseFile(const char *fileName) -{ - - //##### LOAD INTO A CHAR BUF, THEN CONVERT TO XMLCh - if (!fileName) - return NULL; - - FILE *f = fopen(fileName, "rb"); - if (!f) - return NULL; - - struct stat statBuf; - if (fstat(fileno(f),&statBuf)<0) - { - fclose(f); - return NULL; - } - long filelen = statBuf.st_size; - - //printf("length:%d\n",filelen); - XMLCh *charbuf = (XMLCh *)malloc((filelen+1) * sizeof(XMLCh)); - for (XMLCh *p=charbuf ; !feof(f) ; p++) - { - *p = (XMLCh)fgetc(f); - } - fclose(f); - charbuf[filelen] = '\0'; - - - /* - printf("nrbytes:%d\n",wc_count); - printf("buf:%ls\n======\n",charbuf); - */ - Element *n = parse(charbuf, 0, filelen-1); - free(charbuf); - return n; -} - - - - - - - -}//namespace MiniDom -//######################################################################## -//# T E S T -//######################################################################## - -bool doTest(char *fileName) -{ - MiniDom::Parser parser; - - MiniDom::Element *elem = parser.parseFile(fileName); - - if (!elem) - { - printf("Parsing failed\n"); - return false; - } - - elem->print(); - - delete elem; - - return true; -} - - - -int main(int argc, char **argv) -{ - if (argc != 2) - { - printf("usage: %s \n", argv[0]); - return 1; - } - - if (!doTest(argv[1])) - return 1; - - return 0; -} - - - -//######################################################################## -//# E N D O F F I L E -//######################################################################## - - + + + +#include +#include +#include +#include +#include +#include + + +#include "minidom.h" + +namespace MiniDom +{ + + + +//######################################################################## +//# E L E M E N T +//######################################################################## + +void Element::findElementsRecursive(std::vector&res, const DOMString &name) +{ + if (getName() == name) + res.push_back(this); + for (unsigned int i=0; ifindElementsRecursive(res, name); +} + +std::vector Element::findElements(const DOMString &name) +{ + std::vector res; + findElementsRecursive(res, name); + return res; +} + +DOMString Element::getAttribute(const DOMString &name) +{ + for (unsigned int i=0 ; i\n"); + + //Between the tags + if (value.size() > 0) + { + for (int i=0;iwriteIndentedRecursive(f, indent+2); + + //Closing tag + for (int i=0; i\n", name.c_str()); +} + +void Element::writeIndented(FILE *f) +{ + writeIndentedRecursive(f, 0); +} + +void Element::print() +{ + writeIndented(stdout); +} + + +//######################################################################## +//# P A R S E R +//######################################################################## + + + +typedef struct + { + char *escaped; + char value; + } EntityEntry; + +static EntityEntry entities[] = +{ + { "&" , '&' }, + { "<" , '<' }, + { ">" , '>' }, + { "'", '\'' }, + { """, '"' }, + { NULL , '\0' } +}; + + + +void Parser::getLineAndColumn(long pos, long *lineNr, long *colNr) +{ + long line = 1; + long col = 1; + for (long i=0 ; i= parselen) + return -1; + currentPosition = pos; + int ch = parsebuf[pos]; + //printf("ch:%c\n", ch); + return ch; +} + + + +int Parser::match(long p0, const char *text) +{ + int p = p0; + while (*text) + { + if (peek(p) != *text) + return p0; + p++; text++; + } + return p; +} + + + +int Parser::skipwhite(long p) +{ + + while (p p) + { + p = p2; + while (p"); + if (p2 > p) + { + p = p2; + break; + } + p++; + } + } + XMLCh b = peek(p); + if (!isspace(b)) + break; + p++; + } + return p; +} + +/* modify this to allow all chars for an element or attribute name*/ +int Parser::getWord(int p0, DOMString &buf) +{ + int p = p0; + while (p' || b=='=') + break; + buf.push_back(b); + p++; + } + return p; +} + +int Parser::getQuoted(int p0, DOMString &buf, int do_i_parse) +{ + + int p = p0; + if (peek(p) != '"' && peek(p) != '\'') + return p0; + p++; + + while ( pvalue ; ee++) + { + int p2 = match(p, ee->escaped); + if (p2>p) + { + buf.push_back(ee->value); + p = p2; + found = true; + break; + } + } + if (!found) + { + error("unterminated entity"); + return false; + } + } + else + { + buf.push_back(b); + p++; + } + } + return p; +} + +int Parser::parseVersion(int p0) +{ + //printf("### parseVersion: %d\n", p0); + + int p = p0; + + p = skipwhite(p0); + + if (peek(p) != '<') + return p0; + + p++; + if (p>=parselen || peek(p)!='?') + return p0; + + p++; + + DOMString buf; + + while (p=parselen || peek(p)!='<') + return p0; + + p++; + + if (peek(p)!='!' || peek(p+1)=='-') + return p0; + p++; + + DOMString buf; + while (p') + { + p++; + break; + } + buf.push_back(ch); + p++; + } + + //printf("Got doctype:%s\n",buf.c_str()); + return p; +} + +int Parser::parseElement(int p0, Element *par,int depth) +{ + + int p = p0; + + int p2 = p; + + p = skipwhite(p); + + //## Get open tag + XMLCh ch = peek(p); + if (ch!='<') + return p0; + + p++; + + DOMString openTagName; + p = skipwhite(p); + p = getWord(p, openTagName); + //printf("####tag :%s\n", openTagName.c_str()); + p = skipwhite(p); + + //Add element to tree + Element *n = new Element(openTagName); + n->parent = par; + par->addChild(n); + + // Get attributes + if (peek(p) != '>') + { + while (p') + break; + else if (ch=='/' && p') + { + p++; + //printf("quick close\n"); + return p; + } + } + DOMString attrName; + p2 = getWord(p, attrName); + if (p2==p) + break; + //printf("name:%s",buf); + p=p2; + p = skipwhite(p); + ch = peek(p); + //printf("ch:%c\n",ch); + if (ch!='=') + break; + p++; + p = skipwhite(p); + // ch = parsebuf[p]; + // printf("ch:%c\n",ch); + DOMString attrVal; + p2 = getQuoted(p, attrVal, true); + p=p2+1; + //printf("name:'%s' value:'%s'\n",attrName.c_str(),attrVal.c_str()); + char *namestr = (char *)attrName.c_str(); + if (strncmp(namestr, "xmlns:", 6)==0) + n->addNamespace(attrName, attrVal); + else + n->addAttribute(attrName, attrVal); + } + } + + bool cdata = false; + + p++; + // ### Get intervening data ### */ + DOMString data; + while (pp) + { + p = p2; + while (p"); + if (p2 > p) + { + p = p2; + break; + } + p++; + } + } + + ch = peek(p); + //# END TAG + if (ch=='<' && !cdata && peek(p+1)=='/') + { + break; + } + //# CDATA + p2 = match(p, " p) + { + cdata = true; + p = p2; + continue; + } + + //# CHILD ELEMENT + if (ch == '<') + { + p2 = parseElement(p, n, depth+1); + if (p2 == p) + { + /* + printf("problem on element:%s. p2:%d p:%d\n", + openTagName.c_str(), p2, p); + */ + return p0; + } + p = p2; + continue; + } + //# ENTITY + if (ch=='&' && !cdata) + { + bool found = false; + for (EntityEntry *ee = entities ; ee->value ; ee++) + { + int p2 = match(p, ee->escaped); + if (p2>p) + { + data.push_back(ee->value); + p = p2; + found = true; + break; + } + } + if (!found) + { + error("unterminated entity"); + return -1; + } + continue; + } + + //# NONE OF THE ABOVE + data.push_back(ch); + p++; + }/*while*/ + + + n->value = data; + //printf("%d : data:%s\n",p,data.c_str()); + + //## Get close tag + p = skipwhite(p); + ch = peek(p); + if (ch != '<') + { + error("no < for end tag\n"); + return p0; + } + p++; + ch = peek(p); + if (ch != '/') + { + error("no / on end tag"); + return p0; + } + p++; + ch = peek(p); + p = skipwhite(p); + DOMString closeTagName; + p = getWord(p, closeTagName); + if (openTagName != closeTagName) + { + error("Mismatched closing tag. Expected . Got '%S'.", + openTagName.c_str(), closeTagName.c_str()); + return p0; + } + p = skipwhite(p); + if (peek(p) != '>') + { + error("no > on end tag for '%s'", closeTagName.c_str()); + return p0; + } + p++; + // printf("close element:%s\n",closeTagName.c_str()); + p = skipwhite(p); + return p; +} + + + + +Element *Parser::parse(XMLCh *buf,int pos,int len) +{ + parselen = len; + parsebuf = buf; + Element *rootNode = new Element("root"); + pos = parseVersion(pos); + pos = parseDoctype(pos); + pos = parseElement(pos, rootNode, 0); + return rootNode; +} + + +Element *Parser::parse(const char *buf, int pos, int len) +{ + + XMLCh *charbuf = (XMLCh *)malloc((len+1) * sizeof(XMLCh)); + long i = 0; + while (i< len) + { + charbuf[i] = (XMLCh)buf[i]; + i++; + } + charbuf[i] = '\0'; + Element *n = parse(charbuf, 0, len-1); + free(charbuf); + return n; +} + +Element *Parser::parse(const DOMString &buf) +{ + long len = buf.size(); + XMLCh *charbuf = (XMLCh *)malloc((len+1) * sizeof(XMLCh)); + long i = 0; + while (i< len) + { + charbuf[i] = (XMLCh)buf[i]; + i++; + } + charbuf[i] = '\0'; + Element *n = parse(charbuf, 0, len-1); + free(charbuf); + return n; +} + +Element *Parser::parseFile(const char *fileName) +{ + + //##### LOAD INTO A CHAR BUF, THEN CONVERT TO XMLCh + if (!fileName) + return NULL; + + FILE *f = fopen(fileName, "rb"); + if (!f) + return NULL; + + struct stat statBuf; + if (fstat(fileno(f),&statBuf)<0) + { + fclose(f); + return NULL; + } + long filelen = statBuf.st_size; + + //printf("length:%d\n",filelen); + XMLCh *charbuf = (XMLCh *)malloc((filelen+1) * sizeof(XMLCh)); + for (XMLCh *p=charbuf ; !feof(f) ; p++) + { + *p = (XMLCh)fgetc(f); + } + fclose(f); + charbuf[filelen] = '\0'; + + + /* + printf("nrbytes:%d\n",wc_count); + printf("buf:%ls\n======\n",charbuf); + */ + Element *n = parse(charbuf, 0, filelen-1); + free(charbuf); + return n; +} + + + + + + + +}//namespace MiniDom +//######################################################################## +//# T E S T +//######################################################################## + +bool doTest(char *fileName) +{ + MiniDom::Parser parser; + + MiniDom::Element *elem = parser.parseFile(fileName); + + if (!elem) + { + printf("Parsing failed\n"); + return false; + } + + elem->print(); + + delete elem; + + return true; +} + + + +int main(int argc, char **argv) +{ + if (argc != 2) + { + printf("usage: %s \n", argv[0]); + return 1; + } + + if (!doTest(argv[1])) + return 1; + + return 0; +} + + + +//######################################################################## +//# E N D O F F I L E +//######################################################################## + + diff --git a/src/dom/minidom.h b/src/dom/minidom.h index df8cca881..30b53dd18 100644 --- a/src/dom/minidom.h +++ b/src/dom/minidom.h @@ -1,270 +1,270 @@ -#include -#include - - -namespace MiniDom -{ -typedef std::string DOMString; -typedef unsigned int XMLCh; - - -class Namespace -{ -public: - Namespace() - {} - - Namespace(const DOMString &prefixArg, const DOMString &namespaceURIArg) - { - prefix = prefixArg; - namespaceURI = namespaceURIArg; - } - - Namespace(const Namespace &other) - { - prefix = other.prefix; - namespaceURI = other.namespaceURI; - } - - virtual ~Namespace() - {} - - virtual DOMString getPrefix() - { return prefix; } - - virtual DOMString getNamespaceURI() - { return namespaceURI; } - -protected: - - DOMString prefix; - DOMString namespaceURI; - -}; - -class Attribute -{ -public: - Attribute() - {} - - Attribute(const DOMString &nameArg, const DOMString &valueArg) - { - name = nameArg; - value = valueArg; - } - - Attribute(const Attribute &other) - { - name = other.name; - value = other.value; - } - - virtual ~Attribute() - {} - - virtual DOMString getName() - { return name; } - - virtual DOMString getValue() - { return value; } - -protected: - - DOMString name; - DOMString value; - -}; - - -class Element -{ -friend class Parser; - -public: - Element() - { - parent = NULL; - } - - Element(const DOMString &nameArg) - { - parent = NULL; - name = nameArg; - } - - Element(const DOMString &nameArg, const DOMString &valueArg) - { - parent = NULL; - name = nameArg; - value = valueArg; - } - - Element(const Element &other) - { - parent = other.parent; - children = other.children; - attributes = other.attributes; - namespaces = other.namespaces; - name = other.name; - value = other.value; - } - - virtual ~Element() - { - for (unsigned int i=0 ; i getChildren() - { return children; } - - std::vector findElements(const DOMString &name); - - DOMString getAttribute(const DOMString &name); - - void addChild(Element *child); - - void addAttribute(const DOMString &name, const DOMString &value); - - void addNamespace(const DOMString &prefix, const DOMString &namespaceURI); - - - /** - * Prettyprint an XML tree to an output stream. Elements are indented - * according to element hierarchy. - * @param f a stream to receive the output - * @param elem the element to output - */ - void writeIndented(FILE *f); - - /** - * Prettyprint an XML tree to standard output. This is the equivalent of - * writeIndented(stdout). - * @param elem the element to output - */ - void print(); - -protected: - - - void findElementsRecursive(std::vector&res, const DOMString &name); - - void writeIndentedRecursive(FILE *f, int indent); - - Element *parent; - - std::vectorchildren; - - std::vector attributes; - std::vector namespaces; - - DOMString name; - DOMString value; - -}; - - - - - -class Parser -{ -public: - Parser() - { init(); } - - virtual ~Parser() - {} - - /** - * Parse XML in a char buffer. - * @param buf a character buffer to parse - * @param pos position to start parsing - * @param len number of chars, from pos, to parse. - * @return a pointer to the root of the XML document; - */ - Element *parse(const char *buf,int pos,int len); - - /** - * Parse XML in a char buffer. - * @param buf a character buffer to parse - * @param pos position to start parsing - * @param len number of chars, from pos, to parse. - * @return a pointer to the root of the XML document; - */ - Element *parse(const DOMString &buf); - - /** - * Parse a named XML file. The file is loaded like a data file; - * the original format is not preserved. - * @param fileName the name of the file to read - * @return a pointer to the root of the XML document; - */ - Element *parseFile(const char *fileName); - - - - -private: - - void init() - { - keepGoing = true; - currentNode = NULL; - parselen = 0; - parsebuf = NULL; - currentPosition = 0; - } - - void getLineAndColumn(long pos, long *lineNr, long *colNr); - - void error(char *fmt, ...); - - int peek(long pos); - - int match(long pos, const char *text); - - int skipwhite(long p); - - int getWord(int p0, DOMString &buf); - - int getQuoted(int p0, DOMString &buf, int do_i_parse); - - int parseVersion(int p0); - - int parseDoctype(int p0); - - int parseElement(int p0, Element *par,int depth); - - Element *parse(XMLCh *buf,int pos,int len); - - bool keepGoing; - Element *currentNode; - long parselen; - XMLCh *parsebuf; - DOMString cdatabuf; - long currentPosition; - int colNr; - - -}; - - - -}//namespace MiniDom - - -//######################################################################## -//# E N D O F F I L E -//######################################################################## - +#include +#include + + +namespace MiniDom +{ +typedef std::string DOMString; +typedef unsigned int XMLCh; + + +class Namespace +{ +public: + Namespace() + {} + + Namespace(const DOMString &prefixArg, const DOMString &namespaceURIArg) + { + prefix = prefixArg; + namespaceURI = namespaceURIArg; + } + + Namespace(const Namespace &other) + { + prefix = other.prefix; + namespaceURI = other.namespaceURI; + } + + virtual ~Namespace() + {} + + virtual DOMString getPrefix() + { return prefix; } + + virtual DOMString getNamespaceURI() + { return namespaceURI; } + +protected: + + DOMString prefix; + DOMString namespaceURI; + +}; + +class Attribute +{ +public: + Attribute() + {} + + Attribute(const DOMString &nameArg, const DOMString &valueArg) + { + name = nameArg; + value = valueArg; + } + + Attribute(const Attribute &other) + { + name = other.name; + value = other.value; + } + + virtual ~Attribute() + {} + + virtual DOMString getName() + { return name; } + + virtual DOMString getValue() + { return value; } + +protected: + + DOMString name; + DOMString value; + +}; + + +class Element +{ +friend class Parser; + +public: + Element() + { + parent = NULL; + } + + Element(const DOMString &nameArg) + { + parent = NULL; + name = nameArg; + } + + Element(const DOMString &nameArg, const DOMString &valueArg) + { + parent = NULL; + name = nameArg; + value = valueArg; + } + + Element(const Element &other) + { + parent = other.parent; + children = other.children; + attributes = other.attributes; + namespaces = other.namespaces; + name = other.name; + value = other.value; + } + + virtual ~Element() + { + for (unsigned int i=0 ; i getChildren() + { return children; } + + std::vector findElements(const DOMString &name); + + DOMString getAttribute(const DOMString &name); + + void addChild(Element *child); + + void addAttribute(const DOMString &name, const DOMString &value); + + void addNamespace(const DOMString &prefix, const DOMString &namespaceURI); + + + /** + * Prettyprint an XML tree to an output stream. Elements are indented + * according to element hierarchy. + * @param f a stream to receive the output + * @param elem the element to output + */ + void writeIndented(FILE *f); + + /** + * Prettyprint an XML tree to standard output. This is the equivalent of + * writeIndented(stdout). + * @param elem the element to output + */ + void print(); + +protected: + + + void findElementsRecursive(std::vector&res, const DOMString &name); + + void writeIndentedRecursive(FILE *f, int indent); + + Element *parent; + + std::vectorchildren; + + std::vector attributes; + std::vector namespaces; + + DOMString name; + DOMString value; + +}; + + + + + +class Parser +{ +public: + Parser() + { init(); } + + virtual ~Parser() + {} + + /** + * Parse XML in a char buffer. + * @param buf a character buffer to parse + * @param pos position to start parsing + * @param len number of chars, from pos, to parse. + * @return a pointer to the root of the XML document; + */ + Element *parse(const char *buf,int pos,int len); + + /** + * Parse XML in a char buffer. + * @param buf a character buffer to parse + * @param pos position to start parsing + * @param len number of chars, from pos, to parse. + * @return a pointer to the root of the XML document; + */ + Element *parse(const DOMString &buf); + + /** + * Parse a named XML file. The file is loaded like a data file; + * the original format is not preserved. + * @param fileName the name of the file to read + * @return a pointer to the root of the XML document; + */ + Element *parseFile(const char *fileName); + + + + +private: + + void init() + { + keepGoing = true; + currentNode = NULL; + parselen = 0; + parsebuf = NULL; + currentPosition = 0; + } + + void getLineAndColumn(long pos, long *lineNr, long *colNr); + + void error(char *fmt, ...); + + int peek(long pos); + + int match(long pos, const char *text); + + int skipwhite(long p); + + int getWord(int p0, DOMString &buf); + + int getQuoted(int p0, DOMString &buf, int do_i_parse); + + int parseVersion(int p0); + + int parseDoctype(int p0); + + int parseElement(int p0, Element *par,int depth); + + Element *parse(XMLCh *buf,int pos,int len); + + bool keepGoing; + Element *currentNode; + long parselen; + XMLCh *parsebuf; + DOMString cdatabuf; + long currentPosition; + int colNr; + + +}; + + + +}//namespace MiniDom + + +//######################################################################## +//# E N D O F F I L E +//######################################################################## + diff --git a/src/dom/odf/SvgOdg.cpp b/src/dom/odf/SvgOdg.cpp index f55114701..2b1161310 100644 --- a/src/dom/odf/SvgOdg.cpp +++ b/src/dom/odf/SvgOdg.cpp @@ -1,1551 +1,1551 @@ -/** - * - * This is a small experimental class for converting between - * SVG and OpenDocument .odg files. This code is not intended - * to be a permanent solution for SVG-to-ODG conversion. Rather, - * it is a quick-and-easy test bed for ideas which will be later - * recoded into C++. - * - * --------------------------------------------------------------------- - * - * SvgOdg - A program to experiment with conversions between SVG and ODG - * Copyright (C) 2006 Bob Jamison - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * For more information, please write to rwjj@earthlink.net - * - */ - - -/** - * - */ -public class SvgOdg -{ - - - -/** - * Namespace declarations - */ -public static final String SVG_NS = - "http://www.w3.org/2000/svg"; -public static final String XLINK_NS = - "http://www.w3.org/1999/xlink"; -public static final String ODF_NS = - "urn:oasis:names:tc:opendocument:xmlns:office:1.0"; -public static final String ODG_NS = - "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"; -public static final String ODSVG_NS = - "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"; - - -DecimalFormat nrfmt; -//static final double pxToCm = 0.0339; -static final double pxToCm = 0.0275; -static final double piToRad = 0.0174532925; -BufferedWriter out; -BufferedReader in; -int imageNr; -int styleNr; - -//######################################################################## -//# M E S S A G E S -//######################################################################## - -/** - * - */ -void err(String msg) -{ - System.out.println("SvgOdg ERROR:" + msg); -} - -/** - * - */ -void trace(String msg) -{ - System.out.println("SvgOdg:" + msg); -} - - - - -//######################################################################## -//# I N P U T / O U T P U T -//######################################################################## - -boolean po(String s) -{ - try - { - out.write(s); - } - catch(IOException e) - { - return false; - } - return true; -} - -//######################################################################## -//# U T I L I T Y -//######################################################################## - -public void dumpDocument(Document doc) -{ - String s = ""; - try - { - TransformerFactory factory = TransformerFactory.newInstance(); - Transformer trans = factory.newTransformer(); - DOMSource source = new DOMSource(doc); - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - StreamResult result = new StreamResult(bos); - trans.transform(source, result); - byte buf[] = bos.toByteArray(); - s = new String(buf); - } - catch (javax.xml.transform.TransformerException e) - { - } - trace("doc:" + s); -} - - -//######################################################################## -//# I N N E R C L A S S ImageInfo -//######################################################################## -public class ImageInfo -{ -String name; -String newName; -byte buf[]; - -public String getName() -{ - return name; -} - -public String getNewName() -{ - return newName; -} - - -public byte[] getBuf() -{ - return buf; -} - -public ImageInfo(String name, String newName, byte buf[]) -{ - this.name = name; - this.name = newName; - this.buf = buf; -} - -} -//######################################################################## -//# I N N E R C L A S S StyleInfo -//######################################################################## -public class StyleInfo -{ - -String name; -public String getName() -{ - return name; -} - -String cssStyle; -public String getCssStyle() -{ - return cssStyle; -} - -String stroke; -public String getStroke() -{ - return stroke; -} - -String strokeColor; -public String getStrokeColor() -{ - return strokeColor; -} - -String strokeWidth; -public String getStrokeWidth() -{ - return strokeWidth; -} - -String fill; -public String getFill() -{ - return fill; -} - -String fillColor; -public String getFillColor() -{ - return fillColor; -} - -public StyleInfo(String name, String cssStyle) -{ - this.name = name; - this.cssStyle = cssStyle; - fill = "none"; - stroke = "none"; -} - -} -//######################################################################## -//# E N D I N N E R C L A S S E S -//######################################################################## - - - - -//######################################################################## -//# V A R I A B L E S -//######################################################################## - -/** - * ODF content.xml file - */ -Document content; -public Document getContent() -{ - return content; -} - -/** - * ODF meta.xml file - */ -Document meta; -public Document getMeta() -{ - return meta; -} - -/** - * SVG file - */ -Document svg; -public Document getSvg() -{ - return svg; -} - -/** - * Loaded ODF or SVG images - */ -ArrayList images; -public ArrayList getImages() -{ - return images; -} - -/** - * CSS styles - */ -HashMap styles; -public HashMap getStyles() -{ - return styles; -} - - - - - -//######################################################################## -//# S V G T O O D F -//######################################################################## - -class PathData -{ -String cmd; -double nr[]; -PathData(String s, double buf[]) -{ - cmd=s; nr = buf; -} -} - -double getPathNum(StringTokenizer st) -{ - if (!st.hasMoreTokens()) - return 0.0; - String s = st.nextToken(); - double nr = Double.parseDouble(s); - return nr; -} - -String parsePathData(String pathData, double bounds[]) -{ - double minx = Double.MAX_VALUE; - double maxx = Double.MIN_VALUE; - double miny = Double.MAX_VALUE; - double maxy = Double.MIN_VALUE; - //trace("#### pathData:" + pathData); - ArrayList data = new ArrayList(); - StringTokenizer st = new StringTokenizer(pathData, " ,"); - while (true) - { - String s = st.nextToken(); - if ( s.equals("z") || s.equals("Z") ) - { - PathData pd = new PathData(s, new double[0]); - data.add(pd); - break; - } - else if ( s.equals("h") || s.equals("H") ) - { - double d[] = new double[1]; - d[0] = getPathNum(st) * pxToCm; - if (d[0] < minx) minx = d[0]; - else if (d[0] > maxx) maxx = d[0]; - PathData pd = new PathData(s, d); - data.add(pd); - } - else if ( s.equals("v") || s.equals("V") ) - { - double d[] = new double[1]; - d[0] = getPathNum(st) * pxToCm; - if (d[0] < miny) miny = d[0]; - else if (d[0] > maxy) maxy = d[0]; - PathData pd = new PathData(s, d); - data.add(pd); - } - else if ( s.equals("m") || s.equals("M") || - s.equals("l") || s.equals("L") || - s.equals("t") || s.equals("T") ) - { - double d[] = new double[2]; - d[0] = getPathNum(st) * pxToCm; - d[1] = getPathNum(st) * pxToCm; - if (d[0] < minx) minx = d[0]; - else if (d[0] > maxx) maxx = d[0]; - if (d[1] < miny) miny = d[1]; - else if (d[1] > maxy) maxy = d[1]; - PathData pd = new PathData(s, d); - data.add(pd); - } - else if ( s.equals("q") || s.equals("Q") || - s.equals("s") || s.equals("S") ) - { - double d[] = new double[4]; - d[0] = getPathNum(st) * pxToCm; - d[1] = getPathNum(st) * pxToCm; - if (d[0] < minx) minx = d[0]; - else if (d[0] > maxx) maxx = d[0]; - if (d[1] < miny) miny = d[1]; - else if (d[1] > maxy) maxy = d[1]; - d[2] = getPathNum(st) * pxToCm; - d[3] = getPathNum(st) * pxToCm; - if (d[2] < minx) minx = d[2]; - else if (d[2] > maxx) maxx = d[2]; - if (d[3] < miny) miny = d[3]; - else if (d[3] > maxy) maxy = d[3]; - PathData pd = new PathData(s, d); - data.add(pd); - } - else if ( s.equals("c") || s.equals("C") ) - { - double d[] = new double[6]; - d[0] = getPathNum(st) * pxToCm; - d[1] = getPathNum(st) * pxToCm; - if (d[0] < minx) minx = d[0]; - else if (d[0] > maxx) maxx = d[0]; - if (d[1] < miny) miny = d[1]; - else if (d[1] > maxy) maxy = d[1]; - d[2] = getPathNum(st) * pxToCm; - d[3] = getPathNum(st) * pxToCm; - if (d[2] < minx) minx = d[2]; - else if (d[2] > maxx) maxx = d[2]; - if (d[3] < miny) miny = d[3]; - else if (d[3] > maxy) maxy = d[3]; - d[4] = getPathNum(st) * pxToCm; - d[5] = getPathNum(st) * pxToCm; - if (d[4] < minx) minx = d[4]; - else if (d[4] > maxx) maxx = d[4]; - if (d[5] < miny) miny = d[5]; - else if (d[5] > maxy) maxy = d[5]; - PathData pd = new PathData(s, d); - data.add(pd); - } - else if ( s.equals("a") || s.equals("A") ) - { - double d[] = new double[6]; - d[0] = getPathNum(st) * pxToCm; - d[1] = getPathNum(st) * pxToCm; - if (d[0] < minx) minx = d[0]; - else if (d[0] > maxx) maxx = d[0]; - if (d[1] < miny) miny = d[1]; - else if (d[1] > maxy) maxy = d[1]; - d[2] = getPathNum(st) * piToRad;//angle - d[3] = getPathNum(st) * piToRad;//angle - d[4] = getPathNum(st) * pxToCm; - d[5] = getPathNum(st) * pxToCm; - if (d[4] < minx) minx = d[4]; - else if (d[4] > maxx) maxx = d[4]; - if (d[5] < miny) miny = d[5]; - else if (d[5] > maxy) maxy = d[5]; - PathData pd = new PathData(s, d); - data.add(pd); - } - //trace("x:" + x + " y:" + y); - } - - trace("minx:" + minx + " maxx:" + maxx + - " miny:" + miny + " maxy:" + maxy); - - StringBuffer buf = new StringBuffer(); - for (PathData pd : data) - { - buf.append(pd.cmd); - buf.append(" "); - for (double d:pd.nr) - { - buf.append(nrfmt.format(d * 1000.0)); - buf.append(" "); - } - } - - bounds[0] = minx; - bounds[1] = miny; - bounds[2] = maxx; - bounds[3] = maxy; - - return buf.toString(); -} - - - -boolean parseTransform(String transStr, AffineTransform trans) -{ - trace("== transform:"+ transStr); - StringTokenizer st = new StringTokenizer(transStr, ")"); - while (st.hasMoreTokens()) - { - String chunk = st.nextToken(); - StringTokenizer st2 = new StringTokenizer(chunk, " ,("); - if (!st2.hasMoreTokens()) - continue; - String name = st2.nextToken(); - trace(" ++name:"+ name); - if (name.equals("matrix")) - { - double v[] = new double[6]; - for (int i=0 ; i<6 ; i++) - { - if (!st2.hasMoreTokens()) - break; - v[i] = Double.parseDouble(st2.nextToken()) * pxToCm; - } - AffineTransform mat = new AffineTransform(v); - trans.concatenate(mat); - } - else if (name.equals("translate")) - { - double dx = 0.0; - double dy = 0.0; - if (!st2.hasMoreTokens()) - continue; - dx = Double.parseDouble(st2.nextToken()) * pxToCm; - if (st2.hasMoreTokens()) - dy = Double.parseDouble(st2.nextToken()) * pxToCm; - trans.translate(dx, dy); - } - else if (name.equals("scale")) - { - double sx = 1.0; - double sy = 1.0; - if (!st2.hasMoreTokens()) - continue; - sx = sy = Double.parseDouble(st2.nextToken()); - if (st2.hasMoreTokens()) - sy = Double.parseDouble(st2.nextToken()); - trans.scale(sx, sy); - } - else if (name.equals("rotate")) - { - double r = 0.0; - double cx = 0.0; - double cy = 0.0; - if (!st2.hasMoreTokens()) - continue; - r = Double.parseDouble(st2.nextToken()) * piToRad; - if (st2.hasMoreTokens()) - { - cx = Double.parseDouble(st2.nextToken()) * pxToCm; - if (!st2.hasMoreTokens()) - continue; - cy = Double.parseDouble(st2.nextToken()) * pxToCm; - trans.rotate(r, cx, cy); - } - else - { - trans.rotate(r); - } - } - else if (name.equals("skewX")) - { - double angle = 0.0; - if (!st2.hasMoreTokens()) - continue; - angle = Double.parseDouble(st2.nextToken()); - trans.shear(angle, 0.0); - } - else if (name.equals("skewY")) - { - double angle = 0.0; - if (!st2.hasMoreTokens()) - continue; - angle = Double.parseDouble(st2.nextToken()); - trans.shear(0.0, angle); - } - } - return true; -} - - - -String coordToOdg(String sval) -{ - double nr = Double.parseDouble(sval); - nr = nr * pxToCm; - String s = nrfmt.format(nr) + "cm"; - return s; -} - - -boolean writeSvgAttributes(Element elem, AffineTransform trans) -{ - NamedNodeMap attrs = elem.getAttributes(); - String ename = elem.getLocalName(); - for (int i=0 ; i\n"); - NodeList children = elem.getChildNodes(); - for (int i=0 ; i\n"); - } - else if (tagName.equals("text")) - { - String x = coordToOdg(elem.getAttribute("x")); - String y = coordToOdg(elem.getAttribute("y")); - String width = "5cm"; - String height = "2cm"; - String txt = elem.getTextContent(); - po("\n"); - po(" \n"); - po(" " + txt + "\n"); - po(" \n"); - po("\n"); - return true; - } - else if (tagName.equals("image")) - { - String x = coordToOdg(elem.getAttribute("x")); - String y = coordToOdg(elem.getAttribute("y")); - String width = coordToOdg(elem.getAttribute("width")); - String height = coordToOdg(elem.getAttribute("height")); - String imageName = elem.getAttributeNS(XLINK_NS, "href"); - po("\n"); - po(" \n"); - po("\n"); - return true; - } - else if (tagName.equals("path")) - { - double bounds[] = new double[4]; - String d = elem.getAttribute("d"); - String newd = parsePathData(d, bounds); - double x = bounds[0]; - double y = bounds[1]; - double width = (bounds[2]-bounds[0]); - double height = (bounds[3]-bounds[1]); - po("\n"); - //po(" svg:d=\"" + d + "\"/>\n"); - return true; - } - - else - { - //Verbatim tab mapping - po("\n"); - po("\n"); - } - - return true; -} - - -boolean writeOdfContent(ZipOutputStream outs) -{ - try - { - ZipEntry ze = new ZipEntry("content.xml"); - outs.putNextEntry(ze); - out = new BufferedWriter(new OutputStreamWriter(outs)); - } - catch (IOException e) - { - return false; - } - - NodeList res = svg.getElementsByTagNameNS(SVG_NS, "svg"); - if (res.getLength() < 1) - { - err("saveOdf: no root in .svg file"); - return false; - } - Element root = (Element)res.item(0); - - - po("\n"); - po("\n"); - po("\n"); - po("\n"); - po("\n"); - po("\n"); - po("\n"); - po("\n"); - po(" \n"); - po("\n"); - po("\n"); - po(" \n"); - po("\n"); - - //## Dump our style table - for (StyleInfo s : styles.values()) - { - po("\n"); - po(" \n"); - po("\n"); - } - po("\n"); - po("\n"); - po("\n"); - po("\n"); - po("\n"); - po("\n"); - po("\n\n\n"); - AffineTransform trans = new AffineTransform(); - //trans.scale(12.0, 12.0); - po("\n"); - writeOdfContent(root, trans); - po("\n"); - po("\n\n\n"); - - po("\n"); - po("\n"); - po("\n"); - po("\n"); - - - try - { - out.flush(); - outs.closeEntry(); - } - catch (IOException e) - { - err("writeOdfContent:" + e); - return false; - } - return true; -} - -boolean writeOdfMeta(ZipOutputStream outs) -{ - try - { - ZipEntry ze = new ZipEntry("meta.xml"); - outs.putNextEntry(ze); - out = new BufferedWriter(new OutputStreamWriter(outs)); - } - catch (IOException e) - { - return false; - } - - po("\n"); - po("\n"); - po("\n"); - po(" Inkscape-0.43\n"); - po(" clark kent\n"); - po(" 2005-12-10T10:55:13\n"); - po(" clark kent\n"); - po(" 2005-12-10T10:56:20\n"); - po(" en-US\n"); - po(" 2\n"); - po(" PT1M13S\n"); - po(" \n"); - po(" \n"); - po(" \n"); - po(" \n"); - po(" \n"); - po("\n"); - po("\n"); - - - try - { - out.flush(); - outs.closeEntry(); - } - catch (IOException e) - { - err("writeOdfContent:" + e); - return false; - } - return true; -} - - -boolean writeOdfManifest(ZipOutputStream outs) -{ - try - { - ZipEntry ze = new ZipEntry("META-INF/manifest.xml"); - outs.putNextEntry(ze); - out = new BufferedWriter(new OutputStreamWriter(outs)); - } - catch (IOException e) - { - return false; - } - - po("\n"); - po("\n"); - po("\n"); - po(" \n"); - po(" \n"); - po(" \n"); - po(" \n"); - for (int i=0 ; i\n"); - } - po("\n"); - - try - { - out.flush(); - outs.closeEntry(); - } - catch (IOException e) - { - err("writeOdfContent:" + e); - return false; - } - return true; -} - -boolean writeOdfImages(ZipOutputStream outs) -{ - for (int i=0 ; i style.length()-2) - continue; - String attrName = style.substring(0, pos); - String attrVal = style.substring(pos+1); - trace(" =" + attrName + ':' + attrVal); - if ("stroke".equals(attrName)) - { - si.stroke = "solid"; - si.strokeColor = attrVal; - } - else if ("stroke-width".equals(attrName)) - { - si.strokeWidth = attrVal; - } - else if ("fill".equals(attrName)) - { - si.fill = "solid"; - si.fillColor = attrVal; - } - } - styles.put(css, si); - return true; -} - -boolean readSvg(InputStream ins) -{ - //### LOAD XML - try - { - DocumentBuilderFactory factory = - DocumentBuilderFactory.newInstance(); - factory.setNamespaceAware(true); - DocumentBuilder builder = - factory.newDocumentBuilder(); - builder.setEntityResolver(new EntityResolver() - { - public InputSource resolveEntity(String publicId, String systemId) - { - return new InputSource(new ByteArrayInputStream(new byte[0])); - } - }); - Document doc = builder.parse(ins); - svg = doc; - } - catch (javax.xml.parsers.ParserConfigurationException e) - { - err("making DOM parser:"+e); - return false; - } - catch (org.xml.sax.SAXException e) - { - err("parsing svg document:"+e); - return false; - } - catch (IOException e) - { - err("parsing svg document:"+e); - return false; - } - //dumpDocument(svg); - - //### LOAD IMAGES - imageNr = 0; - images = new ArrayList(); - NodeList res = svg.getElementsByTagNameNS(SVG_NS, "image"); - for (int i=0 ; i(); - res = svg.getElementsByTagName("*"); - for (int i=0 ; i 0) - parseCss(style); - } - - return true; -} - -boolean readSvg(String fileName) -{ - try - { - FileInputStream fis = new FileInputStream(fileName); - if (!readSvg(fis)) - return false; - fis.close(); - } - catch (IOException e) - { - err("opening svg file:"+e); - return false; - } - return true; -} - - -//######################################################################## -//# O D F T O S V G -//######################################################################## - -/** - * - */ -public boolean readOdfEntry(ZipInputStream zis, ZipEntry ent) -{ - String fileName = ent.getName(); - trace("fileName:" + fileName); - if (fileName.length() < 4) - return true; - String ext = fileName.substring(fileName.length() - 4); - trace("ext:" + ext); - ArrayList arr = new ArrayList(); - try - { - while (true) - { - int inb = zis.read(); - if (inb < 0) - break; - arr.add((byte)inb); - } - } - catch (IOException e) - { - return false; - } - byte buf[] = new byte[arr.size()]; - for (int i=0 ; i(); - styleNr = 0; - styles = new HashMap(); - ZipInputStream zis = new ZipInputStream(ins); - while (true) - { - try - { - ZipEntry ent = zis.getNextEntry(); - if (ent == null) - break; - if (!readOdfEntry(zis, ent)) - return false; - zis.closeEntry(); - } - catch (IOException e) - { - err("reading zip entry"); - return false; - } - } - - return true; -} - - -/** - * - */ -public boolean readOdf(String fileName) -{ - boolean ret = true; - try - { - FileInputStream fis = new FileInputStream(fileName); - ret = readOdf(fis); - fis.close(); - } - catch (IOException e) - { - err("reading " + fileName + " : " + e); - ret = false; - } - return true; -} - - - - -public boolean writeSvgElement(Element elem) -{ - String ns = elem.getNamespaceURI(); - String tagName = elem.getLocalName(); - trace("tag:" + tagName + " : " + ns); - if (ns.equals(ODSVG_NS)) - { - po("<"); po(tagName); - NamedNodeMap attrs = elem.getAttributes(); - for (int i=0 ; i\n"); - } - NodeList children = elem.getChildNodes(); - for (int i=0 ; i\n"); - } - return true; -} - - -public boolean saveSvg(String svgFileName) -{ - trace("====== Saving images ==========="); - try - { - for (int i=0 ; i\n"); - po("\n"); - - writeSvgElement(page); - - po("\n"); - - try - { - out.close(); - } - catch (IOException e) - { - err("save:close:" + e); - return false; - } - return true; -} - - - -//######################################################################## -//# C O N S T R U C T O R -//######################################################################## - -SvgOdg() -{ - //init, if necessary - nrfmt = new DecimalFormat("#.####"); -} - - -//######################################################################## -//# C O M M A N D L I N E -//######################################################################## - -public boolean odfToSvg(String odfName, String svgName) -{ - if (!readOdf(odfName)) - return false; - if (!saveSvg(svgName)) - return false; - return true; -} - -public boolean svgToOdf(String svgName, String odfName) -{ - if (!readSvg(svgName)) - return false; - System.out.println("ok"); - if (!saveOdf(odfName)) - return false; - return true; -} - -void usage() -{ - System.out.println("usage: SvgOdf input_file.odg output_file.svg"); - System.out.println(" SvgOdf input_file.svg output_file.odg"); -} - - -boolean parseArguments(String argv[]) -{ - if (argv.length != 2) - { - usage(); - return false; - } - - String fileName1 = argv[0]; - String fileName2 = argv[1]; - - if (fileName1.length()<5 || fileName2.length()<5) - { - System.out.println("one or more file names is too short"); - usage(); - return false; - } - - String ext1 = fileName1.substring(fileName1.length()-4); - String ext2 = fileName2.substring(fileName2.length()-4); - //System.out.println("ext1:"+ext1+" ext2:"+ext2); - - //##### ODG -> SVG ##### - if ((ext1.equals(".odg") || ext1.equals(".odf") || ext1.equals(".zip") ) && - ext2.equals(".svg")) - { - if (!odfToSvg(argv[0], argv[1])) - { - System.out.println("Conversion from ODG to SVG failed"); - return false; - } - } - - //##### SVG -> ODG ##### - else if (ext1.equals(".svg") && - ( ext2.equals(".odg") || ext2.equals(".odf") || ext2.equals(".zip") ) ) - { - if (!svgToOdf(fileName1, fileName2)) - { - System.out.println("Conversion from SVG to ODG failed"); - return false; - } - } - - //##### none of the above ##### - else - { - usage(); - return false; - } - return true; -} - - -public static void main(String argv[]) -{ - SvgOdg svgodg = new SvgOdg(); - svgodg.parseArguments(argv); -} - - -} - -//######################################################################## -//# E N D O F F I L E -//######################################################################## - +/** + * + * This is a small experimental class for converting between + * SVG and OpenDocument .odg files. This code is not intended + * to be a permanent solution for SVG-to-ODG conversion. Rather, + * it is a quick-and-easy test bed for ideas which will be later + * recoded into C++. + * + * --------------------------------------------------------------------- + * + * SvgOdg - A program to experiment with conversions between SVG and ODG + * Copyright (C) 2006 Bob Jamison + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * For more information, please write to rwjj@earthlink.net + * + */ + + +/** + * + */ +public class SvgOdg +{ + + + +/** + * Namespace declarations + */ +public static final String SVG_NS = + "http://www.w3.org/2000/svg"; +public static final String XLINK_NS = + "http://www.w3.org/1999/xlink"; +public static final String ODF_NS = + "urn:oasis:names:tc:opendocument:xmlns:office:1.0"; +public static final String ODG_NS = + "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"; +public static final String ODSVG_NS = + "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"; + + +DecimalFormat nrfmt; +//static final double pxToCm = 0.0339; +static final double pxToCm = 0.0275; +static final double piToRad = 0.0174532925; +BufferedWriter out; +BufferedReader in; +int imageNr; +int styleNr; + +//######################################################################## +//# M E S S A G E S +//######################################################################## + +/** + * + */ +void err(String msg) +{ + System.out.println("SvgOdg ERROR:" + msg); +} + +/** + * + */ +void trace(String msg) +{ + System.out.println("SvgOdg:" + msg); +} + + + + +//######################################################################## +//# I N P U T / O U T P U T +//######################################################################## + +boolean po(String s) +{ + try + { + out.write(s); + } + catch(IOException e) + { + return false; + } + return true; +} + +//######################################################################## +//# U T I L I T Y +//######################################################################## + +public void dumpDocument(Document doc) +{ + String s = ""; + try + { + TransformerFactory factory = TransformerFactory.newInstance(); + Transformer trans = factory.newTransformer(); + DOMSource source = new DOMSource(doc); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + StreamResult result = new StreamResult(bos); + trans.transform(source, result); + byte buf[] = bos.toByteArray(); + s = new String(buf); + } + catch (javax.xml.transform.TransformerException e) + { + } + trace("doc:" + s); +} + + +//######################################################################## +//# I N N E R C L A S S ImageInfo +//######################################################################## +public class ImageInfo +{ +String name; +String newName; +byte buf[]; + +public String getName() +{ + return name; +} + +public String getNewName() +{ + return newName; +} + + +public byte[] getBuf() +{ + return buf; +} + +public ImageInfo(String name, String newName, byte buf[]) +{ + this.name = name; + this.name = newName; + this.buf = buf; +} + +} +//######################################################################## +//# I N N E R C L A S S StyleInfo +//######################################################################## +public class StyleInfo +{ + +String name; +public String getName() +{ + return name; +} + +String cssStyle; +public String getCssStyle() +{ + return cssStyle; +} + +String stroke; +public String getStroke() +{ + return stroke; +} + +String strokeColor; +public String getStrokeColor() +{ + return strokeColor; +} + +String strokeWidth; +public String getStrokeWidth() +{ + return strokeWidth; +} + +String fill; +public String getFill() +{ + return fill; +} + +String fillColor; +public String getFillColor() +{ + return fillColor; +} + +public StyleInfo(String name, String cssStyle) +{ + this.name = name; + this.cssStyle = cssStyle; + fill = "none"; + stroke = "none"; +} + +} +//######################################################################## +//# E N D I N N E R C L A S S E S +//######################################################################## + + + + +//######################################################################## +//# V A R I A B L E S +//######################################################################## + +/** + * ODF content.xml file + */ +Document content; +public Document getContent() +{ + return content; +} + +/** + * ODF meta.xml file + */ +Document meta; +public Document getMeta() +{ + return meta; +} + +/** + * SVG file + */ +Document svg; +public Document getSvg() +{ + return svg; +} + +/** + * Loaded ODF or SVG images + */ +ArrayList images; +public ArrayList getImages() +{ + return images; +} + +/** + * CSS styles + */ +HashMap styles; +public HashMap getStyles() +{ + return styles; +} + + + + + +//######################################################################## +//# S V G T O O D F +//######################################################################## + +class PathData +{ +String cmd; +double nr[]; +PathData(String s, double buf[]) +{ + cmd=s; nr = buf; +} +} + +double getPathNum(StringTokenizer st) +{ + if (!st.hasMoreTokens()) + return 0.0; + String s = st.nextToken(); + double nr = Double.parseDouble(s); + return nr; +} + +String parsePathData(String pathData, double bounds[]) +{ + double minx = Double.MAX_VALUE; + double maxx = Double.MIN_VALUE; + double miny = Double.MAX_VALUE; + double maxy = Double.MIN_VALUE; + //trace("#### pathData:" + pathData); + ArrayList data = new ArrayList(); + StringTokenizer st = new StringTokenizer(pathData, " ,"); + while (true) + { + String s = st.nextToken(); + if ( s.equals("z") || s.equals("Z") ) + { + PathData pd = new PathData(s, new double[0]); + data.add(pd); + break; + } + else if ( s.equals("h") || s.equals("H") ) + { + double d[] = new double[1]; + d[0] = getPathNum(st) * pxToCm; + if (d[0] < minx) minx = d[0]; + else if (d[0] > maxx) maxx = d[0]; + PathData pd = new PathData(s, d); + data.add(pd); + } + else if ( s.equals("v") || s.equals("V") ) + { + double d[] = new double[1]; + d[0] = getPathNum(st) * pxToCm; + if (d[0] < miny) miny = d[0]; + else if (d[0] > maxy) maxy = d[0]; + PathData pd = new PathData(s, d); + data.add(pd); + } + else if ( s.equals("m") || s.equals("M") || + s.equals("l") || s.equals("L") || + s.equals("t") || s.equals("T") ) + { + double d[] = new double[2]; + d[0] = getPathNum(st) * pxToCm; + d[1] = getPathNum(st) * pxToCm; + if (d[0] < minx) minx = d[0]; + else if (d[0] > maxx) maxx = d[0]; + if (d[1] < miny) miny = d[1]; + else if (d[1] > maxy) maxy = d[1]; + PathData pd = new PathData(s, d); + data.add(pd); + } + else if ( s.equals("q") || s.equals("Q") || + s.equals("s") || s.equals("S") ) + { + double d[] = new double[4]; + d[0] = getPathNum(st) * pxToCm; + d[1] = getPathNum(st) * pxToCm; + if (d[0] < minx) minx = d[0]; + else if (d[0] > maxx) maxx = d[0]; + if (d[1] < miny) miny = d[1]; + else if (d[1] > maxy) maxy = d[1]; + d[2] = getPathNum(st) * pxToCm; + d[3] = getPathNum(st) * pxToCm; + if (d[2] < minx) minx = d[2]; + else if (d[2] > maxx) maxx = d[2]; + if (d[3] < miny) miny = d[3]; + else if (d[3] > maxy) maxy = d[3]; + PathData pd = new PathData(s, d); + data.add(pd); + } + else if ( s.equals("c") || s.equals("C") ) + { + double d[] = new double[6]; + d[0] = getPathNum(st) * pxToCm; + d[1] = getPathNum(st) * pxToCm; + if (d[0] < minx) minx = d[0]; + else if (d[0] > maxx) maxx = d[0]; + if (d[1] < miny) miny = d[1]; + else if (d[1] > maxy) maxy = d[1]; + d[2] = getPathNum(st) * pxToCm; + d[3] = getPathNum(st) * pxToCm; + if (d[2] < minx) minx = d[2]; + else if (d[2] > maxx) maxx = d[2]; + if (d[3] < miny) miny = d[3]; + else if (d[3] > maxy) maxy = d[3]; + d[4] = getPathNum(st) * pxToCm; + d[5] = getPathNum(st) * pxToCm; + if (d[4] < minx) minx = d[4]; + else if (d[4] > maxx) maxx = d[4]; + if (d[5] < miny) miny = d[5]; + else if (d[5] > maxy) maxy = d[5]; + PathData pd = new PathData(s, d); + data.add(pd); + } + else if ( s.equals("a") || s.equals("A") ) + { + double d[] = new double[6]; + d[0] = getPathNum(st) * pxToCm; + d[1] = getPathNum(st) * pxToCm; + if (d[0] < minx) minx = d[0]; + else if (d[0] > maxx) maxx = d[0]; + if (d[1] < miny) miny = d[1]; + else if (d[1] > maxy) maxy = d[1]; + d[2] = getPathNum(st) * piToRad;//angle + d[3] = getPathNum(st) * piToRad;//angle + d[4] = getPathNum(st) * pxToCm; + d[5] = getPathNum(st) * pxToCm; + if (d[4] < minx) minx = d[4]; + else if (d[4] > maxx) maxx = d[4]; + if (d[5] < miny) miny = d[5]; + else if (d[5] > maxy) maxy = d[5]; + PathData pd = new PathData(s, d); + data.add(pd); + } + //trace("x:" + x + " y:" + y); + } + + trace("minx:" + minx + " maxx:" + maxx + + " miny:" + miny + " maxy:" + maxy); + + StringBuffer buf = new StringBuffer(); + for (PathData pd : data) + { + buf.append(pd.cmd); + buf.append(" "); + for (double d:pd.nr) + { + buf.append(nrfmt.format(d * 1000.0)); + buf.append(" "); + } + } + + bounds[0] = minx; + bounds[1] = miny; + bounds[2] = maxx; + bounds[3] = maxy; + + return buf.toString(); +} + + + +boolean parseTransform(String transStr, AffineTransform trans) +{ + trace("== transform:"+ transStr); + StringTokenizer st = new StringTokenizer(transStr, ")"); + while (st.hasMoreTokens()) + { + String chunk = st.nextToken(); + StringTokenizer st2 = new StringTokenizer(chunk, " ,("); + if (!st2.hasMoreTokens()) + continue; + String name = st2.nextToken(); + trace(" ++name:"+ name); + if (name.equals("matrix")) + { + double v[] = new double[6]; + for (int i=0 ; i<6 ; i++) + { + if (!st2.hasMoreTokens()) + break; + v[i] = Double.parseDouble(st2.nextToken()) * pxToCm; + } + AffineTransform mat = new AffineTransform(v); + trans.concatenate(mat); + } + else if (name.equals("translate")) + { + double dx = 0.0; + double dy = 0.0; + if (!st2.hasMoreTokens()) + continue; + dx = Double.parseDouble(st2.nextToken()) * pxToCm; + if (st2.hasMoreTokens()) + dy = Double.parseDouble(st2.nextToken()) * pxToCm; + trans.translate(dx, dy); + } + else if (name.equals("scale")) + { + double sx = 1.0; + double sy = 1.0; + if (!st2.hasMoreTokens()) + continue; + sx = sy = Double.parseDouble(st2.nextToken()); + if (st2.hasMoreTokens()) + sy = Double.parseDouble(st2.nextToken()); + trans.scale(sx, sy); + } + else if (name.equals("rotate")) + { + double r = 0.0; + double cx = 0.0; + double cy = 0.0; + if (!st2.hasMoreTokens()) + continue; + r = Double.parseDouble(st2.nextToken()) * piToRad; + if (st2.hasMoreTokens()) + { + cx = Double.parseDouble(st2.nextToken()) * pxToCm; + if (!st2.hasMoreTokens()) + continue; + cy = Double.parseDouble(st2.nextToken()) * pxToCm; + trans.rotate(r, cx, cy); + } + else + { + trans.rotate(r); + } + } + else if (name.equals("skewX")) + { + double angle = 0.0; + if (!st2.hasMoreTokens()) + continue; + angle = Double.parseDouble(st2.nextToken()); + trans.shear(angle, 0.0); + } + else if (name.equals("skewY")) + { + double angle = 0.0; + if (!st2.hasMoreTokens()) + continue; + angle = Double.parseDouble(st2.nextToken()); + trans.shear(0.0, angle); + } + } + return true; +} + + + +String coordToOdg(String sval) +{ + double nr = Double.parseDouble(sval); + nr = nr * pxToCm; + String s = nrfmt.format(nr) + "cm"; + return s; +} + + +boolean writeSvgAttributes(Element elem, AffineTransform trans) +{ + NamedNodeMap attrs = elem.getAttributes(); + String ename = elem.getLocalName(); + for (int i=0 ; i\n"); + NodeList children = elem.getChildNodes(); + for (int i=0 ; i\n"); + } + else if (tagName.equals("text")) + { + String x = coordToOdg(elem.getAttribute("x")); + String y = coordToOdg(elem.getAttribute("y")); + String width = "5cm"; + String height = "2cm"; + String txt = elem.getTextContent(); + po("\n"); + po(" \n"); + po(" " + txt + "\n"); + po(" \n"); + po("\n"); + return true; + } + else if (tagName.equals("image")) + { + String x = coordToOdg(elem.getAttribute("x")); + String y = coordToOdg(elem.getAttribute("y")); + String width = coordToOdg(elem.getAttribute("width")); + String height = coordToOdg(elem.getAttribute("height")); + String imageName = elem.getAttributeNS(XLINK_NS, "href"); + po("\n"); + po(" \n"); + po("\n"); + return true; + } + else if (tagName.equals("path")) + { + double bounds[] = new double[4]; + String d = elem.getAttribute("d"); + String newd = parsePathData(d, bounds); + double x = bounds[0]; + double y = bounds[1]; + double width = (bounds[2]-bounds[0]); + double height = (bounds[3]-bounds[1]); + po("\n"); + //po(" svg:d=\"" + d + "\"/>\n"); + return true; + } + + else + { + //Verbatim tab mapping + po("\n"); + po("\n"); + } + + return true; +} + + +boolean writeOdfContent(ZipOutputStream outs) +{ + try + { + ZipEntry ze = new ZipEntry("content.xml"); + outs.putNextEntry(ze); + out = new BufferedWriter(new OutputStreamWriter(outs)); + } + catch (IOException e) + { + return false; + } + + NodeList res = svg.getElementsByTagNameNS(SVG_NS, "svg"); + if (res.getLength() < 1) + { + err("saveOdf: no root in .svg file"); + return false; + } + Element root = (Element)res.item(0); + + + po("\n"); + po("\n"); + po("\n"); + po("\n"); + po("\n"); + po("\n"); + po("\n"); + po("\n"); + po(" \n"); + po("\n"); + po("\n"); + po(" \n"); + po("\n"); + + //## Dump our style table + for (StyleInfo s : styles.values()) + { + po("\n"); + po(" \n"); + po("\n"); + } + po("\n"); + po("\n"); + po("\n"); + po("\n"); + po("\n"); + po("\n"); + po("\n\n\n"); + AffineTransform trans = new AffineTransform(); + //trans.scale(12.0, 12.0); + po("\n"); + writeOdfContent(root, trans); + po("\n"); + po("\n\n\n"); + + po("\n"); + po("\n"); + po("\n"); + po("\n"); + + + try + { + out.flush(); + outs.closeEntry(); + } + catch (IOException e) + { + err("writeOdfContent:" + e); + return false; + } + return true; +} + +boolean writeOdfMeta(ZipOutputStream outs) +{ + try + { + ZipEntry ze = new ZipEntry("meta.xml"); + outs.putNextEntry(ze); + out = new BufferedWriter(new OutputStreamWriter(outs)); + } + catch (IOException e) + { + return false; + } + + po("\n"); + po("\n"); + po("\n"); + po(" Inkscape-0.43\n"); + po(" clark kent\n"); + po(" 2005-12-10T10:55:13\n"); + po(" clark kent\n"); + po(" 2005-12-10T10:56:20\n"); + po(" en-US\n"); + po(" 2\n"); + po(" PT1M13S\n"); + po(" \n"); + po(" \n"); + po(" \n"); + po(" \n"); + po(" \n"); + po("\n"); + po("\n"); + + + try + { + out.flush(); + outs.closeEntry(); + } + catch (IOException e) + { + err("writeOdfContent:" + e); + return false; + } + return true; +} + + +boolean writeOdfManifest(ZipOutputStream outs) +{ + try + { + ZipEntry ze = new ZipEntry("META-INF/manifest.xml"); + outs.putNextEntry(ze); + out = new BufferedWriter(new OutputStreamWriter(outs)); + } + catch (IOException e) + { + return false; + } + + po("\n"); + po("\n"); + po("\n"); + po(" \n"); + po(" \n"); + po(" \n"); + po(" \n"); + for (int i=0 ; i\n"); + } + po("\n"); + + try + { + out.flush(); + outs.closeEntry(); + } + catch (IOException e) + { + err("writeOdfContent:" + e); + return false; + } + return true; +} + +boolean writeOdfImages(ZipOutputStream outs) +{ + for (int i=0 ; i style.length()-2) + continue; + String attrName = style.substring(0, pos); + String attrVal = style.substring(pos+1); + trace(" =" + attrName + ':' + attrVal); + if ("stroke".equals(attrName)) + { + si.stroke = "solid"; + si.strokeColor = attrVal; + } + else if ("stroke-width".equals(attrName)) + { + si.strokeWidth = attrVal; + } + else if ("fill".equals(attrName)) + { + si.fill = "solid"; + si.fillColor = attrVal; + } + } + styles.put(css, si); + return true; +} + +boolean readSvg(InputStream ins) +{ + //### LOAD XML + try + { + DocumentBuilderFactory factory = + DocumentBuilderFactory.newInstance(); + factory.setNamespaceAware(true); + DocumentBuilder builder = + factory.newDocumentBuilder(); + builder.setEntityResolver(new EntityResolver() + { + public InputSource resolveEntity(String publicId, String systemId) + { + return new InputSource(new ByteArrayInputStream(new byte[0])); + } + }); + Document doc = builder.parse(ins); + svg = doc; + } + catch (javax.xml.parsers.ParserConfigurationException e) + { + err("making DOM parser:"+e); + return false; + } + catch (org.xml.sax.SAXException e) + { + err("parsing svg document:"+e); + return false; + } + catch (IOException e) + { + err("parsing svg document:"+e); + return false; + } + //dumpDocument(svg); + + //### LOAD IMAGES + imageNr = 0; + images = new ArrayList(); + NodeList res = svg.getElementsByTagNameNS(SVG_NS, "image"); + for (int i=0 ; i(); + res = svg.getElementsByTagName("*"); + for (int i=0 ; i 0) + parseCss(style); + } + + return true; +} + +boolean readSvg(String fileName) +{ + try + { + FileInputStream fis = new FileInputStream(fileName); + if (!readSvg(fis)) + return false; + fis.close(); + } + catch (IOException e) + { + err("opening svg file:"+e); + return false; + } + return true; +} + + +//######################################################################## +//# O D F T O S V G +//######################################################################## + +/** + * + */ +public boolean readOdfEntry(ZipInputStream zis, ZipEntry ent) +{ + String fileName = ent.getName(); + trace("fileName:" + fileName); + if (fileName.length() < 4) + return true; + String ext = fileName.substring(fileName.length() - 4); + trace("ext:" + ext); + ArrayList arr = new ArrayList(); + try + { + while (true) + { + int inb = zis.read(); + if (inb < 0) + break; + arr.add((byte)inb); + } + } + catch (IOException e) + { + return false; + } + byte buf[] = new byte[arr.size()]; + for (int i=0 ; i(); + styleNr = 0; + styles = new HashMap(); + ZipInputStream zis = new ZipInputStream(ins); + while (true) + { + try + { + ZipEntry ent = zis.getNextEntry(); + if (ent == null) + break; + if (!readOdfEntry(zis, ent)) + return false; + zis.closeEntry(); + } + catch (IOException e) + { + err("reading zip entry"); + return false; + } + } + + return true; +} + + +/** + * + */ +public boolean readOdf(String fileName) +{ + boolean ret = true; + try + { + FileInputStream fis = new FileInputStream(fileName); + ret = readOdf(fis); + fis.close(); + } + catch (IOException e) + { + err("reading " + fileName + " : " + e); + ret = false; + } + return true; +} + + + + +public boolean writeSvgElement(Element elem) +{ + String ns = elem.getNamespaceURI(); + String tagName = elem.getLocalName(); + trace("tag:" + tagName + " : " + ns); + if (ns.equals(ODSVG_NS)) + { + po("<"); po(tagName); + NamedNodeMap attrs = elem.getAttributes(); + for (int i=0 ; i\n"); + } + NodeList children = elem.getChildNodes(); + for (int i=0 ; i\n"); + } + return true; +} + + +public boolean saveSvg(String svgFileName) +{ + trace("====== Saving images ==========="); + try + { + for (int i=0 ; i\n"); + po("\n"); + + writeSvgElement(page); + + po("\n"); + + try + { + out.close(); + } + catch (IOException e) + { + err("save:close:" + e); + return false; + } + return true; +} + + + +//######################################################################## +//# C O N S T R U C T O R +//######################################################################## + +SvgOdg() +{ + //init, if necessary + nrfmt = new DecimalFormat("#.####"); +} + + +//######################################################################## +//# C O M M A N D L I N E +//######################################################################## + +public boolean odfToSvg(String odfName, String svgName) +{ + if (!readOdf(odfName)) + return false; + if (!saveSvg(svgName)) + return false; + return true; +} + +public boolean svgToOdf(String svgName, String odfName) +{ + if (!readSvg(svgName)) + return false; + System.out.println("ok"); + if (!saveOdf(odfName)) + return false; + return true; +} + +void usage() +{ + System.out.println("usage: SvgOdf input_file.odg output_file.svg"); + System.out.println(" SvgOdf input_file.svg output_file.odg"); +} + + +boolean parseArguments(String argv[]) +{ + if (argv.length != 2) + { + usage(); + return false; + } + + String fileName1 = argv[0]; + String fileName2 = argv[1]; + + if (fileName1.length()<5 || fileName2.length()<5) + { + System.out.println("one or more file names is too short"); + usage(); + return false; + } + + String ext1 = fileName1.substring(fileName1.length()-4); + String ext2 = fileName2.substring(fileName2.length()-4); + //System.out.println("ext1:"+ext1+" ext2:"+ext2); + + //##### ODG -> SVG ##### + if ((ext1.equals(".odg") || ext1.equals(".odf") || ext1.equals(".zip") ) && + ext2.equals(".svg")) + { + if (!odfToSvg(argv[0], argv[1])) + { + System.out.println("Conversion from ODG to SVG failed"); + return false; + } + } + + //##### SVG -> ODG ##### + else if (ext1.equals(".svg") && + ( ext2.equals(".odg") || ext2.equals(".odf") || ext2.equals(".zip") ) ) + { + if (!svgToOdf(fileName1, fileName2)) + { + System.out.println("Conversion from SVG to ODG failed"); + return false; + } + } + + //##### none of the above ##### + else + { + usage(); + return false; + } + return true; +} + + +public static void main(String argv[]) +{ + SvgOdg svgodg = new SvgOdg(); + svgodg.parseArguments(argv); +} + + +} + +//######################################################################## +//# E N D O F F I L E +//######################################################################## + diff --git a/src/dom/odf/odfdocument.cpp b/src/dom/odf/odfdocument.cpp index ba6cfc63b..cba9e1349 100644 --- a/src/dom/odf/odfdocument.cpp +++ b/src/dom/odf/odfdocument.cpp @@ -1,161 +1,161 @@ -/** - * - * This class contains an ODF Document. - * Initially, we are just concerned with .odg content.xml + resources - * - * --------------------------------------------------------------------- - * - * Copyright (C) 2006 Bob Jamison - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * For more information, please write to rwjj@earthlink.net - * - */ - -#include "odfdocument.h" - - -namespace odf -{ - - -//######################################################################## -//# I M A G E D A T A -//######################################################################## - - -/** - * - */ -ImageData::ImageData(const std::string &fname, - const std::vector &buf) -{ - fileName = fname; - data = buf; -} - -/** - * - */ -ImageData::ImageData(const ImageData &other) -{ - fileName = other.fileName; - data = other.data; -} - -/** - * - */ -ImageData::~ImageData() -{ -} - -/** - * - */ -std::string ImageData::getFileName() -{ - return fileName; -} - -/** - * - */ -void ImageData::setFileName(const std::string &val) -{ - fileName = val; -} - -/** - * - */ -std::vector &ImageData::getData() -{ - return data; -} - -/** - * - */ -void ImageData::setData(const std::vector &buf) -{ - data = buf; -} - - - - - -//######################################################################## -//# O D F D O C U M E N T -//######################################################################## - - - -/** - * - */ -OdfDocument::OdfDocument() -{ -} - - -/** - * - */ -OdfDocument::OdfDocument(const OdfDocument &other) -{ - content = other.content; - images = other.images; -} - - -/** - * - */ -OdfDocument::~OdfDocument() -{ -} - -/** - * - */ -bool OdfDocument::readFile(const std::string &fileName) -{ - return true; -} - -/** - * - */ -bool OdfDocument::writeFile(const std::string &fileName) -{ - return true; -} - - - - - -} //namespace odf - - - - -//######################################################################## -//# E N D O F F I L E -//######################################################################## - +/** + * + * This class contains an ODF Document. + * Initially, we are just concerned with .odg content.xml + resources + * + * --------------------------------------------------------------------- + * + * Copyright (C) 2006 Bob Jamison + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * For more information, please write to rwjj@earthlink.net + * + */ + +#include "odfdocument.h" + + +namespace odf +{ + + +//######################################################################## +//# I M A G E D A T A +//######################################################################## + + +/** + * + */ +ImageData::ImageData(const std::string &fname, + const std::vector &buf) +{ + fileName = fname; + data = buf; +} + +/** + * + */ +ImageData::ImageData(const ImageData &other) +{ + fileName = other.fileName; + data = other.data; +} + +/** + * + */ +ImageData::~ImageData() +{ +} + +/** + * + */ +std::string ImageData::getFileName() +{ + return fileName; +} + +/** + * + */ +void ImageData::setFileName(const std::string &val) +{ + fileName = val; +} + +/** + * + */ +std::vector &ImageData::getData() +{ + return data; +} + +/** + * + */ +void ImageData::setData(const std::vector &buf) +{ + data = buf; +} + + + + + +//######################################################################## +//# O D F D O C U M E N T +//######################################################################## + + + +/** + * + */ +OdfDocument::OdfDocument() +{ +} + + +/** + * + */ +OdfDocument::OdfDocument(const OdfDocument &other) +{ + content = other.content; + images = other.images; +} + + +/** + * + */ +OdfDocument::~OdfDocument() +{ +} + +/** + * + */ +bool OdfDocument::readFile(const std::string &fileName) +{ + return true; +} + +/** + * + */ +bool OdfDocument::writeFile(const std::string &fileName) +{ + return true; +} + + + + + +} //namespace odf + + + + +//######################################################################## +//# E N D O F F I L E +//######################################################################## + diff --git a/src/dom/odf/odfdocument.h b/src/dom/odf/odfdocument.h index 9710de385..c18dc4b72 100644 --- a/src/dom/odf/odfdocument.h +++ b/src/dom/odf/odfdocument.h @@ -1,153 +1,153 @@ -#ifndef __ODF_DOCUMENT_H__ -#define __ODF_DOCUMENT_H__ -/** - * - * This class contains an ODF Document. - * Initially, we are just concerned with .odg content.xml + resources - * - * --------------------------------------------------------------------- - * - * Copyright (C) 2006 Bob Jamison - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * For more information, please write to rwjj@earthlink.net - * - */ - -#include -#include - -#include "dom/dom.h" - -namespace odf -{ - - -//######################################################################## -//# I M A G E D A T A -//######################################################################## - -/** - * - */ -class ImageData -{ -public: - - /** - * - */ - ImageData(const std::string &fileName, - const std::vector &buf); - - /** - * - */ - ImageData(const ImageData &other); - - /** - * - */ - virtual ~ImageData(); - - /** - * - */ - virtual std::string getFileName(); - - /** - * - */ - virtual void setFileName(const std::string &val); - - /** - * - */ - virtual std::vector &getData(); - - /** - * - */ - virtual void setData(const std::vector &buf); - -private: - - std::string fileName; - - std::vector data; - -}; - - - - - -//######################################################################## -//# O D F D O C U M E N T -//######################################################################## - - -/** - * - */ -class OdfDocument -{ -public: - - /** - * - */ - OdfDocument(); - - /** - * Copy constructor - */ - OdfDocument(const OdfDocument &other); - - /** - * - */ - virtual ~OdfDocument(); - - /** - * - */ - virtual bool readFile(const std::string &fileName); - - /** - * - */ - virtual bool writeFile(const std::string &fileName); - - -private: - - org::w3c::dom::Document *content; - - std::vector images; - -}; - -} //namespace odf - - - -#endif /*__ODF_DOCUMENT_H__*/ - -//######################################################################## -//# E N D O F F I L E -//######################################################################## - +#ifndef __ODF_DOCUMENT_H__ +#define __ODF_DOCUMENT_H__ +/** + * + * This class contains an ODF Document. + * Initially, we are just concerned with .odg content.xml + resources + * + * --------------------------------------------------------------------- + * + * Copyright (C) 2006 Bob Jamison + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * For more information, please write to rwjj@earthlink.net + * + */ + +#include +#include + +#include "dom/dom.h" + +namespace odf +{ + + +//######################################################################## +//# I M A G E D A T A +//######################################################################## + +/** + * + */ +class ImageData +{ +public: + + /** + * + */ + ImageData(const std::string &fileName, + const std::vector &buf); + + /** + * + */ + ImageData(const ImageData &other); + + /** + * + */ + virtual ~ImageData(); + + /** + * + */ + virtual std::string getFileName(); + + /** + * + */ + virtual void setFileName(const std::string &val); + + /** + * + */ + virtual std::vector &getData(); + + /** + * + */ + virtual void setData(const std::vector &buf); + +private: + + std::string fileName; + + std::vector data; + +}; + + + + + +//######################################################################## +//# O D F D O C U M E N T +//######################################################################## + + +/** + * + */ +class OdfDocument +{ +public: + + /** + * + */ + OdfDocument(); + + /** + * Copy constructor + */ + OdfDocument(const OdfDocument &other); + + /** + * + */ + virtual ~OdfDocument(); + + /** + * + */ + virtual bool readFile(const std::string &fileName); + + /** + * + */ + virtual bool writeFile(const std::string &fileName); + + +private: + + org::w3c::dom::Document *content; + + std::vector images; + +}; + +} //namespace odf + + + +#endif /*__ODF_DOCUMENT_H__*/ + +//######################################################################## +//# E N D O F F I L E +//######################################################################## + diff --git a/src/dom/svg/svg.h b/src/dom/svg/svg.h index b02ccc933..0bf44b817 100644 --- a/src/dom/svg/svg.h +++ b/src/dom/svg/svg.h @@ -1,4474 +1,4474 @@ -#ifndef __SVG_H__ -#define __SVG_H__ - -/** - * Phoebe DOM Implementation. - * - * This is a C++ approximation of the W3C DOM model, which follows - * fairly closely the specifications in the various .idl files, copies of - * which are provided for reference. Most important is this one: - * - * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html - * - * Authors: - * Bob Jamison - * - * Copyright (C) 2005 Bob Jamison - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -// For access to DOM2 core -#include "dom/dom.h" - -// For access to DOM2 events -#include "dom/events.h" - -// For access to those parts from DOM2 CSS OM used by SVG DOM. -#include "dom/css.h" - -// For access to those parts from DOM2 Views OM used by SVG DOM. -#include "dom/views.h" - -// For access to the SMIL OM used by SVG DOM. -#include "dom/smil.h" - - - -#include "svgtypes.h" - -#include - - - -namespace org -{ -namespace w3c -{ -namespace dom -{ -namespace svg -{ - - -//local definitions -typedef dom::DOMString DOMString; -typedef dom::DOMException DOMException; -typedef dom::Element Element; -typedef dom::Document Document; -typedef dom::NodeList NodeList; - - - -class SVGSVGElement; - - - -/*######################################################################### -## SVGElement -#########################################################################*/ - -/** - * - */ -class SVGElement : virtual public Element -{ -public: - - /** - * - */ - virtual DOMString getId() =0; - - /** - * - */ - virtual void setId(const DOMString &val) - throw (DOMException) =0; - - /** - * - */ - virtual DOMString getXmlBase() = 0; - - /** - * - */ - virtual void setXmlBase(const DOMString &val) - throw (DOMException) = 0; - - /** - * - */ - virtual SVGSVGElement *getOwnerSVGElement() = 0; - - /** - * - */ - virtual SVGElement *getViewportElement() = 0; - - - //################## - //# Non-API methods - //################## - - - /** - * - */ - virtual ~SVGElement() {} - - -}; - - - -/*######################################################################### -## SVGDocument -#########################################################################*/ - -/** - * - */ -class SVGDocument : virtual public Document, - virtual public events::DocumentEvent -{ -public: - - - /** - * - */ - virtual DOMString getTitle() =0; - - /** - * - */ - virtual DOMString getReferrer() =0; - - /** - * - */ - virtual DOMString getDomain() =0; - - /** - * - */ - virtual DOMString getURL() =0; - - /** - * - */ - virtual SVGSVGElement *getRootElement() =0; - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGDocument() {} - -}; - - - -/*######################################################################### -## SVGSVGElement -#########################################################################*/ - -/** - * - */ -class SVGSVGElement : virtual public SVGElement, - public SVGTests, - public SVGLangSpace, - public SVGExternalResourcesRequired, - public SVGStylable, - public SVGLocatable, - public SVGFitToViewBox, - public SVGZoomAndPan, - public events::EventTarget, - public events::DocumentEvent, - public css::ViewCSS, - public css::DocumentCSS -{ -public: - - /** - * - */ - virtual SVGAnimatedLength getX() =0; - - /** - * - */ - virtual SVGAnimatedLength getY() =0; - - /** - * - */ - virtual SVGAnimatedLength getWidth() =0; - - /** - * - */ - virtual SVGAnimatedLength getHeight() =0; - - /** - * - */ - virtual DOMString getContentScriptType() =0; - - /** - * - */ - virtual void setContentScriptType(const DOMString &val) - throw (DOMException) =0; - - - /** - * - */ - virtual DOMString getContentStyleType() =0; - - /** - * - */ - virtual void setContentStyleType(const DOMString &val) - throw (DOMException) =0; - - /** - * - */ - virtual SVGRect getViewport() =0; - - /** - * - */ - virtual double getPixelUnitToMillimeterX() =0; - - /** - * - */ - virtual double getPixelUnitToMillimeterY() =0; - - /** - * - */ - virtual double getScreenPixelToMillimeterX() =0; - - /** - * - */ - virtual double getScreenPixelToMillimeterY() =0; - - - /** - * - */ - virtual bool getUseCurrentView() =0; - - /** - * - */ - virtual void setUseCurrentView(bool val) throw (DOMException) =0; - - /** - * - */ - virtual SVGViewSpec getCurrentView() =0; - - - /** - * - */ - virtual double getCurrentScale() =0; - - /** - * - */ - virtual void setCurrentScale(double val) - throw (DOMException) =0; - - - /** - * - */ - virtual SVGPoint getCurrentTranslate() =0; - - - /** - * - */ - virtual unsigned long suspendRedraw (unsigned long max_wait_milliseconds ) =0; - - /** - * - */ - virtual void unsuspendRedraw (unsigned long suspend_handle_id ) - throw( DOMException ) =0; - - /** - * - */ - virtual void unsuspendRedrawAll ( ) =0; - - /** - * - */ - virtual void forceRedraw ( ) =0; - - /** - * - */ - virtual void pauseAnimations ( ) =0; - - /** - * - */ - virtual void unpauseAnimations ( ) =0; - - /** - * - */ - virtual bool animationsPaused ( ) =0; - - /** - * - */ - virtual double getCurrentTime ( ) =0; - - /** - * - */ - virtual void setCurrentTime (double seconds ) =0; - - /** - * - */ - virtual NodeList getIntersectionList (const SVGRect &rect, - const SVGElement *referenceElement ) =0; - - /** - * - */ - virtual NodeList getEnclosureList (const SVGRect &rect, - const SVGElement *referenceElement ) =0; - - /** - * - */ - virtual bool checkIntersection (const SVGElement *element, const SVGRect &rect ) =0; - - /** - * - */ - virtual bool checkEnclosure (const SVGElement *element, const SVGRect &rect ) =0; - - /** - * - */ - virtual void deselectAll ( ) =0; - - /** - * - */ - virtual SVGNumber createSVGNumber ( ) =0; - - /** - * - */ - virtual SVGLength createSVGLength ( ) =0; - - /** - * - */ - virtual SVGAngle createSVGAngle ( ) =0; - - /** - * - */ - virtual SVGPoint createSVGPoint ( ) =0; - - /** - * - */ - virtual SVGMatrix createSVGMatrix ( ) =0; - - /** - * - */ - virtual SVGRect createSVGRect ( ) =0; - - /** - * - */ - virtual SVGTransform createSVGTransform ( ) =0; - - /** - * - */ - virtual SVGTransform createSVGTransformFromMatrix(const SVGMatrix &matrix ) =0; - - /** - * - */ - virtual Element *getElementById (const DOMString& elementId ) =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGSVGElement() {} - -}; - - - -/*######################################################################### -## SVGGElement -#########################################################################*/ - -/** - * - */ -class SVGGElement : virtual public SVGElement, - public SVGTests, - public SVGLangSpace, - public SVGExternalResourcesRequired, - public SVGStylable, - public SVGTransformable, - public events::EventTarget -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGGElement() {} - -}; - - - - -/*######################################################################### -## SVGDefsElement -#########################################################################*/ - -/** - * - */ -class SVGDefsElement : - virtual public SVGElement, - public SVGTests, - public SVGLangSpace, - public SVGExternalResourcesRequired, - public SVGStylable, - public SVGTransformable, - public events::EventTarget -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGDefsElement() {} - -}; - - - - -/*######################################################################### -## SVGDescElement -#########################################################################*/ - -/** - * - */ -class SVGDescElement : - virtual public SVGElement, - public SVGLangSpace, - public SVGStylable -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGDescElement() {} - -}; - - - - -/*######################################################################### -## SVGTitleElement -#########################################################################*/ - -/** - * - */ -class SVGTitleElement : - virtual public SVGElement, - public SVGLangSpace, - public SVGStylable -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGTitleElement() {} - -}; - - - - -/*######################################################################### -## SVGSymbolElement -#########################################################################*/ - -/** - * - */ -class SVGSymbolElement : - virtual public SVGElement, - public SVGLangSpace, - public SVGExternalResourcesRequired, - public SVGStylable, - public SVGFitToViewBox, - public events::EventTarget -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGSymbolElement() {} - -}; - - - - -/*######################################################################### -## SVGUseElement -#########################################################################*/ - -/** - * - */ -class SVGUseElement : - virtual public SVGElement, - public SVGURIReference, - public SVGTests, - public SVGLangSpace, - public SVGExternalResourcesRequired, - public SVGStylable, - public SVGTransformable, - public events::EventTarget -{ -public: - - - - - /** - * - */ - virtual SVGAnimatedLength getX() =0; - - /** - * - */ - virtual SVGAnimatedLength getY() =0; - - /** - * - */ - virtual SVGAnimatedLength getWidth() =0; - - /** - * - */ - virtual SVGAnimatedLength getHeight() =0; - - /** - * - */ - virtual SVGElementInstance getInstanceRoot() =0; - - /** - * - */ - virtual SVGElementInstance getAnimatedInstanceRoot() =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGUseElement() {} - -}; - - - - - - - -/*######################################################################### -## SVGImageElement -#########################################################################*/ - -/** - * - */ -class SVGImageElement : - virtual public SVGElement, - public SVGURIReference, - public SVGTests, - public SVGLangSpace, - public SVGExternalResourcesRequired, - public SVGStylable, - public SVGTransformable, - public events::EventTarget -{ -public: - - - /** - * - */ - virtual SVGAnimatedLength getX() =0; - - /** - * - */ - virtual SVGAnimatedLength getY() =0; - - /** - * - */ - virtual SVGAnimatedLength getWidth() =0; - - /** - * - */ - virtual SVGAnimatedLength getHeight() =0; - - - /** - * - */ - virtual SVGAnimatedPreserveAspectRatio getPreserveAspectRatio() =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGImageElement() {} - -}; - - - - - - -/*######################################################################### -## SVGSwitchElement -#########################################################################*/ - -/** - * - */ -class SVGSwitchElement : - virtual public SVGElement, - public SVGTests, - public SVGLangSpace, - public SVGExternalResourcesRequired, - public SVGStylable, - public SVGTransformable, - public events::EventTarget -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGSwitchElement() {} - -}; - - - - -/*######################################################################### -## GetSVGDocument -#########################################################################*/ - -/** - * - */ -class GetSVGDocument -{ -public: - - /** - * - */ - virtual SVGDocument *getSVGDocument ( ) - throw( DOMException ) =0; - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~GetSVGDocument() {} - -}; - - - - - - -/*######################################################################### -## SVGStyleElement -#########################################################################*/ - -/** - * - */ -class SVGStyleElement : virtual public SVGElement -{ -public: - - /** - * - */ - virtual DOMString getXmlspace() = 0; - - /** - * - */ - virtual void setXmlspace(const DOMString &val) - throw (DOMException) =0; - - /** - * - */ - virtual DOMString getType() = 0; - - /** - * - */ - virtual void setType(const DOMString &val) - throw (DOMException) =0; - - /** - * - */ - virtual DOMString getMedia() = 0; - - /** - * - */ - virtual void setMedia(const DOMString &val) - throw (DOMException) =0; - - /** - * - */ - virtual DOMString getTitle() = 0; - - /** - * - */ - virtual void setTitle(const DOMString &val) - throw (DOMException) =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGStyleElement() {} - -}; - - - - - - -/*######################################################################### -## SVGPathElement -#########################################################################*/ - -/** - * - */ -class SVGPathElement : - virtual public SVGElement, - public SVGTests, - public SVGLangSpace, - public SVGExternalResourcesRequired, - public SVGStylable, - public SVGTransformable, - public events::EventTarget, - public SVGAnimatedPathData -{ -public: - - - - - /** - * - */ - virtual SVGAnimatedNumber getPathLength() =0; - - /** - * - */ - virtual double getTotalLength ( ) =0; - - /** - * - */ - virtual SVGPoint getPointAtLength (double distance ) =0; - - /** - * - */ - virtual unsigned long getPathSegAtLength (double distance ) =0; - - /** - * - */ - virtual SVGPathSegClosePath - createSVGPathSegClosePath ( ) =0; - - /** - * - */ - virtual SVGPathSegMovetoAbs - createSVGPathSegMovetoAbs (double x, double y ) =0; - - /** - * - */ - virtual SVGPathSegMovetoRel - createSVGPathSegMovetoRel (double x, double y ) =0; - - /** - * - */ - virtual SVGPathSegLinetoAbs - createSVGPathSegLinetoAbs (double x, double y ) =0; - - /** - * - */ - virtual SVGPathSegLinetoRel - createSVGPathSegLinetoRel (double x, double y ) =0; - - /** - * - */ - virtual SVGPathSegCurvetoCubicAbs - createSVGPathSegCurvetoCubicAbs (double x, double y, - double x1, double y1, double x2, double y2 ) =0; - - /** - * - */ - virtual SVGPathSegCurvetoCubicRel - createSVGPathSegCurvetoCubicRel (double x, double y, - double x1, double y1, double x2, double y2 ) =0; - - /** - * - */ - virtual SVGPathSegCurvetoQuadraticAbs - createSVGPathSegCurvetoQuadraticAbs (double x, double y, - double x1, double y1 ) =0; - - /** - * - */ - virtual SVGPathSegCurvetoQuadraticRel - createSVGPathSegCurvetoQuadraticRel (double x, double y, - double x1, double y1 ) =0; - - /** - * - */ - virtual SVGPathSegArcAbs - createSVGPathSegArcAbs (double x, double y, - double r1, double r2, double angle, - bool largeArcFlag, bool sweepFlag ) =0; - - /** - * - */ - virtual SVGPathSegArcRel - createSVGPathSegArcRel (double x, double y, double r1, - double r2, double angle, bool largeArcFlag, - bool sweepFlag ) =0; - - /** - * - */ - virtual SVGPathSegLinetoHorizontalAbs - createSVGPathSegLinetoHorizontalAbs (double x ) =0; - - /** - * - */ - virtual SVGPathSegLinetoHorizontalRel - createSVGPathSegLinetoHorizontalRel (double x ) =0; - - /** - * - */ - virtual SVGPathSegLinetoVerticalAbs - createSVGPathSegLinetoVerticalAbs (double y ) =0; - - /** - * - */ - virtual SVGPathSegLinetoVerticalRel - createSVGPathSegLinetoVerticalRel (double y ) =0; - - /** - * - */ - virtual SVGPathSegCurvetoCubicSmoothAbs - createSVGPathSegCurvetoCubicSmoothAbs (double x, double y, - double x2, double y2 ) =0; - - /** - * - */ - virtual SVGPathSegCurvetoCubicSmoothRel - createSVGPathSegCurvetoCubicSmoothRel (double x, double y, - double x2, double y2 ) =0; - - /** - * - */ - virtual SVGPathSegCurvetoQuadraticSmoothAbs - createSVGPathSegCurvetoQuadraticSmoothAbs (double x, double y ) =0; - - /** - * - */ - virtual SVGPathSegCurvetoQuadraticSmoothRel - createSVGPathSegCurvetoQuadraticSmoothRel (double x, double y ) =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGPathElement() {} - -}; - - - - - - -/*######################################################################### -## SVGRectElement -#########################################################################*/ - -/** - * - */ -class SVGRectElement : - virtual public SVGElement, - public SVGTests, - public SVGLangSpace, - public SVGExternalResourcesRequired, - public SVGStylable, - public SVGTransformable, - public events::EventTarget -{ -public: - - /** - * - */ - virtual SVGAnimatedLength getX() =0; - - /** - * - */ - virtual SVGAnimatedLength getY() =0; - - /** - * - */ - virtual SVGAnimatedLength getWidth() =0; - - /** - * - */ - virtual SVGAnimatedLength getHeight() =0; - - - /** - * - */ - virtual SVGAnimatedLength getRx() =0; - - /** - * - */ - virtual SVGAnimatedLength getRy() =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGRectElement() {} - -}; - - - - - - -/*######################################################################### -## SVGCircleElement -#########################################################################*/ - -/** - * - */ -class SVGCircleElement : - virtual public SVGElement, - public SVGTests, - public SVGLangSpace, - public SVGExternalResourcesRequired, - public SVGStylable, - public SVGTransformable, - public events::EventTarget -{ -public: - - /** - * - */ - virtual SVGAnimatedLength getCx() =0; - - /** - * - */ - virtual SVGAnimatedLength getCy() =0; - - /** - * - */ - virtual SVGAnimatedLength getR() =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGCircleElement() {} - -}; - - - - - - -/*######################################################################### -## SVGEllipseElement -#########################################################################*/ - -/** - * - */ -class SVGEllipseElement : - virtual public SVGElement, - public SVGTests, - public SVGLangSpace, - public SVGExternalResourcesRequired, - public SVGStylable, - public SVGTransformable, - public events::EventTarget -{ -public: - /** - * - */ - virtual SVGAnimatedLength getCx() =0; - - /** - * - */ - virtual SVGAnimatedLength getCy() =0; - - /** - * - */ - virtual SVGAnimatedLength getRx() =0; - - /** - * - */ - virtual SVGAnimatedLength getRy() =0; - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGEllipseElement() {} - -}; - - - - - - -/*######################################################################### -## SVGLineElement -#########################################################################*/ - -/** - * - */ -class SVGLineElement : - virtual public SVGElement, - public SVGTests, - public SVGLangSpace, - public SVGExternalResourcesRequired, - public SVGStylable, - public SVGTransformable, - public events::EventTarget -{ -public: - /** - * - */ - virtual SVGAnimatedLength getX1() =0; - - /** - * - */ - virtual SVGAnimatedLength getY1() =0; - - /** - * - */ - virtual SVGAnimatedLength getX2() =0; - - /** - * - */ - virtual SVGAnimatedLength getY2() =0; - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGLineElement() {} - -}; - - - - -/*######################################################################### -## SVGPolylineElement -#########################################################################*/ - -/** - * - */ -class SVGPolylineElement : - virtual public SVGElement, - public SVGTests, - public SVGLangSpace, - public SVGExternalResourcesRequired, - public SVGStylable, - public SVGTransformable, - public events::EventTarget, - public SVGAnimatedPoints -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGPolylineElement() {} - -}; - - - - -/*######################################################################### -## SVGPolygonElement -#########################################################################*/ - -/** - * - */ -class SVGPolygonElement : - virtual public SVGElement, - public SVGTests, - public SVGLangSpace, - public SVGExternalResourcesRequired, - public SVGStylable, - public SVGTransformable, - public events::EventTarget, - public SVGAnimatedPoints -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGPolygonElement() {} - -}; - - - - -/*######################################################################### -## SVGTextContentElement -#########################################################################*/ - -/** - * - */ -class SVGTextContentElement : - virtual public SVGElement, - public SVGTests, - public SVGLangSpace, - public SVGExternalResourcesRequired, - public SVGStylable, - public events::EventTarget -{ -public: - - - - /** - * lengthAdjust Types - */ - typedef enum - { - LENGTHADJUST_UNKNOWN = 0, - LENGTHADJUST_SPACING = 1, - LENGTHADJUST_SPACINGANDGLYPHS = 2 - } LengthAdjustType; - - - /** - * - */ - virtual SVGAnimatedLength getTextLength() =0; - - - /** - * - */ - virtual SVGAnimatedEnumeration getLengthAdjust() =0; - - - /** - * - */ - virtual long getNumberOfChars ( ) =0; - - /** - * - */ - virtual double getComputedTextLength ( ) =0; - - /** - * - */ - virtual double getSubStringLength (unsigned long charnum, unsigned long nchars ) - throw( DOMException ) =0; - - /** - * - */ - virtual SVGPoint getStartPositionOfChar (unsigned long charnum ) - throw( DOMException ) =0; - - /** - * - */ - virtual SVGPoint getEndPositionOfChar (unsigned long charnum ) - throw( DOMException ) =0; - - /** - * - */ - virtual SVGRect getExtentOfChar (unsigned long charnum ) - throw( DOMException ) =0; - - /** - * - */ - virtual double getRotationOfChar (unsigned long charnum ) - throw( DOMException ) =0; - - /** - * - */ - virtual long getCharNumAtPosition (const SVGPoint &point ) =0; - - /** - * - */ - virtual void selectSubString (unsigned long charnum, unsigned long nchars ) - throw( DOMException ) =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGTextContentElement() {} - -}; - - - - - - -/*######################################################################### -## SVGTextPositioningElement -#########################################################################*/ - -/** - * - */ -class SVGTextPositioningElement : virtual public SVGTextContentElement -{ -public: - - /** - * - */ - virtual SVGAnimatedLength getX() =0; - - /** - * - */ - virtual SVGAnimatedLength getY() =0; - - /** - * - */ - virtual SVGAnimatedLength getDx() =0; - - /** - * - */ - virtual SVGAnimatedLength getDy() =0; - - - /** - * - */ - virtual SVGAnimatedNumberList getRotate() =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGTextPositioningElement() {} - -}; - - - - - - -/*######################################################################### -## SVGTextElement -#########################################################################*/ - -/** - * - */ -class SVGTextElement : virtual public SVGTextPositioningElement, - public SVGTransformable -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGTextElement() {} - -}; - - - - -/*######################################################################### -## SVGTSpanElement -#########################################################################*/ - -/** - * - */ -class SVGTSpanElement : virtual public SVGTextPositioningElement -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGTSpanElement() {} - -}; - - - - -/*######################################################################### -## SVGTRefElement -#########################################################################*/ - -/** - * - */ -class SVGTRefElement : - virtual public SVGTextPositioningElement, - public SVGURIReference -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGTRefElement() {} - -}; - - - - -/*######################################################################### -## SVGTextPathElement -#########################################################################*/ - -/** - * - */ -class SVGTextPathElement : - virtual public SVGTextContentElement, - public SVGURIReference -{ -public: - - - - /** - * textPath Method Types - */ - typedef enum - { - TEXTPATH_METHODTYPE_UNKNOWN = 0, - TEXTPATH_METHODTYPE_ALIGN = 1, - TEXTPATH_METHODTYPE_STRETCH = 2 - } TextPathMethodType; - - /** - * textPath Spacing Types - */ - typedef enum - { - TEXTPATH_SPACINGTYPE_UNKNOWN = 0, - TEXTPATH_SPACINGTYPE_AUTO = 1, - TEXTPATH_SPACINGTYPE_EXACT = 2 - } TextPathSpacingType; - - - /** - * - */ - virtual SVGAnimatedLength getStartOffset() =0; - - /** - * - */ - virtual SVGAnimatedEnumeration getMethod() =0; - - /** - * - */ - virtual SVGAnimatedEnumeration getSpacing() =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGTextPathElement() {} - -}; - - - - - - -/*######################################################################### -## SVGAltGlyphElement -#########################################################################*/ - -/** - * - */ -class SVGAltGlyphElement : - virtual public SVGTextPositioningElement, - public SVGURIReference -{ -public: - - /** - * - */ - virtual DOMString getGlyphRef() =0; - - /** - * - */ - virtual void setGlyphRef(const DOMString &val) - throw (DOMException) =0; - - /** - * - */ - virtual DOMString getFormat() =0; - - /** - * - */ - virtual void setFormat(const DOMString &val) - throw (DOMException) =0; - - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGAltGlyphElement() {} - -}; - - - - - - -/*######################################################################### -## SVGAltGlyphDefElement -#########################################################################*/ - -/** - * - */ -class SVGAltGlyphDefElement : virtual public SVGElement -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGAltGlyphDefElement() {} - -}; - - - - -/*######################################################################### -## SVGAltGlyphItemElement -#########################################################################*/ - -/** - * - */ -class SVGAltGlyphItemElement : virtual public SVGElement -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGAltGlyphItemElement() {} - -}; - - - - -/*######################################################################### -## SVGGlyphRefElement -#########################################################################*/ - -/** - * - */ -class SVGGlyphRefElement : virtual public SVGElement, - public SVGURIReference, - public SVGStylable -{ -public: - /** - * - */ - virtual DOMString getGlyphRef() =0; - - /** - * - */ - virtual void setGlyphRef(const DOMString &val) - throw (DOMException) =0; - - /** - * - */ - virtual DOMString getFormat() =0; - - /** - * - */ - virtual void setFormat(const DOMString &val) - throw (DOMException) =0; - - /** - * - */ - virtual double getX() = 0; - - /** - * - */ - virtual void setX(double val) throw (DOMException) =0; - - /** - * - */ - virtual double getY() = 0; - - /** - * - */ - virtual void setY(double val) throw (DOMException) =0; - - /** - * - */ - virtual double getDx() = 0; - - /** - * - */ - virtual void setDx(double val) throw (DOMException) =0; - - /** - * - */ - virtual double getDy() = 0; - - /** - * - */ - virtual void setDy(double val) throw (DOMException) =0; - - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGGlyphRefElement() {} - -}; - - - - - -/*######################################################################### -## SVGMarkerElement -#########################################################################*/ - -/** - * - */ -class SVGMarkerElement : - virtual public SVGElement, - public SVGLangSpace, - public SVGExternalResourcesRequired, - public SVGStylable, - public SVGFitToViewBox -{ -public: - - - - /** - * Marker Unit Types - */ - typedef enum - { - SVG_MARKERUNITS_UNKNOWN = 0, - SVG_MARKERUNITS_USERSPACEONUSE = 1, - SVG_MARKERUNITS_STROKEWIDTH = 2 - } MarkerUnitType; - - /** - * Marker Orientation Types - */ - typedef enum - { - SVG_MARKER_ORIENT_UNKNOWN = 0, - SVG_MARKER_ORIENT_AUTO = 1, - SVG_MARKER_ORIENT_ANGLE = 2 - } MarkerOrientationType; - - - /** - * - */ - virtual SVGAnimatedLength getRefX() =0; - - /** - * - */ - virtual SVGAnimatedLength getRefY() =0; - - /** - * - */ - virtual SVGAnimatedEnumeration getMarkerUnits() =0; - - /** - * - */ - virtual SVGAnimatedLength getMarkerWidth() =0; - - /** - * - */ - virtual SVGAnimatedLength getMarkerHeight() =0; - - /** - * - */ - virtual SVGAnimatedEnumeration getOrientType() =0; - - /** - * - */ - virtual SVGAnimatedAngle getOrientAngle() =0; - - - /** - * - */ - virtual void setOrientToAuto ( ) =0; - - /** - * - */ - virtual void setOrientToAngle (const SVGAngle &angle) =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGMarkerElement() {} - -}; - - - - - - -/*######################################################################### -## SVGColorProfileElement -#########################################################################*/ - -/** - * - */ -class SVGColorProfileElement : - virtual public SVGElement, - public SVGURIReference, - public SVGRenderingIntent -{ -public: - /** - * - */ - virtual DOMString getLocal() =0; - - /** - * - */ - virtual void setLocal(const DOMString &val) - throw (DOMException) =0; - - /** - * - */ - virtual DOMString getName() =0; - - /** - * - */ - virtual void setName(const DOMString &val) - throw (DOMException) =0; - - /** - * - */ - virtual unsigned short getRenderingIntent() =0; - - /** - * - */ - virtual void setRenderingIntent(unsigned short val) - throw (DOMException) =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGColorProfileElement() {} - -}; - - - - -/*######################################################################### -## SVGGradientElement -#########################################################################*/ - -/** - * - */ -class SVGGradientElement : - virtual public SVGElement, - public SVGURIReference, - public SVGExternalResourcesRequired, - public SVGStylable, - public SVGUnitTypes -{ -public: - - - - /** - * Spread Method Types - */ - typedef enum - { - SVG_SPREADMETHOD_UNKNOWN = 0, - SVG_SPREADMETHOD_PAD = 1, - SVG_SPREADMETHOD_REFLECT = 2, - SVG_SPREADMETHOD_REPEAT = 3 - } SpreadMethodType; - - - /** - * - */ - virtual SVGAnimatedEnumeration getGradientUnits() =0; - - /** - * - */ - virtual SVGAnimatedTransformList getGradientTransform() =0; - - /** - * - */ - virtual SVGAnimatedEnumeration getSpreadMethod() =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGGradientElement() {} - -}; - - - - - - -/*######################################################################### -## SVGLinearGradientElement -#########################################################################*/ - -/** - * - */ -class SVGLinearGradientElement : virtual public SVGGradientElement -{ -public: - - - /** - * - */ - virtual SVGAnimatedLength getX1() =0; - - /** - * - */ - virtual SVGAnimatedLength getY1() =0; - - /** - * - */ - virtual SVGAnimatedLength getX2() =0; - - /** - * - */ - virtual SVGAnimatedLength getY2() =0; - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGLinearGradientElement() {} - -}; - - - - - - -/*######################################################################### -## SVGRadialGradientElement -#########################################################################*/ - -/** - * - */ -class SVGRadialGradientElement : virtual public SVGGradientElement -{ -public: - - - /** - * - */ - virtual SVGAnimatedLength getCx() =0; - - - /** - * - */ - virtual SVGAnimatedLength getCy() =0; - - - /** - * - */ - virtual SVGAnimatedLength getR() =0; - - - /** - * - */ - virtual SVGAnimatedLength getFx() =0; - - - /** - * - */ - virtual SVGAnimatedLength getFy() =0; - - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGRadialGradientElement() {} - -}; - - - - - - -/*######################################################################### -## SVGStopElement -#########################################################################*/ - -/** - * - */ -class SVGStopElement : - virtual public SVGElement, - public SVGStylable -{ -public: - - /** - * - */ - virtual SVGAnimatedNumber getOffset() =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGStopElement() {} - -}; - - - - - - -/*######################################################################### -## SVGPatternElement -#########################################################################*/ - -/** - * - */ -class SVGPatternElement : - virtual public SVGElement, - public SVGURIReference, - public SVGTests, - public SVGLangSpace, - public SVGExternalResourcesRequired, - public SVGStylable, - public SVGFitToViewBox, - public SVGUnitTypes -{ -public: - - - - - /** - * - */ - virtual SVGAnimatedEnumeration getPatternUnits() =0; - - /** - * - */ - virtual SVGAnimatedEnumeration getPatternContentUnits() =0; - - /** - * - */ - virtual SVGAnimatedTransformList getPatternTransform() =0; - - /** - * - */ - virtual SVGAnimatedLength getX() =0; - - /** - * - */ - virtual SVGAnimatedLength getY() =0; - - /** - * - */ - virtual SVGAnimatedLength getWidth() =0; - - /** - * - */ - virtual SVGAnimatedLength getHeight() =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGPatternElement() {} - -}; - - - - - - -/*######################################################################### -## SVGClipPathElement -#########################################################################*/ - -/** - * - */ -class SVGClipPathElement : - virtual public SVGElement, - public SVGTests, - public SVGLangSpace, - public SVGExternalResourcesRequired, - public SVGStylable, - public SVGTransformable, - public SVGUnitTypes -{ -public: - /** - * - */ - virtual SVGAnimatedEnumeration getClipPathUnits() =0; - - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGClipPathElement() {} - -}; - - - - - - -/*######################################################################### -## SVGMaskElement -#########################################################################*/ - -/** - * - */ -class SVGMaskElement : - virtual public SVGElement, - public SVGTests, - public SVGLangSpace, - public SVGExternalResourcesRequired, - public SVGStylable, - public SVGUnitTypes -{ -public: - - - - /** - * - */ - virtual SVGAnimatedEnumeration getMaskUnits() =0; - - /** - * - */ - virtual SVGAnimatedEnumeration getMaskContentUnits() =0; - - /** - * - */ - virtual SVGAnimatedLength getX() =0; - - /** - * - */ - virtual SVGAnimatedLength getY() =0; - - /** - * - */ - virtual SVGAnimatedLength getWidth() =0; - - /** - * - */ - virtual SVGAnimatedLength getHeight() =0; - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGMaskElement() {} - -}; - - - - - - -/*######################################################################### -## SVGFilterElement -#########################################################################*/ - -/** - * - */ -class SVGFilterElement : - virtual public SVGElement, - public SVGURIReference, - public SVGLangSpace, - public SVGExternalResourcesRequired, - public SVGStylable, - public SVGUnitTypes -{ -public: - - - - /** - * - */ - virtual SVGAnimatedEnumeration getFilterUnits() =0; - - /** - * - */ - virtual SVGAnimatedEnumeration getPrimitiveUnits() =0; - - /** - * - */ - virtual SVGAnimatedLength getX() =0; - - /** - * - */ - virtual SVGAnimatedLength getY() =0; - - /** - * - */ - virtual SVGAnimatedLength getWidth() =0; - - /** - * - */ - virtual SVGAnimatedLength getHeight() =0; - - - /** - * - */ - virtual SVGAnimatedInteger getFilterResX() =0; - - /** - * - */ - virtual SVGAnimatedInteger getFilterResY() =0; - - /** - * - */ - virtual void setFilterRes (unsigned long filterResX, - unsigned long filterResY ) =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFilterElement() {} - -}; - - - - - -/*######################################################################### -## SVGFEBlendElement -#########################################################################*/ - -/** - * - */ -class SVGFEBlendElement : - virtual public SVGElement, - public SVGFilterPrimitiveStandardAttributes -{ -public: - - - /** - * Blend Mode Types - */ - typedef enum - { - SVG_FEBLEND_MODE_UNKNOWN = 0, - SVG_FEBLEND_MODE_NORMAL = 1, - SVG_FEBLEND_MODE_MULTIPLY = 2, - SVG_FEBLEND_MODE_SCREEN = 3, - SVG_FEBLEND_MODE_DARKEN = 4, - SVG_FEBLEND_MODE_LIGHTEN = 5 - } BlendModeType; - - /** - * - */ - virtual SVGAnimatedString getIn1() =0; - - /** - * - */ - virtual SVGAnimatedString getIn2() =0; - - /** - * - */ - virtual SVGAnimatedEnumeration getMode() =0; - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEBlendElement() {} - -}; - - - - - - -/*######################################################################### -## SVGFEColorMatrixElement -#########################################################################*/ - -/** - * - */ -class SVGFEColorMatrixElement : - virtual public SVGElement, - public SVGFilterPrimitiveStandardAttributes -{ -public: - - - - /** - * Color Matrix Types - */ - typedef enum - { - SVG_FECOLORMATRIX_TYPE_UNKNOWN = 0, - SVG_FECOLORMATRIX_TYPE_MATRIX = 1, - SVG_FECOLORMATRIX_TYPE_SATURATE = 2, - SVG_FECOLORMATRIX_TYPE_HUEROTATE = 3, - SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA = 4 - } ColorMatrixType; - - - /** - * - */ - virtual SVGAnimatedString getIn1() =0; - - /** - * - */ - virtual SVGAnimatedEnumeration getType() =0; - - /** - * - */ - virtual SVGAnimatedNumberList getValues() =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEColorMatrixElement() {} - -}; - - - - - - -/*######################################################################### -## SVGFEComponentTransferElement -#########################################################################*/ - -/** - * - */ -class SVGFEComponentTransferElement : - virtual public SVGElement, - public SVGFilterPrimitiveStandardAttributes -{ -public: - /** - * - */ - virtual SVGAnimatedString getIn1() =0; - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEComponentTransferElement() {} - -}; - - - - - - -/*######################################################################### -## SVGComponentTransferFunctionElement -#########################################################################*/ - -/** - * - */ -class SVGComponentTransferFunctionElement : virtual public SVGElement -{ -public: - - - /** - * Component Transfer Types - */ - typedef enum - { - SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN = 0, - SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY = 1, - SVG_FECOMPONENTTRANSFER_TYPE_TABLE = 2, - SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE = 3, - SVG_FECOMPONENTTRANSFER_TYPE_LINEAR = 4, - SVG_FECOMPONENTTRANSFER_TYPE_GAMMA = 5 - } ComponentTransferType; - - - /** - * - */ - virtual SVGAnimatedEnumeration getType() =0; - - /** - * - */ - virtual SVGAnimatedNumberList getTableValues() =0; - - /** - * - */ - virtual SVGAnimatedNumber getSlope() =0; - - /** - * - */ - virtual SVGAnimatedNumber getIntercept() =0; - - /** - * - */ - virtual SVGAnimatedNumber getAmplitude() =0; - - /** - * - */ - virtual SVGAnimatedNumber getExponent() =0; - - /** - * - */ - virtual SVGAnimatedNumber getOffset() =0; - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGComponentTransferFunctionElement() {} - -}; - - - - - - -/*######################################################################### -## SVGFEFuncRElement -#########################################################################*/ - -/** - * - */ -class SVGFEFuncRElement : virtual public SVGComponentTransferFunctionElement -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEFuncRElement() {} - -}; - - - - -/*######################################################################### -## SVGFEFuncGElement -#########################################################################*/ - -/** - * - */ -class SVGFEFuncGElement : public virtual SVGComponentTransferFunctionElement -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEFuncGElement() {} - -}; - - - - -/*######################################################################### -## SVGFEFuncBElement -#########################################################################*/ - -/** - * - */ -class SVGFEFuncBElement : virtual public SVGComponentTransferFunctionElement -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEFuncBElement() {} - -}; - - - - -/*######################################################################### -## SVGFEFuncAElement -#########################################################################*/ - -/** - * - */ -class SVGFEFuncAElement : virtual public SVGComponentTransferFunctionElement -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEFuncAElement() {} - -}; - - - - -/*######################################################################### -## SVGFECompositeElement -#########################################################################*/ - -/** - * - */ -class SVGFECompositeElement : - virtual public SVGElement, - public SVGFilterPrimitiveStandardAttributes -{ -public: - - - - /** - * Composite Operators - */ - typedef enum - { - SVG_FECOMPOSITE_OPERATOR_UNKNOWN = 0, - SVG_FECOMPOSITE_OPERATOR_OVER = 1, - SVG_FECOMPOSITE_OPERATOR_IN = 2, - SVG_FECOMPOSITE_OPERATOR_OUT = 3, - SVG_FECOMPOSITE_OPERATOR_ATOP = 4, - SVG_FECOMPOSITE_OPERATOR_XOR = 5, - SVG_FECOMPOSITE_OPERATOR_ARITHMETIC = 6 - } CompositeOperatorType; - - /** - * - */ - virtual SVGAnimatedString getIn1() =0; - - /** - * - */ - virtual SVGAnimatedString getIn2() =0; - - /** - * - */ - virtual SVGAnimatedEnumeration getOperator() =0; - - /** - * - */ - virtual SVGAnimatedNumber getK1() =0; - - /** - * - */ - virtual SVGAnimatedNumber getK2() =0; - - /** - * - */ - virtual SVGAnimatedNumber getK3() =0; - - /** - * - */ - virtual SVGAnimatedNumber getK4() =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFECompositeElement() {} - -}; - - - - - - -/*######################################################################### -## SVGFEConvolveMatrixElement -#########################################################################*/ - -/** - * - */ -class SVGFEConvolveMatrixElement : - virtual public SVGElement, - public SVGFilterPrimitiveStandardAttributes -{ -public: - - - - /** - * Edge Mode Values - */ - typedef enum - { - SVG_EDGEMODE_UNKNOWN = 0, - SVG_EDGEMODE_DUPLICATE = 1, - SVG_EDGEMODE_WRAP = 2, - SVG_EDGEMODE_NONE = 3 - } EdgeModeType; - - - /** - * - */ - virtual SVGAnimatedInteger getOrderX() =0; - - /** - * - */ - virtual SVGAnimatedInteger getOrderY() =0; - - /** - * - */ - virtual SVGAnimatedNumberList getKernelMatrix() =0; - - /** - * - */ - virtual SVGAnimatedNumber getDivisor() =0; - - /** - * - */ - virtual SVGAnimatedNumber getBias() =0; - - /** - * - */ - virtual SVGAnimatedInteger getTargetX() =0; - - /** - * - */ - virtual SVGAnimatedInteger getTargetY() =0; - - /** - * - */ - virtual SVGAnimatedEnumeration getEdgeMode() =0; - - /** - * - */ - virtual SVGAnimatedLength getKernelUnitLengthX() =0; - - /** - * - */ - virtual SVGAnimatedLength getKernelUnitLengthY() =0; - - /** - * - */ - virtual SVGAnimatedBoolean getPreserveAlpha() =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEConvolveMatrixElement() {} - -}; - - - - - - -/*######################################################################### -## SVGFEDiffuseLightingElement -#########################################################################*/ - -/** - * - */ -class SVGFEDiffuseLightingElement : - virtual public SVGElement, - public SVGFilterPrimitiveStandardAttributes -{ -public: - - /** - * - */ - virtual SVGAnimatedString getIn1() =0; - - /** - * - */ - virtual SVGAnimatedNumber getSurfaceScale() =0; - - /** - * - */ - virtual SVGAnimatedNumber getDiffuseConstant() =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEDiffuseLightingElement() {} - -}; - - - - - - -/*######################################################################### -## SVGFEDistantLightElement -#########################################################################*/ - -/** - * - */ -class SVGFEDistantLightElement : virtual public SVGElement -{ -public: - - /** - * - */ - virtual SVGAnimatedNumber getAzimuth() =0; - - - /** - * - */ - virtual SVGAnimatedNumber getElevation() =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEDistantLightElement() {} - -}; - - - - - - -/*######################################################################### -## SVGFEPointLightElement -#########################################################################*/ - -/** - * - */ -class SVGFEPointLightElement : virtual public SVGElement -{ -public: - /** - * - */ - virtual SVGAnimatedNumber getX() =0; - - - /** - * - */ - virtual SVGAnimatedNumber getY() =0; - - /** - * - */ - virtual SVGAnimatedNumber getZ() =0; - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEPointLightElement() {} - -}; - - - - - - -/*######################################################################### -## SVGFESpotLightElement -#########################################################################*/ - -/** - * - */ -class SVGFESpotLightElement : virtual public SVGElement -{ -public: - - /** - * - */ - virtual SVGAnimatedNumber getX() =0; - - - /** - * - */ - virtual SVGAnimatedNumber getY() =0; - - /** - * - */ - virtual SVGAnimatedNumber getZ() =0; - - /** - * - */ - virtual SVGAnimatedNumber getPointsAtX() =0; - - /** - * - */ - virtual SVGAnimatedNumber getPointsAtY() =0; - - /** - * - */ - virtual SVGAnimatedNumber getPointsAtZ() =0; - - /** - * - */ - virtual SVGAnimatedNumber getSpecularExponent() =0; - - /** - * - */ - virtual SVGAnimatedNumber getLimitingConeAngle() =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFESpotLightElement() {} - -}; - - - - - - -/*######################################################################### -## SVGFEDisplacementMapElement -#########################################################################*/ - -/** - * - */ -class SVGFEDisplacementMapElement : - virtual public SVGElement, - public SVGFilterPrimitiveStandardAttributes -{ -public: - - - - /** - * Channel Selectors - */ - typedef enum - { - SVG_CHANNEL_UNKNOWN = 0, - SVG_CHANNEL_R = 1, - SVG_CHANNEL_G = 2, - SVG_CHANNEL_B = 3, - SVG_CHANNEL_A = 4 - } ChannelSelector; - - /** - * - */ - virtual SVGAnimatedString getIn1() =0; - - /** - * - */ - virtual SVGAnimatedString getIn2() =0; - - - /** - * - */ - virtual SVGAnimatedNumber getScale() =0; - - /** - * - */ - virtual SVGAnimatedEnumeration getXChannelSelector() =0; - - /** - * - */ - virtual SVGAnimatedEnumeration getYChannelSelector() =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEDisplacementMapElement() {} - -}; - - - - - - -/*######################################################################### -## SVGFEFloodElement -#########################################################################*/ - -/** - * - */ -class SVGFEFloodElement : - virtual public SVGElement, - public SVGFilterPrimitiveStandardAttributes -{ -public: - /** - * - */ - virtual SVGAnimatedString getIn1() =0; - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEFloodElement() {} - -}; - - - - - - -/*######################################################################### -## SVGFEGaussianBlurElement -#########################################################################*/ - -/** - * - */ -class SVGFEGaussianBlurElement : - virtual public SVGElement, - public SVGFilterPrimitiveStandardAttributes -{ -public: - /** - * - */ - virtual SVGAnimatedString getIn1() =0; - - - /** - * - */ - virtual SVGAnimatedNumber getStdDeviationX() =0; - - /** - * - */ - virtual SVGAnimatedNumber getStdDeviationY() =0; - - - /** - * - */ - virtual void setStdDeviation (double stdDeviationX, double stdDeviationY ) =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEGaussianBlurElement() {} - -}; - - - - - - -/*######################################################################### -## SVGFEImageElement -#########################################################################*/ - -/** - * - */ -class SVGFEImageElement : - virtual public SVGElement, - public SVGURIReference, - public SVGLangSpace, - public SVGExternalResourcesRequired, - public SVGFilterPrimitiveStandardAttributes -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEImageElement() {} - -}; - - - - -/*######################################################################### -## SVGFEMergeElement -#########################################################################*/ - -/** - * - */ -class SVGFEMergeElement : - virtual public SVGElement, - public SVGFilterPrimitiveStandardAttributes -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEMergeElement() {} - -}; - - - - -/*######################################################################### -## SVGFEMergeNodeElement -#########################################################################*/ - -/** - * - */ -class SVGFEMergeNodeElement : virtual public SVGElement -{ -public: - /** - * - */ - virtual SVGAnimatedString getIn1() =0; - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEMergeNodeElement() {} - -}; - - - - - - -/*######################################################################### -## SVGFEMorphologyElement -#########################################################################*/ - -/** - * - */ -class SVGFEMorphologyElement : - virtual public SVGElement, - public SVGFilterPrimitiveStandardAttributes -{ -public: - - - - /** - * Morphology Operators - */ - typedef enum - { - SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0, - SVG_MORPHOLOGY_OPERATOR_ERODE = 1, - SVG_MORPHOLOGY_OPERATOR_DILATE = 2 - } MorphologyOperatorType; - - - /** - * - */ - virtual SVGAnimatedString getIn1() =0; - - - /** - * - */ - virtual SVGAnimatedEnumeration getOperator() =0; - - /** - * - */ - virtual SVGAnimatedLength getRadiusX() =0; - - /** - * - */ - virtual SVGAnimatedLength getRadiusY() =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEMorphologyElement() {} - -}; - - - - - - -/*######################################################################### -## SVGFEOffsetElement -#########################################################################*/ - -/** - * - */ -class SVGFEOffsetElement : - virtual public SVGElement, - public SVGFilterPrimitiveStandardAttributes -{ -public: - - - - /** - * - */ - virtual SVGAnimatedString getIn1() =0; - - /** - * - */ - virtual SVGAnimatedLength getDx() =0; - - /** - * - */ - virtual SVGAnimatedLength getDy() =0; - - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEOffsetElement() {} - -}; - - - - - - -/*######################################################################### -## SVGFESpecularLightingElement -#########################################################################*/ - -/** - * - */ -class SVGFESpecularLightingElement : - virtual public SVGElement, - public SVGFilterPrimitiveStandardAttributes -{ -public: - - /** - * - */ - virtual SVGAnimatedString getIn1() =0; - - /** - * - */ - virtual SVGAnimatedNumber getSurfaceScale() =0; - - /** - * - */ - virtual SVGAnimatedNumber getSpecularConstant() =0; - - /** - * - */ - virtual SVGAnimatedNumber getSpecularExponent() =0; - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFESpecularLightingElement() {} - -}; - - - - - - -/*######################################################################### -## SVGFETileElement -#########################################################################*/ - -/** - * - */ -class SVGFETileElement : - virtual public SVGElement, - public SVGFilterPrimitiveStandardAttributes -{ -public: - - - /** - * - */ - virtual SVGAnimatedString getIn1() =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFETileElement() {} - -}; - - - - - - -/*######################################################################### -## SVGFETurbulenceElement -#########################################################################*/ - -/** - * - */ -class SVGFETurbulenceElement : - virtual public SVGElement, - public SVGFilterPrimitiveStandardAttributes -{ -public: - - - - /** - * Turbulence Types - */ - typedef enum - { - SVG_TURBULENCE_TYPE_UNKNOWN = 0, - SVG_TURBULENCE_TYPE_FRACTALNOISE = 1, - SVG_TURBULENCE_TYPE_TURBULENCE = 2 - } TurbulenceType; - - /** - * Stitch Options - */ - typedef enum - { - SVG_STITCHTYPE_UNKNOWN = 0, - SVG_STITCHTYPE_STITCH = 1, - SVG_STITCHTYPE_NOSTITCH = 2 - } StitchOption; - - - - /** - * - */ - virtual SVGAnimatedNumber getBaseFrequencyX() =0; - - /** - * - */ - virtual SVGAnimatedNumber getBaseFrequencyY() =0; - - /** - * - */ - virtual SVGAnimatedInteger getNumOctaves() =0; - - /** - * - */ - virtual SVGAnimatedNumber getSeed() =0; - - /** - * - */ - virtual SVGAnimatedEnumeration getStitchTiles() =0; - - /** - * - */ - virtual SVGAnimatedEnumeration getType() =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFETurbulenceElement() {} - -}; - - - - - - -/*######################################################################### -## SVGCursorElement -#########################################################################*/ - -/** - * - */ -class SVGCursorElement : - virtual public SVGElement, - public SVGURIReference, - public SVGTests, - public SVGExternalResourcesRequired -{ -public: - /** - * - */ - virtual SVGAnimatedLength getX() =0; - - /** - * - */ - virtual SVGAnimatedLength getY() =0; - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGCursorElement() {} - -}; - - - - - - -/*######################################################################### -## SVGAElement -#########################################################################*/ - -/** - * - */ -class SVGAElement : virtual public SVGElement, - public SVGURIReference, - public SVGTests, - public SVGLangSpace, - public SVGExternalResourcesRequired, - public SVGStylable, - public SVGTransformable, - public events::EventTarget -{ -public: - - /** - * - */ - virtual SVGAnimatedString getTarget() =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGAElement() {} - -}; - - - - - - -/*######################################################################### -## SVGViewElement -#########################################################################*/ - -/** - * - */ -class SVGViewElement : virtual public SVGElement, - public SVGExternalResourcesRequired, - public SVGFitToViewBox, - public SVGZoomAndPan -{ -public: - - /** - * - */ - virtual SVGStringList getViewTarget() =0; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGViewElement() {} - -}; - - - - - - -/*######################################################################### -## SVGScriptElement -#########################################################################*/ - -/** - * - */ -class SVGScriptElement : - virtual public SVGElement, - public SVGURIReference, - public SVGExternalResourcesRequired -{ -public: - - /** - * - */ - virtual DOMString getType() =0; - - /** - * - */ - virtual void setType(const DOMString &val) - throw (DOMException) =0; - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGScriptElement() {} - -}; - - - - - -/*######################################################################### -## SVGAnimationElement -#########################################################################*/ - -/** - * - */ -class SVGAnimationElement : - virtual public SVGElement, - public SVGTests, - public SVGExternalResourcesRequired, - public smil::ElementTimeControl, - public events::EventTarget -{ -public: - - - /** - * - */ - virtual SVGElement *getTargetElement() =0; - - - /** - * - */ - virtual double getStartTime ( ) =0; - - /** - * - */ - virtual double getCurrentTime ( ) =0; - - /** - * - */ - virtual double getSimpleDuration ( ) - throw( DOMException ) =0; -; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGAnimationElement() {} - -}; - - - - - - -/*######################################################################### -## SVGAnimateElement -#########################################################################*/ - -/** - * - */ -class SVGAnimateElement : virtual public SVGAnimationElement -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGAnimateElement() {} - -}; - - - - -/*######################################################################### -## SVGSetElement -#########################################################################*/ - -/** - * - */ -class SVGSetElement : virtual public SVGAnimationElement -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGSetElement() {} - -}; - - - - -/*######################################################################### -## SVGAnimateMotionElement -#########################################################################*/ - -/** - * - */ -class SVGAnimateMotionElement : virtual public SVGAnimationElement -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGAnimateMotionElement() {} - -}; - - - - -/*######################################################################### -## SVGMPathElement -#########################################################################*/ - -/** - * - */ -class SVGMPathElement : - virtual public SVGElement, - public SVGURIReference, - public SVGExternalResourcesRequired -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGMPathElement() {} - -}; - - - - -/*######################################################################### -## SVGAnimateColorElement -#########################################################################*/ - -/** - * - */ -class SVGAnimateColorElement : virtual public SVGAnimationElement -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGAnimateColorElement() {} - -}; - - - - -/*######################################################################### -## SVGAnimateTransformElement -#########################################################################*/ - -/** - * - */ -class SVGAnimateTransformElement : virtual public SVGAnimationElement -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGAnimateTransformElement() {} - -}; - - - - -/*######################################################################### -## SVGFontElement -#########################################################################*/ - -/** - * - */ -class SVGFontElement : virtual public SVGElement, - public SVGExternalResourcesRequired, - public SVGStylable -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFontElement() {} - -}; - - - - -/*######################################################################### -## SVGGlyphElement -#########################################################################*/ - -/** - * - */ -class SVGGlyphElement : virtual public SVGElement, - public SVGStylable -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGGlyphElement() {} - -}; - - - - -/*######################################################################### -## SVGMissingGlyphElement -#########################################################################*/ - -/** - * - */ -class SVGMissingGlyphElement : - virtual public SVGElement, - public SVGStylable -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGMissingGlyphElement() {} - -}; - - - - -/*######################################################################### -## SVGHKernElement -#########################################################################*/ - -/** - * - */ -class SVGHKernElement : virtual public SVGElement -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGHKernElement() {} - -}; - - - - -/*######################################################################### -## SVGVKernElement -#########################################################################*/ - -/** - * - */ -class SVGVKernElement : public virtual SVGElement -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGVKernElement() {} - -}; - - - - -/*######################################################################### -## SVGFontFaceElement -#########################################################################*/ - -/** - * - */ -class SVGFontFaceElement : virtual public SVGElement -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFontFaceElement() {} - -}; - - - - -/*######################################################################### -## SVGFontFaceSrcElement -#########################################################################*/ - -/** - * - */ -class SVGFontFaceSrcElement : virtual public SVGElement -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFontFaceSrcElement() {} - -}; - - - - -/*######################################################################### -## SVGFontFaceUriElement -#########################################################################*/ - -/** - * - */ -class SVGFontFaceUriElement : virtual public SVGElement -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFontFaceUriElement() {} - -}; - - - - -/*######################################################################### -## SVGFontFaceFormatElement -#########################################################################*/ - -/** - * - */ -class SVGFontFaceFormatElement : virtual public SVGElement -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFontFaceFormatElement() {} - -}; - - - - -/*######################################################################### -## SVGFontFaceNameElement -#########################################################################*/ - -/** - * - */ -class SVGFontFaceNameElement : virtual public SVGElement -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFontFaceNameElement() {} - -}; - - - - -/*######################################################################### -## SVGDefinitionSrcElement -#########################################################################*/ - -/** - * - */ -class SVGDefinitionSrcElement : virtual public SVGElement -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGDefinitionSrcElement() {} - -}; - - - - -/*######################################################################### -## SVGMetadataElement -#########################################################################*/ - -/** - * - */ -class SVGMetadataElement : virtual public SVGElement -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGMetadataElement() {} - -}; - - - -/*######################################################################### -## SVGForeignObjectElement -#########################################################################*/ - -/** - * - */ -class SVGForeignObjectElement : - virtual public SVGElement, - public SVGTests, - public SVGLangSpace, - public SVGExternalResourcesRequired, - public SVGStylable, - public SVGTransformable, - public events::EventTarget -{ -public: - - - /** - * - */ - virtual SVGAnimatedLength getX() =0; - - /** - * - */ - virtual SVGAnimatedLength getY() =0; - - /** - * - */ - virtual SVGAnimatedLength getWidth() =0; - - /** - * - */ - virtual SVGAnimatedLength getHeight() =0; - - - - //################## - //# Non-API methods - //################## - - - /** - * - */ - virtual ~SVGForeignObjectElement() {} - -}; - - - - - -} //namespace svg -} //namespace dom -} //namespace w3c -} //namespace org - -#endif // __SVG_H__ -/*######################################################################### -## E N D O F F I L E -#########################################################################*/ - +#ifndef __SVG_H__ +#define __SVG_H__ + +/** + * Phoebe DOM Implementation. + * + * This is a C++ approximation of the W3C DOM model, which follows + * fairly closely the specifications in the various .idl files, copies of + * which are provided for reference. Most important is this one: + * + * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2005 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +// For access to DOM2 core +#include "dom/dom.h" + +// For access to DOM2 events +#include "dom/events.h" + +// For access to those parts from DOM2 CSS OM used by SVG DOM. +#include "dom/css.h" + +// For access to those parts from DOM2 Views OM used by SVG DOM. +#include "dom/views.h" + +// For access to the SMIL OM used by SVG DOM. +#include "dom/smil.h" + + + +#include "svgtypes.h" + +#include + + + +namespace org +{ +namespace w3c +{ +namespace dom +{ +namespace svg +{ + + +//local definitions +typedef dom::DOMString DOMString; +typedef dom::DOMException DOMException; +typedef dom::Element Element; +typedef dom::Document Document; +typedef dom::NodeList NodeList; + + + +class SVGSVGElement; + + + +/*######################################################################### +## SVGElement +#########################################################################*/ + +/** + * + */ +class SVGElement : virtual public Element +{ +public: + + /** + * + */ + virtual DOMString getId() =0; + + /** + * + */ + virtual void setId(const DOMString &val) + throw (DOMException) =0; + + /** + * + */ + virtual DOMString getXmlBase() = 0; + + /** + * + */ + virtual void setXmlBase(const DOMString &val) + throw (DOMException) = 0; + + /** + * + */ + virtual SVGSVGElement *getOwnerSVGElement() = 0; + + /** + * + */ + virtual SVGElement *getViewportElement() = 0; + + + //################## + //# Non-API methods + //################## + + + /** + * + */ + virtual ~SVGElement() {} + + +}; + + + +/*######################################################################### +## SVGDocument +#########################################################################*/ + +/** + * + */ +class SVGDocument : virtual public Document, + virtual public events::DocumentEvent +{ +public: + + + /** + * + */ + virtual DOMString getTitle() =0; + + /** + * + */ + virtual DOMString getReferrer() =0; + + /** + * + */ + virtual DOMString getDomain() =0; + + /** + * + */ + virtual DOMString getURL() =0; + + /** + * + */ + virtual SVGSVGElement *getRootElement() =0; + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGDocument() {} + +}; + + + +/*######################################################################### +## SVGSVGElement +#########################################################################*/ + +/** + * + */ +class SVGSVGElement : virtual public SVGElement, + public SVGTests, + public SVGLangSpace, + public SVGExternalResourcesRequired, + public SVGStylable, + public SVGLocatable, + public SVGFitToViewBox, + public SVGZoomAndPan, + public events::EventTarget, + public events::DocumentEvent, + public css::ViewCSS, + public css::DocumentCSS +{ +public: + + /** + * + */ + virtual SVGAnimatedLength getX() =0; + + /** + * + */ + virtual SVGAnimatedLength getY() =0; + + /** + * + */ + virtual SVGAnimatedLength getWidth() =0; + + /** + * + */ + virtual SVGAnimatedLength getHeight() =0; + + /** + * + */ + virtual DOMString getContentScriptType() =0; + + /** + * + */ + virtual void setContentScriptType(const DOMString &val) + throw (DOMException) =0; + + + /** + * + */ + virtual DOMString getContentStyleType() =0; + + /** + * + */ + virtual void setContentStyleType(const DOMString &val) + throw (DOMException) =0; + + /** + * + */ + virtual SVGRect getViewport() =0; + + /** + * + */ + virtual double getPixelUnitToMillimeterX() =0; + + /** + * + */ + virtual double getPixelUnitToMillimeterY() =0; + + /** + * + */ + virtual double getScreenPixelToMillimeterX() =0; + + /** + * + */ + virtual double getScreenPixelToMillimeterY() =0; + + + /** + * + */ + virtual bool getUseCurrentView() =0; + + /** + * + */ + virtual void setUseCurrentView(bool val) throw (DOMException) =0; + + /** + * + */ + virtual SVGViewSpec getCurrentView() =0; + + + /** + * + */ + virtual double getCurrentScale() =0; + + /** + * + */ + virtual void setCurrentScale(double val) + throw (DOMException) =0; + + + /** + * + */ + virtual SVGPoint getCurrentTranslate() =0; + + + /** + * + */ + virtual unsigned long suspendRedraw (unsigned long max_wait_milliseconds ) =0; + + /** + * + */ + virtual void unsuspendRedraw (unsigned long suspend_handle_id ) + throw( DOMException ) =0; + + /** + * + */ + virtual void unsuspendRedrawAll ( ) =0; + + /** + * + */ + virtual void forceRedraw ( ) =0; + + /** + * + */ + virtual void pauseAnimations ( ) =0; + + /** + * + */ + virtual void unpauseAnimations ( ) =0; + + /** + * + */ + virtual bool animationsPaused ( ) =0; + + /** + * + */ + virtual double getCurrentTime ( ) =0; + + /** + * + */ + virtual void setCurrentTime (double seconds ) =0; + + /** + * + */ + virtual NodeList getIntersectionList (const SVGRect &rect, + const SVGElement *referenceElement ) =0; + + /** + * + */ + virtual NodeList getEnclosureList (const SVGRect &rect, + const SVGElement *referenceElement ) =0; + + /** + * + */ + virtual bool checkIntersection (const SVGElement *element, const SVGRect &rect ) =0; + + /** + * + */ + virtual bool checkEnclosure (const SVGElement *element, const SVGRect &rect ) =0; + + /** + * + */ + virtual void deselectAll ( ) =0; + + /** + * + */ + virtual SVGNumber createSVGNumber ( ) =0; + + /** + * + */ + virtual SVGLength createSVGLength ( ) =0; + + /** + * + */ + virtual SVGAngle createSVGAngle ( ) =0; + + /** + * + */ + virtual SVGPoint createSVGPoint ( ) =0; + + /** + * + */ + virtual SVGMatrix createSVGMatrix ( ) =0; + + /** + * + */ + virtual SVGRect createSVGRect ( ) =0; + + /** + * + */ + virtual SVGTransform createSVGTransform ( ) =0; + + /** + * + */ + virtual SVGTransform createSVGTransformFromMatrix(const SVGMatrix &matrix ) =0; + + /** + * + */ + virtual Element *getElementById (const DOMString& elementId ) =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGSVGElement() {} + +}; + + + +/*######################################################################### +## SVGGElement +#########################################################################*/ + +/** + * + */ +class SVGGElement : virtual public SVGElement, + public SVGTests, + public SVGLangSpace, + public SVGExternalResourcesRequired, + public SVGStylable, + public SVGTransformable, + public events::EventTarget +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGGElement() {} + +}; + + + + +/*######################################################################### +## SVGDefsElement +#########################################################################*/ + +/** + * + */ +class SVGDefsElement : + virtual public SVGElement, + public SVGTests, + public SVGLangSpace, + public SVGExternalResourcesRequired, + public SVGStylable, + public SVGTransformable, + public events::EventTarget +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGDefsElement() {} + +}; + + + + +/*######################################################################### +## SVGDescElement +#########################################################################*/ + +/** + * + */ +class SVGDescElement : + virtual public SVGElement, + public SVGLangSpace, + public SVGStylable +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGDescElement() {} + +}; + + + + +/*######################################################################### +## SVGTitleElement +#########################################################################*/ + +/** + * + */ +class SVGTitleElement : + virtual public SVGElement, + public SVGLangSpace, + public SVGStylable +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGTitleElement() {} + +}; + + + + +/*######################################################################### +## SVGSymbolElement +#########################################################################*/ + +/** + * + */ +class SVGSymbolElement : + virtual public SVGElement, + public SVGLangSpace, + public SVGExternalResourcesRequired, + public SVGStylable, + public SVGFitToViewBox, + public events::EventTarget +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGSymbolElement() {} + +}; + + + + +/*######################################################################### +## SVGUseElement +#########################################################################*/ + +/** + * + */ +class SVGUseElement : + virtual public SVGElement, + public SVGURIReference, + public SVGTests, + public SVGLangSpace, + public SVGExternalResourcesRequired, + public SVGStylable, + public SVGTransformable, + public events::EventTarget +{ +public: + + + + + /** + * + */ + virtual SVGAnimatedLength getX() =0; + + /** + * + */ + virtual SVGAnimatedLength getY() =0; + + /** + * + */ + virtual SVGAnimatedLength getWidth() =0; + + /** + * + */ + virtual SVGAnimatedLength getHeight() =0; + + /** + * + */ + virtual SVGElementInstance getInstanceRoot() =0; + + /** + * + */ + virtual SVGElementInstance getAnimatedInstanceRoot() =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGUseElement() {} + +}; + + + + + + + +/*######################################################################### +## SVGImageElement +#########################################################################*/ + +/** + * + */ +class SVGImageElement : + virtual public SVGElement, + public SVGURIReference, + public SVGTests, + public SVGLangSpace, + public SVGExternalResourcesRequired, + public SVGStylable, + public SVGTransformable, + public events::EventTarget +{ +public: + + + /** + * + */ + virtual SVGAnimatedLength getX() =0; + + /** + * + */ + virtual SVGAnimatedLength getY() =0; + + /** + * + */ + virtual SVGAnimatedLength getWidth() =0; + + /** + * + */ + virtual SVGAnimatedLength getHeight() =0; + + + /** + * + */ + virtual SVGAnimatedPreserveAspectRatio getPreserveAspectRatio() =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGImageElement() {} + +}; + + + + + + +/*######################################################################### +## SVGSwitchElement +#########################################################################*/ + +/** + * + */ +class SVGSwitchElement : + virtual public SVGElement, + public SVGTests, + public SVGLangSpace, + public SVGExternalResourcesRequired, + public SVGStylable, + public SVGTransformable, + public events::EventTarget +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGSwitchElement() {} + +}; + + + + +/*######################################################################### +## GetSVGDocument +#########################################################################*/ + +/** + * + */ +class GetSVGDocument +{ +public: + + /** + * + */ + virtual SVGDocument *getSVGDocument ( ) + throw( DOMException ) =0; + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~GetSVGDocument() {} + +}; + + + + + + +/*######################################################################### +## SVGStyleElement +#########################################################################*/ + +/** + * + */ +class SVGStyleElement : virtual public SVGElement +{ +public: + + /** + * + */ + virtual DOMString getXmlspace() = 0; + + /** + * + */ + virtual void setXmlspace(const DOMString &val) + throw (DOMException) =0; + + /** + * + */ + virtual DOMString getType() = 0; + + /** + * + */ + virtual void setType(const DOMString &val) + throw (DOMException) =0; + + /** + * + */ + virtual DOMString getMedia() = 0; + + /** + * + */ + virtual void setMedia(const DOMString &val) + throw (DOMException) =0; + + /** + * + */ + virtual DOMString getTitle() = 0; + + /** + * + */ + virtual void setTitle(const DOMString &val) + throw (DOMException) =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGStyleElement() {} + +}; + + + + + + +/*######################################################################### +## SVGPathElement +#########################################################################*/ + +/** + * + */ +class SVGPathElement : + virtual public SVGElement, + public SVGTests, + public SVGLangSpace, + public SVGExternalResourcesRequired, + public SVGStylable, + public SVGTransformable, + public events::EventTarget, + public SVGAnimatedPathData +{ +public: + + + + + /** + * + */ + virtual SVGAnimatedNumber getPathLength() =0; + + /** + * + */ + virtual double getTotalLength ( ) =0; + + /** + * + */ + virtual SVGPoint getPointAtLength (double distance ) =0; + + /** + * + */ + virtual unsigned long getPathSegAtLength (double distance ) =0; + + /** + * + */ + virtual SVGPathSegClosePath + createSVGPathSegClosePath ( ) =0; + + /** + * + */ + virtual SVGPathSegMovetoAbs + createSVGPathSegMovetoAbs (double x, double y ) =0; + + /** + * + */ + virtual SVGPathSegMovetoRel + createSVGPathSegMovetoRel (double x, double y ) =0; + + /** + * + */ + virtual SVGPathSegLinetoAbs + createSVGPathSegLinetoAbs (double x, double y ) =0; + + /** + * + */ + virtual SVGPathSegLinetoRel + createSVGPathSegLinetoRel (double x, double y ) =0; + + /** + * + */ + virtual SVGPathSegCurvetoCubicAbs + createSVGPathSegCurvetoCubicAbs (double x, double y, + double x1, double y1, double x2, double y2 ) =0; + + /** + * + */ + virtual SVGPathSegCurvetoCubicRel + createSVGPathSegCurvetoCubicRel (double x, double y, + double x1, double y1, double x2, double y2 ) =0; + + /** + * + */ + virtual SVGPathSegCurvetoQuadraticAbs + createSVGPathSegCurvetoQuadraticAbs (double x, double y, + double x1, double y1 ) =0; + + /** + * + */ + virtual SVGPathSegCurvetoQuadraticRel + createSVGPathSegCurvetoQuadraticRel (double x, double y, + double x1, double y1 ) =0; + + /** + * + */ + virtual SVGPathSegArcAbs + createSVGPathSegArcAbs (double x, double y, + double r1, double r2, double angle, + bool largeArcFlag, bool sweepFlag ) =0; + + /** + * + */ + virtual SVGPathSegArcRel + createSVGPathSegArcRel (double x, double y, double r1, + double r2, double angle, bool largeArcFlag, + bool sweepFlag ) =0; + + /** + * + */ + virtual SVGPathSegLinetoHorizontalAbs + createSVGPathSegLinetoHorizontalAbs (double x ) =0; + + /** + * + */ + virtual SVGPathSegLinetoHorizontalRel + createSVGPathSegLinetoHorizontalRel (double x ) =0; + + /** + * + */ + virtual SVGPathSegLinetoVerticalAbs + createSVGPathSegLinetoVerticalAbs (double y ) =0; + + /** + * + */ + virtual SVGPathSegLinetoVerticalRel + createSVGPathSegLinetoVerticalRel (double y ) =0; + + /** + * + */ + virtual SVGPathSegCurvetoCubicSmoothAbs + createSVGPathSegCurvetoCubicSmoothAbs (double x, double y, + double x2, double y2 ) =0; + + /** + * + */ + virtual SVGPathSegCurvetoCubicSmoothRel + createSVGPathSegCurvetoCubicSmoothRel (double x, double y, + double x2, double y2 ) =0; + + /** + * + */ + virtual SVGPathSegCurvetoQuadraticSmoothAbs + createSVGPathSegCurvetoQuadraticSmoothAbs (double x, double y ) =0; + + /** + * + */ + virtual SVGPathSegCurvetoQuadraticSmoothRel + createSVGPathSegCurvetoQuadraticSmoothRel (double x, double y ) =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGPathElement() {} + +}; + + + + + + +/*######################################################################### +## SVGRectElement +#########################################################################*/ + +/** + * + */ +class SVGRectElement : + virtual public SVGElement, + public SVGTests, + public SVGLangSpace, + public SVGExternalResourcesRequired, + public SVGStylable, + public SVGTransformable, + public events::EventTarget +{ +public: + + /** + * + */ + virtual SVGAnimatedLength getX() =0; + + /** + * + */ + virtual SVGAnimatedLength getY() =0; + + /** + * + */ + virtual SVGAnimatedLength getWidth() =0; + + /** + * + */ + virtual SVGAnimatedLength getHeight() =0; + + + /** + * + */ + virtual SVGAnimatedLength getRx() =0; + + /** + * + */ + virtual SVGAnimatedLength getRy() =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGRectElement() {} + +}; + + + + + + +/*######################################################################### +## SVGCircleElement +#########################################################################*/ + +/** + * + */ +class SVGCircleElement : + virtual public SVGElement, + public SVGTests, + public SVGLangSpace, + public SVGExternalResourcesRequired, + public SVGStylable, + public SVGTransformable, + public events::EventTarget +{ +public: + + /** + * + */ + virtual SVGAnimatedLength getCx() =0; + + /** + * + */ + virtual SVGAnimatedLength getCy() =0; + + /** + * + */ + virtual SVGAnimatedLength getR() =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGCircleElement() {} + +}; + + + + + + +/*######################################################################### +## SVGEllipseElement +#########################################################################*/ + +/** + * + */ +class SVGEllipseElement : + virtual public SVGElement, + public SVGTests, + public SVGLangSpace, + public SVGExternalResourcesRequired, + public SVGStylable, + public SVGTransformable, + public events::EventTarget +{ +public: + /** + * + */ + virtual SVGAnimatedLength getCx() =0; + + /** + * + */ + virtual SVGAnimatedLength getCy() =0; + + /** + * + */ + virtual SVGAnimatedLength getRx() =0; + + /** + * + */ + virtual SVGAnimatedLength getRy() =0; + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGEllipseElement() {} + +}; + + + + + + +/*######################################################################### +## SVGLineElement +#########################################################################*/ + +/** + * + */ +class SVGLineElement : + virtual public SVGElement, + public SVGTests, + public SVGLangSpace, + public SVGExternalResourcesRequired, + public SVGStylable, + public SVGTransformable, + public events::EventTarget +{ +public: + /** + * + */ + virtual SVGAnimatedLength getX1() =0; + + /** + * + */ + virtual SVGAnimatedLength getY1() =0; + + /** + * + */ + virtual SVGAnimatedLength getX2() =0; + + /** + * + */ + virtual SVGAnimatedLength getY2() =0; + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGLineElement() {} + +}; + + + + +/*######################################################################### +## SVGPolylineElement +#########################################################################*/ + +/** + * + */ +class SVGPolylineElement : + virtual public SVGElement, + public SVGTests, + public SVGLangSpace, + public SVGExternalResourcesRequired, + public SVGStylable, + public SVGTransformable, + public events::EventTarget, + public SVGAnimatedPoints +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGPolylineElement() {} + +}; + + + + +/*######################################################################### +## SVGPolygonElement +#########################################################################*/ + +/** + * + */ +class SVGPolygonElement : + virtual public SVGElement, + public SVGTests, + public SVGLangSpace, + public SVGExternalResourcesRequired, + public SVGStylable, + public SVGTransformable, + public events::EventTarget, + public SVGAnimatedPoints +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGPolygonElement() {} + +}; + + + + +/*######################################################################### +## SVGTextContentElement +#########################################################################*/ + +/** + * + */ +class SVGTextContentElement : + virtual public SVGElement, + public SVGTests, + public SVGLangSpace, + public SVGExternalResourcesRequired, + public SVGStylable, + public events::EventTarget +{ +public: + + + + /** + * lengthAdjust Types + */ + typedef enum + { + LENGTHADJUST_UNKNOWN = 0, + LENGTHADJUST_SPACING = 1, + LENGTHADJUST_SPACINGANDGLYPHS = 2 + } LengthAdjustType; + + + /** + * + */ + virtual SVGAnimatedLength getTextLength() =0; + + + /** + * + */ + virtual SVGAnimatedEnumeration getLengthAdjust() =0; + + + /** + * + */ + virtual long getNumberOfChars ( ) =0; + + /** + * + */ + virtual double getComputedTextLength ( ) =0; + + /** + * + */ + virtual double getSubStringLength (unsigned long charnum, unsigned long nchars ) + throw( DOMException ) =0; + + /** + * + */ + virtual SVGPoint getStartPositionOfChar (unsigned long charnum ) + throw( DOMException ) =0; + + /** + * + */ + virtual SVGPoint getEndPositionOfChar (unsigned long charnum ) + throw( DOMException ) =0; + + /** + * + */ + virtual SVGRect getExtentOfChar (unsigned long charnum ) + throw( DOMException ) =0; + + /** + * + */ + virtual double getRotationOfChar (unsigned long charnum ) + throw( DOMException ) =0; + + /** + * + */ + virtual long getCharNumAtPosition (const SVGPoint &point ) =0; + + /** + * + */ + virtual void selectSubString (unsigned long charnum, unsigned long nchars ) + throw( DOMException ) =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGTextContentElement() {} + +}; + + + + + + +/*######################################################################### +## SVGTextPositioningElement +#########################################################################*/ + +/** + * + */ +class SVGTextPositioningElement : virtual public SVGTextContentElement +{ +public: + + /** + * + */ + virtual SVGAnimatedLength getX() =0; + + /** + * + */ + virtual SVGAnimatedLength getY() =0; + + /** + * + */ + virtual SVGAnimatedLength getDx() =0; + + /** + * + */ + virtual SVGAnimatedLength getDy() =0; + + + /** + * + */ + virtual SVGAnimatedNumberList getRotate() =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGTextPositioningElement() {} + +}; + + + + + + +/*######################################################################### +## SVGTextElement +#########################################################################*/ + +/** + * + */ +class SVGTextElement : virtual public SVGTextPositioningElement, + public SVGTransformable +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGTextElement() {} + +}; + + + + +/*######################################################################### +## SVGTSpanElement +#########################################################################*/ + +/** + * + */ +class SVGTSpanElement : virtual public SVGTextPositioningElement +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGTSpanElement() {} + +}; + + + + +/*######################################################################### +## SVGTRefElement +#########################################################################*/ + +/** + * + */ +class SVGTRefElement : + virtual public SVGTextPositioningElement, + public SVGURIReference +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGTRefElement() {} + +}; + + + + +/*######################################################################### +## SVGTextPathElement +#########################################################################*/ + +/** + * + */ +class SVGTextPathElement : + virtual public SVGTextContentElement, + public SVGURIReference +{ +public: + + + + /** + * textPath Method Types + */ + typedef enum + { + TEXTPATH_METHODTYPE_UNKNOWN = 0, + TEXTPATH_METHODTYPE_ALIGN = 1, + TEXTPATH_METHODTYPE_STRETCH = 2 + } TextPathMethodType; + + /** + * textPath Spacing Types + */ + typedef enum + { + TEXTPATH_SPACINGTYPE_UNKNOWN = 0, + TEXTPATH_SPACINGTYPE_AUTO = 1, + TEXTPATH_SPACINGTYPE_EXACT = 2 + } TextPathSpacingType; + + + /** + * + */ + virtual SVGAnimatedLength getStartOffset() =0; + + /** + * + */ + virtual SVGAnimatedEnumeration getMethod() =0; + + /** + * + */ + virtual SVGAnimatedEnumeration getSpacing() =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGTextPathElement() {} + +}; + + + + + + +/*######################################################################### +## SVGAltGlyphElement +#########################################################################*/ + +/** + * + */ +class SVGAltGlyphElement : + virtual public SVGTextPositioningElement, + public SVGURIReference +{ +public: + + /** + * + */ + virtual DOMString getGlyphRef() =0; + + /** + * + */ + virtual void setGlyphRef(const DOMString &val) + throw (DOMException) =0; + + /** + * + */ + virtual DOMString getFormat() =0; + + /** + * + */ + virtual void setFormat(const DOMString &val) + throw (DOMException) =0; + + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGAltGlyphElement() {} + +}; + + + + + + +/*######################################################################### +## SVGAltGlyphDefElement +#########################################################################*/ + +/** + * + */ +class SVGAltGlyphDefElement : virtual public SVGElement +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGAltGlyphDefElement() {} + +}; + + + + +/*######################################################################### +## SVGAltGlyphItemElement +#########################################################################*/ + +/** + * + */ +class SVGAltGlyphItemElement : virtual public SVGElement +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGAltGlyphItemElement() {} + +}; + + + + +/*######################################################################### +## SVGGlyphRefElement +#########################################################################*/ + +/** + * + */ +class SVGGlyphRefElement : virtual public SVGElement, + public SVGURIReference, + public SVGStylable +{ +public: + /** + * + */ + virtual DOMString getGlyphRef() =0; + + /** + * + */ + virtual void setGlyphRef(const DOMString &val) + throw (DOMException) =0; + + /** + * + */ + virtual DOMString getFormat() =0; + + /** + * + */ + virtual void setFormat(const DOMString &val) + throw (DOMException) =0; + + /** + * + */ + virtual double getX() = 0; + + /** + * + */ + virtual void setX(double val) throw (DOMException) =0; + + /** + * + */ + virtual double getY() = 0; + + /** + * + */ + virtual void setY(double val) throw (DOMException) =0; + + /** + * + */ + virtual double getDx() = 0; + + /** + * + */ + virtual void setDx(double val) throw (DOMException) =0; + + /** + * + */ + virtual double getDy() = 0; + + /** + * + */ + virtual void setDy(double val) throw (DOMException) =0; + + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGGlyphRefElement() {} + +}; + + + + + +/*######################################################################### +## SVGMarkerElement +#########################################################################*/ + +/** + * + */ +class SVGMarkerElement : + virtual public SVGElement, + public SVGLangSpace, + public SVGExternalResourcesRequired, + public SVGStylable, + public SVGFitToViewBox +{ +public: + + + + /** + * Marker Unit Types + */ + typedef enum + { + SVG_MARKERUNITS_UNKNOWN = 0, + SVG_MARKERUNITS_USERSPACEONUSE = 1, + SVG_MARKERUNITS_STROKEWIDTH = 2 + } MarkerUnitType; + + /** + * Marker Orientation Types + */ + typedef enum + { + SVG_MARKER_ORIENT_UNKNOWN = 0, + SVG_MARKER_ORIENT_AUTO = 1, + SVG_MARKER_ORIENT_ANGLE = 2 + } MarkerOrientationType; + + + /** + * + */ + virtual SVGAnimatedLength getRefX() =0; + + /** + * + */ + virtual SVGAnimatedLength getRefY() =0; + + /** + * + */ + virtual SVGAnimatedEnumeration getMarkerUnits() =0; + + /** + * + */ + virtual SVGAnimatedLength getMarkerWidth() =0; + + /** + * + */ + virtual SVGAnimatedLength getMarkerHeight() =0; + + /** + * + */ + virtual SVGAnimatedEnumeration getOrientType() =0; + + /** + * + */ + virtual SVGAnimatedAngle getOrientAngle() =0; + + + /** + * + */ + virtual void setOrientToAuto ( ) =0; + + /** + * + */ + virtual void setOrientToAngle (const SVGAngle &angle) =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGMarkerElement() {} + +}; + + + + + + +/*######################################################################### +## SVGColorProfileElement +#########################################################################*/ + +/** + * + */ +class SVGColorProfileElement : + virtual public SVGElement, + public SVGURIReference, + public SVGRenderingIntent +{ +public: + /** + * + */ + virtual DOMString getLocal() =0; + + /** + * + */ + virtual void setLocal(const DOMString &val) + throw (DOMException) =0; + + /** + * + */ + virtual DOMString getName() =0; + + /** + * + */ + virtual void setName(const DOMString &val) + throw (DOMException) =0; + + /** + * + */ + virtual unsigned short getRenderingIntent() =0; + + /** + * + */ + virtual void setRenderingIntent(unsigned short val) + throw (DOMException) =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGColorProfileElement() {} + +}; + + + + +/*######################################################################### +## SVGGradientElement +#########################################################################*/ + +/** + * + */ +class SVGGradientElement : + virtual public SVGElement, + public SVGURIReference, + public SVGExternalResourcesRequired, + public SVGStylable, + public SVGUnitTypes +{ +public: + + + + /** + * Spread Method Types + */ + typedef enum + { + SVG_SPREADMETHOD_UNKNOWN = 0, + SVG_SPREADMETHOD_PAD = 1, + SVG_SPREADMETHOD_REFLECT = 2, + SVG_SPREADMETHOD_REPEAT = 3 + } SpreadMethodType; + + + /** + * + */ + virtual SVGAnimatedEnumeration getGradientUnits() =0; + + /** + * + */ + virtual SVGAnimatedTransformList getGradientTransform() =0; + + /** + * + */ + virtual SVGAnimatedEnumeration getSpreadMethod() =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGGradientElement() {} + +}; + + + + + + +/*######################################################################### +## SVGLinearGradientElement +#########################################################################*/ + +/** + * + */ +class SVGLinearGradientElement : virtual public SVGGradientElement +{ +public: + + + /** + * + */ + virtual SVGAnimatedLength getX1() =0; + + /** + * + */ + virtual SVGAnimatedLength getY1() =0; + + /** + * + */ + virtual SVGAnimatedLength getX2() =0; + + /** + * + */ + virtual SVGAnimatedLength getY2() =0; + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGLinearGradientElement() {} + +}; + + + + + + +/*######################################################################### +## SVGRadialGradientElement +#########################################################################*/ + +/** + * + */ +class SVGRadialGradientElement : virtual public SVGGradientElement +{ +public: + + + /** + * + */ + virtual SVGAnimatedLength getCx() =0; + + + /** + * + */ + virtual SVGAnimatedLength getCy() =0; + + + /** + * + */ + virtual SVGAnimatedLength getR() =0; + + + /** + * + */ + virtual SVGAnimatedLength getFx() =0; + + + /** + * + */ + virtual SVGAnimatedLength getFy() =0; + + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGRadialGradientElement() {} + +}; + + + + + + +/*######################################################################### +## SVGStopElement +#########################################################################*/ + +/** + * + */ +class SVGStopElement : + virtual public SVGElement, + public SVGStylable +{ +public: + + /** + * + */ + virtual SVGAnimatedNumber getOffset() =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGStopElement() {} + +}; + + + + + + +/*######################################################################### +## SVGPatternElement +#########################################################################*/ + +/** + * + */ +class SVGPatternElement : + virtual public SVGElement, + public SVGURIReference, + public SVGTests, + public SVGLangSpace, + public SVGExternalResourcesRequired, + public SVGStylable, + public SVGFitToViewBox, + public SVGUnitTypes +{ +public: + + + + + /** + * + */ + virtual SVGAnimatedEnumeration getPatternUnits() =0; + + /** + * + */ + virtual SVGAnimatedEnumeration getPatternContentUnits() =0; + + /** + * + */ + virtual SVGAnimatedTransformList getPatternTransform() =0; + + /** + * + */ + virtual SVGAnimatedLength getX() =0; + + /** + * + */ + virtual SVGAnimatedLength getY() =0; + + /** + * + */ + virtual SVGAnimatedLength getWidth() =0; + + /** + * + */ + virtual SVGAnimatedLength getHeight() =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGPatternElement() {} + +}; + + + + + + +/*######################################################################### +## SVGClipPathElement +#########################################################################*/ + +/** + * + */ +class SVGClipPathElement : + virtual public SVGElement, + public SVGTests, + public SVGLangSpace, + public SVGExternalResourcesRequired, + public SVGStylable, + public SVGTransformable, + public SVGUnitTypes +{ +public: + /** + * + */ + virtual SVGAnimatedEnumeration getClipPathUnits() =0; + + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGClipPathElement() {} + +}; + + + + + + +/*######################################################################### +## SVGMaskElement +#########################################################################*/ + +/** + * + */ +class SVGMaskElement : + virtual public SVGElement, + public SVGTests, + public SVGLangSpace, + public SVGExternalResourcesRequired, + public SVGStylable, + public SVGUnitTypes +{ +public: + + + + /** + * + */ + virtual SVGAnimatedEnumeration getMaskUnits() =0; + + /** + * + */ + virtual SVGAnimatedEnumeration getMaskContentUnits() =0; + + /** + * + */ + virtual SVGAnimatedLength getX() =0; + + /** + * + */ + virtual SVGAnimatedLength getY() =0; + + /** + * + */ + virtual SVGAnimatedLength getWidth() =0; + + /** + * + */ + virtual SVGAnimatedLength getHeight() =0; + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGMaskElement() {} + +}; + + + + + + +/*######################################################################### +## SVGFilterElement +#########################################################################*/ + +/** + * + */ +class SVGFilterElement : + virtual public SVGElement, + public SVGURIReference, + public SVGLangSpace, + public SVGExternalResourcesRequired, + public SVGStylable, + public SVGUnitTypes +{ +public: + + + + /** + * + */ + virtual SVGAnimatedEnumeration getFilterUnits() =0; + + /** + * + */ + virtual SVGAnimatedEnumeration getPrimitiveUnits() =0; + + /** + * + */ + virtual SVGAnimatedLength getX() =0; + + /** + * + */ + virtual SVGAnimatedLength getY() =0; + + /** + * + */ + virtual SVGAnimatedLength getWidth() =0; + + /** + * + */ + virtual SVGAnimatedLength getHeight() =0; + + + /** + * + */ + virtual SVGAnimatedInteger getFilterResX() =0; + + /** + * + */ + virtual SVGAnimatedInteger getFilterResY() =0; + + /** + * + */ + virtual void setFilterRes (unsigned long filterResX, + unsigned long filterResY ) =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFilterElement() {} + +}; + + + + + +/*######################################################################### +## SVGFEBlendElement +#########################################################################*/ + +/** + * + */ +class SVGFEBlendElement : + virtual public SVGElement, + public SVGFilterPrimitiveStandardAttributes +{ +public: + + + /** + * Blend Mode Types + */ + typedef enum + { + SVG_FEBLEND_MODE_UNKNOWN = 0, + SVG_FEBLEND_MODE_NORMAL = 1, + SVG_FEBLEND_MODE_MULTIPLY = 2, + SVG_FEBLEND_MODE_SCREEN = 3, + SVG_FEBLEND_MODE_DARKEN = 4, + SVG_FEBLEND_MODE_LIGHTEN = 5 + } BlendModeType; + + /** + * + */ + virtual SVGAnimatedString getIn1() =0; + + /** + * + */ + virtual SVGAnimatedString getIn2() =0; + + /** + * + */ + virtual SVGAnimatedEnumeration getMode() =0; + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEBlendElement() {} + +}; + + + + + + +/*######################################################################### +## SVGFEColorMatrixElement +#########################################################################*/ + +/** + * + */ +class SVGFEColorMatrixElement : + virtual public SVGElement, + public SVGFilterPrimitiveStandardAttributes +{ +public: + + + + /** + * Color Matrix Types + */ + typedef enum + { + SVG_FECOLORMATRIX_TYPE_UNKNOWN = 0, + SVG_FECOLORMATRIX_TYPE_MATRIX = 1, + SVG_FECOLORMATRIX_TYPE_SATURATE = 2, + SVG_FECOLORMATRIX_TYPE_HUEROTATE = 3, + SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA = 4 + } ColorMatrixType; + + + /** + * + */ + virtual SVGAnimatedString getIn1() =0; + + /** + * + */ + virtual SVGAnimatedEnumeration getType() =0; + + /** + * + */ + virtual SVGAnimatedNumberList getValues() =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEColorMatrixElement() {} + +}; + + + + + + +/*######################################################################### +## SVGFEComponentTransferElement +#########################################################################*/ + +/** + * + */ +class SVGFEComponentTransferElement : + virtual public SVGElement, + public SVGFilterPrimitiveStandardAttributes +{ +public: + /** + * + */ + virtual SVGAnimatedString getIn1() =0; + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEComponentTransferElement() {} + +}; + + + + + + +/*######################################################################### +## SVGComponentTransferFunctionElement +#########################################################################*/ + +/** + * + */ +class SVGComponentTransferFunctionElement : virtual public SVGElement +{ +public: + + + /** + * Component Transfer Types + */ + typedef enum + { + SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN = 0, + SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY = 1, + SVG_FECOMPONENTTRANSFER_TYPE_TABLE = 2, + SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE = 3, + SVG_FECOMPONENTTRANSFER_TYPE_LINEAR = 4, + SVG_FECOMPONENTTRANSFER_TYPE_GAMMA = 5 + } ComponentTransferType; + + + /** + * + */ + virtual SVGAnimatedEnumeration getType() =0; + + /** + * + */ + virtual SVGAnimatedNumberList getTableValues() =0; + + /** + * + */ + virtual SVGAnimatedNumber getSlope() =0; + + /** + * + */ + virtual SVGAnimatedNumber getIntercept() =0; + + /** + * + */ + virtual SVGAnimatedNumber getAmplitude() =0; + + /** + * + */ + virtual SVGAnimatedNumber getExponent() =0; + + /** + * + */ + virtual SVGAnimatedNumber getOffset() =0; + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGComponentTransferFunctionElement() {} + +}; + + + + + + +/*######################################################################### +## SVGFEFuncRElement +#########################################################################*/ + +/** + * + */ +class SVGFEFuncRElement : virtual public SVGComponentTransferFunctionElement +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEFuncRElement() {} + +}; + + + + +/*######################################################################### +## SVGFEFuncGElement +#########################################################################*/ + +/** + * + */ +class SVGFEFuncGElement : public virtual SVGComponentTransferFunctionElement +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEFuncGElement() {} + +}; + + + + +/*######################################################################### +## SVGFEFuncBElement +#########################################################################*/ + +/** + * + */ +class SVGFEFuncBElement : virtual public SVGComponentTransferFunctionElement +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEFuncBElement() {} + +}; + + + + +/*######################################################################### +## SVGFEFuncAElement +#########################################################################*/ + +/** + * + */ +class SVGFEFuncAElement : virtual public SVGComponentTransferFunctionElement +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEFuncAElement() {} + +}; + + + + +/*######################################################################### +## SVGFECompositeElement +#########################################################################*/ + +/** + * + */ +class SVGFECompositeElement : + virtual public SVGElement, + public SVGFilterPrimitiveStandardAttributes +{ +public: + + + + /** + * Composite Operators + */ + typedef enum + { + SVG_FECOMPOSITE_OPERATOR_UNKNOWN = 0, + SVG_FECOMPOSITE_OPERATOR_OVER = 1, + SVG_FECOMPOSITE_OPERATOR_IN = 2, + SVG_FECOMPOSITE_OPERATOR_OUT = 3, + SVG_FECOMPOSITE_OPERATOR_ATOP = 4, + SVG_FECOMPOSITE_OPERATOR_XOR = 5, + SVG_FECOMPOSITE_OPERATOR_ARITHMETIC = 6 + } CompositeOperatorType; + + /** + * + */ + virtual SVGAnimatedString getIn1() =0; + + /** + * + */ + virtual SVGAnimatedString getIn2() =0; + + /** + * + */ + virtual SVGAnimatedEnumeration getOperator() =0; + + /** + * + */ + virtual SVGAnimatedNumber getK1() =0; + + /** + * + */ + virtual SVGAnimatedNumber getK2() =0; + + /** + * + */ + virtual SVGAnimatedNumber getK3() =0; + + /** + * + */ + virtual SVGAnimatedNumber getK4() =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFECompositeElement() {} + +}; + + + + + + +/*######################################################################### +## SVGFEConvolveMatrixElement +#########################################################################*/ + +/** + * + */ +class SVGFEConvolveMatrixElement : + virtual public SVGElement, + public SVGFilterPrimitiveStandardAttributes +{ +public: + + + + /** + * Edge Mode Values + */ + typedef enum + { + SVG_EDGEMODE_UNKNOWN = 0, + SVG_EDGEMODE_DUPLICATE = 1, + SVG_EDGEMODE_WRAP = 2, + SVG_EDGEMODE_NONE = 3 + } EdgeModeType; + + + /** + * + */ + virtual SVGAnimatedInteger getOrderX() =0; + + /** + * + */ + virtual SVGAnimatedInteger getOrderY() =0; + + /** + * + */ + virtual SVGAnimatedNumberList getKernelMatrix() =0; + + /** + * + */ + virtual SVGAnimatedNumber getDivisor() =0; + + /** + * + */ + virtual SVGAnimatedNumber getBias() =0; + + /** + * + */ + virtual SVGAnimatedInteger getTargetX() =0; + + /** + * + */ + virtual SVGAnimatedInteger getTargetY() =0; + + /** + * + */ + virtual SVGAnimatedEnumeration getEdgeMode() =0; + + /** + * + */ + virtual SVGAnimatedLength getKernelUnitLengthX() =0; + + /** + * + */ + virtual SVGAnimatedLength getKernelUnitLengthY() =0; + + /** + * + */ + virtual SVGAnimatedBoolean getPreserveAlpha() =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEConvolveMatrixElement() {} + +}; + + + + + + +/*######################################################################### +## SVGFEDiffuseLightingElement +#########################################################################*/ + +/** + * + */ +class SVGFEDiffuseLightingElement : + virtual public SVGElement, + public SVGFilterPrimitiveStandardAttributes +{ +public: + + /** + * + */ + virtual SVGAnimatedString getIn1() =0; + + /** + * + */ + virtual SVGAnimatedNumber getSurfaceScale() =0; + + /** + * + */ + virtual SVGAnimatedNumber getDiffuseConstant() =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEDiffuseLightingElement() {} + +}; + + + + + + +/*######################################################################### +## SVGFEDistantLightElement +#########################################################################*/ + +/** + * + */ +class SVGFEDistantLightElement : virtual public SVGElement +{ +public: + + /** + * + */ + virtual SVGAnimatedNumber getAzimuth() =0; + + + /** + * + */ + virtual SVGAnimatedNumber getElevation() =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEDistantLightElement() {} + +}; + + + + + + +/*######################################################################### +## SVGFEPointLightElement +#########################################################################*/ + +/** + * + */ +class SVGFEPointLightElement : virtual public SVGElement +{ +public: + /** + * + */ + virtual SVGAnimatedNumber getX() =0; + + + /** + * + */ + virtual SVGAnimatedNumber getY() =0; + + /** + * + */ + virtual SVGAnimatedNumber getZ() =0; + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEPointLightElement() {} + +}; + + + + + + +/*######################################################################### +## SVGFESpotLightElement +#########################################################################*/ + +/** + * + */ +class SVGFESpotLightElement : virtual public SVGElement +{ +public: + + /** + * + */ + virtual SVGAnimatedNumber getX() =0; + + + /** + * + */ + virtual SVGAnimatedNumber getY() =0; + + /** + * + */ + virtual SVGAnimatedNumber getZ() =0; + + /** + * + */ + virtual SVGAnimatedNumber getPointsAtX() =0; + + /** + * + */ + virtual SVGAnimatedNumber getPointsAtY() =0; + + /** + * + */ + virtual SVGAnimatedNumber getPointsAtZ() =0; + + /** + * + */ + virtual SVGAnimatedNumber getSpecularExponent() =0; + + /** + * + */ + virtual SVGAnimatedNumber getLimitingConeAngle() =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFESpotLightElement() {} + +}; + + + + + + +/*######################################################################### +## SVGFEDisplacementMapElement +#########################################################################*/ + +/** + * + */ +class SVGFEDisplacementMapElement : + virtual public SVGElement, + public SVGFilterPrimitiveStandardAttributes +{ +public: + + + + /** + * Channel Selectors + */ + typedef enum + { + SVG_CHANNEL_UNKNOWN = 0, + SVG_CHANNEL_R = 1, + SVG_CHANNEL_G = 2, + SVG_CHANNEL_B = 3, + SVG_CHANNEL_A = 4 + } ChannelSelector; + + /** + * + */ + virtual SVGAnimatedString getIn1() =0; + + /** + * + */ + virtual SVGAnimatedString getIn2() =0; + + + /** + * + */ + virtual SVGAnimatedNumber getScale() =0; + + /** + * + */ + virtual SVGAnimatedEnumeration getXChannelSelector() =0; + + /** + * + */ + virtual SVGAnimatedEnumeration getYChannelSelector() =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEDisplacementMapElement() {} + +}; + + + + + + +/*######################################################################### +## SVGFEFloodElement +#########################################################################*/ + +/** + * + */ +class SVGFEFloodElement : + virtual public SVGElement, + public SVGFilterPrimitiveStandardAttributes +{ +public: + /** + * + */ + virtual SVGAnimatedString getIn1() =0; + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEFloodElement() {} + +}; + + + + + + +/*######################################################################### +## SVGFEGaussianBlurElement +#########################################################################*/ + +/** + * + */ +class SVGFEGaussianBlurElement : + virtual public SVGElement, + public SVGFilterPrimitiveStandardAttributes +{ +public: + /** + * + */ + virtual SVGAnimatedString getIn1() =0; + + + /** + * + */ + virtual SVGAnimatedNumber getStdDeviationX() =0; + + /** + * + */ + virtual SVGAnimatedNumber getStdDeviationY() =0; + + + /** + * + */ + virtual void setStdDeviation (double stdDeviationX, double stdDeviationY ) =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEGaussianBlurElement() {} + +}; + + + + + + +/*######################################################################### +## SVGFEImageElement +#########################################################################*/ + +/** + * + */ +class SVGFEImageElement : + virtual public SVGElement, + public SVGURIReference, + public SVGLangSpace, + public SVGExternalResourcesRequired, + public SVGFilterPrimitiveStandardAttributes +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEImageElement() {} + +}; + + + + +/*######################################################################### +## SVGFEMergeElement +#########################################################################*/ + +/** + * + */ +class SVGFEMergeElement : + virtual public SVGElement, + public SVGFilterPrimitiveStandardAttributes +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEMergeElement() {} + +}; + + + + +/*######################################################################### +## SVGFEMergeNodeElement +#########################################################################*/ + +/** + * + */ +class SVGFEMergeNodeElement : virtual public SVGElement +{ +public: + /** + * + */ + virtual SVGAnimatedString getIn1() =0; + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEMergeNodeElement() {} + +}; + + + + + + +/*######################################################################### +## SVGFEMorphologyElement +#########################################################################*/ + +/** + * + */ +class SVGFEMorphologyElement : + virtual public SVGElement, + public SVGFilterPrimitiveStandardAttributes +{ +public: + + + + /** + * Morphology Operators + */ + typedef enum + { + SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0, + SVG_MORPHOLOGY_OPERATOR_ERODE = 1, + SVG_MORPHOLOGY_OPERATOR_DILATE = 2 + } MorphologyOperatorType; + + + /** + * + */ + virtual SVGAnimatedString getIn1() =0; + + + /** + * + */ + virtual SVGAnimatedEnumeration getOperator() =0; + + /** + * + */ + virtual SVGAnimatedLength getRadiusX() =0; + + /** + * + */ + virtual SVGAnimatedLength getRadiusY() =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEMorphologyElement() {} + +}; + + + + + + +/*######################################################################### +## SVGFEOffsetElement +#########################################################################*/ + +/** + * + */ +class SVGFEOffsetElement : + virtual public SVGElement, + public SVGFilterPrimitiveStandardAttributes +{ +public: + + + + /** + * + */ + virtual SVGAnimatedString getIn1() =0; + + /** + * + */ + virtual SVGAnimatedLength getDx() =0; + + /** + * + */ + virtual SVGAnimatedLength getDy() =0; + + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEOffsetElement() {} + +}; + + + + + + +/*######################################################################### +## SVGFESpecularLightingElement +#########################################################################*/ + +/** + * + */ +class SVGFESpecularLightingElement : + virtual public SVGElement, + public SVGFilterPrimitiveStandardAttributes +{ +public: + + /** + * + */ + virtual SVGAnimatedString getIn1() =0; + + /** + * + */ + virtual SVGAnimatedNumber getSurfaceScale() =0; + + /** + * + */ + virtual SVGAnimatedNumber getSpecularConstant() =0; + + /** + * + */ + virtual SVGAnimatedNumber getSpecularExponent() =0; + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFESpecularLightingElement() {} + +}; + + + + + + +/*######################################################################### +## SVGFETileElement +#########################################################################*/ + +/** + * + */ +class SVGFETileElement : + virtual public SVGElement, + public SVGFilterPrimitiveStandardAttributes +{ +public: + + + /** + * + */ + virtual SVGAnimatedString getIn1() =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFETileElement() {} + +}; + + + + + + +/*######################################################################### +## SVGFETurbulenceElement +#########################################################################*/ + +/** + * + */ +class SVGFETurbulenceElement : + virtual public SVGElement, + public SVGFilterPrimitiveStandardAttributes +{ +public: + + + + /** + * Turbulence Types + */ + typedef enum + { + SVG_TURBULENCE_TYPE_UNKNOWN = 0, + SVG_TURBULENCE_TYPE_FRACTALNOISE = 1, + SVG_TURBULENCE_TYPE_TURBULENCE = 2 + } TurbulenceType; + + /** + * Stitch Options + */ + typedef enum + { + SVG_STITCHTYPE_UNKNOWN = 0, + SVG_STITCHTYPE_STITCH = 1, + SVG_STITCHTYPE_NOSTITCH = 2 + } StitchOption; + + + + /** + * + */ + virtual SVGAnimatedNumber getBaseFrequencyX() =0; + + /** + * + */ + virtual SVGAnimatedNumber getBaseFrequencyY() =0; + + /** + * + */ + virtual SVGAnimatedInteger getNumOctaves() =0; + + /** + * + */ + virtual SVGAnimatedNumber getSeed() =0; + + /** + * + */ + virtual SVGAnimatedEnumeration getStitchTiles() =0; + + /** + * + */ + virtual SVGAnimatedEnumeration getType() =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFETurbulenceElement() {} + +}; + + + + + + +/*######################################################################### +## SVGCursorElement +#########################################################################*/ + +/** + * + */ +class SVGCursorElement : + virtual public SVGElement, + public SVGURIReference, + public SVGTests, + public SVGExternalResourcesRequired +{ +public: + /** + * + */ + virtual SVGAnimatedLength getX() =0; + + /** + * + */ + virtual SVGAnimatedLength getY() =0; + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGCursorElement() {} + +}; + + + + + + +/*######################################################################### +## SVGAElement +#########################################################################*/ + +/** + * + */ +class SVGAElement : virtual public SVGElement, + public SVGURIReference, + public SVGTests, + public SVGLangSpace, + public SVGExternalResourcesRequired, + public SVGStylable, + public SVGTransformable, + public events::EventTarget +{ +public: + + /** + * + */ + virtual SVGAnimatedString getTarget() =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGAElement() {} + +}; + + + + + + +/*######################################################################### +## SVGViewElement +#########################################################################*/ + +/** + * + */ +class SVGViewElement : virtual public SVGElement, + public SVGExternalResourcesRequired, + public SVGFitToViewBox, + public SVGZoomAndPan +{ +public: + + /** + * + */ + virtual SVGStringList getViewTarget() =0; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGViewElement() {} + +}; + + + + + + +/*######################################################################### +## SVGScriptElement +#########################################################################*/ + +/** + * + */ +class SVGScriptElement : + virtual public SVGElement, + public SVGURIReference, + public SVGExternalResourcesRequired +{ +public: + + /** + * + */ + virtual DOMString getType() =0; + + /** + * + */ + virtual void setType(const DOMString &val) + throw (DOMException) =0; + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGScriptElement() {} + +}; + + + + + +/*######################################################################### +## SVGAnimationElement +#########################################################################*/ + +/** + * + */ +class SVGAnimationElement : + virtual public SVGElement, + public SVGTests, + public SVGExternalResourcesRequired, + public smil::ElementTimeControl, + public events::EventTarget +{ +public: + + + /** + * + */ + virtual SVGElement *getTargetElement() =0; + + + /** + * + */ + virtual double getStartTime ( ) =0; + + /** + * + */ + virtual double getCurrentTime ( ) =0; + + /** + * + */ + virtual double getSimpleDuration ( ) + throw( DOMException ) =0; +; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGAnimationElement() {} + +}; + + + + + + +/*######################################################################### +## SVGAnimateElement +#########################################################################*/ + +/** + * + */ +class SVGAnimateElement : virtual public SVGAnimationElement +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGAnimateElement() {} + +}; + + + + +/*######################################################################### +## SVGSetElement +#########################################################################*/ + +/** + * + */ +class SVGSetElement : virtual public SVGAnimationElement +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGSetElement() {} + +}; + + + + +/*######################################################################### +## SVGAnimateMotionElement +#########################################################################*/ + +/** + * + */ +class SVGAnimateMotionElement : virtual public SVGAnimationElement +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGAnimateMotionElement() {} + +}; + + + + +/*######################################################################### +## SVGMPathElement +#########################################################################*/ + +/** + * + */ +class SVGMPathElement : + virtual public SVGElement, + public SVGURIReference, + public SVGExternalResourcesRequired +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGMPathElement() {} + +}; + + + + +/*######################################################################### +## SVGAnimateColorElement +#########################################################################*/ + +/** + * + */ +class SVGAnimateColorElement : virtual public SVGAnimationElement +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGAnimateColorElement() {} + +}; + + + + +/*######################################################################### +## SVGAnimateTransformElement +#########################################################################*/ + +/** + * + */ +class SVGAnimateTransformElement : virtual public SVGAnimationElement +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGAnimateTransformElement() {} + +}; + + + + +/*######################################################################### +## SVGFontElement +#########################################################################*/ + +/** + * + */ +class SVGFontElement : virtual public SVGElement, + public SVGExternalResourcesRequired, + public SVGStylable +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFontElement() {} + +}; + + + + +/*######################################################################### +## SVGGlyphElement +#########################################################################*/ + +/** + * + */ +class SVGGlyphElement : virtual public SVGElement, + public SVGStylable +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGGlyphElement() {} + +}; + + + + +/*######################################################################### +## SVGMissingGlyphElement +#########################################################################*/ + +/** + * + */ +class SVGMissingGlyphElement : + virtual public SVGElement, + public SVGStylable +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGMissingGlyphElement() {} + +}; + + + + +/*######################################################################### +## SVGHKernElement +#########################################################################*/ + +/** + * + */ +class SVGHKernElement : virtual public SVGElement +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGHKernElement() {} + +}; + + + + +/*######################################################################### +## SVGVKernElement +#########################################################################*/ + +/** + * + */ +class SVGVKernElement : public virtual SVGElement +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGVKernElement() {} + +}; + + + + +/*######################################################################### +## SVGFontFaceElement +#########################################################################*/ + +/** + * + */ +class SVGFontFaceElement : virtual public SVGElement +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFontFaceElement() {} + +}; + + + + +/*######################################################################### +## SVGFontFaceSrcElement +#########################################################################*/ + +/** + * + */ +class SVGFontFaceSrcElement : virtual public SVGElement +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFontFaceSrcElement() {} + +}; + + + + +/*######################################################################### +## SVGFontFaceUriElement +#########################################################################*/ + +/** + * + */ +class SVGFontFaceUriElement : virtual public SVGElement +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFontFaceUriElement() {} + +}; + + + + +/*######################################################################### +## SVGFontFaceFormatElement +#########################################################################*/ + +/** + * + */ +class SVGFontFaceFormatElement : virtual public SVGElement +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFontFaceFormatElement() {} + +}; + + + + +/*######################################################################### +## SVGFontFaceNameElement +#########################################################################*/ + +/** + * + */ +class SVGFontFaceNameElement : virtual public SVGElement +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFontFaceNameElement() {} + +}; + + + + +/*######################################################################### +## SVGDefinitionSrcElement +#########################################################################*/ + +/** + * + */ +class SVGDefinitionSrcElement : virtual public SVGElement +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGDefinitionSrcElement() {} + +}; + + + + +/*######################################################################### +## SVGMetadataElement +#########################################################################*/ + +/** + * + */ +class SVGMetadataElement : virtual public SVGElement +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGMetadataElement() {} + +}; + + + +/*######################################################################### +## SVGForeignObjectElement +#########################################################################*/ + +/** + * + */ +class SVGForeignObjectElement : + virtual public SVGElement, + public SVGTests, + public SVGLangSpace, + public SVGExternalResourcesRequired, + public SVGStylable, + public SVGTransformable, + public events::EventTarget +{ +public: + + + /** + * + */ + virtual SVGAnimatedLength getX() =0; + + /** + * + */ + virtual SVGAnimatedLength getY() =0; + + /** + * + */ + virtual SVGAnimatedLength getWidth() =0; + + /** + * + */ + virtual SVGAnimatedLength getHeight() =0; + + + + //################## + //# Non-API methods + //################## + + + /** + * + */ + virtual ~SVGForeignObjectElement() {} + +}; + + + + + +} //namespace svg +} //namespace dom +} //namespace w3c +} //namespace org + +#endif // __SVG_H__ +/*######################################################################### +## E N D O F F I L E +#########################################################################*/ + diff --git a/src/dom/svg/svgimpl.h b/src/dom/svg/svgimpl.h index 2e70590cb..a9f6ace9b 100644 --- a/src/dom/svg/svgimpl.h +++ b/src/dom/svg/svgimpl.h @@ -1,5108 +1,5108 @@ -#ifndef __SVGIMPL_H__ -#define __SVGIMPL_H__ - -/** - * Phoebe DOM Implementation. - * - * This is a C++ approximation of the W3C DOM model, which follows - * fairly closely the specifications in the various .idl files, copies of - * which are provided for reference. Most important is this one: - * - * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html - * - * Authors: - * Bob Jamison - * - * Copyright (C) 2006 Bob Jamison - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -#include "svg.h" -#include "dom/domimpl.h" -#include "dom/smilimpl.h" - -#include - - - -namespace org -{ -namespace w3c -{ -namespace dom -{ -namespace svg -{ - - -//local definitions -typedef dom::DOMString DOMString; -typedef dom::DOMException DOMException; -typedef dom::Element Element; -typedef dom::Document Document; -typedef dom::NodeList NodeList; - - - -class SVGSVGElementImpl; - -/*######################################################################### -## SVGDocumentImpl -#########################################################################*/ - -/** - * - */ -class SVGDocumentImpl : virtual public SVGDocument, public DocumentImpl -{ -public: - - - /** - * - */ - virtual DOMString getTitle() - { return title; } - - /** - * - */ - virtual DOMString getReferrer() - { return referrer; } - - /** - * - */ - virtual DOMString getDomain() - { return domain; } - - /** - * - */ - virtual DOMString getURL() - { return url; } - - /** - * - */ - virtual SVGSVGElement *getRootElement() - { return rootElement; } - - - //#################################################### - //# Overload some createXXX() methods from DocumentImpl, - //# To create our SVG-DOM types (in .cpp) - //#################################################### - - /** - * - */ - virtual Element *createElement(const DOMString& tagName) - throw(DOMException); - - - /** - * - */ - virtual Element *createElementNS(const DOMString& namespaceURI, - const DOMString& qualifiedName) - throw(DOMException); - - //################## - //# Non-API methods - //################## - - SVGDocumentImpl(const DOMImplementation *domImpl, - const DOMString &namespaceURI, - const DOMString &qualifiedName, - const DocumentType *doctype) - : DocumentImpl(domImpl, namespaceURI, - qualifiedName, doctype) - { - init(); - } - - - /** - * - */ - virtual ~SVGDocumentImpl() - { - if (rootElement) - delete rootElement; - } - -protected: - -friend class SvgParser; - - void init() - { - title = ""; - referrer = ""; - domain = ""; - rootElement = NULL; - } - - DOMString title; - DOMString referrer; - DOMString domain; - DOMString url; - SVGSVGElement *rootElement; -}; - - - -/*######################################################################### -## SVGElementImpl -#########################################################################*/ - -/** - * - */ -class SVGElementImpl : virtual public SVGElement, - public ElementImpl -{ -public: - - /** - * - */ - virtual DOMString getId() - { return id; } - - /** - * - */ - virtual void setId(const DOMString &val) - throw (DOMException) - { id = val; } - - /** - * - */ - virtual DOMString getXmlBase() - { return xmlBase; } - - /** - * - */ - virtual void setXmlBase(const DOMString &val) - throw (DOMException) - { xmlBase = val; } - - /** - * - */ - virtual SVGSVGElement *getOwnerSVGElement() - { return ownerSvgElement; } - - /** - * - */ - virtual SVGElement *getViewportElement() - { return viewportElement; } - - - //################## - //# Non-API methods - //################## - - - /** - * - */ - SVGElementImpl() - {} - - /** - * - */ - SVGElementImpl(SVGDocumentImpl *owner, const DOMString &tagName) - : ElementImpl(owner, tagName) - { init(); } - - /** - * - */ - SVGElementImpl(SVGDocumentImpl *owner, - const DOMString &namespaceURI, - const DOMString &tagName) - : ElementImpl(owner, namespaceURI, tagName) - { init(); } - - - /** - * - */ - virtual ~SVGElementImpl() - {} - -protected: - - void init() - { - id = ""; - xmlBase = ""; - ownerSvgElement = NULL; - viewportElement = NULL; - } - - DOMString id; - DOMString xmlBase; - SVGSVGElement *ownerSvgElement; - SVGElement *viewportElement; - -}; - - - -/*######################################################################### -## SVGSVGElementImpl -#########################################################################*/ - -/** - * - */ -class SVGSVGElementImpl : virtual public SVGSVGElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedLength getX() - { return x; } - - /** - * - */ - virtual SVGAnimatedLength getY() - { return y; } - - /** - * - */ - virtual SVGAnimatedLength getWidth() - { return width; } - - /** - * - */ - virtual SVGAnimatedLength getHeight() - { return height; } - - /** - * - */ - virtual DOMString getContentScriptType() - { return contentScriptType; } - - /** - * - */ - virtual void setContentScriptType(const DOMString &val) - throw (DOMException) - { contentScriptType = val; } - - - /** - * - */ - virtual DOMString getContentStyleType() - { return contentStyleType; } - - /** - * - */ - virtual void setContentStyleType(const DOMString &val) - throw (DOMException) - { contentStyleType = val; } - - /** - * - */ - virtual SVGRect getViewport() - { return viewport; } - - /** - * - */ - virtual double getPixelUnitToMillimeterX() - { return pixelUnitToMillimeterX; } - - /** - * - */ - virtual double getPixelUnitToMillimeterY() - { return pixelUnitToMillimeterY; } - - /** - * - */ - virtual double getScreenPixelToMillimeterX() - { return screenPixelToMillimeterX; } - - /** - * - */ - virtual double getScreenPixelToMillimeterY() - { return screenPixelToMillimeterY; } - - - /** - * - */ - virtual bool getUseCurrentView() - { return useCurrentView; } - - /** - * - */ - virtual void setUseCurrentView(bool val) throw (DOMException) - { useCurrentView = val; } - - /** - * - */ - virtual SVGViewSpec getCurrentView() - { return currentView; } - - - /** - * - */ - virtual double getCurrentScale() - { return currentScale; } - - /** - * - */ - virtual void setCurrentScale(double val) throw (DOMException) - { currentScale = val; } - - - /** - * - */ - virtual SVGPoint getCurrentTranslate() - { return currentTranslate; } - - - /** - * - */ - virtual unsigned long suspendRedraw (unsigned long max_wait_milliseconds ); - - /** - * - */ - virtual void unsuspendRedraw (unsigned long suspend_handle_id ) - throw( DOMException ); - - /** - * - */ - virtual void unsuspendRedrawAll ( ); - - /** - * - */ - virtual void forceRedraw ( ); - - /** - * - */ - virtual void pauseAnimations ( ); - - /** - * - */ - virtual void unpauseAnimations ( ); - - /** - * - */ - virtual bool animationsPaused ( ); - - /** - * - */ - virtual double getCurrentTime ( ) - { return currentTime; } - - /** - * - */ - virtual void setCurrentTime (double seconds ) - { currentTime = seconds; } - - /** - * - */ - virtual NodeList getIntersectionList (const SVGRect &rect, - const SVGElement *referenceElement ); - - /** - * - */ - virtual NodeList getEnclosureList (const SVGRect &rect, - const SVGElement *referenceElement ); - - /** - * - */ - virtual bool checkIntersection (const SVGElement *element, const SVGRect &rect ); - - /** - * - */ - virtual bool checkEnclosure (const SVGElement *element, const SVGRect &rect ); - - /** - * - */ - virtual void deselectAll ( ); - - /** - * - */ - virtual SVGNumber createSVGNumber ( ) - { - SVGNumber ret; - return ret; - } - - /** - * - */ - virtual SVGLength createSVGLength ( ) - { - SVGLength ret; - return ret; - } - - /** - * - */ - virtual SVGAngle createSVGAngle ( ) - { - SVGAngle ret; - return ret; - } - - /** - * - */ - virtual SVGPoint createSVGPoint ( ) - { - SVGPoint ret; - return ret; - } - - /** - * - */ - virtual SVGMatrix createSVGMatrix ( ) - { - SVGMatrix ret; - return ret; - } - - /** - * - */ - virtual SVGRect createSVGRect ( ) - { - SVGRect ret; - return ret; - } - - /** - * - */ - virtual SVGTransform createSVGTransform ( ) - { - SVGTransform ret; - return ret; - } - - /** - * - */ - virtual SVGTransform createSVGTransformFromMatrix(const SVGMatrix &matrix ) - { - SVGTransform ret; - ret.setMatrix(matrix); - return ret; - } - - - /** - * - */ - virtual Element *getElementById (const DOMString& elementId ); - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGSVGElementImpl() : SVGElementImpl() - {} - - - - /** - * - */ - virtual ~SVGSVGElementImpl() {} - -protected: - - SVGAnimatedLength x; - SVGAnimatedLength y; - SVGAnimatedLength width; - SVGAnimatedLength height; - DOMString contentScriptType; - DOMString contentStyleType; - SVGRect viewport; - double pixelUnitToMillimeterX; - double pixelUnitToMillimeterY; - double screenPixelToMillimeterX; - double screenPixelToMillimeterY; - bool useCurrentView; - SVGViewSpec currentView; - double currentScale; - SVGPoint currentTranslate; - - double currentTime; - -}; - - - -/*######################################################################### -## SVGGElementImpl -#########################################################################*/ - -/** - * - */ -class SVGGElementImpl : virtual public SVGGElement, public SVGElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGGElementImpl() {} - - /** - * - */ - virtual ~SVGGElementImpl() {} - -protected: - - -}; - - - - -/*######################################################################### -## SVGDefsElementImpl -#########################################################################*/ - -/** - * - */ -class SVGDefsElementImpl : virtual public SVGDefsElement, - public SVGElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGDefsElementImpl() {} - - /** - * - */ - virtual ~SVGDefsElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGDescElementImpl -#########################################################################*/ - -/** - * - */ -class SVGDescElementImpl : virtual public SVGDescElement, - public SVGElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGDescElementImpl() {} - - /** - * - */ - virtual ~SVGDescElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGTitleElementImpl -#########################################################################*/ - -/** - * - */ -class SVGTitleElementImpl : virtual public SVGTitleElement, - public SVGElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGTitleElementImpl() {} - - /** - * - */ - virtual ~SVGTitleElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGSymbolElementImpl -#########################################################################*/ - -/** - * - */ -class SVGSymbolElementImpl : virtual public SVGSymbolElement, - public SVGElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGSymbolElementImpl() {} - - /** - * - */ - virtual ~SVGSymbolElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGUseElementImpl -#########################################################################*/ - -/** - * - */ -class SVGUseElementImpl : public SVGElementImpl -{ -public: - - - /** - * - */ - virtual SVGAnimatedLength getX() - { return x; } - - /** - * - */ - virtual SVGAnimatedLength getY() - { return y; } - - /** - * - */ - virtual SVGAnimatedLength getWidth() - { return width; } - - /** - * - */ - virtual SVGAnimatedLength getHeight() - { return height; } - - /** - * - */ - virtual SVGElementInstance getInstanceRoot() - { return instanceRoot; } - - /** - * - */ - virtual SVGElementInstance getAnimatedInstanceRoot() - { return animatedInstanceRoot; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGUseElementImpl() {} - - /** - * - */ - virtual ~SVGUseElementImpl() {} - -protected: - - SVGAnimatedLength x; - SVGAnimatedLength y; - SVGAnimatedLength width; - SVGAnimatedLength height; - SVGElementInstance instanceRoot; - SVGElementInstance animatedInstanceRoot; -}; - - - - - - - -/*######################################################################### -## SVGImageElementImpl -#########################################################################*/ - -/** - * - */ -class SVGImageElementImpl : virtual public SVGImageElement, - public SVGElementImpl -{ -public: - - - /** - * - */ - virtual SVGAnimatedLength getX() - { return x; } - - /** - * - */ - virtual SVGAnimatedLength getY() - { return y; } - - /** - * - */ - virtual SVGAnimatedLength getWidth() - { return width; } - - /** - * - */ - virtual SVGAnimatedLength getHeight() - { return height; } - - - /** - * - */ - virtual SVGAnimatedPreserveAspectRatio getPreserveAspectRatio() - { return preserveAspectRatio; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGImageElementImpl() {} - - /** - * - */ - virtual ~SVGImageElementImpl() {} - -protected: - - SVGAnimatedLength x; - SVGAnimatedLength y; - SVGAnimatedLength width; - SVGAnimatedLength height; - SVGAnimatedPreserveAspectRatio preserveAspectRatio; -}; - - - - - - -/*######################################################################### -## SVGSwitchElementImpl -#########################################################################*/ - -/** - * - */ -class SVGSwitchElementImpl : virtual public SVGSwitchElement, - public SVGElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGSwitchElementImpl() {} - - /** - * - */ - virtual ~SVGSwitchElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## GetSVGDocumentImpl -#########################################################################*/ - -/** - * - */ -class GetSVGDocumentImpl : public virtual GetSVGDocument -{ -public: - - /** - * - */ - virtual SVGDocument *getSVGDocument ( ) - throw( DOMException ); - - //################## - //# Non-API methods - //################## - - /** - * - */ - GetSVGDocumentImpl() {} - - /** - * - */ - virtual ~GetSVGDocumentImpl() {} - -protected: - - -}; - - - - - - - -/*######################################################################### -## SVGStyleElementImpl -#########################################################################*/ - -/** - * - */ -class SVGStyleElementImpl : virtual public SVGStyleElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual DOMString getXmlspace() - { return xmlSpace; } - - /** - * - */ - virtual void setXmlspace(const DOMString &val) - throw (DOMException) - { xmlSpace = val; } - - /** - * - */ - virtual DOMString getType() - { return type; } - - /** - * - */ - virtual void setType(const DOMString &val) - throw (DOMException) - { type = val; } - - /** - * - */ - virtual DOMString getMedia() - { return media; } - - /** - * - */ - virtual void setMedia(const DOMString &val) - throw (DOMException) - { media = val; } - - /** - * - */ - virtual DOMString getTitle() - { return title; } - - /** - * - */ - virtual void setTitle(const DOMString &val) - throw (DOMException) - { title = val; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGStyleElementImpl() {} - - /** - * - */ - virtual ~SVGStyleElementImpl() {} - -protected: - - DOMString xmlSpace; - DOMString type; - DOMString media; - DOMString title; - -}; - - - - - - -/*######################################################################### -## SVGPathElementImpl -#########################################################################*/ - -/** - * - */ -class SVGPathElementImpl : virtual public SVGPathElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedNumber getPathLength(); - - /** - * - */ - virtual double getTotalLength ( ); - - /** - * - */ - virtual SVGPoint getPointAtLength (double distance ); - - /** - * - */ - virtual unsigned long getPathSegAtLength (double distance ); - - /** - * - */ - virtual SVGPathSegClosePath - createSVGPathSegClosePath ( ) - { - SVGPathSegClosePath ret; - return ret; - } - - /** - * - */ - virtual SVGPathSegMovetoAbs - createSVGPathSegMovetoAbs (double x, double y ) - { - SVGPathSegMovetoAbs ret(x, y); - return ret; - } - - /** - * - */ - virtual SVGPathSegMovetoRel - createSVGPathSegMovetoRel (double x, double y ) - { - SVGPathSegMovetoRel ret(x, y); - return ret; - } - - /** - * - */ - virtual SVGPathSegLinetoAbs - createSVGPathSegLinetoAbs (double x, double y ) - { - SVGPathSegLinetoAbs ret(x, y); - return ret; - } - - /** - * - */ - virtual SVGPathSegLinetoRel - createSVGPathSegLinetoRel (double x, double y ) - { - SVGPathSegLinetoRel ret(x, y); - return ret; - } - - /** - * - */ - virtual SVGPathSegCurvetoCubicAbs - createSVGPathSegCurvetoCubicAbs (double x, double y, - double x1, double y1, double x2, double y2 ) - { - SVGPathSegCurvetoCubicAbs ret(x, y, x1, y1, x2, y2); - return ret; - } - - /** - * - */ - virtual SVGPathSegCurvetoCubicRel - createSVGPathSegCurvetoCubicRel (double x, double y, - double x1, double y1, double x2, double y2 ) - { - SVGPathSegCurvetoCubicRel ret(x, y, x1, y1, x2, y2); - return ret; - } - - /** - * - */ - virtual SVGPathSegCurvetoQuadraticAbs - createSVGPathSegCurvetoQuadraticAbs (double x, double y, - double x1, double y1 ) - { - SVGPathSegCurvetoQuadraticAbs ret(x, y, x1, y1); - return ret; - } - - /** - * - */ - virtual SVGPathSegCurvetoQuadraticRel - createSVGPathSegCurvetoQuadraticRel (double x, double y, - double x1, double y1 ) - { - SVGPathSegCurvetoQuadraticRel ret(x, y, x1, y1); - return ret; - } - - /** - * - */ - virtual SVGPathSegArcAbs - createSVGPathSegArcAbs (double x, double y, - double r1, double r2, double angle, - bool largeArcFlag, bool sweepFlag ) - { - SVGPathSegArcAbs ret(x, y, r1, r2, angle, largeArcFlag, sweepFlag); - return ret; - } - - /** - * - */ - virtual SVGPathSegArcRel - createSVGPathSegArcRel (double x, double y, double r1, - double r2, double angle, bool largeArcFlag, - bool sweepFlag ) - { - SVGPathSegArcRel ret(x, y, r1, r2, angle, largeArcFlag, sweepFlag); - return ret; - } - - /** - * - */ - virtual SVGPathSegLinetoHorizontalAbs - createSVGPathSegLinetoHorizontalAbs (double x ) - { - SVGPathSegLinetoHorizontalAbs ret(x); - return ret; - } - - /** - * - */ - virtual SVGPathSegLinetoHorizontalRel - createSVGPathSegLinetoHorizontalRel (double x ) - { - SVGPathSegLinetoHorizontalRel ret(x); - return ret; - } - - /** - * - */ - virtual SVGPathSegLinetoVerticalAbs - createSVGPathSegLinetoVerticalAbs (double y ) - { - SVGPathSegLinetoVerticalAbs ret(y); - return ret; - } - - /** - * - */ - virtual SVGPathSegLinetoVerticalRel - createSVGPathSegLinetoVerticalRel (double y ) - { - SVGPathSegLinetoVerticalRel ret(y); - return ret; - } - - /** - * - */ - virtual SVGPathSegCurvetoCubicSmoothAbs - createSVGPathSegCurvetoCubicSmoothAbs (double x, double y, - double x2, double y2 ) - { - SVGPathSegCurvetoCubicSmoothAbs ret(x, y, x2, y2); - return ret; - } - - /** - * - */ - virtual SVGPathSegCurvetoCubicSmoothRel - createSVGPathSegCurvetoCubicSmoothRel (double x, double y, - double x2, double y2 ) - { - SVGPathSegCurvetoCubicSmoothRel ret(x, y, x2, y2); - return ret; - } - - /** - * - */ - virtual SVGPathSegCurvetoQuadraticSmoothAbs - createSVGPathSegCurvetoQuadraticSmoothAbs (double x, double y ) - { - SVGPathSegCurvetoQuadraticSmoothAbs ret(x, y); - return ret; - } - - /** - * - */ - virtual SVGPathSegCurvetoQuadraticSmoothRel - createSVGPathSegCurvetoQuadraticSmoothRel (double x, double y ) - { - SVGPathSegCurvetoQuadraticSmoothRel ret(x, y); - return ret; - } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGPathElementImpl() {} - - - /** - * - */ - virtual ~SVGPathElementImpl() {} - -protected: - - -}; - - - - - - - -/*######################################################################### -## SVGRectElementImpl -#########################################################################*/ - -/** - * - */ -class SVGRectElementImpl : virtual public SVGRectElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedLength getX() - { return x; } - - /** - * - */ - virtual SVGAnimatedLength getY() - { return y; } - - /** - * - */ - virtual SVGAnimatedLength getWidth() - { return width; } - - /** - * - */ - virtual SVGAnimatedLength getHeight() - { return height; } - - - /** - * - */ - virtual SVGAnimatedLength getRx() - { return rx; } - - /** - * - */ - virtual SVGAnimatedLength getRy() - { return ry; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGRectElementImpl() {} - - /** - * - */ - virtual ~SVGRectElementImpl() {} - -protected: - - SVGAnimatedLength x; - SVGAnimatedLength y; - SVGAnimatedLength width; - SVGAnimatedLength height; - SVGAnimatedLength rx; - SVGAnimatedLength ry; - -}; - - - - - - -/*######################################################################### -## SVGCircleElementImpl -#########################################################################*/ - -/** - * - */ -class SVGCircleElementImpl : virtual public SVGCircleElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedLength getCx() - { return cx; } - - /** - * - */ - virtual SVGAnimatedLength getCy() - { return cy; } - - /** - * - */ - virtual SVGAnimatedLength getR() - { return r; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGCircleElementImpl() {} - - /** - * - */ - virtual ~SVGCircleElementImpl() {} - -protected: - - SVGAnimatedLength cx; - SVGAnimatedLength cy; - SVGAnimatedLength r; -}; - - - - - - -/*######################################################################### -## SVGEllipseElementImpl -#########################################################################*/ - -/** - * - */ -class SVGEllipseElementImpl : virtual public SVGEllipseElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedLength getCx() - { return cx; } - - /** - * - */ - virtual SVGAnimatedLength getCy() - { return cy; } - - /** - * - */ - virtual SVGAnimatedLength getRx() - { return rx; } - - /** - * - */ - virtual SVGAnimatedLength getRy() - { return ry; } - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGEllipseElementImpl() {} - - /** - * - */ - virtual ~SVGEllipseElementImpl() {} - -protected: - - SVGAnimatedLength cx; - SVGAnimatedLength cy; - SVGAnimatedLength rx; - SVGAnimatedLength ry; -}; - - - - - - -/*######################################################################### -## SVGLineElement -#########################################################################*/ - -/** - * - */ -class SVGLineElementImpl : virtual public SVGLineElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedLength getX1() - { return x1; } - - /** - * - */ - virtual SVGAnimatedLength getY1() - { return y1; } - - /** - * - */ - virtual SVGAnimatedLength getX2() - { return x2; } - - /** - * - */ - virtual SVGAnimatedLength getY2() - { return y2; } - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGLineElementImpl() {} - -protected: - - SVGAnimatedLength x1; - SVGAnimatedLength x2; - SVGAnimatedLength y1; - SVGAnimatedLength y2; -}; - - - - -/*######################################################################### -## SVGPolylineElement -#########################################################################*/ - -/** - * - */ -class SVGPolylineElementImpl : virtual public SVGPolylineElement, - public SVGElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGPolylineElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGPolygonElementImpl -#########################################################################*/ - -/** - * - */ -class SVGPolygonElementImpl : virtual public SVGPolygonElement, - public SVGElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGPolygonElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGTextContentElement -#########################################################################*/ - -/** - * - */ -class SVGTextContentElementImpl : virtual public SVGTextContentElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedLength getTextLength(); - - - /** - * - */ - virtual SVGAnimatedEnumeration getLengthAdjust(); - - - /** - * - */ - virtual long getNumberOfChars ( ); - - /** - * - */ - virtual double getComputedTextLength ( ); - - /** - * - */ - virtual double getSubStringLength (unsigned long charnum, unsigned long nchars ) - throw( DOMException ); - - /** - * - */ - virtual SVGPoint getStartPositionOfChar (unsigned long charnum ) - throw( DOMException ); - - /** - * - */ - virtual SVGPoint getEndPositionOfChar (unsigned long charnum ) - throw( DOMException ); - - /** - * - */ - virtual SVGRect getExtentOfChar (unsigned long charnum ) - throw( DOMException ); - - /** - * - */ - virtual double getRotationOfChar (unsigned long charnum ) - throw( DOMException ); - - /** - * - */ - virtual long getCharNumAtPosition (const SVGPoint &point ); - - /** - * - */ - virtual void selectSubString (unsigned long charnum, unsigned long nchars ) - throw( DOMException ); - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGTextContentElementImpl() {} - -protected: - - -}; - - - - - - -/*######################################################################### -## SVGTextPositioningElementImpl -#########################################################################*/ - -/** - * - */ -class SVGTextPositioningElementImpl : virtual public SVGTextPositioningElement, - public SVGTextContentElementImpl -{ -public: - - - - /** - * - */ - virtual SVGAnimatedLength getX() - { return x; } - - /** - * - */ - virtual SVGAnimatedLength getY() - { return y; } - - /** - * - */ - virtual SVGAnimatedLength getDx() - { return dx; } - - /** - * - */ - virtual SVGAnimatedLength getDy() - { return dy; } - - - /** - * - */ - virtual SVGAnimatedNumberList getRotate() - { return rotate; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGTextPositioningElementImpl() {} - -protected: - - SVGAnimatedLength x; - SVGAnimatedLength y; - SVGAnimatedLength dx; - SVGAnimatedLength dy; - SVGAnimatedNumberList rotate; - -}; - - - - - - - -/*######################################################################### -## SVGTextElement -#########################################################################*/ - -/** - * - */ -class SVGTextElementImpl : virtual public SVGTextElement, - public SVGTextPositioningElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGTextElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGTSpanElement -#########################################################################*/ - -/** - * - */ -class SVGTSpanElementImpl : virtual public SVGTSpanElement, - public SVGTextPositioningElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGTSpanElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGTRefElement -#########################################################################*/ - -/** - * - */ -class SVGTRefElementImpl : virtual public SVGTRefElement, - public SVGTextPositioningElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGTRefElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGTextPathElement -#########################################################################*/ - -/** - * - */ -class SVGTextPathElementImpl : virtual public SVGTextPathElement, - public SVGTextContentElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedLength getStartOffset() - { return startOffset; } - - /** - * - */ - virtual SVGAnimatedEnumeration getMethod() - { return method; } - - /** - * - */ - virtual SVGAnimatedEnumeration getSpacing() - { return spacing; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGTextPathElementImpl() {} - -protected: - - SVGAnimatedLength startOffset; - SVGAnimatedEnumeration method; - SVGAnimatedEnumeration spacing; -}; - - - - - - - -/*######################################################################### -## SVGAltGlyphElement -#########################################################################*/ - -/** - * - */ -class SVGAltGlyphElementImpl : virtual public SVGAltGlyphElement, - public SVGTextPositioningElementImpl -{ -public: - - /** - * - */ - virtual DOMString getGlyphRef() - { return glyphRef; } - - /** - * - */ - virtual void setGlyphRef(const DOMString &val) - throw (DOMException) - { glyphRef = val; } - - /** - * - */ - virtual DOMString getFormat() - { return format; } - - /** - * - */ - virtual void setFormat(const DOMString &val) - throw (DOMException) - { format = val; } - - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGAltGlyphElementImpl() {} - -protected: - - DOMString glyphRef; - DOMString format; - -}; - - - - - - - -/*######################################################################### -## SVGAltGlyphDefElementImpl -#########################################################################*/ - -/** - * - */ -class SVGAltGlyphDefElementImpl : virtual public SVGAltGlyphDefElement, - public SVGElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGAltGlyphDefElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGAltGlyphItemElementImpl -#########################################################################*/ - -/** - * - */ -class SVGAltGlyphItemElementImpl : virtual public SVGAltGlyphItemElement, - public SVGElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGAltGlyphItemElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGGlyphRefElementImpl -#########################################################################*/ - -/** - * - */ -class SVGGlyphRefElementImpl : virtual public SVGGlyphRefElement, - public SVGElementImpl -{ -public: - /** - * - */ - virtual DOMString getGlyphRef() - { return glyphRef; } - - /** - * - */ - virtual void setGlyphRef(const DOMString &val) throw (DOMException) - { glyphRef = val; } - - /** - * - */ - virtual DOMString getFormat() - { return format; } - - /** - * - */ - virtual void setFormat(const DOMString &val) throw (DOMException) - { format = val; } - - /** - * - */ - virtual double getX() - { return x; } - - /** - * - */ - virtual void setX(double val) throw (DOMException) - { x = val; } - - /** - * - */ - virtual double getY() - { return y; } - - /** - * - */ - virtual void setY(double val) throw (DOMException) - { y = val; } - - /** - * - */ - virtual double getDx() - { return dx; } - - /** - * - */ - virtual void setDx(double val) throw (DOMException) - { dx = val; } - - /** - * - */ - virtual double getDy() - { return dy; } - - /** - * - */ - virtual void setDy(double val) throw (DOMException) - { dy = val; } - - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGGlyphRefElementImpl() {} - -protected: - - DOMString glyphRef; - DOMString format; - double x, y, dx, dy; - -}; - - - - - - -/*######################################################################### -## SVGMarkerElementImpl -#########################################################################*/ - -/** - * - */ -class SVGMarkerElementImpl : virtual public SVGMarkerElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedLength getRefX() - { return refX; } - - /** - * - */ - virtual SVGAnimatedLength getRefY() - { return refY; } - - /** - * - */ - virtual SVGAnimatedEnumeration getMarkerUnits() - { return markerUnits; } - - /** - * - */ - virtual SVGAnimatedLength getMarkerWidth() - { return markerWidth; } - - /** - * - */ - virtual SVGAnimatedLength getMarkerHeight() - { return markerHeight; } - - /** - * - */ - virtual SVGAnimatedEnumeration getOrientType() - { return orientType; } - - /** - * - */ - virtual SVGAnimatedAngle getOrientAngle() - { return orientAngle; } - - - /** - * - */ - virtual void setOrientToAuto ( ) - { orientAuto = true; } - - /** - * - */ - virtual void setOrientToAngle (const SVGAngle &angle) - { - orientAuto = false; - orientAngle = SVGAnimatedAngle(angle); - } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGMarkerElementImpl() {} - -protected: - - SVGAnimatedLength refX; - SVGAnimatedLength refY; - SVGAnimatedEnumeration markerUnits; - SVGAnimatedLength markerWidth; - SVGAnimatedLength markerHeight; - SVGAnimatedEnumeration orientType; - SVGAnimatedAngle orientAngle; - bool orientAuto; - - -}; - - - - - - - -/*######################################################################### -## SVGColorProfileElementImpl -#########################################################################*/ - -/** - * - */ -class SVGColorProfileElementImpl : virtual public SVGColorProfileElement, - public SVGElementImpl -{ -public: - /** - * - */ - virtual DOMString getLocal() - { return local; } - - /** - * - */ - virtual void setLocal(const DOMString &val) throw (DOMException) - { local = val; } - - /** - * - */ - virtual DOMString getName() - { return name; } - - /** - * - */ - virtual void setName(const DOMString &val) throw (DOMException) - { name = val; } - - /** - * - */ - virtual unsigned short getRenderingIntent() - { return renderingIntent; } - - /** - * - */ - virtual void setRenderingIntent(unsigned short val) throw (DOMException) - { renderingIntent = val; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGColorProfileElementImpl() {} - -protected: - - DOMString local; - DOMString name; - unsigned short renderingIntent; - -}; - - - - - -/*######################################################################### -## SVGGradientElementImpl -#########################################################################*/ - -/** - * - */ -class SVGGradientElementImpl : virtual public SVGGradientElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedEnumeration getGradientUnits() - { return gradientUnits; } - - /** - * - */ - virtual SVGAnimatedTransformList getGradientTransform() - { return gradientTransform; } - - /** - * - */ - virtual SVGAnimatedEnumeration getSpreadMethod() - { return spreadMethod; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGGradientElementImpl() {} - -protected: - - - SVGAnimatedEnumeration gradientUnits; - SVGAnimatedTransformList gradientTransform; - SVGAnimatedEnumeration spreadMethod; -}; - - - - - - - -/*######################################################################### -## SVGLinearGradientElementImpl -#########################################################################*/ - -/** - * - */ -class SVGLinearGradientElementImpl : virtual public SVGLinearGradientElement, - public SVGGradientElementImpl -{ -public: - - - /** - * - */ - virtual SVGAnimatedLength getX1() - { return x1; } - - /** - * - */ - virtual SVGAnimatedLength getY1() - { return y1; } - - /** - * - */ - virtual SVGAnimatedLength getX2() - { return x2; } - - /** - * - */ - virtual SVGAnimatedLength getY2() - { return y2; } - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGLinearGradientElementImpl() {} - -protected: - - SVGAnimatedLength x1, x2, y1, y2; - -}; - - - - - - - -/*######################################################################### -## SVGRadialGradientElementImpl -#########################################################################*/ - -/** - * - */ -class SVGRadialGradientElementImpl : virtual public SVGRadialGradientElement, - public SVGGradientElementImpl -{ -public: - - - /** - * - */ - virtual SVGAnimatedLength getCx() - { return cx; } - - - /** - * - */ - virtual SVGAnimatedLength getCy() - { return cy; } - - - /** - * - */ - virtual SVGAnimatedLength getR() - { return r; } - - - /** - * - */ - virtual SVGAnimatedLength getFx() - { return fx; } - - - /** - * - */ - virtual SVGAnimatedLength getFy() - { return fy; } - - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGRadialGradientElementImpl() {} - -protected: - - SVGAnimatedLength cx, cy, r, fx, fy; - -}; - - - - - - - -/*######################################################################### -## SVGStopElementImpl -#########################################################################*/ - -/** - * - */ -class SVGStopElementImpl : virtual public SVGStopElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedNumber getOffset() - { return offset; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGStopElementImpl() {} - -protected: - - SVGAnimatedNumber offset; - -}; - - - - - - - -/*######################################################################### -## SVGPatternElementImpl -#########################################################################*/ - -/** - * - */ -class SVGPatternElementImpl : virtual public SVGPatternElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedEnumeration getPatternUnits() - { return patternUnits; } - - /** - * - */ - virtual SVGAnimatedEnumeration getPatternContentUnits() - { return patternContentUnits; } - - /** - * - */ - virtual SVGAnimatedTransformList getPatternTransform() - { return patternTransform; } - - /** - * - */ - virtual SVGAnimatedLength getX() - { return x; } - - /** - * - */ - virtual SVGAnimatedLength getY() - { return y; } - - /** - * - */ - virtual SVGAnimatedLength getWidth() - { return width; } - - /** - * - */ - virtual SVGAnimatedLength getHeight() - { return height; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGPatternElementImpl() {} - -protected: - - - SVGAnimatedEnumeration patternUnits; - SVGAnimatedEnumeration patternContentUnits; - SVGAnimatedTransformList patternTransform; - SVGAnimatedLength x; - SVGAnimatedLength y; - SVGAnimatedLength width; - SVGAnimatedLength height; -}; - - - - - - - -/*######################################################################### -## SVGClipPathElementImpl -#########################################################################*/ - -/** - * - */ -class SVGClipPathElementImpl : virtual public SVGClipPathElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedEnumeration getClipPathUnits() - { return clipPathUnits; } - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGClipPathElementImpl() {} - -protected: - - SVGAnimatedEnumeration clipPathUnits; - -}; - - - - - - - -/*######################################################################### -## SVGMaskElementImpl -#########################################################################*/ - -/** - * - */ -class SVGMaskElementImpl : virtual public SVGMaskElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedEnumeration getMaskUnits() - { return maskUnits; } - - /** - * - */ - virtual SVGAnimatedEnumeration getMaskContentUnits() - { return maskContentUnits; } - - /** - * - */ - virtual SVGAnimatedLength getX() - { return x; } - - /** - * - */ - virtual SVGAnimatedLength getY() - { return y; } - - /** - * - */ - virtual SVGAnimatedLength getWidth() - { return width; } - - /** - * - */ - virtual SVGAnimatedLength getHeight() - { return height; } - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGMaskElementImpl() {} - -protected: - - - SVGAnimatedEnumeration maskUnits; - SVGAnimatedEnumeration maskContentUnits; - SVGAnimatedLength x; - SVGAnimatedLength y; - SVGAnimatedLength width; - SVGAnimatedLength height; -}; - - - - - - - -/*######################################################################### -## SVGFilterElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFilterElementImpl : virtual public SVGFilterElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedEnumeration getFilterUnits() - { return filterUnits; } - - /** - * - */ - virtual SVGAnimatedEnumeration getPrimitiveUnits() - { return filterUnits; } - - /** - * - */ - virtual SVGAnimatedLength getX() - { return x; } - - /** - * - */ - virtual SVGAnimatedLength getY() - { return y; } - - /** - * - */ - virtual SVGAnimatedLength getWidth() - { return width; } - - /** - * - */ - virtual SVGAnimatedLength getHeight() - { return height; } - - /** - * - */ - virtual SVGAnimatedInteger getFilterResX() - { return filterResX; } - - /** - * - */ - virtual SVGAnimatedInteger getFilterResY() - { return filterResY; } - - /** - * - */ - virtual void setFilterRes (unsigned long filterResXArg, - unsigned long filterResYArg ) - { - filterResX = filterResXArg; - filterResY = filterResYArg; - } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFilterElementImpl() {} - -protected: - - SVGAnimatedEnumeration filterUnits; - SVGAnimatedEnumeration primitiveUnits; - SVGAnimatedLength x; - SVGAnimatedLength y; - SVGAnimatedLength width; - SVGAnimatedLength height; - SVGAnimatedInteger filterResX; - SVGAnimatedInteger filterResY; - -}; - - - - - - -/*######################################################################### -## SVGFEBlendElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFEBlendElementImpl : virtual public SVGFEBlendElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedString getIn1() - { return in1; } - - /** - * - */ - virtual SVGAnimatedString getIn2() - { return in2; } - - /** - * - */ - virtual SVGAnimatedEnumeration getMode() - { return mode; } - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEBlendElementImpl() {} - -protected: - - SVGAnimatedString in1, in2; - SVGAnimatedEnumeration mode; -}; - - - - - - - -/*######################################################################### -## SVGFEColorMatrixElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFEColorMatrixElementImpl : virtual public SVGFEColorMatrixElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedString getIn1() - { return in1; } - - /** - * - */ - virtual SVGAnimatedEnumeration getType() - { return type; } - - /** - * - */ - virtual SVGAnimatedNumberList getValues() - { return values; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEColorMatrixElementImpl() {} - -protected: - - SVGAnimatedString in1; - SVGAnimatedEnumeration type; - SVGAnimatedNumberList values; - -}; - - - - - - - -/*######################################################################### -## SVGFEComponentTransferElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFEComponentTransferElementImpl : - virtual public SVGFEComponentTransferElement, - public SVGElementImpl -{ -public: - /** - * - */ - virtual SVGAnimatedString getIn1() - { return in1; } - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEComponentTransferElementImpl() {} - -protected: - - SVGAnimatedString in1; - -}; - - - - - - - -/*######################################################################### -## SVGComponentTransferFunctionElementImpl -#########################################################################*/ - -/** - * - */ -class SVGComponentTransferFunctionElementImpl : - virtual public SVGComponentTransferFunctionElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedEnumeration getType() - { return type; } - - /** - * - */ - virtual SVGAnimatedNumberList getTableValues() - { return tableValues; } - - /** - * - */ - virtual SVGAnimatedNumber getSlope() - { return slope; } - - /** - * - */ - virtual SVGAnimatedNumber getIntercept() - { return intercept; } - - /** - * - */ - virtual SVGAnimatedNumber getAmplitude() - { return amplitude; } - - /** - * - */ - virtual SVGAnimatedNumber getExponent() - { return exponent; } - - /** - * - */ - virtual SVGAnimatedNumber getOffset() - { return offset; } - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGComponentTransferFunctionElementImpl() {} - -protected: - - SVGAnimatedEnumeration type; - SVGAnimatedNumberList tableValues; - SVGAnimatedNumber slope; - SVGAnimatedNumber intercept; - SVGAnimatedNumber amplitude; - SVGAnimatedNumber exponent; - SVGAnimatedNumber offset; - -}; - - - - - - - -/*######################################################################### -## SVGFEFuncRElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFEFuncRElementImpl : - virtual public SVGFEFuncRElement, - public SVGComponentTransferFunctionElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEFuncRElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGFEFuncGElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFEFuncGElementImpl : virtual public SVGFEFuncGElement, - public SVGComponentTransferFunctionElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEFuncGElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGFEFuncBElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFEFuncBElementImpl : virtual public SVGFEFuncBElement, - public SVGComponentTransferFunctionElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEFuncBElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGFEFuncAElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFEFuncAElementImpl : virtual public SVGFEFuncAElement, - public SVGComponentTransferFunctionElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEFuncAElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGFECompositeElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFECompositeElementImpl : virtual public SVGFECompositeElement, - public SVGElementImpl -{ -public: - - - /** - * - */ - virtual SVGAnimatedString getIn1() - { return in1; } - - /** - * - */ - virtual SVGAnimatedString getIn2() - { return in2; } - - /** - * - */ - virtual SVGAnimatedEnumeration getOperator() - { return ae_operator; } - - /** - * - */ - virtual SVGAnimatedNumber getK1() - { return k1; } - - /** - * - */ - virtual SVGAnimatedNumber getK2() - { return k2; } - - /** - * - */ - virtual SVGAnimatedNumber getK3() - { return k3; } - - /** - * - */ - virtual SVGAnimatedNumber getK4() - { return k4; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFECompositeElementImpl() {} - -protected: - - - SVGAnimatedString in1; - SVGAnimatedString in2; - SVGAnimatedEnumeration ae_operator; - SVGAnimatedNumber k1; - SVGAnimatedNumber k2; - SVGAnimatedNumber k3; - SVGAnimatedNumber k4; - -}; - - - - - - - -/*######################################################################### -## SVGFEConvolveMatrixElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFEConvolveMatrixElementImpl : virtual public SVGFEConvolveMatrixElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedInteger getOrderX() - { return orderX; } - - /** - * - */ - virtual SVGAnimatedInteger getOrderY() - { return orderY; } - - /** - * - */ - virtual SVGAnimatedNumberList getKernelMatrix() - { return kernelMatrix; } - - /** - * - */ - virtual SVGAnimatedNumber getDivisor() - { return divisor; } - - /** - * - */ - virtual SVGAnimatedNumber getBias() - { return bias; } - - /** - * - */ - virtual SVGAnimatedInteger getTargetX() - { return targetX; } - - /** - * - */ - virtual SVGAnimatedInteger getTargetY() - { return targetY; } - - /** - * - */ - virtual SVGAnimatedEnumeration getEdgeMode() - { return edgeMode; } - - /** - * - */ - virtual SVGAnimatedLength getKernelUnitLengthX() - { return kernelUnitLengthX; } - - /** - * - */ - virtual SVGAnimatedLength getKernelUnitLengthY() - { return kernelUnitLengthY; } - - /** - * - */ - virtual SVGAnimatedBoolean getPreserveAlpha() - { return preserveAlpha; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEConvolveMatrixElementImpl() {} - -protected: - - SVGAnimatedInteger orderX; - SVGAnimatedInteger orderY; - SVGAnimatedNumberList kernelMatrix; - SVGAnimatedNumber divisor; - SVGAnimatedNumber bias; - SVGAnimatedInteger targetX; - SVGAnimatedInteger targetY; - SVGAnimatedEnumeration edgeMode; - SVGAnimatedLength kernelUnitLengthX; - SVGAnimatedLength kernelUnitLengthY; - SVGAnimatedBoolean preserveAlpha; - -}; - - - - - - - -/*######################################################################### -## SVGFEDiffuseLightingElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFEDiffuseLightingElementImpl : virtual public SVGFEDiffuseLightingElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedString getIn1() - { return in1; } - - /** - * - */ - virtual SVGAnimatedNumber getSurfaceScale() - { return surfaceScale; } - - /** - * - */ - virtual SVGAnimatedNumber getDiffuseConstant() - { return diffuseConstant; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEDiffuseLightingElementImpl() {} - -protected: - - SVGAnimatedString in1; - SVGAnimatedNumber surfaceScale; - SVGAnimatedNumber diffuseConstant; - -}; - - - - - - - -/*######################################################################### -## SVGFEDistantLightElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFEDistantLightElementImpl : virtual public SVGFEDistantLightElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedNumber getAzimuth() - { return azimuth; } - - - /** - * - */ - virtual SVGAnimatedNumber getElevation() - { return elevation; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEDistantLightElementImpl() {} - -protected: - - SVGAnimatedNumber azimuth; - SVGAnimatedNumber elevation; - -}; - - - - - - - -/*######################################################################### -## SVGFEPointLightElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFEPointLightElementImpl : public virtual SVGFEPointLightElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedNumber getX() - { return x; } - - - /** - * - */ - virtual SVGAnimatedNumber getY() - { return y; } - - /** - * - */ - virtual SVGAnimatedNumber getZ() - { return z; } - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEPointLightElementImpl() {} - -protected: - - SVGAnimatedNumber x, y, z; - -}; - - - - - - - -/*######################################################################### -## SVGFESpotLightElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFESpotLightElementImpl : virtual public SVGFESpotLightElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedNumber getX() - { return x; } - - - /** - * - */ - virtual SVGAnimatedNumber getY() - { return y; } - - /** - * - */ - virtual SVGAnimatedNumber getZ() - { return z; } - - /** - * - */ - virtual SVGAnimatedNumber getPointsAtX() - { return pointsAtX; } - - /** - * - */ - virtual SVGAnimatedNumber getPointsAtY() - { return pointsAtY; } - - /** - * - */ - virtual SVGAnimatedNumber getPointsAtZ() - { return pointsAtZ; } - - /** - * - */ - virtual SVGAnimatedNumber getSpecularExponent() - { return specularExponent; } - - /** - * - */ - virtual SVGAnimatedNumber getLimitingConeAngle() - { return limitingConeAngle; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFESpotLightElementImpl() {} - -protected: - - SVGAnimatedNumber x, y, z; - SVGAnimatedNumber pointsAtX, pointsAtY, pointsAtZ; - SVGAnimatedNumber specularExponent; - SVGAnimatedNumber limitingConeAngle; -}; - - - - - - - -/*######################################################################### -## SVGFEDisplacementMapElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFEDisplacementMapElementImpl : virtual public SVGFEDisplacementMapElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedString getIn1() - { return in1; } - - /** - * - */ - virtual SVGAnimatedString getIn2() - { return in2; } - - - /** - * - */ - virtual SVGAnimatedNumber getScale() - { return scale; } - - /** - * - */ - virtual SVGAnimatedEnumeration getXChannelSelector() - { return xChannelSelector; } - - /** - * - */ - virtual SVGAnimatedEnumeration getYChannelSelector() - { return yChannelSelector; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEDisplacementMapElementImpl() {} - -protected: - - SVGAnimatedString in1; - SVGAnimatedString in2; - SVGAnimatedNumber scale; - SVGAnimatedEnumeration xChannelSelector; - SVGAnimatedEnumeration yChannelSelector; - -}; - - - - - - - -/*######################################################################### -## SVGFEFloodElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFEFloodElementImpl : virtual public SVGFEFloodElement, - public SVGElementImpl -{ -public: - /** - * - */ - virtual SVGAnimatedString getIn1() - { return in1; } - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEFloodElementImpl() {} - -protected: - - SVGAnimatedString in1; - -}; - - - - - - - -/*######################################################################### -## SVGFEGaussianBlurElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFEGaussianBlurElementImpl : virtual public SVGFEGaussianBlurElement, - public SVGElementImpl -{ -public: - /** - * - */ - virtual SVGAnimatedString getIn1() - { return in1; } - - - /** - * - */ - virtual SVGAnimatedNumber getStdDeviationX() - { return stdDeviationX; } - - /** - * - */ - virtual SVGAnimatedNumber getStdDeviationY() - { return stdDeviationY; } - - - /** - * - */ - virtual void setStdDeviation (double stdDeviationXArg, double stdDeviationYArg ) - { - stdDeviationX = stdDeviationXArg; - stdDeviationY = stdDeviationYArg; - } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEGaussianBlurElementImpl() {} - -protected: - - SVGAnimatedString in1; - SVGAnimatedNumber stdDeviationX, stdDeviationY; - -}; - - - - - - - -/*######################################################################### -## SVGFEImageElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFEImageElementImpl : virtual public SVGFEImageElement, - public SVGElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEImageElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGFEMergeElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFEMergeElementImpl : virtual public SVGFEMergeElement, - public SVGElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEMergeElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGFEMergeNodeElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFEMergeNodeElementImpl : virtual public SVGFEMergeNodeElement, - public SVGElementImpl -{ -public: - /** - * - */ - virtual SVGAnimatedString getIn1() - { return in1; } - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEMergeNodeElementImpl() {} - -protected: - - SVGAnimatedString in1; - -}; - - - - - - - -/*######################################################################### -## SVGFEMorphologyElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFEMorphologyElementImpl : virtual public SVGFEMorphologyElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedString getIn1() - { return in1; } - - - /** - * - */ - virtual SVGAnimatedEnumeration getOperator() - { return me_operator; } - - /** - * - */ - virtual SVGAnimatedLength getRadiusX() - { return radiusX; } - - /** - * - */ - virtual SVGAnimatedLength getRadiusY() - { return radiusY; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEMorphologyElementImpl() {} - -protected: - - SVGAnimatedString in1; - SVGAnimatedEnumeration me_operator; - SVGAnimatedLength radiusX; - SVGAnimatedLength radiusY; - -}; - - - - - - - -/*######################################################################### -## SVGFEOffsetElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFEOffsetElementImpl : virtual public SVGFEOffsetElement, - public SVGElementImpl -{ -public: - - - - /** - * - */ - virtual SVGAnimatedString getIn1() - { return in1; } - - /** - * - */ - virtual SVGAnimatedLength getDx() - { return dx; } - - /** - * - */ - virtual SVGAnimatedLength getDy() - { return dy; } - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFEOffsetElementImpl() {} - -protected: - - SVGAnimatedString in1; - SVGAnimatedLength dx, dy; - -}; - - - - - - - -/*######################################################################### -## SVGFESpecularLightingElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFESpecularLightingElementImpl : - virtual public SVGFESpecularLightingElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedString getIn1() - { return in1; } - - /** - * - */ - virtual SVGAnimatedNumber getSurfaceScale() - { return surfaceScale; } - - /** - * - */ - virtual SVGAnimatedNumber getSpecularConstant() - { return specularConstant; } - - /** - * - */ - virtual SVGAnimatedNumber getSpecularExponent() - { return specularExponent; } - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFESpecularLightingElementImpl() {} - -protected: - - SVGAnimatedString in1; - SVGAnimatedNumber surfaceScale; - SVGAnimatedNumber specularConstant; - SVGAnimatedNumber specularExponent; -}; - - - - - - - -/*######################################################################### -## SVGFETileElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFETileElementImpl : virtual public SVGFETileElement, - public SVGElementImpl -{ -public: - - - /** - * - */ - virtual SVGAnimatedString getIn1() - { return in1; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFETileElementImpl() {} - -protected: - - SVGAnimatedString in1; - -}; - - - - - - - -/*######################################################################### -## SVGFETurbulenceElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFETurbulenceElementImpl : virtual public SVGFETurbulenceElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedNumber getBaseFrequencyX() - { return baseFrequencyX; } - - /** - * - */ - virtual SVGAnimatedNumber getBaseFrequencyY() - { return baseFrequencyY; } - - /** - * - */ - virtual SVGAnimatedInteger getNumOctaves() - { return numOctaves; } - - /** - * - */ - virtual SVGAnimatedNumber getSeed() - { return seed; } - - /** - * - */ - virtual SVGAnimatedEnumeration getStitchTiles() - { return stitchTiles; } - - /** - * - */ - virtual SVGAnimatedEnumeration getType() - { return type; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFETurbulenceElementImpl() {} - -protected: - - SVGAnimatedNumber baseFrequencyX; - SVGAnimatedNumber baseFrequencyY; - SVGAnimatedInteger numOctaves; - SVGAnimatedNumber seed; - SVGAnimatedEnumeration stitchTiles; - SVGAnimatedEnumeration type; - -}; - - - - - - - -/*######################################################################### -## SVGCursorElementImpl -#########################################################################*/ - -/** - * - */ -class SVGCursorElementImpl : virtual public SVGCursorElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedLength getX() - { return x; } - - /** - * - */ - virtual SVGAnimatedLength getY() - { return x; } - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGCursorElementImpl() {} - -protected: - - SVGAnimatedLength x, y; -}; - - - - - - - -/*######################################################################### -## SVGAElementImpl -#########################################################################*/ - -/** - * - */ -class SVGAElementImpl : virtual public SVGAElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGAnimatedString getTarget() - { return target; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGAElementImpl() {} - -protected: - - SVGAnimatedString target; -}; - - - - - - - -/*######################################################################### -## SVGViewElementImpl -#########################################################################*/ - -/** - * - */ -class SVGViewElementImpl : virtual public SVGViewElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual SVGStringList getViewTarget() - { return viewTarget; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGViewElementImpl() {} - -protected: - - SVGStringList viewTarget; -}; - - - - - - - -/*######################################################################### -## SVGScriptElementImpl -#########################################################################*/ - -/** - * - */ -class SVGScriptElementImpl : virtual public SVGScriptElement, - public SVGElementImpl -{ -public: - - /** - * - */ - virtual DOMString getType() - { return type; } - - /** - * - */ - virtual void setType(const DOMString &val) throw (DOMException) - { type = val; } - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGScriptElementImpl() {} - -protected: - - DOMString type; -}; - - - - - - -/*######################################################################### -## SVGAnimationElementImpl -#########################################################################*/ - -/** - * - */ -class SVGAnimationElementImpl : virtual public SVGAnimationElement, - public SVGElementImpl -{ -public: - - - /** - * - */ - virtual SVGElement *getTargetElement() - { return targetElement; } - - - /** - * - */ - virtual double getStartTime ( ) - { return startTime; } - - /** - * - */ - virtual double getCurrentTime ( ) - { return currentTime; } - - /** - * - */ - virtual double getSimpleDuration ( ) throw( DOMException ) - { return simpleDuration; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGAnimationElementImpl() {} - -protected: - - SVGElement *targetElement; - double startTime, currentTime, simpleDuration; -}; - - - - - - - -/*######################################################################### -## SVGAnimateElementImpl -#########################################################################*/ - -/** - * - */ -class SVGAnimateElementImpl : virtual public SVGAnimateElement, - public SVGAnimationElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGAnimateElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGSetElementImpl -#########################################################################*/ - -/** - * - */ -class SVGSetElementImpl : virtual public SVGSetElement, - public SVGAnimationElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGSetElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGAnimateMotionElementImpl -#########################################################################*/ - -/** - * - */ -class SVGAnimateMotionElementImpl : virtual public SVGAnimateMotionElement, - public SVGAnimationElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGAnimateMotionElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGMPathElementImpl -#########################################################################*/ - -/** - * - */ -class SVGMPathElementImpl : virtual public SVGMPathElement, - public SVGElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGMPathElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGAnimateColorElementImpl -#########################################################################*/ - -/** - * - */ -class SVGAnimateColorElementImpl : virtual public SVGAnimateColorElement, - public SVGAnimationElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGAnimateColorElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGAnimateTransformElementImpl -#########################################################################*/ - -/** - * - */ -class SVGAnimateTransformElementImpl : virtual public SVGAnimateTransformElement, - public SVGAnimationElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGAnimateTransformElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGFontElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFontElementImpl : virtual public SVGFontElement, - public SVGElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFontElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGGlyphElementImpl -#########################################################################*/ - -/** - * - */ -class SVGGlyphElementImpl : virtual public SVGGlyphElement, - public SVGElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGGlyphElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGMissingGlyphElementImpl -#########################################################################*/ - -/** - * - */ -class SVGMissingGlyphElementImpl : virtual public SVGMissingGlyphElement, - public SVGElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGMissingGlyphElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGHKernElementImpl -#########################################################################*/ - -/** - * - */ -class SVGHKernElementImpl : virtual public SVGHKernElement, - public SVGElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGHKernElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGVKernElementImpl -#########################################################################*/ - -/** - * - */ -class SVGVKernElementImpl : virtual public SVGVKernElement, - public SVGElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGVKernElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGFontFaceElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFontFaceElementImpl : virtual public SVGFontFaceElement, - public SVGElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFontFaceElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGFontFaceSrcElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFontFaceSrcElementImpl : virtual public SVGFontFaceSrcElement, - public SVGElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFontFaceSrcElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGFontFaceUriElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFontFaceUriElementImpl : virtual public SVGFontFaceUriElement, - public SVGElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFontFaceUriElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGFontFaceFormatElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFontFaceFormatElementImpl : virtual public SVGFontFaceFormatElement, - public SVGElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFontFaceFormatElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGFontFaceNameElementImpl -#########################################################################*/ - -/** - * - */ -class SVGFontFaceNameElementImpl : virtual public SVGFontFaceNameElement, - public SVGElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGFontFaceNameElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGDefinitionSrcElementImpl -#########################################################################*/ - -/** - * - */ -class SVGDefinitionSrcElementImpl : virtual public SVGDefinitionSrcElement, - public SVGElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGDefinitionSrcElementImpl() {} - -protected: - - -}; - - - - - -/*######################################################################### -## SVGMetadataElementImpl -#########################################################################*/ - -/** - * - */ -class SVGMetadataElementImpl : virtual public SVGMetadataElement, - public SVGElementImpl -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - virtual ~SVGMetadataElementImpl() {} - -protected: - - -}; - - - - -/*######################################################################### -## SVGForeignObjectElementImpl -#########################################################################*/ - -/** - * - */ -class SVGForeignObjectElementImpl : virtual public SVGForeignObjectElement, - public SVGElementImpl -{ -public: - - - /** - * - */ - virtual SVGAnimatedLength getX() - { return x; } - - /** - * - */ - virtual SVGAnimatedLength getY() - { return y; } - - /** - * - */ - virtual SVGAnimatedLength getWidth() - { return width; } - - /** - * - */ - virtual SVGAnimatedLength getHeight() - { return height; } - - - - //################## - //# Non-API methods - //################## - - - /** - * - */ - virtual ~SVGForeignObjectElementImpl() {} - -protected: - - SVGAnimatedLength x, y, width, height; -}; - - - - - - -} //namespace svg -} //namespace dom -} //namespace w3c -} //namespace org - -#endif // __SVG_H__ -/*######################################################################### -## E N D O F F I L E -#########################################################################*/ - +#ifndef __SVGIMPL_H__ +#define __SVGIMPL_H__ + +/** + * Phoebe DOM Implementation. + * + * This is a C++ approximation of the W3C DOM model, which follows + * fairly closely the specifications in the various .idl files, copies of + * which are provided for reference. Most important is this one: + * + * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2006 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +#include "svg.h" +#include "dom/domimpl.h" +#include "dom/smilimpl.h" + +#include + + + +namespace org +{ +namespace w3c +{ +namespace dom +{ +namespace svg +{ + + +//local definitions +typedef dom::DOMString DOMString; +typedef dom::DOMException DOMException; +typedef dom::Element Element; +typedef dom::Document Document; +typedef dom::NodeList NodeList; + + + +class SVGSVGElementImpl; + +/*######################################################################### +## SVGDocumentImpl +#########################################################################*/ + +/** + * + */ +class SVGDocumentImpl : virtual public SVGDocument, public DocumentImpl +{ +public: + + + /** + * + */ + virtual DOMString getTitle() + { return title; } + + /** + * + */ + virtual DOMString getReferrer() + { return referrer; } + + /** + * + */ + virtual DOMString getDomain() + { return domain; } + + /** + * + */ + virtual DOMString getURL() + { return url; } + + /** + * + */ + virtual SVGSVGElement *getRootElement() + { return rootElement; } + + + //#################################################### + //# Overload some createXXX() methods from DocumentImpl, + //# To create our SVG-DOM types (in .cpp) + //#################################################### + + /** + * + */ + virtual Element *createElement(const DOMString& tagName) + throw(DOMException); + + + /** + * + */ + virtual Element *createElementNS(const DOMString& namespaceURI, + const DOMString& qualifiedName) + throw(DOMException); + + //################## + //# Non-API methods + //################## + + SVGDocumentImpl(const DOMImplementation *domImpl, + const DOMString &namespaceURI, + const DOMString &qualifiedName, + const DocumentType *doctype) + : DocumentImpl(domImpl, namespaceURI, + qualifiedName, doctype) + { + init(); + } + + + /** + * + */ + virtual ~SVGDocumentImpl() + { + if (rootElement) + delete rootElement; + } + +protected: + +friend class SvgParser; + + void init() + { + title = ""; + referrer = ""; + domain = ""; + rootElement = NULL; + } + + DOMString title; + DOMString referrer; + DOMString domain; + DOMString url; + SVGSVGElement *rootElement; +}; + + + +/*######################################################################### +## SVGElementImpl +#########################################################################*/ + +/** + * + */ +class SVGElementImpl : virtual public SVGElement, + public ElementImpl +{ +public: + + /** + * + */ + virtual DOMString getId() + { return id; } + + /** + * + */ + virtual void setId(const DOMString &val) + throw (DOMException) + { id = val; } + + /** + * + */ + virtual DOMString getXmlBase() + { return xmlBase; } + + /** + * + */ + virtual void setXmlBase(const DOMString &val) + throw (DOMException) + { xmlBase = val; } + + /** + * + */ + virtual SVGSVGElement *getOwnerSVGElement() + { return ownerSvgElement; } + + /** + * + */ + virtual SVGElement *getViewportElement() + { return viewportElement; } + + + //################## + //# Non-API methods + //################## + + + /** + * + */ + SVGElementImpl() + {} + + /** + * + */ + SVGElementImpl(SVGDocumentImpl *owner, const DOMString &tagName) + : ElementImpl(owner, tagName) + { init(); } + + /** + * + */ + SVGElementImpl(SVGDocumentImpl *owner, + const DOMString &namespaceURI, + const DOMString &tagName) + : ElementImpl(owner, namespaceURI, tagName) + { init(); } + + + /** + * + */ + virtual ~SVGElementImpl() + {} + +protected: + + void init() + { + id = ""; + xmlBase = ""; + ownerSvgElement = NULL; + viewportElement = NULL; + } + + DOMString id; + DOMString xmlBase; + SVGSVGElement *ownerSvgElement; + SVGElement *viewportElement; + +}; + + + +/*######################################################################### +## SVGSVGElementImpl +#########################################################################*/ + +/** + * + */ +class SVGSVGElementImpl : virtual public SVGSVGElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedLength getX() + { return x; } + + /** + * + */ + virtual SVGAnimatedLength getY() + { return y; } + + /** + * + */ + virtual SVGAnimatedLength getWidth() + { return width; } + + /** + * + */ + virtual SVGAnimatedLength getHeight() + { return height; } + + /** + * + */ + virtual DOMString getContentScriptType() + { return contentScriptType; } + + /** + * + */ + virtual void setContentScriptType(const DOMString &val) + throw (DOMException) + { contentScriptType = val; } + + + /** + * + */ + virtual DOMString getContentStyleType() + { return contentStyleType; } + + /** + * + */ + virtual void setContentStyleType(const DOMString &val) + throw (DOMException) + { contentStyleType = val; } + + /** + * + */ + virtual SVGRect getViewport() + { return viewport; } + + /** + * + */ + virtual double getPixelUnitToMillimeterX() + { return pixelUnitToMillimeterX; } + + /** + * + */ + virtual double getPixelUnitToMillimeterY() + { return pixelUnitToMillimeterY; } + + /** + * + */ + virtual double getScreenPixelToMillimeterX() + { return screenPixelToMillimeterX; } + + /** + * + */ + virtual double getScreenPixelToMillimeterY() + { return screenPixelToMillimeterY; } + + + /** + * + */ + virtual bool getUseCurrentView() + { return useCurrentView; } + + /** + * + */ + virtual void setUseCurrentView(bool val) throw (DOMException) + { useCurrentView = val; } + + /** + * + */ + virtual SVGViewSpec getCurrentView() + { return currentView; } + + + /** + * + */ + virtual double getCurrentScale() + { return currentScale; } + + /** + * + */ + virtual void setCurrentScale(double val) throw (DOMException) + { currentScale = val; } + + + /** + * + */ + virtual SVGPoint getCurrentTranslate() + { return currentTranslate; } + + + /** + * + */ + virtual unsigned long suspendRedraw (unsigned long max_wait_milliseconds ); + + /** + * + */ + virtual void unsuspendRedraw (unsigned long suspend_handle_id ) + throw( DOMException ); + + /** + * + */ + virtual void unsuspendRedrawAll ( ); + + /** + * + */ + virtual void forceRedraw ( ); + + /** + * + */ + virtual void pauseAnimations ( ); + + /** + * + */ + virtual void unpauseAnimations ( ); + + /** + * + */ + virtual bool animationsPaused ( ); + + /** + * + */ + virtual double getCurrentTime ( ) + { return currentTime; } + + /** + * + */ + virtual void setCurrentTime (double seconds ) + { currentTime = seconds; } + + /** + * + */ + virtual NodeList getIntersectionList (const SVGRect &rect, + const SVGElement *referenceElement ); + + /** + * + */ + virtual NodeList getEnclosureList (const SVGRect &rect, + const SVGElement *referenceElement ); + + /** + * + */ + virtual bool checkIntersection (const SVGElement *element, const SVGRect &rect ); + + /** + * + */ + virtual bool checkEnclosure (const SVGElement *element, const SVGRect &rect ); + + /** + * + */ + virtual void deselectAll ( ); + + /** + * + */ + virtual SVGNumber createSVGNumber ( ) + { + SVGNumber ret; + return ret; + } + + /** + * + */ + virtual SVGLength createSVGLength ( ) + { + SVGLength ret; + return ret; + } + + /** + * + */ + virtual SVGAngle createSVGAngle ( ) + { + SVGAngle ret; + return ret; + } + + /** + * + */ + virtual SVGPoint createSVGPoint ( ) + { + SVGPoint ret; + return ret; + } + + /** + * + */ + virtual SVGMatrix createSVGMatrix ( ) + { + SVGMatrix ret; + return ret; + } + + /** + * + */ + virtual SVGRect createSVGRect ( ) + { + SVGRect ret; + return ret; + } + + /** + * + */ + virtual SVGTransform createSVGTransform ( ) + { + SVGTransform ret; + return ret; + } + + /** + * + */ + virtual SVGTransform createSVGTransformFromMatrix(const SVGMatrix &matrix ) + { + SVGTransform ret; + ret.setMatrix(matrix); + return ret; + } + + + /** + * + */ + virtual Element *getElementById (const DOMString& elementId ); + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGSVGElementImpl() : SVGElementImpl() + {} + + + + /** + * + */ + virtual ~SVGSVGElementImpl() {} + +protected: + + SVGAnimatedLength x; + SVGAnimatedLength y; + SVGAnimatedLength width; + SVGAnimatedLength height; + DOMString contentScriptType; + DOMString contentStyleType; + SVGRect viewport; + double pixelUnitToMillimeterX; + double pixelUnitToMillimeterY; + double screenPixelToMillimeterX; + double screenPixelToMillimeterY; + bool useCurrentView; + SVGViewSpec currentView; + double currentScale; + SVGPoint currentTranslate; + + double currentTime; + +}; + + + +/*######################################################################### +## SVGGElementImpl +#########################################################################*/ + +/** + * + */ +class SVGGElementImpl : virtual public SVGGElement, public SVGElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGGElementImpl() {} + + /** + * + */ + virtual ~SVGGElementImpl() {} + +protected: + + +}; + + + + +/*######################################################################### +## SVGDefsElementImpl +#########################################################################*/ + +/** + * + */ +class SVGDefsElementImpl : virtual public SVGDefsElement, + public SVGElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGDefsElementImpl() {} + + /** + * + */ + virtual ~SVGDefsElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGDescElementImpl +#########################################################################*/ + +/** + * + */ +class SVGDescElementImpl : virtual public SVGDescElement, + public SVGElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGDescElementImpl() {} + + /** + * + */ + virtual ~SVGDescElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGTitleElementImpl +#########################################################################*/ + +/** + * + */ +class SVGTitleElementImpl : virtual public SVGTitleElement, + public SVGElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGTitleElementImpl() {} + + /** + * + */ + virtual ~SVGTitleElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGSymbolElementImpl +#########################################################################*/ + +/** + * + */ +class SVGSymbolElementImpl : virtual public SVGSymbolElement, + public SVGElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGSymbolElementImpl() {} + + /** + * + */ + virtual ~SVGSymbolElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGUseElementImpl +#########################################################################*/ + +/** + * + */ +class SVGUseElementImpl : public SVGElementImpl +{ +public: + + + /** + * + */ + virtual SVGAnimatedLength getX() + { return x; } + + /** + * + */ + virtual SVGAnimatedLength getY() + { return y; } + + /** + * + */ + virtual SVGAnimatedLength getWidth() + { return width; } + + /** + * + */ + virtual SVGAnimatedLength getHeight() + { return height; } + + /** + * + */ + virtual SVGElementInstance getInstanceRoot() + { return instanceRoot; } + + /** + * + */ + virtual SVGElementInstance getAnimatedInstanceRoot() + { return animatedInstanceRoot; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGUseElementImpl() {} + + /** + * + */ + virtual ~SVGUseElementImpl() {} + +protected: + + SVGAnimatedLength x; + SVGAnimatedLength y; + SVGAnimatedLength width; + SVGAnimatedLength height; + SVGElementInstance instanceRoot; + SVGElementInstance animatedInstanceRoot; +}; + + + + + + + +/*######################################################################### +## SVGImageElementImpl +#########################################################################*/ + +/** + * + */ +class SVGImageElementImpl : virtual public SVGImageElement, + public SVGElementImpl +{ +public: + + + /** + * + */ + virtual SVGAnimatedLength getX() + { return x; } + + /** + * + */ + virtual SVGAnimatedLength getY() + { return y; } + + /** + * + */ + virtual SVGAnimatedLength getWidth() + { return width; } + + /** + * + */ + virtual SVGAnimatedLength getHeight() + { return height; } + + + /** + * + */ + virtual SVGAnimatedPreserveAspectRatio getPreserveAspectRatio() + { return preserveAspectRatio; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGImageElementImpl() {} + + /** + * + */ + virtual ~SVGImageElementImpl() {} + +protected: + + SVGAnimatedLength x; + SVGAnimatedLength y; + SVGAnimatedLength width; + SVGAnimatedLength height; + SVGAnimatedPreserveAspectRatio preserveAspectRatio; +}; + + + + + + +/*######################################################################### +## SVGSwitchElementImpl +#########################################################################*/ + +/** + * + */ +class SVGSwitchElementImpl : virtual public SVGSwitchElement, + public SVGElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGSwitchElementImpl() {} + + /** + * + */ + virtual ~SVGSwitchElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## GetSVGDocumentImpl +#########################################################################*/ + +/** + * + */ +class GetSVGDocumentImpl : public virtual GetSVGDocument +{ +public: + + /** + * + */ + virtual SVGDocument *getSVGDocument ( ) + throw( DOMException ); + + //################## + //# Non-API methods + //################## + + /** + * + */ + GetSVGDocumentImpl() {} + + /** + * + */ + virtual ~GetSVGDocumentImpl() {} + +protected: + + +}; + + + + + + + +/*######################################################################### +## SVGStyleElementImpl +#########################################################################*/ + +/** + * + */ +class SVGStyleElementImpl : virtual public SVGStyleElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual DOMString getXmlspace() + { return xmlSpace; } + + /** + * + */ + virtual void setXmlspace(const DOMString &val) + throw (DOMException) + { xmlSpace = val; } + + /** + * + */ + virtual DOMString getType() + { return type; } + + /** + * + */ + virtual void setType(const DOMString &val) + throw (DOMException) + { type = val; } + + /** + * + */ + virtual DOMString getMedia() + { return media; } + + /** + * + */ + virtual void setMedia(const DOMString &val) + throw (DOMException) + { media = val; } + + /** + * + */ + virtual DOMString getTitle() + { return title; } + + /** + * + */ + virtual void setTitle(const DOMString &val) + throw (DOMException) + { title = val; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGStyleElementImpl() {} + + /** + * + */ + virtual ~SVGStyleElementImpl() {} + +protected: + + DOMString xmlSpace; + DOMString type; + DOMString media; + DOMString title; + +}; + + + + + + +/*######################################################################### +## SVGPathElementImpl +#########################################################################*/ + +/** + * + */ +class SVGPathElementImpl : virtual public SVGPathElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedNumber getPathLength(); + + /** + * + */ + virtual double getTotalLength ( ); + + /** + * + */ + virtual SVGPoint getPointAtLength (double distance ); + + /** + * + */ + virtual unsigned long getPathSegAtLength (double distance ); + + /** + * + */ + virtual SVGPathSegClosePath + createSVGPathSegClosePath ( ) + { + SVGPathSegClosePath ret; + return ret; + } + + /** + * + */ + virtual SVGPathSegMovetoAbs + createSVGPathSegMovetoAbs (double x, double y ) + { + SVGPathSegMovetoAbs ret(x, y); + return ret; + } + + /** + * + */ + virtual SVGPathSegMovetoRel + createSVGPathSegMovetoRel (double x, double y ) + { + SVGPathSegMovetoRel ret(x, y); + return ret; + } + + /** + * + */ + virtual SVGPathSegLinetoAbs + createSVGPathSegLinetoAbs (double x, double y ) + { + SVGPathSegLinetoAbs ret(x, y); + return ret; + } + + /** + * + */ + virtual SVGPathSegLinetoRel + createSVGPathSegLinetoRel (double x, double y ) + { + SVGPathSegLinetoRel ret(x, y); + return ret; + } + + /** + * + */ + virtual SVGPathSegCurvetoCubicAbs + createSVGPathSegCurvetoCubicAbs (double x, double y, + double x1, double y1, double x2, double y2 ) + { + SVGPathSegCurvetoCubicAbs ret(x, y, x1, y1, x2, y2); + return ret; + } + + /** + * + */ + virtual SVGPathSegCurvetoCubicRel + createSVGPathSegCurvetoCubicRel (double x, double y, + double x1, double y1, double x2, double y2 ) + { + SVGPathSegCurvetoCubicRel ret(x, y, x1, y1, x2, y2); + return ret; + } + + /** + * + */ + virtual SVGPathSegCurvetoQuadraticAbs + createSVGPathSegCurvetoQuadraticAbs (double x, double y, + double x1, double y1 ) + { + SVGPathSegCurvetoQuadraticAbs ret(x, y, x1, y1); + return ret; + } + + /** + * + */ + virtual SVGPathSegCurvetoQuadraticRel + createSVGPathSegCurvetoQuadraticRel (double x, double y, + double x1, double y1 ) + { + SVGPathSegCurvetoQuadraticRel ret(x, y, x1, y1); + return ret; + } + + /** + * + */ + virtual SVGPathSegArcAbs + createSVGPathSegArcAbs (double x, double y, + double r1, double r2, double angle, + bool largeArcFlag, bool sweepFlag ) + { + SVGPathSegArcAbs ret(x, y, r1, r2, angle, largeArcFlag, sweepFlag); + return ret; + } + + /** + * + */ + virtual SVGPathSegArcRel + createSVGPathSegArcRel (double x, double y, double r1, + double r2, double angle, bool largeArcFlag, + bool sweepFlag ) + { + SVGPathSegArcRel ret(x, y, r1, r2, angle, largeArcFlag, sweepFlag); + return ret; + } + + /** + * + */ + virtual SVGPathSegLinetoHorizontalAbs + createSVGPathSegLinetoHorizontalAbs (double x ) + { + SVGPathSegLinetoHorizontalAbs ret(x); + return ret; + } + + /** + * + */ + virtual SVGPathSegLinetoHorizontalRel + createSVGPathSegLinetoHorizontalRel (double x ) + { + SVGPathSegLinetoHorizontalRel ret(x); + return ret; + } + + /** + * + */ + virtual SVGPathSegLinetoVerticalAbs + createSVGPathSegLinetoVerticalAbs (double y ) + { + SVGPathSegLinetoVerticalAbs ret(y); + return ret; + } + + /** + * + */ + virtual SVGPathSegLinetoVerticalRel + createSVGPathSegLinetoVerticalRel (double y ) + { + SVGPathSegLinetoVerticalRel ret(y); + return ret; + } + + /** + * + */ + virtual SVGPathSegCurvetoCubicSmoothAbs + createSVGPathSegCurvetoCubicSmoothAbs (double x, double y, + double x2, double y2 ) + { + SVGPathSegCurvetoCubicSmoothAbs ret(x, y, x2, y2); + return ret; + } + + /** + * + */ + virtual SVGPathSegCurvetoCubicSmoothRel + createSVGPathSegCurvetoCubicSmoothRel (double x, double y, + double x2, double y2 ) + { + SVGPathSegCurvetoCubicSmoothRel ret(x, y, x2, y2); + return ret; + } + + /** + * + */ + virtual SVGPathSegCurvetoQuadraticSmoothAbs + createSVGPathSegCurvetoQuadraticSmoothAbs (double x, double y ) + { + SVGPathSegCurvetoQuadraticSmoothAbs ret(x, y); + return ret; + } + + /** + * + */ + virtual SVGPathSegCurvetoQuadraticSmoothRel + createSVGPathSegCurvetoQuadraticSmoothRel (double x, double y ) + { + SVGPathSegCurvetoQuadraticSmoothRel ret(x, y); + return ret; + } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGPathElementImpl() {} + + + /** + * + */ + virtual ~SVGPathElementImpl() {} + +protected: + + +}; + + + + + + + +/*######################################################################### +## SVGRectElementImpl +#########################################################################*/ + +/** + * + */ +class SVGRectElementImpl : virtual public SVGRectElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedLength getX() + { return x; } + + /** + * + */ + virtual SVGAnimatedLength getY() + { return y; } + + /** + * + */ + virtual SVGAnimatedLength getWidth() + { return width; } + + /** + * + */ + virtual SVGAnimatedLength getHeight() + { return height; } + + + /** + * + */ + virtual SVGAnimatedLength getRx() + { return rx; } + + /** + * + */ + virtual SVGAnimatedLength getRy() + { return ry; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGRectElementImpl() {} + + /** + * + */ + virtual ~SVGRectElementImpl() {} + +protected: + + SVGAnimatedLength x; + SVGAnimatedLength y; + SVGAnimatedLength width; + SVGAnimatedLength height; + SVGAnimatedLength rx; + SVGAnimatedLength ry; + +}; + + + + + + +/*######################################################################### +## SVGCircleElementImpl +#########################################################################*/ + +/** + * + */ +class SVGCircleElementImpl : virtual public SVGCircleElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedLength getCx() + { return cx; } + + /** + * + */ + virtual SVGAnimatedLength getCy() + { return cy; } + + /** + * + */ + virtual SVGAnimatedLength getR() + { return r; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGCircleElementImpl() {} + + /** + * + */ + virtual ~SVGCircleElementImpl() {} + +protected: + + SVGAnimatedLength cx; + SVGAnimatedLength cy; + SVGAnimatedLength r; +}; + + + + + + +/*######################################################################### +## SVGEllipseElementImpl +#########################################################################*/ + +/** + * + */ +class SVGEllipseElementImpl : virtual public SVGEllipseElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedLength getCx() + { return cx; } + + /** + * + */ + virtual SVGAnimatedLength getCy() + { return cy; } + + /** + * + */ + virtual SVGAnimatedLength getRx() + { return rx; } + + /** + * + */ + virtual SVGAnimatedLength getRy() + { return ry; } + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGEllipseElementImpl() {} + + /** + * + */ + virtual ~SVGEllipseElementImpl() {} + +protected: + + SVGAnimatedLength cx; + SVGAnimatedLength cy; + SVGAnimatedLength rx; + SVGAnimatedLength ry; +}; + + + + + + +/*######################################################################### +## SVGLineElement +#########################################################################*/ + +/** + * + */ +class SVGLineElementImpl : virtual public SVGLineElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedLength getX1() + { return x1; } + + /** + * + */ + virtual SVGAnimatedLength getY1() + { return y1; } + + /** + * + */ + virtual SVGAnimatedLength getX2() + { return x2; } + + /** + * + */ + virtual SVGAnimatedLength getY2() + { return y2; } + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGLineElementImpl() {} + +protected: + + SVGAnimatedLength x1; + SVGAnimatedLength x2; + SVGAnimatedLength y1; + SVGAnimatedLength y2; +}; + + + + +/*######################################################################### +## SVGPolylineElement +#########################################################################*/ + +/** + * + */ +class SVGPolylineElementImpl : virtual public SVGPolylineElement, + public SVGElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGPolylineElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGPolygonElementImpl +#########################################################################*/ + +/** + * + */ +class SVGPolygonElementImpl : virtual public SVGPolygonElement, + public SVGElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGPolygonElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGTextContentElement +#########################################################################*/ + +/** + * + */ +class SVGTextContentElementImpl : virtual public SVGTextContentElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedLength getTextLength(); + + + /** + * + */ + virtual SVGAnimatedEnumeration getLengthAdjust(); + + + /** + * + */ + virtual long getNumberOfChars ( ); + + /** + * + */ + virtual double getComputedTextLength ( ); + + /** + * + */ + virtual double getSubStringLength (unsigned long charnum, unsigned long nchars ) + throw( DOMException ); + + /** + * + */ + virtual SVGPoint getStartPositionOfChar (unsigned long charnum ) + throw( DOMException ); + + /** + * + */ + virtual SVGPoint getEndPositionOfChar (unsigned long charnum ) + throw( DOMException ); + + /** + * + */ + virtual SVGRect getExtentOfChar (unsigned long charnum ) + throw( DOMException ); + + /** + * + */ + virtual double getRotationOfChar (unsigned long charnum ) + throw( DOMException ); + + /** + * + */ + virtual long getCharNumAtPosition (const SVGPoint &point ); + + /** + * + */ + virtual void selectSubString (unsigned long charnum, unsigned long nchars ) + throw( DOMException ); + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGTextContentElementImpl() {} + +protected: + + +}; + + + + + + +/*######################################################################### +## SVGTextPositioningElementImpl +#########################################################################*/ + +/** + * + */ +class SVGTextPositioningElementImpl : virtual public SVGTextPositioningElement, + public SVGTextContentElementImpl +{ +public: + + + + /** + * + */ + virtual SVGAnimatedLength getX() + { return x; } + + /** + * + */ + virtual SVGAnimatedLength getY() + { return y; } + + /** + * + */ + virtual SVGAnimatedLength getDx() + { return dx; } + + /** + * + */ + virtual SVGAnimatedLength getDy() + { return dy; } + + + /** + * + */ + virtual SVGAnimatedNumberList getRotate() + { return rotate; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGTextPositioningElementImpl() {} + +protected: + + SVGAnimatedLength x; + SVGAnimatedLength y; + SVGAnimatedLength dx; + SVGAnimatedLength dy; + SVGAnimatedNumberList rotate; + +}; + + + + + + + +/*######################################################################### +## SVGTextElement +#########################################################################*/ + +/** + * + */ +class SVGTextElementImpl : virtual public SVGTextElement, + public SVGTextPositioningElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGTextElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGTSpanElement +#########################################################################*/ + +/** + * + */ +class SVGTSpanElementImpl : virtual public SVGTSpanElement, + public SVGTextPositioningElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGTSpanElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGTRefElement +#########################################################################*/ + +/** + * + */ +class SVGTRefElementImpl : virtual public SVGTRefElement, + public SVGTextPositioningElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGTRefElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGTextPathElement +#########################################################################*/ + +/** + * + */ +class SVGTextPathElementImpl : virtual public SVGTextPathElement, + public SVGTextContentElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedLength getStartOffset() + { return startOffset; } + + /** + * + */ + virtual SVGAnimatedEnumeration getMethod() + { return method; } + + /** + * + */ + virtual SVGAnimatedEnumeration getSpacing() + { return spacing; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGTextPathElementImpl() {} + +protected: + + SVGAnimatedLength startOffset; + SVGAnimatedEnumeration method; + SVGAnimatedEnumeration spacing; +}; + + + + + + + +/*######################################################################### +## SVGAltGlyphElement +#########################################################################*/ + +/** + * + */ +class SVGAltGlyphElementImpl : virtual public SVGAltGlyphElement, + public SVGTextPositioningElementImpl +{ +public: + + /** + * + */ + virtual DOMString getGlyphRef() + { return glyphRef; } + + /** + * + */ + virtual void setGlyphRef(const DOMString &val) + throw (DOMException) + { glyphRef = val; } + + /** + * + */ + virtual DOMString getFormat() + { return format; } + + /** + * + */ + virtual void setFormat(const DOMString &val) + throw (DOMException) + { format = val; } + + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGAltGlyphElementImpl() {} + +protected: + + DOMString glyphRef; + DOMString format; + +}; + + + + + + + +/*######################################################################### +## SVGAltGlyphDefElementImpl +#########################################################################*/ + +/** + * + */ +class SVGAltGlyphDefElementImpl : virtual public SVGAltGlyphDefElement, + public SVGElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGAltGlyphDefElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGAltGlyphItemElementImpl +#########################################################################*/ + +/** + * + */ +class SVGAltGlyphItemElementImpl : virtual public SVGAltGlyphItemElement, + public SVGElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGAltGlyphItemElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGGlyphRefElementImpl +#########################################################################*/ + +/** + * + */ +class SVGGlyphRefElementImpl : virtual public SVGGlyphRefElement, + public SVGElementImpl +{ +public: + /** + * + */ + virtual DOMString getGlyphRef() + { return glyphRef; } + + /** + * + */ + virtual void setGlyphRef(const DOMString &val) throw (DOMException) + { glyphRef = val; } + + /** + * + */ + virtual DOMString getFormat() + { return format; } + + /** + * + */ + virtual void setFormat(const DOMString &val) throw (DOMException) + { format = val; } + + /** + * + */ + virtual double getX() + { return x; } + + /** + * + */ + virtual void setX(double val) throw (DOMException) + { x = val; } + + /** + * + */ + virtual double getY() + { return y; } + + /** + * + */ + virtual void setY(double val) throw (DOMException) + { y = val; } + + /** + * + */ + virtual double getDx() + { return dx; } + + /** + * + */ + virtual void setDx(double val) throw (DOMException) + { dx = val; } + + /** + * + */ + virtual double getDy() + { return dy; } + + /** + * + */ + virtual void setDy(double val) throw (DOMException) + { dy = val; } + + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGGlyphRefElementImpl() {} + +protected: + + DOMString glyphRef; + DOMString format; + double x, y, dx, dy; + +}; + + + + + + +/*######################################################################### +## SVGMarkerElementImpl +#########################################################################*/ + +/** + * + */ +class SVGMarkerElementImpl : virtual public SVGMarkerElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedLength getRefX() + { return refX; } + + /** + * + */ + virtual SVGAnimatedLength getRefY() + { return refY; } + + /** + * + */ + virtual SVGAnimatedEnumeration getMarkerUnits() + { return markerUnits; } + + /** + * + */ + virtual SVGAnimatedLength getMarkerWidth() + { return markerWidth; } + + /** + * + */ + virtual SVGAnimatedLength getMarkerHeight() + { return markerHeight; } + + /** + * + */ + virtual SVGAnimatedEnumeration getOrientType() + { return orientType; } + + /** + * + */ + virtual SVGAnimatedAngle getOrientAngle() + { return orientAngle; } + + + /** + * + */ + virtual void setOrientToAuto ( ) + { orientAuto = true; } + + /** + * + */ + virtual void setOrientToAngle (const SVGAngle &angle) + { + orientAuto = false; + orientAngle = SVGAnimatedAngle(angle); + } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGMarkerElementImpl() {} + +protected: + + SVGAnimatedLength refX; + SVGAnimatedLength refY; + SVGAnimatedEnumeration markerUnits; + SVGAnimatedLength markerWidth; + SVGAnimatedLength markerHeight; + SVGAnimatedEnumeration orientType; + SVGAnimatedAngle orientAngle; + bool orientAuto; + + +}; + + + + + + + +/*######################################################################### +## SVGColorProfileElementImpl +#########################################################################*/ + +/** + * + */ +class SVGColorProfileElementImpl : virtual public SVGColorProfileElement, + public SVGElementImpl +{ +public: + /** + * + */ + virtual DOMString getLocal() + { return local; } + + /** + * + */ + virtual void setLocal(const DOMString &val) throw (DOMException) + { local = val; } + + /** + * + */ + virtual DOMString getName() + { return name; } + + /** + * + */ + virtual void setName(const DOMString &val) throw (DOMException) + { name = val; } + + /** + * + */ + virtual unsigned short getRenderingIntent() + { return renderingIntent; } + + /** + * + */ + virtual void setRenderingIntent(unsigned short val) throw (DOMException) + { renderingIntent = val; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGColorProfileElementImpl() {} + +protected: + + DOMString local; + DOMString name; + unsigned short renderingIntent; + +}; + + + + + +/*######################################################################### +## SVGGradientElementImpl +#########################################################################*/ + +/** + * + */ +class SVGGradientElementImpl : virtual public SVGGradientElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedEnumeration getGradientUnits() + { return gradientUnits; } + + /** + * + */ + virtual SVGAnimatedTransformList getGradientTransform() + { return gradientTransform; } + + /** + * + */ + virtual SVGAnimatedEnumeration getSpreadMethod() + { return spreadMethod; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGGradientElementImpl() {} + +protected: + + + SVGAnimatedEnumeration gradientUnits; + SVGAnimatedTransformList gradientTransform; + SVGAnimatedEnumeration spreadMethod; +}; + + + + + + + +/*######################################################################### +## SVGLinearGradientElementImpl +#########################################################################*/ + +/** + * + */ +class SVGLinearGradientElementImpl : virtual public SVGLinearGradientElement, + public SVGGradientElementImpl +{ +public: + + + /** + * + */ + virtual SVGAnimatedLength getX1() + { return x1; } + + /** + * + */ + virtual SVGAnimatedLength getY1() + { return y1; } + + /** + * + */ + virtual SVGAnimatedLength getX2() + { return x2; } + + /** + * + */ + virtual SVGAnimatedLength getY2() + { return y2; } + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGLinearGradientElementImpl() {} + +protected: + + SVGAnimatedLength x1, x2, y1, y2; + +}; + + + + + + + +/*######################################################################### +## SVGRadialGradientElementImpl +#########################################################################*/ + +/** + * + */ +class SVGRadialGradientElementImpl : virtual public SVGRadialGradientElement, + public SVGGradientElementImpl +{ +public: + + + /** + * + */ + virtual SVGAnimatedLength getCx() + { return cx; } + + + /** + * + */ + virtual SVGAnimatedLength getCy() + { return cy; } + + + /** + * + */ + virtual SVGAnimatedLength getR() + { return r; } + + + /** + * + */ + virtual SVGAnimatedLength getFx() + { return fx; } + + + /** + * + */ + virtual SVGAnimatedLength getFy() + { return fy; } + + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGRadialGradientElementImpl() {} + +protected: + + SVGAnimatedLength cx, cy, r, fx, fy; + +}; + + + + + + + +/*######################################################################### +## SVGStopElementImpl +#########################################################################*/ + +/** + * + */ +class SVGStopElementImpl : virtual public SVGStopElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedNumber getOffset() + { return offset; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGStopElementImpl() {} + +protected: + + SVGAnimatedNumber offset; + +}; + + + + + + + +/*######################################################################### +## SVGPatternElementImpl +#########################################################################*/ + +/** + * + */ +class SVGPatternElementImpl : virtual public SVGPatternElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedEnumeration getPatternUnits() + { return patternUnits; } + + /** + * + */ + virtual SVGAnimatedEnumeration getPatternContentUnits() + { return patternContentUnits; } + + /** + * + */ + virtual SVGAnimatedTransformList getPatternTransform() + { return patternTransform; } + + /** + * + */ + virtual SVGAnimatedLength getX() + { return x; } + + /** + * + */ + virtual SVGAnimatedLength getY() + { return y; } + + /** + * + */ + virtual SVGAnimatedLength getWidth() + { return width; } + + /** + * + */ + virtual SVGAnimatedLength getHeight() + { return height; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGPatternElementImpl() {} + +protected: + + + SVGAnimatedEnumeration patternUnits; + SVGAnimatedEnumeration patternContentUnits; + SVGAnimatedTransformList patternTransform; + SVGAnimatedLength x; + SVGAnimatedLength y; + SVGAnimatedLength width; + SVGAnimatedLength height; +}; + + + + + + + +/*######################################################################### +## SVGClipPathElementImpl +#########################################################################*/ + +/** + * + */ +class SVGClipPathElementImpl : virtual public SVGClipPathElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedEnumeration getClipPathUnits() + { return clipPathUnits; } + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGClipPathElementImpl() {} + +protected: + + SVGAnimatedEnumeration clipPathUnits; + +}; + + + + + + + +/*######################################################################### +## SVGMaskElementImpl +#########################################################################*/ + +/** + * + */ +class SVGMaskElementImpl : virtual public SVGMaskElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedEnumeration getMaskUnits() + { return maskUnits; } + + /** + * + */ + virtual SVGAnimatedEnumeration getMaskContentUnits() + { return maskContentUnits; } + + /** + * + */ + virtual SVGAnimatedLength getX() + { return x; } + + /** + * + */ + virtual SVGAnimatedLength getY() + { return y; } + + /** + * + */ + virtual SVGAnimatedLength getWidth() + { return width; } + + /** + * + */ + virtual SVGAnimatedLength getHeight() + { return height; } + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGMaskElementImpl() {} + +protected: + + + SVGAnimatedEnumeration maskUnits; + SVGAnimatedEnumeration maskContentUnits; + SVGAnimatedLength x; + SVGAnimatedLength y; + SVGAnimatedLength width; + SVGAnimatedLength height; +}; + + + + + + + +/*######################################################################### +## SVGFilterElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFilterElementImpl : virtual public SVGFilterElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedEnumeration getFilterUnits() + { return filterUnits; } + + /** + * + */ + virtual SVGAnimatedEnumeration getPrimitiveUnits() + { return filterUnits; } + + /** + * + */ + virtual SVGAnimatedLength getX() + { return x; } + + /** + * + */ + virtual SVGAnimatedLength getY() + { return y; } + + /** + * + */ + virtual SVGAnimatedLength getWidth() + { return width; } + + /** + * + */ + virtual SVGAnimatedLength getHeight() + { return height; } + + /** + * + */ + virtual SVGAnimatedInteger getFilterResX() + { return filterResX; } + + /** + * + */ + virtual SVGAnimatedInteger getFilterResY() + { return filterResY; } + + /** + * + */ + virtual void setFilterRes (unsigned long filterResXArg, + unsigned long filterResYArg ) + { + filterResX = filterResXArg; + filterResY = filterResYArg; + } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFilterElementImpl() {} + +protected: + + SVGAnimatedEnumeration filterUnits; + SVGAnimatedEnumeration primitiveUnits; + SVGAnimatedLength x; + SVGAnimatedLength y; + SVGAnimatedLength width; + SVGAnimatedLength height; + SVGAnimatedInteger filterResX; + SVGAnimatedInteger filterResY; + +}; + + + + + + +/*######################################################################### +## SVGFEBlendElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFEBlendElementImpl : virtual public SVGFEBlendElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedString getIn1() + { return in1; } + + /** + * + */ + virtual SVGAnimatedString getIn2() + { return in2; } + + /** + * + */ + virtual SVGAnimatedEnumeration getMode() + { return mode; } + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEBlendElementImpl() {} + +protected: + + SVGAnimatedString in1, in2; + SVGAnimatedEnumeration mode; +}; + + + + + + + +/*######################################################################### +## SVGFEColorMatrixElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFEColorMatrixElementImpl : virtual public SVGFEColorMatrixElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedString getIn1() + { return in1; } + + /** + * + */ + virtual SVGAnimatedEnumeration getType() + { return type; } + + /** + * + */ + virtual SVGAnimatedNumberList getValues() + { return values; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEColorMatrixElementImpl() {} + +protected: + + SVGAnimatedString in1; + SVGAnimatedEnumeration type; + SVGAnimatedNumberList values; + +}; + + + + + + + +/*######################################################################### +## SVGFEComponentTransferElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFEComponentTransferElementImpl : + virtual public SVGFEComponentTransferElement, + public SVGElementImpl +{ +public: + /** + * + */ + virtual SVGAnimatedString getIn1() + { return in1; } + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEComponentTransferElementImpl() {} + +protected: + + SVGAnimatedString in1; + +}; + + + + + + + +/*######################################################################### +## SVGComponentTransferFunctionElementImpl +#########################################################################*/ + +/** + * + */ +class SVGComponentTransferFunctionElementImpl : + virtual public SVGComponentTransferFunctionElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedEnumeration getType() + { return type; } + + /** + * + */ + virtual SVGAnimatedNumberList getTableValues() + { return tableValues; } + + /** + * + */ + virtual SVGAnimatedNumber getSlope() + { return slope; } + + /** + * + */ + virtual SVGAnimatedNumber getIntercept() + { return intercept; } + + /** + * + */ + virtual SVGAnimatedNumber getAmplitude() + { return amplitude; } + + /** + * + */ + virtual SVGAnimatedNumber getExponent() + { return exponent; } + + /** + * + */ + virtual SVGAnimatedNumber getOffset() + { return offset; } + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGComponentTransferFunctionElementImpl() {} + +protected: + + SVGAnimatedEnumeration type; + SVGAnimatedNumberList tableValues; + SVGAnimatedNumber slope; + SVGAnimatedNumber intercept; + SVGAnimatedNumber amplitude; + SVGAnimatedNumber exponent; + SVGAnimatedNumber offset; + +}; + + + + + + + +/*######################################################################### +## SVGFEFuncRElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFEFuncRElementImpl : + virtual public SVGFEFuncRElement, + public SVGComponentTransferFunctionElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEFuncRElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGFEFuncGElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFEFuncGElementImpl : virtual public SVGFEFuncGElement, + public SVGComponentTransferFunctionElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEFuncGElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGFEFuncBElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFEFuncBElementImpl : virtual public SVGFEFuncBElement, + public SVGComponentTransferFunctionElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEFuncBElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGFEFuncAElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFEFuncAElementImpl : virtual public SVGFEFuncAElement, + public SVGComponentTransferFunctionElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEFuncAElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGFECompositeElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFECompositeElementImpl : virtual public SVGFECompositeElement, + public SVGElementImpl +{ +public: + + + /** + * + */ + virtual SVGAnimatedString getIn1() + { return in1; } + + /** + * + */ + virtual SVGAnimatedString getIn2() + { return in2; } + + /** + * + */ + virtual SVGAnimatedEnumeration getOperator() + { return ae_operator; } + + /** + * + */ + virtual SVGAnimatedNumber getK1() + { return k1; } + + /** + * + */ + virtual SVGAnimatedNumber getK2() + { return k2; } + + /** + * + */ + virtual SVGAnimatedNumber getK3() + { return k3; } + + /** + * + */ + virtual SVGAnimatedNumber getK4() + { return k4; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFECompositeElementImpl() {} + +protected: + + + SVGAnimatedString in1; + SVGAnimatedString in2; + SVGAnimatedEnumeration ae_operator; + SVGAnimatedNumber k1; + SVGAnimatedNumber k2; + SVGAnimatedNumber k3; + SVGAnimatedNumber k4; + +}; + + + + + + + +/*######################################################################### +## SVGFEConvolveMatrixElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFEConvolveMatrixElementImpl : virtual public SVGFEConvolveMatrixElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedInteger getOrderX() + { return orderX; } + + /** + * + */ + virtual SVGAnimatedInteger getOrderY() + { return orderY; } + + /** + * + */ + virtual SVGAnimatedNumberList getKernelMatrix() + { return kernelMatrix; } + + /** + * + */ + virtual SVGAnimatedNumber getDivisor() + { return divisor; } + + /** + * + */ + virtual SVGAnimatedNumber getBias() + { return bias; } + + /** + * + */ + virtual SVGAnimatedInteger getTargetX() + { return targetX; } + + /** + * + */ + virtual SVGAnimatedInteger getTargetY() + { return targetY; } + + /** + * + */ + virtual SVGAnimatedEnumeration getEdgeMode() + { return edgeMode; } + + /** + * + */ + virtual SVGAnimatedLength getKernelUnitLengthX() + { return kernelUnitLengthX; } + + /** + * + */ + virtual SVGAnimatedLength getKernelUnitLengthY() + { return kernelUnitLengthY; } + + /** + * + */ + virtual SVGAnimatedBoolean getPreserveAlpha() + { return preserveAlpha; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEConvolveMatrixElementImpl() {} + +protected: + + SVGAnimatedInteger orderX; + SVGAnimatedInteger orderY; + SVGAnimatedNumberList kernelMatrix; + SVGAnimatedNumber divisor; + SVGAnimatedNumber bias; + SVGAnimatedInteger targetX; + SVGAnimatedInteger targetY; + SVGAnimatedEnumeration edgeMode; + SVGAnimatedLength kernelUnitLengthX; + SVGAnimatedLength kernelUnitLengthY; + SVGAnimatedBoolean preserveAlpha; + +}; + + + + + + + +/*######################################################################### +## SVGFEDiffuseLightingElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFEDiffuseLightingElementImpl : virtual public SVGFEDiffuseLightingElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedString getIn1() + { return in1; } + + /** + * + */ + virtual SVGAnimatedNumber getSurfaceScale() + { return surfaceScale; } + + /** + * + */ + virtual SVGAnimatedNumber getDiffuseConstant() + { return diffuseConstant; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEDiffuseLightingElementImpl() {} + +protected: + + SVGAnimatedString in1; + SVGAnimatedNumber surfaceScale; + SVGAnimatedNumber diffuseConstant; + +}; + + + + + + + +/*######################################################################### +## SVGFEDistantLightElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFEDistantLightElementImpl : virtual public SVGFEDistantLightElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedNumber getAzimuth() + { return azimuth; } + + + /** + * + */ + virtual SVGAnimatedNumber getElevation() + { return elevation; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEDistantLightElementImpl() {} + +protected: + + SVGAnimatedNumber azimuth; + SVGAnimatedNumber elevation; + +}; + + + + + + + +/*######################################################################### +## SVGFEPointLightElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFEPointLightElementImpl : public virtual SVGFEPointLightElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedNumber getX() + { return x; } + + + /** + * + */ + virtual SVGAnimatedNumber getY() + { return y; } + + /** + * + */ + virtual SVGAnimatedNumber getZ() + { return z; } + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEPointLightElementImpl() {} + +protected: + + SVGAnimatedNumber x, y, z; + +}; + + + + + + + +/*######################################################################### +## SVGFESpotLightElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFESpotLightElementImpl : virtual public SVGFESpotLightElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedNumber getX() + { return x; } + + + /** + * + */ + virtual SVGAnimatedNumber getY() + { return y; } + + /** + * + */ + virtual SVGAnimatedNumber getZ() + { return z; } + + /** + * + */ + virtual SVGAnimatedNumber getPointsAtX() + { return pointsAtX; } + + /** + * + */ + virtual SVGAnimatedNumber getPointsAtY() + { return pointsAtY; } + + /** + * + */ + virtual SVGAnimatedNumber getPointsAtZ() + { return pointsAtZ; } + + /** + * + */ + virtual SVGAnimatedNumber getSpecularExponent() + { return specularExponent; } + + /** + * + */ + virtual SVGAnimatedNumber getLimitingConeAngle() + { return limitingConeAngle; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFESpotLightElementImpl() {} + +protected: + + SVGAnimatedNumber x, y, z; + SVGAnimatedNumber pointsAtX, pointsAtY, pointsAtZ; + SVGAnimatedNumber specularExponent; + SVGAnimatedNumber limitingConeAngle; +}; + + + + + + + +/*######################################################################### +## SVGFEDisplacementMapElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFEDisplacementMapElementImpl : virtual public SVGFEDisplacementMapElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedString getIn1() + { return in1; } + + /** + * + */ + virtual SVGAnimatedString getIn2() + { return in2; } + + + /** + * + */ + virtual SVGAnimatedNumber getScale() + { return scale; } + + /** + * + */ + virtual SVGAnimatedEnumeration getXChannelSelector() + { return xChannelSelector; } + + /** + * + */ + virtual SVGAnimatedEnumeration getYChannelSelector() + { return yChannelSelector; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEDisplacementMapElementImpl() {} + +protected: + + SVGAnimatedString in1; + SVGAnimatedString in2; + SVGAnimatedNumber scale; + SVGAnimatedEnumeration xChannelSelector; + SVGAnimatedEnumeration yChannelSelector; + +}; + + + + + + + +/*######################################################################### +## SVGFEFloodElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFEFloodElementImpl : virtual public SVGFEFloodElement, + public SVGElementImpl +{ +public: + /** + * + */ + virtual SVGAnimatedString getIn1() + { return in1; } + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEFloodElementImpl() {} + +protected: + + SVGAnimatedString in1; + +}; + + + + + + + +/*######################################################################### +## SVGFEGaussianBlurElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFEGaussianBlurElementImpl : virtual public SVGFEGaussianBlurElement, + public SVGElementImpl +{ +public: + /** + * + */ + virtual SVGAnimatedString getIn1() + { return in1; } + + + /** + * + */ + virtual SVGAnimatedNumber getStdDeviationX() + { return stdDeviationX; } + + /** + * + */ + virtual SVGAnimatedNumber getStdDeviationY() + { return stdDeviationY; } + + + /** + * + */ + virtual void setStdDeviation (double stdDeviationXArg, double stdDeviationYArg ) + { + stdDeviationX = stdDeviationXArg; + stdDeviationY = stdDeviationYArg; + } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEGaussianBlurElementImpl() {} + +protected: + + SVGAnimatedString in1; + SVGAnimatedNumber stdDeviationX, stdDeviationY; + +}; + + + + + + + +/*######################################################################### +## SVGFEImageElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFEImageElementImpl : virtual public SVGFEImageElement, + public SVGElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEImageElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGFEMergeElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFEMergeElementImpl : virtual public SVGFEMergeElement, + public SVGElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEMergeElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGFEMergeNodeElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFEMergeNodeElementImpl : virtual public SVGFEMergeNodeElement, + public SVGElementImpl +{ +public: + /** + * + */ + virtual SVGAnimatedString getIn1() + { return in1; } + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEMergeNodeElementImpl() {} + +protected: + + SVGAnimatedString in1; + +}; + + + + + + + +/*######################################################################### +## SVGFEMorphologyElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFEMorphologyElementImpl : virtual public SVGFEMorphologyElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedString getIn1() + { return in1; } + + + /** + * + */ + virtual SVGAnimatedEnumeration getOperator() + { return me_operator; } + + /** + * + */ + virtual SVGAnimatedLength getRadiusX() + { return radiusX; } + + /** + * + */ + virtual SVGAnimatedLength getRadiusY() + { return radiusY; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEMorphologyElementImpl() {} + +protected: + + SVGAnimatedString in1; + SVGAnimatedEnumeration me_operator; + SVGAnimatedLength radiusX; + SVGAnimatedLength radiusY; + +}; + + + + + + + +/*######################################################################### +## SVGFEOffsetElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFEOffsetElementImpl : virtual public SVGFEOffsetElement, + public SVGElementImpl +{ +public: + + + + /** + * + */ + virtual SVGAnimatedString getIn1() + { return in1; } + + /** + * + */ + virtual SVGAnimatedLength getDx() + { return dx; } + + /** + * + */ + virtual SVGAnimatedLength getDy() + { return dy; } + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFEOffsetElementImpl() {} + +protected: + + SVGAnimatedString in1; + SVGAnimatedLength dx, dy; + +}; + + + + + + + +/*######################################################################### +## SVGFESpecularLightingElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFESpecularLightingElementImpl : + virtual public SVGFESpecularLightingElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedString getIn1() + { return in1; } + + /** + * + */ + virtual SVGAnimatedNumber getSurfaceScale() + { return surfaceScale; } + + /** + * + */ + virtual SVGAnimatedNumber getSpecularConstant() + { return specularConstant; } + + /** + * + */ + virtual SVGAnimatedNumber getSpecularExponent() + { return specularExponent; } + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFESpecularLightingElementImpl() {} + +protected: + + SVGAnimatedString in1; + SVGAnimatedNumber surfaceScale; + SVGAnimatedNumber specularConstant; + SVGAnimatedNumber specularExponent; +}; + + + + + + + +/*######################################################################### +## SVGFETileElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFETileElementImpl : virtual public SVGFETileElement, + public SVGElementImpl +{ +public: + + + /** + * + */ + virtual SVGAnimatedString getIn1() + { return in1; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFETileElementImpl() {} + +protected: + + SVGAnimatedString in1; + +}; + + + + + + + +/*######################################################################### +## SVGFETurbulenceElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFETurbulenceElementImpl : virtual public SVGFETurbulenceElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedNumber getBaseFrequencyX() + { return baseFrequencyX; } + + /** + * + */ + virtual SVGAnimatedNumber getBaseFrequencyY() + { return baseFrequencyY; } + + /** + * + */ + virtual SVGAnimatedInteger getNumOctaves() + { return numOctaves; } + + /** + * + */ + virtual SVGAnimatedNumber getSeed() + { return seed; } + + /** + * + */ + virtual SVGAnimatedEnumeration getStitchTiles() + { return stitchTiles; } + + /** + * + */ + virtual SVGAnimatedEnumeration getType() + { return type; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFETurbulenceElementImpl() {} + +protected: + + SVGAnimatedNumber baseFrequencyX; + SVGAnimatedNumber baseFrequencyY; + SVGAnimatedInteger numOctaves; + SVGAnimatedNumber seed; + SVGAnimatedEnumeration stitchTiles; + SVGAnimatedEnumeration type; + +}; + + + + + + + +/*######################################################################### +## SVGCursorElementImpl +#########################################################################*/ + +/** + * + */ +class SVGCursorElementImpl : virtual public SVGCursorElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedLength getX() + { return x; } + + /** + * + */ + virtual SVGAnimatedLength getY() + { return x; } + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGCursorElementImpl() {} + +protected: + + SVGAnimatedLength x, y; +}; + + + + + + + +/*######################################################################### +## SVGAElementImpl +#########################################################################*/ + +/** + * + */ +class SVGAElementImpl : virtual public SVGAElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGAnimatedString getTarget() + { return target; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGAElementImpl() {} + +protected: + + SVGAnimatedString target; +}; + + + + + + + +/*######################################################################### +## SVGViewElementImpl +#########################################################################*/ + +/** + * + */ +class SVGViewElementImpl : virtual public SVGViewElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual SVGStringList getViewTarget() + { return viewTarget; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGViewElementImpl() {} + +protected: + + SVGStringList viewTarget; +}; + + + + + + + +/*######################################################################### +## SVGScriptElementImpl +#########################################################################*/ + +/** + * + */ +class SVGScriptElementImpl : virtual public SVGScriptElement, + public SVGElementImpl +{ +public: + + /** + * + */ + virtual DOMString getType() + { return type; } + + /** + * + */ + virtual void setType(const DOMString &val) throw (DOMException) + { type = val; } + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGScriptElementImpl() {} + +protected: + + DOMString type; +}; + + + + + + +/*######################################################################### +## SVGAnimationElementImpl +#########################################################################*/ + +/** + * + */ +class SVGAnimationElementImpl : virtual public SVGAnimationElement, + public SVGElementImpl +{ +public: + + + /** + * + */ + virtual SVGElement *getTargetElement() + { return targetElement; } + + + /** + * + */ + virtual double getStartTime ( ) + { return startTime; } + + /** + * + */ + virtual double getCurrentTime ( ) + { return currentTime; } + + /** + * + */ + virtual double getSimpleDuration ( ) throw( DOMException ) + { return simpleDuration; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGAnimationElementImpl() {} + +protected: + + SVGElement *targetElement; + double startTime, currentTime, simpleDuration; +}; + + + + + + + +/*######################################################################### +## SVGAnimateElementImpl +#########################################################################*/ + +/** + * + */ +class SVGAnimateElementImpl : virtual public SVGAnimateElement, + public SVGAnimationElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGAnimateElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGSetElementImpl +#########################################################################*/ + +/** + * + */ +class SVGSetElementImpl : virtual public SVGSetElement, + public SVGAnimationElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGSetElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGAnimateMotionElementImpl +#########################################################################*/ + +/** + * + */ +class SVGAnimateMotionElementImpl : virtual public SVGAnimateMotionElement, + public SVGAnimationElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGAnimateMotionElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGMPathElementImpl +#########################################################################*/ + +/** + * + */ +class SVGMPathElementImpl : virtual public SVGMPathElement, + public SVGElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGMPathElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGAnimateColorElementImpl +#########################################################################*/ + +/** + * + */ +class SVGAnimateColorElementImpl : virtual public SVGAnimateColorElement, + public SVGAnimationElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGAnimateColorElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGAnimateTransformElementImpl +#########################################################################*/ + +/** + * + */ +class SVGAnimateTransformElementImpl : virtual public SVGAnimateTransformElement, + public SVGAnimationElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGAnimateTransformElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGFontElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFontElementImpl : virtual public SVGFontElement, + public SVGElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFontElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGGlyphElementImpl +#########################################################################*/ + +/** + * + */ +class SVGGlyphElementImpl : virtual public SVGGlyphElement, + public SVGElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGGlyphElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGMissingGlyphElementImpl +#########################################################################*/ + +/** + * + */ +class SVGMissingGlyphElementImpl : virtual public SVGMissingGlyphElement, + public SVGElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGMissingGlyphElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGHKernElementImpl +#########################################################################*/ + +/** + * + */ +class SVGHKernElementImpl : virtual public SVGHKernElement, + public SVGElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGHKernElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGVKernElementImpl +#########################################################################*/ + +/** + * + */ +class SVGVKernElementImpl : virtual public SVGVKernElement, + public SVGElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGVKernElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGFontFaceElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFontFaceElementImpl : virtual public SVGFontFaceElement, + public SVGElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFontFaceElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGFontFaceSrcElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFontFaceSrcElementImpl : virtual public SVGFontFaceSrcElement, + public SVGElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFontFaceSrcElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGFontFaceUriElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFontFaceUriElementImpl : virtual public SVGFontFaceUriElement, + public SVGElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFontFaceUriElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGFontFaceFormatElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFontFaceFormatElementImpl : virtual public SVGFontFaceFormatElement, + public SVGElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFontFaceFormatElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGFontFaceNameElementImpl +#########################################################################*/ + +/** + * + */ +class SVGFontFaceNameElementImpl : virtual public SVGFontFaceNameElement, + public SVGElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGFontFaceNameElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGDefinitionSrcElementImpl +#########################################################################*/ + +/** + * + */ +class SVGDefinitionSrcElementImpl : virtual public SVGDefinitionSrcElement, + public SVGElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGDefinitionSrcElementImpl() {} + +protected: + + +}; + + + + + +/*######################################################################### +## SVGMetadataElementImpl +#########################################################################*/ + +/** + * + */ +class SVGMetadataElementImpl : virtual public SVGMetadataElement, + public SVGElementImpl +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + virtual ~SVGMetadataElementImpl() {} + +protected: + + +}; + + + + +/*######################################################################### +## SVGForeignObjectElementImpl +#########################################################################*/ + +/** + * + */ +class SVGForeignObjectElementImpl : virtual public SVGForeignObjectElement, + public SVGElementImpl +{ +public: + + + /** + * + */ + virtual SVGAnimatedLength getX() + { return x; } + + /** + * + */ + virtual SVGAnimatedLength getY() + { return y; } + + /** + * + */ + virtual SVGAnimatedLength getWidth() + { return width; } + + /** + * + */ + virtual SVGAnimatedLength getHeight() + { return height; } + + + + //################## + //# Non-API methods + //################## + + + /** + * + */ + virtual ~SVGForeignObjectElementImpl() {} + +protected: + + SVGAnimatedLength x, y, width, height; +}; + + + + + + +} //namespace svg +} //namespace dom +} //namespace w3c +} //namespace org + +#endif // __SVG_H__ +/*######################################################################### +## E N D O F F I L E +#########################################################################*/ + diff --git a/src/dom/svg/svgtypes.h b/src/dom/svg/svgtypes.h index 9b70178ea..bb169885d 100644 --- a/src/dom/svg/svgtypes.h +++ b/src/dom/svg/svgtypes.h @@ -1,6889 +1,6889 @@ -#ifndef __SVGTYPES_H__ -#define __SVGTYPES_H__ - -/** - * Phoebe DOM Implementation. - * - * This is a C++ approximation of the W3C DOM model, which follows - * fairly closely the specifications in the various .idl files, copies of - * which are provided for reference. Most important is this one: - * - * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html - * - * Authors: - * Bob Jamison - * - * Copyright (C) 2006 Bob Jamison - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -// For access to DOM2 core -#include "dom/dom.h" - -// For access to DOM2 events -#include "dom/events.h" - -// For access to those parts from DOM2 CSS OM used by SVG DOM. -#include "dom/css.h" - -// For access to those parts from DOM2 Views OM used by SVG DOM. -#include "dom/views.h" - -// For access to the SMIL OM used by SVG DOM. -#include "dom/smil.h" - - -#include - - - -namespace org { -namespace w3c { -namespace dom { -namespace svg { - - - - -//local definitions -typedef dom::DOMString DOMString; -typedef dom::DOMException DOMException; -typedef dom::Element Element; -typedef dom::Document Document; -typedef dom::NodeList NodeList; - - -class SVGElement; -class SVGUseElement; -class SVGAnimatedPreserveAspectRatio; - - -/*######################################################################### -## SVGException -#########################################################################*/ - -/** - * - */ -class SVGException -{ -public: - // unsigned short code; //inherited -}; - - /** - * SVGExceptionCode - */ - typedef enum - { - SVG_WRONG_TYPE_ERR = 0, - SVG_INVALID_VALUE_ERR = 1, - SVG_MATRIX_NOT_INVERTABLE = 2 - } SVGExceptionCode; - - - - - -/*######################################################################### -## SVGMatrix -#########################################################################*/ - -/** - * In SVG, a Matrix is defined like this: - * - * | a c e | - * | b d f | - * | 0 0 1 | - * - */ -class SVGMatrix -{ -public: - - - /** - * - */ - virtual double getA() - { return a; } - - /** - * - */ - virtual void setA(double val) throw (DOMException) - { a = val; } - - /** - * - */ - virtual double getB() - { return b; } - - /** - * - */ - virtual void setB(double val) throw (DOMException) - { b = val; } - - /** - * - */ - virtual double getC() - { return c; } - - /** - * - */ - virtual void setC(double val) throw (DOMException) - { c = val; } - - /** - * - */ - virtual double getD() - { return d; } - - /** - * - */ - virtual void setD(double val) throw (DOMException) - { d = val; } - /** - * - */ - virtual double getE() - { return e; } - - /** - * - */ - virtual void setE(double val) throw (DOMException) - { e = val; } - /** - * - */ - virtual double getF() - { return f; } - - /** - * - */ - virtual void setF(double val) throw (DOMException) - { f = val; } - - - /** - * Return the result of postmultiplying this matrix with another. - */ - virtual SVGMatrix multiply(const SVGMatrix &other) - { - SVGMatrix result; - result.a = a * other.a + c * other.b; - result.b = b * other.a + d * other.b; - result.c = a * other.c + c * other.d; - result.d = b * other.c + d * other.d; - result.e = a * other.e + c * other.f + e; - result.f = b * other.e + d * other.f + f; - return result; - } - - /** - * Calculate the inverse of this matrix - * - */ - virtual SVGMatrix inverse( ) throw( SVGException ) - { - /*########################################### - The determinant of a 3x3 matrix E - (let's use our own notation for a bit) - - A B C - D E F - G H I - is - AEI - AFH - BDI + BFG + CDH - CEG - - Since in our affine transforms, G and H==0 and I==1, - this reduces to: - AE - BD - In SVG's naming scheme, that is: a * d - c * b . SIMPLE! - - In a similar method of attack, SVG's adjunct matrix is: - - d -c cf-ed - -b a eb-af - 0 0 ad-cb - - To get the inverse matrix, we divide the adjunct matrix by - the determinant. Notice that (ad-cb)/(ad-cb)==1. Very cool. - So what we end up with is this: - - a = d/(ad-cb) c = -c/(ad-cb) e = (cf-ed)/(ad-cb) - b = -b/(ad-cb) d = a/(ad-cb) f = (eb-af)/(ad-cb) - - (Since this would be in all SVG-DOM implementations, - somebody needed to document this! ^^ ) - #############################################*/ - - SVGMatrix result; - double determinant = a * d - c * b; - if (determinant < 1.0e-18)//invertible? - { - result.identity();//cop out - return result; - } - - double idet = 1.0 / determinant; - result.a = d * idet; - result.b = -b * idet; - result.c = -c * idet; - result.d = a * idet; - result.e = (c*f - e*d) * idet; - result.f = (e*b - a*f) * idet; - return result; - } - - /** - * Equivalent to multiplying by: - * | 1 0 x | - * | 0 1 y | - * | 0 0 1 | - * - */ - virtual SVGMatrix translate(double x, double y ) - { - SVGMatrix result; - result.a = a; - result.b = b; - result.c = c; - result.d = d; - result.e = a * x + c * y + e; - result.f = b * x + d * y + f; - return result; - } - - /** - * Equivalent to multiplying by: - * | scale 0 0 | - * | 0 scale 0 | - * | 0 0 1 | - * - */ - virtual SVGMatrix scale(double scale) - { - SVGMatrix result; - result.a = a * scale; - result.b = b * scale; - result.c = c * scale; - result.d = d * scale; - result.e = e; - result.f = f; - return result; - } - - /** - * Equivalent to multiplying by: - * | scaleX 0 0 | - * | 0 scaleY 0 | - * | 0 0 1 | - * - */ - virtual SVGMatrix scaleNonUniform(double scaleX, - double scaleY ) - { - SVGMatrix result; - result.a = a * scaleX; - result.b = b * scaleX; - result.c = c * scaleY; - result.d = d * scaleY; - result.e = e; - result.f = f; - return result; - } - - /** - * Equivalent to multiplying by: - * | cos(a) -sin(a) 0 | - * | sin(a) cos(a) 0 | - * | 0 0 1 | - * - */ - virtual SVGMatrix rotate (double angle) - { - double sina = sin(angle); - double msina = -sina; - double cosa = cos(angle); - SVGMatrix result; - result.a = a * cosa + c * sina; - result.b = b * cosa + d + sina; - result.c = a * msina + c * cosa; - result.d = b * msina + d * cosa; - result.e = e; - result.f = f; - return result; - } - - /** - * Equivalent to multiplying by: - * | cos(a) -sin(a) 0 | - * | sin(a) cos(a) 0 | - * | 0 0 1 | - * In this case, angle 'a' is computed as the artangent - * of the slope y/x . It is negative if the slope is negative. - */ - virtual SVGMatrix rotateFromVector(double x, double y) - throw( SVGException ) - { - double angle = atan(y / x); - if (y < 0.0) - angle = -angle; - SVGMatrix result; - double sina = sin(angle); - double msina = -sina; - double cosa = cos(angle); - result.a = a * cosa + c * sina; - result.b = b * cosa + d + sina; - result.c = a * msina + c * cosa; - result.d = b * msina + d * cosa; - result.e = e; - result.f = f; - return result; - } - - /** - * Equivalent to multiplying by: - * | -1 0 0 | - * | 0 1 0 | - * | 0 0 1 | - * - */ - virtual SVGMatrix flipX( ) - { - SVGMatrix result; - result.a = -a; - result.b = -b; - result.c = c; - result.d = d; - result.e = e; - result.f = f; - return result; - } - - /** - * Equivalent to multiplying by: - * | 1 0 0 | - * | 0 -1 0 | - * | 0 0 1 | - * - */ - virtual SVGMatrix flipY( ) - { - SVGMatrix result; - result.a = a; - result.b = b; - result.c = -c; - result.d = -d; - result.e = e; - result.f = f; - return result; - } - - /** - * | 1 tan(a) 0 | - * | 0 1 0 | - * | 0 0 1 | - * - */ - virtual SVGMatrix skewX(double angle) - { - double tana = tan(angle); - SVGMatrix result; - result.a = a; - result.b = b; - result.c = a * tana + c; - result.d = b * tana + d; - result.e = e; - result.f = f; - return result; - } - - /** - * Equivalent to multiplying by: - * | 1 0 0 | - * | tan(a) 1 0 | - * | 0 0 1 | - * - */ - virtual SVGMatrix skewY(double angle) - { - double tana = tan(angle); - SVGMatrix result; - result.a = a + c * tana; - result.b = b + d * tana; - result.c = c; - result.d = d; - result.e = e; - result.f = f; - return result; - } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGMatrix() - { - identity(); - } - - /** - * - */ - SVGMatrix(double aArg, double bArg, double cArg, - double dArg, double eArg, double fArg ) - { - a = aArg; b = bArg; c = cArg; - d = dArg; e = eArg; f = fArg; - } - - /** - * Copy constructor - */ - SVGMatrix(const SVGMatrix &other) - { - a = other.a; - b = other.b; - c = other.c; - d = other.d; - e = other.e; - f = other.f; - } - - - - /** - * - */ - virtual ~SVGMatrix() {} - -protected: - -friend class SVGTransform; - - /* - * Set to the identify matrix - */ - void identity() - { - a = 1.0; - b = 0.0; - c = 0.0; - d = 1.0; - e = 0.0; - f = 0.0; - } - - double a, b, c, d, e, f; - -}; - - -/*######################################################################### -## SVGTransform -#########################################################################*/ - -/** - * - */ -class SVGTransform -{ -public: - - /** - * Transform Types - */ - typedef enum - { - SVG_TRANSFORM_UNKNOWN = 0, - SVG_TRANSFORM_MATRIX = 1, - SVG_TRANSFORM_TRANSLATE = 2, - SVG_TRANSFORM_SCALE = 3, - SVG_TRANSFORM_ROTATE = 4, - SVG_TRANSFORM_SKEWX = 5, - SVG_TRANSFORM_SKEWY = 6, - } TransformType; - - /** - * - */ - virtual unsigned short getType() - { return type; } - - - /** - * - */ - virtual SVGMatrix getMatrix() - { - return matrix; - } - - /** - * - */ - virtual double getAngle() - { - return angle; - } - - - /** - * - */ - virtual void setMatrix(const SVGMatrix &matrixArg) - { - type = SVG_TRANSFORM_MATRIX; - matrix = matrixArg; - } - - /** - * - */ - virtual void setTranslate (double tx, double ty ) - { - type = SVG_TRANSFORM_TRANSLATE; - matrix.setA(1.0); - matrix.setB(0.0); - matrix.setC(0.0); - matrix.setD(1.0); - matrix.setE(tx); - matrix.setF(ty); - } - - /** - * - */ - virtual void setScale (double sx, double sy ) - { - type = SVG_TRANSFORM_SCALE; - matrix.setA(sx); - matrix.setB(0.0); - matrix.setC(0.0); - matrix.setD(sy); - matrix.setE(0.0); - matrix.setF(0.0); - } - - /** - * - */ - virtual void setRotate (double angleArg, double cx, double cy) - { - angle = angleArg; - setTranslate(cx, cy); - type = SVG_TRANSFORM_ROTATE; - matrix.rotate(angle); - } - - /** - * - */ - virtual void setSkewX (double angleArg) - { - angle = angleArg; - type = SVG_TRANSFORM_SKEWX; - matrix.identity(); - matrix.skewX(angle); - } - - /** - * - */ - virtual void setSkewY (double angleArg) - { - angle = angleArg; - type = SVG_TRANSFORM_SKEWY; - matrix.identity(); - matrix.skewY(angle); - } - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGTransform() - { - type = SVG_TRANSFORM_UNKNOWN; - angle = 0.0; - } - - /** - * - */ - SVGTransform(const SVGTransform &other) - { - type = other.type; - angle = other.angle; - matrix = other.matrix; - } - - /** - * - */ - virtual ~SVGTransform() - {} - -protected: - - int type; - double angle; - - SVGMatrix matrix; -}; - - - - - - -/*######################################################################### -## SVGTransformList -#########################################################################*/ - -/** - * - */ -class SVGTransformList -{ -public: - - - /** - * - */ - virtual unsigned long getNumberOfItems() - { return items.size(); } - - - /** - * - */ - virtual void clear( ) throw( DOMException ) - { items.clear(); } - - /** - * - */ - virtual SVGTransform initialize (const SVGTransform &newItem) - throw( DOMException, SVGException ) - { - items.clear(); - items.push_back(newItem); - return newItem; - } - - /** - * - */ - virtual SVGTransform getItem (unsigned long index ) - throw( DOMException ) - { - if (index>=items.size()) - { - SVGTransform transform; - return transform; - } - return items[index]; - } - - /** - * - */ - virtual SVGTransform insertItemBefore (const SVGTransform &newItem, - unsigned long index ) - throw( DOMException, SVGException ) - { - if (index > items.size()) - items.push_back(newItem); - else - { - std::vector::iterator iter = items.begin() + index; - items.insert(iter, newItem); - } - return newItem; - } - - /** - * - */ - virtual SVGTransform replaceItem (const SVGTransform &newItem, - unsigned long index ) - throw( DOMException, SVGException ) - { - if (index>=items.size()) - { - SVGTransform transform; - return transform; - } - else - { - std::vector::iterator iter = items.begin() + index; - *iter = newItem; - } - return newItem; - } - - /** - * - */ - virtual SVGTransform removeItem (unsigned long index ) - throw( DOMException ) - { - if (index>=items.size()) - { - SVGTransform transform; - return transform; - } - std::vector::iterator iter = items.begin() + index; - SVGTransform oldItem = *iter; - items.erase(iter); - return oldItem; - } - - /** - * - */ - virtual SVGTransform appendItem (const SVGTransform &newItem) - throw( DOMException, SVGException ) - { - items.push_back(newItem); - return newItem; - } - - /** - * - */ - virtual SVGTransform createSVGTransformFromMatrix(const SVGMatrix &matrix) - { - SVGTransform transform; - transform.setMatrix(matrix); - return transform; - } - - /** - * - */ - virtual SVGTransform consolidate() - { - SVGMatrix matrix; - for (unsigned int i=0 ; i items; - -}; - - - - - - -/*######################################################################### -## SVGAnimatedTransformList -#########################################################################*/ - -/** - * - */ -class SVGAnimatedTransformList -{ -public: - - /** - * - */ - virtual SVGTransformList getBaseVal() - { return baseVal; } - - /** - * - */ - virtual SVGTransformList getAnimVal() - { return animVal; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGAnimatedTransformList() - {} - - /** - * - */ - SVGAnimatedTransformList(const SVGAnimatedTransformList &other) - { - baseVal = other.baseVal; - animVal = other.animVal; - } - - /** - * - */ - virtual ~SVGAnimatedTransformList() {} - -protected: - - SVGTransformList baseVal; - SVGTransformList animVal; - -}; - - - - -/*######################################################################### -## SVGAnimatedBoolean -#########################################################################*/ - -/** - * - */ -class SVGAnimatedBoolean -{ -public: - - /** - * - */ - virtual bool getBaseVal() - { - return baseVal; - } - - /** - * - */ - virtual void setBaseVal(bool val) throw (DOMException) - { - baseVal = val; - } - - /** - * - */ - virtual bool getAnimVal() - { - return animVal; - } - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGAnimatedBoolean() - { - baseVal = animVal = false; - } - - /** - * - */ - SVGAnimatedBoolean(const SVGAnimatedBoolean &other) - { - baseVal = other.baseVal; - animVal = other.animVal; - } - - /** - * - */ - virtual ~SVGAnimatedBoolean() {} - -protected: - - bool baseVal, animVal; - -}; - - - - -/*######################################################################### -## SVGAnimatedString -#########################################################################*/ - -/** - * - */ -class SVGAnimatedString -{ -public: - - /** - * - */ - virtual DOMString getBaseVal() - { - return baseVal; - } - - /** - * - */ - virtual void setBaseVal(const DOMString &val) - throw (DOMException) - { - baseVal = val; - } - - /** - * - */ - virtual DOMString getAnimVal() - { - return animVal; - } - - - //################## - //# Non-API methods - //################## - - - /** - * - */ - SVGAnimatedString() - { - baseVal = ""; - animVal = ""; - } - - /** - * - */ - SVGAnimatedString(const SVGAnimatedString &other) - { - baseVal = other.baseVal; - animVal = other.animVal; - } - - /** - * - */ - virtual ~SVGAnimatedString() {} - -protected: - - DOMString baseVal, animVal; - -}; - - - - - -/*######################################################################### -## SVGStringList -#########################################################################*/ - -/** - * - */ -class SVGStringList -{ -public: - - - /** - * - */ - virtual unsigned long getNumberOfItems() - { - return items.size(); - } - - /** - * - */ - virtual void clear () throw( DOMException ) - { - items.clear(); - } - - /** - * - */ - virtual DOMString initialize ( const DOMString& newItem ) - throw( DOMException, SVGException ) - { - items.clear(); - items.push_back(newItem); - return newItem; - } - - /** - * - */ - virtual DOMString getItem ( unsigned long index ) - throw( DOMException ) - { - if (index >= items.size()) - return ""; - return items[index]; - } - - /** - * - */ - virtual DOMString insertItemBefore ( const DOMString& newItem, - unsigned long index ) - throw( DOMException, SVGException ) - { - if (index>=items.size()) - { - items.push_back(newItem); - } - else - { - std::vector::iterator iter = items.begin() + index; - items.insert(iter, newItem); - } - return newItem; - } - - /** - * - */ - virtual DOMString replaceItem ( const DOMString& newItem, - unsigned long index ) - throw( DOMException, SVGException ) - { - if (index>=items.size()) - return ""; - std::vector::iterator iter = items.begin() + index; - *iter = newItem; - return newItem; - } - - /** - * - */ - virtual DOMString removeItem ( unsigned long index ) - throw( DOMException ) - { - if (index>=items.size()) - return ""; - std::vector::iterator iter = items.begin() + index; - DOMString oldstr = *iter; - items.erase(iter); - return oldstr; - } - - /** - * - */ - virtual DOMString appendItem ( const DOMString& newItem ) - throw( DOMException, SVGException ) - { - items.push_back(newItem); - return newItem; - } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGStringList() {} - - /** - * - */ - SVGStringList(const SVGStringList &other) - { - items = other.items; - } - - /** - * - */ - virtual ~SVGStringList() {} - -protected: - - std::vectoritems; - -}; - - - - - -/*######################################################################### -## SVGAnimatedEnumeration -#########################################################################*/ - -/** - * - */ -class SVGAnimatedEnumeration -{ -public: - - /** - * - */ - virtual unsigned short getBaseVal() - { - return baseVal; - } - - /** - * - */ - virtual void setBaseVal(unsigned short val) - throw (DOMException) - { - baseVal = val; - } - - /** - * - */ - virtual unsigned short getAnimVal() - { - return animVal; - } - - - - //################## - //# Non-API methods - //################## - - - /** - * - */ - SVGAnimatedEnumeration() - { - baseVal = animVal = 0; - } - - /** - * - */ - SVGAnimatedEnumeration(const SVGAnimatedEnumeration &other) - { - baseVal = other.baseVal; - animVal = other.animVal; - } - - /** - * - */ - virtual ~SVGAnimatedEnumeration() {} - -protected: - - int baseVal, animVal; - -}; - - - - - -/*######################################################################### -## SVGAnimatedInteger -#########################################################################*/ - -/** - * - */ -class SVGAnimatedInteger -{ -public: - - - /** - * - */ - virtual long getBaseVal() - { - return baseVal; - } - - /** - * - */ - virtual void setBaseVal(long val) throw (DOMException) - { - baseVal = val; - } - - /** - * - */ - virtual long getAnimVal() - { - return animVal; - } - - - - //################## - //# Non-API methods - //################## - - - /** - * - */ - SVGAnimatedInteger() - { baseVal = animVal = 0L;} - - - /** - * - */ - SVGAnimatedInteger(long value) - { - baseVal = value; - animVal = 0L; - } - - /** - * - */ - SVGAnimatedInteger(long baseValArg, long animValArg) - { - baseVal = baseValArg; - animVal = animValArg; - } - - - /** - * - */ - SVGAnimatedInteger(const SVGAnimatedInteger &other) - { - baseVal = other.baseVal; - animVal = other.animVal; - } - - /** - * - */ - virtual ~SVGAnimatedInteger() {} - -protected: - - long baseVal, animVal; - -}; - - - - - -/*######################################################################### -## SVGNumber -#########################################################################*/ - -/** - * - */ -class SVGNumber -{ -public: - - - /** - * - */ - virtual double getValue() - { - return value; - } - - /** - * - */ - virtual void setValue(double val) throw (DOMException) - { - value = val; - } - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGNumber() - { - value = 0.0; - } - - /** - * - */ - SVGNumber(const SVGNumber &other) - { - value = other.value; - } - - /** - * - */ - virtual ~SVGNumber() {} - -protected: - - double value; - -}; - - - - - -/*######################################################################### -## SVGAnimatedNumber -#########################################################################*/ - -/** - * - */ -class SVGAnimatedNumber -{ -public: - - - - /** - * - */ - virtual double getBaseVal() - { - return baseVal; - } - - /** - * - */ - virtual void setBaseVal(double val) throw (DOMException) - { - baseVal = val; - } - - /** - * - */ - virtual double getAnimVal() - { - return animVal; - } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGAnimatedNumber() - { - baseVal = animVal = 0.0; - } - - - /** - * - */ - SVGAnimatedNumber(double val) - { - baseVal = val; - animVal = 0.0; - } - - - /** - * - */ - SVGAnimatedNumber(double baseValArg, double animValArg) - { - baseVal = baseValArg; - animVal = animValArg; - } - - /** - * - */ - SVGAnimatedNumber(const SVGAnimatedNumber &other) - { - baseVal = other.baseVal; - animVal = other.animVal; - } - - /** - * - */ - virtual ~SVGAnimatedNumber() {} - -protected: - - double baseVal, animVal; - -}; - - - - - -/*######################################################################### -## SVGNumberList -#########################################################################*/ - -/** - * - */ -class SVGNumberList -{ -public: - - /** - * - */ - virtual unsigned long getNumberOfItems() - { - return items.size(); - } - - - /** - * - */ - virtual void clear() throw( DOMException ) - { - items.clear(); - } - - /** - * - */ - virtual SVGNumber initialize (const SVGNumber &newItem) - throw( DOMException, SVGException ) - { - items.clear(); - items.push_back(newItem); - return newItem; - } - - /** - * - */ - virtual SVGNumber getItem ( unsigned long index ) - throw( DOMException ) - { - if (index>=items.size()) - { - SVGNumber num; - return num; - } - return items[index]; - } - - /** - * - */ - virtual SVGNumber insertItemBefore ( const SVGNumber &newItem, - unsigned long index ) - throw( DOMException, SVGException ) - { - if (index>=items.size()) - { - items.push_back(newItem); - } - else - { - std::vector::iterator iter = items.begin() + index; - items.insert(iter, newItem); - } - return newItem; - } - - /** - * - */ - virtual SVGNumber replaceItem ( const SVGNumber &newItem, - unsigned long index ) - throw( DOMException, SVGException ) - { - if (index>=items.size()) - { - SVGNumber num; - return num; - } - std::vector::iterator iter = items.begin() + index; - *iter = newItem; - return newItem; - } - - /** - * - */ - virtual SVGNumber removeItem ( unsigned long index ) - throw( DOMException ) - { - if (index>=items.size()) - { - SVGNumber num; - return num; - } - std::vector::iterator iter = items.begin() + index; - SVGNumber oldval = *iter; - items.erase(iter); - return oldval; - } - - /** - * - */ - virtual SVGNumber appendItem ( const SVGNumber &newItem ) - throw( DOMException, SVGException ) - { - items.push_back(newItem); - return newItem; - } - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGNumberList() {} - - /** - * - */ - SVGNumberList(const SVGNumberList &other) - { - items = other.items; - } - - /** - * - */ - virtual ~SVGNumberList() {} - -protected: - - std::vectoritems; - -}; - - - - - -/*######################################################################### -## SVGAnimatedNumberList -#########################################################################*/ - -/** - * - */ -class SVGAnimatedNumberList -{ -public: - - - /** - * - */ - virtual SVGNumberList &getBaseVal() - { - return baseVal; - } - - /** - * - */ - virtual SVGNumberList &getAnimVal() - { - return animVal; - } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGAnimatedNumberList() {} - - /** - * - */ - SVGAnimatedNumberList(const SVGAnimatedNumberList &other) - { - baseVal = other.baseVal; - animVal = other.animVal; - } - - /** - * - */ - virtual ~SVGAnimatedNumberList() {} - -protected: - - SVGNumberList baseVal; - SVGNumberList animVal; - -}; - - - - - - -/*######################################################################### -## SVGLength -#########################################################################*/ - -/** - * - */ -class SVGLength -{ -public: - - /** - * Length Unit Types - */ - typedef enum - { - SVG_LENGTHTYPE_UNKNOWN = 0, - SVG_LENGTHTYPE_NUMBER = 1, - SVG_LENGTHTYPE_PERCENTAGE = 2, - SVG_LENGTHTYPE_EMS = 3, - SVG_LENGTHTYPE_EXS = 4, - SVG_LENGTHTYPE_PX = 5, - SVG_LENGTHTYPE_CM = 6, - SVG_LENGTHTYPE_MM = 7, - SVG_LENGTHTYPE_IN = 8, - SVG_LENGTHTYPE_PT = 9, - SVG_LENGTHTYPE_PC = 10 - } LengthUnitType; - - - /** - * - */ - virtual unsigned short getUnitType( ) - { - return unitType; - } - - /** - * - */ - virtual double getValue( ) - { - return value; - } - - /** - * - */ - virtual void setValue( double val ) throw (DOMException) - { - value = val; - } - - /** - * - */ - virtual double getValueInSpecifiedUnits( ) - { - double result = 0.0; - //fill this in - return result; - } - - /** - * - */ - virtual void setValueInSpecifiedUnits( double val ) - throw (DOMException) - { - //fill this in - } - - /** - * - */ - virtual DOMString getValueAsString( ) - { - DOMString ret; - char buf[32]; - snprintf(buf, 31, "%f", value); - ret.append(buf); - return ret; - } - - /** - * - */ - virtual void setValueAsString( const DOMString& val ) - throw (DOMException) - { - } - - - /** - * - */ - virtual void newValueSpecifiedUnits ( unsigned short unitType, double val ) - { - } - - /** - * - */ - virtual void convertToSpecifiedUnits ( unsigned short unitType ) - { - } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGLength() - { - unitType = SVG_LENGTHTYPE_UNKNOWN; - value = 0.0; - } - - - /** - * - */ - SVGLength(const SVGLength &other) - { - unitType = other.unitType; - value = other.value; - } - - /** - * - */ - virtual ~SVGLength() {} - -protected: - - int unitType; - - double value; - -}; - - - - - - -/*######################################################################### -## SVGAnimatedLength -#########################################################################*/ - -/** - * - */ -class SVGAnimatedLength -{ -public: - - /** - * - */ - virtual SVGLength &getBaseVal() - { - return baseVal; - } - - /** - * - */ - virtual SVGLength &getAnimVal() - { - return animVal; - } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGAnimatedLength() {} - - /** - * - */ - SVGAnimatedLength(const SVGAnimatedLength &other) - { - baseVal = other.baseVal; - animVal = other.animVal; - } - - /** - * - */ - virtual ~SVGAnimatedLength() {} - -protected: - - SVGLength baseVal, animVal; - -}; - - - - - - -/*######################################################################### -## SVGLengthList -#########################################################################*/ - -/** - * - */ -class SVGLengthList -{ -public: - - /** - * - */ - virtual unsigned long getNumberOfItems() - { - return items.size(); - } - - - /** - * - */ - virtual void clear ( ) throw( DOMException ) - { - items.clear(); - } - - /** - * - */ - virtual SVGLength initialize (const SVGLength &newItem ) - throw( DOMException, SVGException ) - { - items.clear(); - items.push_back(newItem); - return newItem; - } - - /** - * - */ - virtual SVGLength getItem (unsigned long index) - throw( DOMException ) - { - if (index>=items.size()) - { - SVGLength ret; - return ret; - } - return items[index]; - } - - /** - * - */ - virtual SVGLength insertItemBefore (const SVGLength &newItem, - unsigned long index ) - throw( DOMException, SVGException ) - { - if (index>=items.size()) - { - items.push_back(newItem); - } - else - { - std::vector::iterator iter = items.begin() + index; - items.insert(iter, newItem); - } - return newItem; - } - - /** - * - */ - virtual SVGLength replaceItem (const SVGLength &newItem, - unsigned long index ) - throw( DOMException, SVGException ) - { - if (index>=items.size()) - { - SVGLength ret; - return ret; - } - std::vector::iterator iter = items.begin() + index; - *iter = newItem; - return newItem; - } - - /** - * - */ - virtual SVGLength removeItem (unsigned long index ) - throw( DOMException ) - { - if (index>=items.size()) - { - SVGLength ret; - return ret; - } - std::vector::iterator iter = items.begin() + index; - SVGLength oldval = *iter; - items.erase(iter); - return oldval; - } - - /** - * - */ - virtual SVGLength appendItem (const SVGLength &newItem ) - throw( DOMException, SVGException ) - { - items.push_back(newItem); - return newItem; - } - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGLengthList() {} - - /** - * - */ - SVGLengthList(const SVGLengthList &other) - { - items = other.items; - } - - /** - * - */ - virtual ~SVGLengthList() {} - -protected: - - std::vectoritems; - -}; - - - - - - -/*######################################################################### -## SVGAnimatedLengthList -#########################################################################*/ - -/** - * - */ -class SVGAnimatedLengthList -{ -public: - - /** - * - */ - virtual SVGLengthList &getBaseVal() - { - return baseVal; - } - - /** - * - */ - virtual SVGLengthList &getAnimVal() - { - return animVal; - } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGAnimatedLengthList() {} - - /** - * - */ - SVGAnimatedLengthList(const SVGAnimatedLengthList &other) - { - baseVal = other.baseVal; - animVal = other.animVal; - } - - /** - * - */ - virtual ~SVGAnimatedLengthList() {} - -protected: - - SVGLengthList baseVal, animVal; - -}; - - - - - - -/*######################################################################### -## SVGAngle -#########################################################################*/ - -/** - * - */ -class SVGAngle -{ -public: - - /** - * Angle Unit Types - */ - typedef enum - { - SVG_ANGLETYPE_UNKNOWN = 0, - SVG_ANGLETYPE_UNSPECIFIED = 1, - SVG_ANGLETYPE_DEG = 2, - SVG_ANGLETYPE_RAD = 3, - SVG_ANGLETYPE_GRAD = 4 - } AngleUnitType; - - - - /** - * - */ - virtual unsigned short getUnitType() - { - return unitType; - } - - /** - * - */ - virtual double getValue() - { - return value; - } - - /** - * - */ - virtual void setValue(double val) throw (DOMException) - { - value = val; - } - - /** - * - */ - virtual double getValueInSpecifiedUnits() - { - double result = 0.0; - //convert here - return result; - } - - /** - * - */ - virtual void setValueInSpecifiedUnits(double val) - throw (DOMException) - { - //do conversion - } - - /** - * - */ - virtual DOMString getValueAsString() - { - DOMString result; - char buf[32]; - snprintf(buf, 31, "%f", value); - result.append(buf); - return result; - } - - /** - * - */ - virtual void setValueAsString(const DOMString &val) - throw (DOMException) - { - //convert here - } - - - /** - * - */ - virtual void newValueSpecifiedUnits (unsigned short unitType, - double valueInSpecifiedUnits ) - { - //convert here - } - - /** - * - */ - virtual void convertToSpecifiedUnits (unsigned short unitType ) - { - //convert here - } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGAngle() - { - unitType = SVG_ANGLETYPE_UNKNOWN; - value = 0.0; - } - - /** - * - */ - SVGAngle(const SVGAngle &other) - { - unitType = other.unitType; - value = other.value; - } - - /** - * - */ - virtual ~SVGAngle() {} - -protected: - - int unitType; - - double value; - -}; - - - - - - -/*######################################################################### -## SVGAnimatedAngle -#########################################################################*/ - -/** - * - */ -class SVGAnimatedAngle -{ -public: - - /** - * - */ - virtual SVGAngle getBaseVal() - { - return baseVal; - } - - /** - * - */ - virtual SVGAngle getAnimVal() - { - return animVal; - } - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGAnimatedAngle() {} - - /** - * - */ - SVGAnimatedAngle(const SVGAngle &angle) - { baseVal = angle; } - - /** - * - */ - SVGAnimatedAngle(const SVGAnimatedAngle &other) - { - baseVal = other.baseVal; - animVal = other.animVal; - } - - /** - * - */ - virtual ~SVGAnimatedAngle() {} - -protected: - - SVGAngle baseVal, animVal; - -}; - - - - - - -/*######################################################################### -## SVGICCColor -#########################################################################*/ - -/** - * - */ -class SVGICCColor -{ -public: - - /** - * - */ - virtual DOMString getColorProfile() - { - return colorProfile; - } - - /** - * - */ - virtual void setColorProfile(const DOMString &val) throw (DOMException) - { - colorProfile = val; - } - - /** - * - */ - virtual SVGNumberList &getColors() - { - return colors; - } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGICCColor() {} - - /** - * - */ - SVGICCColor(const SVGICCColor &other) - { - colorProfile = other.colorProfile; - colors = other.colors; - } - - /** - * - */ - virtual ~SVGICCColor() {} - -protected: - - DOMString colorProfile; - - SVGNumberList colors; - -}; - - -/*######################################################################### -## SVGColor -#########################################################################*/ - -/** - * - */ -class SVGColor : virtual public css::CSSValue -{ -public: - - - /** - * Color Types - */ - typedef enum - { - SVG_COLORTYPE_UNKNOWN = 0, - SVG_COLORTYPE_RGBCOLOR = 1, - SVG_COLORTYPE_RGBCOLOR_ICCCOLOR = 2, - SVG_COLORTYPE_CURRENTCOLOR = 3 - } ColorType; - - - /** - * - */ - virtual unsigned short getColorType() - { - return colorType; - } - - /** - * - */ - virtual css::RGBColor getRgbColor() - { - css::RGBColor col; - return col; - } - - /** - * - */ - virtual SVGICCColor getIccColor() - { - SVGICCColor col; - return col; - } - - - /** - * - */ - virtual void setRGBColor (const DOMString& rgbColor ) - throw( SVGException ) - { - } - - /** - * - */ - virtual void setRGBColorICCColor (const DOMString& rgbColor, - const DOMString& iccColor ) - throw( SVGException ) - { - } - - /** - * - */ - virtual void setColor (unsigned short colorType, - const DOMString& rgbColor, - const DOMString& iccColor ) - throw( SVGException ) - { - } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGColor() - { - colorType = SVG_COLORTYPE_UNKNOWN; - } - - /** - * - */ - SVGColor(const SVGColor &other) : css::CSSValue(other) - { - colorType = other.colorType; - } - - /** - * - */ - virtual ~SVGColor() {} - -protected: - - int colorType; - -}; - - - - - - - - - - -/*######################################################################### -## SVGRect -#########################################################################*/ - -/** - * - */ -class SVGRect -{ -public: - - /** - * - */ - virtual double getX() - { - return x; - } - - /** - * - */ - virtual void setX(double val) throw (DOMException) - { - x = val; - } - - /** - * - */ - virtual double getY() - { - return y; - } - - /** - * - */ - virtual void setY(double val) throw (DOMException) - { - y = val; - } - - /** - * - */ - virtual double getWidth() - { - return width; - } - - /** - * - */ - virtual void setWidth(double val) throw (DOMException) - { - width = val; - } - - /** - * - */ - virtual double getHeight() - { - return height; - } - - /** - * - */ - virtual void setHeight(double val) throw (DOMException) - { - height = val; - } - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGRect() - { - x = y = width = height = 0.0; - } - - /** - * - */ - SVGRect(const SVGRect &other) - { - x = other.x; - y = other.y; - width = other.width; - height = other.height; - } - - /** - * - */ - virtual ~SVGRect() {} - -protected: - - double x, y, width, height; - -}; - - - - - - -/*######################################################################### -## SVGAnimatedRect -#########################################################################*/ - -/** - * - */ -class SVGAnimatedRect -{ -public: - - /** - * - */ - virtual SVGRect &getBaseVal() - { - return baseVal; - } - - /** - * - */ - virtual SVGRect &getAnimVal() - { - return animVal; - } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGAnimatedRect() - { - } - - /** - * - */ - SVGAnimatedRect(const SVGAnimatedRect &other) - { - baseVal = other.baseVal; - animVal = other.animVal; - } - - /** - * - */ - virtual ~SVGAnimatedRect() {} - -protected: - - SVGRect baseVal, animVal; - -}; - - - -/*######################################################################### -## SVGPoint -#########################################################################*/ - -/** - * - */ -class SVGPoint -{ -public: - - - - /** - * - */ - virtual double getX() - { return x; } - - /** - * - */ - virtual void setX(double val) throw (DOMException) - { x = val; } - - /** - * - */ - virtual double getY() - { return y; } - - /** - * - */ - virtual void setY(double val) throw (DOMException) - { y = val; } - - /** - * - */ - virtual SVGPoint matrixTransform(const SVGMatrix &matrix) - { - SVGPoint point; - return point; - } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGPoint() - { x = y = 0; } - - /** - * - */ - SVGPoint(const SVGPoint &other) - { - x = other.x; - y = other.y; - } - - /** - * - */ - virtual ~SVGPoint() {} - -protected: - - double x, y; -}; - - - - - - -/*######################################################################### -## SVGPointList -#########################################################################*/ - -/** - * - */ -class SVGPointList -{ -public: - - /** - * - */ - virtual unsigned long getNumberOfItems() - { return items.size(); } - - /** - * - */ - virtual void clear() throw( DOMException ) - { items.clear(); } - - /** - * - */ - virtual SVGPoint initialize(const SVGPoint &newItem) - throw( DOMException, SVGException ) - { - items.clear(); - items.push_back(newItem); - return newItem; - } - - /** - * - */ - virtual SVGPoint getItem(unsigned long index ) - throw( DOMException ) - { - if (index >= items.size()) - { - SVGPoint point; - return point; - } - return items[index]; - } - - /** - * - */ - virtual SVGPoint insertItemBefore(const SVGPoint &newItem, - unsigned long index ) - throw( DOMException, SVGException ) - { - if (index >= items.size()) - items.push_back(newItem); - else - { - std::vector::iterator iter = items.begin() + index; - items.insert(iter, newItem); - } - return newItem; - } - - /** - * - */ - virtual SVGPoint replaceItem(const SVGPoint &newItem, - unsigned long index ) - throw( DOMException, SVGException ) - { - if (index >= items.size()) - { - SVGPoint point; - return point; - } - std::vector::iterator iter = items.begin() + index; - *iter = newItem; - return newItem; - } - - /** - * - */ - virtual SVGPoint removeItem(unsigned long index ) - throw( DOMException ) - { - if (index >= items.size()) - { - SVGPoint point; - return point; - } - std::vector::iterator iter = items.begin() + index; - SVGPoint oldItem = *iter; - items.erase(iter); - return oldItem; - } - - /** - * - */ - virtual SVGPoint appendItem(const SVGPoint &newItem) - throw( DOMException, SVGException ) - { - items.push_back(newItem); - return newItem; - } - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGPointList() {} - - - /** - * - */ - SVGPointList(const SVGPointList &other) - { - items = other.items; - } - - - /** - * - */ - virtual ~SVGPointList() {} - -protected: - - std::vector items; - -}; - - - - -/*######################################################################### -## SVGUnitTypes -#########################################################################*/ - -/** - * - */ -class SVGUnitTypes -{ -public: - - /** - * Unit Types - */ - typedef enum - { - SVG_UNIT_TYPE_UNKNOWN = 0, - SVG_UNIT_TYPE_USERSPACEONUSE = 1, - SVG_UNIT_TYPE_OBJECTBOUNDINGBOX = 2 - } UnitType; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGUnitTypes() {} - - /** - * - */ - virtual ~SVGUnitTypes() {} - -}; - - - - - - -/*######################################################################### -## SVGStylable -#########################################################################*/ - -/** - * - */ -class SVGStylable -{ -public: - - /** - * - */ - virtual SVGAnimatedString getClassName() - { - return className; - } - - /** - * - */ - virtual css::CSSStyleDeclaration getStyle() - { - return style; - } - - - /** - * - */ - virtual css::CSSValue getPresentationAttribute (const DOMString& name ) - { - css::CSSValue val; - //perform a lookup - return val; - } - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGStylable() {} - - /** - * - */ - SVGStylable(const SVGStylable &other) - { - className = other.className; - style = other.style; - } - - /** - * - */ - virtual ~SVGStylable() {} - -protected: - - SVGAnimatedString className; - css::CSSStyleDeclaration style; - -}; - - -/*######################################################################### -## SVGLocatable -#########################################################################*/ - -/** - * - */ -class SVGLocatable -{ -public: - - /** - * - */ - virtual SVGElement *getNearestViewportElement() - { - SVGElement *result = NULL; - return result; - } - - /** - * - */ - virtual SVGElement *getFarthestViewportElement() - { - SVGElement *result = NULL; - return result; - } - - /** - * - */ - virtual SVGRect getBBox ( ) - { - return bbox; - } - - /** - * - */ - virtual SVGMatrix getCTM ( ) - { - return ctm; - } - - /** - * - */ - virtual SVGMatrix getScreenCTM ( ) - { - return screenCtm; - } - - /** - * - */ - virtual SVGMatrix getTransformToElement (const SVGElement &element) - throw( SVGException ) - { - SVGMatrix result; - //do calculations - return result; - } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGLocatable() {} - - /** - * - */ - SVGLocatable(const SVGLocatable &other) - { - } - - /** - * - */ - virtual ~SVGLocatable() {} - -protected: - - SVGRect bbox; - SVGMatrix ctm; - SVGMatrix screenCtm; - -}; - - - - - - -/*######################################################################### -## SVGTransformable -#########################################################################*/ - -/** - * - */ -class SVGTransformable : public SVGLocatable -{ -public: - - - /** - * - */ - virtual SVGAnimatedTransformList &getTransform() - { - return transforms; - } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGTransformable() {} - - /** - * - */ - SVGTransformable(const SVGTransformable &other) : SVGLocatable(other) - { - transforms = other.transforms; - } - - /** - * - */ - virtual ~SVGTransformable() {} - -protected: - - SVGAnimatedTransformList transforms; -}; - - - - - - -/*######################################################################### -## SVGTests -#########################################################################*/ - -/** - * - */ -class SVGTests -{ -public: - - - /** - * - */ - virtual SVGStringList &getRequiredFeatures() - { - return requiredFeatures; - } - - /** - * - */ - virtual SVGStringList &getRequiredExtensions() - { - return requiredExtensions; - } - - /** - * - */ - virtual SVGStringList &getSystemLanguage() - { - return systemLanguage; - } - - - /** - * - */ - virtual bool hasExtension (const DOMString& extension ) - { - return false; - } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGTests() {} - - /** - * - */ - SVGTests(const SVGTests &other) - { - requiredFeatures = other.requiredFeatures; - requiredExtensions = other.requiredExtensions; - systemLanguage = other.systemLanguage; - } - - /** - * - */ - virtual ~SVGTests() {} - -protected: - - SVGStringList requiredFeatures; - SVGStringList requiredExtensions; - SVGStringList systemLanguage; - -}; - - - - - - -/*######################################################################### -## SVGLangSpace -#########################################################################*/ - -/** - * - */ -class SVGLangSpace -{ -public: - - - /** - * - */ - virtual DOMString getXmllang() - { - return xmlLang; - } - - /** - * - */ - virtual void setXmllang(const DOMString &val) - throw (DOMException) - { - xmlLang = val; - } - - /** - * - */ - virtual DOMString getXmlspace() - { - return xmlSpace; - } - - /** - * - */ - virtual void setXmlspace(const DOMString &val) - throw (DOMException) - { - xmlSpace = val; - } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGLangSpace() {} - - /** - * - */ - SVGLangSpace(const SVGLangSpace &other) - { - xmlLang = other.xmlLang; - xmlSpace = other.xmlSpace; - } - - /** - * - */ - virtual ~SVGLangSpace() {} - -protected: - - DOMString xmlLang; - DOMString xmlSpace; - -}; - - - - - - -/*######################################################################### -## SVGExternalResourcesRequired -#########################################################################*/ - -/** - * - */ -class SVGExternalResourcesRequired -{ -public: - - - /** - * - */ - virtual SVGAnimatedBoolean getExternalResourcesRequired() - { return required; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGExternalResourcesRequired() - { } - - - /** - * - */ - SVGExternalResourcesRequired(const SVGExternalResourcesRequired &other) - { - required = other.required; - } - - /** - * - */ - virtual ~SVGExternalResourcesRequired() {} - -protected: - - SVGAnimatedBoolean required; - -}; - - - - - - -/*######################################################################### -## SVGPreserveAspectRatio -#########################################################################*/ - -/** - * - */ -class SVGPreserveAspectRatio -{ -public: - - - /** - * Alignment Types - */ - typedef enum - { - SVG_PRESERVEASPECTRATIO_UNKNOWN = 0, - SVG_PRESERVEASPECTRATIO_NONE = 1, - SVG_PRESERVEASPECTRATIO_XMINYMIN = 2, - SVG_PRESERVEASPECTRATIO_XMIDYMIN = 3, - SVG_PRESERVEASPECTRATIO_XMAXYMIN = 4, - SVG_PRESERVEASPECTRATIO_XMINYMID = 5, - SVG_PRESERVEASPECTRATIO_XMIDYMID = 6, - SVG_PRESERVEASPECTRATIO_XMAXYMID = 7, - SVG_PRESERVEASPECTRATIO_XMINYMAX = 8, - SVG_PRESERVEASPECTRATIO_XMIDYMAX = 9, - SVG_PRESERVEASPECTRATIO_XMAXYMAX = 10 - } AlignmentType; - - - /** - * Meet-or-slice Types - */ - typedef enum - { - SVG_MEETORSLICE_UNKNOWN = 0, - SVG_MEETORSLICE_MEET = 1, - SVG_MEETORSLICE_SLICE = 2 - } MeetOrSliceType; - - - /** - * - */ - virtual unsigned short getAlign() - { return align; } - - /** - * - */ - virtual void setAlign(unsigned short val) throw (DOMException) - { align = val; } - - /** - * - */ - virtual unsigned short getMeetOrSlice() - { return meetOrSlice; } - - /** - * - */ - virtual void setMeetOrSlice(unsigned short val) throw (DOMException) - { meetOrSlice = val; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGPreserveAspectRatio() - { - align = SVG_PRESERVEASPECTRATIO_UNKNOWN; - meetOrSlice = SVG_MEETORSLICE_UNKNOWN; - } - - /** - * - */ - SVGPreserveAspectRatio(const SVGPreserveAspectRatio &other) - { - align = other.align; - meetOrSlice = other.meetOrSlice; - } - - /** - * - */ - virtual ~SVGPreserveAspectRatio() {} - -protected: - - unsigned short align; - unsigned short meetOrSlice; - -}; - - - - - - -/*######################################################################### -## SVGAnimatedPreserveAspectRatio -#########################################################################*/ - -/** - * - */ -class SVGAnimatedPreserveAspectRatio -{ -public: - - - /** - * - */ - virtual SVGPreserveAspectRatio getBaseVal() - { return baseVal; } - - /** - * - */ - virtual SVGPreserveAspectRatio getAnimVal() - { return animVal; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGAnimatedPreserveAspectRatio() {} - - /** - * - */ - SVGAnimatedPreserveAspectRatio(const SVGAnimatedPreserveAspectRatio &other) - { - baseVal = other.baseVal; - baseVal = other.animVal; - } - - /** - * - */ - virtual ~SVGAnimatedPreserveAspectRatio() {} - -protected: - - SVGPreserveAspectRatio baseVal; - SVGPreserveAspectRatio animVal; - -}; - - - - -/*######################################################################### -## SVGFitToViewBox -#########################################################################*/ - -/** - * - */ -class SVGFitToViewBox -{ -public: - - /** - * - */ - virtual SVGAnimatedRect getViewBox() - { return viewBox; } - - /** - * - */ - virtual SVGAnimatedPreserveAspectRatio getPreserveAspectRatio() - { return preserveAspectRatio; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGFitToViewBox() - {} - - /** - * - */ - - SVGFitToViewBox(const SVGFitToViewBox &other) - { - viewBox = other.viewBox; - preserveAspectRatio = other.preserveAspectRatio; - } - - /** - * - */ - virtual ~SVGFitToViewBox() {} - -protected: - - SVGAnimatedRect viewBox; - - SVGAnimatedPreserveAspectRatio preserveAspectRatio; - -}; - - -/*######################################################################### -## SVGZoomAndPan -#########################################################################*/ - -/** - * - */ -class SVGZoomAndPan -{ -public: - - - /** - * Zoom and Pan Types - */ - typedef enum - { - SVG_ZOOMANDPAN_UNKNOWN = 0, - SVG_ZOOMANDPAN_DISABLE = 1, - SVG_ZOOMANDPAN_MAGNIFY = 2 - } ZoomAndPanType; - - - /** - * - */ - virtual unsigned short getZoomAndPan() - { return zoomAndPan; } - - /** - * - */ - virtual void setZoomAndPan(unsigned short val) throw (DOMException) - { zoomAndPan = val; } - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGZoomAndPan() - { zoomAndPan = SVG_ZOOMANDPAN_UNKNOWN; } - - /** - * - */ - SVGZoomAndPan(const SVGZoomAndPan &other) - { zoomAndPan = other.zoomAndPan; } - - /** - * - */ - virtual ~SVGZoomAndPan() {} - -protected: - - unsigned short zoomAndPan; - -}; - - - - - - -/*######################################################################### -## SVGViewSpec -#########################################################################*/ - -/** - * - */ -class SVGViewSpec : public SVGZoomAndPan, - public SVGFitToViewBox -{ -public: - - /** - * - */ - virtual SVGTransformList getTransform() - { return transform; } - - /** - * - */ - virtual SVGElement *getViewTarget() - { return viewTarget; } - - /** - * - */ - virtual DOMString getViewBoxString() - { - DOMString ret; - return ret; - } - - /** - * - */ - virtual DOMString getPreserveAspectRatioString() - { - DOMString ret; - return ret; - } - - /** - * - */ - virtual DOMString getTransformString() - { - DOMString ret; - return ret; - } - - /** - * - */ - virtual DOMString getViewTargetString() - { - DOMString ret; - return ret; - } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGViewSpec() - { - viewTarget = NULL; - } - - /** - * - */ - SVGViewSpec(const SVGViewSpec &other) : SVGZoomAndPan(other), SVGFitToViewBox(other) - { - viewTarget = other.viewTarget; - transform = other.transform; - } - - /** - * - */ - virtual ~SVGViewSpec() {} - -protected: - - SVGElement *viewTarget; - SVGTransformList transform; -}; - - - - - - -/*######################################################################### -## SVGURIReference -#########################################################################*/ - -/** - * - */ -class SVGURIReference -{ -public: - - /** - * - */ - virtual SVGAnimatedString getHref() - { return href; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGURIReference() {} - - /** - * - */ - SVGURIReference(const SVGURIReference &other) - { - href = other.href; - } - - /** - * - */ - virtual ~SVGURIReference() {} - -protected: - - SVGAnimatedString href; - -}; - - - - - - -/*######################################################################### -## SVGCSSRule -#########################################################################*/ - -/** - * - */ -class SVGCSSRule : public css::CSSRule -{ -public: - - - /** - * Additional CSS RuleType to support ICC color specifications - */ - typedef enum - { - COLOR_PROFILE_RULE = 7 - } ColorProfileRuleType; - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGCSSRule() - { type = COLOR_PROFILE_RULE; } - - /** - * - */ - SVGCSSRule(const SVGCSSRule &other) : css::CSSRule(other) - { type = COLOR_PROFILE_RULE; } - - /** - * - */ - virtual ~SVGCSSRule() {} - -}; - - - -/*######################################################################### -## SVGRenderingIntent -#########################################################################*/ - -/** - * - */ -class SVGRenderingIntent -{ -public: - - /** - * Rendering Intent Types - */ - typedef enum - { - RENDERING_INTENT_UNKNOWN = 0, - RENDERING_INTENT_AUTO = 1, - RENDERING_INTENT_PERCEPTUAL = 2, - RENDERING_INTENT_RELATIVE_COLORIMETRIC = 3, - RENDERING_INTENT_SATURATION = 4, - RENDERING_INTENT_ABSOLUTE_COLORIMETRIC = 5 - } RenderingIntentType; - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGRenderingIntent() - { - renderingIntentType = RENDERING_INTENT_UNKNOWN; - } - - /** - * - */ - SVGRenderingIntent(const SVGRenderingIntent &other) - { - renderingIntentType = other.renderingIntentType; - } - - /** - * - */ - virtual ~SVGRenderingIntent() {} - -protected: - - unsigned short renderingIntentType; -}; - - - - - - - -/*######################################################################### -########################################################################### -## P A T H S E G M E N T S -########################################################################### -#########################################################################*/ - -static char *pathSegLetters[] = -{ - "@", // PATHSEG_UNKNOWN, - "z", // PATHSEG_CLOSEPATH - "M", // PATHSEG_MOVETO_ABS - "m", // PATHSEG_MOVETO_REL, - "L", // PATHSEG_LINETO_ABS - "l", // PATHSEG_LINETO_REL - "C", // PATHSEG_CURVETO_CUBIC_ABS - "c", // PATHSEG_CURVETO_CUBIC_REL - "Q", // PATHSEG_CURVETO_QUADRATIC_ABS, - "q", // PATHSEG_CURVETO_QUADRATIC_REL - "A", // PATHSEG_ARC_ABS - "a", // PATHSEG_ARC_REL, - "H", // PATHSEG_LINETO_HORIZONTAL_ABS, - "h", // PATHSEG_LINETO_HORIZONTAL_REL - "V", // PATHSEG_LINETO_VERTICAL_ABS - "v", // PATHSEG_LINETO_VERTICAL_REL - "S", // PATHSEG_CURVETO_CUBIC_SMOOTH_ABS - "s", // PATHSEG_CURVETO_CUBIC_SMOOTH_REL - "T", // PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS - "t" // PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL -}; - -/*######################################################################### -## SVGPathSeg -#########################################################################*/ - -/** - * - */ -class SVGPathSeg -{ -public: - - - - /** - * Path Segment Types - */ - typedef enum - { - PATHSEG_UNKNOWN = 0, - PATHSEG_CLOSEPATH = 1, - PATHSEG_MOVETO_ABS = 2, - PATHSEG_MOVETO_REL = 3, - PATHSEG_LINETO_ABS = 4, - PATHSEG_LINETO_REL = 5, - PATHSEG_CURVETO_CUBIC_ABS = 6, - PATHSEG_CURVETO_CUBIC_REL = 7, - PATHSEG_CURVETO_QUADRATIC_ABS = 8, - PATHSEG_CURVETO_QUADRATIC_REL = 9, - PATHSEG_ARC_ABS = 10, - PATHSEG_ARC_REL = 11, - PATHSEG_LINETO_HORIZONTAL_ABS = 12, - PATHSEG_LINETO_HORIZONTAL_REL = 13, - PATHSEG_LINETO_VERTICAL_ABS = 14, - PATHSEG_LINETO_VERTICAL_REL = 15, - PATHSEG_CURVETO_CUBIC_SMOOTH_ABS = 16, - PATHSEG_CURVETO_CUBIC_SMOOTH_REL = 17, - PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS = 18, - PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL = 19 - } PathSegmentType; - - /** - * - */ - virtual unsigned short getPathSegType() - { return type; } - - /** - * - */ - virtual DOMString getPathSegTypeAsLetter() - { - int typ = type; - if (typ<0 || typ>PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL) - typ = PATHSEG_UNKNOWN; - char *ch = pathSegLetters[typ]; - DOMString letter = ch; - return letter; - } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGPathSeg() - { type = PATHSEG_UNKNOWN; } - - /** - * - */ - SVGPathSeg(const SVGPathSeg &other) - { - type = other.type; - } - - /** - * - */ - virtual ~SVGPathSeg() {} - -protected: - - int type; - -}; - - - - - - -/*######################################################################### -## SVGPathSegClosePath -#########################################################################*/ - -/** - * - */ -class SVGPathSegClosePath : public SVGPathSeg -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGPathSegClosePath() - { - type = PATHSEG_CLOSEPATH; - } - - /** - * - */ - SVGPathSegClosePath(const SVGPathSegClosePath &other) : SVGPathSeg(other) - { - type = PATHSEG_CLOSEPATH; - } - - /** - * - */ - virtual ~SVGPathSegClosePath() {} - -}; - - - - -/*######################################################################### -## SVGPathSegMovetoAbs -#########################################################################*/ - -/** - * - */ -class SVGPathSegMovetoAbs : public SVGPathSeg -{ -public: - - /** - * - */ - virtual double getX() - { return x; } - - /** - * - */ - virtual void setX(double val) throw (DOMException) - { x = val; } - - /** - * - */ - virtual double getY() - { return y; } - - /** - * - */ - virtual void setY(double val) throw (DOMException) - { y = val; } - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGPathSegMovetoAbs() - { - type = PATHSEG_MOVETO_ABS; - x = y = 0.0; - } - - /** - * - */ - SVGPathSegMovetoAbs(double xArg, double yArg) - { - type = PATHSEG_MOVETO_ABS; - x = xArg; y = yArg; - } - - /** - * - */ - SVGPathSegMovetoAbs(const SVGPathSegMovetoAbs &other) : SVGPathSeg(other) - { - type = PATHSEG_MOVETO_ABS; - x = other.x; y = other.y; - } - - /** - * - */ - virtual ~SVGPathSegMovetoAbs() {} - -protected: - - double x,y; - -}; - - - - - - -/*######################################################################### -## SVGPathSegMovetoRel -#########################################################################*/ - -/** - * - */ -class SVGPathSegMovetoRel : public SVGPathSeg -{ -public: - - /** - * - */ - virtual double getX() - { return x; } - - /** - * - */ - virtual void setX(double val) throw (DOMException) - { x = val; } - - /** - * - */ - virtual double getY() - { return y; } - - /** - * - */ - virtual void setY(double val) throw (DOMException) - { y = val; } - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGPathSegMovetoRel() - { - type = PATHSEG_MOVETO_REL; - x = y = 0.0; - } - - - /** - * - */ - SVGPathSegMovetoRel(double xArg, double yArg) - { - type = PATHSEG_MOVETO_REL; - x = xArg; y = yArg; - } - - /** - * - */ - SVGPathSegMovetoRel(const SVGPathSegMovetoRel &other) : SVGPathSeg(other) - { - type = PATHSEG_MOVETO_REL; - x = other.x; y = other.y; - } - - /** - * - */ - virtual ~SVGPathSegMovetoRel() {} - -protected: - - double x,y; -}; - - - - - - -/*######################################################################### -## SVGPathSegLinetoAbs -#########################################################################*/ - -/** - * - */ -class SVGPathSegLinetoAbs : public SVGPathSeg -{ -public: - - /** - * - */ - virtual double getX() - { return x; } - - /** - * - */ - virtual void setX(double val) throw (DOMException) - { x = val; } - - /** - * - */ - virtual double getY() - { return y; } - - /** - * - */ - virtual void setY(double val) throw (DOMException) - { y = val; } - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGPathSegLinetoAbs() - { - type = PATHSEG_LINETO_ABS; - x = y = 0.0; - } - - - /** - * - */ - SVGPathSegLinetoAbs(double xArg, double yArg) - { - type = PATHSEG_LINETO_ABS; - x = xArg; y = yArg; - } - - /** - * - */ - SVGPathSegLinetoAbs(const SVGPathSegLinetoAbs &other) : SVGPathSeg(other) - { - type = PATHSEG_LINETO_ABS; - x = other.x; y = other.y; - } - - /** - * - */ - virtual ~SVGPathSegLinetoAbs() {} - -protected: - - double x,y; -}; - - - - - - -/*######################################################################### -## SVGPathSegLinetoRel -#########################################################################*/ - -/** - * - */ -class SVGPathSegLinetoRel : public SVGPathSeg -{ -public: - - /** - * - */ - virtual double getX() - { return x; } - - /** - * - */ - virtual void setX(double val) throw (DOMException) - { x = val; } - - /** - * - */ - virtual double getY() - { return y; } - - /** - * - */ - virtual void setY(double val) throw (DOMException) - { y = val; } - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGPathSegLinetoRel() - { - type = PATHSEG_LINETO_REL; - x = y = 0.0; - } - - - /** - * - */ - SVGPathSegLinetoRel(double xArg, double yArg) - { - type = PATHSEG_LINETO_REL; - x = xArg; y = yArg; - } - - /** - * - */ - SVGPathSegLinetoRel(const SVGPathSegLinetoRel &other) : SVGPathSeg(other) - { - type = PATHSEG_LINETO_REL; - x = other.x; y = other.y; - } - - /** - * - */ - virtual ~SVGPathSegLinetoRel() {} - -protected: - - double x,y; -}; - - - - - - -/*######################################################################### -## SVGPathSegCurvetoCubicAbs -#########################################################################*/ - -/** - * - */ -class SVGPathSegCurvetoCubicAbs : public SVGPathSeg -{ -public: - - /** - * - */ - virtual double getX() - { return x; } - - /** - * - */ - virtual void setX(double val) throw (DOMException) - { x = val; } - - /** - * - */ - virtual double getY() - { return y; } - - /** - * - */ - virtual void setY(double val) throw (DOMException) - { y = val; } - - /** - * - */ - virtual double getX1() - { return x1; } - - /** - * - */ - virtual void setX1(double val) throw (DOMException) - { x1 = val; } - - /** - * - */ - virtual double getY1() - { return y1; } - - /** - * - */ - virtual void setY1(double val) throw (DOMException) - { y1 = val; } - - - /** - * - */ - virtual double getX2() - { return x2; } - - /** - * - */ - virtual void setX2(double val) throw (DOMException) - { x2 = val; } - - /** - * - */ - virtual double getY2() - { return y2; } - - /** - * - */ - virtual void setY2(double val) throw (DOMException) - { y2 = val; } - - - //################## - //# Non-API methods - //################## - - - /** - * - */ - SVGPathSegCurvetoCubicAbs() - { - type = PATHSEG_CURVETO_CUBIC_ABS; - x = y = x1 = y1 = x2 = y2 = 0.0; - } - - /** - * - */ - SVGPathSegCurvetoCubicAbs(double xArg, double yArg, - double x1Arg, double y1Arg, - double x2Arg, double y2Arg) - { - type = PATHSEG_CURVETO_CUBIC_ABS; - x = xArg; y = yArg; - x1 = x1Arg; y1 = y1Arg; - x2 = x2Arg; y2 = y2Arg; - } - - /** - * - */ - SVGPathSegCurvetoCubicAbs(const SVGPathSegCurvetoCubicAbs &other) - : SVGPathSeg(other) - { - type = PATHSEG_CURVETO_CUBIC_ABS; - x = other.x; y = other.y; - x1 = other.x1; y1 = other.y1; - x2 = other.x2; y2 = other.y2; - } - - /** - * - */ - virtual ~SVGPathSegCurvetoCubicAbs() {} - -protected: - - double x, y, x1, y1, x2, y2; - -}; - - - - - - -/*######################################################################### -## SVGPathSegCurvetoCubicRel -#########################################################################*/ - -/** - * - */ -class SVGPathSegCurvetoCubicRel : public SVGPathSeg -{ -public: - - /** - * - */ - virtual double getX() - { return x; } - - /** - * - */ - virtual void setX(double val) throw (DOMException) - { x = val; } - - /** - * - */ - virtual double getY() - { return y; } - - /** - * - */ - virtual void setY(double val) throw (DOMException) - { y = val; } - - /** - * - */ - virtual double getX1() - { return x1; } - - /** - * - */ - virtual void setX1(double val) throw (DOMException) - { x1 = val; } - - /** - * - */ - virtual double getY1() - { return y1; } - - /** - * - */ - virtual void setY1(double val) throw (DOMException) - { y1 = val; } - - - /** - * - */ - virtual double getX2() - { return x2; } - - /** - * - */ - virtual void setX2(double val) throw (DOMException) - { x2 = val; } - - /** - * - */ - virtual double getY2() - { return y2; } - - /** - * - */ - virtual void setY2(double val) throw (DOMException) - { y2 = val; } - - - //################## - //# Non-API methods - //################## - - - /** - * - */ - SVGPathSegCurvetoCubicRel() - { - type = PATHSEG_CURVETO_CUBIC_REL; - x = y = x1 = y1 = x2 = y2 = 0.0; - } - - - /** - * - */ - SVGPathSegCurvetoCubicRel(double xArg, double yArg, - double x1Arg, double y1Arg, - double x2Arg, double y2Arg) - { - type = PATHSEG_CURVETO_CUBIC_REL; - x = xArg; y = yArg; - x1 = x1Arg; y1 = y1Arg; - x2 = x2Arg; y2 = y2Arg; - } - - /** - * - */ - SVGPathSegCurvetoCubicRel(const SVGPathSegCurvetoCubicRel &other) - : SVGPathSeg(other) - { - type = PATHSEG_CURVETO_CUBIC_REL; - x = other.x; y = other.y; - x1 = other.x1; y1 = other.y1; - x2 = other.x2; y2 = other.y2; - } - - /** - * - */ - virtual ~SVGPathSegCurvetoCubicRel() {} - -protected: - - double x, y, x1, y1, x2, y2; - -}; - - - - - - -/*######################################################################### -## SVGPathSegCurvetoQuadraticAbs -#########################################################################*/ - -/** - * - */ -class SVGPathSegCurvetoQuadraticAbs : public SVGPathSeg -{ -public: - - /** - * - */ - virtual double getX() - { return x; } - - /** - * - */ - virtual void setX(double val) throw (DOMException) - { x = val; } - - /** - * - */ - virtual double getY() - { return y; } - - /** - * - */ - virtual void setY(double val) throw (DOMException) - { y = val; } - - /** - * - */ - virtual double getX1() - { return x1; } - - /** - * - */ - virtual void setX1(double val) throw (DOMException) - { x1 = val; } - - /** - * - */ - virtual double getY1() - { return y1; } - - /** - * - */ - virtual void setY1(double val) throw (DOMException) - { y1 = val; } - - - //################## - //# Non-API methods - //################## - - - /** - * - */ - SVGPathSegCurvetoQuadraticAbs() - { - type = PATHSEG_CURVETO_QUADRATIC_ABS; - x = y = x1 = y1 = 0.0; - } - - /** - * - */ - SVGPathSegCurvetoQuadraticAbs(double xArg, double yArg, - double x1Arg, double y1Arg) - { - type = PATHSEG_CURVETO_QUADRATIC_ABS; - x = xArg; y = yArg; - x1 = x1Arg; y1 = y1Arg; - } - - /** - * - */ - SVGPathSegCurvetoQuadraticAbs(const SVGPathSegCurvetoQuadraticAbs &other) - : SVGPathSeg(other) - { - type = PATHSEG_CURVETO_QUADRATIC_ABS; - x = other.x; y = other.y; - x1 = other.x1; y1 = other.y1; - } - - /** - * - */ - virtual ~SVGPathSegCurvetoQuadraticAbs() {} - -protected: - - double x, y, x1, y1; - -}; - - - - - - -/*######################################################################### -## SVGPathSegCurvetoQuadraticRel -#########################################################################*/ - -/** - * - */ -class SVGPathSegCurvetoQuadraticRel : public SVGPathSeg -{ -public: - - /** - * - */ - virtual double getX() - { return x; } - - /** - * - */ - virtual void setX(double val) throw (DOMException) - { x = val; } - - /** - * - */ - virtual double getY() - { return y; } - - /** - * - */ - virtual void setY(double val) throw (DOMException) - { y = val; } - - /** - * - */ - virtual double getX1() - { return x1; } - - /** - * - */ - virtual void setX1(double val) throw (DOMException) - { x1 = val; } - - /** - * - */ - virtual double getY1() - { return y1; } - - /** - * - */ - virtual void setY1(double val) throw (DOMException) - { y1 = val; } - - - //################## - //# Non-API methods - //################## - - - /** - * - */ - SVGPathSegCurvetoQuadraticRel() - { - type = PATHSEG_CURVETO_QUADRATIC_REL; - x = y = x1 = y1 = 0.0; - } - - - /** - * - */ - SVGPathSegCurvetoQuadraticRel(double xArg, double yArg, - double x1Arg, double y1Arg) - { - type = PATHSEG_CURVETO_QUADRATIC_REL; - x = xArg; y = yArg; - x1 = x1Arg; y1 = y1Arg; - } - - /** - * - */ - SVGPathSegCurvetoQuadraticRel(const SVGPathSegCurvetoQuadraticRel &other) - : SVGPathSeg(other) - { - type = PATHSEG_CURVETO_QUADRATIC_REL; - x = other.x; y = other.y; - x1 = other.x1; y1 = other.y1; - } - - /** - * - */ - virtual ~SVGPathSegCurvetoQuadraticRel() {} - -protected: - - double x, y, x1, y1; - -}; - - - - - - -/*######################################################################### -## SVGPathSegArcAbs -#########################################################################*/ - -/** - * - */ -class SVGPathSegArcAbs : public SVGPathSeg -{ -public: - - /** - * - */ - virtual double getX() - { return x; } - - /** - * - */ - virtual void setX(double val) throw (DOMException) - { x = val; } - - /** - * - */ - virtual double getY() - { return y; } - - /** - * - */ - virtual void setY(double val) throw (DOMException) - { y = val; } - - /** - * - */ - virtual double getR1() - { return r1; } - - /** - * - */ - virtual void setR1(double val) throw (DOMException) - { r1 = val; } - - /** - * - */ - virtual double getR2() - { return r2; } - - /** - * - */ - virtual void setR2(double val) throw (DOMException) - { r2 = val; } - - /** - * - */ - virtual double getAngle() - { return angle; } - - /** - * - */ - virtual void setAngle(double val) throw (DOMException) - { angle = val; } - - /** - * - */ - virtual bool getLargeArcFlag() - { return largeArcFlag; } - - /** - * - */ - virtual void setLargeArcFlag(bool val) throw (DOMException) - { largeArcFlag = val; } - - /** - * - */ - virtual bool getSweepFlag() - { return sweepFlag; } - - /** - * - */ - virtual void setSweepFlag(bool val) throw (DOMException) - { sweepFlag = val; } - - //################## - //# Non-API methods - //################## - - - /** - * - */ - SVGPathSegArcAbs() - { - type = PATHSEG_ARC_ABS; - x = y = r1 = r2 = angle = 0.0; - largeArcFlag = sweepFlag = false; - } - - /** - * - */ - SVGPathSegArcAbs(double xArg, double yArg, - double r1Arg, double r2Arg, - double angleArg, - bool largeArcFlagArg, - bool sweepFlagArg ) - - { - type = PATHSEG_ARC_ABS; - x = xArg; y = yArg; - r1 = r1Arg; r2 = r2Arg; - angle = angleArg; - largeArcFlag = largeArcFlagArg; - sweepFlag = sweepFlagArg; - } - - /** - * - */ - SVGPathSegArcAbs(const SVGPathSegArcAbs &other) - : SVGPathSeg(other) - { - type = PATHSEG_ARC_ABS; - x = other.x; y = other.y; - r1 = other.r1; r2 = other.r2; - angle = other.angle; - largeArcFlag = other.largeArcFlag; - sweepFlag = other.sweepFlag; - } - - /** - * - */ - virtual ~SVGPathSegArcAbs() {} - -protected: - - double x, y, r1, r2, angle; - bool largeArcFlag; - bool sweepFlag; - -}; - - - -/*######################################################################### -## SVGPathSegArcRel -#########################################################################*/ - -/** - * - */ -class SVGPathSegArcRel : public SVGPathSeg -{ -public: - - /** - * - */ - virtual double getX() - { return x; } - - /** - * - */ - virtual void setX(double val) throw (DOMException) - { x = val; } - - /** - * - */ - virtual double getY() - { return y; } - - /** - * - */ - virtual void setY(double val) throw (DOMException) - { y = val; } - - /** - * - */ - virtual double getR1() - { return r1; } - - /** - * - */ - virtual void setR1(double val) throw (DOMException) - { r1 = val; } - - /** - * - */ - virtual double getR2() - { return r2; } - - /** - * - */ - virtual void setR2(double val) throw (DOMException) - { r2 = val; } - - /** - * - */ - virtual double getAngle() - { return angle; } - - /** - * - */ - virtual void setAngle(double val) throw (DOMException) - { angle = val; } - - /** - * - */ - virtual bool getLargeArcFlag() - { return largeArcFlag; } - - /** - * - */ - virtual void setLargeArcFlag(bool val) throw (DOMException) - { largeArcFlag = val; } - - /** - * - */ - virtual bool getSweepFlag() - { return sweepFlag; } - - /** - * - */ - virtual void setSweepFlag(bool val) throw (DOMException) - { sweepFlag = val; } - - //################## - //# Non-API methods - //################## - - - /** - * - */ - SVGPathSegArcRel() - { - type = PATHSEG_ARC_REL; - x = y = r1 = r2 = angle = 0.0; - largeArcFlag = sweepFlag = false; - } - - - /** - * - */ - SVGPathSegArcRel(double xArg, double yArg, - double r1Arg, double r2Arg, - double angleArg, - bool largeArcFlagArg, - bool sweepFlagArg ) - - { - type = PATHSEG_ARC_REL; - x = xArg; y = yArg; - r1 = r1Arg; r2 = r2Arg; - angle = angleArg; - largeArcFlag = largeArcFlagArg; - sweepFlag = sweepFlagArg; - } - - /** - * - */ - SVGPathSegArcRel(const SVGPathSegArcRel &other) - : SVGPathSeg(other) - { - type = PATHSEG_ARC_REL; - x = other.x; y = other.y; - r1 = other.r1; r2 = other.r2; - angle = other.angle; - largeArcFlag = other.largeArcFlag; - sweepFlag = other.sweepFlag; - } - - /** - * - */ - virtual ~SVGPathSegArcRel() {} - -protected: - - double x, y, r1, r2, angle; - bool largeArcFlag; - bool sweepFlag; - -}; - - - - - - -/*######################################################################### -## SVGPathSegLinetoHorizontalAbs -#########################################################################*/ - -/** - * - */ -class SVGPathSegLinetoHorizontalAbs : public SVGPathSeg -{ -public: - - /** - * - */ - virtual double getX() - { return x; } - - /** - * - */ - virtual void setX(double val) throw (DOMException) - { x = val; } - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGPathSegLinetoHorizontalAbs() - { - type = PATHSEG_LINETO_HORIZONTAL_ABS; - x = 0.0; - } - - - /** - * - */ - SVGPathSegLinetoHorizontalAbs(double xArg) - { - type = PATHSEG_LINETO_HORIZONTAL_ABS; - x = xArg; - } - - /** - * - */ - SVGPathSegLinetoHorizontalAbs(const SVGPathSegLinetoHorizontalAbs &other) - : SVGPathSeg(other) - { - type = PATHSEG_LINETO_HORIZONTAL_ABS; - x = other.x; - } - - /** - * - */ - virtual ~SVGPathSegLinetoHorizontalAbs() {} - -protected: - - double x; - -}; - - - - - - -/*######################################################################### -## SVGPathSegLinetoHorizontalRel -#########################################################################*/ - -/** - * - */ -class SVGPathSegLinetoHorizontalRel : public SVGPathSeg -{ -public: - - /** - * - */ - virtual double getX() - { return x; } - - /** - * - */ - virtual void setX(double val) throw (DOMException) - { x = val; } - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGPathSegLinetoHorizontalRel() - { - type = PATHSEG_LINETO_HORIZONTAL_REL; - x = 0.0; - } - - - /** - * - */ - SVGPathSegLinetoHorizontalRel(double xArg) - { - type = PATHSEG_LINETO_HORIZONTAL_REL; - x = xArg; - } - - /** - * - */ - SVGPathSegLinetoHorizontalRel(const SVGPathSegLinetoHorizontalRel &other) - : SVGPathSeg(other) - { - type = PATHSEG_LINETO_HORIZONTAL_REL; - x = other.x; - } - - /** - * - */ - virtual ~SVGPathSegLinetoHorizontalRel() {} - -protected: - - double x; - -}; - - - -/*######################################################################### -## SVGPathSegLinetoVerticalAbs -#########################################################################*/ - -/** - * - */ -class SVGPathSegLinetoVerticalAbs : public SVGPathSeg -{ -public: - - /** - * - */ - virtual double getY() - { return y; } - - /** - * - */ - virtual void setY(double val) throw (DOMException) - { y = val; } - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGPathSegLinetoVerticalAbs() - { - type = PATHSEG_LINETO_VERTICAL_ABS; - y = 0.0; - } - - - /** - * - */ - SVGPathSegLinetoVerticalAbs(double yArg) - { - type = PATHSEG_LINETO_VERTICAL_ABS; - y = yArg; - } - - /** - * - */ - SVGPathSegLinetoVerticalAbs(const SVGPathSegLinetoVerticalAbs &other) - : SVGPathSeg(other) - { - type = PATHSEG_LINETO_VERTICAL_ABS; - y = other.y; - } - - /** - * - */ - virtual ~SVGPathSegLinetoVerticalAbs() {} - -protected: - - double y; - -}; - - - -/*######################################################################### -## SVGPathSegLinetoVerticalRel -#########################################################################*/ - -/** - * - */ -class SVGPathSegLinetoVerticalRel : public SVGPathSeg -{ -public: - - /** - * - */ - virtual double getY() - { return y; } - - /** - * - */ - virtual void setY(double val) throw (DOMException) - { y = val; } - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGPathSegLinetoVerticalRel() - { - type = PATHSEG_LINETO_VERTICAL_REL; - y = 0.0; - } - - - /** - * - */ - SVGPathSegLinetoVerticalRel(double yArg) - { - type = PATHSEG_LINETO_VERTICAL_REL; - y = yArg; - } - - /** - * - */ - SVGPathSegLinetoVerticalRel(const SVGPathSegLinetoVerticalRel &other) - : SVGPathSeg(other) - { - type = PATHSEG_LINETO_VERTICAL_REL; - y = other.y; - } - - /** - * - */ - virtual ~SVGPathSegLinetoVerticalRel() {} - -protected: - - double y; - -}; - - - - - - -/*######################################################################### -## SVGPathSegCurvetoCubicSmoothAbs -#########################################################################*/ - -/** - * - */ -class SVGPathSegCurvetoCubicSmoothAbs : public SVGPathSeg -{ -public: - - /** - * - */ - virtual double getX() - { return x; } - - /** - * - */ - virtual void setX(double val) throw (DOMException) - { x = val; } - - /** - * - */ - virtual double getY() - { return y; } - - /** - * - */ - virtual void setY(double val) throw (DOMException) - { y = val; } - - /** - * - */ - virtual double getX2() - { return x2; } - - /** - * - */ - virtual void setX2(double val) throw (DOMException) - { x2 = val; } - - /** - * - */ - virtual double getY2() - { return y2; } - - /** - * - */ - virtual void setY2(double val) throw (DOMException) - { y2 = val; } - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGPathSegCurvetoCubicSmoothAbs() - { - type = PATHSEG_CURVETO_CUBIC_SMOOTH_ABS; - x = y = x2 = y2 = 0.0; - } - - - /** - * - */ - SVGPathSegCurvetoCubicSmoothAbs(double xArg, double yArg, - double x2Arg, double y2Arg) - { - type = PATHSEG_CURVETO_CUBIC_SMOOTH_ABS; - x = xArg; y = yArg; - x2 = x2Arg; y2 = y2Arg; - } - - /** - * - */ - SVGPathSegCurvetoCubicSmoothAbs(const SVGPathSegCurvetoCubicSmoothAbs &other) - : SVGPathSeg(other) - { - type = PATHSEG_CURVETO_CUBIC_SMOOTH_ABS; - x = other.x; y = other.y; - x2 = other.x2; y2 = other.y2; - } - - /** - * - */ - virtual ~SVGPathSegCurvetoCubicSmoothAbs() {} - -protected: - - double x, y, x2, y2; - -}; - - - -/*######################################################################### -## SVGPathSegCurvetoCubicSmoothRel -#########################################################################*/ - -/** - * - */ -class SVGPathSegCurvetoCubicSmoothRel : public SVGPathSeg -{ -public: - - /** - * - */ - virtual double getX() - { return x; } - - /** - * - */ - virtual void setX(double val) throw (DOMException) - { x = val; } - - /** - * - */ - virtual double getY() - { return y; } - - /** - * - */ - virtual void setY(double val) throw (DOMException) - { y = val; } - - /** - * - */ - virtual double getX2() - { return x2; } - - /** - * - */ - virtual void setX2(double val) throw (DOMException) - { x2 = val; } - - /** - * - */ - virtual double getY2() - { return y2; } - - /** - * - */ - virtual void setY2(double val) throw (DOMException) - { y2 = val; } - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGPathSegCurvetoCubicSmoothRel() - { - type = PATHSEG_CURVETO_CUBIC_SMOOTH_REL; - x = y = x2 = y2 = 0.0; - } - - - /** - * - */ - SVGPathSegCurvetoCubicSmoothRel(double xArg, double yArg, - double x2Arg, double y2Arg) - { - type = PATHSEG_CURVETO_CUBIC_SMOOTH_REL; - x = xArg; y = yArg; - x2 = x2Arg; y2 = y2Arg; - } - - /** - * - */ - SVGPathSegCurvetoCubicSmoothRel(const SVGPathSegCurvetoCubicSmoothRel &other) - : SVGPathSeg(other) - { - type = PATHSEG_CURVETO_CUBIC_SMOOTH_REL; - x = other.x; y = other.y; - x2 = other.x2; y2 = other.y2; - } - - /** - * - */ - virtual ~SVGPathSegCurvetoCubicSmoothRel() {} - -protected: - - double x, y, x2, y2; - -}; - - - - - - -/*######################################################################### -## SVGPathSegCurvetoQuadraticSmoothAbs -#########################################################################*/ - -/** - * - */ -class SVGPathSegCurvetoQuadraticSmoothAbs : public SVGPathSeg -{ -public: - - /** - * - */ - virtual double getX() - { return x; } - - /** - * - */ - virtual void setX(double val) throw (DOMException) - { x = val; } - - /** - * - */ - virtual double getY() - { return y; } - - /** - * - */ - virtual void setY(double val) throw (DOMException) - { y = val; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGPathSegCurvetoQuadraticSmoothAbs() - { - type = PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS; - x = y = 0.0; - } - - - /** - * - */ - SVGPathSegCurvetoQuadraticSmoothAbs(double xArg, double yArg) - { - type = PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS; - x = xArg; y = yArg; - } - - /** - * - */ - SVGPathSegCurvetoQuadraticSmoothAbs(const SVGPathSegCurvetoQuadraticSmoothAbs &other) - : SVGPathSeg(other) - { - type = PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS; - x = y = 0.0; - } - - /** - * - */ - virtual ~SVGPathSegCurvetoQuadraticSmoothAbs() {} - -protected: - - double x, y; - -}; - - - - - - -/*######################################################################### -## SVGPathSegCurvetoQuadraticSmoothRel -#########################################################################*/ - -/** - * - */ -class SVGPathSegCurvetoQuadraticSmoothRel : public SVGPathSeg -{ -public: - - /** - * - */ - virtual double getX() - { return x; } - - /** - * - */ - virtual void setX(double val) throw (DOMException) - { x = val; } - - /** - * - */ - virtual double getY() - { return y; } - - /** - * - */ - virtual void setY(double val) throw (DOMException) - { y = val; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGPathSegCurvetoQuadraticSmoothRel() - { - type = PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL; - x = y = 0.0; - } - - - /** - * - */ - SVGPathSegCurvetoQuadraticSmoothRel(double xArg, double yArg) - { - type = PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL; - x = xArg; y = yArg; - } - - /** - * - */ - SVGPathSegCurvetoQuadraticSmoothRel(const SVGPathSegCurvetoQuadraticSmoothRel &other) - : SVGPathSeg(other) - { - type = PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL; - x = y = 0.0; - } - - /** - * - */ - virtual ~SVGPathSegCurvetoQuadraticSmoothRel() {} - -protected: - - double x, y; - -}; - - - - - - -/*######################################################################### -## SVGPathSegList -#########################################################################*/ - -/** - * - */ -class SVGPathSegList -{ -public: - - /** - * - */ - virtual unsigned long getNumberOfItems() - { return items.size(); } - - - /** - * - */ - virtual void clear () throw( DOMException ) - { items.clear(); } - - /** - * - */ - virtual SVGPathSeg initialize (const SVGPathSeg &newItem) - throw( DOMException, SVGException ) - { - items.clear(); - items.push_back(newItem); - return newItem; - } - - /** - * - */ - virtual SVGPathSeg getItem (unsigned long index) - throw( DOMException ) - { - if (index >= items.size()) - { - SVGPathSeg seg; - return seg; - } - return items[index]; - } - - /** - * - */ - virtual SVGPathSeg insertItemBefore(const SVGPathSeg &newItem, - unsigned long index ) - throw( DOMException, SVGException ) - { - if (index >= items.size()) - items.push_back(newItem); - else - { - std::vector::iterator iter = items.begin() + index; - items.insert(iter, newItem); - } - return newItem; - } - - /** - * - */ - virtual SVGPathSeg replaceItem(const SVGPathSeg &newItem, - unsigned long index ) - throw( DOMException, SVGException ) - { - if (index >= items.size()) - { - SVGPathSeg seg; - return seg; - } - std::vector::iterator iter = items.begin() + index; - *iter = newItem; - return newItem; - } - - /** - * - */ - virtual SVGPathSeg removeItem (unsigned long index) - throw (DOMException) - { - if (index >= items.size()) - { - SVGPathSeg seg; - return seg; - } - std::vector::iterator iter = items.begin() + index; - SVGPathSeg olditem = *iter; - items.erase(iter); - return olditem; - } - - /** - * - */ - virtual SVGPathSeg appendItem (const SVGPathSeg &newItem) - throw( DOMException, SVGException ) - { - items.push_back(newItem); - return newItem; - } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGPathSegList() {} - - - /** - * - */ - SVGPathSegList(const SVGPathSegList &other) - { - items = other.items; - } - - - /** - * - */ - virtual ~SVGPathSegList() {} - -protected: - - std::vector items; - -}; - - - - - - -/*######################################################################### -## SVGAnimatedPathData -#########################################################################*/ - -/** - * - */ -class SVGAnimatedPathData -{ -public: - - /** - * - */ - virtual SVGPathSegList getPathSegList() - { - SVGPathSegList list; - return list; - } - - /** - * - */ - virtual SVGPathSegList getNormalizedPathSegList() - { - SVGPathSegList list; - return list; - } - - /** - * - */ - virtual SVGPathSegList getAnimatedPathSegList() - { - SVGPathSegList list; - return list; - } - - /** - * - */ - virtual SVGPathSegList getAnimatedNormalizedPathSegList() - { - SVGPathSegList list; - return list; - } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGAnimatedPathData() - {} - - /** - * - */ - SVGAnimatedPathData(const SVGAnimatedPathData &other) - { - } - - /** - * - */ - virtual ~SVGAnimatedPathData() {} - -}; - - - - - - -/*######################################################################### -## SVGAnimatedPoints -#########################################################################*/ - -/** - * - */ -class SVGAnimatedPoints -{ -public: - - /** - * - */ - virtual SVGPointList getPoints() - { return points; } - - /** - * - */ - virtual SVGPointList getAnimatedPoints() - { return animatedPoints; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGAnimatedPoints() {} - - /** - * - */ - SVGAnimatedPoints(const SVGAnimatedPoints &other) - { - points = other.points; - animatedPoints = other.animatedPoints; - } - - /** - * - */ - virtual ~SVGAnimatedPoints() {} - -protected: - - SVGPointList points; - SVGPointList animatedPoints; - -}; - - - - - -/*######################################################################### -## SVGPaint -#########################################################################*/ - -/** - * - */ -class SVGPaint : public SVGColor -{ -public: - - - /** - * Paint Types - */ - typedef enum - { - SVG_PAINTTYPE_UNKNOWN = 0, - SVG_PAINTTYPE_RGBCOLOR = 1, - SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR = 2, - SVG_PAINTTYPE_NONE = 101, - SVG_PAINTTYPE_CURRENTCOLOR = 102, - SVG_PAINTTYPE_URI_NONE = 103, - SVG_PAINTTYPE_URI_CURRENTCOLOR = 104, - SVG_PAINTTYPE_URI_RGBCOLOR = 105, - SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR = 106, - SVG_PAINTTYPE_URI = 107 - } PaintType; - - - /** - * - */ - virtual unsigned short getPaintType() - { return paintType; } - - /** - * - */ - virtual DOMString getUri() - { return uri; } - - /** - * - */ - virtual void setUri (const DOMString& uriArg ) - { uri = uriArg; } - - /** - * - */ - virtual void setPaint (unsigned short paintTypeArg, - const DOMString& uriArg, - const DOMString& rgbColor, - const DOMString& iccColor ) - throw( SVGException ) - { - paintType = paintTypeArg; - uri = uriArg; - //do something with rgbColor - //do something with iccColor; - } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGPaint() - { - uri = ""; - paintType = SVG_PAINTTYPE_UNKNOWN; - } - - /** - * - */ - SVGPaint(const SVGPaint &other) : css::CSSValue(other), SVGColor(other) - { - uri = ""; - paintType = SVG_PAINTTYPE_UNKNOWN; - } - - /** - * - */ - virtual ~SVGPaint() {} - -protected: - - unsigned int paintType; - DOMString uri; - -}; - - - - -/*######################################################################### -## SVGColorProfileRule -#########################################################################*/ - -/** - * - */ -class SVGColorProfileRule : public SVGCSSRule, - public SVGRenderingIntent -{ - -public: - /** - * - */ - virtual DOMString getSrc() - { return src; } - - /** - * - */ - virtual void setSrc(const DOMString &val) throw (DOMException) - { src = val; } - - /** - * - */ - virtual DOMString getName() - { return name; } - - /** - * - */ - virtual void setName(const DOMString &val) throw (DOMException) - { name = val; } - - /** - * - */ - virtual unsigned short getRenderingIntent() - { return renderingIntent; } - - /** - * - */ - virtual void setRenderingIntent(unsigned short val) throw (DOMException) - { renderingIntent = val; } - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGColorProfileRule() {} - - /** - * - */ - SVGColorProfileRule(const SVGColorProfileRule &other) - : SVGCSSRule(other), SVGRenderingIntent(other) - { - renderingIntent = other.renderingIntent; - src = other.src; - name = other.name; - } - - /** - * - */ - virtual ~SVGColorProfileRule() {} - -protected: - - unsigned short renderingIntent; - DOMString src; - DOMString name; - -}; - - - -/*######################################################################### -## SVGFilterPrimitiveStandardAttributes -#########################################################################*/ - -/** - * - */ -class SVGFilterPrimitiveStandardAttributes : public SVGStylable -{ -public: - - - - /** - * - */ - virtual SVGAnimatedLength getX() - { return x; } - - /** - * - */ - virtual SVGAnimatedLength getY() - { return y; } - - /** - * - */ - virtual SVGAnimatedLength getWidth() - { return width; } - - /** - * - */ - virtual SVGAnimatedLength getHeight() - { return height; } - - /** - * - */ - virtual SVGAnimatedString getResult() - { return result; } - - - - //################## - //# Non-API methods - //################## - - - /** - * - */ - SVGFilterPrimitiveStandardAttributes() - {} - - /** - * - */ - SVGFilterPrimitiveStandardAttributes(const SVGFilterPrimitiveStandardAttributes &other) - : SVGStylable(other) - { - x = other.x; - y = other.y; - width = other.width; - height = other.height; - result = other.result; - } - - /** - * - */ - virtual ~SVGFilterPrimitiveStandardAttributes() {} - -protected: - - SVGAnimatedLength x; - SVGAnimatedLength y; - SVGAnimatedLength width; - SVGAnimatedLength height; - SVGAnimatedString result; - -}; - - - - - - - - - - - -/*######################################################################### -## SVGEvent -#########################################################################*/ - -/** - * - */ -class SVGEvent : events::Event -{ -public: - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGEvent() {} - - /** - * - */ - SVGEvent(const SVGEvent &other) : events::Event(other) - {} - - /** - * - */ - virtual ~SVGEvent() {} - -}; - - - - -/*######################################################################### -## SVGZoomEvent -#########################################################################*/ - -/** - * - */ -class SVGZoomEvent : events::UIEvent -{ -public: - - /** - * - */ - virtual SVGRect getZoomRectScreen() - { return zoomRectScreen; } - - /** - * - */ - virtual double getPreviousScale() - { return previousScale; } - - /** - * - */ - virtual SVGPoint getPreviousTranslate() - { return previousTranslate; } - - /** - * - */ - virtual double getNewScale() - { return newScale; } - - /** - * - */ - virtual SVGPoint getNewTranslate() - { return newTranslate; } - - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGZoomEvent() - {} - - /** - * - */ - SVGZoomEvent(const SVGZoomEvent &other) : events::Event(other), - events::UIEvent(other) - { - zoomRectScreen = other.zoomRectScreen; - previousScale = other.previousScale; - previousTranslate = other.previousTranslate; - newScale = other.newScale; - newTranslate = other.newTranslate; - } - - /** - * - */ - virtual ~SVGZoomEvent() {} - -protected: - - SVGRect zoomRectScreen; - double previousScale; - SVGPoint previousTranslate; - double newScale; - SVGPoint newTranslate; - -}; - - - -/*######################################################################### -## SVGElementInstance -#########################################################################*/ - -/** - * - */ -class SVGElementInstance : public events::EventTarget -{ -public: - - /** - * - */ - virtual SVGElement *getCorrespondingElement() - { return correspondingElement; } - - /** - * - */ - virtual SVGUseElement *getCorrespondingUseElement() - { return correspondingUseElement; } - - /** - * - */ - virtual SVGElementInstance getParentNode() - { - SVGElementInstance ret; - return ret; - } - - /** - * Since we are using stack types and this is a circular definition, - * we will instead implement this as a global function below: - * SVGElementInstanceList getChildNodes(const SVGElementInstance instance); - */ - //virtual SVGElementInstanceList getChildNodes(); - - /** - * - */ - virtual SVGElementInstance getFirstChild() - { - SVGElementInstance ret; - return ret; - } - - /** - * - */ - virtual SVGElementInstance getLastChild() - { - SVGElementInstance ret; - return ret; - } - - /** - * - */ - virtual SVGElementInstance getPreviousSibling() - { - SVGElementInstance ret; - return ret; - } - - /** - * - */ - virtual SVGElementInstance getNextSibling() - { - SVGElementInstance ret; - return ret; - } - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGElementInstance() {} - - /** - * - */ - SVGElementInstance(const SVGElementInstance &other) - : events::EventTarget(other) - { - } - - /** - * - */ - virtual ~SVGElementInstance() {} - -protected: - - SVGElement *correspondingElement; - SVGUseElement *correspondingUseElement; - -}; - - - - - - -/*######################################################################### -## SVGElementInstanceList -#########################################################################*/ - -/** - * - */ -class SVGElementInstanceList -{ -public: - - - /** - * - */ - virtual unsigned long getLength() - { return items.size(); } - - /** - * - */ - virtual SVGElementInstance item (unsigned long index ) - { - if (index >= items.size()) - { - SVGElementInstance ret; - return ret; - } - return items[index]; - } - - /** - * This static method replaces the circular definition of: - * SVGElementInstanceList SVGElementInstance::getChildNodes() - * - */ - static SVGElementInstanceList getChildNodes(const SVGElementInstance &instance) - { - SVGElementInstanceList list; - return list; - } - - - //################## - //# Non-API methods - //################## - - /** - * - */ - SVGElementInstanceList() {} - - /** - * - */ - SVGElementInstanceList(const SVGElementInstanceList &other) - { - items = other.items; - } - - /** - * - */ - virtual ~SVGElementInstanceList() {} - -protected: - - std::vector items; - - -}; - - - - - - - - - - - - - -} //namespace svg -} //namespace dom -} //namespace w3c -} //namespace org - -#endif /* __SVGTYPES_H__ */ -/*######################################################################### -## E N D O F F I L E -#########################################################################*/ - +#ifndef __SVGTYPES_H__ +#define __SVGTYPES_H__ + +/** + * Phoebe DOM Implementation. + * + * This is a C++ approximation of the W3C DOM model, which follows + * fairly closely the specifications in the various .idl files, copies of + * which are provided for reference. Most important is this one: + * + * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2006 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +// For access to DOM2 core +#include "dom/dom.h" + +// For access to DOM2 events +#include "dom/events.h" + +// For access to those parts from DOM2 CSS OM used by SVG DOM. +#include "dom/css.h" + +// For access to those parts from DOM2 Views OM used by SVG DOM. +#include "dom/views.h" + +// For access to the SMIL OM used by SVG DOM. +#include "dom/smil.h" + + +#include + + + +namespace org { +namespace w3c { +namespace dom { +namespace svg { + + + + +//local definitions +typedef dom::DOMString DOMString; +typedef dom::DOMException DOMException; +typedef dom::Element Element; +typedef dom::Document Document; +typedef dom::NodeList NodeList; + + +class SVGElement; +class SVGUseElement; +class SVGAnimatedPreserveAspectRatio; + + +/*######################################################################### +## SVGException +#########################################################################*/ + +/** + * + */ +class SVGException +{ +public: + // unsigned short code; //inherited +}; + + /** + * SVGExceptionCode + */ + typedef enum + { + SVG_WRONG_TYPE_ERR = 0, + SVG_INVALID_VALUE_ERR = 1, + SVG_MATRIX_NOT_INVERTABLE = 2 + } SVGExceptionCode; + + + + + +/*######################################################################### +## SVGMatrix +#########################################################################*/ + +/** + * In SVG, a Matrix is defined like this: + * + * | a c e | + * | b d f | + * | 0 0 1 | + * + */ +class SVGMatrix +{ +public: + + + /** + * + */ + virtual double getA() + { return a; } + + /** + * + */ + virtual void setA(double val) throw (DOMException) + { a = val; } + + /** + * + */ + virtual double getB() + { return b; } + + /** + * + */ + virtual void setB(double val) throw (DOMException) + { b = val; } + + /** + * + */ + virtual double getC() + { return c; } + + /** + * + */ + virtual void setC(double val) throw (DOMException) + { c = val; } + + /** + * + */ + virtual double getD() + { return d; } + + /** + * + */ + virtual void setD(double val) throw (DOMException) + { d = val; } + /** + * + */ + virtual double getE() + { return e; } + + /** + * + */ + virtual void setE(double val) throw (DOMException) + { e = val; } + /** + * + */ + virtual double getF() + { return f; } + + /** + * + */ + virtual void setF(double val) throw (DOMException) + { f = val; } + + + /** + * Return the result of postmultiplying this matrix with another. + */ + virtual SVGMatrix multiply(const SVGMatrix &other) + { + SVGMatrix result; + result.a = a * other.a + c * other.b; + result.b = b * other.a + d * other.b; + result.c = a * other.c + c * other.d; + result.d = b * other.c + d * other.d; + result.e = a * other.e + c * other.f + e; + result.f = b * other.e + d * other.f + f; + return result; + } + + /** + * Calculate the inverse of this matrix + * + */ + virtual SVGMatrix inverse( ) throw( SVGException ) + { + /*########################################### + The determinant of a 3x3 matrix E + (let's use our own notation for a bit) + + A B C + D E F + G H I + is + AEI - AFH - BDI + BFG + CDH - CEG + + Since in our affine transforms, G and H==0 and I==1, + this reduces to: + AE - BD + In SVG's naming scheme, that is: a * d - c * b . SIMPLE! + + In a similar method of attack, SVG's adjunct matrix is: + + d -c cf-ed + -b a eb-af + 0 0 ad-cb + + To get the inverse matrix, we divide the adjunct matrix by + the determinant. Notice that (ad-cb)/(ad-cb)==1. Very cool. + So what we end up with is this: + + a = d/(ad-cb) c = -c/(ad-cb) e = (cf-ed)/(ad-cb) + b = -b/(ad-cb) d = a/(ad-cb) f = (eb-af)/(ad-cb) + + (Since this would be in all SVG-DOM implementations, + somebody needed to document this! ^^ ) + #############################################*/ + + SVGMatrix result; + double determinant = a * d - c * b; + if (determinant < 1.0e-18)//invertible? + { + result.identity();//cop out + return result; + } + + double idet = 1.0 / determinant; + result.a = d * idet; + result.b = -b * idet; + result.c = -c * idet; + result.d = a * idet; + result.e = (c*f - e*d) * idet; + result.f = (e*b - a*f) * idet; + return result; + } + + /** + * Equivalent to multiplying by: + * | 1 0 x | + * | 0 1 y | + * | 0 0 1 | + * + */ + virtual SVGMatrix translate(double x, double y ) + { + SVGMatrix result; + result.a = a; + result.b = b; + result.c = c; + result.d = d; + result.e = a * x + c * y + e; + result.f = b * x + d * y + f; + return result; + } + + /** + * Equivalent to multiplying by: + * | scale 0 0 | + * | 0 scale 0 | + * | 0 0 1 | + * + */ + virtual SVGMatrix scale(double scale) + { + SVGMatrix result; + result.a = a * scale; + result.b = b * scale; + result.c = c * scale; + result.d = d * scale; + result.e = e; + result.f = f; + return result; + } + + /** + * Equivalent to multiplying by: + * | scaleX 0 0 | + * | 0 scaleY 0 | + * | 0 0 1 | + * + */ + virtual SVGMatrix scaleNonUniform(double scaleX, + double scaleY ) + { + SVGMatrix result; + result.a = a * scaleX; + result.b = b * scaleX; + result.c = c * scaleY; + result.d = d * scaleY; + result.e = e; + result.f = f; + return result; + } + + /** + * Equivalent to multiplying by: + * | cos(a) -sin(a) 0 | + * | sin(a) cos(a) 0 | + * | 0 0 1 | + * + */ + virtual SVGMatrix rotate (double angle) + { + double sina = sin(angle); + double msina = -sina; + double cosa = cos(angle); + SVGMatrix result; + result.a = a * cosa + c * sina; + result.b = b * cosa + d + sina; + result.c = a * msina + c * cosa; + result.d = b * msina + d * cosa; + result.e = e; + result.f = f; + return result; + } + + /** + * Equivalent to multiplying by: + * | cos(a) -sin(a) 0 | + * | sin(a) cos(a) 0 | + * | 0 0 1 | + * In this case, angle 'a' is computed as the artangent + * of the slope y/x . It is negative if the slope is negative. + */ + virtual SVGMatrix rotateFromVector(double x, double y) + throw( SVGException ) + { + double angle = atan(y / x); + if (y < 0.0) + angle = -angle; + SVGMatrix result; + double sina = sin(angle); + double msina = -sina; + double cosa = cos(angle); + result.a = a * cosa + c * sina; + result.b = b * cosa + d + sina; + result.c = a * msina + c * cosa; + result.d = b * msina + d * cosa; + result.e = e; + result.f = f; + return result; + } + + /** + * Equivalent to multiplying by: + * | -1 0 0 | + * | 0 1 0 | + * | 0 0 1 | + * + */ + virtual SVGMatrix flipX( ) + { + SVGMatrix result; + result.a = -a; + result.b = -b; + result.c = c; + result.d = d; + result.e = e; + result.f = f; + return result; + } + + /** + * Equivalent to multiplying by: + * | 1 0 0 | + * | 0 -1 0 | + * | 0 0 1 | + * + */ + virtual SVGMatrix flipY( ) + { + SVGMatrix result; + result.a = a; + result.b = b; + result.c = -c; + result.d = -d; + result.e = e; + result.f = f; + return result; + } + + /** + * | 1 tan(a) 0 | + * | 0 1 0 | + * | 0 0 1 | + * + */ + virtual SVGMatrix skewX(double angle) + { + double tana = tan(angle); + SVGMatrix result; + result.a = a; + result.b = b; + result.c = a * tana + c; + result.d = b * tana + d; + result.e = e; + result.f = f; + return result; + } + + /** + * Equivalent to multiplying by: + * | 1 0 0 | + * | tan(a) 1 0 | + * | 0 0 1 | + * + */ + virtual SVGMatrix skewY(double angle) + { + double tana = tan(angle); + SVGMatrix result; + result.a = a + c * tana; + result.b = b + d * tana; + result.c = c; + result.d = d; + result.e = e; + result.f = f; + return result; + } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGMatrix() + { + identity(); + } + + /** + * + */ + SVGMatrix(double aArg, double bArg, double cArg, + double dArg, double eArg, double fArg ) + { + a = aArg; b = bArg; c = cArg; + d = dArg; e = eArg; f = fArg; + } + + /** + * Copy constructor + */ + SVGMatrix(const SVGMatrix &other) + { + a = other.a; + b = other.b; + c = other.c; + d = other.d; + e = other.e; + f = other.f; + } + + + + /** + * + */ + virtual ~SVGMatrix() {} + +protected: + +friend class SVGTransform; + + /* + * Set to the identify matrix + */ + void identity() + { + a = 1.0; + b = 0.0; + c = 0.0; + d = 1.0; + e = 0.0; + f = 0.0; + } + + double a, b, c, d, e, f; + +}; + + +/*######################################################################### +## SVGTransform +#########################################################################*/ + +/** + * + */ +class SVGTransform +{ +public: + + /** + * Transform Types + */ + typedef enum + { + SVG_TRANSFORM_UNKNOWN = 0, + SVG_TRANSFORM_MATRIX = 1, + SVG_TRANSFORM_TRANSLATE = 2, + SVG_TRANSFORM_SCALE = 3, + SVG_TRANSFORM_ROTATE = 4, + SVG_TRANSFORM_SKEWX = 5, + SVG_TRANSFORM_SKEWY = 6, + } TransformType; + + /** + * + */ + virtual unsigned short getType() + { return type; } + + + /** + * + */ + virtual SVGMatrix getMatrix() + { + return matrix; + } + + /** + * + */ + virtual double getAngle() + { + return angle; + } + + + /** + * + */ + virtual void setMatrix(const SVGMatrix &matrixArg) + { + type = SVG_TRANSFORM_MATRIX; + matrix = matrixArg; + } + + /** + * + */ + virtual void setTranslate (double tx, double ty ) + { + type = SVG_TRANSFORM_TRANSLATE; + matrix.setA(1.0); + matrix.setB(0.0); + matrix.setC(0.0); + matrix.setD(1.0); + matrix.setE(tx); + matrix.setF(ty); + } + + /** + * + */ + virtual void setScale (double sx, double sy ) + { + type = SVG_TRANSFORM_SCALE; + matrix.setA(sx); + matrix.setB(0.0); + matrix.setC(0.0); + matrix.setD(sy); + matrix.setE(0.0); + matrix.setF(0.0); + } + + /** + * + */ + virtual void setRotate (double angleArg, double cx, double cy) + { + angle = angleArg; + setTranslate(cx, cy); + type = SVG_TRANSFORM_ROTATE; + matrix.rotate(angle); + } + + /** + * + */ + virtual void setSkewX (double angleArg) + { + angle = angleArg; + type = SVG_TRANSFORM_SKEWX; + matrix.identity(); + matrix.skewX(angle); + } + + /** + * + */ + virtual void setSkewY (double angleArg) + { + angle = angleArg; + type = SVG_TRANSFORM_SKEWY; + matrix.identity(); + matrix.skewY(angle); + } + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGTransform() + { + type = SVG_TRANSFORM_UNKNOWN; + angle = 0.0; + } + + /** + * + */ + SVGTransform(const SVGTransform &other) + { + type = other.type; + angle = other.angle; + matrix = other.matrix; + } + + /** + * + */ + virtual ~SVGTransform() + {} + +protected: + + int type; + double angle; + + SVGMatrix matrix; +}; + + + + + + +/*######################################################################### +## SVGTransformList +#########################################################################*/ + +/** + * + */ +class SVGTransformList +{ +public: + + + /** + * + */ + virtual unsigned long getNumberOfItems() + { return items.size(); } + + + /** + * + */ + virtual void clear( ) throw( DOMException ) + { items.clear(); } + + /** + * + */ + virtual SVGTransform initialize (const SVGTransform &newItem) + throw( DOMException, SVGException ) + { + items.clear(); + items.push_back(newItem); + return newItem; + } + + /** + * + */ + virtual SVGTransform getItem (unsigned long index ) + throw( DOMException ) + { + if (index>=items.size()) + { + SVGTransform transform; + return transform; + } + return items[index]; + } + + /** + * + */ + virtual SVGTransform insertItemBefore (const SVGTransform &newItem, + unsigned long index ) + throw( DOMException, SVGException ) + { + if (index > items.size()) + items.push_back(newItem); + else + { + std::vector::iterator iter = items.begin() + index; + items.insert(iter, newItem); + } + return newItem; + } + + /** + * + */ + virtual SVGTransform replaceItem (const SVGTransform &newItem, + unsigned long index ) + throw( DOMException, SVGException ) + { + if (index>=items.size()) + { + SVGTransform transform; + return transform; + } + else + { + std::vector::iterator iter = items.begin() + index; + *iter = newItem; + } + return newItem; + } + + /** + * + */ + virtual SVGTransform removeItem (unsigned long index ) + throw( DOMException ) + { + if (index>=items.size()) + { + SVGTransform transform; + return transform; + } + std::vector::iterator iter = items.begin() + index; + SVGTransform oldItem = *iter; + items.erase(iter); + return oldItem; + } + + /** + * + */ + virtual SVGTransform appendItem (const SVGTransform &newItem) + throw( DOMException, SVGException ) + { + items.push_back(newItem); + return newItem; + } + + /** + * + */ + virtual SVGTransform createSVGTransformFromMatrix(const SVGMatrix &matrix) + { + SVGTransform transform; + transform.setMatrix(matrix); + return transform; + } + + /** + * + */ + virtual SVGTransform consolidate() + { + SVGMatrix matrix; + for (unsigned int i=0 ; i items; + +}; + + + + + + +/*######################################################################### +## SVGAnimatedTransformList +#########################################################################*/ + +/** + * + */ +class SVGAnimatedTransformList +{ +public: + + /** + * + */ + virtual SVGTransformList getBaseVal() + { return baseVal; } + + /** + * + */ + virtual SVGTransformList getAnimVal() + { return animVal; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGAnimatedTransformList() + {} + + /** + * + */ + SVGAnimatedTransformList(const SVGAnimatedTransformList &other) + { + baseVal = other.baseVal; + animVal = other.animVal; + } + + /** + * + */ + virtual ~SVGAnimatedTransformList() {} + +protected: + + SVGTransformList baseVal; + SVGTransformList animVal; + +}; + + + + +/*######################################################################### +## SVGAnimatedBoolean +#########################################################################*/ + +/** + * + */ +class SVGAnimatedBoolean +{ +public: + + /** + * + */ + virtual bool getBaseVal() + { + return baseVal; + } + + /** + * + */ + virtual void setBaseVal(bool val) throw (DOMException) + { + baseVal = val; + } + + /** + * + */ + virtual bool getAnimVal() + { + return animVal; + } + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGAnimatedBoolean() + { + baseVal = animVal = false; + } + + /** + * + */ + SVGAnimatedBoolean(const SVGAnimatedBoolean &other) + { + baseVal = other.baseVal; + animVal = other.animVal; + } + + /** + * + */ + virtual ~SVGAnimatedBoolean() {} + +protected: + + bool baseVal, animVal; + +}; + + + + +/*######################################################################### +## SVGAnimatedString +#########################################################################*/ + +/** + * + */ +class SVGAnimatedString +{ +public: + + /** + * + */ + virtual DOMString getBaseVal() + { + return baseVal; + } + + /** + * + */ + virtual void setBaseVal(const DOMString &val) + throw (DOMException) + { + baseVal = val; + } + + /** + * + */ + virtual DOMString getAnimVal() + { + return animVal; + } + + + //################## + //# Non-API methods + //################## + + + /** + * + */ + SVGAnimatedString() + { + baseVal = ""; + animVal = ""; + } + + /** + * + */ + SVGAnimatedString(const SVGAnimatedString &other) + { + baseVal = other.baseVal; + animVal = other.animVal; + } + + /** + * + */ + virtual ~SVGAnimatedString() {} + +protected: + + DOMString baseVal, animVal; + +}; + + + + + +/*######################################################################### +## SVGStringList +#########################################################################*/ + +/** + * + */ +class SVGStringList +{ +public: + + + /** + * + */ + virtual unsigned long getNumberOfItems() + { + return items.size(); + } + + /** + * + */ + virtual void clear () throw( DOMException ) + { + items.clear(); + } + + /** + * + */ + virtual DOMString initialize ( const DOMString& newItem ) + throw( DOMException, SVGException ) + { + items.clear(); + items.push_back(newItem); + return newItem; + } + + /** + * + */ + virtual DOMString getItem ( unsigned long index ) + throw( DOMException ) + { + if (index >= items.size()) + return ""; + return items[index]; + } + + /** + * + */ + virtual DOMString insertItemBefore ( const DOMString& newItem, + unsigned long index ) + throw( DOMException, SVGException ) + { + if (index>=items.size()) + { + items.push_back(newItem); + } + else + { + std::vector::iterator iter = items.begin() + index; + items.insert(iter, newItem); + } + return newItem; + } + + /** + * + */ + virtual DOMString replaceItem ( const DOMString& newItem, + unsigned long index ) + throw( DOMException, SVGException ) + { + if (index>=items.size()) + return ""; + std::vector::iterator iter = items.begin() + index; + *iter = newItem; + return newItem; + } + + /** + * + */ + virtual DOMString removeItem ( unsigned long index ) + throw( DOMException ) + { + if (index>=items.size()) + return ""; + std::vector::iterator iter = items.begin() + index; + DOMString oldstr = *iter; + items.erase(iter); + return oldstr; + } + + /** + * + */ + virtual DOMString appendItem ( const DOMString& newItem ) + throw( DOMException, SVGException ) + { + items.push_back(newItem); + return newItem; + } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGStringList() {} + + /** + * + */ + SVGStringList(const SVGStringList &other) + { + items = other.items; + } + + /** + * + */ + virtual ~SVGStringList() {} + +protected: + + std::vectoritems; + +}; + + + + + +/*######################################################################### +## SVGAnimatedEnumeration +#########################################################################*/ + +/** + * + */ +class SVGAnimatedEnumeration +{ +public: + + /** + * + */ + virtual unsigned short getBaseVal() + { + return baseVal; + } + + /** + * + */ + virtual void setBaseVal(unsigned short val) + throw (DOMException) + { + baseVal = val; + } + + /** + * + */ + virtual unsigned short getAnimVal() + { + return animVal; + } + + + + //################## + //# Non-API methods + //################## + + + /** + * + */ + SVGAnimatedEnumeration() + { + baseVal = animVal = 0; + } + + /** + * + */ + SVGAnimatedEnumeration(const SVGAnimatedEnumeration &other) + { + baseVal = other.baseVal; + animVal = other.animVal; + } + + /** + * + */ + virtual ~SVGAnimatedEnumeration() {} + +protected: + + int baseVal, animVal; + +}; + + + + + +/*######################################################################### +## SVGAnimatedInteger +#########################################################################*/ + +/** + * + */ +class SVGAnimatedInteger +{ +public: + + + /** + * + */ + virtual long getBaseVal() + { + return baseVal; + } + + /** + * + */ + virtual void setBaseVal(long val) throw (DOMException) + { + baseVal = val; + } + + /** + * + */ + virtual long getAnimVal() + { + return animVal; + } + + + + //################## + //# Non-API methods + //################## + + + /** + * + */ + SVGAnimatedInteger() + { baseVal = animVal = 0L;} + + + /** + * + */ + SVGAnimatedInteger(long value) + { + baseVal = value; + animVal = 0L; + } + + /** + * + */ + SVGAnimatedInteger(long baseValArg, long animValArg) + { + baseVal = baseValArg; + animVal = animValArg; + } + + + /** + * + */ + SVGAnimatedInteger(const SVGAnimatedInteger &other) + { + baseVal = other.baseVal; + animVal = other.animVal; + } + + /** + * + */ + virtual ~SVGAnimatedInteger() {} + +protected: + + long baseVal, animVal; + +}; + + + + + +/*######################################################################### +## SVGNumber +#########################################################################*/ + +/** + * + */ +class SVGNumber +{ +public: + + + /** + * + */ + virtual double getValue() + { + return value; + } + + /** + * + */ + virtual void setValue(double val) throw (DOMException) + { + value = val; + } + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGNumber() + { + value = 0.0; + } + + /** + * + */ + SVGNumber(const SVGNumber &other) + { + value = other.value; + } + + /** + * + */ + virtual ~SVGNumber() {} + +protected: + + double value; + +}; + + + + + +/*######################################################################### +## SVGAnimatedNumber +#########################################################################*/ + +/** + * + */ +class SVGAnimatedNumber +{ +public: + + + + /** + * + */ + virtual double getBaseVal() + { + return baseVal; + } + + /** + * + */ + virtual void setBaseVal(double val) throw (DOMException) + { + baseVal = val; + } + + /** + * + */ + virtual double getAnimVal() + { + return animVal; + } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGAnimatedNumber() + { + baseVal = animVal = 0.0; + } + + + /** + * + */ + SVGAnimatedNumber(double val) + { + baseVal = val; + animVal = 0.0; + } + + + /** + * + */ + SVGAnimatedNumber(double baseValArg, double animValArg) + { + baseVal = baseValArg; + animVal = animValArg; + } + + /** + * + */ + SVGAnimatedNumber(const SVGAnimatedNumber &other) + { + baseVal = other.baseVal; + animVal = other.animVal; + } + + /** + * + */ + virtual ~SVGAnimatedNumber() {} + +protected: + + double baseVal, animVal; + +}; + + + + + +/*######################################################################### +## SVGNumberList +#########################################################################*/ + +/** + * + */ +class SVGNumberList +{ +public: + + /** + * + */ + virtual unsigned long getNumberOfItems() + { + return items.size(); + } + + + /** + * + */ + virtual void clear() throw( DOMException ) + { + items.clear(); + } + + /** + * + */ + virtual SVGNumber initialize (const SVGNumber &newItem) + throw( DOMException, SVGException ) + { + items.clear(); + items.push_back(newItem); + return newItem; + } + + /** + * + */ + virtual SVGNumber getItem ( unsigned long index ) + throw( DOMException ) + { + if (index>=items.size()) + { + SVGNumber num; + return num; + } + return items[index]; + } + + /** + * + */ + virtual SVGNumber insertItemBefore ( const SVGNumber &newItem, + unsigned long index ) + throw( DOMException, SVGException ) + { + if (index>=items.size()) + { + items.push_back(newItem); + } + else + { + std::vector::iterator iter = items.begin() + index; + items.insert(iter, newItem); + } + return newItem; + } + + /** + * + */ + virtual SVGNumber replaceItem ( const SVGNumber &newItem, + unsigned long index ) + throw( DOMException, SVGException ) + { + if (index>=items.size()) + { + SVGNumber num; + return num; + } + std::vector::iterator iter = items.begin() + index; + *iter = newItem; + return newItem; + } + + /** + * + */ + virtual SVGNumber removeItem ( unsigned long index ) + throw( DOMException ) + { + if (index>=items.size()) + { + SVGNumber num; + return num; + } + std::vector::iterator iter = items.begin() + index; + SVGNumber oldval = *iter; + items.erase(iter); + return oldval; + } + + /** + * + */ + virtual SVGNumber appendItem ( const SVGNumber &newItem ) + throw( DOMException, SVGException ) + { + items.push_back(newItem); + return newItem; + } + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGNumberList() {} + + /** + * + */ + SVGNumberList(const SVGNumberList &other) + { + items = other.items; + } + + /** + * + */ + virtual ~SVGNumberList() {} + +protected: + + std::vectoritems; + +}; + + + + + +/*######################################################################### +## SVGAnimatedNumberList +#########################################################################*/ + +/** + * + */ +class SVGAnimatedNumberList +{ +public: + + + /** + * + */ + virtual SVGNumberList &getBaseVal() + { + return baseVal; + } + + /** + * + */ + virtual SVGNumberList &getAnimVal() + { + return animVal; + } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGAnimatedNumberList() {} + + /** + * + */ + SVGAnimatedNumberList(const SVGAnimatedNumberList &other) + { + baseVal = other.baseVal; + animVal = other.animVal; + } + + /** + * + */ + virtual ~SVGAnimatedNumberList() {} + +protected: + + SVGNumberList baseVal; + SVGNumberList animVal; + +}; + + + + + + +/*######################################################################### +## SVGLength +#########################################################################*/ + +/** + * + */ +class SVGLength +{ +public: + + /** + * Length Unit Types + */ + typedef enum + { + SVG_LENGTHTYPE_UNKNOWN = 0, + SVG_LENGTHTYPE_NUMBER = 1, + SVG_LENGTHTYPE_PERCENTAGE = 2, + SVG_LENGTHTYPE_EMS = 3, + SVG_LENGTHTYPE_EXS = 4, + SVG_LENGTHTYPE_PX = 5, + SVG_LENGTHTYPE_CM = 6, + SVG_LENGTHTYPE_MM = 7, + SVG_LENGTHTYPE_IN = 8, + SVG_LENGTHTYPE_PT = 9, + SVG_LENGTHTYPE_PC = 10 + } LengthUnitType; + + + /** + * + */ + virtual unsigned short getUnitType( ) + { + return unitType; + } + + /** + * + */ + virtual double getValue( ) + { + return value; + } + + /** + * + */ + virtual void setValue( double val ) throw (DOMException) + { + value = val; + } + + /** + * + */ + virtual double getValueInSpecifiedUnits( ) + { + double result = 0.0; + //fill this in + return result; + } + + /** + * + */ + virtual void setValueInSpecifiedUnits( double val ) + throw (DOMException) + { + //fill this in + } + + /** + * + */ + virtual DOMString getValueAsString( ) + { + DOMString ret; + char buf[32]; + snprintf(buf, 31, "%f", value); + ret.append(buf); + return ret; + } + + /** + * + */ + virtual void setValueAsString( const DOMString& val ) + throw (DOMException) + { + } + + + /** + * + */ + virtual void newValueSpecifiedUnits ( unsigned short unitType, double val ) + { + } + + /** + * + */ + virtual void convertToSpecifiedUnits ( unsigned short unitType ) + { + } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGLength() + { + unitType = SVG_LENGTHTYPE_UNKNOWN; + value = 0.0; + } + + + /** + * + */ + SVGLength(const SVGLength &other) + { + unitType = other.unitType; + value = other.value; + } + + /** + * + */ + virtual ~SVGLength() {} + +protected: + + int unitType; + + double value; + +}; + + + + + + +/*######################################################################### +## SVGAnimatedLength +#########################################################################*/ + +/** + * + */ +class SVGAnimatedLength +{ +public: + + /** + * + */ + virtual SVGLength &getBaseVal() + { + return baseVal; + } + + /** + * + */ + virtual SVGLength &getAnimVal() + { + return animVal; + } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGAnimatedLength() {} + + /** + * + */ + SVGAnimatedLength(const SVGAnimatedLength &other) + { + baseVal = other.baseVal; + animVal = other.animVal; + } + + /** + * + */ + virtual ~SVGAnimatedLength() {} + +protected: + + SVGLength baseVal, animVal; + +}; + + + + + + +/*######################################################################### +## SVGLengthList +#########################################################################*/ + +/** + * + */ +class SVGLengthList +{ +public: + + /** + * + */ + virtual unsigned long getNumberOfItems() + { + return items.size(); + } + + + /** + * + */ + virtual void clear ( ) throw( DOMException ) + { + items.clear(); + } + + /** + * + */ + virtual SVGLength initialize (const SVGLength &newItem ) + throw( DOMException, SVGException ) + { + items.clear(); + items.push_back(newItem); + return newItem; + } + + /** + * + */ + virtual SVGLength getItem (unsigned long index) + throw( DOMException ) + { + if (index>=items.size()) + { + SVGLength ret; + return ret; + } + return items[index]; + } + + /** + * + */ + virtual SVGLength insertItemBefore (const SVGLength &newItem, + unsigned long index ) + throw( DOMException, SVGException ) + { + if (index>=items.size()) + { + items.push_back(newItem); + } + else + { + std::vector::iterator iter = items.begin() + index; + items.insert(iter, newItem); + } + return newItem; + } + + /** + * + */ + virtual SVGLength replaceItem (const SVGLength &newItem, + unsigned long index ) + throw( DOMException, SVGException ) + { + if (index>=items.size()) + { + SVGLength ret; + return ret; + } + std::vector::iterator iter = items.begin() + index; + *iter = newItem; + return newItem; + } + + /** + * + */ + virtual SVGLength removeItem (unsigned long index ) + throw( DOMException ) + { + if (index>=items.size()) + { + SVGLength ret; + return ret; + } + std::vector::iterator iter = items.begin() + index; + SVGLength oldval = *iter; + items.erase(iter); + return oldval; + } + + /** + * + */ + virtual SVGLength appendItem (const SVGLength &newItem ) + throw( DOMException, SVGException ) + { + items.push_back(newItem); + return newItem; + } + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGLengthList() {} + + /** + * + */ + SVGLengthList(const SVGLengthList &other) + { + items = other.items; + } + + /** + * + */ + virtual ~SVGLengthList() {} + +protected: + + std::vectoritems; + +}; + + + + + + +/*######################################################################### +## SVGAnimatedLengthList +#########################################################################*/ + +/** + * + */ +class SVGAnimatedLengthList +{ +public: + + /** + * + */ + virtual SVGLengthList &getBaseVal() + { + return baseVal; + } + + /** + * + */ + virtual SVGLengthList &getAnimVal() + { + return animVal; + } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGAnimatedLengthList() {} + + /** + * + */ + SVGAnimatedLengthList(const SVGAnimatedLengthList &other) + { + baseVal = other.baseVal; + animVal = other.animVal; + } + + /** + * + */ + virtual ~SVGAnimatedLengthList() {} + +protected: + + SVGLengthList baseVal, animVal; + +}; + + + + + + +/*######################################################################### +## SVGAngle +#########################################################################*/ + +/** + * + */ +class SVGAngle +{ +public: + + /** + * Angle Unit Types + */ + typedef enum + { + SVG_ANGLETYPE_UNKNOWN = 0, + SVG_ANGLETYPE_UNSPECIFIED = 1, + SVG_ANGLETYPE_DEG = 2, + SVG_ANGLETYPE_RAD = 3, + SVG_ANGLETYPE_GRAD = 4 + } AngleUnitType; + + + + /** + * + */ + virtual unsigned short getUnitType() + { + return unitType; + } + + /** + * + */ + virtual double getValue() + { + return value; + } + + /** + * + */ + virtual void setValue(double val) throw (DOMException) + { + value = val; + } + + /** + * + */ + virtual double getValueInSpecifiedUnits() + { + double result = 0.0; + //convert here + return result; + } + + /** + * + */ + virtual void setValueInSpecifiedUnits(double val) + throw (DOMException) + { + //do conversion + } + + /** + * + */ + virtual DOMString getValueAsString() + { + DOMString result; + char buf[32]; + snprintf(buf, 31, "%f", value); + result.append(buf); + return result; + } + + /** + * + */ + virtual void setValueAsString(const DOMString &val) + throw (DOMException) + { + //convert here + } + + + /** + * + */ + virtual void newValueSpecifiedUnits (unsigned short unitType, + double valueInSpecifiedUnits ) + { + //convert here + } + + /** + * + */ + virtual void convertToSpecifiedUnits (unsigned short unitType ) + { + //convert here + } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGAngle() + { + unitType = SVG_ANGLETYPE_UNKNOWN; + value = 0.0; + } + + /** + * + */ + SVGAngle(const SVGAngle &other) + { + unitType = other.unitType; + value = other.value; + } + + /** + * + */ + virtual ~SVGAngle() {} + +protected: + + int unitType; + + double value; + +}; + + + + + + +/*######################################################################### +## SVGAnimatedAngle +#########################################################################*/ + +/** + * + */ +class SVGAnimatedAngle +{ +public: + + /** + * + */ + virtual SVGAngle getBaseVal() + { + return baseVal; + } + + /** + * + */ + virtual SVGAngle getAnimVal() + { + return animVal; + } + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGAnimatedAngle() {} + + /** + * + */ + SVGAnimatedAngle(const SVGAngle &angle) + { baseVal = angle; } + + /** + * + */ + SVGAnimatedAngle(const SVGAnimatedAngle &other) + { + baseVal = other.baseVal; + animVal = other.animVal; + } + + /** + * + */ + virtual ~SVGAnimatedAngle() {} + +protected: + + SVGAngle baseVal, animVal; + +}; + + + + + + +/*######################################################################### +## SVGICCColor +#########################################################################*/ + +/** + * + */ +class SVGICCColor +{ +public: + + /** + * + */ + virtual DOMString getColorProfile() + { + return colorProfile; + } + + /** + * + */ + virtual void setColorProfile(const DOMString &val) throw (DOMException) + { + colorProfile = val; + } + + /** + * + */ + virtual SVGNumberList &getColors() + { + return colors; + } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGICCColor() {} + + /** + * + */ + SVGICCColor(const SVGICCColor &other) + { + colorProfile = other.colorProfile; + colors = other.colors; + } + + /** + * + */ + virtual ~SVGICCColor() {} + +protected: + + DOMString colorProfile; + + SVGNumberList colors; + +}; + + +/*######################################################################### +## SVGColor +#########################################################################*/ + +/** + * + */ +class SVGColor : virtual public css::CSSValue +{ +public: + + + /** + * Color Types + */ + typedef enum + { + SVG_COLORTYPE_UNKNOWN = 0, + SVG_COLORTYPE_RGBCOLOR = 1, + SVG_COLORTYPE_RGBCOLOR_ICCCOLOR = 2, + SVG_COLORTYPE_CURRENTCOLOR = 3 + } ColorType; + + + /** + * + */ + virtual unsigned short getColorType() + { + return colorType; + } + + /** + * + */ + virtual css::RGBColor getRgbColor() + { + css::RGBColor col; + return col; + } + + /** + * + */ + virtual SVGICCColor getIccColor() + { + SVGICCColor col; + return col; + } + + + /** + * + */ + virtual void setRGBColor (const DOMString& rgbColor ) + throw( SVGException ) + { + } + + /** + * + */ + virtual void setRGBColorICCColor (const DOMString& rgbColor, + const DOMString& iccColor ) + throw( SVGException ) + { + } + + /** + * + */ + virtual void setColor (unsigned short colorType, + const DOMString& rgbColor, + const DOMString& iccColor ) + throw( SVGException ) + { + } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGColor() + { + colorType = SVG_COLORTYPE_UNKNOWN; + } + + /** + * + */ + SVGColor(const SVGColor &other) : css::CSSValue(other) + { + colorType = other.colorType; + } + + /** + * + */ + virtual ~SVGColor() {} + +protected: + + int colorType; + +}; + + + + + + + + + + +/*######################################################################### +## SVGRect +#########################################################################*/ + +/** + * + */ +class SVGRect +{ +public: + + /** + * + */ + virtual double getX() + { + return x; + } + + /** + * + */ + virtual void setX(double val) throw (DOMException) + { + x = val; + } + + /** + * + */ + virtual double getY() + { + return y; + } + + /** + * + */ + virtual void setY(double val) throw (DOMException) + { + y = val; + } + + /** + * + */ + virtual double getWidth() + { + return width; + } + + /** + * + */ + virtual void setWidth(double val) throw (DOMException) + { + width = val; + } + + /** + * + */ + virtual double getHeight() + { + return height; + } + + /** + * + */ + virtual void setHeight(double val) throw (DOMException) + { + height = val; + } + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGRect() + { + x = y = width = height = 0.0; + } + + /** + * + */ + SVGRect(const SVGRect &other) + { + x = other.x; + y = other.y; + width = other.width; + height = other.height; + } + + /** + * + */ + virtual ~SVGRect() {} + +protected: + + double x, y, width, height; + +}; + + + + + + +/*######################################################################### +## SVGAnimatedRect +#########################################################################*/ + +/** + * + */ +class SVGAnimatedRect +{ +public: + + /** + * + */ + virtual SVGRect &getBaseVal() + { + return baseVal; + } + + /** + * + */ + virtual SVGRect &getAnimVal() + { + return animVal; + } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGAnimatedRect() + { + } + + /** + * + */ + SVGAnimatedRect(const SVGAnimatedRect &other) + { + baseVal = other.baseVal; + animVal = other.animVal; + } + + /** + * + */ + virtual ~SVGAnimatedRect() {} + +protected: + + SVGRect baseVal, animVal; + +}; + + + +/*######################################################################### +## SVGPoint +#########################################################################*/ + +/** + * + */ +class SVGPoint +{ +public: + + + + /** + * + */ + virtual double getX() + { return x; } + + /** + * + */ + virtual void setX(double val) throw (DOMException) + { x = val; } + + /** + * + */ + virtual double getY() + { return y; } + + /** + * + */ + virtual void setY(double val) throw (DOMException) + { y = val; } + + /** + * + */ + virtual SVGPoint matrixTransform(const SVGMatrix &matrix) + { + SVGPoint point; + return point; + } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGPoint() + { x = y = 0; } + + /** + * + */ + SVGPoint(const SVGPoint &other) + { + x = other.x; + y = other.y; + } + + /** + * + */ + virtual ~SVGPoint() {} + +protected: + + double x, y; +}; + + + + + + +/*######################################################################### +## SVGPointList +#########################################################################*/ + +/** + * + */ +class SVGPointList +{ +public: + + /** + * + */ + virtual unsigned long getNumberOfItems() + { return items.size(); } + + /** + * + */ + virtual void clear() throw( DOMException ) + { items.clear(); } + + /** + * + */ + virtual SVGPoint initialize(const SVGPoint &newItem) + throw( DOMException, SVGException ) + { + items.clear(); + items.push_back(newItem); + return newItem; + } + + /** + * + */ + virtual SVGPoint getItem(unsigned long index ) + throw( DOMException ) + { + if (index >= items.size()) + { + SVGPoint point; + return point; + } + return items[index]; + } + + /** + * + */ + virtual SVGPoint insertItemBefore(const SVGPoint &newItem, + unsigned long index ) + throw( DOMException, SVGException ) + { + if (index >= items.size()) + items.push_back(newItem); + else + { + std::vector::iterator iter = items.begin() + index; + items.insert(iter, newItem); + } + return newItem; + } + + /** + * + */ + virtual SVGPoint replaceItem(const SVGPoint &newItem, + unsigned long index ) + throw( DOMException, SVGException ) + { + if (index >= items.size()) + { + SVGPoint point; + return point; + } + std::vector::iterator iter = items.begin() + index; + *iter = newItem; + return newItem; + } + + /** + * + */ + virtual SVGPoint removeItem(unsigned long index ) + throw( DOMException ) + { + if (index >= items.size()) + { + SVGPoint point; + return point; + } + std::vector::iterator iter = items.begin() + index; + SVGPoint oldItem = *iter; + items.erase(iter); + return oldItem; + } + + /** + * + */ + virtual SVGPoint appendItem(const SVGPoint &newItem) + throw( DOMException, SVGException ) + { + items.push_back(newItem); + return newItem; + } + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGPointList() {} + + + /** + * + */ + SVGPointList(const SVGPointList &other) + { + items = other.items; + } + + + /** + * + */ + virtual ~SVGPointList() {} + +protected: + + std::vector items; + +}; + + + + +/*######################################################################### +## SVGUnitTypes +#########################################################################*/ + +/** + * + */ +class SVGUnitTypes +{ +public: + + /** + * Unit Types + */ + typedef enum + { + SVG_UNIT_TYPE_UNKNOWN = 0, + SVG_UNIT_TYPE_USERSPACEONUSE = 1, + SVG_UNIT_TYPE_OBJECTBOUNDINGBOX = 2 + } UnitType; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGUnitTypes() {} + + /** + * + */ + virtual ~SVGUnitTypes() {} + +}; + + + + + + +/*######################################################################### +## SVGStylable +#########################################################################*/ + +/** + * + */ +class SVGStylable +{ +public: + + /** + * + */ + virtual SVGAnimatedString getClassName() + { + return className; + } + + /** + * + */ + virtual css::CSSStyleDeclaration getStyle() + { + return style; + } + + + /** + * + */ + virtual css::CSSValue getPresentationAttribute (const DOMString& name ) + { + css::CSSValue val; + //perform a lookup + return val; + } + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGStylable() {} + + /** + * + */ + SVGStylable(const SVGStylable &other) + { + className = other.className; + style = other.style; + } + + /** + * + */ + virtual ~SVGStylable() {} + +protected: + + SVGAnimatedString className; + css::CSSStyleDeclaration style; + +}; + + +/*######################################################################### +## SVGLocatable +#########################################################################*/ + +/** + * + */ +class SVGLocatable +{ +public: + + /** + * + */ + virtual SVGElement *getNearestViewportElement() + { + SVGElement *result = NULL; + return result; + } + + /** + * + */ + virtual SVGElement *getFarthestViewportElement() + { + SVGElement *result = NULL; + return result; + } + + /** + * + */ + virtual SVGRect getBBox ( ) + { + return bbox; + } + + /** + * + */ + virtual SVGMatrix getCTM ( ) + { + return ctm; + } + + /** + * + */ + virtual SVGMatrix getScreenCTM ( ) + { + return screenCtm; + } + + /** + * + */ + virtual SVGMatrix getTransformToElement (const SVGElement &element) + throw( SVGException ) + { + SVGMatrix result; + //do calculations + return result; + } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGLocatable() {} + + /** + * + */ + SVGLocatable(const SVGLocatable &other) + { + } + + /** + * + */ + virtual ~SVGLocatable() {} + +protected: + + SVGRect bbox; + SVGMatrix ctm; + SVGMatrix screenCtm; + +}; + + + + + + +/*######################################################################### +## SVGTransformable +#########################################################################*/ + +/** + * + */ +class SVGTransformable : public SVGLocatable +{ +public: + + + /** + * + */ + virtual SVGAnimatedTransformList &getTransform() + { + return transforms; + } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGTransformable() {} + + /** + * + */ + SVGTransformable(const SVGTransformable &other) : SVGLocatable(other) + { + transforms = other.transforms; + } + + /** + * + */ + virtual ~SVGTransformable() {} + +protected: + + SVGAnimatedTransformList transforms; +}; + + + + + + +/*######################################################################### +## SVGTests +#########################################################################*/ + +/** + * + */ +class SVGTests +{ +public: + + + /** + * + */ + virtual SVGStringList &getRequiredFeatures() + { + return requiredFeatures; + } + + /** + * + */ + virtual SVGStringList &getRequiredExtensions() + { + return requiredExtensions; + } + + /** + * + */ + virtual SVGStringList &getSystemLanguage() + { + return systemLanguage; + } + + + /** + * + */ + virtual bool hasExtension (const DOMString& extension ) + { + return false; + } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGTests() {} + + /** + * + */ + SVGTests(const SVGTests &other) + { + requiredFeatures = other.requiredFeatures; + requiredExtensions = other.requiredExtensions; + systemLanguage = other.systemLanguage; + } + + /** + * + */ + virtual ~SVGTests() {} + +protected: + + SVGStringList requiredFeatures; + SVGStringList requiredExtensions; + SVGStringList systemLanguage; + +}; + + + + + + +/*######################################################################### +## SVGLangSpace +#########################################################################*/ + +/** + * + */ +class SVGLangSpace +{ +public: + + + /** + * + */ + virtual DOMString getXmllang() + { + return xmlLang; + } + + /** + * + */ + virtual void setXmllang(const DOMString &val) + throw (DOMException) + { + xmlLang = val; + } + + /** + * + */ + virtual DOMString getXmlspace() + { + return xmlSpace; + } + + /** + * + */ + virtual void setXmlspace(const DOMString &val) + throw (DOMException) + { + xmlSpace = val; + } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGLangSpace() {} + + /** + * + */ + SVGLangSpace(const SVGLangSpace &other) + { + xmlLang = other.xmlLang; + xmlSpace = other.xmlSpace; + } + + /** + * + */ + virtual ~SVGLangSpace() {} + +protected: + + DOMString xmlLang; + DOMString xmlSpace; + +}; + + + + + + +/*######################################################################### +## SVGExternalResourcesRequired +#########################################################################*/ + +/** + * + */ +class SVGExternalResourcesRequired +{ +public: + + + /** + * + */ + virtual SVGAnimatedBoolean getExternalResourcesRequired() + { return required; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGExternalResourcesRequired() + { } + + + /** + * + */ + SVGExternalResourcesRequired(const SVGExternalResourcesRequired &other) + { + required = other.required; + } + + /** + * + */ + virtual ~SVGExternalResourcesRequired() {} + +protected: + + SVGAnimatedBoolean required; + +}; + + + + + + +/*######################################################################### +## SVGPreserveAspectRatio +#########################################################################*/ + +/** + * + */ +class SVGPreserveAspectRatio +{ +public: + + + /** + * Alignment Types + */ + typedef enum + { + SVG_PRESERVEASPECTRATIO_UNKNOWN = 0, + SVG_PRESERVEASPECTRATIO_NONE = 1, + SVG_PRESERVEASPECTRATIO_XMINYMIN = 2, + SVG_PRESERVEASPECTRATIO_XMIDYMIN = 3, + SVG_PRESERVEASPECTRATIO_XMAXYMIN = 4, + SVG_PRESERVEASPECTRATIO_XMINYMID = 5, + SVG_PRESERVEASPECTRATIO_XMIDYMID = 6, + SVG_PRESERVEASPECTRATIO_XMAXYMID = 7, + SVG_PRESERVEASPECTRATIO_XMINYMAX = 8, + SVG_PRESERVEASPECTRATIO_XMIDYMAX = 9, + SVG_PRESERVEASPECTRATIO_XMAXYMAX = 10 + } AlignmentType; + + + /** + * Meet-or-slice Types + */ + typedef enum + { + SVG_MEETORSLICE_UNKNOWN = 0, + SVG_MEETORSLICE_MEET = 1, + SVG_MEETORSLICE_SLICE = 2 + } MeetOrSliceType; + + + /** + * + */ + virtual unsigned short getAlign() + { return align; } + + /** + * + */ + virtual void setAlign(unsigned short val) throw (DOMException) + { align = val; } + + /** + * + */ + virtual unsigned short getMeetOrSlice() + { return meetOrSlice; } + + /** + * + */ + virtual void setMeetOrSlice(unsigned short val) throw (DOMException) + { meetOrSlice = val; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGPreserveAspectRatio() + { + align = SVG_PRESERVEASPECTRATIO_UNKNOWN; + meetOrSlice = SVG_MEETORSLICE_UNKNOWN; + } + + /** + * + */ + SVGPreserveAspectRatio(const SVGPreserveAspectRatio &other) + { + align = other.align; + meetOrSlice = other.meetOrSlice; + } + + /** + * + */ + virtual ~SVGPreserveAspectRatio() {} + +protected: + + unsigned short align; + unsigned short meetOrSlice; + +}; + + + + + + +/*######################################################################### +## SVGAnimatedPreserveAspectRatio +#########################################################################*/ + +/** + * + */ +class SVGAnimatedPreserveAspectRatio +{ +public: + + + /** + * + */ + virtual SVGPreserveAspectRatio getBaseVal() + { return baseVal; } + + /** + * + */ + virtual SVGPreserveAspectRatio getAnimVal() + { return animVal; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGAnimatedPreserveAspectRatio() {} + + /** + * + */ + SVGAnimatedPreserveAspectRatio(const SVGAnimatedPreserveAspectRatio &other) + { + baseVal = other.baseVal; + baseVal = other.animVal; + } + + /** + * + */ + virtual ~SVGAnimatedPreserveAspectRatio() {} + +protected: + + SVGPreserveAspectRatio baseVal; + SVGPreserveAspectRatio animVal; + +}; + + + + +/*######################################################################### +## SVGFitToViewBox +#########################################################################*/ + +/** + * + */ +class SVGFitToViewBox +{ +public: + + /** + * + */ + virtual SVGAnimatedRect getViewBox() + { return viewBox; } + + /** + * + */ + virtual SVGAnimatedPreserveAspectRatio getPreserveAspectRatio() + { return preserveAspectRatio; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGFitToViewBox() + {} + + /** + * + */ + + SVGFitToViewBox(const SVGFitToViewBox &other) + { + viewBox = other.viewBox; + preserveAspectRatio = other.preserveAspectRatio; + } + + /** + * + */ + virtual ~SVGFitToViewBox() {} + +protected: + + SVGAnimatedRect viewBox; + + SVGAnimatedPreserveAspectRatio preserveAspectRatio; + +}; + + +/*######################################################################### +## SVGZoomAndPan +#########################################################################*/ + +/** + * + */ +class SVGZoomAndPan +{ +public: + + + /** + * Zoom and Pan Types + */ + typedef enum + { + SVG_ZOOMANDPAN_UNKNOWN = 0, + SVG_ZOOMANDPAN_DISABLE = 1, + SVG_ZOOMANDPAN_MAGNIFY = 2 + } ZoomAndPanType; + + + /** + * + */ + virtual unsigned short getZoomAndPan() + { return zoomAndPan; } + + /** + * + */ + virtual void setZoomAndPan(unsigned short val) throw (DOMException) + { zoomAndPan = val; } + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGZoomAndPan() + { zoomAndPan = SVG_ZOOMANDPAN_UNKNOWN; } + + /** + * + */ + SVGZoomAndPan(const SVGZoomAndPan &other) + { zoomAndPan = other.zoomAndPan; } + + /** + * + */ + virtual ~SVGZoomAndPan() {} + +protected: + + unsigned short zoomAndPan; + +}; + + + + + + +/*######################################################################### +## SVGViewSpec +#########################################################################*/ + +/** + * + */ +class SVGViewSpec : public SVGZoomAndPan, + public SVGFitToViewBox +{ +public: + + /** + * + */ + virtual SVGTransformList getTransform() + { return transform; } + + /** + * + */ + virtual SVGElement *getViewTarget() + { return viewTarget; } + + /** + * + */ + virtual DOMString getViewBoxString() + { + DOMString ret; + return ret; + } + + /** + * + */ + virtual DOMString getPreserveAspectRatioString() + { + DOMString ret; + return ret; + } + + /** + * + */ + virtual DOMString getTransformString() + { + DOMString ret; + return ret; + } + + /** + * + */ + virtual DOMString getViewTargetString() + { + DOMString ret; + return ret; + } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGViewSpec() + { + viewTarget = NULL; + } + + /** + * + */ + SVGViewSpec(const SVGViewSpec &other) : SVGZoomAndPan(other), SVGFitToViewBox(other) + { + viewTarget = other.viewTarget; + transform = other.transform; + } + + /** + * + */ + virtual ~SVGViewSpec() {} + +protected: + + SVGElement *viewTarget; + SVGTransformList transform; +}; + + + + + + +/*######################################################################### +## SVGURIReference +#########################################################################*/ + +/** + * + */ +class SVGURIReference +{ +public: + + /** + * + */ + virtual SVGAnimatedString getHref() + { return href; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGURIReference() {} + + /** + * + */ + SVGURIReference(const SVGURIReference &other) + { + href = other.href; + } + + /** + * + */ + virtual ~SVGURIReference() {} + +protected: + + SVGAnimatedString href; + +}; + + + + + + +/*######################################################################### +## SVGCSSRule +#########################################################################*/ + +/** + * + */ +class SVGCSSRule : public css::CSSRule +{ +public: + + + /** + * Additional CSS RuleType to support ICC color specifications + */ + typedef enum + { + COLOR_PROFILE_RULE = 7 + } ColorProfileRuleType; + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGCSSRule() + { type = COLOR_PROFILE_RULE; } + + /** + * + */ + SVGCSSRule(const SVGCSSRule &other) : css::CSSRule(other) + { type = COLOR_PROFILE_RULE; } + + /** + * + */ + virtual ~SVGCSSRule() {} + +}; + + + +/*######################################################################### +## SVGRenderingIntent +#########################################################################*/ + +/** + * + */ +class SVGRenderingIntent +{ +public: + + /** + * Rendering Intent Types + */ + typedef enum + { + RENDERING_INTENT_UNKNOWN = 0, + RENDERING_INTENT_AUTO = 1, + RENDERING_INTENT_PERCEPTUAL = 2, + RENDERING_INTENT_RELATIVE_COLORIMETRIC = 3, + RENDERING_INTENT_SATURATION = 4, + RENDERING_INTENT_ABSOLUTE_COLORIMETRIC = 5 + } RenderingIntentType; + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGRenderingIntent() + { + renderingIntentType = RENDERING_INTENT_UNKNOWN; + } + + /** + * + */ + SVGRenderingIntent(const SVGRenderingIntent &other) + { + renderingIntentType = other.renderingIntentType; + } + + /** + * + */ + virtual ~SVGRenderingIntent() {} + +protected: + + unsigned short renderingIntentType; +}; + + + + + + + +/*######################################################################### +########################################################################### +## P A T H S E G M E N T S +########################################################################### +#########################################################################*/ + +static char *pathSegLetters[] = +{ + "@", // PATHSEG_UNKNOWN, + "z", // PATHSEG_CLOSEPATH + "M", // PATHSEG_MOVETO_ABS + "m", // PATHSEG_MOVETO_REL, + "L", // PATHSEG_LINETO_ABS + "l", // PATHSEG_LINETO_REL + "C", // PATHSEG_CURVETO_CUBIC_ABS + "c", // PATHSEG_CURVETO_CUBIC_REL + "Q", // PATHSEG_CURVETO_QUADRATIC_ABS, + "q", // PATHSEG_CURVETO_QUADRATIC_REL + "A", // PATHSEG_ARC_ABS + "a", // PATHSEG_ARC_REL, + "H", // PATHSEG_LINETO_HORIZONTAL_ABS, + "h", // PATHSEG_LINETO_HORIZONTAL_REL + "V", // PATHSEG_LINETO_VERTICAL_ABS + "v", // PATHSEG_LINETO_VERTICAL_REL + "S", // PATHSEG_CURVETO_CUBIC_SMOOTH_ABS + "s", // PATHSEG_CURVETO_CUBIC_SMOOTH_REL + "T", // PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS + "t" // PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL +}; + +/*######################################################################### +## SVGPathSeg +#########################################################################*/ + +/** + * + */ +class SVGPathSeg +{ +public: + + + + /** + * Path Segment Types + */ + typedef enum + { + PATHSEG_UNKNOWN = 0, + PATHSEG_CLOSEPATH = 1, + PATHSEG_MOVETO_ABS = 2, + PATHSEG_MOVETO_REL = 3, + PATHSEG_LINETO_ABS = 4, + PATHSEG_LINETO_REL = 5, + PATHSEG_CURVETO_CUBIC_ABS = 6, + PATHSEG_CURVETO_CUBIC_REL = 7, + PATHSEG_CURVETO_QUADRATIC_ABS = 8, + PATHSEG_CURVETO_QUADRATIC_REL = 9, + PATHSEG_ARC_ABS = 10, + PATHSEG_ARC_REL = 11, + PATHSEG_LINETO_HORIZONTAL_ABS = 12, + PATHSEG_LINETO_HORIZONTAL_REL = 13, + PATHSEG_LINETO_VERTICAL_ABS = 14, + PATHSEG_LINETO_VERTICAL_REL = 15, + PATHSEG_CURVETO_CUBIC_SMOOTH_ABS = 16, + PATHSEG_CURVETO_CUBIC_SMOOTH_REL = 17, + PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS = 18, + PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL = 19 + } PathSegmentType; + + /** + * + */ + virtual unsigned short getPathSegType() + { return type; } + + /** + * + */ + virtual DOMString getPathSegTypeAsLetter() + { + int typ = type; + if (typ<0 || typ>PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL) + typ = PATHSEG_UNKNOWN; + char *ch = pathSegLetters[typ]; + DOMString letter = ch; + return letter; + } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGPathSeg() + { type = PATHSEG_UNKNOWN; } + + /** + * + */ + SVGPathSeg(const SVGPathSeg &other) + { + type = other.type; + } + + /** + * + */ + virtual ~SVGPathSeg() {} + +protected: + + int type; + +}; + + + + + + +/*######################################################################### +## SVGPathSegClosePath +#########################################################################*/ + +/** + * + */ +class SVGPathSegClosePath : public SVGPathSeg +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGPathSegClosePath() + { + type = PATHSEG_CLOSEPATH; + } + + /** + * + */ + SVGPathSegClosePath(const SVGPathSegClosePath &other) : SVGPathSeg(other) + { + type = PATHSEG_CLOSEPATH; + } + + /** + * + */ + virtual ~SVGPathSegClosePath() {} + +}; + + + + +/*######################################################################### +## SVGPathSegMovetoAbs +#########################################################################*/ + +/** + * + */ +class SVGPathSegMovetoAbs : public SVGPathSeg +{ +public: + + /** + * + */ + virtual double getX() + { return x; } + + /** + * + */ + virtual void setX(double val) throw (DOMException) + { x = val; } + + /** + * + */ + virtual double getY() + { return y; } + + /** + * + */ + virtual void setY(double val) throw (DOMException) + { y = val; } + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGPathSegMovetoAbs() + { + type = PATHSEG_MOVETO_ABS; + x = y = 0.0; + } + + /** + * + */ + SVGPathSegMovetoAbs(double xArg, double yArg) + { + type = PATHSEG_MOVETO_ABS; + x = xArg; y = yArg; + } + + /** + * + */ + SVGPathSegMovetoAbs(const SVGPathSegMovetoAbs &other) : SVGPathSeg(other) + { + type = PATHSEG_MOVETO_ABS; + x = other.x; y = other.y; + } + + /** + * + */ + virtual ~SVGPathSegMovetoAbs() {} + +protected: + + double x,y; + +}; + + + + + + +/*######################################################################### +## SVGPathSegMovetoRel +#########################################################################*/ + +/** + * + */ +class SVGPathSegMovetoRel : public SVGPathSeg +{ +public: + + /** + * + */ + virtual double getX() + { return x; } + + /** + * + */ + virtual void setX(double val) throw (DOMException) + { x = val; } + + /** + * + */ + virtual double getY() + { return y; } + + /** + * + */ + virtual void setY(double val) throw (DOMException) + { y = val; } + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGPathSegMovetoRel() + { + type = PATHSEG_MOVETO_REL; + x = y = 0.0; + } + + + /** + * + */ + SVGPathSegMovetoRel(double xArg, double yArg) + { + type = PATHSEG_MOVETO_REL; + x = xArg; y = yArg; + } + + /** + * + */ + SVGPathSegMovetoRel(const SVGPathSegMovetoRel &other) : SVGPathSeg(other) + { + type = PATHSEG_MOVETO_REL; + x = other.x; y = other.y; + } + + /** + * + */ + virtual ~SVGPathSegMovetoRel() {} + +protected: + + double x,y; +}; + + + + + + +/*######################################################################### +## SVGPathSegLinetoAbs +#########################################################################*/ + +/** + * + */ +class SVGPathSegLinetoAbs : public SVGPathSeg +{ +public: + + /** + * + */ + virtual double getX() + { return x; } + + /** + * + */ + virtual void setX(double val) throw (DOMException) + { x = val; } + + /** + * + */ + virtual double getY() + { return y; } + + /** + * + */ + virtual void setY(double val) throw (DOMException) + { y = val; } + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGPathSegLinetoAbs() + { + type = PATHSEG_LINETO_ABS; + x = y = 0.0; + } + + + /** + * + */ + SVGPathSegLinetoAbs(double xArg, double yArg) + { + type = PATHSEG_LINETO_ABS; + x = xArg; y = yArg; + } + + /** + * + */ + SVGPathSegLinetoAbs(const SVGPathSegLinetoAbs &other) : SVGPathSeg(other) + { + type = PATHSEG_LINETO_ABS; + x = other.x; y = other.y; + } + + /** + * + */ + virtual ~SVGPathSegLinetoAbs() {} + +protected: + + double x,y; +}; + + + + + + +/*######################################################################### +## SVGPathSegLinetoRel +#########################################################################*/ + +/** + * + */ +class SVGPathSegLinetoRel : public SVGPathSeg +{ +public: + + /** + * + */ + virtual double getX() + { return x; } + + /** + * + */ + virtual void setX(double val) throw (DOMException) + { x = val; } + + /** + * + */ + virtual double getY() + { return y; } + + /** + * + */ + virtual void setY(double val) throw (DOMException) + { y = val; } + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGPathSegLinetoRel() + { + type = PATHSEG_LINETO_REL; + x = y = 0.0; + } + + + /** + * + */ + SVGPathSegLinetoRel(double xArg, double yArg) + { + type = PATHSEG_LINETO_REL; + x = xArg; y = yArg; + } + + /** + * + */ + SVGPathSegLinetoRel(const SVGPathSegLinetoRel &other) : SVGPathSeg(other) + { + type = PATHSEG_LINETO_REL; + x = other.x; y = other.y; + } + + /** + * + */ + virtual ~SVGPathSegLinetoRel() {} + +protected: + + double x,y; +}; + + + + + + +/*######################################################################### +## SVGPathSegCurvetoCubicAbs +#########################################################################*/ + +/** + * + */ +class SVGPathSegCurvetoCubicAbs : public SVGPathSeg +{ +public: + + /** + * + */ + virtual double getX() + { return x; } + + /** + * + */ + virtual void setX(double val) throw (DOMException) + { x = val; } + + /** + * + */ + virtual double getY() + { return y; } + + /** + * + */ + virtual void setY(double val) throw (DOMException) + { y = val; } + + /** + * + */ + virtual double getX1() + { return x1; } + + /** + * + */ + virtual void setX1(double val) throw (DOMException) + { x1 = val; } + + /** + * + */ + virtual double getY1() + { return y1; } + + /** + * + */ + virtual void setY1(double val) throw (DOMException) + { y1 = val; } + + + /** + * + */ + virtual double getX2() + { return x2; } + + /** + * + */ + virtual void setX2(double val) throw (DOMException) + { x2 = val; } + + /** + * + */ + virtual double getY2() + { return y2; } + + /** + * + */ + virtual void setY2(double val) throw (DOMException) + { y2 = val; } + + + //################## + //# Non-API methods + //################## + + + /** + * + */ + SVGPathSegCurvetoCubicAbs() + { + type = PATHSEG_CURVETO_CUBIC_ABS; + x = y = x1 = y1 = x2 = y2 = 0.0; + } + + /** + * + */ + SVGPathSegCurvetoCubicAbs(double xArg, double yArg, + double x1Arg, double y1Arg, + double x2Arg, double y2Arg) + { + type = PATHSEG_CURVETO_CUBIC_ABS; + x = xArg; y = yArg; + x1 = x1Arg; y1 = y1Arg; + x2 = x2Arg; y2 = y2Arg; + } + + /** + * + */ + SVGPathSegCurvetoCubicAbs(const SVGPathSegCurvetoCubicAbs &other) + : SVGPathSeg(other) + { + type = PATHSEG_CURVETO_CUBIC_ABS; + x = other.x; y = other.y; + x1 = other.x1; y1 = other.y1; + x2 = other.x2; y2 = other.y2; + } + + /** + * + */ + virtual ~SVGPathSegCurvetoCubicAbs() {} + +protected: + + double x, y, x1, y1, x2, y2; + +}; + + + + + + +/*######################################################################### +## SVGPathSegCurvetoCubicRel +#########################################################################*/ + +/** + * + */ +class SVGPathSegCurvetoCubicRel : public SVGPathSeg +{ +public: + + /** + * + */ + virtual double getX() + { return x; } + + /** + * + */ + virtual void setX(double val) throw (DOMException) + { x = val; } + + /** + * + */ + virtual double getY() + { return y; } + + /** + * + */ + virtual void setY(double val) throw (DOMException) + { y = val; } + + /** + * + */ + virtual double getX1() + { return x1; } + + /** + * + */ + virtual void setX1(double val) throw (DOMException) + { x1 = val; } + + /** + * + */ + virtual double getY1() + { return y1; } + + /** + * + */ + virtual void setY1(double val) throw (DOMException) + { y1 = val; } + + + /** + * + */ + virtual double getX2() + { return x2; } + + /** + * + */ + virtual void setX2(double val) throw (DOMException) + { x2 = val; } + + /** + * + */ + virtual double getY2() + { return y2; } + + /** + * + */ + virtual void setY2(double val) throw (DOMException) + { y2 = val; } + + + //################## + //# Non-API methods + //################## + + + /** + * + */ + SVGPathSegCurvetoCubicRel() + { + type = PATHSEG_CURVETO_CUBIC_REL; + x = y = x1 = y1 = x2 = y2 = 0.0; + } + + + /** + * + */ + SVGPathSegCurvetoCubicRel(double xArg, double yArg, + double x1Arg, double y1Arg, + double x2Arg, double y2Arg) + { + type = PATHSEG_CURVETO_CUBIC_REL; + x = xArg; y = yArg; + x1 = x1Arg; y1 = y1Arg; + x2 = x2Arg; y2 = y2Arg; + } + + /** + * + */ + SVGPathSegCurvetoCubicRel(const SVGPathSegCurvetoCubicRel &other) + : SVGPathSeg(other) + { + type = PATHSEG_CURVETO_CUBIC_REL; + x = other.x; y = other.y; + x1 = other.x1; y1 = other.y1; + x2 = other.x2; y2 = other.y2; + } + + /** + * + */ + virtual ~SVGPathSegCurvetoCubicRel() {} + +protected: + + double x, y, x1, y1, x2, y2; + +}; + + + + + + +/*######################################################################### +## SVGPathSegCurvetoQuadraticAbs +#########################################################################*/ + +/** + * + */ +class SVGPathSegCurvetoQuadraticAbs : public SVGPathSeg +{ +public: + + /** + * + */ + virtual double getX() + { return x; } + + /** + * + */ + virtual void setX(double val) throw (DOMException) + { x = val; } + + /** + * + */ + virtual double getY() + { return y; } + + /** + * + */ + virtual void setY(double val) throw (DOMException) + { y = val; } + + /** + * + */ + virtual double getX1() + { return x1; } + + /** + * + */ + virtual void setX1(double val) throw (DOMException) + { x1 = val; } + + /** + * + */ + virtual double getY1() + { return y1; } + + /** + * + */ + virtual void setY1(double val) throw (DOMException) + { y1 = val; } + + + //################## + //# Non-API methods + //################## + + + /** + * + */ + SVGPathSegCurvetoQuadraticAbs() + { + type = PATHSEG_CURVETO_QUADRATIC_ABS; + x = y = x1 = y1 = 0.0; + } + + /** + * + */ + SVGPathSegCurvetoQuadraticAbs(double xArg, double yArg, + double x1Arg, double y1Arg) + { + type = PATHSEG_CURVETO_QUADRATIC_ABS; + x = xArg; y = yArg; + x1 = x1Arg; y1 = y1Arg; + } + + /** + * + */ + SVGPathSegCurvetoQuadraticAbs(const SVGPathSegCurvetoQuadraticAbs &other) + : SVGPathSeg(other) + { + type = PATHSEG_CURVETO_QUADRATIC_ABS; + x = other.x; y = other.y; + x1 = other.x1; y1 = other.y1; + } + + /** + * + */ + virtual ~SVGPathSegCurvetoQuadraticAbs() {} + +protected: + + double x, y, x1, y1; + +}; + + + + + + +/*######################################################################### +## SVGPathSegCurvetoQuadraticRel +#########################################################################*/ + +/** + * + */ +class SVGPathSegCurvetoQuadraticRel : public SVGPathSeg +{ +public: + + /** + * + */ + virtual double getX() + { return x; } + + /** + * + */ + virtual void setX(double val) throw (DOMException) + { x = val; } + + /** + * + */ + virtual double getY() + { return y; } + + /** + * + */ + virtual void setY(double val) throw (DOMException) + { y = val; } + + /** + * + */ + virtual double getX1() + { return x1; } + + /** + * + */ + virtual void setX1(double val) throw (DOMException) + { x1 = val; } + + /** + * + */ + virtual double getY1() + { return y1; } + + /** + * + */ + virtual void setY1(double val) throw (DOMException) + { y1 = val; } + + + //################## + //# Non-API methods + //################## + + + /** + * + */ + SVGPathSegCurvetoQuadraticRel() + { + type = PATHSEG_CURVETO_QUADRATIC_REL; + x = y = x1 = y1 = 0.0; + } + + + /** + * + */ + SVGPathSegCurvetoQuadraticRel(double xArg, double yArg, + double x1Arg, double y1Arg) + { + type = PATHSEG_CURVETO_QUADRATIC_REL; + x = xArg; y = yArg; + x1 = x1Arg; y1 = y1Arg; + } + + /** + * + */ + SVGPathSegCurvetoQuadraticRel(const SVGPathSegCurvetoQuadraticRel &other) + : SVGPathSeg(other) + { + type = PATHSEG_CURVETO_QUADRATIC_REL; + x = other.x; y = other.y; + x1 = other.x1; y1 = other.y1; + } + + /** + * + */ + virtual ~SVGPathSegCurvetoQuadraticRel() {} + +protected: + + double x, y, x1, y1; + +}; + + + + + + +/*######################################################################### +## SVGPathSegArcAbs +#########################################################################*/ + +/** + * + */ +class SVGPathSegArcAbs : public SVGPathSeg +{ +public: + + /** + * + */ + virtual double getX() + { return x; } + + /** + * + */ + virtual void setX(double val) throw (DOMException) + { x = val; } + + /** + * + */ + virtual double getY() + { return y; } + + /** + * + */ + virtual void setY(double val) throw (DOMException) + { y = val; } + + /** + * + */ + virtual double getR1() + { return r1; } + + /** + * + */ + virtual void setR1(double val) throw (DOMException) + { r1 = val; } + + /** + * + */ + virtual double getR2() + { return r2; } + + /** + * + */ + virtual void setR2(double val) throw (DOMException) + { r2 = val; } + + /** + * + */ + virtual double getAngle() + { return angle; } + + /** + * + */ + virtual void setAngle(double val) throw (DOMException) + { angle = val; } + + /** + * + */ + virtual bool getLargeArcFlag() + { return largeArcFlag; } + + /** + * + */ + virtual void setLargeArcFlag(bool val) throw (DOMException) + { largeArcFlag = val; } + + /** + * + */ + virtual bool getSweepFlag() + { return sweepFlag; } + + /** + * + */ + virtual void setSweepFlag(bool val) throw (DOMException) + { sweepFlag = val; } + + //################## + //# Non-API methods + //################## + + + /** + * + */ + SVGPathSegArcAbs() + { + type = PATHSEG_ARC_ABS; + x = y = r1 = r2 = angle = 0.0; + largeArcFlag = sweepFlag = false; + } + + /** + * + */ + SVGPathSegArcAbs(double xArg, double yArg, + double r1Arg, double r2Arg, + double angleArg, + bool largeArcFlagArg, + bool sweepFlagArg ) + + { + type = PATHSEG_ARC_ABS; + x = xArg; y = yArg; + r1 = r1Arg; r2 = r2Arg; + angle = angleArg; + largeArcFlag = largeArcFlagArg; + sweepFlag = sweepFlagArg; + } + + /** + * + */ + SVGPathSegArcAbs(const SVGPathSegArcAbs &other) + : SVGPathSeg(other) + { + type = PATHSEG_ARC_ABS; + x = other.x; y = other.y; + r1 = other.r1; r2 = other.r2; + angle = other.angle; + largeArcFlag = other.largeArcFlag; + sweepFlag = other.sweepFlag; + } + + /** + * + */ + virtual ~SVGPathSegArcAbs() {} + +protected: + + double x, y, r1, r2, angle; + bool largeArcFlag; + bool sweepFlag; + +}; + + + +/*######################################################################### +## SVGPathSegArcRel +#########################################################################*/ + +/** + * + */ +class SVGPathSegArcRel : public SVGPathSeg +{ +public: + + /** + * + */ + virtual double getX() + { return x; } + + /** + * + */ + virtual void setX(double val) throw (DOMException) + { x = val; } + + /** + * + */ + virtual double getY() + { return y; } + + /** + * + */ + virtual void setY(double val) throw (DOMException) + { y = val; } + + /** + * + */ + virtual double getR1() + { return r1; } + + /** + * + */ + virtual void setR1(double val) throw (DOMException) + { r1 = val; } + + /** + * + */ + virtual double getR2() + { return r2; } + + /** + * + */ + virtual void setR2(double val) throw (DOMException) + { r2 = val; } + + /** + * + */ + virtual double getAngle() + { return angle; } + + /** + * + */ + virtual void setAngle(double val) throw (DOMException) + { angle = val; } + + /** + * + */ + virtual bool getLargeArcFlag() + { return largeArcFlag; } + + /** + * + */ + virtual void setLargeArcFlag(bool val) throw (DOMException) + { largeArcFlag = val; } + + /** + * + */ + virtual bool getSweepFlag() + { return sweepFlag; } + + /** + * + */ + virtual void setSweepFlag(bool val) throw (DOMException) + { sweepFlag = val; } + + //################## + //# Non-API methods + //################## + + + /** + * + */ + SVGPathSegArcRel() + { + type = PATHSEG_ARC_REL; + x = y = r1 = r2 = angle = 0.0; + largeArcFlag = sweepFlag = false; + } + + + /** + * + */ + SVGPathSegArcRel(double xArg, double yArg, + double r1Arg, double r2Arg, + double angleArg, + bool largeArcFlagArg, + bool sweepFlagArg ) + + { + type = PATHSEG_ARC_REL; + x = xArg; y = yArg; + r1 = r1Arg; r2 = r2Arg; + angle = angleArg; + largeArcFlag = largeArcFlagArg; + sweepFlag = sweepFlagArg; + } + + /** + * + */ + SVGPathSegArcRel(const SVGPathSegArcRel &other) + : SVGPathSeg(other) + { + type = PATHSEG_ARC_REL; + x = other.x; y = other.y; + r1 = other.r1; r2 = other.r2; + angle = other.angle; + largeArcFlag = other.largeArcFlag; + sweepFlag = other.sweepFlag; + } + + /** + * + */ + virtual ~SVGPathSegArcRel() {} + +protected: + + double x, y, r1, r2, angle; + bool largeArcFlag; + bool sweepFlag; + +}; + + + + + + +/*######################################################################### +## SVGPathSegLinetoHorizontalAbs +#########################################################################*/ + +/** + * + */ +class SVGPathSegLinetoHorizontalAbs : public SVGPathSeg +{ +public: + + /** + * + */ + virtual double getX() + { return x; } + + /** + * + */ + virtual void setX(double val) throw (DOMException) + { x = val; } + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGPathSegLinetoHorizontalAbs() + { + type = PATHSEG_LINETO_HORIZONTAL_ABS; + x = 0.0; + } + + + /** + * + */ + SVGPathSegLinetoHorizontalAbs(double xArg) + { + type = PATHSEG_LINETO_HORIZONTAL_ABS; + x = xArg; + } + + /** + * + */ + SVGPathSegLinetoHorizontalAbs(const SVGPathSegLinetoHorizontalAbs &other) + : SVGPathSeg(other) + { + type = PATHSEG_LINETO_HORIZONTAL_ABS; + x = other.x; + } + + /** + * + */ + virtual ~SVGPathSegLinetoHorizontalAbs() {} + +protected: + + double x; + +}; + + + + + + +/*######################################################################### +## SVGPathSegLinetoHorizontalRel +#########################################################################*/ + +/** + * + */ +class SVGPathSegLinetoHorizontalRel : public SVGPathSeg +{ +public: + + /** + * + */ + virtual double getX() + { return x; } + + /** + * + */ + virtual void setX(double val) throw (DOMException) + { x = val; } + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGPathSegLinetoHorizontalRel() + { + type = PATHSEG_LINETO_HORIZONTAL_REL; + x = 0.0; + } + + + /** + * + */ + SVGPathSegLinetoHorizontalRel(double xArg) + { + type = PATHSEG_LINETO_HORIZONTAL_REL; + x = xArg; + } + + /** + * + */ + SVGPathSegLinetoHorizontalRel(const SVGPathSegLinetoHorizontalRel &other) + : SVGPathSeg(other) + { + type = PATHSEG_LINETO_HORIZONTAL_REL; + x = other.x; + } + + /** + * + */ + virtual ~SVGPathSegLinetoHorizontalRel() {} + +protected: + + double x; + +}; + + + +/*######################################################################### +## SVGPathSegLinetoVerticalAbs +#########################################################################*/ + +/** + * + */ +class SVGPathSegLinetoVerticalAbs : public SVGPathSeg +{ +public: + + /** + * + */ + virtual double getY() + { return y; } + + /** + * + */ + virtual void setY(double val) throw (DOMException) + { y = val; } + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGPathSegLinetoVerticalAbs() + { + type = PATHSEG_LINETO_VERTICAL_ABS; + y = 0.0; + } + + + /** + * + */ + SVGPathSegLinetoVerticalAbs(double yArg) + { + type = PATHSEG_LINETO_VERTICAL_ABS; + y = yArg; + } + + /** + * + */ + SVGPathSegLinetoVerticalAbs(const SVGPathSegLinetoVerticalAbs &other) + : SVGPathSeg(other) + { + type = PATHSEG_LINETO_VERTICAL_ABS; + y = other.y; + } + + /** + * + */ + virtual ~SVGPathSegLinetoVerticalAbs() {} + +protected: + + double y; + +}; + + + +/*######################################################################### +## SVGPathSegLinetoVerticalRel +#########################################################################*/ + +/** + * + */ +class SVGPathSegLinetoVerticalRel : public SVGPathSeg +{ +public: + + /** + * + */ + virtual double getY() + { return y; } + + /** + * + */ + virtual void setY(double val) throw (DOMException) + { y = val; } + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGPathSegLinetoVerticalRel() + { + type = PATHSEG_LINETO_VERTICAL_REL; + y = 0.0; + } + + + /** + * + */ + SVGPathSegLinetoVerticalRel(double yArg) + { + type = PATHSEG_LINETO_VERTICAL_REL; + y = yArg; + } + + /** + * + */ + SVGPathSegLinetoVerticalRel(const SVGPathSegLinetoVerticalRel &other) + : SVGPathSeg(other) + { + type = PATHSEG_LINETO_VERTICAL_REL; + y = other.y; + } + + /** + * + */ + virtual ~SVGPathSegLinetoVerticalRel() {} + +protected: + + double y; + +}; + + + + + + +/*######################################################################### +## SVGPathSegCurvetoCubicSmoothAbs +#########################################################################*/ + +/** + * + */ +class SVGPathSegCurvetoCubicSmoothAbs : public SVGPathSeg +{ +public: + + /** + * + */ + virtual double getX() + { return x; } + + /** + * + */ + virtual void setX(double val) throw (DOMException) + { x = val; } + + /** + * + */ + virtual double getY() + { return y; } + + /** + * + */ + virtual void setY(double val) throw (DOMException) + { y = val; } + + /** + * + */ + virtual double getX2() + { return x2; } + + /** + * + */ + virtual void setX2(double val) throw (DOMException) + { x2 = val; } + + /** + * + */ + virtual double getY2() + { return y2; } + + /** + * + */ + virtual void setY2(double val) throw (DOMException) + { y2 = val; } + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGPathSegCurvetoCubicSmoothAbs() + { + type = PATHSEG_CURVETO_CUBIC_SMOOTH_ABS; + x = y = x2 = y2 = 0.0; + } + + + /** + * + */ + SVGPathSegCurvetoCubicSmoothAbs(double xArg, double yArg, + double x2Arg, double y2Arg) + { + type = PATHSEG_CURVETO_CUBIC_SMOOTH_ABS; + x = xArg; y = yArg; + x2 = x2Arg; y2 = y2Arg; + } + + /** + * + */ + SVGPathSegCurvetoCubicSmoothAbs(const SVGPathSegCurvetoCubicSmoothAbs &other) + : SVGPathSeg(other) + { + type = PATHSEG_CURVETO_CUBIC_SMOOTH_ABS; + x = other.x; y = other.y; + x2 = other.x2; y2 = other.y2; + } + + /** + * + */ + virtual ~SVGPathSegCurvetoCubicSmoothAbs() {} + +protected: + + double x, y, x2, y2; + +}; + + + +/*######################################################################### +## SVGPathSegCurvetoCubicSmoothRel +#########################################################################*/ + +/** + * + */ +class SVGPathSegCurvetoCubicSmoothRel : public SVGPathSeg +{ +public: + + /** + * + */ + virtual double getX() + { return x; } + + /** + * + */ + virtual void setX(double val) throw (DOMException) + { x = val; } + + /** + * + */ + virtual double getY() + { return y; } + + /** + * + */ + virtual void setY(double val) throw (DOMException) + { y = val; } + + /** + * + */ + virtual double getX2() + { return x2; } + + /** + * + */ + virtual void setX2(double val) throw (DOMException) + { x2 = val; } + + /** + * + */ + virtual double getY2() + { return y2; } + + /** + * + */ + virtual void setY2(double val) throw (DOMException) + { y2 = val; } + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGPathSegCurvetoCubicSmoothRel() + { + type = PATHSEG_CURVETO_CUBIC_SMOOTH_REL; + x = y = x2 = y2 = 0.0; + } + + + /** + * + */ + SVGPathSegCurvetoCubicSmoothRel(double xArg, double yArg, + double x2Arg, double y2Arg) + { + type = PATHSEG_CURVETO_CUBIC_SMOOTH_REL; + x = xArg; y = yArg; + x2 = x2Arg; y2 = y2Arg; + } + + /** + * + */ + SVGPathSegCurvetoCubicSmoothRel(const SVGPathSegCurvetoCubicSmoothRel &other) + : SVGPathSeg(other) + { + type = PATHSEG_CURVETO_CUBIC_SMOOTH_REL; + x = other.x; y = other.y; + x2 = other.x2; y2 = other.y2; + } + + /** + * + */ + virtual ~SVGPathSegCurvetoCubicSmoothRel() {} + +protected: + + double x, y, x2, y2; + +}; + + + + + + +/*######################################################################### +## SVGPathSegCurvetoQuadraticSmoothAbs +#########################################################################*/ + +/** + * + */ +class SVGPathSegCurvetoQuadraticSmoothAbs : public SVGPathSeg +{ +public: + + /** + * + */ + virtual double getX() + { return x; } + + /** + * + */ + virtual void setX(double val) throw (DOMException) + { x = val; } + + /** + * + */ + virtual double getY() + { return y; } + + /** + * + */ + virtual void setY(double val) throw (DOMException) + { y = val; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGPathSegCurvetoQuadraticSmoothAbs() + { + type = PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS; + x = y = 0.0; + } + + + /** + * + */ + SVGPathSegCurvetoQuadraticSmoothAbs(double xArg, double yArg) + { + type = PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS; + x = xArg; y = yArg; + } + + /** + * + */ + SVGPathSegCurvetoQuadraticSmoothAbs(const SVGPathSegCurvetoQuadraticSmoothAbs &other) + : SVGPathSeg(other) + { + type = PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS; + x = y = 0.0; + } + + /** + * + */ + virtual ~SVGPathSegCurvetoQuadraticSmoothAbs() {} + +protected: + + double x, y; + +}; + + + + + + +/*######################################################################### +## SVGPathSegCurvetoQuadraticSmoothRel +#########################################################################*/ + +/** + * + */ +class SVGPathSegCurvetoQuadraticSmoothRel : public SVGPathSeg +{ +public: + + /** + * + */ + virtual double getX() + { return x; } + + /** + * + */ + virtual void setX(double val) throw (DOMException) + { x = val; } + + /** + * + */ + virtual double getY() + { return y; } + + /** + * + */ + virtual void setY(double val) throw (DOMException) + { y = val; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGPathSegCurvetoQuadraticSmoothRel() + { + type = PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL; + x = y = 0.0; + } + + + /** + * + */ + SVGPathSegCurvetoQuadraticSmoothRel(double xArg, double yArg) + { + type = PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL; + x = xArg; y = yArg; + } + + /** + * + */ + SVGPathSegCurvetoQuadraticSmoothRel(const SVGPathSegCurvetoQuadraticSmoothRel &other) + : SVGPathSeg(other) + { + type = PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL; + x = y = 0.0; + } + + /** + * + */ + virtual ~SVGPathSegCurvetoQuadraticSmoothRel() {} + +protected: + + double x, y; + +}; + + + + + + +/*######################################################################### +## SVGPathSegList +#########################################################################*/ + +/** + * + */ +class SVGPathSegList +{ +public: + + /** + * + */ + virtual unsigned long getNumberOfItems() + { return items.size(); } + + + /** + * + */ + virtual void clear () throw( DOMException ) + { items.clear(); } + + /** + * + */ + virtual SVGPathSeg initialize (const SVGPathSeg &newItem) + throw( DOMException, SVGException ) + { + items.clear(); + items.push_back(newItem); + return newItem; + } + + /** + * + */ + virtual SVGPathSeg getItem (unsigned long index) + throw( DOMException ) + { + if (index >= items.size()) + { + SVGPathSeg seg; + return seg; + } + return items[index]; + } + + /** + * + */ + virtual SVGPathSeg insertItemBefore(const SVGPathSeg &newItem, + unsigned long index ) + throw( DOMException, SVGException ) + { + if (index >= items.size()) + items.push_back(newItem); + else + { + std::vector::iterator iter = items.begin() + index; + items.insert(iter, newItem); + } + return newItem; + } + + /** + * + */ + virtual SVGPathSeg replaceItem(const SVGPathSeg &newItem, + unsigned long index ) + throw( DOMException, SVGException ) + { + if (index >= items.size()) + { + SVGPathSeg seg; + return seg; + } + std::vector::iterator iter = items.begin() + index; + *iter = newItem; + return newItem; + } + + /** + * + */ + virtual SVGPathSeg removeItem (unsigned long index) + throw (DOMException) + { + if (index >= items.size()) + { + SVGPathSeg seg; + return seg; + } + std::vector::iterator iter = items.begin() + index; + SVGPathSeg olditem = *iter; + items.erase(iter); + return olditem; + } + + /** + * + */ + virtual SVGPathSeg appendItem (const SVGPathSeg &newItem) + throw( DOMException, SVGException ) + { + items.push_back(newItem); + return newItem; + } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGPathSegList() {} + + + /** + * + */ + SVGPathSegList(const SVGPathSegList &other) + { + items = other.items; + } + + + /** + * + */ + virtual ~SVGPathSegList() {} + +protected: + + std::vector items; + +}; + + + + + + +/*######################################################################### +## SVGAnimatedPathData +#########################################################################*/ + +/** + * + */ +class SVGAnimatedPathData +{ +public: + + /** + * + */ + virtual SVGPathSegList getPathSegList() + { + SVGPathSegList list; + return list; + } + + /** + * + */ + virtual SVGPathSegList getNormalizedPathSegList() + { + SVGPathSegList list; + return list; + } + + /** + * + */ + virtual SVGPathSegList getAnimatedPathSegList() + { + SVGPathSegList list; + return list; + } + + /** + * + */ + virtual SVGPathSegList getAnimatedNormalizedPathSegList() + { + SVGPathSegList list; + return list; + } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGAnimatedPathData() + {} + + /** + * + */ + SVGAnimatedPathData(const SVGAnimatedPathData &other) + { + } + + /** + * + */ + virtual ~SVGAnimatedPathData() {} + +}; + + + + + + +/*######################################################################### +## SVGAnimatedPoints +#########################################################################*/ + +/** + * + */ +class SVGAnimatedPoints +{ +public: + + /** + * + */ + virtual SVGPointList getPoints() + { return points; } + + /** + * + */ + virtual SVGPointList getAnimatedPoints() + { return animatedPoints; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGAnimatedPoints() {} + + /** + * + */ + SVGAnimatedPoints(const SVGAnimatedPoints &other) + { + points = other.points; + animatedPoints = other.animatedPoints; + } + + /** + * + */ + virtual ~SVGAnimatedPoints() {} + +protected: + + SVGPointList points; + SVGPointList animatedPoints; + +}; + + + + + +/*######################################################################### +## SVGPaint +#########################################################################*/ + +/** + * + */ +class SVGPaint : public SVGColor +{ +public: + + + /** + * Paint Types + */ + typedef enum + { + SVG_PAINTTYPE_UNKNOWN = 0, + SVG_PAINTTYPE_RGBCOLOR = 1, + SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR = 2, + SVG_PAINTTYPE_NONE = 101, + SVG_PAINTTYPE_CURRENTCOLOR = 102, + SVG_PAINTTYPE_URI_NONE = 103, + SVG_PAINTTYPE_URI_CURRENTCOLOR = 104, + SVG_PAINTTYPE_URI_RGBCOLOR = 105, + SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR = 106, + SVG_PAINTTYPE_URI = 107 + } PaintType; + + + /** + * + */ + virtual unsigned short getPaintType() + { return paintType; } + + /** + * + */ + virtual DOMString getUri() + { return uri; } + + /** + * + */ + virtual void setUri (const DOMString& uriArg ) + { uri = uriArg; } + + /** + * + */ + virtual void setPaint (unsigned short paintTypeArg, + const DOMString& uriArg, + const DOMString& rgbColor, + const DOMString& iccColor ) + throw( SVGException ) + { + paintType = paintTypeArg; + uri = uriArg; + //do something with rgbColor + //do something with iccColor; + } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGPaint() + { + uri = ""; + paintType = SVG_PAINTTYPE_UNKNOWN; + } + + /** + * + */ + SVGPaint(const SVGPaint &other) : css::CSSValue(other), SVGColor(other) + { + uri = ""; + paintType = SVG_PAINTTYPE_UNKNOWN; + } + + /** + * + */ + virtual ~SVGPaint() {} + +protected: + + unsigned int paintType; + DOMString uri; + +}; + + + + +/*######################################################################### +## SVGColorProfileRule +#########################################################################*/ + +/** + * + */ +class SVGColorProfileRule : public SVGCSSRule, + public SVGRenderingIntent +{ + +public: + /** + * + */ + virtual DOMString getSrc() + { return src; } + + /** + * + */ + virtual void setSrc(const DOMString &val) throw (DOMException) + { src = val; } + + /** + * + */ + virtual DOMString getName() + { return name; } + + /** + * + */ + virtual void setName(const DOMString &val) throw (DOMException) + { name = val; } + + /** + * + */ + virtual unsigned short getRenderingIntent() + { return renderingIntent; } + + /** + * + */ + virtual void setRenderingIntent(unsigned short val) throw (DOMException) + { renderingIntent = val; } + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGColorProfileRule() {} + + /** + * + */ + SVGColorProfileRule(const SVGColorProfileRule &other) + : SVGCSSRule(other), SVGRenderingIntent(other) + { + renderingIntent = other.renderingIntent; + src = other.src; + name = other.name; + } + + /** + * + */ + virtual ~SVGColorProfileRule() {} + +protected: + + unsigned short renderingIntent; + DOMString src; + DOMString name; + +}; + + + +/*######################################################################### +## SVGFilterPrimitiveStandardAttributes +#########################################################################*/ + +/** + * + */ +class SVGFilterPrimitiveStandardAttributes : public SVGStylable +{ +public: + + + + /** + * + */ + virtual SVGAnimatedLength getX() + { return x; } + + /** + * + */ + virtual SVGAnimatedLength getY() + { return y; } + + /** + * + */ + virtual SVGAnimatedLength getWidth() + { return width; } + + /** + * + */ + virtual SVGAnimatedLength getHeight() + { return height; } + + /** + * + */ + virtual SVGAnimatedString getResult() + { return result; } + + + + //################## + //# Non-API methods + //################## + + + /** + * + */ + SVGFilterPrimitiveStandardAttributes() + {} + + /** + * + */ + SVGFilterPrimitiveStandardAttributes(const SVGFilterPrimitiveStandardAttributes &other) + : SVGStylable(other) + { + x = other.x; + y = other.y; + width = other.width; + height = other.height; + result = other.result; + } + + /** + * + */ + virtual ~SVGFilterPrimitiveStandardAttributes() {} + +protected: + + SVGAnimatedLength x; + SVGAnimatedLength y; + SVGAnimatedLength width; + SVGAnimatedLength height; + SVGAnimatedString result; + +}; + + + + + + + + + + + +/*######################################################################### +## SVGEvent +#########################################################################*/ + +/** + * + */ +class SVGEvent : events::Event +{ +public: + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGEvent() {} + + /** + * + */ + SVGEvent(const SVGEvent &other) : events::Event(other) + {} + + /** + * + */ + virtual ~SVGEvent() {} + +}; + + + + +/*######################################################################### +## SVGZoomEvent +#########################################################################*/ + +/** + * + */ +class SVGZoomEvent : events::UIEvent +{ +public: + + /** + * + */ + virtual SVGRect getZoomRectScreen() + { return zoomRectScreen; } + + /** + * + */ + virtual double getPreviousScale() + { return previousScale; } + + /** + * + */ + virtual SVGPoint getPreviousTranslate() + { return previousTranslate; } + + /** + * + */ + virtual double getNewScale() + { return newScale; } + + /** + * + */ + virtual SVGPoint getNewTranslate() + { return newTranslate; } + + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGZoomEvent() + {} + + /** + * + */ + SVGZoomEvent(const SVGZoomEvent &other) : events::Event(other), + events::UIEvent(other) + { + zoomRectScreen = other.zoomRectScreen; + previousScale = other.previousScale; + previousTranslate = other.previousTranslate; + newScale = other.newScale; + newTranslate = other.newTranslate; + } + + /** + * + */ + virtual ~SVGZoomEvent() {} + +protected: + + SVGRect zoomRectScreen; + double previousScale; + SVGPoint previousTranslate; + double newScale; + SVGPoint newTranslate; + +}; + + + +/*######################################################################### +## SVGElementInstance +#########################################################################*/ + +/** + * + */ +class SVGElementInstance : public events::EventTarget +{ +public: + + /** + * + */ + virtual SVGElement *getCorrespondingElement() + { return correspondingElement; } + + /** + * + */ + virtual SVGUseElement *getCorrespondingUseElement() + { return correspondingUseElement; } + + /** + * + */ + virtual SVGElementInstance getParentNode() + { + SVGElementInstance ret; + return ret; + } + + /** + * Since we are using stack types and this is a circular definition, + * we will instead implement this as a global function below: + * SVGElementInstanceList getChildNodes(const SVGElementInstance instance); + */ + //virtual SVGElementInstanceList getChildNodes(); + + /** + * + */ + virtual SVGElementInstance getFirstChild() + { + SVGElementInstance ret; + return ret; + } + + /** + * + */ + virtual SVGElementInstance getLastChild() + { + SVGElementInstance ret; + return ret; + } + + /** + * + */ + virtual SVGElementInstance getPreviousSibling() + { + SVGElementInstance ret; + return ret; + } + + /** + * + */ + virtual SVGElementInstance getNextSibling() + { + SVGElementInstance ret; + return ret; + } + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGElementInstance() {} + + /** + * + */ + SVGElementInstance(const SVGElementInstance &other) + : events::EventTarget(other) + { + } + + /** + * + */ + virtual ~SVGElementInstance() {} + +protected: + + SVGElement *correspondingElement; + SVGUseElement *correspondingUseElement; + +}; + + + + + + +/*######################################################################### +## SVGElementInstanceList +#########################################################################*/ + +/** + * + */ +class SVGElementInstanceList +{ +public: + + + /** + * + */ + virtual unsigned long getLength() + { return items.size(); } + + /** + * + */ + virtual SVGElementInstance item (unsigned long index ) + { + if (index >= items.size()) + { + SVGElementInstance ret; + return ret; + } + return items[index]; + } + + /** + * This static method replaces the circular definition of: + * SVGElementInstanceList SVGElementInstance::getChildNodes() + * + */ + static SVGElementInstanceList getChildNodes(const SVGElementInstance &instance) + { + SVGElementInstanceList list; + return list; + } + + + //################## + //# Non-API methods + //################## + + /** + * + */ + SVGElementInstanceList() {} + + /** + * + */ + SVGElementInstanceList(const SVGElementInstanceList &other) + { + items = other.items; + } + + /** + * + */ + virtual ~SVGElementInstanceList() {} + +protected: + + std::vector items; + + +}; + + + + + + + + + + + + + +} //namespace svg +} //namespace dom +} //namespace w3c +} //namespace org + +#endif /* __SVGTYPES_H__ */ +/*######################################################################### +## E N D O F F I L E +#########################################################################*/ + diff --git a/src/dom/util/thread.cpp b/src/dom/util/thread.cpp index e88aaa0f0..3bb614b45 100644 --- a/src/dom/util/thread.cpp +++ b/src/dom/util/thread.cpp @@ -1,126 +1,126 @@ -/** - * Phoebe DOM Implementation. - * - * This is a C++ approximation of the W3C DOM model, which follows - * fairly closely the specifications in the various .idl files, copies of - * which are provided for reference. Most important is this one: - * - * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html - * - * Authors: - * Bob Jamison - * - * Copyright (C) 2006 Bob Jamison - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * Thread wrapper. This provides a platform-independent thread - * class for IO and testing. - * - */ - -#include "thread.h" -#include -#include - -namespace org -{ -namespace w3c -{ -namespace dom -{ -namespace util -{ - - -#ifdef __WIN32__ -#include - -static DWORD WINAPI WinThreadFunction(LPVOID context) -{ - Thread *thread = (Thread *)context; - thread->execute(); - return 0; -} - - -void Thread::start() -{ - DWORD dwThreadId; - HANDLE hThread = CreateThread(NULL, 0, WinThreadFunction, - (LPVOID)this, 0, &dwThreadId); - //Make sure the thread is started before 'this' is deallocated - while (!started) - sleep(10); - CloseHandle(hThread); -} - -void Thread::sleep(unsigned long millis) -{ - Sleep(millis); -} - - - -#else /* UNIX */ -#include - -void *PthreadThreadFunction(void *context) -{ - Thread *thread = (Thread *)context; - thread->execute(); - return NULL; -} - - -void Thread::start() -{ - pthread_t thread; - - int ret = pthread_create(&thread, NULL, - PthreadThreadFunction, (void *)this); - if (ret != 0) - printf("Thread::start: thread creation failed: %s\n", strerror(ret)); - - //Make sure the thread is started before 'this' is deallocated - while (!started) - sleep(10); - -} - -void Thread::sleep(unsigned long millis) -{ - timespec requested; - requested.tv_sec = millis / 1000; - requested.tv_nsec = (millis % 1000 ) * 1000000L; - nanosleep(&requested, NULL); -} - -#endif /* __WIN32__ */ - -} //namespace util -} //namespace dom -} //namespace w3c -} //namespace org - - - -//######################################################################### -//# E N D O F F I L E -//######################################################################### - - +/** + * Phoebe DOM Implementation. + * + * This is a C++ approximation of the W3C DOM model, which follows + * fairly closely the specifications in the various .idl files, copies of + * which are provided for reference. Most important is this one: + * + * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2006 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * Thread wrapper. This provides a platform-independent thread + * class for IO and testing. + * + */ + +#include "thread.h" +#include +#include + +namespace org +{ +namespace w3c +{ +namespace dom +{ +namespace util +{ + + +#ifdef __WIN32__ +#include + +static DWORD WINAPI WinThreadFunction(LPVOID context) +{ + Thread *thread = (Thread *)context; + thread->execute(); + return 0; +} + + +void Thread::start() +{ + DWORD dwThreadId; + HANDLE hThread = CreateThread(NULL, 0, WinThreadFunction, + (LPVOID)this, 0, &dwThreadId); + //Make sure the thread is started before 'this' is deallocated + while (!started) + sleep(10); + CloseHandle(hThread); +} + +void Thread::sleep(unsigned long millis) +{ + Sleep(millis); +} + + + +#else /* UNIX */ +#include + +void *PthreadThreadFunction(void *context) +{ + Thread *thread = (Thread *)context; + thread->execute(); + return NULL; +} + + +void Thread::start() +{ + pthread_t thread; + + int ret = pthread_create(&thread, NULL, + PthreadThreadFunction, (void *)this); + if (ret != 0) + printf("Thread::start: thread creation failed: %s\n", strerror(ret)); + + //Make sure the thread is started before 'this' is deallocated + while (!started) + sleep(10); + +} + +void Thread::sleep(unsigned long millis) +{ + timespec requested; + requested.tv_sec = millis / 1000; + requested.tv_nsec = (millis % 1000 ) * 1000000L; + nanosleep(&requested, NULL); +} + +#endif /* __WIN32__ */ + +} //namespace util +} //namespace dom +} //namespace w3c +} //namespace org + + + +//######################################################################### +//# E N D O F F I L E +//######################################################################### + + diff --git a/src/dom/util/thread.h b/src/dom/util/thread.h index 37c68ffc8..dfad6d9b3 100644 --- a/src/dom/util/thread.h +++ b/src/dom/util/thread.h @@ -1,155 +1,155 @@ -#ifndef __DOM_THREAD_H__ -#define __DOM_THREAD_H__ -/** - * Phoebe DOM Implementation. - * - * This is a C++ approximation of the W3C DOM model, which follows - * fairly closely the specifications in the various .idl files, copies of - * which are provided for reference. Most important is this one: - * - * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html - * - * Authors: - * Bob Jamison - * - * Copyright (C) 2006 Bob Jamison - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * Thread wrapper. This provides a platform-independent thread - * class for IO and testing. - * - */ - - -namespace org -{ -namespace w3c -{ -namespace dom -{ -namespace util -{ - - -/** - * This is the interface for a delegate class which can - * be run by a Thread. - * Thread thread(runnable); - * thread.start(); - */ -class Runnable -{ -public: - - Runnable() - {} - virtual ~Runnable() - {} - - /** - * The method of a delegate class which can - * be run by a Thread. Thread is completed when this - * method is done. - */ - virtual void run() = 0; - -}; - - - -/** - * A simple wrapper of native threads in a portable class. - * It can be used either to execute its own run() method, or - * delegate to a Runnable class's run() method. - */ -class Thread -{ -public: - - /** - * Create a thread which will execute its own run() method. - */ - Thread() - { runnable = (Runnable *)0 ; started = false; } - - /** - * Create a thread which will run a Runnable class's run() method. - */ - Thread(const Runnable &runner) - { runnable = (Runnable *)&runner; started = false; } - - /** - * This does not kill a spawned thread. - */ - virtual ~Thread() - {} - - /** - * Static method to pause the current thread for a given - * number of milliseconds. - */ - static void sleep(unsigned long millis); - - /** - * This method will be executed if the Thread was created with - * no delegated Runnable class. The thread is completed when - * the method is done. - */ - virtual void run() - {} - - /** - * Starts the thread. - */ - virtual void start(); - - /** - * Calls either this class's run() method, or that of a Runnable. - * A user would normally not call this directly. - */ - virtual void execute() - { - started = true; - if (runnable) - runnable->run(); - else - run(); - } - -private: - - Runnable *runnable; - - bool started; - -}; - - -} //namespace util -} //namespace dom -} //namespace w3c -} //namespace org - - - -#endif /* __DOM_THREAD_H__ */ -//######################################################################### -//# E N D O F F I L E -//######################################################################### - - +#ifndef __DOM_THREAD_H__ +#define __DOM_THREAD_H__ +/** + * Phoebe DOM Implementation. + * + * This is a C++ approximation of the W3C DOM model, which follows + * fairly closely the specifications in the various .idl files, copies of + * which are provided for reference. Most important is this one: + * + * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2006 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * Thread wrapper. This provides a platform-independent thread + * class for IO and testing. + * + */ + + +namespace org +{ +namespace w3c +{ +namespace dom +{ +namespace util +{ + + +/** + * This is the interface for a delegate class which can + * be run by a Thread. + * Thread thread(runnable); + * thread.start(); + */ +class Runnable +{ +public: + + Runnable() + {} + virtual ~Runnable() + {} + + /** + * The method of a delegate class which can + * be run by a Thread. Thread is completed when this + * method is done. + */ + virtual void run() = 0; + +}; + + + +/** + * A simple wrapper of native threads in a portable class. + * It can be used either to execute its own run() method, or + * delegate to a Runnable class's run() method. + */ +class Thread +{ +public: + + /** + * Create a thread which will execute its own run() method. + */ + Thread() + { runnable = (Runnable *)0 ; started = false; } + + /** + * Create a thread which will run a Runnable class's run() method. + */ + Thread(const Runnable &runner) + { runnable = (Runnable *)&runner; started = false; } + + /** + * This does not kill a spawned thread. + */ + virtual ~Thread() + {} + + /** + * Static method to pause the current thread for a given + * number of milliseconds. + */ + static void sleep(unsigned long millis); + + /** + * This method will be executed if the Thread was created with + * no delegated Runnable class. The thread is completed when + * the method is done. + */ + virtual void run() + {} + + /** + * Starts the thread. + */ + virtual void start(); + + /** + * Calls either this class's run() method, or that of a Runnable. + * A user would normally not call this directly. + */ + virtual void execute() + { + started = true; + if (runnable) + runnable->run(); + else + run(); + } + +private: + + Runnable *runnable; + + bool started; + +}; + + +} //namespace util +} //namespace dom +} //namespace w3c +} //namespace org + + + +#endif /* __DOM_THREAD_H__ */ +//######################################################################### +//# E N D O F F I L E +//######################################################################### + + diff --git a/src/dom/util/ziptool.cpp b/src/dom/util/ziptool.cpp index 99df889d9..7dbd07be5 100644 --- a/src/dom/util/ziptool.cpp +++ b/src/dom/util/ziptool.cpp @@ -1,2984 +1,2984 @@ -/** - * This is intended to be a standalone, reduced capability - * implementation of Gzip and Zip functionality. Its - * targeted use case is for archiving and retrieving single files - * which use these encoding types. Being memory based and - * non-optimized, it is not useful in cases where very large - * archives are needed or where high performance is desired. - * However, it should hopefully work very well for smaller, - * one-at-a-time tasks. What you get in return is the ability - * to drop these files into your project and remove the dependencies - * on ZLib and Info-Zip. Enjoy. - * - * Authors: - * Bob Jamison - * - * Copyright (C) 2006 Bob Jamison - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -#include -#include -#include - -#include - -#include "ziptool.h" - - - - - - -//######################################################################## -//# A D L E R 3 2 -//######################################################################## - -/** - * Constructor - */ -Adler32::Adler32() -{ - reset(); -} - -/** - * Destructor - */ -Adler32::~Adler32() -{ -} - -/** - * Reset Adler-32 checksum to initial value. - */ -void Adler32::reset() -{ - value = 1; -} - -// ADLER32_BASE is the largest prime number smaller than 65536 -#define ADLER32_BASE 65521 - -void Adler32::update(unsigned char b) -{ - unsigned long s1 = value & 0xffff; - unsigned long s2 = (value >> 16) & 0xffff; - s1 += b & 0xff; - s2 += s1; - value = ((s2 % ADLER32_BASE) << 16) | (s1 % ADLER32_BASE); -} - -void Adler32::update(char *str) -{ - if (str) - while (*str) - update((unsigned char)*str++); -} - - -/** - * Returns current checksum value. - */ -unsigned long Adler32::getValue() -{ - return value & 0xffffffffL; -} - - - -//######################################################################## -//# C R C 3 2 -//######################################################################## - -/** - * Constructor - */ -Crc32::Crc32() -{ - reset(); -} - -/** - * Destructor - */ -Crc32::~Crc32() -{ -} - -static bool crc_table_ready = false; -static unsigned long crc_table[256]; - -/** - * make the table for a fast CRC. - */ -void makeCrcTable() -{ - if (crc_table_ready) - return; - for (int n = 0; n < 256; n++) - { - unsigned long c = n; - for (int k = 8; --k >= 0; ) - { - if ((c & 1) != 0) - c = 0xedb88320 ^ (c >> 1); - else - c >>= 1; - } - crc_table[n] = c; - } - crc_table_ready = true; -} - - -/** - * Reset CRC-32 checksum to initial value. - */ -void Crc32::reset() -{ - value = 0; - makeCrcTable(); -} - -void Crc32::update(unsigned char b) -{ - unsigned long c = ~value; - c = crc_table[(c ^ b) & 0xff] ^ (c >> 8); - value = ~c; -} - - -void Crc32::update(char *str) -{ - if (str) - while (*str) - update((unsigned char)*str++); -} - -void Crc32::update(const std::vector &buf) -{ - std::vector::const_iterator iter; - for (iter=buf.begin() ; iter!=buf.end() ; iter++) - { - unsigned char ch = *iter; - update(ch); - } -} - - -/** - * Returns current checksum value. - */ -unsigned long Crc32::getValue() -{ - return value & 0xffffffffL; -} - -//######################################################################## -//# I N F L A T E R -//######################################################################## - - -/** - * - */ -typedef struct -{ - int *count; // number of symbols of each length - int *symbol; // canonically ordered symbols -} Huffman; - -/** - * - */ -class Inflater -{ -public: - - Inflater(); - - virtual ~Inflater(); - - static const int MAXBITS = 15; // max bits in a code - static const int MAXLCODES = 286; // max number of literal/length codes - static const int MAXDCODES = 30; // max number of distance codes - static const int MAXCODES = 316; // max codes lengths to read - static const int FIXLCODES = 288; // number of fixed literal/length codes - - /** - * - */ - bool inflate(std::vector &destination, - std::vector &source); - -private: - - /** - * - */ - void error(char *fmt, ...); - - /** - * - */ - void trace(char *fmt, ...); - - /** - * - */ - void dump(); - - /** - * - */ - int buildHuffman(Huffman *h, int *length, int n); - - /** - * - */ - bool getBits(int need, int *oval); - - /** - * - */ - int doDecode(Huffman *h); - - /** - * - */ - bool doCodes(Huffman *lencode, Huffman *distcode); - - /** - * - */ - bool doStored(); - - /** - * - */ - bool doFixed(); - - /** - * - */ - bool doDynamic(); - - - std::vectordest; - - std::vectorsrc; - unsigned long srcPos; //current read position - int bitBuf; - int bitCnt; - -}; - - -/** - * - */ -Inflater::Inflater() -{ -} - -/** - * - */ -Inflater::~Inflater() -{ -} - -/** - * - */ -void Inflater::error(char *fmt, ...) -{ - va_list args; - va_start(args, fmt); - fprintf(stdout, "Inflater error:"); - vfprintf(stdout, fmt, args); - fprintf(stdout, "\n"); - va_end(args); -} - -/** - * - */ -void Inflater::trace(char *fmt, ...) -{ - va_list args; - va_start(args, fmt); - fprintf(stdout, "Inflater:"); - vfprintf(stdout, fmt, args); - fprintf(stdout, "\n"); - va_end(args); -} - - -/** - * - */ -void Inflater::dump() -{ - for (unsigned int i=0 ; icount[len] = 0; - for (int symbol = 0; symbol < n; symbol++) - (h->count[length[symbol]])++; // assumes lengths are within bounds - if (h->count[0] == n) // no codes! - { - error("huffman tree will result in failed decode"); - return -1; - } - - // check for an over-subscribed or incomplete set of lengths - int left = 1; // number of possible codes left of current length - for (int len = 1; len <= MAXBITS; len++) - { - left <<= 1; // one more bit, double codes left - left -= h->count[len]; // deduct count from possible codes - if (left < 0) - { - error("huffman over subscribed"); - return -1; - } - } - - // generate offsets into symbol table for each length for sorting - int offs[MAXBITS+1]; //offsets in symbol table for each length - offs[1] = 0; - for (int len = 1; len < MAXBITS; len++) - offs[len + 1] = offs[len] + h->count[len]; - - /* - * put symbols in table sorted by length, by symbol order within each - * length - */ - for (int symbol = 0; symbol < n; symbol++) - if (length[symbol] != 0) - h->symbol[offs[length[symbol]]++] = symbol; - - // return zero for complete set, positive for incomplete set - return left; -} - - -/** - * - */ -bool Inflater::getBits(int requiredBits, int *oval) -{ - long val = bitBuf; - - //add more bytes if needed - while (bitCnt < requiredBits) - { - if (srcPos >= src.size()) - { - error("premature end of input"); - return false; - } - val |= ((long)(src[srcPos++])) << bitCnt; - bitCnt += 8; - } - - //update the buffer and return the data - bitBuf = (int)(val >> requiredBits); - bitCnt -= requiredBits; - *oval = (int)(val & ((1L << requiredBits) - 1)); - - return true; -} - - -/** - * - */ -int Inflater::doDecode(Huffman *h) -{ - int bitTmp = bitBuf; - int left = bitCnt; - int code = 0; - int first = 0; - int index = 0; - int len = 1; - int *next = h->count + 1; - while (true) - { - while (left--) - { - code |= bitTmp & 1; - bitTmp >>= 1; - int count = *next++; - if (code < first + count) - { /* if length len, return symbol */ - bitBuf = bitTmp; - bitCnt = (bitCnt - len) & 7; - return h->symbol[index + (code - first)]; - } - index += count; - first += count; - first <<= 1; - code <<= 1; - len++; - } - left = (MAXBITS+1) - len; - if (left == 0) - break; - if (srcPos >= src.size()) - { - error("premature end of input"); - dump(); - return -1; - } - bitTmp = src[srcPos++]; - if (left > 8) - left = 8; - } - - error("no end of block found"); - return -1; -} - -/** - * - */ -bool Inflater::doCodes(Huffman *lencode, Huffman *distcode) -{ - static const int lens[29] = { // Size base for length codes 257..285 - 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, - 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258}; - static const int lext[29] = { // Extra bits for length codes 257..285 - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, - 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0}; - static const int dists[30] = { // Offset base for distance codes 0..29 - 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, - 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, - 8193, 12289, 16385, 24577}; - static const int dext[30] = { // Extra bits for distance codes 0..29 - 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, - 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, - 12, 12, 13, 13}; - - //decode literals and length/distance pairs - while (true) - { - int symbol = doDecode(lencode); - if (symbol == 256) - break; - if (symbol < 0) - { - return false; - } - if (symbol < 256) //literal - { - dest.push_back(symbol); - } - else if (symbol > 256)//length - { - symbol -= 257; - if (symbol >= 29) - { - error("invalid fixed code"); - return false; - } - int ret; - if (!getBits(lext[symbol], &ret)) - return false; - int len = lens[symbol] + ret; - - symbol = doDecode(distcode);//distance - if (symbol < 0) - { - return false; - } - - if (!getBits(dext[symbol], &ret)) - return false; - unsigned int dist = dists[symbol] + ret; - if (dist > dest.size()) - { - error("distance too far back %d/%d", dist, dest.size()); - dump(); - //printf("pos:%d\n", srcPos); - return false; - } - - // copy length bytes from distance bytes back - //dest.push_back('{'); - while (len--) - { - dest.push_back(dest[dest.size() - dist]); - } - //dest.push_back('}'); - - } - } - - return true; -} - -/** - */ -bool Inflater::doStored() -{ - //trace("### stored ###"); - - // clear bits from current byte - bitBuf = 0; - bitCnt = 0; - - // length - if (srcPos + 4 > src.size()) - { - error("not enough input"); - return false; - } - - int len = src[srcPos++]; - len |= src[srcPos++] << 8; - //trace("### len:%d", len); - // check complement - if (src[srcPos++] != (~len & 0xff) || - src[srcPos++] != ((~len >> 8) & 0xff)) - { - error("twos complement for storage size do not match"); - return false; - } - - // copy data - if (srcPos + len > src.size()) - { - error("Not enough input for stored block"); - return false; - } - while (len--) - dest.push_back(src[srcPos++]); - - return true; -} - -/** - */ -bool Inflater::doFixed() -{ - //trace("### fixed ###"); - - static bool firstTime = true; - static int lencnt[MAXBITS+1], lensym[FIXLCODES]; - static int distcnt[MAXBITS+1], distsym[MAXDCODES]; - static Huffman lencode = {lencnt, lensym}; - static Huffman distcode = {distcnt, distsym}; - - if (firstTime) - { - firstTime = false; - - int lengths[FIXLCODES]; - - // literal/length table - int symbol = 0; - for ( ; symbol < 144; symbol++) - lengths[symbol] = 8; - for ( ; symbol < 256; symbol++) - lengths[symbol] = 9; - for ( ; symbol < 280; symbol++) - lengths[symbol] = 7; - for ( ; symbol < FIXLCODES; symbol++) - lengths[symbol] = 8; - buildHuffman(&lencode, lengths, FIXLCODES); - - // distance table - for (int symbol = 0; symbol < MAXDCODES; symbol++) - lengths[symbol] = 5; - buildHuffman(&distcode, lengths, MAXDCODES); - } - - // decode data until end-of-block code - bool ret = doCodes(&lencode, &distcode); - return ret; -} - -/** - */ -bool Inflater::doDynamic() -{ - //trace("### dynamic ###"); - int lengths[MAXCODES]; // descriptor code lengths - int lencnt[MAXBITS+1], lensym[MAXLCODES]; // lencode memory - int distcnt[MAXBITS+1], distsym[MAXDCODES]; // distcode memory - Huffman lencode = {lencnt, lensym}; // length code - Huffman distcode = {distcnt, distsym}; // distance code - static const int order[19] = // permutation of code length codes - {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; - - // get number of lengths in each table, check lengths - int ret; - if (!getBits(5, &ret)) - return false; - int nlen = ret + 257; - if (!getBits(5, &ret)) - return false; - int ndist = ret + 1; - if (!getBits(4, &ret)) - return false; - int ncode = ret + 4; - if (nlen > MAXLCODES || ndist > MAXDCODES) - { - error("Bad codes"); - return false; - } - - // get code length code lengths - int index = 0; - for ( ; index < ncode; index++) - { - if (!getBits(3, &ret)) - return false; - lengths[order[index]] = ret; - } - for ( ; index < 19; index++) - lengths[order[index]] = 0; - - // build huffman table for code lengths codes - if (buildHuffman(&lencode, lengths, 19) != 0) - return false; - - // read length/literal and distance code length tables - index = 0; - while (index < nlen + ndist) - { - int symbol = doDecode(&lencode); - if (symbol < 16) // length in 0..15 - lengths[index++] = symbol; - else - { // repeat instruction - int len = 0; // assume repeating zeros - if (symbol == 16) - { // repeat last length 3..6 times - if (index == 0) - { - error("no last length"); - return false; - } - len = lengths[index - 1];// last length - if (!getBits(2, &ret)) - return false; - symbol = 3 + ret; - } - else if (symbol == 17) // repeat zero 3..10 times - { - if (!getBits(3, &ret)) - return false; - symbol = 3 + ret; - } - else // == 18, repeat zero 11..138 times - { - if (!getBits(7, &ret)) - return false; - symbol = 11 + ret; - } - if (index + symbol > nlen + ndist) - { - error("too many lengths"); - return false; - } - while (symbol--) // repeat last or zero symbol times - lengths[index++] = len; - } - } - - // build huffman table for literal/length codes - int err = buildHuffman(&lencode, lengths, nlen); - if (err < 0 || (err > 0 && nlen - lencode.count[0] != 1)) - { - error("incomplete length codes"); - //return false; - } - // build huffman table for distance codes - err = buildHuffman(&distcode, lengths + nlen, ndist); - if (err < 0 || (err > 0 && nlen - lencode.count[0] != 1)) - { - error("incomplete dist codes"); - return false; - } - - // decode data until end-of-block code - bool retn = doCodes(&lencode, &distcode); - return retn; -} - -/** - */ -bool Inflater::inflate(std::vector &destination, - std::vector &source) -{ - dest.clear(); - src = source; - srcPos = 0; - bitBuf = 0; - bitCnt = 0; - - while (true) - { - int last; // one if last block - if (!getBits(1, &last)) - return false; - int type; // block type 0..3 - if (!getBits(2, &type)) - return false; - switch (type) - { - case 0: - if (!doStored()) - return false; - break; - case 1: - if (!doFixed()) - return false; - break; - case 2: - if (!doDynamic()) - return false; - break; - default: - error("Unknown block type %d", type); - return false; - } - if (last) - break; - } - - destination = dest; - - return true; -} - - - - - - -//######################################################################## -//# D E F L A T E R -//######################################################################## - - - -class Deflater -{ -public: - - /** - * - */ - Deflater(); - - /** - * - */ - virtual ~Deflater(); - - /** - * - */ - virtual void reset(); - - /** - * - */ - virtual bool update(int ch); - - /** - * - */ - virtual bool finish(); - - /** - * - */ - virtual std::vector &getCompressed(); - - /** - * - */ - bool deflate(std::vector &dest, - const std::vector &src); - - void encodeDistStatic(unsigned int len, unsigned int dist); - -private: - - //debug messages - void error(char *fmt, ...); - void trace(char *fmt, ...); - - bool compressWindow(); - - bool compress(); - - std::vector uncompressed; - - std::vector window; - - unsigned int windowPos; - - std::vector compressed; - - //#### Output - unsigned int outputBitBuf; - unsigned int outputNrBits; - - void put(int ch); - - void putWord(int ch); - - void putFlush(); - - void putBits(unsigned int ch, unsigned int bitsWanted); - - void putBitsR(unsigned int ch, unsigned int bitsWanted); - - //#### Huffman Encode - void encodeLiteralStatic(unsigned int ch); - - unsigned char windowBuf[32768]; - //assume 32-bit ints - unsigned int windowHashBuf[32768]; -}; - - -//######################################################################## -//# A P I -//######################################################################## - - -/** - * - */ -Deflater::Deflater() -{ - reset(); -} - -/** - * - */ -Deflater::~Deflater() -{ - -} - -/** - * - */ -void Deflater::reset() -{ - outputBitBuf = 0; - outputNrBits = 0; - window.clear(); - compressed.clear(); - uncompressed.clear(); -} - -/** - * - */ -bool Deflater::update(int ch) -{ - uncompressed.push_back((unsigned char)(ch & 0xff)); - return true; -} - -/** - * - */ -bool Deflater::finish() -{ - return compress(); -} - -/** - * - */ -std::vector &Deflater::getCompressed() -{ - return compressed; -} - - -/** - * - */ -bool Deflater::deflate(std::vector &dest, - const std::vector &src) -{ - reset(); - uncompressed = src; - if (!compress()) - return false; - dest = compressed; - return true; -} - - - - - - - -//######################################################################## -//# W O R K I N G C O D E -//######################################################################## - - -//############################# -//# M E S S A G E S -//############################# - -/** - * Print error messages - */ -void Deflater::error(char *fmt, ...) -{ - va_list args; - va_start(args, fmt); - fprintf(stdout, "Deflater error:"); - vfprintf(stdout, fmt, args); - fprintf(stdout, "\n"); - va_end(args); -} - -/** - * Print trace messages - */ -void Deflater::trace(char *fmt, ...) -{ - va_list args; - va_start(args, fmt); - fprintf(stdout, "Deflater:"); - vfprintf(stdout, fmt, args); - fprintf(stdout, "\n"); - va_end(args); -} - - - - -//############################# -//# O U T P U T -//############################# - -/** - * - */ -void Deflater::put(int ch) -{ - compressed.push_back(ch); - outputBitBuf = 0; - outputNrBits = 0; -} - -/** - * - */ -void Deflater::putWord(int ch) -{ - int lo = (ch ) & 0xff; - int hi = (ch>>8) & 0xff; - put(lo); - put(hi); -} - -/** - * - */ -void Deflater::putFlush() -{ - if (outputNrBits > 0) - { - put(outputBitBuf & 0xff); - } - outputBitBuf = 0; - outputNrBits = 0; -} - -/** - * - */ -void Deflater::putBits(unsigned int ch, unsigned int bitsWanted) -{ - //trace("n:%4u, %d\n", ch, bitsWanted); - - while (bitsWanted--) - { - //add bits to position 7. shift right - outputBitBuf = (outputBitBuf>>1) + (ch<<7 & 0x80); - ch >>= 1; - outputNrBits++; - if (outputNrBits >= 8) - { - unsigned char b = outputBitBuf & 0xff; - //printf("b:%02x\n", b); - put(b); - } - } -} - -static unsigned int bitReverse(unsigned int code, unsigned int nrBits) -{ - unsigned int outb = 0; - while (nrBits--) - { - outb = (outb << 1) | (code & 0x01); - code >>= 1; - } - return outb; -} - - -/** - * - */ -void Deflater::putBitsR(unsigned int ch, unsigned int bitsWanted) -{ - //trace("r:%4u, %d", ch, bitsWanted); - - unsigned int rcode = bitReverse(ch, bitsWanted); - - putBits(rcode, bitsWanted); - -} - - -//############################# -//# E N C O D E -//############################# - - - -void Deflater::encodeLiteralStatic(unsigned int ch) -{ - //trace("c: %d", ch); - - if (ch < 144) - { - putBitsR(ch + 0x0030 , 8); // 00110000 - } - else if (ch < 256) - { - putBitsR(ch - 144 + 0x0190 , 9); // 110010000 - } - else if (ch < 280) - { - putBitsR(ch - 256 + 0x0000 , 7); // 0000000 - } - else if (ch < 288) - { - putBitsR(ch - 280 + 0x00c0 , 8); // 11000000 - } - else //out of range - { - error("Literal out of range: %d", ch); - } - -} - - -typedef struct -{ - unsigned int base; - unsigned int range; - unsigned int bits; -} LenBase; - -LenBase lenBases[] = -{ - { 3, 1, 0 }, - { 4, 1, 0 }, - { 5, 1, 0 }, - { 6, 1, 0 }, - { 7, 1, 0 }, - { 8, 1, 0 }, - { 9, 1, 0 }, - { 10, 1, 0 }, - { 11, 2, 1 }, - { 13, 2, 1 }, - { 15, 2, 1 }, - { 17, 2, 1 }, - { 19, 4, 2 }, - { 23, 4, 2 }, - { 27, 4, 2 }, - { 31, 4, 2 }, - { 35, 8, 3 }, - { 43, 8, 3 }, - { 51, 8, 3 }, - { 59, 8, 3 }, - { 67, 16, 4 }, - { 83, 16, 4 }, - { 99, 16, 4 }, - { 115, 16, 4 }, - { 131, 32, 5 }, - { 163, 32, 5 }, - { 195, 32, 5 }, - { 227, 32, 5 }, - { 258, 1, 0 } -}; - -typedef struct -{ - unsigned int base; - unsigned int range; - unsigned int bits; -} DistBase; - -DistBase distBases[] = -{ - { 1, 1, 0 }, - { 2, 1, 0 }, - { 3, 1, 0 }, - { 4, 1, 0 }, - { 5, 2, 1 }, - { 7, 2, 1 }, - { 9, 4, 2 }, - { 13, 4, 2 }, - { 17, 8, 3 }, - { 25, 8, 3 }, - { 33, 16, 4 }, - { 49, 16, 4 }, - { 65, 32, 5 }, - { 97, 32, 5 }, - { 129, 64, 6 }, - { 193, 64, 6 }, - { 257, 128, 7 }, - { 385, 128, 7 }, - { 513, 256, 8 }, - { 769, 256, 8 }, - { 1025, 512, 9 }, - { 1537, 512, 9 }, - { 2049, 1024, 10 }, - { 3073, 1024, 10 }, - { 4097, 2048, 11 }, - { 6145, 2048, 11 }, - { 8193, 4096, 12 }, - { 12289, 4096, 12 }, - { 16385, 8192, 13 }, - { 24577, 8192, 13 } -}; - -void Deflater::encodeDistStatic(unsigned int len, unsigned int dist) -{ - - //## Output length - - if (len < 3 || len > 258) - { - error("Length out of range:%d", len); - return; - } - - bool found = false; - for (int i=0 ; i<30 ; i++) - { - unsigned int base = lenBases[i].base; - unsigned int range = lenBases[i].range; - if (base + range > len) - { - unsigned int lenCode = 257 + i; - unsigned int length = len - base; - //trace("--- %d %d %d %d", len, base, range, length); - encodeLiteralStatic(lenCode); - putBits(length, lenBases[i].bits); - found = true; - break; - } - } - if (!found) - { - error("Length not found in table:%d", len); - return; - } - - //## Output distance - - if (dist < 4 || dist > 32768) - { - error("Distance out of range:%d", dist); - return; - } - - found = false; - for (int i=0 ; i<30 ; i++) - { - unsigned int base = distBases[i].base; - unsigned int range = distBases[i].range; - if (base + range > dist) - { - unsigned int distCode = i; - unsigned int distance = dist - base; - //error("--- %d %d %d %d", dist, base, range, distance); - putBitsR(distCode, 5); - putBits(distance, distBases[i].bits); - found = true; - break; - } - } - if (!found) - { - error("Distance not found in table:%d", dist); - return; - } -} - - -//############################# -//# C O M P R E S S -//############################# - - -/** - * This method does the dirty work of dictionary - * compression. Basically it looks for redundant - * strings and has the current duplicate refer back - * to the previous one. - */ -bool Deflater::compressWindow() -{ - windowPos = 0; - unsigned int windowSize = window.size(); - //### Compress as much of the window as possible - - unsigned int hash = 0; - //Have each value be a long with the byte at this position, - //plus the 3 bytes after it in the window - for (int i=windowSize-1 ; i>=0 ; i--) - { - unsigned char ch = window[i]; - windowBuf[i] = ch; - hash = ((hash<<8) & 0xffffff00) | ch; - windowHashBuf[i] = hash; - } - - while (windowPos < windowSize - 3) - { - //### Find best match, if any - unsigned int bestMatchLen = 0; - unsigned int bestMatchDist = 0; - if (windowPos >= 4) - { - for (unsigned int lookBack=0 ; lookBack= windowPos -4 ) - lookAheadMax = windowPos - 4 - lookBack; - if (lookAheadMax > 258) - lookAheadMax = 258; - unsigned char *wp = &(windowBuf[windowPos+4]); - unsigned char *lb = &(windowBuf[lookBack+4]); - while (lookAhead bestMatchLen) - { - bestMatchLen = lookAhead; - bestMatchDist = windowPos - lookBack; - } - } - } - } - if (bestMatchLen > 3) - { - //Distance encode - //trace("### distance"); - /* - printf("### 1 '"); - for (int i=0 ; i < bestMatchLen ; i++) - fputc(window[windowPos+i], stdout); - printf("'\n### 2 '"); - for (int i=0 ; i < bestMatchLen ; i++) - fputc(window[windowPos-bestMatchDist+i], stdout); - printf("'\n"); - */ - encodeDistStatic(bestMatchLen, bestMatchDist); - windowPos += bestMatchLen; - } - else - { - //Literal encode - //trace("### literal"); - encodeLiteralStatic(windowBuf[windowPos]); - windowPos++; - } - } - - while (windowPos < windowSize) - encodeLiteralStatic(windowBuf[windowPos++]); - - encodeLiteralStatic(256); - return true; -} - - -/** - * - */ -bool Deflater::compress() -{ - //trace("compress"); - unsigned long total = 0L; - windowPos = 0; - std::vector::iterator iter; - for (iter = uncompressed.begin(); iter != uncompressed.end() ; ) - { - total += windowPos; - trace("total:%ld", total); - if (windowPos > window.size()) - windowPos = window.size(); - window.erase(window.begin() , window.begin()+windowPos); - while (window.size() < 32768 && iter != uncompressed.end()) - { - window.push_back(*iter); - iter++; - } - if (window.size() >= 32768) - putBits(0x00, 1); //0 -- more blocks - else - putBits(0x01, 1); //1 -- last block - putBits(0x01, 2); //01 -- static trees - if (!compressWindow()) - return false; - } - putFlush(); - return true; -} - - - - - -//######################################################################## -//# G Z I P F I L E -//######################################################################## - -/** - * Constructor - */ -GzipFile::GzipFile() -{ -} - -/** - * Destructor - */ -GzipFile::~GzipFile() -{ -} - -/** - * Print error messages - */ -void GzipFile::error(char *fmt, ...) -{ - va_list args; - va_start(args, fmt); - fprintf(stdout, "GzipFile error:"); - vfprintf(stdout, fmt, args); - fprintf(stdout, "\n"); - va_end(args); -} - -/** - * Print trace messages - */ -void GzipFile::trace(char *fmt, ...) -{ - va_list args; - va_start(args, fmt); - fprintf(stdout, "GzipFile:"); - vfprintf(stdout, fmt, args); - fprintf(stdout, "\n"); - va_end(args); -} - -/** - * - */ -void GzipFile::put(unsigned char ch) -{ - data.push_back(ch); -} - -/** - * - */ -void GzipFile::setData(const std::vector &str) -{ - data = str; -} - -/** - * - */ -void GzipFile::clearData() -{ - data.clear(); -} - -/** - * - */ -std::vector &GzipFile::getData() -{ - return data; -} - -/** - * - */ -std::string &GzipFile::getFileName() -{ - return fileName; -} - -/** - * - */ -void GzipFile::setFileName(const std::string &val) -{ - fileName = val; -} - - - -//##################################### -//# U T I L I T Y -//##################################### - -/** - * Loads a new file into an existing GzipFile - */ -bool GzipFile::loadFile(const std::string &fName) -{ - FILE *f = fopen(fName.c_str() , "rb"); - if (!f) - { - error("Cannot open file %s", fName.c_str()); - return false; - } - while (true) - { - int ch = fgetc(f); - if (ch < 0) - break; - data.push_back(ch); - } - fclose(f); - setFileName(fName); - return true; -} - - - -//##################################### -//# W R I T E -//##################################### - -/** - * - */ -bool GzipFile::putByte(unsigned char ch) -{ - fileBuf.push_back(ch); - return true; -} - - - -/** - * - */ -bool GzipFile::putLong(unsigned long val) -{ - fileBuf.push_back( (unsigned char)((val ) & 0xff)); - fileBuf.push_back( (unsigned char)((val>> 8) & 0xff)); - fileBuf.push_back( (unsigned char)((val>>16) & 0xff)); - fileBuf.push_back( (unsigned char)((val>>24) & 0xff)); - return true; -} - - - -/** - * - */ -bool GzipFile::write() -{ - fileBuf.clear(); - - putByte(0x1f); //magic - putByte(0x8b); //magic - putByte( 8); //compression method - putByte(0x08); //flags. say we have a crc and file name - - unsigned long ltime = (unsigned long) time(NULL); - putLong(ltime); - - //xfl - putByte(0); - //OS - putByte(0); - - //file name - for (unsigned int i=0 ; i compBuf; - Deflater deflater; - if (!deflater.deflate(compBuf, data)) - { - return false; - } - - std::vector::iterator iter; - for (iter=compBuf.begin() ; iter!=compBuf.end() ; iter++) - { - unsigned char ch = *iter; - putByte(ch); - } - - Crc32 crcEngine; - crcEngine.update(data); - unsigned long crc = crcEngine.getValue(); - putLong(crc); - - putLong(data.size()); - - return true; -} - - -/** - * - */ -bool GzipFile::writeBuffer(std::vector &outBuf) -{ - if (!write()) - return false; - outBuf.clear(); - outBuf = fileBuf; - return true; -} - - -/** - * - */ -bool GzipFile::writeFile(const std::string &fileName) -{ - if (!write()) - return false; - FILE *f = fopen(fileName.c_str(), "wb"); - if (!f) - return false; - std::vector::iterator iter; - for (iter=fileBuf.begin() ; iter!=fileBuf.end() ; iter++) - { - unsigned char ch = *iter; - fputc(ch, f); - } - fclose(f); - return true; -} - - -//##################################### -//# R E A D -//##################################### - -bool GzipFile::getByte(unsigned char *ch) -{ - if (fileBufPos >= fileBuf.size()) - { - error("unexpected end of data"); - return false; - } - *ch = fileBuf[fileBufPos++]; - return true; -} - -/** - * - */ -bool GzipFile::getLong(unsigned long *val) -{ - if (fileBuf.size() - fileBufPos < 4) - return false; - int ch1 = fileBuf[fileBufPos++]; - int ch2 = fileBuf[fileBufPos++]; - int ch3 = fileBuf[fileBufPos++]; - int ch4 = fileBuf[fileBufPos++]; - *val = ((ch4<<24) & 0xff000000L) | - ((ch3<<16) & 0x00ff0000L) | - ((ch2<< 8) & 0x0000ff00L) | - ((ch1 ) & 0x000000ffL); - return true; -} - -bool GzipFile::read() -{ - fileBufPos = 0; - - unsigned char ch; - - //magic cookie - if (!getByte(&ch)) - return false; - if (ch != 0x1f) - { - error("bad gzip header"); - return false; - } - if (!getByte(&ch)) - return false; - if (ch != 0x8b) - { - error("bad gzip header"); - return false; - } - - //## compression method - if (!getByte(&ch)) - return false; - compressionMethod = ch & 0xff; - - //## flags - if (!getByte(&ch)) - return false; - //bool ftext = ch & 0x01; - bool fhcrc = ch & 0x02; - bool fextra = ch & 0x04; - bool fname = ch & 0x08; - bool fcomment = ch & 0x10; - - //trace("cm:%d ftext:%d fhcrc:%d fextra:%d fname:%d fcomment:%d", - // cm, ftext, fhcrc, fextra, fname, fcomment); - - //## file time - unsigned long ltime; - if (!getLong(<ime)) - return false; - //time_t mtime = (time_t)ltime; - - //## XFL - if (!getByte(&ch)) - return false; - //int xfl = ch; - - //## OS - if (!getByte(&ch)) - return false; - //int os = ch; - - //std::string timestr = ctime(&mtime); - //trace("xfl:%d os:%d mtime:%s", xfl, os, timestr.c_str()); - - if (fextra) - { - if (!getByte(&ch)) - return false; - long xlen = ch; - if (!getByte(&ch)) - return false; - xlen = (xlen << 8) + ch; - for (long l=0 ; l compBuf; - while (fileBufPos < fileBuf.size() - 8) - { - if (!getByte(&ch)) - return false; - compBuf.push_back(ch); - } - //uncompress - data.clear(); - Inflater inflater; - if (!inflater.inflate(data, compBuf)) - { - return false; - } - - //Get the CRC and compare - Crc32 crcEngine; - crcEngine.update(data); - unsigned long calcCrc = crcEngine.getValue(); - unsigned long givenCrc; - if (!getLong(&givenCrc)) - return false; - if (givenCrc != calcCrc) - { - error("Specified crc, %ud, not what received: %ud", - givenCrc, calcCrc); - return false; - } - - //Get the file size and compare - unsigned long givenFileSize; - if (!getLong(&givenFileSize)) - return false; - if (givenFileSize != data.size()) - { - error("Specified data size, %ld, not what received: %ld", - givenFileSize, data.size()); - return false; - } - - return true; -} - - - -/** - * - */ -bool GzipFile::readBuffer(const std::vector &inbuf) -{ - fileBuf = inbuf; - if (!read()) - return false; - return true; -} - - -/** - * - */ -bool GzipFile::readFile(const std::string &fileName) -{ - fileBuf.clear(); - FILE *f = fopen(fileName.c_str(), "rb"); - if (!f) - return false; - while (true) - { - int ch = fgetc(f); - if (ch < 0) - break; - fileBuf.push_back(ch); - } - fclose(f); - if (!read()) - return false; - return true; -} - - - - - - - - -//######################################################################## -//# Z I P F I L E -//######################################################################## - -/** - * Constructor - */ -ZipEntry::ZipEntry() -{ - crc = 0L; - compressionMethod = 8; -} - -/** - * - */ -ZipEntry::ZipEntry(const std::string &fileNameArg, - const std::string &commentArg) -{ - crc = 0L; - compressionMethod = 8; - fileName = fileNameArg; - comment = commentArg; -} - -/** - * Destructor - */ -ZipEntry::~ZipEntry() -{ -} - - -/** - * - */ -std::string ZipEntry::getFileName() -{ - return fileName; -} - -/** - * - */ -void ZipEntry::setFileName(const std::string &val) -{ - fileName = val; -} - -/** - * - */ -std::string ZipEntry::getComment() -{ - return comment; -} - -/** - * - */ -void ZipEntry::setComment(const std::string &val) -{ - comment = val; -} - -/** - * - */ -unsigned long ZipEntry::getCompressedSize() -{ - return (unsigned long)compressedData.size(); -} - -/** - * - */ -int ZipEntry::getCompressionMethod() -{ - return compressionMethod; -} - -/** - * - */ -void ZipEntry::setCompressionMethod(int val) -{ - compressionMethod = val; -} - -/** - * - */ -std::vector &ZipEntry::getCompressedData() -{ - return compressedData; -} - -/** - * - */ -void ZipEntry::setCompressedData(const std::vector &val) -{ - compressedData = val; -} - -/** - * - */ -unsigned long ZipEntry::getUncompressedSize() -{ - return (unsigned long)uncompressedData.size(); -} - -/** - * - */ -std::vector &ZipEntry::getUncompressedData() -{ - return uncompressedData; -} - -/** - * - */ -void ZipEntry::setUncompressedData(const std::vector &val) -{ - uncompressedData = val; -} - -/** - * - */ -unsigned long ZipEntry::getCrc() -{ - return crc; -} - -/** - * - */ -void ZipEntry::setCrc(unsigned long val) -{ - crc = val; -} - -/** - * - */ -void ZipEntry::write(unsigned char ch) -{ - uncompressedData.push_back(ch); -} - -/** - * - */ -void ZipEntry::finish() -{ - Crc32 c32; - std::vector::iterator iter; - for (iter = uncompressedData.begin() ; - iter!= uncompressedData.end() ; iter++) - { - unsigned char ch = *iter; - c32.update(ch); - } - crc = c32.getValue(); - switch (compressionMethod) - { - case 0: //none - { - for (iter = uncompressedData.begin() ; - iter!= uncompressedData.end() ; iter++) - { - unsigned char ch = *iter; - compressedData.push_back(ch); - } - break; - } - case 8: //deflate - { - Deflater deflater; - if (!deflater.deflate(compressedData, uncompressedData)) - { - //some error - } - break; - } - default: - { - printf("error: unknown compression method %d\n", - compressionMethod); - } - } -} - - - - -/** - * - */ -bool ZipEntry::readFile(const std::string &fileNameArg, - const std::string &commentArg) -{ - crc = 0L; - uncompressedData.clear(); - fileName = fileNameArg; - comment = commentArg; - FILE *f = fopen(fileName.c_str(), "rb"); - if (!f) - { - return false; - } - while (true) - { - int ch = fgetc(f); - if (ch < 0) - break; - uncompressedData.push_back((unsigned char)ch); - } - fclose(f); - finish(); - return true; -} - - -/** - * - */ -void ZipEntry::setPosition(unsigned long val) -{ - position = val; -} - -/** - * - */ -unsigned long ZipEntry::getPosition() -{ - return position; -} - - - - - - - -/** - * Constructor - */ -ZipFile::ZipFile() -{ - -} - -/** - * Destructor - */ -ZipFile::~ZipFile() -{ - std::vector::iterator iter; - for (iter=entries.begin() ; iter!=entries.end() ; iter++) - { - ZipEntry *entry = *iter; - delete entry; - } - entries.clear(); -} - -/** - * - */ -void ZipFile::setComment(const std::string &val) -{ - comment = val; -} - -/** - * - */ -std::string ZipFile::getComment() -{ - return comment; -} - - -/** - * - */ -std::vector &ZipFile::getEntries() -{ - return entries; -} - - - -//##################################### -//# M E S S A G E S -//##################################### - -void ZipFile::error(char *fmt, ...) -{ - va_list args; - va_start(args, fmt); - fprintf(stdout, "ZipFile error:"); - vfprintf(stdout, fmt, args); - fprintf(stdout, "\n"); - va_end(args); -} - -void ZipFile::trace(char *fmt, ...) -{ - va_list args; - va_start(args, fmt); - fprintf(stdout, "ZipFile:"); - vfprintf(stdout, fmt, args); - fprintf(stdout, "\n"); - va_end(args); -} - -//##################################### -//# U T I L I T Y -//##################################### - -/** - * - */ -ZipEntry *ZipFile::addFile(const std::string &fileName, - const std::string &comment) -{ - ZipEntry *ze = new ZipEntry(); - if (!ze->readFile(fileName, comment)) - { - return NULL; - } - entries.push_back(ze); - return ze; -} - - -/** - * - */ -ZipEntry *ZipFile::newEntry(const std::string &fileName, - const std::string &comment) -{ - ZipEntry *ze = new ZipEntry(fileName, comment); - entries.push_back(ze); - return ze; -} - - -//##################################### -//# W R I T E -//##################################### - -/** - * - */ -bool ZipFile::putLong(unsigned long val) -{ - fileBuf.push_back( ((int)(val )) & 0xff); - fileBuf.push_back( ((int)(val>> 8)) & 0xff); - fileBuf.push_back( ((int)(val>>16)) & 0xff); - fileBuf.push_back( ((int)(val>>24)) & 0xff); - return true; -} - - -/** - * - */ -bool ZipFile::putInt(unsigned int val) -{ - fileBuf.push_back( (val ) & 0xff); - fileBuf.push_back( (val>> 8) & 0xff); - return true; -} - -/** - * - */ -bool ZipFile::putByte(unsigned char val) -{ - fileBuf.push_back(val); - return true; -} - -/** - * - */ -bool ZipFile::writeFileData() -{ - std::vector::iterator iter; - for (iter = entries.begin() ; iter != entries.end() ; iter++) - { - ZipEntry *entry = *iter; - entry->setPosition(fileBuf.size()); - //##### HEADER - std::string fname = entry->getFileName(); - putLong(0x04034b50L); - putInt(20); //versionNeeded - putInt(0); //gpBitFlag - //putInt(0); //compression method - putInt(entry->getCompressionMethod()); //compression method - putInt(0); //mod time - putInt(0); //mod date - putLong(entry->getCrc()); //crc32 - putLong(entry->getCompressedSize()); - putLong(entry->getUncompressedSize()); - putInt(fname.size());//fileName length - putInt(8);//extra field length - //file name - for (unsigned int i=0 ; i &buf = entry->getCompressedData(); - std::vector::iterator iter; - for (iter = buf.begin() ; iter != buf.end() ; iter++) - { - unsigned char ch = (unsigned char) *iter; - putByte(ch); - } - } - return true; -} - -/** - * - */ -bool ZipFile::writeCentralDirectory() -{ - unsigned long cdPosition = fileBuf.size(); - std::vector::iterator iter; - for (iter = entries.begin() ; iter != entries.end() ; iter++) - { - ZipEntry *entry = *iter; - std::string fname = entry->getFileName(); - std::string ecomment = entry->getComment(); - putLong(0x02014b50L); //magic cookie - putInt(2386); //versionMadeBy - putInt(20); //versionNeeded - putInt(0); //gpBitFlag - putInt(entry->getCompressionMethod()); //compression method - putInt(0); //mod time - putInt(0); //mod date - putLong(entry->getCrc()); //crc32 - putLong(entry->getCompressedSize()); - putLong(entry->getUncompressedSize()); - putInt(fname.size());//fileName length - putInt(4);//extra field length - putInt(ecomment.size());//comment length - putInt(0); //disk number start - putInt(0); //internal attributes - putLong(0); //external attributes - putLong(entry->getPosition()); - - //file name - for (unsigned int i=0 ; i &outBuf) -{ - if (!write()) - return false; - outBuf.clear(); - outBuf = fileBuf; - return true; -} - - -/** - * - */ -bool ZipFile::writeFile(const std::string &fileName) -{ - if (!write()) - return false; - FILE *f = fopen(fileName.c_str(), "wb"); - if (!f) - return false; - std::vector::iterator iter; - for (iter=fileBuf.begin() ; iter!=fileBuf.end() ; iter++) - { - unsigned char ch = *iter; - fputc(ch, f); - } - fclose(f); - return true; -} - -//##################################### -//# R E A D -//##################################### - -/** - * - */ -bool ZipFile::getLong(unsigned long *val) -{ - if (fileBuf.size() - fileBufPos < 4) - return false; - int ch1 = fileBuf[fileBufPos++]; - int ch2 = fileBuf[fileBufPos++]; - int ch3 = fileBuf[fileBufPos++]; - int ch4 = fileBuf[fileBufPos++]; - *val = ((ch4<<24) & 0xff000000L) | - ((ch3<<16) & 0x00ff0000L) | - ((ch2<< 8) & 0x0000ff00L) | - ((ch1 ) & 0x000000ffL); - return true; -} - -/** - * - */ -bool ZipFile::getInt(unsigned int *val) -{ - if (fileBuf.size() - fileBufPos < 2) - return false; - int ch1 = fileBuf[fileBufPos++]; - int ch2 = fileBuf[fileBufPos++]; - *val = ((ch2<< 8) & 0xff00) | - ((ch1 ) & 0x00ff); - return true; -} - - -/** - * - */ -bool ZipFile::getByte(unsigned char *val) -{ - if (fileBuf.size() <= fileBufPos) - return false; - *val = fileBuf[fileBufPos++]; - return true; -} - - -/** - * - */ -bool ZipFile::readFileData() -{ - //printf("#################################################\n"); - //printf("###D A T A\n"); - //printf("#################################################\n"); - while (true) - { - unsigned long magicCookie; - if (!getLong(&magicCookie)) - { - error("magic cookie not found"); - break; - } - trace("###Cookie:%lx", magicCookie); - if (magicCookie == 0x02014b50L) //central directory - break; - if (magicCookie != 0x04034b50L) - { - error("file header not found"); - return false; - } - unsigned int versionNeeded; - if (!getInt(&versionNeeded)) - { - error("bad version needed found"); - return false; - } - unsigned int gpBitFlag; - if (!getInt(&gpBitFlag)) - { - error("bad bit flag found"); - return false; - } - unsigned int compressionMethod; - if (!getInt(&compressionMethod)) - { - error("bad compressionMethod found"); - return false; - } - unsigned int modTime; - if (!getInt(&modTime)) - { - error("bad modTime found"); - return false; - } - unsigned int modDate; - if (!getInt(&modDate)) - { - error("bad modDate found"); - return false; - } - unsigned long crc32; - if (!getLong(&crc32)) - { - error("bad crc32 found"); - return false; - } - unsigned long compressedSize; - if (!getLong(&compressedSize)) - { - error("bad compressedSize found"); - return false; - } - unsigned long uncompressedSize; - if (!getLong(&uncompressedSize)) - { - error("bad uncompressedSize found"); - return false; - } - unsigned int fileNameLength; - if (!getInt(&fileNameLength)) - { - error("bad fileNameLength found"); - return false; - } - unsigned int extraFieldLength; - if (!getInt(&extraFieldLength)) - { - error("bad extraFieldLength found"); - return false; - } - std::string fileName; - for (unsigned int i=0 ; i compBuf; - if (gpBitFlag & 0x8)//bit 3 was set. means we dont know compressed size - { - unsigned char c1, c2, c3, c4; - c1 = c2 = c3 = c4 = 0; - while (true) - { - unsigned char ch; - if (!getByte(&ch)) - { - error("premature end of data"); - break; - } - compBuf.push_back(ch); - c1 = c2; c2 = c3; c3 = c4; c4 = ch; - if (c1 == 0x50 && c2 == 0x4b && c3 == 0x07 && c4 == 0x08) - { - trace("found end of compressed data"); - //remove the cookie - compBuf.erase(compBuf.end() -4, compBuf.end()); - break; - } - } - } - else - { - for (unsigned long bnr = 0 ; bnr < compressedSize ; bnr++) - { - unsigned char ch; - if (!getByte(&ch)) - { - error("premature end of data"); - break; - } - compBuf.push_back(ch); - } - } - - printf("### data: "); - for (int i=0 ; i<10 ; i++) - printf("%02x ", compBuf[i] & 0xff); - printf("\n"); - - if (gpBitFlag & 0x8)//only if bit 3 set - { - /* this cookie was read in the loop above - unsigned long dataDescriptorSignature ; - if (!getLong(&dataDescriptorSignature)) - break; - if (dataDescriptorSignature != 0x08074b50L) - { - error("bad dataDescriptorSignature found"); - return false; - } - */ - unsigned long crc32; - if (!getLong(&crc32)) - { - error("bad crc32 found"); - return false; - } - unsigned long compressedSize; - if (!getLong(&compressedSize)) - { - error("bad compressedSize found"); - return false; - } - unsigned long uncompressedSize; - if (!getLong(&uncompressedSize)) - { - error("bad uncompressedSize found"); - return false; - } - }//bit 3 was set - //break; - - std::vector uncompBuf; - switch (compressionMethod) - { - case 8: //deflate - { - Inflater inflater; - if (!inflater.inflate(uncompBuf, compBuf)) - { - return false; - } - break; - } - default: - { - error("Unimplemented compression method %d", compressionMethod); - return false; - } - } - - if (uncompressedSize != uncompBuf.size()) - { - error("Size mismatch. Expected %ld, received %ld", - uncompressedSize, uncompBuf.size()); - return false; - } - - Crc32 crcEngine; - crcEngine.update(uncompBuf); - unsigned long crc = crcEngine.getValue(); - if (crc != crc32) - { - error("Crc mismatch. Calculated %08ux, received %08ux", crc, crc32); - return false; - } - - ZipEntry *ze = new ZipEntry(fileName, comment); - ze->setCompressionMethod(compressionMethod); - ze->setCompressedData(compBuf); - ze->setUncompressedData(uncompBuf); - ze->setCrc(crc); - entries.push_back(ze); - - - } - return true; -} - - -/** - * - */ -bool ZipFile::readCentralDirectory() -{ - //printf("#################################################\n"); - //printf("###D I R E C T O R Y\n"); - //printf("#################################################\n"); - while (true) - { - //We start with a central directory cookie already - //Check at the bottom of the loop. - unsigned int version; - if (!getInt(&version)) - { - error("bad version found"); - return false; - } - unsigned int versionNeeded; - if (!getInt(&versionNeeded)) - { - error("bad version found"); - return false; - } - unsigned int gpBitFlag; - if (!getInt(&gpBitFlag)) - { - error("bad bit flag found"); - return false; - } - unsigned int compressionMethod; - if (!getInt(&compressionMethod)) - { - error("bad compressionMethod found"); - return false; - } - unsigned int modTime; - if (!getInt(&modTime)) - { - error("bad modTime found"); - return false; - } - unsigned int modDate; - if (!getInt(&modDate)) - { - error("bad modDate found"); - return false; - } - unsigned long crc32; - if (!getLong(&crc32)) - { - error("bad crc32 found"); - return false; - } - unsigned long compressedSize; - if (!getLong(&compressedSize)) - { - error("bad compressedSize found"); - return false; - } - unsigned long uncompressedSize; - if (!getLong(&uncompressedSize)) - { - error("bad uncompressedSize found"); - return false; - } - unsigned int fileNameLength; - if (!getInt(&fileNameLength)) - { - error("bad fileNameLength found"); - return false; - } - unsigned int extraFieldLength; - if (!getInt(&extraFieldLength)) - { - error("bad extraFieldLength found"); - return false; - } - unsigned int fileCommentLength; - if (!getInt(&fileCommentLength)) - { - error("bad fileCommentLength found"); - return false; - } - unsigned int diskNumberStart; - if (!getInt(&diskNumberStart)) - { - error("bad diskNumberStart found"); - return false; - } - unsigned int internalFileAttributes; - if (!getInt(&internalFileAttributes)) - { - error("bad internalFileAttributes found"); - return false; - } - unsigned long externalFileAttributes; - if (!getLong(&externalFileAttributes)) - { - error("bad externalFileAttributes found"); - return false; - } - unsigned long localHeaderOffset; - if (!getLong(&localHeaderOffset)) - { - error("bad localHeaderOffset found"); - return false; - } - std::string fileName; - for (unsigned int i=0 ; i &inbuf) -{ - fileBuf = inbuf; - if (!read()) - return false; - return true; -} - - -/** - * - */ -bool ZipFile::readFile(const std::string &fileName) -{ - fileBuf.clear(); - FILE *f = fopen(fileName.c_str(), "rb"); - if (!f) - return false; - while (true) - { - int ch = fgetc(f); - if (ch < 0) - break; - fileBuf.push_back(ch); - } - fclose(f); - if (!read()) - return false; - return true; -} - - - - - - - - - -//######################################################################## -//# E N D O F F I L E -//######################################################################## - - +/** + * This is intended to be a standalone, reduced capability + * implementation of Gzip and Zip functionality. Its + * targeted use case is for archiving and retrieving single files + * which use these encoding types. Being memory based and + * non-optimized, it is not useful in cases where very large + * archives are needed or where high performance is desired. + * However, it should hopefully work very well for smaller, + * one-at-a-time tasks. What you get in return is the ability + * to drop these files into your project and remove the dependencies + * on ZLib and Info-Zip. Enjoy. + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2006 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +#include +#include +#include + +#include + +#include "ziptool.h" + + + + + + +//######################################################################## +//# A D L E R 3 2 +//######################################################################## + +/** + * Constructor + */ +Adler32::Adler32() +{ + reset(); +} + +/** + * Destructor + */ +Adler32::~Adler32() +{ +} + +/** + * Reset Adler-32 checksum to initial value. + */ +void Adler32::reset() +{ + value = 1; +} + +// ADLER32_BASE is the largest prime number smaller than 65536 +#define ADLER32_BASE 65521 + +void Adler32::update(unsigned char b) +{ + unsigned long s1 = value & 0xffff; + unsigned long s2 = (value >> 16) & 0xffff; + s1 += b & 0xff; + s2 += s1; + value = ((s2 % ADLER32_BASE) << 16) | (s1 % ADLER32_BASE); +} + +void Adler32::update(char *str) +{ + if (str) + while (*str) + update((unsigned char)*str++); +} + + +/** + * Returns current checksum value. + */ +unsigned long Adler32::getValue() +{ + return value & 0xffffffffL; +} + + + +//######################################################################## +//# C R C 3 2 +//######################################################################## + +/** + * Constructor + */ +Crc32::Crc32() +{ + reset(); +} + +/** + * Destructor + */ +Crc32::~Crc32() +{ +} + +static bool crc_table_ready = false; +static unsigned long crc_table[256]; + +/** + * make the table for a fast CRC. + */ +void makeCrcTable() +{ + if (crc_table_ready) + return; + for (int n = 0; n < 256; n++) + { + unsigned long c = n; + for (int k = 8; --k >= 0; ) + { + if ((c & 1) != 0) + c = 0xedb88320 ^ (c >> 1); + else + c >>= 1; + } + crc_table[n] = c; + } + crc_table_ready = true; +} + + +/** + * Reset CRC-32 checksum to initial value. + */ +void Crc32::reset() +{ + value = 0; + makeCrcTable(); +} + +void Crc32::update(unsigned char b) +{ + unsigned long c = ~value; + c = crc_table[(c ^ b) & 0xff] ^ (c >> 8); + value = ~c; +} + + +void Crc32::update(char *str) +{ + if (str) + while (*str) + update((unsigned char)*str++); +} + +void Crc32::update(const std::vector &buf) +{ + std::vector::const_iterator iter; + for (iter=buf.begin() ; iter!=buf.end() ; iter++) + { + unsigned char ch = *iter; + update(ch); + } +} + + +/** + * Returns current checksum value. + */ +unsigned long Crc32::getValue() +{ + return value & 0xffffffffL; +} + +//######################################################################## +//# I N F L A T E R +//######################################################################## + + +/** + * + */ +typedef struct +{ + int *count; // number of symbols of each length + int *symbol; // canonically ordered symbols +} Huffman; + +/** + * + */ +class Inflater +{ +public: + + Inflater(); + + virtual ~Inflater(); + + static const int MAXBITS = 15; // max bits in a code + static const int MAXLCODES = 286; // max number of literal/length codes + static const int MAXDCODES = 30; // max number of distance codes + static const int MAXCODES = 316; // max codes lengths to read + static const int FIXLCODES = 288; // number of fixed literal/length codes + + /** + * + */ + bool inflate(std::vector &destination, + std::vector &source); + +private: + + /** + * + */ + void error(char *fmt, ...); + + /** + * + */ + void trace(char *fmt, ...); + + /** + * + */ + void dump(); + + /** + * + */ + int buildHuffman(Huffman *h, int *length, int n); + + /** + * + */ + bool getBits(int need, int *oval); + + /** + * + */ + int doDecode(Huffman *h); + + /** + * + */ + bool doCodes(Huffman *lencode, Huffman *distcode); + + /** + * + */ + bool doStored(); + + /** + * + */ + bool doFixed(); + + /** + * + */ + bool doDynamic(); + + + std::vectordest; + + std::vectorsrc; + unsigned long srcPos; //current read position + int bitBuf; + int bitCnt; + +}; + + +/** + * + */ +Inflater::Inflater() +{ +} + +/** + * + */ +Inflater::~Inflater() +{ +} + +/** + * + */ +void Inflater::error(char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + fprintf(stdout, "Inflater error:"); + vfprintf(stdout, fmt, args); + fprintf(stdout, "\n"); + va_end(args); +} + +/** + * + */ +void Inflater::trace(char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + fprintf(stdout, "Inflater:"); + vfprintf(stdout, fmt, args); + fprintf(stdout, "\n"); + va_end(args); +} + + +/** + * + */ +void Inflater::dump() +{ + for (unsigned int i=0 ; icount[len] = 0; + for (int symbol = 0; symbol < n; symbol++) + (h->count[length[symbol]])++; // assumes lengths are within bounds + if (h->count[0] == n) // no codes! + { + error("huffman tree will result in failed decode"); + return -1; + } + + // check for an over-subscribed or incomplete set of lengths + int left = 1; // number of possible codes left of current length + for (int len = 1; len <= MAXBITS; len++) + { + left <<= 1; // one more bit, double codes left + left -= h->count[len]; // deduct count from possible codes + if (left < 0) + { + error("huffman over subscribed"); + return -1; + } + } + + // generate offsets into symbol table for each length for sorting + int offs[MAXBITS+1]; //offsets in symbol table for each length + offs[1] = 0; + for (int len = 1; len < MAXBITS; len++) + offs[len + 1] = offs[len] + h->count[len]; + + /* + * put symbols in table sorted by length, by symbol order within each + * length + */ + for (int symbol = 0; symbol < n; symbol++) + if (length[symbol] != 0) + h->symbol[offs[length[symbol]]++] = symbol; + + // return zero for complete set, positive for incomplete set + return left; +} + + +/** + * + */ +bool Inflater::getBits(int requiredBits, int *oval) +{ + long val = bitBuf; + + //add more bytes if needed + while (bitCnt < requiredBits) + { + if (srcPos >= src.size()) + { + error("premature end of input"); + return false; + } + val |= ((long)(src[srcPos++])) << bitCnt; + bitCnt += 8; + } + + //update the buffer and return the data + bitBuf = (int)(val >> requiredBits); + bitCnt -= requiredBits; + *oval = (int)(val & ((1L << requiredBits) - 1)); + + return true; +} + + +/** + * + */ +int Inflater::doDecode(Huffman *h) +{ + int bitTmp = bitBuf; + int left = bitCnt; + int code = 0; + int first = 0; + int index = 0; + int len = 1; + int *next = h->count + 1; + while (true) + { + while (left--) + { + code |= bitTmp & 1; + bitTmp >>= 1; + int count = *next++; + if (code < first + count) + { /* if length len, return symbol */ + bitBuf = bitTmp; + bitCnt = (bitCnt - len) & 7; + return h->symbol[index + (code - first)]; + } + index += count; + first += count; + first <<= 1; + code <<= 1; + len++; + } + left = (MAXBITS+1) - len; + if (left == 0) + break; + if (srcPos >= src.size()) + { + error("premature end of input"); + dump(); + return -1; + } + bitTmp = src[srcPos++]; + if (left > 8) + left = 8; + } + + error("no end of block found"); + return -1; +} + +/** + * + */ +bool Inflater::doCodes(Huffman *lencode, Huffman *distcode) +{ + static const int lens[29] = { // Size base for length codes 257..285 + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258}; + static const int lext[29] = { // Extra bits for length codes 257..285 + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, + 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0}; + static const int dists[30] = { // Offset base for distance codes 0..29 + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, + 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, + 8193, 12289, 16385, 24577}; + static const int dext[30] = { // Extra bits for distance codes 0..29 + 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, + 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, + 12, 12, 13, 13}; + + //decode literals and length/distance pairs + while (true) + { + int symbol = doDecode(lencode); + if (symbol == 256) + break; + if (symbol < 0) + { + return false; + } + if (symbol < 256) //literal + { + dest.push_back(symbol); + } + else if (symbol > 256)//length + { + symbol -= 257; + if (symbol >= 29) + { + error("invalid fixed code"); + return false; + } + int ret; + if (!getBits(lext[symbol], &ret)) + return false; + int len = lens[symbol] + ret; + + symbol = doDecode(distcode);//distance + if (symbol < 0) + { + return false; + } + + if (!getBits(dext[symbol], &ret)) + return false; + unsigned int dist = dists[symbol] + ret; + if (dist > dest.size()) + { + error("distance too far back %d/%d", dist, dest.size()); + dump(); + //printf("pos:%d\n", srcPos); + return false; + } + + // copy length bytes from distance bytes back + //dest.push_back('{'); + while (len--) + { + dest.push_back(dest[dest.size() - dist]); + } + //dest.push_back('}'); + + } + } + + return true; +} + +/** + */ +bool Inflater::doStored() +{ + //trace("### stored ###"); + + // clear bits from current byte + bitBuf = 0; + bitCnt = 0; + + // length + if (srcPos + 4 > src.size()) + { + error("not enough input"); + return false; + } + + int len = src[srcPos++]; + len |= src[srcPos++] << 8; + //trace("### len:%d", len); + // check complement + if (src[srcPos++] != (~len & 0xff) || + src[srcPos++] != ((~len >> 8) & 0xff)) + { + error("twos complement for storage size do not match"); + return false; + } + + // copy data + if (srcPos + len > src.size()) + { + error("Not enough input for stored block"); + return false; + } + while (len--) + dest.push_back(src[srcPos++]); + + return true; +} + +/** + */ +bool Inflater::doFixed() +{ + //trace("### fixed ###"); + + static bool firstTime = true; + static int lencnt[MAXBITS+1], lensym[FIXLCODES]; + static int distcnt[MAXBITS+1], distsym[MAXDCODES]; + static Huffman lencode = {lencnt, lensym}; + static Huffman distcode = {distcnt, distsym}; + + if (firstTime) + { + firstTime = false; + + int lengths[FIXLCODES]; + + // literal/length table + int symbol = 0; + for ( ; symbol < 144; symbol++) + lengths[symbol] = 8; + for ( ; symbol < 256; symbol++) + lengths[symbol] = 9; + for ( ; symbol < 280; symbol++) + lengths[symbol] = 7; + for ( ; symbol < FIXLCODES; symbol++) + lengths[symbol] = 8; + buildHuffman(&lencode, lengths, FIXLCODES); + + // distance table + for (int symbol = 0; symbol < MAXDCODES; symbol++) + lengths[symbol] = 5; + buildHuffman(&distcode, lengths, MAXDCODES); + } + + // decode data until end-of-block code + bool ret = doCodes(&lencode, &distcode); + return ret; +} + +/** + */ +bool Inflater::doDynamic() +{ + //trace("### dynamic ###"); + int lengths[MAXCODES]; // descriptor code lengths + int lencnt[MAXBITS+1], lensym[MAXLCODES]; // lencode memory + int distcnt[MAXBITS+1], distsym[MAXDCODES]; // distcode memory + Huffman lencode = {lencnt, lensym}; // length code + Huffman distcode = {distcnt, distsym}; // distance code + static const int order[19] = // permutation of code length codes + {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + + // get number of lengths in each table, check lengths + int ret; + if (!getBits(5, &ret)) + return false; + int nlen = ret + 257; + if (!getBits(5, &ret)) + return false; + int ndist = ret + 1; + if (!getBits(4, &ret)) + return false; + int ncode = ret + 4; + if (nlen > MAXLCODES || ndist > MAXDCODES) + { + error("Bad codes"); + return false; + } + + // get code length code lengths + int index = 0; + for ( ; index < ncode; index++) + { + if (!getBits(3, &ret)) + return false; + lengths[order[index]] = ret; + } + for ( ; index < 19; index++) + lengths[order[index]] = 0; + + // build huffman table for code lengths codes + if (buildHuffman(&lencode, lengths, 19) != 0) + return false; + + // read length/literal and distance code length tables + index = 0; + while (index < nlen + ndist) + { + int symbol = doDecode(&lencode); + if (symbol < 16) // length in 0..15 + lengths[index++] = symbol; + else + { // repeat instruction + int len = 0; // assume repeating zeros + if (symbol == 16) + { // repeat last length 3..6 times + if (index == 0) + { + error("no last length"); + return false; + } + len = lengths[index - 1];// last length + if (!getBits(2, &ret)) + return false; + symbol = 3 + ret; + } + else if (symbol == 17) // repeat zero 3..10 times + { + if (!getBits(3, &ret)) + return false; + symbol = 3 + ret; + } + else // == 18, repeat zero 11..138 times + { + if (!getBits(7, &ret)) + return false; + symbol = 11 + ret; + } + if (index + symbol > nlen + ndist) + { + error("too many lengths"); + return false; + } + while (symbol--) // repeat last or zero symbol times + lengths[index++] = len; + } + } + + // build huffman table for literal/length codes + int err = buildHuffman(&lencode, lengths, nlen); + if (err < 0 || (err > 0 && nlen - lencode.count[0] != 1)) + { + error("incomplete length codes"); + //return false; + } + // build huffman table for distance codes + err = buildHuffman(&distcode, lengths + nlen, ndist); + if (err < 0 || (err > 0 && nlen - lencode.count[0] != 1)) + { + error("incomplete dist codes"); + return false; + } + + // decode data until end-of-block code + bool retn = doCodes(&lencode, &distcode); + return retn; +} + +/** + */ +bool Inflater::inflate(std::vector &destination, + std::vector &source) +{ + dest.clear(); + src = source; + srcPos = 0; + bitBuf = 0; + bitCnt = 0; + + while (true) + { + int last; // one if last block + if (!getBits(1, &last)) + return false; + int type; // block type 0..3 + if (!getBits(2, &type)) + return false; + switch (type) + { + case 0: + if (!doStored()) + return false; + break; + case 1: + if (!doFixed()) + return false; + break; + case 2: + if (!doDynamic()) + return false; + break; + default: + error("Unknown block type %d", type); + return false; + } + if (last) + break; + } + + destination = dest; + + return true; +} + + + + + + +//######################################################################## +//# D E F L A T E R +//######################################################################## + + + +class Deflater +{ +public: + + /** + * + */ + Deflater(); + + /** + * + */ + virtual ~Deflater(); + + /** + * + */ + virtual void reset(); + + /** + * + */ + virtual bool update(int ch); + + /** + * + */ + virtual bool finish(); + + /** + * + */ + virtual std::vector &getCompressed(); + + /** + * + */ + bool deflate(std::vector &dest, + const std::vector &src); + + void encodeDistStatic(unsigned int len, unsigned int dist); + +private: + + //debug messages + void error(char *fmt, ...); + void trace(char *fmt, ...); + + bool compressWindow(); + + bool compress(); + + std::vector uncompressed; + + std::vector window; + + unsigned int windowPos; + + std::vector compressed; + + //#### Output + unsigned int outputBitBuf; + unsigned int outputNrBits; + + void put(int ch); + + void putWord(int ch); + + void putFlush(); + + void putBits(unsigned int ch, unsigned int bitsWanted); + + void putBitsR(unsigned int ch, unsigned int bitsWanted); + + //#### Huffman Encode + void encodeLiteralStatic(unsigned int ch); + + unsigned char windowBuf[32768]; + //assume 32-bit ints + unsigned int windowHashBuf[32768]; +}; + + +//######################################################################## +//# A P I +//######################################################################## + + +/** + * + */ +Deflater::Deflater() +{ + reset(); +} + +/** + * + */ +Deflater::~Deflater() +{ + +} + +/** + * + */ +void Deflater::reset() +{ + outputBitBuf = 0; + outputNrBits = 0; + window.clear(); + compressed.clear(); + uncompressed.clear(); +} + +/** + * + */ +bool Deflater::update(int ch) +{ + uncompressed.push_back((unsigned char)(ch & 0xff)); + return true; +} + +/** + * + */ +bool Deflater::finish() +{ + return compress(); +} + +/** + * + */ +std::vector &Deflater::getCompressed() +{ + return compressed; +} + + +/** + * + */ +bool Deflater::deflate(std::vector &dest, + const std::vector &src) +{ + reset(); + uncompressed = src; + if (!compress()) + return false; + dest = compressed; + return true; +} + + + + + + + +//######################################################################## +//# W O R K I N G C O D E +//######################################################################## + + +//############################# +//# M E S S A G E S +//############################# + +/** + * Print error messages + */ +void Deflater::error(char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + fprintf(stdout, "Deflater error:"); + vfprintf(stdout, fmt, args); + fprintf(stdout, "\n"); + va_end(args); +} + +/** + * Print trace messages + */ +void Deflater::trace(char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + fprintf(stdout, "Deflater:"); + vfprintf(stdout, fmt, args); + fprintf(stdout, "\n"); + va_end(args); +} + + + + +//############################# +//# O U T P U T +//############################# + +/** + * + */ +void Deflater::put(int ch) +{ + compressed.push_back(ch); + outputBitBuf = 0; + outputNrBits = 0; +} + +/** + * + */ +void Deflater::putWord(int ch) +{ + int lo = (ch ) & 0xff; + int hi = (ch>>8) & 0xff; + put(lo); + put(hi); +} + +/** + * + */ +void Deflater::putFlush() +{ + if (outputNrBits > 0) + { + put(outputBitBuf & 0xff); + } + outputBitBuf = 0; + outputNrBits = 0; +} + +/** + * + */ +void Deflater::putBits(unsigned int ch, unsigned int bitsWanted) +{ + //trace("n:%4u, %d\n", ch, bitsWanted); + + while (bitsWanted--) + { + //add bits to position 7. shift right + outputBitBuf = (outputBitBuf>>1) + (ch<<7 & 0x80); + ch >>= 1; + outputNrBits++; + if (outputNrBits >= 8) + { + unsigned char b = outputBitBuf & 0xff; + //printf("b:%02x\n", b); + put(b); + } + } +} + +static unsigned int bitReverse(unsigned int code, unsigned int nrBits) +{ + unsigned int outb = 0; + while (nrBits--) + { + outb = (outb << 1) | (code & 0x01); + code >>= 1; + } + return outb; +} + + +/** + * + */ +void Deflater::putBitsR(unsigned int ch, unsigned int bitsWanted) +{ + //trace("r:%4u, %d", ch, bitsWanted); + + unsigned int rcode = bitReverse(ch, bitsWanted); + + putBits(rcode, bitsWanted); + +} + + +//############################# +//# E N C O D E +//############################# + + + +void Deflater::encodeLiteralStatic(unsigned int ch) +{ + //trace("c: %d", ch); + + if (ch < 144) + { + putBitsR(ch + 0x0030 , 8); // 00110000 + } + else if (ch < 256) + { + putBitsR(ch - 144 + 0x0190 , 9); // 110010000 + } + else if (ch < 280) + { + putBitsR(ch - 256 + 0x0000 , 7); // 0000000 + } + else if (ch < 288) + { + putBitsR(ch - 280 + 0x00c0 , 8); // 11000000 + } + else //out of range + { + error("Literal out of range: %d", ch); + } + +} + + +typedef struct +{ + unsigned int base; + unsigned int range; + unsigned int bits; +} LenBase; + +LenBase lenBases[] = +{ + { 3, 1, 0 }, + { 4, 1, 0 }, + { 5, 1, 0 }, + { 6, 1, 0 }, + { 7, 1, 0 }, + { 8, 1, 0 }, + { 9, 1, 0 }, + { 10, 1, 0 }, + { 11, 2, 1 }, + { 13, 2, 1 }, + { 15, 2, 1 }, + { 17, 2, 1 }, + { 19, 4, 2 }, + { 23, 4, 2 }, + { 27, 4, 2 }, + { 31, 4, 2 }, + { 35, 8, 3 }, + { 43, 8, 3 }, + { 51, 8, 3 }, + { 59, 8, 3 }, + { 67, 16, 4 }, + { 83, 16, 4 }, + { 99, 16, 4 }, + { 115, 16, 4 }, + { 131, 32, 5 }, + { 163, 32, 5 }, + { 195, 32, 5 }, + { 227, 32, 5 }, + { 258, 1, 0 } +}; + +typedef struct +{ + unsigned int base; + unsigned int range; + unsigned int bits; +} DistBase; + +DistBase distBases[] = +{ + { 1, 1, 0 }, + { 2, 1, 0 }, + { 3, 1, 0 }, + { 4, 1, 0 }, + { 5, 2, 1 }, + { 7, 2, 1 }, + { 9, 4, 2 }, + { 13, 4, 2 }, + { 17, 8, 3 }, + { 25, 8, 3 }, + { 33, 16, 4 }, + { 49, 16, 4 }, + { 65, 32, 5 }, + { 97, 32, 5 }, + { 129, 64, 6 }, + { 193, 64, 6 }, + { 257, 128, 7 }, + { 385, 128, 7 }, + { 513, 256, 8 }, + { 769, 256, 8 }, + { 1025, 512, 9 }, + { 1537, 512, 9 }, + { 2049, 1024, 10 }, + { 3073, 1024, 10 }, + { 4097, 2048, 11 }, + { 6145, 2048, 11 }, + { 8193, 4096, 12 }, + { 12289, 4096, 12 }, + { 16385, 8192, 13 }, + { 24577, 8192, 13 } +}; + +void Deflater::encodeDistStatic(unsigned int len, unsigned int dist) +{ + + //## Output length + + if (len < 3 || len > 258) + { + error("Length out of range:%d", len); + return; + } + + bool found = false; + for (int i=0 ; i<30 ; i++) + { + unsigned int base = lenBases[i].base; + unsigned int range = lenBases[i].range; + if (base + range > len) + { + unsigned int lenCode = 257 + i; + unsigned int length = len - base; + //trace("--- %d %d %d %d", len, base, range, length); + encodeLiteralStatic(lenCode); + putBits(length, lenBases[i].bits); + found = true; + break; + } + } + if (!found) + { + error("Length not found in table:%d", len); + return; + } + + //## Output distance + + if (dist < 4 || dist > 32768) + { + error("Distance out of range:%d", dist); + return; + } + + found = false; + for (int i=0 ; i<30 ; i++) + { + unsigned int base = distBases[i].base; + unsigned int range = distBases[i].range; + if (base + range > dist) + { + unsigned int distCode = i; + unsigned int distance = dist - base; + //error("--- %d %d %d %d", dist, base, range, distance); + putBitsR(distCode, 5); + putBits(distance, distBases[i].bits); + found = true; + break; + } + } + if (!found) + { + error("Distance not found in table:%d", dist); + return; + } +} + + +//############################# +//# C O M P R E S S +//############################# + + +/** + * This method does the dirty work of dictionary + * compression. Basically it looks for redundant + * strings and has the current duplicate refer back + * to the previous one. + */ +bool Deflater::compressWindow() +{ + windowPos = 0; + unsigned int windowSize = window.size(); + //### Compress as much of the window as possible + + unsigned int hash = 0; + //Have each value be a long with the byte at this position, + //plus the 3 bytes after it in the window + for (int i=windowSize-1 ; i>=0 ; i--) + { + unsigned char ch = window[i]; + windowBuf[i] = ch; + hash = ((hash<<8) & 0xffffff00) | ch; + windowHashBuf[i] = hash; + } + + while (windowPos < windowSize - 3) + { + //### Find best match, if any + unsigned int bestMatchLen = 0; + unsigned int bestMatchDist = 0; + if (windowPos >= 4) + { + for (unsigned int lookBack=0 ; lookBack= windowPos -4 ) + lookAheadMax = windowPos - 4 - lookBack; + if (lookAheadMax > 258) + lookAheadMax = 258; + unsigned char *wp = &(windowBuf[windowPos+4]); + unsigned char *lb = &(windowBuf[lookBack+4]); + while (lookAhead bestMatchLen) + { + bestMatchLen = lookAhead; + bestMatchDist = windowPos - lookBack; + } + } + } + } + if (bestMatchLen > 3) + { + //Distance encode + //trace("### distance"); + /* + printf("### 1 '"); + for (int i=0 ; i < bestMatchLen ; i++) + fputc(window[windowPos+i], stdout); + printf("'\n### 2 '"); + for (int i=0 ; i < bestMatchLen ; i++) + fputc(window[windowPos-bestMatchDist+i], stdout); + printf("'\n"); + */ + encodeDistStatic(bestMatchLen, bestMatchDist); + windowPos += bestMatchLen; + } + else + { + //Literal encode + //trace("### literal"); + encodeLiteralStatic(windowBuf[windowPos]); + windowPos++; + } + } + + while (windowPos < windowSize) + encodeLiteralStatic(windowBuf[windowPos++]); + + encodeLiteralStatic(256); + return true; +} + + +/** + * + */ +bool Deflater::compress() +{ + //trace("compress"); + unsigned long total = 0L; + windowPos = 0; + std::vector::iterator iter; + for (iter = uncompressed.begin(); iter != uncompressed.end() ; ) + { + total += windowPos; + trace("total:%ld", total); + if (windowPos > window.size()) + windowPos = window.size(); + window.erase(window.begin() , window.begin()+windowPos); + while (window.size() < 32768 && iter != uncompressed.end()) + { + window.push_back(*iter); + iter++; + } + if (window.size() >= 32768) + putBits(0x00, 1); //0 -- more blocks + else + putBits(0x01, 1); //1 -- last block + putBits(0x01, 2); //01 -- static trees + if (!compressWindow()) + return false; + } + putFlush(); + return true; +} + + + + + +//######################################################################## +//# G Z I P F I L E +//######################################################################## + +/** + * Constructor + */ +GzipFile::GzipFile() +{ +} + +/** + * Destructor + */ +GzipFile::~GzipFile() +{ +} + +/** + * Print error messages + */ +void GzipFile::error(char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + fprintf(stdout, "GzipFile error:"); + vfprintf(stdout, fmt, args); + fprintf(stdout, "\n"); + va_end(args); +} + +/** + * Print trace messages + */ +void GzipFile::trace(char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + fprintf(stdout, "GzipFile:"); + vfprintf(stdout, fmt, args); + fprintf(stdout, "\n"); + va_end(args); +} + +/** + * + */ +void GzipFile::put(unsigned char ch) +{ + data.push_back(ch); +} + +/** + * + */ +void GzipFile::setData(const std::vector &str) +{ + data = str; +} + +/** + * + */ +void GzipFile::clearData() +{ + data.clear(); +} + +/** + * + */ +std::vector &GzipFile::getData() +{ + return data; +} + +/** + * + */ +std::string &GzipFile::getFileName() +{ + return fileName; +} + +/** + * + */ +void GzipFile::setFileName(const std::string &val) +{ + fileName = val; +} + + + +//##################################### +//# U T I L I T Y +//##################################### + +/** + * Loads a new file into an existing GzipFile + */ +bool GzipFile::loadFile(const std::string &fName) +{ + FILE *f = fopen(fName.c_str() , "rb"); + if (!f) + { + error("Cannot open file %s", fName.c_str()); + return false; + } + while (true) + { + int ch = fgetc(f); + if (ch < 0) + break; + data.push_back(ch); + } + fclose(f); + setFileName(fName); + return true; +} + + + +//##################################### +//# W R I T E +//##################################### + +/** + * + */ +bool GzipFile::putByte(unsigned char ch) +{ + fileBuf.push_back(ch); + return true; +} + + + +/** + * + */ +bool GzipFile::putLong(unsigned long val) +{ + fileBuf.push_back( (unsigned char)((val ) & 0xff)); + fileBuf.push_back( (unsigned char)((val>> 8) & 0xff)); + fileBuf.push_back( (unsigned char)((val>>16) & 0xff)); + fileBuf.push_back( (unsigned char)((val>>24) & 0xff)); + return true; +} + + + +/** + * + */ +bool GzipFile::write() +{ + fileBuf.clear(); + + putByte(0x1f); //magic + putByte(0x8b); //magic + putByte( 8); //compression method + putByte(0x08); //flags. say we have a crc and file name + + unsigned long ltime = (unsigned long) time(NULL); + putLong(ltime); + + //xfl + putByte(0); + //OS + putByte(0); + + //file name + for (unsigned int i=0 ; i compBuf; + Deflater deflater; + if (!deflater.deflate(compBuf, data)) + { + return false; + } + + std::vector::iterator iter; + for (iter=compBuf.begin() ; iter!=compBuf.end() ; iter++) + { + unsigned char ch = *iter; + putByte(ch); + } + + Crc32 crcEngine; + crcEngine.update(data); + unsigned long crc = crcEngine.getValue(); + putLong(crc); + + putLong(data.size()); + + return true; +} + + +/** + * + */ +bool GzipFile::writeBuffer(std::vector &outBuf) +{ + if (!write()) + return false; + outBuf.clear(); + outBuf = fileBuf; + return true; +} + + +/** + * + */ +bool GzipFile::writeFile(const std::string &fileName) +{ + if (!write()) + return false; + FILE *f = fopen(fileName.c_str(), "wb"); + if (!f) + return false; + std::vector::iterator iter; + for (iter=fileBuf.begin() ; iter!=fileBuf.end() ; iter++) + { + unsigned char ch = *iter; + fputc(ch, f); + } + fclose(f); + return true; +} + + +//##################################### +//# R E A D +//##################################### + +bool GzipFile::getByte(unsigned char *ch) +{ + if (fileBufPos >= fileBuf.size()) + { + error("unexpected end of data"); + return false; + } + *ch = fileBuf[fileBufPos++]; + return true; +} + +/** + * + */ +bool GzipFile::getLong(unsigned long *val) +{ + if (fileBuf.size() - fileBufPos < 4) + return false; + int ch1 = fileBuf[fileBufPos++]; + int ch2 = fileBuf[fileBufPos++]; + int ch3 = fileBuf[fileBufPos++]; + int ch4 = fileBuf[fileBufPos++]; + *val = ((ch4<<24) & 0xff000000L) | + ((ch3<<16) & 0x00ff0000L) | + ((ch2<< 8) & 0x0000ff00L) | + ((ch1 ) & 0x000000ffL); + return true; +} + +bool GzipFile::read() +{ + fileBufPos = 0; + + unsigned char ch; + + //magic cookie + if (!getByte(&ch)) + return false; + if (ch != 0x1f) + { + error("bad gzip header"); + return false; + } + if (!getByte(&ch)) + return false; + if (ch != 0x8b) + { + error("bad gzip header"); + return false; + } + + //## compression method + if (!getByte(&ch)) + return false; + compressionMethod = ch & 0xff; + + //## flags + if (!getByte(&ch)) + return false; + //bool ftext = ch & 0x01; + bool fhcrc = ch & 0x02; + bool fextra = ch & 0x04; + bool fname = ch & 0x08; + bool fcomment = ch & 0x10; + + //trace("cm:%d ftext:%d fhcrc:%d fextra:%d fname:%d fcomment:%d", + // cm, ftext, fhcrc, fextra, fname, fcomment); + + //## file time + unsigned long ltime; + if (!getLong(<ime)) + return false; + //time_t mtime = (time_t)ltime; + + //## XFL + if (!getByte(&ch)) + return false; + //int xfl = ch; + + //## OS + if (!getByte(&ch)) + return false; + //int os = ch; + + //std::string timestr = ctime(&mtime); + //trace("xfl:%d os:%d mtime:%s", xfl, os, timestr.c_str()); + + if (fextra) + { + if (!getByte(&ch)) + return false; + long xlen = ch; + if (!getByte(&ch)) + return false; + xlen = (xlen << 8) + ch; + for (long l=0 ; l compBuf; + while (fileBufPos < fileBuf.size() - 8) + { + if (!getByte(&ch)) + return false; + compBuf.push_back(ch); + } + //uncompress + data.clear(); + Inflater inflater; + if (!inflater.inflate(data, compBuf)) + { + return false; + } + + //Get the CRC and compare + Crc32 crcEngine; + crcEngine.update(data); + unsigned long calcCrc = crcEngine.getValue(); + unsigned long givenCrc; + if (!getLong(&givenCrc)) + return false; + if (givenCrc != calcCrc) + { + error("Specified crc, %ud, not what received: %ud", + givenCrc, calcCrc); + return false; + } + + //Get the file size and compare + unsigned long givenFileSize; + if (!getLong(&givenFileSize)) + return false; + if (givenFileSize != data.size()) + { + error("Specified data size, %ld, not what received: %ld", + givenFileSize, data.size()); + return false; + } + + return true; +} + + + +/** + * + */ +bool GzipFile::readBuffer(const std::vector &inbuf) +{ + fileBuf = inbuf; + if (!read()) + return false; + return true; +} + + +/** + * + */ +bool GzipFile::readFile(const std::string &fileName) +{ + fileBuf.clear(); + FILE *f = fopen(fileName.c_str(), "rb"); + if (!f) + return false; + while (true) + { + int ch = fgetc(f); + if (ch < 0) + break; + fileBuf.push_back(ch); + } + fclose(f); + if (!read()) + return false; + return true; +} + + + + + + + + +//######################################################################## +//# Z I P F I L E +//######################################################################## + +/** + * Constructor + */ +ZipEntry::ZipEntry() +{ + crc = 0L; + compressionMethod = 8; +} + +/** + * + */ +ZipEntry::ZipEntry(const std::string &fileNameArg, + const std::string &commentArg) +{ + crc = 0L; + compressionMethod = 8; + fileName = fileNameArg; + comment = commentArg; +} + +/** + * Destructor + */ +ZipEntry::~ZipEntry() +{ +} + + +/** + * + */ +std::string ZipEntry::getFileName() +{ + return fileName; +} + +/** + * + */ +void ZipEntry::setFileName(const std::string &val) +{ + fileName = val; +} + +/** + * + */ +std::string ZipEntry::getComment() +{ + return comment; +} + +/** + * + */ +void ZipEntry::setComment(const std::string &val) +{ + comment = val; +} + +/** + * + */ +unsigned long ZipEntry::getCompressedSize() +{ + return (unsigned long)compressedData.size(); +} + +/** + * + */ +int ZipEntry::getCompressionMethod() +{ + return compressionMethod; +} + +/** + * + */ +void ZipEntry::setCompressionMethod(int val) +{ + compressionMethod = val; +} + +/** + * + */ +std::vector &ZipEntry::getCompressedData() +{ + return compressedData; +} + +/** + * + */ +void ZipEntry::setCompressedData(const std::vector &val) +{ + compressedData = val; +} + +/** + * + */ +unsigned long ZipEntry::getUncompressedSize() +{ + return (unsigned long)uncompressedData.size(); +} + +/** + * + */ +std::vector &ZipEntry::getUncompressedData() +{ + return uncompressedData; +} + +/** + * + */ +void ZipEntry::setUncompressedData(const std::vector &val) +{ + uncompressedData = val; +} + +/** + * + */ +unsigned long ZipEntry::getCrc() +{ + return crc; +} + +/** + * + */ +void ZipEntry::setCrc(unsigned long val) +{ + crc = val; +} + +/** + * + */ +void ZipEntry::write(unsigned char ch) +{ + uncompressedData.push_back(ch); +} + +/** + * + */ +void ZipEntry::finish() +{ + Crc32 c32; + std::vector::iterator iter; + for (iter = uncompressedData.begin() ; + iter!= uncompressedData.end() ; iter++) + { + unsigned char ch = *iter; + c32.update(ch); + } + crc = c32.getValue(); + switch (compressionMethod) + { + case 0: //none + { + for (iter = uncompressedData.begin() ; + iter!= uncompressedData.end() ; iter++) + { + unsigned char ch = *iter; + compressedData.push_back(ch); + } + break; + } + case 8: //deflate + { + Deflater deflater; + if (!deflater.deflate(compressedData, uncompressedData)) + { + //some error + } + break; + } + default: + { + printf("error: unknown compression method %d\n", + compressionMethod); + } + } +} + + + + +/** + * + */ +bool ZipEntry::readFile(const std::string &fileNameArg, + const std::string &commentArg) +{ + crc = 0L; + uncompressedData.clear(); + fileName = fileNameArg; + comment = commentArg; + FILE *f = fopen(fileName.c_str(), "rb"); + if (!f) + { + return false; + } + while (true) + { + int ch = fgetc(f); + if (ch < 0) + break; + uncompressedData.push_back((unsigned char)ch); + } + fclose(f); + finish(); + return true; +} + + +/** + * + */ +void ZipEntry::setPosition(unsigned long val) +{ + position = val; +} + +/** + * + */ +unsigned long ZipEntry::getPosition() +{ + return position; +} + + + + + + + +/** + * Constructor + */ +ZipFile::ZipFile() +{ + +} + +/** + * Destructor + */ +ZipFile::~ZipFile() +{ + std::vector::iterator iter; + for (iter=entries.begin() ; iter!=entries.end() ; iter++) + { + ZipEntry *entry = *iter; + delete entry; + } + entries.clear(); +} + +/** + * + */ +void ZipFile::setComment(const std::string &val) +{ + comment = val; +} + +/** + * + */ +std::string ZipFile::getComment() +{ + return comment; +} + + +/** + * + */ +std::vector &ZipFile::getEntries() +{ + return entries; +} + + + +//##################################### +//# M E S S A G E S +//##################################### + +void ZipFile::error(char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + fprintf(stdout, "ZipFile error:"); + vfprintf(stdout, fmt, args); + fprintf(stdout, "\n"); + va_end(args); +} + +void ZipFile::trace(char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + fprintf(stdout, "ZipFile:"); + vfprintf(stdout, fmt, args); + fprintf(stdout, "\n"); + va_end(args); +} + +//##################################### +//# U T I L I T Y +//##################################### + +/** + * + */ +ZipEntry *ZipFile::addFile(const std::string &fileName, + const std::string &comment) +{ + ZipEntry *ze = new ZipEntry(); + if (!ze->readFile(fileName, comment)) + { + return NULL; + } + entries.push_back(ze); + return ze; +} + + +/** + * + */ +ZipEntry *ZipFile::newEntry(const std::string &fileName, + const std::string &comment) +{ + ZipEntry *ze = new ZipEntry(fileName, comment); + entries.push_back(ze); + return ze; +} + + +//##################################### +//# W R I T E +//##################################### + +/** + * + */ +bool ZipFile::putLong(unsigned long val) +{ + fileBuf.push_back( ((int)(val )) & 0xff); + fileBuf.push_back( ((int)(val>> 8)) & 0xff); + fileBuf.push_back( ((int)(val>>16)) & 0xff); + fileBuf.push_back( ((int)(val>>24)) & 0xff); + return true; +} + + +/** + * + */ +bool ZipFile::putInt(unsigned int val) +{ + fileBuf.push_back( (val ) & 0xff); + fileBuf.push_back( (val>> 8) & 0xff); + return true; +} + +/** + * + */ +bool ZipFile::putByte(unsigned char val) +{ + fileBuf.push_back(val); + return true; +} + +/** + * + */ +bool ZipFile::writeFileData() +{ + std::vector::iterator iter; + for (iter = entries.begin() ; iter != entries.end() ; iter++) + { + ZipEntry *entry = *iter; + entry->setPosition(fileBuf.size()); + //##### HEADER + std::string fname = entry->getFileName(); + putLong(0x04034b50L); + putInt(20); //versionNeeded + putInt(0); //gpBitFlag + //putInt(0); //compression method + putInt(entry->getCompressionMethod()); //compression method + putInt(0); //mod time + putInt(0); //mod date + putLong(entry->getCrc()); //crc32 + putLong(entry->getCompressedSize()); + putLong(entry->getUncompressedSize()); + putInt(fname.size());//fileName length + putInt(8);//extra field length + //file name + for (unsigned int i=0 ; i &buf = entry->getCompressedData(); + std::vector::iterator iter; + for (iter = buf.begin() ; iter != buf.end() ; iter++) + { + unsigned char ch = (unsigned char) *iter; + putByte(ch); + } + } + return true; +} + +/** + * + */ +bool ZipFile::writeCentralDirectory() +{ + unsigned long cdPosition = fileBuf.size(); + std::vector::iterator iter; + for (iter = entries.begin() ; iter != entries.end() ; iter++) + { + ZipEntry *entry = *iter; + std::string fname = entry->getFileName(); + std::string ecomment = entry->getComment(); + putLong(0x02014b50L); //magic cookie + putInt(2386); //versionMadeBy + putInt(20); //versionNeeded + putInt(0); //gpBitFlag + putInt(entry->getCompressionMethod()); //compression method + putInt(0); //mod time + putInt(0); //mod date + putLong(entry->getCrc()); //crc32 + putLong(entry->getCompressedSize()); + putLong(entry->getUncompressedSize()); + putInt(fname.size());//fileName length + putInt(4);//extra field length + putInt(ecomment.size());//comment length + putInt(0); //disk number start + putInt(0); //internal attributes + putLong(0); //external attributes + putLong(entry->getPosition()); + + //file name + for (unsigned int i=0 ; i &outBuf) +{ + if (!write()) + return false; + outBuf.clear(); + outBuf = fileBuf; + return true; +} + + +/** + * + */ +bool ZipFile::writeFile(const std::string &fileName) +{ + if (!write()) + return false; + FILE *f = fopen(fileName.c_str(), "wb"); + if (!f) + return false; + std::vector::iterator iter; + for (iter=fileBuf.begin() ; iter!=fileBuf.end() ; iter++) + { + unsigned char ch = *iter; + fputc(ch, f); + } + fclose(f); + return true; +} + +//##################################### +//# R E A D +//##################################### + +/** + * + */ +bool ZipFile::getLong(unsigned long *val) +{ + if (fileBuf.size() - fileBufPos < 4) + return false; + int ch1 = fileBuf[fileBufPos++]; + int ch2 = fileBuf[fileBufPos++]; + int ch3 = fileBuf[fileBufPos++]; + int ch4 = fileBuf[fileBufPos++]; + *val = ((ch4<<24) & 0xff000000L) | + ((ch3<<16) & 0x00ff0000L) | + ((ch2<< 8) & 0x0000ff00L) | + ((ch1 ) & 0x000000ffL); + return true; +} + +/** + * + */ +bool ZipFile::getInt(unsigned int *val) +{ + if (fileBuf.size() - fileBufPos < 2) + return false; + int ch1 = fileBuf[fileBufPos++]; + int ch2 = fileBuf[fileBufPos++]; + *val = ((ch2<< 8) & 0xff00) | + ((ch1 ) & 0x00ff); + return true; +} + + +/** + * + */ +bool ZipFile::getByte(unsigned char *val) +{ + if (fileBuf.size() <= fileBufPos) + return false; + *val = fileBuf[fileBufPos++]; + return true; +} + + +/** + * + */ +bool ZipFile::readFileData() +{ + //printf("#################################################\n"); + //printf("###D A T A\n"); + //printf("#################################################\n"); + while (true) + { + unsigned long magicCookie; + if (!getLong(&magicCookie)) + { + error("magic cookie not found"); + break; + } + trace("###Cookie:%lx", magicCookie); + if (magicCookie == 0x02014b50L) //central directory + break; + if (magicCookie != 0x04034b50L) + { + error("file header not found"); + return false; + } + unsigned int versionNeeded; + if (!getInt(&versionNeeded)) + { + error("bad version needed found"); + return false; + } + unsigned int gpBitFlag; + if (!getInt(&gpBitFlag)) + { + error("bad bit flag found"); + return false; + } + unsigned int compressionMethod; + if (!getInt(&compressionMethod)) + { + error("bad compressionMethod found"); + return false; + } + unsigned int modTime; + if (!getInt(&modTime)) + { + error("bad modTime found"); + return false; + } + unsigned int modDate; + if (!getInt(&modDate)) + { + error("bad modDate found"); + return false; + } + unsigned long crc32; + if (!getLong(&crc32)) + { + error("bad crc32 found"); + return false; + } + unsigned long compressedSize; + if (!getLong(&compressedSize)) + { + error("bad compressedSize found"); + return false; + } + unsigned long uncompressedSize; + if (!getLong(&uncompressedSize)) + { + error("bad uncompressedSize found"); + return false; + } + unsigned int fileNameLength; + if (!getInt(&fileNameLength)) + { + error("bad fileNameLength found"); + return false; + } + unsigned int extraFieldLength; + if (!getInt(&extraFieldLength)) + { + error("bad extraFieldLength found"); + return false; + } + std::string fileName; + for (unsigned int i=0 ; i compBuf; + if (gpBitFlag & 0x8)//bit 3 was set. means we dont know compressed size + { + unsigned char c1, c2, c3, c4; + c1 = c2 = c3 = c4 = 0; + while (true) + { + unsigned char ch; + if (!getByte(&ch)) + { + error("premature end of data"); + break; + } + compBuf.push_back(ch); + c1 = c2; c2 = c3; c3 = c4; c4 = ch; + if (c1 == 0x50 && c2 == 0x4b && c3 == 0x07 && c4 == 0x08) + { + trace("found end of compressed data"); + //remove the cookie + compBuf.erase(compBuf.end() -4, compBuf.end()); + break; + } + } + } + else + { + for (unsigned long bnr = 0 ; bnr < compressedSize ; bnr++) + { + unsigned char ch; + if (!getByte(&ch)) + { + error("premature end of data"); + break; + } + compBuf.push_back(ch); + } + } + + printf("### data: "); + for (int i=0 ; i<10 ; i++) + printf("%02x ", compBuf[i] & 0xff); + printf("\n"); + + if (gpBitFlag & 0x8)//only if bit 3 set + { + /* this cookie was read in the loop above + unsigned long dataDescriptorSignature ; + if (!getLong(&dataDescriptorSignature)) + break; + if (dataDescriptorSignature != 0x08074b50L) + { + error("bad dataDescriptorSignature found"); + return false; + } + */ + unsigned long crc32; + if (!getLong(&crc32)) + { + error("bad crc32 found"); + return false; + } + unsigned long compressedSize; + if (!getLong(&compressedSize)) + { + error("bad compressedSize found"); + return false; + } + unsigned long uncompressedSize; + if (!getLong(&uncompressedSize)) + { + error("bad uncompressedSize found"); + return false; + } + }//bit 3 was set + //break; + + std::vector uncompBuf; + switch (compressionMethod) + { + case 8: //deflate + { + Inflater inflater; + if (!inflater.inflate(uncompBuf, compBuf)) + { + return false; + } + break; + } + default: + { + error("Unimplemented compression method %d", compressionMethod); + return false; + } + } + + if (uncompressedSize != uncompBuf.size()) + { + error("Size mismatch. Expected %ld, received %ld", + uncompressedSize, uncompBuf.size()); + return false; + } + + Crc32 crcEngine; + crcEngine.update(uncompBuf); + unsigned long crc = crcEngine.getValue(); + if (crc != crc32) + { + error("Crc mismatch. Calculated %08ux, received %08ux", crc, crc32); + return false; + } + + ZipEntry *ze = new ZipEntry(fileName, comment); + ze->setCompressionMethod(compressionMethod); + ze->setCompressedData(compBuf); + ze->setUncompressedData(uncompBuf); + ze->setCrc(crc); + entries.push_back(ze); + + + } + return true; +} + + +/** + * + */ +bool ZipFile::readCentralDirectory() +{ + //printf("#################################################\n"); + //printf("###D I R E C T O R Y\n"); + //printf("#################################################\n"); + while (true) + { + //We start with a central directory cookie already + //Check at the bottom of the loop. + unsigned int version; + if (!getInt(&version)) + { + error("bad version found"); + return false; + } + unsigned int versionNeeded; + if (!getInt(&versionNeeded)) + { + error("bad version found"); + return false; + } + unsigned int gpBitFlag; + if (!getInt(&gpBitFlag)) + { + error("bad bit flag found"); + return false; + } + unsigned int compressionMethod; + if (!getInt(&compressionMethod)) + { + error("bad compressionMethod found"); + return false; + } + unsigned int modTime; + if (!getInt(&modTime)) + { + error("bad modTime found"); + return false; + } + unsigned int modDate; + if (!getInt(&modDate)) + { + error("bad modDate found"); + return false; + } + unsigned long crc32; + if (!getLong(&crc32)) + { + error("bad crc32 found"); + return false; + } + unsigned long compressedSize; + if (!getLong(&compressedSize)) + { + error("bad compressedSize found"); + return false; + } + unsigned long uncompressedSize; + if (!getLong(&uncompressedSize)) + { + error("bad uncompressedSize found"); + return false; + } + unsigned int fileNameLength; + if (!getInt(&fileNameLength)) + { + error("bad fileNameLength found"); + return false; + } + unsigned int extraFieldLength; + if (!getInt(&extraFieldLength)) + { + error("bad extraFieldLength found"); + return false; + } + unsigned int fileCommentLength; + if (!getInt(&fileCommentLength)) + { + error("bad fileCommentLength found"); + return false; + } + unsigned int diskNumberStart; + if (!getInt(&diskNumberStart)) + { + error("bad diskNumberStart found"); + return false; + } + unsigned int internalFileAttributes; + if (!getInt(&internalFileAttributes)) + { + error("bad internalFileAttributes found"); + return false; + } + unsigned long externalFileAttributes; + if (!getLong(&externalFileAttributes)) + { + error("bad externalFileAttributes found"); + return false; + } + unsigned long localHeaderOffset; + if (!getLong(&localHeaderOffset)) + { + error("bad localHeaderOffset found"); + return false; + } + std::string fileName; + for (unsigned int i=0 ; i &inbuf) +{ + fileBuf = inbuf; + if (!read()) + return false; + return true; +} + + +/** + * + */ +bool ZipFile::readFile(const std::string &fileName) +{ + fileBuf.clear(); + FILE *f = fopen(fileName.c_str(), "rb"); + if (!f) + return false; + while (true) + { + int ch = fgetc(f); + if (ch < 0) + break; + fileBuf.push_back(ch); + } + fclose(f); + if (!read()) + return false; + return true; +} + + + + + + + + + +//######################################################################## +//# E N D O F F I L E +//######################################################################## + + diff --git a/src/dom/util/ziptool.h b/src/dom/util/ziptool.h index 71f982e1b..895f0ccb2 100644 --- a/src/dom/util/ziptool.h +++ b/src/dom/util/ziptool.h @@ -1,551 +1,551 @@ -#ifndef __ZIPTOOL_H__ -#define __ZIPTOOL_H__ -/** - * This is intended to be a standalone, reduced capability - * implementation of Gzip and Zip functionality. Its - * targeted use case is for archiving and retrieving single files - * which use these encoding types. Being memory based and - * non-optimized, it is not useful in cases where very large - * archives are needed or where high performance is desired. - * However, it should hopefully work well for smaller, - * one-at-a-time tasks. What you get in return is the ability - * to drop these files into your project and remove the dependencies - * on ZLib and Info-Zip. Enjoy. - * - * Authors: - * Bob Jamison - * - * Copyright (C) 2006 Bob Jamison - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -#include -#include - - -//######################################################################## -//# A D L E R 3 2 -//######################################################################## - -class Adler32 -{ -public: - - Adler32(); - - virtual ~Adler32(); - - void reset(); - - void update(unsigned char b); - - void update(char *str); - - unsigned long getValue(); - -private: - - unsigned long value; - -}; - - -//######################################################################## -//# C R C 3 2 -//######################################################################## - -class Crc32 -{ -public: - - Crc32(); - - virtual ~Crc32(); - - void reset(); - - void update(unsigned char b); - - void update(char *str); - - void update(const std::vector &buf); - - unsigned long getValue(); - -private: - - unsigned long value; - -}; - - - - - - -//######################################################################## -//# G Z I P S T R E A M S -//######################################################################## - -class GzipFile -{ -public: - - /** - * - */ - GzipFile(); - - /** - * - */ - virtual ~GzipFile(); - - /** - * - */ - virtual void put(unsigned char ch); - - /** - * - */ - virtual void setData(const std::vector &str); - - /** - * - */ - virtual void clearData(); - - /** - * - */ - virtual std::vector &getData(); - - /** - * - */ - virtual std::string &getFileName(); - - /** - * - */ - virtual void setFileName(const std::string &val); - - - //###################### - //# U T I L I T Y - //###################### - - /** - * - */ - virtual bool readFile(const std::string &fName); - - //###################### - //# W R I T E - //###################### - - /** - * - */ - virtual bool write(); - - /** - * - */ - virtual bool writeBuffer(std::vector &outbuf); - - /** - * - */ - virtual bool writeFile(const std::string &fileName); - - - //###################### - //# R E A D - //###################### - - - /** - * - */ - virtual bool read(); - - /** - * - */ - virtual bool readBuffer(const std::vector &inbuf); - - /** - * - */ - virtual bool loadFile(const std::string &fileName); - - - -private: - - std::vector data; - std::string fileName; - - //debug messages - void error(char *fmt, ...); - void trace(char *fmt, ...); - - unsigned long crc; - - std::vector fileBuf; - unsigned long fileBufPos; - - bool getByte(unsigned char *ch); - bool getLong(unsigned long *val); - - bool putByte(unsigned char ch); - bool putLong(unsigned long val); - - int compressionMethod; -}; - - - - -//######################################################################## -//# Z I P F I L E -//######################################################################## - - -/** - * - */ -class ZipEntry -{ -public: - - /** - * - */ - ZipEntry(); - - /** - * - */ - ZipEntry(const std::string &fileName, - const std::string &comment); - - /** - * - */ - virtual ~ZipEntry(); - - /** - * - */ - virtual std::string getFileName(); - - /** - * - */ - virtual void setFileName(const std::string &val); - - /** - * - */ - virtual std::string getComment(); - - /** - * - */ - virtual void setComment(const std::string &val); - - /** - * - */ - virtual unsigned long getCompressedSize(); - - /** - * - */ - virtual int getCompressionMethod(); - - /** - * - */ - virtual void setCompressionMethod(int val); - - /** - * - */ - virtual std::vector &getCompressedData(); - - /** - * - */ - virtual void setCompressedData(const std::vector &val); - - /** - * - */ - virtual unsigned long getUncompressedSize(); - - /** - * - */ - virtual std::vector &getUncompressedData(); - - /** - * - */ - virtual void setUncompressedData(const std::vector &val); - - /** - * - */ - virtual void write(unsigned char ch); - - /** - * - */ - virtual void finish(); - - /** - * - */ - virtual unsigned long getCrc(); - - /** - * - */ - virtual void setCrc(unsigned long crc); - - /** - * - */ - virtual bool readFile(const std::string &fileNameArg, - const std::string &commentArg); - - /** - * - */ - virtual void setPosition(unsigned long val); - - /** - * - */ - virtual unsigned long getPosition(); - -private: - - unsigned long crc; - - std::string fileName; - std::string comment; - - int compressionMethod; - - std::vector compressedData; - std::vector uncompressedData; - - unsigned long position; -}; - - - - - - - - - -/** - * This class sits over the zlib and gzip code to - * implement a PKWare or Info-Zip .zip file reader and - * writer - */ -class ZipFile -{ -public: - - /** - * - */ - ZipFile(); - - /** - * - */ - virtual ~ZipFile(); - - //###################### - //# V A R I A B L E S - //###################### - - /** - * - */ - virtual void setComment(const std::string &val); - - /** - * - */ - virtual std::string getComment(); - - /** - * Return the list of entries currently in this file - */ - std::vector &getEntries(); - - - //###################### - //# U T I L I T Y - //###################### - - /** - * - */ - virtual ZipEntry *addFile(const std::string &fileNameArg, - const std::string &commentArg); - - /** - * - */ - virtual ZipEntry *newEntry(const std::string &fileNameArg, - const std::string &commentArg); - - //###################### - //# W R I T E - //###################### - - /** - * - */ - virtual bool write(); - - /** - * - */ - virtual bool writeBuffer(std::vector &outbuf); - - /** - * - */ - virtual bool writeFile(const std::string &fileName); - - - //###################### - //# R E A D - //###################### - - - /** - * - */ - virtual bool read(); - - /** - * - */ - virtual bool readBuffer(const std::vector &inbuf); - - /** - * - */ - virtual bool readFile(const std::string &fileName); - - -private: - - //debug messages - void error(char *fmt, ...); - void trace(char *fmt, ...); - - //# Private writing methods - - /** - * - */ - bool putLong(unsigned long val); - - /** - * - */ - bool putInt(unsigned int val); - - - /** - * - */ - bool putByte(unsigned char val); - - /** - * - */ - bool writeFileData(); - - /** - * - */ - bool writeCentralDirectory(); - - - //# Private reading methods - - /** - * - */ - bool getLong(unsigned long *val); - - /** - * - */ - bool getInt(unsigned int *val); - - /** - * - */ - bool getByte(unsigned char *val); - - /** - * - */ - bool readFileData(); - - /** - * - */ - bool readCentralDirectory(); - - - std::vector entries; - - std::vector fileBuf; - unsigned long fileBufPos; - - std::string comment; -}; - - - - - - -#endif /* __ZIPTOOL_H__ */ - - -//######################################################################## -//# E N D O F F I L E -//######################################################################## - +#ifndef __ZIPTOOL_H__ +#define __ZIPTOOL_H__ +/** + * This is intended to be a standalone, reduced capability + * implementation of Gzip and Zip functionality. Its + * targeted use case is for archiving and retrieving single files + * which use these encoding types. Being memory based and + * non-optimized, it is not useful in cases where very large + * archives are needed or where high performance is desired. + * However, it should hopefully work well for smaller, + * one-at-a-time tasks. What you get in return is the ability + * to drop these files into your project and remove the dependencies + * on ZLib and Info-Zip. Enjoy. + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2006 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +#include +#include + + +//######################################################################## +//# A D L E R 3 2 +//######################################################################## + +class Adler32 +{ +public: + + Adler32(); + + virtual ~Adler32(); + + void reset(); + + void update(unsigned char b); + + void update(char *str); + + unsigned long getValue(); + +private: + + unsigned long value; + +}; + + +//######################################################################## +//# C R C 3 2 +//######################################################################## + +class Crc32 +{ +public: + + Crc32(); + + virtual ~Crc32(); + + void reset(); + + void update(unsigned char b); + + void update(char *str); + + void update(const std::vector &buf); + + unsigned long getValue(); + +private: + + unsigned long value; + +}; + + + + + + +//######################################################################## +//# G Z I P S T R E A M S +//######################################################################## + +class GzipFile +{ +public: + + /** + * + */ + GzipFile(); + + /** + * + */ + virtual ~GzipFile(); + + /** + * + */ + virtual void put(unsigned char ch); + + /** + * + */ + virtual void setData(const std::vector &str); + + /** + * + */ + virtual void clearData(); + + /** + * + */ + virtual std::vector &getData(); + + /** + * + */ + virtual std::string &getFileName(); + + /** + * + */ + virtual void setFileName(const std::string &val); + + + //###################### + //# U T I L I T Y + //###################### + + /** + * + */ + virtual bool readFile(const std::string &fName); + + //###################### + //# W R I T E + //###################### + + /** + * + */ + virtual bool write(); + + /** + * + */ + virtual bool writeBuffer(std::vector &outbuf); + + /** + * + */ + virtual bool writeFile(const std::string &fileName); + + + //###################### + //# R E A D + //###################### + + + /** + * + */ + virtual bool read(); + + /** + * + */ + virtual bool readBuffer(const std::vector &inbuf); + + /** + * + */ + virtual bool loadFile(const std::string &fileName); + + + +private: + + std::vector data; + std::string fileName; + + //debug messages + void error(char *fmt, ...); + void trace(char *fmt, ...); + + unsigned long crc; + + std::vector fileBuf; + unsigned long fileBufPos; + + bool getByte(unsigned char *ch); + bool getLong(unsigned long *val); + + bool putByte(unsigned char ch); + bool putLong(unsigned long val); + + int compressionMethod; +}; + + + + +//######################################################################## +//# Z I P F I L E +//######################################################################## + + +/** + * + */ +class ZipEntry +{ +public: + + /** + * + */ + ZipEntry(); + + /** + * + */ + ZipEntry(const std::string &fileName, + const std::string &comment); + + /** + * + */ + virtual ~ZipEntry(); + + /** + * + */ + virtual std::string getFileName(); + + /** + * + */ + virtual void setFileName(const std::string &val); + + /** + * + */ + virtual std::string getComment(); + + /** + * + */ + virtual void setComment(const std::string &val); + + /** + * + */ + virtual unsigned long getCompressedSize(); + + /** + * + */ + virtual int getCompressionMethod(); + + /** + * + */ + virtual void setCompressionMethod(int val); + + /** + * + */ + virtual std::vector &getCompressedData(); + + /** + * + */ + virtual void setCompressedData(const std::vector &val); + + /** + * + */ + virtual unsigned long getUncompressedSize(); + + /** + * + */ + virtual std::vector &getUncompressedData(); + + /** + * + */ + virtual void setUncompressedData(const std::vector &val); + + /** + * + */ + virtual void write(unsigned char ch); + + /** + * + */ + virtual void finish(); + + /** + * + */ + virtual unsigned long getCrc(); + + /** + * + */ + virtual void setCrc(unsigned long crc); + + /** + * + */ + virtual bool readFile(const std::string &fileNameArg, + const std::string &commentArg); + + /** + * + */ + virtual void setPosition(unsigned long val); + + /** + * + */ + virtual unsigned long getPosition(); + +private: + + unsigned long crc; + + std::string fileName; + std::string comment; + + int compressionMethod; + + std::vector compressedData; + std::vector uncompressedData; + + unsigned long position; +}; + + + + + + + + + +/** + * This class sits over the zlib and gzip code to + * implement a PKWare or Info-Zip .zip file reader and + * writer + */ +class ZipFile +{ +public: + + /** + * + */ + ZipFile(); + + /** + * + */ + virtual ~ZipFile(); + + //###################### + //# V A R I A B L E S + //###################### + + /** + * + */ + virtual void setComment(const std::string &val); + + /** + * + */ + virtual std::string getComment(); + + /** + * Return the list of entries currently in this file + */ + std::vector &getEntries(); + + + //###################### + //# U T I L I T Y + //###################### + + /** + * + */ + virtual ZipEntry *addFile(const std::string &fileNameArg, + const std::string &commentArg); + + /** + * + */ + virtual ZipEntry *newEntry(const std::string &fileNameArg, + const std::string &commentArg); + + //###################### + //# W R I T E + //###################### + + /** + * + */ + virtual bool write(); + + /** + * + */ + virtual bool writeBuffer(std::vector &outbuf); + + /** + * + */ + virtual bool writeFile(const std::string &fileName); + + + //###################### + //# R E A D + //###################### + + + /** + * + */ + virtual bool read(); + + /** + * + */ + virtual bool readBuffer(const std::vector &inbuf); + + /** + * + */ + virtual bool readFile(const std::string &fileName); + + +private: + + //debug messages + void error(char *fmt, ...); + void trace(char *fmt, ...); + + //# Private writing methods + + /** + * + */ + bool putLong(unsigned long val); + + /** + * + */ + bool putInt(unsigned int val); + + + /** + * + */ + bool putByte(unsigned char val); + + /** + * + */ + bool writeFileData(); + + /** + * + */ + bool writeCentralDirectory(); + + + //# Private reading methods + + /** + * + */ + bool getLong(unsigned long *val); + + /** + * + */ + bool getInt(unsigned int *val); + + /** + * + */ + bool getByte(unsigned char *val); + + /** + * + */ + bool readFileData(); + + /** + * + */ + bool readCentralDirectory(); + + + std::vector entries; + + std::vector fileBuf; + unsigned long fileBufPos; + + std::string comment; +}; + + + + + + +#endif /* __ZIPTOOL_H__ */ + + +//######################################################################## +//# E N D O F F I L E +//######################################################################## + diff --git a/src/dom/work/testxpath.cpp b/src/dom/work/testxpath.cpp index d724600a7..b8551f2de 100644 --- a/src/dom/work/testxpath.cpp +++ b/src/dom/work/testxpath.cpp @@ -1,1416 +1,1416 @@ -/** - * Phoebe DOM Implementation. - * - * This is a C++ approximation of the W3C DOM model, which follows - * fairly closely the specifications in the various .idl files, copies of - * which are provided for reference. Most important is this one: - * - * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html - * - * Authors: - * Bob Jamison - * - * Copyright (C) 2005 Bob Jamison - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - - -#include "dom.h" -#include "lsimpl.h" -#include "xpathparser.h" - -#include - -using namespace org::w3c::dom; -using namespace org::w3c::dom::xpath; - - -typedef struct -{ - char *xpathStr; - char *desc; - char *xml; -} XpathTest; - -XpathTest xpathTests[] = -{ - -{ -"/AAA", -"Select the root element AAA", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"/AAA/CCC", -"Select all elements CCC which are children of the root element AAA", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"/AAA/DDD/BBB", -"Select all elements BBB which are children of DDD which are children of the root element AAA", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//BBB", -"Select all elements BBB", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//DDD/BBB", -"Select all elements BBB which are children of DDD", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"/AAA/CCC/DDD/*", -"Select all elements enclosed by elements /AAA/CCC/DDD", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"/*/*/*/BBB", -"Select all elements BBB which have 3 ancestors", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//*", -"Select all elements", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"/AAA/BBB[1]", -"Select the first BBB child of element AAA", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"/AAA/BBB[last()]", -"Select the last BBB child of element AAA", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//@id", -"Select all attributes @id", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//BBB[@id]", -"Select BBB elements which have attribute id", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//BBB[@name]", -"Select BBB elements which have attribute name", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//BBB[@*]", -"Select BBB elements which have any attribute", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//BBB[not(@*)]", -"Select BBB elements without an attribute", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//BBB[@id='b1']", -"Select BBB elements which have attribute id with value b1", -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//BBB[@name='bbb']", -"Select BBB elements which have attribute name with value 'bbb'", -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//BBB[normalize-space(@name)='bbb']", -"Select BBB elements which have attribute name with value bbb, leading and trailing spaces are removed before comparison", -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//*[count(BBB)=2]", -"Select elements which have two children BBB", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//*[count(*)=2]", -"Select elements which have 2 children", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//*[count(*)=3]", -"Select elements which have 3 children", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//*[name()='BBB']", -"Select all elements with name BBB, equivalent with //BBB", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//*[starts-with(name(),'B')]", -"Select all elements name of which starts with letter B", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//*[contains(name(),'C')]", -"Select all elements name of which contain letter C", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//*[string-length(name()) = 3]", -"Select elements with three-letter name", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//*[string-length(name()) < 3]", -"Select elements name of which has one or two characters", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//*[string-length(name()) > 3]", -"Select elements with name longer than three characters", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//CCC | //BBB", -"Select all elements CCC and BBB", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"/AAA/EEE | //BBB", -"Select all elements BBB and elements EEE which are children of root element AAA", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"/AAA/EEE | //DDD/CCC | /AAA | //BBB", -"Number of combinations is not restricted", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"/AAA", -"Equivalent of /child::AAA", -" \n" -" \n" -" \n" -" \n" -}, - -{ -"/child::AAA", -"Equivalent of /AAA", -" \n" -" \n" -" \n" -" \n" -}, - -{ -"/AAA/BBB", -"Equivalent of /child::AAA/child::BBB", -" \n" -" \n" -" \n" -" \n" -}, - -{ -"/child::AAA/child::BBB", -"Equivalent of /AAA/BBB", -" \n" -" \n" -" \n" -" \n" -}, - -{ -"/child::AAA/BBB", -"Both possibilities can be combined", -" \n" -" \n" -" \n" -" \n" -}, - -{ -"/descendant::*", -"Select all descendants of document root and therefore all elements", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"/AAA/BBB/descendant::*", -"Select all descendants of /AAA/BBB", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//CCC/descendant::*", -"Select all elements which have CCC among its ancestors", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//CCC/descendant::DDD", -"Select elements DDD which have CCC among its ancestors", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//DDD/parent::*", -"Select all parents of DDD element", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"/AAA/BBB/DDD/CCC/EEE/ancestor::*", -"Select all elements given in this absolute path", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//FFF/ancestor::*", -"Select ancestors of FFF element", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"/AAA/BBB/following-sibling::*", -"The following-sibling axis contains all the following siblings of the context node.", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//CCC/following-sibling::*", -"The following-sibling axis contains all the following siblings of the context node.", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"/AAA/XXX/preceding-sibling::*", -"The preceding-sibling axis contains all the preceding siblings of the context node.", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//CCC/preceding-sibling::*", -"The preceding-sibling axis contains all the preceding siblings of the context node", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"/AAA/XXX/following::*", -"The following axis contains all nodes in the same document as the context " -"node that are after the context node in document order, " -"excluding any descendants and excluding attribute nodes and namespace nodes.", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//ZZZ/following::*", -"The following axis contains all nodes in the same document as the context " -"node that are after the context node in document order, " -"excluding any descendants and excluding attribute nodes and namespace nodes.", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"/AAA/XXX/preceding::*", -"The preceding axis contains all nodes in the same document as the " -"context node that are before the context node in document order, " -"excluding any ancestors and excluding attribute nodes and namespace nodes", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//GGG/preceding::*", -"The preceding axis contains all nodes in the same document as the " -"context node that are before the context node in document order, " -"excluding any ancestors and excluding attribute nodes and namespace nodes", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"/AAA/XXX/descendant-or-self::*", -"The descendant-or-self axis contains the " -"context node and the descendants of the context node", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//CCC/descendant-or-self::*", -"The descendant-or-self axis contains the " -"context node and the descendants of the context node", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"/AAA/XXX/DDD/EEE/ancestor-or-self::*", -"The ancestor-or-self axis contains the context node and the " -"ancestors of the context node; thus, the ancestor-or-self axis " -"will always include the root node.", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//GGG/ancestor-or-self::*", -"The ancestor-or-self axis contains the context node and the " -"ancestors of the context node; thus, the ancestor-or-self axis " -"will always include the root node.", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//GGG/ancestor::*", -"The ancestor, descendant, following, preceding and self axes partition a document", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//GGG/descendant::*", -"The ancestor, descendant, following, preceding and self axes partition a document", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//GGG/following::*", -"The ancestor, descendant, following, preceding and self axes partition a document", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//GGG/preceding::*", -"The ancestor, descendant, following, preceding and self axes partition a document", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//GGG/self::*", -"The ancestor, descendant, following, preceding and self axes partition a document", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//GGG/ancestor::* | //GGG/descendant::* | //GGG/following::* | //GGG/preceding::* | //GGG/self::*", -"The ancestor, descendant, following, preceding and self axes partition a document", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//BBB[position() mod 2 = 0 ]", -"Select even BBB elements", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//BBB[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]", -"Select middle BBB element(s)", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ -"//CCC[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]", -"Select middle CCC element(s)", -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -}, - -{ //end data -NULL, -NULL, -NULL, -} - -}; - - - -bool doStringTest(char *str) -{ - XPathParser xp; - xp.setDebug(true); - - if (!xp.parse(str)) - return false; - - - return true; -} - - - -bool doStringTests() -{ - for (XpathTest *xpt = xpathTests ; xpt->xpathStr ; xpt++) - { - if (!doStringTest(xpt->xpathStr)) - return false; - } - return true; -} - -void dumpDoc(Document *doc) -{ - ls::DOMImplementationLSImpl domImpl; - ls::LSSerializer &serializer = domImpl.createLSSerializer(); - ls::LSOutput output = domImpl.createLSOutput(); - io::StdWriter writer; - output.setCharacterStream(&writer); - serializer.write(doc, output); -} - - -bool doXmlTest(XpathTest *xpt) -{ - //### READ - ls::DOMImplementationLSImpl domImpl; - ls::LSInput input = domImpl.createLSInput(); - ls::LSParser &parser = domImpl.createLSParser(0, ""); - input.setStringData(xpt->xml); - Document *doc = parser.parse(input); - - //### XPATH - XPathParser xp; - xp.setDebug(true); - - org::w3c::dom::NodeList list = xp.evaluate(doc, xpt->xpathStr); - for (unsigned int i=0 ; ixpathStr ; xpt++) - { - if (!doXmlTest(xpt)) - return false; - } - return true; -} - -bool doTests() -{ - /* - if (!doStringTests()) - { - printf("## Failed string tests\n"); - return false; - } - */ - if (!doXmlTests()) - { - printf("## Failed xml tests\n"); - return false; - } - return true; -} - - - -int main(int argc, char **argv) -{ - doTests(); - return 0; -} +/** + * Phoebe DOM Implementation. + * + * This is a C++ approximation of the W3C DOM model, which follows + * fairly closely the specifications in the various .idl files, copies of + * which are provided for reference. Most important is this one: + * + * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2005 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + + +#include "dom.h" +#include "lsimpl.h" +#include "xpathparser.h" + +#include + +using namespace org::w3c::dom; +using namespace org::w3c::dom::xpath; + + +typedef struct +{ + char *xpathStr; + char *desc; + char *xml; +} XpathTest; + +XpathTest xpathTests[] = +{ + +{ +"/AAA", +"Select the root element AAA", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"/AAA/CCC", +"Select all elements CCC which are children of the root element AAA", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"/AAA/DDD/BBB", +"Select all elements BBB which are children of DDD which are children of the root element AAA", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//BBB", +"Select all elements BBB", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//DDD/BBB", +"Select all elements BBB which are children of DDD", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"/AAA/CCC/DDD/*", +"Select all elements enclosed by elements /AAA/CCC/DDD", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"/*/*/*/BBB", +"Select all elements BBB which have 3 ancestors", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//*", +"Select all elements", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"/AAA/BBB[1]", +"Select the first BBB child of element AAA", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"/AAA/BBB[last()]", +"Select the last BBB child of element AAA", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//@id", +"Select all attributes @id", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//BBB[@id]", +"Select BBB elements which have attribute id", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//BBB[@name]", +"Select BBB elements which have attribute name", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//BBB[@*]", +"Select BBB elements which have any attribute", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//BBB[not(@*)]", +"Select BBB elements without an attribute", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//BBB[@id='b1']", +"Select BBB elements which have attribute id with value b1", +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//BBB[@name='bbb']", +"Select BBB elements which have attribute name with value 'bbb'", +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//BBB[normalize-space(@name)='bbb']", +"Select BBB elements which have attribute name with value bbb, leading and trailing spaces are removed before comparison", +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//*[count(BBB)=2]", +"Select elements which have two children BBB", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//*[count(*)=2]", +"Select elements which have 2 children", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//*[count(*)=3]", +"Select elements which have 3 children", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//*[name()='BBB']", +"Select all elements with name BBB, equivalent with //BBB", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//*[starts-with(name(),'B')]", +"Select all elements name of which starts with letter B", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//*[contains(name(),'C')]", +"Select all elements name of which contain letter C", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//*[string-length(name()) = 3]", +"Select elements with three-letter name", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//*[string-length(name()) < 3]", +"Select elements name of which has one or two characters", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//*[string-length(name()) > 3]", +"Select elements with name longer than three characters", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//CCC | //BBB", +"Select all elements CCC and BBB", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"/AAA/EEE | //BBB", +"Select all elements BBB and elements EEE which are children of root element AAA", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"/AAA/EEE | //DDD/CCC | /AAA | //BBB", +"Number of combinations is not restricted", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"/AAA", +"Equivalent of /child::AAA", +" \n" +" \n" +" \n" +" \n" +}, + +{ +"/child::AAA", +"Equivalent of /AAA", +" \n" +" \n" +" \n" +" \n" +}, + +{ +"/AAA/BBB", +"Equivalent of /child::AAA/child::BBB", +" \n" +" \n" +" \n" +" \n" +}, + +{ +"/child::AAA/child::BBB", +"Equivalent of /AAA/BBB", +" \n" +" \n" +" \n" +" \n" +}, + +{ +"/child::AAA/BBB", +"Both possibilities can be combined", +" \n" +" \n" +" \n" +" \n" +}, + +{ +"/descendant::*", +"Select all descendants of document root and therefore all elements", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"/AAA/BBB/descendant::*", +"Select all descendants of /AAA/BBB", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//CCC/descendant::*", +"Select all elements which have CCC among its ancestors", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//CCC/descendant::DDD", +"Select elements DDD which have CCC among its ancestors", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//DDD/parent::*", +"Select all parents of DDD element", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"/AAA/BBB/DDD/CCC/EEE/ancestor::*", +"Select all elements given in this absolute path", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//FFF/ancestor::*", +"Select ancestors of FFF element", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"/AAA/BBB/following-sibling::*", +"The following-sibling axis contains all the following siblings of the context node.", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//CCC/following-sibling::*", +"The following-sibling axis contains all the following siblings of the context node.", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"/AAA/XXX/preceding-sibling::*", +"The preceding-sibling axis contains all the preceding siblings of the context node.", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//CCC/preceding-sibling::*", +"The preceding-sibling axis contains all the preceding siblings of the context node", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"/AAA/XXX/following::*", +"The following axis contains all nodes in the same document as the context " +"node that are after the context node in document order, " +"excluding any descendants and excluding attribute nodes and namespace nodes.", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//ZZZ/following::*", +"The following axis contains all nodes in the same document as the context " +"node that are after the context node in document order, " +"excluding any descendants and excluding attribute nodes and namespace nodes.", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"/AAA/XXX/preceding::*", +"The preceding axis contains all nodes in the same document as the " +"context node that are before the context node in document order, " +"excluding any ancestors and excluding attribute nodes and namespace nodes", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//GGG/preceding::*", +"The preceding axis contains all nodes in the same document as the " +"context node that are before the context node in document order, " +"excluding any ancestors and excluding attribute nodes and namespace nodes", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"/AAA/XXX/descendant-or-self::*", +"The descendant-or-self axis contains the " +"context node and the descendants of the context node", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//CCC/descendant-or-self::*", +"The descendant-or-self axis contains the " +"context node and the descendants of the context node", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"/AAA/XXX/DDD/EEE/ancestor-or-self::*", +"The ancestor-or-self axis contains the context node and the " +"ancestors of the context node; thus, the ancestor-or-self axis " +"will always include the root node.", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//GGG/ancestor-or-self::*", +"The ancestor-or-self axis contains the context node and the " +"ancestors of the context node; thus, the ancestor-or-self axis " +"will always include the root node.", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//GGG/ancestor::*", +"The ancestor, descendant, following, preceding and self axes partition a document", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//GGG/descendant::*", +"The ancestor, descendant, following, preceding and self axes partition a document", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//GGG/following::*", +"The ancestor, descendant, following, preceding and self axes partition a document", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//GGG/preceding::*", +"The ancestor, descendant, following, preceding and self axes partition a document", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//GGG/self::*", +"The ancestor, descendant, following, preceding and self axes partition a document", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//GGG/ancestor::* | //GGG/descendant::* | //GGG/following::* | //GGG/preceding::* | //GGG/self::*", +"The ancestor, descendant, following, preceding and self axes partition a document", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//BBB[position() mod 2 = 0 ]", +"Select even BBB elements", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//BBB[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]", +"Select middle BBB element(s)", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ +"//CCC[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]", +"Select middle CCC element(s)", +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +}, + +{ //end data +NULL, +NULL, +NULL, +} + +}; + + + +bool doStringTest(char *str) +{ + XPathParser xp; + xp.setDebug(true); + + if (!xp.parse(str)) + return false; + + + return true; +} + + + +bool doStringTests() +{ + for (XpathTest *xpt = xpathTests ; xpt->xpathStr ; xpt++) + { + if (!doStringTest(xpt->xpathStr)) + return false; + } + return true; +} + +void dumpDoc(Document *doc) +{ + ls::DOMImplementationLSImpl domImpl; + ls::LSSerializer &serializer = domImpl.createLSSerializer(); + ls::LSOutput output = domImpl.createLSOutput(); + io::StdWriter writer; + output.setCharacterStream(&writer); + serializer.write(doc, output); +} + + +bool doXmlTest(XpathTest *xpt) +{ + //### READ + ls::DOMImplementationLSImpl domImpl; + ls::LSInput input = domImpl.createLSInput(); + ls::LSParser &parser = domImpl.createLSParser(0, ""); + input.setStringData(xpt->xml); + Document *doc = parser.parse(input); + + //### XPATH + XPathParser xp; + xp.setDebug(true); + + org::w3c::dom::NodeList list = xp.evaluate(doc, xpt->xpathStr); + for (unsigned int i=0 ; ixpathStr ; xpt++) + { + if (!doXmlTest(xpt)) + return false; + } + return true; +} + +bool doTests() +{ + /* + if (!doStringTests()) + { + printf("## Failed string tests\n"); + return false; + } + */ + if (!doXmlTests()) + { + printf("## Failed xml tests\n"); + return false; + } + return true; +} + + + +int main(int argc, char **argv) +{ + doTests(); + return 0; +} diff --git a/src/dom/work/testzip.cpp b/src/dom/work/testzip.cpp index 5a1f38960..9281d37ce 100644 --- a/src/dom/work/testzip.cpp +++ b/src/dom/work/testzip.cpp @@ -1,65 +1,65 @@ -/** - * Phoebe DOM Implementation. - * - * This is a C++ approximation of the W3C DOM model, which follows - * fairly closely the specifications in the various .idl files, copies of - * which are provided for reference. Most important is this one: - * - * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html - * - * Authors: - * Bob Jamison - * - * Copyright (C) 2006 Bob Jamison - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include - - -#include "io/uristream.h" -#include "util/ziptool.h" - - - -bool doTest() -{ - org::w3c::dom::io::UriInputStream ins("file:work/test.odg"); - - std::vectorinbuf; - - while (true) - { - int ch = ins.get(); - if (ch < 0) - break; - inbuf.push_back(ch); - } - ZipFile zf; - if (!zf.readBuffer(inbuf)) - { - return false; - } - return true; -} - - -int main(int argc, char **argv) -{ - doTest(); -} - - +/** + * Phoebe DOM Implementation. + * + * This is a C++ approximation of the W3C DOM model, which follows + * fairly closely the specifications in the various .idl files, copies of + * which are provided for reference. Most important is this one: + * + * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2006 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include + + +#include "io/uristream.h" +#include "util/ziptool.h" + + + +bool doTest() +{ + org::w3c::dom::io::UriInputStream ins("file:work/test.odg"); + + std::vectorinbuf; + + while (true) + { + int ch = ins.get(); + if (ch < 0) + break; + inbuf.push_back(ch); + } + ZipFile zf; + if (!zf.readBuffer(inbuf)) + { + return false; + } + return true; +} + + +int main(int argc, char **argv) +{ + doTest(); +} + + diff --git a/src/dom/work/xpathtests.cpp b/src/dom/work/xpathtests.cpp index 65b832e71..f34c62c80 100644 --- a/src/dom/work/xpathtests.cpp +++ b/src/dom/work/xpathtests.cpp @@ -1,1290 +1,1290 @@ -/** - * Phoebe DOM Implementation. - * - * This is a C++ approximation of the W3C DOM model, which follows - * fairly closely the specifications in the various .idl files, copies of - * which are provided for reference. Most important is this one: - * - * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html - * - * Authors: - * Bob Jamison - * - * Copyright (C) 2005 Bob Jamison - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - - -typedef struct -{ - char *xpathStr; - char *desc; - char *xml; -} XpathTest; - -XpathTest xpathTests[] = -{ - -{ -"/AAA", -"Select the root element AAA", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"/AAA/CCC", -"Select all elements CCC which are children of the root element AAA", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"/AAA/DDD/BBB", -"Select all elements BBB which are children of DDD which are children of the root element AAA", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -"//BBB", -}, - -{ -"Select all elements BBB", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//DDD/BBB", -"Select all elements BBB which are children of DDD", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"/AAA/CCC/DDD/*", -"Select all elements enclosed by elements /AAA/CCC/DDD", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"/*/*/*/BBB", -"Select all elements BBB which have 3 ancestors", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//*", -"Select all elements", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"/AAA/BBB[1]", -"Select the first BBB child of element AAA", -" " -" " -" " -" " -" " -" " -}, - -{ -"/AAA/BBB[last()]", -"Select the last BBB child of element AAA", -" " -" " -" " -" " -" " -" " -}, - -{ -"//@id", -"Select all attributes @id", -" " -" " -" " -" " -" " -" " -}, - -{ -"//BBB[@id]", -"Select BBB elements which have attribute id", -" " -" " -" " -" " -" " -" " -}, - -{ -"//BBB[@name]", -"Select BBB elements which have attribute name", -" " -" " -" " -" " -" " -" " -}, - -{ -"//BBB[@*]", -"Select BBB elements which have any attribute", -" " -" " -" " -" " -" " -" " -}, - -{ -"//BBB[not(@*)]", -"Select BBB elements without an attribute", -" " -" " -" " -" " -" " -" " -}, - -{ -"//BBB[@id='b1']", -"Select BBB elements which have attribute id with value b1", -" " -" " -" " -" " -" " -}, - -{ -"//BBB[@name='bbb']", -"Select BBB elements which have attribute name with value 'bbb'", -" " -" " -" " -" " -" " -}, - -{ -"//BBB[normalize-space(@name)='bbb']", -"Select BBB elements which have attribute name with value bbb, leading and trailing spaces are removed before comparison", -" " -" " -" " -" " -" " -}, - -{ -"//*[count(BBB)=2]", -"Select elements which have two children BBB", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//*[count(*)=2]", -"Select elements which have 2 children", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//*[count(*)=3]", -"Select elements which have 3 children", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//*[name()='BBB']", -"Select all elements with name BBB, equivalent with //BBB", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//*[starts-with(name(),'B')]", -"Select all elements name of which starts with letter B", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//*[contains(name(),'C')]", -"Select all elements name of which contain letter C", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//*[string-length(name()) = 3]", -"Select elements with three-letter name", -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//*[string-length(name()) < 3]", -"Select elements name of which has one or two characters", -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//*[string-length(name()) > 3]", -"Select elements with name longer than three characters", -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//CCC | //BBB", -"Select all elements CCC and BBB", -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"/AAA/EEE | //BBB", -"Select all elements BBB and elements EEE which are children of root element AAA", -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"/AAA/EEE | //DDD/CCC | /AAA | //BBB", -"Number of combinations is not restricted", -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"/AAA", -"Equivalent of /child::AAA", -" " -" " -" " -" " -}, - -{ -"/child::AAA", -"Equivalent of /AAA", -" " -" " -" " -" " -}, - -{ -"/AAA/BBB", -"Equivalent of /child::AAA/child::BBB", -" " -" " -" " -" " -}, - -{ -"/child::AAA/child::BBB", -"Equivalent of /AAA/BBB", -" " -" " -" " -" " -}, - -{ -"/child::AAA/BBB", -"Both possibilities can be combined", -" " -" " -" " -" " -}, - -{ -"/descendant::*", -"Select all descendants of document root and therefore all elements", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"/AAA/BBB/descendant::*", -"Select all descendants of /AAA/BBB", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//CCC/descendant::*", -"Select all elements which have CCC among its ancestors", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//CCC/descendant::DDD", -"Select elements DDD which have CCC among its ancestors", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//DDD/parent::*", -"Select all parents of DDD element", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"/AAA/BBB/DDD/CCC/EEE/ancestor::*", -"Select all elements given in this absolute path", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//FFF/ancestor::*", -"Select ancestors of FFF element", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"/AAA/BBB/following-sibling::*", -"The following-sibling axis contains all the following siblings of the context node.", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//CCC/following-sibling::*", -"The following-sibling axis contains all the following siblings of the context node.", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"/AAA/XXX/preceding-sibling::*", -"The preceding-sibling axis contains all the preceding siblings of the context node.", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//CCC/preceding-sibling::*", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"/AAA/XXX/following::*", -"Description", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//ZZZ/following::*", -"Description", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"/AAA/XXX/preceding::*", -"Description", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//GGG/preceding::*", -"Description", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"/AAA/XXX/descendant-or-self::*", -"Description", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//CCC/descendant-or-self::*", -"Description", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"/AAA/XXX/DDD/EEE/ancestor-or-self::*", -"Description", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//GGG/ancestor-or-self::*", -"Description", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//GGG/ancestor::*", -"Description", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//GGG/descendant::*", -"Description", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//GGG/following::*", -"Description", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//GGG/preceding::*", -"Description", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//GGG/self::*", -"Description", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//GGG/ancestor::* | //GGG/descendant::* | //GGG/following::* | //GGG/preceding::* | //GGG/self::*", -"description", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//BBB[position() mod 2 = 0 ]", -"Select even BBB elements", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//BBB[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]", -"Select middle BBB element(s)", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -}, - -{ -"//CCC[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]", -"Select middle CCC element(s)", -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -} - -}; //end - - +/** + * Phoebe DOM Implementation. + * + * This is a C++ approximation of the W3C DOM model, which follows + * fairly closely the specifications in the various .idl files, copies of + * which are provided for reference. Most important is this one: + * + * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2005 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + + +typedef struct +{ + char *xpathStr; + char *desc; + char *xml; +} XpathTest; + +XpathTest xpathTests[] = +{ + +{ +"/AAA", +"Select the root element AAA", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"/AAA/CCC", +"Select all elements CCC which are children of the root element AAA", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"/AAA/DDD/BBB", +"Select all elements BBB which are children of DDD which are children of the root element AAA", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +"//BBB", +}, + +{ +"Select all elements BBB", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//DDD/BBB", +"Select all elements BBB which are children of DDD", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"/AAA/CCC/DDD/*", +"Select all elements enclosed by elements /AAA/CCC/DDD", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"/*/*/*/BBB", +"Select all elements BBB which have 3 ancestors", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//*", +"Select all elements", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"/AAA/BBB[1]", +"Select the first BBB child of element AAA", +" " +" " +" " +" " +" " +" " +}, + +{ +"/AAA/BBB[last()]", +"Select the last BBB child of element AAA", +" " +" " +" " +" " +" " +" " +}, + +{ +"//@id", +"Select all attributes @id", +" " +" " +" " +" " +" " +" " +}, + +{ +"//BBB[@id]", +"Select BBB elements which have attribute id", +" " +" " +" " +" " +" " +" " +}, + +{ +"//BBB[@name]", +"Select BBB elements which have attribute name", +" " +" " +" " +" " +" " +" " +}, + +{ +"//BBB[@*]", +"Select BBB elements which have any attribute", +" " +" " +" " +" " +" " +" " +}, + +{ +"//BBB[not(@*)]", +"Select BBB elements without an attribute", +" " +" " +" " +" " +" " +" " +}, + +{ +"//BBB[@id='b1']", +"Select BBB elements which have attribute id with value b1", +" " +" " +" " +" " +" " +}, + +{ +"//BBB[@name='bbb']", +"Select BBB elements which have attribute name with value 'bbb'", +" " +" " +" " +" " +" " +}, + +{ +"//BBB[normalize-space(@name)='bbb']", +"Select BBB elements which have attribute name with value bbb, leading and trailing spaces are removed before comparison", +" " +" " +" " +" " +" " +}, + +{ +"//*[count(BBB)=2]", +"Select elements which have two children BBB", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//*[count(*)=2]", +"Select elements which have 2 children", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//*[count(*)=3]", +"Select elements which have 3 children", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//*[name()='BBB']", +"Select all elements with name BBB, equivalent with //BBB", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//*[starts-with(name(),'B')]", +"Select all elements name of which starts with letter B", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//*[contains(name(),'C')]", +"Select all elements name of which contain letter C", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//*[string-length(name()) = 3]", +"Select elements with three-letter name", +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//*[string-length(name()) < 3]", +"Select elements name of which has one or two characters", +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//*[string-length(name()) > 3]", +"Select elements with name longer than three characters", +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//CCC | //BBB", +"Select all elements CCC and BBB", +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"/AAA/EEE | //BBB", +"Select all elements BBB and elements EEE which are children of root element AAA", +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"/AAA/EEE | //DDD/CCC | /AAA | //BBB", +"Number of combinations is not restricted", +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"/AAA", +"Equivalent of /child::AAA", +" " +" " +" " +" " +}, + +{ +"/child::AAA", +"Equivalent of /AAA", +" " +" " +" " +" " +}, + +{ +"/AAA/BBB", +"Equivalent of /child::AAA/child::BBB", +" " +" " +" " +" " +}, + +{ +"/child::AAA/child::BBB", +"Equivalent of /AAA/BBB", +" " +" " +" " +" " +}, + +{ +"/child::AAA/BBB", +"Both possibilities can be combined", +" " +" " +" " +" " +}, + +{ +"/descendant::*", +"Select all descendants of document root and therefore all elements", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"/AAA/BBB/descendant::*", +"Select all descendants of /AAA/BBB", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//CCC/descendant::*", +"Select all elements which have CCC among its ancestors", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//CCC/descendant::DDD", +"Select elements DDD which have CCC among its ancestors", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//DDD/parent::*", +"Select all parents of DDD element", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"/AAA/BBB/DDD/CCC/EEE/ancestor::*", +"Select all elements given in this absolute path", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//FFF/ancestor::*", +"Select ancestors of FFF element", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"/AAA/BBB/following-sibling::*", +"The following-sibling axis contains all the following siblings of the context node.", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//CCC/following-sibling::*", +"The following-sibling axis contains all the following siblings of the context node.", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"/AAA/XXX/preceding-sibling::*", +"The preceding-sibling axis contains all the preceding siblings of the context node.", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//CCC/preceding-sibling::*", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"/AAA/XXX/following::*", +"Description", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//ZZZ/following::*", +"Description", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"/AAA/XXX/preceding::*", +"Description", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//GGG/preceding::*", +"Description", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"/AAA/XXX/descendant-or-self::*", +"Description", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//CCC/descendant-or-self::*", +"Description", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"/AAA/XXX/DDD/EEE/ancestor-or-self::*", +"Description", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//GGG/ancestor-or-self::*", +"Description", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//GGG/ancestor::*", +"Description", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//GGG/descendant::*", +"Description", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//GGG/following::*", +"Description", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//GGG/preceding::*", +"Description", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//GGG/self::*", +"Description", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//GGG/ancestor::* | //GGG/descendant::* | //GGG/following::* | //GGG/preceding::* | //GGG/self::*", +"description", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//BBB[position() mod 2 = 0 ]", +"Select even BBB elements", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//BBB[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]", +"Select middle BBB element(s)", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +}, + +{ +"//CCC[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]", +"Select middle CCC element(s)", +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +} + +}; //end + + diff --git a/src/dom/xmlreader.cpp b/src/dom/xmlreader.cpp index c36eec961..fbacf48f4 100644 --- a/src/dom/xmlreader.cpp +++ b/src/dom/xmlreader.cpp @@ -1,987 +1,987 @@ -/** - * Phoebe DOM Implementation. - * - * This is a C++ approximation of the W3C DOM model, which follows - * fairly closely the specifications in the various .idl files, copies of - * which are provided for reference. Most important is this one: - * - * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html - * - * Authors: - * Bob Jamison - * - * Copyright (C) 2005 Bob Jamison - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - - -#include "xmlreader.h" -#include "charclass.h" -#include "domimpl.h" -#include "svg/svgimpl.h" - -#include -#include - -namespace org -{ -namespace w3c -{ -namespace dom -{ - - -//######################################################################### -//# E N T I T Y T A B L E -//######################################################################### -struct EntityInfo -{ - char *escape; - int escapeLength; - char *value; -}; - - -static EntityInfo entityTable[] = -{ - { "&" , 5 , "&" }, - { "<" , 4 , "<" }, - { ">" , 4 , ">" }, - { "'" , 6 , "'" }, - { """ , 6 , "\"" }, - { NULL , 0 , "\0" } -}; - - - -//######################################################################### -//# M E S S A G E S -//######################################################################### - - -/** - * - */ -void XmlReader::error(char *fmt, ...) -{ - va_list args; - fprintf(stderr, "XmlReader:error at line %d, column %d:", lineNr, colNr); - va_start(args, fmt); - vfprintf(stderr, fmt, args); - va_end(args) ; - fprintf(stderr, "\n"); -} - - - -//######################################################################### -//# U T I L I T Y -//######################################################################### - -static void trim(DOMString &str) -{ - int len = str.size(); - if (len<1) - return; - - int start = 0; - int end = 0; - for (start=0 ; start126) - break; - } - for (end=len-1 ; end>=0 ; end--) - { - int ch = str[end]; - if (ch<=' ' || ch>126) - break; - } - if (start= len) - return -1; - int ch = parsebuf[p]; - //printf("%c", ch); - if (ch == '\n' || ch == '\r') - { - colNr = 0; - lineNr++; - } - else - colNr++; - return ch; -} - -/** - * Look at the character at the position, but don't note the fact - */ -int XmlReader::peek(int p) -{ - if (p >= len) - return -1; - int ch = parsebuf[p]; - return ch; -} - - -/** - * Test if the given substring exists at the given position - * in parsebuf. Use peek() in case of out-of-bounds - */ -bool XmlReader::match(int pos, char *str) -{ - while (*str) - { - if (peek(pos++) != *str++) - return false; - } - return true; -} - - - -/** - * Test if the given substring exists at the given position - * in a given buffer - */ -/* -static bool bufMatch(const DOMString &buf, int pos, char *str) -{ - while (*str) - { - if (buf[pos++] != *str++) - return false; - } - return true; -} -*/ - - -/** - * - */ -int XmlReader::skipwhite(int p) -{ - while (p < len) - { - int b = get(p); - if (!isWhitespace(b)) - break; - p++; - } - return p; -} - -/** - * modify this to allow all chars for an element or attribute name - */ -int XmlReader::getWord(int p, DOMString &result) -{ - while (p' || b=='=') - break; - result.push_back((XMLCh)b); - p++; - } - return p; -} - -/** - * get a name and prefix, if any - */ -int XmlReader::getPrefixedWord(int p, DOMString &prefix, - DOMString &shortWord, DOMString &fullWord) -{ - while (p' || b=='=') - break; - else if (b == ':') - { - prefix = shortWord; - shortWord = ""; - } - else - shortWord.push_back((XMLCh)b); - p++; - } - if (prefix.size() > 0) - fullWord = prefix + ":" + shortWord; - else - fullWord = shortWord; - return p; -} - - -/** - * Assume that we are starting on a quote. Ends on the char - * after the final '"' - */ -int XmlReader::getQuoted(int p0, DOMString &result) -{ - - int p = p0; - - if (peek(p)!='"' && peek(p)!='\'') - return p0; - - int b = get(p++); //go to next char - - DOMString buf; - - while (p tag. Node may be null. Assumes current char is '<' - * ends on char after '>' - */ -int XmlReader::parseVersion(int p0) -{ - int p = p0; - - if (!match(p, "getAttributes(); - Node *attr = attributes.getNamedItem("version"); - if (attr) - document->setXmlVersion(attr->getNodeValue()); - attr = attributes.getNamedItem("encoding"); - if (attr) - { /*document->setXmlEncoding(attr->getNodeValue());*/ } - attr = attributes.getNamedItem("standalone"); - if (attr) - document->setXmlStandalone((attr->getNodeValue() == "yes")); - delete node; - - //#now we should be pointing at '?>' - if (!match(p, "?>")) - { - return p0; - } - - //skip over '?>' - get(p++); - get(p++); - - return p; -} - - -/** - * Parse a tag. doctype may be null. Expects '<' - * on start. Ends pointing at char after '>' - */ -int XmlReader::parseDoctype(int p0) -{ - int p = p0; - - if (!match(p, "getDoctype(); - if (!doctype) - return p0; - - - //### get the root name of the document - p = skipwhite(p); - DOMString rootName; - int p2 = getWord(p, rootName); - if (p2 <= p) - return p0; - p = p2; - //printf("doctype root '%s'\n", rootName.c_str()); - - - while (p < len) - { - p = skipwhite(p); - if (peek(p) == '>') - break; - else if (peek(p) == '[') //just ignore 'internal' [] stuff - { - while (p < len) - { - int ch = get(p++); - if (ch == ']') - break; - } - p++; - } - else if (match(p, "PUBLIC")) - { - p += 6; - colNr += 6; - p = skipwhite(p); - DOMString pubIdLiteral; - int p2 = getQuoted(p, pubIdLiteral); - if (p2 <= p) - return p0; - p = p2; - p = skipwhite(p); - DOMString systemLiteral; - p2 = getQuoted(p, systemLiteral); - if (p2 <= p) - return p0; - p = p2; - //printf("PUBLIC \"%s\" \"%s\" \n", - // pubIdLiteral.c_str(), systemLiteral.c_str()); - } - else if (match(p, "SYSTEM")) - { - p += 6; - colNr += 6; - p = skipwhite(p); - DOMString systemLiteral; - int p2 = getQuoted(p, systemLiteral); - if (p2 <= p) - return p0; - p = p2; - //printf("SYSTEM \"%s\" \n", systemLiteral.c_str()); - } - } - - - //skip over '>' - get(p++); - - return p; -} - - - -/** - * Expects '<' on startup, ends on char after '>' - */ -int XmlReader::parseComment(int p0, Comment *comment) -{ - int p = p0; - - if (!match(p, "")) - { - p += 3; - colNr += 3; - break; - } - int ch = get(p++); - buf.push_back((XMLCh)ch); - } - - comment->setNodeValue(buf); - - return p; -} - - - -/** - * - */ -int XmlReader::parseCDATA(int p0, CDATASection *cdata) -{ - - int p = p0; - - if (!match(p, "")) - { - p +=3; - colNr += 3; - break; - } - int ch = get(p++); - buf.push_back((XMLCh)ch); - } - - /*printf("Got CDATA:%s\n",buf.c_str());*/ - cdata->setNodeValue(buf); - - return p; -} - - - -/** - * - */ -int XmlReader::parseText(int p0, Text *text) -{ - - int p = p0; - - DOMString buf; - - while (psetNodeValue(buf); - - return p; -} - - - - - -/** - * Parses attributes of a node. Should end pointing at either the - * '?' of a version or doctype tag, or a '>' of a normal tag - */ -int XmlReader::parseAttributes(int p0, Node *node, bool *quickClose) -{ - *quickClose = false; - - int p = p0; - - NamedNodeMap attributes; - - while (p')//done - break; - else if (ch=='/' && p') - { - p++; - *quickClose = true; - /*printf("quick close\n");*/ - return p; - } - } - DOMString shortName; - DOMString prefix; - DOMString qualifiedName; - int p2 = getPrefixedWord(p, prefix, shortName, qualifiedName); - if (p2 <= p) - break; - - /*printf("name:%s",buf);*/ - p = p2; - p = skipwhite(p); - ch = get(p); - /*printf("ch:%c\n",ch);*/ - if (ch != '=') - break; - p++; - p = skipwhite(p); - /*ch = parsebuf[p];*/ - /*printf("ch:%c\n",ch);*/ - DOMString attrValue; - p2 = getQuoted(p, attrValue); - p = p2; - /*printf("name:'%s' value:'%s'\n",buf,buf2);*/ - - DOMString namespaceURI = ""; - if (prefix == "xmlns" || shortName == "xmlns") - namespaceURI = XMLNSNAME; - - //## Now let us make the attribute and give it to the node - Attr *attr = document->createAttributeNS(namespaceURI, qualifiedName); - attr->setValue(attrValue); - node->getAttributes().setNamedItemNS(attr); - - }//while pescape ; info++) - { - if (match(p, info->escape)) - { - p += info->escapeLength; - colNr += info->escapeLength; - buf += info->value; - return p; - } - } - - error("unterminated entity"); - return -1; -} - - -//######################################################################### -//# P A R S E A N O D E -//######################################################################### - -/** - * Parse as a document, preserving the original structure as much as - * possible - */ -int XmlReader::parseNode(int p0, Node *node, int depth) -{ - - int p = p0; - - - //### OPEN TAG - int ch = get(p++); - if (ch != '<') - return p0; - - p = skipwhite(p); - DOMString openTagName; - DOMString openTagNamePrefix; - DOMString openTagQualifiedName; - int p2 = getPrefixedWord(p,openTagNamePrefix, - openTagName, openTagQualifiedName); - if (p2 <= p) - return p0; - p = p2; - p = skipwhite(p); - - //printf("qualifiedName:%s\n", openTagQualifiedName.c_str()); - DOMString namespaceURI = node->lookupNamespaceURI(openTagNamePrefix); - document->renameNode(node, namespaceURI, openTagQualifiedName); - - //### ATTRIBUTES - bool quickClose; - p = parseAttributes(p, node, &quickClose); - if (quickClose) //trivial tag: - return p; - - p++; //skip over '>' - - - DOMString nodeValue; - - /* ### Get intervening data ### */ - while (pcreateComment(""); - p2 = parseComment(p, comment); - if (p2 <= p) - return p0; - p = p2; - if (parseAsData) - { //throw away - delete comment; - } - else - { - node->appendChild(comment); - } - } - //### VERSION - else if (match(p, "createCDATASection(""); - p2 = parseCDATA(p, cdata); - if (p2 <= p) - return p0; - p = p2; - if (parseAsData) - { - nodeValue += cdata->getNodeValue(); - delete cdata; - } - else - { - node->appendChild(cdata); - } - } - //### OPEN OR CLOSE TAG - else if (peek(p) == '<') - { - p2 = skipwhite(p+1); - if (peek(p2) =='/') - { - p = p2; - break; - } - else - { - /*Add element to tree*/ - Element *elem = document->createElement(""); //fill in name later - node->appendChild(elem); - p2 = parseNode(p, elem, depth+1); - if (p2 <= p) - { - /*printf("problem on element:%ls. p2:%d p:%d\n",n->name, p2, p);*/ - return p0; - } - p = p2; - } - } - //### TEXT - else - { - Text *text = document->createTextNode(""); - p2 = parseText(p, text); - if (p2 <= p) - return p0; - p = p2; - if (parseAsData) - { - nodeValue += text->getNodeValue(); - delete text; - } - else - { - node->appendChild(text); - } - } - - }//while (psetNodeValue(nodeValue); - - //### get close tag. we should be pointing at '/' - p = skipwhite(p); - ch = get(p); - if (ch != '/') - { - error("no / on end tag"); - return p0; - } - p++; - - //### get word after '/' - p = skipwhite(p); - DOMString closeTagName; - DOMString closeTagNamePrefix; - DOMString closeTagQualifiedName; - p = getPrefixedWord(p, closeTagNamePrefix, closeTagName, - closeTagQualifiedName); - if (openTagQualifiedName != closeTagQualifiedName) - { - error("Mismatched closing tag. Expected . Got '%S'.", - openTagQualifiedName.c_str(), closeTagQualifiedName.c_str()); - return p0; - } - p = skipwhite(p); - if (parsebuf[p] != '>') - { - error("no > on end tag"); - return p0; - } - p++; - /*printf("close element:%ls\n",buf);*/ - return p; -} - - -/** - * - */ -org::w3c::dom::Document * -XmlReader::parse(const DOMString &buf, int bufferOffset, int parseLen) -{ - len = parseLen; - parsebuf = buf; - - DOMImplementationSourceImpl source; - DOMImplementation *domImpl = source.getDOMImplementation(""); - - keepGoing = true; - - document = domImpl->createDocument("", "", NULL); - //document = new svg::SVGDocumentImpl(domImpl, "", "", NULL); - - int p = bufferOffset; - int p2 = 0; - - while (pcreateComment(""); - p2 = parseComment(p, comment); - if (p2 <= p) - return document; - p = p2; - if (parseAsData) - { //throw away - delete comment; - } - else - { - document->appendChild(comment); - } - } - //### VERSION - else if (match(p, "getDocumentElement(), 0); - - keepGoing = false; - - return document; -} - - -/** - * - */ -org::w3c::dom::Document * -XmlReader::parse(const DOMString &str) -{ - - Document *doc = parse(str, 0, str.size()); - doc->normalizeDocument(); - - return doc; -} - -/** - * - */ -org::w3c::dom::Document * -XmlReader::parseFile(char *fileName) -{ - - DOMString buf = loadFile(fileName); - - Document *doc = parse(buf, 0, buf.size()); - - return doc; -} - - - -//######################################################################### -//# S T R E A M R E A D I N G -//######################################################################### - -/** - * - */ -org::w3c::dom::DOMString -XmlReader::loadFile(char *fileName) -{ - - if (!fileName) - return NULL; - FILE *f = fopen(fileName, "rb"); - if (!f) - return NULL; - - DOMString buf; - while (!feof(f)) - { - int ch = fgetc(f); - if (ch<0) - break; - buf.push_back((XMLCh)ch); - } - fclose(f); - - return buf; -} - - -//######################################################################### -//# C O N S T R U C T O R / D E S T R U C T O R -//######################################################################### - - -/** - * - */ -XmlReader::XmlReader() -{ - len = 0; - lineNr = 1; - colNr = 0; - parseAsData = false; - keepGoing = false; -} - -/** - * - */ -XmlReader::XmlReader(bool parseAsDataArg) -{ - len = 0; - lineNr = 1; - colNr = 0; - parseAsData = parseAsDataArg; - keepGoing = false; -} - - - -/** - * - */ -XmlReader::~XmlReader() -{ -} - - -} //namespace dom -} //namespace w3c -} //namespace org - - -//######################################################################### -//# E N D O F F I L E -//######################################################################### - +/** + * Phoebe DOM Implementation. + * + * This is a C++ approximation of the W3C DOM model, which follows + * fairly closely the specifications in the various .idl files, copies of + * which are provided for reference. Most important is this one: + * + * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2005 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + + +#include "xmlreader.h" +#include "charclass.h" +#include "domimpl.h" +#include "svg/svgimpl.h" + +#include +#include + +namespace org +{ +namespace w3c +{ +namespace dom +{ + + +//######################################################################### +//# E N T I T Y T A B L E +//######################################################################### +struct EntityInfo +{ + char *escape; + int escapeLength; + char *value; +}; + + +static EntityInfo entityTable[] = +{ + { "&" , 5 , "&" }, + { "<" , 4 , "<" }, + { ">" , 4 , ">" }, + { "'" , 6 , "'" }, + { """ , 6 , "\"" }, + { NULL , 0 , "\0" } +}; + + + +//######################################################################### +//# M E S S A G E S +//######################################################################### + + +/** + * + */ +void XmlReader::error(char *fmt, ...) +{ + va_list args; + fprintf(stderr, "XmlReader:error at line %d, column %d:", lineNr, colNr); + va_start(args, fmt); + vfprintf(stderr, fmt, args); + va_end(args) ; + fprintf(stderr, "\n"); +} + + + +//######################################################################### +//# U T I L I T Y +//######################################################################### + +static void trim(DOMString &str) +{ + int len = str.size(); + if (len<1) + return; + + int start = 0; + int end = 0; + for (start=0 ; start126) + break; + } + for (end=len-1 ; end>=0 ; end--) + { + int ch = str[end]; + if (ch<=' ' || ch>126) + break; + } + if (start= len) + return -1; + int ch = parsebuf[p]; + //printf("%c", ch); + if (ch == '\n' || ch == '\r') + { + colNr = 0; + lineNr++; + } + else + colNr++; + return ch; +} + +/** + * Look at the character at the position, but don't note the fact + */ +int XmlReader::peek(int p) +{ + if (p >= len) + return -1; + int ch = parsebuf[p]; + return ch; +} + + +/** + * Test if the given substring exists at the given position + * in parsebuf. Use peek() in case of out-of-bounds + */ +bool XmlReader::match(int pos, char *str) +{ + while (*str) + { + if (peek(pos++) != *str++) + return false; + } + return true; +} + + + +/** + * Test if the given substring exists at the given position + * in a given buffer + */ +/* +static bool bufMatch(const DOMString &buf, int pos, char *str) +{ + while (*str) + { + if (buf[pos++] != *str++) + return false; + } + return true; +} +*/ + + +/** + * + */ +int XmlReader::skipwhite(int p) +{ + while (p < len) + { + int b = get(p); + if (!isWhitespace(b)) + break; + p++; + } + return p; +} + +/** + * modify this to allow all chars for an element or attribute name + */ +int XmlReader::getWord(int p, DOMString &result) +{ + while (p' || b=='=') + break; + result.push_back((XMLCh)b); + p++; + } + return p; +} + +/** + * get a name and prefix, if any + */ +int XmlReader::getPrefixedWord(int p, DOMString &prefix, + DOMString &shortWord, DOMString &fullWord) +{ + while (p' || b=='=') + break; + else if (b == ':') + { + prefix = shortWord; + shortWord = ""; + } + else + shortWord.push_back((XMLCh)b); + p++; + } + if (prefix.size() > 0) + fullWord = prefix + ":" + shortWord; + else + fullWord = shortWord; + return p; +} + + +/** + * Assume that we are starting on a quote. Ends on the char + * after the final '"' + */ +int XmlReader::getQuoted(int p0, DOMString &result) +{ + + int p = p0; + + if (peek(p)!='"' && peek(p)!='\'') + return p0; + + int b = get(p++); //go to next char + + DOMString buf; + + while (p tag. Node may be null. Assumes current char is '<' + * ends on char after '>' + */ +int XmlReader::parseVersion(int p0) +{ + int p = p0; + + if (!match(p, "getAttributes(); + Node *attr = attributes.getNamedItem("version"); + if (attr) + document->setXmlVersion(attr->getNodeValue()); + attr = attributes.getNamedItem("encoding"); + if (attr) + { /*document->setXmlEncoding(attr->getNodeValue());*/ } + attr = attributes.getNamedItem("standalone"); + if (attr) + document->setXmlStandalone((attr->getNodeValue() == "yes")); + delete node; + + //#now we should be pointing at '?>' + if (!match(p, "?>")) + { + return p0; + } + + //skip over '?>' + get(p++); + get(p++); + + return p; +} + + +/** + * Parse a tag. doctype may be null. Expects '<' + * on start. Ends pointing at char after '>' + */ +int XmlReader::parseDoctype(int p0) +{ + int p = p0; + + if (!match(p, "getDoctype(); + if (!doctype) + return p0; + + + //### get the root name of the document + p = skipwhite(p); + DOMString rootName; + int p2 = getWord(p, rootName); + if (p2 <= p) + return p0; + p = p2; + //printf("doctype root '%s'\n", rootName.c_str()); + + + while (p < len) + { + p = skipwhite(p); + if (peek(p) == '>') + break; + else if (peek(p) == '[') //just ignore 'internal' [] stuff + { + while (p < len) + { + int ch = get(p++); + if (ch == ']') + break; + } + p++; + } + else if (match(p, "PUBLIC")) + { + p += 6; + colNr += 6; + p = skipwhite(p); + DOMString pubIdLiteral; + int p2 = getQuoted(p, pubIdLiteral); + if (p2 <= p) + return p0; + p = p2; + p = skipwhite(p); + DOMString systemLiteral; + p2 = getQuoted(p, systemLiteral); + if (p2 <= p) + return p0; + p = p2; + //printf("PUBLIC \"%s\" \"%s\" \n", + // pubIdLiteral.c_str(), systemLiteral.c_str()); + } + else if (match(p, "SYSTEM")) + { + p += 6; + colNr += 6; + p = skipwhite(p); + DOMString systemLiteral; + int p2 = getQuoted(p, systemLiteral); + if (p2 <= p) + return p0; + p = p2; + //printf("SYSTEM \"%s\" \n", systemLiteral.c_str()); + } + } + + + //skip over '>' + get(p++); + + return p; +} + + + +/** + * Expects '<' on startup, ends on char after '>' + */ +int XmlReader::parseComment(int p0, Comment *comment) +{ + int p = p0; + + if (!match(p, "")) + { + p += 3; + colNr += 3; + break; + } + int ch = get(p++); + buf.push_back((XMLCh)ch); + } + + comment->setNodeValue(buf); + + return p; +} + + + +/** + * + */ +int XmlReader::parseCDATA(int p0, CDATASection *cdata) +{ + + int p = p0; + + if (!match(p, "")) + { + p +=3; + colNr += 3; + break; + } + int ch = get(p++); + buf.push_back((XMLCh)ch); + } + + /*printf("Got CDATA:%s\n",buf.c_str());*/ + cdata->setNodeValue(buf); + + return p; +} + + + +/** + * + */ +int XmlReader::parseText(int p0, Text *text) +{ + + int p = p0; + + DOMString buf; + + while (psetNodeValue(buf); + + return p; +} + + + + + +/** + * Parses attributes of a node. Should end pointing at either the + * '?' of a version or doctype tag, or a '>' of a normal tag + */ +int XmlReader::parseAttributes(int p0, Node *node, bool *quickClose) +{ + *quickClose = false; + + int p = p0; + + NamedNodeMap attributes; + + while (p')//done + break; + else if (ch=='/' && p') + { + p++; + *quickClose = true; + /*printf("quick close\n");*/ + return p; + } + } + DOMString shortName; + DOMString prefix; + DOMString qualifiedName; + int p2 = getPrefixedWord(p, prefix, shortName, qualifiedName); + if (p2 <= p) + break; + + /*printf("name:%s",buf);*/ + p = p2; + p = skipwhite(p); + ch = get(p); + /*printf("ch:%c\n",ch);*/ + if (ch != '=') + break; + p++; + p = skipwhite(p); + /*ch = parsebuf[p];*/ + /*printf("ch:%c\n",ch);*/ + DOMString attrValue; + p2 = getQuoted(p, attrValue); + p = p2; + /*printf("name:'%s' value:'%s'\n",buf,buf2);*/ + + DOMString namespaceURI = ""; + if (prefix == "xmlns" || shortName == "xmlns") + namespaceURI = XMLNSNAME; + + //## Now let us make the attribute and give it to the node + Attr *attr = document->createAttributeNS(namespaceURI, qualifiedName); + attr->setValue(attrValue); + node->getAttributes().setNamedItemNS(attr); + + }//while pescape ; info++) + { + if (match(p, info->escape)) + { + p += info->escapeLength; + colNr += info->escapeLength; + buf += info->value; + return p; + } + } + + error("unterminated entity"); + return -1; +} + + +//######################################################################### +//# P A R S E A N O D E +//######################################################################### + +/** + * Parse as a document, preserving the original structure as much as + * possible + */ +int XmlReader::parseNode(int p0, Node *node, int depth) +{ + + int p = p0; + + + //### OPEN TAG + int ch = get(p++); + if (ch != '<') + return p0; + + p = skipwhite(p); + DOMString openTagName; + DOMString openTagNamePrefix; + DOMString openTagQualifiedName; + int p2 = getPrefixedWord(p,openTagNamePrefix, + openTagName, openTagQualifiedName); + if (p2 <= p) + return p0; + p = p2; + p = skipwhite(p); + + //printf("qualifiedName:%s\n", openTagQualifiedName.c_str()); + DOMString namespaceURI = node->lookupNamespaceURI(openTagNamePrefix); + document->renameNode(node, namespaceURI, openTagQualifiedName); + + //### ATTRIBUTES + bool quickClose; + p = parseAttributes(p, node, &quickClose); + if (quickClose) //trivial tag: + return p; + + p++; //skip over '>' + + + DOMString nodeValue; + + /* ### Get intervening data ### */ + while (pcreateComment(""); + p2 = parseComment(p, comment); + if (p2 <= p) + return p0; + p = p2; + if (parseAsData) + { //throw away + delete comment; + } + else + { + node->appendChild(comment); + } + } + //### VERSION + else if (match(p, "createCDATASection(""); + p2 = parseCDATA(p, cdata); + if (p2 <= p) + return p0; + p = p2; + if (parseAsData) + { + nodeValue += cdata->getNodeValue(); + delete cdata; + } + else + { + node->appendChild(cdata); + } + } + //### OPEN OR CLOSE TAG + else if (peek(p) == '<') + { + p2 = skipwhite(p+1); + if (peek(p2) =='/') + { + p = p2; + break; + } + else + { + /*Add element to tree*/ + Element *elem = document->createElement(""); //fill in name later + node->appendChild(elem); + p2 = parseNode(p, elem, depth+1); + if (p2 <= p) + { + /*printf("problem on element:%ls. p2:%d p:%d\n",n->name, p2, p);*/ + return p0; + } + p = p2; + } + } + //### TEXT + else + { + Text *text = document->createTextNode(""); + p2 = parseText(p, text); + if (p2 <= p) + return p0; + p = p2; + if (parseAsData) + { + nodeValue += text->getNodeValue(); + delete text; + } + else + { + node->appendChild(text); + } + } + + }//while (psetNodeValue(nodeValue); + + //### get close tag. we should be pointing at '/' + p = skipwhite(p); + ch = get(p); + if (ch != '/') + { + error("no / on end tag"); + return p0; + } + p++; + + //### get word after '/' + p = skipwhite(p); + DOMString closeTagName; + DOMString closeTagNamePrefix; + DOMString closeTagQualifiedName; + p = getPrefixedWord(p, closeTagNamePrefix, closeTagName, + closeTagQualifiedName); + if (openTagQualifiedName != closeTagQualifiedName) + { + error("Mismatched closing tag. Expected . Got '%S'.", + openTagQualifiedName.c_str(), closeTagQualifiedName.c_str()); + return p0; + } + p = skipwhite(p); + if (parsebuf[p] != '>') + { + error("no > on end tag"); + return p0; + } + p++; + /*printf("close element:%ls\n",buf);*/ + return p; +} + + +/** + * + */ +org::w3c::dom::Document * +XmlReader::parse(const DOMString &buf, int bufferOffset, int parseLen) +{ + len = parseLen; + parsebuf = buf; + + DOMImplementationSourceImpl source; + DOMImplementation *domImpl = source.getDOMImplementation(""); + + keepGoing = true; + + document = domImpl->createDocument("", "", NULL); + //document = new svg::SVGDocumentImpl(domImpl, "", "", NULL); + + int p = bufferOffset; + int p2 = 0; + + while (pcreateComment(""); + p2 = parseComment(p, comment); + if (p2 <= p) + return document; + p = p2; + if (parseAsData) + { //throw away + delete comment; + } + else + { + document->appendChild(comment); + } + } + //### VERSION + else if (match(p, "getDocumentElement(), 0); + + keepGoing = false; + + return document; +} + + +/** + * + */ +org::w3c::dom::Document * +XmlReader::parse(const DOMString &str) +{ + + Document *doc = parse(str, 0, str.size()); + doc->normalizeDocument(); + + return doc; +} + +/** + * + */ +org::w3c::dom::Document * +XmlReader::parseFile(char *fileName) +{ + + DOMString buf = loadFile(fileName); + + Document *doc = parse(buf, 0, buf.size()); + + return doc; +} + + + +//######################################################################### +//# S T R E A M R E A D I N G +//######################################################################### + +/** + * + */ +org::w3c::dom::DOMString +XmlReader::loadFile(char *fileName) +{ + + if (!fileName) + return NULL; + FILE *f = fopen(fileName, "rb"); + if (!f) + return NULL; + + DOMString buf; + while (!feof(f)) + { + int ch = fgetc(f); + if (ch<0) + break; + buf.push_back((XMLCh)ch); + } + fclose(f); + + return buf; +} + + +//######################################################################### +//# C O N S T R U C T O R / D E S T R U C T O R +//######################################################################### + + +/** + * + */ +XmlReader::XmlReader() +{ + len = 0; + lineNr = 1; + colNr = 0; + parseAsData = false; + keepGoing = false; +} + +/** + * + */ +XmlReader::XmlReader(bool parseAsDataArg) +{ + len = 0; + lineNr = 1; + colNr = 0; + parseAsData = parseAsDataArg; + keepGoing = false; +} + + + +/** + * + */ +XmlReader::~XmlReader() +{ +} + + +} //namespace dom +} //namespace w3c +} //namespace org + + +//######################################################################### +//# E N D O F F I L E +//######################################################################### + diff --git a/src/dom/xmlreader.h b/src/dom/xmlreader.h index 755122fb1..4b80081e2 100644 --- a/src/dom/xmlreader.h +++ b/src/dom/xmlreader.h @@ -1,129 +1,129 @@ -#ifndef _XMLREADER_H_ -#define _XMLREADER_H_ - -/** - * Phoebe DOM Implementation. - * - * This is a C++ approximation of the W3C DOM model, which follows - * fairly closely the specifications in the various .idl files, copies of - * which are provided for reference. Most important is this one: - * - * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html - * - * Authors: - * Bob Jamison - * - * Copyright (C) 2005 Bob Jamison - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -#include "dom.h" - -namespace org -{ -namespace w3c -{ -namespace dom -{ - - - -class XmlReader -{ -public: - - /** - * - */ - XmlReader(); - - /** - * - */ - XmlReader(bool parseAsData); - - /** - * - */ - virtual ~XmlReader(); - - /** - * - */ - org::w3c::dom::Document *parse(const DOMString &buf, - int offset, int length); - - /** - * - */ - org::w3c::dom::Document *parse(const DOMString &buf); - - /** - * - */ - org::w3c::dom::Document *parseFile(char *fileName); - - -protected: - - void error(char *format, ...); - - int get(int ch); - int peek(int ch); - bool match(int pos, char *str); - - int skipwhite(int ch); - int getWord(int pos, DOMString &result); - int getPrefixedWord(int pos, - DOMString &prefix, - DOMString &shortWord, - DOMString &fullWord); - int getQuoted(int p, DOMString &result); - - int parseVersion(int pos); - int parseDoctype(int pos); - - int parseCDATA (int pos, CDATASection *cdata); - int parseComment(int pos, Comment *comment); - int parseText(int pos, Text *test); - - int parseEntity(int pos, DOMString &buf); - - int parseAttributes(int p0, Node *node, bool *quickClose); - - int parseNode(int p0, Node *node, int depth); - - bool keepGoing; - bool parseAsData; - int pos; //current parse position - int len; //length of parsed region - DOMString parsebuf; - - DOMString loadFile(char *fileName); - - int lineNr; - int colNr; - - Document *document; - -}; - -} //namespace dom -} //namespace w3c -} //namespace org - -#endif /*_XMLREADER_H_*/ +#ifndef _XMLREADER_H_ +#define _XMLREADER_H_ + +/** + * Phoebe DOM Implementation. + * + * This is a C++ approximation of the W3C DOM model, which follows + * fairly closely the specifications in the various .idl files, copies of + * which are provided for reference. Most important is this one: + * + * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2005 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +#include "dom.h" + +namespace org +{ +namespace w3c +{ +namespace dom +{ + + + +class XmlReader +{ +public: + + /** + * + */ + XmlReader(); + + /** + * + */ + XmlReader(bool parseAsData); + + /** + * + */ + virtual ~XmlReader(); + + /** + * + */ + org::w3c::dom::Document *parse(const DOMString &buf, + int offset, int length); + + /** + * + */ + org::w3c::dom::Document *parse(const DOMString &buf); + + /** + * + */ + org::w3c::dom::Document *parseFile(char *fileName); + + +protected: + + void error(char *format, ...); + + int get(int ch); + int peek(int ch); + bool match(int pos, char *str); + + int skipwhite(int ch); + int getWord(int pos, DOMString &result); + int getPrefixedWord(int pos, + DOMString &prefix, + DOMString &shortWord, + DOMString &fullWord); + int getQuoted(int p, DOMString &result); + + int parseVersion(int pos); + int parseDoctype(int pos); + + int parseCDATA (int pos, CDATASection *cdata); + int parseComment(int pos, Comment *comment); + int parseText(int pos, Text *test); + + int parseEntity(int pos, DOMString &buf); + + int parseAttributes(int p0, Node *node, bool *quickClose); + + int parseNode(int p0, Node *node, int depth); + + bool keepGoing; + bool parseAsData; + int pos; //current parse position + int len; //length of parsed region + DOMString parsebuf; + + DOMString loadFile(char *fileName); + + int lineNr; + int colNr; + + Document *document; + +}; + +} //namespace dom +} //namespace w3c +} //namespace org + +#endif /*_XMLREADER_H_*/ diff --git a/src/dom/xpathparser.cpp b/src/dom/xpathparser.cpp index cc6488eed..f0617795e 100644 --- a/src/dom/xpathparser.cpp +++ b/src/dom/xpathparser.cpp @@ -1,2047 +1,2047 @@ -/** - * Phoebe DOM Implementation. - * - * This is a C++ approximation of the W3C DOM model, which follows - * fairly closely the specifications in the various .idl files, copies of - * which are provided for reference. Most important is this one: - * - * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html - * - * Authors: - * Bob Jamison - * - * Copyright (C) 2006 Bob Jamison - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -#include "charclass.h" -#include "xpathparser.h" - - -namespace org -{ -namespace w3c -{ -namespace dom -{ -namespace xpath -{ - - -//######################################################################### -//# M E S S A G E S -//######################################################################### - - - -void XPathParser::trace(const char *fmt, ...) -{ - if (!debug) - return; - - FILE *f = stdout; - - va_list args; - va_start(args, fmt); - fprintf(f, "XPathParser: "); - vfprintf(f, fmt, args); - fprintf(f, "\n"); - va_end(args); -} - - - -void XPathParser::error(const char *fmt, ...) -{ - FILE *f = stdout; - va_list args; - va_start(args, fmt); - fprintf(f, "XPathParser ERROR: "); - vfprintf(f, fmt, args); - fprintf(f, "\n"); - va_end(args); - - //Print location in string - fprintf(f, "%s\n", parsebuf); - for (int i=0 ; i=(int)lexicalTokens.size()) - { - LexTok tok; - return tok; - } - return lexicalTokens[p]; -} - -int XPathParser::lexTokType(int p) -{ - if (p < 0 || p>=(int)lexicalTokens.size()) - return -1; - return lexicalTokens[p].getType(); -} - - - - - - - - -int XPathParser::peek(int p) -{ - if (p >= parselen) - return -1; - position = p; - return parsebuf[p] ; -} - - -int XPathParser::get(int p) -{ - if (p >= parselen) - return -1; - position = p; - return parsebuf[p]; -} - -int XPathParser::skipwhite(int p0) -{ - int p = p0; - - while (p < parselen) - { - int ch = peek(p); - if (!isWhitespace(ch)) - break; - ch = get(p++); - } - return p; -} - -int XPathParser::getword(int p0, DOMString &str) -{ - int p = p0; - while (p < parselen) - { - int ch = peek(p); - if (!isLetterOrDigit(ch)) - break; - ch = get(p++); - str.push_back((XMLCh)ch); - } - return p; -} - -int XPathParser::match(int p, const char *str) -{ - while (*str) - { - if (p >= parselen) - return -1; - if (parsebuf[p] != *str) - return -1; - p++; str++; - } - return p; -} - - - - -int XPathParser::getNumber(int p0, double &dresult) -{ - int p = p0; - if (p >= parselen) - return p0;/*need at least x*/ - - bool isdouble = false; - bool negative = false; - - int ch = parsebuf[p]; - if (ch=='-') - { - p++; - negative = true; - if (p >= parselen) return p0; - } - - bool seen_dot = false; - bool seen_e = false; - bool seen_eminus = false; - - DOMString num; - - int i = p; - while (i < parselen) - { - ch = parsebuf[i]; - if (ch=='.') - { - if (seen_dot) - return p0; - seen_dot = true; - isdouble = true; - } - else if (ch=='e' || ch=='E') - { - if (seen_e || !seen_dot) - return p0; - seen_e = true; - } - else if (ch=='-' && seen_e) - { - if (seen_eminus || !seen_dot) - return p0; - seen_eminus = true; - } - else if (!isDigit(ch)) - break; - num.push_back((XMLCh)ch); - i++; - } - - if (i == p)/*no digits*/ - return p0; - if (isdouble) - { - const char *begin = num.c_str(); - char *end; - dresult = strtod(begin,&end); - if (!end)/*not a number?*/ - { - error("Error formatting double: %s\n", num.c_str()); - return p0; - } - } - else - { - const char *begin = num.c_str(); - char *end; - dresult = (double)strtol(begin,&end,10); - if (!end)/*not a number?*/ - { - error("Error formatting integer: %s\n", num.c_str()); - return p0; - } - } - p = i; - return p; -} - - - -int XPathParser::getLiteral(int p0, DOMString &result) -{ - int p = p0; - int ch = peek(p); - int quotechar = 0; - if (ch == '"' || ch == '\'') - { - quotechar = ch; - } - else - return p0; - p++; - while (true) - { - if (p >= parselen) - { - error("Unterminated literal string"); - return -1; - } - ch = peek(p); - if (ch == quotechar) - break; - result.push_back((XMLCh)ch); - p++; - } - p++; //skip over closing " - return p; -} - - - -/** - * NCName is a 'non-colonized' name - */ -int XPathParser::getNCName(int p0, DOMString &result) -{ - int p = p0; - int ch = peek(p); - if (ch != '_' && !isLetter(ch)) - return p0; - - result.push_back((XMLCh)ch); - p++; - while (p < parselen) - { - ch = peek(p); - if ( isLetterOrDigit(ch) || - isCombiningChar(ch) || - isExtender(ch) || - ch == '.' || ch == '-' || ch == '_' ) - { - result.push_back((XMLCh)ch); - p++; - } - else - break; - } - return p; -} - - - -/** - * Name parsing with post-parsing - */ -int XPathParser::getNameTest(int p0, DOMString &result) -{ - int p = p0; - int ch = peek(p); - if (ch == '*') - { - result.push_back((XMLCh)ch); - p++; - return p; - } - - DOMString ncName; - int p2 = getNCName(p, ncName); - if (p2 <= p) - return p0; - - result = ncName; - p = p2; - - ch = peek(p); - if (ch != ':' )//short name. we are done - { - return p; - } - - if (peek(p+1) == ':') //was name:: which is ok - return p; - - result.push_back(':'); - - p++; - ch = peek(p); - if (ch == '*') - { - result.push_back((XMLCh)ch); - p++; - return p; - } - - DOMString ncName2; - p2 = getNCName(p, ncName2); - if (p2 <= p) - { - if (peek(p) == ':') //was name:: which is ok - return p0; - error("Nothing after ':' in QName"); - return -1; - } - - result.append(ncName2); - - p = p2; - - return p; -} - - - -int XPathParser::lexicalScan() -{ - lexicalTokens.clear(); - - int p = 0; - int p2 = p; - - while (p < parselen) - { - p2 = skipwhite(p); - p = p2; - - //trace("nextChar:%c", peek(p)); - bool selected = false; - - //### LITERAL EXPR TOKENS - for (int i=2 ; i<=10 ; i++) - { - p2 = match(p, exprTokenTable[i].sval); - if (p2 > p) - { - lexTokAdd(exprTokenTable[i].ival, p); - p = p2; - selected = true; - break; - } - } - if (selected) - continue; - - //### OPERATORS - for (LookupEntry *entry = operatorTable; entry->sval ; entry++) - { - p2 = match(p, entry->sval); - if (p2 > p) - { - long op = (long)entry->ival; - //according to the disambiguating rule for * in the spec - if (op == MULTIPLY && lexicalTokens.size() > 0) - { - int ltyp = lexTokType(lexicalTokens.size()-1); - if (ltyp != AMPR && ltyp != DOUBLE_COLON && - ltyp != LPAREN && ltyp != RBRACKET && - ltyp != COMMA && ltyp != OPERATOR ) - { - lexTokAdd(OPERATOR, p, (long)entry->ival); - p = p2; - selected = true; - break; - } - } - else - { - lexTokAdd(OPERATOR, p, (long)entry->ival); - p = p2; - selected = true; - break; - } - } - } - if (selected) - continue; - - //### NODE TYPES - for (LookupEntry *entry = nodeTypeTable; entry->sval ; entry++) - { - p2 = match(p, entry->sval); - if (p2 > p) - { - lexTokAdd(NODE_TYPE, p, (long)entry->ival); - p = p2; - selected = true; - break; - } - } - if (selected) - continue; - - //### AXIS NAMES - for (LookupEntry *entry = axisNameTable; entry->sval ; entry++) - { - p2 = match(p, entry->sval); - if (p2 > p) - { - lexTokAdd(AXIS_NAME, p, (long)entry->ival); - p = p2; - selected = true; - break; - } - } - if (selected) - continue; - - //### NAME TEST - DOMString ntResult; - p2 = getNameTest(p, ntResult); - if (p2 > p) - { - int p3 = skipwhite(p2); - if (peek(p3) == '(') - lexTokAdd(FUNCTION_NAME, p, ntResult); - else - lexTokAdd(NAME_TEST, p, ntResult); - p = p2; - selected = true; - } - if (selected) - continue; - - //### VARIABLE REFERENCE - if (peek(p) == '$') - { - p++; - DOMString qnResult; - p2 = getNCName(p, qnResult); - if (p2 > p) - { - lexTokAdd(VARIABLE_REFERENCE, p, qnResult); - p = p2; - selected = true; - } - else - { - error("Variable referenced with '$' requires a qualified name\n"); - return -1; - } - } - if (selected) - continue; - - //### NUMBER - double numval; - p2 = getNumber(p, numval); - if (p2 > p) - { - lexTokAdd(NUMBER, p, numval); - p = p2; - selected = true; - } - if (selected) - continue; - - //### LITERAL - DOMString strval; - p2 = getLiteral(p, strval); - if (p2 > p) - { - lexTokAdd(LITERAL, p, strval); - p = p2; - selected = true; - } - if (selected) - continue; - - //### CHAR (default, none of the above) - lexTokAdd(CHAR, p, (long) peek(p)); - p++; - - }//while p - - - return p; -} - - - - - - - - - - - - - - - - - - - - - - -//######################################################################### -//# X P A T H G R A M M A R P A R S I N G -//######################################################################### - - -void XPathParser::tokAdd(Token *tok) -{ - tokens.add(tok); -} - -/** - * [1] LocationPath ::= - * RelativeLocationPath - * | AbsoluteLocationPath - */ -int XPathParser::getLocationPath(int p0, int depth) -{ - traceStack("getLocationPath", p0, depth); - int p = p0; - - p = skipwhite(p); - - int p2 = getAbsoluteLocationPath(p, depth+1); - if (p2 > p) - { - tokens.add(new TokAbsolute()); - return p2; - } - - p2 = getRelativeLocationPath(p, depth+1); - if (p2 > p) - { - tokens.add(new TokRelative()); - return p2; - } - - return p0; -} - - -/** - * [2] AbsoluteLocationPath ::= - * '/' RelativeLocationPath? - * | AbbreviatedAbsoluteLocationPath - */ -int XPathParser::getAbsoluteLocationPath(int p0, int depth) -{ - traceStack("getAbsoluteLocationPath", p0, depth); - - int p = p0; - LexTok t = lexTok(p); - if (t.getType() == OPERATOR && t.getIntValue()==SLASH) - { - p++; - int p2 = getRelativeLocationPath(p, depth+1); - if (p2 <= p) - { - error("Relative path after '/'"); - return -1; - } - p = p2; - return p; - } - - //AbbreviatedAbsoluteLocationPath - if (t.getType() == OPERATOR && t.getIntValue()==DOUBLE_SLASH) - { - p++; - int p2 = getRelativeLocationPath(p, depth+1); - if (p2 <= p) - { - error("Relative path after '//'"); - return -1; - } - p = p2; - return p; - } - - - return p0; -} - - -/** - * [3] RelativeLocationPath ::= - * Step - * | RelativeLocationPath '/' Step - * | AbbreviatedRelativeLocationPath - */ -int XPathParser::getRelativeLocationPath(int p0, int depth) -{ - traceStack("getRelativeLocationPath", p0, depth); - int p = p0; - int p2 = getStep(p, depth+1); - if (p2 < 0) - return -1; - if (p2 > p) - { - p = p2; - LexTok t = lexTok(p); - if (t.getType() == OPERATOR && t.getIntValue()==SLASH) - { - p++; - p2 = getRelativeLocationPath(p, depth+1); - if (p2 < 0) - { - error("Relative path after '/'"); - return -1; - } - p = p2; - return p; - } - //AbbreviatedRelativeLocationPath - if (t.getType() == OPERATOR && t.getIntValue()==DOUBLE_SLASH) - { - p++; - // a '//' is an abbreviation for /descendant-or-self:node()/ - tokAdd(new TokAxisDescendantOrSelf()); - p2 = getRelativeLocationPath(p, depth+1); - if (p2 < 0) - { - error("Relative path after '//'"); - return -1; - } - p = p2; - return p; - } - return p; - } - - - return p0; -} - - -/** - * [4] Step ::= - * AxisSpecifier NodeTest Predicate* - * | AbbreviatedStep - */ -int XPathParser::getStep(int p0, int depth) -{ - traceStack("getStep", p0, depth); - - int p = p0; - - lexTok(p).print(); - - //This can be (and usually is) 0-length - int p2 = getAxisSpecifier(p, depth+1); - if (p2 < 0) - { - error("Axis specifier in step section"); - return -1; - } - p = p2; - p2 = getNodeTest(p, depth+1); - if (p2 < 0) - { - error("Node test in step section"); - return -1; - } - - if (p2 > p) - { - p = p2; - p2 = getPredicate(p, depth+1); - if (p2 < 0) - { - error("Predicate in step section"); - return -1; - } - p = p2; - return p; - } - - //AbbreviatedStep - if (lexTokType(p) == DOT) - { - p++; - return p; - } - - //AbbreviatedStep - if (lexTokType(p) == DOUBLE_DOT) - { - p++; - return p; - } - - return p0; -} - - -/** - * [5] AxisSpecifier ::= - * AxisName '::' - * | AbbreviatedAxisSpecifier - */ -int XPathParser::getAxisSpecifier(int p0, int depth) -{ - traceStack("getAxisSpecifier", p0, depth); - int p = p0; - if (lexTokType(p) == AXIS_NAME) - { - LexTok t = lexTok(p); - int axisType = t.getIntValue(); - p++; - if (lexTokType(p) != DOUBLE_COLON) - { - error("'::' required after axis name literal"); - return -1; - } - p++; - switch (axisType) - { - case ANCESTOR_OR_SELF: - tokAdd(new TokAxisAncestorOrSelf()); - case ANCESTOR: - tokAdd(new TokAxisAncestor()); - case ATTRIBUTE: - tokAdd(new TokAxisAttribute()); - case CHILD: - tokAdd(new TokAxisChild()); - case DESCENDANT_OR_SELF: - tokAdd(new TokAxisDescendantOrSelf()); - case DESCENDANT: - tokAdd(new TokAxisDescendant()); - case FOLLOWING_SIBLING: - tokAdd(new TokAxisFollowingSibling()); - case FOLLOWING: - tokAdd(new TokAxisFollowing()); - case NAMESPACE: - tokAdd(new TokAxisNamespace()); - case PARENT: - tokAdd(new TokAxisParent()); - case PRECEDING_SIBLING: - tokAdd(new TokAxisPrecedingSibling()); - case PRECEDING: - tokAdd(new TokAxisPreceding()); - case SELF: - tokAdd(new TokAxisSelf()); - default: - { - error("unknown axis type %d", axisType); - return -1; - } - } - return p; - } - - //AbbreviatedAxisSpecifier - if (lexTokType(p) == AMPR) - { - p++; - return p; - } - - return p0; -} - - -/** - * [6] AxisName ::= - * 'ancestor' - * | 'ancestor-or-self' - * | 'attribute' - * | 'child' - * | 'descendant' - * | 'descendant-or-self' - * | 'following' - * | 'following-sibling' - * | 'namespace' - * | 'parent' - * | 'preceding' - * | 'preceding-sibling' - * | 'self' - * NOTE: This definition, and those at the bottom, is not - * needed. Its functionality is handled by lexical scanning. - * It is left here for reference. - */ -int XPathParser::getAxisName(int p0, int depth) -{ - traceStack("getAxisName", p0, depth); - return p0; -} - - -/** - * [7] NodeTest ::= - * NameTest - * | NodeType '(' ')' - * | 'processing-instruction' '(' Literal ')' - */ -int XPathParser::getNodeTest(int p0, int depth) -{ - traceStack("getNodeTest", p0, depth); - int p = p0; - - LexTok t = lexTok(p); - if (t.getType() == NAME_TEST) - { - p++; - tokAdd(new TokNameTest(t.getStringValue())); - return p; - } - if (t.getType() == NODE_TYPE) - { - if (t.getIntValue() == PROCESSING_INSTRUCTION) - { - if (lexTokType(p) != LPAREN || - lexTokType(p+1) != LITERAL || - lexTokType(p+2) != RPAREN ) - { - error("processing instruction requires (\"literal string\")"); - return -1; - } - p += 3; - } - else - { - if (lexTokType(p+1) != LPAREN || - lexTokType(p+2) != RPAREN ) - { - error("processing instruction requires ()"); - return -1; - } - p += 2; - } - return p; - } - - return p0; -} - - -/** - * [8] Predicate ::= - * '[' PredicateExpr ']' - */ -int XPathParser::getPredicate(int p0, int depth) -{ - traceStack("getPredicate", p0, depth); - - int p = p0; - if (lexTokType(p) != LBRACKET) - return p0; - - p++; - int p2 = getPredicateExpr(p, depth+1); - if (p2 <= p) - { - error("Predicate expression in predicate"); - return -1; - } - - p = p2; - lexTok(p).print(); - if (lexTokType(p) != RBRACKET) - { - error("Predicate expression requires closing ']'"); - return -1; - } - p++; - return p; -} - - -/** - * [9] PredicateExpr ::= - * Expr - */ -int XPathParser::getPredicateExpr(int p0, int depth) -{ - traceStack("getPredicateExpr", p0, depth); - int p = p0; - int p2 = getExpr(p, depth+1); - if (p2 < 0) - { - error("Expression in predicate expression"); - return -1; - } - p = p2; - return p; -} - - -/** - * [10] AbbreviatedAbsoluteLocationPath ::= - * '//' RelativeLocationPath - * NOTE: not used. handled in getAbsoluteLocationPath() - */ -int XPathParser::getAbbreviatedAbsoluteLocationPath(int p0, int depth) -{ - traceStack("getAbbreviatedAbsoluteLocationPath", p0, depth); - - return p0; -} - -/** - * [11] AbbreviatedRelativeLocationPath ::= - * RelativeLocationPath '//' Step - * NOTE: not used. handled in getRelativeLocationPath() - */ -int XPathParser::getAbbreviatedRelativeLocationPath(int p0, int depth) -{ - traceStack("getAbbreviatedRelativeLocationPath", p0, depth); - return p0; -} - -/** - * [12] AbbreviatedStep ::= - * '.' - * | '..' - * NOTE: not used. handled in getStep() - */ -int XPathParser::getAbbreviatedStep(int p0, int depth) -{ - traceStack("getAbbreviatedStep", p0, depth); - return p0; -} - - -/** - * [13] AbbreviatedAxisSpecifier ::= - * '@'? - * NOTE: not used. handled in getAxisSpecifier() - */ -int XPathParser::getAbbreviatedAxisSpecifier(int p0, int depth) -{ - traceStack("getAbbreviatedAxisSpecifier", p0, depth); - return p0; -} - - -/** - * [14] Expr ::= - * OrExpr - */ -int XPathParser::getExpr(int p0, int depth) -{ - traceStack("getExpr", p0, depth); - - int p = p0; - - int p2 = getOrExpr(p, depth+1); - if (p2 < 0) - { - error("OR expression in expression"); - return -1; - } - p = p2; - - return p; -} - - -/** - * [15] PrimaryExpr ::= - * VariableReference - * | '(' Expr ')' - * | Literal - * | Number - * | FunctionCall - */ -int XPathParser::getPrimaryExpr(int p0, int depth) -{ - traceStack("getPrimaryExpr", p0, depth); - int p = p0; - int p2 = p; - - if (lexTokType(p) == VARIABLE_REFERENCE) - { - p++; - return p; - } - - if (lexTokType(p) == LPAREN) - { - p++; - p2 = getExpr(p, depth+1); - if (p2 <= p) - { - error("Expression in primary expression"); - return -1; - } - p += p2; - if (lexTokType(p) != RPAREN) - { - error("Primary expression requires closing ')'"); - return -1; - } - } - - if (lexTokType(p) == LITERAL) - { - tokens.add(new TokStr(lexTok(p).getStringValue())); - p++; - return p; - } - - if (lexTokType(p) == NUMBER) - { - tokens.add(new TokFloat(lexTok(p).getDoubleValue())); - p++; - return p; - } - - p2 = getFunctionCall(p, depth+1); - if (p2 < 0) - { - error("Function call in primary expression"); - return -1; - } - if (p2 > p) - { - p = p2; - return p; - } - - return p0; -} - - -/** - * [16] FunctionCall ::= - * FunctionName '(' ( Argument ( ',' Argument )* )? ')' - */ -int XPathParser::getFunctionCall(int p0, int depth) -{ - traceStack("getFunctionCall", p0, depth); - int p = p0; - - if (lexTokType(p) != FUNCTION_NAME) - return p0; - - DOMString name = lexTok(p).getStringValue(); - - p++; - - if (lexTokType(p) != LPAREN) //this makes a function - return p0; - p++; - - int argCount = 0; - - int p2 = getArgument(p, depth+1); - if (p2 < 0) - { - error("Error in function argument"); - return -1; - } - if (p2 > p) - { - argCount++; - p = p2; - while (lexTokType(p) == COMMA) - { - p++; - p2 = getArgument(p, depth+1); - if (p2 <= p) - { - error("Error in function argument"); - return -1; - } - if (p2 > p) - argCount++; - //do we add a token here? i dont think so - p = p2; - } - } - - if (lexTokType(p) != RPAREN) //mandatory - { - error("Function requires closing ')'"); - return -1; - } - p++; - - // Function names from http://www.w3.org/TR/xpath#NT-FunctionName - if (name == "last") - tokens.add(new TokFuncLast()); - else if (name == "position") - tokens.add(new TokFuncPosition()); - else if (name == "count") - tokens.add(new TokFuncCount()); - else if (name == "id") - tokens.add(new TokFuncId()); - else if (name == "local-name") - tokens.add(new TokFuncLocalName()); - else if (name == "namespace-uri") - tokens.add(new TokFuncNamespaceUri()); - else if (name == "name") - tokens.add(new TokFuncName()); - else if (name == "string") - tokens.add(new TokFuncString()); - else if (name == "concat") - tokens.add(new TokFuncConcat()); - else if (name == "starts-with") - tokens.add(new TokFuncStartsWith()); - else if (name == "contains") - tokens.add(new TokFuncContains()); - else if (name == "substring-before") - tokens.add(new TokFuncSubstringBefore()); - else if (name == "substring-after") - tokens.add(new TokFuncSubstringAfter()); - else if (name == "substring") - tokens.add(new TokFuncSubstring()); - else if (name == "string-length") - tokens.add(new TokFuncStringLength()); - else if (name == "normalize-space") - tokens.add(new TokFuncNormalizeSpace()); - else if (name == "translate") - tokens.add(new TokFuncTranslate()); - else if (name == "boolean") - tokens.add(new TokFuncBoolean()); - else if (name == "not") - tokens.add(new TokFuncNot()); - else if (name == "true") - tokens.add(new TokFuncTrue()); - else if (name == "false") - tokens.add(new TokFuncFalse()); - else if (name == "lang") - tokens.add(new TokFuncLang()); - else if (name == "number") - tokens.add(new TokFuncNumber()); - else if (name == "sum") - tokens.add(new TokFuncSum()); - else if (name == "floor") - tokens.add(new TokFuncFloor()); - else if (name == "ceiling") - tokens.add(new TokFuncCeiling()); - else if (name == "round") - tokens.add(new TokFuncRound()); - else - { - error("unknown function name:'%s'", name.c_str()); - return -1; - } - return p; -} - - -/** - * [17] Argument ::= - * Expr - */ -int XPathParser::getArgument(int p0, int depth) -{ - traceStack("getArgument", p0, depth); - int p = p0; - int p2 = getExpr(p, depth+1); - if (p2 < 0) - { - error("Argument expression"); - return -1; - } - p = p2; - return p; -} - - -/** - * [18] UnionExpr ::= - * PathExpr - * | UnionExpr '|' PathExpr - */ -int XPathParser::getUnionExpr(int p0, int depth) -{ - traceStack("getUnionExpr", p0, depth); - int p = p0; - int p2 = getPathExpr(p, depth+1); - if (p2 < 0) - { - error("Path expression for union"); - return -1; - } - p = p2; - LexTok t = lexTok(p); - if (t.getType() == OPERATOR && t.getIntValue() == PIPE) - { - p++; - p2 = getUnionExpr(p, depth+1); - if (p2 < 0) - { - error("OR (|) requires union expression on the left"); - return -1; - } - tokens.add(new TokUnion()); - p = p2; - } - return p; -} - - -/** - * [19] PathExpr ::= - * LocationPath - * | FilterExpr - * | FilterExpr '/' RelativeLocationPath - * | FilterExpr '//' RelativeLocationPath - */ -int XPathParser::getPathExpr(int p0, int depth) -{ - traceStack("getPathExpr", p0, depth); - int p = p0; - int p2; - - p2 = getLocationPath(p, depth+1); - if (p2 < 0) - { - error("Location path in path expression"); - return -1; - } - if (p2 > p) - { - p = p2; - return p; - } - - p2 = getFilterExpr(p, depth+1); - if (p2 < 0) - { - error("Filter expression in path expression"); - return -1; - } - if (p2 <= p) - return p0; - p = p2; - - LexTok t = lexTok(p); - if (t.getType() == OPERATOR && t.getIntValue() == SLASH) - { - p++; - p2 = getRelativeLocationPath(p, depth+1); - if (p2 < 0) - { - error("Relative location after / in path expression"); - return -1; - } - p = p2; - return p; - } - - if (t.getType() == OPERATOR && t.getIntValue() == DOUBLE_SLASH) - { - p++; - p2 = getRelativeLocationPath(p, depth+1); - if (p2 < 0) - { - error("Relative location after // in path expression"); - return -1; - } - p = p2; - return p; - } - return p; -} - - -/** - * [20] FilterExpr ::= - * PrimaryExpr - * | FilterExpr Predicate - */ -int XPathParser::getFilterExpr(int p0, int depth) -{ - traceStack("getFilterExpr", p0, depth); - int p = p0; - - int p2 = getPrimaryExpr(p, depth+1); - if (p2 < 0) - { - error("Primary expression in path expression"); - return -1; - } - if (p2 > p) - { - p = p2; - while (true) - { - p2 = getPredicate(p, depth+1); - if (p2 < 0) - { - error("Predicate in primary expression"); - return -1; - } - if (p2 > p) - { - p = p2; - } - else - break; - } - return p; - } - - return p0; -} - - -/** - * [21] OrExpr ::= - * AndExpr - * | OrExpr 'or' AndExpr - */ -int XPathParser::getOrExpr(int p0, int depth) -{ - traceStack("getOrExpr", p0, depth); - int p = p0; - int p2 = getAndExpr(p, depth+1); - if (p2 < 0) - { - error("AND expression in OR expression"); - return -1; - } - if (p2 > p) - { - p = p2; - LexTok t = lexTok(p); - if (t.getType() == OPERATOR && t.getIntValue() == OR) - { - p++; - p2 = getAndExpr(p, depth+1); - if (p2 <= p) - { - error("AND expression in OR expression"); - return -1; - } - p = p2; - return p; - } - tokens.add(new TokOr()); - return p; - } - - return p0; -} - - -/** - * [22] AndExpr ::= - * EqualityExpr - * | AndExpr 'and' EqualityExpr - */ -int XPathParser::getAndExpr(int p0, int depth) -{ - traceStack("getAndExpr", p0, depth); - int p = p0; - int p2 = getEqualityExpr(p, depth+1); - if (p2 < 0) - { - error("Equality expression in AND expression"); - return -1; - } - if (p2 > p) - { - p = p2; - LexTok t = lexTok(p); - if (t.getType() == OPERATOR && t.getIntValue() == AND) - { - p++; - p2 = getAndExpr(p, depth+1); - if (p2 <= p) - { - error("AND expression after 'and'"); - return -1; - } - p = p2; - return p; - } - tokens.add(new TokAnd()); - return p; - } - - return p0; -} - - -/** - * [23] EqualityExpr ::= - * RelationalExpr - * | EqualityExpr '=' RelationalExpr - * | EqualityExpr '!=' RelationalExpr - */ -int XPathParser::getEqualityExpr(int p0, int depth) -{ - traceStack("getEqualityExpr", p0, depth); - int p = p0; - int p2 = getRelationalExpr(p, depth+1); - if (p2 < 0) - { - error("Relation expression in equality expression"); - return -1; - } - if (p2 > p) - { - p = p2; - LexTok t = lexTok(p); - if (t.getType() == OPERATOR && t.getIntValue() == EQUALS) - { - p++; - p2 = getEqualityExpr(p, depth+1); - if (p2 <= p) - { - error("Equality expression expected after =="); - return -1; - } - tokens.add(new TokEquals()); - p = p2; - return p; - } - - if (t.getType() == OPERATOR && t.getIntValue() == NOT_EQUALS) - { - p++; - p2 = getEqualityExpr(p, depth+1); - if (p2 <= p) - { - error("Equality expression expected after !="); - return -1; - } - tokens.add(new TokNotEquals()); - p = p2; - return p; - } - - return p; - } - - return p0; -} - - -/** - * [24] RelationalExpr ::= - * AdditiveExpr - * | RelationalExpr '<' AdditiveExpr - * | RelationalExpr '>' AdditiveExpr - * | RelationalExpr '<=' AdditiveExpr - * | RelationalExpr '>=' AdditiveExpr - */ -int XPathParser::getRelationalExpr(int p0, int depth) -{ - traceStack("getRelationalExpr", p0, depth); - int p = p0; - int p2 = getAdditiveExpr(p, depth+1); - if (p2 < 0) - { - error("Additive expression in relational expression"); - return -1; - } - if (p2 > p) - { - p = p2; - LexTok t = lexTok(p); - - if (t.getType() == OPERATOR && t.getIntValue() == GREATER_THAN) - { - p++; - p2 = getRelationalExpr(p, depth+1); - if (p2 <= p) - { - error("Relational expression after '>'"); - return -1; - } - tokens.add(new TokGreaterThan()); - p = p2; - return p; - } - if (t.getType() == OPERATOR && t.getIntValue() == LESS_THAN) - { - p++; - p2 = getRelationalExpr(p, depth+1); - if (p2 <= p) - { - error("Relational expression after '<'"); - return -1; - } - tokens.add(new TokLessThan()); - p = p2; - return p; - } - if (t.getType() == OPERATOR && t.getIntValue() == GREATER_THAN_EQUALS) - { - p++; - p2 = getRelationalExpr(p, depth+1); - if (p2 <= p) - { - error("Relational expression after '>='"); - return -1; - } - tokens.add(new TokGreaterThanEquals()); - p = p2; - return p; - } - if (t.getType() == OPERATOR && t.getIntValue() == LESS_THAN_EQUALS) - { - p++; - p2 = getRelationalExpr(p, depth+1); - if (p2 <= p) - { - error("Relational expression after '<='"); - return -1; - } - tokens.add(new TokLessThanEquals()); - p = p2; - return p; - } - - - return p; - } - - return p0; -} - - -/** - * [25] AdditiveExp ::= - * MultiplicativeExpr - * | AdditiveExpr '+' MultiplicativeExpr - * | AdditiveExpr '-' MultiplicativeExpr - */ -int XPathParser::getAdditiveExpr(int p0, int depth) -{ - traceStack("getAdditiveExpr", p0, depth); - int p = p0; - int p2 = getMultiplicativeExpr(p, depth+1); - if (p2 < 0) - { - error("Multiplicative expression in additive expression"); - return -1; - } - if (p2 > p) - { - p = p2; - LexTok t = lexTok(p); - - if (t.getType() == OPERATOR && t.getIntValue() == PLUS) - { - p++; - p2 = getAdditiveExpr(p, depth+1); - if (p2 <= p) - { - error("Additive expression after '+'"); - return -1; - } - tokens.add(new TokPlus()); - p = p2; - return p; - } - if (t.getType() == OPERATOR && t.getIntValue() == MINUS) - { - p++; - p2 = getAdditiveExpr(p, depth+1); - if (p2 <= p) - { - error("Additive expression after '-'"); - return -1; - } - tokens.add(new TokMinus()); - p = p2; - return p; - } - - - return p; - } - - return p0; -} - - -/** - * [26] MultiplicativeExpr ::= - * UnaryExpr - * | MultiplicativeExpr MultiplyOperator UnaryExpr - * | MultiplicativeExpr 'div' UnaryExpr - * | MultiplicativeExpr 'mod' UnaryExpr - */ -int XPathParser::getMultiplicativeExpr(int p0, int depth) -{ - traceStack("getMultiplicativeExpr", p0, depth); - int p = p0; - int p2 = getUnaryExpr(p, depth+1); - if (p2 < 0) - { - error("Unary expression in multiplicative expression"); - return -1; - } - if (p2 > p) - { - p = p2; - LexTok t = lexTok(p); - - if (t.getType() == OPERATOR && t.getIntValue() == MULTIPLY) - { - p++; - p2 = getMultiplicativeExpr(p, depth+1); - if (p2 <= p) - { - error("Multiplicative expression after '*'"); - return -1; - } - tokens.add(new TokMul()); - p = p2; - return p; - } - - if (t.getType() == OPERATOR && t.getIntValue() == DIV) - { - p++; - p2 = getMultiplicativeExpr(p, depth+1); - if (p2 <= p) - { - error("Multiplicative expression after 'div'"); - return -1; - } - tokens.add(new TokDiv()); - p = p2; - return p; - } - - if (t.getType() == OPERATOR && t.getIntValue() == MOD) - { - p++; - p2 = getMultiplicativeExpr(p, depth+1); - if (p2 <= p) - { - error("Multiplicative expression after 'mod'"); - return -1; - } - tokens.add(new TokMod()); - p = p2; - return p; - } - - - return p; - } - - return p0; -} - - -/** - * [27] UnaryExpr ::= - * UnionExpr - * | '-' UnaryExpr - */ -int XPathParser::getUnaryExpr(int p0, int depth) -{ - traceStack("getUnaryExpr", p0, depth); - int p = p0; - int p2 = getUnionExpr(p, depth+1); - if (p2 < 0) - { - error("Union expression in unary expression"); - return -1; - } - if (p2 > p) - { - p = p2; - return p; - } - - if (lexTokType(p) == '-') - { - p++; - p2 = getUnaryExpr(p, depth+1); - if (p2 < 0) - { - error("Unary expression after '-'"); - return -1; - } - tokens.add(new TokNeg()); - p = p2; - return p; - } - - return p0; -} - - -//###################################################### -//# NOT USED!!! -//## The grammar definitions below are -//## handled by lexical parsing, and will not be used -//###################################################### - -/** - * [28] ExprToken ::= - * '(' | ')' | '[' | ']' | '.' | '..' | '@' | ',' | '::' - * | NameTest - * | NodeType - * | Operator - * | FunctionName - * | AxisName - * | Literal - * | Number - * | VariableReference - */ -int XPathParser::getExprToken(int p0, int depth) -{ - traceStack("getExprToken", p0, depth); - return p0; -} - - -/** - * [29] Literal ::= - * '"' [^"]* '"' - * | "'" [^']* "'" - */ -int XPathParser::getLiteral(int p0, int depth) -{ - traceStack("getLiteral", p0, depth); - return p0; -} - - -/** - * [30] Number ::= - * Digits ('.' Digits?)? - * | '.' Digits - */ -int XPathParser::getNumber(int p0, int depth) -{ - traceStack("getNumber", p0, depth); - return p0; -} - - -/** - * [31] Digits ::= - * [0-9]+ - */ -int XPathParser::getDigits(int p0, int depth) -{ - traceStack("getDigits", p0, depth); - return p0; -} - - -/** - * [32] Operator ::= - * OperatorName - * | MultiplyOperator - * | '/' | '//' | '|' | '+' | '-' | '=' - * | '!=' | '<' | '<=' | '>' | '>=' - */ -int XPathParser::getOperator(int p0, int depth) -{ - traceStack("getOperator", p0, depth); - return p0; -} - - -/** - * [33] OperatorName ::= - * 'and' | 'or' | 'mod' | 'div' - */ -int XPathParser::getOperatorName(int p0, int depth) -{ - traceStack("getOperatorName", p0, depth); - return p0; -} - - -/** - * [34] MultiplyOperator ::= - * '*' - */ -int XPathParser::getMultiplyOperator(int p0, int depth) -{ - traceStack("getMultiplyOperator", p0, depth); - return p0; -} - - -/** - * [35] FunctionName ::= - * QName - NodeType - */ -int XPathParser::getFunctionName(int p0, int depth) -{ - traceStack("getFunctionName", p0, depth); - return p0; -} - - -/** - * [36] VariableReference ::= - * '$' QName - */ -int XPathParser::getVariableReference(int p0, int depth) -{ - traceStack("getVariableReference", p0, depth); - return p0; -} - - -/** - * [37] NameTest ::= - * '*' - * | NCName ':' '*' - * | QName - */ -int XPathParser::getNameTest(int p0, int depth) -{ - traceStack("getNameTest", p0, depth); - return p0; -} - - -/** - * [38] NodeType ::= - * 'comment' - * | 'text' - * | 'processing-instruction' - * | 'node' - */ -int XPathParser::getNodeType(int p0, int depth) -{ - traceStack("getNodeType", p0, depth); - return p0; -} - - -/** - * [39] ExprWhitespace ::= - * S - */ -int XPathParser::getExprWhitespace(int p0, int depth) -{ - traceStack("getExprWhitespace", p0, depth); - return p0; -} - - - - - -//######################################################################### -//# H I G H L E V E L P A R S I N G -//######################################################################### - -/** - * Parse a candidate XPath string. Leave a copy in 'tokens.' - */ -bool XPathParser::parse(const DOMString &xpathString) -{ - int p0 = 0; - - DOMString str = xpathString; - - parsebuf = (char *)str.c_str(); - parselen = (int) str.size(); - position = 0; - - trace("## parsing string: '%s'", parsebuf); - - lexicalScan(); - lexicalTokenDump(); - - tokens.clear();//Get ready to store new tokens - - int p = getLocationPath(p0, 0); - - parsebuf = NULL; - parselen = 0; - - if (p <= p0) - { - //return false; - } - - return true; -} - - - - - -//######################################################################### -//# E V A L U A T E -//######################################################################### - - - - -/** - * This wraps the two-step call to parse(), then execute() to get a NodeList - * of matching DOM nodes - */ -NodeList XPathParser::evaluate(const Node *root, - const DOMString &xpathString) -{ - NodeList list; - - //### Maybe do caching for speed here - - //### Parse and execute - //### Error message can be generated as a side effect - if (!parse(xpathString)) - return list; - - if (debug) - tokens.dump(); - - //### Execute the token list - TokenExecutor executor; - list = executor.execute(tokens, root); - - return list; -} - - - -} // namespace xpath -} // namespace dom -} // namespace w3c -} // namespace org -//######################################################################### -//# E N D O F F I L E -//######################################################################### - - - - +/** + * Phoebe DOM Implementation. + * + * This is a C++ approximation of the W3C DOM model, which follows + * fairly closely the specifications in the various .idl files, copies of + * which are provided for reference. Most important is this one: + * + * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2006 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +#include "charclass.h" +#include "xpathparser.h" + + +namespace org +{ +namespace w3c +{ +namespace dom +{ +namespace xpath +{ + + +//######################################################################### +//# M E S S A G E S +//######################################################################### + + + +void XPathParser::trace(const char *fmt, ...) +{ + if (!debug) + return; + + FILE *f = stdout; + + va_list args; + va_start(args, fmt); + fprintf(f, "XPathParser: "); + vfprintf(f, fmt, args); + fprintf(f, "\n"); + va_end(args); +} + + + +void XPathParser::error(const char *fmt, ...) +{ + FILE *f = stdout; + va_list args; + va_start(args, fmt); + fprintf(f, "XPathParser ERROR: "); + vfprintf(f, fmt, args); + fprintf(f, "\n"); + va_end(args); + + //Print location in string + fprintf(f, "%s\n", parsebuf); + for (int i=0 ; i=(int)lexicalTokens.size()) + { + LexTok tok; + return tok; + } + return lexicalTokens[p]; +} + +int XPathParser::lexTokType(int p) +{ + if (p < 0 || p>=(int)lexicalTokens.size()) + return -1; + return lexicalTokens[p].getType(); +} + + + + + + + + +int XPathParser::peek(int p) +{ + if (p >= parselen) + return -1; + position = p; + return parsebuf[p] ; +} + + +int XPathParser::get(int p) +{ + if (p >= parselen) + return -1; + position = p; + return parsebuf[p]; +} + +int XPathParser::skipwhite(int p0) +{ + int p = p0; + + while (p < parselen) + { + int ch = peek(p); + if (!isWhitespace(ch)) + break; + ch = get(p++); + } + return p; +} + +int XPathParser::getword(int p0, DOMString &str) +{ + int p = p0; + while (p < parselen) + { + int ch = peek(p); + if (!isLetterOrDigit(ch)) + break; + ch = get(p++); + str.push_back((XMLCh)ch); + } + return p; +} + +int XPathParser::match(int p, const char *str) +{ + while (*str) + { + if (p >= parselen) + return -1; + if (parsebuf[p] != *str) + return -1; + p++; str++; + } + return p; +} + + + + +int XPathParser::getNumber(int p0, double &dresult) +{ + int p = p0; + if (p >= parselen) + return p0;/*need at least x*/ + + bool isdouble = false; + bool negative = false; + + int ch = parsebuf[p]; + if (ch=='-') + { + p++; + negative = true; + if (p >= parselen) return p0; + } + + bool seen_dot = false; + bool seen_e = false; + bool seen_eminus = false; + + DOMString num; + + int i = p; + while (i < parselen) + { + ch = parsebuf[i]; + if (ch=='.') + { + if (seen_dot) + return p0; + seen_dot = true; + isdouble = true; + } + else if (ch=='e' || ch=='E') + { + if (seen_e || !seen_dot) + return p0; + seen_e = true; + } + else if (ch=='-' && seen_e) + { + if (seen_eminus || !seen_dot) + return p0; + seen_eminus = true; + } + else if (!isDigit(ch)) + break; + num.push_back((XMLCh)ch); + i++; + } + + if (i == p)/*no digits*/ + return p0; + if (isdouble) + { + const char *begin = num.c_str(); + char *end; + dresult = strtod(begin,&end); + if (!end)/*not a number?*/ + { + error("Error formatting double: %s\n", num.c_str()); + return p0; + } + } + else + { + const char *begin = num.c_str(); + char *end; + dresult = (double)strtol(begin,&end,10); + if (!end)/*not a number?*/ + { + error("Error formatting integer: %s\n", num.c_str()); + return p0; + } + } + p = i; + return p; +} + + + +int XPathParser::getLiteral(int p0, DOMString &result) +{ + int p = p0; + int ch = peek(p); + int quotechar = 0; + if (ch == '"' || ch == '\'') + { + quotechar = ch; + } + else + return p0; + p++; + while (true) + { + if (p >= parselen) + { + error("Unterminated literal string"); + return -1; + } + ch = peek(p); + if (ch == quotechar) + break; + result.push_back((XMLCh)ch); + p++; + } + p++; //skip over closing " + return p; +} + + + +/** + * NCName is a 'non-colonized' name + */ +int XPathParser::getNCName(int p0, DOMString &result) +{ + int p = p0; + int ch = peek(p); + if (ch != '_' && !isLetter(ch)) + return p0; + + result.push_back((XMLCh)ch); + p++; + while (p < parselen) + { + ch = peek(p); + if ( isLetterOrDigit(ch) || + isCombiningChar(ch) || + isExtender(ch) || + ch == '.' || ch == '-' || ch == '_' ) + { + result.push_back((XMLCh)ch); + p++; + } + else + break; + } + return p; +} + + + +/** + * Name parsing with post-parsing + */ +int XPathParser::getNameTest(int p0, DOMString &result) +{ + int p = p0; + int ch = peek(p); + if (ch == '*') + { + result.push_back((XMLCh)ch); + p++; + return p; + } + + DOMString ncName; + int p2 = getNCName(p, ncName); + if (p2 <= p) + return p0; + + result = ncName; + p = p2; + + ch = peek(p); + if (ch != ':' )//short name. we are done + { + return p; + } + + if (peek(p+1) == ':') //was name:: which is ok + return p; + + result.push_back(':'); + + p++; + ch = peek(p); + if (ch == '*') + { + result.push_back((XMLCh)ch); + p++; + return p; + } + + DOMString ncName2; + p2 = getNCName(p, ncName2); + if (p2 <= p) + { + if (peek(p) == ':') //was name:: which is ok + return p0; + error("Nothing after ':' in QName"); + return -1; + } + + result.append(ncName2); + + p = p2; + + return p; +} + + + +int XPathParser::lexicalScan() +{ + lexicalTokens.clear(); + + int p = 0; + int p2 = p; + + while (p < parselen) + { + p2 = skipwhite(p); + p = p2; + + //trace("nextChar:%c", peek(p)); + bool selected = false; + + //### LITERAL EXPR TOKENS + for (int i=2 ; i<=10 ; i++) + { + p2 = match(p, exprTokenTable[i].sval); + if (p2 > p) + { + lexTokAdd(exprTokenTable[i].ival, p); + p = p2; + selected = true; + break; + } + } + if (selected) + continue; + + //### OPERATORS + for (LookupEntry *entry = operatorTable; entry->sval ; entry++) + { + p2 = match(p, entry->sval); + if (p2 > p) + { + long op = (long)entry->ival; + //according to the disambiguating rule for * in the spec + if (op == MULTIPLY && lexicalTokens.size() > 0) + { + int ltyp = lexTokType(lexicalTokens.size()-1); + if (ltyp != AMPR && ltyp != DOUBLE_COLON && + ltyp != LPAREN && ltyp != RBRACKET && + ltyp != COMMA && ltyp != OPERATOR ) + { + lexTokAdd(OPERATOR, p, (long)entry->ival); + p = p2; + selected = true; + break; + } + } + else + { + lexTokAdd(OPERATOR, p, (long)entry->ival); + p = p2; + selected = true; + break; + } + } + } + if (selected) + continue; + + //### NODE TYPES + for (LookupEntry *entry = nodeTypeTable; entry->sval ; entry++) + { + p2 = match(p, entry->sval); + if (p2 > p) + { + lexTokAdd(NODE_TYPE, p, (long)entry->ival); + p = p2; + selected = true; + break; + } + } + if (selected) + continue; + + //### AXIS NAMES + for (LookupEntry *entry = axisNameTable; entry->sval ; entry++) + { + p2 = match(p, entry->sval); + if (p2 > p) + { + lexTokAdd(AXIS_NAME, p, (long)entry->ival); + p = p2; + selected = true; + break; + } + } + if (selected) + continue; + + //### NAME TEST + DOMString ntResult; + p2 = getNameTest(p, ntResult); + if (p2 > p) + { + int p3 = skipwhite(p2); + if (peek(p3) == '(') + lexTokAdd(FUNCTION_NAME, p, ntResult); + else + lexTokAdd(NAME_TEST, p, ntResult); + p = p2; + selected = true; + } + if (selected) + continue; + + //### VARIABLE REFERENCE + if (peek(p) == '$') + { + p++; + DOMString qnResult; + p2 = getNCName(p, qnResult); + if (p2 > p) + { + lexTokAdd(VARIABLE_REFERENCE, p, qnResult); + p = p2; + selected = true; + } + else + { + error("Variable referenced with '$' requires a qualified name\n"); + return -1; + } + } + if (selected) + continue; + + //### NUMBER + double numval; + p2 = getNumber(p, numval); + if (p2 > p) + { + lexTokAdd(NUMBER, p, numval); + p = p2; + selected = true; + } + if (selected) + continue; + + //### LITERAL + DOMString strval; + p2 = getLiteral(p, strval); + if (p2 > p) + { + lexTokAdd(LITERAL, p, strval); + p = p2; + selected = true; + } + if (selected) + continue; + + //### CHAR (default, none of the above) + lexTokAdd(CHAR, p, (long) peek(p)); + p++; + + }//while p + + + return p; +} + + + + + + + + + + + + + + + + + + + + + + +//######################################################################### +//# X P A T H G R A M M A R P A R S I N G +//######################################################################### + + +void XPathParser::tokAdd(Token *tok) +{ + tokens.add(tok); +} + +/** + * [1] LocationPath ::= + * RelativeLocationPath + * | AbsoluteLocationPath + */ +int XPathParser::getLocationPath(int p0, int depth) +{ + traceStack("getLocationPath", p0, depth); + int p = p0; + + p = skipwhite(p); + + int p2 = getAbsoluteLocationPath(p, depth+1); + if (p2 > p) + { + tokens.add(new TokAbsolute()); + return p2; + } + + p2 = getRelativeLocationPath(p, depth+1); + if (p2 > p) + { + tokens.add(new TokRelative()); + return p2; + } + + return p0; +} + + +/** + * [2] AbsoluteLocationPath ::= + * '/' RelativeLocationPath? + * | AbbreviatedAbsoluteLocationPath + */ +int XPathParser::getAbsoluteLocationPath(int p0, int depth) +{ + traceStack("getAbsoluteLocationPath", p0, depth); + + int p = p0; + LexTok t = lexTok(p); + if (t.getType() == OPERATOR && t.getIntValue()==SLASH) + { + p++; + int p2 = getRelativeLocationPath(p, depth+1); + if (p2 <= p) + { + error("Relative path after '/'"); + return -1; + } + p = p2; + return p; + } + + //AbbreviatedAbsoluteLocationPath + if (t.getType() == OPERATOR && t.getIntValue()==DOUBLE_SLASH) + { + p++; + int p2 = getRelativeLocationPath(p, depth+1); + if (p2 <= p) + { + error("Relative path after '//'"); + return -1; + } + p = p2; + return p; + } + + + return p0; +} + + +/** + * [3] RelativeLocationPath ::= + * Step + * | RelativeLocationPath '/' Step + * | AbbreviatedRelativeLocationPath + */ +int XPathParser::getRelativeLocationPath(int p0, int depth) +{ + traceStack("getRelativeLocationPath", p0, depth); + int p = p0; + int p2 = getStep(p, depth+1); + if (p2 < 0) + return -1; + if (p2 > p) + { + p = p2; + LexTok t = lexTok(p); + if (t.getType() == OPERATOR && t.getIntValue()==SLASH) + { + p++; + p2 = getRelativeLocationPath(p, depth+1); + if (p2 < 0) + { + error("Relative path after '/'"); + return -1; + } + p = p2; + return p; + } + //AbbreviatedRelativeLocationPath + if (t.getType() == OPERATOR && t.getIntValue()==DOUBLE_SLASH) + { + p++; + // a '//' is an abbreviation for /descendant-or-self:node()/ + tokAdd(new TokAxisDescendantOrSelf()); + p2 = getRelativeLocationPath(p, depth+1); + if (p2 < 0) + { + error("Relative path after '//'"); + return -1; + } + p = p2; + return p; + } + return p; + } + + + return p0; +} + + +/** + * [4] Step ::= + * AxisSpecifier NodeTest Predicate* + * | AbbreviatedStep + */ +int XPathParser::getStep(int p0, int depth) +{ + traceStack("getStep", p0, depth); + + int p = p0; + + lexTok(p).print(); + + //This can be (and usually is) 0-length + int p2 = getAxisSpecifier(p, depth+1); + if (p2 < 0) + { + error("Axis specifier in step section"); + return -1; + } + p = p2; + p2 = getNodeTest(p, depth+1); + if (p2 < 0) + { + error("Node test in step section"); + return -1; + } + + if (p2 > p) + { + p = p2; + p2 = getPredicate(p, depth+1); + if (p2 < 0) + { + error("Predicate in step section"); + return -1; + } + p = p2; + return p; + } + + //AbbreviatedStep + if (lexTokType(p) == DOT) + { + p++; + return p; + } + + //AbbreviatedStep + if (lexTokType(p) == DOUBLE_DOT) + { + p++; + return p; + } + + return p0; +} + + +/** + * [5] AxisSpecifier ::= + * AxisName '::' + * | AbbreviatedAxisSpecifier + */ +int XPathParser::getAxisSpecifier(int p0, int depth) +{ + traceStack("getAxisSpecifier", p0, depth); + int p = p0; + if (lexTokType(p) == AXIS_NAME) + { + LexTok t = lexTok(p); + int axisType = t.getIntValue(); + p++; + if (lexTokType(p) != DOUBLE_COLON) + { + error("'::' required after axis name literal"); + return -1; + } + p++; + switch (axisType) + { + case ANCESTOR_OR_SELF: + tokAdd(new TokAxisAncestorOrSelf()); + case ANCESTOR: + tokAdd(new TokAxisAncestor()); + case ATTRIBUTE: + tokAdd(new TokAxisAttribute()); + case CHILD: + tokAdd(new TokAxisChild()); + case DESCENDANT_OR_SELF: + tokAdd(new TokAxisDescendantOrSelf()); + case DESCENDANT: + tokAdd(new TokAxisDescendant()); + case FOLLOWING_SIBLING: + tokAdd(new TokAxisFollowingSibling()); + case FOLLOWING: + tokAdd(new TokAxisFollowing()); + case NAMESPACE: + tokAdd(new TokAxisNamespace()); + case PARENT: + tokAdd(new TokAxisParent()); + case PRECEDING_SIBLING: + tokAdd(new TokAxisPrecedingSibling()); + case PRECEDING: + tokAdd(new TokAxisPreceding()); + case SELF: + tokAdd(new TokAxisSelf()); + default: + { + error("unknown axis type %d", axisType); + return -1; + } + } + return p; + } + + //AbbreviatedAxisSpecifier + if (lexTokType(p) == AMPR) + { + p++; + return p; + } + + return p0; +} + + +/** + * [6] AxisName ::= + * 'ancestor' + * | 'ancestor-or-self' + * | 'attribute' + * | 'child' + * | 'descendant' + * | 'descendant-or-self' + * | 'following' + * | 'following-sibling' + * | 'namespace' + * | 'parent' + * | 'preceding' + * | 'preceding-sibling' + * | 'self' + * NOTE: This definition, and those at the bottom, is not + * needed. Its functionality is handled by lexical scanning. + * It is left here for reference. + */ +int XPathParser::getAxisName(int p0, int depth) +{ + traceStack("getAxisName", p0, depth); + return p0; +} + + +/** + * [7] NodeTest ::= + * NameTest + * | NodeType '(' ')' + * | 'processing-instruction' '(' Literal ')' + */ +int XPathParser::getNodeTest(int p0, int depth) +{ + traceStack("getNodeTest", p0, depth); + int p = p0; + + LexTok t = lexTok(p); + if (t.getType() == NAME_TEST) + { + p++; + tokAdd(new TokNameTest(t.getStringValue())); + return p; + } + if (t.getType() == NODE_TYPE) + { + if (t.getIntValue() == PROCESSING_INSTRUCTION) + { + if (lexTokType(p) != LPAREN || + lexTokType(p+1) != LITERAL || + lexTokType(p+2) != RPAREN ) + { + error("processing instruction requires (\"literal string\")"); + return -1; + } + p += 3; + } + else + { + if (lexTokType(p+1) != LPAREN || + lexTokType(p+2) != RPAREN ) + { + error("processing instruction requires ()"); + return -1; + } + p += 2; + } + return p; + } + + return p0; +} + + +/** + * [8] Predicate ::= + * '[' PredicateExpr ']' + */ +int XPathParser::getPredicate(int p0, int depth) +{ + traceStack("getPredicate", p0, depth); + + int p = p0; + if (lexTokType(p) != LBRACKET) + return p0; + + p++; + int p2 = getPredicateExpr(p, depth+1); + if (p2 <= p) + { + error("Predicate expression in predicate"); + return -1; + } + + p = p2; + lexTok(p).print(); + if (lexTokType(p) != RBRACKET) + { + error("Predicate expression requires closing ']'"); + return -1; + } + p++; + return p; +} + + +/** + * [9] PredicateExpr ::= + * Expr + */ +int XPathParser::getPredicateExpr(int p0, int depth) +{ + traceStack("getPredicateExpr", p0, depth); + int p = p0; + int p2 = getExpr(p, depth+1); + if (p2 < 0) + { + error("Expression in predicate expression"); + return -1; + } + p = p2; + return p; +} + + +/** + * [10] AbbreviatedAbsoluteLocationPath ::= + * '//' RelativeLocationPath + * NOTE: not used. handled in getAbsoluteLocationPath() + */ +int XPathParser::getAbbreviatedAbsoluteLocationPath(int p0, int depth) +{ + traceStack("getAbbreviatedAbsoluteLocationPath", p0, depth); + + return p0; +} + +/** + * [11] AbbreviatedRelativeLocationPath ::= + * RelativeLocationPath '//' Step + * NOTE: not used. handled in getRelativeLocationPath() + */ +int XPathParser::getAbbreviatedRelativeLocationPath(int p0, int depth) +{ + traceStack("getAbbreviatedRelativeLocationPath", p0, depth); + return p0; +} + +/** + * [12] AbbreviatedStep ::= + * '.' + * | '..' + * NOTE: not used. handled in getStep() + */ +int XPathParser::getAbbreviatedStep(int p0, int depth) +{ + traceStack("getAbbreviatedStep", p0, depth); + return p0; +} + + +/** + * [13] AbbreviatedAxisSpecifier ::= + * '@'? + * NOTE: not used. handled in getAxisSpecifier() + */ +int XPathParser::getAbbreviatedAxisSpecifier(int p0, int depth) +{ + traceStack("getAbbreviatedAxisSpecifier", p0, depth); + return p0; +} + + +/** + * [14] Expr ::= + * OrExpr + */ +int XPathParser::getExpr(int p0, int depth) +{ + traceStack("getExpr", p0, depth); + + int p = p0; + + int p2 = getOrExpr(p, depth+1); + if (p2 < 0) + { + error("OR expression in expression"); + return -1; + } + p = p2; + + return p; +} + + +/** + * [15] PrimaryExpr ::= + * VariableReference + * | '(' Expr ')' + * | Literal + * | Number + * | FunctionCall + */ +int XPathParser::getPrimaryExpr(int p0, int depth) +{ + traceStack("getPrimaryExpr", p0, depth); + int p = p0; + int p2 = p; + + if (lexTokType(p) == VARIABLE_REFERENCE) + { + p++; + return p; + } + + if (lexTokType(p) == LPAREN) + { + p++; + p2 = getExpr(p, depth+1); + if (p2 <= p) + { + error("Expression in primary expression"); + return -1; + } + p += p2; + if (lexTokType(p) != RPAREN) + { + error("Primary expression requires closing ')'"); + return -1; + } + } + + if (lexTokType(p) == LITERAL) + { + tokens.add(new TokStr(lexTok(p).getStringValue())); + p++; + return p; + } + + if (lexTokType(p) == NUMBER) + { + tokens.add(new TokFloat(lexTok(p).getDoubleValue())); + p++; + return p; + } + + p2 = getFunctionCall(p, depth+1); + if (p2 < 0) + { + error("Function call in primary expression"); + return -1; + } + if (p2 > p) + { + p = p2; + return p; + } + + return p0; +} + + +/** + * [16] FunctionCall ::= + * FunctionName '(' ( Argument ( ',' Argument )* )? ')' + */ +int XPathParser::getFunctionCall(int p0, int depth) +{ + traceStack("getFunctionCall", p0, depth); + int p = p0; + + if (lexTokType(p) != FUNCTION_NAME) + return p0; + + DOMString name = lexTok(p).getStringValue(); + + p++; + + if (lexTokType(p) != LPAREN) //this makes a function + return p0; + p++; + + int argCount = 0; + + int p2 = getArgument(p, depth+1); + if (p2 < 0) + { + error("Error in function argument"); + return -1; + } + if (p2 > p) + { + argCount++; + p = p2; + while (lexTokType(p) == COMMA) + { + p++; + p2 = getArgument(p, depth+1); + if (p2 <= p) + { + error("Error in function argument"); + return -1; + } + if (p2 > p) + argCount++; + //do we add a token here? i dont think so + p = p2; + } + } + + if (lexTokType(p) != RPAREN) //mandatory + { + error("Function requires closing ')'"); + return -1; + } + p++; + + // Function names from http://www.w3.org/TR/xpath#NT-FunctionName + if (name == "last") + tokens.add(new TokFuncLast()); + else if (name == "position") + tokens.add(new TokFuncPosition()); + else if (name == "count") + tokens.add(new TokFuncCount()); + else if (name == "id") + tokens.add(new TokFuncId()); + else if (name == "local-name") + tokens.add(new TokFuncLocalName()); + else if (name == "namespace-uri") + tokens.add(new TokFuncNamespaceUri()); + else if (name == "name") + tokens.add(new TokFuncName()); + else if (name == "string") + tokens.add(new TokFuncString()); + else if (name == "concat") + tokens.add(new TokFuncConcat()); + else if (name == "starts-with") + tokens.add(new TokFuncStartsWith()); + else if (name == "contains") + tokens.add(new TokFuncContains()); + else if (name == "substring-before") + tokens.add(new TokFuncSubstringBefore()); + else if (name == "substring-after") + tokens.add(new TokFuncSubstringAfter()); + else if (name == "substring") + tokens.add(new TokFuncSubstring()); + else if (name == "string-length") + tokens.add(new TokFuncStringLength()); + else if (name == "normalize-space") + tokens.add(new TokFuncNormalizeSpace()); + else if (name == "translate") + tokens.add(new TokFuncTranslate()); + else if (name == "boolean") + tokens.add(new TokFuncBoolean()); + else if (name == "not") + tokens.add(new TokFuncNot()); + else if (name == "true") + tokens.add(new TokFuncTrue()); + else if (name == "false") + tokens.add(new TokFuncFalse()); + else if (name == "lang") + tokens.add(new TokFuncLang()); + else if (name == "number") + tokens.add(new TokFuncNumber()); + else if (name == "sum") + tokens.add(new TokFuncSum()); + else if (name == "floor") + tokens.add(new TokFuncFloor()); + else if (name == "ceiling") + tokens.add(new TokFuncCeiling()); + else if (name == "round") + tokens.add(new TokFuncRound()); + else + { + error("unknown function name:'%s'", name.c_str()); + return -1; + } + return p; +} + + +/** + * [17] Argument ::= + * Expr + */ +int XPathParser::getArgument(int p0, int depth) +{ + traceStack("getArgument", p0, depth); + int p = p0; + int p2 = getExpr(p, depth+1); + if (p2 < 0) + { + error("Argument expression"); + return -1; + } + p = p2; + return p; +} + + +/** + * [18] UnionExpr ::= + * PathExpr + * | UnionExpr '|' PathExpr + */ +int XPathParser::getUnionExpr(int p0, int depth) +{ + traceStack("getUnionExpr", p0, depth); + int p = p0; + int p2 = getPathExpr(p, depth+1); + if (p2 < 0) + { + error("Path expression for union"); + return -1; + } + p = p2; + LexTok t = lexTok(p); + if (t.getType() == OPERATOR && t.getIntValue() == PIPE) + { + p++; + p2 = getUnionExpr(p, depth+1); + if (p2 < 0) + { + error("OR (|) requires union expression on the left"); + return -1; + } + tokens.add(new TokUnion()); + p = p2; + } + return p; +} + + +/** + * [19] PathExpr ::= + * LocationPath + * | FilterExpr + * | FilterExpr '/' RelativeLocationPath + * | FilterExpr '//' RelativeLocationPath + */ +int XPathParser::getPathExpr(int p0, int depth) +{ + traceStack("getPathExpr", p0, depth); + int p = p0; + int p2; + + p2 = getLocationPath(p, depth+1); + if (p2 < 0) + { + error("Location path in path expression"); + return -1; + } + if (p2 > p) + { + p = p2; + return p; + } + + p2 = getFilterExpr(p, depth+1); + if (p2 < 0) + { + error("Filter expression in path expression"); + return -1; + } + if (p2 <= p) + return p0; + p = p2; + + LexTok t = lexTok(p); + if (t.getType() == OPERATOR && t.getIntValue() == SLASH) + { + p++; + p2 = getRelativeLocationPath(p, depth+1); + if (p2 < 0) + { + error("Relative location after / in path expression"); + return -1; + } + p = p2; + return p; + } + + if (t.getType() == OPERATOR && t.getIntValue() == DOUBLE_SLASH) + { + p++; + p2 = getRelativeLocationPath(p, depth+1); + if (p2 < 0) + { + error("Relative location after // in path expression"); + return -1; + } + p = p2; + return p; + } + return p; +} + + +/** + * [20] FilterExpr ::= + * PrimaryExpr + * | FilterExpr Predicate + */ +int XPathParser::getFilterExpr(int p0, int depth) +{ + traceStack("getFilterExpr", p0, depth); + int p = p0; + + int p2 = getPrimaryExpr(p, depth+1); + if (p2 < 0) + { + error("Primary expression in path expression"); + return -1; + } + if (p2 > p) + { + p = p2; + while (true) + { + p2 = getPredicate(p, depth+1); + if (p2 < 0) + { + error("Predicate in primary expression"); + return -1; + } + if (p2 > p) + { + p = p2; + } + else + break; + } + return p; + } + + return p0; +} + + +/** + * [21] OrExpr ::= + * AndExpr + * | OrExpr 'or' AndExpr + */ +int XPathParser::getOrExpr(int p0, int depth) +{ + traceStack("getOrExpr", p0, depth); + int p = p0; + int p2 = getAndExpr(p, depth+1); + if (p2 < 0) + { + error("AND expression in OR expression"); + return -1; + } + if (p2 > p) + { + p = p2; + LexTok t = lexTok(p); + if (t.getType() == OPERATOR && t.getIntValue() == OR) + { + p++; + p2 = getAndExpr(p, depth+1); + if (p2 <= p) + { + error("AND expression in OR expression"); + return -1; + } + p = p2; + return p; + } + tokens.add(new TokOr()); + return p; + } + + return p0; +} + + +/** + * [22] AndExpr ::= + * EqualityExpr + * | AndExpr 'and' EqualityExpr + */ +int XPathParser::getAndExpr(int p0, int depth) +{ + traceStack("getAndExpr", p0, depth); + int p = p0; + int p2 = getEqualityExpr(p, depth+1); + if (p2 < 0) + { + error("Equality expression in AND expression"); + return -1; + } + if (p2 > p) + { + p = p2; + LexTok t = lexTok(p); + if (t.getType() == OPERATOR && t.getIntValue() == AND) + { + p++; + p2 = getAndExpr(p, depth+1); + if (p2 <= p) + { + error("AND expression after 'and'"); + return -1; + } + p = p2; + return p; + } + tokens.add(new TokAnd()); + return p; + } + + return p0; +} + + +/** + * [23] EqualityExpr ::= + * RelationalExpr + * | EqualityExpr '=' RelationalExpr + * | EqualityExpr '!=' RelationalExpr + */ +int XPathParser::getEqualityExpr(int p0, int depth) +{ + traceStack("getEqualityExpr", p0, depth); + int p = p0; + int p2 = getRelationalExpr(p, depth+1); + if (p2 < 0) + { + error("Relation expression in equality expression"); + return -1; + } + if (p2 > p) + { + p = p2; + LexTok t = lexTok(p); + if (t.getType() == OPERATOR && t.getIntValue() == EQUALS) + { + p++; + p2 = getEqualityExpr(p, depth+1); + if (p2 <= p) + { + error("Equality expression expected after =="); + return -1; + } + tokens.add(new TokEquals()); + p = p2; + return p; + } + + if (t.getType() == OPERATOR && t.getIntValue() == NOT_EQUALS) + { + p++; + p2 = getEqualityExpr(p, depth+1); + if (p2 <= p) + { + error("Equality expression expected after !="); + return -1; + } + tokens.add(new TokNotEquals()); + p = p2; + return p; + } + + return p; + } + + return p0; +} + + +/** + * [24] RelationalExpr ::= + * AdditiveExpr + * | RelationalExpr '<' AdditiveExpr + * | RelationalExpr '>' AdditiveExpr + * | RelationalExpr '<=' AdditiveExpr + * | RelationalExpr '>=' AdditiveExpr + */ +int XPathParser::getRelationalExpr(int p0, int depth) +{ + traceStack("getRelationalExpr", p0, depth); + int p = p0; + int p2 = getAdditiveExpr(p, depth+1); + if (p2 < 0) + { + error("Additive expression in relational expression"); + return -1; + } + if (p2 > p) + { + p = p2; + LexTok t = lexTok(p); + + if (t.getType() == OPERATOR && t.getIntValue() == GREATER_THAN) + { + p++; + p2 = getRelationalExpr(p, depth+1); + if (p2 <= p) + { + error("Relational expression after '>'"); + return -1; + } + tokens.add(new TokGreaterThan()); + p = p2; + return p; + } + if (t.getType() == OPERATOR && t.getIntValue() == LESS_THAN) + { + p++; + p2 = getRelationalExpr(p, depth+1); + if (p2 <= p) + { + error("Relational expression after '<'"); + return -1; + } + tokens.add(new TokLessThan()); + p = p2; + return p; + } + if (t.getType() == OPERATOR && t.getIntValue() == GREATER_THAN_EQUALS) + { + p++; + p2 = getRelationalExpr(p, depth+1); + if (p2 <= p) + { + error("Relational expression after '>='"); + return -1; + } + tokens.add(new TokGreaterThanEquals()); + p = p2; + return p; + } + if (t.getType() == OPERATOR && t.getIntValue() == LESS_THAN_EQUALS) + { + p++; + p2 = getRelationalExpr(p, depth+1); + if (p2 <= p) + { + error("Relational expression after '<='"); + return -1; + } + tokens.add(new TokLessThanEquals()); + p = p2; + return p; + } + + + return p; + } + + return p0; +} + + +/** + * [25] AdditiveExp ::= + * MultiplicativeExpr + * | AdditiveExpr '+' MultiplicativeExpr + * | AdditiveExpr '-' MultiplicativeExpr + */ +int XPathParser::getAdditiveExpr(int p0, int depth) +{ + traceStack("getAdditiveExpr", p0, depth); + int p = p0; + int p2 = getMultiplicativeExpr(p, depth+1); + if (p2 < 0) + { + error("Multiplicative expression in additive expression"); + return -1; + } + if (p2 > p) + { + p = p2; + LexTok t = lexTok(p); + + if (t.getType() == OPERATOR && t.getIntValue() == PLUS) + { + p++; + p2 = getAdditiveExpr(p, depth+1); + if (p2 <= p) + { + error("Additive expression after '+'"); + return -1; + } + tokens.add(new TokPlus()); + p = p2; + return p; + } + if (t.getType() == OPERATOR && t.getIntValue() == MINUS) + { + p++; + p2 = getAdditiveExpr(p, depth+1); + if (p2 <= p) + { + error("Additive expression after '-'"); + return -1; + } + tokens.add(new TokMinus()); + p = p2; + return p; + } + + + return p; + } + + return p0; +} + + +/** + * [26] MultiplicativeExpr ::= + * UnaryExpr + * | MultiplicativeExpr MultiplyOperator UnaryExpr + * | MultiplicativeExpr 'div' UnaryExpr + * | MultiplicativeExpr 'mod' UnaryExpr + */ +int XPathParser::getMultiplicativeExpr(int p0, int depth) +{ + traceStack("getMultiplicativeExpr", p0, depth); + int p = p0; + int p2 = getUnaryExpr(p, depth+1); + if (p2 < 0) + { + error("Unary expression in multiplicative expression"); + return -1; + } + if (p2 > p) + { + p = p2; + LexTok t = lexTok(p); + + if (t.getType() == OPERATOR && t.getIntValue() == MULTIPLY) + { + p++; + p2 = getMultiplicativeExpr(p, depth+1); + if (p2 <= p) + { + error("Multiplicative expression after '*'"); + return -1; + } + tokens.add(new TokMul()); + p = p2; + return p; + } + + if (t.getType() == OPERATOR && t.getIntValue() == DIV) + { + p++; + p2 = getMultiplicativeExpr(p, depth+1); + if (p2 <= p) + { + error("Multiplicative expression after 'div'"); + return -1; + } + tokens.add(new TokDiv()); + p = p2; + return p; + } + + if (t.getType() == OPERATOR && t.getIntValue() == MOD) + { + p++; + p2 = getMultiplicativeExpr(p, depth+1); + if (p2 <= p) + { + error("Multiplicative expression after 'mod'"); + return -1; + } + tokens.add(new TokMod()); + p = p2; + return p; + } + + + return p; + } + + return p0; +} + + +/** + * [27] UnaryExpr ::= + * UnionExpr + * | '-' UnaryExpr + */ +int XPathParser::getUnaryExpr(int p0, int depth) +{ + traceStack("getUnaryExpr", p0, depth); + int p = p0; + int p2 = getUnionExpr(p, depth+1); + if (p2 < 0) + { + error("Union expression in unary expression"); + return -1; + } + if (p2 > p) + { + p = p2; + return p; + } + + if (lexTokType(p) == '-') + { + p++; + p2 = getUnaryExpr(p, depth+1); + if (p2 < 0) + { + error("Unary expression after '-'"); + return -1; + } + tokens.add(new TokNeg()); + p = p2; + return p; + } + + return p0; +} + + +//###################################################### +//# NOT USED!!! +//## The grammar definitions below are +//## handled by lexical parsing, and will not be used +//###################################################### + +/** + * [28] ExprToken ::= + * '(' | ')' | '[' | ']' | '.' | '..' | '@' | ',' | '::' + * | NameTest + * | NodeType + * | Operator + * | FunctionName + * | AxisName + * | Literal + * | Number + * | VariableReference + */ +int XPathParser::getExprToken(int p0, int depth) +{ + traceStack("getExprToken", p0, depth); + return p0; +} + + +/** + * [29] Literal ::= + * '"' [^"]* '"' + * | "'" [^']* "'" + */ +int XPathParser::getLiteral(int p0, int depth) +{ + traceStack("getLiteral", p0, depth); + return p0; +} + + +/** + * [30] Number ::= + * Digits ('.' Digits?)? + * | '.' Digits + */ +int XPathParser::getNumber(int p0, int depth) +{ + traceStack("getNumber", p0, depth); + return p0; +} + + +/** + * [31] Digits ::= + * [0-9]+ + */ +int XPathParser::getDigits(int p0, int depth) +{ + traceStack("getDigits", p0, depth); + return p0; +} + + +/** + * [32] Operator ::= + * OperatorName + * | MultiplyOperator + * | '/' | '//' | '|' | '+' | '-' | '=' + * | '!=' | '<' | '<=' | '>' | '>=' + */ +int XPathParser::getOperator(int p0, int depth) +{ + traceStack("getOperator", p0, depth); + return p0; +} + + +/** + * [33] OperatorName ::= + * 'and' | 'or' | 'mod' | 'div' + */ +int XPathParser::getOperatorName(int p0, int depth) +{ + traceStack("getOperatorName", p0, depth); + return p0; +} + + +/** + * [34] MultiplyOperator ::= + * '*' + */ +int XPathParser::getMultiplyOperator(int p0, int depth) +{ + traceStack("getMultiplyOperator", p0, depth); + return p0; +} + + +/** + * [35] FunctionName ::= + * QName - NodeType + */ +int XPathParser::getFunctionName(int p0, int depth) +{ + traceStack("getFunctionName", p0, depth); + return p0; +} + + +/** + * [36] VariableReference ::= + * '$' QName + */ +int XPathParser::getVariableReference(int p0, int depth) +{ + traceStack("getVariableReference", p0, depth); + return p0; +} + + +/** + * [37] NameTest ::= + * '*' + * | NCName ':' '*' + * | QName + */ +int XPathParser::getNameTest(int p0, int depth) +{ + traceStack("getNameTest", p0, depth); + return p0; +} + + +/** + * [38] NodeType ::= + * 'comment' + * | 'text' + * | 'processing-instruction' + * | 'node' + */ +int XPathParser::getNodeType(int p0, int depth) +{ + traceStack("getNodeType", p0, depth); + return p0; +} + + +/** + * [39] ExprWhitespace ::= + * S + */ +int XPathParser::getExprWhitespace(int p0, int depth) +{ + traceStack("getExprWhitespace", p0, depth); + return p0; +} + + + + + +//######################################################################### +//# H I G H L E V E L P A R S I N G +//######################################################################### + +/** + * Parse a candidate XPath string. Leave a copy in 'tokens.' + */ +bool XPathParser::parse(const DOMString &xpathString) +{ + int p0 = 0; + + DOMString str = xpathString; + + parsebuf = (char *)str.c_str(); + parselen = (int) str.size(); + position = 0; + + trace("## parsing string: '%s'", parsebuf); + + lexicalScan(); + lexicalTokenDump(); + + tokens.clear();//Get ready to store new tokens + + int p = getLocationPath(p0, 0); + + parsebuf = NULL; + parselen = 0; + + if (p <= p0) + { + //return false; + } + + return true; +} + + + + + +//######################################################################### +//# E V A L U A T E +//######################################################################### + + + + +/** + * This wraps the two-step call to parse(), then execute() to get a NodeList + * of matching DOM nodes + */ +NodeList XPathParser::evaluate(const Node *root, + const DOMString &xpathString) +{ + NodeList list; + + //### Maybe do caching for speed here + + //### Parse and execute + //### Error message can be generated as a side effect + if (!parse(xpathString)) + return list; + + if (debug) + tokens.dump(); + + //### Execute the token list + TokenExecutor executor; + list = executor.execute(tokens, root); + + return list; +} + + + +} // namespace xpath +} // namespace dom +} // namespace w3c +} // namespace org +//######################################################################### +//# E N D O F F I L E +//######################################################################### + + + + diff --git a/src/dom/xpathparser.h b/src/dom/xpathparser.h index 4b4e79fcc..25001016e 100644 --- a/src/dom/xpathparser.h +++ b/src/dom/xpathparser.h @@ -1,791 +1,791 @@ -#ifndef __XPATHPARSER_H__ -#define __XPATHPARSER_H__ - -/** - * Phoebe DOM Implementation. - * - * This is a C++ approximation of the W3C DOM model, which follows - * fairly closely the specifications in the various .idl files, copies of - * which are provided for reference. Most important is this one: - * - * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html - * - * Authors: - * Bob Jamison - * - * Copyright (C) 2005 Bob Jamison - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -#include -#include - -#include -#include - -#include "dom.h" -#include "xpathtoken.h" - -namespace org -{ -namespace w3c -{ -namespace dom -{ -namespace xpath -{ - -typedef dom::DOMString DOMString; -typedef dom::Node Node; -typedef dom::NodeList NodeList; - - - -//######################################################################## -//# L E X I C A L D E F I N I T I O N S -//######################################################################## - - -typedef struct -{ - int ival; - char *sval; -} LookupEntry; - - - -//Note: in the following definitions, where the starts of -//strings are similar, put the longer definitions first - -/** - * - */ -typedef enum -{ - COMMENT, - TEXT, - PROCESSING_INSTRUCTION, - NODE -} NodeType; - - -static LookupEntry nodeTypeTable [] = -{ - { COMMENT, "comment" }, - { TEXT, "text" }, - { PROCESSING_INSTRUCTION, "processing-instruction" }, - { NODE, "node" }, - { -1, NULL } -}; - - -/** - * - */ -typedef enum -{ - ANCESTOR_OR_SELF, - ANCESTOR, - ATTRIBUTE, - CHILD, - DESCENDANT_OR_SELF, - DESCENDANT, - FOLLOWING_SIBLING, - FOLLOWING, - NAMESPACE, - PARENT, - PRECEDING_SIBLING, - PRECEDING, - SELF -} AxisNameType; - - -static LookupEntry axisNameTable [] = -{ - { ANCESTOR_OR_SELF, "ancestor-or-self" }, - { ANCESTOR, "ancestor" }, - { ATTRIBUTE, "attribute" }, - { CHILD, "child" }, - { DESCENDANT_OR_SELF, "descendant-or-self"}, - { DESCENDANT, "descendant" }, - { FOLLOWING_SIBLING, "following-sibling" }, - { FOLLOWING, "following" }, - { NAMESPACE, "namespace" }, - { PARENT, "parent" }, - { PRECEDING_SIBLING, "preceding-sibling" }, - { PRECEDING, "preceding" }, - { SELF, "self" }, - { -1, NULL } -}; - - -/** - * - */ -typedef enum -{ - NONE = 0, - CHAR, //default if none of the below - //Expr tokens - LPAREN, - RPAREN, - LBRACKET, - RBRACKET, - DOUBLE_DOT, - DOT, - AMPR, - COMMA, - DOUBLE_COLON, - NAME_TEST, - NODE_TYPE, - OPERATOR, - FUNCTION_NAME, - AXIS_NAME, - LITERAL, - NUMBER, - VARIABLE_REFERENCE, - //Operator tokens - AND, - OR, - MOD, - DIV, - MULTIPLY, - DOUBLE_SLASH, - SLASH, - PIPE, - PLUS, - MINUS, - EQUALS, - NOT_EQUALS, - LESS_THAN_EQUALS, - LESS_THAN, - GREATER_THAN_EQUALS, - GREATER_THAN -} LexTokType; - - -/* -* Be VERY careful that this table matches the LexicalTokenType enum -* declaration above. -*/ -static LookupEntry exprTokenTable [] = -{ - { NONE, "xxNONExx" }, - { CHAR, "CHAR" }, - //Expr tokens - { LPAREN, "(" }, - { RPAREN, ")" }, - { LBRACKET, "[" }, - { RBRACKET, "]" }, - { DOUBLE_DOT, ".." }, - { DOT, "." }, - { AMPR, "@" }, - { COMMA, "," }, - { DOUBLE_COLON, "::" }, - { NAME_TEST, "NameTest" }, - { NODE_TYPE, "NodeType" }, - { OPERATOR, "Operator" }, - { FUNCTION_NAME, "FunctionName" }, - { AXIS_NAME, "AxisName" }, - { LITERAL, "Literal" }, - { NUMBER, "Number" }, - { VARIABLE_REFERENCE, "VariableReference" }, - { -1, NULL } -}; - -static LookupEntry operatorTable [] = -{ - { NONE, "xxNONExx" }, - //Operator tokens - { AND, "and" }, - { OR, "or" }, - { MOD, "mod" }, - { DIV, "div" }, - { MULTIPLY, "*" }, - { DOUBLE_SLASH, "//" }, - { SLASH, "/" }, - { PIPE, "|" }, - { PLUS, "+" }, - { MINUS, "-" }, - { EQUALS, "=" }, - { NOT_EQUALS, "!=" }, - { LESS_THAN_EQUALS, "<=" }, - { LESS_THAN, "<" }, - { GREATER_THAN_EQUALS, ">=" }, - { GREATER_THAN, ">" }, - { -1, NULL } -}; - - -/** - * - */ -class LexTok -{ -public: - LexTok(const LexTok &tok) - { - type = tok.type; - location = tok.location; - sval = tok.sval; - dval = tok.dval; - ival = tok.ival; - } - LexTok() - { init(); } - LexTok(int theType, int loc) - { init(); type = theType; location = loc;} - LexTok(int theType, int loc, const DOMString &val) - { init(); type = theType; location = loc; sval = val; } - LexTok(int theType, int loc, double val) - { init(); type = theType; location = loc; dval = val; } - LexTok(int theType, int loc, long val) - { init(); type = theType; location = loc; ival = val; } - - void print() - { - if (type == OPERATOR) - { - char *tokenStr = "unknown"; - for (LookupEntry *entry = operatorTable; entry->sval ; entry++) - { - if (entry->ival == ival) - { - tokenStr = entry->sval; - break; - } - } - printf("(%s)\n", tokenStr); - } - else if (type == NODE_TYPE) - { - char *tokenStr = "unknown"; - for (LookupEntry *entry = nodeTypeTable; entry->sval ; entry++) - { - if (entry->ival == ival) - { - tokenStr = entry->sval; - break; - } - } - printf("{{%s}}\n", tokenStr); - } - else if (type == AXIS_NAME) - { - char *tokenStr = "unknown"; - for (LookupEntry *entry = axisNameTable; entry->sval ; entry++) - { - if (entry->ival == ival) - { - tokenStr = entry->sval; - break; - } - } - printf("{%s}\n", tokenStr); - } - else if (type == CHAR) - printf("'%c'\n", (char)ival); - else if (type == NAME_TEST) - printf("\"%s\"\n", sval.c_str()); - else if (type == LITERAL) - printf("L'%s'\n", sval.c_str()); - else if (type == FUNCTION_NAME) - printf("%s()\n", sval.c_str()); - else if (type == NUMBER) - printf("#%f\n", dval); - else - { - char *tokenStr = "unknown"; - for (LookupEntry *entry = exprTokenTable; entry->sval ; entry++) - { - if (entry->ival == type) - { - tokenStr = entry->sval; - break; - } - } - printf("%s\n", tokenStr); - //printf("%s [%s/%f/%ld]\n", tokenStr, sval.c_str(), dval, ival); - } - } - - int getType() - { return type; } - int getLocation() - { return location; } - DOMString &getStringValue() - { return sval; } - double getDoubleValue() - { return dval; } - long getIntValue() - { return ival; } - -private: - void init() - { - type = NONE; - location = 0; - dval = 0.0; - ival = 0; - } - - int type; - int location; - DOMString sval; - double dval; - long ival; -}; - - - - - -//######################################################################## -//# P A R S E R -//######################################################################## - -class XPathParser -{ -public: - - //################################# - //# CONSTRUCTOR - //################################# - - /** - * - */ - XPathParser() - { - debug = false; - } - - /** - * - */ - ~XPathParser() {} - - /** - * - */ - bool getDebug() - { return debug; } - - /** - * - */ - void setDebug(bool val) - { debug = val; } - - - - /** - * Normally not called directly unless for string parsing testing - */ - bool parse(const DOMString &str); - - /** - * This is the big one. Called by the xpath-dom api to fetch - * nodes from a DOM tree. - */ - NodeList evaluate(const Node *root, const DOMString &str); - - - -private: - - //################################# - //# MESSAGES - //################################# - - /** - * - */ - void trace(const char *fmt, ...); - - /** - * - */ - void traceStack(const char *name, int pos, int depth); - - /** - * - */ - void error(const char *fmt, ...); - - //################################# - //# LEXICAL SCANNING - //################################# - - /** - * Add a lexical token of a given type to the list - */ - void lexTokAdd(int type, int loc); - void lexTokAdd(int type, int loc, const DOMString &val); - void lexTokAdd(int type, int loc, double val); - void lexTokAdd(int type, int loc, long val); - - /** - * - */ - void lexicalTokenDump(); - - /** - * - */ - LexTok lexTok(int p); - - /** - * - */ - int lexTokType(int p); - - /** - * - */ - int peek(int p); - - /** - * - */ - int get(int p); - - /** - * - */ - int getword(int p, DOMString &str); - - /** - * - */ - int match(int p, const char *str); - - /** - * - */ - int skipwhite(int p); - - /** - * - */ - int getNumber(int p, double &dresult); - - /** - * - */ - int getLiteral(int p, DOMString &result); - - /** - * - */ - int getNameTest(int p0, DOMString &result); - - /** - * - */ - int getNCName(int p0, DOMString &result); - - - - - /** - * - */ - int lexicalScan(); - - - //################################# - //# GRAMMAR PARSING - //################################# - - /** - * Add a newly derived token to the token list; - */ - void tokAdd(Token *token); - - /** - * The grammar definitions marked [1]-[39] are directly - * from the W3C XPath grammar spacification. - */ - - /** - * [1] - */ - int getLocationPath(int p0, int depth); - - /** - * [2] - */ - int getAbsoluteLocationPath(int p0, int depth); - - /** - * [3] - */ - int getRelativeLocationPath(int p0, int depth); - - /** - * [4] - */ - int getStep(int p0, int depth); - - /** - * [5] - */ - int getAxisSpecifier(int p0, int depth); - - /** - * [6] - */ - int getAxisName(int p0, int depth); - - /** - * [7] - */ - int getNodeTest(int p0, int depth); - - /** - * [8] - */ - int getPredicate(int p0, int depth); - - /** - * [9] - */ - int getPredicateExpr(int p0, int depth); - - /** - * [10] - */ - int getAbbreviatedAbsoluteLocationPath(int p0, int depth); - /** - * [11] - */ - int getAbbreviatedRelativeLocationPath(int p0, int depth); - /** - * [12] - */ - int getAbbreviatedStep(int p0, int depth); - - /** - * [13] - */ - int getAbbreviatedAxisSpecifier(int p0, int depth); - - /** - * [14] - */ - int getExpr(int p0, int depth); - - /** - * [15] - */ - int getPrimaryExpr(int p0, int depth); - - /** - * [16] - */ - int getFunctionCall(int p0, int depth); - - /** - * [17] - */ - int getArgument(int p0, int depth); - - /** - * [18] - */ - int getUnionExpr(int p0, int depth); - - /** - * [19] - */ - int getPathExpr(int p0, int depth); - - /** - * [20] - */ - int getFilterExpr(int p0, int depth); - - /** - * [21] - */ - int getOrExpr(int p0, int depth); - - /** - * [22] - */ - int getAndExpr(int p0, int depth); - - /** - * [23] - */ - int getEqualityExpr(int p0, int depth); - - /** - * [24] - */ - int getRelationalExpr(int p0, int depth); - - /** - * [25] - */ - int getAdditiveExpr(int p0, int depth); - - /** - * [26] - */ - int getMultiplicativeExpr(int p0, int depth); - - /** - * [27] - */ - int getUnaryExpr(int p0, int depth); - - /** - * [28] - */ - int getExprToken(int p0, int depth); - - /** - * [29] - */ - int getLiteral(int p0, int depth); - - /** - * [30] - */ - int getNumber(int p0, int depth); - - /** - * [31] - */ - int getDigits(int p0, int depth); - - /** - * [32] - */ - int getOperator(int p0, int depth); - - /** - * [33] - */ - int getOperatorName(int p0, int depth); - - /** - * [34] - */ - int getMultiplyOperator(int p0, int depth); - - /** - * [35] - */ - int getFunctionName(int p0, int depth); - - /** - * [36] - */ - int getVariableReference(int p0, int depth); - - /** - * [37] - */ - int getNameTest(int p0, int depth); - - /** - * [38] - */ - int getNodeType(int p0, int depth); - - /** - * [39] - */ - int getExprWhitespace(int p0, int depth); - - - - //################################# - //# DATA ITEMS - //################################# - - /** - * - */ - bool debug; - - /** - * - */ - char *parsebuf; - - /** - * - */ - int parselen; - - /** - * - */ - int position; - - /** - * - */ - DOMString numberString; - - /** - * - */ - double number; - - - /** - * The result of the first lexical scan - */ - std::vector lexicalTokens; - - /** - * The result of parsing. If parsing was successful, then - * this is executable via execute() - */ - TokenList tokens; - - - - -}; - - - - - - -} // namespace xpath -} // namespace dom -} // namespace w3c -} // namespace org -#endif /* __XPATHPARSER_H__ */ -//######################################################################### -//# E N D O F F I L E -//######################################################################### - - - - - - - - +#ifndef __XPATHPARSER_H__ +#define __XPATHPARSER_H__ + +/** + * Phoebe DOM Implementation. + * + * This is a C++ approximation of the W3C DOM model, which follows + * fairly closely the specifications in the various .idl files, copies of + * which are provided for reference. Most important is this one: + * + * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2005 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +#include +#include + +#include +#include + +#include "dom.h" +#include "xpathtoken.h" + +namespace org +{ +namespace w3c +{ +namespace dom +{ +namespace xpath +{ + +typedef dom::DOMString DOMString; +typedef dom::Node Node; +typedef dom::NodeList NodeList; + + + +//######################################################################## +//# L E X I C A L D E F I N I T I O N S +//######################################################################## + + +typedef struct +{ + int ival; + char *sval; +} LookupEntry; + + + +//Note: in the following definitions, where the starts of +//strings are similar, put the longer definitions first + +/** + * + */ +typedef enum +{ + COMMENT, + TEXT, + PROCESSING_INSTRUCTION, + NODE +} NodeType; + + +static LookupEntry nodeTypeTable [] = +{ + { COMMENT, "comment" }, + { TEXT, "text" }, + { PROCESSING_INSTRUCTION, "processing-instruction" }, + { NODE, "node" }, + { -1, NULL } +}; + + +/** + * + */ +typedef enum +{ + ANCESTOR_OR_SELF, + ANCESTOR, + ATTRIBUTE, + CHILD, + DESCENDANT_OR_SELF, + DESCENDANT, + FOLLOWING_SIBLING, + FOLLOWING, + NAMESPACE, + PARENT, + PRECEDING_SIBLING, + PRECEDING, + SELF +} AxisNameType; + + +static LookupEntry axisNameTable [] = +{ + { ANCESTOR_OR_SELF, "ancestor-or-self" }, + { ANCESTOR, "ancestor" }, + { ATTRIBUTE, "attribute" }, + { CHILD, "child" }, + { DESCENDANT_OR_SELF, "descendant-or-self"}, + { DESCENDANT, "descendant" }, + { FOLLOWING_SIBLING, "following-sibling" }, + { FOLLOWING, "following" }, + { NAMESPACE, "namespace" }, + { PARENT, "parent" }, + { PRECEDING_SIBLING, "preceding-sibling" }, + { PRECEDING, "preceding" }, + { SELF, "self" }, + { -1, NULL } +}; + + +/** + * + */ +typedef enum +{ + NONE = 0, + CHAR, //default if none of the below + //Expr tokens + LPAREN, + RPAREN, + LBRACKET, + RBRACKET, + DOUBLE_DOT, + DOT, + AMPR, + COMMA, + DOUBLE_COLON, + NAME_TEST, + NODE_TYPE, + OPERATOR, + FUNCTION_NAME, + AXIS_NAME, + LITERAL, + NUMBER, + VARIABLE_REFERENCE, + //Operator tokens + AND, + OR, + MOD, + DIV, + MULTIPLY, + DOUBLE_SLASH, + SLASH, + PIPE, + PLUS, + MINUS, + EQUALS, + NOT_EQUALS, + LESS_THAN_EQUALS, + LESS_THAN, + GREATER_THAN_EQUALS, + GREATER_THAN +} LexTokType; + + +/* +* Be VERY careful that this table matches the LexicalTokenType enum +* declaration above. +*/ +static LookupEntry exprTokenTable [] = +{ + { NONE, "xxNONExx" }, + { CHAR, "CHAR" }, + //Expr tokens + { LPAREN, "(" }, + { RPAREN, ")" }, + { LBRACKET, "[" }, + { RBRACKET, "]" }, + { DOUBLE_DOT, ".." }, + { DOT, "." }, + { AMPR, "@" }, + { COMMA, "," }, + { DOUBLE_COLON, "::" }, + { NAME_TEST, "NameTest" }, + { NODE_TYPE, "NodeType" }, + { OPERATOR, "Operator" }, + { FUNCTION_NAME, "FunctionName" }, + { AXIS_NAME, "AxisName" }, + { LITERAL, "Literal" }, + { NUMBER, "Number" }, + { VARIABLE_REFERENCE, "VariableReference" }, + { -1, NULL } +}; + +static LookupEntry operatorTable [] = +{ + { NONE, "xxNONExx" }, + //Operator tokens + { AND, "and" }, + { OR, "or" }, + { MOD, "mod" }, + { DIV, "div" }, + { MULTIPLY, "*" }, + { DOUBLE_SLASH, "//" }, + { SLASH, "/" }, + { PIPE, "|" }, + { PLUS, "+" }, + { MINUS, "-" }, + { EQUALS, "=" }, + { NOT_EQUALS, "!=" }, + { LESS_THAN_EQUALS, "<=" }, + { LESS_THAN, "<" }, + { GREATER_THAN_EQUALS, ">=" }, + { GREATER_THAN, ">" }, + { -1, NULL } +}; + + +/** + * + */ +class LexTok +{ +public: + LexTok(const LexTok &tok) + { + type = tok.type; + location = tok.location; + sval = tok.sval; + dval = tok.dval; + ival = tok.ival; + } + LexTok() + { init(); } + LexTok(int theType, int loc) + { init(); type = theType; location = loc;} + LexTok(int theType, int loc, const DOMString &val) + { init(); type = theType; location = loc; sval = val; } + LexTok(int theType, int loc, double val) + { init(); type = theType; location = loc; dval = val; } + LexTok(int theType, int loc, long val) + { init(); type = theType; location = loc; ival = val; } + + void print() + { + if (type == OPERATOR) + { + char *tokenStr = "unknown"; + for (LookupEntry *entry = operatorTable; entry->sval ; entry++) + { + if (entry->ival == ival) + { + tokenStr = entry->sval; + break; + } + } + printf("(%s)\n", tokenStr); + } + else if (type == NODE_TYPE) + { + char *tokenStr = "unknown"; + for (LookupEntry *entry = nodeTypeTable; entry->sval ; entry++) + { + if (entry->ival == ival) + { + tokenStr = entry->sval; + break; + } + } + printf("{{%s}}\n", tokenStr); + } + else if (type == AXIS_NAME) + { + char *tokenStr = "unknown"; + for (LookupEntry *entry = axisNameTable; entry->sval ; entry++) + { + if (entry->ival == ival) + { + tokenStr = entry->sval; + break; + } + } + printf("{%s}\n", tokenStr); + } + else if (type == CHAR) + printf("'%c'\n", (char)ival); + else if (type == NAME_TEST) + printf("\"%s\"\n", sval.c_str()); + else if (type == LITERAL) + printf("L'%s'\n", sval.c_str()); + else if (type == FUNCTION_NAME) + printf("%s()\n", sval.c_str()); + else if (type == NUMBER) + printf("#%f\n", dval); + else + { + char *tokenStr = "unknown"; + for (LookupEntry *entry = exprTokenTable; entry->sval ; entry++) + { + if (entry->ival == type) + { + tokenStr = entry->sval; + break; + } + } + printf("%s\n", tokenStr); + //printf("%s [%s/%f/%ld]\n", tokenStr, sval.c_str(), dval, ival); + } + } + + int getType() + { return type; } + int getLocation() + { return location; } + DOMString &getStringValue() + { return sval; } + double getDoubleValue() + { return dval; } + long getIntValue() + { return ival; } + +private: + void init() + { + type = NONE; + location = 0; + dval = 0.0; + ival = 0; + } + + int type; + int location; + DOMString sval; + double dval; + long ival; +}; + + + + + +//######################################################################## +//# P A R S E R +//######################################################################## + +class XPathParser +{ +public: + + //################################# + //# CONSTRUCTOR + //################################# + + /** + * + */ + XPathParser() + { + debug = false; + } + + /** + * + */ + ~XPathParser() {} + + /** + * + */ + bool getDebug() + { return debug; } + + /** + * + */ + void setDebug(bool val) + { debug = val; } + + + + /** + * Normally not called directly unless for string parsing testing + */ + bool parse(const DOMString &str); + + /** + * This is the big one. Called by the xpath-dom api to fetch + * nodes from a DOM tree. + */ + NodeList evaluate(const Node *root, const DOMString &str); + + + +private: + + //################################# + //# MESSAGES + //################################# + + /** + * + */ + void trace(const char *fmt, ...); + + /** + * + */ + void traceStack(const char *name, int pos, int depth); + + /** + * + */ + void error(const char *fmt, ...); + + //################################# + //# LEXICAL SCANNING + //################################# + + /** + * Add a lexical token of a given type to the list + */ + void lexTokAdd(int type, int loc); + void lexTokAdd(int type, int loc, const DOMString &val); + void lexTokAdd(int type, int loc, double val); + void lexTokAdd(int type, int loc, long val); + + /** + * + */ + void lexicalTokenDump(); + + /** + * + */ + LexTok lexTok(int p); + + /** + * + */ + int lexTokType(int p); + + /** + * + */ + int peek(int p); + + /** + * + */ + int get(int p); + + /** + * + */ + int getword(int p, DOMString &str); + + /** + * + */ + int match(int p, const char *str); + + /** + * + */ + int skipwhite(int p); + + /** + * + */ + int getNumber(int p, double &dresult); + + /** + * + */ + int getLiteral(int p, DOMString &result); + + /** + * + */ + int getNameTest(int p0, DOMString &result); + + /** + * + */ + int getNCName(int p0, DOMString &result); + + + + + /** + * + */ + int lexicalScan(); + + + //################################# + //# GRAMMAR PARSING + //################################# + + /** + * Add a newly derived token to the token list; + */ + void tokAdd(Token *token); + + /** + * The grammar definitions marked [1]-[39] are directly + * from the W3C XPath grammar spacification. + */ + + /** + * [1] + */ + int getLocationPath(int p0, int depth); + + /** + * [2] + */ + int getAbsoluteLocationPath(int p0, int depth); + + /** + * [3] + */ + int getRelativeLocationPath(int p0, int depth); + + /** + * [4] + */ + int getStep(int p0, int depth); + + /** + * [5] + */ + int getAxisSpecifier(int p0, int depth); + + /** + * [6] + */ + int getAxisName(int p0, int depth); + + /** + * [7] + */ + int getNodeTest(int p0, int depth); + + /** + * [8] + */ + int getPredicate(int p0, int depth); + + /** + * [9] + */ + int getPredicateExpr(int p0, int depth); + + /** + * [10] + */ + int getAbbreviatedAbsoluteLocationPath(int p0, int depth); + /** + * [11] + */ + int getAbbreviatedRelativeLocationPath(int p0, int depth); + /** + * [12] + */ + int getAbbreviatedStep(int p0, int depth); + + /** + * [13] + */ + int getAbbreviatedAxisSpecifier(int p0, int depth); + + /** + * [14] + */ + int getExpr(int p0, int depth); + + /** + * [15] + */ + int getPrimaryExpr(int p0, int depth); + + /** + * [16] + */ + int getFunctionCall(int p0, int depth); + + /** + * [17] + */ + int getArgument(int p0, int depth); + + /** + * [18] + */ + int getUnionExpr(int p0, int depth); + + /** + * [19] + */ + int getPathExpr(int p0, int depth); + + /** + * [20] + */ + int getFilterExpr(int p0, int depth); + + /** + * [21] + */ + int getOrExpr(int p0, int depth); + + /** + * [22] + */ + int getAndExpr(int p0, int depth); + + /** + * [23] + */ + int getEqualityExpr(int p0, int depth); + + /** + * [24] + */ + int getRelationalExpr(int p0, int depth); + + /** + * [25] + */ + int getAdditiveExpr(int p0, int depth); + + /** + * [26] + */ + int getMultiplicativeExpr(int p0, int depth); + + /** + * [27] + */ + int getUnaryExpr(int p0, int depth); + + /** + * [28] + */ + int getExprToken(int p0, int depth); + + /** + * [29] + */ + int getLiteral(int p0, int depth); + + /** + * [30] + */ + int getNumber(int p0, int depth); + + /** + * [31] + */ + int getDigits(int p0, int depth); + + /** + * [32] + */ + int getOperator(int p0, int depth); + + /** + * [33] + */ + int getOperatorName(int p0, int depth); + + /** + * [34] + */ + int getMultiplyOperator(int p0, int depth); + + /** + * [35] + */ + int getFunctionName(int p0, int depth); + + /** + * [36] + */ + int getVariableReference(int p0, int depth); + + /** + * [37] + */ + int getNameTest(int p0, int depth); + + /** + * [38] + */ + int getNodeType(int p0, int depth); + + /** + * [39] + */ + int getExprWhitespace(int p0, int depth); + + + + //################################# + //# DATA ITEMS + //################################# + + /** + * + */ + bool debug; + + /** + * + */ + char *parsebuf; + + /** + * + */ + int parselen; + + /** + * + */ + int position; + + /** + * + */ + DOMString numberString; + + /** + * + */ + double number; + + + /** + * The result of the first lexical scan + */ + std::vector lexicalTokens; + + /** + * The result of parsing. If parsing was successful, then + * this is executable via execute() + */ + TokenList tokens; + + + + +}; + + + + + + +} // namespace xpath +} // namespace dom +} // namespace w3c +} // namespace org +#endif /* __XPATHPARSER_H__ */ +//######################################################################### +//# E N D O F F I L E +//######################################################################### + + + + + + + + diff --git a/src/dom/xpathtoken.cpp b/src/dom/xpathtoken.cpp index c9d4898d7..41b7ad39d 100644 --- a/src/dom/xpathtoken.cpp +++ b/src/dom/xpathtoken.cpp @@ -1,515 +1,515 @@ -/** - * Phoebe DOM Implementation. - * - * This is a C++ approximation of the W3C DOM model, which follows - * fairly closely the specifications in the various .idl files, copies of - * which are provided for reference. Most important is this one: - * - * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html - * - * Authors: - * Bob Jamison - * - * Copyright (C) 2006 Bob Jamison - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -#include "xpathtoken.h" -#include - - - -namespace org -{ -namespace w3c -{ -namespace dom -{ -namespace xpath -{ - -//######################################################################## -//# X P A T H T O K E N -//######################################################################## - -typedef struct -{ - int ival; - char *sval; -} TokenStringPair; - -static TokenStringPair tokenStrings[] = -{ - //primitives - { Token::TOK_NOP, "nop" }, - { Token::TOK_STR, "str" }, - { Token::TOK_INT, "int" }, - { Token::TOK_FLOAT, "float" }, - //operators - { Token::TOK_AND, "and" }, - { Token::TOK_OR, "or" }, - { Token::TOK_MOD, "mod" }, - { Token::TOK_DIV, "div" }, - { Token::TOK_MULTIPLY, "multiply" }, - { Token::TOK_DOUBLE_SLASH, "double-slash" }, - { Token::TOK_SLASH, "slash" }, - { Token::TOK_PIPE, "pipe" }, - { Token::TOK_PLUS, "plus" }, - { Token::TOK_MINUS, "minus" }, - { Token::TOK_NEG, "neg" }, - { Token::TOK_EQUALS, "equals" }, - { Token::TOK_NOT_EQUALS, "not-equals" }, - { Token::TOK_LESS_THAN_EQUALS, "less-than-equals" }, - { Token::TOK_LESS_THAN, "less-than" }, - { Token::TOK_GREATER_THAN_EQUALS, "greater-than-equals" }, - { Token::TOK_GREATER_THAN, "greater-than" }, - //path types - { Token::TOK_ABSOLUTE, "absolute" }, - { Token::TOK_RELATIVE, "relative" }, - { Token::TOK_STEP, "step" }, - { Token::TOK_NAME_TEST, "name-test" }, - { Token::TOK_EXPR, "expr" }, - { Token::TOK_UNION, "union" }, - //axis types - { Token::TOK_AXIS_ANCESTOR_OR_SELF, "axis-ancestor-or-self" }, - { Token::TOK_AXIS_ANCESTOR, "axis-ancestor" }, - { Token::TOK_AXIS_ATTRIBUTE, "axis-attribute" }, - { Token::TOK_AXIS_CHILD, "axis-child" }, - { Token::TOK_AXIS_DESCENDANT_OR_SELF, "axis-descendant-or-self" }, - { Token::TOK_AXIS_DESCENDANT, "axis-descendant" }, - { Token::TOK_AXIS_FOLLOWING_SIBLING, "axis-following-sibling" }, - { Token::TOK_AXIS_FOLLOWING, "axis-following" }, - { Token::TOK_AXIS_NAMESPACE, "axis-namespace" }, - { Token::TOK_AXIS_PARENT, "axis-parent" }, - { Token::TOK_AXIS_PRECEDING_SIBLING, "axis-preceding-sibling" }, - { Token::TOK_AXIS_PRECEDING, "axis-preceding" }, - { Token::TOK_AXIS_SELF, "axis-self" }, - //function types - { Token::TOK_FUNC_LAST, "func-last" }, - { Token::TOK_FUNC_POSITION, "func-position" }, - { Token::TOK_FUNC_COUNT, "func-count" }, - { Token::TOK_FUNC_ID, "func-id" }, - { Token::TOK_FUNC_LOCAL_NAME, "func-local-name" }, - { Token::TOK_FUNC_NAMESPACE_URI, "func-namespace-uri" }, - { Token::TOK_FUNC_NAME, "func-name" }, - { Token::TOK_FUNC_STRING, "func-string" }, - { Token::TOK_FUNC_CONCAT, "func-concat" }, - { Token::TOK_FUNC_STARTS_WITH, "func-starts-with" }, - { Token::TOK_FUNC_CONTAINS, "func-contains" }, - { Token::TOK_FUNC_SUBSTRING_BEFORE, "func-substring-before" }, - { Token::TOK_FUNC_SUBSTRING_AFTER, "func-substring-after" }, - { Token::TOK_FUNC_SUBSTRING, "func-substring" }, - { Token::TOK_FUNC_STRING_LENGTH, "func-string-length" }, - { Token::TOK_FUNC_NORMALIZE_SPACE, "func-normalize-space" }, - { Token::TOK_FUNC_TRANSLATE, "func-translate" }, - { Token::TOK_FUNC_BOOLEAN, "func-boolean" }, - { Token::TOK_FUNC_NOT, "func-not" }, - { Token::TOK_FUNC_TRUE, "func-true" }, - { Token::TOK_FUNC_FALSE, "func-false" }, - { Token::TOK_FUNC_LANG, "func-lang" }, - { Token::TOK_FUNC_NUMBER, "func-number" }, - { Token::TOK_FUNC_SUM, "func-sum" }, - { Token::TOK_FUNC_FLOOR, "func-floor" }, - { Token::TOK_FUNC_CEILING, "func-ceiling" }, - { Token::TOK_FUNC_ROUND, "func-round" }, - { -1, (char *)0 } -}; - - -/** - * Return the string TokenType of this token - * (in the .cpp file) - */ -DOMString Token::getTypeString() -{ - DOMString ret = "unknown"; - for (TokenStringPair *pair = tokenStrings ; pair->sval ; pair++) - { - if (pair->ival == type) - { - ret = pair->sval; - break; - } - } - return ret; -} - - - -//######################################################################## -//# X P A T H A X I S -//######################################################################## - -/** - * - */ -Axis::Axis() -{ - init(); -} - - -/** - * - */ -Axis::Axis(int tokPos) -{ - init(); - tokenPosition = tokPos; -} - - -/** - * - */ -Axis::Axis(const Axis &other) -{ - init(); - assign(other); -} - - -/** - * - */ -Axis::~Axis() -{ -} - - -/** - * - */ -Axis &Axis::operator=(const Axis &other) -{ - assign(other); - return *this; -} - -/** - * - */ -void Axis::init() -{ - tokenPosition = 0; -} - -/** - * - */ -void Axis::assign(const Axis &other) -{ - tokenPosition = other.tokenPosition; -} - -/** - * - */ -void Axis::setPosition(unsigned int val) -{ - tokenPosition = val; -} - -/** - * - */ -unsigned int Axis::getPosition() -{ - return tokenPosition; -} - -/** - * - */ -void Axis::setNode(const Node *val) -{ - node = (Node *)val; -} - -/** - * - */ -Node *Axis::getNode() -{ - return node; -} - -//######################################################################## -//# X P A T H S T A C K I T E M -//######################################################################## - -/** - * - */ -StackItem::StackItem() -{ - ival = 0L; - dval = 0.0; -} - - -/** - * - */ -StackItem::StackItem(const StackItem &other) -{ - assign(other); -} - - -/** - * - */ -StackItem::~StackItem() -{ -} - - -/** - * - */ -StackItem &StackItem::operator=(const StackItem &other) -{ - assign(other); - return *this; -} - -/** - * - */ -void StackItem::assign(const StackItem &other) -{ - sval = other.sval; - ival = other.ival; - dval = other.dval; -} - - -//######################################################################## -//# T O K E N L I S T -//######################################################################## - -/** - * - */ -TokenList::TokenList() -{ -} - - -/** - * - */ -TokenList::TokenList(const TokenList &other) -{ - assign(other); -} - -/** - * - */ -TokenList &TokenList::operator=(const TokenList &other) -{ - assign(other); - return *this; -} - -/** - * - */ -void TokenList::assign(const TokenList &other) -{ - tokens = other.tokens; -} - -/** - * - */ -TokenList::~TokenList() -{ - clear(); -} - -/** - * - */ -void TokenList::clear() -{ - std::vector::iterator iter; - for (iter = tokens.begin() ; iter!= tokens.end() ; iter++) - { - delete (*iter); - } - tokens.clear(); -} - -/** - * - */ -void TokenList::add(Token *tok) -{ - tokens.push_back(tok); -} - - -/** - * - */ -unsigned int TokenList::size() const -{ - return (unsigned int)tokens.size(); -} - - -/** - * - */ -void TokenList::dump() -{ - std::vector::iterator iter; - printf("############# TOKENS\n"); - for (iter = tokens.begin() ; iter != tokens.end() ; iter++) - { - Token *tok = *iter; - tok->dump(); - } -} - - -//######################################################################## -//# X P A T H E X E C U T O R -//######################################################################## - -/** - * - */ -TokenExecutor::TokenExecutor() -{ - reset(); -} - - -/** - * - */ -TokenExecutor::TokenExecutor(const TokenExecutor &other) -{ - reset(); - assign(other); -} - - -/** - * - */ -TokenExecutor::~TokenExecutor() -{ -} - - -/** - * - */ -void TokenExecutor::assign(const TokenExecutor &other) -{ - axis = other.axis; - axisStack = other.axisStack; - stackSize = other.stackSize; - for (int i=0 ; i=STACK_SIZE) - { - return; - } - stack[stackSize++] = item; -} - -/** - * - */ -StackItem TokenExecutor::pop() -{ - if (stackSize<1) - { - StackItem item; - return item; - } - return stack[--stackSize]; -} - - - - - - - - - - -} // namespace xpath -} // namespace dom -} // namespace w3c -} // namespace org -//######################################################################## -//# E N D O F F I L E -//######################################################################## - - - +/** + * Phoebe DOM Implementation. + * + * This is a C++ approximation of the W3C DOM model, which follows + * fairly closely the specifications in the various .idl files, copies of + * which are provided for reference. Most important is this one: + * + * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2006 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +#include "xpathtoken.h" +#include + + + +namespace org +{ +namespace w3c +{ +namespace dom +{ +namespace xpath +{ + +//######################################################################## +//# X P A T H T O K E N +//######################################################################## + +typedef struct +{ + int ival; + char *sval; +} TokenStringPair; + +static TokenStringPair tokenStrings[] = +{ + //primitives + { Token::TOK_NOP, "nop" }, + { Token::TOK_STR, "str" }, + { Token::TOK_INT, "int" }, + { Token::TOK_FLOAT, "float" }, + //operators + { Token::TOK_AND, "and" }, + { Token::TOK_OR, "or" }, + { Token::TOK_MOD, "mod" }, + { Token::TOK_DIV, "div" }, + { Token::TOK_MULTIPLY, "multiply" }, + { Token::TOK_DOUBLE_SLASH, "double-slash" }, + { Token::TOK_SLASH, "slash" }, + { Token::TOK_PIPE, "pipe" }, + { Token::TOK_PLUS, "plus" }, + { Token::TOK_MINUS, "minus" }, + { Token::TOK_NEG, "neg" }, + { Token::TOK_EQUALS, "equals" }, + { Token::TOK_NOT_EQUALS, "not-equals" }, + { Token::TOK_LESS_THAN_EQUALS, "less-than-equals" }, + { Token::TOK_LESS_THAN, "less-than" }, + { Token::TOK_GREATER_THAN_EQUALS, "greater-than-equals" }, + { Token::TOK_GREATER_THAN, "greater-than" }, + //path types + { Token::TOK_ABSOLUTE, "absolute" }, + { Token::TOK_RELATIVE, "relative" }, + { Token::TOK_STEP, "step" }, + { Token::TOK_NAME_TEST, "name-test" }, + { Token::TOK_EXPR, "expr" }, + { Token::TOK_UNION, "union" }, + //axis types + { Token::TOK_AXIS_ANCESTOR_OR_SELF, "axis-ancestor-or-self" }, + { Token::TOK_AXIS_ANCESTOR, "axis-ancestor" }, + { Token::TOK_AXIS_ATTRIBUTE, "axis-attribute" }, + { Token::TOK_AXIS_CHILD, "axis-child" }, + { Token::TOK_AXIS_DESCENDANT_OR_SELF, "axis-descendant-or-self" }, + { Token::TOK_AXIS_DESCENDANT, "axis-descendant" }, + { Token::TOK_AXIS_FOLLOWING_SIBLING, "axis-following-sibling" }, + { Token::TOK_AXIS_FOLLOWING, "axis-following" }, + { Token::TOK_AXIS_NAMESPACE, "axis-namespace" }, + { Token::TOK_AXIS_PARENT, "axis-parent" }, + { Token::TOK_AXIS_PRECEDING_SIBLING, "axis-preceding-sibling" }, + { Token::TOK_AXIS_PRECEDING, "axis-preceding" }, + { Token::TOK_AXIS_SELF, "axis-self" }, + //function types + { Token::TOK_FUNC_LAST, "func-last" }, + { Token::TOK_FUNC_POSITION, "func-position" }, + { Token::TOK_FUNC_COUNT, "func-count" }, + { Token::TOK_FUNC_ID, "func-id" }, + { Token::TOK_FUNC_LOCAL_NAME, "func-local-name" }, + { Token::TOK_FUNC_NAMESPACE_URI, "func-namespace-uri" }, + { Token::TOK_FUNC_NAME, "func-name" }, + { Token::TOK_FUNC_STRING, "func-string" }, + { Token::TOK_FUNC_CONCAT, "func-concat" }, + { Token::TOK_FUNC_STARTS_WITH, "func-starts-with" }, + { Token::TOK_FUNC_CONTAINS, "func-contains" }, + { Token::TOK_FUNC_SUBSTRING_BEFORE, "func-substring-before" }, + { Token::TOK_FUNC_SUBSTRING_AFTER, "func-substring-after" }, + { Token::TOK_FUNC_SUBSTRING, "func-substring" }, + { Token::TOK_FUNC_STRING_LENGTH, "func-string-length" }, + { Token::TOK_FUNC_NORMALIZE_SPACE, "func-normalize-space" }, + { Token::TOK_FUNC_TRANSLATE, "func-translate" }, + { Token::TOK_FUNC_BOOLEAN, "func-boolean" }, + { Token::TOK_FUNC_NOT, "func-not" }, + { Token::TOK_FUNC_TRUE, "func-true" }, + { Token::TOK_FUNC_FALSE, "func-false" }, + { Token::TOK_FUNC_LANG, "func-lang" }, + { Token::TOK_FUNC_NUMBER, "func-number" }, + { Token::TOK_FUNC_SUM, "func-sum" }, + { Token::TOK_FUNC_FLOOR, "func-floor" }, + { Token::TOK_FUNC_CEILING, "func-ceiling" }, + { Token::TOK_FUNC_ROUND, "func-round" }, + { -1, (char *)0 } +}; + + +/** + * Return the string TokenType of this token + * (in the .cpp file) + */ +DOMString Token::getTypeString() +{ + DOMString ret = "unknown"; + for (TokenStringPair *pair = tokenStrings ; pair->sval ; pair++) + { + if (pair->ival == type) + { + ret = pair->sval; + break; + } + } + return ret; +} + + + +//######################################################################## +//# X P A T H A X I S +//######################################################################## + +/** + * + */ +Axis::Axis() +{ + init(); +} + + +/** + * + */ +Axis::Axis(int tokPos) +{ + init(); + tokenPosition = tokPos; +} + + +/** + * + */ +Axis::Axis(const Axis &other) +{ + init(); + assign(other); +} + + +/** + * + */ +Axis::~Axis() +{ +} + + +/** + * + */ +Axis &Axis::operator=(const Axis &other) +{ + assign(other); + return *this; +} + +/** + * + */ +void Axis::init() +{ + tokenPosition = 0; +} + +/** + * + */ +void Axis::assign(const Axis &other) +{ + tokenPosition = other.tokenPosition; +} + +/** + * + */ +void Axis::setPosition(unsigned int val) +{ + tokenPosition = val; +} + +/** + * + */ +unsigned int Axis::getPosition() +{ + return tokenPosition; +} + +/** + * + */ +void Axis::setNode(const Node *val) +{ + node = (Node *)val; +} + +/** + * + */ +Node *Axis::getNode() +{ + return node; +} + +//######################################################################## +//# X P A T H S T A C K I T E M +//######################################################################## + +/** + * + */ +StackItem::StackItem() +{ + ival = 0L; + dval = 0.0; +} + + +/** + * + */ +StackItem::StackItem(const StackItem &other) +{ + assign(other); +} + + +/** + * + */ +StackItem::~StackItem() +{ +} + + +/** + * + */ +StackItem &StackItem::operator=(const StackItem &other) +{ + assign(other); + return *this; +} + +/** + * + */ +void StackItem::assign(const StackItem &other) +{ + sval = other.sval; + ival = other.ival; + dval = other.dval; +} + + +//######################################################################## +//# T O K E N L I S T +//######################################################################## + +/** + * + */ +TokenList::TokenList() +{ +} + + +/** + * + */ +TokenList::TokenList(const TokenList &other) +{ + assign(other); +} + +/** + * + */ +TokenList &TokenList::operator=(const TokenList &other) +{ + assign(other); + return *this; +} + +/** + * + */ +void TokenList::assign(const TokenList &other) +{ + tokens = other.tokens; +} + +/** + * + */ +TokenList::~TokenList() +{ + clear(); +} + +/** + * + */ +void TokenList::clear() +{ + std::vector::iterator iter; + for (iter = tokens.begin() ; iter!= tokens.end() ; iter++) + { + delete (*iter); + } + tokens.clear(); +} + +/** + * + */ +void TokenList::add(Token *tok) +{ + tokens.push_back(tok); +} + + +/** + * + */ +unsigned int TokenList::size() const +{ + return (unsigned int)tokens.size(); +} + + +/** + * + */ +void TokenList::dump() +{ + std::vector::iterator iter; + printf("############# TOKENS\n"); + for (iter = tokens.begin() ; iter != tokens.end() ; iter++) + { + Token *tok = *iter; + tok->dump(); + } +} + + +//######################################################################## +//# X P A T H E X E C U T O R +//######################################################################## + +/** + * + */ +TokenExecutor::TokenExecutor() +{ + reset(); +} + + +/** + * + */ +TokenExecutor::TokenExecutor(const TokenExecutor &other) +{ + reset(); + assign(other); +} + + +/** + * + */ +TokenExecutor::~TokenExecutor() +{ +} + + +/** + * + */ +void TokenExecutor::assign(const TokenExecutor &other) +{ + axis = other.axis; + axisStack = other.axisStack; + stackSize = other.stackSize; + for (int i=0 ; i=STACK_SIZE) + { + return; + } + stack[stackSize++] = item; +} + +/** + * + */ +StackItem TokenExecutor::pop() +{ + if (stackSize<1) + { + StackItem item; + return item; + } + return stack[--stackSize]; +} + + + + + + + + + + +} // namespace xpath +} // namespace dom +} // namespace w3c +} // namespace org +//######################################################################## +//# E N D O F F I L E +//######################################################################## + + + diff --git a/src/dom/xpathtoken.h b/src/dom/xpathtoken.h index d595ad43c..6c44e639d 100644 --- a/src/dom/xpathtoken.h +++ b/src/dom/xpathtoken.h @@ -1,1452 +1,1452 @@ -#ifndef __XPATHTOKEN_H__ -#define __XPATHTOKEN_H__ - -/** - * Phoebe DOM Implementation. - * - * This is a C++ approximation of the W3C DOM model, which follows - * fairly closely the specifications in the various .idl files, copies of - * which are provided for reference. Most important is this one: - * - * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html - * - * Authors: - * Bob Jamison - * - * Copyright (C) 2006 Bob Jamison - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -#include "dom.h" - -#include - -#include - -namespace org -{ -namespace w3c -{ -namespace dom -{ -namespace xpath -{ - -typedef org::w3c::dom::DOMString DOMString; - -class Axis -{ -public: - /** - * Constructor - */ - Axis(); - - /** - * Constructor - */ - Axis(int tokPos); - - /** - * Copy constructor - */ - Axis(const Axis &other); - - /** - * Destructor - */ - virtual ~Axis(); - - /** - * - */ - Axis &operator=(const Axis &other); - - /** - * - */ - void init(); - - /** - * - */ - void assign(const Axis &other); - - /** - * - */ - void setPosition(unsigned int val); - - /** - * - */ - unsigned int getPosition(); - - /** - * - */ - void setNode(const Node *node); - - /** - * - */ - Node *getNode(); - -private: - - int tokenPosition; - - Node *node; -}; - - -/** - * This represents a single value on the evaluation stack - */ -class StackItem -{ -public: - - /** - * Constructor - */ - StackItem(); - - /** - * Copy constructor - */ - StackItem(const StackItem &other); - - /** - * Destructor - */ - virtual ~StackItem(); - - /** - * - */ - StackItem &operator=(const StackItem &other); - - /** - * - */ - void assign(const StackItem &other); - - - //treat the stack item like an union of string, integer, and double - - /** - * String value - */ - DOMString sval; - - /** - * Integer value - */ - long ival; - - /** - * Double value; - */ - double dval; - -}; - -class TokenList; - -//######################################################################## -//# T O K E N E X E C U T O R -//######################################################################## - -#define STACK_SIZE 1024 - -/** - * A token evaluator, with stack and axis context - */ -class TokenExecutor -{ -public: - - /** - * Constructor - */ - TokenExecutor(); - - /** - * Copy constructor - */ - TokenExecutor(const TokenExecutor &other); - - /** - * Destructor - */ - virtual ~TokenExecutor(); - - /** - * Assign our values to those of the other - */ - virtual void assign(const TokenExecutor &other); - - /** - * Reset the stack to its original settings - */ - virtual void reset(); - - /** - * Push a stack item onto the stack - */ - virtual void push(StackItem &item); - - /** - * Pop a stack item from the stack - */ - virtual StackItem pop(); - - /** - * Execute a token list on the stack - */ - NodeList execute(const TokenList &list, const Node *node); - - /** - * - */ - Axis axis; - - /** - * - */ - std::vector axisStack; - -private: - - /** - * Contains the StackItem stack; - */ - StackItem stack[STACK_SIZE]; - - /** - * Marks the head of the stack, for push() and pop() - */ - int stackSize; - - /** - * Current list of nodes found by the expression - */ - NodeList nodeList; - - -}; - - - -//######################################################################## -//# X P A T H T O K E N -//######################################################################## - - - -/** - * This is a pseudocode-type class that executes itself on a stack, - * much like stack-oriented languages such as FORTH or Postscript. - * Each token can pop zero or more tokens off the stack, and push - * zero or one token back onto it. When a list of tokens is completed, - * a single stack value should be left on the stack. - */ -class Token -{ -public: - - /** - * Token types. Look in xpathtoken.cpp's function table - * to see how these types map to their respective - * functionalities - */ - typedef enum - { - //primitives - TOK_NOP = 0, - TOK_STR, - TOK_INT, - TOK_FLOAT, - //operators - TOK_AND, - TOK_OR, - TOK_MOD, - TOK_DIV, - TOK_MULTIPLY, - TOK_DOUBLE_SLASH, - TOK_SLASH, - TOK_PIPE, - TOK_PLUS, - TOK_MINUS, - TOK_NEG, - TOK_EQUALS, - TOK_NOT_EQUALS, - TOK_LESS_THAN_EQUALS, - TOK_LESS_THAN, - TOK_GREATER_THAN_EQUALS, - TOK_GREATER_THAN, - //path types - TOK_ABSOLUTE, - TOK_RELATIVE, - TOK_STEP, - TOK_NAME_TEST, - TOK_EXPR, - TOK_UNION, - //axis types - TOK_AXIS_ANCESTOR_OR_SELF, - TOK_AXIS_ANCESTOR, - TOK_AXIS_ATTRIBUTE, - TOK_AXIS_CHILD, - TOK_AXIS_DESCENDANT_OR_SELF, - TOK_AXIS_DESCENDANT, - TOK_AXIS_FOLLOWING_SIBLING, - TOK_AXIS_FOLLOWING, - TOK_AXIS_NAMESPACE, - TOK_AXIS_PARENT, - TOK_AXIS_PRECEDING_SIBLING, - TOK_AXIS_PRECEDING, - TOK_AXIS_SELF, - //function types - TOK_FUNC_LAST, - TOK_FUNC_POSITION, - TOK_FUNC_COUNT, - TOK_FUNC_ID, - TOK_FUNC_LOCAL_NAME, - TOK_FUNC_NAMESPACE_URI, - TOK_FUNC_NAME, - TOK_FUNC_STRING, - TOK_FUNC_CONCAT, - TOK_FUNC_STARTS_WITH, - TOK_FUNC_CONTAINS, - TOK_FUNC_SUBSTRING_BEFORE, - TOK_FUNC_SUBSTRING_AFTER, - TOK_FUNC_SUBSTRING, - TOK_FUNC_STRING_LENGTH, - TOK_FUNC_NORMALIZE_SPACE, - TOK_FUNC_TRANSLATE, - TOK_FUNC_BOOLEAN, - TOK_FUNC_NOT, - TOK_FUNC_TRUE, - TOK_FUNC_FALSE, - TOK_FUNC_LANG, - TOK_FUNC_NUMBER, - TOK_FUNC_SUM, - TOK_FUNC_FLOOR, - TOK_FUNC_CEILING, - TOK_FUNC_ROUND, - } TokenType; - - - - - /** - * Constructor with a NOP default type - */ - Token() - { - type = TOK_NOP; - ival = 0L; - dval = 0.0; - } - - /** - * Copy constructor - */ - Token(const Token &other) - { - type = other.type; - sval = other.sval; - ival = other.ival; - dval = other.dval; - } - - /** - * Destructor - */ - virtual ~Token() - {} - - /** - * Return the enumerated TokenType of this token - */ - virtual int getType() - { return type; } - /** - * Return the string TokenType of this token - */ - virtual DOMString getTypeString(); - - /** - * Let this token execute itself on the given stack, - * possibly adding Nodes to the node list. - */ - virtual bool execute(TokenExecutor &stack) - { return true; } - - /** - * Print the contents of this token - */ - virtual void dump() - { - printf("%s %s %f %ld\n", - getTypeString().c_str(), sval.c_str(), dval, ival); - } - - //treat the token like an union of string, integer, and double - - /** - * String value - */ - DOMString sval; - - /** - * Integer value - */ - long ival; - - /** - * Double value; - */ - double dval; - -protected: - - /** - * The enmerated token type - */ - int type; - - -private: - - -}; - - -//######################################################################## -//# X P A T H T O K E N T Y P E S -//######################################################################## - - - -//########################### -//# V A L U E S -//########################### - -class TokStr : public Token -{ -public: - TokStr(const DOMString &val) - { - type = TOK_STR; - sval = val; - } - virtual bool execute(TokenExecutor &exec) - { - StackItem item; - item.sval = sval; - exec.push(item); - return true; - } -}; - -class TokFloat : public Token -{ -public: - TokFloat(double val) - { - type = TOK_FLOAT; - dval = val; - } - virtual bool execute(TokenExecutor &exec) - { - StackItem item; - item.dval = dval; - exec.push(item); - return true; - } -}; - -class TokInt : public Token -{ -public: - TokInt(long val) - { - type = TOK_INT; - ival = val; - } - virtual bool execute(TokenExecutor &exec) - { - StackItem item; - item.ival = ival; - exec.push(item); - return true; - } -}; - -class TokAnd : public Token -{ -public: - TokAnd() - { - type = TOK_AND; - } - virtual bool execute(TokenExecutor &exec) - { - StackItem item1 = exec.pop(); - StackItem item2 = exec.pop(); - item1.ival = item1.ival && item2.ival; - exec.push(item1); - return true; - } -}; - -class TokOr : public Token -{ -public: - TokOr() - { - type = TOK_OR; - } - virtual bool execute(TokenExecutor &exec) - { - StackItem item1 = exec.pop(); - StackItem item2 = exec.pop(); - item1.ival = item1.ival || item2.ival; - exec.push(item1); - return true; - } -}; - -class TokMod : public Token -{ -public: - TokMod() - { - type = TOK_MOD; - } - virtual bool execute(TokenExecutor &exec) - { - StackItem item1 = exec.pop(); - StackItem item2 = exec.pop(); - item1.dval = fmod(item1.dval, item2.dval); - exec.push(item1); - return true; - } -}; - -class TokDiv : public Token -{ -public: - TokDiv() - { - type = TOK_DIV; - } - virtual bool execute(TokenExecutor &exec) - { - StackItem item1 = exec.pop(); - StackItem item2 = exec.pop(); - item1.dval /= item2.dval; - exec.push(item1); - return true; - } -}; - -class TokMul : public Token -{ -public: - TokMul() - { - type = TOK_MULTIPLY; - } - virtual bool execute(TokenExecutor &exec) - { - StackItem item1 = exec.pop(); - StackItem item2 = exec.pop(); - item1.dval *= item2.dval; - exec.push(item1); - return true; - } -}; - -class TokPlus : public Token -{ -public: - TokPlus() - { - type = TOK_PLUS; - } - virtual bool execute(TokenExecutor &exec) - { - StackItem item1 = exec.pop(); - StackItem item2 = exec.pop(); - item1.dval += item2.dval; - exec.push(item1); - return true; - } -}; - -class TokMinus : public Token -{ -public: - TokMinus() - { - type = TOK_MINUS; - } - virtual bool execute(TokenExecutor &exec) - { - StackItem item1 = exec.pop(); - StackItem item2 = exec.pop(); - item1.dval -= item2.dval; - exec.push(item1); - return true; - } -}; - -class TokNeg : public Token -{ -public: - TokNeg() - { - type = TOK_NEG; - } - virtual bool execute(TokenExecutor &exec) - { - StackItem item = exec.pop(); - item.dval = -item.dval; - item.ival = -item.ival; - exec.push(item); - return true; - } -}; - -class TokEquals : public Token -{ -public: - TokEquals() - { - type = TOK_EQUALS; - } - virtual bool execute(TokenExecutor &exec) - { - StackItem item1 = exec.pop(); - StackItem item2 = exec.pop(); - item1.ival = (item1.dval == item2.dval); - exec.push(item1); - return true; - } -}; - -class TokNotEquals : public Token -{ -public: - TokNotEquals() - { - type = TOK_NOT_EQUALS; - } - virtual bool execute(TokenExecutor &exec) - { - StackItem item1 = exec.pop(); - StackItem item2 = exec.pop(); - item1.ival = (item1.dval != item2.dval); - exec.push(item1); - return true; - } -}; - -class TokLessThanEquals : public Token -{ -public: - TokLessThanEquals() - { - type = TOK_LESS_THAN_EQUALS; - } - virtual bool execute(TokenExecutor &exec) - { - StackItem item1 = exec.pop(); - StackItem item2 = exec.pop(); - item1.ival = (item1.dval <= item2.dval); - exec.push(item1); - return true; - } -}; - -class TokLessThan : public Token -{ -public: - TokLessThan() - { - type = TOK_LESS_THAN; - } - virtual bool execute(TokenExecutor &exec) - { - StackItem item1 = exec.pop(); - StackItem item2 = exec.pop(); - item1.ival = (item1.dval < item2.dval); - exec.push(item1); - return true; - } -}; - -class TokGreaterThanEquals : public Token -{ -public: - TokGreaterThanEquals() - { - type = TOK_GREATER_THAN_EQUALS; - } - virtual bool execute(TokenExecutor &exec) - { - StackItem item1 = exec.pop(); - StackItem item2 = exec.pop(); - item1.ival = (item1.dval >= item2.dval); - exec.push(item1); - return true; - } -}; - -class TokGreaterThan : public Token -{ -public: - TokGreaterThan() - { - type = TOK_GREATER_THAN; - } - virtual bool execute(TokenExecutor &exec) - { - StackItem item1 = exec.pop(); - StackItem item2 = exec.pop(); - item1.ival = (item1.dval > item2.dval); - exec.push(item1); - return true; - } -}; - - -//########################### -//# X P A T H I T E M S -//########################### - -class TokAbsolute : public Token -{ -public: - TokAbsolute() - { - type = TOK_ABSOLUTE; - } - virtual bool execute(TokenExecutor &exec) - { - Node *n = exec.axis.getNode(); - while (n->getParentNode()) - n = n->getParentNode(); - exec.axis.setNode(n); - return true; - } -}; - -class TokRelative : public Token -{ -public: - TokRelative() - { - type = TOK_RELATIVE; - } - virtual bool execute(TokenExecutor &exec) - { - ///exec.axis.currentNode = stack.rootNode; - return true; - } -}; - -class TokStep : public Token -{ -public: - TokStep() - { - type = TOK_STEP; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokNameTest : public Token -{ -public: - TokNameTest(const DOMString &name) - { - type = TOK_NAME_TEST; - sval = name; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokExpr : public Token -{ -public: - TokExpr() - { - type = TOK_EXPR; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokUnion : public Token -{ -public: - TokUnion() - { - type = TOK_UNION; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - - - - -//########################### -//# A X I S -//########################### - - -class TokAxisAncestorOrSelf : public Token -{ -public: - TokAxisAncestorOrSelf() - { - type = TOK_AXIS_ANCESTOR_OR_SELF; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokAxisAncestor : public Token -{ -public: - TokAxisAncestor() - { - type = TOK_AXIS_ANCESTOR; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokAxisAttribute : public Token -{ -public: - TokAxisAttribute() - { - type = TOK_AXIS_ATTRIBUTE; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokAxisChild : public Token -{ -public: - TokAxisChild() - { - type = TOK_AXIS_CHILD; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokAxisDescendantOrSelf : public Token -{ -public: - TokAxisDescendantOrSelf() - { - type = TOK_AXIS_DESCENDANT_OR_SELF; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokAxisDescendant : public Token -{ -public: - TokAxisDescendant() - { - type = TOK_AXIS_DESCENDANT; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokAxisFollowingSibling : public Token -{ -public: - TokAxisFollowingSibling() - { - type = TOK_AXIS_FOLLOWING_SIBLING; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokAxisFollowing : public Token -{ -public: - TokAxisFollowing() - { - type = TOK_AXIS_FOLLOWING; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokAxisNamespace : public Token -{ -public: - TokAxisNamespace() - { - type = TOK_AXIS_NAMESPACE; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokAxisParent : public Token -{ -public: - TokAxisParent() - { - type = TOK_AXIS_PARENT; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokAxisPrecedingSibling : public Token -{ -public: - TokAxisPrecedingSibling() - { - type = TOK_AXIS_PRECEDING_SIBLING; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokAxisPreceding : public Token -{ -public: - TokAxisPreceding() - { - type = TOK_AXIS_PRECEDING; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokAxisSelf : public Token -{ -public: - TokAxisSelf() - { - type = TOK_AXIS_SELF; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - - - -//########################### -//# F U N C T I O N S -//########################### - -class TokFuncLast : public Token -{ -public: - TokFuncLast() - { - type = TOK_FUNC_LAST; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncPosition : public Token -{ -public: - TokFuncPosition() - { - type = TOK_FUNC_POSITION; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncCount : public Token -{ -public: - TokFuncCount() - { - type = TOK_FUNC_COUNT; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncId : public Token -{ -public: - TokFuncId() - { - type = TOK_FUNC_ID; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncLocalName : public Token -{ -public: - TokFuncLocalName() - { - type = TOK_FUNC_LOCAL_NAME; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncNamespaceUri : public Token -{ -public: - TokFuncNamespaceUri() - { - type = TOK_FUNC_NAMESPACE_URI; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncName : public Token -{ -public: - TokFuncName() - { - type = TOK_FUNC_NAME; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncString : public Token -{ -public: - TokFuncString() - { - type = TOK_FUNC_STRING; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncConcat : public Token -{ -public: - TokFuncConcat() - { - type = TOK_FUNC_CONCAT; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncStartsWith : public Token -{ -public: - TokFuncStartsWith() - { - type = TOK_FUNC_STARTS_WITH; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncContains : public Token -{ -public: - TokFuncContains() - { - type = TOK_FUNC_CONTAINS; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncSubstringBefore : public Token -{ -public: - TokFuncSubstringBefore() - { - type = TOK_FUNC_SUBSTRING_BEFORE; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncSubstringAfter : public Token -{ -public: - TokFuncSubstringAfter() - { - type = TOK_FUNC_SUBSTRING_AFTER; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncSubstring : public Token -{ -public: - TokFuncSubstring() - { - type = TOK_FUNC_SUBSTRING; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncStringLength : public Token -{ -public: - TokFuncStringLength() - { - type = TOK_FUNC_STRING_LENGTH; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncNormalizeSpace : public Token -{ -public: - TokFuncNormalizeSpace() - { - type = TOK_FUNC_NORMALIZE_SPACE; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncTranslate : public Token -{ -public: - TokFuncTranslate() - { - type = TOK_FUNC_TRANSLATE; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncBoolean : public Token -{ -public: - TokFuncBoolean() - { - type = TOK_FUNC_BOOLEAN; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncNot : public Token -{ -public: - TokFuncNot() - { - type = TOK_FUNC_NOT; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncTrue : public Token -{ -public: - TokFuncTrue() - { - type = TOK_FUNC_TRUE; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncFalse : public Token -{ -public: - TokFuncFalse() - { - type = TOK_FUNC_FALSE; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncLang : public Token -{ -public: - TokFuncLang() - { - type = TOK_FUNC_LANG; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncNumber : public Token -{ -public: - TokFuncNumber() - { - type = TOK_FUNC_NUMBER; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncSum : public Token -{ -public: - TokFuncSum() - { - type = TOK_FUNC_SUM; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncFloor : public Token -{ -public: - TokFuncFloor() - { - type = TOK_FUNC_FLOOR; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncCeiling : public Token -{ -public: - TokFuncCeiling() - { - type = TOK_FUNC_CEILING; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - -class TokFuncRound : public Token -{ -public: - TokFuncRound() - { - type = TOK_FUNC_ROUND; - } - virtual bool execute(TokenExecutor &exec) - { - return true; - } -}; - - - - - - -//######################################################################## -//# T O K E N L I S T -//######################################################################## - -/** - * - */ -class TokenList -{ -public: - - /** - * - */ - TokenList(); - - /** - * - */ - TokenList(const TokenList &other); - - /** - * - */ - TokenList &operator=(const TokenList &other); - - /** - * - */ - void assign(const TokenList &other); - - /** - * - */ - virtual ~TokenList(); - - /** - * - */ - virtual void clear(); - - /** - * - */ - virtual void add(Token *tok); - - /** - * - */ - virtual unsigned int size() const; - - /** - * - */ - virtual void dump(); - -private: - - - std::vector tokens; - - -}; - - - - - - - -} // namespace xpath -} // namespace dom -} // namespace w3c -} // namespace org - - - - - - -#endif /* __XPATHTOKEN_H__ */ -//######################################################################## -//# E N D O F F I L E -//######################################################################## - +#ifndef __XPATHTOKEN_H__ +#define __XPATHTOKEN_H__ + +/** + * Phoebe DOM Implementation. + * + * This is a C++ approximation of the W3C DOM model, which follows + * fairly closely the specifications in the various .idl files, copies of + * which are provided for reference. Most important is this one: + * + * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2006 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +#include "dom.h" + +#include + +#include + +namespace org +{ +namespace w3c +{ +namespace dom +{ +namespace xpath +{ + +typedef org::w3c::dom::DOMString DOMString; + +class Axis +{ +public: + /** + * Constructor + */ + Axis(); + + /** + * Constructor + */ + Axis(int tokPos); + + /** + * Copy constructor + */ + Axis(const Axis &other); + + /** + * Destructor + */ + virtual ~Axis(); + + /** + * + */ + Axis &operator=(const Axis &other); + + /** + * + */ + void init(); + + /** + * + */ + void assign(const Axis &other); + + /** + * + */ + void setPosition(unsigned int val); + + /** + * + */ + unsigned int getPosition(); + + /** + * + */ + void setNode(const Node *node); + + /** + * + */ + Node *getNode(); + +private: + + int tokenPosition; + + Node *node; +}; + + +/** + * This represents a single value on the evaluation stack + */ +class StackItem +{ +public: + + /** + * Constructor + */ + StackItem(); + + /** + * Copy constructor + */ + StackItem(const StackItem &other); + + /** + * Destructor + */ + virtual ~StackItem(); + + /** + * + */ + StackItem &operator=(const StackItem &other); + + /** + * + */ + void assign(const StackItem &other); + + + //treat the stack item like an union of string, integer, and double + + /** + * String value + */ + DOMString sval; + + /** + * Integer value + */ + long ival; + + /** + * Double value; + */ + double dval; + +}; + +class TokenList; + +//######################################################################## +//# T O K E N E X E C U T O R +//######################################################################## + +#define STACK_SIZE 1024 + +/** + * A token evaluator, with stack and axis context + */ +class TokenExecutor +{ +public: + + /** + * Constructor + */ + TokenExecutor(); + + /** + * Copy constructor + */ + TokenExecutor(const TokenExecutor &other); + + /** + * Destructor + */ + virtual ~TokenExecutor(); + + /** + * Assign our values to those of the other + */ + virtual void assign(const TokenExecutor &other); + + /** + * Reset the stack to its original settings + */ + virtual void reset(); + + /** + * Push a stack item onto the stack + */ + virtual void push(StackItem &item); + + /** + * Pop a stack item from the stack + */ + virtual StackItem pop(); + + /** + * Execute a token list on the stack + */ + NodeList execute(const TokenList &list, const Node *node); + + /** + * + */ + Axis axis; + + /** + * + */ + std::vector axisStack; + +private: + + /** + * Contains the StackItem stack; + */ + StackItem stack[STACK_SIZE]; + + /** + * Marks the head of the stack, for push() and pop() + */ + int stackSize; + + /** + * Current list of nodes found by the expression + */ + NodeList nodeList; + + +}; + + + +//######################################################################## +//# X P A T H T O K E N +//######################################################################## + + + +/** + * This is a pseudocode-type class that executes itself on a stack, + * much like stack-oriented languages such as FORTH or Postscript. + * Each token can pop zero or more tokens off the stack, and push + * zero or one token back onto it. When a list of tokens is completed, + * a single stack value should be left on the stack. + */ +class Token +{ +public: + + /** + * Token types. Look in xpathtoken.cpp's function table + * to see how these types map to their respective + * functionalities + */ + typedef enum + { + //primitives + TOK_NOP = 0, + TOK_STR, + TOK_INT, + TOK_FLOAT, + //operators + TOK_AND, + TOK_OR, + TOK_MOD, + TOK_DIV, + TOK_MULTIPLY, + TOK_DOUBLE_SLASH, + TOK_SLASH, + TOK_PIPE, + TOK_PLUS, + TOK_MINUS, + TOK_NEG, + TOK_EQUALS, + TOK_NOT_EQUALS, + TOK_LESS_THAN_EQUALS, + TOK_LESS_THAN, + TOK_GREATER_THAN_EQUALS, + TOK_GREATER_THAN, + //path types + TOK_ABSOLUTE, + TOK_RELATIVE, + TOK_STEP, + TOK_NAME_TEST, + TOK_EXPR, + TOK_UNION, + //axis types + TOK_AXIS_ANCESTOR_OR_SELF, + TOK_AXIS_ANCESTOR, + TOK_AXIS_ATTRIBUTE, + TOK_AXIS_CHILD, + TOK_AXIS_DESCENDANT_OR_SELF, + TOK_AXIS_DESCENDANT, + TOK_AXIS_FOLLOWING_SIBLING, + TOK_AXIS_FOLLOWING, + TOK_AXIS_NAMESPACE, + TOK_AXIS_PARENT, + TOK_AXIS_PRECEDING_SIBLING, + TOK_AXIS_PRECEDING, + TOK_AXIS_SELF, + //function types + TOK_FUNC_LAST, + TOK_FUNC_POSITION, + TOK_FUNC_COUNT, + TOK_FUNC_ID, + TOK_FUNC_LOCAL_NAME, + TOK_FUNC_NAMESPACE_URI, + TOK_FUNC_NAME, + TOK_FUNC_STRING, + TOK_FUNC_CONCAT, + TOK_FUNC_STARTS_WITH, + TOK_FUNC_CONTAINS, + TOK_FUNC_SUBSTRING_BEFORE, + TOK_FUNC_SUBSTRING_AFTER, + TOK_FUNC_SUBSTRING, + TOK_FUNC_STRING_LENGTH, + TOK_FUNC_NORMALIZE_SPACE, + TOK_FUNC_TRANSLATE, + TOK_FUNC_BOOLEAN, + TOK_FUNC_NOT, + TOK_FUNC_TRUE, + TOK_FUNC_FALSE, + TOK_FUNC_LANG, + TOK_FUNC_NUMBER, + TOK_FUNC_SUM, + TOK_FUNC_FLOOR, + TOK_FUNC_CEILING, + TOK_FUNC_ROUND, + } TokenType; + + + + + /** + * Constructor with a NOP default type + */ + Token() + { + type = TOK_NOP; + ival = 0L; + dval = 0.0; + } + + /** + * Copy constructor + */ + Token(const Token &other) + { + type = other.type; + sval = other.sval; + ival = other.ival; + dval = other.dval; + } + + /** + * Destructor + */ + virtual ~Token() + {} + + /** + * Return the enumerated TokenType of this token + */ + virtual int getType() + { return type; } + /** + * Return the string TokenType of this token + */ + virtual DOMString getTypeString(); + + /** + * Let this token execute itself on the given stack, + * possibly adding Nodes to the node list. + */ + virtual bool execute(TokenExecutor &stack) + { return true; } + + /** + * Print the contents of this token + */ + virtual void dump() + { + printf("%s %s %f %ld\n", + getTypeString().c_str(), sval.c_str(), dval, ival); + } + + //treat the token like an union of string, integer, and double + + /** + * String value + */ + DOMString sval; + + /** + * Integer value + */ + long ival; + + /** + * Double value; + */ + double dval; + +protected: + + /** + * The enmerated token type + */ + int type; + + +private: + + +}; + + +//######################################################################## +//# X P A T H T O K E N T Y P E S +//######################################################################## + + + +//########################### +//# V A L U E S +//########################### + +class TokStr : public Token +{ +public: + TokStr(const DOMString &val) + { + type = TOK_STR; + sval = val; + } + virtual bool execute(TokenExecutor &exec) + { + StackItem item; + item.sval = sval; + exec.push(item); + return true; + } +}; + +class TokFloat : public Token +{ +public: + TokFloat(double val) + { + type = TOK_FLOAT; + dval = val; + } + virtual bool execute(TokenExecutor &exec) + { + StackItem item; + item.dval = dval; + exec.push(item); + return true; + } +}; + +class TokInt : public Token +{ +public: + TokInt(long val) + { + type = TOK_INT; + ival = val; + } + virtual bool execute(TokenExecutor &exec) + { + StackItem item; + item.ival = ival; + exec.push(item); + return true; + } +}; + +class TokAnd : public Token +{ +public: + TokAnd() + { + type = TOK_AND; + } + virtual bool execute(TokenExecutor &exec) + { + StackItem item1 = exec.pop(); + StackItem item2 = exec.pop(); + item1.ival = item1.ival && item2.ival; + exec.push(item1); + return true; + } +}; + +class TokOr : public Token +{ +public: + TokOr() + { + type = TOK_OR; + } + virtual bool execute(TokenExecutor &exec) + { + StackItem item1 = exec.pop(); + StackItem item2 = exec.pop(); + item1.ival = item1.ival || item2.ival; + exec.push(item1); + return true; + } +}; + +class TokMod : public Token +{ +public: + TokMod() + { + type = TOK_MOD; + } + virtual bool execute(TokenExecutor &exec) + { + StackItem item1 = exec.pop(); + StackItem item2 = exec.pop(); + item1.dval = fmod(item1.dval, item2.dval); + exec.push(item1); + return true; + } +}; + +class TokDiv : public Token +{ +public: + TokDiv() + { + type = TOK_DIV; + } + virtual bool execute(TokenExecutor &exec) + { + StackItem item1 = exec.pop(); + StackItem item2 = exec.pop(); + item1.dval /= item2.dval; + exec.push(item1); + return true; + } +}; + +class TokMul : public Token +{ +public: + TokMul() + { + type = TOK_MULTIPLY; + } + virtual bool execute(TokenExecutor &exec) + { + StackItem item1 = exec.pop(); + StackItem item2 = exec.pop(); + item1.dval *= item2.dval; + exec.push(item1); + return true; + } +}; + +class TokPlus : public Token +{ +public: + TokPlus() + { + type = TOK_PLUS; + } + virtual bool execute(TokenExecutor &exec) + { + StackItem item1 = exec.pop(); + StackItem item2 = exec.pop(); + item1.dval += item2.dval; + exec.push(item1); + return true; + } +}; + +class TokMinus : public Token +{ +public: + TokMinus() + { + type = TOK_MINUS; + } + virtual bool execute(TokenExecutor &exec) + { + StackItem item1 = exec.pop(); + StackItem item2 = exec.pop(); + item1.dval -= item2.dval; + exec.push(item1); + return true; + } +}; + +class TokNeg : public Token +{ +public: + TokNeg() + { + type = TOK_NEG; + } + virtual bool execute(TokenExecutor &exec) + { + StackItem item = exec.pop(); + item.dval = -item.dval; + item.ival = -item.ival; + exec.push(item); + return true; + } +}; + +class TokEquals : public Token +{ +public: + TokEquals() + { + type = TOK_EQUALS; + } + virtual bool execute(TokenExecutor &exec) + { + StackItem item1 = exec.pop(); + StackItem item2 = exec.pop(); + item1.ival = (item1.dval == item2.dval); + exec.push(item1); + return true; + } +}; + +class TokNotEquals : public Token +{ +public: + TokNotEquals() + { + type = TOK_NOT_EQUALS; + } + virtual bool execute(TokenExecutor &exec) + { + StackItem item1 = exec.pop(); + StackItem item2 = exec.pop(); + item1.ival = (item1.dval != item2.dval); + exec.push(item1); + return true; + } +}; + +class TokLessThanEquals : public Token +{ +public: + TokLessThanEquals() + { + type = TOK_LESS_THAN_EQUALS; + } + virtual bool execute(TokenExecutor &exec) + { + StackItem item1 = exec.pop(); + StackItem item2 = exec.pop(); + item1.ival = (item1.dval <= item2.dval); + exec.push(item1); + return true; + } +}; + +class TokLessThan : public Token +{ +public: + TokLessThan() + { + type = TOK_LESS_THAN; + } + virtual bool execute(TokenExecutor &exec) + { + StackItem item1 = exec.pop(); + StackItem item2 = exec.pop(); + item1.ival = (item1.dval < item2.dval); + exec.push(item1); + return true; + } +}; + +class TokGreaterThanEquals : public Token +{ +public: + TokGreaterThanEquals() + { + type = TOK_GREATER_THAN_EQUALS; + } + virtual bool execute(TokenExecutor &exec) + { + StackItem item1 = exec.pop(); + StackItem item2 = exec.pop(); + item1.ival = (item1.dval >= item2.dval); + exec.push(item1); + return true; + } +}; + +class TokGreaterThan : public Token +{ +public: + TokGreaterThan() + { + type = TOK_GREATER_THAN; + } + virtual bool execute(TokenExecutor &exec) + { + StackItem item1 = exec.pop(); + StackItem item2 = exec.pop(); + item1.ival = (item1.dval > item2.dval); + exec.push(item1); + return true; + } +}; + + +//########################### +//# X P A T H I T E M S +//########################### + +class TokAbsolute : public Token +{ +public: + TokAbsolute() + { + type = TOK_ABSOLUTE; + } + virtual bool execute(TokenExecutor &exec) + { + Node *n = exec.axis.getNode(); + while (n->getParentNode()) + n = n->getParentNode(); + exec.axis.setNode(n); + return true; + } +}; + +class TokRelative : public Token +{ +public: + TokRelative() + { + type = TOK_RELATIVE; + } + virtual bool execute(TokenExecutor &exec) + { + ///exec.axis.currentNode = stack.rootNode; + return true; + } +}; + +class TokStep : public Token +{ +public: + TokStep() + { + type = TOK_STEP; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokNameTest : public Token +{ +public: + TokNameTest(const DOMString &name) + { + type = TOK_NAME_TEST; + sval = name; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokExpr : public Token +{ +public: + TokExpr() + { + type = TOK_EXPR; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokUnion : public Token +{ +public: + TokUnion() + { + type = TOK_UNION; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + + + + +//########################### +//# A X I S +//########################### + + +class TokAxisAncestorOrSelf : public Token +{ +public: + TokAxisAncestorOrSelf() + { + type = TOK_AXIS_ANCESTOR_OR_SELF; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokAxisAncestor : public Token +{ +public: + TokAxisAncestor() + { + type = TOK_AXIS_ANCESTOR; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokAxisAttribute : public Token +{ +public: + TokAxisAttribute() + { + type = TOK_AXIS_ATTRIBUTE; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokAxisChild : public Token +{ +public: + TokAxisChild() + { + type = TOK_AXIS_CHILD; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokAxisDescendantOrSelf : public Token +{ +public: + TokAxisDescendantOrSelf() + { + type = TOK_AXIS_DESCENDANT_OR_SELF; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokAxisDescendant : public Token +{ +public: + TokAxisDescendant() + { + type = TOK_AXIS_DESCENDANT; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokAxisFollowingSibling : public Token +{ +public: + TokAxisFollowingSibling() + { + type = TOK_AXIS_FOLLOWING_SIBLING; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokAxisFollowing : public Token +{ +public: + TokAxisFollowing() + { + type = TOK_AXIS_FOLLOWING; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokAxisNamespace : public Token +{ +public: + TokAxisNamespace() + { + type = TOK_AXIS_NAMESPACE; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokAxisParent : public Token +{ +public: + TokAxisParent() + { + type = TOK_AXIS_PARENT; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokAxisPrecedingSibling : public Token +{ +public: + TokAxisPrecedingSibling() + { + type = TOK_AXIS_PRECEDING_SIBLING; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokAxisPreceding : public Token +{ +public: + TokAxisPreceding() + { + type = TOK_AXIS_PRECEDING; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokAxisSelf : public Token +{ +public: + TokAxisSelf() + { + type = TOK_AXIS_SELF; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + + + +//########################### +//# F U N C T I O N S +//########################### + +class TokFuncLast : public Token +{ +public: + TokFuncLast() + { + type = TOK_FUNC_LAST; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncPosition : public Token +{ +public: + TokFuncPosition() + { + type = TOK_FUNC_POSITION; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncCount : public Token +{ +public: + TokFuncCount() + { + type = TOK_FUNC_COUNT; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncId : public Token +{ +public: + TokFuncId() + { + type = TOK_FUNC_ID; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncLocalName : public Token +{ +public: + TokFuncLocalName() + { + type = TOK_FUNC_LOCAL_NAME; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncNamespaceUri : public Token +{ +public: + TokFuncNamespaceUri() + { + type = TOK_FUNC_NAMESPACE_URI; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncName : public Token +{ +public: + TokFuncName() + { + type = TOK_FUNC_NAME; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncString : public Token +{ +public: + TokFuncString() + { + type = TOK_FUNC_STRING; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncConcat : public Token +{ +public: + TokFuncConcat() + { + type = TOK_FUNC_CONCAT; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncStartsWith : public Token +{ +public: + TokFuncStartsWith() + { + type = TOK_FUNC_STARTS_WITH; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncContains : public Token +{ +public: + TokFuncContains() + { + type = TOK_FUNC_CONTAINS; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncSubstringBefore : public Token +{ +public: + TokFuncSubstringBefore() + { + type = TOK_FUNC_SUBSTRING_BEFORE; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncSubstringAfter : public Token +{ +public: + TokFuncSubstringAfter() + { + type = TOK_FUNC_SUBSTRING_AFTER; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncSubstring : public Token +{ +public: + TokFuncSubstring() + { + type = TOK_FUNC_SUBSTRING; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncStringLength : public Token +{ +public: + TokFuncStringLength() + { + type = TOK_FUNC_STRING_LENGTH; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncNormalizeSpace : public Token +{ +public: + TokFuncNormalizeSpace() + { + type = TOK_FUNC_NORMALIZE_SPACE; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncTranslate : public Token +{ +public: + TokFuncTranslate() + { + type = TOK_FUNC_TRANSLATE; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncBoolean : public Token +{ +public: + TokFuncBoolean() + { + type = TOK_FUNC_BOOLEAN; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncNot : public Token +{ +public: + TokFuncNot() + { + type = TOK_FUNC_NOT; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncTrue : public Token +{ +public: + TokFuncTrue() + { + type = TOK_FUNC_TRUE; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncFalse : public Token +{ +public: + TokFuncFalse() + { + type = TOK_FUNC_FALSE; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncLang : public Token +{ +public: + TokFuncLang() + { + type = TOK_FUNC_LANG; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncNumber : public Token +{ +public: + TokFuncNumber() + { + type = TOK_FUNC_NUMBER; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncSum : public Token +{ +public: + TokFuncSum() + { + type = TOK_FUNC_SUM; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncFloor : public Token +{ +public: + TokFuncFloor() + { + type = TOK_FUNC_FLOOR; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncCeiling : public Token +{ +public: + TokFuncCeiling() + { + type = TOK_FUNC_CEILING; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + +class TokFuncRound : public Token +{ +public: + TokFuncRound() + { + type = TOK_FUNC_ROUND; + } + virtual bool execute(TokenExecutor &exec) + { + return true; + } +}; + + + + + + +//######################################################################## +//# T O K E N L I S T +//######################################################################## + +/** + * + */ +class TokenList +{ +public: + + /** + * + */ + TokenList(); + + /** + * + */ + TokenList(const TokenList &other); + + /** + * + */ + TokenList &operator=(const TokenList &other); + + /** + * + */ + void assign(const TokenList &other); + + /** + * + */ + virtual ~TokenList(); + + /** + * + */ + virtual void clear(); + + /** + * + */ + virtual void add(Token *tok); + + /** + * + */ + virtual unsigned int size() const; + + /** + * + */ + virtual void dump(); + +private: + + + std::vector tokens; + + +}; + + + + + + + +} // namespace xpath +} // namespace dom +} // namespace w3c +} // namespace org + + + + + + +#endif /* __XPATHTOKEN_H__ */ +//######################################################################## +//# E N D O F F I L E +//######################################################################## +