Upload Kmake

This commit is contained in:
Gorochu
2026-05-26 23:36:42 -07:00
parent ba051b2f74
commit 555ec72358
41615 changed files with 13344630 additions and 1 deletions

View File

@ -0,0 +1,36 @@
<!DOCTYPE html>
<html lang="en-GB">
<head>
<meta charset="utf-8"/>
<title>csiso2022jp decoding</title>
<meta name="timeout" content="long">
<meta name="variant" content="?1-1000">
<meta name="variant" content="?1001-2000">
<meta name="variant" content="?2001-3000">
<meta name="variant" content="?3001-4000">
<meta name="variant" content="?4001-5000">
<meta name="variant" content="?5001-6000">
<meta name="variant" content="?6001-7000">
<meta name="variant" content="?7001-last">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/subset-tests.js"></script>
<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org">
<link rel="help" href="https://encoding.spec.whatwg.org/#iso-2022-jp">
<meta name="assert" content="The browser produces the same decoding behavior for a document labeled 'csiso2022jp' as for a document labeled 'iso-2022-jp'.">
<style>
iframe { display:none }
</style>
<script src="jis0208_index.js"></script>
<script src="iso2022jp-decoder.js"></script>
<script src="../../resources/decode-common.js"></script>
</head>
<body onload="showNodes(iso2022jpDecoder);">
<iframe src="iso2022jp_chars-csiso2022jp.html" name="scriptWindow" id="scrwin"></iframe>
<div id="log"></div>
</body>
</html>

View File

@ -0,0 +1,107 @@
<!DOCTYPE html>
<html lang="en-GB">
<head>
<meta charset="utf-8"/>
<title>ISO 2022-JP decoding errors</title>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org">
<link rel="help" href="https://encoding.spec.whatwg.org/#euc-jp">
<meta name="assert" content="When decoding iso-2022-jp text, the browser uses replacement characters as described by the algorithm in the Encoding spec.">
<style>
iframe { display:none }
form { display:none }
</style>
</head>
<body onload="showNodes();">
<iframe src="iso2022jp_errors.html" name="scriptWindow" id="scrwin"></iframe>
<div id="log"></div>
<script>
var tests = [];
function iframeRef(frameRef) {
return frameRef.contentWindow
? frameRef.contentWindow.document
: frameRef.contentDocument;
}
function showNodes() {
var iframe = iframeRef(document.getElementById("scrwin"));
var nodes = iframe.querySelectorAll("span");
var t = -1;
t++;
tests[t] = async_test("ascii: 0E 24 42 79 56 1B 28 42");
t++;
tests[t] = async_test("roman: 1B 28 4A 0F 1B 28 42");
t++;
tests[t] = async_test("katakana: 1B 28 49 65 1B 28 42");
t++;
tests[t] = async_test(
"lead byte and trail byte 1B: 1B 24 42 7F 56 1B 28 42"
);
t++;
tests[t] = async_test("trail byte null index code point: 1B 24 42 24 74");
//t++; tests[t] = async_test("trail byte end of stream: 1B 24 42 79") not sure how to test this, since it corrupts the html following
t++;
tests[t] = async_test("trail byte out of range: 1B 24 42 79 7F 1B 28 42");
t++;
tests[t] = async_test("escape start: 1B 65 79 56 1B 28 42");
t++;
tests[t] = async_test("escape: 1B 24 65 79 56 1B 28 42");
t = -1;
t++;
tests[t].step(function() {
assert_equals(nodes[t].textContent, "<22>$ByV");
});
tests[t].done();
t++;
tests[t].step(function() {
assert_equals(nodes[t].textContent, "<22>");
});
tests[t].done();
t++;
tests[t].step(function() {
assert_equals(nodes[t].textContent, "<22>");
});
tests[t].done();
t++;
tests[t].step(function() {
assert_equals(nodes[t].textContent, "<22><>");
});
tests[t].done();
t++;
tests[t].step(function() {
assert_equals(nodes[t].textContent, "<22>");
});
tests[t].done();
//t++; tests[t].step(function() {assert_equals(nodes[t].textContent, '<27>') } )
//tests[t].done()
t++;
tests[t].step(function() {
assert_equals(nodes[t].textContent, "<22>");
});
tests[t].done();
t++;
tests[t].step(function() {
assert_equals(nodes[t].textContent, "<22>eyV");
});
tests[t].done();
t++;
tests[t].step(function() {
assert_equals(nodes[t].textContent, "<22>$eyV");
});
tests[t].done();
}
</script>
</body>
</html>

View File

