sax 1.1.6 → 1.2.4

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.
package/README.md CHANGED
@@ -168,6 +168,11 @@ would trigger this kind of event. This is a weird thing to support, so it
168
168
  might go away at some point. SAX isn't intended to be used to parse SGML,
169
169
  after all.
170
170
 
171
+ `opentagstart` - Emitted immediately when the tag name is available,
172
+ but before any attributes are encountered. Argument: object with a
173
+ `name` field and an empty `attributes` set. Note that this is the
174
+ same object that will later be emitted in the `opentag` event.
175
+
171
176
  `opentag` - An opening tag. Argument: object with `name` and `attributes`.
172
177
  In non-strict mode, tag names are uppercased, unless the `lowercase`
173
178
  option is set. If the `xmlns` option is set, then it will contain
package/lib/sax.js CHANGED
@@ -27,6 +27,7 @@
27
27
  'sgmldeclaration',
28
28
  'doctype',
29
29
  'comment',
30
+ 'opentagstart',
30
31
  'attribute',
31
32
  'opentag',
32
33
  'closetag',
@@ -261,28 +262,14 @@
261
262
  return Stream.prototype.on.call(me, ev, handler)
262
263
  }
263
264
 
264
- // character classes and tokens
265
- var whitespace = '\r\n\t '
266
-
267
265
  // this really needs to be replaced with character classes.
268
266
  // XML allows all manner of ridiculous numbers and digits.
269
- var number = '0124356789'
270
- var letter = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
271
-
272
- // (Letter | "_" | ":")
273
- var quote = '\'"'
274
- var attribEnd = whitespace + '>'
275
267
  var CDATA = '[CDATA['
276
268
  var DOCTYPE = 'DOCTYPE'
277
269
  var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace'
278
270
  var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/'
279
271
  var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE }
280
272
 
281
- // turn all the string character sets into character class objects.
282
- whitespace = charClass(whitespace)
283
- number = charClass(number)
284
- letter = charClass(letter)
285
-
286
273
  // http://www.w3.org/TR/REC-xml/#NT-NameStartChar
287
274
  // This implementation works on strings, a single character at a time
288
275
  // as such, it cannot ever support astral-plane characters (10000-EFFFF)
@@ -291,31 +278,29 @@
291
278
  // is left as an exercise for the reader.
292
279
  var nameStart = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/
293
280
 
294
- var nameBody = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040\.\d-]/
281
+ var nameBody = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/
295
282
 
296
283
  var entityStart = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/
297
- var entityBody = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040\.\d-]/
284
+ var entityBody = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/
298
285
 
299
- quote = charClass(quote)
300
- attribEnd = charClass(attribEnd)
286
+ function isWhitespace (c) {
287
+ return c === ' ' || c === '\n' || c === '\r' || c === '\t'
288
+ }
301
289
 
