summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorivost <ivost@3ad0048d-3df7-0310-abae-a5850022a9f2>2008-08-22 22:06:19 +0000
committerivost <ivost@3ad0048d-3df7-0310-abae-a5850022a9f2>2008-08-22 22:06:19 +0000
commit28ae8035ccc67e6f1bf12bedde8b97889c0eb1ec (patch)
tree87c4bdaf422b2a60b4a3aa2ed1b1661c97577901
parentb0acbe8f030ac3e08c8650b2e4c6d8381b7cdff9 (diff)
downloadfpc-28ae8035ccc67e6f1bf12bedde8b97889c0eb1ec.tar.gz
* new libxml2 samples
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@11634 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--packages/libxml/examples/Makefile116
-rw-r--r--packages/libxml/examples/Makefile.fpc2
-rw-r--r--packages/libxml/examples/reader1.pas2
-rw-r--r--packages/libxml/examples/tree1.pas76
-rw-r--r--packages/libxml/examples/tree2.pas109
5 files changed, 245 insertions, 60 deletions
diff --git a/packages/libxml/examples/Makefile b/packages/libxml/examples/Makefile
index fa91e03783..05b1f936e6 100644
--- a/packages/libxml/examples/Makefile
+++ b/packages/libxml/examples/Makefile
@@ -259,178 +259,178 @@ UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
endif
PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-haiku)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_PROGRAMS+=reader1 reader2 io1 io2
+override TARGET_PROGRAMS+=reader1 reader2 io1 io2 tree1 tree2
endif
override INSTALL_FPCPACKAGE=y
ifdef REQUIRE_UNITSDIR
diff --git a/packages/libxml/examples/Makefile.fpc b/packages/libxml/examples/Makefile.fpc
index 288b91780a..b44b2ded1a 100644
--- a/packages/libxml/examples/Makefile.fpc
+++ b/packages/libxml/examples/Makefile.fpc
@@ -3,7 +3,7 @@
#
[target]
-programs=reader1 reader2 io1 io2
+programs=reader1 reader2 io1 io2 tree1 tree2
[require]
#packages=
diff --git a/packages/libxml/examples/reader1.pas b/packages/libxml/examples/reader1.pas
index 5607703c52..877960385f 100644
--- a/packages/libxml/examples/reader1.pas
+++ b/packages/libxml/examples/reader1.pas
@@ -32,7 +32,7 @@ var
begin
name := xmlTextReaderConstName(reader);
if not assigned(name) then
- name := pchar('--'); // BAD_CAST !!!!
+ name := BAD_CAST('--');
value := xmlTextReaderConstValue(reader);
diff --git a/packages/libxml/examples/tree1.pas b/packages/libxml/examples/tree1.pas
new file mode 100644
index 0000000000..b648daa7fd
--- /dev/null
+++ b/packages/libxml/examples/tree1.pas
@@ -0,0 +1,76 @@
+(**
+ * section: Tree
+ * synopsis: Navigates a tree to print element names
+ * purpose: Parse a file to a tree, use xmlDocGetRootElement() to
+ * get the root element, then walk the document and print
+ * all the element name in document order.
+ * usage: tree1 filename_or_URL
+ * test: tree1 test2.xml > tree1.tmp ; diff tree1.tmp tree1.res ; rm tree1.tmp
+ * author: Dodji Seketeli
+ * copy: see Copyright for the status of this software.
+ *)
+
+program tree1;
+
+{$mode objfpc}
+
+uses
+ ctypes,
+ libxml2,
+ exutils,
+ SysUtils;
+
+procedure print_element_names(a_node: xmlNodePtr);
+var
+ cur_node: xmlNodePtr;
+begin
+ cur_node := a_node;
+ while assigned(cur_node) do
+ begin
+ if cur_node^._type = XML_ELEMENT_NODE then
+ printfn('node type: Element, name: %s', [cur_node^.name]);
+
+ print_element_names(cur_node^.children);
+
+ cur_node := cur_node^.next;
+ end;
+end;
+
+var
+ doc: xmlDocPtr;
+ root_element: xmlNodePtr;
+
+begin
+ if paramCount <> 1 then
+ halt(1);
+
+ (*
+ * this initialize the library and check potential ABI mismatches
+ * between the version it was compiled for and the actual shared
+ * library used.
+ *)
+ LIBXML_TEST_VERSION;
+
+ (* parse the file and get the DOM *)
+ doc := xmlReadFile(pchar(paramStr(1)), nil, 0);
+
+ if not assigned(doc) then
+ begin
+ printfn('error: could not parse file %s', [paramStr(1)]);
+ halt(1);
+ end;
+
+ (* Get the root element node *)
+ root_element := xmlDocGetRootElement(doc);
+
+ print_element_names(root_element);
+
+ (* free the document *)
+ xmlFreeDoc(doc);
+
+ (*
+ * Free the global variables that may
+ * have been allocated by the parser.
+ *)
+ xmlCleanupParser();
+end.
diff --git a/packages/libxml/examples/tree2.pas b/packages/libxml/examples/tree2.pas
new file mode 100644
index 0000000000..090897e291
--- /dev/null
+++ b/packages/libxml/examples/tree2.pas
@@ -0,0 +1,109 @@
+(*
+ * section: Tree
+ * synopsis: Creates a tree
+ * purpose: Shows how to create document, nodes and dump it to stdout or file.
+ * usage: tree2 <filename> -Default output: stdout
+ * test: tree2 > tree2.tmp ; diff tree2.tmp tree2.res ; rm tree2.tmp
+ * author: Lucas Brasilino <brasilino@recife.pe.gov.br>
+ * copy: see Copyright for the status of this software
+ *)
+
+program tree2;
+
+{$mode objfpc}
+
+uses
+ ctypes,
+ libxml2,
+ exutils,
+ SysUtils;
+
+var
+ doc: xmlDocPtr;
+ root_node, node, node1: xmlNodePtr;
+ dtd: xmlDtdPtr;
+ buff: array[0..255] of char;
+ i, j: cint;
+
+begin
+ LIBXML_TEST_VERSION;
+
+ (*
+ * Creates a new document, a node and set it as a root node
+ *)
+ doc := xmlNewDoc(BAD_CAST('1.0'));
+ root_node := xmlNewNode(nil, BAD_CAST('root'));
+ xmlDocSetRootElement(doc, root_node);
+
+ (*
+ * Creates a DTD declaration. Isn't mandatory.
+ *)
+ dtd := xmlCreateIntSubset(doc, BAD_CAST('root'), nil, BAD_CAST('tree2.dtd'));
+
+ (*
+ * xmlNewChild() creates a new node, which is "attached" as child node
+ * of root_node node.
+ *)
+ xmlNewChild(root_node, nil, BAD_CAST('node1'), BAD_CAST('content of node 1'));
+ (*
+ * The same as above, but the new child node doesn't have a content
+ *)
+ xmlNewChild(root_node, nil, BAD_CAST('node2'), nil);
+
+ (*
+ * xmlNewProp() creates attributes, which is "attached" to an node.
+ * It returns xmlAttrPtr, which isn't used here.
+ *)
+ node := xmlNewChild(root_node, nil, BAD_CAST('node3'), BAD_CAST('this node has attributes'));
+ xmlNewProp(node, BAD_CAST('attribute'), BAD_CAST('yes'));
+ xmlNewProp(node, BAD_CAST('foo'), BAD_CAST('bar'));
+
+ (*
+ * Here goes another way to create nodes. xmlNewNode() and xmlNewText
+ * creates a node and a text node separately. They are "attached"
+ * by xmlAddChild()
+ *)
+ node := xmlNewNode(nil, BAD_CAST('node4'));
+ node1 := xmlNewText(BAD_CAST('other way to create content (which is also a node)'));
+ xmlAddChild(node, node1);
+ xmlAddChild(root_node, node);
+
+ (*
+ * A simple loop that "automates" nodes creation
+ *)
+ for i := 5 to 6 do
+ begin
+ buff := 'node'+inttostr(i);
+ node := xmlNewChild(root_node, nil, BAD_CAST(buff), nil);
+
+ for j := 1 to 3 do
+ begin
+ buff := 'node'+inttostr(i)+inttostr(j);
+ node1 := xmlNewChild(node, nil, BAD_CAST(buff), nil);
+ if j mod 2 = 0 then
+ xmlNewProp(node1, BAD_CAST('odd'), BAD_CAST('no'))
+ else
+ xmlNewProp(node1, BAD_CAST('odd'), BAD_CAST('yes'));
+ end;
+ end;
+
+ (*
+ * Dumping document to stdio or file
+ *)
+ docdump(doc);
+ //xmlSaveFormatFileEnc(argc > 1 ? argv[1] : "-", doc, "UTF-8", 1);
+
+ (*free the document *)
+ xmlFreeDoc(doc);
+
+ (*
+ * Free the global variables that may
+ * have been allocated by the parser.
+ *)
+ xmlCleanupParser();
+
+ (*
+ * this is to debug memory for regression tests
+ *)
+ xmlMemoryDump();
+end. \ No newline at end of file