"Fossies" - the Fresh Open Source Software Archive 
Member "ansifilter-2.18-x64/src/main.cpp" (30 Jan 2021, 9541 Bytes) of package /windows/misc/ansifilter-2.18-x64.zip:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
See also the latest
Fossies "Diffs" side-by-side code changes report for "main.cpp":
2.17_vs_2.18.
1 /***************************************************************************
2 main.cpp - description
3 -------------------
4
5 copyright : (C) 2007-2021 by Andre Simon
6 email : a.simon@mailbox.org
7
8 Highlight is a universal source code to HTML converter. Syntax highlighting
9 is formatted by Cascading Style Sheets. It's possible to easily enhance
10 highlight's parsing database.
11
12 ***************************************************************************/
13
14 /*
15 This file is part of ANSIFilter.
16
17 ANSIFilter is free software: you can redistribute it and/or modify
18 it under the terms of the GNU General Public License as published by
19 the Free Software Foundation, either version 3 of the License, or
20 (at your option) any later version.
21
22 ANSIFilter is distributed in the hope that it will be useful,
23 but WITHOUT ANY WARRANTY; without even the implied warranty of
24 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 GNU General Public License for more details.
26
27 You should have received a copy of the GNU General Public License
28 along with ANSIFilter. If not, see <http://www.gnu.org/licenses/>.
29 */
30
31 #include <memory>
32 #include "main.h"
33 #include "codegenerator.h"
34 #include "platform_fs.h"
35
36 using namespace std;
37
38 void ANSIFilterApp::printVersionInfo()
39 {
40 cout << "\n ansifilter version "
41 << Info::getVersion()
42 << "\n Copyright (C) 2007-2021 Andre Simon <a dot simon at mailbox.org>"
43 << "\n\n Argparser class"
44 << "\n Copyright (C) 2006-2008 Antonio Diaz Diaz <ant_diaz at teleline.es>"
45 << "\n\n This software is released under the terms of the GNU General "
46 << "Public License."
47 << "\n For more information about these matters, see the file named "
48 << "COPYING.\n";
49 }
50
51 void ANSIFilterApp::printHelp()
52 {
53 cout << "Invocation: ansifilter [OPTION]... [FILE]...\n\n";
54 cout << "ansifilter handles text files containing ANSI terminal escape codes.\n";
55 cout << "\nFile handling:\n";
56 cout << " -i, --input=<file> Name of input file\n";
57 cout << " -o, --output=<file> Name of output file\n";
58 cout << " -O, --outdir=<dir> Name of output directory\n";
59 cout << " -t, --tail Continue reading after end-of-file (like tail -f)\n";
60 cout << " -x, --max-size=<size> Set maximum input file size\n";
61 cout << " (examples: 512M, 1G; default: 256M)\n";
62 cout << "\nOutput text formats:\n";
63 cout << " -T, --text (default) Output text\n";
64 cout << " -H, --html Output HTML\n";
65 cout << " -M, --pango Output Pango Markup\n";
66 cout << " -L, --latex Output LaTeX\n";
67 cout << " -P, --tex Output Plain TeX\n";
68 cout << " -R, --rtf Output RTF\n";
69 cout << " -S, --svg Output SVG\n";
70 cout << " -B, --bbcode Output BBCode\n";
71 cout << "\nFormat options:\n";
72 cout << " -a, --anchors(=self) Add HTML line anchors (opt: self referencing, assumes -l)\n";
73 cout << " -d, --doc-title Set HTML/LaTeX/SVG document title\n";
74 cout << " -e, --encoding=<enc> Set HTML/RTF encoding (must match input file encoding);\n";
75 cout << " omit encoding information if enc=NONE\n";
76 cout << " -f, --fragment Omit HTML header and footer\n";
77 cout << " -F, --font=<font> Set HTML/RTF/SVG font face\n";
78 cout << " -k, --ignore-clear(=0) Do not adhere to clear (ESC K) commands (default: true)\n";
79 cout << " -c, --ignore-csi Do not adhere to CSI commands (useful for UTF-8 input)\n";
80 cout << " -l, --line-numbers Print line numbers in output file\n";
81 cout << " -m, --map=<path> Read color mapping file (see README)\n";
82 cout << " -r, --style-ref=<rf> Set HTML/TeX/LaTeX/SVG stylesheet path\n";
83 cout << " -s, --font-size=<fs> Set HTML/RTF/SVG font size\n";
84 cout << " -p, --plain Ignore ANSI formatting information\n";
85 cout << " -w, --wrap=<len> Wrap long lines\n";
86 cout << " --no-trailing-nl Omit trailing newline\n";
87 cout << " --no-version-info Omit version info comment\n";
88 cout << " --wrap-no-numbers Omit line numbers of wrapped lines (assumes -l)\n";
89 cout << " --derived-styles Output dynamic stylesheets (HTML/SVG)\n";
90
91 cout << "\nANSI art options:\n";
92 cout << " --art-cp437 Parse codepage 437 ANSI art (HTML and RTF output)\n";
93 cout << " --art-bin Parse BIN/XBIN ANSI art (HTML output, no stdin)\n";
94 cout << " --art-tundra Parse Tundra ANSI art (HTML output, no stdin)\n";
95 cout << " --art-width Set ANSI art width (default 80)\n";
96 cout << " --art-height Set ANSI art height (default 150)\n";
97
98 cout << "\nSVG output options:\n";
99 cout << " --height set image height (units allowed)\n";
100 cout << " --width set image width (see --height)\n";
101
102 cout << "\nOther options:\n";
103 cout << " -h, --help Print help\n";
104 cout << " -v, --version Print version and license info\n";
105 cout << "\nExamples:\n";
106 cout << "ansifilter -i input.ansi -o output.txt\n";
107 cout << "ansifilter *.txt\n";
108 cout << "tail -f server.log | ansifilter\n\n";
109 cout << "Parsing XBIN files overrides --art-width, --art-height and --map options.\n";
110 cout << "The ANSI art file formats BIN, XBIN and TND cannot be read from stdin.\n";
111 cout << "\nPlease report bugs to " << Info::getEmail()<< "\n";
112 cout << "For updates see " << Info::getWebsite()<< "\n";
113 }
114
115 int ANSIFilterApp::run( const int argc, const char *argv[] )
116 {
117
118 CmdLineOptions options(argc, argv);
119
120 if (options.printVersion()) {
121 printVersionInfo();
122 return EXIT_SUCCESS;
123 }
124
125 if (options.printHelp()) {
126 printHelp();
127 return EXIT_SUCCESS;
128 }
129
130 const vector <string> inFileList=options.getInputFileNames();
131 unique_ptr<ansifilter::CodeGenerator> generator(ansifilter::CodeGenerator::getInstance(options.getOutputType()));
132
133 string outDirectory = options.getOutDirectory();
134
135 unsigned int fileCount=inFileList.size(), i=0;
136 string::size_type pos=0;
137 string inFileName, outFilePath;
138 string mapPath = options.getMapPath();
139 bool failure=false;
140
141 if (!generator->setColorMap(mapPath)){
142 std::cerr <<"could not read map file: " << mapPath << "\n";
143 return EXIT_FAILURE;
144 }
145
146 while (i < fileCount && !failure) {
147
148 if (fileCount>1) {
149 pos=(inFileList[i]).find_last_of(Platform::pathSeparator);
150 inFileName = inFileList[i].substr(pos+1);
151 outFilePath = outDirectory;
152 outFilePath += inFileName;
153 outFilePath += options.getOutFileSuffix();
154 } else {
155 outFilePath = options.getSingleOutFilename();
156 }
157
158 if ( inFileList[i].size() && Platform::fileSize(inFileList[i]) > options.getMaxFileSize() ) {
159
160 std::cerr <<"file exceeds max size (see --max-size): " << inFileList[i] << "\n";
161 return EXIT_FAILURE;
162 }
163
164 generator->setTitle(options.getDocumentTitle().empty()?
165 inFileList[i]:options.getDocumentTitle());
166
167 generator->setEncoding(options.getEncoding());
168 generator->setFragmentCode(options.fragmentOutput());
169 generator->setPlainOutput(options.plainOutput());
170 generator->setContinueReading(options.ignoreInputEOF());
171 generator->setFont(options.getFont());
172 generator->setFontSize(options.getFontSize());
173 generator->setStyleSheet(options.getStyleSheetPath());
174 generator->setPreformatting(ansifilter::WRAP_SIMPLE, options.getWrapLineLength());
175 generator->setShowLineNumbers(options.showLineNumbers());
176 generator->setWrapNoNumbers(!options.wrapNoNumbers());
177 generator->setAddAnchors(options.addAnchors(), options.addFunnyAnchors());
178 generator->setParseCodePage437(options.parseCP437());
179 generator->setParseAsciiBin(options.parseAsciiBin());
180 generator->setParseAsciiTundra(options.parseAsciiTundra());
181 generator->setIgnoreClearSeq(options.ignoreClearSeq());
182 generator->setIgnoreCSISeq(options.ignoreCSISeq());
183
184 generator->setApplyDynStyles(options.applyDynStyles());
185
186 generator->setAsciiArtSize(options.getAsciiArtWidth(), options.getAsciiArtHeight());
187 generator->setOmitTrailingCR(options.omitTrailingCR());
188 generator->setOmitVersionInfo(options.omitVersionInfo());
189
190 generator->setSVGSize ( options.getWidth(), options.getHeight() );
191
192 ansifilter::ParseError error = generator->generateFile(inFileList[i], outFilePath);
193
194 if (error==ansifilter::BAD_INPUT) {
195 std::cerr << "could not read input: " << inFileList[i] << "\n";
196 failure=true;
197 } else if (error==ansifilter::BAD_OUTPUT) {
198 std::cerr << "could not write output: " << outFilePath << "\n";
199 failure=true;
200 }
201 ++i;
202 }
203
204 if (options.applyDynStyles() && !failure) {
205 string styleStyleSheetPath = outDirectory + "derived_styles.css";
206 generator->printDynamicStyleFile(styleStyleSheetPath);
207 }
208
209 return (failure) ? EXIT_FAILURE : EXIT_SUCCESS;
210 }
211
212 int main( const int argc, const char *argv[] )
213 {
214 ANSIFilterApp app;
215 return app.run(argc, argv);
216 }