* Initial CHM support for textmode IDE.

git-svn-id: trunk@11885 -
This commit is contained in:
marco 2008-10-12 10:22:47 +00:00
parent d6c5cacd80
commit a091b51e31
6 changed files with 843 additions and 97 deletions

1
.gitattributes vendored
View File

@ -708,6 +708,7 @@ ide/unit.pt -text
ide/vesa.pas svneol=native#text/plain
ide/wansi.pas svneol=native#text/plain
ide/wcedit.pas svneol=native#text/plain
ide/wchmhwrap.pas svneol=native#text/plain
ide/wconsole.pas svneol=native#text/plain
ide/wconsts.pas svneol=native#text/plain
ide/wconstse.inc svneol=native#text/plain

View File

@ -1,5 +1,5 @@
#
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/08/19]
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/10/12]
#
default: all
MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku 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-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded
@ -115,6 +115,10 @@ FPC:=$(shell $(FPCPROG) -PB)
endif
ifneq ($(findstring Error,$(FPC)),)
override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
else
ifeq ($(strip $(wildcard $(FPC))),)
FPC:=$(firstword $(FPCPROG))
endif
endif
else
override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
@ -1602,18 +1606,24 @@ else
TAROPT=vz
TAREXT=.tar.gz
endif
override REQUIRE_PACKAGES=rtl fv gdbint regexpr
override REQUIRE_PACKAGES=rtl fv gdbint regexpr chm
ifeq ($(FULL_TARGET),i386-linux)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),i386-go32v2)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
REQUIRE_PACKAGES_GRAPH=1
endif
ifeq ($(FULL_TARGET),i386-win32)
@ -1621,336 +1631,508 @@ REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_WINUNITS-BASE=1
REQUIRE_PACKAGES_WINUNITS-JEDI=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),i386-os2)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),i386-freebsd)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),i386-beos)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),i386-haiku)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),i386-netbsd)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),i386-solaris)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),i386-qnx)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),i386-netware)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),i386-openbsd)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),i386-wdosx)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),i386-darwin)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),i386-emx)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),i386-watcom)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),i386-netwlibc)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),i386-wince)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),i386-embedded)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),i386-symbian)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),m68k-linux)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),m68k-freebsd)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),m68k-netbsd)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),m68k-amiga)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),m68k-atari)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),m68k-openbsd)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),m68k-palmos)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),m68k-embedded)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),powerpc-linux)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),powerpc-netbsd)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),powerpc-amiga)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),powerpc-macos)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),powerpc-darwin)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),powerpc-morphos)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),powerpc-embedded)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),sparc-linux)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),sparc-netbsd)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),sparc-solaris)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),sparc-embedded)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),x86_64-linux)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),x86_64-freebsd)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),x86_64-darwin)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),x86_64-win64)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_WINUNITS-BASE=1
REQUIRE_PACKAGES_WINUNITS-JEDI=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),x86_64-embedded)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),arm-linux)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),arm-palmos)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),arm-darwin)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),arm-wince)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),arm-gba)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),arm-nds)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),arm-embedded)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),arm-symbian)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),powerpc64-linux)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),powerpc64-darwin)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),powerpc64-embedded)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),avr-embedded)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),armeb-linux)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifeq ($(FULL_TARGET),armeb-embedded)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_FV=1
REQUIRE_PACKAGES_GDBINT=1
REQUIRE_PACKAGES_REGEXPR=1
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_CHM=1
endif
ifdef REQUIRE_PACKAGES_RTL
PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
@ -2056,6 +2238,84 @@ ifdef UNITDIR_REGEXPR
override COMPILER_UNITDIR+=$(UNITDIR_REGEXPR)
endif
endif
ifdef REQUIRE_PACKAGES_FCL-BASE
PACKAGEDIR_FCL-BASE:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-base/Makefile.fpc,$(PACKAGESDIR))))))
ifneq ($(PACKAGEDIR_FCL-BASE),)
ifneq ($(wildcard $(PACKAGEDIR_FCL-BASE)/units/$(TARGETSUFFIX)),)
UNITDIR_FCL-BASE=$(PACKAGEDIR_FCL-BASE)/units/$(TARGETSUFFIX)
else
UNITDIR_FCL-BASE=$(PACKAGEDIR_FCL-BASE)
endif
ifdef CHECKDEPEND
$(PACKAGEDIR_FCL-BASE)/$(FPCMADE):
$(MAKE) -C $(PACKAGEDIR_FCL-BASE) $(FPCMADE)
override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-BASE)/$(FPCMADE)
endif
else
PACKAGEDIR_FCL-BASE=
UNITDIR_FCL-BASE:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-base/Package.fpc,$(UNITSDIR)))))
ifneq ($(UNITDIR_FCL-BASE),)
UNITDIR_FCL-BASE:=$(firstword $(UNITDIR_FCL-BASE))
else
UNITDIR_FCL-BASE=
endif
endif
ifdef UNITDIR_FCL-BASE
override COMPILER_UNITDIR+=$(UNITDIR_FCL-BASE)
endif
endif
ifdef REQUIRE_PACKAGES_FCL-XML
PACKAGEDIR_FCL-XML:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-xml/Makefile.fpc,$(PACKAGESDIR))))))
ifneq ($(PACKAGEDIR_FCL-XML),)
ifneq ($(wildcard $(PACKAGEDIR_FCL-XML)/units/$(TARGETSUFFIX)),)
UNITDIR_FCL-XML=$(PACKAGEDIR_FCL-XML)/units/$(TARGETSUFFIX)
else
UNITDIR_FCL-XML=$(PACKAGEDIR_FCL-XML)
endif
ifdef CHECKDEPEND
$(PACKAGEDIR_FCL-XML)/$(FPCMADE):
$(MAKE) -C $(PACKAGEDIR_FCL-XML) $(FPCMADE)
override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-XML)/$(FPCMADE)
endif
else
PACKAGEDIR_FCL-XML=
UNITDIR_FCL-XML:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-xml/Package.fpc,$(UNITSDIR)))))
ifneq ($(UNITDIR_FCL-XML),)
UNITDIR_FCL-XML:=$(firstword $(UNITDIR_FCL-XML))
else
UNITDIR_FCL-XML=
endif
endif
ifdef UNITDIR_FCL-XML
override COMPILER_UNITDIR+=$(UNITDIR_FCL-XML)
endif
endif
ifdef REQUIRE_PACKAGES_CHM
PACKAGEDIR_CHM:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /chm/Makefile.fpc,$(PACKAGESDIR))))))
ifneq ($(PACKAGEDIR_CHM),)
ifneq ($(wildcard $(PACKAGEDIR_CHM)/units/$(TARGETSUFFIX)),)
UNITDIR_CHM=$(PACKAGEDIR_CHM)/units/$(TARGETSUFFIX)
else
UNITDIR_CHM=$(PACKAGEDIR_CHM)
endif
ifdef CHECKDEPEND
$(PACKAGEDIR_CHM)/$(FPCMADE):
$(MAKE) -C $(PACKAGEDIR_CHM) $(FPCMADE)
override ALLDEPENDENCIES+=$(PACKAGEDIR_CHM)/$(FPCMADE)
endif
else
PACKAGEDIR_CHM=
UNITDIR_CHM:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /chm/Package.fpc,$(UNITSDIR)))))
ifneq ($(UNITDIR_CHM),)
UNITDIR_CHM:=$(firstword $(UNITDIR_CHM))
else
UNITDIR_CHM=
endif
endif
ifdef UNITDIR_CHM
override COMPILER_UNITDIR+=$(UNITDIR_CHM)
endif
endif
ifdef REQUIRE_PACKAGES_GRAPH
PACKAGEDIR_GRAPH:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /graph/Makefile.fpc,$(PACKAGESDIR))))))
ifneq ($(PACKAGEDIR_GRAPH),)
@ -2082,6 +2342,58 @@ ifdef UNITDIR_GRAPH
override COMPILER_UNITDIR+=$(UNITDIR_GRAPH)
endif
endif
ifdef REQUIRE_PACKAGES_WINUNITS-BASE
PACKAGEDIR_WINUNITS-BASE:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /winunits-base/Makefile.fpc,$(PACKAGESDIR))))))
ifneq ($(PACKAGEDIR_WINUNITS-BASE),)
ifneq ($(wildcard $(PACKAGEDIR_WINUNITS-BASE)/units/$(TARGETSUFFIX)),)
UNITDIR_WINUNITS-BASE=$(PACKAGEDIR_WINUNITS-BASE)/units/$(TARGETSUFFIX)
else
UNITDIR_WINUNITS-BASE=$(PACKAGEDIR_WINUNITS-BASE)
endif
ifdef CHECKDEPEND
$(PACKAGEDIR_WINUNITS-BASE)/$(FPCMADE):
$(MAKE) -C $(PACKAGEDIR_WINUNITS-BASE) $(FPCMADE)
override ALLDEPENDENCIES+=$(PACKAGEDIR_WINUNITS-BASE)/$(FPCMADE)
endif
else
PACKAGEDIR_WINUNITS-BASE=
UNITDIR_WINUNITS-BASE:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /winunits-base/Package.fpc,$(UNITSDIR)))))
ifneq ($(UNITDIR_WINUNITS-BASE),)
UNITDIR_WINUNITS-BASE:=$(firstword $(UNITDIR_WINUNITS-BASE))
else
UNITDIR_WINUNITS-BASE=
endif
endif
ifdef UNITDIR_WINUNITS-BASE
override COMPILER_UNITDIR+=$(UNITDIR_WINUNITS-BASE)
endif
endif
ifdef REQUIRE_PACKAGES_WINUNITS-JEDI
PACKAGEDIR_WINUNITS-JEDI:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /winunits-jedi/Makefile.fpc,$(PACKAGESDIR))))))
ifneq ($(PACKAGEDIR_WINUNITS-JEDI),)
ifneq ($(wildcard $(PACKAGEDIR_WINUNITS-JEDI)/units/$(TARGETSUFFIX)),)
UNITDIR_WINUNITS-JEDI=$(PACKAGEDIR_WINUNITS-JEDI)/units/$(TARGETSUFFIX)
else
UNITDIR_WINUNITS-JEDI=$(PACKAGEDIR_WINUNITS-JEDI)
endif
ifdef CHECKDEPEND
$(PACKAGEDIR_WINUNITS-JEDI)/$(FPCMADE):
$(MAKE) -C $(PACKAGEDIR_WINUNITS-JEDI) $(FPCMADE)
override ALLDEPENDENCIES+=$(PACKAGEDIR_WINUNITS-JEDI)/$(FPCMADE)
endif
else
PACKAGEDIR_WINUNITS-JEDI=
UNITDIR_WINUNITS-JEDI:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /winunits-jedi/Package.fpc,$(UNITSDIR)))))
ifneq ($(UNITDIR_WINUNITS-JEDI),)
UNITDIR_WINUNITS-JEDI:=$(firstword $(UNITDIR_WINUNITS-JEDI))
else
UNITDIR_WINUNITS-JEDI=
endif
endif
ifdef UNITDIR_WINUNITS-JEDI
override COMPILER_UNITDIR+=$(UNITDIR_WINUNITS-JEDI)
endif
endif
ifndef NOCPUDEF
override FPCOPTDEF=$(ARCH)
endif

