diff --git a/css/swad_desktop.css b/css/swad_desktop.css
index 8b67fc200..05e742ea7 100644
--- a/css/swad_desktop.css
+++ b/css/swad_desktop.css
@@ -265,6 +265,7 @@ hr.YELLOW_SEPARA {height:0; border-top:0; border-bottom:#BD4815 dotted 1px;}
.ICON28x28 {width:28px; height:28px; vertical-align:middle;}
.ICON32x32 {width:32px; height:32px; vertical-align:middle;}
.ICON32x32B {width:32px; height:32px; vertical-align:middle; display:block;}
+.ICON48x48 {width:48px; height:48px; vertical-align:middle;}
.ICON64x64 {width:64px; height:64px; vertical-align:middle;}
/********************************* Frame 10 **********************************/
diff --git a/css/swad_mobile.css b/css/swad_mobile.css
index 95f46c32a..e0f9f343c 100644
--- a/css/swad_mobile.css
+++ b/css/swad_mobile.css
@@ -229,6 +229,7 @@ p {margin:0;}
.ICON16x16B {width:16px; height:16px; vertical-align:middle; display:block;}
.ICON32x32 {width:32px; height:32px; vertical-align:middle;}
.ICON32x32B {width:32px; height:32px; vertical-align:middle; display:block;}
+.ICON48x48 {width:48px; height:48px; vertical-align:middle;}
.ICON64x64 {width:64px; height:64px; vertical-align:middle;}
/********************************* Frame 10 **********************************/
diff --git a/swad_changelog.h b/swad_changelog.h
index edd6ffe2e..b4f342cda 100644
--- a/swad_changelog.h
+++ b/swad_changelog.h
@@ -103,11 +103,12 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
-#define Log_PLATFORM_VERSION "SWAD 14.98.3 (2015/03/19)"
+#define Log_PLATFORM_VERSION "SWAD 14.98.4 (2015/03/20)"
// Number of lines (includes comments but not blank lines) has been got with the following command:
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
/*
+ Version 14.98.4: Mar 20, 2015 Fixed bugs in marks. (183430 lines)
Version 14.98.3: Mar 19, 2015 Changes in user's profile to speedup page generation. (183397 lines)
Version 14.98.2: Mar 19, 2015 Fixed bug in record related to follow/unfollow. (183366 lines)
Version 14.98.1: Mar 19, 2015 Changes in lists of following and followers. (183360 lines)
diff --git a/swad_mark.c b/swad_mark.c
index 233458abe..16eefc762 100644
--- a/swad_mark.c
+++ b/swad_mark.c
@@ -419,10 +419,13 @@ static bool Mrk_CheckIfCellContainsOnlyIDs (const char *CellContent)
// Users' IDs are always stored internally in capitals and without leading zeros
Str_RemoveLeadingZeros (UsrIDFromTable);
Str_ConvertToUpperText (UsrIDFromTable);
- if (ID_CheckIfUsrIDIsValid (UsrIDFromTable))
- UsrIDFound = true;
- else
- StuffNotUsrIDFound = true;
+ if (UsrIDFromTable[0]) // Something found
+ {
+ if (ID_CheckIfUsrIDIsValid (UsrIDFromTable))
+ UsrIDFound = true;
+ else
+ StuffNotUsrIDFound = true;
+ }
}
/***** Check if only user's IDs
diff --git a/swad_string.c b/swad_string.c
index b405897d9..bdb75dd7b 100644
--- a/swad_string.c
+++ b/swad_string.c
@@ -442,7 +442,7 @@ void Str_ConvertToTitleType (char *Str)
{
Ch = *Ptr;
if (isspace ((int) Ch) ||
- Ch == '\xA0' ||
+ Ch == '\xA0' || // Unicode translation for
Ch == '-' ||
Ch == '(' ||
Ch == ')' ||
@@ -461,7 +461,8 @@ void Str_ConvertToTitleType (char *Str)
for (Ptr2 = Ptr, LengthStr = 0;
*Ptr2;
Ptr2++, LengthStr++)
- if (isspace ((int) *Ptr2) || *Ptr2 == '\xA0')
+ if (isspace ((int) *Ptr2) ||
+ *Ptr2 == '\xA0') // Unicode translation for
break;
if (LengthStr == 1)
{
@@ -1069,7 +1070,8 @@ void Str_RemoveLeadingSpacesHTML (char *Str)
Ptr++)
{
/* If it's space ==> continue in the loop */
- if (isspace ((int) *Ptr) || *Ptr == '\xA0') // Microsoft Excel uses A0 also as space!
+ if (isspace ((int) *Ptr) ||
+ *Ptr == '\xA0') // Unicode translation for
continue;
/* Check forward if it's a
or
*/
if (*Ptr == '<')
@@ -1191,7 +1193,8 @@ void Str_RemoveTrailingSpacesHTML (char *Str)
Ptr--)
{
/* If it's space ==> continue in the loop */
- if (isspace ((int) *Ptr) || *Ptr == '\xA0') // Microsoft Excel uses A0 also as space!
+ if (isspace ((int) *Ptr) ||
+ *Ptr == '\xA0') // Unicode translation for
continue;
/* Check backward if it's
or
*/
if (*Ptr == '>')
@@ -1727,7 +1730,8 @@ char *Str_GetCellFromHTMLTableSkipComments (FILE *FileSrc,char *Str,int MaxLengt
}
/***** Skip spaces *****/
- if (isspace (Ch) || Ch == 0xA0) // Microsoft Excel uses A0 also as space!
+ if (isspace (Ch) ||
+ Ch == 0xA0) // Unicode translation for
SpaceFound = true;
if (SpaceFound)
@@ -1780,10 +1784,13 @@ void Str_GetNextStringUntilSpace (const char **StrSrc,char *StrDst,size_t MaxLen
if ((Ch = (int) **StrSrc) != 0)
(*StrSrc)++;
}
- while (isspace (Ch));
+ while (isspace (Ch) ||
+ Ch == 0xA0); // Unicode translation for
/***** Copy string while non-space characters *****/
- while (Ch && !isspace (Ch))
+ while (Ch &&
+ !(isspace (Ch) ||
+ Ch == 0xA0)) // Unicode translation for
{
if (i < MaxLength)
StrDst[i++] = (char) Ch;
@@ -1809,10 +1816,17 @@ void Str_GetNextStringUntilSeparator (const char **StrSrc,char *StrDst,size_t Ma
if ((Ch = (int) **StrSrc) != 0)
(*StrSrc)++;
}
- while (isspace (Ch) || Ch == (int) ',' || Ch == (int) ';');
+ while (isspace (Ch) ||
+ Ch == 0xA0 || // Unicode translation for
+ Ch == (int) ',' ||
+ Ch == (int) ';');
/***** Copy string while no separator found *****/
- while (Ch && !(isspace (Ch) || Ch == (int) ',' || Ch == (int) ';'))
+ while (Ch &&
+ !(isspace (Ch) ||
+ Ch == 0xA0 || // Unicode translation for
+ Ch == (int) ',' ||
+ Ch == (int) ';'))
{
if (i < MaxLength)
StrDst[i++] = (char) Ch;
@@ -1834,10 +1848,18 @@ void Str_GetNextStringFromFileUntilSeparator (FILE *FileSrc,char *StrDst)
/***** Skip separators *****/
do
Ch = fgetc (FileSrc);
- while (Ch != EOF && (isspace (Ch) || Ch == (int) ',' || Ch == (int) ';')); // Skip spaces, puntuación, etc.
+ while (Ch != EOF &&
+ (isspace (Ch) ||
+ Ch == 0xA0 || // Unicode translation for
+ Ch == (int) ',' ||
+ Ch == (int) ';')); // Skip spaces, puntuación, etc.
/***** Copy string while no separator found *****/
- while (Ch != EOF && !(isspace (Ch) || Ch == (int) ',' || Ch == (int) ';'))
+ while (Ch != EOF &&
+ !(isspace (Ch) ||
+ Ch == 0xA0 || // Unicode translation for
+ Ch == (int) ',' ||
+ Ch == (int) ';'))
{
if (i < ID_MAX_LENGTH_USR_ID)
StrDst[i++] = (char) Ch;
@@ -1861,7 +1883,9 @@ void Str_GetNextStringUntilComma (const char **StrSrc,char *StrDst,size_t MaxLen
/***** Skip leading spaces and ',' *****/
Ch = (int) **StrSrc;
- while (isspace (Ch) || Ch == (int) ',' || Ch == 0xA0) // Microsoft Excel uses A0 also as space!
+ while (isspace (Ch) ||
+ Ch == 0xA0 || // Unicode translation for
+ Ch == (int) ',')
{
(*StrSrc)++;
Ch = (int) **StrSrc;
@@ -1884,7 +1908,8 @@ void Str_GetNextStringUntilComma (const char **StrSrc,char *StrDst,size_t MaxLen
for (Ptr--;
Ptr >= *StrSrc;
Ptr--)
- if (!(isspace ((int) *Ptr) || *Ptr == '\xA0')) // Microsoft Excel uses A0 also as space!
+ if (!(isspace ((int) *Ptr) ||
+ *Ptr == '\xA0')) // Unicode translation for
break;
*(Ptr+1) = '\0';
}
@@ -1941,7 +1966,8 @@ void Str_ReplaceSeveralSpacesForOne (char *Str)
/***** Do the replacing *****/
for (PtrDst = PtrSrc = Str;
*PtrSrc;)
- if (isspace ((int) *PtrSrc) || *PtrSrc == '\xA0') // If character is printable in english ==> is OK; else ==> convert to code (Microsoft Excel uses A0 also as space!)
+ if (isspace ((int) *PtrSrc) ||
+ *PtrSrc == '\xA0') // Unicode translation for
{
if (!PreviousWasSpace)
*PtrDst++ = ' ';
@@ -2130,7 +2156,8 @@ void Str_SkipSpacesInFile (FILE *FileSrc)
int Ch;
while ((Ch = fgetc (FileSrc)) != EOF)
- if (!isspace (Ch))
+ if (!(isspace (Ch) ||
+ Ch == 0xA0)) // Unicode translation for
{
fseek (FileSrc,-1L,SEEK_CUR);
break;