@ -0,0 +1,36 @@
<!DOCTYPE html>
<html lang="en-GB">
<head>
<meta charset="utf-8"/>
<title>ISO 2022-JP decoding</title>
<meta name="timeout" content="long">
<meta name="variant" content="?1-1000">
<meta name="variant" content="?1001-2000">
<meta name="variant" content="?2001-3000">
<meta name="variant" content="?3001-4000">
<meta name="variant" content="?4001-5000">
<meta name="variant" content="?5001-6000">
<meta name="variant" content="?6001-7000">
<meta name="variant" content="?7001-last">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/subset-tests.js"></script>
<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org">
<link rel="help" href="https://encoding.spec.whatwg.org/#iso-2022-jp">
<meta name="assert" content="The browser decodes all characters as expected from a file generated by encoding all pointers in the iso-2022-jp encoding per the encoder steps in the specification.">
<style>
iframe { display:none }
</style>
<script src="jis0208_index.js"></script>
<script src="iso2022jp-decoder.js"></script>
<script src="../../resources/decode-common.js"></script>
</head>
<body onload="showNodes(iso2022jpDecoder);">
<iframe src="iso2022jp_chars.html" name="scriptWindow" id="scrwin"></iframe>
<div id="log"></div>
</body>
</html>

View File

@ -0,0 +1,206 @@
function dec2char(n) {
// converts a decimal number to a Unicode character
// n: the dec codepoint value to be converted
if (n <= 0xffff) {
out = String.fromCharCode(n);
} else if (n <= 0x10ffff) {
n -= 0x10000;
out =
String.fromCharCode(0xd800 | (n >> 10)) +
String.fromCharCode(0xdc00 | (n & 0x3ff));
} else out = "dec2char error: Code point out of range: " + n;
return out;
}
function getIndexPtr(cp, index) {
for (p = 0; p < index.length; p++) {
if (index[p] == cp) {
return p;
}
}
return null;
}
function iso2022jpDecoder(stream) {
stream = stream.replace(/%/g, " ");
stream = stream.replace(/[\s]+/g, " ").trim();
var bytes = stream.split(" ");
for (var i = 0; i < bytes.length; i++) bytes[i] = parseInt(bytes[i], 16);
var endofstream = 2000000;
//bytes.push(endofstream)
var out = "";
var decState = "ascii";
var outState = "ascii";
var isoLead = 0x00;
var outFlag = false;
var cp, ptr, lead;
var finished = false;
while (!finished) {
if (bytes.length == 0) byte = endofstream;
else var byte = bytes.shift();
//byte = bytes.shift()
switch (decState) {
case "ascii":
if (byte == 0x1b) {
decState = "escStart";
continue;
} else if (
byte >= 0x00 &&
byte <= 0x7f &&
byte !== 0x0e &&
byte !== 0x0f &&
byte !== 0x1b
) {
outFlag = false;
out += dec2char(byte);
continue;
} else if (byte == endofstream) {
finished = true;
continue;
} else {
outFlag = false;
out += "<22>";
continue;
}
break;
case "roman":
if (byte == 0x1b) {
decState = "escStart";
continue;
} else if (byte == 0x5c) {
outFlag = false;
out += dec2char(0xa5);
continue;
} else if (byte == 0x7e) {
outFlag = false;
out += dec2char(0x203e);
continue;
} else if (
byte >= 0x00 &&
byte <= 0x7f &&
byte !== 0x0e &&
byte !== 0x0f &&
byte !== 0x1b &&
byte !== 0x5c &&
byte !== 0x7e
) {
outFlag = false;
out += dec2char(byte);
continue;
} else if (byte == endofstream) {
finished = true;
continue;
} else {
outFlag = false;
out += "<22>";
continue;
}
break;
case "katakana":
if (byte == 0x1b) {
decState = "escStart";
continue;
} else if (byte >= 0x21 && byte <= 0x5f) {
outFlag = false;
out += dec2char(0xff61 + byte - 0x21);
continue;
} else if (byte == endofstream) {
finished = true;
continue;
} else {
outFlag = false;
out += "<22>";
continue;
}
break;
case "leadbyte":
if (byte == 0x1b) {
decState = "escStart";
continue;
} else if (byte >= 0x21 && byte <= 0x7e) {
outFlag = false;
isoLead = byte;
decState = "trailbyte";
continue;
} else if (byte == endofstream) {
finished = true;
continue;
} else {
outFlag = false;
out += "<22>";
continue;
}
break;
case "trailbyte":
if (byte == 0x1b) {
decState = "escStart";
out += "<22>";
continue;
} else if (byte >= 0x21 && byte <= 0x7e) {
decState = "leadbyte";
ptr = (isoLead - 0x21) * 94 + byte - 0x21;
cp = jis0208[ptr];
if (cp == null) {
out += "<22>";
continue;
}
out += dec2char(cp);
continue;
} else if (byte == endofstream) {
decState = "leadbyte";
bytes.unshift(byte);
out += "<22>";
continue;
} else {
decState = "leadbyte";
out += "<22>";
continue;
}
break;
case "escStart":
if (byte == 0x24 || byte == 0x28) {
isoLead = byte;
decState = "escape";
continue;
} else {
bytes.unshift(byte);
outFlag = false;
decState = outState;
out += "<22>";
continue;
}
break;
case "escape":
lead = isoLead;
isoLead = 0x00;
var state = null;
if (lead == 0x28 && byte == 0x42) state = "ascii";
if (lead == 0x28 && byte == 0x4a) state = "roman";
if (lead == 0x28 && byte == 0x49) state = "katakana";
if (lead == 0x24 && (byte == 0x40 || byte == 0x42))
state = "leadbyte";
if (state != null) {
decState = state;
outState = state;
var outputflag = false;
outputflag = outFlag;
outFlag = true;
if (outputflag == false) continue;
else {
out += "<22>";
continue;
}
}
// Prepend the sequence (lead, byte) to the stream
bytes.unshift(lead, byte);
outFlag = false;
decState = outState;
out += "<22>";
continue;
break;
}
}
return out;
}

