Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "xslt-visualizer"]
path = xslt-visualizer
url = git@github.com:evanlenz/xslt-visualizer.git
204 changes: 171 additions & 33 deletions docca.jam
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,14 @@


import "class" : new ;
import feature ;
import doxygen ;
import modules ;
import option ;
import os ;
import param ;
import path ;
import print ;
import project ;
import property-set ;
import quickbook ;
Expand All @@ -24,7 +29,13 @@ import type ;

.here = [ path.make [ modules.binding $(__name__) ] ] ;
.here = $(.here:D) ;
.visualize = [ option.get docca-visualize : : "on" ] ;

.target-suffix = dir ;
if "on" = $(.visualize)
{
.target-suffix = "$(.target-suffix)-vis" ;
}

rule reference ( target : sources * : requirements * : default-build *
: usage-requirements * )
Expand All @@ -37,7 +48,7 @@ rule reference ( target : sources * : requirements * : default-build *

local project = [ project.current ] ;
local target-dir = $(target:S=) ;
target-dir = $(target-dir:B=_$(target-dir:B)-dir) ;
target-dir = $(target-dir:B=_$(target-dir:B)-$(.target-suffix)) ;

# Generate doxygen configuration file from sources
sources = [ sequence.transform fix-source $(project) : $(sources) ] ;
Expand All @@ -63,55 +74,112 @@ rule reference ( target : sources * : requirements * : default-build *
;
$(project).mark-target-as-explicit $(target-dir)/stamp ;


# Adopt as a target index.xml which was created as a side-effect
make-explicit $(target-dir)/index.xml $(project)
: $(target-dir)/stamp
: @docca.null-action
;

#--------------------------------------------------------------------------
#
# Copy visualization assets
local vis-dir = $(.here)/xslt-visualizer ;
local vis-assets ;
for file in [ path.glob-tree $(.here)/xslt-visualizer/assets : *.* ]
{
local dir = [ path.relative $(file) $(vis-dir) ] ;
dir = $(dir:D) ;
vis-assets +=
[ copy $(file) $(project) $(target-dir)/stage1_visualized/code-trace-enabled/$(dir) ]
[ copy $(file) $(project) $(target-dir)/stage2_visualized/code-trace-enabled/$(dir) ]
;
}
alias $(target-dir)/vis-assets : $(vis-assets) ;
$(project).mark-target-as-explicit $(target-dir)/vis-assets ;

#--------------------------------------------------------------------------
#
# Copy the project-specific config XSLT
copy-xsl $(overrides) $(project) $(target-dir)/custom-overrides.xsl ;
copy $(overrides) $(project) $(target-dir) : : custom-overrides.xsl ;

# Copy all the XSLT modules to the target directory.
# Also, specify their dependencies.
local src-dir = $(.here)/include/docca ;
copy-xsl $(src-dir)/common.xsl $(project) $(target-dir) ;
copy-xsl $(src-dir)/base-config.xsl $(project) $(target-dir) ;
copy-xsl $(src-dir)/assemble-quickbook.xsl $(project) $(target-dir) ;
copy $(src-dir)/common.xsl $(project) $(target-dir) ;
copy $(src-dir)/base-config.xsl $(project) $(target-dir) ;
copy $(src-dir)/assemble-quickbook.xsl $(project) $(target-dir) ;
copy $(src-dir)/debug-friendly-quickbook.xsl $(project) $(target-dir) ;

copy-xsl $(src-dir)/base-extract-xml-pages.xsl $(project) $(target-dir)
copy $(src-dir)/base-extract-xml-pages.xsl $(project) $(target-dir)
: common.xsl
;

copy-xsl $(src-dir)/base-stage1.xsl $(project) $(target-dir)
copy $(src-dir)/base-stage1.xsl $(project) $(target-dir)
: common.xsl
;

copy-xsl $(src-dir)/extract-xml-pages.xsl $(project) $(target-dir)
copy $(src-dir)/extract-xml-pages.xsl $(project) $(target-dir)
: base-extract-xml-pages.xsl
base-config.xsl
custom-overrides.xsl
;

copy-xsl $(src-dir)/stage1.xsl $(project) $(target-dir)
copy $(src-dir)/stage1.xsl $(project) $(target-dir)
: base-stage1.xsl
base-config.xsl
custom-overrides.xsl
;

copy-xsl $(src-dir)/base-stage2.xsl $(project) $(target-dir)
copy $(src-dir)/base-stage2.xsl $(project) $(target-dir)
: common.xsl
;

copy-xsl $(src-dir)/stage2.xsl $(project) $(target-dir)
copy $(src-dir)/stage2.xsl $(project) $(target-dir)
: base-stage2.xsl
base-config.xsl
custom-overrides.xsl
;

# Copy visualization XSLT modules to the target directory.
copy $(vis-dir)/xsl/lib/xml-to-string.xsl $(project) $(target-dir)/xsl/lib ;
copy $(vis-dir)/xsl/guid.xsl $(project) $(target-dir)/xsl ;
copy $(vis-dir)/xsl/generate-built-in-rules.xsl $(project) $(target-dir)/xsl ;
copy $(vis-dir)/xsl/do-trace-enable.xsl $(project) $(target-dir)/xsl ;
copy $(vis-dir)/xsl/to-string.xsl $(project) $(target-dir)/xsl ;
copy $(vis-dir)/xsl/html-rule-tree.xsl $(project) $(target-dir)/xsl ;
copy $(vis-dir)/xsl/run-trace.xsl $(project) $(target-dir)/xsl ;
copy $(vis-dir)/xsl/trace-enable.xsl $(project) $(target-dir)/xsl
: lib/xml-to-string.xsl
guid.xsl
generate-built-in-rules.xsl
do-trace-enable.xsl
to-string.xsl
html-rule-tree.xsl
;

if $(.visualize)
{
make-explicit $(target-dir)/stage1_visualized/code-trace-enabled/stage1.xsl
$(project)
: $(target-dir)/stage1.xsl
$(target-dir)/xsl/trace-enable.xsl
: @saxonhe.saxonhe
;

make-explicit $(target-dir)/stage2_visualized/code-trace-enabled/stage2.xsl
$(project)
: $(target-dir)/stage2.xsl
$(target-dir)/xsl/trace-enable.xsl
: @saxonhe.saxonhe
;
}

# Generate stage2 parameters file
make-explicit $(target-dir)/stage2-params.xml $(project)
:
: @docca.generate-stage2-params
;

#-------------------------------------------------------------------------------
#
# Run index.xml through the first transformation stage
Expand All @@ -129,19 +197,51 @@ rule reference ( target : sources * : requirements * : default-build *
: @docca.null-action
;

make-explicit $(target-dir)/stage1/results $(project)
: $(target-dir)/xml-pages
$(target-dir)/stage1.xsl
: @saxonhe.saxonhe_dir
: $(requirements)
;

make-explicit $(target-dir)/stage2/results $(project)
: $(target-dir)/stage1/results
$(target-dir)/stage2.xsl
: @saxonhe.saxonhe_dir
: $(requirements)
;
if $(.visualize)
{
make-explicit $(target-dir)/stage1/results $(project)
: $(target-dir)/xml-pages
$(target-dir)/xsl/run-trace.xsl
: @docca.saxonhe-dir
: $(requirements)
<flags>trace-enabled-stylesheet-uri=../stage1_visualized/code-trace-enabled/stage1.xsl
;

make-explicit $(target-dir)/stage2/results $(project)
: $(target-dir)/stage1/results
$(target-dir)/xsl/run-trace.xsl
: @docca.saxonhe-dir
: $(requirements)
<flags>trace-enabled-stylesheet-uri=../stage2_visualized/code-trace-enabled/stage2.xsl
<flags>"?transform-params=doc(\"stage2-params.xml\")"
<flags>principal-output-method=text
;

make-explicit $(target-dir)/stage2/results/copied.stamp $(project)
: $(target-dir)/xml-pages.xml
$(target-dir)/debug-friendly-quickbook.xsl
: @docca.saxonhe
: $(requirements)
<dependency>$(target-dir)/stage2/results
<flags>input-dir=stage2_visualized/results
;
}
else
{
make-explicit $(target-dir)/stage1/results $(project)
: $(target-dir)/xml-pages
$(target-dir)/stage1-prepared.xsl
: @docca.saxonhe-dir
: $(requirements)
;

make-explicit $(target-dir)/stage2/results $(project)
: $(target-dir)/stage1/results
$(target-dir)/stage2.xsl
: @docca.saxonhe-dir
: $(requirements)
;
}

generate $(target)
: $(target-dir)/xml-pages.xml
Expand Down Expand Up @@ -179,25 +279,22 @@ rule make-qbk ( project name : property-set : sources * )
}


local rule copy-xsl ( source project target-or-dir : dependencies * )
local rule copy ( source project target-dir : dependencies * : new-name ? )
{
local target ;
local dir ;
if .xsl = $(target-or-dir:S)
if $(new-name)
{
dir = $(target-or-dir:D) ;
target = $(target-or-dir:D=) ;
target = $(new-name) ;
}
else
{
dir = $(target-or-dir) ;
target = $(source:D=) ;
}

make-explicit $(target:TD=$(dir)) $(project)
make-explicit $(target:TD=$(target-dir)) $(project)
: $(source)
: @common.copy
: <dependency>$(dependencies:TD=$(dir))
: <dependency>$(target-dir)/$(dependencies)
;
}

Expand All @@ -207,6 +304,8 @@ local rule make-explicit ( target project : sources * : make-rule + : reqs *
{
make $(target) : $(sources) : $(make-rule) : $(reqs) : $(ureqs) ;
$(project).mark-target-as-explicit $(target) ;

return $(target) ;
}


Expand All @@ -229,3 +328,42 @@ local rule fix-source ( project path )
rule null-action
{
}


rule generate-stage2-params ( target : sources * : properties * )
{
print.output $(target) ;
print.text
"<params>"
" <DEBUG>yes</DEBUG>"
"</params>"
: overwrite
;
}


.java_exe = [ modules.peek saxonhe : .java_exe ] ;
.saxonhe_jar = [ modules.peek saxonhe : .saxonhe_jar ] ;

toolset.flags docca.saxonhe-dir FLAGS : <flags> ;

actions saxonhe
{
"$(.java_exe)" -jar "$(.saxonhe_jar)" -o:"$(<)" -s:"$(>[1])" -xsl:"$(>[2])" $(FLAGS)
}
if [ os.on-windows ]
{
actions saxonhe-dir
{
if not exist "$(<)\\" mkdir "$(<)"
"$(.java_exe)" -jar "$(.saxonhe_jar)" -o:"$(<)" -s:"$(>[1])" -xsl:"$(>[2])" $(FLAGS)
}
}
else
{
actions saxonhe-dir
{
mkdir -p "$(<)"
"$(.java_exe)" -jar "$(.saxonhe_jar)" -o:"$(<)" -s:"$(>[1])" -xsl:"$(>[2])" $(FLAGS)
}
}
10 changes: 10 additions & 0 deletions example_visualized/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
build
html
qbk
images
index.xml
custom-index.xml
main.qbk
reference.qbk
xml-pages.xml
boostbook.dtd
Loading