* Added ability to create class chart

git-svn-id: trunk@23193 -
This commit is contained in:
michael 2012-12-20 15:00:10 +00:00
parent c9e838e2f9
commit 2c26d53f9b
14 changed files with 702 additions and 250 deletions

3
.gitattributes vendored
View File

@ -14018,6 +14018,7 @@ utils/fpdoc/fpde/xpms.pp svneol=native#text/plain
utils/fpdoc/fpdoc.css -text
utils/fpdoc/fpdoc.lpi svneol=native#text/plain
utils/fpdoc/fpdoc.pp svneol=native#text/plain
utils/fpdoc/fpdocclasstree.pp svneol=native#text/plain
utils/fpdoc/fpdocproj.pas svneol=native#text/plain
utils/fpdoc/fpdocxmlopts.pas svneol=native#text/plain
utils/fpdoc/fpmake.pp svneol=native#text/plain
@ -14032,9 +14033,11 @@ utils/fpdoc/intl/makeskel.de.po svneol=native#text/plain
utils/fpdoc/makeskel.lpi svneol=native#text/plain
utils/fpdoc/makeskel.pp svneol=native#text/plain
utils/fpdoc/mgrfpdocproj.pp svneol=native#text/plain
utils/fpdoc/minusimage.inc svneol=native#text/plain
utils/fpdoc/mkfpdoc.pp svneol=native#text/plain
utils/fpdoc/mkfpdocproj.lpi svneol=native#text/plain
utils/fpdoc/mkfpdocproj.pp svneol=native#text/plain
utils/fpdoc/plusimage.inc svneol=native#text/plain
utils/fpdoc/sample-project.xml svneol=native#text/plain
utils/fpdoc/sh_pas.pp svneol=native#text/plain
utils/fpdoc/testunit.pp svneol=native#text/plain

View File

@ -1,5 +1,5 @@
#
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2012/09/27]
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2012/12/01]
#
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 i386-nativent i386-iphonesim 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 powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd 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 powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android
@ -3500,6 +3500,96 @@ endif
fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS))
fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
fpc_makefiles: fpc_makefile fpc_makefile_dirs
ifdef TARGET_DIRS_TARGET_DIRS
TARGET_DIRS_all:
$(MAKE) -C TARGET_DIRS all
TARGET_DIRS_debug:
$(MAKE) -C TARGET_DIRS debug
TARGET_DIRS_smart:
$(MAKE) -C TARGET_DIRS smart
TARGET_DIRS_release:
$(MAKE) -C TARGET_DIRS release
TARGET_DIRS_units:
$(MAKE) -C TARGET_DIRS units
TARGET_DIRS_examples:
$(MAKE) -C TARGET_DIRS examples
TARGET_DIRS_shared:
$(MAKE) -C TARGET_DIRS shared
TARGET_DIRS_install:
$(MAKE) -C TARGET_DIRS install
TARGET_DIRS_sourceinstall:
$(MAKE) -C TARGET_DIRS sourceinstall
TARGET_DIRS_exampleinstall:
$(MAKE) -C TARGET_DIRS exampleinstall
TARGET_DIRS_distinstall:
$(MAKE) -C TARGET_DIRS distinstall
TARGET_DIRS_zipinstall:
$(MAKE) -C TARGET_DIRS zipinstall
TARGET_DIRS_zipsourceinstall:
$(MAKE) -C TARGET_DIRS zipsourceinstall
TARGET_DIRS_zipexampleinstall:
$(MAKE) -C TARGET_DIRS zipexampleinstall
TARGET_DIRS_zipdistinstall:
$(MAKE) -C TARGET_DIRS zipdistinstall
TARGET_DIRS_clean:
$(MAKE) -C TARGET_DIRS clean
TARGET_DIRS_distclean:
$(MAKE) -C TARGET_DIRS distclean
TARGET_DIRS_cleanall:
$(MAKE) -C TARGET_DIRS cleanall
TARGET_DIRS_info:
$(MAKE) -C TARGET_DIRS info
TARGET_DIRS_makefiles:
$(MAKE) -C TARGET_DIRS makefiles
TARGET_DIRS:
$(MAKE) -C TARGET_DIRS all
.PHONY: TARGET_DIRS_all TARGET_DIRS_debug TARGET_DIRS_smart TARGET_DIRS_release TARGET_DIRS_units TARGET_DIRS_examples TARGET_DIRS_shared TARGET_DIRS_install TARGET_DIRS_sourceinstall TARGET_DIRS_exampleinstall TARGET_DIRS_distinstall TARGET_DIRS_zipinstall TARGET_DIRS_zipsourceinstall TARGET_DIRS_zipexampleinstall TARGET_DIRS_zipdistinstall TARGET_DIRS_clean TARGET_DIRS_distclean TARGET_DIRS_cleanall TARGET_DIRS_info TARGET_DIRS_makefiles TARGET_DIRS
endif
ifdef TARGET_EXAMPLEDIRS_TARGET_EXAMPLEDIRS
TARGET_EXAMPLEDIRS_all:
$(MAKE) -C TARGET_EXAMPLEDIRS all
TARGET_EXAMPLEDIRS_debug:
$(MAKE) -C TARGET_EXAMPLEDIRS debug
TARGET_EXAMPLEDIRS_smart:
$(MAKE) -C TARGET_EXAMPLEDIRS smart
TARGET_EXAMPLEDIRS_release:
$(MAKE) -C TARGET_EXAMPLEDIRS release
TARGET_EXAMPLEDIRS_units:
$(MAKE) -C TARGET_EXAMPLEDIRS units
TARGET_EXAMPLEDIRS_examples:
$(MAKE) -C TARGET_EXAMPLEDIRS examples
TARGET_EXAMPLEDIRS_shared:
$(MAKE) -C TARGET_EXAMPLEDIRS shared
TARGET_EXAMPLEDIRS_install:
$(MAKE) -C TARGET_EXAMPLEDIRS install
TARGET_EXAMPLEDIRS_sourceinstall:
$(MAKE) -C TARGET_EXAMPLEDIRS sourceinstall
TARGET_EXAMPLEDIRS_exampleinstall:
$(MAKE) -C TARGET_EXAMPLEDIRS exampleinstall
TARGET_EXAMPLEDIRS_distinstall:
$(MAKE) -C TARGET_EXAMPLEDIRS distinstall
TARGET_EXAMPLEDIRS_zipinstall:
$(MAKE) -C TARGET_EXAMPLEDIRS zipinstall
TARGET_EXAMPLEDIRS_zipsourceinstall:
$(MAKE) -C TARGET_EXAMPLEDIRS zipsourceinstall
TARGET_EXAMPLEDIRS_zipexampleinstall:
$(MAKE) -C TARGET_EXAMPLEDIRS zipexampleinstall
TARGET_EXAMPLEDIRS_zipdistinstall:
$(MAKE) -C TARGET_EXAMPLEDIRS zipdistinstall
TARGET_EXAMPLEDIRS_clean:
$(MAKE) -C TARGET_EXAMPLEDIRS clean
TARGET_EXAMPLEDIRS_distclean:
$(MAKE) -C TARGET_EXAMPLEDIRS distclean
TARGET_EXAMPLEDIRS_cleanall:
$(MAKE) -C TARGET_EXAMPLEDIRS cleanall
TARGET_EXAMPLEDIRS_info:
$(MAKE) -C TARGET_EXAMPLEDIRS info
TARGET_EXAMPLEDIRS_makefiles:
$(MAKE) -C TARGET_EXAMPLEDIRS makefiles
TARGET_EXAMPLEDIRS:
$(MAKE) -C TARGET_EXAMPLEDIRS all
.PHONY: TARGET_EXAMPLEDIRS_all TARGET_EXAMPLEDIRS_debug TARGET_EXAMPLEDIRS_smart TARGET_EXAMPLEDIRS_release TARGET_EXAMPLEDIRS_units TARGET_EXAMPLEDIRS_examples TARGET_EXAMPLEDIRS_shared TARGET_EXAMPLEDIRS_install TARGET_EXAMPLEDIRS_sourceinstall TARGET_EXAMPLEDIRS_exampleinstall TARGET_EXAMPLEDIRS_distinstall TARGET_EXAMPLEDIRS_zipinstall TARGET_EXAMPLEDIRS_zipsourceinstall TARGET_EXAMPLEDIRS_zipexampleinstall TARGET_EXAMPLEDIRS_zipdistinstall TARGET_EXAMPLEDIRS_clean TARGET_EXAMPLEDIRS_distclean TARGET_EXAMPLEDIRS_cleanall TARGET_EXAMPLEDIRS_info TARGET_EXAMPLEDIRS_makefiles TARGET_EXAMPLEDIRS
endif
all: fpc_all
debug: fpc_debug
smart: fpc_smart
@ -3526,9 +3616,13 @@ include fpcmake.loc
endif
.NOTPARALLEL:
fpdoc$(EXEEXT): fpdoc.pp dglobals.pp dwriter.pp dw_xml.pp sh_pas.pp dw_html.pp\
dw_latex.pp dwlinear.pp dw_txt.pp dw_linrtf.pp
dw_latex.pp dwlinear.pp dw_txt.pp dw_linrtf.pp css.inc plusimage.inc minusimage.inc
makeskel$(EXEEXT): makeskel.pp dglobals.pp
css.inc: fpdoc.css ../bin2obj$(EXEEXT)
../bin2obj$(EXEEXT) -o css.inc -c DefaultCSS fpdoc.css
plusimage.inc: images/plus.png ../bin2obj$(EXEEXT)
../bin2obj$(EXEEXT) -o plusimage.inc -c PlusImageData images/plus.png
minusimage.inc: images/minus.png ../bin2obj$(EXEEXT)
../bin2obj$(EXEEXT) -o minusimage.inc -c MinusImageData images/minus.png
../bin2obj$(EXEEXT):
$(MAKE) -C .. bin2obj$(EXEEXT)

