mirror of
https://github.com/netsurf-browser/netsurf
synced 2025-02-27 03:44:23 +03:00
[project @ 2004-07-30 21:53:52 by jmb]
Implement some CSS3 attribute selectors svn path=/import/netsurf/; revision=1167
This commit is contained in:
parent
999ded28b8
commit
d601aa7188
259
!NetSurf/Resources/AdBlock,f79
Normal file
259
!NetSurf/Resources/AdBlock,f79
Normal file
@ -0,0 +1,259 @@
|
||||
/* From http://texturizer.net/firefox/adblock.html */
|
||||
|
||||
/* Block Ads v.2004-06-12 by Neil Jenkins
|
||||
Portions of this ruleset are derived from the ad blocking css by Joe Francis at:
|
||||
http://www.floppymoose.com/
|
||||
Some code also contributed by Mike Hokenson:
|
||||
http://www.gozer.org/mozilla/ad_blocking
|
||||
*/
|
||||
|
||||
iframe[width="120"][height="600"], a img[width="120"][height="600"],
|
||||
iframe[width="125"][height="600"], a img[width="125"][height="600"],
|
||||
iframe[width="150"][height="100"], a img[width="150"][height="100"],
|
||||
iframe[width="150"][height="600"], a img[width="150"][height="600"],
|
||||
iframe[width="160"][height="600"], a img[width="160"][height="600"],
|
||||
iframe[width="300"][height="250"], a img[width="300"][height="250"],
|
||||
iframe[width="336"][height="280"], a img[width="336"][height="280"],
|
||||
iframe[width="468"][height="60"], a img[width="468"][height="60"],
|
||||
iframe[width="470"][height="62"], a img[width="470"][height="62"],
|
||||
iframe[width="728"][height="90"], a img[width="728"][height="90"],
|
||||
iframe[width="730"][height="92"], a img[width="730"][height="92"],
|
||||
iframe[width="600"][height="120"], object[width="125"][height="300"],
|
||||
iframe[width="180"][height="150"],
|
||||
iframe[src*="/ad-"],
|
||||
iframe[src*="/ad."],
|
||||
iframe[src*="/ad/"],
|
||||
iframe[src*="/ad_"],
|
||||
iframe[src*="/adframe"],
|
||||
iframe[src*="/ads"],
|
||||
iframe[src*="/adv"],
|
||||
iframe[src*="/adx"],
|
||||
iframe[src*=".ad"],
|
||||
iframe[src*="_Banner"],
|
||||
iframe[src*="BET365"],
|
||||
iframe[src*="/click"],
|
||||
iframe[src*="?click"],
|
||||
iframe[src*="googlesyndication"],
|
||||
iframe[src*="promos"],
|
||||
iframe[name="bsadframe"],
|
||||
iframe[id="adFrame"],
|
||||
iframe[id="splashFrame"],
|
||||
img[src*="/ad-"],
|
||||
img[src*="/ad."],
|
||||
img[src*="/ad/"],
|
||||
img[src*="/ad_"],
|
||||
img[src*="/ads"],
|
||||
img[src*="/adv"],
|
||||
img[src*="/adx"],
|
||||
img[src*=".ad"],
|
||||
img[src*="_ad_"],
|
||||
img[src*="/click"],
|
||||
img[src*="?click"],
|
||||
img[src*="Editorial_Promos"],
|
||||
img[src*="/toms_skyscraper_"],
|
||||
img[src$="images/logos/amazon_international.gif"],
|
||||
img[src*="freshmeat.net/button.gif"],
|
||||
img[src*="pic.geocities.com/images/"],
|
||||
img[src*="i.imdb.com/Vpics/"],
|
||||
img[src*="i.imdb.com/Photos/CMSIcons"],
|
||||
img[src*="i.imdb.com/Icons/apix/"],
|
||||
img[src*="i.imdb.com/Icons/kpix/"],
|
||||
img[src*="i.imdb.com/apix/"],
|
||||
img[src*="sportsbybrooks.com/farkbutton.gif"],
|
||||
img[alt*="advert"],
|
||||
img[alt*="Click Here To Visit Our Sponsor"],
|
||||
img[alt*="Sponsored Links"],
|
||||
img[name="fixedSpImg"],
|
||||
a:link[href*="/ad-"] img,
|
||||
a:link[href*="/ad."] img,
|
||||
a:link[href*="/ad/"] img,
|
||||
a:link[href*="/ad_"] img,
|
||||
a:link[href*="/ads"] img,
|
||||
a:link[href*="/adv"] img,
|
||||
a:link[href*="/adx"] img,
|
||||
a:link[href*=".ad"] img,
|
||||
a:link[href*="/banner"] img,
|
||||
a:link[href*="/click.cgi"] img,
|
||||
a:link[href*="/clickcgi?"] img,
|
||||
a:link[href*="/clickover"] img,
|
||||
a:link[href*="/clickthr"] img,
|
||||
a:link[href*="/click-"] img,
|
||||
a:link[href*="=click"] img,
|
||||
a:link[href*="?click"] img,
|
||||
a:link[href*="/A="] img,
|
||||
table table table[width="346"][height="280"],
|
||||
table[class="metatable"],
|
||||
table[id="RefAd"],
|
||||
table[cellspacing="0"][width="160"][height="329"][bgcolor="#000000"],
|
||||
table[cellpadding="5"][width="150"][style="border: 1px dashed rgb(221, 170, 170); background-color: rgb(236, 248, 255);"],
|
||||
table[border="0"][height="600"][width="120"],
|
||||
table[height="90"][cellspacing="0"][cellpadding="0"][width="728"][border="0"],
|
||||
table[border="0"][cellpadding="3"][cellspacing="0"][height="40"][width="100%"],
|
||||
table[border="0"][cellpadding="0"][cellspacing="4"][align="right"][width="20%"],
|
||||
table[border="2"] td[valign="top"][bgcolor="#ffffff"] table[width="138"],
|
||||
table[border="0"][cellpadding="1"][cellspacing="0"][width="626"][bgcolor="#6699cc"],
|
||||
table[bordercolor="red"][height="225"][cellspacing="0"][cellpadding="0"][width="190"][bgcolor="white"][border="0"],
|
||||
table[width="336"][border="0"][cellspacing="0"][cellpadding="0"][align="right"][style="margin-left: 10px; margin-bottom: 10px;"],
|
||||
table[width="770"][border="0"] tr[valign="top"]
|
||||
td[width="160"],
|
||||
td[class="cnnNavAd"],
|
||||
td[class="RHBarBody"],
|
||||
td[class="sl-table"],
|
||||
td[style="border-bottom: 1px solid rgb(204, 204, 204); padding: 7px 3px; background-color: rgb(255, 254, 249);"],
|
||||
td span[class="aoltextad"],
|
||||
form[name="frmLargeForm"],
|
||||
form[action*="click_lx.cgi"],
|
||||
form[action^="http://rd.yahoo.com/"],
|
||||
form[action=""][name$="SoapCity"],
|
||||
form[action=""][name^="728x90"],
|
||||
form[action=""][name^="300x250"],
|
||||
form[method="get"][action*="martindale"][name="MDH"],
|
||||
embed[type="application/x-shockwave-flash"][src*="_Banner"],
|
||||
embed[type="application/x-shockwave-flash"][src*="/ad"],
|
||||
embed[type="application/x-shockwave-flash"][href*="/ad"],
|
||||
embed[type="application/x-shockwave-flash"][src*=".ad"],
|
||||
embed[type="application/x-shockwave-flash"][href*=".ad"],
|
||||
embed[type="application/x-shockwave-flash"][src*="?click"],
|
||||
embed[type="application/x-shockwave-flash"][href*="?click"],
|
||||
embed[type="application/x-shockwave-flash"][src*="/click"],
|
||||
embed[type="application/x-shockwave-flash"][href*="/click"],
|
||||
embed[type="application/x-shockwave-flash"][href*="promos"],
|
||||
embed[type="application/x-shockwave-flash"][href*="=click"],
|
||||
embed[type="application/x-shockwave-flash"][href*="redirect"],
|
||||
embed[type="application/x-shockwave-flash"][href*="/A="],
|
||||
embed[type="application/x-shockwave-flash"][name*="advert"],
|
||||
embed[type="application/x-shockwave-flash"][name*="banner"],
|
||||
embed[type="application/x-shockwave-flash"][width="728"][height="90"],
|
||||
embed[type="application/x-shockwave-flash"][width="468"][height="60"],
|
||||
embed[type="application/x-shockwave-flash"][width="467"][height="63"],
|
||||
div[id="adstrip"],
|
||||
div[id*="advert"],
|
||||
div[id="dropin"],
|
||||
div[id="dwindow"],
|
||||
div[id="dcv_EchangeLay"],
|
||||
div[id="mntl"],
|
||||
div[id*="popup"],
|
||||
div[id="quack"],
|
||||
div[id="splashLayer"],
|
||||
div[id*="sponsor"],
|
||||
div[id="yschsec"],
|
||||
div[class="ovt"],
|
||||
div#contextualLinks,
|
||||
div[style="border: 1px solid rgb(221, 221, 221); padding: 5px; background-color: rgb(255, 255, 255);"],
|
||||
object[id="widgeth"],
|
||||
*[class="ad"],
|
||||
*[class*="eSext"],
|
||||
*[name*="klipad"],
|
||||
*[style*="/ads/"],
|
||||
*[id*="popover_"],
|
||||
*[src*="120x80"],
|
||||
*[src*="140x"],
|
||||
*[src*="?ad"],
|
||||
*[src*="-ad-"],
|
||||
*[src*="/adimage"],
|
||||
*[src*="/adimg"],
|
||||
*[src*="advert"],
|
||||
*[src*="=click"],
|
||||
*[src*="banners."],
|
||||
*[src*="banner_ads"],
|
||||
*[src*="/images/dinkus/more-arrow-lo.gif"],
|
||||
*[src*="/javaImages/ec/"],
|
||||
*[src*="/offer"],
|
||||
*[src*="/puffboxes/"],
|
||||
*[src*="/sponsors/"],
|
||||
*[src*="_sponsor_"],
|
||||
*[src*="/us.yimg.com/a/ya"],
|
||||
*[src*=".adbutler.de"],
|
||||
*[src*=".nedstatbasic.net"],
|
||||
*[src*=".tradedoubler.com"],
|
||||
*[src*=".travelocity./Sponsor_gifs/"],
|
||||
*[src*="a.consumer.net"],
|
||||
*[src*="bannermania.nom.pl"],
|
||||
*[src*="cash4banner.com"],
|
||||
*[src*="crazypopups.com"],
|
||||
*[src*="hit-now.com"],
|
||||
*[src*="hitbox.com"],
|
||||
*[src*="img.thebugs.ws"],
|
||||
*[src*="kinghost.com/ban/"],
|
||||
*[src*="klipmart"],
|
||||
*[src*="popupad.net/ats/"],
|
||||
*[src*="public"][src*="ad"],
|
||||
*[src*="/publicidad/"],
|
||||
*[src*="qkimg.net"],
|
||||
*[src*="qksrv.net"],
|
||||
*[src*="rcm-images.amazon.com"],
|
||||
*[src*="rcm.amazon.com"],
|
||||
*[src*="salon.com/Creatives"],
|
||||
*[src*="sexcounter."],
|
||||
*[src*="sideads/"],
|
||||
*[src*="statse.webtrendslive.com"],
|
||||
*[href*="logging.to"],
|
||||
*[href*="/referral/"],
|
||||
*[href*="tryaol"],
|
||||
*[href*="websponsors"],
|
||||
*[src*="banman.asp"],
|
||||
*[href*="banman.asp"],
|
||||
*[src*="bannerman"],
|
||||
*[href*="bannerman"],
|
||||
*[src*="?banner"],
|
||||
*[href*="?banner"],
|
||||
*[src*="/banner/"],
|
||||
*[href*="/banner/"],
|
||||
*[src*="/jump/"],
|
||||
*[href*="/jump/"],
|
||||
*[src*="adfarm"],
|
||||
*[href*="adfarm"],
|
||||
*[src*="advertising.com"],
|
||||
*[href*="advertising.com"],
|
||||
*[src*="ar.atwola.com"],
|
||||
*[href*="ar.atwola.com"],
|
||||
*[src*="atdmt.com"],
|
||||
*[href*="atdmt.com"],
|
||||
*[src*="bluestreak.com"],
|
||||
*[href*="bluestreak.com"],
|
||||
*[src*="clickxchange.com"],
|
||||
*[href*="clickxchange.com"],
|
||||
*[src*="doubleclick"],
|
||||
*[href*="doubleclick"],
|
||||
*[src*="falkag.net"],
|
||||
*[href*="falkag.net"],
|
||||
*[src*="fastclick.com"],
|
||||
*[href*="fastclick.com"],
|
||||
*[src*="mediaplex"],
|
||||
*[href*="mediaplex"],
|
||||
*[src*="netdirect.nl"],
|
||||
*[href*="netdirect.nl"],
|
||||
*[src*="spinbox."],
|
||||
*[href*="spinbox."],
|
||||
*[src*="tradedoubler.com"],
|
||||
*[href*="tradedoubler.com"],
|
||||
*[src*="transfer.go"],
|
||||
*[href*="transfer.go"],
|
||||
*[src*=".tribalfusion"],
|
||||
*[href*=".tribalfusion"],
|
||||
*[src*="valueclick"],
|
||||
*[href*="valueclick"],
|
||||
*[src*="http://216.92.211.171/"],
|
||||
*[href*="http://216.92.211.171/"],
|
||||
*[src*="http://216.92.21.16/"],
|
||||
*[href*="http://216.92.21.16/"] {
|
||||
display: none /*!important*/;
|
||||
}
|
||||
|
||||
img[src*=".advance"],
|
||||
img[src*="/click_"],
|
||||
img[src*="/cnn/images/clickability/"],
|
||||
img[src*="/logo2.m"],
|
||||
img[src$="/banners/com000.jpg"],
|
||||
a:link[href*=".add"] img,
|
||||
a:link[href*="admin"] img,
|
||||
a:link[href*="adobe"] img,
|
||||
a:link[href*=".adp"] img,
|
||||
a:link[href*="/advance"] img,
|
||||
a:link[href*="click.mp3"] img,
|
||||
a:link[href*="/imgres?imgurl="] img,
|
||||
a:link[href*=":head"] img,
|
||||
a:link[href*="http://nettracker."] img,
|
||||
embed[type="application/x-shockwave-flash"][src*="gallery"] {
|
||||
display: inline /*!important*/;
|
||||
}
|
@ -2,6 +2,8 @@
|
||||
* This file is part of NetSurf, http://netsurf.sourceforge.net/
|
||||
*/
|
||||
|
||||
@import url('AdBlock');
|
||||
|
||||
/* Elements ordered as in the HTML 4.01 specification. */
|
||||
|
||||
html { display: block; }
|
||||
|
78
css/css.c
78
css/css.c
@ -870,6 +870,69 @@ bool css_match_detail(const struct css_selector *detail,
|
||||
match = true;
|
||||
break;
|
||||
|
||||
case CSS_SELECTOR_ATTRIB_PRE:
|
||||
/* matches if the attribute begins with a certain
|
||||
* value (CSS3) */
|
||||
word = strndup(detail->data, detail->data_length);
|
||||
if (!word) {
|
||||
/** \todo report to user */
|
||||
return false;
|
||||
}
|
||||
s = (char *)xmlGetProp(element,
|
||||
(const xmlChar *) word);
|
||||
free(word);
|
||||
if (s && strncasecmp(detail->data2, s,
|
||||
detail->data2_length) == 0)
|
||||
match = true;
|
||||
break;
|
||||
|
||||
case CSS_SELECTOR_ATTRIB_SUF:
|
||||
/* matches if the attribute ends with a certain
|
||||
* value (CSS3) */
|
||||
word = strndup(detail->data, detail->data_length);
|
||||
if (!word) {
|
||||
/** \todo report to user */
|
||||
return false;
|
||||
}
|
||||
s = (char *)xmlGetProp(element,
|
||||
(const xmlChar *) word);
|
||||
free(word);
|
||||
if (!s)
|
||||
break;
|
||||
word = s + (strlen(s) - detail->data2_length);
|
||||
if (s && strncasecmp(detail->data2, word,
|
||||
detail->data2_length) == 0)
|
||||
match = true;
|
||||
break;
|
||||
|
||||
case CSS_SELECTOR_ATTRIB_SUB:
|
||||
/* matches if the attribute contains a certain
|
||||
* value (CSS3) */
|
||||
word = strndup(detail->data, detail->data_length);
|
||||
if (!word) {
|
||||
/** \todo report to user */
|
||||
return false;
|
||||
}
|
||||
s = (char *)xmlGetProp(element,
|
||||
(const xmlChar *) word);
|
||||
free(word);
|
||||
if (!s)
|
||||
break;
|
||||
/* case insensitive strstr follows */
|
||||
/* space -> last possible start position */
|
||||
/* word -> start of string to search */
|
||||
space = s + (strlen(s) - detail->data2_length);
|
||||
word = s;
|
||||
while (word <= space) {
|
||||
if (strncasecmp(detail->data2, word,
|
||||
detail->data2_length) == 0) {
|
||||
match = true;
|
||||
break;
|
||||
}
|
||||
word++;
|
||||
}
|
||||
break;
|
||||
|
||||
case CSS_SELECTOR_PSEUDO:
|
||||
break;
|
||||
|
||||
@ -1336,6 +1399,21 @@ void css_dump_selector(const struct css_selector *r)
|
||||
m->data_length, m->data,
|
||||
m->data2_length, m->data2);
|
||||
break;
|
||||
case CSS_SELECTOR_ATTRIB_PRE:
|
||||
fprintf(stderr, "[%.*s^=%.*s]",
|
||||
m->data_length, m->data,
|
||||
m->data2_length, m->data2);
|
||||
break;
|
||||
case CSS_SELECTOR_ATTRIB_SUF:
|
||||
fprintf(stderr, "[%.*s$=%.*s]",
|
||||
m->data_length, m->data,
|
||||
m->data2_length, m->data2);
|
||||
break;
|
||||
case CSS_SELECTOR_ATTRIB_SUB:
|
||||
fprintf(stderr, "[%.*s*=%.*s]",
|
||||
m->data_length, m->data,
|
||||
m->data2_length, m->data2);
|
||||
break;
|
||||
case CSS_SELECTOR_PSEUDO:
|
||||
fprintf(stderr, ":%.*s",
|
||||
m->data_length, m->data);
|
||||
|
@ -222,6 +222,9 @@ typedef enum {
|
||||
CSS_SELECTOR_ATTRIB_EQ,
|
||||
CSS_SELECTOR_ATTRIB_INC,
|
||||
CSS_SELECTOR_ATTRIB_DM,
|
||||
CSS_SELECTOR_ATTRIB_PRE,
|
||||
CSS_SELECTOR_ATTRIB_SUF,
|
||||
CSS_SELECTOR_ATTRIB_SUB,
|
||||
CSS_SELECTOR_PSEUDO,
|
||||
} css_selector_type;
|
||||
|
||||
@ -263,6 +266,9 @@ typedef enum {
|
||||
CSS_NODE_INCLUDES,
|
||||
CSS_NODE_FUNCTION,
|
||||
CSS_NODE_DASHMATCH,
|
||||
CSS_NODE_PREFIX,
|
||||
CSS_NODE_SUFFIX,
|
||||
CSS_NODE_SUBSTR,
|
||||
CSS_NODE_COLON,
|
||||
CSS_NODE_COMMA,
|
||||
CSS_NODE_DOT,
|
||||
|
42
css/parser.y
42
css/parser.y
@ -185,6 +185,36 @@ detail(A) ::= LBRAC IDENT(B) DASHMATCH STRING(C) RBRAC.
|
||||
if (A) { A->data2 = C.text + 1; A->data2_length = C.length - 2;
|
||||
A->specificity = 0x100; }
|
||||
else param->memory_error = true; }
|
||||
detail(A) ::= LBRAC IDENT(B) PREFIX IDENT(C) RBRAC.
|
||||
{ A = css_new_selector(CSS_SELECTOR_ATTRIB_PRE, B.text, B.length);
|
||||
if (A) { A->data2 = C.text; A->data2_length = C.length;
|
||||
A->specificity = 0x100; }
|
||||
else param->memory_error = true; }
|
||||
detail(A) ::= LBRAC IDENT(B) PREFIX STRING(C) RBRAC.
|
||||
{ A = css_new_selector(CSS_SELECTOR_ATTRIB_PRE, B.text, B.length);
|
||||
if (A) { A->data2 = C.text + 1; A->data2_length = C.length - 2;
|
||||
A->specificity = 0x100; }
|
||||
else param->memory_error = true; }
|
||||
detail(A) ::= LBRAC IDENT(B) SUFFIX IDENT(C) RBRAC.
|
||||
{ A = css_new_selector(CSS_SELECTOR_ATTRIB_SUF, B.text, B.length);
|
||||
if (A) { A->data2 = C.text; A->data2_length = C.length;
|
||||
A->specificity = 0x100; }
|
||||
else param->memory_error = true; }
|
||||
detail(A) ::= LBRAC IDENT(B) SUFFIX STRING(C) RBRAC.
|
||||
{ A = css_new_selector(CSS_SELECTOR_ATTRIB_SUF, B.text, B.length);
|
||||
if (A) { A->data2 = C.text + 1; A->data2_length = C.length - 2;
|
||||
A->specificity = 0x100; }
|
||||
else param->memory_error = true; }
|
||||
detail(A) ::= LBRAC IDENT(B) SUBSTR IDENT(C) RBRAC.
|
||||
{ A = css_new_selector(CSS_SELECTOR_ATTRIB_SUB, B.text, B.length);
|
||||
if (A) { A->data2 = C.text; A->data2_length = C.length;
|
||||
A->specificity = 0x100; }
|
||||
else param->memory_error = true; }
|
||||
detail(A) ::= LBRAC IDENT(B) SUBSTR STRING(C) RBRAC.
|
||||
{ A = css_new_selector(CSS_SELECTOR_ATTRIB_SUB, B.text, B.length);
|
||||
if (A) { A->data2 = C.text + 1; A->data2_length = C.length - 2;
|
||||
A->specificity = 0x100; }
|
||||
else param->memory_error = true; }
|
||||
detail(A) ::= COLON IDENT(B).
|
||||
{ if (B.length == 4 && strncasecmp(B.text, "link", 4) == 0) {
|
||||
A = css_new_selector(CSS_SELECTOR_ATTRIB, "href", 4);
|
||||
@ -297,6 +327,18 @@ any(A) ::= DASHMATCH.
|
||||
{ A = css_new_node(param->stylesheet, CSS_NODE_DASHMATCH,
|
||||
0, 0);
|
||||
if (!A) param->memory_error = true; }
|
||||
any(A) ::= PREFIX.
|
||||
{ A = css_new_node(param->stylesheet, CSS_NODE_PREFIX,
|
||||
0, 0);
|
||||
if (!A) param->memory_error = true; }
|
||||
any(A) ::= SUFFIX.
|
||||
{ A = css_new_node(param->stylesheet, CSS_NODE_SUFFIX,
|
||||
0, 0);
|
||||
if (!A) param->memory_error = true; }
|
||||
any(A) ::= SUBSTR.
|
||||
{ A = css_new_node(param->stylesheet, CSS_NODE_SUBSTR,
|
||||
0, 0);
|
||||
if (!A) param->memory_error = true; }
|
||||
any(A) ::= COLON.
|
||||
{ A = css_new_node(param->stylesheet, CSS_NODE_COLON, 0, 0);
|
||||
if (!A) param->memory_error = true; }
|
||||
|
@ -86,6 +86,9 @@ ident "(" { return FUNCTION; }
|
||||
"=" { return EQUALS; }
|
||||
"~=" { return INCLUDES; }
|
||||
"|=" { return DASHMATCH; }
|
||||
"^=" { return PREFIX; }
|
||||
"$=" { return SUFFIX; }
|
||||
"*=" { return SUBSTR; }
|
||||
":" { return COLON; }
|
||||
"," { return COMMA; }
|
||||
"+" { return PLUS; }
|
||||
|
Loading…
x
Reference in New Issue
Block a user