Major revamps to the template parser. Fixed a few security holes that could allow PHP to be injected in untimely places in TPL code. Improved Ux for XSS attempt in tplWikiFormat. Documented many functions. Backported much cleaner parser from 2.0 branch. Beautified a lot of code in the depths of the template class. Pretty much a small-scale Extreme Makeover.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="face-angel.svg"
sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/emotes"
inkscape:version="0.42+devel"
sodipodi:version="0.32"
id="svg4376"
height="48px"
width="48px">
<defs
id="defs3">
<linearGradient
id="linearGradient3179">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3181" />
<stop
style="stop-color:#f6e76a;stop-opacity:1;"
offset="1"
id="stop3185" />
</linearGradient>
<linearGradient
id="linearGradient3451">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3453" />
<stop
id="stop4936"
offset="0.5"
style="stop-color:#fefc9a;stop-opacity:0.62886596;" />
<stop
style="stop-color:#fefc9a;stop-opacity:0;"
offset="1"
id="stop3455" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3451"
id="radialGradient3468"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.000000,0.000000,0.000000,0.166667,7.650132e-16,8.709935)"
cx="25.127777"
cy="10.451922"
fx="25.127777"
fy="10.451922"
r="15.076666" />
<linearGradient
id="linearGradient3050">
<stop
style="stop-color:#a40000;stop-opacity:1;"
offset="0"
id="stop3052" />
<stop
style="stop-color:#ec0000;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop3054" />
</linearGradient>
<linearGradient
id="linearGradient3290">
<stop
id="stop3292"
offset="0.0000000"
style="stop-color:#fffcde;stop-opacity:1.0000000;" />
<stop
style="stop-color:#f6e76a;stop-opacity:1.0000000;"
offset="0.64485979"
id="stop3294" />
<stop
id="stop3296"
offset="1.0000000"
style="stop-color:#ffb738;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
r="8.9020796"
fy="15.755712"
fx="29.158466"
cy="15.720984"
cx="29.288071"
gradientUnits="userSpaceOnUse"
id="radialGradient2714"
xlink:href="#linearGradient3179"
inkscape:collect="always" />
<linearGradient
id="linearGradient2509">
<stop
style="stop-color:#fffbd5;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop2511" />
<stop
style="stop-color:#edd400;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop2513" />
</linearGradient>
<radialGradient
gradientTransform="matrix(1.250000,0.000000,0.000000,1.250000,-6.479446,-13.37211)"
id="aigrd2"
cx="25.0527"
cy="39.5928"
r="15.7572"
fx="25.0527"
fy="39.5928"
gradientUnits="userSpaceOnUse">
<stop
offset="0.0000000"
style="stop-color:#777777;stop-opacity:1.0000000;"
id="stop8602" />
<stop
offset="1"
style="stop-color:#000000"
id="stop8604" />
</radialGradient>
<linearGradient
id="linearGradient4565"
inkscape:collect="always">
<stop
id="stop4567"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop4569"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient3824">
<stop
id="stop3826"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop3828"
offset="1.0000000"
style="stop-color:#c9c9c9;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient3800">
<stop
id="stop3802"
offset="0.0000000"
style="stop-color:#ffeed6;stop-opacity:1.0000000;" />
<stop
style="stop-color:#e49c2f;stop-opacity:1.0000000;"
offset="0.50000000"
id="stop8664" />
<stop
id="stop3804"
offset="1.0000000"
style="stop-color:#ffc66c;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.000000,0.000000,0.000000,0.333333,0.000000,25.71429)"
r="19.714285"
fy="38.571430"
fx="24.714285"
cy="38.571430"
cx="24.714285"
id="radialGradient4571"
xlink:href="#linearGradient4565"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3050"
id="linearGradient3384"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.356785,-4.136152e-17,4.888137e-17,0.421652,15.59796,22.41694)"
x1="23.031250"
y1="24.312500"
x2="23.031250"
y2="36.249878" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3050"
id="linearGradient3388"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.277603,-9.832923e-2,0.112086,0.340135,19.04250,26.33855)"
x1="23.377983"
y1="21.840229"
x2="23.591845"
y2="31.634424" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3050"
id="linearGradient3394"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.277603,-9.832923e-2,0.112086,0.340135,19.04250,26.33855)"
x1="23.377983"
y1="21.840229"
x2="23.591845"
y2="31.634424" />
</defs>
<sodipodi:namedview
inkscape:window-y="330"
inkscape:window-x="569"
inkscape:window-height="614"
inkscape:window-width="872"
inkscape:showpageshadow="false"
inkscape:document-units="px"
inkscape:grid-bbox="true"
showgrid="false"
inkscape:current-layer="layer1"
inkscape:cy="23.689514"
inkscape:cx="41.558678"
inkscape:zoom="4.9245777"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="0.19607843"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
fill="#edd400" />
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Face - Angel</dc:title>
<dc:subject>
<rdf:Bag>
<rdf:li>emoticon</rdf:li>
<rdf:li>emote</rdf:li>
<rdf:li>smiley</rdf:li>
<rdf:li>angel</rdf:li>
<rdf:li>0:)</rdf:li>
<rdf:li>0:-)</rdf:li>
</rdf:Bag>
</dc:subject>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
<dc:creator>
<cc:Agent>
<dc:title>Jakub Steiner</dc:title>
</cc:Agent>
</dc:creator>
<dc:source>http://jimmac.musichall.cz</dc:source>
<dc:description />
<dc:contributor>
<cc:Agent>
<dc:title>Corey Woodworth</dc:title>
</cc:Agent>
</dc:contributor>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Notice" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Attribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
<cc:requires
rdf:resource="http://web.resource.org/cc/ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
inkscape:label="Layer 1"
id="layer1">
<path
d="M 44.428570 38.571430 A 19.714285 6.5714288 0 1 1 5.0000000,38.571430 A 19.714285 6.5714288 0 1 1 44.428570 38.571430 z"
sodipodi:ry="6.5714288"
sodipodi:rx="19.714285"
sodipodi:cy="38.571430"
sodipodi:cx="24.714285"
id="path4563"
style="opacity:0.53164557;color:#000000;fill:url(#radialGradient4571);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.40487173;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
sodipodi:type="arc" />
<path
transform="matrix(2.083142,0.000000,0.000000,2.083142,-40.54715,-16.49224)"
d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1 22.450640,19.008621 A 8.6620579 8.6620579 0 1 1 39.774755 19.008621 z"
sodipodi:ry="8.6620579"
sodipodi:rx="8.6620579"
sodipodi:cy="19.008621"
sodipodi:cx="31.112698"
id="path4320"
style="overflow:visible;display:inline;visibility:visible;stroke-opacity:1;stroke-dashoffset:0.0000000;stroke-dasharray:none;stroke-miterlimit:4.0000000;marker-end:none;marker-mid:none;marker-start:none;marker:none;stroke-linejoin:round;stroke-linecap:round;stroke-width:0.48004404;stroke:#e49a17;fill-rule:evenodd;fill-opacity:1.0;fill:url(#radialGradient2714);color:#000000;opacity:1.0000000"
sodipodi:type="arc" />
<path
transform="matrix(1.175809,0.000000,0.000000,2.582227,-5.280449,-20.47780)"
d="M 40.204443 10.451922 A 15.076666 2.5127776 0 1 1 10.051111,10.451922 A 15.076666 2.5127776 0 1 1 40.204443 10.451922 z"
sodipodi:ry="2.5127776"
sodipodi:rx="15.076666"
sodipodi:cy="10.451922"
sodipodi:cx="25.127777"
id="path3423"
style="opacity:1;color:#000000;fill:url(#radialGradient3468);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.00150537;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
sodipodi:type="arc" />
<path
transform="matrix(1.979782,0.000000,0.000000,1.979782,-37.33128,-14.52746)"
sodipodi:type="arc"
style="opacity:0.4;color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.50510627;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
id="path4322"
sodipodi:cx="31.112698"
sodipodi:cy="19.008621"
sodipodi:rx="8.6620579"
sodipodi:ry="8.6620579"
d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1 22.450640,19.008621 A 8.6620579 8.6620579 0 1 1 39.774755 19.008621 z" />
<path
sodipodi:nodetypes="czczc"
id="path2659"
d="M 37.284637,24.719966 C 34.268170,29.944639 30.741134,33.710005 24.462492,33.710005 C 18.362475,33.710005 13.896955,29.370308 11.110016,24.543189 C 13.659429,27.599109 17.392948,31.109501 24.197327,31.109501 C 32.327531,31.109501 33.749103,28.202646 37.284637,24.719966 z "
style="opacity:0.35999998;color:#000000;fill:#ffffff;fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
<path
style="fill:url(#aigrd2);fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000"
d="M 37.284637,24.012862 C 34.268170,29.237535 30.741134,33.002901 24.462492,33.002901 C 18.362475,33.002901 13.896955,28.663204 11.110016,23.836085 C 13.659429,26.892005 17.392948,30.402397 24.197327,30.402397 C 32.327531,30.402397 33.749103,27.495542 37.284637,24.012862 z "
id="path8606"
sodipodi:nodetypes="czczc" />
<path
sodipodi:type="arc"
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#c3b400;stroke-width:2.32432675;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="path1453"
sodipodi:cx="25.127777"
sodipodi:cy="10.451922"
sodipodi:rx="15.076666"
sodipodi:ry="2.5127776"
d="M 40.204443 10.451922 A 15.076666 2.5127776 0 1 1 10.051111,10.451922 A 15.076666 2.5127776 0 1 1 40.204443 10.451922 z"
transform="matrix(1.012503,0.000000,0.000000,1.645326,-1.176935,-10.68538)" />
<path
transform="matrix(1.014856,0.000000,0.000000,1.611564,-1.206928,-10.33866)"
d="M 40.204443 10.451922 A 15.076666 2.5127776 0 1 1 10.051111,10.451922 A 15.076666 2.5127776 0 1 1 40.204443 10.451922 z"
sodipodi:ry="2.5127776"
sodipodi:rx="15.076666"
sodipodi:cy="10.451922"
sodipodi:cx="25.127777"
id="path2472"
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffff06;stroke-width:0.78194094;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
sodipodi:type="arc" />
<path
style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.0000006;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M 25.203063,17.578559 C 26.982405,21.949412 31.532943,22.064182 33.134299,17.728635 C 30.310009,19.967515 27.713179,19.322697 25.203063,17.578559 z "
id="path1336"
sodipodi:nodetypes="ccc" />
<path
sodipodi:nodetypes="ccc"
id="path1458"
d="M 23.134299,17.578559 C 21.354957,21.949412 16.804419,22.064182 15.203063,17.728635 C 18.027353,19.967515 20.624183,19.322697 23.134299,17.578559 z "
style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.0000006;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
</g>
</svg>