View File

@ -0,0 +1,136 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="csiso2022jp"> <!-- test breaks if the server overrides this -->
<title>csiso2022jp encoding (form)</title>
<meta name="timeout" content="long">
<meta name="variant" content="?1-1000">
<meta name="variant" content="?1001-2000">
<meta name="variant" content="?2001-3000">
<meta name="variant" content="?3001-4000">
<meta name="variant" content="?4001-5000">
<meta name="variant" content="?5001-6000">
<meta name="variant" content="?6001-7000">
<meta name="variant" content="?7001-last">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/subset-tests.js"></script>
<script src="jis0208_index.js"></script>
<script src="iso2022jp-encoder.js"></script>
<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org">
<link rel="help" href="https://encoding.spec.whatwg.org/#names-and-labels">
<meta name="assert" content="The browser produces the same encoding behavior for a document labeled 'csiso2022jp' as for a document labeled 'iso-2022-jp'.">
<style>
iframe { display:none }
form { display:none }
</style>
</head>
<body>
<div id="log"></div>
<script src="../../resources/ranges.js"></script>
<script>
var errors = false;
var separator = "\u0019";
var ranges = rangesAll;
function expect(result, codepoint) {
return result;
}
function encoder(str) {
return getByteSequence(str.codePointAt(0));
}
function getByteSequence(cp) {
// uses the Encoding spec algorithm to derive a sequence of bytes for a character that can be encoded
// the result is either a percent-encoded value or null (if the character can't be encoded)
// cp: integer, a code point number
var cps = [cp];
var endofstream = 2000000;
cps.push(endofstream);
var out = "";
var encState = "ascii";
var finished = false;
while (!finished) {
cp = cps.shift();
if (cp == endofstream && encState != "ascii") {
cps.unshift(cp);
encState = "ascii";
out += "%1B%28%42";
continue;
}
if (cp == endofstream && encState == "ascii") {
finished = true;
break;
}
if (encState == "ascii" && cp >= 0x00 && cp <= 0x7f) {
out += "%" + cp.toString(16).toUpperCase();
continue;
}
if (
encState == "roman" &&
((cp >= 0x00 && cp <= 0x7f && cp !== 0x5c && cp !== 0x7e) ||
cp == 0xa5 ||
cp == 0x203e)
) {
if (cp >= 0x00 && cp <= 0x7f) {
// ASCII
out += "%" + cp.toString(16).toUpperCase();
continue;
}
if (cp == 0xa5) {
out += "%5C";
continue;
}
if (cp == 0x203e) {
out += "%7E";
continue;
}
}
if (encState != "ascii" && cp >= 0x00 && cp <= 0x7f) {
cps.unshift(cp);
encState = "ascii";
out += "%1B%28%42";
continue;
}
if ((cp == 0xa5 || cp == 0x203e) && encState != "roman") {
cps.unshift(cp);
encState = "roman";
out += "%1B%28%4A";
continue;
}
if (cp == 0x2212) cp = 0xff0d;
ptr = indexcodepoints[cp];
if (ptr == null) {
return null;
}
if (encState != "jis0208") {
cps.unshift(cp);
encState = "jis0208";
out += "%1B%24%42";
continue;
}
var lead = Math.floor(ptr / 94) + 0x21;
var trail = ptr % 94 + 0x21;
out +=
"%" +
lead.toString(16).toUpperCase() +
"%" +
trail.toString(16).toUpperCase();
}
return out.trim();
}
// set up a sparse array of all unicode codepoints listed in the index
// this will be used for lookup in getByteSequence
var indexcodepoints = []; // index is unicode cp, value is pointer
for (p = 0; p < jis0208.length; p++) {
if (jis0208[p] != null && indexcodepoints[jis0208[p]] == null) {
indexcodepoints[jis0208[p]] = p;
}
}
</script>
<script src="../../resources/encode-form-common.js"></script>
</body>
</html>

