unicode-input-toolconverter 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/.babelrc.json +3 -0
  2. package/.editorconfig +16 -0
  3. package/.nojekyll +0 -0
  4. package/.nyc_output/out.json +173804 -0
  5. package/.nyc_output/processinfo/index.json +1 -0
  6. package/CHANGES.md +11 -0
  7. package/COPYING.LESSER.txt +180 -0
  8. package/COPYING.txt +687 -0
  9. package/README.md +65 -0
  10. package/_locales/en-US/messages.json +3126 -0
  11. package/_locales/hu-HU/messages.json +3126 -0
  12. package/_locales/pt-BR/messages.json +3126 -0
  13. package/_locales/sv-SE/messages.json +3126 -0
  14. package/babel.config.json +5 -0
  15. package/browser_action/characterSelection.js +91 -0
  16. package/browser_action/charrefConverters.js +389 -0
  17. package/browser_action/chartBuild.js +155 -0
  18. package/browser_action/encodingBehaviors.js +72 -0
  19. package/browser_action/encodings.js +97 -0
  20. package/browser_action/entities.js +12 -0
  21. package/browser_action/entityBehaviors.js +96 -0
  22. package/browser_action/index-es.html +15 -0
  23. package/browser_action/index-instrumented.html +16 -0
  24. package/browser_action/index-pages.html +16 -0
  25. package/browser_action/index.html +16 -0
  26. package/browser_action/index.iife.min.js +2 -0
  27. package/browser_action/index.iife.min.js.map +1 -0
  28. package/browser_action/index.instrumented.iife.min.js +2 -0
  29. package/browser_action/index.instrumented.iife.min.js.map +1 -0
  30. package/browser_action/index.js +95 -0
  31. package/browser_action/preferences/prefDefaults.js +52 -0
  32. package/browser_action/service-worker/sw-activateCallback.js +53 -0
  33. package/browser_action/service-worker/sw-locales.json +6 -0
  34. package/browser_action/service-worker/sw-resources.json +73 -0
  35. package/browser_action/service-worker/sw-unicode-data.json +3 -0
  36. package/browser_action/styles/unicode-dialog.css +391 -0
  37. package/browser_action/templateUtils/elements.js +12 -0
  38. package/browser_action/templateUtils/fill.js +3 -0
  39. package/browser_action/templateUtils/validation.js +6 -0
  40. package/browser_action/templates/chartBuild.js +185 -0
  41. package/browser_action/templates/index.js +1304 -0
  42. package/browser_action/templatesElementCustomization/widgets.js +56 -0
  43. package/browser_action/unicode/UnicodeConverter.js +793 -0
  44. package/browser_action/unicode/charrefunicodeDb.js +258 -0
  45. package/browser_action/unicode/getScriptInfoForCodePoint.js +646 -0
  46. package/browser_action/unicode/hangul.js +253 -0
  47. package/browser_action/unicode/lastScriptNames.json +5 -0
  48. package/browser_action/unicode/parseUnihanFromTextFileStrings.js +56 -0
  49. package/browser_action/unicode/unicodeFieldInfo.js +120 -0
  50. package/browser_action/unicode/unicodeScripts.js +4912 -0
  51. package/browser_action/unicode/unihan.js +129 -0
  52. package/browser_action/unicode/unihanDbPopulate.js +26 -0
  53. package/browser_action/unicodecharref.js +1480 -0
  54. package/browser_action/utils/DOMUtils.js +122 -0
  55. package/browser_action/utils/FetchUtils.js +19 -0
  56. package/browser_action/utils/TextUtils.js +28 -0
  57. package/browser_action/utils/TypedArrayUtils.js +21 -0
  58. package/browser_action/utils/semicolonSeparatedToArray.js +12 -0
  59. package/browser_action/utils/setupServiceWorker.js +193 -0
  60. package/cypress.config.js +21 -0
  61. package/download/entities/copyright-software-20021231.html +70 -0
  62. package/download/entities/html5-uppercase.ent +54 -0
  63. package/download/entities/htmlmathml-f.ent +2164 -0
  64. package/download/entities/isoamsa.ent +201 -0
  65. package/download/entities/isoamsb.ent +177 -0
  66. package/download/entities/isoamsc.ent +77 -0
  67. package/download/entities/isoamsn.ent +148 -0
  68. package/download/entities/isoamso.ent +107 -0
  69. package/download/entities/isoamsr.ent +238 -0
  70. package/download/entities/isobox.ent +95 -0
  71. package/download/entities/isocyr1.ent +122 -0
  72. package/download/entities/isocyr2.ent +81 -0
  73. package/download/entities/isodia.ent +69 -0
  74. package/download/entities/isogrk1.ent +104 -0
  75. package/download/entities/isogrk2.ent +75 -0
  76. package/download/entities/isogrk3.ent +98 -0
  77. package/download/entities/isogrk4.ent +98 -0
  78. package/download/entities/isolat1.ent +117 -0
  79. package/download/entities/isolat2.ent +176 -0
  80. package/download/entities/isomfrk.ent +107 -0
  81. package/download/entities/isomopf.ent +81 -0
  82. package/download/entities/isomscr.ent +107 -0
  83. package/download/entities/isonum.ent +131 -0
  84. package/download/entities/isopub.ent +140 -0
  85. package/download/entities/isotech.ent +216 -0
  86. package/download/entities/mmlalias.ent +598 -0
  87. package/download/entities/mmlextra.ent +154 -0
  88. package/download/entities/predefined.ent +52 -0
  89. package/download/entities/w3centities-f.ent +2276 -0
  90. package/download/entities/xhtml1-lat1.ent +143 -0
  91. package/download/entities/xhtml1-special.ent +78 -0
  92. package/download/entities/xhtml1-symbol.ent +171 -0
  93. package/eslint.config.js +66 -0
  94. package/icons/openWindow16.png +0 -0
  95. package/icons/openWindow24.png +0 -0
  96. package/lgtm.yml +5 -0
  97. package/lib/background.html +11 -0
  98. package/lib/background.js +13 -0
  99. package/lib/overlay.css +6 -0
  100. package/manifest.json +37 -0
  101. package/package.json +121 -0
  102. package/polyfills/browser-polyfill.min.js +8 -0
  103. package/polyfills/browser-polyfill.min.js.map +1 -0
  104. package/server.js +61 -0
  105. package/sw.js +259 -0
  106. package/tools/entities-import.js +62 -0
  107. package/tools/findEsResources.js +30 -0
  108. package/tools/list-locales.js +17 -0
  109. package/tools/parseUnicodeCharts.js +428 -0
  110. package/tools/ucd-import.js +24 -0
  111. package/tools/unicode-charts.html +596 -0
  112. package/tools/unihan-import.js +72 -0
  113. package/unicode_copyright.txt +46 -0
  114. package/vendor/camelcase/index.js +110 -0
  115. package/vendor/fflate/esm/browser.js +2665 -0
  116. package/vendor/intl-dom/dist/index.esm.js +2962 -0
  117. package/vendor/jamilih/dist/jml-es.js +2359 -0
  118. package/vendor/jquery/dist/jquery.js +10716 -0
  119. package/vendor/json-6/dist/index.mjs +1783 -0
  120. package/vendor/miller-columns/dist/index-es.min.js +1 -0
  121. package/vendor/miller-columns/miller-columns.css +75 -0
  122. package/vendor/simple-prefs/dist/index.esm.js +286 -0
  123. package/web-ext-config.cjs +13 -0
