pax_global_header00006660000000000000000000000064131230011710014477gustar00rootroot0000000000000052 comment=5aee2163d55cff24b817bbf550bac44841f9df45 sax-js-1.2.4/000077500000000000000000000000001312300117100127105ustar00rootroot00000000000000sax-js-1.2.4/.gitignore000066400000000000000000000000711312300117100146760ustar00rootroot00000000000000.*.swp node_modules/* nyc_output/ .nyc_output/ coverage/ sax-js-1.2.4/.travis.yml000066400000000000000000000002211312300117100150140ustar00rootroot00000000000000language: node_js sudo: false node_js: - 8 - 6 - 4 notifications: email: false cache: directories: - $HOME/.npm - node_modules sax-js-1.2.4/AUTHORS000066400000000000000000000005561312300117100137660ustar00rootroot00000000000000# contributors sorted by whether or not they're me. Isaac Z. Schlueter Stein Martin Hustad Mikeal Rogers Laurie Harper Jann Horn Elijah Insua Henry Rawas Justin Makeig Mike Schilling sax-js-1.2.4/CONTRIBUTING.md000066400000000000000000000004301312300117100151360ustar00rootroot00000000000000**NO PATCHES WITHOUT A TEST** **TEST MUST PASS WITH THE PATCH.** **TEST MUST FAIL WITHOUT THE PATCH.** **NO EXCEPTIONS.** # EVERY PULL REQUEST MUST HAVE A TEST. Seriously. This is a very strict rule, and I will not bend it for any patch, no matter how minor. Write a test. sax-js-1.2.4/LICENSE000066400000000000000000000037331312300117100137230ustar00rootroot00000000000000The ISC License Copyright (c) Isaac Z. Schlueter and Contributors Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ==== `String.fromCodePoint` by Mathias Bynens used according to terms of MIT License, as follows: Copyright Mathias Bynens Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. sax-js-1.2.4/README.md000066400000000000000000000202751312300117100141750ustar00rootroot00000000000000# sax js A sax-style parser for XML and HTML. Designed with [node](http://nodejs.org/) in mind, but should work fine in the browser or other CommonJS implementations. ## What This Is * A very simple tool to parse through an XML string. * A stepping stone to a streaming HTML parser. * A handy way to deal with RSS and other mostly-ok-but-kinda-broken XML docs. ## What This Is (probably) Not * An HTML Parser - That's a fine goal, but this isn't it. It's just XML. * A DOM Builder - You can use it to build an object model out of XML, but it doesn't do that out of the box. * XSLT - No DOM = no querying. * 100% Compliant with (some other SAX implementation) - Most SAX implementations are in Java and do a lot more than this does. * An XML Validator - It does a little validation when in strict mode, but not much. * A Schema-Aware XSD Thing - Schemas are an exercise in fetishistic masochism. * A DTD-aware Thing - Fetching DTDs is a much bigger job. ## Regarding `Hello, world!').close(); // stream usage // takes the same options as the parser var saxStream = require("sax").createStream(strict, options) saxStream.on("error", function (e) { // unhandled errors will throw, since this is a proper node // event emitter. console.error("error!", e) // clear the error this._parser.error = null this._parser.resume() }) saxStream.on("opentag", function (node) { // same object as above }) // pipe is supported, and it's readable/writable // same chunks coming in also go out. fs.createReadStream("file.xml") .pipe(saxStream) .pipe(fs.createWriteStream("file-copy.xml")) ``` ## Arguments Pass the following arguments to the parser function. All are optional. `strict` - Boolean. Whether or not to be a jerk. Default: `false`. `opt` - Object bag of settings regarding string formatting. All default to `false`. Settings supported: * `trim` - Boolean. Whether or not to trim text and comment nodes. * `normalize` - Boolean. If true, then turn any whitespace into a single space. * `lowercase` - Boolean. If true, then lowercase tag names and attribute names in loose mode, rather than uppercasing them. * `xmlns` - Boolean. If true, then namespaces are supported. * `position` - Boolean. If false, then don't track line/col/position. * `strictEntities` - Boolean. If true, only parse [predefined XML entities](http://www.w3.org/TR/REC-xml/#sec-predefined-ent) (`&`, `'`, `>`, `<`, and `"`) ## Methods `write` - Write bytes onto the stream. You don't have to do this all at once. You can keep writing as much as you want. `close` - Close the stream. Once closed, no more data may be written until it is done processing the buffer, which is signaled by the `end` event. `resume` - To gracefully handle errors, assign a listener to the `error` event. Then, when the error is taken care of, you can call `resume` to continue parsing. Otherwise, the parser will not continue while in an error state. ## Members At all times, the parser object will have the following members: `line`, `column`, `position` - Indications of the position in the XML document where the parser currently is looking. `startTagPosition` - Indicates the position where the current tag starts. `closed` - Boolean indicating whether or not the parser can be written to. If it's `true`, then wait for the `ready` event to write again. `strict` - Boolean indicating whether or not the parser is a jerk. `opt` - Any options passed into the constructor. `tag` - The current tag being dealt with. And a bunch of other stuff that you probably shouldn't touch. ## Events All events emit with a single argument. To listen to an event, assign a function to `on`. Functions get executed in the this-context of the parser object. The list of supported events are also in the exported `EVENTS` array. When using the stream interface, assign handlers using the EventEmitter `on` function in the normal fashion. `error` - Indication that something bad happened. The error will be hanging out on `parser.error`, and must be deleted before parsing can continue. By listening to this event, you can keep an eye on that kind of stuff. Note: this happens *much* more in strict mode. Argument: instance of `Error`. `text` - Text node. Argument: string of text. `doctype` - The ``. Argument: object with `name` and `body` members. Attributes are not parsed, as processing instructions have implementation dependent semantics. `sgmldeclaration` - Random SGML declarations. Stuff like `` would trigger this kind of event. This is a weird thing to support, so it might go away at some point. SAX isn't intended to be used to parse SGML, after all. `opentagstart` - Emitted immediately when the tag name is available, but before any attributes are encountered. Argument: object with a `name` field and an empty `attributes` set. Note that this is the same object that will later be emitted in the `opentag` event. `opentag` - An opening tag. Argument: object with `name` and `attributes`. In non-strict mode, tag names are uppercased, unless the `lowercase` option is set. If the `xmlns` option is set, then it will contain namespace binding information on the `ns` member, and will have a `local`, `prefix`, and `uri` member. `closetag` - A closing tag. In loose mode, tags are auto-closed if their parent closes. In strict mode, well-formedness is enforced. Note that self-closing tags will have `closeTag` emitted immediately after `openTag`. Argument: tag name. `attribute` - An attribute node. Argument: object with `name` and `value`. In non-strict mode, attribute names are uppercased, unless the `lowercase` option is set. If the `xmlns` option is set, it will also contains namespace information. `comment` - A comment node. Argument: the string of the comment. `opencdata` - The opening tag of a ``) of a `` tags trigger a `"script"` event, and their contents are not checked for special xml characters. If you pass `noscript: true`, then this behavior is suppressed. ## Reporting Problems It's best to write a failing test if you find an issue. I will always accept pull requests with failing tests if they demonstrate intended behavior, but it is very hard to figure out what issue you're describing without a test. Writing a test is also the best way for you yourself to figure out if you really understand the issue you think you have with sax-js. sax-js-1.2.4/examples/000077500000000000000000000000001312300117100145265ustar00rootroot00000000000000sax-js-1.2.4/examples/big-not-pretty.xml000066400000000000000000005414251312300117100201470ustar00rootroot00000000000000 something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here something blerm a bit down here sax-js-1.2.4/examples/example.js000066400000000000000000000014261312300117100165220ustar00rootroot00000000000000var fs = require('fs'), util = require('util'), path = require('path'), xml = fs.readFileSync(path.join(__dirname, 'test.xml'), 'utf8'), sax = require('../lib/sax'), strict = sax.parser(true), loose = sax.parser(false, {trim: true}), inspector = function (ev) { return function (data) { console.error('%s %s %j', this.line + ':' + this.column, ev, data) }} sax.EVENTS.forEach(function (ev) { loose['on' + ev] = inspector(ev) }) loose.onend = function () { console.error('end') console.error(loose) } // do this in random bits at a time to verify that it works. (function () { if (xml) { var c = Math.ceil(Math.random() * 1000) loose.write(xml.substr(0, c)) xml = xml.substr(c) process.nextTick(arguments.callee) } else loose.close() })() sax-js-1.2.4/examples/get-products.js000066400000000000000000000030031312300117100175000ustar00rootroot00000000000000// pull out /GeneralSearchResponse/categories/category/items/product tags // the rest we don't care about. var sax = require('../lib/sax.js') var fs = require('fs') var path = require('path') var xmlFile = path.resolve(__dirname, 'shopping.xml') var util = require('util') var http = require('http') fs.readFile(xmlFile, function (er, d) { http.createServer(function (req, res) { if (er) throw er var xmlstr = d.toString('utf8') var parser = sax.parser(true) var products = [] var product = null var currentTag = null parser.onclosetag = function (tagName) { if (tagName === 'product') { products.push(product) currentTag = product = null return } if (currentTag && currentTag.parent) { var p = currentTag.parent delete currentTag.parent currentTag = p } } parser.onopentag = function (tag) { if (tag.name !== 'product' && !product) return if (tag.name === 'product') { product = tag } tag.parent = currentTag tag.children = [] tag.parent && tag.parent.children.push(tag) currentTag = tag } parser.ontext = function (text) { if (currentTag) currentTag.children.push(text) } parser.onend = function () { var out = util.inspect(products, false, 3, true) res.writeHead(200, {'content-type': 'application/json'}) res.end('{"ok":true}') // res.end(JSON.stringify(products)) } parser.write(xmlstr).end() }).listen(1337) }) sax-js-1.2.4/examples/hello-world.js000066400000000000000000000002441312300117100173140ustar00rootroot00000000000000require('http').createServer(function (req, res) { res.writeHead(200, {'content-type': 'application/json'}) res.end(JSON.stringify({ok: true})) }).listen(1337) sax-js-1.2.4/examples/not-pretty.xml000066400000000000000000000002651312300117100174000ustar00rootroot00000000000000 something blerm a bit down here sax-js-1.2.4/examples/pretty-print.js000066400000000000000000000027421312300117100175520ustar00rootroot00000000000000var sax = require('../lib/sax'), printer = sax.createStream(false, {lowercasetags: true, trim: true}), fs = require('fs') function entity (str) { return str.replace('"', '"') } printer.tabstop = 2 printer.level = 0 printer.indent = function () { print('\n') for (var i = this.level; i > 0; i--) { for (var j = this.tabstop; j > 0; j--) { print(' ') } } } printer.on('opentag', function (tag) { this.indent() this.level++ print('<' + tag.name) for (var i in tag.attributes) { print(' ' + i + '="' + entity(tag.attributes[i]) + '"') } print('>') }) printer.on('text', ontext) printer.on('doctype', ontext) function ontext (text) { this.indent() print(text) } printer.on('closetag', function (tag) { this.level-- this.indent() print('') }) printer.on('cdata', function (data) { this.indent() print('') }) printer.on('comment', function (comment) { this.indent() print('') }) printer.on('error', function (error) { console.error(error) throw error }) if (!process.argv[2]) { throw new Error('Please provide an xml file to prettify\n' + 'TODO: read from stdin or take a file') } var xmlfile = require('path').join(process.cwd(), process.argv[2]) var fstr = fs.createReadStream(xmlfile, { encoding: 'utf8' }) function print (c) { if (!process.stdout.write(c)) { fstr.pause() } } process.stdout.on('drain', function () { fstr.resume() }) fstr.pipe(printer) sax-js-1.2.4/examples/shopping.xml000066400000000000000000003025021312300117100171010ustar00rootroot00000000000000 sandbox3.1 r31.Kadu4DC.phase357782011.10.06 15:37:23 PSTp2.a121bc2aaf029435dce62011-10-21T18:38:45.982-04:00P0Y0M0DT0H0M0.169S1112You are currently using the SDC API sandbox environment! No clicks to merchant URLs from this response will be paid. Please change the host of your API requests to 'publisher.api.shopping.com' when you have finished development and testinghttp://statTest.dealtime.com/pixel/noscript?PV_EvnTyp=APPV&APPV_APITSP=10%2F21%2F11_06%3A38%3A45_PM&APPV_DSPRQSID=p2.a121bc2aaf029435dce6&APPV_IMGURL=http://img.shopping.com/sc/glb/sdc_logo_106x19.gif&APPV_LI_LNKINID=7000610&APPV_LI_SBMKYW=nikon&APPV_MTCTYP=1000&APPV_PRTID=2002&APPV_BrnID=14804http://www.shopping.com/digital-cameras/productsDigital CamerasDigital CamerasElectronicshttp://www.shopping.com/xCH-electronics-nikon~linkin_id-7000610?oq=nikonCameras and Photographyhttp://www.shopping.com/xCH-cameras_and_photography-nikon~linkin_id-7000610?oq=nikonDigital Camerashttp://www.shopping.com/digital-cameras/nikon/products?oq=nikon&linkin_id=7000610nikonnikonDigital Camerashttp://www.shopping.com/digital-cameras/nikon/products?oq=nikon&linkin_id=7000610Nikon D3100 Digital Camera14.2 Megapixel, SLR Camera, 3 in. LCD Screen, With High Definition Video, Weight: 1 lb.The Nikon D3100 digital SLR camera speaks to the growing ranks of enthusiastic D-SLR users and aspiring photographers by providing an easy-to-use and affordable entrance to the world of Nikon D-SLR’s. The 14.2-megapixel D3100 has powerful features, such as the enhanced Guide Mode that makes it easy to unleash creative potential and capture memories with still images and full HD video. Like having a personal photo tutor at your fingertips, this unique feature provides a simple graphical interface on the camera’s LCD that guides users by suggesting and/or adjusting camera settings to achieve the desired end result images. The D3100 is also the world’s first D-SLR to introduce full time auto focus (AF) in Live View and D-Movie mode to effortlessly achieve the critical focus needed when shooting Full HD 1080p video.http://di1.shopping.com/images/pi/93/bc/04/101677489-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-606x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=194.56http://img.shopping.com/sc/pr/sdc_stars_sm_4.5.gifhttp://www.shopping.com/Nikon-D3100/reviews~linkin_id-7000610429.001360.00http://www.shopping.com/Nikon-D3100/prices~linkin_id-7000610http://www.shopping.com/Nikon-D3100/info~linkin_id-7000610Nikon D3100 Digital SLR Camera with 18-55mm NIKKOR VR LensThe Nikon D3100 Digital SLR Camera is an affordable compact and lightweight photographic power-house. It features the all-purpose 18-55mm VR lens a high-resolution 14.2 MP CMOS sensor along with a feature set that's comprehensive yet easy to navigate - the intuitive onboard learn-as-you grow guide mode allows the photographer to understand what the 3100 can do quickly and easily. Capture beautiful pictures and amazing Full HD 1080p movies with sound and full-time autofocus. Availabilty: In Stock!7185Nikonhttp://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-350x350-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stockFree Shipping with Any Purchase!529.000.00799.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=647&BEFID=7185&aon=%5E1&MerchantID=475674&crawler_id=475674&dealId=-ZW6BMZqz6fbS-aULwga_g%3D%3D&url=http%3A%2F%2Fwww.fumfie.com%2Fproduct%2F343.5%2Fshopping-com%3F&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D3100+Digital+SLR+Camera+with+18-55mm+NIKKOR+VR+Lens&dlprc=529.0&crn=&istrsmrc=1&isathrsl=0&AR=1&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=1&cid=&semid1=&semid2=&IsLps=0&CC=1&SL=1&FS=1&code=&acode=658&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=FumFiehttp://img.shopping.com/cctool/merch_logos/475674.gif866 666 91985604.27http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_fumfie~MRD-475674~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSF343C5Nikon Nikon D3100 14.2MP Digital SLR Camera with 18-55mm f/3.5-5.6 AF-S DX VR, CamerasNikon D3100 14.2MP Digital SLR Camera with 18-55mm f/3.5-5.6 AF-S DX VR7185Nikonhttp://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-385x352-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stock549.000.00549.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=779&BEFID=7185&aon=%5E1&MerchantID=305814&crawler_id=305814&dealId=md1e9lD8vdOu4FHQfJqKng%3D%3D&url=http%3A%2F%2Fwww.electronics-expo.com%2Findex.php%3Fpage%3Ditem%26id%3DNIKD3100%26source%3DSideCar%26scpid%3D8%26scid%3Dscsho318727%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+Nikon+D3100+14.2MP+Digital+SLR+Camera+with+18-55mm+f%2F3.5-5.6+AF-S+DX+VR%2C+Cameras&dlprc=549.0&crn=&istrsmrc=1&isathrsl=0&AR=9&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=9&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=771&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Electronics Expohttp://img.shopping.com/cctool/merch_logos/305814.gif1-888-707-EXPO3713.90http://img.shopping.com/sc/mr/sdc_checks_4.gifhttp://www.shopping.com/xMR-store_electronics_expo~MRD-305814~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSNIKD3100Nikon D3100 14.2-Megapixel Digital SLR Camera With 18-55mm Zoom-Nikkor Lens, BlackSplit-second shutter response captures shots other cameras may have missed Helps eliminate the frustration of shutter delay! 14.2-megapixels for enlargements worth framing and hanging. Takes breathtaking 1080p HD movies. ISO sensitivity from 100-1600 for bright or dimly lit settings. 3.0in. color LCD for beautiful, wide-angle framing and viewing. In-camera image editing lets you retouch with no PC. Automatic scene modes include Child, Sports, Night Portrait and more. Accepts SDHC memory cards. Nikon D3100 14.2-Megapixel Digital SLR Camera With 18-55mm Zoom-Nikkor Lens, Black is one of many Digital SLR Cameras available through Office Depot. Made by Nikon.7185Nikonhttp://di109.shopping.com/images/di/79/59/75/61586e4446744359377244556a6b5932616177-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/79/59/75/61586e4446744359377244556a6b5932616177-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/79/59/75/61586e4446744359377244556a6b5932616177-250x250-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stock549.990.00699.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=698&BEFID=7185&aon=%5E1&MerchantID=467671&crawler_id=467671&dealId=yYuaXnDFtCY7rDUjkY2aaw%3D%3D&url=http%3A%2F%2Flink.mercent.com%2Fredirect.ashx%3Fmr%3AmerchantID%3DOfficeDepot%26mr%3AtrackingCode%3DCEC9669E-6ABC-E011-9F24-0019B9C043EB%26mr%3AtargetUrl%3Dhttp%3A%2F%2Fwww.officedepot.com%2Fa%2Fproducts%2F486292%2FNikon-D3100-142-Megapixel-Digital-SLR%2F%253fcm_mmc%253dMercent-_-Shopping-_-Cameras_and_Camcorders-_-486292&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D3100+14.2-Megapixel+Digital+SLR+Camera+With+18-55mm+Zoom-Nikkor+Lens%2C+Black&dlprc=549.99&crn=&istrsmrc=1&isathrsl=0&AR=10&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=10&cid=&semid1=&semid2=&IsLps=0&CC=1&SL=1&FS=1&code=&acode=690&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Office Depothttp://img.shopping.com/cctool/merch_logos/467671.gif1-800-GO-DEPOT1352.37http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_office_depot_4158555~MRD-467671~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS486292Nikon® D3100™ 14.2MP Digital SLR with 18-55mm LensThe Nikon D3100 DSLR will surprise you with its simplicity and impress you with superb results.7185Nikonhttp://di103.shopping.com/images/di/52/6c/35/36553743756954597348344d475a30326c7851-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di103.shopping.com/images/di/52/6c/35/36553743756954597348344d475a30326c7851-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di103.shopping.com/images/di/52/6c/35/36553743756954597348344d475a30326c7851-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stock549.996.05549.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=Rl56U7CuiTYsH4MGZ02lxQ%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D903483107%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C2%AE+D3100%E2%84%A2+14.2MP+Digital+SLR+with+18-55mm+Lens&dlprc=549.99&crn=&istrsmrc=0&isathrsl=0&AR=11&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=11&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=496&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS9614867Nikon D3100 SLR w/Nikon 18-55mm VR & 55-200mm VR Lenses14.2 Megapixels3" LCDLive ViewHD 1080p Video w/ Sound & Autofocus11-point Autofocus3 Frames per Second ShootingISO 100 to 3200 (Expand to 12800-Hi2)Self Cleaning SensorEXPEED 2, Image Processing EngineScene Recognition System7185Nikonhttp://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-345x345-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stock695.000.00695.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=371&BEFID=7185&aon=%5E1&MerchantID=487342&crawler_id=487342&dealId=huS6xZKDKaKMTMP71eI6DA%3D%3D&url=http%3A%2F%2Fwww.rythercamera.com%2Fcatalog%2Fproduct_info.php%3Fcsv%3Dsh%26products_id%3D32983%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D3100+SLR+w%2FNikon+18-55mm+VR+%26+55-200mm+VR+Lenses&dlprc=695.0&crn=&istrsmrc=0&isathrsl=0&AR=15&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=15&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=379&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RytherCamera.comhttp://img.shopping.com/cctool/merch_logos/487342.gif1-877-644-75930http://img.shopping.com/sc/glb/flag/US.gifUS32983Nikon COOLPIX S203 Digital Camera10 Megapixel, Ultra-Compact Camera, 2.5 in. LCD Screen, 3x Optical Zoom, With Video Capability, Weight: 0.23 lb.With 10.34 mega pixel, electronic VR vibration reduction, 5-level brightness adjustment, 3x optical zoom, and TFT LCD, Nikon Coolpix s203 fulfills all the demands of any photographer. The digital camera has an inbuilt memory of 44MB and an external memory slot made for all kinds of SD (Secure Digital) cards.http://di1.shopping.com/images/pi/c4/ef/1b/95397883-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-500x499-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=20139.00139.00http://www.shopping.com/Nikon-Coolpix-S203/prices~linkin_id-7000610http://www.shopping.com/Nikon-Coolpix-S203/info~linkin_id-7000610Nikon Coolpix S203 Digital Camera (Red)With 10.34 mega pixel, electronic VR vibration reduction, 5-level brightness adjustment, 3x optical zoom, and TFT LCD, Nikon Coolpix s203 fulfills all the demands of any photographer. The digital camera has an inbuilt memory of 44MB and an external memory slot made for all kinds of SD (Secure Digital) cards.7185Nikonhttp://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stockFantastic prices with ease & comfort of Amazon.com!139.009.50139.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=566&BEFID=7185&aon=%5E1&MerchantID=301531&crawler_id=1903313&dealId=sBd2JnIEPM-A_lBAM1RZgQ%3D%3D&url=http%3A%2F%2Fwww.amazon.com%2Fdp%2FB002T964IM%2Fref%3Dasc_df_B002T964IM1751618%3Fsmid%3DA22UHVNXG98FAT%26tag%3Ddealtime-ce-mp01feed-20%26linkCode%3Dasn%26creative%3D395105%26creativeASIN%3DB002T964IM&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+Coolpix+S203+Digital+Camera+%28Red%29&dlprc=139.0&crn=&istrsmrc=0&isathrsl=0&AR=63&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=95397883&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=63&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=518&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Amazon Marketplacehttp://img.shopping.com/cctool/merch_logos/301531.gif2132.73http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_amazon_marketplace_9689~MRD-301531~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSB002T964IMNikon S3100 Digital Camera14.5 Megapixel, Compact Camera, 2.7 in. LCD Screen, 5x Optical Zoom, With High Definition Video, Weight: 0.23 lb.This digital camera features a wide-angle optical Zoom-NIKKOR glass lens that allows you to capture anything from landscapes to portraits to action shots. The high-definition movie mode with one-touch recording makes it easy to capture video clips.http://di1.shopping.com/images/pi/66/2d/33/106834268-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-507x387-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=312.00http://img.shopping.com/sc/pr/sdc_stars_sm_2.gifhttp://www.shopping.com/nikon-s3100/reviews~linkin_id-700061099.95134.95http://www.shopping.com/nikon-s3100/prices~linkin_id-7000610http://www.shopping.com/nikon-s3100/info~linkin_id-7000610CoolPix S3100 14 Megapixel Compact Digital Camera- RedNikon Coolpix S3100 - Digital camera - compact - 14.0 Mpix - optical zoom: 5 x - supported memory: SD, SDXC, SDHC - red7185Nikonhttp://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stockGet 30 days FREE SHIPPING w/ ShipVantage119.956.95139.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=UUyGoqV8r0-xrkn-rnGNbg%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBJpFHJ3Yx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmDAJeU1oyGG0GcBdhGwUGCAVqYF9SO0xSN1sZdmA7dmMdBQAJB24qX1NbQxI6AjA2ME5dVFULPDsGPFcQTTdaLTA6SR0OFlQvPAwMDxYcYlxIVkcoLTcCDA%3D%3D%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=CoolPix+S3100+14+Megapixel+Compact+Digital+Camera-+Red&dlprc=119.95&crn=&istrsmrc=1&isathrsl=0&AR=28&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=28&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=0&code=&acode=583&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00337013000COOLPIX S3100 PinkNikon Coolpix S3100 - Digital camera - compact - 14.0 Mpix - optical zoom: 5 x - supported memory: SD, SDXC, SDHC - pink7185Nikonhttp://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stockGet 30 days FREE SHIPPING w/ ShipVantage119.956.95139.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=X87AwXlW1dXoMXk4QQDToQ%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBJpFHJxYx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmb2JcUFxDEGsPc3QDEkFZVQ0WFhdRW0MWbgYWDlxzdGMdAVQWRi0xDAwPFhw9TSobb05eWVVYKzsLTFVVQi5RICs3SA8MU1s2MQQKD1wf%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=COOLPIX+S3100+Pink&dlprc=119.95&crn=&istrsmrc=1&isathrsl=0&AR=31&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=31&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=0&code=&acode=583&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00337015000Nikon Coolpix S3100 14.0 MP Digital Camera - SilverNikon Coolpix S3100 14.0 MP Digital Camera - Silver7185Nikonhttp://di109.shopping.com/images/di/6e/76/46/776e70664134726c413144626b736473613077-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/6e/76/46/776e70664134726c413144626b736473613077-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/6e/76/46/776e70664134726c413144626b736473613077-270x270-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stock109.970.00109.97http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=803&BEFID=7185&aon=%5E&MerchantID=475774&crawler_id=475774&dealId=nvFwnpfA4rlA1Dbksdsa0w%3D%3D&url=http%3A%2F%2Fwww.thewiz.com%2Fcatalog%2Fproduct.jsp%3FmodelNo%3DS3100SILVER%26gdftrk%3DgdfV2677_a_7c996_a_7c4049_a_7c26262&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+Coolpix+S3100+14.0+MP+Digital+Camera+-+Silver&dlprc=109.97&crn=&istrsmrc=0&isathrsl=0&AR=33&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=33&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=797&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=TheWiz.comhttp://img.shopping.com/cctool/merch_logos/475774.gif877-542-69880http://img.shopping.com/sc/glb/flag/US.gifUS26262Nikon� COOLPIX� S3100 14MP Digital Camera (Silver)The Nikon COOLPIX S3100 is the easy way to share your life and stay connected.7185Nikonhttp://di102.shopping.com/images/di/35/47/74/614e324e6572794b7770732d5365326c2d3467-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di102.shopping.com/images/di/35/47/74/614e324e6572794b7770732d5365326c2d3467-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di102.shopping.com/images/di/35/47/74/614e324e6572794b7770732d5365326c2d3467-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stock119.996.05119.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=5GtaN2NeryKwps-Se2l-4g%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D848064082%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C3%AF%C2%BF%C2%BD+COOLPIX%C3%AF%C2%BF%C2%BD+S3100+14MP+Digital+Camera+%28Silver%29&dlprc=119.99&crn=&istrsmrc=0&isathrsl=0&AR=37&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=37&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=509&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS10101095COOLPIX S3100 YellowNikon Coolpix S3100 - Digital camera - compact - 14.0 Mpix - optical zoom: 5 x - supported memory: SD, SDXC, SDHC - yellow7185Nikonhttp://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stockGet 30 days FREE SHIPPING w/ ShipVantage119.956.95139.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=a43m0RXulX38zCnQjU59jw%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBJpFHJwYx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmb2JcUFxDEGoPc3QDEkFZVQ0WFhdRW0MWbgYWDlxzdGMdAVQWRi0xDAwPFhw9TSobb05eWVVYKzsLTFVVQi5RICs3SA8MU1s2MQQKD1wf%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=COOLPIX+S3100+Yellow&dlprc=119.95&crn=&istrsmrc=1&isathrsl=0&AR=38&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=38&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=0&code=&acode=583&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00337014000Nikon D90 Digital Camera12.3 Megapixel, Point and Shoot Camera, 3 in. LCD Screen, With Video Capability, Weight: 1.36 lb.Untitled Document Nikon D90 SLR Digital Camera With 28-80mm 75-300mm Lens Kit The Nikon D90 SLR Digital Camera, with its 12.3-megapixel DX-format CMOS, 3" High resolution LCD display, Scene Recognition System, Picture Control, Active D-Lighting, and one-button Live View, provides photo enthusiasts with the image quality and performance they need to pursue their own vision while still being intuitive enough for use as an everyday camera.http://di1.shopping.com/images/pi/52/fb/d3/99671132-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-499x255-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=475.00http://img.shopping.com/sc/pr/sdc_stars_sm_5.gifhttp://www.shopping.com/Nikon-D90-with-18-270mm-Lens/reviews~linkin_id-7000610689.002299.00http://www.shopping.com/Nikon-D90-with-18-270mm-Lens/prices~linkin_id-7000610http://www.shopping.com/Nikon-D90-with-18-270mm-Lens/info~linkin_id-7000610Nikon® D90 12.3MP Digital SLR Camera (Body Only)The Nikon D90 will make you rethink what a digital SLR camera can achieve.7185Nikonhttp://di106.shopping.com/images/di/47/55/35/4a4a6b70554178653548756a4237666b774141-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di106.shopping.com/images/di/47/55/35/4a4a6b70554178653548756a4237666b774141-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di106.shopping.com/images/di/47/55/35/4a4a6b70554178653548756a4237666b774141-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stock1015.996.051015.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=GU5JJkpUAxe5HujB7fkwAA%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D851830266%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C2%AE+D90+12.3MP+Digital+SLR+Camera+%28Body+Only%29&dlprc=1015.99&crn=&istrsmrc=0&isathrsl=0&AR=14&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=14&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=496&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS10148659Nikon D90 SLR Digital Camera (Camera Body)The Nikon D90 SLR Digital Camera with its 12.3-megapixel DX-format CCD 3" High resolution LCD display Scene Recognition System Picture Control Active D-Lighting and one-button Live View provides photo enthusiasts with the image quality and performance they need to pursue their own vision while still being intuitive enough for use as an everyday camera. In addition the D90 introduces the D-Movie mode allowing for the first time an interchangeable lens SLR camera that is capable of recording 720p HD movie clips. Availabilty: In Stock7185Nikonhttp://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-350x350-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stockFree Shipping with Any Purchase!689.000.00900.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=647&BEFID=7185&aon=%5E1&MerchantID=475674&crawler_id=475674&dealId=XhURuSC-spBbTIDfo4qfzQ%3D%3D&url=http%3A%2F%2Fwww.fumfie.com%2Fproduct%2F169.5%2Fshopping-com%3F&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+SLR+Digital+Camera+%28Camera+Body%29&dlprc=689.0&crn=&istrsmrc=1&isathrsl=0&AR=16&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=16&cid=&semid1=&semid2=&IsLps=0&CC=1&SL=1&FS=1&code=&acode=658&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=FumFiehttp://img.shopping.com/cctool/merch_logos/475674.gif866 666 91985604.27http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_fumfie~MRD-475674~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSF169C5Nikon D90 SLR w/Nikon 18-105mm VR & 55-200mm VR Lenses12.3 MegapixelDX Format CMOS Sensor3" VGA LCD DisplayLive ViewSelf Cleaning SensorD-Movie ModeHigh Sensitivity (ISO 3200)4.5 fps BurstIn-Camera Image Editing7185Nikonhttp://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stock1189.000.001189.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=371&BEFID=7185&aon=%5E1&MerchantID=487342&crawler_id=487342&dealId=o0Px_XLWDbrxAYRy3rCmyQ%3D%3D&url=http%3A%2F%2Fwww.rythercamera.com%2Fcatalog%2Fproduct_info.php%3Fcsv%3Dsh%26products_id%3D30619%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+SLR+w%2FNikon+18-105mm+VR+%26+55-200mm+VR+Lenses&dlprc=1189.0&crn=&istrsmrc=0&isathrsl=0&AR=20&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=20&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=379&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RytherCamera.comhttp://img.shopping.com/cctool/merch_logos/487342.gif1-877-644-75930http://img.shopping.com/sc/glb/flag/US.gifUS30619Nikon D90 12.3 Megapixel Digital SLR Camera (Body Only)Fusing 12.3 megapixel image quality and a cinematic 24fps D-Movie Mode, the Nikon D90 exceeds the demands of passionate photographers. Coupled with Nikon's EXPEED image processing technologies and NIKKOR optics, breathtaking image fidelity is assured. Combined with fast 0.15ms power-up and split-second 65ms shooting lag, dramatic action and decisive moments are captured easily. Effective 4-frequency, ultrasonic sensor cleaning frees image degrading dust particles from the sensor's optical low pass filter.7185Nikonhttp://di110.shopping.com/images/di/34/48/67/62574a534a3873736749663842304d58497741-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di110.shopping.com/images/di/34/48/67/62574a534a3873736749663842304d58497741-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di110.shopping.com/images/di/34/48/67/62574a534a3873736749663842304d58497741-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stockFREE FEDEX 2-3 DAY DELIVERY899.950.00899.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=269&BEFID=7185&aon=%5E&MerchantID=9296&crawler_id=811558&dealId=4HgbWJSJ8ssgIf8B0MXIwA%3D%3D&url=http%3A%2F%2Fwww.pcnation.com%2Foptics-gallery%2Fdetails.asp%3Faffid%3D305%26item%3D2N145P&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+12.3+Megapixel+Digital+SLR+Camera+%28Body+Only%29&dlprc=899.95&crn=&istrsmrc=1&isathrsl=0&AR=21&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=21&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=257&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=PCNationhttp://img.shopping.com/cctool/merch_logos/9296.gif800-470-707916224.43http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_pcnation_9689~MRD-9296~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS2N145PNikon D90 12.3MP Digital SLR Camera (Body Only)Fusing 12.3-megapixel image quality inherited from the award-winning D300 with groundbreaking features, the D90's breathtaking, low-noise image quality is further advanced with EXPEED image processing. Split-second shutter response and continuous shooting at up to 4.5 frames-per-second provide the power to capture fast action and precise moments perfectly, while Nikon's exclusive Scene Recognition System contributes to faster 11-area autofocus performance, finer white balance detection and more. The D90 delivers the control passionate photographers demand, utilizing comprehensive exposure functions and the intelligence of 3D Color Matrix Metering II. Stunning results come to life on a 3-inch 920,000-dot color LCD monitor, providing accurate image review, Live View composition and brilliant playback of the D90's cinematic-quality 24-fps HD D-Movie mode.7185Nikonhttp://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stockFantastic prices with ease & comfort of Amazon.com!780.000.00780.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=566&BEFID=7185&aon=%5E1&MerchantID=301531&crawler_id=1903313&dealId=UNDa3uMDZXOnvD_7sTILYg%3D%3D&url=http%3A%2F%2Fwww.amazon.com%2Fdp%2FB001ET5U92%2Fref%3Dasc_df_B001ET5U921751618%3Fsmid%3DAHF4SYKP09WBH%26tag%3Ddealtime-ce-mp01feed-20%26linkCode%3Dasn%26creative%3D395105%26creativeASIN%3DB001ET5U92&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+12.3MP+Digital+SLR+Camera+%28Body+Only%29&dlprc=780.0&crn=&istrsmrc=0&isathrsl=0&AR=29&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=29&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=520&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Amazon Marketplacehttp://img.shopping.com/cctool/merch_logos/301531.gif2132.73http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_amazon_marketplace_9689~MRD-301531~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSB001ET5U92Nikon D90 Digital Camera with 18-105mm lens12.9 Megapixel, SLR Camera, 3 in. LCD Screen, 5.8x Optical Zoom, With Video Capability, Weight: 2.3 lb.Its 12.3 megapixel DX-format CMOS image sensor and EXPEED image processing system offer outstanding image quality across a wide ISO light sensitivity range. Live View mode lets you compose and shoot via the high-resolution 3-inch LCD monitor, and an advanced Scene Recognition System and autofocus performance help capture images with astounding accuracy. Movies can be shot in Motion JPEG format using the D-Movie function. The camera’s large image sensor ensures exceptional movie image quality and you can create dramatic effects by shooting with a wide range of interchangeable NIKKOR lenses, from wide-angle to macro to fisheye, or by adjusting the lens aperture and experimenting with depth-of-field. The D90 – designed to fuel your passion for photography.http://di1.shopping.com/images/pi/57/6a/4f/70621646-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-490x489-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5324.81http://img.shopping.com/sc/pr/sdc_stars_sm_5.gifhttp://www.shopping.com/Nikon-D90-with-18-105mm-lens/reviews~linkin_id-7000610849.951599.95http://www.shopping.com/Nikon-D90-with-18-105mm-lens/prices~linkin_id-7000610http://www.shopping.com/Nikon-D90-with-18-105mm-lens/info~linkin_id-7000610Nikon D90 18-105mm VR LensThe Nikon D90 SLR Digital Camera with its 12.3-megapixel DX-format CMOS 3" High resolution LCD display Scene Recognition System Picture Control Active D-Lighting and one-button Live View prov7185Nikonhttp://di111.shopping.com/images/di/33/6f/35/6531566768674a5066684c7654314a464b5441-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/33/6f/35/6531566768674a5066684c7654314a464b5441-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/33/6f/35/6531566768674a5066684c7654314a464b5441-260x260-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stock849.950.00849.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=419&BEFID=7185&aon=%5E1&MerchantID=9390&crawler_id=1905054&dealId=3o5e1VghgJPfhLvT1JFKTA%3D%3D&url=http%3A%2F%2Fwww.ajrichard.com%2FNikon-D90-18-105mm-VR-Lens%2Fp-292%3Frefid%3DShopping%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+18-105mm+VR+Lens&dlprc=849.95&crn=&istrsmrc=0&isathrsl=0&AR=2&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=2&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=425&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=AJRichardhttp://img.shopping.com/cctool/merch_logos/9390.gif1-888-871-125631244.48http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_ajrichard~MRD-9390~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS292Nikon D90 SLR w/Nikon 18-105mm VR Lens12.3 MegapixelDX Format CMOS Sensor3" VGA LCD DisplayLive ViewSelf Cleaning SensorD-Movie ModeHigh Sensitivity (ISO 3200)4.5 fps BurstIn-Camera Image Editing7185Nikonhttp://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stock909.000.00909.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=371&BEFID=7185&aon=%5E1&MerchantID=487342&crawler_id=487342&dealId=_lYWj_jbwfsSkfcwUcDuww%3D%3D&url=http%3A%2F%2Fwww.rythercamera.com%2Fcatalog%2Fproduct_info.php%3Fcsv%3Dsh%26products_id%3D30971%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+SLR+w%2FNikon+18-105mm+VR+Lens&dlprc=909.0&crn=&istrsmrc=0&isathrsl=0&AR=3&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=3&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=379&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RytherCamera.comhttp://img.shopping.com/cctool/merch_logos/487342.gif1-877-644-75930http://img.shopping.com/sc/glb/flag/US.gifUS3097125448/D90 12.3 Megapixel Digital Camera 18-105mm Zoom Lens w/ 3" Screen - BlackNikon D90 - Digital camera - SLR - 12.3 Mpix - Nikon AF-S DX 18-105mm lens - optical zoom: 5.8 x - supported memory: SD, SDHC7185Nikonhttp://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stockGet 30 days FREE SHIPPING w/ ShipVantage1199.008.201199.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=1KCclCGuWvty2XKU9skadg%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBRtFXpzYx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmb2JcVlhCGGkPc3QDEkFZVQ0WFhdRW0MWbgYWDlxzdGMdAVQWRi0xDAwPFhw9TSobb05eWVVYKzsLTFVVQi5RICs3SA8MU1s2MQQKD1wf%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=25448%2FD90+12.3+Megapixel+Digital+Camera+18-105mm+Zoom+Lens+w%2F+3%22+Screen+-+Black&dlprc=1199.0&crn=&istrsmrc=1&isathrsl=0&AR=4&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=4&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=586&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00353197000Nikon® D90 12.3MP Digital SLR with 18-105mm LensThe Nikon D90 will make you rethink what a digital SLR camera can achieve.7185Nikonhttp://di101.shopping.com/images/di/33/2d/56/4f53665656354a6f37486c41346b4a74616e41-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di101.shopping.com/images/di/33/2d/56/4f53665656354a6f37486c41346b4a74616e41-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di101.shopping.com/images/di/33/2d/56/4f53665656354a6f37486c41346b4a74616e41-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stock1350.996.051350.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=3-VOSfVV5Jo7HlA4kJtanA%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D982673361%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C2%AE+D90+12.3MP+Digital+SLR+with+18-105mm+Lens&dlprc=1350.99&crn=&istrsmrc=0&isathrsl=0&AR=5&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=5&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=496&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS11148905Nikon D90 Kit 12.3-megapixel Digital SLR with 18-105mm VR LensPhotographers, take your passion further!Now is the time for new creativity, and to rethink what a digital SLR camera can achieve. It's time for the D90, a camera with everything you would expect from Nikon's next-generation D-SLRs, and some unexpected surprises, as well. The stunning image quality is inherited from the D300, Nikon's DX-format flagship. The D90 also has Nikon's unmatched ergonomics and high performance, and now takes high-quality movies with beautifully cinematic results. The world of photography has changed, and with the D90 in your hands, it's time to make your own rules.AF-S DX NIKKOR 18-105mm f/3.5-5.6G ED VR LensWide-ratio 5.8x zoom Compact, versatile and ideal for a broad range of shooting situations, ranging from interiors and landscapes to beautiful portraits� a perfect everyday zoom. Nikon VR (Vibration Reduction) image stabilization Vibration Reduction is engineered specifically for each VR NIKKOR lens and enables handheld shooting at up to 3 shutter speeds slower than would7185Nikonhttp://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-300x232-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stockShipping Included!1050.000.001199.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=135&BEFID=7185&aon=%5E1&MerchantID=313162&crawler_id=313162&dealId=kQnB6rS4AjN5dx5h2_631g%3D%3D&url=http%3A%2F%2Fonecall.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1pZSxNoWHFwLx8GTAICa2ZeH1sPXTZLNzRpAh1HR0BxPQEGCBJNMhFHUElsFCFCVkVTTHAcBggEHQ4aHXNpGERGH3RQODsbAgdechJtbBt8fx8JAwhtZFAzJj1oGgIWCxRlNyFOUV9UUGIxBgo0T0IyTSYqJ0RWHw4QPCIBAAQXRGMDICg6TllZVBhh%26nAID%3D13736960&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+Kit+12.3-megapixel+Digital+SLR+with+18-105mm+VR+Lens&dlprc=1050.0&crn=&istrsmrc=1&isathrsl=0&AR=6&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=6&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=1&code=&acode=143&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=OneCallhttp://img.shopping.com/cctool/merch_logos/313162.gif1.800.398.07661804.44http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_onecall_9689~MRD-313162~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS92826Price rangehttp://www.shopping.com/digital-cameras/nikon/products?oq=nikon&linkin_id=7000610$24 - $4012http://www.shopping.com/digital-cameras/nikon/products?minPrice=24&maxPrice=4012&linkin_id=7000610$4012 - $7999http://www.shopping.com/digital-cameras/nikon/products?minPrice=4012&maxPrice=7999&linkin_id=7000610Brandhttp://www.shopping.com/digital-cameras/nikon/products~all-9688-brand~MS-1?oq=nikon&linkin_id=7000610Nikonhttp://www.shopping.com/digital-cameras/nikon+brand-nikon/products~linkin_id-7000610Cranehttp://www.shopping.com/digital-cameras/nikon+9688-brand-crane/products~linkin_id-7000610Ikelitehttp://www.shopping.com/digital-cameras/nikon+ikelite/products~linkin_id-7000610Bowerhttp://www.shopping.com/digital-cameras/nikon+bower/products~linkin_id-7000610FUJIFILMhttp://www.shopping.com/digital-cameras/nikon+brand-fuji/products~linkin_id-7000610Storehttp://www.shopping.com/digital-cameras/nikon/products~all-store~MS-1?oq=nikon&linkin_id=7000610Amazon Marketplacehttp://www.shopping.com/digital-cameras/nikon+store-amazon-marketplace-9689/products~linkin_id-7000610Amazonhttp://www.shopping.com/digital-cameras/nikon+store-amazon/products~linkin_id-7000610Adoramahttp://www.shopping.com/digital-cameras/nikon+store-adorama/products~linkin_id-7000610J&R Music and Computer Worldhttp://www.shopping.com/digital-cameras/nikon+store-j-r-music-and-computer-world/products~linkin_id-7000610RytherCamera.comhttp://www.shopping.com/digital-cameras/nikon+store-rythercamera-com/products~linkin_id-7000610Resolutionhttp://www.shopping.com/digital-cameras/nikon/products~all-21885-resolution~MS-1?oq=nikon&linkin_id=7000610Under 4 Megapixelhttp://www.shopping.com/digital-cameras/nikon+under-4-megapixel/products~linkin_id-7000610At least 5 Megapixelhttp://www.shopping.com/digital-cameras/nikon+5-megapixel-digital-cameras/products~linkin_id-7000610At least 6 Megapixelhttp://www.shopping.com/digital-cameras/nikon+6-megapixel-digital-cameras/products~linkin_id-7000610At least 7 Megapixelhttp://www.shopping.com/digital-cameras/nikon+7-megapixel-digital-cameras/products~linkin_id-7000610At least 8 Megapixelhttp://www.shopping.com/digital-cameras/nikon+8-megapixel-digital-cameras/products~linkin_id-7000610Featureshttp://www.shopping.com/digital-cameras/nikon/products~all-32804-features~MS-1?oq=nikon&linkin_id=7000610Shockproofhttp://www.shopping.com/digital-cameras/nikon+32804-features-shockproof/products~linkin_id-7000610Waterproofhttp://www.shopping.com/digital-cameras/nikon+32804-features-waterproof/products~linkin_id-7000610Freezeproofhttp://www.shopping.com/digital-cameras/nikon+32804-features-freezeproof/products~linkin_id-7000610Dust proofhttp://www.shopping.com/digital-cameras/nikon+32804-features-dust-proof/products~linkin_id-7000610Image Stabilizationhttp://www.shopping.com/digital-cameras/nikon+32804-features-image-stabilization/products~linkin_id-7000610hybriddigital camerag1sonycameracanonnikonkodak digital camerakodaksony cybershotkodak easyshare digital cameranikon coolpixolympuspink digital cameracanon powershotsax-js-1.2.4/examples/test.html000066400000000000000000000002121312300117100163660ustar00rootroot00000000000000 testing the parser

hello sax-js-1.2.4/examples/test.xml000066400000000000000000001443121312300117100162340ustar00rootroot00000000000000 ]> Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  sax-js-1.2.4/lib/000077500000000000000000000000001312300117100134565ustar00rootroot00000000000000sax-js-1.2.4/lib/sax.js000066400000000000000000001250251312300117100146140ustar00rootroot00000000000000;(function (sax) { // wrapper for non-node envs sax.parser = function (strict, opt) { return new SAXParser(strict, opt) } sax.SAXParser = SAXParser sax.SAXStream = SAXStream sax.createStream = createStream // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns. // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)), // since that's the earliest that a buffer overrun could occur. This way, checks are // as rare as required, but as often as necessary to ensure never crossing this bound. // Furthermore, buffers are only tested at most once per write(), so passing a very // large string into write() might have undesirable effects, but this is manageable by // the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme // edge case, result in creating at most one complete copy of the string passed in. // Set to Infinity to have unlimited buffers. sax.MAX_BUFFER_LENGTH = 64 * 1024 var buffers = [ 'comment', 'sgmlDecl', 'textNode', 'tagName', 'doctype', 'procInstName', 'procInstBody', 'entity', 'attribName', 'attribValue', 'cdata', 'script' ] sax.EVENTS = [ 'text', 'processinginstruction', 'sgmldeclaration', 'doctype', 'comment', 'opentagstart', 'attribute', 'opentag', 'closetag', 'opencdata', 'cdata', 'closecdata', 'error', 'end', 'ready', 'script', 'opennamespace', 'closenamespace' ] function SAXParser (strict, opt) { if (!(this instanceof SAXParser)) { return new SAXParser(strict, opt) } var parser = this clearBuffers(parser) parser.q = parser.c = '' parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH parser.opt = opt || {} parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase' parser.tags = [] parser.closed = parser.closedRoot = parser.sawRoot = false parser.tag = parser.error = null parser.strict = !!strict parser.noscript = !!(strict || parser.opt.noscript) parser.state = S.BEGIN parser.strictEntities = parser.opt.strictEntities parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES) parser.attribList = [] // namespaces form a prototype chain. // it always points at the current tag, // which protos to its parent tag. if (parser.opt.xmlns) { parser.ns = Object.create(rootNS) } // mostly just for error reporting parser.trackPosition = parser.opt.position !== false if (parser.trackPosition) { parser.position = parser.line = parser.column = 0 } emit(parser, 'onready') } if (!Object.create) { Object.create = function (o) { function F () {} F.prototype = o var newf = new F() return newf } } if (!Object.keys) { Object.keys = function (o) { var a = [] for (var i in o) if (o.hasOwnProperty(i)) a.push(i) return a } } function checkBufferLength (parser) { var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10) var maxActual = 0 for (var i = 0, l = buffers.length; i < l; i++) { var len = parser[buffers[i]].length if (len > maxAllowed) { // Text/cdata nodes can get big, and since they're buffered, // we can get here under normal conditions. // Avoid issues by emitting the text node now, // so at least it won't get any bigger. switch (buffers[i]) { case 'textNode': closeText(parser) break case 'cdata': emitNode(parser, 'oncdata', parser.cdata) parser.cdata = '' break case 'script': emitNode(parser, 'onscript', parser.script) parser.script = '' break default: error(parser, 'Max buffer length exceeded: ' + buffers[i]) } } maxActual = Math.max(maxActual, len) } // schedule the next check for the earliest possible buffer overrun. var m = sax.MAX_BUFFER_LENGTH - maxActual parser.bufferCheckPosition = m + parser.position } function clearBuffers (parser) { for (var i = 0, l = buffers.length; i < l; i++) { parser[buffers[i]] = '' } } function flushBuffers (parser) { closeText(parser) if (parser.cdata !== '') { emitNode(parser, 'oncdata', parser.cdata) parser.cdata = '' } if (parser.script !== '') { emitNode(parser, 'onscript', parser.script) parser.script = '' } } SAXParser.prototype = { end: function () { end(this) }, write: write, resume: function () { this.error = null; return this }, close: function () { return this.write(null) }, flush: function () { flushBuffers(this) } } var Stream try { Stream = require('stream').Stream } catch (ex) { Stream = function () {} } var streamWraps = sax.EVENTS.filter(function (ev) { return ev !== 'error' && ev !== 'end' }) function createStream (strict, opt) { return new SAXStream(strict, opt) } function SAXStream (strict, opt) { if (!(this instanceof SAXStream)) { return new SAXStream(strict, opt) } Stream.apply(this) this._parser = new SAXParser(strict, opt) this.writable = true this.readable = true var me = this this._parser.onend = function () { me.emit('end') } this._parser.onerror = function (er) { me.emit('error', er) // if didn't throw, then means error was handled. // go ahead and clear error, so we can write again. me._parser.error = null } this._decoder = null streamWraps.forEach(function (ev) { Object.defineProperty(me, 'on' + ev, { get: function () { return me._parser['on' + ev] }, set: function (h) { if (!h) { me.removeAllListeners(ev) me._parser['on' + ev] = h return h } me.on(ev, h) }, enumerable: true, configurable: false }) }) } SAXStream.prototype = Object.create(Stream.prototype, { constructor: { value: SAXStream } }) SAXStream.prototype.write = function (data) { if (typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function' && Buffer.isBuffer(data)) { if (!this._decoder) { var SD = require('string_decoder').StringDecoder this._decoder = new SD('utf8') } data = this._decoder.write(data) } this._parser.write(data.toString()) this.emit('data', data) return true } SAXStream.prototype.end = function (chunk) { if (chunk && chunk.length) { this.write(chunk) } this._parser.end() return true } SAXStream.prototype.on = function (ev, handler) { var me = this if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) { me._parser['on' + ev] = function () { var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments) args.splice(0, 0, ev) me.emit.apply(me, args) } } return Stream.prototype.on.call(me, ev, handler) } // this really needs to be replaced with character classes. // XML allows all manner of ridiculous numbers and digits. var CDATA = '[CDATA[' var DOCTYPE = 'DOCTYPE' var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace' var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/' var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE } // http://www.w3.org/TR/REC-xml/#NT-NameStartChar // This implementation works on strings, a single character at a time // as such, it cannot ever support astral-plane characters (10000-EFFFF) // without a significant breaking change to either this parser, or the // JavaScript language. Implementation of an emoji-capable xml parser // is left as an exercise for the reader. 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]/ 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-]/ 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]/ 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-]/ function isWhitespace (c) { return c === ' ' || c === '\n' || c === '\r' || c === '\t' } function isQuote (c) { return c === '"' || c === '\'' } function isAttribEnd (c) { return c === '>' || isWhitespace(c) } function isMatch (regex, c) { return regex.test(c) } function notMatch (regex, c) { return !isMatch(regex, c) } var S = 0 sax.STATE = { BEGIN: S++, // leading byte order mark or whitespace BEGIN_WHITESPACE: S++, // leading whitespace TEXT: S++, // general stuff TEXT_ENTITY: S++, // & and such. OPEN_WAKA: S++, // < SGML_DECL: S++, // SCRIPT: S++, // ', expect: [ [ 'opentagstart', { name: 'xml', attributes: {} } ], [ 'opentag', { name: 'xml', attributes: {}, isSelfClosing: false } ], [ 'opentagstart', { name: 'script', attributes: {} } ], [ 'opentag', { name: 'script', attributes: {}, isSelfClosing: false } ], [ 'text', 'hello world' ], [ 'closetag', 'script' ], [ 'closetag', 'xml' ] ], strict: false, opt: { lowercasetags: true, noscript: true } }) require(__dirname).test({ xml: '', expect: [ [ 'opentagstart', { name: 'xml', attributes: {} } ], [ 'opentag', { name: 'xml', attributes: {}, isSelfClosing: false } ], [ 'opentagstart', { name: 'script', attributes: {} } ], [ 'opentag', { name: 'script', attributes: {}, isSelfClosing: false } ], [ 'opencdata', undefined ], [ 'cdata', 'hello world' ], [ 'closecdata', undefined ], [ 'closetag', 'script' ], [ 'closetag', 'xml' ] ], strict: false, opt: { lowercasetags: true, noscript: true } }) sax-js-1.2.4/test/issue-84.js000066400000000000000000000007231312300117100156100ustar00rootroot00000000000000// https://github.com/isaacs/sax-js/issues/49 require(__dirname).test({ xml: 'body', expect: [ [ 'processinginstruction', { name: 'has', body: 'unbalanced "quotes' } ], [ 'opentagstart', { name: 'xml', attributes: {} } ], [ 'opentag', { name: 'xml', attributes: {}, isSelfClosing: false } ], [ 'text', 'body' ], [ 'closetag', 'xml' ] ], strict: false, opt: { lowercasetags: true, noscript: true } }) sax-js-1.2.4/test/issue-86.js000066400000000000000000000022541312300117100156130ustar00rootroot00000000000000require(__dirname).test({ xml: 'abcdeabcdey') parser.write(xml).close() sax-js-1.2.4/test/opentagstart.js000066400000000000000000000024241312300117100167420ustar00rootroot00000000000000require(__dirname).test({ xml: "", expect: [ [ 'opentagstart', { name: 'root', ns: {}, attributes: {} } ], [ 'attribute', { name: 'length', value: '12345', prefix: '', local: 'length', uri: '' } ], [ 'opentag', { name: 'root', prefix: '', local: 'root', uri: '', attributes: { length: { name: 'length', value: '12345', prefix: '', local: 'length', uri: '' } }, ns: {}, isSelfClosing: false } ], [ 'closetag', 'root' ] ], strict: true, opt: { xmlns: true } }) require(__dirname).test({ xml: "", expect: [ [ 'opentagstart', { name: 'root', attributes: {} } ], [ 'attribute', { name: 'length', value: '12345' } ], [ 'opentag', { name: 'root', attributes: { length: '12345' }, isSelfClosing: false } ], [ 'closetag', 'root' ] ], strict: true }) sax-js-1.2.4/test/parser-position.js000066400000000000000000000016701312300117100173670ustar00rootroot00000000000000var sax = require('../lib/sax') var tap = require('tap') function testPosition (chunks, expectedEvents) { var parser = sax.parser() expectedEvents.forEach(function (expectation) { parser['on' + expectation[0]] = function () { for (var prop in expectation[1]) { tap.equal(parser[prop], expectation[1][prop]) } } }) chunks.forEach(function (chunk) { parser.write(chunk) }) } testPosition(['

abcdefgh
'], [ [ 'opentagstart', { position: 5, startTagPosition: 1 } ], [ 'opentag', { position: 5, startTagPosition: 1 } ], [ 'text', { position: 19, startTagPosition: 14 } ], [ 'closetag', { position: 19, startTagPosition: 14 } ] ]) testPosition(['
abcde', 'fgh
'], [ ['opentagstart', { position: 5, startTagPosition: 1 }], ['opentag', { position: 5, startTagPosition: 1 }], ['text', { position: 19, startTagPosition: 14 }], ['closetag', { position: 19, startTagPosition: 14 }] ]) sax-js-1.2.4/test/script-close-better.js000066400000000000000000000011751312300117100201230ustar00rootroot00000000000000require(__dirname).test({ xml: "", expect: [ ['opentagstart', {'name': 'HTML', 'attributes': {}}], ['opentag', {'name': 'HTML', 'attributes': {}, isSelfClosing: false}], ['opentagstart', {'name': 'HEAD', 'attributes': {}}], ['opentag', {'name': 'HEAD', 'attributes': {}, isSelfClosing: false}], ['opentagstart', {'name': 'SCRIPT', 'attributes': {}}], ['opentag', {'name': 'SCRIPT', 'attributes': {}, isSelfClosing: false}], ['script', "'
foo
", expect: [ [ 'opentagstart', { 'name': 'HTML', 'attributes': {} } ], [ 'opentag', { 'name': 'HTML', 'attributes': {}, 'isSelfClosing': false } ], [ 'opentagstart', { 'name': 'HEAD', 'attributes': {} } ], [ 'opentag', { 'name': 'HEAD', 'attributes': {}, 'isSelfClosing': false } ], [ 'opentagstart', { 'name': 'SCRIPT', 'attributes': {} } ], [ 'opentag', { 'name': 'SCRIPT', 'attributes': {}, 'isSelfClosing': false } ], [ 'script', "if (1 < 0) { console.log('elo there'); }" ], [ 'closetag', 'SCRIPT' ], [ 'closetag', 'HEAD' ], [ 'closetag', 'HTML' ] ] }) sax-js-1.2.4/test/self-closing-child-strict.js000066400000000000000000000020601312300117100211770ustar00rootroot00000000000000require(__dirname).test({ xml: '' + '' + '' + '' + '' + '=(|)' + '' + '', expect: [ ['opentagstart', { 'name': 'root', 'attributes': {} }], ['opentag', { 'name': 'root', 'attributes': {}, 'isSelfClosing': false }], ['opentagstart', { 'name': 'child', 'attributes': {} }], ['opentag', { 'name': 'child', 'attributes': {}, 'isSelfClosing': false }], ['opentagstart', { 'name': 'haha', 'attributes': {} }], ['opentag', { 'name': 'haha', 'attributes': {}, 'isSelfClosing': true }], ['closetag', 'haha'], ['closetag', 'child'], ['opentagstart', { 'name': 'monkey', 'attributes': {} }], ['opentag', { 'name': 'monkey', 'attributes': {}, 'isSelfClosing': false }], ['text', '=(|)'], ['closetag', 'monkey'], ['closetag', 'root'], ['end'], ['ready'] ], strict: true, opt: {} }) sax-js-1.2.4/test/self-closing-child.js000066400000000000000000000020611312300117100176720ustar00rootroot00000000000000require(__dirname).test({ xml: '' + '' + '' + '' + '' + '=(|)' + '' + '', expect: [ ['opentagstart', { 'name': 'ROOT', 'attributes': {} }], ['opentag', { 'name': 'ROOT', 'attributes': {}, 'isSelfClosing': false }], ['opentagstart', { 'name': 'CHILD', 'attributes': {} }], ['opentag', { 'name': 'CHILD', 'attributes': {}, 'isSelfClosing': false }], ['opentagstart', { 'name': 'HAHA', 'attributes': {} }], ['opentag', { 'name': 'HAHA', 'attributes': {}, 'isSelfClosing': true }], ['closetag', 'HAHA'], ['closetag', 'CHILD'], ['opentagstart', { 'name': 'MONKEY', 'attributes': {} }], ['opentag', { 'name': 'MONKEY', 'attributes': {}, 'isSelfClosing': false }], ['text', '=(|)'], ['closetag', 'MONKEY'], ['closetag', 'ROOT'], ['end'], ['ready'] ], strict: false, opt: {} }) sax-js-1.2.4/test/self-closing-tag.js000066400000000000000000000016101312300117100173610ustar00rootroot00000000000000require(__dirname).test({ xml: ' ' + ' ' + ' ' + ' ' + '=(|) ' + '' + ' ', expect: [ ['opentagstart', {name: 'ROOT', attributes: {}}], ['opentag', {name: 'ROOT', attributes: {}, isSelfClosing: false}], ['opentagstart', {name: 'HAHA', attributes: {}}], ['opentag', {name: 'HAHA', attributes: {}, isSelfClosing: true}], ['closetag', 'HAHA'], ['opentagstart', {name: 'HAHA', attributes: {}}], ['opentag', {name: 'HAHA', attributes: {}, isSelfClosing: true}], ['closetag', 'HAHA'], // ["opentag", {name:"HAHA", attributes:{}}], // ["closetag", "HAHA"], ['opentagstart', {name: 'MONKEY', attributes: {}}], ['opentag', {name: 'MONKEY', attributes: {}, isSelfClosing: false}], ['text', '=(|)'], ['closetag', 'MONKEY'], ['closetag', 'ROOT'] ], opt: { trim: true } }) sax-js-1.2.4/test/stand-alone-comment.js000066400000000000000000000003311312300117100200670ustar00rootroot00000000000000// https://github.com/isaacs/sax-js/issues/124 require(__dirname).test({ xml: '', expect: [ [ 'comment', ' stand alone comment ' ] ], strict: true, opt: {} }) sax-js-1.2.4/test/stray-ending.js000066400000000000000000000013631312300117100166340ustar00rootroot00000000000000// stray ending tags should just be ignored in non-strict mode. // https://github.com/isaacs/sax-js/issues/32 require(__dirname).test({ xml: '', expect: [ [ 'opentagstart', { name: 'A', attributes: {} } ], [ 'opentag', { name: 'A', attributes: {}, isSelfClosing: false } ], [ 'opentagstart', { name: 'B', attributes: {} } ], [ 'opentag', { name: 'B', attributes: {}, isSelfClosing: false } ], [ 'text', '' ], [ 'closetag', 'B' ], [ 'closetag', 'A' ] ], strict: false, opt: {} }) sax-js-1.2.4/test/trailing-attribute-no-value.js000066400000000000000000000004401312300117100215610ustar00rootroot00000000000000require(__dirname).test({ xml: '', expect: [ ['opentagstart', {name: 'ROOT', attributes: {}}], ['attribute', {name: 'ATTRIB', value: 'attrib'}], ['opentag', {name: 'ROOT', attributes: {'ATTRIB': 'attrib'}, isSelfClosing: false}] ], opt: { trim: true } }) sax-js-1.2.4/test/trailing-non-whitespace.js000066400000000000000000000006271312300117100207650ustar00rootroot00000000000000require(__dirname).test({ xml: 'Welcome, to monkey land', expect: [ ['opentagstart', { 'name': 'SPAN', 'attributes': {} }], ['opentag', { 'name': 'SPAN', 'attributes': {}, isSelfClosing: false }], ['text', 'Welcome,'], ['closetag', 'SPAN'], ['text', ' to monkey land'], ['end'], ['ready'] ], strict: false, opt: {} }) sax-js-1.2.4/test/unclosed-root.js000066400000000000000000000006031312300117100170210ustar00rootroot00000000000000require(__dirname).test({ xml: '', expect: [ [ 'opentagstart', { name: 'root', attributes: {} } ], [ 'opentag', { name: 'root', attributes: {}, isSelfClosing: false } ], [ 'error', 'Unclosed root tag\nLine: 0\nColumn: 6\nChar: ' ] ], strict: true, opt: {} }) sax-js-1.2.4/test/unquoted.js000066400000000000000000000013271312300117100160740ustar00rootroot00000000000000// unquoted attributes should be ok in non-strict mode // https://github.com/isaacs/sax-js/issues/31 require(__dirname).test({ xml: '', expect: [ [ 'opentagstart', { name: 'SPAN', attributes: {} } ], [ 'attribute', { name: 'CLASS', value: 'test' } ], [ 'attribute', { name: 'HELLO', value: 'world' } ], [ 'opentag', { name: 'SPAN', attributes: { CLASS: 'test', HELLO: 'world' }, isSelfClosing: false } ], [ 'closetag', 'SPAN' ] ], strict: false, opt: {} }) sax-js-1.2.4/test/utf8-split.js000066400000000000000000000017611312300117100162510ustar00rootroot00000000000000var tap = require('tap') var saxStream = require('../lib/sax').createStream() var b = new Buffer('误') saxStream.on('text', function (text) { tap.equal(text, b.toString()) }) saxStream.write(new Buffer('')) saxStream.write(b.slice(0, 1)) saxStream.write(b.slice(1)) saxStream.write(new Buffer('')) saxStream.write(b.slice(0, 2)) saxStream.write(b.slice(2)) saxStream.write(new Buffer('')) saxStream.write(b) saxStream.write(new Buffer('')) saxStream.write(Buffer.concat([new Buffer(''), b.slice(0, 1)])) saxStream.end(Buffer.concat([b.slice(1), new Buffer('')])) var saxStream2 = require('../lib/sax').createStream() saxStream2.on('text', function (text) { tap.equal(text, '�') }) saxStream2.write(new Buffer('')) saxStream2.write(new Buffer('')) saxStream2.write(new Buffer([0xC0])) saxStream2.write(new Buffer('')) saxStream2.write(Buffer.concat([new Buffer(''), b.slice(0, 1)])) saxStream2.write(new Buffer('')) saxStream2.end() sax-js-1.2.4/test/xml-internal-entities.js000066400000000000000000000034661312300117100204720ustar00rootroot00000000000000var iExpect = [] var myAttributes = {} var ENTITIES = {} // generates xml like test0="&control;" var entitiesToTest = { // 'ENTITY_NAME': IS_VALID || [invalidCharPos, invalidChar], 'control0': true, // This is a vanilla control. // entityStart '_uscore': true, '#hash': true, ':colon': true, '-bad': [0, '-'], '.bad': [0, '.'], // general entity 'u_score': true, 'd-ash': true, 'd.ot': true, 'all:_#-.': true } var xmlStart = '⌋ ' + '♠ © → & ' + '< < < < < > ℜ ℘ €', expect: [ ['opentagstart', {'name': 'R', attributes: {}}], ['opentag', {'name': 'R', attributes: {}, isSelfClosing: false}], ['text', '⌋ ♠ © → & < < < < < > ℜ ℘ €'], ['closetag', 'R'] ] }) sax-js-1.2.4/test/xmlns-as-tag-name.js000066400000000000000000000007211312300117100174560ustar00rootroot00000000000000require(__dirname).test({ xml: '', expect: [ [ 'opentagstart', { name: 'xmlns', attributes: {}, ns: {} } ], [ 'opentag', { name: 'xmlns', uri: '', prefix: '', local: 'xmlns', attributes: {}, ns: {}, isSelfClosing: true } ], [ 'closetag', 'xmlns' ] ], strict: true, opt: { xmlns: true } }) sax-js-1.2.4/test/xmlns-issue-41.js000066400000000000000000000032041312300117100167350ustar00rootroot00000000000000var t = require(__dirname) // should be the same both ways. var xmls = [ '', '' ] var ex1 = [ [ 'opentagstart', { name: 'parent', attributes: {}, ns: {} } ], [ 'opennamespace', { prefix: 'a', uri: 'http://ATTRIBUTE' } ], [ 'attribute', { name: 'xmlns:a', value: 'http://ATTRIBUTE', prefix: 'xmlns', local: 'a', uri: 'http://www.w3.org/2000/xmlns/' } ], [ 'attribute', { name: 'a:attr', local: 'attr', prefix: 'a', uri: 'http://ATTRIBUTE', value: 'value' } ], [ 'opentag', { name: 'parent', uri: '', prefix: '', local: 'parent', attributes: { 'a:attr': { name: 'a:attr', local: 'attr', prefix: 'a', uri: 'http://ATTRIBUTE', value: 'value' }, 'xmlns:a': { name: 'xmlns:a', local: 'a', prefix: 'xmlns', uri: 'http://www.w3.org/2000/xmlns/', value: 'http://ATTRIBUTE' } }, ns: { a: 'http://ATTRIBUTE' }, isSelfClosing: true } ], [ 'closetag', 'parent' ], [ 'closenamespace', { prefix: 'a', uri: 'http://ATTRIBUTE' } ] ] // swap the order of elements 2 and 3 var ex2 = [ex1[0], ex1[1], ex1[3], ex1[2]].concat(ex1.slice(4)) var expected = [ex1, ex2] xmls.forEach(function (x, i) { t.test({ xml: x, expect: expected[i], strict: true, opt: { xmlns: true } }) }) sax-js-1.2.4/test/xmlns-rebinding.js000066400000000000000000000125711312300117100173330ustar00rootroot00000000000000require(__dirname).test({ xml: '' + '' + '' + '' + '' + '', expect: [ [ 'opentagstart', { name: 'root', attributes: {}, ns: {} } ], [ 'opennamespace', { prefix: 'x', uri: 'x1' } ], [ 'opennamespace', { prefix: 'y', uri: 'y1' } ], [ 'attribute', { name: 'xmlns:x', value: 'x1', uri: 'http://www.w3.org/2000/xmlns/', prefix: 'xmlns', local: 'x' } ], [ 'attribute', { name: 'xmlns:y', value: 'y1', uri: 'http://www.w3.org/2000/xmlns/', prefix: 'xmlns', local: 'y' } ], [ 'attribute', { name: 'x:a', value: 'x1', uri: 'x1', prefix: 'x', local: 'a' } ], [ 'attribute', { name: 'y:a', value: 'y1', uri: 'y1', prefix: 'y', local: 'a' } ], [ 'opentag', { name: 'root', uri: '', prefix: '', local: 'root', attributes: { 'xmlns:x': { name: 'xmlns:x', value: 'x1', uri: 'http://www.w3.org/2000/xmlns/', prefix: 'xmlns', local: 'x' }, 'xmlns:y': { name: 'xmlns:y', value: 'y1', uri: 'http://www.w3.org/2000/xmlns/', prefix: 'xmlns', local: 'y' }, 'x:a': { name: 'x:a', value: 'x1', uri: 'x1', prefix: 'x', local: 'a' }, 'y:a': { name: 'y:a', value: 'y1', uri: 'y1', prefix: 'y', local: 'a' } }, ns: { x: 'x1', y: 'y1' }, isSelfClosing: false } ], [ 'opentagstart', { name: 'rebind', attributes: {}, ns: { x: 'x1', y: 'y1' } } ], [ 'opennamespace', { prefix: 'x', uri: 'x2' } ], [ 'attribute', { name: 'xmlns:x', value: 'x2', uri: 'http://www.w3.org/2000/xmlns/', prefix: 'xmlns', local: 'x' } ], [ 'opentag', { name: 'rebind', uri: '', prefix: '', local: 'rebind', attributes: { 'xmlns:x': { name: 'xmlns:x', value: 'x2', uri: 'http://www.w3.org/2000/xmlns/', prefix: 'xmlns', local: 'x' } }, ns: { x: 'x2' }, isSelfClosing: false } ], [ 'opentagstart', { name: 'check', attributes: {}, ns: { x: 'x2' } } ], [ 'attribute', { name: 'x:a', value: 'x2', uri: 'x2', prefix: 'x', local: 'a' } ], [ 'attribute', { name: 'y:a', value: 'y1', uri: 'y1', prefix: 'y', local: 'a' } ], [ 'opentag', { name: 'check', uri: '', prefix: '', local: 'check', attributes: { 'x:a': { name: 'x:a', value: 'x2', uri: 'x2', prefix: 'x', local: 'a' }, 'y:a': { name: 'y:a', value: 'y1', uri: 'y1', prefix: 'y', local: 'a' } }, ns: { x: 'x2' }, isSelfClosing: true } ], [ 'closetag', 'check' ], [ 'closetag', 'rebind' ], [ 'closenamespace', { prefix: 'x', uri: 'x2' } ], [ 'opentagstart', { name: 'check', attributes: {}, ns: { x: 'x1', y: 'y1' } } ], [ 'attribute', { name: 'x:a', value: 'x1', uri: 'x1', prefix: 'x', local: 'a' } ], [ 'attribute', { name: 'y:a', value: 'y1', uri: 'y1', prefix: 'y', local: 'a' } ], [ 'opentag', { name: 'check', uri: '', prefix: '', local: 'check', attributes: { 'x:a': { name: 'x:a', value: 'x1', uri: 'x1', prefix: 'x', local: 'a' }, 'y:a': { name: 'y:a', value: 'y1', uri: 'y1', prefix: 'y', local: 'a' } }, ns: { x: 'x1', y: 'y1' }, isSelfClosing: true } ], [ 'closetag', 'check' ], [ 'closetag', 'root' ], [ 'closenamespace', { prefix: 'x', uri: 'x1' } ], [ 'closenamespace', { prefix: 'y', uri: 'y1' } ] ], strict: true, opt: { xmlns: true } }) sax-js-1.2.4/test/xmlns-strict.js000066400000000000000000000127111312300117100166760ustar00rootroot00000000000000require(__dirname).test({ xml: '' + '' + '' + '' + '' + '' + '' + '' + '' + '', expect: [ [ 'opentagstart', { name: 'root', attributes: {}, ns: {} } ], [ 'opentag', { name: 'root', prefix: '', local: 'root', uri: '', attributes: {}, ns: {}, isSelfClosing: false } ], [ 'opentagstart', { name: 'plain', attributes: {}, ns: {} } ], [ 'attribute', { name: 'attr', value: 'normal', prefix: '', local: 'attr', uri: '' } ], [ 'opentag', { name: 'plain', prefix: '', local: 'plain', uri: '', attributes: { 'attr': { name: 'attr', value: 'normal', prefix: '', local: 'attr', uri: '' } }, ns: {}, isSelfClosing: true } ], [ 'closetag', 'plain' ], [ 'opentagstart', { name: 'ns1', attributes: {}, ns: {} } ], [ 'opennamespace', { prefix: '', uri: 'uri:default' } ], [ 'attribute', { name: 'xmlns', value: 'uri:default', prefix: 'xmlns', local: '', uri: 'http://www.w3.org/2000/xmlns/' } ], [ 'opentag', { name: 'ns1', prefix: '', local: 'ns1', uri: 'uri:default', attributes: { 'xmlns': { name: 'xmlns', value: 'uri:default', prefix: 'xmlns', local: '', uri: 'http://www.w3.org/2000/xmlns/' } }, ns: { '': 'uri:default' }, isSelfClosing: false } ], [ 'opentagstart', { name: 'plain', ns: { '': 'uri:default' }, attributes: {} } ], [ 'attribute', { name: 'attr', value: 'normal', prefix: '', local: 'attr', uri: '' } ], [ 'opentag', { name: 'plain', prefix: '', local: 'plain', uri: 'uri:default', ns: { '': 'uri:default' }, attributes: { 'attr': { name: 'attr', value: 'normal', prefix: '', local: 'attr', uri: '' } }, isSelfClosing: true } ], [ 'closetag', 'plain' ], [ 'closetag', 'ns1' ], [ 'closenamespace', { prefix: '', uri: 'uri:default' } ], [ 'opentagstart', { name: 'ns2', attributes: {}, ns: {} } ], [ 'opennamespace', { prefix: 'a', uri: 'uri:nsa' } ], [ 'attribute', { name: 'xmlns:a', value: 'uri:nsa', prefix: 'xmlns', local: 'a', uri: 'http://www.w3.org/2000/xmlns/' } ], [ 'opentag', { name: 'ns2', prefix: '', local: 'ns2', uri: '', attributes: { 'xmlns:a': { name: 'xmlns:a', value: 'uri:nsa', prefix: 'xmlns', local: 'a', uri: 'http://www.w3.org/2000/xmlns/' } }, ns: { a: 'uri:nsa' }, isSelfClosing: false } ], [ 'opentagstart', { name: 'plain', attributes: {}, ns: { a: 'uri:nsa' } } ], [ 'attribute', { name: 'attr', value: 'normal', prefix: '', local: 'attr', uri: '' } ], [ 'opentag', { name: 'plain', prefix: '', local: 'plain', uri: '', attributes: { 'attr': { name: 'attr', value: 'normal', prefix: '', local: 'attr', uri: '' } }, ns: { a: 'uri:nsa' }, isSelfClosing: true } ], [ 'closetag', 'plain' ], [ 'opentagstart', { name: 'a:ns', attributes: {}, ns: { a: 'uri:nsa' } } ], [ 'attribute', { name: 'a:attr', value: 'namespaced', prefix: 'a', local: 'attr', uri: 'uri:nsa' } ], [ 'opentag', { name: 'a:ns', prefix: 'a', local: 'ns', uri: 'uri:nsa', attributes: { 'a:attr': { name: 'a:attr', value: 'namespaced', prefix: 'a', local: 'attr', uri: 'uri:nsa' } }, ns: { a: 'uri:nsa' }, isSelfClosing: true } ], [ 'closetag', 'a:ns' ], [ 'closetag', 'ns2' ], [ 'closenamespace', { prefix: 'a', uri: 'uri:nsa' } ], [ 'closetag', 'root' ] ], strict: true, opt: { xmlns: true } }) sax-js-1.2.4/test/xmlns-unbound-element.js000066400000000000000000000034151312300117100204700ustar00rootroot00000000000000require(__dirname).test({ strict: true, opt: { xmlns: true }, expect: [ [ 'opentagstart', { name: 'unbound:root', attributes: {}, ns: {} } ], [ 'error', 'Unbound namespace prefix: "unbound:root"\nLine: 0\nColumn: 15\nChar: >' ], [ 'opentag', { name: 'unbound:root', uri: 'unbound', prefix: 'unbound', local: 'root', attributes: {}, ns: {}, isSelfClosing: true } ], [ 'closetag', 'unbound:root' ] ] }).write('') require(__dirname).test({ strict: true, opt: { xmlns: true }, expect: [ [ 'opentagstart', { name: 'unbound:root', attributes: {}, ns: {} } ], [ 'opennamespace', { prefix: 'unbound', uri: 'someuri' } ], [ 'attribute', { name: 'xmlns:unbound', value: 'someuri', prefix: 'xmlns', local: 'unbound', uri: 'http://www.w3.org/2000/xmlns/' } ], [ 'opentag', { name: 'unbound:root', uri: 'someuri', prefix: 'unbound', local: 'root', attributes: { 'xmlns:unbound': { name: 'xmlns:unbound', value: 'someuri', prefix: 'xmlns', local: 'unbound', uri: 'http://www.w3.org/2000/xmlns/' } }, ns: { 'unbound': 'someuri' }, isSelfClosing: true } ], [ 'closetag', 'unbound:root' ], [ 'closenamespace', { prefix: 'unbound', uri: 'someuri' } ] ] }).write('') sax-js-1.2.4/test/xmlns-unbound.js000066400000000000000000000016631312300117100170440ustar00rootroot00000000000000require(__dirname).test({ strict: true, opt: { xmlns: true }, expect: [ [ 'opentagstart', { name: 'root', attributes: {}, ns: {} } ], [ 'error', 'Unbound namespace prefix: "unbound"\nLine: 0\nColumn: 28\nChar: >' ], [ 'attribute', { name: 'unbound:attr', value: 'value', uri: 'unbound', prefix: 'unbound', local: 'attr' } ], [ 'opentag', { name: 'root', uri: '', prefix: '', local: 'root', attributes: { 'unbound:attr': { name: 'unbound:attr', value: 'value', uri: 'unbound', prefix: 'unbound', local: 'attr' } }, ns: {}, isSelfClosing: true } ], [ 'closetag', 'root' ] ] }).write("") sax-js-1.2.4/test/xmlns-xml-default-ns.js000066400000000000000000000020561312300117100202270ustar00rootroot00000000000000var xmlnsAttr = { name: 'xmlns', value: 'http://foo', prefix: 'xmlns', local: '', uri: 'http://www.w3.org/2000/xmlns/' } var attrAttr = { name: 'attr', value: 'bar', prefix: '', local: 'attr', uri: '' } require(__dirname).test({ xml: "", expect: [ [ 'opentagstart', { name: 'elm', attributes: {}, ns: {} } ], [ 'opennamespace', { prefix: '', uri: 'http://foo' } ], [ 'attribute', xmlnsAttr ], [ 'attribute', attrAttr ], [ 'opentag', { name: 'elm', prefix: '', local: 'elm', uri: 'http://foo', ns: { '': 'http://foo' }, attributes: { xmlns: xmlnsAttr, attr: attrAttr }, isSelfClosing: true } ], [ 'closetag', 'elm' ], [ 'closenamespace', { prefix: '', uri: 'http://foo' } ] ], strict: true, opt: { xmlns: true } }) sax-js-1.2.4/test/xmlns-xml-default-prefix-attribute.js000066400000000000000000000015471312300117100231110ustar00rootroot00000000000000require(__dirname).test({ xml: "", expect: [ [ 'opentagstart', { name: 'root', attributes: {}, ns: {} } ], [ 'attribute', { name: 'xml:lang', local: 'lang', prefix: 'xml', uri: 'http://www.w3.org/XML/1998/namespace', value: 'en' } ], [ 'opentag', { name: 'root', uri: '', prefix: '', local: 'root', attributes: { 'xml:lang': { name: 'xml:lang', local: 'lang', prefix: 'xml', uri: 'http://www.w3.org/XML/1998/namespace', value: 'en' } }, ns: {}, isSelfClosing: true } ], [ 'closetag', 'root' ] ], strict: true, opt: { xmlns: true } }) sax-js-1.2.4/test/xmlns-xml-default-prefix.js000066400000000000000000000007751312300117100211120ustar00rootroot00000000000000require(__dirname).test({ xml: '', expect: [ [ 'opentagstart', { name: 'xml:root', attributes: {}, ns: {} } ], [ 'opentag', { name: 'xml:root', uri: 'http://www.w3.org/XML/1998/namespace', prefix: 'xml', local: 'root', attributes: {}, ns: {}, isSelfClosing: true } ], [ 'closetag', 'xml:root' ] ], strict: true, opt: { xmlns: true } }) sax-js-1.2.4/test/xmlns-xml-default-redefine.js000066400000000000000000000021101312300117100213570ustar00rootroot00000000000000require(__dirname).test({ xml: "", expect: [ [ 'opentagstart', { name: 'xml:root', attributes: {}, ns: {} } ], [ 'error', 'xml: prefix must be bound to http://www.w3.org/XML/1998/namespace\n' + 'Actual: ERROR\n' + "Line: 0\nColumn: 27\nChar: '" ], [ 'attribute', { name: 'xmlns:xml', local: 'xml', prefix: 'xmlns', uri: 'http://www.w3.org/2000/xmlns/', value: 'ERROR' } ], [ 'opentag', { name: 'xml:root', uri: 'http://www.w3.org/XML/1998/namespace', prefix: 'xml', local: 'root', attributes: { 'xmlns:xml': { name: 'xmlns:xml', local: 'xml', prefix: 'xmlns', uri: 'http://www.w3.org/2000/xmlns/', value: 'ERROR' } }, ns: {}, isSelfClosing: true } ], [ 'closetag', 'xml:root' ] ], strict: true, opt: { xmlns: true } })