Issue #185 - Treat elements ids as case-sensitive if in HTML5 mode
This commit is contained in:
parent
66a597f5b7
commit
79ac8b2554
59
src/attrs.c
59
src/attrs.c
|
@ -979,12 +979,40 @@ static uint anchorNameHash(ctmbstr s)
|
||||||
return hashval % ANCHOR_HASH_SIZE;
|
return hashval % ANCHOR_HASH_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* removes anchor for specific node */
|
/*\
|
||||||
|
* New Service for HTML5
|
||||||
|
* Issue #185 - Treat elements ids as case-sensitive
|
||||||
|
* if in HTML5 modes, make hash of value AS IS!
|
||||||
|
\*/
|
||||||
|
static uint anchorNameHash5(ctmbstr s)
|
||||||
|
{
|
||||||
|
uint hashval = 0;
|
||||||
|
/* Issue #149 - an inferred name can be null. avoid crash */
|
||||||
|
if (s)
|
||||||
|
{
|
||||||
|
for ( ; *s != '\0'; s++) {
|
||||||
|
tmbchar c = *s;
|
||||||
|
hashval = c + 31*hashval;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return hashval % ANCHOR_HASH_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*\
|
||||||
|
* removes anchor for specific node
|
||||||
|
* Issue #185 - Treat elements ids as case-sensitive
|
||||||
|
* if in HTML5 modes, make hash of value AS IS!
|
||||||
|
\*/
|
||||||
void TY_(RemoveAnchorByNode)( TidyDocImpl* doc, ctmbstr name, Node *node )
|
void TY_(RemoveAnchorByNode)( TidyDocImpl* doc, ctmbstr name, Node *node )
|
||||||
{
|
{
|
||||||
TidyAttribImpl* attribs = &doc->attribs;
|
TidyAttribImpl* attribs = &doc->attribs;
|
||||||
Anchor *delme = NULL, *curr, *prev = NULL;
|
Anchor *delme = NULL, *curr, *prev = NULL;
|
||||||
uint h = anchorNameHash(name);
|
uint h;
|
||||||
|
if (TY_(HTMLVersion)(doc) == HT50)
|
||||||
|
h = anchorNameHash5(name);
|
||||||
|
else
|
||||||
|
h = anchorNameHash(name);
|
||||||
|
|
||||||
for ( curr=attribs->anchor_hash[h]; curr!=NULL; curr=curr->next )
|
for ( curr=attribs->anchor_hash[h]; curr!=NULL; curr=curr->next )
|
||||||
{
|
{
|
||||||
|
@ -1015,12 +1043,20 @@ static Anchor* NewAnchor( TidyDocImpl* doc, ctmbstr name, Node* node )
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* add new anchor to namespace */
|
/*\
|
||||||
|
* add new anchor to namespace
|
||||||
|
* Issue #185 - Treat elements ids as case-sensitive
|
||||||
|
* if in HTML5 modes, make hash of value AS IS!
|
||||||
|
\*/
|
||||||
static Anchor* AddAnchor( TidyDocImpl* doc, ctmbstr name, Node *node )
|
static Anchor* AddAnchor( TidyDocImpl* doc, ctmbstr name, Node *node )
|
||||||
{
|
{
|
||||||
TidyAttribImpl* attribs = &doc->attribs;
|
TidyAttribImpl* attribs = &doc->attribs;
|
||||||
Anchor *a = NewAnchor( doc, name, node );
|
Anchor *a = NewAnchor( doc, name, node );
|
||||||
uint h = anchorNameHash(name);
|
uint h;
|
||||||
|
if (TY_(HTMLVersion)(doc) == HT50)
|
||||||
|
h = anchorNameHash5(name);
|
||||||
|
else
|
||||||
|
h = anchorNameHash(name);
|
||||||
|
|
||||||
if ( attribs->anchor_hash[h] == NULL)
|
if ( attribs->anchor_hash[h] == NULL)
|
||||||
attribs->anchor_hash[h] = a;
|
attribs->anchor_hash[h] = a;
|
||||||
|
@ -1035,14 +1071,25 @@ static Anchor* AddAnchor( TidyDocImpl* doc, ctmbstr name, Node *node )
|
||||||
return attribs->anchor_hash[h];
|
return attribs->anchor_hash[h];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* return node associated with anchor */
|
/*\
|
||||||
|
* return node associated with anchor
|
||||||
|
* Issue #185 - Treat elements ids as case-sensitive
|
||||||
|
* if in HTML5 modes, make hash of value AS IS!
|
||||||
|
\*/
|
||||||
static Node* GetNodeByAnchor( TidyDocImpl* doc, ctmbstr name )
|
static Node* GetNodeByAnchor( TidyDocImpl* doc, ctmbstr name )
|
||||||
{
|
{
|
||||||
TidyAttribImpl* attribs = &doc->attribs;
|
TidyAttribImpl* attribs = &doc->attribs;
|
||||||
Anchor *found;
|
Anchor *found;
|
||||||
uint h = anchorNameHash(name);
|
uint h;
|
||||||
tmbstr lname = TY_(tmbstrdup)(doc->allocator, name);
|
tmbstr lname = TY_(tmbstrdup)(doc->allocator, name);
|
||||||
|
if (TY_(HTMLVersion)(doc) == HT50) {
|
||||||
|
h = anchorNameHash5(name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
h = anchorNameHash(name);
|
||||||
lname = TY_(tmbstrtolower)(lname);
|
lname = TY_(tmbstrtolower)(lname);
|
||||||
|
}
|
||||||
|
|
||||||
for ( found = attribs->anchor_hash[h]; found != NULL; found = found->next )
|
for ( found = attribs->anchor_hash[h]; found != NULL; found = found->next )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue