mirror of
https://github.com/renbaoshuo/S2OJ.git
synced 2024-11-25 10:58:41 +00:00
96d4a3ecf7
Due to historical reasons, the code is in subfolder "1". With SVN removal, we place the code back and remove the annoying "1" folder.
86 lines
2.9 KiB
HTML
86 lines
2.9 KiB
HTML
<!doctype html>
|
|
|
|
<title>CodeMirror: Automatically derive odd wrapping behavior for your browser</title>
|
|
<meta charset="utf-8"/>
|
|
<link rel=stylesheet href="../doc/docs.css">
|
|
|
|
<div id=nav>
|
|
<a href="http://codemirror.net"><img id=logo src="../doc/logo.png"></a>
|
|
|
|
<ul>
|
|
<li><a href="../index.html">Home</a>
|
|
<li><a href="../doc/manual.html">Manual</a>
|
|
<li><a href="https://github.com/marijnh/codemirror">Code</a>
|
|
</ul>
|
|
<ul>
|
|
<li><a class=active href="#">Automatically derive odd wrapping behavior for your browser</a>
|
|
</ul>
|
|
</div>
|
|
|
|
<article>
|
|
<h2>Automatically derive odd wrapping behavior for your browser</h2>
|
|
|
|
|
|
<p>This is a hack to automatically derive
|
|
a <code>spanAffectsWrapping</code> regexp for a browser. See the
|
|
comments above that variable
|
|
in <a href="../lib/codemirror.js"><code>lib/codemirror.js</code></a>
|
|
for some more details.</p>
|
|
|
|
<div style="white-space: pre-wrap; width: 50px;" id="area"></div>
|
|
<pre id="output"></pre>
|
|
|
|
<script id="script">
|
|
var a = document.getElementById("area"), bad = Object.create(null);
|
|
var chars = "a~`!@#$%^&*()-_=+}{[]\\|'\"/?.>,<:;", l = chars.length;
|
|
for (var x = 0; x < l; ++x) for (var y = 0; y < l; ++y) {
|
|
var s1 = "foooo" + chars.charAt(x), s2 = chars.charAt(y) + "br";
|
|
a.appendChild(document.createTextNode(s1 + s2));
|
|
var h1 = a.offsetHeight;
|
|
a.innerHTML = "";
|
|
a.appendChild(document.createElement("span")).appendChild(document.createTextNode(s1));
|
|
a.appendChild(document.createElement("span")).appendChild(document.createTextNode(s2));
|
|
if (a.offsetHeight != h1)
|
|
bad[chars.charAt(x)] = (bad[chars.charAt(x)] || "") + chars.charAt(y);
|
|
a.innerHTML = "";
|
|
}
|
|
|
|
var re = "";
|
|
function toREElt(str) {
|
|
if (str.length > 1) {
|
|
var invert = false;
|
|
if (str.length > chars.length * .6) {
|
|
invert = true;
|
|
var newStr = "";
|
|
for (var i = 0; i < l; ++i) if (str.indexOf(chars.charAt(i)) == -1) newStr += chars.charAt(i);
|
|
str = newStr;
|
|
}
|
|
str = str.replace(/[\-\.\]\"\'\\\/\^a]/g, function(orig) { return orig == "a" ? "\\w" : "\\" + orig; });
|
|
return "[" + (invert ? "^" : "") + str + "]";
|
|
} else if (str == "a") {
|
|
return "\\w";
|
|
} else if (/[?$*()+{}[\]\.|/\'\"]/.test(str)) {
|
|
return "\\" + str;
|
|
} else {
|
|
return str;
|
|
}
|
|
}
|
|
|
|
var newRE = "";
|
|
for (;;) {
|
|
var left = null;
|
|
for (var left in bad) break;
|
|
if (left == null) break;
|
|
var right = bad[left];
|
|
delete bad[left];
|
|
for (var other in bad) if (bad[other] == right) {
|
|
left += other;
|
|
delete bad[other];
|
|
}
|
|
newRE += (newRE ? "|" : "") + toREElt(left) + toREElt(right);
|
|
}
|
|
|
|
document.getElementById("output").appendChild(document.createTextNode("Your regexp is: " + (newRE || "^$")));
|
|
</script>
|
|
</article>
|