diff options
| author | ivost <ivost@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2008-08-22 22:06:19 +0000 |
|---|---|---|
| committer | ivost <ivost@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2008-08-22 22:06:19 +0000 |
| commit | 28ae8035ccc67e6f1bf12bedde8b97889c0eb1ec (patch) | |
| tree | 87c4bdaf422b2a60b4a3aa2ed1b1661c97577901 | |
| parent | b0acbe8f030ac3e08c8650b2e4c6d8381b7cdff9 (diff) | |
| download | fpc-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/Makefile | 116 | ||||
| -rw-r--r-- | packages/libxml/examples/Makefile.fpc | 2 | ||||
| -rw-r--r-- | packages/libxml/examples/reader1.pas | 2 | ||||
| -rw-r--r-- | packages/libxml/examples/tree1.pas | 76 | ||||
| -rw-r--r-- | packages/libxml/examples/tree2.pas | 109 |
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 |
