/*************************************************************************** cmdlineoptions.cpp - description ------------------- begin : Sun Nov 25 2001 copyright : (C) 2001-2008 by Andre Simon email : andre.simon1@gmx.de ***************************************************************************/ /* This file is part of Highlight. Highlight is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Highlight is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Highlight. If not, see . */ #include "cmdlineoptions.h" #include "platform_fs.h" #include "configurationreader.h" #include "datadir.h" #include #include #include "arg_parser.h" using namespace std; CmdLineOptions::CmdLineOptions ( const int argc, const char *argv[] ) : numberSpaces ( 0 ), lineNrWidth ( 5 ), lineLength ( 80 ), lineNrStart ( 1 ), wrappingStyle ( highlight::WRAP_DISABLED ), outputType ( highlight::HTML ), keywordCase ( StringTools::CASE_UNCHANGED ), className ( "hl" ), opt_syntax ( false ), opt_include_style ( false ), opt_help ( false ), opt_version ( false ), opt_verbose ( false ), opt_print_config ( false ), opt_linenumbers ( false ), opt_style ( false ), opt_batch_mode ( false ), opt_fragment ( false ) , opt_attach_line_anchors ( false ), opt_show_themes ( false ), opt_show_langdefs ( false ), opt_printindex ( false ), opt_quiet ( false ), opt_replacequotes ( false ), opt_babel ( false ), opt_print_progress ( false ), opt_fill_zeroes ( false ), opt_stylepath_explicit ( false ), opt_force_output ( false ), opt_ordered_list ( false ), opt_fnames_as_anchors ( false ), opt_validate ( false ), opt_inline_css ( false ), opt_enclose_pre ( false ), opt_char_styles ( false ), opt_pretty_symbols ( false ), opt_delim_CR (false), opt_print_style(false), opt_no_trailing_nl(false), configFileRead ( false ), anchorPrefix ( "l" ), helpLang ( "en" ), encodingName ( "ISO-8859-1" ) { loadConfigurationFile(); enum Optcode { S_OPT_ADDCONFDIR = 256, S_OPT_ENCLOSE_PRE, S_OPT_FORCE_OUTPUT, S_OPT_INLINE_CSS, S_OPT_KW_CASE, S_OPT_MARK_LINES, S_OPT_PRINT_CONFIG, S_OPT_TEST_INPUT, S_OPT_SVG_WIDTH, S_OPT_SVG_HEIGHT, S_OPT_CLASSNAME, S_OPT_RTF_CHAR_STYLES, S_OPT_SKIP_UNKNOWN, S_OPT_COMPAT_DOC, S_OPT_COMPAT_NODOC, S_OPT_COMPAT_TAB, S_OPT_COMPAT_CSS, S_OPT_COMPAT_OUTDIR, S_OPT_COMPAT_FAILSAFE, S_OPT_COMPAT_OUTFORMAT, S_OPT_COMPAT_SRCLANG, S_OPT_COMPAT_LINENUM, S_OPT_COMPAT_LINEREF, S_OPT_CTAGS_FILE, S_OPT_PRETTY_SYMBOLS, S_OPT_EOL_DELIM_CR, S_OPT_START_NESTED, S_OPT_PRINT_STYLE, S_OPT_NO_TRAILING_NL }; const Arg_parser::Option options[] = { { 'a', OPT_ANCHORS, Arg_parser::no }, { 'A', OPT_ANSI, Arg_parser::no }, { 'b', OPT_BABEL, Arg_parser::no }, { 'B', OPT_BATCHREC, Arg_parser::yes }, { 'c', OPT_STYLE_OUT, Arg_parser::yes }, { 'C', OPT_INDEXFILE, Arg_parser::no }, { 'd', OPT_DOC_TITLE, Arg_parser::yes }, { 'D', OPT_DATADIR, Arg_parser::yes }, { 'e', OPT_STYLE_IN, Arg_parser::yes }, { 'E', OPT_ADDDATADIR, Arg_parser::yes }, { 'f', OPT_FRAGMENT, Arg_parser::no }, { 'F', OPT_FORMAT, Arg_parser::yes }, { S_OPT_CLASSNAME, OPT_CLASSNAME, Arg_parser::yes }, { 'h', OPT_HELP, Arg_parser::no }, { 'H', OPT_HTML, Arg_parser::no }, { 'i', OPT_IN, Arg_parser::yes }, { 'I', OPT_INC_STYLE, Arg_parser::no }, { 'j', OPT_LNR_LEN, Arg_parser::yes }, { 'J', OPT_LINE_LEN, Arg_parser::yes }, { 'k', OPT_BASE_FONT, Arg_parser::yes }, { 'K', OPT_BASE_FONT_SIZE, Arg_parser::yes }, { 'l', OPT_LINENO, Arg_parser::no }, { 'L', OPT_LATEX, Arg_parser::no }, { 'm', OPT_LNR_START, Arg_parser::yes }, { 'M', OPT_XTERM256, Arg_parser::no }, { 'n', OPT_ORDERED_LIST, Arg_parser::no }, { 'N', OPT_ANCHOR_FN, Arg_parser::no }, { 'o', OPT_OUT, Arg_parser::yes }, { 'O', OPT_OUTDIR, Arg_parser::yes }, { 'p', OPT_LISTLANGS, Arg_parser::no }, { 'P', OPT_PROGRESSBAR, Arg_parser::no }, { 'q', OPT_QUIET, Arg_parser::no }, { 'Q', OPT_VERSION, Arg_parser::no }, { 'r', OPT_REPLACE_QUOTES, Arg_parser::no }, { 'R', OPT_RTF, Arg_parser::no }, { 's', OPT_STYLE, Arg_parser::yes }, { 'S', OPT_SYNTAX, Arg_parser::yes }, { 't', OPT_DELTABS, Arg_parser::yes }, { 'T', OPT_TEX, Arg_parser::no }, { 'u', OPT_ENCODING, Arg_parser::yes }, { 'v', OPT_VERBOSE, Arg_parser::no }, { 'V', OPT_WRAPSIMPLE, Arg_parser::no }, { 'w', OPT_LISTTHEMES, Arg_parser::no }, { 'W', OPT_WRAP, Arg_parser::no }, { 'x', OPT_RTF_PAGE_SIZE, Arg_parser::yes }, { 'X', OPT_XHTML, Arg_parser::no }, { 'y', OPT_ANCHOR_PFX, Arg_parser::yes }, { 'z', OPT_FILLZEROES, Arg_parser::no }, { 'Z', OPT_XML, Arg_parser::no }, { 'G', OPT_SVG, Arg_parser::no }, { 'Y', OPT_BBCODE, Arg_parser::no }, { S_OPT_SVG_WIDTH, OPT_SVG_WIDTH, Arg_parser::yes }, { S_OPT_SVG_HEIGHT, OPT_SVG_HEIGHT, Arg_parser::yes }, { S_OPT_ADDCONFDIR, OPT_ADDCONFDIR, Arg_parser::yes }, { S_OPT_ENCLOSE_PRE, OPT_ENCLOSE_PRE, Arg_parser::no }, { S_OPT_FORCE_OUTPUT, OPT_FORCE_OUTPUT, Arg_parser::no }, { S_OPT_INLINE_CSS, OPT_INLINE_CSS, Arg_parser::no }, { S_OPT_KW_CASE, OPT_KW_CASE, Arg_parser::yes }, { S_OPT_MARK_LINES, OPT_MARK_LINES, Arg_parser::yes }, { S_OPT_PRINT_CONFIG, OPT_PRINT_CONFIG, Arg_parser::no }, { S_OPT_TEST_INPUT, OPT_TEST_INPUT, Arg_parser::no }, { S_OPT_RTF_CHAR_STYLES, OPT_RTF_CHAR_STYLES, Arg_parser::no }, { S_OPT_SKIP_UNKNOWN, OPT_SKIP_UNKNOWN, Arg_parser::yes }, { S_OPT_CTAGS_FILE, OPT_CTAGS_FILE, Arg_parser::maybe }, { S_OPT_START_NESTED, OPT_START_NESTED, Arg_parser::yes }, { S_OPT_COMPAT_DOC, OPT_COMPAT_DOC, Arg_parser::no }, { S_OPT_COMPAT_NODOC, OPT_COMPAT_NODOC, Arg_parser::no }, { S_OPT_COMPAT_TAB, OPT_COMPAT_TAB, Arg_parser::yes }, { S_OPT_COMPAT_CSS, OPT_COMPAT_CSS, Arg_parser::yes }, { S_OPT_COMPAT_OUTDIR, OPT_COMPAT_OUTDIR, Arg_parser::yes }, { S_OPT_COMPAT_FAILSAFE, OPT_COMPAT_FAILSAFE, Arg_parser::no }, { S_OPT_COMPAT_OUTFORMAT, OPT_COMPAT_OUTFORMAT, Arg_parser::yes }, { S_OPT_COMPAT_SRCLANG, OPT_COMPAT_SRCLANG, Arg_parser::yes }, { S_OPT_COMPAT_LINENUM, OPT_COMPAT_LINENUM, Arg_parser::maybe }, { S_OPT_COMPAT_LINEREF, OPT_COMPAT_LINEREF, Arg_parser::maybe }, { S_OPT_PRETTY_SYMBOLS, OPT_PRETTY_SYMBOLS, Arg_parser::no }, { S_OPT_EOL_DELIM_CR, OPT_EOL_DELIM_CR, Arg_parser::no }, { S_OPT_PRINT_STYLE, OPT_PRINT_STYLE, Arg_parser::no }, { S_OPT_NO_TRAILING_NL, OPT_NO_TRAILING_NL, Arg_parser::no }, { 0, 0, Arg_parser::no } }; Arg_parser parser ( argc, argv, options ); if ( parser.error().size() ) // bad option { cerr << "highlight: "<< parser.error() <<"\n"; cerr << "Try `highlight --help' for more information.\n"; exit ( 1 ); } int argind = 0; for ( ; argind < parser.arguments(); ++argind ) { const int code = parser.code ( argind ); const std::string & arg = parser.argument ( argind ); if ( !code ) break; // no more options switch ( code ) { case 'a': opt_attach_line_anchors = true; break; case 'A': outputType=highlight::ANSI; break; case 'b': opt_babel=true; break; case 'B': opt_batch_mode = true; readDirectory ( arg ); break; case 'c': case S_OPT_COMPAT_CSS: styleOutFilename = arg; opt_stylepath_explicit=true; break; case 'C': opt_printindex=true; break; case 'd': docTitle = arg; break; case 'D': dataDir=validateDirPath ( arg ); break; case 'e': styleInFilename = arg; break; case 'E': additionalDataDir=validateDirPath ( arg ); break; case 'f': case S_OPT_COMPAT_NODOC: opt_fragment = true; break; case 'F': indentScheme = arg; break; case S_OPT_CLASSNAME: className = arg; break; case 'h': opt_help = true; break; case 'H': outputType=highlight::HTML; break; case 'i': inputFileNames.push_back ( arg ); break; case 'I': opt_include_style = true; break; case 'j': StringTools::str2num ( lineNrWidth, arg, std::dec ); break; case 'J': StringTools::str2num ( lineLength, arg, std::dec ); break; case 'k': baseFont = arg; break; case 'K': baseFontSize = arg; break; case S_OPT_COMPAT_LINENUM: if ( arg=="0" ) opt_fill_zeroes=true; case 'l': opt_linenumbers = true; break; case 'L': outputType=highlight::LATEX; break; case 'm': StringTools::str2num ( lineNrStart, arg, std::dec ); break; case 'M': outputType=highlight::XTERM256; break; case 'n': opt_ordered_list = opt_linenumbers = true; break; case 'N': opt_fnames_as_anchors=true; break; case 'o': outFilename = arg; break; case 'O': case S_OPT_COMPAT_OUTDIR: outDirectory = validateDirPath ( arg ); break; case 'p': opt_show_langdefs = true; break; case 'P': opt_print_progress=true; break; case 'q': opt_quiet = true; break; case 'Q': opt_version = true; break; case 'r': opt_replacequotes=true; break; case 'R': outputType=highlight::RTF; break; case 's': styleName = arg; opt_style = true; break; case 'S': case S_OPT_COMPAT_SRCLANG: syntax = arg; opt_syntax = true; break; case 't': case S_OPT_COMPAT_TAB: StringTools::str2num ( numberSpaces, arg, std::dec ); break; case 'T': outputType=highlight::TEX; break; case 'u': encodingName = arg; break; case 'v': opt_verbose = true; break; case 'V': wrappingStyle = highlight::WRAP_SIMPLE; break; case 'w': opt_show_themes = true; break; case 'W': wrappingStyle = highlight::WRAP_DEFAULT; break; case 'x': pageSize = arg; break; case 'X': outputType=highlight::XHTML; break; case 'y': anchorPrefix = arg; break; case 'z': opt_fill_zeroes=true; break; case 'Z': outputType=highlight::XML; break; case 'G': outputType=highlight::SVG; break; case 'Y': outputType=highlight::BBCODE; break; case S_OPT_SVG_WIDTH: svg_width = arg; break; case S_OPT_SVG_HEIGHT: svg_height = arg; break; case S_OPT_ADDCONFDIR: additionalConfigDir = validateDirPath ( arg ); break; case S_OPT_ENCLOSE_PRE: opt_enclose_pre=true; break; case S_OPT_FORCE_OUTPUT: case S_OPT_COMPAT_FAILSAFE: opt_force_output = true; break; case S_OPT_INLINE_CSS: opt_inline_css=true; break; case S_OPT_KW_CASE: { const string tmp = StringTools::change_case ( arg ); if ( tmp == "upper" ) keywordCase = StringTools::CASE_UPPER; else if ( tmp == "lower" ) keywordCase = StringTools::CASE_LOWER; else if ( tmp == "capitalize" ) keywordCase = StringTools::CASE_CAPITALIZE; } break; case S_OPT_COMPAT_OUTFORMAT: { const string tmp = StringTools::change_case ( arg ); if ( tmp == "xhtml" ) outputType = highlight::XHTML; else if ( tmp == "tex" ) outputType = highlight::TEX; else if ( tmp == "latex" ) outputType = highlight::LATEX; else if ( tmp == "rtf" ) outputType = highlight::RTF; else if ( tmp == "xml" ) outputType = highlight::XML; else if ( tmp == "ansi" || tmp == "esc" ) // gnu source-highlight esc parameter outputType = highlight::ANSI; else if ( tmp == "xterm256" ) outputType = highlight::XTERM256; else if ( tmp == "svg" ) outputType = highlight::SVG; else if ( tmp == "bbcode" ) outputType = highlight::BBCODE; else outputType = highlight::HTML; } break; case S_OPT_MARK_LINES: markLinesArg = arg; break; case S_OPT_PRINT_CONFIG: opt_print_config = true; break; case S_OPT_TEST_INPUT: opt_validate=true; break; case S_OPT_RTF_CHAR_STYLES: opt_char_styles=true; break; case S_OPT_SKIP_UNKNOWN: skipArg=arg; break; case S_OPT_CTAGS_FILE: ctagsFile = ( arg.empty() ) ? "tags" :arg; break; case S_OPT_PRETTY_SYMBOLS: opt_pretty_symbols = true; break; case S_OPT_COMPAT_DOC: opt_fragment = false; break; case S_OPT_COMPAT_LINEREF: opt_linenumbers = true; opt_attach_line_anchors = true; anchorPrefix = ( arg.empty() ) ? "line":arg; break; case S_OPT_EOL_DELIM_CR: opt_delim_CR = true; break; case S_OPT_START_NESTED: startNestedLang=arg; break; case S_OPT_PRINT_STYLE: opt_print_style = true; break; case S_OPT_NO_TRAILING_NL: opt_no_trailing_nl = true; break; default: cerr << "highlight: option parsing failed" << endl; } } if ( argind < parser.arguments() ) //still args left { if ( inputFileNames.empty() ) { while ( argind < parser.arguments() ) { inputFileNames.push_back ( parser.argument ( argind++ ) ); } } } else if ( inputFileNames.empty() ) { inputFileNames.push_back ( "" ); } if ( printDebugInfo() && configFileRead ) { cout << "Configuration file \""<::iterator file=inputFileNames.begin();file!=inputFileNames.end();file++ ) { for ( set::iterator ext=ignoredFileTypes.begin();ext!=ignoredFileTypes.end();ext++ ) { wildcard="*."+*ext; if ( Platform::wildcmp ( wildcard.c_str(), ( *file ).c_str() ) ) { inputFileNames.erase ( file ); file--; break; } } } } } CmdLineOptions::~CmdLineOptions() {} const string &CmdLineOptions::getSingleOutFilename() { if ( !inputFileNames.empty() && !outDirectory.empty() ) { if ( outFilename.empty() ) { outFilename = outDirectory; int delim = getSingleInFilename().find_last_of ( Platform::pathSeparator ) +1; outFilename += getSingleInFilename().substr ( ( delim>-1 ) ?delim:0 ) + getOutFileSuffix(); } } return outFilename; } const string &CmdLineOptions::getSingleInFilename() const { return inputFileNames[0]; } const string &CmdLineOptions::getOutDirectory() { if ( !outFilename.empty() && !enableBatchMode() ) { outDirectory=getDirName ( outFilename ); } return outDirectory; } const string CmdLineOptions::getStyleOutFilename() const { if ( !styleOutFilename.empty() ) return styleOutFilename; if ( outputType==highlight::TEX || outputType==highlight::LATEX ) { return "highlight.sty"; } else { return "highlight.css"; } } const string &CmdLineOptions::getStyleInFilename() const { return styleInFilename; } const string& CmdLineOptions::getSVGWidth() const { return svg_width; } const string& CmdLineOptions::getSVGHeight() const { return svg_height; } int CmdLineOptions::getNumberSpaces() const { return numberSpaces; } bool CmdLineOptions::printVersion() const { return opt_version; } bool CmdLineOptions::printHelp() const { return opt_help; } bool CmdLineOptions::printDebugInfo() const { return opt_verbose; } bool CmdLineOptions::printConfigInfo() const { return opt_print_config; } bool CmdLineOptions::quietMode() const { return opt_quiet; } bool CmdLineOptions::includeStyleDef() const { return opt_include_style; } bool CmdLineOptions::useFNamesAsAnchors() const { return opt_fnames_as_anchors; } bool CmdLineOptions::formatSupportsExtStyle() { return outputType==highlight::HTML || outputType==highlight::XHTML || outputType==highlight::LATEX || outputType==highlight::TEX || outputType==highlight::SVG; } bool CmdLineOptions::printLineNumbers() const { return opt_linenumbers; } string CmdLineOptions::getThemeName() const { return ( ( opt_style ) ? styleName+".style" : "kwrite.style" ); } bool CmdLineOptions::enableBatchMode() const { return inputFileNames.size() >1 || opt_batch_mode; } bool CmdLineOptions::fragmentOutput() const { return opt_fragment; } string CmdLineOptions::getOutFileSuffix() const { switch ( outputType ) { case highlight::XHTML: return ".xhtml"; case highlight::RTF: return ".rtf"; case highlight::TEX: case highlight::LATEX: return ".tex"; case highlight::XML: return ".xml"; case highlight::SVG: return ".svg"; case highlight::ANSI: return ".ansi"; case highlight::XTERM256: return ".xterm"; case highlight::BBCODE: return ".bbcode"; default: return ".html"; } } string CmdLineOptions::getDirName ( const string & path ) { size_t dirNameLength=path.rfind ( Platform::pathSeparator ); return ( dirNameLength==string::npos ) ?string() :path.substr ( 0, dirNameLength+1 ); } bool CmdLineOptions::attachLineAnchors() const { return opt_attach_line_anchors; } bool CmdLineOptions::showThemes() const { return opt_show_themes; } bool CmdLineOptions::showLangdefs() const { return opt_show_langdefs; } bool CmdLineOptions::outDirGiven() const { return !outFilename.empty(); } bool CmdLineOptions::replaceQuotes() const { return opt_replacequotes; } bool CmdLineOptions::disableBabelShorthands() const { return opt_babel; } bool CmdLineOptions::prettySymbols() const { return opt_pretty_symbols; } bool CmdLineOptions::getFlag ( const string& paramVal ) { return StringTools::change_case ( paramVal ) =="true"; } /* bool CmdLineOptions::formattingEnabled(){ return !indentScheme.empty(); } */ bool CmdLineOptions::orderedList() const { return opt_ordered_list; } bool CmdLineOptions::useCRDelimiter() const { return opt_delim_CR; } const string &CmdLineOptions::getDataDir() const { return dataDir; } bool CmdLineOptions::printOnlyStyle() const { return opt_print_style; } string CmdLineOptions::getIndentScheme() const { return StringTools::change_case ( indentScheme ); } const string &CmdLineOptions::getAdditionalDataDir() const { return additionalDataDir; } const string &CmdLineOptions::getAdditionalConfDir() const { return additionalConfigDir; } const string &CmdLineOptions::getLanguage() const { return syntax; } const string&CmdLineOptions::getEncoding() const { return encodingName; } const string& CmdLineOptions::getAnchorPrefix() const { return anchorPrefix; } const string &CmdLineOptions::getPageSize() const { return pageSize; } bool CmdLineOptions::printIndexFile() const { return opt_printindex && ( outputType==highlight::HTML || outputType==highlight::XHTML ); } bool CmdLineOptions::printProgress() const { return opt_print_progress; } bool CmdLineOptions::fillLineNrZeroes() const { return opt_fill_zeroes; } bool CmdLineOptions::syntaxGiven() const { return opt_syntax; } bool CmdLineOptions::omitEncoding() const { return StringTools::change_case ( encodingName ) =="none"; } bool CmdLineOptions::forceOutput() const { return opt_force_output; } bool CmdLineOptions::validateInput() const { return opt_validate; } bool CmdLineOptions::inlineCSS() const { return opt_inline_css; } bool CmdLineOptions::enclosePreTag() const { return opt_enclose_pre; } bool CmdLineOptions::includeCharStyles() const { return opt_char_styles; } bool CmdLineOptions::disableTrailingNL() const { return opt_no_trailing_nl; } const string &CmdLineOptions::getConfigFilePath() const { return configFilePath; } const string& CmdLineOptions::getDocumentTitle() const { return docTitle; } highlight::WrapMode CmdLineOptions::getWrappingStyle() const { return wrappingStyle; } const vector & CmdLineOptions::getInputFileNames() const { return inputFileNames; } const map & CmdLineOptions::getMarkLines() { markLines.clear(); istringstream valueStream; string elem; size_t delimPos; int markLineNo; valueStream.str ( markLinesArg ); // Format: "1=help line one; 3=help line three; 5 " while ( getline ( valueStream, elem, ';' ) ) { delimPos = elem.find ( '=' ); markLineNo=0; StringTools::str2num ( markLineNo, elem.substr ( 0,delimPos ), std::dec ); if ( markLineNo ) { markLines[markLineNo] = ( delimPos!=string::npos ) ?elem.substr ( delimPos+1 ) :""; } } return markLines; } void CmdLineOptions::readDirectory ( const string & wildcard ) { // get matching files, use recursive search bool directoryOK=Platform::getDirectoryEntries ( inputFileNames, wildcard, true ); if ( !directoryOK ) { cerr << "highlight: No files matched the pattern \"" << wildcard << "\"."<< endl; } } string CmdLineOptions::validateDirPath ( const string & path ) { return ( path[path.length()-1] !=Platform::pathSeparator ) ? path+Platform::pathSeparator : path; } highlight::OutputType CmdLineOptions::getOutputType() const { return outputType; } StringTools::KeywordCase CmdLineOptions::getKeywordCase() const { return keywordCase; } bool CmdLineOptions::hasBaseFont() const { return ( ! baseFont.empty() ) ; } const string& CmdLineOptions::getBaseFont() const { return baseFont ; } bool CmdLineOptions::hasBaseFontSize() const { return ( ! baseFontSize.empty() ) ; } const string& CmdLineOptions::getBaseFontSize() const { return baseFontSize ; } const string& CmdLineOptions::getClassName() const { return className ; } const string& CmdLineOptions::getTagsFile() const { return ctagsFile; } const string& CmdLineOptions::getStartNestedLang() const { return startNestedLang; } int CmdLineOptions::getNumberWidth() { return lineNrWidth; } int CmdLineOptions::getLineLength() { return lineLength; } int CmdLineOptions::getNumberStart() { return lineNrStart; } void CmdLineOptions::loadConfigurationFile() { #ifndef _WIN32 #ifdef CONFIG_FILE_PATH configFilePath=CONFIG_FILE_PATH; #else char* homeEnv=getenv ( "HOME" ); if ( homeEnv==NULL ) return; configFilePath=string ( homeEnv ) +"/.highlightrc"; #endif #else configFilePath = Platform::getAppPath() + "highlight.conf"; #endif ConfigurationReader userConfig ( configFilePath ); if ( userConfig.found() ) { string paramVal; configFileRead=true; styleOutFilename = userConfig.getParameter ( OPT_STYLE_OUT ); styleInFilename = userConfig.getParameter ( OPT_STYLE_IN ); styleName = userConfig.getParameter ( OPT_STYLE ); opt_style = !styleName.empty(); syntax = userConfig.getParameter ( OPT_SYNTAX ); opt_syntax = !syntax.empty(); StringTools::str2num ( numberSpaces, userConfig.getParameter ( OPT_DELTABS ), std::dec ); indentScheme = userConfig.getParameter ( OPT_FORMAT ); baseFontSize = userConfig.getParameter ( OPT_BASE_FONT_SIZE ); baseFont = userConfig.getParameter ( OPT_BASE_FONT ); skipArg = userConfig.getParameter ( OPT_SKIP_UNKNOWN ); paramVal = userConfig.getParameter ( OPT_DATADIR ); if ( !paramVal.empty() ) { dataDir=validateDirPath ( paramVal ); } paramVal = userConfig.getParameter ( OPT_ADDDATADIR ); if ( !paramVal.empty() ) { additionalDataDir=validateDirPath ( paramVal ); } paramVal = userConfig.getParameter ( OPT_ADDCONFDIR ); if ( !paramVal.empty() ) { additionalConfigDir=validateDirPath ( paramVal ); } paramVal = userConfig.getParameter ( OPT_OUTDIR ); if ( !paramVal.empty() ) { outDirectory=validateDirPath ( paramVal ); } paramVal = userConfig.getParameter ( OPT_ENCODING ); if ( !paramVal.empty() ) { encodingName=paramVal; } paramVal = userConfig.getParameter ( OPT_LNR_LEN ); if ( !paramVal.empty() ) { StringTools::str2num ( lineNrWidth, string ( paramVal ), std::dec ); } paramVal = userConfig.getParameter ( OPT_LNR_START ); if ( !paramVal.empty() ) { StringTools::str2num ( lineNrStart, string ( paramVal ), std::dec ); } paramVal = userConfig.getParameter ( OPT_ANCHOR_PFX ); if ( !paramVal.empty() ) { anchorPrefix=paramVal; } opt_include_style=getFlag ( userConfig.getParameter ( OPT_INC_STYLE ) ); opt_verbose=getFlag ( userConfig.getParameter ( OPT_VERBOSE ) ); opt_ordered_list=getFlag ( userConfig.getParameter ( OPT_ORDERED_LIST ) ); opt_linenumbers=opt_ordered_list || getFlag ( userConfig.getParameter ( OPT_LINENO ) ); opt_fragment=getFlag ( userConfig.getParameter ( OPT_FRAGMENT ) ); opt_attach_line_anchors=getFlag ( userConfig.getParameter ( OPT_ANCHORS ) ); opt_printindex=getFlag ( userConfig.getParameter ( OPT_INDEXFILE ) ); opt_quiet=getFlag ( userConfig.getParameter ( OPT_QUIET ) ); opt_replacequotes=getFlag ( userConfig.getParameter ( OPT_REPLACE_QUOTES ) ); opt_print_progress=getFlag ( userConfig.getParameter ( OPT_PROGRESSBAR ) ); opt_fill_zeroes=getFlag ( userConfig.getParameter ( OPT_FILLZEROES ) ); opt_fnames_as_anchors=getFlag ( userConfig.getParameter ( OPT_ANCHOR_FN ) ); opt_validate=getFlag ( userConfig.getParameter ( OPT_TEST_INPUT ) ); opt_fnames_as_anchors=getFlag ( userConfig.getParameter ( OPT_ANCHOR_FN ) ); opt_inline_css=getFlag ( userConfig.getParameter ( OPT_INLINE_CSS ) ); opt_delim_CR=getFlag ( userConfig.getParameter ( OPT_EOL_DELIM_CR) ); if ( getFlag ( userConfig.getParameter ( OPT_WRAP ) ) ) { wrappingStyle=highlight::WRAP_DEFAULT; } if ( getFlag ( userConfig.getParameter ( OPT_WRAPSIMPLE ) ) ) { wrappingStyle=highlight::WRAP_SIMPLE; } if ( getFlag ( userConfig.getParameter ( OPT_XHTML ) ) ) { outputType=highlight::XHTML; } else if ( getFlag ( userConfig.getParameter ( OPT_RTF ) ) ) { outputType=highlight::RTF; } else if ( getFlag ( userConfig.getParameter ( OPT_TEX ) ) ) { outputType=highlight::TEX; } else if ( getFlag ( userConfig.getParameter ( OPT_LATEX ) ) ) { outputType=highlight::LATEX; } else if ( getFlag ( userConfig.getParameter ( OPT_ANSI ) ) ) { outputType=highlight::ANSI; } else if ( getFlag ( userConfig.getParameter ( OPT_XML ) ) ) { outputType=highlight::XML; } else if ( getFlag ( userConfig.getParameter ( OPT_SVG ) ) ) { outputType=highlight::SVG; } else if ( getFlag ( userConfig.getParameter ( OPT_XTERM256 ) ) ) { outputType=highlight::XTERM256; } else if ( getFlag ( userConfig.getParameter ( OPT_BBCODE) ) ) { outputType=highlight::BBCODE; } } }