View File

@ -34,12 +34,18 @@ files=dwriter.rst fpdoc.rst dglobals.rst makeskel.rst fpdocopts.rst
[rules]
.NOTPARALLEL:
fpdoc$(EXEEXT): fpdoc.pp dglobals.pp dwriter.pp dw_xml.pp sh_pas.pp dw_html.pp\
dw_latex.pp dwlinear.pp dw_txt.pp dw_linrtf.pp
dw_latex.pp dwlinear.pp dw_txt.pp dw_linrtf.pp css.inc plusimage.inc minusimage.inc
makeskel$(EXEEXT): makeskel.pp dglobals.pp
css.inc: fpdoc.css ../bin2obj$(EXEEXT)
../bin2obj$(EXEEXT) -o css.inc -c DefaultCSS fpdoc.css
plusimage.inc: images/plus.png ../bin2obj$(EXEEXT)
../bin2obj$(EXEEXT) -o plusimage.inc -c PlusImageData images/plus.png
minusimage.inc: images/minus.png ../bin2obj$(EXEEXT)
../bin2obj$(EXEEXT) -o minusimage.inc -c MinusImageData images/minus.png
../bin2obj$(EXEEXT):
$(MAKE) -C .. bin2obj$(EXEEXT)

View File

@ -1,9 +1,9 @@
Const
DefaultCSS : Array[0..2254] of byte = (
DefaultCSS : Array[0..2242] of byte = (
47, 42, 10, 32, 32, 36, 73,100, 58, 32,102,112,100,111, 99, 46, 99,
115,115, 44,118, 32, 49, 46, 49, 32, 50, 48, 48, 51, 47, 48, 51, 47,
49, 55, 32, 50, 51, 58, 48, 51, 58, 50, 48, 32,109,105, 99,104, 97,
115,116, 44,118, 32, 49, 46, 49, 32, 50, 48, 48, 53, 47, 48, 49, 47,
48, 50, 32, 49, 54, 58, 50, 50, 58, 49, 54, 32,109,105, 99,104, 97,
101,108, 32, 69,120,112, 32, 36, 10, 10, 32, 32, 68,101,102, 97,117,
108,116, 32,115,116,121,108,101, 32,115,104,101,101,116, 32,102,111,
114, 32, 70, 80, 68,111, 99, 32,114,101,102,101,114,101,110, 99,101,
@ -53,84 +53,83 @@ Const
32,105,110, 32,115,111,117,114, 99,101, 32,102,114, 97,103,109,101,
110,116,115, 32, 42, 47, 10,115,112, 97,110, 46,115,121,109, 32,123,
10, 32, 32, 99,111,108,111,114, 58, 32,100, 97,114,107,114,101,100,
10,125, 10, 10, 47, 42, 32,107,101,121,119,111,114,100,115, 32,105,
110, 32,115,111,117,114, 99,101, 32,102,114, 97,103,109,101,110,116,
115, 32, 42, 47, 10,115,112, 97,110, 46,107,119, 32,123, 10, 32, 32,
102,111,110,116, 45,119,101,105,103,104,116, 58, 32, 98,111,108,100,
10,125, 10, 10, 47, 42, 32, 99,111,109,109,101,110,116,115, 32,105,
110, 32,115,111,117,114, 99,101, 32,102,114, 97,103,109,101,110,116,
115, 32, 42, 47, 10,115,112, 97,110, 46, 99,109,116, 32,123, 10, 32,
32, 99,111,108,111,114, 58, 32,100, 97,114,107, 99,121, 97,110, 59,
10, 32, 32,102,111,110,116, 45,115,116,121,108,101, 58, 32,105,116,
97,108,105, 99, 10,125, 10, 10, 47, 42, 32,100,105,114,101, 99,116,
105,118,101,115, 32,105,110, 32,115,111,117,114, 99,101, 32,102,114,
97,103,109,101,110,116,115, 32, 42, 47, 10,115,112, 97,110, 46,100,
105,114, 32,123, 10, 32, 32, 99,111,108,111,114, 58, 32,100, 97,114,
107,121,101,108,108,111,119, 59, 10, 32, 32,102,111,110,116, 45,115,
116,121,108,101, 58, 32,105,116, 97,108,105, 99, 10,125, 10, 10, 47,
42, 32,110,117,109, 98,101,114,115, 32,105,110, 32,115,111,117,114,
10,125, 10, 47, 42, 32, 78,111, 32,119,111,114,100,119,114, 97,112,
32,105,110, 32, 99,111,100,101, 32,102,114, 97,103,109,101,110,116,
115, 32, 42, 47, 10,115,112, 97,110, 46, 99,111,100,101, 32,123, 10,
32, 32, 32,119,104,105,116,101, 45,115,112, 97, 99,101, 58, 32,110,
111,119,114, 97,112, 10,125, 10, 10, 47, 42, 32,107,101,121,119,111,
114,100,115, 32,105,110, 32,115,111,117,114, 99,101, 32,102,114, 97,
103,109,101,110,116,115, 32, 42, 47, 10,115,112, 97,110, 46,107,119,
32,123, 10, 32, 32,102,111,110,116, 45,119,101,105,103,104,116, 58,
32, 98,111,108,100, 10,125, 10, 10, 47, 42, 32, 99,111,109,109,101,
110,116,115, 32,105,110, 32,115,111,117,114, 99,101, 32,102,114, 97,
103,109,101,110,116,115, 32, 42, 47, 10,115,112, 97,110, 46, 99,109,
116, 32,123, 10, 32, 32, 99,111,108,111,114, 58, 32,100, 97,114,107,
99,121, 97,110, 59, 10, 32, 32,102,111,110,116, 45,115,116,121,108,
101, 58, 32,105,116, 97,108,105, 99, 10,125, 10, 10, 47, 42, 32,100,
105,114,101, 99,116,105,118,101,115, 32,105,110, 32,115,111,117,114,
99,101, 32,102,114, 97,103,109,101,110,116,115, 32, 42, 47, 10,115,
112, 97,110, 46,110,117,109, 32,123, 10, 32, 32, 99,111,108,111,114,
58, 32,100, 97,114,107,109, 97,103,101,110,116, 97, 10,125, 10, 10,
47, 42, 32, 99,104, 97,114, 97, 99,116,101,114,115, 32, 40, 35, 46,
46, 46, 41, 32,105,110, 32,115,111,117,114, 99,101, 32,102,114, 97,
103,109,101,110,116,115, 32, 42, 47, 10,115,112, 97,110, 46, 99,104,
114, 32,123, 10, 32, 32, 99,111,108,111,114, 58, 32,100, 97,114,107,
99,121, 97,110, 10,125, 10, 10, 47, 42, 32,115,116,114,105,110,103,
115, 32,105,110, 32,115,111,117,114, 99,101, 32,102,114, 97,103,109,
101,110,116,115, 32, 42, 47, 10,115,112, 97,110, 46,115,116,114, 32,
123, 10, 32, 32, 99,111,108,111,114, 58, 32, 98,108,117,101, 10,125,
10, 10, 47, 42, 32, 97,115,115,101,109, 98,108,101,114, 32,112, 97,
115,115, 97,103,101,115, 32,105,110, 32,115,111,117,114, 99,101, 32,
102,114, 97,103,109,101,110,116,115, 32, 42, 47, 10,115,112, 97,110,
46, 97,115,109, 32,123, 10, 32, 32, 99,111,108,111,114, 58, 32,103,
114,101,101,110, 10,125, 10, 10, 10,116,100, 46,112,114,101, 32,123,
10, 32, 32,119,104,105,116,101, 45,115,112, 97, 99,101, 58, 32,112,
114,101, 10,125, 10, 10,112, 46, 99,109,116, 32,123, 10, 32, 32, 99,
111,108,111,114, 58, 32,103,114, 97,121, 10,125, 10, 10,115,112, 97,
110, 46,119, 97,114,110,105,110,103, 32,123, 10, 32, 32, 99,111,108,
111,114, 58, 32,114,101,100, 59, 10, 32, 32,102,111,110,116, 45,119,
101,105,103,104,116, 58, 32, 98,111,108,100, 10,125, 10, 10, 47, 42,
32, 33, 33, 33, 58, 32, 72,111,119, 32,115,104,111,117,108,100, 32,
119,101, 32,100,101,102,105,110,101, 32,116,104,105,115, 46, 46, 46,
63, 32, 42, 47, 10,115,112, 97,110, 46,102,105,108,101, 32,123, 10,
32, 32, 99,111,108,111,114, 58, 32,100, 97,114,107,103,114,101,101,
110, 10,125, 10, 10,116, 97, 98,108,101, 46,114,101,109, 97,114,107,
32,123, 10, 32, 32, 98, 97, 99,107,103,114,111,117,110,100, 45, 99,
111,108,111,114, 58, 32, 35,102,102,102,102, 99, 48, 59, 10,125, 10,
10,116, 97, 98,108,101, 46, 98, 97,114, 32,123, 10, 32, 32, 98, 97,
99,107,103,114,111,117,110,100, 45, 99,111,108,111,114, 58, 32, 35,
97, 48, 99, 48,102,102, 59, 10,125, 10, 10,115,112, 97,110, 46, 98,
97,114,116,105,116,108,101, 32,123, 10, 32, 32,102,111,110,116, 45,
119,101,105,103,104,116, 58, 32, 98,111,108,100, 59, 10, 32, 32,102,
112, 97,110, 46,100,105,114, 32,123, 10, 32, 32, 99,111,108,111,114,
58, 32,100, 97,114,107,121,101,108,108,111,119, 59, 10, 32, 32,102,
111,110,116, 45,115,116,121,108,101, 58, 32,105,116, 97,108,105, 99,
59, 10, 32, 32, 99,111,108,111,114, 58, 32,100, 97,114,107, 98,108,
117,101, 10,125, 10, 10,115,112, 97,110, 46,102,111,111,116,101,114,
32,123, 10, 32, 32,102,111,110,116, 45,115,116,121,108,101, 58, 32,
105,116, 97,108,105, 99, 59, 10, 32, 32, 99,111,108,111,114, 58, 32,
100, 97,114,107, 98,108,117,101, 10,125, 10, 10, 47, 42, 32,100,101,
102,105,110,105,116,105,111,110, 32,108,105,115,116, 32, 42, 47, 10,
100,108, 32,123, 10, 32, 98,111,114,100,101,114, 58, 32, 51,112,120,
32,100,111,117, 98,108,101, 32, 35, 99, 99, 99, 59, 10, 32,112, 97,
100,100,105,110,103, 58, 32, 48, 46, 53,101,109, 59, 10,125, 10, 10,
47, 42, 32,100,101,102,105,110,105,116,105,111,110, 32,108,105,115,
116, 58, 32,116,101,114,109, 32, 42, 47, 10,100,116, 32,123, 10, 32,
102,108,111, 97,116, 58, 32,108,101,102,116, 59, 10, 32, 99,108,101,
97,114, 58, 32,108,101,102,116, 59, 10, 32,119,105,100,116,104, 58,
32, 97,117,116,111, 59, 32, 47, 42, 32,110,111,114,109, 97,108,108,
121, 32, 98,114,111,119,115,101,114,115, 32,100,101,102, 97,117,108,
116, 32,119,105,100,116,104, 32,111,102, 32,108, 97,114,103,101,115,
116, 32,105,116,101,109, 32, 42, 47, 10, 32,112, 97,100,100,105,110,
103, 45,114,105,103,104,116, 58, 32, 50, 48,112,120, 59, 10, 32,102,
111,110,116, 45,119,101,105,103,104,116, 58, 32, 98,111,108,100, 59,
10, 32, 99,111,108,111,114, 58, 32,100, 97,114,107,103,114,101,101,
110, 59, 10,125, 10, 10, 47, 42, 32,100,101,102,105,110,105,116,105,
111,110, 32,108,105,115,116, 58, 32,100,101,115, 99,114,105,112,116,
105,111,110, 32, 42, 47, 10,100,100, 32,123, 10, 32,109, 97,114,103,
105,110, 58, 32, 48, 32, 48, 32, 48, 32, 49, 49, 48,112,120, 59, 10,
32,112, 97,100,100,105,110,103, 58, 32, 48, 32, 48, 32, 48, 46, 53,
101,109, 32, 48, 59, 10,125, 10, 10, 47, 42, 32,102,111,114, 32, 98,
114,111,119,115,101,114,115, 32,105,110, 32,115,116, 97,110,100, 97,
114,100,115, 32, 99,111,109,112,108,105, 97,110, 99,101, 32,109,111,
100,101, 32, 42, 47, 10,116,100, 32,112, 32,123, 10, 32, 32,109, 97,
114,103,105,110, 58, 32, 48, 59, 10,125, 10);
10,125, 10, 10, 47, 42, 32,110,117,109, 98,101,114,115, 32,105,110,
32,115,111,117,114, 99,101, 32,102,114, 97,103,109,101,110,116,115,
32, 42, 47, 10,115,112, 97,110, 46,110,117,109, 32,123, 10, 32, 32,
99,111,108,111,114, 58, 32,100, 97,114,107,109, 97,103,101,110,116,
97, 10,125, 10, 10, 47, 42, 32, 99,104, 97,114, 97, 99,116,101,114,
115, 32, 40, 35, 46, 46, 46, 41, 32,105,110, 32,115,111,117,114, 99,
101, 32,102,114, 97,103,109,101,110,116,115, 32, 42, 47, 10,115,112,
97,110, 46, 99,104,114, 32,123, 10, 32, 32, 99,111,108,111,114, 58,
32,100, 97,114,107, 99,121, 97,110, 10,125, 10, 10, 47, 42, 32,115,
116,114,105,110,103,115, 32,105,110, 32,115,111,117,114, 99,101, 32,
102,114, 97,103,109,101,110,116,115, 32, 42, 47, 10,115,112, 97,110,
46,115,116,114, 32,123, 10, 32, 32, 99,111,108,111,114, 58, 32, 98,
108,117,101, 10,125, 10, 10, 47, 42, 32, 97,115,115,101,109, 98,108,
101,114, 32,112, 97,115,115, 97,103,101,115, 32,105,110, 32,115,111,
117,114, 99,101, 32,102,114, 97,103,109,101,110,116,115, 32, 42, 47,
10,115,112, 97,110, 46, 97,115,109, 32,123, 10, 32, 32, 99,111,108,
111,114, 58, 32,103,114,101,101,110, 10,125, 10, 10, 10,116,100, 46,
112,114,101, 32,123, 10, 32, 32,119,104,105,116,101, 45,115,112, 97,
99,101, 58, 32,112,114,101, 10,125, 10, 10,112, 46, 99,109,116, 32,
123, 10, 32, 32, 99,111,108,111,114, 58, 32,103,114, 97,121, 10,125,
10, 10,115,112, 97,110, 46,119, 97,114,110,105,110,103, 32,123, 10,
32, 32, 99,111,108,111,114, 58, 32,114,101,100, 59, 10, 32, 32,102,
111,110,116, 45,119,101,105,103,104,116, 58, 32, 98,111,108,100, 10,
125, 10, 10, 47, 42, 32, 33, 33, 33, 58, 32, 72,111,119, 32,115,104,
111,117,108,100, 32,119,101, 32,100,101,102,105,110,101, 32,116,104,
105,115, 46, 46, 46, 63, 32, 42, 47, 10,115,112, 97,110, 46,102,105,
108,101, 32,123, 10, 32, 32, 99,111,108,111,114, 58, 32,100, 97,114,
107,103,114,101,101,110, 10,125, 10, 10,116, 97, 98,108,101, 46,114,
101,109, 97,114,107, 32,123, 10, 32, 32, 98, 97, 99,107,103,114,111,
117,110,100, 45, 99,111,108,111,114, 58, 32, 35,102,102,102,102, 99,
48, 59, 10,125, 10, 10,116, 97, 98,108,101, 46, 98, 97,114, 32,123,
10, 32, 32, 98, 97, 99,107,103,114,111,117,110,100, 45, 99,111,108,
111,114, 58, 32, 35, 97, 48, 99, 48,102,102, 59, 10,125, 10, 10,116,
100, 32,112, 32,123, 10, 32,109, 97,114,103,105,110, 58, 32, 48, 59,
10,125, 10, 10,115,112, 97,110, 46, 98, 97,114,116,105,116,108,101,
32,123, 10, 32, 32,102,111,110,116, 45,119,101,105,103,104,116, 58,
32, 98,111,108,100, 59, 10, 32, 32,102,111,110,116, 45,115,116,121,
108,101, 58, 32,105,116, 97,108,105, 99, 59, 10, 32, 32, 99,111,108,
111,114, 58, 32,100, 97,114,107, 98,108,117,101, 10,125, 10, 10,115,
112, 97,110, 46,116,111,103,103,108,101,116,114,101,101, 99,108,111,
115,101, 32,123, 10, 32, 32, 32, 32, 98, 97, 99,107,103,114,111,117,
110,100, 58, 32,117,114,108, 40,109,105,110,117,115, 46,112,110,103,
41, 32, 99,101,110,116,101,114, 32,108,101,102,116, 32,110,111, 45,
114,101,112,101, 97,116, 59, 10, 32, 32, 32, 32,112, 97,100,100,105,
110,103, 45,108,101,102,116, 58, 32, 50, 48,112,120, 59, 32, 10,125,
10, 10,115,112, 97,110, 46,116,111,103,103,108,101,116,114,101,101,
111,112,101,110, 32,123, 10, 32, 32, 32, 32, 98, 97, 99,107,103,114,
111,117,110,100, 58, 32,117,114,108, 40,112,108,117,115, 46,112,110,
103, 41, 32, 99,101,110,116,101,114, 32,108,101,102,116, 32,110,111,
45,114,101,112,101, 97,116, 59, 10, 32, 32, 32, 32,112, 97,100,100,
105,110,103, 45,108,101,102,116, 58, 32, 50, 48,112,120, 59, 32, 10,
125, 10, 10,117,108, 46, 99,108, 97,115,115,116,114,101,101,108,105,
115,116, 32,108,105, 32,123, 32,112, 97,100,100,105,110,103, 45,108,
101,102,116, 58, 32, 48,112,120, 59, 32,125, 10, 10,117,108, 46, 99,
108, 97,115,115,116,114,101,101,108,105,115,116, 32,123, 32,108,105,
115,116, 45,115,116,121,108,101, 45,116,121,112,101, 58,110,111,110,
101, 59, 32,125, 10, 10,108,105, 46, 99,108, 97,115,115,116,114,101,
101, 32,117,108, 32,123, 32,100,105,115,112,108, 97,121, 58, 32, 98,
108,111, 99,107, 59, 32,125, 10, 10,108,105, 46, 99,108, 97,115,115,
116,114,101,101, 99,108,111,115,101,100, 32,117,108, 32,123, 32,100,
105,115,112,108, 97,121, 58, 32,110,111,110,101, 59, 32,125, 10);

