1 # -----------------------------------------------------------------------
2 # Script name: CompileDocs.tcl
3 # This script compiles OCCT documents from *.md files to HTML pages
5 # -----------------------------------------------------------------------
7 # get OCCT version from file Standard_Version.hxx (if available)
8 proc OverviewDoc_DetectCasVersion {theCasRoot} {
11 if { [file exist $theCasRoot/src/Standard/Standard_Version.hxx] } {
12 set fh [open $theCasRoot/src/Standard/Standard_Version.hxx]
13 set fh_loaded [read $fh]
15 regexp {[^/]\s*#\s*define\s+OCC_VERSION_COMPLETE\s+\"([^\s]*)\"} $fh_loaded dummy occt_ver
16 regexp {#\s*define\s+OCC_VERSION_DEVELOPMENT\s+\"([^\s]*)\"} $fh_loaded dummy occt_ver_add
17 if { "$occt_ver_add" != "" } { set occt_ver ${occt_ver}.$occt_ver_add }
22 # Generates Doxygen configuration file for Overview documentation
23 proc OverviewDoc_MakeDoxyfile {casDir outDir tagFileDir {doxyFileName} {generatorMode ""} DocFilesList verboseMode searchMode} {
25 set doxyFile [open $doxyFileName "w"]
27 set inputDir $casDir/dox
30 puts $doxyFile "DOXYFILE_ENCODING = UTF-8"
31 puts $doxyFile "PROJECT_NAME = \"Open CASCADE Technology\""
32 puts $doxyFile "PROJECT_NUMBER = [OverviewDoc_DetectCasVersion $casDir]"
33 puts $doxyFile "PROJECT_BRIEF = "
34 puts $doxyFile "PROJECT_LOGO = $inputDir/resources/occ_logo.png"
36 puts $doxyFile "OUTPUT_DIRECTORY = $outDir"
37 puts $doxyFile "CREATE_SUBDIRS = NO"
38 puts $doxyFile "OUTPUT_LANGUAGE = English"
39 puts $doxyFile "ABBREVIATE_BRIEF = \"The \$name class\" \
40 \"The \$name widget\" \
51 puts $doxyFile "FULL_PATH_NAMES = YES"
52 puts $doxyFile "INHERIT_DOCS = YES"
53 puts $doxyFile "TAB_SIZE = 4"
54 puts $doxyFile "MARKDOWN_SUPPORT = YES"
55 puts $doxyFile "EXTRACT_ALL = YES"
56 puts $doxyFile "CASE_SENSE_NAMES = NO"
57 puts $doxyFile "INLINE_INFO = YES"
58 puts $doxyFile "SORT_MEMBER_DOCS = YES"
59 puts $doxyFile "WARNINGS = YES"
60 puts $doxyFile "WARN_IF_UNDOCUMENTED = YES"
61 puts $doxyFile "WARN_IF_DOC_ERROR = YES"
62 puts $doxyFile "WARN_NO_PARAMDOC = NO"
63 puts $doxyFile "WARN_FORMAT = \"\$file:\$line: \$text\""
64 puts $doxyFile "INPUT_ENCODING = UTF-8"
65 puts $doxyFile "FILE_PATTERNS = *.md *.dox "
66 puts $doxyFile "RECURSIVE = YES"
67 puts $doxyFile "SOURCE_BROWSER = NO"
68 puts $doxyFile "INLINE_SOURCES = YES"
69 puts $doxyFile "COLS_IN_ALPHA_INDEX = 5"
72 puts $doxyFile "GENERATE_DOCSET = NO"
73 puts $doxyFile "GENERATE_HTMLHELP = NO"
74 puts $doxyFile "GENERATE_CHI = NO"
75 puts $doxyFile "GENERATE_QHP = NO"
76 puts $doxyFile "GENERATE_ECLIPSEHELP = NO"
77 puts $doxyFile "GENERATE_RTF = NO"
78 puts $doxyFile "GENERATE_MAN = NO"
79 puts $doxyFile "GENERATE_XML = NO"
80 puts $doxyFile "GENERATE_DOCBOOK = NO"
81 puts $doxyFile "GENERATE_AUTOGEN_DEF = NO"
82 puts $doxyFile "GENERATE_PERLMOD = NO"
84 set PARAM_INPUT "INPUT ="
85 set PARAM_IMAGEPATH "IMAGE_PATH = $inputDir/resources/ "
87 foreach docFile $DocFilesList {
88 set NEW_IMG_PATH [file normalize [file dirname "$inputDir/$docFile"]]
89 if { [string compare $NEW_IMG_PATH $casroot] != 0 } {
90 if {[file isdirectory "$NEW_IMG_PATH/images"]} {
91 append PARAM_IMAGEPATH " $NEW_IMG_PATH/images"
94 append PARAM_INPUT " " $inputDir/$docFile
96 puts $doxyFile $PARAM_INPUT
97 puts $doxyFile $PARAM_IMAGEPATH
99 if { $generatorMode == "HTML_ONLY"} {
100 # Set a reference to a TAGFILE
101 if { $tagFileDir != "" } {
102 if {[file exists $tagFileDir/OCCT.tag] == 1} {
103 set tagPath [OverviewDoc_GetRelPath $tagFileDir $outDir/html]
104 puts $doxyFile "TAGFILES = $tagFileDir/OCCT.tag=$tagPath/html"
108 puts $doxyFile "GENERATE_LATEX = NO"
109 puts $doxyFile "GENERATE_HTML = YES"
110 puts $doxyFile "HTML_COLORSTYLE_HUE = 220"
111 puts $doxyFile "HTML_COLORSTYLE_SAT = 100"
112 puts $doxyFile "HTML_COLORSTYLE_GAMMA = 80"
113 puts $doxyFile "HTML_TIMESTAMP = YES"
114 puts $doxyFile "HTML_DYNAMIC_SECTIONS = YES"
115 puts $doxyFile "HTML_INDEX_NUM_ENTRIES = 100"
116 puts $doxyFile "DISABLE_INDEX = YES"
117 puts $doxyFile "GENERATE_TREEVIEW = YES"
118 puts $doxyFile "ENUM_VALUES_PER_LINE = 8"
119 puts $doxyFile "TREEVIEW_WIDTH = 250"
120 puts $doxyFile "EXTERNAL_PAGES = NO"
121 # HTML Search engine options
122 if { [string tolower $searchMode] == "none" } {
123 puts $doxyFile "SEARCHENGINE = NO"
124 puts $doxyFile "SERVER_BASED_SEARCH = NO"
125 puts $doxyFile "EXTERNAL_SEARCH = NO"
127 puts $doxyFile "SEARCHENGINE = YES"
128 if { [string tolower $searchMode] == "local" } {
129 puts $doxyFile "SERVER_BASED_SEARCH = NO"
130 puts $doxyFile "EXTERNAL_SEARCH = NO"
131 } elseif { [string tolower $searchMode] == "server" } {
132 puts $doxyFile "SERVER_BASED_SEARCH = YES"
133 puts $doxyFile "EXTERNAL_SEARCH = NO"
134 } elseif { [string tolower $searchMode] == "external" } {
135 puts $doxyFile "SERVER_BASED_SEARCH = YES"
136 puts $doxyFile "EXTERNAL_SEARCH = YES"
138 puts "ERROR: Wrong search engine type"
143 puts $doxyFile "SEARCHDATA_FILE = searchdata.xml"
144 puts $doxyFile "SKIP_FUNCTION_MACROS = YES"
146 puts $doxyFile "FORMULA_FONTSIZE = 12"
147 puts $doxyFile "FORMULA_TRANSPARENT = YES"
148 puts $doxyFile "USE_MATHJAX = YES"
149 puts $doxyFile "MATHJAX_FORMAT = HTML-CSS"
150 puts $doxyFile "MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest"
152 } elseif { $generatorMode == "PDF_ONLY"} {
154 puts $doxyFile "GENERATE_HTML = NO"
155 puts $doxyFile "DISABLE_INDEX = YES"
156 puts $doxyFile "GENERATE_TREEVIEW = NO"
157 puts $doxyFile "PREDEFINED = PDF_ONLY"
158 puts $doxyFile "GENERATE_LATEX = YES"
159 puts $doxyFile "COMPACT_LATEX = YES"
160 puts $doxyFile "PDF_HYPERLINKS = YES"
161 puts $doxyFile "USE_PDFLATEX = YES"
162 puts $doxyFile "LATEX_BATCHMODE = YES"
163 puts $doxyFile "LATEX_OUTPUT = latex"
164 puts $doxyFile "LATEX_CMD_NAME = latex"
165 puts $doxyFile "MAKEINDEX_CMD_NAME = makeindex"
171 # Returns the relative path between two directories
172 proc OverviewDoc_GetRelPath {targetFile currentpath} {
173 set cc [file split [file normalize $currentpath]]
174 set tt [file split [file normalize $targetFile]]
176 if {![string equal [lindex $cc 0] [lindex $tt 0]]} {
178 return -code error "$targetFile not on same volume as $currentpath"
180 while {[string equal [lindex $cc 0] [lindex $tt 0]] && [llength $cc] > 0} {
181 # discard matching components from the front
182 set cc [lreplace $cc 0 0]
183 set tt [lreplace $tt 0 0]
186 if {[llength $cc] == 0} {
187 # just the file name, so targetFile is lower down (or in same place)
191 for {set i 0} {$i < [llength $cc]} {incr i} {
194 # stick it all together (the eval is to flatten the targetFile list)
195 return [eval file join $prefix $tt]
198 # Prints Help message
199 proc OverviewDoc_PrintHelpMessage {} {
200 puts "\nUsage : occdoc \[-h\] \[-html\] \[-pdf\] \[-m=<list of files>\] \[-l=<document name>\] \[-v\] \[-s\]"
202 puts " Options are : "
203 puts " -html : To generate HTML files"
204 puts " (cannot be used with -pdf)"
205 puts " -pdf : To generate PDF files"
206 puts " (cannot be used with -html)"
207 puts " -m=<modules_list> : Specifies list of documents to generate."
208 puts " If it is not specified, all files, "
209 puts " mentioned in FILES.txt are processed."
210 puts " -l=<document_name> : Specifies the document caption "
211 puts " for a single document"
212 puts " -h : Prints help message"
213 puts " -v : Specifies the Verbose mode"
214 puts " (info on all script actions is shown)"
215 puts " -s=<search_mode> : Specifies the Search mode of HTML documents."
216 puts " Can be: none | local | server | external | "
217 puts " : Can be used only with -html option"
220 # Parses command line arguments
221 proc OverviewDoc_ParseArguments {arguments} {
225 array set args_values {}
227 foreach arg $arguments {
228 if {[regexp {^(-)[a-z]+$} $arg] == 1} {
229 set name [string range $arg 1 [string length $arg]-1]
230 lappend args_names $name
231 set args_values($name) "NULL"
233 } elseif {[regexp {^(-)[a-z]+=.+$} $arg] == 1} {
234 set equal_symbol_position [string first "=" $arg]
235 set name [string range $arg 1 $equal_symbol_position-1]
236 lappend args_names $name
237 set value [string range $arg $equal_symbol_position+1 [string length $arguments]-1]
239 # To parse a list of values for -m parameter
240 if { [string first "," $value] != -1 } {
241 set value [split $value ","];
243 set args_values($name) $value
245 puts "Error in argument $arg"
252 # Loads a list of docfiles from file FILES.txt
253 proc OverviewDoc_LoadFilesList {} {
255 set INPUTDIR [file normalize [file dirname [info script]]]
257 global available_docfiles
258 set available_docfiles {}
260 # Read data from file
261 if { [file exists "$INPUTDIR/FILES.txt"] == 1 } {
262 set FILE [open "$INPUTDIR/FILES.txt" r]
264 set line [string trim [gets $FILE]]
266 # trim possible comments starting with '#'
267 set line [regsub {\#.*} $line {}]
270 lappend available_docfiles $line
284 # Writes new tex file for conversion from tex to pdf for a specific doc
285 proc OverviewDoc_MakeRefmanTex {fileName latexDir docLabel verboseMode} {
287 if {$verboseMode == "YES"} {
288 puts "INFO: Making refman.tex file for $fileName"
290 set DOCNAME "$latexDir/refman.tex"
291 if {[file exists $DOCNAME] == 1} {
292 file delete -force $DOCNAME
294 set texfile [open $DOCNAME w]
296 puts $texfile "\\batchmode"
297 puts $texfile "\\nonstopmode"
298 puts $texfile "\\documentclass\[oneside\]{article}"
299 puts $texfile "\n% Packages required by doxygen"
300 puts $texfile "\\usepackage{calc}"
301 puts $texfile "\\usepackage{doxygen}"
302 puts $texfile "\\usepackage{graphicx}"
303 puts $texfile "\\usepackage\[utf8\]{inputenc}"
304 puts $texfile "\\usepackage{makeidx}"
305 puts $texfile "\\usepackage{multicol}"
306 puts $texfile "\\usepackage{multirow}"
307 puts $texfile "\\usepackage{textcomp}"
308 puts $texfile "\\usepackage{amsmath}"
309 puts $texfile "\\usepackage\[table\]{xcolor}"
310 puts $texfile "\\usepackage{indentfirst}"
312 puts $texfile "% Font selection"
313 puts $texfile "\\usepackage\[T1\]{fontenc}"
314 puts $texfile "\\usepackage{mathptmx}"
315 puts $texfile "\\usepackage\[scaled=.90\]{helvet}"
316 puts $texfile "\\usepackage{courier}"
317 puts $texfile "\\usepackage{amssymb}"
318 puts $texfile "\\usepackage{sectsty}"
319 puts $texfile "\\renewcommand{\\familydefault}{\\sfdefault}"
320 puts $texfile "\\allsectionsfont{%"
321 puts $texfile " \\fontseries{bc}\\selectfont%"
322 puts $texfile " \\color{darkgray}%"
324 puts $texfile "\\renewcommand{\\DoxyLabelFont}{%"
325 puts $texfile " \\fontseries{bc}\\selectfont%"
326 puts $texfile " \\color{darkgray}%"
329 puts $texfile "% Page & text layout"
330 puts $texfile "\\usepackage{geometry}"
331 puts $texfile "\\geometry{%"
332 puts $texfile " a4paper,%"
333 puts $texfile " top=2.5cm,%"
334 puts $texfile " bottom=2.5cm,%"
335 puts $texfile " left=2.5cm,%"
336 puts $texfile " right=2.5cm%"
338 puts $texfile "\\tolerance=750"
339 puts $texfile "\\hfuzz=15pt"
340 puts $texfile "\\hbadness=750"
341 puts $texfile "\\setlength{\\emergencystretch}{15pt}"
342 puts $texfile "\\setlength{\\parindent}{0cm}";#0.75cm
343 puts $texfile "\\setlength{\\parskip}{0.2cm}"; #0.2
344 puts $texfile "\\makeatletter"
345 puts $texfile "\\renewcommand{\\paragraph}{%"
346 puts $texfile " \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{%"
347 puts $texfile "\\normalfont\\normalsize\\bfseries\\SS@parafont%"
350 puts $texfile "\\renewcommand{\\subparagraph}{%"
351 puts $texfile " \\@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{%"
352 puts $texfile "\\normalfont\\normalsize\\bfseries\\SS@subparafont%"
355 puts $texfile "\\makeatother"
357 puts $texfile "% Headers & footers"
358 puts $texfile "\\usepackage{fancyhdr}"
359 puts $texfile "\\pagestyle{fancyplain}"
360 puts $texfile "\\fancyhead\[LE\]{\\fancyplain{}{\\bfseries\\thepage}}"
361 puts $texfile "\\fancyhead\[CE\]{\\fancyplain{}{}}"
362 puts $texfile "\\fancyhead\[RE\]{\\fancyplain{}{\\bfseries\\leftmark}}"
363 puts $texfile "\\fancyhead\[LO\]{\\fancyplain{}{\\bfseries\\rightmark}}"
364 puts $texfile "\\fancyhead\[CO\]{\\fancyplain{}{}}"
365 puts $texfile "\\fancyhead\[RO\]{\\fancyplain{}{\\bfseries\\thepage}}"
366 puts $texfile "\\fancyfoot\[LE\]{\\fancyplain{}{}}"
367 puts $texfile "\\fancyfoot\[CE\]{\\fancyplain{}{}}"
368 puts $texfile "\\fancyfoot\[RE\]{\\fancyplain{}{\\bfseries\\scriptsize (c) Open CASCADE 2001\-2013}}"
369 puts $texfile "\\fancyfoot\[LO\]{\\fancyplain{}{\\bfseries\\scriptsize (c) Open CASCADE 2001\-2013}}"
370 puts $texfile "\\fancyfoot\[CO\]{\\fancyplain{}{}}"
371 puts $texfile "\\fancyfoot\[RO\]{\\fancyplain{}{}}"
372 puts $texfile "\\renewcommand{\\footrulewidth}{0.4pt}"
373 puts $texfile "\\renewcommand{\\sectionmark}\[1\]{%"
374 puts $texfile " \\markright{\\thesection\\ #1}%"
377 puts $texfile "% Indices & bibliography"
378 puts $texfile "\\usepackage{natbib}"
379 puts $texfile "\\usepackage\[titles\]{tocloft}"
380 puts $texfile "\\renewcommand{\\cftsecleader}{\\cftdotfill{\\cftdotsep}}"
381 puts $texfile "\\setcounter{tocdepth}{3}"
382 puts $texfile "\\setcounter{secnumdepth}{5}"
383 puts $texfile "\\makeindex"
385 puts $texfile "% Hyperlinks (required, but should be loaded last)"
386 puts $texfile "\\usepackage{ifpdf}"
387 puts $texfile "\\ifpdf"
388 puts $texfile " \\usepackage\[pdftex,pagebackref=true\]{hyperref}"
389 puts $texfile "\\else"
390 puts $texfile " \\usepackage\[ps2pdf,pagebackref=true\]{hyperref}"
392 puts $texfile "\\hypersetup{%"
393 puts $texfile " colorlinks=true,%"
394 puts $texfile " linkcolor=black,%"
395 puts $texfile " citecolor=black,%"
396 puts $texfile " urlcolor=blue,%"
397 puts $texfile " unicode%"
400 puts $texfile "% Custom commands"
401 puts $texfile "\\newcommand{\\clearemptydoublepage}{%"
402 puts $texfile " \\newpage{\\pagestyle{empty}\\cleardoublepage}%"
405 puts $texfile "%===== C O N T E N T S =====\n"
406 puts $texfile "\\begin{document}"
408 puts $texfile "% Titlepage & ToC"
409 puts $texfile "\\hypersetup{pageanchor=false}"
410 puts $texfile "\\pagenumbering{roman}"
411 puts $texfile "\\begin{titlepage}"
412 puts $texfile "\\vspace*{7cm}"
413 puts $texfile "\\begin{center}%"
414 puts $texfile "\\includegraphics\[width=0.75\\textwidth, height=0.2\\textheight\]{../../../dox/resources/occt_logo.png}\\\\"; #\\\\\\\\
415 puts $texfile "{\\Large Open C\\-A\\-S\\-C\\-A\\-D\\-E Technology \\\\\[1ex\]\\Large [OverviewDoc_DetectCasVersion $latexDir/../../../] }\\\\"
416 puts $texfile "\\vspace*{1cm}"
417 puts $texfile "{\\Large $docLabel}\\\\"
418 puts $texfile "\\vspace*{1cm}"
419 puts $texfile "{\\large Generated by Doxygen 1.8.4}\\\\"
420 puts $texfile "\\vspace*{0.5cm}"
421 puts $texfile "{\\small \\today}\\"
422 puts $texfile "\\end{center}"
423 puts $texfile "\\end{titlepage}"
424 puts $texfile "\\clearpage"
425 puts $texfile "\\pagenumbering{roman}"
426 puts $texfile "\\tableofcontents"
427 puts $texfile "\\newpage"
428 puts $texfile "\\pagenumbering{arabic}"
429 puts $texfile "\\hypersetup{pageanchor=true}"
431 puts $texfile "\\let\\stdsection\\section"
432 puts $texfile " \\renewcommand\\section{\\pagebreak\\stdsection}"
433 puts $texfile "\\hypertarget{$fileName}{}"
434 puts $texfile "\\input{$fileName}"
436 puts $texfile "% Index"
437 puts $texfile "\\newpage"
438 puts $texfile "\\phantomsection"
439 puts $texfile "\\addcontentsline{toc}{part}{Index}"
440 puts $texfile "\\printindex\n"
441 puts $texfile "\\end{document}"
446 # Postprocesses generated TeX files
447 proc OverviewDoc_ProcessTex {{texFiles {}} {latexDir} verboseMode} {
449 foreach TEX $texFiles {
450 if {$verboseMode == "YES"} {
451 puts "INFO: Preprocessing file $TEX"
454 if {![file exists $TEX]} {
455 puts "file $TEX doesn't exist"
459 set IN_F [open "$TEX" r]
460 set TMPFILENAME "$latexDir/temp.tex"
462 set OUT_F [open $TMPFILENAME w]
465 set line [gets $IN_F]
466 if { [string first "\\includegraphics" $line] != -1 } {
467 # Center images in TeX files
468 set line "\\begin{center}\n $line\n\\end{center}"
469 } elseif { [string first "\\subsection" $line] != -1 } {
470 # Replace \subsection with \section tag
471 regsub -all "\\\\subsection" $line "\\\\section" line
472 } elseif { [string first "\\subsubsection" $line] != -1 } {
473 # Replace \subsubsection with \subsection tag
474 regsub -all "\\\\subsubsection" $line "\\\\subsection" line
475 } elseif { [string first "\\paragraph" $line] != -1 } {
476 # Replace \paragraph with \subsubsection tag
477 regsub -all "\\\\paragraph" $line "\\\\subsubsection" line
487 file delete -force $TEX
488 file rename $TMPFILENAME $TEX
492 # Main procedure for documents compilation
493 proc OverviewDoc_Main { {docfiles {}} generatorMode docLabel verboseMode searchMode} {
495 set INDIR [file normalize [file dirname [info script]]]
496 set CASROOT [file normalize [file dirname "$INDIR/../../"]]
497 set OUTDIR $CASROOT/doc
498 set PDFDIR $OUTDIR/overview/pdf
499 set HTMLDIR $OUTDIR/overview/html
500 set LATEXDIR $OUTDIR/overview/latex
501 set TAGFILEDIR $OUTDIR/refman
502 set DOXYFILE $OUTDIR/OCCT.cfg
504 # Create or clean the output folders
505 if {[file exists $OUTDIR] == 0} {
508 if {[file exists $HTMLDIR] == 0} {
511 if {[file exists $PDFDIR] == 0} {
515 if {[file exists $LATEXDIR]} {
516 #file delete {*}[glob -nocomplain $LATEXDIR/*.*]
517 file delete -force $LATEXDIR
521 # Run tools to compile documents
522 puts "[clock format [clock seconds] -format {%Y-%m-%d %H:%M}] Generating Doxyfile..."
524 OverviewDoc_MakeDoxyfile $CASROOT "$OUTDIR/overview" $TAGFILEDIR $DOXYFILE $generatorMode $docfiles $verboseMode $searchMode
527 if { $generatorMode == "HTML_ONLY"} {
528 puts "[clock format [clock seconds] -format {%Y-%m-%d %H:%M}] Generating HTML files..."
530 set RESULT [catch {exec doxygen $DOXYFILE > $OUTDIR/doxygen_out.log} DOX_ERROR]
532 if {[llength [split $DOX_ERROR "\n"]] > 1} {
533 if {$verboseMode == "YES"} {
534 puts "See Doxygen log in $OUTDIR/doxygen_warnings_and_errors.log"
536 set DOX_ERROR_FILE [open "$OUTDIR/doxygen_warnings_and_errors.log" "w"]
537 puts $DOX_ERROR_FILE $DOX_ERROR
538 close $DOX_ERROR_FILE
543 # Close the Doxygen application
546 # Start PDF generation routine
547 if { $generatorMode == "PDF_ONLY" } {
548 puts "[clock format [clock seconds] -format {%Y-%m-%d %H:%M}] Generating PDF files..."
550 set OS $::tcl_platform(platform)
551 if { $OS == "unix" } {
553 } elseif { $OS == "windows" } {
557 # Prepare a list of TeX files, generated by Doxygen
560 set TEXFILES [glob $LATEXDIR -type f -directory $LATEXDIR -tails "*.tex" ]
561 set REFMAN_IDX [lsearch $TEXFILES "refman.tex"]
562 set TEXFILES [lreplace $TEXFILES $REFMAN_IDX $REFMAN_IDX]
565 set IDX [lsearch $TEXFILES "$LATEXDIR"]
566 while { $IDX != -1} {
567 set TEXFILES [lreplace $TEXFILES $IDX $IDX]
568 set IDX [lsearch $TEXFILES "$LATEXDIR"]
571 if {$verboseMode == "YES"} {
572 puts "Preprocessing generated TeX files..."
574 OverviewDoc_ProcessTex $TEXFILES $LATEXDIR $verboseMode
576 if {$verboseMode == "YES"} {
577 puts "Generating PDF files from TeX files..."
579 foreach TEX $TEXFILES {
580 # Rewrite existing REFMAN.tex file...
581 set TEX [string range $TEX 0 [ expr "[string length $TEX] - 5"]]
582 OverviewDoc_MakeRefmanTex $TEX $LATEXDIR $docLabel $verboseMode
584 if {$verboseMode == "YES"} {
585 puts "INFO: Generating PDF file from $TEX"
586 # ...and use it to generate PDF from TeX...
587 puts "Executing $LATEXDIR/make$PREFIX..."
589 set RESULT [catch {eval exec [auto_execok $LATEXDIR/make$PREFIX] > "$OUTDIR/pdflatex_out.log"} LaTeX_ERROR]
591 if {[llength [split $LaTeX_ERROR "\n"]] > 1} {
592 if {$verboseMode == "YES"} {
593 puts "See Latex log in $OUTDIR/pdflatex_warnings_and_errors.log"
595 set LaTeX_ERROR_FILE [open "$OUTDIR/pdflatex_warnings_and_errors.log" "w"]
596 puts $LaTeX_ERROR_FILE $LaTeX_ERROR
597 close $LaTeX_ERROR_FILE
603 # ...and place it to the specific folder
604 if { [file exists $PDFDIR/$TEX.pdf] == 1 } {
605 file delete -force $PDFDIR/$TEX.pdf
608 if {![file exists "$LATEXDIR/refman.pdf"]} {
609 puts "Error: file $LATEXDIR/refman.pdf does not exist"
613 file rename $LATEXDIR/refman.pdf "$PDFDIR/$TEX.pdf"
618 puts "[clock format [clock seconds] -format {%Y-%m-%d %H:%M}] Generation completed"
619 if { $generatorMode == "HTML_ONLY" } {
620 puts "View generated HTML documentation by opening: "
621 set RESFILE $OUTDIR/overview/html/index.html
624 if { $generatorMode == "PDF_ONLY" } {
625 puts "PDF files are generated in: "
626 puts "$OUTDIR/overview/pdf folder"
630 # A command for User Documentation compilation
633 set GEN_MODE "HTML_ONLY"
636 set DOCLABEL "Default OCCT Document"
638 set SEARCH_MODE "none"
640 global available_docfiles
644 # Load list of docfiles
645 if { [OverviewDoc_LoadFilesList] != 0 } {
646 puts "ERROR: File FILES.txt was not found"
651 if {[OverviewDoc_ParseArguments $args] == 1} {
655 foreach arg_n $args_names {
657 OverviewDoc_PrintHelpMessage
659 } elseif {$arg_n == "html"} {
660 set GEN_MODE "HTML_ONLY"
661 } elseif {$arg_n == "pdf"} {
662 set GEN_MODE "PDF_ONLY"
663 } elseif {$arg_n == "v"} {
665 } elseif {$arg_n == "m"} {
666 if {$args_values(m) != "NULL"} {
667 set DOCFILES $args_values(m)
669 puts "Error in argument m"
673 # Check if all chosen docfiles are correct
674 foreach docfile $DOCFILES {
675 if { [lsearch $available_docfiles $docfile] == -1 } {
676 puts "File \"$docfile\" is not presented in the list of available docfiles"
677 puts "Please, specify the correct docfile name"
680 puts "File $docfile is presented in FILES.TXT"
683 } elseif {$arg_n == "l"} {
684 if { [llength $DOCFILES] <= 1 } {
685 if {$args_values(l) != "NULL"} {
686 set DOCLABEL $args_values(l)
688 puts "Error in argument l"
692 } elseif {$arg_n == "s"} {
693 if {$args_values(s) != "NULL"} {
694 set SEARCH_MODE $args_values(s)
696 puts "Error in argument s"
700 puts "\nWrong argument: $arg_n"
701 OverviewDoc_PrintHelpMessage
706 # Specify verbose mode
707 if { $GEN_MODE != "PDF_ONLY" && [llength $DOCFILES] > 1 } {
711 # If we don't specify list for docfiles with -m argument,
712 # we assume that we have to generate all docfiles
713 if { [llength $DOCFILES] == 0 } {
714 set DOCFILES $available_docfiles
717 # Start main activities
718 OverviewDoc_Main $DOCFILES $GEN_MODE $DOCLABEL $VERB_MODE $SEARCH_MODE