PageRenderTime 20ms CodeModel.GetById 16ms app.highlight 3ms RepoModel.GetById 0ms app.codeStats 0ms

/EQT_V1/EQTWebApp/fckeditor/editor/_source/classes/fckhtmliterator.js

http://sgsoft-las.googlecode.com/
JavaScript | 142 lines | 84 code | 6 blank | 52 comment | 10 complexity | 970289717b0f0696c6c00e49745b27d3 MD5 | raw file
Possible License(s): LGPL-2.1
  1/*
  2 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
  3 * Copyright (C) 2003-2009 Frederico Caldeira Knabben
  4 *
  5 * == BEGIN LICENSE ==
  6 *
  7 * Licensed under the terms of any of the following licenses at your
  8 * choice:
  9 *
 10 *  - GNU General Public License Version 2 or later (the "GPL")
 11 *    http://www.gnu.org/licenses/gpl.html
 12 *
 13 *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
 14 *    http://www.gnu.org/licenses/lgpl.html
 15 *
 16 *  - Mozilla Public License Version 1.1 or later (the "MPL")
 17 *    http://www.mozilla.org/MPL/MPL-1.1.html
 18 *
 19 * == END LICENSE ==
 20 *
 21 * This class can be used to interate through nodes inside a range.
 22 *
 23 * During interation, the provided range can become invalid, due to document
 24 * mutations, so CreateBookmark() used to restore it after processing, if
 25 * needed.
 26 */
 27
 28var FCKHtmlIterator = function( source )
 29{
 30	this._sourceHtml = source ;
 31}
 32FCKHtmlIterator.prototype =
 33{
 34	Next : function()
 35	{
 36		var sourceHtml = this._sourceHtml ;
 37		if ( sourceHtml == null )
 38			return null ;
 39
 40		var match = FCKRegexLib.HtmlTag.exec( sourceHtml ) ;
 41		var isTag = false ;
 42		var value = "" ;
 43		if ( match )
 44		{
 45			if ( match.index > 0 )
 46			{
 47				value = sourceHtml.substr( 0, match.index ) ;
 48				this._sourceHtml = sourceHtml.substr( match.index ) ;
 49			}
 50			else
 51			{
 52				isTag = true ;
 53				value = match[0] ;
 54				this._sourceHtml = sourceHtml.substr( match[0].length ) ;
 55			}
 56		}
 57		else
 58		{
 59			value = sourceHtml ;
 60			this._sourceHtml = null ;
 61		}
 62		return { 'isTag' : isTag, 'value' : value } ;
 63	},
 64
 65	Each : function( func )
 66	{
 67		var chunk ;
 68		while ( ( chunk = this.Next() ) )
 69			func( chunk.isTag, chunk.value ) ;
 70	}
 71} ;
 72/*
 73 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
 74 * Copyright (C) 2003-2009 Frederico Caldeira Knabben
 75 *
 76 * == BEGIN LICENSE ==
 77 *
 78 * Licensed under the terms of any of the following licenses at your
 79 * choice:
 80 *
 81 *  - GNU General Public License Version 2 or later (the "GPL")
 82 *    http://www.gnu.org/licenses/gpl.html
 83 *
 84 *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
 85 *    http://www.gnu.org/licenses/lgpl.html
 86 *
 87 *  - Mozilla Public License Version 1.1 or later (the "MPL")
 88 *    http://www.mozilla.org/MPL/MPL-1.1.html
 89 *
 90 * == END LICENSE ==
 91 *
 92 * This class can be used to interate through nodes inside a range.
 93 *
 94 * During interation, the provided range can become invalid, due to document
 95 * mutations, so CreateBookmark() used to restore it after processing, if
 96 * needed.
 97 */
 98
 99var FCKHtmlIterator = function( source )
100{
101	this._sourceHtml = source ;
102}
103FCKHtmlIterator.prototype =
104{
105	Next : function()
106	{
107		var sourceHtml = this._sourceHtml ;
108		if ( sourceHtml == null )
109			return null ;
110
111		var match = FCKRegexLib.HtmlTag.exec( sourceHtml ) ;
112		var isTag = false ;
113		var value = "" ;
114		if ( match )
115		{
116			if ( match.index > 0 )
117			{
118				value = sourceHtml.substr( 0, match.index ) ;
119				this._sourceHtml = sourceHtml.substr( match.index ) ;
120			}
121			else
122			{
123				isTag = true ;
124				value = match[0] ;
125				this._sourceHtml = sourceHtml.substr( match[0].length ) ;
126			}
127		}
128		else
129		{
130			value = sourceHtml ;
131			this._sourceHtml = null ;
132		}
133		return { 'isTag' : isTag, 'value' : value } ;
134	},
135
136	Each : function( func )
137	{
138		var chunk ;
139		while ( ( chunk = this.Next() ) )
140			func( chunk.isTag, chunk.value ) ;
141	}
142} ;