From d7752d3c690098d5073365ff58b1791508bbdd1d Mon Sep 17 00:00:00 2001 From: michael Date: Fri, 16 Mar 2007 23:14:10 +0000 Subject: [PATCH] * added an improved but incompatible TXMLConfig from Sergei Gorelkin git-svn-id: trunk@6897 - --- .gitattributes | 1 + packages/fcl-xml/Makefile | 229 ++++++++-------- packages/fcl-xml/Makefile.fpc | 4 +- packages/fcl-xml/src/xmlconf.pp | 445 ++++++++++++++++++++++++++++++++ 4 files changed, 552 insertions(+), 127 deletions(-) create mode 100644 packages/fcl-xml/src/xmlconf.pp diff --git a/.gitattributes b/.gitattributes index ac30cc124a..8258965856 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4250,6 +4250,7 @@ packages/fcl-xml/src/wtagsimpl.inc svneol=native#text/plain packages/fcl-xml/src/wtagsintf.inc svneol=native#text/plain packages/fcl-xml/src/xhtml.pp svneol=native#text/plain packages/fcl-xml/src/xmlcfg.pp svneol=native#text/plain +packages/fcl-xml/src/xmlconf.pp svneol=native#text/plain packages/fcl-xml/src/xmlread.pp svneol=native#text/plain packages/fcl-xml/src/xmlstreaming.pp svneol=native#text/plain packages/fcl-xml/src/xmlutils.pp svneol=native#text/plain diff --git a/packages/fcl-xml/Makefile b/packages/fcl-xml/Makefile index 0b9a329d8c..35fcf14bb9 100644 --- a/packages/fcl-xml/Makefile +++ b/packages/fcl-xml/Makefile @@ -1,8 +1,8 @@ # -# Don't edit, this file is generated by FPCMake Version 2.0.0 [2007/03/04] +# Don't edit, this file is generated by FPCMake Version 2.0.0 [2007/02/27] # default: all -MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded +MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-embedded BSDs = freebsd netbsd openbsd darwin UNIXs = linux $(BSDs) solaris qnx LIMIT83fs = go32v2 os2 emx watcom @@ -233,316 +233,310 @@ PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(F override PACKAGE_NAME=fcl-xml override PACKAGE_VERSION=2.0.0 ifeq ($(FULL_TARGET),i386-linux) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-go32v2) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-win32) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-os2) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-freebsd) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-beos) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-netbsd) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-solaris) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-qnx) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-netware) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-openbsd) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-wdosx) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-darwin) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-emx) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-watcom) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-netwlibc) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-wince) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-embedded) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-symbian) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),m68k-linux) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),m68k-freebsd) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),m68k-netbsd) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),m68k-amiga) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),m68k-atari) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),m68k-openbsd) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),m68k-palmos) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),m68k-embedded) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),powerpc-linux) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),powerpc-netbsd) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),powerpc-amiga) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),powerpc-macos) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),powerpc-darwin) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),powerpc-morphos) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),powerpc-embedded) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),sparc-linux) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),sparc-netbsd) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),sparc-solaris) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),sparc-embedded) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),x86_64-linux) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),x86_64-freebsd) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),x86_64-win64) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),x86_64-embedded) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),arm-linux) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),arm-palmos) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),arm-wince) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),arm-gba) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),arm-nds) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),arm-embedded) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),arm-symbian) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),powerpc64-linux) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter -endif -ifeq ($(FULL_TARGET),powerpc64-darwin) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),powerpc64-embedded) -override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter +override TARGET_UNITS+=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-linux) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-go32v2) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-win32) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-os2) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-freebsd) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-beos) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-netbsd) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-solaris) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-qnx) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-netware) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-openbsd) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-wdosx) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-darwin) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-emx) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-watcom) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-netwlibc) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-wince) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-embedded) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),i386-symbian) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),m68k-linux) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),m68k-freebsd) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),m68k-netbsd) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),m68k-amiga) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),m68k-atari) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),m68k-openbsd) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),m68k-palmos) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),m68k-embedded) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),powerpc-linux) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),powerpc-netbsd) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),powerpc-amiga) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),powerpc-macos) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),powerpc-darwin) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),powerpc-morphos) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),powerpc-embedded) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),sparc-linux) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),sparc-netbsd) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),sparc-solaris) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),sparc-embedded) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),x86_64-linux) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),x86_64-freebsd) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),x86_64-win64) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),x86_64-embedded) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),arm-linux) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),arm-palmos) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),arm-wince) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),arm-gba) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),arm-nds) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),arm-embedded) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),arm-symbian) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),powerpc64-linux) -override TARGET_RSTS+=sax xpath htmlwriter -endif -ifeq ($(FULL_TARGET),powerpc64-darwin) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif ifeq ($(FULL_TARGET),powerpc64-embedded) -override TARGET_RSTS+=sax xpath htmlwriter +override TARGET_RSTS+=sax xpath htmlwriter xmlconf endif override INSTALL_FPCPACKAGE=y ifeq ($(FULL_TARGET),i386-linux) @@ -695,9 +689,6 @@ endif ifeq ($(FULL_TARGET),powerpc64-linux) override COMPILER_OPTIONS+=-S2h endif -ifeq ($(FULL_TARGET),powerpc64-darwin) -override COMPILER_OPTIONS+=-S2h -endif ifeq ($(FULL_TARGET),powerpc64-embedded) override COMPILER_OPTIONS+=-S2h endif @@ -851,9 +842,6 @@ endif ifeq ($(FULL_TARGET),powerpc64-linux) override COMPILER_SOURCEDIR+=src endif -ifeq ($(FULL_TARGET),powerpc64-darwin) -override COMPILER_SOURCEDIR+=src -endif ifeq ($(FULL_TARGET),powerpc64-embedded) override COMPILER_SOURCEDIR+=src endif @@ -1991,15 +1979,6 @@ REQUIRE_PACKAGES_LIBASYNC=1 REQUIRE_PACKAGES_PTHREADS=1 REQUIRE_PACKAGES_FCL-BASE=1 endif -ifeq ($(FULL_TARGET),powerpc64-darwin) -REQUIRE_PACKAGES_RTL=1 -REQUIRE_PACKAGES_NETDB=1 -REQUIRE_PACKAGES_HASH=1 -REQUIRE_PACKAGES_PASZLIB=1 -REQUIRE_PACKAGES_LIBASYNC=1 -REQUIRE_PACKAGES_PTHREADS=1 -REQUIRE_PACKAGES_FCL-BASE=1 -endif ifeq ($(FULL_TARGET),powerpc64-embedded) REQUIRE_PACKAGES_RTL=1 REQUIRE_PACKAGES_NETDB=1 diff --git a/packages/fcl-xml/Makefile.fpc b/packages/fcl-xml/Makefile.fpc index f0f2827cdd..bb3d67fdd1 100644 --- a/packages/fcl-xml/Makefile.fpc +++ b/packages/fcl-xml/Makefile.fpc @@ -7,8 +7,8 @@ name=fcl-xml version=2.0.0 [target] -units=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter -rsts=sax xpath htmlwriter +units=htmldefs sax xmlutils dom sax_html dom_html xmlcfg xmlread xmlstreaming xmlwrite xhtml htmwrite xpath htmlelements htmlwriter xmlconf +rsts=sax xpath htmlwriter xmlconf [require] packages=netdb fcl-base diff --git a/packages/fcl-xml/src/xmlconf.pp b/packages/fcl-xml/src/xmlconf.pp new file mode 100644 index 0000000000..b3fb40d353 --- /dev/null +++ b/packages/fcl-xml/src/xmlconf.pp @@ -0,0 +1,445 @@ +{ + This file is part of the Free Component Library + + Implementation of TXMLConfig class + Copyright (c) 1999 - 2005 by Sebastian Guenther, sg@freepascal.org + Modified in 2007 by Sergei Gorelkin, sergei_gorelkin@mail.ru + + See the file COPYING.FPC, included in this distribution, + for details about the copyright. + + 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. + + **********************************************************************} + +{ + TXMLConfig enables applications to use XML files for storing their + configuration data +} + +{$IFDEF FPC} +{$MODE objfpc} +{$H+} +{$ENDIF} + +unit XMLConf; + +interface + +uses + SysUtils, Classes, DOM, XMLRead, XMLWrite; + +resourcestring + SWrongRootName = 'XML file has wrong root element name'; + +type + EXMLConfigError = class(Exception); + TPathFlags = set of (pfHasValue, pfWriteAccess); + + {"APath" is the path and name of a value: A XML configuration file is + hierachical. "/" is the path delimiter, the part after the last "/" + is the name of the value. The path components will be mapped to XML + elements, the name will be an element attribute.} + + TXMLConfig = class(TComponent) + private + FFilename: String; + FStartEmpty: Boolean; + FRootName: DOMString; + FDummy: DOMString; + FPathStack: array of WideString; + FPathCount: Integer; + FPathDirty: Boolean; + FElement: TDOMElement; + procedure DoSetFilename(const AFilename: String; ForceReload: Boolean); + procedure SetFilename(const AFilename: String); + procedure SetStartEmpty(AValue: Boolean); + procedure SetRootName(const AValue: DOMString); + function DoFindNode(const APath: WideString; var Ident: DOMString; + Flags: TPathFlags): TDomElement; + function FindNode(const APath: WideString; out Ident: DOMString; + Flags: TPathFlags): TDOMElement; + protected + Doc: TXMLDocument; + FModified: Boolean; + procedure Loaded; override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure Clear; + procedure Flush; // Writes the XML file + procedure OpenKey(const aPath: WideString); + procedure CloseKey; + procedure ResetKey; + + function GetValue(const APath: WideString; const ADefault: WideString): WideString; overload; + function GetValue(const APath: WideString; ADefault: Integer): Integer; overload; + function GetValue(const APath: WideString; ADefault: Boolean): Boolean; overload; + procedure SetValue(const APath: WideString; const AValue: WideString); overload; + procedure SetValue(const APath: WideString; AValue: Integer); overload; + procedure SetValue(const APath: WideString; AValue: Boolean); overload; + + procedure SetDeleteValue(const APath: WideString; const AValue, DefValue: WideString); overload; + procedure SetDeleteValue(const APath: WideString; AValue, DefValue: Integer); overload; + procedure SetDeleteValue(const APath: WideString; AValue, DefValue: Boolean); overload; + + procedure DeletePath(const APath: WideString); + procedure DeleteValue(const APath: WideString); + property Modified: Boolean read FModified; + published + property Filename: String read FFilename write SetFilename; + property StartEmpty: Boolean read FStartEmpty write SetStartEmpty; + property RootName: DOMString read FRootName write SetRootName; + end; + + +// =================================================================== + +implementation + +constructor TXMLConfig.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FRootName := 'CONFIG'; + Doc := TXMLDocument.Create; + Doc.AppendChild(Doc.CreateElement(FRootName)); +end; + +destructor TXMLConfig.Destroy; +begin + if Assigned(Doc) then + begin + Flush; + Doc.Free; + end; + inherited Destroy; +end; + +procedure TXMLConfig.Clear; +begin + Doc.ReplaceChild(Doc.CreateElement(FRootName), Doc.DocumentElement); +end; + +procedure TXMLConfig.Flush; +begin + if Modified then + begin + WriteXMLFile(Doc, Filename); + FModified := False; + end; +end; + +function TXMLConfig.GetValue(const APath: WideString; const ADefault: WideString): WideString; +var + Node: TDOMElement; + Attr: TDOMAttr; + Ident: DOMString; +begin + Result := ADefault; + + Node := FindNode(APath, Ident, [pfHasValue]); + if Assigned(Node) then + begin + Attr := Node.GetAttributeNode(Ident); + if Assigned(Attr) then + Result := Attr.NodeValue; + end; +end; + +function TXMLConfig.GetValue(const APath: WideString; ADefault: Integer): Integer; +begin + Result := StrToIntDef(GetValue(APath, ''),ADefault); +end; + +function TXMLConfig.GetValue(const APath: WideString; ADefault: Boolean): Boolean; +var + s: DOMString; +begin + s := GetValue(APath, ''); + + if WideSameText(s, 'TRUE') then + Result := True + else if WideSameText(s, 'FALSE') then + Result := False + else + Result := ADefault; +end; + +procedure TXMLConfig.SetValue(const APath: WideString; const AValue: WideString); +var + Node: TDOMElement; + Attr: TDOMAttr; + Ident: DOMString; +begin + Node := FindNode(APath, Ident, [pfHasValue, pfWriteAccess]); + + Attr := Node.GetAttributeNode(Ident); + if (Attr = nil) or (Attr.NodeValue <> AValue) then + begin + Node[Ident] := AValue; + FModified := True; + end; +end; + +procedure TXMLConfig.SetDeleteValue(const APath: WideString; const AValue, DefValue: WideString); +begin + if AValue = DefValue then + DeleteValue(APath) + else + SetValue(APath, AValue); +end; + +procedure TXMLConfig.SetValue(const APath: WideString; AValue: Integer); +begin + SetValue(APath, IntToStr(AValue)); +end; + +procedure TXMLConfig.SetDeleteValue(const APath: WideString; AValue, + DefValue: Integer); +begin + if AValue = DefValue then + DeleteValue(APath) + else + SetValue(APath, AValue); +end; + +procedure TXMLConfig.SetValue(const APath: WideString; AValue: Boolean); +begin + if AValue then + SetValue(APath, 'True') + else + SetValue(APath, 'False'); +end; + +procedure TXMLConfig.SetDeleteValue(const APath: WideString; AValue, + DefValue: Boolean); +begin + if AValue = DefValue then + DeleteValue(APath) + else + SetValue(APath,AValue); +end; + +procedure TXMLConfig.DeletePath(const APath: WideString); +var + Node: TDomNode; + Ident: DOMString; +begin + Node := FindNode(APath, Ident, []); + if Assigned(Node) and Assigned(Node.ParentNode) then + begin + Node.ParentNode.RemoveChild(Node); + FPathDirty := True; + FElement := nil; + FModified := True; + end; +end; + +procedure TXMLConfig.DeleteValue(const APath: WideString); +var + Node: TDOMElement; + Ident: DOMString; + Parent: TDOMNode; +begin + Node := FindNode(APath, Ident, [pfHasValue]); + if Assigned(Node) then + begin + if Assigned(Node.GetAttributeNode(Ident)) then + begin + Node.RemoveAttribute(Ident); + FModified := True; + end; + while (Node.FirstChild=nil) and Assigned(Node.ParentNode) + and Assigned(Node.ParentNode.ParentNode) do + begin + if Node.HasAttributes then + Break; + Parent := Node.ParentNode; + Parent.RemoveChild(Node); + Node := TDOMElement(Parent); + FPathDirty := True; + FElement := nil; + FModified := True; + end; + end; +end; + +procedure TXMLConfig.Loaded; +begin + inherited Loaded; + if Length(Filename) > 0 then + SetFilename(Filename); // Load the XML config file +end; + +// TODO: copied from dom.pp, make public there and delete here +function CompareDOMStrings(const s1, s2: DOMPChar; l1, l2: integer): integer; +var i: integer; +begin + Result:=l1-l2; + i:=0; + while (i 0) and (APath[1] <> '/') then + Result := FElement + else + Result := Doc.DocumentElement; + + PathLen := Length(APath); + StartPos := 1; + if APath[StartPos] = '/' then Inc(StartPos); + while Assigned(Result) do + begin + EndPos := StartPos; + while (EndPos <= PathLen) and (APath[EndPos] <> '/') do + Inc(EndPos); + if (EndPos > PathLen) and (pfHasValue in Flags) then + begin + SetString(Ident, PWideChar(@APath[StartPos]), PathLen-StartPos+1); + exit; + end; + if EndPos = StartPos then + break; + Child := Result.FirstChild; + while Assigned(Child) and not ((Child.NodeType = ELEMENT_NODE) + and (0 = CompareDOMStrings(DOMPChar(TDOMElement(Child).TagName), @APath[StartPos], + Length(TDOMElement(Child).TagName), EndPos-StartPos))) do + Child := Child.NextSibling; + if (Child = nil) and (pfWriteAccess in Flags) then + begin + Child := Doc.CreateElementBuf(@APath[StartPos], EndPos-StartPos); + Result.AppendChild(Child); + end; + Result := TDOMElement(Child); + StartPos := EndPos + 1; + if StartPos > PathLen then + exit; + end; + Result := nil; +end; + +procedure TXMLConfig.DoSetFilename(const AFilename: String; ForceReload: Boolean); +begin + if (not ForceReload) and (FFilename = AFilename) then + exit; + FFilename := AFilename; + + if csLoading in ComponentState then + exit; + + Flush; + FreeAndNil(Doc); + + if FileExists(AFilename) and not FStartEmpty then + ReadXMLFile(Doc, AFilename); + + if not Assigned(Doc) then + Doc := TXMLDocument.Create; + + if not Assigned(Doc.DocumentElement) then + Doc.AppendChild(Doc.CreateElement(FRootName)) + else + if Doc.DocumentElement.NodeName <> FRootName then + raise EXMLConfigError.Create(SWrongRootName); + +end; + +procedure TXMLConfig.SetFilename(const AFilename: String); +begin + DoSetFilename(AFilename, False); +end; + +procedure TXMLConfig.SetRootName(const AValue: DOMString); +var + Cfg, Root: TDOMElement; +begin + if AValue <> FRootName then + begin + FRootName := AValue; + Root := Doc.DocumentElement; + Cfg := Doc.CreateElement(AValue); + while Assigned(Root.FirstChild) do + Cfg.AppendChild(Root.FirstChild); + Doc.ReplaceChild(Cfg, Root); + FModified := True; + end; +end; + +procedure TXMLConfig.SetStartEmpty(AValue: Boolean); +begin + if AValue <> StartEmpty then + begin + FStartEmpty := AValue; + if (not AValue) and not Modified then + DoSetFilename(Filename, True); + end; +end; + +procedure TXMLConfig.CloseKey; +begin + if FPathCount > 0 then + begin + FPathStack[FPathCount-1] := ''; + Dec(FPathCount); + FElement := nil; + FPathDirty := True; + end; +end; + +procedure TXMLConfig.OpenKey(const aPath: WideString); +begin + if aPath <> '' then + begin + if FPathCount >= Length(FPathStack) then + SetLength(FPathStack, FPathCount + 5); + + FPathStack[FPathCount] := aPath; + Inc(FPathCount); + FElement := nil; + FPathDirty := True; + end; +end; + +procedure TXMLConfig.ResetKey; +var + I: Integer; +begin + for I := Length(FPathStack) downto 0 do + FPathStack[I] := ''; + FElement := nil; + FPathDirty := False; + FPathCount := 0; +end; + + + + + + +end.