@@ -0,0 +1,122 @@
1
+ import {$} from '../../vendor/jamilih/dist/jml-es.js';
2
+
3
+ /**
4
+ * @param {Integer} i
5
+ * @returns {void}
6
+ */
7
+ function removeViewChildren (i) {
8
+ const view = $('#_detailedView' + i);
9
+ while (view.firstChild) {
10
+ view.firstChild.remove();
11
+ }
12
+ }
13
+ /**
14
+ * @param {string} sel
15
+ * @param {Element} item
16
+ * @returns {void}
17
+ */
18
+ function placeItem (sel, item) {
19
+ const firstchld = $(sel).firstChild;
20
+ if (firstchld !== null) {
21
+ firstchld.replaceWith(item);
22
+ } else {
23
+ $(sel).append(item);
24
+ }
25
+ }
26
+
27
+ const // xulns = 'https://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul',
28
+ htmlns = 'https://www.w3.org/1999/xhtml';
29
+
30
+ /**
31
+ * @param {string} el
32
+ * @returns {Element}
33
+ */
34
+ function createHTMLElement (el) {
35
+ // return document.createElementNS(htmlns, el);
36
+ return document.createElement(el);
37
+ }
38
+
39
+ /**
40
+ * @param {string} el
41
+ * @returns {Element}
42
+ */
43
+
44
+ /*
45
+ function createXULElement (el) {
46
+ return document.createElementNS(xulns, el);
47
+ }
48
+ */
49
+
50
+ /**
51
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for-await...of
52
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator
53
+ */
54
+ class AsyncStreamIterable {
55
+ /**
56
+ * @param {Stream} stream
57
+ */
58
+ constructor (stream) {
59
+ this._stream = stream;
60
+ }
61
+
62
+ /**
63
+ * @returns {void}
64
+ * @yields {Integer}
65
+ */
66
+ async *[Symbol.asyncIterator] () {
67
+ const reader = this._stream.getReader();
68
+ try {
69
+ while (true) {
70
+ // eslint-disable-next-line no-await-in-loop -- Generator
71
+ const {done, value} = await reader.read();
72
+ if (done) {
73
+ return;
74
+ }
75
+ yield value;
76
+ }
77
+ } finally {
78
+ reader.releaseLock();
79
+ }
80
+ }
81
+ }
82
+
83
+ /**
84
+ * @callback ProgressCallback
85
+ * @param {Float} percentComplete
86
+ * @returns {string}
87
+ */
88
+
89
+ /**
90
+ * @param {PlainObject} cfg
91
+ * @param {string} cfg.url
92
+ * @param {Element} cfg.progressElement
93
+ * @param {ProgressCallback} cfg.progress
94
+ * @returns {Promise<{
95
+ * receivedLength: Integer, totalBytes: Integer, chunks: Integer[]
96
+ * }>}
97
+ */
98
+ async function showProgress ({url, progressElement, progress}) {
99
+ const response = await fetch(url);
100
+ const totalBytes = response.headers.get('content-length');
101
+ progressElement.max = totalBytes;
102
+
103
+ const chunks = [];
104
+ let receivedLength = 0;
105
+ for await (const value of new AsyncStreamIterable(response.body)) {
106
+ chunks.push(value);
107
+ receivedLength += value.length;
108
+
109
+ const percentComplete = ((
110
+ receivedLength / totalBytes
111
+ ) * 100);
112
+
113
+ progressElement.value = percentComplete;
114
+ progressElement.textContent = progress(percentComplete);
115
+ }
116
+ return {receivedLength, totalBytes, chunks};
117
+ }
118
+
119
+ export {
120
+ removeViewChildren, placeItem, createHTMLElement, htmlns,
121
+ showProgress
122
+ };
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @param {string} path
3
+ * @returns {JSON}
4
+ */
5
+ const getJSON = async (path) => {
6
+ const response = await fetch(path);
7
+ return await response.json();
8
+ };
9
+
10
+ /**
11
+ * @param {string} path
12
+ * @returns {JSON}
13
+ */
14
+ const getText = async (path) => {
15
+ const response = await fetch(path);
16
+ return await response.text();
17
+ };
18
+
19
+ export {getJSON, getText};
@@ -0,0 +1,28 @@
1
+ // Todo: Move to own library
2
+
3
+ /**
4
+ * @param {object} [cfg]
5
+ * @param {HTMLTextAreaElement|HTMLInputElement} cfg.textReceptacle
6
+ * @param {string} cfg.value
7
+ * @param {boolean} [cfg.focusIn]
8
+ * @returns {void}
9
+ */
10
+ function insertIntoOrOverExisting ({
11
+ textReceptacle, value, focusIn = true
12
+ } = {}) {
13
+ const {length: len} = textReceptacle.value;
14
+ const start = textReceptacle.selectionStart;
15
+ const end = textReceptacle.selectionEnd;
16
+
17
+ if (focusIn) {
18
+ textReceptacle.focus();
19
+ }
20
+ const pre = textReceptacle.value.slice(0, Math.max(0, start));
21
+ const post = textReceptacle.value.slice(end, len);
22
+ textReceptacle.value = pre + value + post;
23
+
24
+ textReceptacle.selectionStart = pre.length + value.length;
25
+ textReceptacle.selectionEnd = pre.length + value.length;
26
+ }
27
+
28
+ export {insertIntoOrOverExisting};
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @param {PlainObject} cfg
3
+ * @param {Integer} cfg.receivedLength
4
+ * @param {Integer[]} cfg.chunks
5
+ * @returns {Uint8Array}
6
+ */
7
+ function joinChunks ({
8
+ chunks,
9
+ receivedLength
10
+ }) {
11
+ // Combine into single `Uint8Array`
12
+ const compressed = new Uint8Array(receivedLength);
13
+ let pos = 0;
14
+ for (const chunk of chunks) {
15
+ compressed.set(chunk, pos);
16
+ pos += chunk.length;
17
+ }
18
+ return compressed;
19
+ }
20
+
21
+ export {joinChunks};
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @param {string} text
3
+ * @returns {string[][]}
4
+ */
5
+ function semicolonSeparatedToArray (text) {
6
+ const lines = text.split('\n');
7
+ return lines.map((line) => {
8
+ return line.split(';');
9
+ });
10
+ }
11
+
12
+ export default semicolonSeparatedToArray;
@@ -0,0 +1,193 @@
1
+ /* eslint-disable no-console -- Debugging */
2
+ /**
3
+ * @param {string} [serviceWorkerPath]
4
+ * @returns {Promise<void>}
5
+ */
6
+ async function setupServiceWorker (
7
+ serviceWorkerPath = '../sw.js'
8
+ ) {
9
+ let registration = await navigator.serviceWorker.getRegistration(
10
+ serviceWorkerPath
11
+ );
12
+ if (!registration ||
13
+ // Not sure these are possible here:
14
+ registration.installing || registration.waiting || registration.active
15
+ ) {
16
+ const persistent = await navigator.storage.persist();
17
+ if (!persistent) {
18
+ console.log('Denied persistent storage');
19
+ }
20
+ try {
21
+ registration = await navigator.serviceWorker.register(
22
+ serviceWorkerPath,
23
+ {
24
+ type: 'module'
25
+ }
26
+ );
27
+ } catch (err) {
28
+ console.log('err', err);
29
+ alert(`
30
+ There was an error during registration (for offline ability).
31
+ Please refresh the page if you wish to reattempt.
32
+ `);
33
+ return;
34
+ }
35
+ }
36
+
37
+ // "The browser checks for updates automatically after navigations and
38
+ // functional events, but you can also trigger them manually"
39
+ // -- https://developers.google.com/web/fundamentals/primers/service-workers/lifecycle#manual_updates
40
+ const hourly = 60 * 60 * 1000;
41
+ setInterval(() => {
42
+ registration.update();
43
+ }, hourly);
44
+
45
+ registration.addEventListener('updatefound', (/* e */) => {
46
+ const newWorker = registration.installing;
47
+
48
+ // statechange won't catch this installing event as already installing
49
+
50
+ newWorker.addEventListener('statechange', async () => {
51
+ const {state} = newWorker;
52
+ switch (state) {
53
+ case 'installing':
54
+ console.log('Installing new worker');
55
+ break;
56
+ case 'installed':
57
+ console.log('Installation status', state);
58
+ /* alert(
59
+ `
60
+ A new version of this offlinable app has been downloaded.
61
+
62
+ If you have work to complete in this tab, you can dismiss
63
+ this dialog now and continue working with the old version.
64
+
65
+ However, when you are finished, you should close this tab
66
+ and any other old tabs for this site in order to be able to
67
+ begin using the new version.
68
+ `
69
+ ); */
70
+ break;
71
+ case 'redundant': // discarded. Either failed install, or it's been
72
+ // replaced by a newer version
73
+ // Shouldn't be replaced since we aren't skipping waiting/claiming,
74
+ console.log('Installation status', state);
75
+ // Todo: Try updating again if get redundant here
76
+ await alert(
77
+ `
78
+ There was an error during installation (to allow offline/speeded
79
+ cache use).
80
+
81
+ If you have work to complete in this tab, you can dismiss
82
+ this dialog now and continue working with the old version.
83
+
84
+ However, when you are finished, you may wish to close this tab
85
+ and any other old tabs for this site in order to try again
86
+ for offline installation.
87
+ `
88
+ );
89
+ break;
90
+ // These shouldn't occur as we are not skipping waiting (?)
91
+ case 'activating':
92
+ console.log('Activating new worker');
93
+ break;
94
+ case 'activated':
95
+ console.log('Activated new worker');
96
+ break;
97
+ default:
98
+ throw new Error(`Unknown worker update state: ${state}`);
99
+ }
100
+ });
101
+ });
102
+
103
+ navigator.serviceWorker.addEventListener('message', ({data}) => {
104
+ const {message, type, name, errorType} = data;
105
+ console.log('msg1', message, registration);
106
+ switch (type) {
107
+ case 'log':
108
+ console.log(message);
109
+ return;
110
+ case 'beginInstall':
111
+ console.log('Install: Begun...');
112
+ return;
113
+ case 'finishedInstall':
114
+ console.log('Install: Finished...');
115
+ return;
116
+ case 'beginActivate': // Just use `e.source`?
117
+ console.log('Activate: Caching finished');
118
+ console.log('Activate: Begin database resources storage...');
119
+ // r.active is also available for mere "activating"
120
+ // as we are now
121
+ return;
122
+ case 'finishedActivate':
123
+ console.log('Activate: Finished...');
124
+ // Still not controlled even after activation is
125
+ // ready, so refresh page
126
+
127
+ // Seems to be working (unlike `location.replace`),
128
+ // but if problems, could add `true` but as forces
129
+ // from server not cache, what will happen here? (also
130
+ // `controller` may be `null` with force-reload)
131
+ location.reload();
132
+ // location.replace(location); // Avoids adding to browser history)
133
+ return;
134
+ case 'error':
135
+ console.log(
136
+ message + `${
137
+ errorType === 'dbError' ? `Database error ${name}` : ''
138
+ }; trying again...`
139
+ );
140
+ break;
141
+ default:
142
+ console.error('Unexpected type', type);
143
+ break;
144
+ }
145
+ });
146
+
147
+ const worker = registration.installing || registration.waiting ||
148
+ registration.active;
149
+ switch (worker.state) {
150
+ case 'installing':
151
+ // If it fails, will instead be `redundant`; but will try again:
152
+ // 1. automatically (?) per https://developers.google.com/web/fundamentals/primers/service-workers/#the_service_worker_life_cycle
153
+ // 2. upon reattempting registration (?) per https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers
154
+ console.log('installing1');
155
+ break;
156
+ case 'installed':
157
+ // Waiting ensures only one version of our service worker active
158
+ // No dedicated "waiting" state so handle here
159
+ // Inform user that currently waiting for old tabs (and this one) to
160
+ // close so install can proceed
161
+ console.log('installed1');
162
+ break;
163
+ case 'activating':
164
+ // May be called more than once in case fails?
165
+ // May not be activated but only activating so need action in case no
166
+ // other tabs open to do so?
167
+ alert(`
168
+ Please wait for a short while as we work to update to a new version.
169
+ `);
170
+ break;
171
+ case 'activated': {
172
+ // We should be able to use the following to distinguish when
173
+ // active but force-reloaded (will be `null` unlike
174
+ // `r.active` apparently)
175
+ const {controller} = navigator.serviceWorker;
176
+ console.log('activated1', controller);
177
+ break;
178
+ } case 'redundant':
179
+ // Either:
180
+ // 1. A new service worker is replacing the current service worker (though
181
+ // presumably only if `skipWaiting`)
182
+ // 2. The current service worker is being discarded due to an install
183
+ // failure
184
+ // May have been `r.installing` (?)
185
+ // Todo: Could try registering again later (this will reload after an alert)
186
+ console.log('redundant1');
187
+ break;
188
+ default:
189
+ break;
190
+ }
191
+ }
192
+
193
+ export default setupServiceWorker;
@@ -0,0 +1,21 @@
1
+ import {defineConfig} from 'cypress';
2
+
3
+ import plugins from './cypress/plugins/index.js';
4
+
5
+ export default defineConfig({
6
+ env: {
7
+ codeCoverage: {
8
+ url: 'http://localhost:8000/__coverage__'
9
+ }
10
+ },
11
+ chromeWebSecurity: false,
12
+ video: false,
13
+ e2e: {
14
+ // We've imported your old cypress plugins here.
15
+ // You may want to clean this up later by importing these.
16
+ setupNodeEvents (on, config) {
17
+ return plugins(on, config);
18
+ },
19
+ baseUrl: 'http://localhost:8000'
20
+ }
21
+ });
@@ -0,0 +1,70 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en"><head>
3
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta name="generator" content="HTML Tidy for Mac OS X (vers 31 October 2006 - Apple Inc. build 13), see www.w3.org"><title>W3C Software Notice and License</title></head><body id="www-w3-org" class="w3c_public w3c_javascript w3c_screen"><div id="w3c_container">
4
+
5
+
6
+ <div id="w3c_main">
7
+ <h1 class="title">W3C Software Notice and License</h1>
8
+ <div id="w3c_content_body">
9
+ <div class="line">
10
+ <p class="intro tPadding">This work (and included software, documentation such as READMEs, or other
11
+ related items) is being provided by the copyright holders under the following
12
+ license.</p>
13
+ <h2>License</h2>
14
+
15
+ <p class="tPadding">
16
+ By obtaining, using and/or copying this work, you (the licensee)
17
+ agree that you have read, understood, and will comply with the following
18
+ terms and conditions.</p>
19
+
20
+ <p>Permission to copy, modify, and distribute this software and its
21
+ documentation, with or without modification,&nbsp;for any purpose and without
22
+ fee or royalty is hereby granted, provided that you include the following on
23
+ ALL copies of the software and documentation or portions thereof, including
24
+ modifications:</p>
25
+
26
+ <ul class="show_items"><li>The full text of this NOTICE in a location viewable to users of the
27
+ redistributed or derivative work.</li><li>Any pre-existing intellectual property disclaimers, notices, or terms
28
+ and conditions. If none exist, the <a href="http://www.w3.org/Consortium/Legal/2002/copyright-software-short-notice-20021231.html">W3C Software Short
29
+ Notice</a> should be included (hypertext is preferred, text is permitted)
30
+ within the body of any redistributed or derivative code.</li><li>Notice of any changes or modifications to the files, including the date
31
+ changes were made. (We recommend you provide URIs to the location from
32
+ which the code is derived.)</li></ul>
33
+
34
+ <h2>Disclaimers</h2>
35
+
36
+ <p>THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS
37
+ MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT
38
+ LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR
39
+ PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE
40
+ ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.</p>
41
+
42
+ <p>COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
43
+ CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR
44
+ DOCUMENTATION.</p>
45
+
46
+ <p>The name and trademarks of copyright holders may NOT be used in
47
+ advertising or publicity pertaining to the software without specific, written
48
+ prior permission. Title to copyright in this software and any associated
49
+ documentation will at all times remain with copyright holders.</p>
50
+
51
+ <h2>Notes</h2>
52
+
53
+ <p>This version: http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231</p>
54
+
55
+ <p>This formulation of W3C's notice and license became active on December 31
56
+ 2002. This version removes the copyright ownership notice such that this
57
+ license can be used with materials other than those owned by the W3C,
58
+ reflects that ERCIM is now a host of the W3C, includes references to this
59
+ specific dated version of the license, and removes the ambiguous grant of
60
+ "use". Otherwise, this version is the same as the <a href="http://www.w3.org/Consortium/Legal/copyright-software-19980720">previous
61
+ version</a> and is written so as to preserve the <a href="http://www.gnu.org/philosophy/license-list.html#GPLCompatibleLicenses">Free
62
+ Software Foundation's assessment of GPL compatibility</a> and <a href="http://www.opensource.org/licenses/W3C.php">OSI's certification</a>
63
+ under the <a href="http://www.opensource.org/docs/definition.php">Open Source
64
+ Definition</a>.</p>
65
+ </div>
66
+ </div>
67
+ </div>
68
+ </div>
69
+ </div>
70
+ </body></html>
@@ -0,0 +1,54 @@
1
+
2
+ <!--
3
+ File html5-uppercase.ent produced by the XSL script entities.xsl
4
+ from input data in unicode.xml.
5
+
6
+ Copyright 1998 - 2011 W3C.
7
+
8
+ Use and distribution of this code are permitted under the terms of
9
+ either of the following two licences:
10
+
11
+ 1) W3C Software Notice and License.
12
+ http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231.html
13
+
14
+
15
+ 2) The license used for the WHATWG HTML specification,
16
+ which states, in full:
17
+ You are granted a license to use, reproduce and create derivative
18
+ works of this document.
19
+
20
+
21
+ Please report any errors to David Carlisle
22
+ via the public W3C list www-math@w3.org.
23
+
24
+ The numeric character values assigned to each entity
25
+ (should) match the Unicode assignments in Unicode 5.x.
26
+
27
+ -->
28
+
29
+
30
+ <!--
31
+
32
+ Public identifier: -//W3C//ENTITIES uppercase aliases for HTML//EN//XML
33
+ System identifier: http://www.w3.org/2003/entities/2007/html5-uppercase.ent
34
+
35
+ The public identifier should always be used verbatim.
36
+ The system identifier may be changed to suit local requirements.
37
+
38
+ Typical invocation:
39
+
40
+ <!ENTITY % html5-uppercase PUBLIC
41
+ "-//W3C//ENTITIES uppercase aliases for HTML//EN//XML"
42
+ "http://www.w3.org/2003/entities/2007/html5-uppercase.ent"
43
+ >
44
+ %html5-uppercase;
45
+
46
+ -->
47
+
48
+ <!ENTITY AMP "&#38;#38;" ><!--AMPERSAND -->
49
+ <!ENTITY COPY "&#x000A9;" ><!--COPYRIGHT SIGN -->
50
+ <!ENTITY GT "&#x0003E;" ><!--GREATER-THAN SIGN -->
51
+ <!ENTITY LT "&#38;#60;" ><!--LESS-THAN SIGN -->
52
+ <!ENTITY QUOT "&#x00022;" ><!--QUOTATION MARK -->
53
+ <!ENTITY REG "&#x000AE;" ><!--REGISTERED SIGN -->
54
+ <!ENTITY TRADE "&#x02122;" ><!--TRADE MARK SIGN -->