View File

@ -0,0 +1 @@
Content-Type: text/html; charset=csiso2022jp

View File

@ -0,0 +1,60 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="iso-2022-jp"> <!-- test breaks if the server overrides this -->
<title>ISO 2022 JP encoding errors (form, han)</title>
<meta name="timeout" content="long">
<meta name="variant" content="?1-1000">
<meta name="variant" content="?1001-2000">
<meta name="variant" content="?2001-3000">
<meta name="variant" content="?3001-4000">
<meta name="variant" content="?4001-5000">
<meta name="variant" content="?5001-6000">
<meta name="variant" content="?6001-7000">
<meta name="variant" content="?7001-8000">
<meta name="variant" content="?8001-9000">
<meta name="variant" content="?9001-10000">
<meta name="variant" content="?10001-11000">
<meta name="variant" content="?11001-12000">
<meta name="variant" content="?12001-13000">
<meta name="variant" content="?13001-14000">
<meta name="variant" content="?14001-15000">
<meta name="variant" content="?15001-16000">
<meta name="variant" content="?16001-17000">
<meta name="variant" content="?17001-18000">
<meta name="variant" content="?18001-19000">
<meta name="variant" content="?19001-20000">
<meta name="variant" content="?20001-21000">
<meta name="variant" content="?21001-last">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/subset-tests.js"></script>
<script src="jis0208_index.js"></script>
<script src="iso2022jp-encoder.js"></script>
<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org">
<link rel="help" href="https://encoding.spec.whatwg.org/#iso-2022-jp">
<meta name="assert" content="The browser produces percent-escaped character references for a URL produced by a form when encoding han characters that are not in the iso-2022-jp encoding.">
<style>
iframe { display:none }
form { display:none }
</style>
</head>
<body>
<div id="log"></div>
<script src="../../resources/ranges.js"></script>
<script>
var errors = true;
var encoder = iso2022jpEncoder;
var ranges = rangesHan;
var separator = "\u0019";
function expect(result, codepoint) {
return "%26%23" + codepoint + "%3B";
}
// Overwrite normalizeStr
function normalizeStr(str) {
return str;
}
</script>
<script src="../../resources/encode-form-common.js"></script>
</body>
</html>

View File

@ -0,0 +1 @@
Content-Type: text/html; charset=iso-2022-jp

View File

@ -0,0 +1,50 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="iso-2022-jp"> <!-- test breaks if the server overrides this -->
<title>ISO 2022 JP encoding errors (form, hangul)</title>
<meta name="timeout" content="long">
<meta name="variant" content="?1-1000">
<meta name="variant" content="?1001-2000">
<meta name="variant" content="?2001-3000">
<meta name="variant" content="?3001-4000">
<meta name="variant" content="?4001-5000">
<meta name="variant" content="?5001-6000">
<meta name="variant" content="?6001-7000">
<meta name="variant" content="?7001-8000">
<meta name="variant" content="?8001-9000">
<meta name="variant" content="?9001-10000">
<meta name="variant" content="?10001-11000">
<meta name="variant" content="?11001-last">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/subset-tests.js"></script>
<script src="jis0208_index.js"></script>
<script src="iso2022jp-encoder.js"></script>
<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org">
<link rel="help" href="https://encoding.spec.whatwg.org/#iso-2022-jp">
<meta name="assert" content="The browser produces percent-escaped character references for a URL produced by a form and encoding hangul characters that are not in the iso-2022-jp encoding.">
<style>
iframe { display:none }
form { display:none }
</style>
</head>
<body>
<div id="log"></div>
<script src="../../resources/ranges.js"></script>
<script>
var errors = true;
var encoder = iso2022jpEncoder;
var ranges = rangesHangul;
var separator = "\u0019";
function expect(result, codepoint) {
return "%26%23" + codepoint + "%3B";
}
// Overwrite normalizeStr
function normalizeStr(str) {
return str;
}
</script>
<script src="../../resources/encode-form-common.js"></script>
</body>
</html>

