PhoenixLecture  2.0.0
Set of tools to make lectures
ptimetable_tex.cpp
Go to the documentation of this file.
1 /***************************************
2  Auteur : Pierre Aubert
3  Mail : pierre.aubert@lapp.in2p3.fr
4  Licence : CeCILL-C
5 ****************************************/
6 
7 #include <iomanip>
8 #include "platexobj_create.h"
9 
10 #include "ptimetable_invitation.h"
11 #include "ptimetable_tex.h"
12 
14 
18  std::stringstream dateStr;
19  dateStr << date.getYear() << "-" << std::setfill('0') << std::setw(2) << date.getMonth() << "-" << std::setfill('0') << std::setw(2) << date.getDay();
20  return dateStr.str();
21 }
22 
24 
28  std::stringstream dateStr;
29  dateStr << std::setfill('0') << std::setw(2) << date.getDay() << "/" << std::setfill('0') << std::setw(2) << date.getMonth() << "/" << date.getYear();
30  return dateStr.str();
31 }
32 
34 
38  std::stringstream timeStr;
39  timeStr << std::setfill('0') << std::setw(2) << texTime.getHour() << ":" << std::setfill('0') << std::setw(2) << texTime.getMinute();
40  return timeStr.str();
41 }
42 
44 
47 void ptimetable_updateWeekLaterTime(TexWeek & week, const PLatexTime & texTime){
48  PLatexTime & laterTime = week.laterTime;
49  if(laterTime.getHour() < texTime.getHour()){
50  laterTime = texTime;
51  }else if(laterTime.getHour() == texTime.getHour()){
52  if(laterTime.getMinute() < texTime.getMinute()){
53  laterTime = texTime;
54  }
55  }
56 }
57 
59 
63 void ptimetable_addBlockInWeek(TexWeek & week, const PTimeTableBlock & block, const PString & invitationTimeTable){
64  PString blockDate(ptimetable_dateToStr(block.getDate()));
65  PString beginTime(ptimetable_timeToStr(block.getBeginTime()));
66  PString endTime(ptimetable_timeToStr(block.getEndTime()));
69 
70  std::map<PString, TexDay> & mapDay = week.mapDay;
71  std::map<PString, TexDay>::iterator it(mapDay.find(blockDate));
72  if(it != mapDay.end()){
73  it->second.mapBlock[beginTime] = block;
74  }else{
75  TexDay & day = mapDay[blockDate];
76  day.date = block.getDate();
77  day.invitation = invitationTimeTable + "_" + blockDate;
78  day.mapBlock[beginTime] = block;
79  }
80  week.mapHour[beginTime] = "";
81  week.mapHour[endTime] = "";
82 }
83 
85 
88 void ptimetable_createTexTimeTable(TexTimetable & texTimetable, const PTimeTable & timetable){
89  const std::vector<PTimeTableBlock> & vecBlock = timetable.getVecBlock();
90  std::vector<TexWeek> & vecWeek = texTimetable.vecWeek;
91 
92  PString invitationTimeTable(timetable.getInvitation());
93  texTimetable.invitation = invitationTimeTable;
94  TexWeek emptyWeek;
95  emptyWeek.laterTime.setHour(0lu);
96  emptyWeek.laterTime.setMinute(0lu);
97  vecWeek.push_back(emptyWeek);
98  //TODO : here we need to deal with untitled weeks
99  //If no week has a title we have to dispatch days in month, or let say by 6-7 on a row to avoid too large generated web site
100  for(std::vector<PTimeTableBlock>::const_iterator it(vecBlock.begin()); it != vecBlock.end(); ++it){
101  if(it->getWeekTitle().getVecContent().size() != 0lu){
102  vecWeek.push_back(emptyWeek);
103  vecWeek.back().weekTitle = it->getWeekTitle();
104  vecWeek.back().invitation = it->getInvitation();
105  }
106  if(it->getTitle().getVecContent().size() != 0lu){
107  ptimetable_addBlockInWeek(vecWeek.back(), *it, invitationTimeTable);
108  }
109  }
110  //Create the map of speakers
111  const std::vector<PLatexSpeaker> & vecSpeaker = timetable.getVecSpeaker();
112  for(std::vector<PLatexSpeaker>::const_iterator it(vecSpeaker.begin()); it != vecSpeaker.end(); ++it){
113  texTimetable.mapSpeaker[it->getLabel()] = *it;
114  }
115 }
116 
118 
123 bool ptimetable_checkBlockExist(const PTimeTableBlock *& foundBlock, const std::map<PString, PTimeTableBlock> & mapBlock, const PString & timeText){
124  std::map<PString, PTimeTableBlock>::const_iterator it(mapBlock.find(timeText));
125  if(it != mapBlock.end()){
126  foundBlock = &(it->second);
127  return true;
128  }else{
129  foundBlock = NULL;
130  return false;
131  }
132 }
133 
135 
138 void ptimetable_compelteDayEmptyBlock(TexDay & day, const std::map<PString, PString> & mapHour){
139  std::map<PString, PTimeTableBlock> & mapBlock = day.mapBlock;
140  //Let's iterate over times of the week
141  std::map<PString, PString>::const_iterator itHour(mapHour.begin());
142  while(itHour != mapHour.end()){
143  PString currentTime(itHour->first);
144  //Let's check if we found a correspondingblock at this time
145  const PTimeTableBlock * foundBlock = NULL;
146  if(ptimetable_checkBlockExist(foundBlock, mapBlock, currentTime)){
147  //A block has been found, we can jump until its end
148  PString endTime(ptimetable_timeToStr(foundBlock->getEndTime()));
149  //Normally the endtime should exist in mapHour
150  itHour = mapHour.find(endTime);
151  }else{
152  //No block found, ew have to add an empty block
153  PTimeTableBlock emptyBlock;
154  emptyBlock.setIsEmptyBlock(true);
155  mapBlock[currentTime] = emptyBlock;
156  ++itHour;
157  }
158  }
159 }
160 
162 
165  //Let's iterate over weeks
166  std::vector<TexWeek> & vecWeek = texTimetable.vecWeek;
167  for(std::vector<TexWeek>::iterator itWeek(vecWeek.begin()); itWeek != vecWeek.end(); ++itWeek){
168  //Let's iterate over days
169  std::map<PString, TexDay> & mapDay = itWeek->mapDay;
170  std::map<PString, PString> & mapHour = itWeek->mapHour;
171  for(std::map<PString, TexDay>::iterator itDay(mapDay.begin()); itDay != mapDay.end(); ++itDay){
172  ptimetable_compelteDayEmptyBlock(itDay->second, mapHour);
173  }
174  }
175 }
176 
178 
181 void ptimetable_updateBlockTimeRow(PTimeTableBlock & block, const std::map<PString, PString> & mapHour){
182  PString beginTime(ptimetable_timeToStr(block.getBeginTime()));
183  PString endTime(ptimetable_timeToStr(block.getEndTime()));
184 
185  std::map<PString, PString>::const_iterator itBeginTime = mapHour.find(beginTime);
186  std::map<PString, PString>::const_iterator itEndTime = mapHour.find(endTime);
187  if(itBeginTime != mapHour.end() && itEndTime != mapHour.end()){
188  size_t nbHourBlock(0lu);
189  for(std::map<PString, PString>::const_iterator it(itBeginTime); it != itEndTime && it != mapHour.end(); ++it){
190  ++nbHourBlock;
191  }
192  block.setNbTimeRow(nbHourBlock);
193  }
194 }
195 
197 
200  //Let's iterate over weeks
201  std::vector<TexWeek> & vecWeek = texTimetable.vecWeek;
202  for(std::vector<TexWeek>::iterator itWeek(vecWeek.begin()); itWeek != vecWeek.end(); ++itWeek){
203  //Let's iterate over days
204  std::map<PString, TexDay> & mapDay = itWeek->mapDay;
205  std::map<PString, PString> & mapHour = itWeek->mapHour;
206  for(std::map<PString, TexDay>::iterator itDay(mapDay.begin()); itDay != mapDay.end(); ++itDay){
207  //Let's iterate over blocks
208  std::map<PString, PTimeTableBlock> & mapBlock = itDay->second.mapBlock;
209  for(std::map<PString, PTimeTableBlock>::iterator itBlock(mapBlock.begin()); itBlock != mapBlock.end(); ++itBlock){
210  ptimetable_updateBlockTimeRow(itBlock->second, mapHour);
211  }
212  }
213  }
214 }
215 
217 
221  if(block.getIsEmptyBlock()){
223  return;
224  }
226  obj.setRowSpan(block.getNbTimeRow());
227 
228  if(block.getStyle() != ""){
229  obj.setText(block.getStyle());
230  }
231  std::vector<PLatexObj> & vecContent = obj.getVecContent();
232  if(block.getVecSpeaker().size() != 0lu){
233  if(block.getInvitation() != ""){
234  vecContent.push_back(platexobj_createRendezVous(PPath(LATEX_INVITATION_OUTPUT_DIR "/" + block.getInvitation() + ".ics")));
235  vecContent.push_back(platexobj_createRef("sec_" + block.getInvitation(), block.getTitle()));
236  }
237  }else{
238  vecContent = block.getTitle().getVecContent();
239  }
240 }
241 
243 
246 void ptimetable_createTabCell(PLatexObj & cell, const PString & text){
248 
249  PLatexObj textObj;
250  textObj.setType(PLatexType::TEXT);
251  textObj.setText(text);
252  cell.getVecContent().push_back(textObj);
253 }
254 
256 
259 void ptimetable_toTex(PLatexObj & obj, const TexTimetable & texTimetable){
260  //std::vector<PString> vecDay{"Monday", "Tuesday", "Wednesday", "Thrusday", "Friday", "Saturday", "Sunday"};
262  obj.setLabelName(texTimetable.invitation);
263  const std::vector<TexWeek> & vecWeek = texTimetable.vecWeek;
264  for(std::vector<TexWeek>::const_iterator itWeek(vecWeek.begin()); itWeek != vecWeek.end(); ++itWeek){
265  if(itWeek->mapDay.size() == 0lu){continue;}
266  PLatexObj weekObj;
268  if(itWeek->invitation != ""){
269  weekObj.getComplexTitle().push_back(platexobj_createRendezVous(PPath(LATEX_INVITATION_OUTPUT_DIR "/" + itWeek->invitation + ".ics")));
270  weekObj.getComplexTitle().push_back(platexobj_createRef("sec_"+itWeek->invitation, itWeek->weekTitle));
271  weekObj.setLabelName(itWeek->invitation);
272  }
273 
274  const std::map<PString, PString> & mapHour = itWeek->mapHour;
275  const std::map<PString, TexDay> & mapDay = itWeek->mapDay;
276  //Header of the week (days)
278  weekRowHeader.getVecContent().push_back(platexobj_createTimetableBlock("timetableDayStyle", platexobj_createText("Period/Day")));
279 
280  for(std::map<PString, TexDay>::const_iterator itDay(mapDay.begin()); itDay != mapDay.end(); ++itDay){
281  const PLatexDate & date = itDay->second.date;
282  std::stringstream dateStr;
283  dateStr << std::setfill('0') << std::setw(2) << date.getDay() << "/" << std::setfill('0') << std::setw(2) << date.getMonth() << "/" << date.getYear();
284 
285  PLatexObj contentBlock(platexobj_createNone());
286  if(itDay->second.invitation != ""){
287  contentBlock.getVecContent().push_back(platexobj_createRendezVous(PPath(LATEX_INVITATION_OUTPUT_DIR "/" + itDay->second.invitation + ".ics")));
288  contentBlock.getVecContent().push_back(platexobj_createRef("sec_" + itDay->second.invitation, dateStr.str()));
289  }
290 
291  PLatexObj refTimetableBlock(platexobj_createTimetableBlock("timetableDayStyle", contentBlock));
292  weekRowHeader.getVecContent().push_back(refTimetableBlock);
293  }
294  weekObj.getVecContent().push_back(weekRowHeader);
295 
296  //Timetable with hours
297  for(std::map<PString, PString>::const_iterator itHour(mapHour.begin()); itHour != mapHour.end(); ++itHour){
298  PLatexObj timeRowObj;
300 
301  PLatexObj textTime;
302  textTime.setText(itHour->first);
304  timeRowObj.getVecContent().push_back(textTime);
305 
306  size_t i(0lu);
307  for(std::map<PString, TexDay>::const_iterator itDay(mapDay.begin()); itDay != mapDay.end(); ++itDay){
308  //For each day we have to find which block starts at the given hour time
309  const std::map<PString, PTimeTableBlock> & mapBlock = itDay->second.mapBlock;
310  std::map<PString, PTimeTableBlock>::const_iterator itBlock(mapBlock.find(itHour->first));
311  if(itBlock != mapBlock.end()){ //We found a corresponding block
312  PLatexObj blockObj;
313  ptimetable_blockToTex(blockObj, itBlock->second);
314  timeRowObj.getVecContent().push_back(blockObj);
315  }
316  ++i;
317  }
318  weekObj.getVecContent().push_back(timeRowObj);
319  }
320  obj.getVecContent().push_back(weekObj);
321  }
322 }
323 
325 
329 void ptimetable_singleDay(TexDay & out, std::map<PString, PString> & mapHour, const TexDay & day){
330  out.date = day.date;
331  out.invitation = day.invitation;
332  const std::map<PString, PTimeTableBlock> & mapBlock = day.mapBlock;
333  for(std::map<PString, PTimeTableBlock>::const_iterator it(mapBlock.begin()); it != mapBlock.end(); ++it){
334  if(it->second.getIsEmptyBlock()){continue;}
335  PString beginTime(ptimetable_timeToStr(it->second.getBeginTime()));
336  mapHour[beginTime] = "";
337  mapHour[ptimetable_timeToStr(it->second.getEndTime())] = "";
338  PTimeTableBlock block(it->second);
339  block.setNbTimeRow(1lu);
340  out.mapBlock[beginTime] = block;
341  }
342 
343 }
344 
346 
350 void ptimetable_texLecture(std::vector<PLatexObj> & vecContent, const PTimeTableBlock & block, const TexTimetable & texTimetable){
351  if(block.getVecSpeaker().size() == 0lu){return;}
352  vecContent.push_back(platexobj_createSection(PLatexType::SUBSECTION, block.getTitle(), "sec_"+block.getInvitation()));
353  if(block.getInvitation() != ""){
354  vecContent.push_back(platexobj_createRendezVous(PPath(LATEX_INVITATION_OUTPUT_DIR "/" + block.getInvitation() + ".ics")));
355  }
356  vecContent.push_back(platexobj_createTextBf("Date", ""));
357  vecContent.push_back(platexobj_createText(" : "+ptimetable_dateToText(block.getDate()), ""));
358  vecContent.push_back(platexobj_createNewLine());
359  vecContent.push_back(platexobj_createTextBf("Location", ""));
360  vecContent.push_back(platexobj_createText(" : ", ""));
361  vecContent.push_back(block.getLocation());
362  vecContent.push_back(platexobj_createNewLine());
363  vecContent.push_back(platexobj_createTextBf("Start at", ""));
364  vecContent.push_back(platexobj_createText(" : "+ptimetable_timeToStr(block.getBeginTime()), ""));
365  vecContent.push_back(platexobj_createNewLine());
366  vecContent.push_back(platexobj_createTextBf("Stop at", ""));
367  vecContent.push_back(platexobj_createText(" : "+ptimetable_timeToStr(block.getEndTime()), ""));
368 
369 
370  vecContent.push_back(platexobj_createSection(PLatexType::SUBSUBSECTIONSTAR, platexobj_createText("Speakers",""), ""));
371  PLatexObj listSpeaker(platexobj_createItemize());
372  const std::vector<PString> & vecSpeaker = block.getVecSpeaker();
373  const std::map<PString, PLatexSpeaker> & mapSpeaker = texTimetable.mapSpeaker;
374  for(std::vector<PString>::const_iterator itSpeaker(vecSpeaker.begin()); itSpeaker != vecSpeaker.end(); ++itSpeaker){
375  std::map<PString, PLatexSpeaker>::const_iterator it(mapSpeaker.find(*itSpeaker));
376  if(it != mapSpeaker.end()){
377  const PLatexSpeaker & speaker = it->second;
378  listSpeaker.getVecContent().push_back(platexobj_createItem(platexobj_createRef("speaker_"+*itSpeaker, speaker.getName())));
379  }else{
380  std::cerr << "ptimetable_texLecture : speaker '"<<(*itSpeaker)<<"' not found in map of speakers" << std::endl;
381  }
382  }
383  vecContent.push_back(listSpeaker);
384  if(block.getDescription().getVecContent().size() != 0lu){
385  vecContent.push_back(platexobj_createSection(PLatexType::SUBSUBSECTIONSTAR, platexobj_createText("Description",""), ""));
386  vecContent.push_back(platexobj_createParagraph(block.getDescription(), ""));
387  }
388 }
389 
391 
396 void ptimetable_texSection(std::vector<PLatexObj> & vecContent, const TexDay & day,
397  const TexTimetable & texTimetable, const TexWeek & week)
398 {
400  vecContent.push_back(sectionTitle);
401  if(day.invitation != ""){
402  vecContent.push_back(platexobj_createRendezVous(PPath(LATEX_INVITATION_OUTPUT_DIR "/" + day.invitation + ".ics")));
403  }
404 
405  TexWeek weekTimeTable;
406  weekTimeTable.invitation = week.invitation;
407  weekTimeTable.weekTitle = week.weekTitle;
408 
409  TexDay outDay;
410  ptimetable_singleDay(outDay, weekTimeTable.mapHour, day);
411  weekTimeTable.mapDay[ptimetable_dateToStr(outDay.date)] = outDay;
412 
413  //Now we create a TexTimetable with the current day
414  TexTimetable dayTimetable;
415  dayTimetable.invitation = texTimetable.invitation;
416  dayTimetable.vecWeek.push_back(weekTimeTable);
417 
418  PLatexObj timetableObj;
419  ptimetable_toTex(timetableObj, dayTimetable);
420  vecContent.push_back(timetableObj);
421 
422  const std::map<PString, PTimeTableBlock> & mapBlock = day.mapBlock;
423  for(std::map<PString, PTimeTableBlock>::const_iterator it(mapBlock.begin()); it != mapBlock.end(); ++it){
424  if(it->second.getIsEmptyBlock()){continue;}
425  ptimetable_texLecture(vecContent, it->second, texTimetable);
426  }
427 }
428 
429 
431 
435 void ptimetable_texChapter(std::vector<PLatexObj> & vecContent, const TexWeek & week, const TexTimetable & texTimetable){
436  if(week.weekTitle.getVecContent().size() != 0lu){
438  vecContent.push_back(chapterTitle);
439  }
440  if(week.invitation != ""){
441  vecContent.push_back(platexobj_createRendezVous(PPath(LATEX_INVITATION_OUTPUT_DIR "/" + week.invitation + ".ics")));
442  }
443  if(week.weekTitle.getVecContent().size() != 0lu){
444  //Now we create a TexTimetable with the current week
445  TexTimetable weekTimetable;
446  weekTimetable.invitation = texTimetable.invitation;
447  weekTimetable.vecWeek.push_back(week);
448  PLatexObj timetableObj;
449  ptimetable_toTex(timetableObj, weekTimetable);
450  vecContent.push_back(timetableObj);
451  }
452  const std::map<PString, TexDay> & mapDay = week.mapDay;
453  for(std::map<PString, TexDay>::const_iterator itDay(mapDay.begin()); itDay != mapDay.end(); ++itDay){
454  ptimetable_texSection(vecContent, itDay->second, texTimetable, week);
455  }
456 }
457 
458 
460 
463 void ptimetable_texPart(std::vector<PLatexObj> & vecContent, const TexTimetable & texTimetable){
464  const std::vector<TexWeek> & vecWeek = texTimetable.vecWeek;
465  for(std::vector<TexWeek>::const_iterator itWeek(vecWeek.begin()); itWeek != vecWeek.end(); ++itWeek){
466  if(itWeek->mapDay.size() == 0lu){continue;}
467  ptimetable_texChapter(vecContent, *itWeek, texTimetable);
468  }
469 }
470 
472 
478 bool ptimetable_tex(std::vector<PLatexObj> & vecContent, const PTimeTable & timetable, const PPath & outputDirectory, bool isSaveSpeaker){
479  //Let's convert the PTimeTable into a more precise representation
480  TexTimetable texTimetable;
481  std::cerr << "ptimetable_tex : call ptimetable_createTexTimeTable" << std::endl;
482  ptimetable_createTexTimeTable(texTimetable, timetable);
483  //Add empty block to make days coherent
484  std::cerr << "ptimetable_tex : call ptimetable_completeEmptyBlock" << std::endl;
485  ptimetable_completeEmptyBlock(texTimetable);
486  //Update the size of the blocks in the timetable
487  std::cerr << "ptimetable_tex : call ptimetable_updateTimeRow" << std::endl;
488  ptimetable_updateTimeRow(texTimetable);
489  //Let's put all block in the vecContent
490  std::cerr << "ptimetable_tex : call ptimetable_toTex" << std::endl;
491  PLatexObj timetableObj;
492  ptimetable_toTex(timetableObj, texTimetable);
493  vecContent.push_back(platexobj_createSection(PLatexType::PART, timetable.getName(), "sec_"+timetable.getInvitation()));
494  if(texTimetable.invitation != ""){
495  vecContent.push_back(platexobj_createRendezVous(PPath(LATEX_INVITATION_OUTPUT_DIR "/" + texTimetable.invitation + ".ics")));
496  }
497  vecContent.push_back(timetableObj);
498  ptimetable_texPart(vecContent, texTimetable);
499  if(isSaveSpeaker){
500  pspeaker_tex(vecContent, timetable);
501  }
502  return ptimetable_createInvitationMergBlock(outputDirectory, texTimetable);
503 // return ptimetable_createInvitation(outputDirectory, texTimetable);
504 }
505 
506 
#define LATEX_INVITATION_OUTPUT_DIR
Definition: PLatexObj_def.h:14
Describes a date.
Definition: PTimeTable.h:58
size_t getMonth() const
Gets the month of the PLatexDate.
Definition: PTimeTable.cpp:245
size_t getYear() const
Gets the year of the PLatexDate.
Definition: PTimeTable.cpp:231
size_t getDay() const
Gets the day of the PLatexDate.
Definition: PTimeTable.cpp:259
Describe a latex object.
Definition: PLatexObj.h:40
const std::vector< PLatexObj > & getVecContent() const
Gets the vecContent of the PLatexObj.
Definition: PLatexObj.cpp:410
void setLabelName(const PString &labelName)
Sets the labelName of the PLatexObj.
Definition: PLatexObj.cpp:158
const std::vector< PLatexObj > & getComplexTitle() const
Gets the complexTitle of the PLatexObj.
Definition: PLatexObj.cpp:396
void setRowSpan(long unsigned int rowSpan)
Sets the rowSpan of the PLatexObj.
Definition: PLatexObj.cpp:270
void setType(const PLatexType::PLatexType &type)
Sets the type of the PLatexObj.
Definition: PLatexObj.cpp:130
void setText(const PString &text)
Sets the text of the PLatexObj.
Definition: PLatexObj.cpp:137
Describe a speaker in a timetable.
Definition: PTimeTable.h:15
const PLatexObj & getName() const
Gets the name of the PLatexSpeaker.
Definition: PTimeTable.cpp:83
Describes a date.
Definition: PTimeTable.h:86
size_t getMinute() const
Gets the minute of the PLatexTime.
Definition: PTimeTable.cpp:343
void setMinute(size_t minute)
Sets the minute of the PLatexTime.
Definition: PTimeTable.cpp:322
void setHour(size_t hour)
Sets the hour of the PLatexTime.
Definition: PTimeTable.cpp:315
size_t getHour() const
Gets the hour of the PLatexTime.
Definition: PTimeTable.cpp:329
Path of a directory or a file.
Definition: PPath.h:17
Extends the std::string.
Definition: PString.h:16
Block of a Timetable.
Definition: PTimeTable.h:109
const PLatexObj & getTitle() const
Gets the title of the PTimeTableBlock.
Definition: PTimeTable.cpp:516
bool getIsEmptyBlock() const
Gets the isEmptyBlock of the PTimeTableBlock.
Definition: PTimeTable.cpp:698
size_t getNbTimeRow() const
Gets the nbTimeRow of the PTimeTableBlock.
Definition: PTimeTable.cpp:684
void setNbTimeRow(size_t nbTimeRow)
Sets the nbTimeRow of the PTimeTableBlock.
Definition: PTimeTable.cpp:488
const PLatexObj & getDescription() const
Gets the description of the PTimeTableBlock.
Definition: PTimeTable.cpp:572
const PString & getStyle() const
Gets the style of the PTimeTableBlock.
Definition: PTimeTable.cpp:670
const PLatexDate & getDate() const
Gets the date of the PTimeTableBlock.
Definition: PTimeTable.cpp:586
const PLatexObj & getLocation() const
Gets the location of the PTimeTableBlock.
Definition: PTimeTable.cpp:656
const PLatexTime & getEndTime() const
Gets the endTime of the PTimeTableBlock.
Definition: PTimeTable.cpp:614
void setIsEmptyBlock(bool isEmptyBlock)
Sets the isEmptyBlock of the PTimeTableBlock.
Definition: PTimeTable.cpp:495
const PString & getInvitation() const
Gets the invitation of the PTimeTableBlock.
Definition: PTimeTable.cpp:558
const PLatexTime & getBeginTime() const
Gets the beginTime of the PTimeTableBlock.
Definition: PTimeTable.cpp:600
const std::vector< PString > & getVecSpeaker() const
Gets the vecSpeaker of the PTimeTableBlock.
Definition: PTimeTable.cpp:544
Timetable.
Definition: PTimeTable.h:197
const PString & getInvitation() const
Gets the invitation of the PTimeTable.
Definition: PTimeTable.cpp:859
const std::vector< PTimeTableBlock > & getVecBlock() const
Gets the vecBlock of the PTimeTable.
Definition: PTimeTable.cpp:929
const PLatexObj & getName() const
Gets the name of the PTimeTable.
Definition: PTimeTable.cpp:845
const std::vector< PLatexSpeaker > & getVecSpeaker() const
Gets the vecSpeaker of the PTimeTable.
Definition: PTimeTable.cpp:943
@ TIMETABLE_EMPTYBLOCK
Definition: PLatexType.h:103
@ TIMETABLE_TIME
Definition: PLatexType.h:104
@ SUBSUBSECTIONSTAR
Definition: PLatexType.h:61
@ TIMETABLE_WEEK
Definition: PLatexType.h:99
@ TIMETABLE_TIMEROW
Definition: PLatexType.h:100
@ TIMETABLE_BLOCK
Definition: PLatexType.h:102
PLatexObj platexobj_createRef(const PString &label, const PString &text)
Create a reference (REF)
PLatexObj platexobj_createNewLine()
Create a new line.
PLatexObj platexobj_createText(const PString &text, const PString &label)
Create a TEXT.
PLatexObj platexobj_createItem(const PLatexObj &obj)
Create an ITEM.
PLatexObj platexobj_createRendezVous(const PPath &fileNameIcs)
Create a RENDEZVOUS.
PLatexObj platexobj_createTimetableBlock(const PString &blockStyle)
Create a TIMETABLE_BLOCK.
PLatexObj platexobj_createNone()
Create a NONE PLatexObj.
PLatexObj platexobj_createSection(PLatexType::PLatexType sectionType, const PLatexObj &complexTitle, const PString &label)
Create a part, chapter, section, subsection, subsubsection.
PLatexObj platexobj_createParagraph(const PString &text, const PString &label)
Create a PARAGRAPH.
PLatexObj platexobj_createItemize()
Create an ITEMIZE.
PLatexObj platexobj_createTimetableTimeRow()
Create an TIMETABLE_TIMEROW.
PLatexObj platexobj_createTextBf(const PString &text, const PString &label)
Create a TEXT.
void pspeaker_tex(std::vector< PLatexObj > &vecContent, const std::vector< PLatexSpeaker > &vecSpeaker, const PString &sectionLabel)
Save all speakers of the given PTimeTable into a vector of PLatexObj.
bool ptimetable_createInvitationMergBlock(const PPath &outputDirectory, const TexTimetable &timetable)
Create invitations but merge blocks with the same invitation.
bool ptimetable_checkBlockExist(const PTimeTableBlock *&foundBlock, const std::map< PString, PTimeTableBlock > &mapBlock, const PString &timeText)
Check if a block exists at a given time.
PString ptimetable_dateToStr(const PLatexDate &date)
Convert a date into a string which can be used in a std::map.
void ptimetable_texPart(std::vector< PLatexObj > &vecContent, const TexTimetable &texTimetable)
Convert a PTimeTable into PLatexObj.
PString ptimetable_timeToStr(const PLatexTime &texTime)
Convert a PLatexTime into a string.
void ptimetable_compelteDayEmptyBlock(TexDay &day, const std::map< PString, PString > &mapHour)
Complete day with empty blocks to make them coherent.
void ptimetable_createTabCell(PLatexObj &cell, const PString &text)
Create a table cell.
void ptimetable_updateTimeRow(TexTimetable &texTimetable)
Update the time rows of the PTimeTableBlock.
void ptimetable_toTex(PLatexObj &obj, const TexTimetable &texTimetable)
Convert a TexTimetable into a PLatexObj.
void ptimetable_texSection(std::vector< PLatexObj > &vecContent, const TexDay &day, const TexTimetable &texTimetable, const TexWeek &week)
Convert a PTimeTable into PLatexObj.
void ptimetable_texLecture(std::vector< PLatexObj > &vecContent, const PTimeTableBlock &block, const TexTimetable &texTimetable)
Save lectures in PLatexObj.
void ptimetable_completeEmptyBlock(TexTimetable &texTimetable)
Complete day of timetable with empty blocks to make them coherent.
void ptimetable_updateWeekLaterTime(TexWeek &week, const PLatexTime &texTime)
Update the later time of the week.
void ptimetable_singleDay(TexDay &out, std::map< PString, PString > &mapHour, const TexDay &day)
Create a single day with consistent mapHour.
void ptimetable_blockToTex(PLatexObj &obj, const PTimeTableBlock &block)
Convert a PTimeTableBlock into PLatexObj.
void ptimetable_addBlockInWeek(TexWeek &week, const PTimeTableBlock &block, const PString &invitationTimeTable)
Add a block in week.
void ptimetable_texChapter(std::vector< PLatexObj > &vecContent, const TexWeek &week, const TexTimetable &texTimetable)
Convert a PTimeTable into PLatexObj.
void ptimetable_updateBlockTimeRow(PTimeTableBlock &block, const std::map< PString, PString > &mapHour)
Update the time rows of the PTimeTableBlock.
bool ptimetable_tex(std::vector< PLatexObj > &vecContent, const PTimeTable &timetable, const PPath &outputDirectory, bool isSaveSpeaker)
Convert a PTimeTable into PLatexObj.
PString ptimetable_dateToText(const PLatexDate &date)
Convert a date into a string.
void ptimetable_createTexTimeTable(TexTimetable &texTimetable, const PTimeTable &timetable)
Create the TexTimetable.
Day of the week.
Definition: TexTimetable.h:14
std::map< PString, PTimeTableBlock > mapBlock
Map of the block of a day (time format hour:minute)
Definition: TexTimetable.h:20
PString invitation
Invitation of the day.
Definition: TexTimetable.h:16
PLatexDate date
Date of the current day.
Definition: TexTimetable.h:18
Full latex timetable.
Definition: TexTimetable.h:38
PString invitation
Invitation of the full event.
Definition: TexTimetable.h:40
std::vector< TexWeek > vecWeek
Vector of week.
Definition: TexTimetable.h:42
std::map< PString, PLatexSpeaker > mapSpeaker
Map of Speaker.
Definition: TexTimetable.h:44
Week of the timetable.
Definition: TexTimetable.h:24
std::map< PString, PString > mapHour
Map of the hours of the blocks in the week.
Definition: TexTimetable.h:30
PLatexTime laterTime
Later time of all days.
Definition: TexTimetable.h:34
PLatexObj weekTitle
Title of the week.
Definition: TexTimetable.h:26
std::map< PString, TexDay > mapDay
Map of hte day in the week (date format: year-month-day)
Definition: TexTimetable.h:32
PString invitation
Invitation of the week.
Definition: TexTimetable.h:28