diff --git a/Manual_tools/src/Makefile b/Manual_tools/src/Makefile index af69b14350b..9209cdc99bc 100644 --- a/Manual_tools/src/Makefile +++ b/Manual_tools/src/Makefile @@ -39,7 +39,7 @@ LATEX_CONV_INPUTS = . # C++ Compiler Options: # CXXFLAGS = -v -CXXFLAGS = -g -O2 +CXXFLAGS = -g -O0 # C Compiler: Gnu gcc 2.6.3 (or above) or the usual system cc: # CC = gcc diff --git a/Manual_tools/src/internal_macros.C b/Manual_tools/src/internal_macros.C index 1a11a53ac20..61bf9f94a6a 100644 --- a/Manual_tools/src/internal_macros.C +++ b/Manual_tools/src/internal_macros.C @@ -31,10 +31,11 @@ #include -typedef std::map< string, string, Case_insensitive_string_greater_than > String_map; -typedef hash_map< string, String_map > String_map_table; -String_map_table string_map_table; +typedef std::map< string, string, Case_insensitive_string_greater_than > String_map; +hash_map< string, String_map > sorted_map_table; + +hash_map< string, hash_map< string, string > > hash_map_table; // ====================================================================== // External visible functions @@ -1328,7 +1329,7 @@ sorted_map_add_to( const string&, string param[], size_t n, size_t opt) { if( value[0] == '\\' ) value = macroX( value ); - string_map_table[name][ key ] = value; + sorted_map_table[name][ key ] = value; return string(); } @@ -1341,7 +1342,7 @@ sorted_map_foreach( const string&, string param[], size_t n, size_t opt) { if( func[0] != '\\' ) return string("!! Error: argument to \\lciSortedMapForeach has to be a function"); - const String_map& m = string_map_table[name]; + const String_map& m = sorted_map_table[name]; string func_params[2]; Macro_item item = fetchMacro( func ); for( String_map::const_iterator it = m.begin(); it != m.end(); ++it ) { @@ -1360,7 +1361,7 @@ string sorted_map_clear( const string&, string param[], size_t n, size_t opt) { NParamCheck( 1, 0); string name = param[0]; - string_map_table[name].clear(); + sorted_map_table[name].clear(); return string(); } @@ -1368,12 +1369,61 @@ string sorted_map_is_empty( const string&, string param[], size_t n, size_t opt) { NParamCheck( 1, 0); string name = param[0]; - if( string_map_table[name].empty() ) + if( sorted_map_table[name].empty() ) return string("\\lcTrue"); else return string("\\lcFalse"); } +/* hash maps */ + +string +hash_map_insert( const string&, string param[], size_t n, size_t opt) { + NParamCheck( 3, 0); + string name = param[0]; + string key = param[1]; + string value = param[2]; + + crop_string( key ); + crop_string( value ); + + if( key[0] == '\\' ) + key = macroX( key ); + if( value[0] == '\\' ) + value = macroX( value ); + crop_string( name ); + crop_string( key ); + crop_string( value ); + + hash_map_table[name][ key ] = value; + return string(); +} + +string +hash_map_is_defined( const string&, string param[], size_t n, size_t opt) { + NParamCheck( 2, 0); + string name = param[0]; + string key = param[1]; + if( hash_map_table[name].find( key ) == hash_map_table[name].end() ) + return string("\\lcFalse"); + else + return string("\\lcTrue"); +} + +string +hash_map_get( const string&, string param[], size_t n, size_t opt) { + NParamCheck( 2, 0); + string name = param[0]; + string key = param[1]; + return hash_map_table[name][key]; +} + +string +hash_map_clear( const string&, string param[], size_t n, size_t opt) { + NParamCheck( 1, 0); + hash_map_table[ param[0] ].clear(); + return string(); +} /* regular expressions */ @@ -1439,12 +1489,17 @@ string handle_shell_command( const string&, string param[], size_t n, size_t opt) { NParamCheck( 1, 0); string cmd = param[0]; - std::stringstream out, err; + std::stringstream out, err, exitcode; int retval = execute_shell_command( cmd, out, err ); - if (retval == 0 ) - return out.str(); - else - return string("\\lciError{error while executing " + cmd + "}"); + exitcode << retval; + insertInternalGlobalMacro( "\\lciShellExitCode", exitcode.str() ); + insertInternalGlobalMacro( "\\lciShellStdout", out.str() ); + insertInternalGlobalMacro( "\\lciShellStderr", err.str() ); + if( retval != 0 ) { + return string("\\lciError{error while executing \"" + cmd + "\". error log:" + err.str()); + } else { + return string(); + } } @@ -1523,6 +1578,11 @@ void init_internal_macros() { insertInternalGlobalMacro( "\\lciSortedMapClear", sorted_map_clear,1 ); insertInternalGlobalMacro( "\\lciSortedMapIsEmpty", sorted_map_is_empty,1 ); + insertInternalGlobalMacro( "\\lciHashMapInsert", hash_map_insert,3 ); + insertInternalGlobalMacro( "\\lciHashMapIsDefined", hash_map_is_defined,2 ); + insertInternalGlobalMacro( "\\lciHashMapGet", hash_map_get,2 ); + insertInternalGlobalMacro( "\\lciHashMapClear", hash_map_clear,1 ); + insertInternalGlobalMacro( "\\lciIfFileExists", if_file_exists, 1); insertInternalGlobalMacro( "\\lciCopyFile", copy_file, 2); diff --git a/Manual_tools/src/latex_converter_config/html/cc_manual.sty b/Manual_tools/src/latex_converter_config/html/cc_manual.sty index 1901459fcd9..1667915c4d8 100644 --- a/Manual_tools/src/latex_converter_config/html/cc_manual.sty +++ b/Manual_tools/src/latex_converter_config/html/cc_manual.sty @@ -1147,9 +1147,69 @@ \newcommand{\ccBenchmarkInstance}[1]{ -\lciShellCommand{echo bla} +\begingroup +\def\lciBenchmarkPath{} +\lciShellCommand{perl -e ' +$location = "#C1"; +$pattern="-name \"*.bff\""; +if( $location =~ /\/([^\/]*\*[^\/]*)$/ ) { + $pattern = " -name \"$1\""; + $location = $`; +} +if( $location =~ /\/$/ ) { $location =$`; } +$benchname=$location; +if( $benchname =~ /^[^\/]+\/[^\/]+\/(.*)$/ ) { $tarname = $1; } +$benchname =~ s/\//__/g; +$benchname =~ s/_data_//; +if( ! -d $location && -d "../benchmark/$location" ) { + $location = "../benchmark/$location"; +} +print "\\def\\benchlocation{$location}\\def\\benchpattern{$pattern}\\def\\benchname{$benchname}"; +' +} +\lciShellStdout +\ccBenchmarkGetUniqeBenchname{\benchname}{\uniquebenchname} +%\begin{alltt} +%location = \benchlocation +% +%pattern = \benchpattern +% +%tarname = \uniquebenchname +% +%\end{alltt} +\ccBenchmarkInstanceX{\benchlocation}{\benchpattern}{\uniquebenchname}{\lciTmpPath} +\endgroup } +\gdef\lciBenchmarkTarnameCounter{0} + + +\newcommand{\ccBenchmarkGetUniqeBenchname}[2]{% + \lciHashMapIsDefined{tarnames}{#XC1}{}{\lciHashMapInsert{tarnames}{#XC1}{0}}% + \savebox{\benchvalue}{\lciHashMapGet{tarnames}{#XC1}}% + \lciGlobalAddTo{\benchvalue}{1}% + \ccBenchmarkGetFreshTarnameX{#XC1}{\benchvalue}% + \begin{alltt}% + \savebox{#C2}{#C1__\benchvalue{}}% + \end{alltt}% +} + +\newcommand{\ccBenchmarkGetFreshTarnameX}[2]{% + \lciHashMapInsert{tarnames}{#1}{#XC2}% +} + +\newcommand{\ccBenchmarkInstanceX}[4]{ +\lciShellCommand{ +OLDPWD=`pwd`; +mkdir -p #XC4/benchmarks/#XC3; +cd #XC4/benchmarks; +ln -s `find $OLDPWD/#XC1 #XC2` #XC3; +tar -czhf #XC3.tar.gz #XC3; +rm -rf #XC3; +cd $OLDPWD; +} +\lcRawHtml{#XC3.tar.gz} +} % ___________________________________________________________________________ % ########################################################################### % | EOF diff --git a/Manual_tools/src/latex_converter_config/html/latex.sty b/Manual_tools/src/latex_converter_config/html/latex.sty index e65f95da32a..af91a71c25b 100644 --- a/Manual_tools/src/latex_converter_config/html/latex.sty +++ b/Manual_tools/src/latex_converter_config/html/latex.sty @@ -2077,9 +2077,9 @@ td.TocChapter { font-weight: normal; } {\gdef\lciCurrentSaveboxName{#C1}\lciPushOutput{savebox}} {\lciPopOutput\lciStoreSaveboxX{\lciCurrentSaveboxName}} -\newcommand{\sbox}[2]{ +\newcommand{\sbox}[2]{% \begin{savebox}{#1}% - #2 + #2% \end{savebox}% } \newcommand{\savebox}[2]{\sbox{#1}{#2}} diff --git a/Manual_tools/src/latex_to_html b/Manual_tools/src/latex_to_html index 8fc2e298496..31fe1e13c3c 100755 --- a/Manual_tools/src/latex_to_html +++ b/Manual_tools/src/latex_to_html @@ -599,10 +599,18 @@ convert() { done cd $CurrentDir done + cd $CurrentDir + lgout "pwd: `pwd`" cp -r ${ConfigHtml}/Biblio ${OutDir} cp ${TmpDir}/comments.xml ${OutDir} + if [ -d ${TmpDir}/benchmarks ] ; then + mkdir -p ${OutDir}/benchmarks + cp -r ${TmpDir}/benchmarks/*.tar.gz ${OutDir}/benchmarks + else + lgout -n "cannot find benchmarks!" + fi # finish, write timing to logfile and close it # ------------------------------------------------------- diff --git a/Manual_tools/sty/cc_manual.sty b/Manual_tools/sty/cc_manual.sty index 76353d4732b..29e85fbb035 100644 --- a/Manual_tools/sty/cc_manual.sty +++ b/Manual_tools/sty/cc_manual.sty @@ -3357,6 +3357,7 @@ Reference~Manual}% \newcommand{\ccPkgHowToCiteCgal}[1]{} \newenvironment{ccPkgDescription}{\ccPkgName}{} +\newcommand{\ccBenchmarkInstance}[1]{} % ___________________________________________________________________________ % ########################################################################### % | EOF