Compare commits
No commits in common. "master" and "54790b32355542b768ee75bf8407cca5f6485b3b" have entirely different histories.
master
...
54790b3235
8
form.js
8
form.js
@ -7,9 +7,9 @@ var qstr = require( "./querystr.js" );
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
form_multipart: function( boundary, request, handler )
|
form_multipart: function( boundary, request, handler )
|
||||||
{
|
{
|
||||||
boundary = Buffer.from( "--" + boundary );
|
boundary = new Buffer( "--" + boundary );
|
||||||
var delim = Buffer.from( "0D0A0D0A", "hex" );
|
var delim = new Buffer( "0D0A0D0A", "hex" );
|
||||||
var endBuff = Buffer.from( "2D2D0D0A", "hex" );
|
var endBuff = new Buffer( "2D2D0D0A", "hex" );
|
||||||
|
|
||||||
var st = request.resultStream();
|
var st = request.resultStream();
|
||||||
var firstRead = true;
|
var firstRead = true;
|
||||||
@ -73,7 +73,7 @@ module.exports = {
|
|||||||
throw new Error( "Invalid form data" );
|
throw new Error( "Invalid form data" );
|
||||||
}
|
}
|
||||||
|
|
||||||
content = content.map( ( v ) => Buffer.from( v ) );
|
content = content.map( ( v ) => new Buffer( v ) );
|
||||||
|
|
||||||
var item;
|
var item;
|
||||||
var formData = [];
|
var formData = [];
|
||||||
|
28
object.js
28
object.js
@ -61,35 +61,7 @@ var referenceObj = function()
|
|||||||
return refd;
|
return refd;
|
||||||
};
|
};
|
||||||
|
|
||||||
var LStack = function() {
|
|
||||||
this._first = null;
|
|
||||||
};
|
|
||||||
|
|
||||||
LStack.prototype.add = function( obj )
|
|
||||||
{
|
|
||||||
var p = this._first;
|
|
||||||
this._first = { "o": obj, "n": p };
|
|
||||||
};
|
|
||||||
|
|
||||||
LStack.prototype.pop = function()
|
|
||||||
{
|
|
||||||
var g = this._first;
|
|
||||||
this._first = g.n;
|
|
||||||
return g.o;
|
|
||||||
};
|
|
||||||
|
|
||||||
LStack.prototype.curr = function() {
|
|
||||||
return this._first.o;
|
|
||||||
};
|
|
||||||
|
|
||||||
LStack.prototype.next = function() {
|
|
||||||
return this._first?.n?.o;
|
|
||||||
};
|
|
||||||
|
|
||||||
LStack.prototype.empty = function() { return !this._first; }
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
clone: cloneObj
|
clone: cloneObj
|
||||||
, refObj: referenceObj
|
, refObj: referenceObj
|
||||||
, LStack: LStack
|
|
||||||
};
|
};
|
||||||
|
148
string.js
148
string.js
@ -1,10 +1,3 @@
|
|||||||
var obju = require( "./object.js" );
|
|
||||||
var _newStackItem = function( t )
|
|
||||||
{
|
|
||||||
var o = { "name": t, "attrs": "", "cont": "" };
|
|
||||||
o[ "fd" ] = ( x ) => o.cont += x;
|
|
||||||
return o;
|
|
||||||
};
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
encodeHtml: function ( str, br )
|
encodeHtml: function ( str, br )
|
||||||
{
|
{
|
||||||
@ -26,145 +19,4 @@ module.exports = {
|
|||||||
|
|
||||||
return "http://" + str;
|
return "http://" + str;
|
||||||
}
|
}
|
||||||
, walk_tags: function( str, handler, _OP, _ED, _fineHandlers )
|
|
||||||
{
|
|
||||||
_fineHandlers ||= {};
|
|
||||||
|
|
||||||
var l = str && str.length;
|
|
||||||
var strOut = "";
|
|
||||||
|
|
||||||
var tokenStack = new (obju.LStack)();
|
|
||||||
|
|
||||||
var _fd_strOut = ( x ) => strOut += x;
|
|
||||||
var _fd = _fd_strOut;
|
|
||||||
|
|
||||||
var exitCurrentTag = () => {
|
|
||||||
tokenStack.pop();
|
|
||||||
_fd = tokenStack.empty() ? _fd_strOut : tokenStack.curr().fd;
|
|
||||||
};
|
|
||||||
|
|
||||||
var ctx = {
|
|
||||||
"exitCurrentTag": exitCurrentTag
|
|
||||||
, "stack": tokenStack
|
|
||||||
, "fd": ( x ) => ( tokenStack.empty() ? _fd_strOut : tokenStack.curr().fd )( x )
|
|
||||||
};
|
|
||||||
|
|
||||||
for( let i = 0; i < l; i ++ )
|
|
||||||
{
|
|
||||||
let c = str[i];
|
|
||||||
let t = "", _a, _n;
|
|
||||||
if( c === _OP )
|
|
||||||
{
|
|
||||||
let closeTag = ( str[ i + 1 ] === "/" );
|
|
||||||
if( closeTag )
|
|
||||||
{
|
|
||||||
t = str[ ++i ];
|
|
||||||
}
|
|
||||||
|
|
||||||
for(
|
|
||||||
_a = str[ ++i ], _n = _a.charCodeAt(0);
|
|
||||||
// check alpha numeric
|
|
||||||
( 65 <= _n && _n <= 90 ) || ( 97 <= _n && _n <= 122 ) || ( 48 <= _n && _n <= 57 );
|
|
||||||
i ++, _a = str[i], _n = _a.charCodeAt(0)
|
|
||||||
) t += _a;
|
|
||||||
|
|
||||||
if( t === "" || t === "/" )
|
|
||||||
{
|
|
||||||
// Hits "<#" where # is not a valid tag name
|
|
||||||
_fd( _OP + t + _a );
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( _a === _ED )
|
|
||||||
{
|
|
||||||
// Hits "</abcd>"
|
|
||||||
if( closeTag )
|
|
||||||
{
|
|
||||||
// Hits "...</abcd>" with no corresponding open tag
|
|
||||||
if( tokenStack.empty() )
|
|
||||||
{
|
|
||||||
if( _fineHandlers.UnmatchedCloseTag )
|
|
||||||
{
|
|
||||||
_fineHandlers.UnmatchedCloseTag( ctx, t.substr( 1 ) );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw new Error( `Syntax Error: Unexpected closing ${_OP}${t}${_ED}` );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Hits "<abcd...>...</abcd>"
|
|
||||||
else if( t.substr( 1 ) === tokenStack.curr().name )
|
|
||||||
{
|
|
||||||
let st = tokenStack.pop();
|
|
||||||
_fd = tokenStack.empty() ? _fd_strOut : tokenStack.curr().fd;
|
|
||||||
_fd( handler( st.name, st.attrs, st.cont ) );
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
// Hits "<abcd>...</efgh>"
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if( _fineHandlers.UnmatchedCloseTag )
|
|
||||||
{
|
|
||||||
_fineHandlers.UnmatchedCloseTag( ctx, t.substr( 1 ) );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw new Error( `Syntax error: Unexpected closing ${_OP}${t}${_ED} after opened ${_OP}${tokenStack.curr().name}${_ED}` );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Hits "<abcd>"
|
|
||||||
else
|
|
||||||
{
|
|
||||||
tokenStack.add( _newStackItem( t ) );
|
|
||||||
_fd = tokenStack.curr().fd;
|
|
||||||
|
|
||||||
_fineHandlers.TagOpen && _fineHandlers.TagOpen( ctx );
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Hits "<abc#" where _a is "#"
|
|
||||||
// Consume everything until we hit closing ">" or opening "<"
|
|
||||||
tokenStack.add( _newStackItem( t ) );
|
|
||||||
t = _a;
|
|
||||||
for(
|
|
||||||
_a = str[ ++i ];
|
|
||||||
!( _a.startsWith( _OP ) || _a.startsWith( _ED ) );
|
|
||||||
i ++, _a = str[i]
|
|
||||||
) t += _a;
|
|
||||||
|
|
||||||
// Hits "<abcd#...<"
|
|
||||||
if( _a === _OP )
|
|
||||||
{
|
|
||||||
// Write "<abcd#..." into _fd and starts over
|
|
||||||
// < : _OP
|
|
||||||
// abcd : tokenStack.pop().name
|
|
||||||
// #... : t
|
|
||||||
_fd( _OP + tokenStack.pop().name + t ); i --;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
// Hits "<abcd#...>"
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Write #... into abcd's attrs
|
|
||||||
tokenStack.curr().attrs = t;
|
|
||||||
_fd = tokenStack.curr().fd;
|
|
||||||
|
|
||||||
_fineHandlers.TagOpen && _fineHandlers.TagOpen( ctx );
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_fd( c );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_fineHandlers.WalkEnd && _fineHandlers.WalkEnd( ctx );
|
|
||||||
|
|
||||||
return strOut;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user