Skip to content
This repository was archived by the owner on Apr 22, 2020. It is now read-only.

Commit f5972ab

Browse files
look for <?prettify?> even when there is no class="prettyprint"
1 parent d1fdb01 commit f5972ab

File tree

4 files changed

+82
-79
lines changed

4 files changed

+82
-79
lines changed

js-modules/prettify.js

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -858,8 +858,34 @@ var prettyPrint;
858858
Infinity);
859859
for (; k < elements.length && clock['now']() < endTime; k++) {
860860
var cs = elements[k];
861+
862+
// Look for a preceding comment like
863+
// <?prettify lang="..." linenums="..."?>
864+
var attrs = EMPTY;
865+
{
866+
for (var preceder = cs; (preceder = preceder.previousSibling);) {
867+
var nt = preceder.nodeType;
868+
// <?foo?> is parsed by HTML 5 to a comment node (8)
869+
// like <!--?foo?-->, but in XML is a processing instruction
870+
var value = (nt === 7 || nt === 8) && preceder.nodeValue;
871+
if (value
872+
? !/^\??prettify\b/.test(value)
873+
: (nt !== 3 || /\S/.test(preceder.nodeValue))) {
874+
// Skip over white-space text nodes but not others.
875+
break;
876+
}
877+
if (value) {
878+
attrs = {};
879+
value.replace(
880+
/\b(\w+)=([\w:.%+-]+)/g,
881+
function (_, name, value) { attrs[name] = value; });
882+
break;
883+
}
884+
}
885+
}
886+
861887
var className = cs.className;
862-
if (prettyPrintRe.test(className)
888+
if ((attrs !== EMPTY || prettyPrintRe.test(className))
863889
// Don't redo this if we've already done it.
864890
// This allows recalling pretty print to just prettyprint elements
865891
// that have been added to the page since last call.
@@ -880,31 +906,6 @@ var prettyPrint;
880906
// we shouldn't try again.
881907
cs.className += ' prettyprinted';
882908

883-
// Look for a preceding comment like
884-
// <?prettify lang="..." linenums="..."?>
885-
var attrs = EMPTY;
886-
{
887-
for (var preceder = cs; (preceder = preceder.previousSibling);) {
888-
var nt = preceder.nodeType;
889-
// <?foo?> is parsed by HTML 5 to a comment node (8)
890-
// like <!--?foo?-->, but in XML is a processing instruction
891-
var value = (nt === 7 || nt === 8) && preceder.nodeValue;
892-
if (value
893-
? !/^\??prettify\b/.test(value)
894-
: (nt !== 3 || /\S/.test(preceder.nodeValue))) {
895-
// Skip over white-space text nodes but not others.
896-
break;
897-
}
898-
if (value) {
899-
attrs = {};
900-
value.replace(
901-
/\b(\w+)=([\w:.%+-]+)/g,
902-
function (_, name, value) { attrs[name] = value; });
903-
break;
904-
}
905-
}
906-
}
907-
908909
// If the classes includes a language extensions, use it.
909910
// Language extensions can be specified like
910911
// <pre class="prettyprint lang-cpp">

src/prettify.js

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1466,8 +1466,34 @@ var prettyPrint;
14661466
Infinity);
14671467
for (; k < elements.length && clock['now']() < endTime; k++) {
14681468
var cs = elements[k];
1469+
1470+
// Look for a preceding comment like
1471+
// <?prettify lang="..." linenums="..."?>
1472+
var attrs = EMPTY;
1473+
{
1474+
for (var preceder = cs; (preceder = preceder.previousSibling);) {
1475+
var nt = preceder.nodeType;
1476+
// <?foo?> is parsed by HTML 5 to a comment node (8)
1477+
// like <!--?foo?-->, but in XML is a processing instruction
1478+
var value = (nt === 7 || nt === 8) && preceder.nodeValue;
1479+
if (value
1480+
? !/^\??prettify\b/.test(value)
1481+
: (nt !== 3 || /\S/.test(preceder.nodeValue))) {
1482+
// Skip over white-space text nodes but not others.
1483+
break;
1484+
}
1485+
if (value) {
1486+
attrs = {};
1487+
value.replace(
1488+
/\b(\w+)=([\w:.%+-]+)/g,
1489+
function (_, name, value) { attrs[name] = value; });
1490+
break;
1491+
}
1492+
}
1493+
}
1494+
14691495
var className = cs.className;
1470-
if (prettyPrintRe.test(className)
1496+
if ((attrs !== EMPTY || prettyPrintRe.test(className))
14711497
// Don't redo this if we've already done it.
14721498
// This allows recalling pretty print to just prettyprint elements
14731499
// that have been added to the page since last call.
@@ -1488,31 +1514,6 @@ var prettyPrint;
14881514
// we shouldn't try again.
14891515
cs.className += ' prettyprinted';
14901516

1491-
// Look for a preceding comment like
1492-
// <?prettify lang="..." linenums="..."?>
1493-
var attrs = EMPTY;
1494-
{
1495-
for (var preceder = cs; (preceder = preceder.previousSibling);) {
1496-
var nt = preceder.nodeType;
1497-
// <?foo?> is parsed by HTML 5 to a comment node (8)
1498-
// like <!--?foo?-->, but in XML is a processing instruction
1499-
var value = (nt === 7 || nt === 8) && preceder.nodeValue;
1500-
if (value
1501-
? !/^\??prettify\b/.test(value)
1502-
: (nt !== 3 || /\S/.test(preceder.nodeValue))) {
1503-
// Skip over white-space text nodes but not others.
1504-
break;
1505-
}
1506-
if (value) {
1507-
attrs = {};
1508-
value.replace(
1509-
/\b(\w+)=([\w:.%+-]+)/g,
1510-
function (_, name, value) { attrs[name] = value; });
1511-
break;
1512-
}
1513-
}
1514-
}
1515-
15161517
// If the classes includes a language extensions, use it.
15171518
// Language extensions can be specified like
15181519
// <pre class="prettyprint lang-cpp">

src/run_prettify.js

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1655,8 +1655,34 @@ var IN_GLOBAL_SCOPE = false;
16551655
Infinity);
16561656
for (; k < elements.length && clock['now']() < endTime; k++) {
16571657
var cs = elements[k];
1658+
1659+
// Look for a preceding comment like
1660+
// <?prettify lang="..." linenums="..."?>
1661+
var attrs = EMPTY;
1662+
{
1663+
for (var preceder = cs; (preceder = preceder.previousSibling);) {
1664+
var nt = preceder.nodeType;
1665+
// <?foo?> is parsed by HTML 5 to a comment node (8)
1666+
// like <!--?foo?-->, but in XML is a processing instruction
1667+
var value = (nt === 7 || nt === 8) && preceder.nodeValue;
1668+
if (value
1669+
? !/^\??prettify\b/.test(value)
1670+
: (nt !== 3 || /\S/.test(preceder.nodeValue))) {
1671+
// Skip over white-space text nodes but not others.
1672+
break;
1673+
}
1674+
if (value) {
1675+
attrs = {};
1676+
value.replace(
1677+
/\b(\w+)=([\w:.%+-]+)/g,
1678+
function (_, name, value) { attrs[name] = value; });
1679+
break;
1680+
}
1681+
}
1682+
}
1683+
16581684
var className = cs.className;
1659-
if (prettyPrintRe.test(className)
1685+
if ((attrs !== EMPTY || prettyPrintRe.test(className))
16601686
// Don't redo this if we've already done it.
16611687
// This allows recalling pretty print to just prettyprint elements
16621688
// that have been added to the page since last call.
@@ -1677,31 +1703,6 @@ var IN_GLOBAL_SCOPE = false;
16771703
// we shouldn't try again.
16781704
cs.className += ' prettyprinted';
16791705

1680-
// Look for a preceding comment like
1681-
// <?prettify lang="..." linenums="..."?>
1682-
var attrs = EMPTY;
1683-
{
1684-
for (var preceder = cs; (preceder = preceder.previousSibling);) {
1685-
var nt = preceder.nodeType;
1686-
// <?foo?> is parsed by HTML 5 to a comment node (8)
1687-
// like <!--?foo?-->, but in XML is a processing instruction
1688-
var value = (nt === 7 || nt === 8) && preceder.nodeValue;
1689-
if (value
1690-
? !/^\??prettify\b/.test(value)
1691-
: (nt !== 3 || /\S/.test(preceder.nodeValue))) {
1692-
// Skip over white-space text nodes but not others.
1693-
break;
1694-
}
1695-
if (value) {
1696-
attrs = {};
1697-
value.replace(
1698-
/\b(\w+)=([\w:.%+-]+)/g,
1699-
function (_, name, value) { attrs[name] = value; });
1700-
break;
1701-
}
1702-
}
1703-
}
1704-
17051706
// If the classes includes a language extensions, use it.
17061707
// Language extensions can be specified like
17071708
// <pre class="prettyprint lang-cpp">

tests/prettify_test_2.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -508,7 +508,7 @@ <h1>HTML 5 nested code element language ignored if not only content</h1>
508508
<p>The language is attached to a regular HTML5 comment that looks like an XML
509509
processing instruction.</p>
510510
<!--prettify linenums=false lang=lisp-->
511-
<pre class="prettyprint" id="procinstr4">; foo</pre>
511+
<pre id="procinstr4">; foo</pre>
512512

513513
<h1>Issues 185 and 261: Don't reprettify prettified content</h1>
514514
<code class="prettyprint prettyprinted" id="issue185"

0 commit comments

Comments
 (0)