302
- function charClass (str) {
303
- return str.split('').reduce(function (s, c) {
304
- s[c] = true
305
- return s
306
- }, {})
290
+ function isQuote (c) {
291
+ return c === '"' || c === '\''
307
292
  }
308
293
 
309
- function isRegExp (c) {
310
- return Object.prototype.toString.call(c) === '[object RegExp]'
294
+ function isAttribEnd (c) {
295
+ return c === '>' || isWhitespace(c)
311
296
  }
312
297
 
313
- function is (charclass, c) {
314
- return isRegExp(charclass) ? !!c.match(charclass) : charclass[c]
298
+ function isMatch (regex, c) {
299
+ return regex.test(c)
315
300
  }
316
301
 
317
- function not (charclass, c) {
318
- return !is(charclass, c)
302
+ function notMatch (regex, c) {
303
+ return !isMatch(regex, c)
319
304
  }
320
305
 
321
306
  var S = 0
@@ -703,6 +688,7 @@
703
688
  tag.ns = parent.ns
704
689
  }
705
690
  parser.attribList.length = 0
691
+ emitNode(parser, 'onopentagstart', tag)
706
692
  }
707
693
 
708
694
  function qname (name, attribute) {
@@ -947,7 +933,7 @@
947
933
  }
948
934
  }
949
935
  entity = entity.replace(/^0+/, '')
950
- if (numStr.toLowerCase() !== entity) {
936
+ if (isNaN(num) || numStr.toLowerCase() !== entity) {
951
937
  strictFail(parser, 'Invalid character entity')
952
938
  return '&' + parser.entity + ';'
953
939
  }
@@ -959,7 +945,7 @@
959
945
  if (c === '<') {
960
946
  parser.state = S.OPEN_WAKA
961
947
  parser.startTagPosition = parser.position
962
- } else if (not(whitespace, c)) {
948
+ } else if (!isWhitespace(c)) {
963
949
  // have to process this as a text node.
964
950
  // weird, but happens.
965
951
  strictFail(parser, 'Non-whitespace before first tag.')
@@ -996,9 +982,11 @@
996
982
  while (true) {
997
983
  c = charAt(chunk, i++)
998
984
  parser.c = c
985
+
999
986
  if (!c) {
1000
987
  break
1001
988
  }
989
+
1002
990
  if (parser.trackPosition) {
1003
991
  parser.position++
1004
992
  if (c === '\n') {
@@ -1008,6 +996,7 @@
1008
996
  parser.column++
1009
997
  }
1010
998
  }
999
+
1011
1000
  switch (parser.state) {
1012
1001
  case S.BEGIN:
1013
1002
  parser.state = S.BEGIN_WHITESPACE
@@ -1042,7 +1031,7 @@
1042
1031
  parser.state = S.OPEN_WAKA
1043
1032
  parser.startTagPosition = parser.position
1044
1033
  } else {
1045
- if (not(whitespace, c) && (!parser.sawRoot || parser.closedRoot)) {
1034
+ if (!isWhitespace(c) && (!parser.sawRoot || parser.closedRoot)) {
1046
1035
  strictFail(parser, 'Text data outside of root node.')
1047
1036
  }
1048
1037
  if (c === '&') {
@@ -1076,9 +1065,9 @@
1076
1065
  if (c === '!') {
1077
1066
  parser.state = S.SGML_DECL
1078
1067
  parser.sgmlDecl = ''
1079
- } else if (is(whitespace, c)) {
1068
+ } else if (isWhitespace(c)) {
1080
1069
  // wait for it...
1081
- } else if (is(nameStart, c)) {
1070
+ } else if (isMatch(nameStart, c)) {
1082
1071
  parser.state = S.OPEN_TAG
1083
1072
  parser.tagName = c
1084
1073
  } else if (c === '/') {
@@ -1121,7 +1110,7 @@
1121
1110
  emitNode(parser, 'onsgmldeclaration', parser.sgmlDecl)
1122
1111
  parser.sgmlDecl = ''
1123
1112
  parser.state = S.TEXT
1124
- } else if (is(quote, c)) {
1113
+ } else if (isQuote(c)) {
1125
1114
  parser.state = S.SGML_DECL_QUOTED
1126
1115
  parser.sgmlDecl += c
1127
1116
  } else {
@@ -1146,7 +1135,7 @@
1146
1135
  parser.doctype += c
1147
1136
  if (c === '[') {
1148
1137
  parser.state = S.DOCTYPE_DTD
1149
- } else if (is(quote, c)) {
1138
+ } else if (isQuote(c)) {
1150
1139
  parser.state = S.DOCTYPE_QUOTED
1151
1140
  parser.q = c
1152
1141
  }
@@ -1165,7 +1154,7 @@
1165
1154
  parser.doctype += c
1166
1155
  if (c === ']') {
1167
1156
  parser.state = S.DOCTYPE
1168
- } else if (is(quote, c)) {
1157
+ } else if (isQuote(c)) {
1169
1158
  parser.state = S.DOCTYPE_DTD_QUOTED
1170
1159
  parser.q = c
1171
1160
  }
@@ -1249,7 +1238,7 @@
1249
1238
  case S.PROC_INST:
1250
1239
  if (c === '?') {
1251
1240
  parser.state = S.PROC_INST_ENDING
1252
- } else if (is(whitespace, c)) {
1241
+ } else if (isWhitespace(c)) {
1253
1242
  parser.state = S.PROC_INST_BODY
1254
1243
  } else {
1255
1244
  parser.procInstName += c
@@ -1257,7 +1246,7 @@
1257
1246
  continue
1258
1247
 
1259
1248
  case S.PROC_INST_BODY:
1260
- if (!parser.procInstBody && is(whitespace, c)) {
1249
+ if (!parser.procInstBody && isWhitespace(c)) {
1261
1250
  continue
1262
1251
  } else if (c === '?') {
1263
1252
  parser.state = S.PROC_INST_ENDING
@@ -1281,7 +1270,7 @@
1281
1270
  continue
1282
1271
 
1283
1272
  case S.OPEN_TAG:
1284
- if (is(nameBody, c)) {
1273
+ if (isMatch(nameBody, c)) {
1285
1274
  parser.tagName += c
1286
1275
  } else {
1287
1276
  newTag(parser)
@@ -1290,7 +1279,7 @@
1290
1279
  } else if (c === '/') {
1291
1280
  parser.state = S.OPEN_TAG_SLASH
1292
1281
  } else {
1293
- if (not(whitespace, c)) {
1282
+ if (!isWhitespace(c)) {
1294
1283
  strictFail(parser, 'Invalid character in tag name')
1295
1284
  }
1296
1285
  parser.state = S.ATTRIB
@@ -1310,13 +1299,13 @@
1310
1299
 
1311
1300
  case S.ATTRIB:
1312
1301
  // haven't read the attribute name yet.
1313
- if (is(whitespace, c)) {
1302
+ if (isWhitespace(c)) {
1314
1303
  continue
1315
1304
  } else if (c === '>') {
1316
1305
  openTag(parser)
1317
1306
  } else if (c === '/') {
1318
1307
  parser.state = S.OPEN_TAG_SLASH
1319
- } else if (is(nameStart, c)) {
1308
+ } else if (isMatch(nameStart, c)) {
1320
1309
  parser.attribName = c
1321
1310
  parser.attribValue = ''
1322
1311
  parser.state = S.ATTRIB_NAME
@@ -1333,9 +1322,9 @@
1333
1322
  parser.attribValue = parser.attribName
1334
1323
  attrib(parser)
1335
1324
  openTag(parser)
1336
- } else if (is(whitespace, c)) {
1325
+ } else if (isWhitespace(c)) {
1337
1326
  parser.state = S.ATTRIB_NAME_SAW_WHITE
1338
- } else if (is(nameBody, c)) {
1327
+ } else if (isMatch(nameBody, c)) {
1339
1328
  parser.attribName += c
1340
1329
  } else {
1341
1330
  strictFail(parser, 'Invalid attribute name')
@@ -1345,7 +1334,7 @@
1345
1334
  case S.ATTRIB_NAME_SAW_WHITE:
1346
1335
  if (c === '=') {
1347
1336
  parser.state = S.ATTRIB_VALUE
1348
- } else if (is(whitespace, c)) {
1337
+ } else if (isWhitespace(c)) {
1349
1338
  continue
1350
1339
  } else {
1351
1340
  strictFail(parser, 'Attribute without value')
@@ -1358,7 +1347,7 @@
1358
1347
  parser.attribName = ''
1359
1348
  if (c === '>') {
1360
1349
  openTag(parser)
1361
- } else if (is(nameStart, c)) {
1350
+ } else if (isMatch(nameStart, c)) {
1362
1351
  parser.attribName = c
1363
1352
  parser.state = S.ATTRIB_NAME
1364
1353
  } else {
@@ -1369,9 +1358,9 @@
1369
1358
  continue
1370
1359
 
1371
1360
  case S.ATTRIB_VALUE:
1372
- if (is(whitespace, c)) {
1361
+ if (isWhitespace(c)) {
1373
1362
  continue
1374
- } else if (is(quote, c)) {
1363
+ } else if (isQuote(c)) {
1375
1364
  parser.q = c
1376
1365
  parser.state = S.ATTRIB_VALUE_QUOTED
1377
1366
  } else {
@@ -1396,13 +1385,13 @@
1396
1385
  continue
1397
1386
 
1398
1387
  case S.ATTRIB_VALUE_CLOSED:
1399
- if (is(whitespace, c)) {
1388
+ if (isWhitespace(c)) {
1400
1389
  parser.state = S.ATTRIB
1401
1390
  } else if (c === '>') {
1402
1391
  openTag(parser)
1403
1392
  } else if (c === '/') {
1404
1393
  parser.state = S.OPEN_TAG_SLASH
1405
- } else if (is(nameStart, c)) {
1394
+ } else if (isMatch(nameStart, c)) {
1406
1395
  strictFail(parser, 'No whitespace between attributes')
1407
1396
  parser.attribName = c
1408
1397
  parser.attribValue = ''
@@ -1413,7 +1402,7 @@
1413
1402
  continue
1414
1403
 
1415
1404
  case S.ATTRIB_VALUE_UNQUOTED:
1416
- if (not(attribEnd, c)) {
1405
+ if (!isAttribEnd(c)) {
1417
1406
  if (c === '&') {
1418
1407
  parser.state = S.ATTRIB_VALUE_ENTITY_U
1419
1408
  } else {
@@ -1431,9 +1420,9 @@
1431
1420
 
1432
1421
  case S.CLOSE_TAG:
1433
1422
  if (!parser.tagName) {
1434
- if (is(whitespace, c)) {
1423
+ if (isWhitespace(c)) {
1435
1424
  continue
1436
- } else if (not(nameStart, c)) {
1425
+ } else if (notMatch(nameStart, c)) {
1437
1426
  if (parser.script) {
1438
1427
  parser.script += '</' + c
1439
1428
  parser.state = S.SCRIPT
@@ -1445,14 +1434,14 @@
1445
1434
  }
1446
1435
  } else if (c === '>') {
1447
1436
  closeTag(parser)
1448
- } else if (is(nameBody, c)) {
1437
+ } else if (isMatch(nameBody, c)) {
1449
1438
  parser.tagName += c
1450
1439
  } else if (parser.script) {
1451
1440
  parser.script += '</' + parser.tagName
1452
1441
  parser.tagName = ''
1453
1442
  parser.state = S.SCRIPT
1454
1443
  } else {
1455
- if (not(whitespace, c)) {
1444
+ if (!isWhitespace(c)) {
1456
1445
  strictFail(parser, 'Invalid tagname in closing tag')
1457
1446
  }
1458
1447
  parser.state = S.CLOSE_TAG_SAW_WHITE
@@ -1460,7 +1449,7 @@
1460
1449
  continue
1461
1450
 
1462
1451
  case S.CLOSE_TAG_SAW_WHITE:
1463
- if (is(whitespace, c)) {
1452
+ if (isWhitespace(c)) {
1464
1453
  continue
1465
1454
  }
1466
1455
  if (c === '>') {
@@ -1496,7 +1485,7 @@
1496
1485
  parser[buffer] += parseEntity(parser)
1497
1486
  parser.entity = ''
1498
1487
  parser.state = returnState
1499
- } else if (is(parser.entity.length ? entityBody : entityStart, c)) {
1488
+ } else if (isMatch(parser.entity.length ? entityBody : entityStart, c)) {
1500
1489
  parser.entity += c
1501
1490
  } else {
1502
1491
  strictFail(parser, 'Invalid character in entity name')
@@ -1519,6 +1508,7 @@
1519
1508
  }
1520
1509
 
1521
1510
  /*! http://mths.be/fromcodepoint v0.1.0 by @mathias */
1511
+ /* istanbul ignore next */
1522
1512
  if (!String.fromCodePoint) {
1523
1513
  (function () {
1524
1514
  var stringFromCharCode = String.fromCharCode
@@ -1560,6 +1550,7 @@
1560
1550
  }
1561
1551
  return result
1562
1552
  }
1553
+ /* istanbul ignore next */
1563
1554
  if (Object.defineProperty) {
1564
1555
  Object.defineProperty(String, 'fromCodePoint', {
1565
1556
  value: fromCodePoint,
package/package.json CHANGED
@@ -2,22 +2,24 @@
2
2
  "name": "sax",
3
3
  "description": "An evented streaming XML parser in JavaScript",
4
4
  "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
5
- "version": "1.1.6",
5
+ "version": "1.2.4",
6
6
  "main": "lib/sax.js",
7
7
  "license": "ISC",
8
8
  "scripts": {
9
- "test": "tap test/*.js --cov",
10
- "posttest": "standard -F test/*.js lib/*.js"
9
+ "test": "tap test/*.js --cov -j4",
10
+ "posttest": "standard -F test/*.js lib/*.js",
11
+ "preversion": "npm test",
12
+ "postversion": "npm publish",
13
+ "postpublish": "git push origin --all; git push origin --tags"
11
14
  },
12
15
  "repository": "git://github.com/isaacs/sax-js.git",
13
16
  "files": [
14
17
  "lib/sax.js",
15
18
  "LICENSE",
16
- "LICENSE-W3C.html",
17
19
  "README.md"
18
20
  ],
19
21
  "devDependencies": {
20
- "standard": "^5.3.1",
21
- "tap": "^5.2.0"
22
+ "standard": "^8.6.0",
23
+ "tap": "^10.5.1"
22
24
  }
23
25
  }
package/LICENSE-W3C.html DELETED
@@ -1,188 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><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><link rel="stylesheet" href="/2008/site/css/minimum" type="text/css" media="handheld, all" /><style type="text/css" media="print, screen and (min-width: 481px)" xml:space="preserve">
3
- @import url("/2008/site/css/advanced");
4
- </style><link href="/2008/site/css/minimum" rel="stylesheet" type="text/css" media="handheld, only screen and (max-device-width: 480px)" /><meta name="viewport" content="width=device-width" /><link rel="stylesheet" href="/2008/site/css/print" type="text/css" media="print" /><link rel="shortcut icon" href="/2008/site/images/favicon.ico" type="image/x-icon" /></head><body id="www-w3-org" class="w3c_public"><div id="w3c_container">
5
-
6
-
7
-
8
- <div id="w3c_mast">
9
- <h1 class="logo">
10
- <a tabindex="2" accesskey="1" href="/"><img src="/2008/site/images/logo-w3c-mobile-lg" width="90" height="53" alt="W3C" /></a>
11
- <span class="alt-logo">W3C</span>
12
- </h1>
13
-
14
- <div id="w3c_nav">
15
-
16
-
17
-
18
- <form action="/Help/search" method="get" enctype="application/x-www-form-urlencoded"><div class="w3c_sec_nav"><!-- --></div><ul class="main_nav"><li class="first-item">
19
- <a href="/standards/">Standards</a>
20
- </li><li>
21
- <a href="/participate/">Participate</a>
22
- </li><li>
23
- <a href="/Consortium/membership">Membership</a>
24
- </li><li class="last-item">
25
- <a href="/Consortium/">About W3C</a>
26
- </li><li class="search-item">
27
- <div id="search-form">
28
- <input tabindex="3" class="text" name="q" value="" title="Search" type="text" />
29
- <button id="search-submit" name="search-submit" type="submit"><img class="submit" src="/2008/site/images/search-button" alt="Search" width="21" height="17" /></button>
30
- </div>
31
- </li></ul></form>
32
- </div>
33
-
34
- </div>
35
-
36
-
37
- <div id="w3c_main">
38
- <div id="w3c_logo_shadow" class="w3c_leftCol">
39
- <img height="32" alt="" src="/2008/site/images/logo-shadow" />
40
- </div>
41
-
42
- <div class="w3c_leftCol"><h2 class="offscreen">Site Navigation</h2>
43
- <h3 class="category"><span class="ribbon"><a href="/Consortium/Legal/ipr-notice.html" title="Up to Policies and Legal Information">Policies and Legal Information <img src="/2008/site/images/header-link" alt="Header link" width="13" height="13" class="header-link" /></a></span></h3>
44
- <ul class="theme">
45
- <li><a href="/Consortium/Legal/2008/04-testsuite-copyright.html">Licenses for W3C Test Suites</a></li>
46
- <li><a href="/2004/10/27-testcases.html">Policies for Contribution of Test Cases to W3C</a></li>
47
- <li><a href="/Consortium/Legal/IPR-FAQ-20000620.html">Intellectual Rights FAQ</a></li>
48
- <li><a href="/Consortium/Legal/privacy-statement-20000612.html">W3C Privacy Statements</a></li>
49
- <li><a href="/Consortium/Legal/2002/copyright-documents-20021231.html">W3C Document License</a></li>
50
- <li><a href="/Consortium/Legal/2002/trademarks-20021231.html">W3C Trademarks and Generic Terms</a></li>
51
- <li><a href="/Consortium/Legal/2002/trademark-license-20021231.html">W3C&#xAE; Trademark and Service Mark License</a></li>
52
- <li><a class="current">W3C Software Notice and License</a></li>
53
- <li><a href="/Consortium/Legal/2002/collaborators-agreement-20021231.html">W3C Invited Expert and Collaborators Agreement</a></li>
54
- <li><a href="/Consortium/Persistence.html">W3C URI Persistence Policy</a></li>
55
- <li><a href="/1999/10/21-mirroring-policy.html">Mirroring the W3C Site</a></li>
56
- <li><a href="/Consortium/Legal/2006/08-copyright-translations.html">Translations of the Copyright Notice</a></li>
57
- </ul>
58
- <br /></div>
59
- <div class="w3c_mainCol">
60
- <div id="w3c_crumbs">
61
- <div id="w3c_crumbs_frame">
62
- <ul class="bct"> <!-- .bct / Breadcrumbs -->
63
- <li class="skip"><a tabindex="1" accesskey="2" title="Skip to content (e.g., when browsing via audio)" href="#w3c_content_body">Skip</a></li>
64
- <li><a href="/">W3C</a>&#xA0;<span class="cr">&#xBB;</span>&#xA0;</li>
65
- <li><a href="/Consortium/">About&#xA0;W3C</a>&#xA0;<span class="cr">&#xBB;</span>&#xA0;</li>
66
- <li><a href="/Consortium/facts.html">Facts&#xA0;About&#xA0;W3C</a>&#xA0;<span class="cr">&#xBB;</span>&#xA0;</li>
67
- <li><a href="/Consortium/Legal/ipr-notice.html">Policies&#xA0;and&#xA0;Legal&#xA0;Information</a>&#xA0;<span class="cr">&#xBB;</span>&#xA0;</li>
68
- <li class="current">W3C Software Notice and License</li>
69
- </ul>
70
- </div>
71
- </div>
72
- <h1 class="title">W3C Software Notice and License</h1>
73
- <div id="w3c_content_body">
74
- <div class="line">
75
- <p class="intro tPadding">This work (and included software, documentation such as READMEs, or other
76
- related items) is being provided by the copyright holders under the following
77
- license.</p>
78
- <h2>License</h2>
79
-
80
- <p class="tPadding">
81
- By obtaining, using and/or copying this work, you (the licensee)
82
- agree that you have read, understood, and will comply with the following
83
- terms and conditions.</p>
84
-
85
- <p>Permission to copy, modify, and distribute this software and its
86
- documentation, with or without modification,&#xA0;for any purpose and without
87
- fee or royalty is hereby granted, provided that you include the following on
88
- ALL copies of the software and documentation or portions thereof, including
89
- modifications:</p>
90
-
91
- <ul class="show_items"><li>The full text of this NOTICE in a location viewable to users of the
92
- redistributed or derivative work.</li><li>Any pre-existing intellectual property disclaimers, notices, or terms
93
- and conditions. If none exist, the <a href="copyright-software-short-notice-20021231.html">W3C Software Short
94
- Notice</a> should be included (hypertext is preferred, text is permitted)
95
- within the body of any redistributed or derivative code.</li><li>Notice of any changes or modifications to the files, including the date
96
- changes were made. (We recommend you provide URIs to the location from
97
- which the code is derived.)</li></ul>
98
-
99
- <h2>Disclaimers</h2>
100
-
101
- <p>THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS
102
- MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT
103
- LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR
104
- PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE
105
- ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.</p>
106
-
107
- <p>COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
108
- CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR
109
- DOCUMENTATION.</p>
110
-
111
- <p>The name and trademarks of copyright holders may NOT be used in
112
- advertising or publicity pertaining to the software without specific, written
113
- prior permission. Title to copyright in this software and any associated
114
- documentation will at all times remain with copyright holders.</p>
115
-
116
- <h2>Notes</h2>
117
-
118
- <p>This version: http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231</p>
119
-
120
- <p>This formulation of W3C's notice and license became active on December 31
121
- 2002. This version removes the copyright ownership notice such that this
122
- license can be used with materials other than those owned by the W3C,
123
- reflects that ERCIM is now a host of the W3C, includes references to this
124
- specific dated version of the license, and removes the ambiguous grant of
125
- "use". Otherwise, this version is the same as the <a href="http://www.w3.org/Consortium/Legal/copyright-software-19980720">previous
126
- version</a> and is written so as to preserve the <a href="http://www.gnu.org/philosophy/license-list.html#GPLCompatibleLicenses">Free
127
- Software Foundation's assessment of GPL compatibility</a> and <a href="http://www.opensource.org/licenses/W3C.php">OSI's certification</a>
128
- under the <a href="http://www.opensource.org/docs/definition.php">Open Source
129
- Definition</a>.</p>
130
- </div>
131
- </div>
132
- </div>
133
- </div>
134
-
135
-
136
-
137
- </div><div id="w3c_footer">
138
- <div id="w3c_footer-inner">
139
- <h2 class="offscreen">Footer Navigation</h2>
140
- <div class="w3c_footer-nav">
141
- <h3>Navigation</h3>
142
- <ul class="footer_top_nav"><li>
143
- <a href="/">Home</a>
144
- </li><li>
145
- <a href="/standards/">Standards</a>
146
- </li><li>
147
- <a href="/participate/">Participate</a>
148
- </li><li>
149
- <a href="/Consortium/membership">Membership</a>
150
- </li><li class="last-item">
151
- <a href="/Consortium/">About W3C</a>
152
- </li></ul>
153
- </div>
154
- <div class="w3c_footer-nav">
155
- <h3>Contact W3C</h3>
156
- <ul class="footer_bottom_nav"><li>
157
- <a href="/Consortium/contact">Contact</a>
158
- </li><li>
159
- <a accesskey="0" href="/Help/">Help and FAQ</a>
160
- </li><li>
161
- <a href="/Consortium/sponsor/">Sponsor / Donate</a>
162
- </li><li>
163
- <a href="/Consortium/siteindex">Site Map</a>
164
- </li><li>
165
- <address id="w3c_signature">
166
- <a href="http://lists.w3.org/Archives/Public/site-comments/">Feedback</a></address>
167
- </li></ul>
168
- </div>
169
- <div class="w3c_footer-nav">
170
- <h3>W3C Updates</h3>
171
- <ul class="footer_follow_nav"><li>
172
- <a href="http://twitter.com/W3C" title="Follow W3C on Twitter">
173
- <img src="/2008/site/images/twitter-bird" alt="Twitter" width="78" height="83" class="social-icon" />
174
- </a>
175
- <a href="http://identi.ca/w3c" title="See W3C on Identica">
176
- <img src="/2008/site/images/identica-logo" alt="Identica" width="91" height="83" class="social-icon" />
177
- </a>
178
- </li></ul>
179
- </div>
180
- <p class="copyright">Copyright &#xA9; 2012 W3C <sup>&#xAE;</sup> (<a href="http://www.csail.mit.edu/">
181
- <acronym title="Massachusetts Institute of Technology">MIT</acronym>
182
- </a>, <a href="http://www.ercim.org/">
183
- <acronym title="European Research Consortium for Informatics and Mathematics"> ERCIM</acronym>
184
- </a>, <a href="http://www.keio.ac.jp/">Keio</a>) <a href="/Consortium/Legal/ipr-notice">Usage policies apply</a>.</p>
185
- </div>
186
- </div><!-- Generated from data/scripts.php, ../../smarty/{scripts.tpl} --><!-- At the bottom for performance reasons --><div id="w3c_scripts">
187
- <script type="text/javascript" src="/2008/site/js/main" xml:space="preserve"><!-- --></script>
188
- </div></body></html>