View File

@ -0,0 +1 @@
Content-Type: text/html; charset=iso-2022-jp

View File

@ -0,0 +1,46 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="iso-2022-jp"> <!-- test breaks if the server overrides this -->
<title>ISO 2022 JP encoding errors (form, misc)</title>
<meta name="timeout" content="long">
<meta name="variant" content="?1-1000">
<meta name="variant" content="?1001-2000">
<meta name="variant" content="?2001-3000">
<meta name="variant" content="?3001-last">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/subset-tests.js"></script>
<script src="jis0208_index.js"></script>
<script src="iso2022jp-encoder.js"></script>
<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org">
<link rel="help" href="https://encoding.spec.whatwg.org/#iso-2022-jp">
<meta name="assert" content="The browser produces percent-escaped character references for a URL produced by a form when encoding miscellaneous characters that are not in the iso-2022-jp encoding.">
<style>
iframe { display:none }
form { display:none }
</style>
</head>
<body>
<div id="log"></div>
<script src="../../resources/ranges.js"></script>
<script>
var errors = true;
var encoder = iso2022jpEncoder;
var ranges = rangesMisc;
var separator = "\u0019";
function expect(result, codepoint) {
return "%26%23" + codepoint + "%3B";
}
// Overwrite normalizeStr
function normalizeStr(str) {
return str;
}
// Overwrite normalizeStr
function normalizeStr(str) {
return str;
}
</script>
<script src="../../resources/encode-form-common.js"></script>
</body>
</html>

View File

@ -0,0 +1 @@
Content-Type: text/html; charset=iso-2022-jp

View File

@ -0,0 +1,61 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Encoding: ISO-2022-JP unencodable replacement in form submission</title>
<link rel="help" href="https://encoding.spec.whatwg.org/#iso-2022-jp-encoder">
<link rel="author" title="Benjamin C. Wiley Sittler"
href="mailto:bsittler@chromium.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
'use strict';
promise_test(async testCase => {
const target = Object.assign(document.createElement('iframe'), {
name: 'target',
});
if (document.readyState !== 'complete') {
await new Promise(resolve => addEventListener('load', resolve));
}
document.body.insertBefore(target, document.body.firstChild);
const form = Object.assign(document.createElement('form'), {
acceptCharset: 'iso-2022-jp',
// NOTE: This uses escape and unescape rather than
// encodeURI/encodeURIComponent and decodeURI/decodeURIComponent
// intentionally, because:
//
// - escape() is required because encodeURI{,Component} encodes
// using UTF-8, and would falsely imply that non-ASCII
// characters are expected to work here -- which they won't, as
// the data URI has ISO-2022-JP charset; likewise
//
// - unescape() is required because the encoded byte sequence
// we're trying to decode and verify represents ISO-2022-JP data
// rather than the UTF-8 expected by decodeURI{,Component}
//
// The resulting document inside the IFRAME will look like:
// <body onload="..."><plaintext>?utf16=...
action: 'data:text/html;charset=iso-2022-jp,' + escape(
'<body onload="(' +
(() => parent.postMessage({
utf16: document.body.innerText.split('=').pop(),
iso2022jp: unescape(location.href.split('=').pop()),
}, '*')) +
')()"><plaintext>'),
target: target.name,
});
form.appendChild(Object.assign(document.createElement('input'), {
name: 'utf16',
value: 'ABC~¤•★星🌟星★•¤~XYZ',
}));
document.body.insertBefore(form, document.body.firstChild);
const {iso2022jp, utf16} = await new Promise(resolve => {
addEventListener('message', ({data}) => resolve(data));
form.submit();
});
assert_equals(utf16, 'ABC~&#164;&#8226;★星&#127775;星★&#8226;&#164;~XYZ');
assert_equals(
iso2022jp,
'ABC~&#164;&#8226;\x1b$B!z@1\x1b(B&#127775;\x1b$B@1!z\x1b(B&#8226;&#164;~XYZ');
}, 'Form submission using ISO-2022-JP correctly replaces unencodables');
</script>

View File

