Edit File by line
/home/barbar84/www/wp-inclu.../js/codemirr...
File: csslint.js
line,
[1500] Fix | Delete
col,
[1501] Fix | Delete
marginSym = this._margin_sym();
[1502] Fix | Delete
[1503] Fix | Delete
if (marginSym) {
[1504] Fix | Delete
line = tokenStream.token().startLine;
[1505] Fix | Delete
col = tokenStream.token().startCol;
[1506] Fix | Delete
[1507] Fix | Delete
this.fire({
[1508] Fix | Delete
type: "startpagemargin",
[1509] Fix | Delete
margin: marginSym,
[1510] Fix | Delete
line: line,
[1511] Fix | Delete
col: col
[1512] Fix | Delete
});
[1513] Fix | Delete
[1514] Fix | Delete
this._readDeclarations(true);
[1515] Fix | Delete
[1516] Fix | Delete
this.fire({
[1517] Fix | Delete
type: "endpagemargin",
[1518] Fix | Delete
margin: marginSym,
[1519] Fix | Delete
line: line,
[1520] Fix | Delete
col: col
[1521] Fix | Delete
});
[1522] Fix | Delete
return true;
[1523] Fix | Delete
} else {
[1524] Fix | Delete
return false;
[1525] Fix | Delete
}
[1526] Fix | Delete
},
[1527] Fix | Delete
[1528] Fix | Delete
//CSS3 Paged Media
[1529] Fix | Delete
_margin_sym: function() {
[1530] Fix | Delete
[1531] Fix | Delete
/*
[1532] Fix | Delete
* margin_sym :
[1533] Fix | Delete
* TOPLEFTCORNER_SYM |
[1534] Fix | Delete
* TOPLEFT_SYM |
[1535] Fix | Delete
* TOPCENTER_SYM |
[1536] Fix | Delete
* TOPRIGHT_SYM |
[1537] Fix | Delete
* TOPRIGHTCORNER_SYM |
[1538] Fix | Delete
* BOTTOMLEFTCORNER_SYM |
[1539] Fix | Delete
* BOTTOMLEFT_SYM |
[1540] Fix | Delete
* BOTTOMCENTER_SYM |
[1541] Fix | Delete
* BOTTOMRIGHT_SYM |
[1542] Fix | Delete
* BOTTOMRIGHTCORNER_SYM |
[1543] Fix | Delete
* LEFTTOP_SYM |
[1544] Fix | Delete
* LEFTMIDDLE_SYM |
[1545] Fix | Delete
* LEFTBOTTOM_SYM |
[1546] Fix | Delete
* RIGHTTOP_SYM |
[1547] Fix | Delete
* RIGHTMIDDLE_SYM |
[1548] Fix | Delete
* RIGHTBOTTOM_SYM
[1549] Fix | Delete
* ;
[1550] Fix | Delete
*/
[1551] Fix | Delete
[1552] Fix | Delete
var tokenStream = this._tokenStream;
[1553] Fix | Delete
[1554] Fix | Delete
if (tokenStream.match([Tokens.TOPLEFTCORNER_SYM, Tokens.TOPLEFT_SYM,
[1555] Fix | Delete
Tokens.TOPCENTER_SYM, Tokens.TOPRIGHT_SYM, Tokens.TOPRIGHTCORNER_SYM,
[1556] Fix | Delete
Tokens.BOTTOMLEFTCORNER_SYM, Tokens.BOTTOMLEFT_SYM,
[1557] Fix | Delete
Tokens.BOTTOMCENTER_SYM, Tokens.BOTTOMRIGHT_SYM,
[1558] Fix | Delete
Tokens.BOTTOMRIGHTCORNER_SYM, Tokens.LEFTTOP_SYM,
[1559] Fix | Delete
Tokens.LEFTMIDDLE_SYM, Tokens.LEFTBOTTOM_SYM, Tokens.RIGHTTOP_SYM,
[1560] Fix | Delete
Tokens.RIGHTMIDDLE_SYM, Tokens.RIGHTBOTTOM_SYM])) {
[1561] Fix | Delete
return SyntaxUnit.fromToken(tokenStream.token());
[1562] Fix | Delete
} else {
[1563] Fix | Delete
return null;
[1564] Fix | Delete
}
[1565] Fix | Delete
[1566] Fix | Delete
},
[1567] Fix | Delete
[1568] Fix | Delete
_pseudo_page: function() {
[1569] Fix | Delete
/*
[1570] Fix | Delete
* pseudo_page
[1571] Fix | Delete
* : ':' IDENT
[1572] Fix | Delete
* ;
[1573] Fix | Delete
*/
[1574] Fix | Delete
[1575] Fix | Delete
var tokenStream = this._tokenStream;
[1576] Fix | Delete
[1577] Fix | Delete
tokenStream.mustMatch(Tokens.COLON);
[1578] Fix | Delete
tokenStream.mustMatch(Tokens.IDENT);
[1579] Fix | Delete
[1580] Fix | Delete
//TODO: CSS3 Paged Media says only "left", "center", and "right" are allowed
[1581] Fix | Delete
[1582] Fix | Delete
return tokenStream.token().value;
[1583] Fix | Delete
},
[1584] Fix | Delete
[1585] Fix | Delete
_font_face: function() {
[1586] Fix | Delete
/*
[1587] Fix | Delete
* font_face
[1588] Fix | Delete
* : FONT_FACE_SYM S*
[1589] Fix | Delete
* '{' S* declaration [ ';' S* declaration ]* '}' S*
[1590] Fix | Delete
* ;
[1591] Fix | Delete
*/
[1592] Fix | Delete
var tokenStream = this._tokenStream,
[1593] Fix | Delete
line,
[1594] Fix | Delete
col;
[1595] Fix | Delete
[1596] Fix | Delete
//look for @page
[1597] Fix | Delete
tokenStream.mustMatch(Tokens.FONT_FACE_SYM);
[1598] Fix | Delete
line = tokenStream.token().startLine;
[1599] Fix | Delete
col = tokenStream.token().startCol;
[1600] Fix | Delete
[1601] Fix | Delete
this._readWhitespace();
[1602] Fix | Delete
[1603] Fix | Delete
this.fire({
[1604] Fix | Delete
type: "startfontface",
[1605] Fix | Delete
line: line,
[1606] Fix | Delete
col: col
[1607] Fix | Delete
});
[1608] Fix | Delete
[1609] Fix | Delete
this._readDeclarations(true);
[1610] Fix | Delete
[1611] Fix | Delete
this.fire({
[1612] Fix | Delete
type: "endfontface",
[1613] Fix | Delete
line: line,
[1614] Fix | Delete
col: col
[1615] Fix | Delete
});
[1616] Fix | Delete
},
[1617] Fix | Delete
[1618] Fix | Delete
_viewport: function() {
[1619] Fix | Delete
/*
[1620] Fix | Delete
* viewport
[1621] Fix | Delete
* : VIEWPORT_SYM S*
[1622] Fix | Delete
* '{' S* declaration? [ ';' S* declaration? ]* '}' S*
[1623] Fix | Delete
* ;
[1624] Fix | Delete
*/
[1625] Fix | Delete
var tokenStream = this._tokenStream,
[1626] Fix | Delete
line,
[1627] Fix | Delete
col;
[1628] Fix | Delete
[1629] Fix | Delete
tokenStream.mustMatch(Tokens.VIEWPORT_SYM);
[1630] Fix | Delete
line = tokenStream.token().startLine;
[1631] Fix | Delete
col = tokenStream.token().startCol;
[1632] Fix | Delete
[1633] Fix | Delete
this._readWhitespace();
[1634] Fix | Delete
[1635] Fix | Delete
this.fire({
[1636] Fix | Delete
type: "startviewport",
[1637] Fix | Delete
line: line,
[1638] Fix | Delete
col: col
[1639] Fix | Delete
});
[1640] Fix | Delete
[1641] Fix | Delete
this._readDeclarations(true);
[1642] Fix | Delete
[1643] Fix | Delete
this.fire({
[1644] Fix | Delete
type: "endviewport",
[1645] Fix | Delete
line: line,
[1646] Fix | Delete
col: col
[1647] Fix | Delete
});
[1648] Fix | Delete
[1649] Fix | Delete
},
[1650] Fix | Delete
[1651] Fix | Delete
_document: function() {
[1652] Fix | Delete
/*
[1653] Fix | Delete
* document
[1654] Fix | Delete
* : DOCUMENT_SYM S*
[1655] Fix | Delete
* _document_function [ ',' S* _document_function ]* S*
[1656] Fix | Delete
* '{' S* ruleset* '}'
[1657] Fix | Delete
* ;
[1658] Fix | Delete
*/
[1659] Fix | Delete
[1660] Fix | Delete
var tokenStream = this._tokenStream,
[1661] Fix | Delete
token,
[1662] Fix | Delete
functions = [],
[1663] Fix | Delete
prefix = "";
[1664] Fix | Delete
[1665] Fix | Delete
tokenStream.mustMatch(Tokens.DOCUMENT_SYM);
[1666] Fix | Delete
token = tokenStream.token();
[1667] Fix | Delete
if (/^@\-([^\-]+)\-/.test(token.value)) {
[1668] Fix | Delete
prefix = RegExp.$1;
[1669] Fix | Delete
}
[1670] Fix | Delete
[1671] Fix | Delete
this._readWhitespace();
[1672] Fix | Delete
functions.push(this._document_function());
[1673] Fix | Delete
[1674] Fix | Delete
while (tokenStream.match(Tokens.COMMA)) {
[1675] Fix | Delete
this._readWhitespace();
[1676] Fix | Delete
functions.push(this._document_function());
[1677] Fix | Delete
}
[1678] Fix | Delete
[1679] Fix | Delete
tokenStream.mustMatch(Tokens.LBRACE);
[1680] Fix | Delete
this._readWhitespace();
[1681] Fix | Delete
[1682] Fix | Delete
this.fire({
[1683] Fix | Delete
type: "startdocument",
[1684] Fix | Delete
functions: functions,
[1685] Fix | Delete
prefix: prefix,
[1686] Fix | Delete
line: token.startLine,
[1687] Fix | Delete
col: token.startCol
[1688] Fix | Delete
});
[1689] Fix | Delete
[1690] Fix | Delete
var ok = true;
[1691] Fix | Delete
while (ok) {
[1692] Fix | Delete
switch (tokenStream.peek()) {
[1693] Fix | Delete
case Tokens.PAGE_SYM:
[1694] Fix | Delete
this._page();
[1695] Fix | Delete
break;
[1696] Fix | Delete
case Tokens.FONT_FACE_SYM:
[1697] Fix | Delete
this._font_face();
[1698] Fix | Delete
break;
[1699] Fix | Delete
case Tokens.VIEWPORT_SYM:
[1700] Fix | Delete
this._viewport();
[1701] Fix | Delete
break;
[1702] Fix | Delete
case Tokens.MEDIA_SYM:
[1703] Fix | Delete
this._media();
[1704] Fix | Delete
break;
[1705] Fix | Delete
case Tokens.KEYFRAMES_SYM:
[1706] Fix | Delete
this._keyframes();
[1707] Fix | Delete
break;
[1708] Fix | Delete
case Tokens.DOCUMENT_SYM:
[1709] Fix | Delete
this._document();
[1710] Fix | Delete
break;
[1711] Fix | Delete
default:
[1712] Fix | Delete
ok = Boolean(this._ruleset());
[1713] Fix | Delete
}
[1714] Fix | Delete
}
[1715] Fix | Delete
[1716] Fix | Delete
tokenStream.mustMatch(Tokens.RBRACE);
[1717] Fix | Delete
token = tokenStream.token();
[1718] Fix | Delete
this._readWhitespace();
[1719] Fix | Delete
[1720] Fix | Delete
this.fire({
[1721] Fix | Delete
type: "enddocument",
[1722] Fix | Delete
functions: functions,
[1723] Fix | Delete
prefix: prefix,
[1724] Fix | Delete
line: token.startLine,
[1725] Fix | Delete
col: token.startCol
[1726] Fix | Delete
});
[1727] Fix | Delete
},
[1728] Fix | Delete
[1729] Fix | Delete
_document_function: function() {
[1730] Fix | Delete
/*
[1731] Fix | Delete
* document_function
[1732] Fix | Delete
* : function | URI S*
[1733] Fix | Delete
* ;
[1734] Fix | Delete
*/
[1735] Fix | Delete
[1736] Fix | Delete
var tokenStream = this._tokenStream,
[1737] Fix | Delete
value;
[1738] Fix | Delete
[1739] Fix | Delete
if (tokenStream.match(Tokens.URI)) {
[1740] Fix | Delete
value = tokenStream.token().value;
[1741] Fix | Delete
this._readWhitespace();
[1742] Fix | Delete
} else {
[1743] Fix | Delete
value = this._function();
[1744] Fix | Delete
}
[1745] Fix | Delete
[1746] Fix | Delete
return value;
[1747] Fix | Delete
},
[1748] Fix | Delete
[1749] Fix | Delete
_operator: function(inFunction) {
[1750] Fix | Delete
[1751] Fix | Delete
/*
[1752] Fix | Delete
* operator (outside function)
[1753] Fix | Delete
* : '/' S* | ',' S* | /( empty )/
[1754] Fix | Delete
* operator (inside function)
[1755] Fix | Delete
* : '/' S* | '+' S* | '*' S* | '-' S* /( empty )/
[1756] Fix | Delete
* ;
[1757] Fix | Delete
*/
[1758] Fix | Delete
[1759] Fix | Delete
var tokenStream = this._tokenStream,
[1760] Fix | Delete
token = null;
[1761] Fix | Delete
[1762] Fix | Delete
if (tokenStream.match([Tokens.SLASH, Tokens.COMMA]) ||
[1763] Fix | Delete
(inFunction && tokenStream.match([Tokens.PLUS, Tokens.STAR, Tokens.MINUS]))) {
[1764] Fix | Delete
token = tokenStream.token();
[1765] Fix | Delete
this._readWhitespace();
[1766] Fix | Delete
}
[1767] Fix | Delete
return token ? PropertyValuePart.fromToken(token) : null;
[1768] Fix | Delete
[1769] Fix | Delete
},
[1770] Fix | Delete
[1771] Fix | Delete
_combinator: function() {
[1772] Fix | Delete
[1773] Fix | Delete
/*
[1774] Fix | Delete
* combinator
[1775] Fix | Delete
* : PLUS S* | GREATER S* | TILDE S* | S+
[1776] Fix | Delete
* ;
[1777] Fix | Delete
*/
[1778] Fix | Delete
[1779] Fix | Delete
var tokenStream = this._tokenStream,
[1780] Fix | Delete
value = null,
[1781] Fix | Delete
token;
[1782] Fix | Delete
[1783] Fix | Delete
if (tokenStream.match([Tokens.PLUS, Tokens.GREATER, Tokens.TILDE])) {
[1784] Fix | Delete
token = tokenStream.token();
[1785] Fix | Delete
value = new Combinator(token.value, token.startLine, token.startCol);
[1786] Fix | Delete
this._readWhitespace();
[1787] Fix | Delete
}
[1788] Fix | Delete
[1789] Fix | Delete
return value;
[1790] Fix | Delete
},
[1791] Fix | Delete
[1792] Fix | Delete
_unary_operator: function() {
[1793] Fix | Delete
[1794] Fix | Delete
/*
[1795] Fix | Delete
* unary_operator
[1796] Fix | Delete
* : '-' | '+'
[1797] Fix | Delete
* ;
[1798] Fix | Delete
*/
[1799] Fix | Delete
[1800] Fix | Delete
var tokenStream = this._tokenStream;
[1801] Fix | Delete
[1802] Fix | Delete
if (tokenStream.match([Tokens.MINUS, Tokens.PLUS])) {
[1803] Fix | Delete
return tokenStream.token().value;
[1804] Fix | Delete
} else {
[1805] Fix | Delete
return null;
[1806] Fix | Delete
}
[1807] Fix | Delete
},
[1808] Fix | Delete
[1809] Fix | Delete
_property: function() {
[1810] Fix | Delete
[1811] Fix | Delete
/*
[1812] Fix | Delete
* property
[1813] Fix | Delete
* : IDENT S*
[1814] Fix | Delete
* ;
[1815] Fix | Delete
*/
[1816] Fix | Delete
[1817] Fix | Delete
var tokenStream = this._tokenStream,
[1818] Fix | Delete
value = null,
[1819] Fix | Delete
hack = null,
[1820] Fix | Delete
tokenValue,
[1821] Fix | Delete
token,
[1822] Fix | Delete
line,
[1823] Fix | Delete
col;
[1824] Fix | Delete
[1825] Fix | Delete
//check for star hack - throws error if not allowed
[1826] Fix | Delete
if (tokenStream.peek() === Tokens.STAR && this.options.starHack) {
[1827] Fix | Delete
tokenStream.get();
[1828] Fix | Delete
token = tokenStream.token();
[1829] Fix | Delete
hack = token.value;
[1830] Fix | Delete
line = token.startLine;
[1831] Fix | Delete
col = token.startCol;
[1832] Fix | Delete
}
[1833] Fix | Delete
[1834] Fix | Delete
if (tokenStream.match(Tokens.IDENT)) {
[1835] Fix | Delete
token = tokenStream.token();
[1836] Fix | Delete
tokenValue = token.value;
[1837] Fix | Delete
[1838] Fix | Delete
//check for underscore hack - no error if not allowed because it's valid CSS syntax
[1839] Fix | Delete
if (tokenValue.charAt(0) === "_" && this.options.underscoreHack) {
[1840] Fix | Delete
hack = "_";
[1841] Fix | Delete
tokenValue = tokenValue.substring(1);
[1842] Fix | Delete
}
[1843] Fix | Delete
[1844] Fix | Delete
value = new PropertyName(tokenValue, hack, (line||token.startLine), (col||token.startCol));
[1845] Fix | Delete
this._readWhitespace();
[1846] Fix | Delete
}
[1847] Fix | Delete
[1848] Fix | Delete
return value;
[1849] Fix | Delete
},
[1850] Fix | Delete
[1851] Fix | Delete
//Augmented with CSS3 Selectors
[1852] Fix | Delete
_ruleset: function() {
[1853] Fix | Delete
/*
[1854] Fix | Delete
* ruleset
[1855] Fix | Delete
* : selectors_group
[1856] Fix | Delete
* '{' S* declaration? [ ';' S* declaration? ]* '}' S*
[1857] Fix | Delete
* ;
[1858] Fix | Delete
*/
[1859] Fix | Delete
[1860] Fix | Delete
var tokenStream = this._tokenStream,
[1861] Fix | Delete
tt,
[1862] Fix | Delete
selectors;
[1863] Fix | Delete
[1864] Fix | Delete
[1865] Fix | Delete
/*
[1866] Fix | Delete
* Error Recovery: If even a single selector fails to parse,
[1867] Fix | Delete
* then the entire ruleset should be thrown away.
[1868] Fix | Delete
*/
[1869] Fix | Delete
try {
[1870] Fix | Delete
selectors = this._selectors_group();
[1871] Fix | Delete
} catch (ex) {
[1872] Fix | Delete
if (ex instanceof SyntaxError && !this.options.strict) {
[1873] Fix | Delete
[1874] Fix | Delete
//fire error event
[1875] Fix | Delete
this.fire({
[1876] Fix | Delete
type: "error",
[1877] Fix | Delete
error: ex,
[1878] Fix | Delete
message: ex.message,
[1879] Fix | Delete
line: ex.line,
[1880] Fix | Delete
col: ex.col
[1881] Fix | Delete
});
[1882] Fix | Delete
[1883] Fix | Delete
//skip over everything until closing brace
[1884] Fix | Delete
tt = tokenStream.advance([Tokens.RBRACE]);
[1885] Fix | Delete
if (tt === Tokens.RBRACE) {
[1886] Fix | Delete
//if there's a right brace, the rule is finished so don't do anything
[1887] Fix | Delete
} else {
[1888] Fix | Delete
//otherwise, rethrow the error because it wasn't handled properly
[1889] Fix | Delete
throw ex;
[1890] Fix | Delete
}
[1891] Fix | Delete
[1892] Fix | Delete
} else {
[1893] Fix | Delete
//not a syntax error, rethrow it
[1894] Fix | Delete
throw ex;
[1895] Fix | Delete
}
[1896] Fix | Delete
[1897] Fix | Delete
//trigger parser to continue
[1898] Fix | Delete
return true;
[1899] Fix | Delete
}
[1900] Fix | Delete
[1901] Fix | Delete
//if it got here, all selectors parsed
[1902] Fix | Delete
if (selectors) {
[1903] Fix | Delete
[1904] Fix | Delete
this.fire({
[1905] Fix | Delete
type: "startrule",
[1906] Fix | Delete
selectors: selectors,
[1907] Fix | Delete
line: selectors[0].line,
[1908] Fix | Delete
col: selectors[0].col
[1909] Fix | Delete
});
[1910] Fix | Delete
[1911] Fix | Delete
this._readDeclarations(true);
[1912] Fix | Delete
[1913] Fix | Delete
this.fire({
[1914] Fix | Delete
type: "endrule",
[1915] Fix | Delete
selectors: selectors,
[1916] Fix | Delete
line: selectors[0].line,
[1917] Fix | Delete
col: selectors[0].col
[1918] Fix | Delete
});
[1919] Fix | Delete
[1920] Fix | Delete
}
[1921] Fix | Delete
[1922] Fix | Delete
return selectors;
[1923] Fix | Delete
[1924] Fix | Delete
},
[1925] Fix | Delete
[1926] Fix | Delete
//CSS3 Selectors
[1927] Fix | Delete
_selectors_group: function() {
[1928] Fix | Delete
[1929] Fix | Delete
/*
[1930] Fix | Delete
* selectors_group
[1931] Fix | Delete
* : selector [ COMMA S* selector ]*
[1932] Fix | Delete
* ;
[1933] Fix | Delete
*/
[1934] Fix | Delete
var tokenStream = this._tokenStream,
[1935] Fix | Delete
selectors = [],
[1936] Fix | Delete
selector;
[1937] Fix | Delete
[1938] Fix | Delete
selector = this._selector();
[1939] Fix | Delete
if (selector !== null) {
[1940] Fix | Delete
[1941] Fix | Delete
selectors.push(selector);
[1942] Fix | Delete
while (tokenStream.match(Tokens.COMMA)) {
[1943] Fix | Delete
this._readWhitespace();
[1944] Fix | Delete
selector = this._selector();
[1945] Fix | Delete
if (selector !== null) {
[1946] Fix | Delete
selectors.push(selector);
[1947] Fix | Delete
} else {
[1948] Fix | Delete
this._unexpectedToken(tokenStream.LT(1));
[1949] Fix | Delete
}
[1950] Fix | Delete
}
[1951] Fix | Delete
}
[1952] Fix | Delete
[1953] Fix | Delete
return selectors.length ? selectors : null;
[1954] Fix | Delete
},
[1955] Fix | Delete
[1956] Fix | Delete
//CSS3 Selectors
[1957] Fix | Delete
_selector: function() {
[1958] Fix | Delete
/*
[1959] Fix | Delete
* selector
[1960] Fix | Delete
* : simple_selector_sequence [ combinator simple_selector_sequence ]*
[1961] Fix | Delete
* ;
[1962] Fix | Delete
*/
[1963] Fix | Delete
[1964] Fix | Delete
var tokenStream = this._tokenStream,
[1965] Fix | Delete
selector = [],
[1966] Fix | Delete
nextSelector = null,
[1967] Fix | Delete
combinator = null,
[1968] Fix | Delete
ws = null;
[1969] Fix | Delete
[1970] Fix | Delete
//if there's no simple selector, then there's no selector
[1971] Fix | Delete
nextSelector = this._simple_selector_sequence();
[1972] Fix | Delete
if (nextSelector === null) {
[1973] Fix | Delete
return null;
[1974] Fix | Delete
}
[1975] Fix | Delete
[1976] Fix | Delete
selector.push(nextSelector);
[1977] Fix | Delete
[1978] Fix | Delete
do {
[1979] Fix | Delete
[1980] Fix | Delete
//look for a combinator
[1981] Fix | Delete
combinator = this._combinator();
[1982] Fix | Delete
[1983] Fix | Delete
if (combinator !== null) {
[1984] Fix | Delete
selector.push(combinator);
[1985] Fix | Delete
nextSelector = this._simple_selector_sequence();
[1986] Fix | Delete
[1987] Fix | Delete
//there must be a next selector
[1988] Fix | Delete
if (nextSelector === null) {
[1989] Fix | Delete
this._unexpectedToken(tokenStream.LT(1));
[1990] Fix | Delete
} else {
[1991] Fix | Delete
[1992] Fix | Delete
//nextSelector is an instance of SelectorPart
[1993] Fix | Delete
selector.push(nextSelector);
[1994] Fix | Delete
}
[1995] Fix | Delete
} else {
[1996] Fix | Delete
[1997] Fix | Delete
//if there's not whitespace, we're done
[1998] Fix | Delete
if (this._readWhitespace()) {
[1999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function