Changes

Jump to: navigation, search

User:Minooz/OSD600/FF/patch565031

2,221 bytes added, 21:33, 20 April 2011
no edit summary
<div id="Apr16">
=== Apr16 ===
: The review of the bug suggests to start over the function based on the HTML5 specs.
: However, the spec is using an integer list to add the valid values dynamically. There are memory allocation problems with that in c++.
: Seems the existing method is more reasonable for doing the same concept but not following exact same steps.
: Also I'm not sure how using aSpec of type nsAString is doable instead of converting it using ''ToNewCString(aSpec)''
: So, still working on these issues...
<source lang="java">
void Area::ParseCoords(const nsAString& aSpec)
{
char* cp = ToNewCString(aSpec);
if (!cp) {
return;
}
char *tptr;
char *n_str;
PRInt32 i, cnt, pos, value;
PRInt32 *value_list;
PRBool negated = false;
PRBool started = false;
PRBool gotNumber = false;
PRBool finished = false;
PRBool bogus = false;
 
/*
* Nothing in an empty list
*/
mNumCoords = 0;
mCoords = nsnull;
 
value_list = new int [5];
 
/*
* Make a pass where any two numbers separated by just whitespace
* are given a comma separator. Count entries while passing.
*/
cnt = 0;
value = 0;
n_str = cp;
while (*n_str != '\0')
{
while (is_separator(*n_str))
{
n_str++;
value = 0;
negated = false;
started = false;
gotNumber = false;
finished = false;
bogus = false;
}
if (*n_str == '\0')
{
break;
}
if (*n_str == '-')
{
if (gotNumber)
{
finished = true;
}
if (!finished)
{
if (started)
negated = false;
else
{
if (!bogus)
negated = true;
}
}
started = true;
n_str++;
}
else if (*n_str >= '0' && *n_str <= '9')
{
if (!finished)
{
value *= 10;
value += *n_str - '0';
started = true;
gotNumber = true;
n_str++;
}
if (is_separator(*n_str))
{
if (!gotNumber)
{
break;
}
if (negated)
{
value *= -1;
}
value_list[cnt] = value;
cnt++;
}
}
else
{
if (!finished)
{
negated = false;
bogus = true;
if (started)
{
break;
}
}
}
}
mNumCoords = cnt;
mCoords = value_list;
NS_Free(cp);
}
</source></div>
------
<div id="Apr6">
 
=== Apr6 ===
<source lang="java">
// Modified based on Matt Postil's Versiondiff -r ec44e31cc46b e6b318aca788 layout/generic/nsImageMap.cpp--- a/layout/generic/nsImageMap.cpp Wed Mar 30 20Apr 06 17:4838:32 21 2011 -04000700+++ b/layout/generic/nsImageMap.cpp Wed Sat Apr 06 2209 20:1150:22 51 2011 -0400@@ -107112,18 12 +107112,21 7 @@ Area::~Area() delete [] mCoords; } #include <stdlib.h>
inline PRBool
is_space(char c)
- return (c == ' ' ||
- c == '\f' ||
- c == '\n' ||- c == '\r' ||- c == '\t' ||- c == '\v');+ return (c == ' '); }
static void logMessage(nsIContent* aContent,
const nsAString& aCoordsSpec,@@ -181186,21 12 +184181,33 17 @@ void Area::ParseCoords(const nsAString& while (*n_str != '\0') { PRBool has_comma; /*
* Skip to a separator
*/
tptr = n_str;
- while (!is_space(*tptr) && *tptr != ',' && *tptr != '\0')
+ while (!is_space(*tptr) && *tptr != ',' && *tptr != ';' && *tptr != '\0')
{
- tptr++;+ if (not_space(*tptr))+ {+ break;+ }+ else + {+ tptr++;+ }
}
n_str = tptr;
+
+ if (*tptr == ';')
+ {
+ *tptr = ',';
+ }
/*
* If no more entries, break out here
*/
if (*n_str == '\0') { break; }@@ -256205,17 7 +271205,17 7 @@ void Area::ParseCoords(const nsAString& { return; } / * * Second pass to copy integer values into listcomma. */ tptr has_comma = cpPR_FALSE;- for while (iis_space(*tptr) || *tptr ==0; i<cnt; i++',')+ for while (i = 0; i < cnt; i++is_space(*tptr) { char || *ptr; ptr tptr == strchr(tptr', ',|| *tptr == '); if (ptr')
{
if (*ptr tptr == '\0,'; }) {</source></div>
1
edit

Navigation menu