@ -0,0 +1,42 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="iso-2022-jp"> <!-- test breaks if the server overrides this -->
<title>ISO 2022 JP encoding (form)</title>
<meta name="timeout" content="long">
<meta name="variant" content="?1-1000">
<meta name="variant" content="?1001-2000">
<meta name="variant" content="?2001-3000">
<meta name="variant" content="?3001-4000">
<meta name="variant" content="?4001-5000">
<meta name="variant" content="?5001-6000">
<meta name="variant" content="?6001-7000">
<meta name="variant" content="?7001-last">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/subset-tests.js"></script>
<script src="jis0208_index.js"></script>
<script src="iso2022jp-encoder.js"></script>
<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org">
<link rel="help" href="https://encoding.spec.whatwg.org/#iso-2022-jp">
<meta name="assert" content="The browser produces the expected byte sequences for all characters in the iso-2022-jp encoding when encoding bytes for a URL produced by a form, using the encoder steps in the specification.">
<style>
iframe { display:none }
form { display:none }
</style>
</head>
<body>
<div id="log"></div>
<script src="../../resources/ranges.js"></script>
<script>
var errors = false;
var encoder = iso2022jpEncoder;
var ranges = rangesAll;
var separator = "\u0019";
function expect(result, codepoint) {
return "%" + result.replace(/ /g, "%").replace(/%1B%28%42$/, "");
}
</script>
<script src="../../resources/encode-form-common.js"></script>
</body>
</html>

View File

@ -0,0 +1 @@
Content-Type: text/html; charset=iso-2022-jp

View File

@ -0,0 +1,55 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="iso-2022-jp"> <!-- test breaks if the server overrides this -->
<title>ISO 2022-JP encoding errors (href, han)</title>
<meta name="timeout" content="long">
<meta name="variant" content="?1-1000">
<meta name="variant" content="?1001-2000">
<meta name="variant" content="?2001-3000">
<meta name="variant" content="?3001-4000">
<meta name="variant" content="?4001-5000">
<meta name="variant" content="?5001-6000">
<meta name="variant" content="?6001-7000">
<meta name="variant" content="?7001-8000">
<meta name="variant" content="?8001-9000">
<meta name="variant" content="?9001-10000">
<meta name="variant" content="?10001-11000">
<meta name="variant" content="?11001-12000">
<meta name="variant" content="?12001-13000">
<meta name="variant" content="?13001-14000">
<meta name="variant" content="?14001-15000">
<meta name="variant" content="?15001-16000">
<meta name="variant" content="?16001-17000">
<meta name="variant" content="?17001-18000">
<meta name="variant" content="?18001-19000">
<meta name="variant" content="?19001-20000">
<meta name="variant" content="?20001-21000">
<meta name="variant" content="?21001-last">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/subset-tests.js"></script>
<script src="jis0208_index.js"></script>
<script src="iso2022jp-encoder.js"></script>
<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org">
<link rel="help" href="https://encoding.spec.whatwg.org/#iso-2022-jp">
<meta name="assert" content="The browser produces percent-escaped character references when writing characters to an href value and encoding han characters that are not in the iso-2022-jp encoding.">
</head>
<body>
<div id="log"></div>
<script src="../../resources/ranges.js"></script>
<script>
var errors = true;
var encoder = iso2022jpEncoder;
var ranges = rangesHan;
function expect(result, codepoint) {
return "%26%23" + codepoint + "%3B";
}
// Overwrite normalizeStr
function normalizeStr(str) {
return str;
}
</script>
<script src="../../resources/encode-href-common.js"></script>
</body>
</html>

View File

@ -0,0 +1 @@
Content-Type: text/html; charset=iso-2022-jp

View File

@ -0,0 +1,45 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="iso-2022-jp"> <!-- test breaks if the server overrides this -->
<title>ISO 2022-JP encoding errors (href, hangul)</title>
<meta name="timeout" content="long">
<meta name="variant" content="?1-1000">
<meta name="variant" content="?1001-2000">
<meta name="variant" content="?2001-3000">
<meta name="variant" content="?3001-4000">
<meta name="variant" content="?4001-5000">
<meta name="variant" content="?5001-6000">
<meta name="variant" content="?6001-7000">
<meta name="variant" content="?7001-8000">
<meta name="variant" content="?8001-9000">
<meta name="variant" content="?9001-10000">
<meta name="variant" content="?10001-11000">
<meta name="variant" content="?11001-last">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/subset-tests.js"></script>
<script src="jis0208_index.js"></script>
<script src="iso2022jp-encoder.js"></script>
<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org">
<link rel="help" href="https://encoding.spec.whatwg.org/#iso-2022-jp">
<meta name="assert" content="The browser produces percent-escaped character references when writing characters to an href value and encoding hangul characters that are not in the iso-2022-jp encoding.">
<script src="../../resources/ranges.js"></script>
<script>
var errors = true;
var encoder = iso2022jpEncoder;
var ranges = rangesHangul;
function expect(result, codepoint) {
return "%26%23" + codepoint + "%3B";
}
// Overwrite normalizeStr
function normalizeStr(str) {
return str;
}
</script>
<script src="../../resources/encode-href-common.js"></script>
</head>
<body>
<div id="log"></div>
</body>
</html>

