diff options
Diffstat (limited to 'include/delphi/m_xml.inc')
-rw-r--r-- | include/delphi/m_xml.inc | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/include/delphi/m_xml.inc b/include/delphi/m_xml.inc new file mode 100644 index 0000000000..a085193eaf --- /dev/null +++ b/include/delphi/m_xml.inc @@ -0,0 +1,220 @@ +{
+Miranda IM: the free IM client for Microsoft* Windows*
+
+Copyright 2000-2008 Miranda ICQ/IM project,
+all portions of this codebase are copyrighted to the people
+listed in contributors.txt.
+
+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 2
+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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+}
+
+{$IFNDEF M_XML}
+{$DEFINE M_XML}
+
+type
+ HXML = THANDLE;
+
+type
+ XML_ELEMENT_POS = int; // XML_ELEMENT_POS is not interchangeable with simple indexes
+
+type
+ XML_ELEMENT_TYPE = (
+ XML_ELEM_TYPE_CHILD,XML_ELEM_TYPE_ATTRIBUTE,
+ XML_ELEM_TYPE_TEXT ,XML_ELEM_TYPE_CLEAR);
+
+const
+ XML_API_SIZEOF_V1 = SizeOf(size_t)+26*sizeof(dword);
+
+type
+ XML_API_A = record
+ cbSize :size_t;
+
+ createNode :function(const name, text:PAnsiChar; IsDeclaration:boolean):HXML;cdecl;
+ destroyNode :procedure(node:HXML);cdecl;
+
+ parseString :function(const str:PAnsiChar; datalen:pint; const tag:PAnsiChar):HXML;cdecl;
+ toString :function(node:HXML;datalen:pint):PAnsiChar;cdecl;
+
+ addChild :function(parent:HXML; const name,text:PAnsiChar):HXML;cdecl;
+ addChild2 :procedure(child,parent:HXML);cdecl;
+ copyNode :function(parent:HXML):HXML;cdecl;
+ getChild :function(parent:HXML;number:int):HXML;cdecl;
+ getChildCount :function(h:HXML):int;cdecl;
+ getChildByAttrValue:function(parent:HXML; const name,attrName,attrValue:PAnsiChar):HXML;cdecl;
+ getFirstChild :function(parent:HXML):HXML;cdecl;
+ getNthChild :function(parent:HXML; const name:PAnsiChar; i:int):HXML;cdecl;
+ getNextChild :function(parent:HXML; const name:PAnsiChar; i:pint):HXML;cdecl;
+ getChildByPath :function(parent:HXML; const path:PAnsiChar;createNodeIfMissing:boolean):HXML;cdecl;
+ getNextNode :function(node:HXML):HXML;cdecl;
+ getName :function(h:HXML):PAnsiChar;cdecl;
+ getParent :function(h:HXML):HXML;cdecl;
+ getText :function(h:HXML):PAnsiChar;cdecl; // = getTextByIndex(HXML, 0)
+ setText :procedure(h:HXML;value:PAnsiChar);cdecl; // = setTextByIndex(HXML, LPCTSTR, 0)
+
+ getAttr :function(h:HXML;i:int):PAnsiChar;cdecl;
+ getAttrName :function(h:HXML;i:int):PAnsiChar;cdecl;
+ getAttrValue :function(h:HXML;const attrName:PAnsiChar):PAnsiChar;cdecl;
+ getAttrCount :function(h:HXML):int;cdecl;
+ addAttr :procedure(h:HXML;const attrName,attrValue:PAnsiChar);cdecl;
+ addAttrInt :procedure(h:HXML; const attrName:PAnsiChar;attrValue:int);cdecl;
+
+ freeMem :procedure(arg:pointer);cdecl;
+
+ // #if MIRANDA_VER >= 0x0900, methods added in XML API v2
+ isDeclaration :function(node:HXML):boolean;cdecl;
+ toStringWithFormatting:function(node:HXML; var datalen:int):PAnsiChar;cdecl;
+ deepCopy :function(node:HXML):HXML;cdecl;
+ setAttrByIndex :procedure(node:HXML; i:int; value:PAnsiChar);cdecl;
+ setAttrByName :procedure(node:HXML; name:PAnsiChar; value:PAnsiChar);cdecl;
+ addChildEx :function(parent:HXML; name:PAnsiChar; isDeclaration:boolean;
+ n:XML_ELEMENT_POS):HXML;cdecl;
+ addChildEx2 :procedure(child:HXML; parent:HXML; n:XML_ELEMENT_POS);cdecl;
+ getTextCount :function(node:HXML):int;cdecl;
+ getTextByIndex :function(node:HXML; i:int):PAnsiChar;cdecl;
+ addText :procedure(node:HXML; txt:PAnsiChar; n:XML_ELEMENT_POS);cdecl;
+ setTextByIndex :procedure(node:HXML; i:int; txt:PAnsiChar);cdecl;
+ getClearCount :function(node:HXML):int;cdecl;
+ getClear :function(node:HXML; i:int; var openTag:PAnsiChar;
+ var closeTag:PAnsiChar):PAnsiChar;cdecl;
+ addClear :procedure(node:HXML; lpszValue:PAnsiChar; openTag:PAnsiChar;
+ closeTag:PAnsiChar; n:XML_ELEMENT_POS);cdecl;
+ setClear :procedure(node:HXML; i:int; lpszValue:PAnsiChar);cdecl;
+ getElementCount :function(node:HXML):int;cdecl;
+ getElement :function(node:HXML; n:XML_ELEMENT_POS; var _type:XML_ELEMENT_TYPE;
+ var child:HXML;var value:PAnsiChar; var name:PAnsiChar;
+ var openTag:PAnsiChar; var closeTag:PAnsiChar):int;cdecl;
+ // With getElement() it's possible to enumerate all the different contents
+ // (attribute,child,text, clear) of the current node. The order is reflecting the order
+ // of the original file/string. NOTE: 0 <= i < getElementCount().
+ // type, child, value, name, openTag, closeTag will be filled on return, depending on type:
+ // for XML_ELEM_TYPE_CHILD , child is valid;
+ // for XML_ELEM_TYPE_ATTRIBUTE, name and value are valid;
+ // for XML_ELEM_TYPE_TEXT , value is valid;
+ // for XML_ELEM_TYPE_CLEAR , value, openTag and closeTag are valid.
+
+ deleteNodeContent:procedure(node:HXML);cdecl; // forces the deletion of the content of this node and the subtree
+ deleteAttrByIndex:procedure(node:HXML; i:int);cdecl;
+ deleteAttrByName :procedure(node:HXML; name:PAnsiChar);cdecl;
+ deleteText :procedure(node:HXML; i:int);cdecl;
+ deleteClear :procedure(node:HXML; i:int);cdecl;
+
+ positionOfChildByIndex:function(node:HXML; i:int):XML_ELEMENT_POS;cdecl;
+ positionOfChildByNode :function(node:HXML; node1:HXML):XML_ELEMENT_POS;cdecl;
+ positionOfChildByName :function(node:HXML; name:PAnsiChar; i:int):XML_ELEMENT_POS;cdecl;
+ positionOfText :function(node:HXML; i:int):XML_ELEMENT_POS;cdecl;
+ positionOfClear :function(node:HXML; i:int):XML_ELEMENT_POS;cdecl;
+ end;
+
+ XML_API_W = record
+ cbSize :size_t;
+
+ createNode :function(const name, text:PWideChar; IsDeclaration:boolean):HXML;cdecl;
+ destroyNode :procedure(node:HXML);cdecl;
+
+ parseString :function(const str:PWideChar; datalen:pint; const tag:PWideChar):HXML;cdecl;
+ toString :function(node:HXML;datalen:pint):PWideChar;cdecl;
+
+ addChild :function(parent:HXML; const name,text:PWideChar):HXML;cdecl;
+ addChild2 :procedure(child,parent:HXML);cdecl;
+ copyNode :function(parent:HXML):HXML;cdecl;
+ getChild :function(parent:HXML;number:int):HXML;cdecl;
+ getChildCount :function(h:HXML):int;cdecl;
+ getChildByAttrValue:function(parent:HXML; const name,attrName,attrValue:PWideChar):HXML;cdecl;
+ getFirstChild :function(parent:HXML):HXML;cdecl;
+ getNthChild :function(parent:HXML; const name:PWideChar; i:int):HXML;cdecl;
+ getNextChild :function(parent:HXML; const name:PWideChar; i:pint):HXML;cdecl;
+ getChildByPath :function(parent:HXML; const path:PWideChar;createNodeIfMissing:boolean):HXML;cdecl;
+ getNextNode :function(node:HXML):HXML;cdecl;
+ getName :function(h:HXML):PWideChar;cdecl;
+ getParent :function(h:HXML):HXML;cdecl;
+ getText :function(h:HXML):PWideChar;cdecl; // = getTextByIndex(HXML, 0)
+ setText :procedure(h:HXML;value:PWideChar);cdecl; // = setTextByIndex(HXML, LPCTSTR, 0)
+
+ getAttr :function(h:HXML;i:int):PWideChar;cdecl;
+ getAttrName :function(h:HXML;i:int):PWideChar;cdecl;
+ getAttrValue :function(h:HXML;const attrName:PWideChar):PWideChar;cdecl;
+ getAttrCount :function(h:HXML):int;cdecl;
+ addAttr :procedure(h:HXML;const attrName,attrValue:PWideChar);cdecl;
+ addAttrInt :procedure(h:HXML; const attrName:PWideChar;attrValue:int);cdecl;
+
+ freeMem :procedure(arg:pointer);cdecl;
+
+ // #if MIRANDA_VER >= 0x0900, methods added in XML API v2
+ isDeclaration :function(node:HXML):boolean;cdecl;
+ toStringWithFormatting:function(node:HXML; var datalen:int):PWideChar;cdecl;
+ deepCopy :function(node:HXML):HXML;cdecl;
+ setAttrByIndex :procedure(node:HXML; i:int; value:PWideChar);cdecl;
+ setAttrByName :procedure(node:HXML; name:PWideChar; value:PWideChar);cdecl;
+ addChildEx :function(parent:HXML; name:PWideChar; isDeclaration:boolean;
+ n:XML_ELEMENT_POS):HXML;cdecl;
+ addChildEx2 :procedure(child:HXML; parent:HXML; n:XML_ELEMENT_POS);cdecl;
+ getTextCount :function(node:HXML):int;cdecl;
+ getTextByIndex :function(node:HXML; i:int):PWideChar;cdecl;
+ addText :procedure(node:HXML; txt:PWideChar; n:XML_ELEMENT_POS);cdecl;
+ setTextByIndex :procedure(node:HXML; i:int; txt:PWideChar);cdecl;
+ getClearCount :function(node:HXML):int;cdecl;
+ getClear :function(node:HXML; i:int; var openTag:PWideChar;
+ var closeTag:PWideChar):PWideChar;cdecl;
+ addClear :procedure(node:HXML; lpszValue:PWideChar; openTag:PWideChar;
+ closeTag:PWideChar; n:XML_ELEMENT_POS);cdecl;
+ setClear :procedure(node:HXML; i:int; lpszValue:PWideChar);cdecl;
+ getElementCount :function(node:HXML):int;cdecl;
+ getElement :function(node:HXML; n:XML_ELEMENT_POS; var _type:XML_ELEMENT_TYPE;
+ var child:HXML;var value:PWideChar; var name:PWideChar;
+ var openTag:PWideChar; var closeTag:PWideChar):int;cdecl;
+ // With getElement() it's possible to enumerate all the different contents
+ // (attribute,child,text, clear) of the current node. The order is reflecting the order
+ // of the original file/string. NOTE: 0 <= i < getElementCount().
+ // type, child, value, name, openTag, closeTag will be filled on return, depending on type:
+ // for XML_ELEM_TYPE_CHILD , child is valid;
+ // for XML_ELEM_TYPE_ATTRIBUTE, name and value are valid;
+ // for XML_ELEM_TYPE_TEXT , value is valid;
+ // for XML_ELEM_TYPE_CLEAR , value, openTag and closeTag are valid.
+
+ deleteNodeContent:procedure(node:HXML);cdecl; // forces the deletion of the content of this node and the subtree
+ deleteAttrByIndex:procedure(node:HXML; i:int);cdecl;
+ deleteAttrByName :procedure(node:HXML; name:PWideChar);cdecl;
+ deleteText :procedure(node:HXML; i:int);cdecl;
+ deleteClear :procedure(node:HXML; i:int);cdecl;
+
+ positionOfChildByIndex:function(node:HXML; i:int):XML_ELEMENT_POS;cdecl;
+ positionOfChildByNode :function(node:HXML; node1:HXML):XML_ELEMENT_POS;cdecl;
+ positionOfChildByName :function(node:HXML; name:PWideChar; i:int):XML_ELEMENT_POS;cdecl;
+ positionOfText :function(node:HXML; i:int):XML_ELEMENT_POS;cdecl;
+ positionOfClear :function(node:HXML; i:int):XML_ELEMENT_POS;cdecl;
+ end;
+
+// every protocol should declare this variable to use the XML API
+//const
+// extern XML_API xi;
+
+const
+{
+a service to obtain the XML API
+
+wParam = 0;
+lParam = (LPARAM)(XML_API*).
+
+returns TRUE if all is Ok, and FALSE otherwise
+}
+ MS_SYSTEM_GET_XI:PAnsiChar = 'Miranda/System/GetXmlApi';
+(*
+__forceinline int mir_getXI( XML_API* dest )
+{
+ dest->cbSize = sizeof(*dest);
+ return CallService( MS_SYSTEM_GET_XI, 0, (LPARAM)dest );
+}
+*)
+{$ENDIF}
|