View File

@ -48,6 +48,7 @@ resourcestring
SDocProceduresAndFunctions = 'Procedures and functions';
SDocVariables = 'Variables';
SDocIdentifierIndex = 'Index';
SDocPackageClassHierarchy = 'Class hierarchy';
SDocModuleIndex = 'Index of all identifiers in unit ''%s''';
SDocPackageIndex = 'Index of all identifiers in package ''%s''';
SDocUnitOverview = 'Overview of unit ''%s''';

View File

@ -32,6 +32,7 @@ const
// Maybe needed later for topic overview ??
TopicsSubIndex = 7;
IndexSubIndex = 8;
ClassHierarchySubIndex = 9;
// Subpage indices for classes
PropertiesByInheritanceSubindex = 1;
@ -88,7 +89,10 @@ type
FOnTest: TNotifyEvent;
FPackage: TPasPackage;
FCharSet : String;
procedure AddElementsFromList(L: TStrings; List: TFPList; UsePathName : Boolean = False);
procedure AppendTypeDecl(AType: TPasType; TableEl, CodeEl: TDomElement);
procedure CreateMinusImage;
procedure CreatePlusImage;
function GetPageCount: Integer;
procedure SetOnTest(const AValue: TNotifyEvent);
protected
@ -99,6 +103,7 @@ type
PageInfos: TObjectList; // list of TPageInfo objects
Doc: THTMLDocument;
HeadElement,
BodyElement, TitleElement: TDOMElement;
Module: TPasModule;
@ -233,6 +238,8 @@ type
procedure CreatePageBody(AElement: TPasElement; ASubpageIndex: Integer); virtual;
procedure CreatePackagePageBody;
procedure CreatePackageIndex;
procedure CreatePackageClassHierarchy;
procedure CreateClassHierarchyPage(AList: TStringList; AddUnit : Boolean);
procedure AddModuleIdentifiers(AModule : TPasModule; L : TStrings);
Procedure CreateTopicPageBody(AElement : TTopicElement);
procedure CreateModulePageBody(AModule: TPasModule; ASubpageIndex: Integer);
@ -286,9 +293,12 @@ type
implementation
uses SysUtils, XHTML, XMLRead, XMLWrite, HTMWrite, sh_pas,chmsitemap;
uses SysUtils, XHTML, XMLRead, XMLWrite, HTMWrite, sh_pas, fpdocclasstree,
chmsitemap;
{$i css.inc}
{$i plusimage.inc}
{$i minusimage.inc}
Function FixHTMLpath(S : String) : STring;
@ -525,6 +535,13 @@ constructor THTMLWriter.Create(APackage: TPasPackage; AEngine: TFPDocEngine);
end;
end;
Function HaveClasses(AModule: TPasModule) : Boolean;
begin
with AModule do
Result:=InterfaceSection.Classes.Count>0;
end;
procedure ScanModule(AModule: TPasModule; LinkList : TObjectList);
var
i, j, k: Integer;
@ -621,6 +638,7 @@ constructor THTMLWriter.Create(APackage: TPasPackage; AEngine: TFPDocEngine);
var
i: Integer;
L : TObjectList;
H : Boolean;
begin
inherited ;
@ -642,6 +660,15 @@ begin
begin
AddPage(Package, 0);
AddPage(Package,IndexSubIndex);
I:=0;
H:=False;
While (I<Package.Modules.Count) and Not H do
begin
H:=HaveClasses(TPasModule(Package.Modules[i]));
Inc(I);
end;
if H then
AddPage(Package,ClassHierarchySubIndex);
AddTopicPages(Package);
end;
L:=TObjectList.Create;
@ -683,6 +710,7 @@ begin
Doc.AppendChild(HTMLEl);
HeadEl := Doc.CreateHeadElement;
HeadElement:=HeadEl;
HTMLEl.AppendChild(HeadEl);
El := Doc.CreateElement('meta');
HeadEl.AppendChild(El);
@ -762,6 +790,41 @@ begin
end;
end;
CreateCSSFile;
CreatePlusImage;
CreateMinusImage;
end;
procedure THTMLWriter.CreatePlusImage;
Var
TempStream: TMemoryStream;
begin
TempStream := TMemoryStream.Create;
try
DoLog('Creating plus image',[]);
TempStream.WriteBuffer(PlusImageData,SizeOf(PlusImageData));
TempStream.Position := 0;
TempStream.SaveToFile(Engine.output+'plus.png');
finally
TempStream.Free;
end;
end;
procedure THTMLWriter.CreateMinusImage;
Var
TempStream: TMemoryStream;
begin
TempStream := TMemoryStream.Create;
try
DoLog('Creating minus image',[]);
TempStream.WriteBuffer(MinusImageData,SizeOf(MinusImageData));
TempStream.Position := 0;
TempStream.SaveToFile(Engine.output+'minus.png');
finally
TempStream.Free;
end;
end;
procedure THTMLWriter.CreateCSSFile;
@ -2003,6 +2066,20 @@ var
AppendText(ParaEl, ']');
end;
procedure AddPackageLink(ALinkSubpageIndex: Integer; const AName: String);
begin
if FUseMenuBrackets then
AppendText(ParaEl, '[');
if ALinkSubpageIndex = ASubpageIndex then
AppendText(ParaEl, AName)
else
AppendText(
CreateLink(ParaEl, ResolveLinkWithinPackage(Package, ALinkSubpageIndex)),
AName);
if FUseMenuBrackets then
AppendText(ParaEl, ']');
end;
begin
TableEl := CreateEl(BodyElement, 'table');
TableEl['cellpadding'] := '4';
@ -2032,17 +2109,8 @@ begin
end
else
begin
// Manually add link for package page
if FUseMenuBrackets then
AppendText(ParaEl, '[');
if (IndexSubIndex = ASubpageIndex) then
AppendText(ParaEl, SDocIdentifierIndex)
else
AppendText(
CreateLink(ParaEl, ResolveLinkWithinPackage(Package, IndexSubIndex)),
SDocIdentifierIndex);
if FUseMenuBrackets then
AppendText(ParaEl, ']');
AddPackageLink(IndexSubIndex, SDocIdentifierIndex);
AddPackageLink(ClassHierarchySubIndex, SDocPackageClassHierarchy);
end;
if Length(SearchPage) > 0 then
@ -2269,6 +2337,162 @@ begin
end;
end;
procedure THTMLWriter.CreateClassHierarchyPage(AList : TStringList; AddUnit : Boolean);
Procedure PushClassElement;
Var
H : THTMLElement;
begin
H:=CreateEl(CurOutputNode, 'li');
H['class']:='classtree';
PushOutputNode(H);
H:=CreateEl(CurOutputNode, 'span');
H['class']:='toggletreeclose';
H['onclick']:='expandorcollapse(this)';
PushOutputNode(h);
AppendNbSp(h,1);
PopOutputNode;
end;
Procedure PushClassList;
Var
H : THTMLElement;
begin
H:=CreateEl(CurOutputNode, 'ul');
H['class']:='classtreelist';
PushOutputNode(h);
end;
Procedure AppendClass(E : TDomElement);
Var
N : TDomNode;
P,PM : TPasElement;
NN : String;
EN : String;
LL : TstringList;
I,J : Integer;
begin
EN:=Package.Name+'.'+E['unit']+'.'+E.NodeName;
J:=AList.IndexOf(EN);
If J<>-1 then
P:=AList.Objects[J] as TPasElement
else
P:=Engine.FindElement(EN);
PushClassElement;
try
if (P<>Nil) then
begin
AppendHyperLink(CurOutputNode,P);
PM:=P.Getmodule;
if (PM<>Nil) then
begin
AppendText(CurOutputNode,' (');
AppendHyperLink(CurOutputNode,PM);
AppendText(CurOutputNode,')');
end
end
else
AppendText(CurOutputNode,P.Name);
LL:=TStringList.Create;
try
N:=E.FirstChild;
While (N<>Nil) do
begin
if (N.NodeType=ELEMENT_NODE) then
LL.AddObject(N.NodeName,N);
N:=N.NextSibling;
end;
if (LL.Count>0) then
begin
LL.Sorted:=true;
PushClassList;
try
For I:=0 to LL.Count-1 do
AppendClass(LL.Objects[i] as TDomElement);
finally
PopOutputNode;
end;
end;
finally
LL.Free;
end;
Finally
PopOutputNode;
end;
end;
Var
B : TClassTreeBuilder;
E : TDomElement;
F : TFileStream;
begin
PushOutputNode(BodyElement);
try
B:=TClassTreeBuilder.Create(Package,okClass);
try
B.BuildTree(AList);
// Classes
WriteXMLFile(B.ClassTree,'tree.xml');
// Dummy TObject
E:=B.ClassTree.DocumentElement;
PushClassList;
try
AppendClass(E);
finally
PopOutputNode;
end;
finally
B.Free;
end;
finally
PopOutputNode;
end;
end;
procedure THTMLWriter.CreatePackageClassHierarchy;
Const
SFunc = 'function expandorcollapse (o) {'+sLineBreak+
' o.className = (o.className=="toggletreeclose") ? "toggletreeopen" : "toggletreeclose";'+sLineBreak+
' o.parentNode.className = (o.className=="toggletreeclose") ? "classtree" : "classtreeclosed";'+sLineBreak+
' return false;'+sLineBreak+
'}';
Var
L : TStringList;
I : Integer;
M : TPasModule;
E : TPasElement;
S : String;
SE : THTMLElement;
begin
SE := Doc.CreateElement('script');
AppendText(SE,SFunc);
HeadElement.AppendChild(SE);
L:=TStringList.Create;
try
L.Capacity:=PageInfos.Count; // Too much, but that doesn't hurt.
For I:=0 to Package.Modules.Count-1 do
begin
M:=TPasModule(Package.Modules[i]);
Self.AddElementsFromList(L,M.InterfaceSection.Classes,True)
end;
AppendMenuBar(ClassHierarchySubIndex);
S:=Package.Name;
If Length(S)>0 then
Delete(S,1,1);
AppendTitle(Format(SDocPackageClassHierarchy, [S]));
CreateClassHierarchyPage(L,True);
Finally
L.Free;
end;
end;
procedure THTMLWriter.CreatePageBody(AElement: TPasElement;
ASubpageIndex: Integer);
var
@ -2289,6 +2513,8 @@ begin
CreatePackagePageBody
else if ASubPageIndex=IndexSubIndex then
CreatePackageIndex
else if ASubPageIndex=ClassHierarchySubIndex then
CreatePackageClassHierarchy
end
else
begin
@ -2409,24 +2635,27 @@ begin
end;
end;
Procedure THTMLWriter.AddElementsFromList(L : TStrings; List : TFPList; UsePathName : Boolean = False);
Var
I : Integer;
El : TPasElement;
begin
For I:=0 to List.Count-1 do
begin
El:=TPasElement(List[I]);
if UsePathName then
L.AddObject(El.PathName,El)
else
L.AddObject(El.Name,El);
If el is TPasEnumType then
AddElementsFromList(L,TPasEnumType(el).Values);
end;
end;
procedure THTMLWriter.AddModuleIdentifiers(AModule : TPasModule; L : TStrings);
Procedure AddElementsFromList(L : TStrings; List : TFPList);
Var
I : Integer;
El : TPasElement;
begin
For I:=0 to List.Count-1 do
begin
El:=TPasElement(List[I]);
L.AddObject(El.Name,El);
If el is TPasEnumType then
AddElementsFromList(L,TPasEnumType(el).Values);
end;
end;
begin
AddElementsFromList(L,AModule.InterfaceSection.Consts);
AddElementsFromList(L,AModule.InterfaceSection.Types);