View File

@ -0,0 +1 @@
Content-Type: text/html; charset=iso-2022-jp

View File

@ -0,0 +1,37 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="iso-2022-jp"> <!-- test breaks if the server overrides this -->
<title>ISO 2022-JP encoding errors (href, misc)</title>
<meta name="timeout" content="long">
<meta name="variant" content="?1-1000">
<meta name="variant" content="?1001-2000">
<meta name="variant" content="?2001-3000">
<meta name="variant" content="?3001-last">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/subset-tests.js"></script>
<script src="jis0208_index.js"></script>
<script src="iso2022jp-encoder.js"></script>
<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org">
<link rel="help" href="https://encoding.spec.whatwg.org/#iso-2022-jp">
<meta name="assert" content="The browser produces percent-escaped character references when writing characters to an href value and encoding miscellaneous characters that are not in the iso-2022-jp encoding.">
<script src="../../resources/ranges.js"></script>
<script>
var errors = true;
var encoder = iso2022jpEncoder;
var ranges = rangesMisc;
function expect(result, codepoint) {
return "%26%23" + codepoint + "%3B";
}
// Overwrite normalizeStr
function normalizeStr(str) {
return str;
}
</script>
<script src="../../resources/encode-href-common.js"></script>
</head>
<body>
<div id="log"></div>
</body>
</html>

View File

@ -0,0 +1 @@
Content-Type: text/html; charset=iso-2022-jp

View File

@ -0,0 +1,37 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="iso-2022-jp"> <!-- test breaks if the server overrides this -->
<title>ISO 2022-JP encoding (href)</title>
<meta name="timeout" content="long">
<meta name="variant" content="?1-1000">
<meta name="variant" content="?1001-2000">
<meta name="variant" content="?2001-3000">
<meta name="variant" content="?3001-4000">
<meta name="variant" content="?4001-5000">
<meta name="variant" content="?5001-6000">
<meta name="variant" content="?6001-7000">
<meta name="variant" content="?7001-last">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/subset-tests.js"></script>
<script src="jis0208_index.js"></script>
<script src="iso2022jp-encoder.js"></script>
<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org">
<link rel="help" href="https://encoding.spec.whatwg.org/#iso-2022-jp">
<meta name="assert" content="The browser produces the expected byte sequences for all characters in the iso-2022-jp encoding after 0x9F when writing characters to an href value, using the encoder steps in the specification.">
<script src="../../resources/ranges.js"></script>
<script>
var errors = false;
var encoder = iso2022jpEncoder;
var ranges = rangesAll;
function expect(result, codepoint) {
return "%" + result.replace(/ /g, "%").replace(/%1B%28%42$/, "");;
}
</script>
<script src="../../resources/encode-href-common.js"></script>
</head>
<body>
<div id="log"></div>
</body>
</html>

View File

@ -0,0 +1 @@
Content-Type: text/html; charset=iso-2022-jp

View File

