Clone
Gustaf Neumann <neumann@wu-wien.ac.at>
committed
on 13 Sep 12
- updated 34 copyright notices
2-1-0-rc + 56 more
apps/utils/nxdoc (+18 -16)
8 8   Class create CLI {
9 9    
10 10     #
11 11     # rendering
12 12     #
13 13     :property {outdir "."}
14 14     :property {format "html"}
15 15     :property {theme "yuidoc"}
16 16     :property {layout "many-to-many"}
17 17    
18 18     #
19 19     # doc project
20 20     #
21 21     :property doctitle
22 22     :property {docversion 0.1}
23 23     :property docurl
24 24     :property docbaseurl
25 25     :property {validation:switch false}
26 26    
27 27     #
28       # input
  28     # frontend
29 29     #
  30     :property {frontend dc}
30 31     :property includes
31       :property {excludes ""}
  32     :property excludes
32 33     :property indexfiles:alias
33 34
34 35     :protected property sources:1..* {
  36       set :incremental 1
35 37       set :config false
36 38     }
37 39
38 40     #
39 41     # auxiliary
40 42     #
41 43
42 44     :private method barf {msg} {
43 45       return -code error "NXDoc: $msg"
44 46     }
45 47
46 48     :protected method ... args {
47         :sources [concat {*}[split $args :]]
  49       foreach i $args {
  50         set idx [string first : $i]
  51         if {$idx == -1} continue;
  52         dict lappend :sources [string range $i 0 [expr {$idx - 1}]] [string range $i [expr {$idx + 1}] end]
48 53       }
  54     }
49 55
50 56     :protected method indexfiles {paths} {
51 57       #
52 58       # TODO: Should we provide for an auto-lookup of nxdocIndex files,
53 59       # similar to tclIndex or pkgIndex.tcl?
54 60       #
55 61
56 62       #
57 63       # Some sanity checks first ...
58 64       #
59 65       set sources [list]
60 66       foreach p $paths {
61 67         set p [file normalize $p]
62 68         if {[file exists $p] && [file readable $p]} {
63 69           lappend sources [list source $p]
64 70         } else {
65 71           :barf "Cannot find or read the index file '$p'"
66 72         }
67 73       }
68 74      
 
87 93         :barf "Sourcing index files failed with error message '$err'"
88 94       }
89 95      
90 96       lappend :includes {*}[$i eval [list ::nxdoc::internal::getIndexedCmds 1]]
91 97       interp delete $i
92 98     }
93 99
94 100     :protected class method objectparameter {} {
95 101       set slots [:info slot objects]
96 102       foreach slot $slots {
97 103         lappend defs([$slot position]) [$slot getParameterSpec]
98 104       }
99 105       set parameterdefinitions [list]
100 106       foreach p [lsort [array names defs]] {
101 107         lappend parameterdefinitions {*}$defs($p)
102 108       }
103 109       return [concat $parameterdefinitions ...:alias,args]
104 110     }
105 111    
106 112     :protected method init {} {
107         set prj [@project new \
  113
  114       set prj [@project newFromSources \
  115                    -frontend ${:frontend} \
  116                    {*}[expr {[info exists :includes]?[list -include ${:includes}]:""}] \
  117                    {*}[expr {[info exists :excludes]?[list -exclude ${:excludes}]:""}] \
  118                    ${:sources} \
108 119                    -name ${:doctitle} \
109 120                    -url ${:docurl} \
110 121                    -version ${:docversion} \
111                      -sources ${:sources}]
  122                    {*}[expr {${:validation}?"-mixin ::nx::doc::@project::Validator":""}]]
112 123      
113         processor process \
114             -sandboxed \
115             {*}[expr {${:validation}?"-validate":""}] \
116             {*}[expr {[info exists :includes]?"-include [list ${:includes}]":""}] \
117             $prj
118 124
119         make doc \
120             -format ${:format} \
121             $prj \
122             -theme ${:theme} \
123             -layout ${:layout} \
124             -outdir ${:outdir}
  125      
  126       $prj write -format ${:format} -theme ${:theme} -layout ${:layout} -outdir ${:outdir}
125 127     }
126 128   }
127 129   namespace export CLI
128 130 }
129 131
130 132 namespace import -force ::nx::doc::CLI
131 133 #
132 134 # nxdoc -outdir /tmp/ -format html -theme yuidoc package:nsf
133 135 #
134 136 CLI new {*}$argv
135 137