View File

@ -1,22 +1,24 @@
<?xml version="1.0"?>
<CONFIG>
<ProjectOptions>
<PathDelim Value="/"/>
<Version Value="6"/>
<Version Value="9"/>
<General>
<Flags>
<SaveOnlyProjectUnits Value="True"/>
<MainUnitHasUsesSectionForAllUnits Value="False"/>
<MainUnitHasCreateFormStatements Value="False"/>
<MainUnitHasTitleStatement Value="False"/>
<LRSInOutputDirectory Value="False"/>
</Flags>
<SessionStorage Value="InProjectDir"/>
<MainUnit Value="0"/>
<TargetFileExt Value=""/>
</General>
<VersionInfo>
<ProjectVersion Value=""/>
<StringTable ProductVersion=""/>
</VersionInfo>
<BuildModes Count="1">
<Item1 Name="default" Default="True"/>
</BuildModes>
<PublishOptions>
<Version Value="2"/>
<IgnoreBinaries Value="False"/>
@ -29,7 +31,7 @@
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
</local>
</RunParams>
<Units Count="2">
<Units Count="3">
<Unit0>
<Filename Value="fpclasschart.pp"/>
<IsPartOfProject Value="True"/>
@ -40,10 +42,20 @@
<IsPartOfProject Value="True"/>
<UnitName Value="dGlobals"/>
</Unit1>
<Unit2>
<Filename Value="fpdocclasstree.pp"/>
<IsPartOfProject Value="True"/>
<UnitName Value="fpdocclasstree"/>
</Unit2>
</Units>
</ProjectOptions>
<CompilerOptions>
<Version Value="8"/>
<Version Value="11"/>
<Parsing>
<SyntaxOptions>
<UseAnsiStrings Value="False"/>
</SyntaxOptions>
</Parsing>
<Other>
<CompilerPath Value="$(CompPath)"/>
</Other>

