Index: _source/plugins/drupalbreaks/plugin.js
===================================================================
--- _source/plugins/drupalbreaks/plugin.js	Thu Nov 26 19:09:56 CST 2009
+++ _source/plugins/drupalbreaks/plugin.js	Thu Nov 26 19:09:56 CST 2009
@@ -0,0 +1,136 @@
+/*
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @file Plugin for creating Drupal teasers(fake object). 
+ */
+CKEDITOR.plugins.add( 'drupalbreaks',
+{
+	requires  : [ 'fakeobjects', 'htmldataprocessor' ],
+	init : function( editor )
+	{
+		// Add the style that renders our fake objects.
+		editor.addCss(
+			'img.cke_drupal_pagebreak,img.cke_drupal_break' +
+			'{' +
+				'background-image: url(' + CKEDITOR.getUrl( this.path + 'images/placeholder.gif' ) + ');' +
+			    '-webkit-background-size: 20px 20px;' +
+			    '-o-background-size: 20px 20px;' +
+				'background-position: center center;' +
+				'background-repeat: no-repeat;' +
+				'display: inline;' +
+				'width: 20px;' +
+				'vertical-align: middle;' +
+				'border: #999999 1px dotted;' +
+			'}' );
+
+		editor.ui.addButton( 'DrupalPageBreak',
+			{
+				label : editor.lang.drupalPageBreak,
+				command : 'drupalpagebreak'
+			});
+
+		editor.ui.addButton( 'DrupalBreak',
+			{
+				label : editor.lang.drupalBreak,
+				command : 'drupalbreak'
+			});
+
+		function insertComment( editor, text )
+		{
+			var ranges = editor.getSelection().getRanges(),
+				range = ranges[ 0 ],
+				bookmark;
+			range.splitBlock( 'p' );
+			bookmark = range.createBookmark();
+			var fakeComment = CKEDITOR.dom.element.createFromHtml( editor.dataProcessor.toHtml( '<!--' + text + '-->' ) );
+			range.insertNode( fakeComment );
+			range.moveToElementEditStart( fakeComment.getNext() );
+			range.select();
+			return fakeComment;
+		}
+
+		editor.addCommand( 'drupalpagebreak',
+		{
+			exec : function( editor )
+			{
+				insertComment( editor, 'pagebreak' );
+			}
+		} );
+
+		var singleton;
+		editor.addCommand( 'drupalbreak',
+		{
+			exec : function( editor )
+			{
+				// There should be only one drupal-break in document.
+				singleton && singleton.remove();
+				singleton = insertComment( editor, 'break' );
+			}
+		} );
+	},
+
+	afterInit : function( editor )
+	{
+		var dataProcessor = editor.dataProcessor,
+			dataFilter = dataProcessor.dataFilter,
+			htmlFilter = dataProcessor.htmlFilter,
+			// Borrow the comment output filters to restore them.
+			commentFilters = htmlFilter._.comment,
+			filter = commentFilters && ( commentFilters.filter || commentFilters[ 0 ] );
+
+		// DataFilter for creating fake objects from HTML comment.
+		dataFilter.addRules(
+			{
+				comment : function( value )
+				{
+					var cdata = filter( value );
+
+					// CData instance is received.
+					if ( cdata.value )
+					{
+						var fakeElement;
+						// Is it actually a comment and match the desired pattern?
+						cdata.value.replace( /<!--([\s\S]*?)-->/, function( match, content )
+						{
+							if( content == 'pagebreak' || content == 'break' )
+							{
+								var displayName = content;
+								var fakeWrapper = new CKEDITOR.htmlParser.element( displayName, {} );
+								fakeWrapper.add( cdata );
+								fakeElement = editor.createFakeParserElement(
+										fakeWrapper,
+										'cke_drupal_' + CKEDITOR.tools.escapeCssSelector( displayName ),
+										displayName,
+										false );
+							}
+
+						} );
+
+						if ( fakeElement )
+						{
+							return fakeElement;
+						}
+					}
+					return value;
+				}
+			} );
+
+		// HtmlFilter rules for outputting fake comment.
+		function fakeCommentFilter( element )
+		{
+			delete element.name;
+		}
+
+		htmlFilter.addRules(
+		{
+			elements :
+			{
+				'break': fakeCommentFilter,
+				'pagebreak': fakeCommentFilter
+			}
+		} );
+	}
+} );
Index: _source/core/config.js
===================================================================
--- _source/core/config.js	(revision 4363)
+++ _source/core/config.js	Thu Nov 26 18:39:04 CST 2009
@@ -198,7 +198,7 @@
 	 * @type String
 	 * @example
 	 */
-	plugins : 'about,basicstyles,blockquote,button,clipboard,colorbutton,colordialog,contextmenu,elementspath,enterkey,entities,filebrowser,find,flash,font,format,forms,horizontalrule,htmldataprocessor,image,indent,justify,keystrokes,link,list,maximize,newpage,pagebreak,pastefromword,pastetext,popup,preview,print,removeformat,resize,save,scayt,smiley,showblocks,sourcearea,stylescombo,table,tabletools,specialchar,tab,templates,toolbar,undo,wysiwygarea,wsc',
+	plugins : 'about,basicstyles,blockquote,button,clipboard,colorbutton,colordialog,contextmenu,drupalbreaks,elementspath,enterkey,entities,filebrowser,find,flash,font,format,forms,horizontalrule,htmldataprocessor,image,indent,justify,keystrokes,link,list,maximize,newpage,pagebreak,pastefromword,pastetext,popup,preview,print,removeformat,resize,save,scayt,smiley,showblocks,sourcearea,stylescombo,table,tabletools,specialchar,tab,templates,toolbar,undo,wysiwygarea,wsc',
 
 	/**
 	 * List of additional plugins to be loaded. This is a tool setting which
Index: _source/plugins/toolbar/plugin.js
===================================================================
--- _source/plugins/toolbar/plugin.js	(revision 4186)
+++ _source/plugins/toolbar/plugin.js	Thu Nov 26 18:40:46 CST 2009
@@ -367,7 +367,7 @@
 	['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'],
 	['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
 	['Link','Unlink','Anchor'],
-	['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'],
+	['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak', 'DrupalPageBreak', 'DrupalBreak' ],
 	'/',
 	['Styles','Format','Font','FontSize'],
 	['TextColor','BGColor'],
Index: _source/lang/en.js
===================================================================
--- _source/lang/en.js	(revision 4185)
+++ _source/lang/en.js	Thu Nov 26 18:37:36 CST 2009
@@ -681,5 +681,8 @@
 		highlight : 'Highlight',
 		selected : 'Selected',
 		clear : 'Clear'
-	}
+	},
+
+	drupalPageBreak : 'Drupal Page Break',
+	drupalBreak : 'Drupal Break'
 };

