GCC Code Coverage Report


Directory: ./
File: tmp_project/PhoenixTex2Html/src/PGenericParser.cpp
Date: 2025-07-04 20:24:11
Exec Total Coverage
Lines: 463 517 89.6%
Branches: 654 894 73.2%

Line Branch Exec Source
1 /***************************************
2 Auteur : Pierre Aubert
3 Mail : pierre.aubert@lapp.in2p3.fr
4 Licence : CeCILL-C
5 ****************************************/
6
7 #include "data_all.h"
8 #include "pxml_utils.h"
9 #include "PConfigParser.h"
10 #include "PLatexObj/platexobj_text.h"
11
12 #include "PGenericParser.h"
13
14 ///Do a wget of a file
15 /** @param url : url to be used
16 * @return true on success, false otherwise
17 */
18 bool wgetFile(const PString& url){
19 PString command("wget \""+url+"\"");
20 return system(command.c_str()) != 0;
21 }
22
23 ///Get the sequence of the begining of an environement
24 /** @param envName : name of the environement
25 * @return corresponding sequence
26 */
27 2027772 PVecString getBeginSeqEnv(const PString & envName){
28 2027772 PVecString vecEndPatern;
29
2/2
✓ Branch 1 taken 2027772 times.
✓ Branch 4 taken 2027772 times.
2027772 vecEndPatern.push_back("\\begin");
30
2/2
✓ Branch 1 taken 2027772 times.
✓ Branch 4 taken 2027772 times.
2027772 vecEndPatern.push_back("{");
31
1/1
✓ Branch 1 taken 2027772 times.
2027772 vecEndPatern.push_back(envName);
32
2/2
✓ Branch 1 taken 2027772 times.
✓ Branch 4 taken 2027772 times.
2027772 vecEndPatern.push_back("}");
33 2027772 return vecEndPatern;
34 }
35
36 ///Get the sequence of the ending of an environement
37 /** @param envName : name of the environement
38 * @return corresponding sequence
39 */
40 651 PVecString getEndSeqEnv(const PString & envName){
41 651 PVecString vecEndPatern;
42
2/2
✓ Branch 1 taken 651 times.
✓ Branch 4 taken 651 times.
651 vecEndPatern.push_back("\\end");
43
2/2
✓ Branch 1 taken 651 times.
✓ Branch 4 taken 651 times.
651 vecEndPatern.push_back("{");
44
1/1
✓ Branch 1 taken 651 times.
651 vecEndPatern.push_back(envName);
45
2/2
✓ Branch 1 taken 651 times.
✓ Branch 4 taken 651 times.
651 vecEndPatern.push_back("}");
46 651 return vecEndPatern;
47 }
48
49 ///Default constructor of PGenericParser
50 /** @param installPrefix : installation prefix
51 */
52
10/10
✓ Branch 2 taken 1097 times.
✓ Branch 5 taken 1097 times.
✓ Branch 10 taken 1097 times.
✓ Branch 13 taken 1097 times.
✓ Branch 29 taken 1097 times.
✓ Branch 35 taken 1097 times.
✓ Branch 38 taken 1097 times.
✓ Branch 41 taken 1097 times.
✓ Branch 44 taken 1097 times.
✓ Branch 47 taken 1097 times.
1097 PGenericParser::PGenericParser(const PString & installPrefix){
53
1/1
✓ Branch 1 taken 1097 times.
1097 initialisationPGenericParser(installPrefix);
54 1097 }
55
56 ///Copy constructor of PGenericParser
57 /** @param other : class to copy
58 */
59
10/10
✓ Branch 2 taken 3 times.
✓ Branch 5 taken 3 times.
✓ Branch 10 taken 3 times.
✓ Branch 13 taken 3 times.
✓ Branch 29 taken 3 times.
✓ Branch 35 taken 3 times.
✓ Branch 38 taken 3 times.
✓ Branch 41 taken 3 times.
✓ Branch 44 taken 3 times.
✓ Branch 47 taken 3 times.
3 PGenericParser::PGenericParser(const PGenericParser & other){
60
1/1
✓ Branch 1 taken 3 times.
3 copyPGenericParser(other);
61 3 }
62
63 ///Destructor of PGenericParser
64 2200 PGenericParser::~PGenericParser(){
65
66 }
67
68 ///Definition of equal operator of PGenericParser
69 /** @param other : class to copy
70 * @return copied class
71 */
72 PGenericParser & PGenericParser::operator = (const PGenericParser & other){
73 copyPGenericParser(other);
74 return *this;
75 }
76
77 ///Set if the PGenericParser is in debug mode
78 /** @param isDebugMode : true if the PGenericParser is in debug mode, false if not
79 */
80 130 void PGenericParser::setDebugMode(bool isDebugMode){
81 130 p_isDebugMode = isDebugMode;
82 130 }
83
84 ///Get the current source
85 /** @return current source
86 */
87 const PLatexObj & PGenericParser::getSource() const{
88 return p_currentSource;
89 }
90
91 ///Get the current source
92 /** @return current source
93 */
94 1097 PLatexObj & PGenericParser::getSource(){
95 1097 return p_currentSource;
96 }
97
98 ///Get the vector of include directories
99 /** @return vector of include directories
100 */
101 const PVecString & PGenericParser::getVecIncludeDir() const{
102 return p_vecIncludeDir;
103 }
104
105 ///Get the vector of include directories
106 /** @return vector of include directories
107 */
108 130 PVecString & PGenericParser::getVecIncludeDir(){
109 130 return p_vecIncludeDir;
110 }
111
112 ///Get the map of all bibliography entries
113 /** @return map of all bibliography entries
114 */
115 const PMapBiblioEntry & PGenericParser::getMapBiblioEntry() const{return p_mapBiblioEntry;}
116
117 ///Get the map of all bibliography entries
118 /** @return map of all bibliography entries
119 */
120 8 PMapBiblioEntry & PGenericParser::getMapBiblioEntry(){return p_mapBiblioEntry;}
121
122 ///Get the width of the book sidebar
123 /** @return width of the book sidebar
124 */
125 11 const PString & PGenericParser::getBookSideBarWidth() const{
126 11 return p_bookSideBarWidth;
127 }
128
129 ///Get the book gitlab url
130 /** @return width of the book sidebar
131 */
132 11 const PString & PGenericParser::getBookGitlabUrl() const{
133 11 return p_bookGitlabUrl;
134 }
135
136 ///Say if the book feedback if enable or not
137 /** @return true if the book feedback if enable, false if not
138 */
139 11 bool PGenericParser::getBookEnableFeedback() const{
140 11 return p_isEnableBookFeedback;
141 }
142
143 ///Get the book mail list
144 /** @return book mail list
145 */
146 11 const PString & PGenericParser::getBookMail() const{
147 11 return p_bookMail;
148 }
149
150 ///Get the book master project url
151 /** @return book master project url
152 */
153 11 const PString & PGenericParser::getBookMasterProjectUrl() const{
154 11 return p_bookMasterProjectUrl;
155 }
156
157 ///Get the book main page link
158 /** @return book main page link
159 */
160 11 const PLatexObj & PGenericParser::getBookMainPageLink() const{
161 11 return p_bookMainPageLink;
162 }
163
164 ///Save the css file
165 /** @return true on success, false otherwise
166 */
167 130 bool PGenericParser::saveCss(){
168 130 PVecString vecTheme;
169
2/2
✓ Branch 4 taken 520 times.
✓ Branch 5 taken 130 times.
650 for(std::map<PString, PString>::iterator itStyle(p_cssContent.begin()); itStyle != p_cssContent.end(); ++itStyle){
170
1/1
✓ Branch 2 taken 520 times.
520 vecTheme.push_back(itStyle->first);
171 }
172
173
2/2
✓ Branch 4 taken 520 times.
✓ Branch 5 taken 130 times.
650 for(std::map<PString, PString>::iterator itStyle(p_cssContent.begin()); itStyle != p_cssContent.end(); ++itStyle){
174
2/2
✓ Branch 2 taken 520 times.
✓ Branch 6 taken 520 times.
520 PString cssStyle(itStyle->second), cssThemeName(itStyle->first);
175
1/2
✓ Branch 1 taken 520 times.
✗ Branch 2 not taken.
520 if(p_vecExtraEnv.size() != 0lu){
176
2/2
✓ Branch 4 taken 6760 times.
✓ Branch 5 taken 520 times.
7280 for(PMapExtraEnv::iterator it(p_vecExtraEnv.begin()); it != p_vecExtraEnv.end(); ++it){
177
4/4
✓ Branch 2 taken 6760 times.
✓ Branch 5 taken 6760 times.
✓ Branch 8 taken 6760 times.
✓ Branch 11 taken 6760 times.
6760 cssStyle += "." + it->second.getName() + "Style{\n";
178
3/3
✓ Branch 2 taken 6760 times.
✓ Branch 5 taken 6760 times.
✓ Branch 8 taken 6760 times.
6760 cssStyle += select_css_theme(vecTheme, cssThemeName, it->second.getCss());
179
1/1
✓ Branch 1 taken 6760 times.
6760 cssStyle += "}\n\n";
180 }
181 }
182
1/2
✓ Branch 1 taken 520 times.
✗ Branch 2 not taken.
520 if(p_vecExtraFunction.size() != 0lu){
183
2/2
✓ Branch 4 taken 15600 times.
✓ Branch 5 taken 520 times.
16120 for(PMapExtraEnv::iterator it(p_vecExtraFunction.begin()); it != p_vecExtraFunction.end(); ++it){
184
4/4
✓ Branch 2 taken 15600 times.
✓ Branch 5 taken 15600 times.
✓ Branch 8 taken 15600 times.
✓ Branch 11 taken 15600 times.
15600 cssStyle += "." + it->second.getName() + "Style{\n";
185
3/3
✓ Branch 2 taken 15600 times.
✓ Branch 5 taken 15600 times.
✓ Branch 8 taken 15600 times.
15600 cssStyle += select_css_theme(vecTheme, cssThemeName, it->second.getCss());
186
1/1
✓ Branch 1 taken 15600 times.
15600 cssStyle += "}\n\n";
187 }
188 }
189
3/3
✓ Branch 1 taken 520 times.
✓ Branch 4 taken 520 times.
✓ Branch 7 taken 520 times.
1040 PPath fileName(cssThemeName + "_style.css");
190
2/3
✓ Branch 1 taken 520 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 520 times.
520 if(!fileName.saveFileContent(cssStyle)){
191 std::cerr << "PGenericParser::saveCss : can't save the file '"<<fileName<<"'" << std::endl;
192 return false;
193 }
194
3/6
✓ Branch 1 taken 520 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 520 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 520 times.
✗ Branch 8 not taken.
520 }
195 130 return true;
196 130 }
197
198 ///Copy function of PGenericParser
199 /** @param other : class to copy
200 */
201 6 void PGenericParser::copyPGenericParser(const PGenericParser & other){
202 6 p_isDebugMode = other.p_isDebugMode;
203
204 ///Vector of all the environements
205 6 p_vecEnv = other.p_vecEnv;
206 ///Vector of all the functions
207 6 p_vecFunc = other.p_vecFunc;
208
209 ///Vector of the include directories
210 6 p_vecIncludeDir = other.p_vecIncludeDir;
211
212 ///Vector of the name of the extra environement
213 6 p_vecNameExtraEnv = other.p_vecNameExtraEnv;
214 ///Vector of the name of the extra environement
215 6 p_vecNameFunctionExtraEnv = other.p_vecNameFunctionExtraEnv;
216 ///Vector of the name of the extra environement
217 6 p_vecNameMarkdownExtraEnv = other.p_vecNameMarkdownExtraEnv;
218 ///Vector of extra environements
219 6 p_vecExtraEnv = other.p_vecExtraEnv;
220
221 ///Vector of the name of the extra function
222 6 p_vecNameExtraFunction = other.p_vecNameExtraFunction;
223 ///Vector of extra function
224 6 p_vecExtraFunction = other.p_vecExtraFunction;
225
226 ///Vector of the name of the extra environement
227 6 p_vecNameExtraParser = other.p_vecNameExtraParser;
228 ///Vector of the function name of the extra environement
229 6 p_vecNameFunctionExtraParser = other.p_vecNameFunctionExtraParser;
230 ///Vector of the markdown name of the extra environement
231 6 p_vecNameMarkdownExtraParser = other.p_vecNameMarkdownExtraParser;
232 ///Vector of removed latex functions
233 6 p_vecRemoveLatexKeyword = other.p_vecRemoveLatexKeyword;
234 ///Vector of extra parser
235 6 p_vecExtraParser = other.p_vecExtraParser;
236
237 ///Css of all the configurations
238 6 p_cssContent = other.p_cssContent;
239 ///Map of all bibliography entries
240 6 p_mapBiblioEntry = other.p_mapBiblioEntry;
241 ///Map of copied files
242 6 p_mapCopiedFile = other.p_mapCopiedFile;
243
244 6 p_bookSideBarWidth = other.p_bookSideBarWidth;
245 6 p_bookMasterProjectUrl = other.p_bookMasterProjectUrl;
246 6 p_bookMainPageLink = other.p_bookMainPageLink;
247 6 p_bookMail = other.p_bookMail;
248 6 p_bookGitlabUrl = other.p_bookGitlabUrl;
249 6 p_isEnableBookFeedback = other.p_isEnableBookFeedback;
250 6 }
251
252 ///Clear a latex obj
253 /** @param[out] obj : PLatexObj to be cleared
254 */
255 9156 void PGenericParser::clearLatexObj(PLatexObj & obj){
256 9156 obj.getVecContent().clear();
257
1/1
✓ Branch 2 taken 9156 times.
9156 obj.setLabelName("");
258
1/1
✓ Branch 2 taken 9156 times.
9156 obj.setText("");
259
1/1
✓ Branch 2 taken 9156 times.
9156 obj.setName("");
260
1/1
✓ Branch 1 taken 9156 times.
9156 obj.setType(PLatexType::TEXT);
261 9156 }
262
263 ///Increment current char position
264 /** @param[out] textObj : obh to be used to store text
265 */
266 173575 void PGenericParser::incrementCurrentChar(PLatexObj & textObj){
267 //If nothing is known I need to save the current char in the MACRO TEXT
268 173575 char ch = p_parser->getCurrentCh();
269 173575 textObj.getText() += ch;
270 173575 p_parser->getNextChar();
271 173575 }
272
273 ///Play the text latex obj
274 /** @param[out] parent : parent PMacro
275 * @param[out] textObj : PLatexObj to deal with text
276 * @param isRemoveFirstLastSpace : true to remove first and last spaces (tabs and newline) before added the text object
277 * @return true if the textObj is added, false otherwise
278 */
279 10585 bool PGenericParser::playTextLatexObj(PLatexObj & parent, PLatexObj & textObj, bool isRemoveFirstLastSpace){
280
2/2
✓ Branch 0 taken 102 times.
✓ Branch 1 taken 10483 times.
10585 if(isRemoveFirstLastSpace){
281
2/2
✓ Branch 3 taken 102 times.
✓ Branch 6 taken 102 times.
102 textObj.setText(textObj.getText().eraseFirstLastChar(" \t\n"));
282 }
283
2/2
✓ Branch 2 taken 6958 times.
✓ Branch 3 taken 3627 times.
10585 if(textObj.getText() != ""){
284 6958 parent.getVecContent().push_back(textObj);
285 6958 clearLatexObj(textObj);
286 6958 return true;
287 }
288 3627 return false;
289 }
290
291
292 ///Add latex obj in parent
293 /** @param[out] parent : parent PLatexObj
294 * @param obj : PLatexObj to be added into parent
295 */
296 6778 void PGenericParser::addLatexObj(PLatexObj & parent, const PLatexObj & obj){
297 6778 parent.getVecContent().push_back(obj);
298 6778 }
299
300 ///Execute the given latex command
301 /** @param inputStr : input latex string
302 * @return text string
303 */
304 377 PString PGenericParser::executeLatexCommand(const PString & inputStr){
305
2/2
✓ Branch 1 taken 377 times.
✓ Branch 4 taken 377 times.
377 PConfigParser parser;
306
3/3
✓ Branch 1 taken 377 times.
✓ Branch 4 taken 377 times.
✓ Branch 7 taken 377 times.
377 parser.setFileContent(inputStr + "\n");
307
1/1
✓ Branch 1 taken 377 times.
377 PString out("");
308
2/3
✓ Branch 1 taken 377 times.
✓ Branch 3 taken 377 times.
✗ Branch 4 not taken.
377 if(parser.fullParsing()){
309
2/2
✓ Branch 2 taken 377 times.
✓ Branch 5 taken 377 times.
377 out = platexobj_text(parser.getSource());
310 }else{
311 out = inputStr;
312 }
313 754 return out;
314 377 }
315
316 ///Get the string between the braces {...}
317 /** @param previousToken : previous token to be used
318 * @return string between {...}
319 */
320 5398 PString PGenericParser::getStringBetweenBraces(const PString & previousToken){
321
4/4
✓ Branch 1 taken 5398 times.
✓ Branch 4 taken 5398 times.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 5397 times.
5398 if(!isMatch("{")){
322
1/1
✓ Branch 1 taken 1 times.
1 errorAt();
323
7/7
✓ 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.
✓ Branch 19 taken 1 times.
1 std::cerr << "PGenericParser::getStringBetweenBraces : expect '{' after '"<<previousToken<<"' instead of '"<<p_parser->getNextChar()<<"'" << std::endl;
324
1/1
✓ Branch 1 taken 1 times.
1 stopParsing();
325
1/1
✓ Branch 1 taken 1 times.
1 return "";
326 }
327 // PString link(p_parser->getUntilKeyWithoutPatern("}"));
328
3/3
✓ Branch 1 taken 5397 times.
✓ Branch 4 taken 5397 times.
✓ Branch 7 taken 5397 times.
10794 PString link(p_parser->getUntilKeyWithoutPaternRecurse("}", "{"));
329
1/1
✓ Branch 1 taken 5397 times.
5397 return link;
330 5397 }
331
332 ///Get optional string between braces {...}
333 /** @return string between braces or empty string if there is no hook
334 */
335 63 PString PGenericParser::getOptionStringBetweenBraces(){
336
4/4
✓ Branch 1 taken 63 times.
✓ Branch 4 taken 63 times.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 62 times.
63 if(!isMatch("{")){ //No hook => empty string
337
1/1
✓ Branch 1 taken 1 times.
1 return "";
338 }
339
3/3
✓ Branch 1 taken 62 times.
✓ Branch 4 taken 62 times.
✓ Branch 7 taken 62 times.
124 PString link(p_parser->getUntilKeyWithoutPaternRecurse("}", "{"));
340
1/1
✓ Branch 1 taken 62 times.
62 return link;
341 62 }
342
343 ///Get optional string between hooks [...]
344 /** @return string between hooks or empty string if there is no hook
345 */
346 897 PString PGenericParser::getOptionStringBetweenHook(){
347
2/2
✓ Branch 1 taken 897 times.
✓ Branch 4 taken 897 times.
897 PARSER_SKIP_SPACE
348
1/1
✓ Branch 1 taken 897 times.
897 char ch = p_parser->getCurrentCh();
349
1/2
✓ Branch 0 taken 897 times.
✗ Branch 1 not taken.
897 if(ch != '['){ //No hook => empty string
350
1/1
✓ Branch 1 taken 897 times.
897 return "";
351 }
352 p_parser->getNextChar();
353 PString link(p_parser->getUntilKeyWithoutPatern("]"));
354 return link;
355 }
356
357 ///Parse all the functions which have mono parameter in braces {...}
358 /** @param[out] parent : parent PLatexObj
359 * @param[out] textObj : PLatexObj to deal with text
360 * @param functionName : name of the expected function
361 * @param type : type of the expected function
362 * @return true on success, false otherwise
363 */
364 696287 bool PGenericParser::parseMonoParam(PLatexObj & parent, PLatexObj & textObj, const PString & functionName, PLatexType::PLatexType type){
365
3/3
✓ Branch 1 taken 696287 times.
✓ Branch 3 taken 696134 times.
✓ Branch 4 taken 153 times.
696287 if(!p_parser->isMatch(functionName)){return false;}
366
1/1
✓ Branch 1 taken 153 times.
153 playTextLatexObj(parent, textObj);
367
1/1
✓ Branch 1 taken 153 times.
153 PLatexObj tmp;
368
1/1
✓ Branch 1 taken 153 times.
153 tmp.setType(type);
369
370
1/1
✓ Branch 1 taken 153 times.
153 PString textOption(getOptionStringBetweenHook());
371
1/1
✓ Branch 1 taken 153 times.
153 tmp.setText(textOption);
372
373
1/1
✓ Branch 1 taken 153 times.
153 PString title(getStringBetweenBraces(functionName));
374
1/1
✓ Branch 1 taken 153 times.
153 tmp.setName(title);
375
376
1/1
✓ Branch 1 taken 153 times.
153 addLatexObj(parent, tmp);
377 153 return true;
378 153 }
379
380 ///Parse the generic latex function which have to be used in the latex parser and the markdown parser too
381 /** @param[out] parent : parent PLatexObj
382 * @param[out] textObj : PLatexObj to deal with text
383 * @return true on success, false otherwise
384 */
385 175143 bool PGenericParser::parseGenericLatexObj(PLatexObj & parent, PLatexObj & textObj){
386
3/3
✓ Branch 2 taken 175143 times.
✓ Branch 5 taken 175120 times.
✓ Branch 6 taken 23 times.
175143 if(parseMonoParam(parent, textObj, "\\updateStyle", PLatexType::UPDATESTYLE)){}
387
3/3
✓ Branch 2 taken 175120 times.
✓ Branch 5 taken 175111 times.
✓ Branch 6 taken 9 times.
175120 else if(parseMonoParam(parent, textObj, "\\ref", PLatexType::REF)){}
388
3/3
✓ Branch 2 taken 175111 times.
✓ Branch 5 taken 175102 times.
✓ Branch 6 taken 9 times.
175111 else if(parseMonoParam(parent, textObj, "\\cite", PLatexType::CITATION)){}
389
2/2
✓ Branch 1 taken 175081 times.
✓ Branch 2 taken 21 times.
175102 else if(parseLabel(parent, textObj)){}
390
2/2
✓ Branch 1 taken 175074 times.
✓ Branch 2 taken 7 times.
175081 else if(parserGetEnv(parent, textObj)){}
391
2/2
✓ Branch 1 taken 174946 times.
✓ Branch 2 taken 128 times.
175074 else if(parseMainTitle(parent, textObj)){}
392
2/2
✓ Branch 1 taken 174870 times.
✓ Branch 2 taken 76 times.
174946 else if(parseMainSubTitle(parent, textObj)){}
393
2/2
✓ Branch 1 taken 174742 times.
✓ Branch 2 taken 128 times.
174870 else if(parseMainAuthor(parent, textObj)){}
394
1/2
✓ Branch 1 taken 174742 times.
✗ Branch 2 not taken.
174742 else if(parseMainDate(parent, textObj)){}
395
2/2
✓ Branch 1 taken 174733 times.
✓ Branch 2 taken 9 times.
174742 else if(parseBookSizeBarWidth(parent, textObj)){}
396
2/2
✓ Branch 1 taken 174724 times.
✓ Branch 2 taken 9 times.
174733 else if(parseBookGitlabUrl(parent, textObj)){}
397
2/2
✓ Branch 1 taken 174715 times.
✓ Branch 2 taken 9 times.
174724 else if(parseBookEnableFeedback(parent, textObj)){}
398
2/2
✓ Branch 1 taken 174706 times.
✓ Branch 2 taken 9 times.
174715 else if(parseBookMail(parent, textObj)){}
399
2/2
✓ Branch 1 taken 174697 times.
✓ Branch 2 taken 9 times.
174706 else if(parseBookMasterProject(parent, textObj)){}
400 174697 else{return false;}
401 446 return true;
402 }
403
404 ///Parse latex label
405 /** @param[out] parent : parent PLatexObj
406 * @param[out] textObj : PLatexObj to deal with text
407 * @return true on success, false otherwise
408 */
409 175102 bool PGenericParser::parseLabel(PLatexObj & parent, PLatexObj & textObj){
410
4/4
✓ Branch 1 taken 175102 times.
✓ Branch 4 taken 175102 times.
✓ Branch 7 taken 175081 times.
✓ Branch 8 taken 21 times.
175102 if(!p_parser->isMatchToken("\\label")){return false;}
411
1/1
✓ Branch 1 taken 21 times.
21 playTextLatexObj(parent, textObj);
412
2/2
✓ Branch 1 taken 21 times.
✓ Branch 4 taken 21 times.
21 PString link(getStringBetweenBraces("\\label"));
413
414
1/1
✓ Branch 1 taken 21 times.
21 PLatexObj* ptrLatex = getLastPLatexObj(parent);
415
1/2
✓ Branch 0 taken 21 times.
✗ Branch 1 not taken.
21 if(ptrLatex != NULL){
416
1/1
✓ Branch 1 taken 21 times.
21 ptrLatex->setLabelName(link);
417 }
418 21 return true;
419 21 }
420
421 ///Parse a getenv function
422 /** @param[out] parent : parent PLatexObj
423 * @param[out] textObj : PLatexObj to deal with text
424 * @return true on success, false otherwise
425 */
426 175081 bool PGenericParser::parserGetEnv(PLatexObj & parent, PLatexObj & textObj){
427
4/4
✓ Branch 1 taken 175081 times.
✓ Branch 4 taken 175081 times.
✓ Branch 7 taken 175074 times.
✓ Branch 8 taken 7 times.
175081 if(!p_parser->isMatchToken("\\getenv")){return false;}
428
1/1
✓ Branch 1 taken 7 times.
7 playTextLatexObj(parent, textObj);
429
2/2
✓ Branch 1 taken 7 times.
✓ Branch 4 taken 7 times.
7 PString title(getStringBetweenBraces("\\getenv"));
430
1/1
✓ Branch 1 taken 7 times.
7 PLatexObj tmp;
431
1/1
✓ Branch 1 taken 7 times.
7 tmp.setType(PLatexType::GETENV);
432
1/1
✓ Branch 1 taken 7 times.
7 tmp.setName(title);
433
1/1
✓ Branch 1 taken 7 times.
7 addLatexObj(parent, tmp);
434
435 7 return true;
436 7 }
437
438 ///Parse the main title of the site
439 /** @param[out] parent : parent PLatexObj
440 * @param[out] textObj : PLatexObj to deal with text
441 * @return true on success, false otherwise
442 */
443 175074 bool PGenericParser::parseMainTitle(PLatexObj & parent, PLatexObj & textObj){
444
4/4
✓ Branch 1 taken 175074 times.
✓ Branch 4 taken 175074 times.
✓ Branch 7 taken 174946 times.
✓ Branch 8 taken 128 times.
175074 if(!p_parser->isMatchToken("\\title")){return false;}
445
1/1
✓ Branch 1 taken 128 times.
128 playTextLatexObj(parent, textObj);
446
2/2
✓ Branch 1 taken 128 times.
✓ Branch 4 taken 128 times.
128 PString title(getStringBetweenBraces("\\title"));
447
2/2
✓ Branch 1 taken 128 times.
✓ Branch 4 taken 128 times.
128 parent.setName(executeLatexCommand(title));
448 128 return true;
449 128 }
450
451 ///Parse the main title of the site
452 /** @param[out] parent : parent PLatexObj
453 * @param[out] textObj : PLatexObj to deal with text
454 * @return true on success, false otherwise
455 */
456 174946 bool PGenericParser::parseMainSubTitle(PLatexObj & parent, PLatexObj & textObj){
457
4/4
✓ Branch 1 taken 174946 times.
✓ Branch 4 taken 174946 times.
✓ Branch 7 taken 174870 times.
✓ Branch 8 taken 76 times.
174946 if(!p_parser->isMatchToken("\\subtitle")){return false;}
458
1/1
✓ Branch 1 taken 76 times.
76 playTextLatexObj(parent, textObj);
459
2/2
✓ Branch 1 taken 76 times.
✓ Branch 4 taken 76 times.
76 PString title(getStringBetweenBraces("\\subtitle"));
460
2/2
✓ Branch 1 taken 76 times.
✓ Branch 4 taken 76 times.
76 parent.setSubTitle(executeLatexCommand(title));
461 76 return true;
462 76 }
463
464 ///Parse the main author of the site
465 /** @param[out] parent : parent PLatexObj
466 * @param[out] textObj : PLatexObj to deal with text
467 * @return true on success, false otherwise
468 */
469 174870 bool PGenericParser::parseMainAuthor(PLatexObj & parent, PLatexObj & textObj){
470
4/4
✓ Branch 1 taken 174870 times.
✓ Branch 4 taken 174870 times.
✓ Branch 7 taken 174742 times.
✓ Branch 8 taken 128 times.
174870 if(!p_parser->isMatchToken("\\author")){return false;}
471
1/1
✓ Branch 1 taken 128 times.
128 playTextLatexObj(parent, textObj);
472
2/2
✓ Branch 1 taken 128 times.
✓ Branch 4 taken 128 times.
128 PString title(getStringBetweenBraces("\\author"));
473
2/2
✓ Branch 1 taken 128 times.
✓ Branch 4 taken 128 times.
128 parent.setAuthor(executeLatexCommand(title));
474 128 return true;
475 128 }
476
477 ///Parse the main date of the site
478 /** @param[out] parent : parent PLatexObj
479 * @param[out] textObj : PLatexObj to deal with text
480 * @return true on success, false otherwise
481 */
482 174742 bool PGenericParser::parseMainDate(PLatexObj & parent, PLatexObj & textObj){
483
3/4
✓ Branch 1 taken 174742 times.
✓ Branch 4 taken 174742 times.
✓ Branch 7 taken 174742 times.
✗ Branch 8 not taken.
174742 if(!p_parser->isMatchToken("\\date")){return false;}
484 playTextLatexObj(parent, textObj);
485 PString title(getStringBetweenBraces("\\date"));
486 parent.setDate(executeLatexCommand(title));
487 return true;
488 }
489
490 ///Parse the width of the book sidebar
491 /** @param[out] parent : parent PLatexObj
492 * @param[out] textObj : PLatexObj to deal with text
493 * @return true on success, false otherwise
494 */
495 174742 bool PGenericParser::parseBookSizeBarWidth(PLatexObj & parent, PLatexObj & textObj){
496
4/4
✓ Branch 1 taken 174742 times.
✓ Branch 4 taken 174742 times.
✓ Branch 7 taken 174733 times.
✓ Branch 8 taken 9 times.
174742 if(!p_parser->isMatchToken("\\bookSizebarWidth")){return false;}
497
1/1
✓ Branch 1 taken 9 times.
9 playTextLatexObj(parent, textObj);
498
2/2
✓ Branch 1 taken 9 times.
✓ Branch 4 taken 9 times.
9 PString title(getStringBetweenBraces("\\bookSizebarWidth"));
499
2/2
✓ Branch 1 taken 9 times.
✓ Branch 4 taken 9 times.
9 p_bookSideBarWidth = executeLatexCommand(title);
500 9 return true;
501 9 }
502
503 ///Parse the gitlab url in book mode
504 /** @param[out] parent : parent PLatexObj
505 * @param[out] textObj : PLatexObj to deal with text
506 * @return true on success, false otherwise
507 */
508 174733 bool PGenericParser::parseBookGitlabUrl(PLatexObj & parent, PLatexObj & textObj){
509
4/4
✓ Branch 1 taken 174733 times.
✓ Branch 4 taken 174733 times.
✓ Branch 7 taken 174724 times.
✓ Branch 8 taken 9 times.
174733 if(!p_parser->isMatchToken("\\bookGitlabUrl")){return false;}
510
1/1
✓ Branch 1 taken 9 times.
9 playTextLatexObj(parent, textObj);
511
2/2
✓ Branch 1 taken 9 times.
✓ Branch 4 taken 9 times.
9 PString title(getStringBetweenBraces("\\bookGitlabUrl"));
512
4/4
✓ Branch 1 taken 9 times.
✓ Branch 4 taken 9 times.
✓ Branch 7 taken 9 times.
✓ Branch 10 taken 9 times.
9 p_bookGitlabUrl = executeLatexCommand(title).eraseLastChar("/");
513 9 return true;
514 9 }
515
516 ///Parse the book enable feedback mode
517 /** @param[out] parent : parent PLatexObj
518 * @param[out] textObj : PLatexObj to deal with text
519 * @return true on success, false otherwise
520 */
521 174724 bool PGenericParser::parseBookEnableFeedback(PLatexObj & parent, PLatexObj & textObj){
522
4/4
✓ Branch 1 taken 174724 times.
✓ Branch 4 taken 174724 times.
✓ Branch 7 taken 174715 times.
✓ Branch 8 taken 9 times.
174724 if(!p_parser->isMatchToken("\\bookEnableFeedback")){return false;}
523
1/1
✓ Branch 1 taken 9 times.
9 playTextLatexObj(parent, textObj);
524
3/3
✓ Branch 1 taken 9 times.
✓ Branch 4 taken 9 times.
✓ Branch 7 taken 9 times.
18 PString title(getStringBetweenBraces("\\bookEnableFeedback").toLower());
525
2/2
✓ Branch 1 taken 9 times.
✓ Branch 4 taken 9 times.
9 title = executeLatexCommand(title);
526
3/6
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 9 times.
9 p_isEnableBookFeedback = (title == "true" || title == "yes" || title == "1");
527 9 return true;
528 9 }
529
530 ///Parse the mail in book mode
531 /** @param[out] parent : parent PLatexObj
532 * @param[out] textObj : PLatexObj to deal with text
533 * @return true on success, false otherwise
534 */
535 174715 bool PGenericParser::parseBookMail(PLatexObj & parent, PLatexObj & textObj){
536
4/4
✓ Branch 1 taken 174715 times.
✓ Branch 4 taken 174715 times.
✓ Branch 7 taken 174706 times.
✓ Branch 8 taken 9 times.
174715 if(!p_parser->isMatchToken("\\bookMail")){return false;}
537
1/1
✓ Branch 1 taken 9 times.
9 playTextLatexObj(parent, textObj);
538
2/2
✓ Branch 1 taken 9 times.
✓ Branch 4 taken 9 times.
9 PString title(getStringBetweenBraces("\\bookMail"));
539
2/2
✓ Branch 1 taken 9 times.
✓ Branch 4 taken 9 times.
9 p_bookMail = executeLatexCommand(title);
540 9 return true;
541 9 }
542
543 ///Parse the master project in book mode
544 /** @param[out] parent : parent PLatexObj
545 * @param[out] textObj : PLatexObj to deal with text
546 * @return true on success, false otherwise
547 */
548 174706 bool PGenericParser::parseBookMasterProject(PLatexObj & parent, PLatexObj & textObj){
549
4/4
✓ Branch 1 taken 174706 times.
✓ Branch 4 taken 174706 times.
✓ Branch 7 taken 174697 times.
✓ Branch 8 taken 9 times.
174706 if(!p_parser->isMatchToken("\\bookMasterProject")){return false;}
550
1/1
✓ Branch 1 taken 9 times.
9 playTextLatexObj(parent, textObj);
551
2/2
✓ Branch 1 taken 9 times.
✓ Branch 4 taken 9 times.
9 PString title(getStringBetweenBraces("\\bookMasterProject"));
552
4/4
✓ Branch 1 taken 9 times.
✓ Branch 4 taken 9 times.
✓ Branch 7 taken 9 times.
✓ Branch 10 taken 9 times.
9 p_bookMasterProjectUrl = executeLatexCommand(title).eraseLastChar("/");
553 9 return true;
554 9 }
555
556 ///Get a boolean from xml attribute
557 /** @param[out] isAllowComment : boolean to be set
558 * @param xml : main balise
559 * @param name : name of the attribute
560 */
561 28522 void setBoolFromAttr(bool & isAllowComment, const PXml & xml, const PString & name){
562
1/1
✓ Branch 1 taken 28522 times.
28522 PXmlAttr attr;
563
3/3
✓ Branch 1 taken 28522 times.
✓ Branch 3 taken 2194 times.
✓ Branch 4 taken 26328 times.
28522 if(pxml_getAttrIfExist(attr, xml, name)){
564
2/2
✓ Branch 1 taken 2194 times.
✓ Branch 4 taken 2194 times.
2194 PString value = attr.getValue().toLower();
565
3/6
✓ Branch 1 taken 2194 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2194 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 2194 times.
2194 isAllowComment = value == "yes" || value == "1" || value == "y";
566 2194 }
567 28522 }
568
569 ///Load the extra environements with input file
570 /** @param inputFile : input directory
571 */
572 1227 void PGenericParser::loadDirExtraEnvironementFile(const PPath & inputFile){
573
1/1
✓ Branch 1 taken 1227 times.
1227 PXml root;
574
2/3
✓ Branch 1 taken 1227 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1227 times.
1227 if(!pxml_parserFile(root, inputFile)){
575 std::cerr << "PGenericParser::loadDirExtraEnvironementFile : can't read file '"<<inputFile<<"'" << std::endl;
576 return;
577 }
578
1/1
✓ Branch 1 taken 1227 times.
1227 PXml & childXml = root.getVecChild().front();
579
4/4
✓ Branch 1 taken 1227 times.
✓ Branch 4 taken 1227 times.
✓ Branch 7 taken 130 times.
✓ Branch 8 taken 1097 times.
1227 if(!pxml_getChildIfExist(childXml, root, "environement")){
580
4/4
✓ Branch 1 taken 130 times.
✓ Branch 4 taken 130 times.
✓ Branch 7 taken 130 times.
✓ Branch 10 taken 130 times.
130 std::cerr << "PGenericParser::loadDirExtraEnvironementFile : can't find <environement> </environement> balise in file '"<<inputFile<<"'" << std::endl;
581 130 return;
582 }
583 1097 PVecXml listEnv;
584
3/4
✓ Branch 1 taken 1097 times.
✓ Branch 4 taken 1097 times.
✓ Branch 7 taken 1097 times.
✗ Branch 8 not taken.
1097 if(pxml_getVecChildIfExist(listEnv, childXml, "env")){
585
2/2
✓ Branch 4 taken 14261 times.
✓ Branch 5 taken 1097 times.
15358 for(PVecXml::iterator it(listEnv.begin()); it != listEnv.end(); ++it){
586
1/1
✓ Branch 1 taken 14261 times.
14261 PXmlAttr attrName;
587
3/4
✓ Branch 1 taken 14261 times.
✓ Branch 5 taken 14261 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 14261 times.
14261 if(!pxml_getAttrIfExist(attrName, *it, "name")){continue;}
588
2/2
✓ Branch 1 taken 14261 times.
✓ Branch 4 taken 14261 times.
14261 PString name(attrName.getValue());
589
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 14261 times.
14261 if(name == ""){
590 std::cerr << "PGenericParser::loadDirExtraEnvironementFile : expect name in balise" << std::endl;
591 continue;
592 }
593
1/1
✓ Branch 1 taken 14261 times.
14261 PString balise("div");
594
1/1
✓ Branch 1 taken 14261 times.
14261 PXmlAttr attr;
595
4/4
✓ Branch 1 taken 14261 times.
✓ Branch 5 taken 14261 times.
✓ Branch 8 taken 3291 times.
✓ Branch 9 taken 10970 times.
14261 if(pxml_getAttrIfExist(attr, *it, "balise")){
596
2/2
✓ Branch 1 taken 3291 times.
✓ Branch 4 taken 3291 times.
3291 balise = attr.getValue();
597 }
598 14261 bool isAllowComment(true), isAllowMath(true);
599
2/2
✓ Branch 1 taken 14261 times.
✓ Branch 5 taken 14261 times.
14261 setBoolFromAttr(isAllowComment, *it, "comment");
600
2/2
✓ Branch 1 taken 14261 times.
✓ Branch 5 taken 14261 times.
14261 setBoolFromAttr(isAllowMath, *it, "math");
601
602
1/1
✓ Branch 2 taken 14261 times.
14261 PString contentStr(pxml_getFullContent(*it));
603
604
1/1
✓ Branch 1 taken 14261 times.
14261 PEnvironement tmp;
605
1/1
✓ Branch 1 taken 14261 times.
14261 tmp.setName(name);
606
1/1
✓ Branch 1 taken 14261 times.
14261 tmp.setBalise(balise);
607
1/1
✓ Branch 1 taken 14261 times.
14261 tmp.setCss(contentStr);
608
1/1
✓ Branch 1 taken 14261 times.
14261 tmp.setIsAllowComment(isAllowComment);
609
1/1
✓ Branch 1 taken 14261 times.
14261 tmp.setIsAlloxMath(isAllowMath);
610
611
2/2
✓ Branch 1 taken 14261 times.
✓ Branch 4 taken 14261 times.
14261 p_vecExtraEnv[name] = tmp;
612
1/1
✓ Branch 1 taken 14261 times.
14261 p_vecNameExtraEnv.push_back(name);
613
3/3
✓ Branch 1 taken 14261 times.
✓ Branch 4 taken 14261 times.
✓ Branch 7 taken 14261 times.
14261 p_vecNameFunctionExtraEnv.push_back("\\" + name);
614
3/3
✓ Branch 1 taken 14261 times.
✓ Branch 4 taken 14261 times.
✓ Branch 7 taken 14261 times.
14261 p_vecNameMarkdownExtraEnv.push_back("```" + name);
615
2/4
✓ Branch 5 taken 14261 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 14261 times.
✗ Branch 9 not taken.
14261 }
616 }
617
2/2
✓ Branch 2 taken 1097 times.
✓ Branch 3 taken 130 times.
1227 }
618
619 ///Load the extra environements
620 /** @param inputDir : input directory
621 */
622 1097 void PGenericParser::loadDirExtraEnvironement(const PPath & inputDir){
623
1/1
✓ Branch 1 taken 1097 times.
1097 PListFile listInputFile = inputDir.getAllElementInDir();
624
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1097 times.
1097 if(listInputFile.size() == 0lu){
625 std::cerr << "PGenericParser::loadDirExtraEnvironement : can't read directory '"<<inputDir<<"'" << std::endl;
626 return;
627 }
628
2/2
✓ Branch 3 taken 1227 times.
✓ Branch 4 taken 1097 times.
2324 for(PListFile::iterator it(listInputFile.begin()); it != listInputFile.end(); ++it){
629
2/2
✓ Branch 2 taken 1227 times.
✓ Branch 5 taken 1227 times.
1227 loadDirExtraEnvironementFile(inputDir / (*it));
630 }
631
1/2
✓ Branch 1 taken 1097 times.
✗ Branch 2 not taken.
1097 }
632
633 ///Load the extra functions with input file
634 /** @param inputFile : input directory
635 */
636 1227 void PGenericParser::loadDirExtraFunctionFile(const PPath & inputFile){
637
1/1
✓ Branch 1 taken 1227 times.
1227 PXml root;
638
2/3
✓ Branch 1 taken 1227 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1227 times.
1227 if(!pxml_parserFile(root, inputFile)){
639 std::cerr << "PGenericParser::loadDirExtraFunctionFile : can't read file '"<<inputFile<<"'" << std::endl;
640 return;
641 }
642
1/1
✓ Branch 1 taken 1227 times.
1227 PXml & childXml = root.getVecChild().front();
643
4/4
✓ Branch 1 taken 1227 times.
✓ Branch 4 taken 1227 times.
✓ Branch 7 taken 130 times.
✓ Branch 8 taken 1097 times.
1227 if(!pxml_getChildIfExist(childXml, root, "function")){
644
4/4
✓ Branch 1 taken 130 times.
✓ Branch 4 taken 130 times.
✓ Branch 7 taken 130 times.
✓ Branch 10 taken 130 times.
130 std::cerr << "PGenericParser::loadDirExtraFunctionFile : can't find <function> </function> balise in file '"<<inputFile<<"'" << std::endl;
645 130 return;
646 }
647 1097 PVecXml listEnv;
648
3/4
✓ Branch 1 taken 1097 times.
✓ Branch 4 taken 1097 times.
✓ Branch 7 taken 1097 times.
✗ Branch 8 not taken.
1097 if(pxml_getVecChildIfExist(listEnv, childXml, "fct")){
649
2/2
✓ Branch 4 taken 32910 times.
✓ Branch 5 taken 1097 times.
34007 for(PVecXml::iterator it(listEnv.begin()); it != listEnv.end(); ++it){
650
1/1
✓ Branch 1 taken 32910 times.
32910 PXmlAttr attrName;
651
3/4
✓ Branch 1 taken 32910 times.
✓ Branch 5 taken 32910 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 32910 times.
32910 if(!pxml_getAttrIfExist(attrName, *it, "name")){continue;}
652
2/2
✓ Branch 1 taken 32910 times.
✓ Branch 4 taken 32910 times.
32910 PString name(attrName.getValue());
653
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 32910 times.
32910 if(name == ""){
654 std::cerr << "PGenericParser::loadDirExtraFunctionFile : expect name in balise" << std::endl;
655 continue;
656 }
657
1/1
✓ Branch 1 taken 32910 times.
32910 PString balise("span");
658
1/1
✓ Branch 1 taken 32910 times.
32910 PXmlAttr attr;
659
4/4
✓ Branch 1 taken 32910 times.
✓ Branch 5 taken 32910 times.
✓ Branch 8 taken 1097 times.
✓ Branch 9 taken 31813 times.
32910 if(pxml_getAttrIfExist(attr, *it, "balise")){
660
2/2
✓ Branch 1 taken 1097 times.
✓ Branch 4 taken 1097 times.
1097 balise = attr.getValue();
661 }
662
1/1
✓ Branch 2 taken 32910 times.
32910 PString contentStr(pxml_getFullContent(*it));
663
1/1
✓ Branch 1 taken 32910 times.
32910 PEnvironement tmp;
664
1/1
✓ Branch 1 taken 32910 times.
32910 tmp.setName(name);
665
1/1
✓ Branch 1 taken 32910 times.
32910 tmp.setBalise(balise);
666
1/1
✓ Branch 1 taken 32910 times.
32910 tmp.setCss(contentStr);
667
668
2/2
✓ Branch 1 taken 32910 times.
✓ Branch 4 taken 32910 times.
32910 p_vecExtraFunction[name] = tmp;
669
3/3
✓ Branch 1 taken 32910 times.
✓ Branch 4 taken 32910 times.
✓ Branch 7 taken 32910 times.
32910 p_vecNameExtraFunction.push_back("\\" + name);
670
2/4
✓ Branch 5 taken 32910 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 32910 times.
✗ Branch 9 not taken.
32910 }
671 }
672
2/2
✓ Branch 2 taken 1097 times.
✓ Branch 3 taken 130 times.
1227 }
673
674 ///Load the extra functions
675 /** @param inputDir : input directory
676 */
677 1097 void PGenericParser::loadDirExtraFunction(const PPath & inputDir){
678
1/1
✓ Branch 1 taken 1097 times.
1097 PListFile listInputFile = inputDir.getAllElementInDir();
679
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1097 times.
1097 if(listInputFile.size() == 0lu){
680 std::cerr << "PGenericParser::loadDirExtraFunction : can't read directory '"<<inputDir<<"'" << std::endl;
681 return;
682 }
683
2/2
✓ Branch 3 taken 1227 times.
✓ Branch 4 taken 1097 times.
2324 for(PListFile::iterator it(listInputFile.begin()); it != listInputFile.end(); ++it){
684
2/2
✓ Branch 2 taken 1227 times.
✓ Branch 5 taken 1227 times.
1227 loadDirExtraFunctionFile(inputDir / (*it));
685 }
686
1/2
✓ Branch 1 taken 1097 times.
✗ Branch 2 not taken.
1097 }
687
688 ///Load the extra environements with input file
689 /** @param inputFile : input directory
690 */
691 28652 void PGenericParser::loadDirExtraParserFile(const PPath & inputFile){
692
1/1
✓ Branch 1 taken 28652 times.
28652 PXml root;
693
2/3
✓ Branch 1 taken 28652 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 28652 times.
28652 if(!pxml_parserFile(root, inputFile)){
694 std::cerr << "PGenericParser::loadDirExtraParserFile : can't read file '"<<inputFile<<"'" << std::endl;
695 return;
696 }
697
1/1
✓ Branch 1 taken 28652 times.
28652 PXml & childXml = root.getVecChild().front();
698
4/4
✓ Branch 1 taken 28652 times.
✓ Branch 4 taken 28652 times.
✓ Branch 7 taken 130 times.
✓ Branch 8 taken 28522 times.
28652 if(!pxml_getChildIfExist(childXml, root, "highlighting")){
699
4/4
✓ Branch 1 taken 130 times.
✓ Branch 4 taken 130 times.
✓ Branch 7 taken 130 times.
✓ Branch 10 taken 130 times.
130 std::cerr << "PGenericParser::loadDirExtraParserFile : can't find <highlighting> </highlighting> balise in file '"<<inputFile<<"'" << std::endl;
700 130 return;
701 }
702
3/3
✓ Branch 1 taken 28522 times.
✓ Branch 4 taken 28522 times.
✓ Branch 7 taken 28522 times.
28522 PString environementName(inputFile.getFileName().eraseExtension());
703
1/1
✓ Branch 1 taken 28522 times.
28522 p_vecNameExtraParser.push_back(environementName);
704
3/3
✓ Branch 1 taken 28522 times.
✓ Branch 4 taken 28522 times.
✓ Branch 7 taken 28522 times.
28522 p_vecNameFunctionExtraParser.push_back("\\" + environementName);
705
3/3
✓ Branch 1 taken 28522 times.
✓ Branch 4 taken 28522 times.
✓ Branch 7 taken 28522 times.
28522 p_vecNameMarkdownExtraParser.push_back("```" + environementName);
706
707
1/1
✓ Branch 1 taken 28522 times.
28522 PParserEnv parserEnv;
708
1/1
✓ Branch 1 taken 28522 times.
28522 parserEnv.setName(environementName);
709
710
1/1
✓ Branch 1 taken 28522 times.
28522 PXml matchPlainText;
711
3/4
✓ Branch 1 taken 28522 times.
✓ Branch 4 taken 28522 times.
✓ Branch 7 taken 28522 times.
✗ Branch 8 not taken.
28522 if(pxml_getChildIfExist(matchPlainText, childXml, "plainText")){
712
3/3
✓ Branch 1 taken 28522 times.
✓ Branch 4 taken 28522 times.
✓ Branch 7 taken 28522 times.
28522 parserEnv.setPlainText(convertBackSlahedStr(pxml_getFullContent(matchPlainText)));
713 }
714 28522 PVecXml listEnv;
715
3/4
✓ Branch 1 taken 28522 times.
✓ Branch 4 taken 28522 times.
✓ Branch 7 taken 28522 times.
✗ Branch 8 not taken.
28522 if(pxml_getVecChildIfExist(listEnv, childXml, "context")){
716
2/2
✓ Branch 4 taken 321421 times.
✓ Branch 5 taken 28522 times.
349943 for(PVecXml::iterator itBalise(listEnv.begin()); itBalise != listEnv.end(); ++itBalise){
717
1/1
✓ Branch 1 taken 321421 times.
321421 PXmlAttr attrClass;
718
3/4
✓ Branch 1 taken 321421 times.
✓ Branch 5 taken 321421 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 321421 times.
321421 if(!pxml_getAttrIfExist(attrClass, *itBalise, "class")){continue;}
719
2/2
✓ Branch 1 taken 321421 times.
✓ Branch 4 taken 321421 times.
321421 PString nameClass(attrClass.getValue());
720
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 321421 times.
321421 if(nameClass == ""){
721 std::cerr << "PGenericParser::loadDirExtraEnvironementFile : expect 'class' in balise" << std::endl;
722 continue;
723 }
724
1/1
✓ Branch 1 taken 321421 times.
321421 PContext tmp;
725
1/1
✓ Branch 1 taken 321421 times.
321421 tmp.setName(nameClass);
726
727
1/1
✓ Branch 1 taken 321421 times.
321421 PXml matchBegin;
728
4/4
✓ Branch 1 taken 321421 times.
✓ Branch 5 taken 321421 times.
✓ Branch 8 taken 144804 times.
✓ Branch 9 taken 176617 times.
321421 if(pxml_getChildIfExist(matchBegin, *itBalise, "begin")){
729
3/3
✓ Branch 1 taken 144804 times.
✓ Branch 4 taken 144804 times.
✓ Branch 7 taken 144804 times.
144804 tmp.setBegin(convertBackSlahedStr(pxml_getFullContent(matchBegin)));
730 }
731
1/1
✓ Branch 1 taken 321421 times.
321421 PXml matchEnd;
732
4/4
✓ Branch 1 taken 321421 times.
✓ Branch 5 taken 321421 times.
✓ Branch 8 taken 144804 times.
✓ Branch 9 taken 176617 times.
321421 if(pxml_getChildIfExist(matchEnd, *itBalise, "end")){
733
3/3
✓ Branch 1 taken 144804 times.
✓ Branch 4 taken 144804 times.
✓ Branch 7 taken 144804 times.
144804 tmp.setEnd(convertBackSlahedStr(pxml_getFullContent(matchEnd)));
734 }
735
1/1
✓ Branch 1 taken 321421 times.
321421 PXml matchNotBeforeBegin;
736
4/4
✓ Branch 1 taken 321421 times.
✓ Branch 5 taken 321421 times.
✓ Branch 8 taken 1097 times.
✓ Branch 9 taken 320324 times.
321421 if(pxml_getChildIfExist(matchNotBeforeBegin, *itBalise, "notBeforeBegin")){
737
3/3
✓ Branch 1 taken 1097 times.
✓ Branch 4 taken 1097 times.
✓ Branch 7 taken 1097 times.
1097 tmp.setNotBeforeBegin(convertBackSlahedStr(pxml_getFullContent(matchNotBeforeBegin)));
738 }
739
1/1
✓ Branch 1 taken 321421 times.
321421 PXml matchNotAfterBegin;
740
3/4
✓ Branch 1 taken 321421 times.
✓ Branch 5 taken 321421 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 321421 times.
321421 if(pxml_getChildIfExist(matchNotAfterBegin, *itBalise, "notAfterBegin")){
741 tmp.setNotAfterBegin(convertBackSlahedStr(pxml_getFullContent(matchNotAfterBegin)));
742 }
743
1/1
✓ Branch 1 taken 321421 times.
321421 PXml matchNotBeforEnd;
744
4/4
✓ Branch 1 taken 321421 times.
✓ Branch 5 taken 321421 times.
✓ Branch 8 taken 17552 times.
✓ Branch 9 taken 303869 times.
321421 if(pxml_getChildIfExist(matchNotBeforEnd, *itBalise, "notBeforeEnd")){
745
3/3
✓ Branch 1 taken 17552 times.
✓ Branch 4 taken 17552 times.
✓ Branch 7 taken 17552 times.
17552 tmp.setNotBeforeEnd(convertBackSlahedStr(pxml_getFullContent(matchNotBeforEnd)));
746 }
747 321421 PVecXml listKw;
748
4/4
✓ Branch 1 taken 321421 times.
✓ Branch 5 taken 321421 times.
✓ Branch 8 taken 119573 times.
✓ Branch 9 taken 201848 times.
321421 if(pxml_getVecChildIfExist(listKw, *itBalise, "keyword")){
749
2/2
✓ Branch 3 taken 1976794 times.
✓ Branch 4 taken 119573 times.
2096367 for(PVecXml::iterator it(listKw.begin()); it != listKw.end(); ++it){
750
4/4
✓ Branch 1 taken 1976794 times.
✓ Branch 5 taken 1976794 times.
✓ Branch 8 taken 1976794 times.
✓ Branch 11 taken 1976794 times.
1976794 tmp.getVecKeyword().push_back(convertBackSlahedStr(pxml_getFullContent(*it)));
751 }
752 }
753 321421 PVecXml listDelimiter;
754
4/4
✓ Branch 1 taken 321421 times.
✓ Branch 5 taken 321421 times.
✓ Branch 8 taken 2194 times.
✓ Branch 9 taken 319227 times.
321421 if(pxml_getVecChildIfExist(listDelimiter, *itBalise, "delimiter")){
755
2/2
✓ Branch 3 taken 17552 times.
✓ Branch 4 taken 2194 times.
19746 for(PVecXml::iterator it(listDelimiter.begin()); it != listDelimiter.end(); ++it){
756
4/4
✓ Branch 1 taken 17552 times.
✓ Branch 5 taken 17552 times.
✓ Branch 8 taken 17552 times.
✓ Branch 11 taken 17552 times.
17552 tmp.getVecDelimiter().push_back(convertBackSlahedStr(pxml_getFullContent(*it)));
757 }
758 }
759
760
1/1
✓ Branch 1 taken 321421 times.
321421 PXml matchSequence;
761
4/4
✓ Branch 1 taken 321421 times.
✓ Branch 5 taken 321421 times.
✓ Branch 8 taken 55947 times.
✓ Branch 9 taken 265474 times.
321421 if(pxml_getChildIfExist(matchSequence, *itBalise, "sequence")){
762
1/1
✓ Branch 1 taken 55947 times.
55947 PParseSeq seq;
763
2/3
✓ Branch 1 taken 55947 times.
✓ Branch 3 taken 55947 times.
✗ Branch 4 not taken.
55947 if(loadParserSeq(seq, matchSequence)){
764
1/1
✓ Branch 1 taken 55947 times.
55947 tmp.setSeq(seq);
765 }else{
766 std::cerr << "PGenericParser::loadDirExtraParserFile : can't initialise sequence with balise in file '"<<inputFile<<"'" << std::endl;
767 }
768 55947 }
769
2/2
✓ Branch 1 taken 321421 times.
✓ Branch 4 taken 321421 times.
321421 parserEnv.getVecContext().push_back(tmp);
770
2/4
✓ Branch 10 taken 321421 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 321421 times.
✗ Branch 14 not taken.
321421 }
771
2/2
✓ Branch 1 taken 28522 times.
✓ Branch 4 taken 28522 times.
28522 p_vecExtraParser.getVecEnv().push_back(parserEnv);
772 }
773
2/2
✓ Branch 5 taken 28522 times.
✓ Branch 6 taken 130 times.
28652 }
774
775 ///Load the extra parsers
776 /** @param inputDir : input directory
777 */
778 1097 void PGenericParser::loadDirExtraParser(const PPath & inputDir){
779
1/1
✓ Branch 1 taken 1097 times.
1097 PListFile listInputFile = inputDir.getAllElementInDir();
780
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1097 times.
1097 if(listInputFile.size() == 0lu){
781 std::cerr << "PGenericParser::loadDirExtraParser : can't read directory '"<<inputDir<<"'" << std::endl;
782 return;
783 }
784
2/2
✓ Branch 3 taken 28652 times.
✓ Branch 4 taken 1097 times.
29749 for(PListFile::iterator it(listInputFile.begin()); it != listInputFile.end(); ++it){
785
2/2
✓ Branch 2 taken 28652 times.
✓ Branch 5 taken 28652 times.
28652 loadDirExtraParserFile(inputDir / (*it));
786 }
787
1/2
✓ Branch 1 taken 1097 times.
✗ Branch 2 not taken.
1097 }
788
789 ///Load the css
790 /** @param inputDir : input directory
791 */
792 1097 void PGenericParser::loadCss(const PPath & inputDir){
793
1/1
✓ Branch 1 taken 1097 times.
1097 PListFile listInputFile = inputDir.getAllElementInDir();
794
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1097 times.
1097 if(listInputFile.size() == 0lu){
795 std::cerr << "PGenericParser::loadCss : can't read directory '"<<inputDir<<"'" << std::endl;
796 return;
797 }
798
2/2
✓ Branch 4 taken 3421 times.
✓ Branch 5 taken 1097 times.
4518 for(PListFile::iterator it(listInputFile.begin()); it != listInputFile.end(); ++it){
799
3/3
✓ Branch 2 taken 3421 times.
✓ Branch 5 taken 3421 times.
✓ Branch 8 taken 3421 times.
3421 PString styleName(it->getFileName().eraseExtension());
800
1/1
✓ Branch 2 taken 3421 times.
3421 PPath tmpFile(inputDir / (*it));
801
3/3
✓ Branch 1 taken 3421 times.
✓ Branch 4 taken 3421 times.
✓ Branch 7 taken 3421 times.
3421 p_cssContent[styleName] = tmpFile.loadFileContent();
802 3421 }
803
1/2
✓ Branch 1 taken 1097 times.
✗ Branch 2 not taken.
1097 }
804
805 ///Load the map of copied files
806 1097 void PGenericParser::loadMapFile(){
807
1/1
✓ Branch 1 taken 1097 times.
1097 PString fileName(COPIED_RECOVER_FILE);
808
3/3
✓ Branch 1 taken 1097 times.
✓ Branch 3 taken 403 times.
✓ Branch 4 taken 694 times.
1097 if(!data_load(fileName, p_mapCopiedFile)){return;}
809
2/2
✓ Branch 1 taken 694 times.
✓ Branch 2 taken 403 times.
1097 }
810
811 ///Save the map of copied files
812 1095 void PGenericParser::saveMapFile(){
813
1/1
✓ Branch 1 taken 1095 times.
1095 PString fileName(COPIED_RECOVER_FILE);
814
3/3
✓ Branch 1 taken 1095 times.
✓ Branch 3 taken 339 times.
✓ Branch 4 taken 756 times.
1095 if(!data_save(fileName, p_mapCopiedFile)){return;}
815
2/2
✓ Branch 1 taken 756 times.
✓ Branch 2 taken 339 times.
1095 }
816
817 ///Get the absolute path of a file
818 /** @param fileName : file to be used
819 * @return corresponding absolute file name
820 */
821 418 PPath PGenericParser::getAbsoluteFileName(const PPath & fileName){
822
1/1
✓ Branch 1 taken 418 times.
418 PPath fileToBeCopied(fileName);
823
3/3
✓ Branch 1 taken 418 times.
✓ Branch 3 taken 209 times.
✓ Branch 4 taken 209 times.
418 if(!fileToBeCopied.isFileExist()){ //If the fileName does not exists, it is relative to the current parsed file
824
4/4
✓ Branch 1 taken 209 times.
✓ Branch 4 taken 209 times.
✓ Branch 7 taken 209 times.
✓ Branch 10 taken 209 times.
209 fileToBeCopied = p_parser->getFileName().getParentDirectory() / fileName;
825
3/3
✓ Branch 1 taken 209 times.
✓ Branch 3 taken 141 times.
✓ Branch 4 taken 68 times.
209 if(!fileToBeCopied.isFileExist()){ //Il the fileName still does not exists, we have to complain
826
6/6
✓ Branch 1 taken 141 times.
✓ Branch 4 taken 141 times.
✓ Branch 7 taken 141 times.
✓ Branch 10 taken 141 times.
✓ Branch 13 taken 141 times.
✓ Branch 16 taken 141 times.
141 std::cerr << "PGenericParser::getAbsoluteFileName : file '"<<fileName<<"' does not exists, even relative to the current parsed file that gives '"<<fileToBeCopied<<"'" << std::endl;
827
2/2
✓ Branch 1 taken 141 times.
✓ Branch 4 taken 141 times.
141 return PPath("");
828 }
829 }
830
1/1
✓ Branch 1 taken 277 times.
277 return fileToBeCopied;
831 418 }
832
833 ///Copy a file
834 /** @param outputDir : output directory where to put the input file
835 * @param fileName ; name of the file to be copied
836 * @return the name of the copied file, empty string on fail
837 */
838 412 PPath PGenericParser::copyFile(const PPath & outputDir, const PPath & fileName){
839
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 412 times.
412 if(fileName == ""){
840 std::cerr << "PGenericParser::copyFile : fileName is empty" << std::endl;
841 return PPath("");
842 }
843
1/1
✓ Branch 1 taken 412 times.
412 PPath fileToBeCopied(getAbsoluteFileName(fileName));
844
2/2
✓ Branch 1 taken 141 times.
✓ Branch 2 taken 271 times.
412 if(fileToBeCopied == ""){ //If the fileName does not exists, it is relative to the current parsed file
845
6/6
✓ Branch 1 taken 141 times.
✓ Branch 4 taken 141 times.
✓ Branch 7 taken 141 times.
✓ Branch 10 taken 141 times.
✓ Branch 13 taken 141 times.
✓ Branch 16 taken 141 times.
141 std::cerr << "PGenericParser::copyFile : file '"<<fileName<<"' does not exists, even relative to the current parsed file that gives '"<<fileToBeCopied<<"'" << std::endl;
846
2/2
✓ Branch 1 taken 141 times.
✓ Branch 4 taken 141 times.
141 return PPath("");
847 }
848
849
2/2
✓ Branch 1 taken 271 times.
✓ Branch 4 taken 271 times.
271 PString baseFileName(fileToBeCopied.getFileName());
850
4/4
✓ Branch 1 taken 271 times.
✓ Branch 4 taken 271 times.
✓ Branch 7 taken 271 times.
✓ Branch 10 taken 271 times.
542 PString linkDir(fileName.getParentDirectory().replace("../", ""));
851
10/10
✓ Branch 1 taken 271 times.
✓ Branch 4 taken 271 times.
✓ Branch 7 taken 271 times.
✓ Branch 10 taken 271 times.
✓ Branch 13 taken 271 times.
✓ Branch 16 taken 271 times.
✓ Branch 19 taken 271 times.
✓ Branch 22 taken 271 times.
✓ Branch 25 taken 271 times.
✓ Branch 28 taken 271 times.
542 PPath buildFileName(outputDir + PPath("/") + linkDir + PPath("/") + baseFileName);
852
853 //Do we know the input file (did we already copy it)
854
1/1
✓ Branch 1 taken 271 times.
271 PMapFile::iterator it(p_mapCopiedFile.find(fileName));
855
2/2
✓ Branch 2 taken 133 times.
✓ Branch 3 taken 138 times.
271 if(it != p_mapCopiedFile.end()){
856 //Let's check if the copied file still exists
857
2/3
✓ Branch 1 taken 133 times.
✓ Branch 3 taken 133 times.
✗ Branch 4 not taken.
133 if(buildFileName.isFileExist()){
858 //Ok, now let's get it's last modification time to be sure
859
1/1
✓ Branch 1 taken 133 times.
133 time_t currentModifTime = fileToBeCopied.getFileModificationTime();
860 //Now let's check if it is the same one
861
3/6
✓ Branch 1 taken 133 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 133 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 133 times.
✗ Branch 6 not taken.
133 if(currentModifTime == it->second && currentModifTime > 0){ //negative value is an error
862 //Ok, no need to copy, we already did it and the file if up to date
863
5/5
✓ Branch 1 taken 133 times.
✓ Branch 4 taken 133 times.
✓ Branch 7 taken 133 times.
✓ Branch 10 taken 133 times.
✓ Branch 13 taken 133 times.
133 std::cout << "PGenericParser::copyFile : no need to copy file '"<<fileName<<"' already updated at time " << currentModifTime << std::endl;
864
1/1
✓ Branch 1 taken 133 times.
133 return buildFileName;
865 }
866 }
867 }
868
869
2/3
✓ Branch 1 taken 138 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 138 times.
138 if(linkDir != ""){ //If there is other directories
870 if(!PPath(outputDir + "/" + linkDir).createDirectory()){
871 std::cerr << "PGenericParser::copyFile : cannot create directory '"<<(outputDir + "/" + linkDir)<<"'" << std::endl;
872 return PPath("");
873 }
874 }else{
875
2/3
✓ Branch 1 taken 138 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 138 times.
138 if(!outputDir.createDirectory()){
876 std::cerr << "PGenericParser::copyFile : cannot create directory '"<<outputDir<<"'" << std::endl;
877 return PPath("");
878 }
879 }
880
881 //Set the modification time
882
1/1
✓ Branch 1 taken 138 times.
138 time_t lastModifTime = fileToBeCopied.getFileModificationTime();
883
884
4/4
✓ Branch 1 taken 138 times.
✓ Branch 4 taken 138 times.
✓ Branch 7 taken 138 times.
✓ Branch 10 taken 138 times.
276 PString command("cp "+fileToBeCopied+" " + buildFileName);
885
2/3
✓ Branch 2 taken 138 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 138 times.
138 if(system(command.c_str()) != 0){
886 errorAt();
887 std::cerr << "PGenericParser::copyFile : can't copy file '"<<fileToBeCopied<<"' into '"<<buildFileName<<"' directory" << std::endl;
888 stopParsing();
889 return PPath("");
890 }
891 // std::cout << "PGenericParser::copyFile : copy file '"<<fileToBeCopied<<"' at time " << lastModifTime << std::endl;
892
1/1
✓ Branch 1 taken 138 times.
138 p_mapCopiedFile[fileToBeCopied] = lastModifTime;
893
1/1
✓ Branch 1 taken 138 times.
138 return buildFileName;
894 412 }
895
896 ///Initialisation function of the class PGenericParser
897 /** @param baseInstallPrefix : installation prefix
898 */
899 1097 void PGenericParser::initialisationPGenericParser(const PString & baseInstallPrefix){
900 1097 p_isDebugMode = false;
901
1/1
✓ Branch 1 taken 1097 times.
1097 p_currentText.setType(PLatexType::TEXT);
902
1/1
✓ Branch 1 taken 1097 times.
1097 p_currentSource.setType(PLatexType::FILE);
903
904
1/1
✓ Branch 1 taken 1097 times.
1097 PString installPrefix(CMAKE_INSTALL_PREFIX);
905
3/3
✓ Branch 1 taken 1097 times.
✓ Branch 3 taken 130 times.
✓ Branch 4 taken 967 times.
1097 if(baseInstallPrefix != ""){
906
1/1
✓ Branch 1 taken 130 times.
130 installPrefix = baseInstallPrefix;
907 }
908
909
3/3
✓ Branch 1 taken 1097 times.
✓ Branch 4 taken 1097 times.
✓ Branch 7 taken 1097 times.
2194 PPath dirExtraEnv(installPrefix+"/share/PhoenixTex2Html/ENVIRONEMENT");
910
1/1
✓ Branch 1 taken 1097 times.
1097 loadDirExtraEnvironement(dirExtraEnv);
911
912
3/3
✓ Branch 1 taken 1097 times.
✓ Branch 4 taken 1097 times.
✓ Branch 7 taken 1097 times.
2194 PPath dirExtraFunction(installPrefix+"/share/PhoenixTex2Html/FUNCTION");
913
1/1
✓ Branch 1 taken 1097 times.
1097 loadDirExtraFunction(dirExtraFunction);
914
915
3/3
✓ Branch 1 taken 1097 times.
✓ Branch 4 taken 1097 times.
✓ Branch 7 taken 1097 times.
2194 PPath dirExtraParser(installPrefix+"/share/PhoenixTex2Html/PARSER");
916
1/1
✓ Branch 1 taken 1097 times.
1097 loadDirExtraParser(dirExtraParser);
917
918
3/3
✓ Branch 1 taken 1097 times.
✓ Branch 4 taken 1097 times.
✓ Branch 7 taken 1097 times.
2194 PPath dirCss(installPrefix+"/share/PhoenixTex2Html/STYLE");
919
1/1
✓ Branch 1 taken 1097 times.
1097 loadCss(dirCss);
920
921
2/2
✓ Branch 1 taken 1097 times.
✓ Branch 4 taken 1097 times.
1097 p_vecRemoveLatexKeyword.push_back("\\toprule");
922
2/2
✓ Branch 1 taken 1097 times.
✓ Branch 4 taken 1097 times.
1097 p_vecRemoveLatexKeyword.push_back("\\midrule");
923
2/2
✓ Branch 1 taken 1097 times.
✓ Branch 4 taken 1097 times.
1097 p_vecRemoveLatexKeyword.push_back("\\bottomrule");
924
2/2
✓ Branch 1 taken 1097 times.
✓ Branch 4 taken 1097 times.
1097 p_vecRemoveLatexKeyword.push_back("\\hline");
925
1/1
✓ Branch 1 taken 1097 times.
1097 loadMapFile();
926
927
1/1
✓ Branch 1 taken 1097 times.
1097 p_bookSideBarWidth = "300px";
928 1097 p_isEnableBookFeedback = false;
929
930
1/1
✓ Branch 1 taken 1097 times.
1097 p_bookMainPageLink.setType(PLatexType::NONE); //None by default, type will be updated on update
931 1097 }
932
933
934
935
936
937