diff --git a/swad_HTML.c b/swad_HTML.c
index 0e644865..54a41599 100644
--- a/swad_HTML.c
+++ b/swad_HTML.c
@@ -73,6 +73,7 @@ static unsigned HTM_BUTTON_NestingLevel = 0;
static unsigned HTM_TEXTAREA_NestingLevel = 0;
static unsigned HTM_SELECT_NestingLevel = 0;
static unsigned HTM_OPTGROUP_NestingLevel = 0;
+static unsigned HTM_U_NestingLevel = 0;
/*****************************************************************************/
/***************************** Private prototypes ****************************/
@@ -1496,6 +1497,27 @@ void HTM_IMG (const char *URL,const char *Icon,const char *Title,
fprintf (Gbl.F.Out," />");
}
+/*****************************************************************************/
+/******************************* Underlines **********************************/
+/*****************************************************************************/
+
+void HTM_U_Begin (void)
+ {
+ HTM_U_Begin ();
+
+ HTM_U_NestingLevel++;
+ }
+
+void HTM_U_End (void)
+ {
+ if (HTM_U_NestingLevel == 0) // No U open
+ Ale_ShowAlert (Ale_ERROR,"Trying to close unopened U.");
+
+ HTM_U_End ();
+
+ HTM_U_NestingLevel--;
+ }
+
/*****************************************************************************/
/****************************** Breaking lines *******************************/
/*****************************************************************************/
diff --git a/swad_HTML.h b/swad_HTML.h
index 6c9295d7..98fb5d73 100644
--- a/swad_HTML.h
+++ b/swad_HTML.h
@@ -147,6 +147,9 @@ void HTM_OPTION (HTM_Type_t Type,const void *ValuePtr,bool Selected,bool Disable
void HTM_IMG (const char *URL,const char *Icon,const char *Title,
const char *fmt,...);
+void HTM_U_Begin (void);
+void HTM_U_End (void);
+
void HTM_BR (void);
void HTM_Txt (const char *Txt);
diff --git a/swad_agenda.c b/swad_agenda.c
index c2aa7532..989e1d6a 100644
--- a/swad_agenda.c
+++ b/swad_agenda.c
@@ -591,10 +591,10 @@ static void Agd_WriteHeaderListEvents (Agd_AgendaType_t AgendaType)
Frm_LinkFormSubmit (Txt_START_END_TIME_HELP[Order],"TIT_TBL",NULL);
if (Order == Gbl.Agenda.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_Begin ();
HTM_Txt (Txt_START_END_TIME[Order]);
if (Order == Gbl.Agenda.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_End ();
Frm_LinkFormEnd ();
Frm_EndForm ();
diff --git a/swad_assignment.c b/swad_assignment.c
index 44caa4e9..ca2fa0df 100644
--- a/swad_assignment.c
+++ b/swad_assignment.c
@@ -221,13 +221,13 @@ static void Asg_PutHeadForSeeing (bool PrintView)
Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Order);
Frm_LinkFormSubmit (Txt_START_END_TIME_HELP[Order],"TIT_TBL",NULL);
if (Order == Gbl.Asgs.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_Begin ();
}
HTM_Txt (Txt_START_END_TIME[Order]);
if (!PrintView)
{
if (Order == Gbl.Asgs.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_End ();
Frm_LinkFormEnd ();
Frm_EndForm ();
}
diff --git a/swad_attendance.c b/swad_attendance.c
index 66b44946..a7e2fbbd 100644
--- a/swad_attendance.c
+++ b/swad_attendance.c
@@ -255,10 +255,10 @@ static void Att_ShowAllAttEvents (void)
Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Order);
Frm_LinkFormSubmit (Txt_START_END_TIME_HELP[Order],"TIT_TBL",NULL);
if (Order == Gbl.AttEvents.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_Begin ();
HTM_Txt (Txt_START_END_TIME[Order]);
if (Order == Gbl.AttEvents.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_End ();
Frm_LinkFormEnd ();
Frm_EndForm ();
diff --git a/swad_centre.c b/swad_centre.c
index ad1dd5bc..36174b5c 100644
--- a/swad_centre.c
+++ b/swad_centre.c
@@ -2588,13 +2588,13 @@ static void Ctr_PutHeadCentresForSeeing (bool OrderSelectable)
Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Order);
Frm_LinkFormSubmit (Txt_CENTRES_HELP_ORDER[Order],"TIT_TBL",NULL);
if (Order == Gbl.Hierarchy.Ins.Ctrs.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_Begin ();
}
HTM_Txt (Txt_CENTRES_ORDER[Order]);
if (OrderSelectable)
{
if (Order == Gbl.Hierarchy.Ins.Ctrs.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_End ();
Frm_LinkFormEnd ();
Frm_EndForm ();
}
diff --git a/swad_changelog.h b/swad_changelog.h
index ee762b43..e40d2460 100644
--- a/swad_changelog.h
+++ b/swad_changelog.h
@@ -487,7 +487,7 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
-#define Log_PLATFORM_VERSION "SWAD 19.61.5 (2019-11-10)"
+#define Log_PLATFORM_VERSION "SWAD 19.61.6 (2019-11-10)"
#define CSS_FILE "swad19.47.css"
#define JS_FILE "swad19.39.js"
/*
@@ -495,6 +495,7 @@ ps2pdf source.ps destination.pdf
// TODO: Impedir la creación y edición de proyectos si no son editables.
// TODO: Importante: filtrar proyectos por usuarios (igual que en trabajos o en asistencia)
+ Version 19.61.6: Nov 10, 2019 Code refactoring in HTML underlines. (246327 lines)
Version 19.61.5: Nov 10, 2019 Code refactoring in HTML text printing. (246308 lines)
Version 19.61.4: Nov 10, 2019 Code refactoring in HTML text printing. (246303 lines)
Version 19.61.3: Nov 10, 2019 Code refactoring in HTML long printing. (246297 lines)
diff --git a/swad_classroom.c b/swad_classroom.c
index b5fbae2c..5a19065c 100644
--- a/swad_classroom.c
+++ b/swad_classroom.c
@@ -126,10 +126,10 @@ void Cla_SeeClassrooms (void)
Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Order);
Frm_LinkFormSubmit (Txt_CLASSROOMS_HELP_ORDER[Order],"TIT_TBL",NULL);
if (Order == Gbl.Classrooms.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_Begin ();
HTM_Txt (Txt_CLASSROOMS_ORDER[Order]);
if (Order == Gbl.Classrooms.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_End ();
Frm_LinkFormEnd ();
Frm_EndForm ();
HTM_TH_End ();
diff --git a/swad_country.c b/swad_country.c
index 0086273d..ab9eca0e 100644
--- a/swad_country.c
+++ b/swad_country.c
@@ -666,13 +666,13 @@ static void Cty_PutHeadCountriesForSeeing (bool OrderSelectable)
Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Order);
Frm_LinkFormSubmit (Txt_COUNTRIES_HELP_ORDER[Order],"TIT_TBL",NULL);
if (Order == Gbl.Hierarchy.Sys.Ctys.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_Begin ();
}
HTM_Txt (Txt_COUNTRIES_ORDER[Order]);
if (OrderSelectable)
{
if (Order == Gbl.Hierarchy.Sys.Ctys.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_End ();
Frm_LinkFormEnd ();
Frm_EndForm ();
}
diff --git a/swad_degree_type.c b/swad_degree_type.c
index dd15f199..b0880521 100644
--- a/swad_degree_type.c
+++ b/swad_degree_type.c
@@ -518,10 +518,10 @@ static void DT_PutHeadDegreeTypesForSeeing (Act_Action_t NextAction,DT_Order_t S
/* Link with the head of this column */
Frm_LinkFormSubmit (Txt_DEGREE_TYPES_HELP_ORDER[Order],"TIT_TBL",NULL);
if (Order == SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_Begin ();
HTM_Txt (Txt_DEGREE_TYPES_ORDER[Order]);
if (Order == SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_End ();
Frm_LinkFormEnd ();
/* End form */
diff --git a/swad_department.c b/swad_department.c
index 4a479dfd..532ec141 100644
--- a/swad_department.c
+++ b/swad_department.c
@@ -131,10 +131,10 @@ void Dpt_SeeDepts (void)
Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Order);
Frm_LinkFormSubmit (Txt_DEPARTMENTS_HELP_ORDER[Order],"TIT_TBL",NULL);
if (Order == Gbl.Dpts.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_Begin ();
HTM_Txt (Txt_DEPARTMENTS_ORDER[Order]);
if (Order == Gbl.Dpts.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_End ();
Frm_LinkFormEnd ();
Frm_EndForm ();
diff --git a/swad_forum.c b/swad_forum.c
index f24fade3..3adcec31 100644
--- a/swad_forum.c
+++ b/swad_forum.c
@@ -2553,10 +2553,10 @@ static void For_ShowForumThreadsHighlightingOneThread (long ThrCodHighlighted,
-1L);
Frm_LinkFormSubmit (Txt_FORUM_THREAD_HELP_ORDER[Order],"TIT_TBL",NULL);
if (Order == Gbl.Forum.ThreadsOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_Begin ();
HTM_Txt (Txt_FORUM_THREAD_ORDER[Order]);
if (Order == Gbl.Forum.ThreadsOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_End ();
Frm_LinkFormEnd ();
Frm_EndForm ();
diff --git a/swad_game.c b/swad_game.c
index f918f781..c421df47 100644
--- a/swad_game.c
+++ b/swad_game.c
@@ -226,10 +226,10 @@ static void Gam_ListAllGames (void)
Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Order);
Frm_LinkFormSubmit (Txt_GAMES_ORDER_HELP[Order],"TIT_TBL",NULL);
if (Order == Gbl.Games.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_Begin ();
HTM_Txt (Txt_GAMES_ORDER[Order]);
if (Order == Gbl.Games.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_End ();
Frm_LinkFormEnd ();
Frm_EndForm ();
diff --git a/swad_group.c b/swad_group.c
index ae20e301..f99e63f5 100644
--- a/swad_group.c
+++ b/swad_group.c
@@ -201,7 +201,7 @@ void Grp_WriteNamesOfSelectedGrps (void)
fprintf (Gbl.F.Out," %s ",Txt_and);
if (Gbl.Crs.Grps.LstGrpsSel.NumGrps >= 3)
if (NumGrpSel < Gbl.Crs.Grps.LstGrpsSel.NumGrps-2)
- fprintf (Gbl.F.Out,", ");
+ HTM_Txt (", ");
}
}
}
diff --git a/swad_holiday.c b/swad_holiday.c
index 838fc848..32e5c595 100644
--- a/swad_holiday.c
+++ b/swad_holiday.c
@@ -127,10 +127,10 @@ void Hld_SeeHolidays (void)
Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Order);
Frm_LinkFormSubmit (Txt_HOLIDAYS_HELP_ORDER[Order],"TIT_TBL",NULL);
if (Order == Gbl.Hlds.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_Begin ();
HTM_Txt (Txt_HOLIDAYS_ORDER[Order]);
if (Order == Gbl.Hlds.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_End ();
Frm_LinkFormEnd ();
Frm_EndForm ();
diff --git a/swad_institution.c b/swad_institution.c
index 33dd4f06..8965a32a 100644
--- a/swad_institution.c
+++ b/swad_institution.c
@@ -861,13 +861,13 @@ static void Ins_PutHeadInstitutionsForSeeing (bool OrderSelectable)
Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Order);
Frm_LinkFormSubmit (Txt_INSTITUTIONS_HELP_ORDER[Order],"TIT_TBL",NULL);
if (Order == Gbl.Hierarchy.Cty.Inss.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_Begin ();
}
HTM_Txt (Txt_INSTITUTIONS_ORDER[Order]);
if (OrderSelectable)
{
if (Order == Gbl.Hierarchy.Cty.Inss.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_End ();
Frm_LinkFormEnd ();
Frm_EndForm ();
}
diff --git a/swad_mail.c b/swad_mail.c
index 19fd94fe..f2f73ea3 100644
--- a/swad_mail.c
+++ b/swad_mail.c
@@ -139,10 +139,10 @@ void Mai_SeeMailDomains (void)
Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Order);
Frm_LinkFormSubmit (Txt_EMAIL_DOMAIN_HELP_ORDER[Order],"TIT_TBL",NULL);
if (Order == Gbl.Mails.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_Begin ();
HTM_Txt (Txt_EMAIL_DOMAIN_ORDER[Order]);
if (Order == Gbl.Mails.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_End ();
Frm_LinkFormEnd ();
Frm_EndForm ();
@@ -941,7 +941,7 @@ static void Mai_ListEmails (void)
{
if (NumAcceptedUsrsWithEmail > 0)
{
- fprintf (Gbl.F.Out,", ");
+ HTM_Txt (", ");
LengthStrAddr ++;
if (LengthStrAddr > Mai_MAX_BYTES_STR_ADDR)
Lay_ShowErrorAndExit ("The space allocated to store email addresses is full.");
diff --git a/swad_match.c b/swad_match.c
index 95aa4204..c8c61f55 100644
--- a/swad_match.c
+++ b/swad_match.c
@@ -634,7 +634,7 @@ static void Mch_GetAndWriteNamesOfGrpsAssociatedToMatch (const struct Match *Mat
fprintf (Gbl.F.Out," %s ",Txt_and);
if (NumRows >= 3)
if (NumRow < NumRows-2)
- fprintf (Gbl.F.Out,", ");
+ HTM_Txt (", ");
}
}
}
diff --git a/swad_place.c b/swad_place.c
index 062d2141..8c5a351a 100644
--- a/swad_place.c
+++ b/swad_place.c
@@ -125,10 +125,10 @@ void Plc_SeePlaces (void)
Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Order);
Frm_LinkFormSubmit (Txt_PLACES_HELP_ORDER[Order],"TIT_TBL",NULL);
if (Order == Gbl.Plcs.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_Begin ();
HTM_Txt (Txt_PLACES_ORDER[Order]);
if (Order == Gbl.Plcs.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_End ();
Frm_LinkFormEnd ();
Frm_EndForm ();
diff --git a/swad_project.c b/swad_project.c
index f071410d..82a022b9 100644
--- a/swad_project.c
+++ b/swad_project.c
@@ -814,10 +814,10 @@ static void Prj_ShowProjectsHead (Prj_ProjectView_t ProjectView)
-1L);
Frm_LinkFormSubmit (Txt_PROJECT_ORDER_HELP[Order],"TIT_TBL",NULL);
if (Order == Gbl.Prjs.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_Begin ();
HTM_Txt (Txt_PROJECT_ORDER[Order]);
if (Order == Gbl.Prjs.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_End ();
Frm_LinkFormEnd ();
Frm_EndForm ();
break;
diff --git a/swad_statistic.c b/swad_statistic.c
index ebc80642..6d876a6d 100644
--- a/swad_statistic.c
+++ b/swad_statistic.c
@@ -3197,7 +3197,7 @@ static void Sta_ShowNumHitsPerPlugin (unsigned long NumRows,
if (Plg_GetDataOfPluginByCod (&Plg))
HTM_Txt (Plg.Name);
else
- fprintf (Gbl.F.Out,"?");
+ HTM_Txt ("?");
HTM_NBSP ();
HTM_TD_End ();
diff --git a/swad_survey.c b/swad_survey.c
index fda1fa7c..e4abca9f 100644
--- a/swad_survey.c
+++ b/swad_survey.c
@@ -262,10 +262,10 @@ static void Svy_ListAllSurveys (struct SurveyQuestion *SvyQst)
Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Order);
Frm_LinkFormSubmit (Txt_START_END_TIME_HELP[Order],"TIT_TBL",NULL);
if (Order == Gbl.Svys.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_Begin ();
HTM_Txt (Txt_START_END_TIME[Order]);
if (Order == Gbl.Svys.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_End ();
Frm_LinkFormEnd ();
Frm_EndForm ();
@@ -2488,7 +2488,7 @@ static void Svy_GetAndWriteNamesOfGrpsAssociatedToSvy (struct Survey *Svy)
fprintf (Gbl.F.Out," %s ",Txt_and);
if (NumRows >= 3)
if (NumRow < NumRows-2)
- fprintf (Gbl.F.Out,", ");
+ HTM_Txt (", ");
}
}
}
diff --git a/swad_test.c b/swad_test.c
index f2ff8f2b..2f7e3df2 100644
--- a/swad_test.c
+++ b/swad_test.c
@@ -2832,13 +2832,13 @@ static void Tst_ListOneOrMoreQuestionsForEdition (unsigned long NumRows,
Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Order);
Frm_LinkFormSubmit (Txt_TST_STR_ORDER_FULL[Order],"TIT_TBL",NULL);
if (Order == Gbl.Test.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_Begin ();
}
HTM_Txt (Txt_TST_STR_ORDER_SHORT[Order]);
if (NumRows > 1)
{
if (Order == Gbl.Test.SelectedOrder)
- fprintf (Gbl.F.Out,"");
+ HTM_U_End ();
Frm_LinkFormEnd ();
Frm_EndForm ();
}
@@ -3615,7 +3615,7 @@ static void Tst_WriteTFAnsAssessTest (struct UsrData *UsrDat,
Gbl.Test.Config.Feedback == Tst_FEEDBACK_FULL_FEEDBACK)
Tst_WriteAnsTF (row[1][0]);
else
- fprintf (Gbl.F.Out,"?");
+ HTM_Txt ("?");
HTM_TD_End ();
HTM_TR_End ();
@@ -3856,7 +3856,7 @@ static void Tst_WriteChoiceAnsAssessTest (struct UsrData *UsrDat,
else
{
HTM_TD_Begin ("class=\"ANS_0 CT\"");
- fprintf (Gbl.F.Out,"?");
+ HTM_Txt ("?");
HTM_TD_End ();
}
@@ -4504,7 +4504,7 @@ static void Tst_WriteIntAnsAssessTest (struct UsrData *UsrDat,
{
Gbl.Test.StrAnswersOneQst[NumQst][0] = '\0';
HTM_TD_Begin ("class=\"ANS_0 CM\"");
- fprintf (Gbl.F.Out,"?");
+ HTM_Txt ("?");
HTM_TD_End ();
}
}
@@ -4646,7 +4646,7 @@ static void Tst_WriteFloatAnsAssessTest (struct UsrData *UsrDat,
else // Not a floating point number
{
HTM_TD_Begin ("class=\"ANS_0 CM\"");
- fprintf (Gbl.F.Out,"?");
+ HTM_Txt ("?");
}
}
else // If user has omitted the answer
@@ -4659,7 +4659,7 @@ static void Tst_WriteFloatAnsAssessTest (struct UsrData *UsrDat,
Gbl.Test.Config.Feedback == Tst_FEEDBACK_FULL_FEEDBACK)
fprintf (Gbl.F.Out,"[%lg; %lg]",FloatAnsCorr[0],FloatAnsCorr[1]);
else
- fprintf (Gbl.F.Out,"?");
+ HTM_Txt ("?");
HTM_TD_End ();
HTM_TR_End ();