@ -0,0 +1,246 @@
// set up a sparse array of all unicode codepoints listed in the index
// this will be used for lookup in iso2022jpEncoded
var jis0208CPs = []; // index is unicode cp, value is pointer
for (var p = 0; p < jis0208.length; p++) {
if (jis0208[p] != null && jis0208CPs[jis0208[p]] == null) {
jis0208CPs[jis0208[p]] = p;
}
}
// set up mappings for half/full width katakana
// index is a katakana index pointer, value is Unicode codepoint (dec)
// this is copy-pasted from the json version of the index belonging to the Encoding spec
var iso2022jpkatakana = [
12290,
12300,
12301,
12289,
12539,
12530,
12449,
12451,
12453,
12455,
12457,
12515,
12517,
12519,
12483,
12540,
12450,
12452,
12454,
12456,
12458,
12459,
12461,
12463,
12465,
12467,
12469,
12471,
12473,
12475,
12477,
12479,
12481,
12484,
12486,
12488,
12490,
12491,
12492,
12493,
12494,
12495,
12498,
12501,
12504,
12507,
12510,
12511,
12512,
12513,
12514,
12516,
12518,
12520,
12521,
12522,
12523,
12524,
12525,
12527,
12531,
12443,
12444
];
function chars2cps(chars) {
// this is needed because of javascript's handling of supplementary characters
// char: a string of unicode characters
// returns an array of decimal code point values
var haut = 0;
var out = [];
for (var i = 0; i < chars.length; i++) {
var b = chars.charCodeAt(i);
if (b < 0 || b > 0xffff) {
alert(
"Error in chars2cps: byte out of range " + b.toString(16) + "!"
);
}
if (haut != 0) {
if (0xdc00 <= b && b <= 0xdfff) {
out.push(0x10000 + ((haut - 0xd800) << 10) + (b - 0xdc00));
haut = 0;
continue;
} else {
alert(
"Error in chars2cps: surrogate out of range " +
haut.toString(16) +
"!"
);
haut = 0;
}
}
if (0xd800 <= b && b <= 0xdbff) {
haut = b;
} else {
out.push(b);
}
}
return out;
}
function iso2022jpEncoder(stream) {
var cps = chars2cps(stream);
var endofstream = 2000000;
var out = "";
var encState = "ascii";
var finished = false;
var cp, ptr;
while (!finished) {
if (cps.length == 0) cp = endofstream;
else cp = cps.shift();
if (cp == endofstream && encState != "ascii") {
cps.unshift(cp);
encState = "ascii";
out += " 1B 28 42";
continue;
}
if (cp == endofstream && encState == "ascii") {
finished = true;
continue;
}
if (
(encState === "ascii" || encState === "roman") &&
(cp === 0x0e || cp === 0x0f || cp === 0x1b)
) {
//out += ' &#'+cp+';'
// continue
return null;
}
if (encState == "ascii" && cp >= 0x00 && cp <= 0x7f) {
out += " " + cp.toString(16).toUpperCase();
continue;
}
if (
encState == "roman" &&
((cp >= 0x00 && cp <= 0x7f && cp !== 0x5c && cp !== 0x7e) ||
cp == 0xa5 ||
cp == 0x203e)
) {
if (cp >= 0x00 && cp <= 0x7f) {
// ASCII
out += " " + cp.toString(16).toUpperCase();
continue;
}
if (cp == 0xa5) {
out += " 5C";
continue;
}
if (cp == 0x203e) {
out += " 7E";
continue;
}
}
if (encState != "ascii" && cp >= 0x00 && cp <= 0x7f) {
cps.unshift(cp);
encState = "ascii";
out += " 1B 28 42";
continue;
}
if ((cp == 0xa5 || cp == 0x203e) && encState != "roman") {
cps.unshift(cp);
encState = "roman";
out += " 1B 28 4A";
continue;
}
if (cp == 0x2212) cp = 0xff0d;
if (cp >= 0xff61 && cp <= 0xff9f) {
cp = iso2022jpkatakana[cp - 0xff61];
}
ptr = jis0208CPs[cp];
if (ptr == null) {
//out += ' &#'+cp+';'
//continue
return null;
}
if (encState != "jis0208") {
cps.unshift(cp);
encState = "jis0208";
out += " 1B 24 42";
continue;
}
var lead = Math.floor(ptr / 94) + 0x21;
var trail = ptr % 94 + 0x21;
out +=
" " +
lead.toString(16).toUpperCase() +
" " +
trail.toString(16).toUpperCase();
}
return out.trim();
}
function convertToHex(str) {
// converts a string of ASCII characters to hex byte codes
var out = "";
var result;
for (var c = 0; c < str.length; c++) {
result =
str
.charCodeAt(c)
.toString(16)
.toUpperCase() + " ";
out += result;
}
return out;
}
function normalizeStr(str) {
var out = "";
for (var c = 0; c < str.length; c++) {
if (
str.charAt(c) == "%" &&
str.charAt(c + 1) != "%" &&
str.charAt(c + 2) != "%"
) {
out += String.fromCodePoint(
parseInt(str.charAt(c + 1) + str.charAt(c + 2), 16)
);
c += 2;
} else out += str.charAt(c);
}
var result = "";
for (var o = 0; o < out.length; o++) {
result +=
"%" +
out
.charCodeAt(o)
.toString(16)
.toUpperCase();
}
return result.replace(/%1B%28%42$/, "");
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
Content-Type: text/html; charset=csiso2022jp

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
Content-Type: text/html; charset=iso-2022-jp

View File

@ -0,0 +1,8 @@
<!doctype html>
<html>
<head>
<meta charset="iso-2022-jp">
<title>ISO-2022-jp characters</title>
</head>
<body><span>$ByV(B</span> <span>(J(B</span> <span>(Ie(B</span> <span>$BV(B</span> <span>$B$t(B</span> <span>$By(B</span> <span>eyV(B</span> <span>$eyV(B</span> </body>
</html>

View File

@ -0,0 +1 @@
Content-Type: text/html; charset=iso-2022-jp

File diff suppressed because one or more lines are too long