View File

@ -21,7 +21,7 @@ fpcpackage=y
options=-Sg
[require]
packages=fv gdbint regexpr
packages=fv gdbint regexpr chm
packages_go32v2=graph
libc=y

186
ide/wchmhwrap.pas Normal file
View File

@ -0,0 +1,186 @@
{
This file is part of the Free Pascal Integrated Development Environment
Copyright (c) 2008 by Marco van de Voort
Wrapper for CHM reading to avoid having to import Delphi units into whtmlhlp,
which can cause all kinds of namespace conflicts.
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.
**********************************************************************}
unit wchmhwrap;
interface
{$Mode Delphi}
Uses wutils,whelp,whtml,SysUtils,ChmReader,ChmSiteMap,Classes;
Type
// TopicLinks: PTopicLinkCollection;IndexEntries : PUnsortedIndexEntryCollection;
TChmWrapper = Class
private
ffs : Classes.TFileStream;
fchmr : TChmReader;
findex: TChmSiteMap;
ftopic: TChmSiteMap;
floaded : boolean;
public
constructor Create(name:String);
function LoadIndex(id:integer;TopicLinks: PTopicLinkCollection;IndexEntries : PUnsortedIndexEntryCollection;helpfacility:PHelpFacility):boolean;
function GetTopic(name:string):PMemoryTextFile;
destructor Destroy;override;
end;
function combinepaths(relpath,basepath:String):String;
implementation
function combinepaths(relpath,basepath:String):String;
begin
{$ifdef combinedebug}
debugmessage({$i %file%},'combine in "'+relpath+'" and "'+basepath+'"'+{$i %line%},1,1);
{$endif}
if relpath='' then exit;
if relpath[length(relpath)]<>'/' Then
basepath:=extractfiledir(basepath);
while (length(relpath)>0) and (copy(relpath,1,3)='../') do
begin
basepath:=extractfiledir(basepath);
delete(relpath,1,3);
end;
{$ifdef combinedebug}
debugmessage({$i %file%},'combine out "'+relpath+'" and "'+basepath+'"'+{$i %line%},1,1);
{$endif}
result:=basepath+relpath;
end;
Constructor TChmWrapper.Create(name:string);
begin
ffs:=Classes.TFileStream.create(name,fmOpenRead);
fchmr:=TChmReader.Create(ffs,True);
findex:=nil;
if not fchmr.isvalidfile then
begin
freeandnil(fchmr);
freeandnil(ffs);
exit;
end;
{$ifdef wdebug}
debugmessage({$i %file%},'TCHMWrapper: before sitemap creation '+{$i %line%},1,1);
{$endif}
findex:=TChmSiteMap.create(stindex);
ftopic:=TChmSiteMap.create(sttoc);
{$ifdef wdebug}
debugmessage({$i %file%},'TCHMWrapper: after sitemap creation '+{$i %line%}+inttostr(ptrint(findex)),1,1);
{$endif}
floaded:=false;
end;
function TChmWrapper.LoadIndex(id:integer;TopicLinks: PTopicLinkCollection;IndexEntries : PUnsortedIndexEntryCollection;helpfacility:PHelpFacility):boolean;
function FormatAlias(Alias: string): string;
begin
if Assigned(HelpFacility) then
if length(Alias)>HelpFacility^.IndexTabSize-4 then
Alias:=Trim(copy(Alias,1,HelpFacility^.IndexTabSize-4-2))+'..';
// if (length(alias)>0) and (alias[1]<>'/') then Alias:='/'+alias;
FormatAlias:=Alias;
end;
var
m : Classes.TMemoryStream;
i,j : integer;
item : TChmSiteMapItem;
tli: integer;
begin
result:=false;
if not assigned (fchmr) then exit;
if floaded then exit;
// m:=Classes.TMemorystream.create;
m:=fchmr.getobject(fchmr.indexfile);
try
{$ifdef wdebug}
debugmessage({$i %file%},'TCHMWrapper: before loadfromstream '+{$i %line%},1,1);
debugmessage({$i %file%},'TCHMWrapper: stream size loaded'+inttostr(m.size),1,1);
{$endif}
findex.loadfromStream(m);
finally
freeandnil(m);
end;
{$ifdef wdebug}
debugmessage({$i %file%},'TCHMWrapper: loadindex after final '+{$i %line%},1,1);
{$endif}
tli:=TopicLinks^.AddItem(fchmr.defaultpage);
TLI:=EncodeHTMLCtx(ID,TLI+1);
IndexEntries^.Insert(NewIndexEntry( FormatAlias('Table of contents'),ID,TLI));
for i:=0 to findex.items.count-1 do
begin
item:=findex.items.item[i];
tli:=TopicLinks^.AddItem('/'+item.local);
TLI:=EncodeHTMLCtx(ID,TLI+1);
IndexEntries^.Insert(NewIndexEntry( FormatAlias(item.text),ID,TLI));
end;
{$ifdef wdebug}
debugmessage({$i %file%},'TCHMWrapper: endloadindex '+{$i %line%},1,1);
{$endif}
floaded:=true;
result:=true;
end;
function TChmWrapper.GetTopic(name:string):PMemoryTextFile;
var
m : Classes.TMemorystream;
linedata:Classes.TStringList;
i : integer;
begin
result:=nil;
if not assigned(fchmr) or (name='') then exit;
If name[1]<>'/' Then
name:='/'+name;
linedata:=Classes.TStringList.create;
try
{$ifdef wdebug}
debugmessage({$i %file%},'TCHMWrapper: Getting file '+name+' '+{$i %line%},1,1);
{$endif}
// if uppercase(name)='TABLE OF CONTENTS' Then
// m:=fchmr.getobject(fchmr.tocfile)
// else
m:=fchmr.getobject(name);
if not assigned(m) then exit;
linedata.loadfromstream(m);
result:=new(PMemoryTextFile,Init);
for i:=0 to linedata.count-1 do
result.addline(linedata[i]);
finally
m.free;
linedata.free;
end;
end;
destructor TChmWrapper.Destroy;
begin
freeandnil(ftopic);
freeandnil(findex);
freeandnil(fchmr);
end;
// m:=r.getobject(r.indexfile);
// siteindex.loadfromStream(m);
end.

