示例#1
0
文件: sax.js 项目: mikeal/sax-js
sax.createStream = function () {
  var stream = require('stream')
    , parser = sax.parser.apply(sax, arguments)
    , stream = new stream.Stream()
    ;
  
  stream.writable = true
  stream.write = function (data) {
    parser.write(data.toString())
    stream.emit(data)
  }  
  stream.end = function (chunk) {
    if (chunk) parser.write(chunk.toString())
    emit('end')
  }
  
  parser.onend = function () {
    stream.end()
  };
  
  stream.__defineSetter__('onend', function (val) {
    parser.onend = function () {
      stream.end()
      if (val) val()
    }
  })
  
  var wraps = 
    [ 'opentag'
    , 'closetag'
    , 'text'
    , 'attribute'
    , 'error'
    , 'doctype'
    , 'processinginstruction'
    , 'sgmldeclaration'
    , 'comment'
    , 'opencdata'
    , 'cdata'
    , 'closecdata'
    , 'ready'
    ]
  
  wraps.forEach(function (name) {
    var onFunc = function () {
      var args = Array.prototype.slice.apply(arguments)
      args.splice(0,0,name)
      stream.emit.apply(stream, args)
    }
    parser['on'+name] = onFunc;
    stream.__defineSetter__('on'+name, function (val) {
      parser['on'+name] = function () {
        onFunc.apply(parser, arguments)
        if (val) val.apply(stream, arguments)
      }
    })
  })
  
  return stream
}
示例#2
0
文件: sax.js 项目: mikeal/sax-js
 wraps.forEach(function (name) {
   var onFunc = function () {
     var args = Array.prototype.slice.apply(arguments)
     args.splice(0,0,name)
     stream.emit.apply(stream, args)
   }
   parser['on'+name] = onFunc;
   stream.__defineSetter__('on'+name, function (val) {
     parser['on'+name] = function () {
       onFunc.apply(parser, arguments)
       if (val) val.apply(stream, arguments)
     }
   })
 })