forked from science-ation/science-ation
143 lines
3.4 KiB
JavaScript
143 lines
3.4 KiB
JavaScript
/*
|
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
|
*
|
|
* == BEGIN LICENSE ==
|
|
*
|
|
* Licensed under the terms of any of the following licenses at your
|
|
* choice:
|
|
*
|
|
* - GNU General Public License Version 2 or later (the "GPL")
|
|
* http://www.gnu.org/licenses/gpl.html
|
|
*
|
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
|
* http://www.gnu.org/licenses/lgpl.html
|
|
*
|
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
|
*
|
|
* == END LICENSE ==
|
|
*
|
|
* This class can be used to interate through nodes inside a range.
|
|
*
|
|
* During interation, the provided range can become invalid, due to document
|
|
* mutations, so CreateBookmark() used to restore it after processing, if
|
|
* needed.
|
|
*/
|
|
|
|
var FCKHtmlIterator = function( source )
|
|
{
|
|
this._sourceHtml = source ;
|
|
}
|
|
FCKHtmlIterator.prototype =
|
|
{
|
|
Next : function()
|
|
{
|
|
var sourceHtml = this._sourceHtml ;
|
|
if ( sourceHtml == null )
|
|
return null ;
|
|
|
|
var match = FCKRegexLib.HtmlTag.exec( sourceHtml ) ;
|
|
var isTag = false ;
|
|
var value = "" ;
|
|
if ( match )
|
|
{
|
|
if ( match.index > 0 )
|
|
{
|
|
value = sourceHtml.substr( 0, match.index ) ;
|
|
this._sourceHtml = sourceHtml.substr( match.index ) ;
|
|
}
|
|
else
|
|
{
|
|
isTag = true ;
|
|
value = match[0] ;
|
|
this._sourceHtml = sourceHtml.substr( match[0].length ) ;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
value = sourceHtml ;
|
|
this._sourceHtml = null ;
|
|
}
|
|
return { 'isTag' : isTag, 'value' : value } ;
|
|
},
|
|
|
|
Each : function( func )
|
|
{
|
|
var chunk ;
|
|
while ( ( chunk = this.Next() ) )
|
|
func( chunk.isTag, chunk.value ) ;
|
|
}
|
|
} ;
|
|
/*
|
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
|
*
|
|
* == BEGIN LICENSE ==
|
|
*
|
|
* Licensed under the terms of any of the following licenses at your
|
|
* choice:
|
|
*
|
|
* - GNU General Public License Version 2 or later (the "GPL")
|
|
* http://www.gnu.org/licenses/gpl.html
|
|
*
|
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
|
* http://www.gnu.org/licenses/lgpl.html
|
|
*
|
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
|
*
|
|
* == END LICENSE ==
|
|
*
|
|
* This class can be used to interate through nodes inside a range.
|
|
*
|
|
* During interation, the provided range can become invalid, due to document
|
|
* mutations, so CreateBookmark() used to restore it after processing, if
|
|
* needed.
|
|
*/
|
|
|
|
var FCKHtmlIterator = function( source )
|
|
{
|
|
this._sourceHtml = source ;
|
|
}
|
|
FCKHtmlIterator.prototype =
|
|
{
|
|
Next : function()
|
|
{
|
|
var sourceHtml = this._sourceHtml ;
|
|
if ( sourceHtml == null )
|
|
return null ;
|
|
|
|
var match = FCKRegexLib.HtmlTag.exec( sourceHtml ) ;
|
|
var isTag = false ;
|
|
var value = "" ;
|
|
if ( match )
|
|
{
|
|
if ( match.index > 0 )
|
|
{
|
|
value = sourceHtml.substr( 0, match.index ) ;
|
|
this._sourceHtml = sourceHtml.substr( match.index ) ;
|
|
}
|
|
else
|
|
{
|
|
isTag = true ;
|
|
value = match[0] ;
|
|
this._sourceHtml = sourceHtml.substr( match[0].length ) ;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
value = sourceHtml ;
|
|
this._sourceHtml = null ;
|
|
}
|
|
return { 'isTag' : isTag, 'value' : value } ;
|
|
},
|
|
|
|
Each : function( func )
|
|
{
|
|
var chunk ;
|
|
while ( ( chunk = this.Next() ) )
|
|
func( chunk.isTag, chunk.value ) ;
|
|
}
|
|
} ;
|