View File

@ -115,6 +115,18 @@ type
procedure DocHorizontalRuler; virtual;
end;
Type
PTopicLinkCollection = ^TTopicLinkCollection;
TTopicLinkCollection = object(TStringCollection)
procedure Insert(Item: Pointer); virtual;
function At(Index: sw_Integer): PString;
function AddItem(Item: string): integer;
end;
function EncodeHTMLCtx(FileID: integer; LinkNo: word): longint;
procedure DecodeHTMLCtx(Ctx: longint; var FileID: word; var LinkNo: word);
implementation
uses
@ -859,6 +871,47 @@ procedure THTMLParser.DocHorizontalRuler;
begin
end;
function EncodeHTMLCtx(FileID: integer; LinkNo: word): longint;
var Ctx: longint;
begin
Ctx:=(longint(FileID) shl 16)+LinkNo;
EncodeHTMLCtx:=Ctx;
end;
procedure DecodeHTMLCtx(Ctx: longint; var FileID: word; var LinkNo: word);
begin
if (Ctx shr 16)=0 then
begin
FileID:=$ffff; LinkNo:=0;
end
else
begin
FileID:=Ctx shr 16; LinkNo:=Ctx and $ffff;
end;
end;
procedure TTopicLinkCollection.Insert(Item: Pointer);
begin
AtInsert(Count,Item);
end;
function TTopicLinkCollection.At(Index: sw_Integer): PString;
begin
At:=inherited At(Index);
end;
function TTopicLinkCollection.AddItem(Item: string): integer;
var Idx: sw_integer;
begin
if Item='' then Idx:=-1 else
if Search(@Item,Idx)=false then
begin
AtInsert(Count,NewStr(Item));
Idx:=Count-1;
end;
AddItem:=Idx;
end;
END.

