Difference between revisions of "User:Minooz/OSD600/FF/patch565031"
< User:Minooz | OSD600 | FF
(→Apr16) |
|||
(One intermediate revision by the same user not shown) | |||
Line 1: | Line 1: | ||
<div id="Apr16"> | <div id="Apr16"> | ||
=== 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"> | <source lang="java"> | ||
− | void Area::ParseCoords(const nsAString& aSpec) | + | void Area::ParseCoords(const nsAString& aSpec) |
{ | { | ||
char* cp = ToNewCString(aSpec); | char* cp = ToNewCString(aSpec); | ||
− | if (! | + | if (!cp) { |
return; | return; | ||
} | } | ||
char *tptr; | char *tptr; | ||
char *n_str; | char *n_str; | ||
− | PRInt32 i, cnt; | + | PRInt32 i, cnt, pos, value; |
PRInt32 *value_list; | PRInt32 *value_list; | ||
PRBool negated = false; | PRBool negated = false; | ||
Line 24: | Line 29: | ||
mCoords = nsnull; | mCoords = nsnull; | ||
− | + | value_list = new int [5]; | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
/* | /* | ||
Line 42: | Line 36: | ||
*/ | */ | ||
cnt = 0; | cnt = 0; | ||
+ | value = 0; | ||
+ | n_str = cp; | ||
+ | |||
while (*n_str != '\0') | while (*n_str != '\0') | ||
{ | { | ||
− | + | while (is_separator(*n_str)) | |
− | if (*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) | if (gotNumber) | ||
{ | { | ||
finished = true; | finished = true; | ||
− | |||
} | } | ||
− | if ( | + | if (!finished) |
− | |||
− | |||
{ | { | ||
− | if (!bogus) | + | if (started) |
− | + | negated = false; | |
− | } | + | else |
+ | { | ||
+ | if (!bogus) | ||
+ | negated = true; | ||
+ | } | ||
+ | } | ||
started = true; | started = true; | ||
− | + | n_str++; | |
− | |||
} | } | ||
− | else if (*n_str >= '0' && *n_str <= '9') | + | else if (*n_str >= '0' && *n_str <= '9') |
{ | { | ||
− | if (finished) | + | if (!finished) |
− | + | { | |
− | + | value *= 10; | |
− | + | value += *n_str - '0'; | |
− | + | started = true; | |
− | cnt++; | + | gotNumber = true; |
+ | n_str++; | ||
+ | } | ||
+ | |||
+ | if (is_separator(*n_str)) | ||
+ | { | ||
+ | if (!gotNumber) | ||
+ | { | ||
+ | break; | ||
+ | } | ||
+ | if (negated) | ||
+ | { | ||
+ | value *= -1; | ||
+ | } | ||
+ | value_list[cnt] = value; | ||
+ | cnt++; | ||
+ | } | ||
} | } | ||
− | else | + | else |
{ | { | ||
− | if (! | + | if (!finished) |
− | + | { | |
− | + | negated = false; | |
− | + | bogus = true; | |
− | + | if (started) | |
− | + | { | |
− | + | break; | |
− | + | } | |
− | + | } | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
+ | |||
} | } | ||
Line 139: | Line 120: | ||
NS_Free(cp); | NS_Free(cp); | ||
+ | } | ||
</source></div> | </source></div> | ||
------ | ------ |
Latest revision as of 20:33, 20 April 2011
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...
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);
}
Apr6
// Modified based on Matt Postil's Version
diff -r e6b318aca788 layout/generic/nsImageMap.cpp
--- a/layout/generic/nsImageMap.cpp Wed Apr 06 17:38:21 2011 -0700
+++ b/layout/generic/nsImageMap.cpp Sat Apr 09 20:50:51 2011 -0400
@@ -112,12 +112,7 @@
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,
@@ -186,12 +181,17 @@
* Skip to a separator
*/
tptr = n_str;
- while (!is_space(*tptr) && *tptr != ',' && *tptr != '\0')
+ while (!is_space(*tptr) && *tptr != ',' && *tptr != ';' && *tptr != '\0')
{
tptr++;
}
n_str = tptr;
/*
* If no more entries, break out here
*/
@@ -205,7 +205,7 @@
* comma.
*/
has_comma = PR_FALSE;
- while (is_space(*tptr) || *tptr == ',')
+ while (is_space(*tptr) || *tptr == ',' || *tptr == ';')
{
if (*tptr == ',')
{