View File

@ -19,7 +19,7 @@ program fpclasschart;
uses
SysUtils, Classes, Typinfo, Gettext, dom, xmlread,
dGlobals, PasTree, PParser,PScanner, xmlwrite;
dGlobals, PasTree, PParser,PScanner, xmlwrite, fpdocclasstree;
resourcestring
STitle = 'fpClassTree - Create class tree from pascal sources';
@ -37,20 +37,14 @@ type
{ TClassTreeEngine }
TClassTreeEngine = class(TFPDocEngine)
Private
FClassTree : TXMLDocument;
FTreeStart : TDomElement;
FTree : TClassTreeBuilder;
FObjects : TStringList;
FObjectKind : TPasObjKind;
FParentObject : TPasClassType;
function LookForElement(PE: TDomElement; AElement: TPasElement): TDomNode;
function NodeMatch(N: TDomNode; AElement: TPasElement): Boolean;
Function AddToClassTree(AElement : TPasElement; Var ACount : Integer) : TDomElement;
public
Constructor Create(AClassTree : TXMLDocument; AObjectKind : TPasObjKind);
Destructor Destroy; override;
Function BuildTree : Integer;
function CreateElement(AClass: TPTreeElement; const AName: String;
AParent: TPasElement; AVisibility :TPasMemberVisibility;
const ASourceFilename: String; ASourceLinenumber: Integer): TPasElement; override;
@ -95,6 +89,11 @@ type
Property MaxObjectsPerColumn : Integer Read FMaxObjectsPerColumn Write FMaxObjectsPerColumn;
end;
{ TClassTreeBuilder }
{ TChartFormatter }
constructor TClassChartFormatter.Create(AXML: TXMLDocument);
@ -450,21 +449,11 @@ end;
Constructor TClassTreeEngine.Create(AClassTree : TXMLDocument; AObjectKind : TPasObjKind);
Var
N : TDomNode;
begin
FClassTree:=AClassTree;
FTreeStart:=FClassTree.DocumentElement;
FPackage:=TPasPackage.Create('dummy',Nil);
FObjectKind:=AObjectKind;
FTree:=TClassTreeBuilder.Create(FPackage,AObjectKind);
FObjects:=TStringList.Create;
Case FObjectkind of
okObject : FParentObject:=TPasClassType.Create('TObject',FPackage);
okClass : FParentObject:=TPasClassType.Create('TObject',FPackage);
okInterface : FParentObject:=TPasClassType.Create('IInterface',FPackage);
end;
FParentObject.ObjKind:=FObjectKind;
Inherited Create;
end;
@ -474,89 +463,7 @@ begin
inherited Destroy;
end;
Function TClassTreeEngine.BuildTree : Integer;
Var
I : Integer;
PC : TPasClassType;
begin
Result:=0;
FObjects.Sorted:=True;
For I:=0 to FObjects.Count-1 do
begin
PC:=TPasClassType(FObjects.Objects[i]);
If (PC.ObjKind=FObjectKind) and Not PC.IsForward then
AddToClassTree(PC as TPasElement,Result)
end;
end;
Function TClassTreeEngine.NodeMatch(N : TDomNode; AElement : TPasElement) : Boolean;
begin
Result:=(N.NodeType=ELEMENT_NODE) and (CompareText(N.NodeName,AElement.Name)=0)
end;
Function TClassTreeEngine.LookForElement(PE : TDomElement; AElement : TPasElement) : TDomNode;
Var
N : TDomNode;
begin
Result:=PE.FirstChild;
While (Result<>Nil) and Not NodeMatch(Result,AElement) do
Result:=Result.NextSibling;
If (Result=Nil) then
begin
N:=PE.FirstChild;
While (Result=Nil) and (N<>Nil) do
begin
if (N.NodeType=ELEMENT_NODE) then
begin
Result:=LookForElement(N as TDomElement,AElement);
end;
N:=N.NextSibling;
end;
end
end;
Function TClassTreeEngine.AddToClassTree(AElement : TPasElement; Var ACount : Integer) : TDomElement;
Var
PC : TPasClassType;
PE : TDomElement;
M : TPasModule;
N : TDomNode;
begin
PE:=Nil;
If (AElement is TPasClassType) then
begin
PC:=AElement as TPasClassType;
If not Assigned(PC.AncestorType) and (CompareText(PC.Name,FParentObject.Name)<>0) then
PC.AncestorType:=FParentObject;
If Assigned(PC.AncestorType) then
PE:=AddToClassTree(PC.AncestorType,ACount);
end;
If (PE=Nil) then
PE:=FTreeStart;
N:=LookForElement(PE,AElement);
If (N<>Nil) then
Result:=N as TDomElement
else
begin
Inc(ACount);
Result:=FClassTree.CreateElement(AElement.Name);
If Not (AElement is TPasUnresolvedTypeRef) then
begin
M:=AElement.GetModule;
if Assigned(M) then
Result['unit']:=M.Name;
end;
PE.AppendChild(Result);
end;
end;
{ ---------------------------------------------------------------------
Main program. Document all units.
---------------------------------------------------------------------}
@ -636,7 +543,7 @@ begin
Engine := TClassTreeEngine.Create(XML,AObjectKind);
Try
ParseSource(Engine,InputFiles[I],OSTarget,CPUTarget);
ACount:=ACount+Engine.BuildTree;
ACount:=ACount+Engine.Ftree.BuildTree(Engine.FObjects);
Finally
Engine.Free;
end;