View File

@ -14,11 +14,12 @@ unit WHTMLHlp;
interface
uses Objects,WHTML,WAnsi,WHelp;
uses Objects,WHTML,WAnsi,WHelp,WChmHWrap;
const
extHTML = '.htm';
extHTMLIndex = '.htx';
extCHM = '.chm';
ListIndent = 2;
DefIndent = 4;
@ -28,13 +29,6 @@ const
type
THTMLSection = (hsNone,hsHeading1,hsHeading2,hsHeading3,hsHeading4,hsHeading5,hsHeading6);
PTopicLinkCollection = ^TTopicLinkCollection;
TTopicLinkCollection = object(TStringCollection)
procedure Insert(Item: Pointer); virtual;
function At(Index: sw_Integer): PString;
function AddItem(Item: string): integer;
end;
TParagraphAlign = (paLeft,paCenter,paRight);
PTableElement = ^TTableElement;
@ -116,6 +110,7 @@ type
procedure DocTableHeaderItem(Entered: boolean); virtual;
procedure DocTableItem(Entered: boolean); virtual;
procedure DocHorizontalRuler; virtual;
function CanonicalizeURL(const Base,Relative:String):string; virtual;
public
function GetSectionColor(Section: THTMLSection; var Color: byte): boolean; virtual;
private
@ -148,24 +143,28 @@ type
procedure AddCharAt(C: char;AtPtr : sw_word);
function AddTextAt(const S: string;AtPtr : sw_word) : sw_word;
function ComputeTextLength(TStart,TEnd : sw_word) : sw_word;
end;
PCHMTopicRenderer = ^TCHMTopicRenderer;
TCHMTopicRenderer = object(THTMLTopicRenderer)
function CanonicalizeURL(const Base,Relative:String):string; virtual;
end;
PCustomHTMLHelpFile = ^TCustomHTMLHelpFile;
TCustomHTMLHelpFile = object(THelpFile)
constructor Init(AID: word);
destructor Done; virtual;
public
Renderer: PHTMLTopicRenderer;
function GetTopicInfo(T: PTopic) : string; virtual;
function SearchTopic(HelpCtx: THelpCtx): PTopic; virtual;
function ReadTopic(T: PTopic): boolean; virtual;
private
Renderer: PHTMLTopicRenderer;
DefaultFileName: string;
CurFileName: string;
TopicLinks: PTopicLinkCollection;
end;
PHTMLHelpFile = ^THTMLHelpFile;
THTMLHelpFile = object(TCustomHTMLHelpFile)
constructor Init(AFileName: string; AID: word; ATOCEntry: string);
@ -175,6 +174,19 @@ type
TOCEntry: string;
end;
PCHMHelpFile = ^TCHMHelpFile;
TCHMHelpFile = object(TCustomHTMLHelpFile)
constructor Init(AFileName: string; AID: word);
destructor Done; virtual;
public
function LoadIndex: boolean; virtual;
function ReadTopic(T: PTopic): boolean; virtual;
function GetTopicInfo(T: PTopic) : string; virtual;
function SearchTopic(HelpCtx: THelpCtx): PTopic; virtual;
private
Chmw: TCHMWrapper;
end;
PHTMLIndexHelpFile = ^THTMLIndexHelpFile;
THTMLIndexHelpFile = object(TCustomHTMLHelpFile)
constructor Init(AFileName: string; AID: word);
@ -527,25 +539,6 @@ begin
DefHTMLGetSectionColor:=false;
end;
function EncodeHTMLCtx(FileID: integer; LinkNo: word): longint;
var Ctx: longint;
begin
Ctx:=(longint(FileID) shl 16)+LinkNo;
EncodeHTMLCtx:=Ctx;
end;
procedure DecodeHTMLCtx(Ctx: longint; var FileID: word; var LinkNo: word);
begin
if (Ctx shr 16)=0 then
begin
FileID:=$ffff; LinkNo:=0;
end
else
begin
FileID:=Ctx shr 16; LinkNo:=Ctx and $ffff;
end;
end;
function CharStr(C: char; Count: byte): string;
var S: string;
begin
@ -554,27 +547,6 @@ begin
CharStr:=S;
end;
procedure TTopicLinkCollection.Insert(Item: Pointer);
begin
AtInsert(Count,Item);
end;
function TTopicLinkCollection.At(Index: sw_Integer): PString;
begin
At:=inherited At(Index);
end;
function TTopicLinkCollection.AddItem(Item: string): integer;
var Idx: sw_integer;
begin
if Item='' then Idx:=-1 else
if Search(@Item,Idx)=false then
begin
AtInsert(Count,NewStr(Item));
Idx:=Count-1;
end;
AddItem:=Idx;
end;
function THTMLTopicRenderer.DocAddTextChar(C: char): boolean;
var Added: boolean;
@ -662,9 +634,9 @@ begin
if Name<>'' then
begin
Topic^.NamedMarks^.InsertStr(Name);
{$ifdef DEBUG}
{$IFDEF WDEBUG}
DebugMessage('',' Adding Name "'+Name+'"',1,1);
{$endif DEBUG}
{$endif WDEBUG}
AddChar(hscNamedMark);
end;
if (HRef<>'')then
@ -674,13 +646,17 @@ begin
begin
InAnchor:=true;
AddChar(hscLink);
{$IFDEF WDEBUG}
DebugMessage('',' Adding Link1 "'+HRef+'"'+' "'+url+'"',1,1);
{$endif WDEBUG}
if pos('#',HRef)=1 then
Href:=NameAndExtOf(GetFilename)+Href;
HRef:=CompleteURL(URL,HRef);
HRef:=canonicalizeURL(URL,HRef);
LinkIndexes[LinkPtr]:=TopicLinks^.AddItem(HRef);
{$ifdef DEBUG}
DebugMessage('',' Adding Link "'+HRef+'"',1,1);
{$endif DEBUG}
{$IFDEF WDEBUG}
DebugMessage('',' Adding Link2 "'+HRef+'"',1,1);
{$endif WDEBUG}
Inc(LinkPtr);
end;
end;
@ -694,10 +670,10 @@ end;
procedure THTMLTopicRenderer.DocUnknownTag;
begin
{$ifdef DEBUG}
{$IFDEF WDEBUG}
DebugMessage('',' Unknown tag "'+TagName+'" params "'+
TagParams+'"',1,1);
{$endif DEBUG}
{$endif WDEBUG}
end;
procedure DecodeAlign(Align: string; var PAlign: TParagraphAlign);
@ -740,6 +716,12 @@ begin
end;
end;
Function THTMLTopicRenderer.CanonicalizeURL(const Base,Relative:String):string;
// uses info from filesystem (curdir) -> overriden for CHM.
begin
CanonicalizeURL:=CompleteURL(Base,relative);
end;
procedure THTMLTopicRenderer.DocParagraph(Entered: boolean);
var Align: string;
begin
@ -776,20 +758,20 @@ var
begin
if pos('tex4ht:',Comment)=0 then
exit;
{$ifdef DEBUG}
{$IFDEF WDEBUG}
DebugMessage(GetFileName,'tex4ht comment "'
+Comment+'"',Line,1);
{$endif DEBUG}
{$endif WDEBUG}
if SuppressOutput then
begin
if (pos(SuppressUntil,Comment)=0) then
exit
else
begin
{$ifdef DEBUG}
{$IFDEF WDEBUG}
DebugMessage(GetFileName,' Found '+SuppressUntil+'comment "'
+Comment+'" SuppressOuput reset to false',Line,1);
{$endif DEBUG}
{$endif WDEBUG}
SuppressOutput:=false;
SuppressUntil:='';
end;
@ -797,20 +779,20 @@ begin
if (pos('tex4ht:graphics ',Comment)>0) and
LastAnsiLoadFailed then
begin
{$ifdef DEBUG}
{$IFDEF WDEBUG}
DebugMessage(GetFileName,' Using tex4ht comment "'
+Comment+'"',Line,1);
{$endif DEBUG}
{$endif WDEBUG}
{ Try again with this info }
TagParams:=Comment;
DocImage;
end;
if (pos('tex4ht:syntaxdiagram ',Comment)>0) then
begin
{$ifdef DEBUG}
{$IFDEF WDEBUG}
DebugMessage(GetFileName,' Using tex4ht:syntaxdiagram comment "'
+Comment+'"',Line,1);
{$endif DEBUG}
{$endif WDEBUG}
{ Try again with this info }
TagParams:=Comment;
DocImage;
@ -822,10 +804,10 @@ begin
end;
if (pos('tex4ht:mysyntdiag ',Comment)>0) then
begin
{$ifdef DEBUG}
{$IFDEF WDEBUG}
DebugMessage(GetFileName,' Using tex4ht:mysyntdiag comment "'
+Comment+'"',Line,1);
{$endif DEBUG}
{$endif WDEBUG}
{ Try again with this info }
TagParams:=Comment;
DocGetTagParam('SRC',src);
@ -849,16 +831,16 @@ var Name,Src,Alt,SrcLine: string;
begin
if SuppressOutput then
exit;
{$ifdef DEBUG}
{$IFDEF WDEBUG}
if not DocGetTagParam('NAME',Name) then
Name:='<No name>';
DebugMessage(GetFileName,' Image "'+Name+'"',Line,1);
{$endif DEBUG}
{$endif WDEBUG}
if DocGetTagParam('SRC',src) then
begin
{$ifdef DEBUG}
{$IFDEF WDEBUG}
DebugMessage(GetFileName,' Image source tag "'+Src+'"',Line,1);
{$endif DEBUG}
{$endif WDEBUG}
if src<>'' then
begin
src:=CompleteURL(URL,src);
@ -866,24 +848,24 @@ begin
Try to see if a file with same name and extension .git
exists PM }
src:=DirAndNameOf(src)+'.ans';
{$ifdef DEBUG}
{$IFDEF WDEBUG}
DebugMessage(GetFileName,' Trying "'+Src+'"',Line,1);
{$endif DEBUG}
{$endif WDEBUG}
if not ExistsFile(src) then
begin
DocGetTagParam('SRC',src);
src:=DirAndNameOf(src)+'.ans';
src:=CompleteURL(DirOf(URL)+'../',src);
{$ifdef DEBUG}
{$IFDEF WDEBUG}
DebugMessage(GetFileName,' Trying "'+Src+'"',Line,1);
{$endif DEBUG}
{$endif wDEBUG}
end;
if not ExistsFile(src) then
begin
LastAnsiLoadFailed:=true;
{$ifdef DEBUG}
{$IFDEF WDEBUG}
DebugMessage(GetFileName,' "'+Src+'" not found',Line,1);
{$endif DEBUG}
{$endif WDEBUG}
end
else
begin
@ -908,9 +890,9 @@ begin
if not ExistsFile(src) then
begin
LastAnsiLoadFailed:=true;
{$ifdef DEBUG}
{$IFDEF WDEBUG}
DebugMessage(GetFileName,' "'+Src+'" not found',Line,1);
{$endif DEBUG}
{$endif WDEBUG}
end
else
begin
@ -1336,6 +1318,11 @@ begin
BuildTopic:=OK;
end;
Function TCHMTopicRenderer.CanonicalizeURL(const Base,Relative:String):string;
begin
CanonicalizeUrl:=combinepaths(relative,base);
end;
constructor TCustomHTMLHelpFile.Init(AID: word);
begin
inherited Init(AID);
@ -1388,10 +1375,14 @@ begin
else
begin
Link:=TopicLinks^.At((T^.HelpCtx and $ffff)-1)^;
{$IFDEF WDEBUG}
DebugMessage(Link,' looking before for ',1,1);
{$endif WDEBUG}
Link:=FormatPath(Link);
{$ifdef DEBUG_WHTMLHLP}
DebugMessage(Link,' looking for',1,1);
{$endif DEBUG_WHTMLHLP}
{$IFDEF WDEBUG}
DebugMessage(Link,' looking after for ',1,1);
{$endif WDEBUG}
P:=Pos('#',Link);
if P>0 then
begin
@ -1425,10 +1416,15 @@ begin
else
begin
Link:=TopicLinks^.At((T^.HelpCtx and $ffff)-1)^;
{$IFDEF WDEBUG}
DebugMessage(Link,' looking before for ',1,1);
{$endif WDEBUG}
Link:=FormatPath(Link);
{$ifdef DEBUG}
DebugMessage(Link,' looking for',1,1);
{$endif DEBUG}
{$IFDEF WDEBUG}
DebugMessage(Link,' looking after for ',1,1);
{$endif WDEBUG}
P:=Pos('#',Link);
if P>0 then
begin
@ -1450,18 +1446,18 @@ begin
end;
if (HTMLFile=nil) then
begin
{$ifdef DEBUG}
{$IFDEF WDEBUG}
DebugMessage(Link,' filename not known :(',1,1);
{$endif DEBUG}
end;
if (p>1) and (HTMLFile=nil) then
begin
{$ifdef DEBUG}
{$IFDEF WDEBUG}
if p>0 then
DebugMessage(Name,Link+'#'+Bookmark+' not found',1,1)
else
DebugMessage(Name,Link+' not found',1,1);
{$endif DEBUG}
{$endif WDEBUG}
New(HTMLFile, Init);
HTMLFile^.AddLine('<HEAD><TITLE>'+msg_pagenotavailable+'</TITLE></HEAD>');
HTMLFile^.AddLine(
@ -1474,12 +1470,12 @@ begin
CurFileName:=Name
else
begin
{$ifdef DEBUG}
{$IFDEF WDEBUG}
if p>0 then
DebugMessage(Name,Link+'#'+Bookmark+' not found',1,1)
else
DebugMessage(Name,Link+' not found',1,1);
{$endif DEBUG}
{$endif WDEBUG}
end;
if HTMLFile<>nil then Dispose(HTMLFile, Done);
if BookMark='' then
@ -1487,10 +1483,10 @@ begin
else
begin
P:=T^.GetNamedMarkIndex(BookMark);
{$ifdef DEBUG}
{$IFDEF WDEBUG}
if p=-1 then
DebugMessage(Name,Link+'#'+Bookmark+' bookmark not found',1,1);
{$endif DEBUG}
{$endif WDEBUG}
T^.StartNamedMark:=P+1;
end;
end;
@ -1576,6 +1572,194 @@ begin
LoadIndex:=OK;
end;
constructor TChmHelpFile.Init(AFileName: string; AID: word);
begin
if inherited Init(AID)=false then Fail;
renderer^.done;
renderer:=New(PCHMTopicRenderer, Init);
DefaultFileName:=AFileName;
if (DefaultFileName='') or not ExistsFile(DefaultFilename) then
begin
Done;
Fail;
end
else
chmw:=TCHMWrapper.Create(DefaultFileName);
end;
function TChmHelpFile.LoadIndex: boolean;
begin
loadindex:=false;
if assigned(chmw) then
loadindex:=chmw.loadindex(id,TopicLinks,IndexEntries,helpfacility);
end;
function TChmHelpFile.SearchTopic(HelpCtx: THelpCtx): PTopic;
function MatchCtx(P: PTopic): boolean;
begin
MatchCtx:=P^.HelpCtx=HelpCtx;
end;
var FileID,LinkNo: word;
P: PTopic;
FName: string;
begin
DecodeHTMLCtx(HelpCtx,FileID,LinkNo);
if (HelpCtx<>0) and (FileID<>ID) then P:=nil else
if (FileID=ID) and (LinkNo>TopicLinks^.Count) then P:=nil else
begin
P:=Topics^.FirstThat(@MatchCtx);
if P=nil then
begin
if LinkNo=0 then
FName:=DefaultFileName
else
FName:=TopicLinks^.At(LinkNo-1)^;
P:=NewTopic(ID,HelpCtx,0,FName,nil,0);
Topics^.Insert(P);
end;
end;
SearchTopic:=P;
end;
function TChmHelpFile.GetTopicInfo(T: PTopic) : string;
var OK: boolean;
Name: string;
Link,Bookmark: string;
P: sw_integer;
begin
Bookmark:='';
OK:=T<>nil;
if OK then
begin
if T^.HelpCtx=0 then
begin
Name:=DefaultFileName;
P:=0;
end
else
begin
Link:=TopicLinks^.At((T^.HelpCtx and $ffff)-1)^;
Link:=FormatPath(Link);
{$IFDEF WDEBUG}
DebugMessage(Link,' looking for',1,1);
{$endif WDEBUG}
P:=Pos('#',Link);
if P>0 then
begin
Bookmark:=copy(Link,P+1,length(Link));
Link:=copy(Link,1,P-1);
end;
{ if CurFileName='' then Name:=Link else
Name:=CompletePath(CurFileName,Link);}
Name:=Link;
end;
end;
GetTopicInfo:=Name+'#'+BookMark;
end;
function TChmHelpFile.ReadTopic(T: PTopic): boolean;
var OK: boolean;
HTMLFile: PMemoryTextFile;
Name: string;
Link,Bookmark: string;
P: sw_integer;
begin
Bookmark:='';
OK:=T<>nil;
if OK then
begin
if T^.HelpCtx=0 then
begin
Name:=DefaultFileName;
P:=0;
end
else
begin
Link:=TopicLinks^.At((T^.HelpCtx and $ffff)-1)^;
{$IFDEF WDEBUG}
DebugMessage(Link,' looking for',1,1);
{$endif WDEBUG}
Link:=FormatPath(Link);
{$IFDEF WDEBUG}
DebugMessage(Link,' looking for',1,1);
{$endif WDEBUG}
P:=Pos('#',Link);
if P>0 then
begin
Bookmark:=copy(Link,P+1,length(Link));
Link:=copy(Link,1,P-1);
end;
{ if CurFileName='' then Name:=Link else
Name:=CompletePath(CurFileName,Link);}
Name:=Link;
end;
HTMLFile:=nil;
if Name<>'' then
HTMLFile:=chmw.gettopic(name);
if (HTMLFile=nil) and (CurFileName<>'') then
begin
Name:=CurFileName;
HTMLFile:=chmw.gettopic(name);
end;
if (HTMLFile=nil) then
begin
{$IFDEF WDEBUG}
DebugMessage(Link,' filename not known :(',1,1);
{$endif WDEBUG}
end;
if (p>1) and (HTMLFile=nil) then
begin
{$IFDEF WDEBUG}
if p>0 then
DebugMessage(Name,Link+'#'+Bookmark+' not found',1,1)
else
DebugMessage(Name,Link+' not found',1,1);
{$endif WDEBUG}
New(HTMLFile, Init);
HTMLFile^.AddLine('<HEAD><TITLE>'+msg_pagenotavailable+'</TITLE></HEAD>');
HTMLFile^.AddLine(
'<BODY>'+
FormatStrStr(msg_cantaccessurl,Name)+'<br><br>'+
'</BODY>');
end;
OK:=Renderer^.BuildTopic(T,Name,HTMLFile,TopicLinks);
if OK then
CurFileName:=Name
else
begin
{$IFDEF WDEBUG}
if p>0 then
DebugMessage(Name,Link+'#'+Bookmark+' not found',1,1)
else
DebugMessage(Name,Link+' not found',1,1);
{$endif WDEBUG}
end;
if HTMLFile<>nil then Dispose(HTMLFile, Done);
if BookMark='' then
T^.StartNamedMark:=0
else
begin
P:=T^.GetNamedMarkIndex(BookMark);
{$IFDEF WDEBUG}
if p=-1 then
DebugMessage(Name,Link+'#'+Bookmark+' bookmark not found',1,1);
{$endif WDEBUG}
T^.StartNamedMark:=P+1;
end;
end;
ReadTopic:=OK;
end;
destructor TChmHelpFile.done;
begin
if assigned(chmw) then
chmw.free;
inherited Done;
end;
function CreateProcHTML(const FileName,Param: string;Index : longint): PHelpFile;
var H: PHelpFile;
begin
@ -1585,6 +1769,15 @@ begin
CreateProcHTML:=H;
end;
function CreateProcCHM(const FileName,Param: string;Index : longint): PHelpFile;
var H: PHelpFile;
begin
H:=nil;
if CompareText(copy(ExtOf(FileName),1,length(extCHM)),extCHM)=0 then
H:=New(PCHMHelpFile, Init(FileName,Index));
CreateProcCHM:=H;
end;
function CreateProcHTMLIndex(const FileName,Param: string;Index : longint): PHelpFile;
var H: PHelpFile;
begin
@ -1598,6 +1791,7 @@ procedure RegisterHelpType;
begin
RegisterHelpFileType({$ifdef FPC}@{$endif}CreateProcHTML);
RegisterHelpFileType({$ifdef FPC}@{$endif}CreateProcHTMLIndex);
RegisterHelpFileType({$ifdef FPC}@{$endif}CreateProcCHM);
end;