GCC Code Coverage Report


Directory: ./
File: tmp_project/PhoenixTex2Html/src/main.cpp
Date: 2025-03-24 18:12:43
Exec Total Coverage
Lines: 127 139 91.4%
Branches: 212 279 76.0%

Line Branch Exec Source
1 /***************************************
2 Auteur : Pierre Aubert
3 Mail : pierre.aubert@lapp.in2p3.fr
4 Licence : CeCILL-C
5 ****************************************/
6
7 #include "phoenix_system.h"
8 #include "OptionParser.h"
9
10 #include "PLatexObj/platexobj_print.h"
11 #include "PLatexObj/platexobj_order.h"
12 #include "PLatexObj/platexobj_updateNumber.h"
13 #include "PLatexObj/update_firstCss.h"
14 #include "PLatexObj/platexobj_updateId.h"
15 #include "PLatexObj/platexobj_updateFileName.h"
16 #include "PLatexObj/updateFigureNumber.h"
17 #include "PLatexObj/updateLabelRef.h"
18 #include "PLatexObj/updateLabelCitation.h"
19 #include "PLatexObj/updateMenu.h"
20 #include "PLatexObj/updateNextPrev.h"
21 #include "PLatexObj/updateParent.h"
22 #include "PLatexObj/update_wip.h"
23 #include "PLatexObj/update_newLine.h"
24 #include "PLatexObj/platexobj_html.h"
25 #include "PLatexObj/platexobj_menu.h"
26 #include "PLatexObj/createOutlineHtml.h"
27 #include "PLatexObj/platexobj_tex.h"
28 #include "PConfigParser.h"
29 #include "PMarkdownParser.h"
30
31 ///@brief Parsed arguments passed to the program
32 struct ParsedArg{
33 ///True to use the MathJax backend, false to use the latex backend
34 bool useMathJax;
35 ///True to use remote install of mathjax
36 bool useRemoteMathjax;
37 ///Installation prefix directory to get the program ressources (/usr or /local/usr)
38 PString installPrefix;
39 ///True to propagate the Work In Progress in the titles of corresponding parts, to make them visible and see what is ongoing in an easier way
40 bool isWorkInProgress;
41 ///True to activate the latex backend
42 bool isLatexBackEnd;
43 ///True to enable book theme
44 bool isBookTheme;
45 ///Style to be used as the default css style
46 PString styleCss;
47 ///File which describes the theme of the web site
48 PString themeFile;
49 };
50
51 ///Init default values in the ParsedArg
52 /** @param[out] arg : ParseArg to be updated
53 */
54 131 void defaultParsedArg(ParsedArg & arg){
55 131 arg.useMathJax = false;
56 131 arg.useRemoteMathjax = false;
57
1/1
✓ Branch 2 taken 131 times.
131 arg.installPrefix = PPath::getProgramPrefix();
58 131 arg.isWorkInProgress = false;
59 131 arg.isLatexBackEnd = false;
60 131 arg.isBookTheme = false;
61 131 arg.styleCss = "";
62
2/2
✓ Branch 2 taken 131 times.
✓ Branch 5 taken 131 times.
131 arg.themeFile = PPath::getProgramPrefix() + "/share/PhoenixTex2Html/THEME/default.html";
63 131 }
64
65 ///Create the OptionParser of this program
66 /** @return OptionParser of this program
67 */
68 131 OptionParser createOptionParser(){
69
2/2
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
131 OptionParser parser(true, __PROGRAM_VERSION__);
70
2/2
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
131 parser.setExampleLongOption("phoenix_tex2html --input=fileInput.tex --output=\"output/Directory\"");
71
2/2
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
131 parser.setExampleShortOption("phoenix_tex2html -i fileInput.tex -o output/Directory");
72
73
4/4
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
✓ Branch 7 taken 131 times.
✓ Branch 10 taken 131 times.
131 parser.addOption("input", "i", OptionType::FILENAME, true, "name of the input file");
74
75
1/1
✓ Branch 1 taken 131 times.
131 PString bibliographyFile("");
76
5/5
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
✓ Branch 7 taken 131 times.
✓ Branch 10 taken 131 times.
✓ Branch 13 taken 131 times.
131 parser.addOption("bibliography", "b", bibliographyFile, "input bibliography file");
77
1/1
✓ Branch 1 taken 131 times.
131 PString includeDir(".");
78
5/5
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
✓ Branch 7 taken 131 times.
✓ Branch 10 taken 131 times.
✓ Branch 13 taken 131 times.
131 parser.addOption("includedirs", "I", includeDir, "list of include directories");
79
80
1/1
✓ Branch 1 taken 131 times.
131 PString defaultStyle("base");
81
5/5
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
✓ Branch 7 taken 131 times.
✓ Branch 10 taken 131 times.
✓ Branch 13 taken 131 times.
131 parser.addOption("style", "s", defaultStyle, "set the default style to be used (base, dark)");
82
83
4/4
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
✓ Branch 7 taken 131 times.
✓ Branch 10 taken 131 times.
131 parser.addOption("workinprogress", "w", OptionType::NONE, false, "propagates the Work In Progress in the titles of corresponding parts, to make them visible and see what is ongoing in an easier way");
84
4/4
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
✓ Branch 7 taken 131 times.
✓ Branch 10 taken 131 times.
131 parser.addOption("mathjax", "j", OptionType::NONE, false, "enable the MathJax backend instead of the Latex one");
85
4/4
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
✓ Branch 7 taken 131 times.
✓ Branch 10 taken 131 times.
131 parser.addOption("remotemathjax", "r", OptionType::NONE, false, "enable the MathJax backend, with remote install, instead of the Latex one");
86
87
4/4
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
✓ Branch 7 taken 131 times.
✓ Branch 10 taken 131 times.
131 parser.addOption("tex", "t", OptionType::NONE, false, "enable the latex backend. All input will be converted into latex files");
88
4/4
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
✓ Branch 7 taken 131 times.
✓ Branch 10 taken 131 times.
131 parser.addOption("book", "k", OptionType::NONE, false, "enable the book theme");
89
90
2/2
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
131 PString installPrefix(PPath::getProgramPrefix());
91
5/5
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
✓ Branch 7 taken 131 times.
✓ Branch 10 taken 131 times.
✓ Branch 13 taken 131 times.
131 parser.addOption("prefix", "p", installPrefix, "Installation prefix directory (/usr or /local/usr to get shared files");
92
3/3
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
✓ Branch 7 taken 131 times.
262 PString defaultTheme(PPath::getProgramPrefix() + "/share/PhoenixTex2Html/THEME/default.html");
93
5/5
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
✓ Branch 7 taken 131 times.
✓ Branch 10 taken 131 times.
✓ Branch 13 taken 131 times.
131 parser.addOption("theme", "a", defaultTheme, "base theme to be used as canevas to all generated web pages");
94 262 return parser;
95 131 }
96
97 ///Process all the input files
98 /** @param fileinput : input files
99 * @param inputBibliography : input bobliography file
100 * @param listInclude : list of the extra include directories
101 * @param arg : extra arguments passed to the program
102 */
103 template<typename T>
104 260 int processAllFile(const PPath & fileinput, const PPath & inputBibliography,
105 const PVecString & listInclude, const ParsedArg & arg)
106 {
107
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 130 times.
260 if(fileinput == "") return 0;
108
109
1/1
✓ Branch 1 taken 130 times.
260 T parser(arg.installPrefix);
110
1/1
✓ Branch 1 taken 130 times.
260 parser.setDebugMode(true);
111 260 bool isBibliography(inputBibliography != "");
112
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 127 times.
260 if(isBibliography){
113
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 PMapBiblioEntry & mapBibio = parser.getMapBiblioEntry();
114
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 3 times.
6 if(!pbliblio_file(mapBibio, inputBibliography)){
115 std::cerr << "processAllFile : can't parse the bibliography file '"<<inputBibliography<<"'" << std::endl;
116 return -1;
117 }
118
4/8
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
6 std::cout << "Find " << mapBibio.size() << " entries in the bibliography" << std::endl;
119 }
120
121
2/2
✓ Branch 4 taken 130 times.
✓ Branch 5 taken 130 times.
520 for(PVecString::const_iterator it(listInclude.begin()); it != listInclude.end(); ++it){
122
2/2
✓ Branch 1 taken 130 times.
✓ Branch 5 taken 130 times.
260 parser.getVecIncludeDir().push_back(*it);
123 }
124
2/3
✓ Branch 1 taken 130 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 130 times.
260 if(!parser.saveCss()){
125 std::cerr << "processAllFile : can't save css file" << std::endl;
126 return -1;
127 }
128
3/3
✓ Branch 1 taken 130 times.
✓ Branch 3 taken 3 times.
✓ Branch 4 taken 127 times.
260 if(!parser.load(fileinput)){
129
4/8
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 3 times.
✗ Branch 11 not taken.
6 std::cerr << "processAllFile : can't load file '"<<fileinput<<"'" << std::endl;
130 6 return -1;
131 }
132
2/2
✓ Branch 1 taken 127 times.
✓ Branch 4 taken 127 times.
254 PLatexObj latexFile(parser.getSource());
133
1/1
✓ Branch 1 taken 127 times.
254 PString firstStyleCss(arg.styleCss);
134
1/1
✓ Branch 1 taken 127 times.
254 update_firstCss(firstStyleCss, latexFile);
135
1/1
✓ Branch 1 taken 127 times.
254 platexobj_updateId(latexFile);
136
137
1/1
✓ Branch 1 taken 127 times.
254 PLatexObj orderLatex(platexobj_order(latexFile));
138
1/1
✓ Branch 1 taken 127 times.
254 platexobj_updateNumber(orderLatex);
139
140
1/1
✓ Branch 1 taken 127 times.
254 platexobj_updateFileName(orderLatex);
141
1/1
✓ Branch 1 taken 127 times.
254 platexobj_updateLink(orderLatex);
142
143
1/1
✓ Branch 1 taken 127 times.
254 updateFigureNumber(orderLatex);
144
1/1
✓ Branch 1 taken 127 times.
254 updateLabelRef(orderLatex);
145
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 124 times.
254 if(isBibliography){
146
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 PMapBiblioEntry & mapBibio = parser.getMapBiblioEntry();
147
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 updateLabelCitation(orderLatex, mapBibio);
148 }
149
1/1
✓ Branch 1 taken 127 times.
254 POutoutMode outputMode;
150
1/1
✓ Branch 1 taken 127 times.
254 outputMode.currentStyle = firstStyleCss;
151 254 outputMode.isMathJaxMode = arg.useMathJax;
152 254 outputMode.isRemoteMathjax = arg.useRemoteMathjax;
153 254 outputMode.isBibliography = isBibliography;
154
1/1
✓ Branch 1 taken 127 times.
254 platexobj_loadFormulaeMap(outputMode.mapFormula);
155
156
3/4
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 124 times.
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
254 if(arg.isWorkInProgress && !arg.isLatexBackEnd){
157
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 updateWip(orderLatex);
158 }
159
160
1/1
✓ Branch 1 taken 127 times.
254 updateMenu(outputMode, orderLatex);
161
1/1
✓ Branch 1 taken 127 times.
254 updateNextPrev(outputMode, orderLatex);
162
1/1
✓ Branch 1 taken 127 times.
254 updateParent(outputMode, orderLatex);
163
1/1
✓ Branch 1 taken 127 times.
254 updateNewLine(orderLatex);
164 254 outputMode.isBookTheme = arg.isBookTheme;
165
2/2
✓ Branch 1 taken 127 times.
✓ Branch 4 taken 127 times.
254 platexobj_update_theme(outputMode, arg.themeFile);
166
2/2
✓ Branch 0 taken 11 times.
✓ Branch 1 taken 116 times.
254 if(arg.isBookTheme){
167
2/4
✓ Branch 1 taken 11 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 11 times.
✗ Branch 5 not taken.
22 std::cout << "processAllFile : book mode enabled" << std::endl;
168
3/6
✓ Branch 1 taken 11 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 11 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 11 times.
✗ Branch 8 not taken.
22 outputMode.fullMenu = platexobj_toMenu(orderLatex, parser.getBookMainPageLink());
169
170
2/4
✓ Branch 1 taken 11 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 11 times.
✗ Branch 5 not taken.
22 outputMode.bookSideBarWidth = parser.getBookSideBarWidth();
171
2/4
✓ Branch 1 taken 11 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 11 times.
✗ Branch 5 not taken.
22 outputMode.bookGitlabUrl = parser.getBookGitlabUrl();
172
1/2
✓ Branch 1 taken 11 times.
✗ Branch 2 not taken.
22 outputMode.isEnableBookFeedback = parser.getBookEnableFeedback();
173
2/4
✓ Branch 1 taken 11 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 11 times.
✗ Branch 5 not taken.
22 outputMode.bookMail = parser.getBookMail();
174
2/4
✓ Branch 1 taken 11 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 11 times.
✗ Branch 5 not taken.
22 outputMode.bookMasterProjectUrl = parser.getBookMasterProjectUrl();
175
176 }
177
4/4
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 124 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 1 times.
254 if(isBibliography && !arg.isLatexBackEnd){ //Save the bibliography if there is one
178
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
4 PMapBiblioEntry & mapBibio = parser.getMapBiblioEntry();
179
4/8
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
4 if(!pbiblio_html(PPath("bibliography.html"), mapBibio, outputMode)){
180 std::cerr << "processAllFile : can't save bibliography" << std::endl;
181 return -1;
182 }
183 }
184
2/2
✓ Branch 0 taken 9 times.
✓ Branch 1 taken 118 times.
254 if(arg.isLatexBackEnd){
185
1/1
✓ Branch 1 taken 9 times.
18 POutputTex outputTexMode(defaultPOutputTex());
186
2/2
✓ Branch 1 taken 9 times.
✓ Branch 4 taken 9 times.
18 orderLatex.setLink("index.tex");
187
2/3
✓ Branch 1 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 9 times.
18 if(!platexobj_tex(outputTexMode, orderLatex)){ //Save the html pages
188 std::cerr << "processAllFile : can't save file in latex" << std::endl;
189 return -1;
190 }
191 }else{
192
1/1
✓ Branch 1 taken 118 times.
236 platexobj_theme_init_var(outputMode); //Init theme basic variables
193
2/3
✓ Branch 1 taken 118 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 118 times.
236 if(!platexobj_html(outputMode, orderLatex, isBibliography, arg.installPrefix)){ //Save the html pages
194 std::cerr << "processAllFile : can't files 'save html'" << std::endl;
195 return -1;
196 }
197
2/2
✓ Branch 0 taken 107 times.
✓ Branch 1 taken 11 times.
236 if(!arg.isBookTheme){
198
2/3
✓ Branch 1 taken 107 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 107 times.
214 if(!createOutlineHtml(outputMode, orderLatex, isBibliography)){ //Save the outline
199 std::cerr << "processAllFile : can't save file 'outline.html'" << std::endl;
200 return -1;
201 }
202 }
203
1/1
✓ Branch 1 taken 118 times.
236 platexobj_saveFormulaeMap(outputMode.mapFormula);
204 }
205 254 return 0;
206 260 }
207
208 131 int main(int argc, char** argv){
209
1/1
✓ Branch 1 taken 131 times.
131 OptionParser parser = createOptionParser();
210
1/1
✓ Branch 1 taken 131 times.
131 parser.parseArgument(argc, argv);
211
212
1/1
✓ Branch 1 taken 131 times.
131 const OptionMode & defaultMode = parser.getDefaultMode();
213
1/1
✓ Branch 1 taken 131 times.
131 PPath inputFile;
214
2/2
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
131 defaultMode.getValue(inputFile, "input");
215
216
1/1
✓ Branch 1 taken 131 times.
131 PString inputBibliography("");
217
2/2
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
131 defaultMode.getValue(inputBibliography, "bibliography");
218
219 131 PVecString listInclude;
220
2/2
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
131 defaultMode.getValue(listInclude, "includedirs");
221
222
1/1
✓ Branch 1 taken 131 times.
131 ParsedArg arg;
223
1/1
✓ Branch 1 taken 131 times.
131 defaultParsedArg(arg);
224
225
2/2
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
131 defaultMode.getValue(arg.styleCss, "style");
226
227
2/2
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
131 arg.useMathJax = defaultMode.isOptionExist("mathjax");
228
2/2
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
131 arg.useRemoteMathjax = defaultMode.isOptionExist("remotemathjax");
229 131 arg.useMathJax |= arg.useRemoteMathjax;
230
2/2
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
131 arg.isWorkInProgress = defaultMode.isOptionExist("workinprogress");
231
2/2
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
131 arg.isLatexBackEnd = defaultMode.isOptionExist("tex");
232
2/2
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
131 arg.isBookTheme = defaultMode.isOptionExist("book");
233
2/2
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
131 defaultMode.getValue(arg.installPrefix, "prefix");
234
2/2
✓ Branch 1 taken 131 times.
✓ Branch 4 taken 131 times.
131 defaultMode.getValue(arg.themeFile, "theme");
235
2/2
✓ Branch 0 taken 11 times.
✓ Branch 1 taken 120 times.
131 if(arg.isBookTheme){
236
3/3
✓ Branch 1 taken 11 times.
✓ Branch 4 taken 11 times.
✓ Branch 7 taken 11 times.
11 arg.themeFile = PPath::getProgramPrefix() + "/share/PhoenixTex2Html/THEME/book.html";
237 }
238
239
1/1
✓ Branch 1 taken 131 times.
131 PString fileExtention(inputFile.getExtension());
240
2/2
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 129 times.
131 if(fileExtention == "md"){
241
2/2
✓ Branch 1 taken 2 times.
✓ Branch 4 taken 2 times.
2 return processAllFile<PMarkdownParser>(inputFile, inputBibliography, listInclude, arg);
242
6/6
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 124 times.
✓ Branch 4 taken 4 times.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 128 times.
✓ Branch 7 taken 1 times.
129 }else if(fileExtention == "tex" || fileExtention == "ptex"){
243
2/2
✓ Branch 1 taken 128 times.
✓ Branch 4 taken 128 times.
128 return processAllFile<PConfigParser>(inputFile, inputBibliography, listInclude, arg);
244 }else{
245
6/6
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✓ Branch 7 taken 1 times.
✓ Branch 10 taken 1 times.
✓ Branch 13 taken 1 times.
✓ Branch 16 taken 1 times.
1 std::cerr << "phoenix_tex2html : Unknow file extention '"<<fileExtention<<"' of input file '"<<inputFile<<"'" << std::endl;
246 1 return -1;
247 }
248 131 }
249
250
251
252