View File

@ -1,5 +1,5 @@
/*
$Id: fpdoc.css,v 1.1 2003/03/17 23:03:20 michael Exp $
$Id: fpdoc.cst,v 1.1 2005/01/02 16:22:16 michael Exp $
Default style sheet for FPDoc reference documentation
by Sebastian Guenther, sg@freepascal.org
@ -62,6 +62,10 @@ span.code {
span.sym {
color: darkred
}
/* No wordwrap in code fragments */
span.code {
white-space: nowrap
}
/* keywords in source fragments */
span.kw {
@ -127,40 +131,30 @@ table.bar {
background-color: #a0c0ff;
}
td p {
margin: 0;
}
span.bartitle {
font-weight: bold;
font-style: italic;
color: darkblue
}
span.footer {
font-style: italic;
color: darkblue
span.toggletreeclose {
background: url(minus.png) center left no-repeat;
padding-left: 20px;
}
/* definition list */
dl {
border: 3px double #ccc;
padding: 0.5em;
span.toggletreeopen {
background: url(plus.png) center left no-repeat;
padding-left: 20px;
}
/* definition list: term */
dt {
float: left;
clear: left;
width: auto; /* normally browsers default width of largest item */
padding-right: 20px;
font-weight: bold;
color: darkgreen;
}
ul.classtreelist li { padding-left: 0px; }
/* definition list: description */
dd {
margin: 0 0 0 110px;
padding: 0 0 0.5em 0;
}
ul.classtreelist { list-style-type:none; }
/* for browsers in standards compliance mode */
td p {
margin: 0;
}
li.classtree ul { display: block; }
li.classtreeclosed ul { display: none; }

View File

@ -31,7 +31,7 @@
<RunParams>
<local>
<FormatVersion Value="1"/>
<CommandLineParams Value="--project=fpdoc.xml"/>
<CommandLineParams Value="--package=me --output=me --input=ct.pp --format=html"/>
<LaunchingApplication PathPlusParams="/usr/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
</local>
</RunParams>
@ -40,7 +40,7 @@
<PackageName Value="FCL"/>
</Item1>
</RequiredPackages>
<Units Count="15">
<Units Count="16">
<Unit0>
<Filename Value="fpdoc.pp"/>
<IsPartOfProject Value="True"/>
@ -116,6 +116,11 @@
<IsPartOfProject Value="True"/>
<UnitName Value="mkfpdoc"/>
</Unit14>
<Unit15>
<Filename Value="fpdocclasstree.pp"/>
<IsPartOfProject Value="True"/>
<UnitName Value="fpdocclasstree"/>
</Unit15>
</Units>
</ProjectOptions>
<CompilerOptions>

View File

@ -23,6 +23,7 @@ uses
{$endif}
SysUtils, Classes, Gettext, custapp,
dGlobals, // Global definitions, constants.
fpdocclasstree, // Class tree builder
dwriter, // TFPDocWriter definition.
dwlinear, // Linear (abstract) writer
dw_LaTeX, // TLaTex writer

View File

@ -0,0 +1,160 @@
unit fpdocclasstree;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, DOM, pastree;
Type
TClassTreeBuilder = Class
Private
FClassTree : TXMLDocument;
FTreeStart : TDomElement;
FObjectKind : TPasObjKind;
FPackage: TPasPackage;
FParentObject : TPasClassType;
Protected
function LookForElement(PE: TDomElement; AElement: TPasElement): TDomNode;
function NodeMatch(N: TDomNode; AElement: TPasElement): Boolean;
Function AddToClassTree(AElement : TPasElement; Var ACount : Integer) : TDomElement;
Public
Constructor Create(APackage : TPasPackage; AObjectKind : TPasObjKind = okClass);
Destructor Destroy; override;
Function BuildTree(AObjects : TStringList) : Integer;
Property ClassTree : TXMLDocument Read FClassTree;
end;
implementation
constructor TClassTreeBuilder.Create(APackage : TPasPackage;
AObjectKind: TPasObjKind);
Var
N : TDomNode;
begin
FCLassTree:=TXMLDocument.Create;
FPackage:=APAckage;
FObjectKind:=AObjectKind;
Case FObjectkind of
okObject : FParentObject:=TPasClassType.Create('System.TObject',FPackage);
okClass : FParentObject:=TPasClassType.Create('System.TObject',FPackage);
okInterface : FParentObject:=TPasClassType.Create('System.IInterface',FPackage);
end;
FParentObject.ObjKind:=FObjectKind;
FTreeStart:=FClassTree.CreateElement('TObject');
FTreeStart['unit']:='System';
ClassTree.AppendChild(FTreeStart);
end;
destructor TClassTreeBuilder.Destroy;
begin
FreeAndNil(FClassTree);
Inherited;
end;
Function TClassTreeBuilder.BuildTree(AObjects : TStringList) : Integer;
Var
I : Integer;
PC : TPasClassType;
begin
Result:=0;
AObjects.Sorted:=True;
For I:=0 to AObjects.Count-1 do
begin
PC:=TPasClassType(AObjects.Objects[i]);
If (PC.ObjKind=FObjectKind) and Not PC.IsForward then
begin
AddToClassTree(PC as TPasElement,Result)
end;
end;
end;
Function TClassTreeBuilder.NodeMatch(N : TDomNode; AElement : TPasElement) : Boolean;
Var
S : String;
begin
Result:=(N.NodeType=ELEMENT_NODE);
if Result then
begin
S:=N.NodeName;
S:=FPackage.Name+'.'+TDomElement(N)['unit']+'.'+S;
Result:= (CompareText(S,AElement.PathName)=0)
end;
end;
Function TClassTreeBuilder.LookForElement(PE : TDomElement; AElement : TPasElement) : TDomNode;
Var
N : TDomNode;
begin
Result:=PE;
While (Result<>Nil) and Not NodeMatch(Result,AElement) do
Result:=Result.NextSibling;
If (Result=Nil) then
begin
N:=PE.FirstChild;
While (Result=Nil) and (N<>Nil) do
begin
if (N.NodeType=ELEMENT_NODE) then
begin
Result:=LookForElement(N as TDomElement,AElement);
end;
N:=N.NextSibling;
end;
end
end;
Function TClassTreeBuilder.AddToClassTree(AElement : TPasElement; Var ACount : Integer) : TDomElement;
Var
PC : TPasClassType;
PE : TDomElement;
M : TPasModule;
N : TDomNode;
begin
Result:=Nil;
If (AElement=Nil) then
Result:=FTreeStart
else If (AElement is TPasClassType) then
begin
Writeln('Doing ',AElement.Name);
if (AElement=FParentObject) then
Result:=FTreeStart
else
begin
PC:=AElement as TPasClassType;
PE:=AddToClassTree(PC.AncestorType,ACount);
N:=LookForElement(PE,AElement);
If (N<>Nil) then
Result:=N as TDomElement
else
begin
Inc(ACount);
Result:=FClassTree.CreateElement(AElement.Name);
If Not (AElement is TPasUnresolvedTypeRef) then
begin
M:=AElement.GetModule;
if Assigned(M) then
Result['unit']:=M.Name;
end;
if (PE=FTreeStart) then
begin
Writeln('Adding to tree start :',AELement.Name);
Writeln('Have ancestor : ',PC.AncestorType<>Nil);
if (PC.AncestorType<>Nil) then
Writeln(PC.AncestorType.ClassName, ' : '+PC.AncestorType.Name);
end;
PE.AppendChild(Result);
end;
end;
end
end;
end.

View File

@ -0,0 +1,20 @@
Const
MinusImageData : Array[0..273] of byte = (
137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0,
0, 0, 19, 0, 0, 0, 19, 8, 4, 0, 0, 0,216, 89,254, 71, 0,
0, 0, 2, 98, 75, 71, 68, 0,238,237, 63,236, 77, 0, 0, 0, 9,
112, 72, 89,115, 0, 0, 0, 72, 0, 0, 0, 72, 0, 70,201,107, 62,
0, 0, 0, 9,118,112, 65,103, 0, 0, 0, 19, 0, 0, 0, 19, 0,
241,127,140,174, 0, 0, 0, 63, 73, 68, 65, 84, 40,207, 99,124,199,
64, 12, 96, 34, 74,213,192, 40, 99, 65, 48, 39,253, 71,151,204, 99,
196,162,140,129,161, 30, 69, 81, 35, 61,220,198,192,192,192, 0,119,
12,195,127,124,202,254,227, 48,141,134,110,107,196,169,140,113,232,
167, 16, 0,229, 60, 7,139,203,229, 71, 3, 0, 0, 0, 37,116, 69,
88,116,100, 97,116,101, 58, 99,114,101, 97,116,101, 0, 50, 48, 49,
50, 45, 49, 50, 45, 50, 48, 84, 49, 53, 58, 48, 52, 58, 52, 48, 43,
48, 49, 58, 48, 48, 36,251,160,191, 0, 0, 0, 37,116, 69, 88,116,
100, 97,116,101, 58,109,111,100,105,102,121, 0, 50, 48, 49, 50, 45,
49, 50, 45, 50, 48, 84, 49, 53, 58, 48, 52, 58, 52, 48, 43, 48, 49,
58, 48, 48, 85,166, 24, 3, 0, 0, 0, 0, 73, 69, 78, 68,174, 66,
96,130);

21
utils/fpdoc/plusimage.inc Normal file
View File

@ -0,0 +1,21 @@
Const
PlusImageData : Array[0..288] of byte = (
137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0,
0, 0, 19, 0, 0, 0, 19, 8, 4, 0, 0, 0,216, 89,254, 71, 0,
0, 0, 2, 98, 75, 71, 68, 0,238,237, 63,236, 77, 0, 0, 0, 9,
112, 72, 89,115, 0, 0, 0, 72, 0, 0, 0, 72, 0, 70,201,107, 62,
0, 0, 0, 9,118,112, 65,103, 0, 0, 0, 19, 0, 0, 0, 19, 0,
241,127,140,174, 0, 0, 0, 78, 73, 68, 65, 84, 40,207, 99,124,199,
64, 12, 96, 34, 74,213,192, 40, 99, 65, 48, 39,253, 71,151,204, 99,
196,162,140,129,161, 30, 69, 81, 35,126, 75, 25, 49,133,200,112, 27,
194, 36, 70, 6, 6,134,255,248,148,253,103, 96, 96, 96,100,192,240,
11, 5,225,246, 31,139, 50, 20, 75, 27, 25,112, 1,198,161,159, 66,
0, 47,159, 9,140, 36, 84,124, 38, 0, 0, 0, 37,116, 69, 88,116,
100, 97,116,101, 58, 99,114,101, 97,116,101, 0, 50, 48, 49, 50, 45,
49, 50, 45, 50, 48, 84, 49, 53, 58, 48, 52, 58, 50, 50, 43, 48, 49,
58, 48, 48,117, 11,184, 17, 0, 0, 0, 37,116, 69, 88,116,100, 97,
116,101, 58,109,111,100,105,102,121, 0, 50, 48, 49, 50, 45, 49, 50,
45, 50, 48, 84, 49, 53, 58, 48, 52, 58, 50, 50, 43, 48, 49, 58, 48,
48, 4, 86, 0,173, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130
);