<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[180348] trunk/Tools</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/180348">180348</a></dd>
<dt>Author</dt> <dd>enrica@apple.com</dd>
<dt>Date</dt> <dd>2015-02-19 10:41:24 -0800 (Thu, 19 Feb 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Add new tool to test editable Webviews.
https://bugs.webkit.org/show_bug.cgi?id=141772

Reviewed by Tim Horton.

Adding WebEditingTester, a Cocoa application to
test WK1 and Wk2 views in editable mode.

* WebEditingTester: Added.
* WebEditingTester/AppDelegate.h: Added.
* WebEditingTester/AppDelegate.m: Added.
(-[WebEditingAppDelegate init]):
(defaultConfiguration):
(-[WebEditingAppDelegate applicationDidFinishLaunching:]):
(-[WebEditingAppDelegate applicationWillTerminate:]):
(-[WebEditingAppDelegate newEditor:]):
(-[WebEditingAppDelegate showOperations:]):
(-[WebEditingAppDelegate useWebKit2ByDefault]):
(-[WebEditingAppDelegate toggleUseWK2ByDefault:]):
(-[WebEditingAppDelegate validateMenuItem:]):
* WebEditingTester/Info.plist: Added.
* WebEditingTester/MainMenu.xib: Added.
* WebEditingTester/WK1WebDocumentController.h: Added.
* WebEditingTester/WK1WebDocumentController.m: Added.
(-[WK1WebDocumentController awakeFromNib]):
(-[WK1WebDocumentController loadContent]):
(-[WK1WebDocumentController dealloc]):
(-[WK1WebDocumentController pasteAsMarkup:]):
* WebEditingTester/WK2WebDocumentController.h: Added.
* WebEditingTester/WK2WebDocumentController.m: Added.
(-[WK2WebDocumentController initWithConfiguration:]):
(-[WK2WebDocumentController pasteAsMarkup:]):
(-[WK2WebDocumentController awakeFromNib]):
(-[WK2WebDocumentController dealloc]):
(-[WK2WebDocumentController loadContent]):
* WebEditingTester/WebDocument.xib: Added.
* WebEditingTester/WebDocumentController.h: Added.
* WebEditingTester/WebDocumentController.m: Added.
(-[WebDocumentController initWithWindow:]):
(-[WebDocumentController windowDidLoad]):
(-[WebDocumentController defaultEditingSource]):
(-[WebDocumentController applicationTerminating]):
(-[WebDocumentController loadContent]):
* WebEditingTester/WebEditingTester.xcodeproj: Added.
* WebEditingTester/WebEditingTester.xcodeproj/project.pbxproj: Added.
* WebEditingTester/main.m: Added.
(main):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li>trunk/Tools/WebEditingTester/</li>
<li><a href="#trunkToolsWebEditingTesterAppDelegateh">trunk/Tools/WebEditingTester/AppDelegate.h</a></li>
<li><a href="#trunkToolsWebEditingTesterAppDelegatem">trunk/Tools/WebEditingTester/AppDelegate.m</a></li>
<li><a href="#trunkToolsWebEditingTesterInfoplist">trunk/Tools/WebEditingTester/Info.plist</a></li>
<li><a href="#trunkToolsWebEditingTesterMainMenuxib">trunk/Tools/WebEditingTester/MainMenu.xib</a></li>
<li><a href="#trunkToolsWebEditingTesterWK1WebDocumentControllerh">trunk/Tools/WebEditingTester/WK1WebDocumentController.h</a></li>
<li><a href="#trunkToolsWebEditingTesterWK1WebDocumentControllerm">trunk/Tools/WebEditingTester/WK1WebDocumentController.m</a></li>
<li><a href="#trunkToolsWebEditingTesterWK2WebDocumentControllerh">trunk/Tools/WebEditingTester/WK2WebDocumentController.h</a></li>
<li><a href="#trunkToolsWebEditingTesterWK2WebDocumentControllerm">trunk/Tools/WebEditingTester/WK2WebDocumentController.m</a></li>
<li><a href="#trunkToolsWebEditingTesterWebDocumentxib">trunk/Tools/WebEditingTester/WebDocument.xib</a></li>
<li><a href="#trunkToolsWebEditingTesterWebDocumentControllerh">trunk/Tools/WebEditingTester/WebDocumentController.h</a></li>
<li><a href="#trunkToolsWebEditingTesterWebDocumentControllerm">trunk/Tools/WebEditingTester/WebDocumentController.m</a></li>
<li>trunk/Tools/WebEditingTester/WebEditingTester.xcodeproj/</li>
<li><a href="#trunkToolsWebEditingTesterWebEditingTesterxcodeprojprojectpbxproj">trunk/Tools/WebEditingTester/WebEditingTester.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkToolsWebEditingTestermainm">trunk/Tools/WebEditingTester/main.m</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (180347 => 180348)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2015-02-19 18:36:40 UTC (rev 180347)
+++ trunk/Tools/ChangeLog        2015-02-19 18:41:24 UTC (rev 180348)
</span><span class="lines">@@ -1,3 +1,53 @@
</span><ins>+2015-02-18  Enrica Casucci  &lt;enrica@apple.com&gt;
+
+        Add new tool to test editable Webviews.
+        https://bugs.webkit.org/show_bug.cgi?id=141772
+
+        Reviewed by Tim Horton.
+
+        Adding WebEditingTester, a Cocoa application to
+        test WK1 and Wk2 views in editable mode.
+
+        * WebEditingTester: Added.
+        * WebEditingTester/AppDelegate.h: Added.
+        * WebEditingTester/AppDelegate.m: Added.
+        (-[WebEditingAppDelegate init]):
+        (defaultConfiguration):
+        (-[WebEditingAppDelegate applicationDidFinishLaunching:]):
+        (-[WebEditingAppDelegate applicationWillTerminate:]):
+        (-[WebEditingAppDelegate newEditor:]):
+        (-[WebEditingAppDelegate showOperations:]):
+        (-[WebEditingAppDelegate useWebKit2ByDefault]):
+        (-[WebEditingAppDelegate toggleUseWK2ByDefault:]):
+        (-[WebEditingAppDelegate validateMenuItem:]):
+        * WebEditingTester/Info.plist: Added.
+        * WebEditingTester/MainMenu.xib: Added.
+        * WebEditingTester/WK1WebDocumentController.h: Added.
+        * WebEditingTester/WK1WebDocumentController.m: Added.
+        (-[WK1WebDocumentController awakeFromNib]):
+        (-[WK1WebDocumentController loadContent]):
+        (-[WK1WebDocumentController dealloc]):
+        (-[WK1WebDocumentController pasteAsMarkup:]):
+        * WebEditingTester/WK2WebDocumentController.h: Added.
+        * WebEditingTester/WK2WebDocumentController.m: Added.
+        (-[WK2WebDocumentController initWithConfiguration:]):
+        (-[WK2WebDocumentController pasteAsMarkup:]):
+        (-[WK2WebDocumentController awakeFromNib]):
+        (-[WK2WebDocumentController dealloc]):
+        (-[WK2WebDocumentController loadContent]):
+        * WebEditingTester/WebDocument.xib: Added.
+        * WebEditingTester/WebDocumentController.h: Added.
+        * WebEditingTester/WebDocumentController.m: Added.
+        (-[WebDocumentController initWithWindow:]):
+        (-[WebDocumentController windowDidLoad]):
+        (-[WebDocumentController defaultEditingSource]):
+        (-[WebDocumentController applicationTerminating]):
+        (-[WebDocumentController loadContent]):
+        * WebEditingTester/WebEditingTester.xcodeproj: Added.
+        * WebEditingTester/WebEditingTester.xcodeproj/project.pbxproj: Added.
+        * WebEditingTester/main.m: Added.
+        (main):
+
</ins><span class="cx"> 2015-02-18  Csaba Osztrogonác  &lt;ossy@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Run JSC tests on ARM EFL bots
</span></span></pre></div>
<a id="trunkToolsWebEditingTesterAppDelegateh"></a>
<div class="addfile"><h4>Added: trunk/Tools/WebEditingTester/AppDelegate.h (0 => 180348)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebEditingTester/AppDelegate.h                                (rev 0)
+++ trunk/Tools/WebEditingTester/AppDelegate.h        2015-02-19 18:41:24 UTC (rev 180348)
</span><span class="lines">@@ -0,0 +1,39 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import &lt;Cocoa/Cocoa.h&gt;
+
+@interface WebEditingAppDelegate : NSObject &lt;NSApplicationDelegate&gt; {
+    NSMutableSet *_webDocuments;
+    IBOutlet NSMenuItem *_newWK1EditorItem;
+    IBOutlet NSMenuItem *_newWK2EditorItem;
+    IBOutlet NSPanel *_operationsPanel;
+}
+- (IBAction)newEditor:(id)sender;
+- (IBAction)showOperations:(id)sender;
+- (IBAction)toggleUseWK2ByDefault:(id)sender;
+
+@end
+
</ins></span></pre></div>
<a id="trunkToolsWebEditingTesterAppDelegatem"></a>
<div class="addfile"><h4>Added: trunk/Tools/WebEditingTester/AppDelegate.m (0 => 180348)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebEditingTester/AppDelegate.m                                (rev 0)
+++ trunk/Tools/WebEditingTester/AppDelegate.m        2015-02-19 18:41:24 UTC (rev 180348)
</span><span class="lines">@@ -0,0 +1,272 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import &quot;AppDelegate.h&quot;
+
+#import &quot;WK1WebDocumentController.h&quot;
+#import &quot;WK2WebDocumentController.h&quot;
+#import &lt;WebKit/WKPreferencesPrivate.h&gt;
+#import &lt;WebKit/WKWebViewConfigurationPrivate.h&gt;
+#import &lt;WebKit/WebKit.h&gt;
+#import &lt;WebKit/_WKWebsiteDataStore.h&gt;
+
+static NSString * const UseWebKit2ByDefaultPreferenceKey = @&quot;UseWebKit2ByDefault&quot;;
+
+@implementation WebEditingAppDelegate
+- (id)init
+{
+    self = [super init];
+    if (self)
+        _webDocuments = [[NSMutableSet alloc] init];
+    
+    return self;
+}
+
+static WKWebViewConfiguration *defaultConfiguration()
+{
+    static WKWebViewConfiguration *configuration;
+    
+    if (!configuration) {
+        configuration = [[WKWebViewConfiguration alloc] init];
+        configuration.preferences._fullScreenEnabled = YES;
+        configuration.preferences._developerExtrasEnabled = YES;
+    }
+    
+    return configuration;
+}
+
+
+- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
+{
+    [self newEditor:self];
+}
+
+- (void)applicationWillTerminate:(NSNotification *)aNotification
+{
+    for (WebDocumentController *documents in _webDocuments)
+        [documents applicationTerminating];
+}
+
+- (IBAction)newEditor:(id)sender
+{
+    BOOL useWebKit2 = NO;
+
+    if (sender == self)
+        useWebKit2 = [self useWebKit2ByDefault];
+    else if (sender == _newWK2EditorItem)
+        useWebKit2 = YES;
+    
+    WebDocumentController *controller = nil;
+    if (useWebKit2)
+        controller = [[WK2WebDocumentController alloc] initWithConfiguration:defaultConfiguration()];
+    else
+        controller = [[WK1WebDocumentController alloc] initWithWindowNibName:@&quot;WebDocument&quot;];
+    
+    [[controller window] makeKeyAndOrderFront:sender];
+    [_webDocuments addObject:controller];
+    [controller loadContent];
+}
+
+- (IBAction)showOperations:(id)sender
+{
+    static BOOL initialized = NO;
+    static NSString *operationNames[] = {
+        @&quot;alignCenter:&quot;,
+        @&quot;alignJustified:&quot;,
+        @&quot;alignLeft:&quot;,
+        @&quot;alignRight:&quot;,
+        @&quot;capitalizeWord:&quot;,
+        @&quot;centerSelectionInVisibleArea:&quot;,
+        @&quot;changeCaseOfLetter:&quot;,
+        @&quot;checkSpelling:&quot;,
+        @&quot;complete:&quot;,
+        @&quot;copy:&quot;,
+        @&quot;copyFont:&quot;,
+        @&quot;cut:&quot;,
+        @&quot;delete:&quot;,
+        @&quot;deleteBackward:&quot;,
+        @&quot;deleteBackwardByDecomposingPreviousCharacter:&quot;,
+        @&quot;deleteForward:&quot;,
+        @&quot;deleteToBeginningOfLine:&quot;,
+        @&quot;deleteToBeginningOfParagraph:&quot;,
+        @&quot;deleteToEndOfLine:&quot;,
+        @&quot;deleteToEndOfParagraph:&quot;,
+        @&quot;deleteToMark:&quot;,
+        @&quot;deleteWordBackward:&quot;,
+        @&quot;deleteWordForward:&quot;,
+        @&quot;ignoreSpelling:&quot;,
+        @&quot;indent:&quot;,
+        @&quot;insertBacktab:&quot;,
+        @&quot;insertLineBreak:&quot;,
+        @&quot;insertNewline:&quot;,
+        @&quot;insertNewlineIgnoringFieldEditor:&quot;,
+        @&quot;insertParagraphSeparator:&quot;,
+        @&quot;insertTab:&quot;,
+        @&quot;insertTabIgnoringFieldEditor:&quot;,
+        @&quot;insertTable:&quot;,
+        @&quot;lowercaseWord:&quot;,
+        @&quot;moveBackward:&quot;,
+        @&quot;moveBackwardAndModifySelection:&quot;,
+        @&quot;moveDown:&quot;,
+        @&quot;moveDownAndModifySelection:&quot;,
+        @&quot;moveForward:&quot;,
+        @&quot;moveForwardAndModifySelection:&quot;,
+        @&quot;moveLeft:&quot;,
+        @&quot;moveLeftAndModifySelection:&quot;,
+        @&quot;moveParagraphBackwardAndModifySelection:&quot;,
+        @&quot;moveParagraphForwardAndModifySelection:&quot;,
+        @&quot;moveRight:&quot;,
+        @&quot;moveRightAndModifySelection:&quot;,
+        @&quot;moveToBeginningOfDocument:&quot;,
+        @&quot;moveToBeginningOfDocumentAndModifySelection:&quot;,
+        @&quot;moveToBeginningOfSentence:&quot;,
+        @&quot;moveToBeginningOfSentenceAndModifySelection:&quot;,
+        @&quot;moveToBeginningOfLine:&quot;,
+        @&quot;moveToBeginningOfLineAndModifySelection:&quot;,
+        @&quot;moveToBeginningOfParagraph:&quot;,
+        @&quot;moveToBeginningOfParagraphAndModifySelection:&quot;,
+        @&quot;moveToEndOfDocument:&quot;,
+        @&quot;moveToEndOfDocumentAndModifySelection:&quot;,
+        @&quot;moveToEndOfSentence:&quot;,
+        @&quot;moveToEndOfSentenceAndModifySelection:&quot;,
+        @&quot;moveToEndOfLine:&quot;,
+        @&quot;moveToEndOfLineAndModifySelection:&quot;,
+        @&quot;moveToEndOfParagraph:&quot;,
+        @&quot;moveToEndOfParagraphAndModifySelection:&quot;,
+        @&quot;moveUp:&quot;,
+        @&quot;moveUpAndModifySelection:&quot;,
+        @&quot;moveWordBackward:&quot;,
+        @&quot;moveWordBackwardAndModifySelection:&quot;,
+        @&quot;moveWordForward:&quot;,
+        @&quot;moveWordForwardAndModifySelection:&quot;,
+        @&quot;moveWordLeft:&quot;,
+        @&quot;moveWordLeftAndModifySelection:&quot;,
+        @&quot;moveWordRight:&quot;,
+        @&quot;moveWordRightAndModifySelection:&quot;,
+        @&quot;outline:&quot;,
+        @&quot;pageDown:&quot;,
+        @&quot;pageDownAndModifySelection:&quot;,
+        @&quot;pageUp:&quot;,
+        @&quot;pageUpAndModifySelection:&quot;,
+        @&quot;paste:&quot;,
+        @&quot;pasteAsPlainText:&quot;,
+        @&quot;pasteAsRichText:&quot;,
+        @&quot;pasteFont:&quot;,
+        @&quot;scrollLineDown:&quot;,
+        @&quot;scrollLineUp:&quot;,
+        @&quot;scrollPageDown:&quot;,
+        @&quot;scrollPageUp:&quot;,
+        @&quot;selectAll:&quot;,
+        @&quot;selectSentence:&quot;,
+        @&quot;selectLine:&quot;,
+        @&quot;selectParagraph:&quot;,
+        @&quot;selectToMark:&quot;,
+        @&quot;selectWord:&quot;,
+        @&quot;setMark:&quot;,
+        @&quot;showGuessPanel:&quot;,
+        @&quot;startSpeaking:&quot;,
+        @&quot;stopSpeaking:&quot;,
+        @&quot;subscript:&quot;,
+        @&quot;superscript:&quot;,
+        @&quot;swapWithMark:&quot;,
+        @&quot;takeFindStringFromSelection:&quot;,
+        @&quot;toggleContinuousSpellChecking:&quot;,
+        @&quot;toggleSmartInsertDelete:&quot;,
+        @&quot;transpose:&quot;,
+        @&quot;transposeWords:&quot;,
+        @&quot;underline:&quot;,
+        @&quot;unscript:&quot;,
+        @&quot;uppercaseWord:&quot;,
+        @&quot;yank:&quot;,
+        @&quot;yankAndSelect:&quot;,
+        NULL
+    };
+
+    if (!initialized) {
+        NSFont *font = [NSFont systemFontOfSize:[NSFont systemFontSizeForControlSize:NSMiniControlSize]];
+        NSDictionary *attributes = [NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName];
+        
+        float maxWidth = 0;
+        int i;
+        for (i = 0; operationNames[i]; ++i)
+            maxWidth = MAX(maxWidth, [operationNames[i] sizeWithAttributes:attributes].width);
+
+        maxWidth += 24;
+        
+        int columnHeight = (i + 2) / 3;
+        
+        NSView *superview = [_operationsPanel contentView];
+        
+        [_operationsPanel setContentSize:NSMakeSize(3 * maxWidth, columnHeight * 16 + 1)];
+        
+        float firstY = NSMaxY([superview frame]) - 1;
+        float y = firstY;
+        float x = 0;
+        for (i = 0; operationNames[i]; ++i) {
+            y -= 16;
+            if (y &lt; 0) {
+                y = firstY - 16;
+                x += maxWidth;
+            }
+            NSButton *button = [[[NSButton alloc] initWithFrame:NSMakeRect(x, y, maxWidth, 16)] autorelease];
+            [button setBezelStyle:NSRoundedBezelStyle];
+            [button.cell setControlSize:NSMiniControlSize];
+            [button setFont:font];
+            [button setTitle:operationNames[i]];
+            [button setAction:NSSelectorFromString(operationNames[i])];
+            [superview addSubview:button];
+        }
+        
+        [_operationsPanel center];
+        [_operationsPanel setFloatingPanel:YES];
+        [_operationsPanel setBecomesKeyOnlyIfNeeded:YES];
+        initialized = YES;
+    }
+
+    [_operationsPanel orderFront:nil];
+}
+
+- (BOOL)useWebKit2ByDefault
+{
+    return [[NSUserDefaults standardUserDefaults] boolForKey:UseWebKit2ByDefaultPreferenceKey];
+}
+
+- (IBAction)toggleUseWK2ByDefault:(id)sender
+{
+    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+    [defaults setBool:![defaults boolForKey:UseWebKit2ByDefaultPreferenceKey] forKey:UseWebKit2ByDefaultPreferenceKey];
+}
+
+- (BOOL)validateMenuItem:(NSMenuItem *)menuItem
+{
+    SEL action = [menuItem action];
+    
+    if (action == @selector(toggleUseWK2ByDefault:))
+        [menuItem setState:[self useWebKit2ByDefault] ? NSOnState : NSOffState];
+    
+    return YES;
+}
+
+@end
</ins></span></pre></div>
<a id="trunkToolsWebEditingTesterInfoplist"></a>
<div class="addfile"><h4>Added: trunk/Tools/WebEditingTester/Info.plist (0 => 180348)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebEditingTester/Info.plist                                (rev 0)
+++ trunk/Tools/WebEditingTester/Info.plist        2015-02-19 18:41:24 UTC (rev 180348)
</span><span class="lines">@@ -0,0 +1,32 @@
</span><ins>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
+&lt;plist version=&quot;1.0&quot;&gt;
+&lt;dict&gt;
+        &lt;key&gt;CFBundleDevelopmentRegion&lt;/key&gt;
+        &lt;string&gt;en&lt;/string&gt;
+        &lt;key&gt;CFBundleExecutable&lt;/key&gt;
+        &lt;string&gt;$(EXECUTABLE_NAME)&lt;/string&gt;
+        &lt;key&gt;CFBundleIconFile&lt;/key&gt;
+        &lt;string&gt;&lt;/string&gt;
+        &lt;key&gt;CFBundleIdentifier&lt;/key&gt;
+        &lt;string&gt;org.webkit.WebEditingTester&lt;/string&gt;
+        &lt;key&gt;CFBundleInfoDictionaryVersion&lt;/key&gt;
+        &lt;string&gt;6.0&lt;/string&gt;
+        &lt;key&gt;CFBundleName&lt;/key&gt;
+        &lt;string&gt;$(PRODUCT_NAME)&lt;/string&gt;
+        &lt;key&gt;CFBundlePackageType&lt;/key&gt;
+        &lt;string&gt;APPL&lt;/string&gt;
+        &lt;key&gt;CFBundleShortVersionString&lt;/key&gt;
+        &lt;string&gt;1.0&lt;/string&gt;
+        &lt;key&gt;CFBundleSignature&lt;/key&gt;
+        &lt;string&gt;????&lt;/string&gt;
+        &lt;key&gt;CFBundleVersion&lt;/key&gt;
+        &lt;string&gt;1&lt;/string&gt;
+        &lt;key&gt;LSMinimumSystemVersion&lt;/key&gt;
+        &lt;string&gt;$(MACOSX_DEPLOYMENT_TARGET)&lt;/string&gt;
+        &lt;key&gt;NSMainNibFile&lt;/key&gt;
+        &lt;string&gt;MainMenu&lt;/string&gt;
+        &lt;key&gt;NSPrincipalClass&lt;/key&gt;
+        &lt;string&gt;NSApplication&lt;/string&gt;
+&lt;/dict&gt;
+&lt;/plist&gt;
</ins></span></pre></div>
<a id="trunkToolsWebEditingTesterMainMenuxib"></a>
<div class="addfile"><h4>Added: trunk/Tools/WebEditingTester/MainMenu.xib (0 => 180348)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebEditingTester/MainMenu.xib                                (rev 0)
+++ trunk/Tools/WebEditingTester/MainMenu.xib        2015-02-19 18:41:24 UTC (rev 180348)
</span><span class="lines">@@ -0,0 +1,700 @@
</span><ins>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;
+&lt;document type=&quot;com.apple.InterfaceBuilder3.Cocoa.XIB&quot; version=&quot;3.0&quot; toolsVersion=&quot;8034&quot; systemVersion=&quot;14D87&quot; targetRuntime=&quot;MacOSX.Cocoa&quot; propertyAccessControl=&quot;none&quot; useAutolayout=&quot;YES&quot; customObjectInstantitationMethod=&quot;direct&quot;&gt;
+    &lt;dependencies&gt;
+        &lt;plugIn identifier=&quot;com.apple.InterfaceBuilder.CocoaPlugin&quot; version=&quot;8034&quot;/&gt;
+    &lt;/dependencies&gt;
+    &lt;objects&gt;
+        &lt;customObject id=&quot;-2&quot; userLabel=&quot;File's Owner&quot; customClass=&quot;NSApplication&quot;&gt;
+            &lt;connections&gt;
+                &lt;outlet property=&quot;delegate&quot; destination=&quot;Voe-Tx-rLC&quot; id=&quot;wPy-Qu-E0P&quot;/&gt;
+            &lt;/connections&gt;
+        &lt;/customObject&gt;
+        &lt;customObject id=&quot;-1&quot; userLabel=&quot;First Responder&quot; customClass=&quot;FirstResponder&quot;/&gt;
+        &lt;customObject id=&quot;-3&quot; userLabel=&quot;Application&quot; customClass=&quot;NSObject&quot;/&gt;
+        &lt;customObject id=&quot;Voe-Tx-rLC&quot; userLabel=&quot;Delegate&quot; customClass=&quot;WebEditingAppDelegate&quot;&gt;
+            &lt;connections&gt;
+                &lt;outlet property=&quot;_newWK1EditorItem&quot; destination=&quot;2Pd-3X-Tvf&quot; id=&quot;oy2-LL-9U7&quot;/&gt;
+                &lt;outlet property=&quot;_newWK2EditorItem&quot; destination=&quot;kzr-0m-cAu&quot; id=&quot;vsf-6z-Lk3&quot;/&gt;
+                &lt;outlet property=&quot;_operationsPanel&quot; destination=&quot;XRZ-ss-zpK&quot; id=&quot;YJ2-gq-nmx&quot;/&gt;
+            &lt;/connections&gt;
+        &lt;/customObject&gt;
+        &lt;customObject id=&quot;YLy-65-1bz&quot; customClass=&quot;NSFontManager&quot;/&gt;
+        &lt;menu title=&quot;Main Menu&quot; systemMenu=&quot;main&quot; id=&quot;AYu-sK-qS6&quot;&gt;
+            &lt;items&gt;
+                &lt;menuItem title=&quot;WebEditingTester&quot; id=&quot;1Xt-HY-uBw&quot;&gt;
+                    &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                    &lt;menu key=&quot;submenu&quot; title=&quot;WebEditingTester&quot; systemMenu=&quot;apple&quot; id=&quot;uQy-DD-JDr&quot;&gt;
+                        &lt;items&gt;
+                            &lt;menuItem title=&quot;About WebEditingTester&quot; id=&quot;5kV-Vb-QxS&quot;&gt;
+                                &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;orderFrontStandardAboutPanel:&quot; target=&quot;-1&quot; id=&quot;Exp-CZ-Vem&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem isSeparatorItem=&quot;YES&quot; id=&quot;VOq-y0-SEH&quot;/&gt;
+                            &lt;menuItem title=&quot;Preferences…&quot; keyEquivalent=&quot;,&quot; id=&quot;BOF-NM-1cW&quot;/&gt;
+                            &lt;menuItem isSeparatorItem=&quot;YES&quot; id=&quot;wFC-TO-SCJ&quot;/&gt;
+                            &lt;menuItem title=&quot;Services&quot; id=&quot;NMo-om-nkz&quot;&gt;
+                                &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                &lt;menu key=&quot;submenu&quot; title=&quot;Services&quot; systemMenu=&quot;services&quot; id=&quot;hz9-B4-Xy5&quot;/&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem isSeparatorItem=&quot;YES&quot; id=&quot;4je-JR-u6R&quot;/&gt;
+                            &lt;menuItem title=&quot;Hide WebEditingTester&quot; keyEquivalent=&quot;h&quot; id=&quot;Olw-nP-bQN&quot;&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;hide:&quot; target=&quot;-1&quot; id=&quot;PnN-Uc-m68&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem title=&quot;Hide Others&quot; keyEquivalent=&quot;h&quot; id=&quot;Vdr-fp-XzO&quot;&gt;
+                                &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot; option=&quot;YES&quot; command=&quot;YES&quot;/&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;hideOtherApplications:&quot; target=&quot;-1&quot; id=&quot;VT4-aY-XCT&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem title=&quot;Show All&quot; id=&quot;Kd2-mp-pUS&quot;&gt;
+                                &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;unhideAllApplications:&quot; target=&quot;-1&quot; id=&quot;Dhg-Le-xox&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem isSeparatorItem=&quot;YES&quot; id=&quot;kCx-OE-vgT&quot;/&gt;
+                            &lt;menuItem title=&quot;Quit WebEditingTester&quot; keyEquivalent=&quot;q&quot; id=&quot;4sb-4s-VLi&quot;&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;terminate:&quot; target=&quot;-1&quot; id=&quot;Te7-pn-YzF&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                        &lt;/items&gt;
+                    &lt;/menu&gt;
+                &lt;/menuItem&gt;
+                &lt;menuItem title=&quot;File&quot; id=&quot;dMs-cI-mzQ&quot;&gt;
+                    &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                    &lt;menu key=&quot;submenu&quot; title=&quot;File&quot; id=&quot;bib-Uj-vzu&quot;&gt;
+                        &lt;items&gt;
+                            &lt;menuItem title=&quot;New WK1 Editor&quot; id=&quot;2Pd-3X-Tvf&quot; userLabel=&quot;New WK1 Editor&quot;&gt;
+                                &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;newEditor:&quot; target=&quot;Voe-Tx-rLC&quot; id=&quot;21m-3B-oXY&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem title=&quot;New WK2 Editor&quot; id=&quot;kzr-0m-cAu&quot; userLabel=&quot;New WK2 Editor&quot;&gt;
+                                &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;newEditor:&quot; target=&quot;Voe-Tx-rLC&quot; id=&quot;Za3-gM-3R7&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem title=&quot;Open…&quot; keyEquivalent=&quot;o&quot; id=&quot;IAo-SY-fd9&quot;&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;openDocument:&quot; target=&quot;-1&quot; id=&quot;bVn-NM-KNZ&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem title=&quot;Open Recent&quot; id=&quot;tXI-mr-wws&quot;&gt;
+                                &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                &lt;menu key=&quot;submenu&quot; title=&quot;Open Recent&quot; systemMenu=&quot;recentDocuments&quot; id=&quot;oas-Oc-fiZ&quot;&gt;
+                                    &lt;items&gt;
+                                        &lt;menuItem title=&quot;Clear Menu&quot; id=&quot;vNY-rz-j42&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;clearRecentDocuments:&quot; target=&quot;-1&quot; id=&quot;Daa-9d-B3U&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                    &lt;/items&gt;
+                                &lt;/menu&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem isSeparatorItem=&quot;YES&quot; id=&quot;m54-Is-iLE&quot;/&gt;
+                            &lt;menuItem title=&quot;Close&quot; keyEquivalent=&quot;w&quot; id=&quot;DVo-aG-piG&quot;&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;performClose:&quot; target=&quot;-1&quot; id=&quot;HmO-Ls-i7Q&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem title=&quot;Save…&quot; keyEquivalent=&quot;s&quot; id=&quot;pxx-59-PXV&quot;&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;saveDocument:&quot; target=&quot;-1&quot; id=&quot;teZ-XB-qJY&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem title=&quot;Save As…&quot; keyEquivalent=&quot;S&quot; id=&quot;Bw7-FT-i3A&quot;&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;saveDocumentAs:&quot; target=&quot;-1&quot; id=&quot;mDf-zr-I0C&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem isSeparatorItem=&quot;YES&quot; id=&quot;aJh-i4-bef&quot;/&gt;
+                            &lt;menuItem title=&quot;Page Setup…&quot; keyEquivalent=&quot;P&quot; id=&quot;qIS-W8-SiK&quot;&gt;
+                                &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot; shift=&quot;YES&quot; command=&quot;YES&quot;/&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;runPageLayout:&quot; target=&quot;-1&quot; id=&quot;Din-rz-gC5&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem title=&quot;Print…&quot; keyEquivalent=&quot;p&quot; id=&quot;aTl-1u-JFS&quot;&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;printDocument:&quot; target=&quot;-1&quot; id=&quot;qaZ-4w-aoO&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                        &lt;/items&gt;
+                    &lt;/menu&gt;
+                &lt;/menuItem&gt;
+                &lt;menuItem title=&quot;Edit&quot; id=&quot;5QF-Oa-p0T&quot;&gt;
+                    &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                    &lt;menu key=&quot;submenu&quot; title=&quot;Edit&quot; id=&quot;W48-6f-4Dl&quot;&gt;
+                        &lt;items&gt;
+                            &lt;menuItem title=&quot;Undo&quot; keyEquivalent=&quot;z&quot; id=&quot;dRJ-4n-Yzg&quot;&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;undo:&quot; target=&quot;-1&quot; id=&quot;M6e-cu-g7V&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem title=&quot;Redo&quot; keyEquivalent=&quot;Z&quot; id=&quot;6dh-zS-Vam&quot;&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;redo:&quot; target=&quot;-1&quot; id=&quot;oIA-Rs-6OD&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem isSeparatorItem=&quot;YES&quot; id=&quot;WRV-NI-Exz&quot;/&gt;
+                            &lt;menuItem title=&quot;Cut&quot; keyEquivalent=&quot;x&quot; id=&quot;uRl-iY-unG&quot;&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;cut:&quot; target=&quot;-1&quot; id=&quot;YJe-68-I9s&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem title=&quot;Copy&quot; keyEquivalent=&quot;c&quot; id=&quot;x3v-GG-iWU&quot;&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;copy:&quot; target=&quot;-1&quot; id=&quot;G1f-GL-Joy&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem title=&quot;Paste&quot; keyEquivalent=&quot;v&quot; id=&quot;gVA-U4-sdL&quot;&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;paste:&quot; target=&quot;-1&quot; id=&quot;UvS-8e-Qdg&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem title=&quot;Paste and Match Style&quot; keyEquivalent=&quot;V&quot; id=&quot;WeT-3V-zwk&quot;&gt;
+                                &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot; option=&quot;YES&quot; command=&quot;YES&quot;/&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;pasteAsPlainText:&quot; target=&quot;-1&quot; id=&quot;cEh-KX-wJQ&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem title=&quot;Delete&quot; id=&quot;pa3-QI-u2k&quot;&gt;
+                                &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;delete:&quot; target=&quot;-1&quot; id=&quot;0Mk-Ml-PaM&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem title=&quot;Select All&quot; keyEquivalent=&quot;a&quot; id=&quot;Ruw-6m-B2m&quot;&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;selectAll:&quot; target=&quot;-1&quot; id=&quot;VNm-Mi-diN&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem isSeparatorItem=&quot;YES&quot; id=&quot;uyl-h8-XO2&quot;/&gt;
+                            &lt;menuItem title=&quot;Find&quot; id=&quot;4EN-yA-p0u&quot;&gt;
+                                &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                &lt;menu key=&quot;submenu&quot; title=&quot;Find&quot; id=&quot;1b7-l0-nxx&quot;&gt;
+                                    &lt;items&gt;
+                                        &lt;menuItem title=&quot;Find…&quot; tag=&quot;1&quot; keyEquivalent=&quot;f&quot; id=&quot;Xz5-n4-O0W&quot;&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;performFindPanelAction:&quot; target=&quot;-1&quot; id=&quot;cD7-Qs-BN4&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Find and Replace…&quot; tag=&quot;12&quot; keyEquivalent=&quot;f&quot; id=&quot;YEy-JH-Tfz&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot; option=&quot;YES&quot; command=&quot;YES&quot;/&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;performFindPanelAction:&quot; target=&quot;-1&quot; id=&quot;WD3-Gg-5AJ&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Find Next&quot; tag=&quot;2&quot; keyEquivalent=&quot;g&quot; id=&quot;q09-fT-Sye&quot;&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;performFindPanelAction:&quot; target=&quot;-1&quot; id=&quot;NDo-RZ-v9R&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Find Previous&quot; tag=&quot;3&quot; keyEquivalent=&quot;G&quot; id=&quot;OwM-mh-QMV&quot;&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;performFindPanelAction:&quot; target=&quot;-1&quot; id=&quot;HOh-sY-3ay&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Use Selection for Find&quot; tag=&quot;7&quot; keyEquivalent=&quot;e&quot; id=&quot;buJ-ug-pKt&quot;&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;performFindPanelAction:&quot; target=&quot;-1&quot; id=&quot;U76-nv-p5D&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Jump to Selection&quot; keyEquivalent=&quot;j&quot; id=&quot;S0p-oC-mLd&quot;&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;centerSelectionInVisibleArea:&quot; target=&quot;-1&quot; id=&quot;IOG-6D-g5B&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                    &lt;/items&gt;
+                                &lt;/menu&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem title=&quot;Spelling and Grammar&quot; id=&quot;Dv1-io-Yv7&quot;&gt;
+                                &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                &lt;menu key=&quot;submenu&quot; title=&quot;Spelling&quot; id=&quot;3IN-sU-3Bg&quot;&gt;
+                                    &lt;items&gt;
+                                        &lt;menuItem title=&quot;Show Spelling and Grammar&quot; keyEquivalent=&quot;:&quot; id=&quot;HFo-cy-zxI&quot;&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;showGuessPanel:&quot; target=&quot;-1&quot; id=&quot;vFj-Ks-hy3&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Check Document Now&quot; keyEquivalent=&quot;;&quot; id=&quot;hz2-CU-CR7&quot;&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;checkSpelling:&quot; target=&quot;-1&quot; id=&quot;fz7-VC-reM&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem isSeparatorItem=&quot;YES&quot; id=&quot;bNw-od-mp5&quot;/&gt;
+                                        &lt;menuItem title=&quot;Check Spelling While Typing&quot; id=&quot;rbD-Rh-wIN&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;toggleContinuousSpellChecking:&quot; target=&quot;-1&quot; id=&quot;7w6-Qz-0kB&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Check Grammar With Spelling&quot; id=&quot;mK6-2p-4JG&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;toggleGrammarChecking:&quot; target=&quot;-1&quot; id=&quot;muD-Qn-j4w&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Correct Spelling Automatically&quot; id=&quot;78Y-hA-62v&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;toggleAutomaticSpellingCorrection:&quot; target=&quot;-1&quot; id=&quot;2lM-Qi-WAP&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                    &lt;/items&gt;
+                                &lt;/menu&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem title=&quot;Substitutions&quot; id=&quot;9ic-FL-obx&quot;&gt;
+                                &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                &lt;menu key=&quot;submenu&quot; title=&quot;Substitutions&quot; id=&quot;FeM-D8-WVr&quot;&gt;
+                                    &lt;items&gt;
+                                        &lt;menuItem title=&quot;Show Substitutions&quot; id=&quot;z6F-FW-3nz&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;orderFrontSubstitutionsPanel:&quot; target=&quot;-1&quot; id=&quot;oku-mr-iSq&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem isSeparatorItem=&quot;YES&quot; id=&quot;gPx-C9-uUO&quot;/&gt;
+                                        &lt;menuItem title=&quot;Smart Copy/Paste&quot; id=&quot;9yt-4B-nSM&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;toggleSmartInsertDelete:&quot; target=&quot;-1&quot; id=&quot;3IJ-Se-DZD&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Smart Quotes&quot; id=&quot;hQb-2v-fYv&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;toggleAutomaticQuoteSubstitution:&quot; target=&quot;-1&quot; id=&quot;ptq-xd-QOA&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Smart Dashes&quot; id=&quot;rgM-f4-ycn&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;toggleAutomaticDashSubstitution:&quot; target=&quot;-1&quot; id=&quot;oCt-pO-9gS&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Smart Links&quot; id=&quot;cwL-P1-jid&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;toggleAutomaticLinkDetection:&quot; target=&quot;-1&quot; id=&quot;Gip-E3-Fov&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Data Detectors&quot; id=&quot;tRr-pd-1PS&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;toggleAutomaticDataDetection:&quot; target=&quot;-1&quot; id=&quot;R1I-Nq-Kbl&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Text Replacement&quot; id=&quot;HFQ-gK-NFA&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;toggleAutomaticTextReplacement:&quot; target=&quot;-1&quot; id=&quot;DvP-Fe-Py6&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                    &lt;/items&gt;
+                                &lt;/menu&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem title=&quot;Transformations&quot; id=&quot;2oI-Rn-ZJC&quot;&gt;
+                                &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                &lt;menu key=&quot;submenu&quot; title=&quot;Transformations&quot; id=&quot;c8a-y6-VQd&quot;&gt;
+                                    &lt;items&gt;
+                                        &lt;menuItem title=&quot;Make Upper Case&quot; id=&quot;vmV-6d-7jI&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;uppercaseWord:&quot; target=&quot;-1&quot; id=&quot;sPh-Tk-edu&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Make Lower Case&quot; id=&quot;d9M-CD-aMd&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;lowercaseWord:&quot; target=&quot;-1&quot; id=&quot;iUZ-b5-hil&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Capitalize&quot; id=&quot;UEZ-Bs-lqG&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;capitalizeWord:&quot; target=&quot;-1&quot; id=&quot;26H-TL-nsh&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                    &lt;/items&gt;
+                                &lt;/menu&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem title=&quot;Speech&quot; id=&quot;xrE-MZ-jX0&quot;&gt;
+                                &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                &lt;menu key=&quot;submenu&quot; title=&quot;Speech&quot; id=&quot;3rS-ZA-NoH&quot;&gt;
+                                    &lt;items&gt;
+                                        &lt;menuItem title=&quot;Start Speaking&quot; id=&quot;Ynk-f8-cLZ&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;startSpeaking:&quot; target=&quot;-1&quot; id=&quot;654-Ng-kyl&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Stop Speaking&quot; id=&quot;Oyz-dy-DGm&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;stopSpeaking:&quot; target=&quot;-1&quot; id=&quot;dX8-6p-jy9&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                    &lt;/items&gt;
+                                &lt;/menu&gt;
+                            &lt;/menuItem&gt;
+                        &lt;/items&gt;
+                    &lt;/menu&gt;
+                &lt;/menuItem&gt;
+                &lt;menuItem title=&quot;Format&quot; id=&quot;jxT-CU-nIS&quot;&gt;
+                    &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                    &lt;menu key=&quot;submenu&quot; title=&quot;Format&quot; id=&quot;GEO-Iw-cKr&quot;&gt;
+                        &lt;items&gt;
+                            &lt;menuItem title=&quot;Font&quot; id=&quot;Gi5-1S-RQB&quot;&gt;
+                                &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                &lt;menu key=&quot;submenu&quot; title=&quot;Font&quot; systemMenu=&quot;font&quot; id=&quot;aXa-aM-Jaq&quot;&gt;
+                                    &lt;items&gt;
+                                        &lt;menuItem title=&quot;Show Fonts&quot; keyEquivalent=&quot;t&quot; id=&quot;Q5e-8K-NDq&quot;&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;orderFrontFontPanel:&quot; target=&quot;YLy-65-1bz&quot; id=&quot;WHr-nq-2xA&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Bold&quot; tag=&quot;2&quot; keyEquivalent=&quot;b&quot; id=&quot;GB9-OM-e27&quot;&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;addFontTrait:&quot; target=&quot;YLy-65-1bz&quot; id=&quot;hqk-hr-sYV&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Italic&quot; tag=&quot;1&quot; keyEquivalent=&quot;i&quot; id=&quot;Vjx-xi-njq&quot;&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;addFontTrait:&quot; target=&quot;YLy-65-1bz&quot; id=&quot;IHV-OB-c03&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Underline&quot; keyEquivalent=&quot;u&quot; id=&quot;WRG-CD-K1S&quot;&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;underline:&quot; target=&quot;-1&quot; id=&quot;FYS-2b-JAY&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem isSeparatorItem=&quot;YES&quot; id=&quot;5gT-KC-WSO&quot;/&gt;
+                                        &lt;menuItem title=&quot;Bigger&quot; tag=&quot;3&quot; keyEquivalent=&quot;+&quot; id=&quot;Ptp-SP-VEL&quot;&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;modifyFont:&quot; target=&quot;YLy-65-1bz&quot; id=&quot;Uc7-di-UnL&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Smaller&quot; tag=&quot;4&quot; keyEquivalent=&quot;-&quot; id=&quot;i1d-Er-qST&quot;&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;modifyFont:&quot; target=&quot;YLy-65-1bz&quot; id=&quot;HcX-Lf-eNd&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem isSeparatorItem=&quot;YES&quot; id=&quot;kx3-Dk-x3B&quot;/&gt;
+                                        &lt;menuItem title=&quot;Kern&quot; id=&quot;jBQ-r6-VK2&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                            &lt;menu key=&quot;submenu&quot; title=&quot;Kern&quot; id=&quot;tlD-Oa-oAM&quot;&gt;
+                                                &lt;items&gt;
+                                                    &lt;menuItem title=&quot;Use Default&quot; id=&quot;GUa-eO-cwY&quot;&gt;
+                                                        &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                                        &lt;connections&gt;
+                                                            &lt;action selector=&quot;useStandardKerning:&quot; target=&quot;-1&quot; id=&quot;6dk-9l-Ckg&quot;/&gt;
+                                                        &lt;/connections&gt;
+                                                    &lt;/menuItem&gt;
+                                                    &lt;menuItem title=&quot;Use None&quot; id=&quot;cDB-IK-hbR&quot;&gt;
+                                                        &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                                        &lt;connections&gt;
+                                                            &lt;action selector=&quot;turnOffKerning:&quot; target=&quot;-1&quot; id=&quot;U8a-gz-Maa&quot;/&gt;
+                                                        &lt;/connections&gt;
+                                                    &lt;/menuItem&gt;
+                                                    &lt;menuItem title=&quot;Tighten&quot; id=&quot;46P-cB-AYj&quot;&gt;
+                                                        &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                                        &lt;connections&gt;
+                                                            &lt;action selector=&quot;tightenKerning:&quot; target=&quot;-1&quot; id=&quot;hr7-Nz-8ro&quot;/&gt;
+                                                        &lt;/connections&gt;
+                                                    &lt;/menuItem&gt;
+                                                    &lt;menuItem title=&quot;Loosen&quot; id=&quot;ogc-rX-tC1&quot;&gt;
+                                                        &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                                        &lt;connections&gt;
+                                                            &lt;action selector=&quot;loosenKerning:&quot; target=&quot;-1&quot; id=&quot;8i4-f9-FKE&quot;/&gt;
+                                                        &lt;/connections&gt;
+                                                    &lt;/menuItem&gt;
+                                                &lt;/items&gt;
+                                            &lt;/menu&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Ligatures&quot; id=&quot;o6e-r0-MWq&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                            &lt;menu key=&quot;submenu&quot; title=&quot;Ligatures&quot; id=&quot;w0m-vy-SC9&quot;&gt;
+                                                &lt;items&gt;
+                                                    &lt;menuItem title=&quot;Use Default&quot; id=&quot;agt-UL-0e3&quot;&gt;
+                                                        &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                                        &lt;connections&gt;
+                                                            &lt;action selector=&quot;useStandardLigatures:&quot; target=&quot;-1&quot; id=&quot;7uR-wd-Dx6&quot;/&gt;
+                                                        &lt;/connections&gt;
+                                                    &lt;/menuItem&gt;
+                                                    &lt;menuItem title=&quot;Use None&quot; id=&quot;J7y-lM-qPV&quot;&gt;
+                                                        &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                                        &lt;connections&gt;
+                                                            &lt;action selector=&quot;turnOffLigatures:&quot; target=&quot;-1&quot; id=&quot;iX2-gA-Ilz&quot;/&gt;
+                                                        &lt;/connections&gt;
+                                                    &lt;/menuItem&gt;
+                                                    &lt;menuItem title=&quot;Use All&quot; id=&quot;xQD-1f-W4t&quot;&gt;
+                                                        &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                                        &lt;connections&gt;
+                                                            &lt;action selector=&quot;useAllLigatures:&quot; target=&quot;-1&quot; id=&quot;KcB-kA-TuK&quot;/&gt;
+                                                        &lt;/connections&gt;
+                                                    &lt;/menuItem&gt;
+                                                &lt;/items&gt;
+                                            &lt;/menu&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Baseline&quot; id=&quot;OaQ-X3-Vso&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                            &lt;menu key=&quot;submenu&quot; title=&quot;Baseline&quot; id=&quot;ijk-EB-dga&quot;&gt;
+                                                &lt;items&gt;
+                                                    &lt;menuItem title=&quot;Use Default&quot; id=&quot;3Om-Ey-2VK&quot;&gt;
+                                                        &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                                        &lt;connections&gt;
+                                                            &lt;action selector=&quot;unscript:&quot; target=&quot;-1&quot; id=&quot;0vZ-95-Ywn&quot;/&gt;
+                                                        &lt;/connections&gt;
+                                                    &lt;/menuItem&gt;
+                                                    &lt;menuItem title=&quot;Superscript&quot; id=&quot;Rqc-34-cIF&quot;&gt;
+                                                        &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                                        &lt;connections&gt;
+                                                            &lt;action selector=&quot;superscript:&quot; target=&quot;-1&quot; id=&quot;3qV-fo-wpU&quot;/&gt;
+                                                        &lt;/connections&gt;
+                                                    &lt;/menuItem&gt;
+                                                    &lt;menuItem title=&quot;Subscript&quot; id=&quot;I0S-gh-46l&quot;&gt;
+                                                        &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                                        &lt;connections&gt;
+                                                            &lt;action selector=&quot;subscript:&quot; target=&quot;-1&quot; id=&quot;Q6W-4W-IGz&quot;/&gt;
+                                                        &lt;/connections&gt;
+                                                    &lt;/menuItem&gt;
+                                                    &lt;menuItem title=&quot;Raise&quot; id=&quot;2h7-ER-AoG&quot;&gt;
+                                                        &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                                        &lt;connections&gt;
+                                                            &lt;action selector=&quot;raiseBaseline:&quot; target=&quot;-1&quot; id=&quot;4sk-31-7Q9&quot;/&gt;
+                                                        &lt;/connections&gt;
+                                                    &lt;/menuItem&gt;
+                                                    &lt;menuItem title=&quot;Lower&quot; id=&quot;1tx-W0-xDw&quot;&gt;
+                                                        &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                                        &lt;connections&gt;
+                                                            &lt;action selector=&quot;lowerBaseline:&quot; target=&quot;-1&quot; id=&quot;OF1-bc-KW4&quot;/&gt;
+                                                        &lt;/connections&gt;
+                                                    &lt;/menuItem&gt;
+                                                &lt;/items&gt;
+                                            &lt;/menu&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem isSeparatorItem=&quot;YES&quot; id=&quot;Ndw-q3-faq&quot;/&gt;
+                                        &lt;menuItem title=&quot;Show Colors&quot; keyEquivalent=&quot;C&quot; id=&quot;bgn-CT-cEk&quot;&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;orderFrontColorPanel:&quot; target=&quot;-1&quot; id=&quot;mSX-Xz-DV3&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem isSeparatorItem=&quot;YES&quot; id=&quot;iMs-zA-UFJ&quot;/&gt;
+                                        &lt;menuItem title=&quot;Copy Style&quot; keyEquivalent=&quot;c&quot; id=&quot;5Vv-lz-BsD&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot; option=&quot;YES&quot; command=&quot;YES&quot;/&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;copyFont:&quot; target=&quot;-1&quot; id=&quot;GJO-xA-L4q&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Paste Style&quot; keyEquivalent=&quot;v&quot; id=&quot;vKC-jM-MkH&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot; option=&quot;YES&quot; command=&quot;YES&quot;/&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;pasteFont:&quot; target=&quot;-1&quot; id=&quot;JfD-CL-leO&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                    &lt;/items&gt;
+                                &lt;/menu&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem title=&quot;Text&quot; id=&quot;Fal-I4-PZk&quot;&gt;
+                                &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                &lt;menu key=&quot;submenu&quot; title=&quot;Text&quot; id=&quot;d9c-me-L2H&quot;&gt;
+                                    &lt;items&gt;
+                                        &lt;menuItem title=&quot;Align Left&quot; keyEquivalent=&quot;{&quot; id=&quot;ZM1-6Q-yy1&quot;&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;alignLeft:&quot; target=&quot;-1&quot; id=&quot;zUv-R1-uAa&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Center&quot; keyEquivalent=&quot;|&quot; id=&quot;VIY-Ag-zcb&quot;&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;alignCenter:&quot; target=&quot;-1&quot; id=&quot;spX-mk-kcS&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Justify&quot; id=&quot;J5U-5w-g23&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;alignJustified:&quot; target=&quot;-1&quot; id=&quot;ljL-7U-jND&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Align Right&quot; keyEquivalent=&quot;}&quot; id=&quot;wb2-vD-lq4&quot;&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;alignRight:&quot; target=&quot;-1&quot; id=&quot;r48-bG-YeY&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem isSeparatorItem=&quot;YES&quot; id=&quot;4s2-GY-VfK&quot;/&gt;
+                                        &lt;menuItem title=&quot;Writing Direction&quot; id=&quot;H1b-Si-o9J&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                            &lt;menu key=&quot;submenu&quot; title=&quot;Writing Direction&quot; id=&quot;8mr-sm-Yjd&quot;&gt;
+                                                &lt;items&gt;
+                                                    &lt;menuItem title=&quot;Paragraph&quot; enabled=&quot;NO&quot; id=&quot;ZvO-Gk-QUH&quot;&gt;
+                                                        &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                                    &lt;/menuItem&gt;
+                                                    &lt;menuItem id=&quot;YGs-j5-SAR&quot;&gt;
+                                                        &lt;string key=&quot;title&quot;&gt;        Default&lt;/string&gt;
+                                                        &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                                        &lt;connections&gt;
+                                                            &lt;action selector=&quot;makeBaseWritingDirectionNatural:&quot; target=&quot;-1&quot; id=&quot;qtV-5e-UBP&quot;/&gt;
+                                                        &lt;/connections&gt;
+                                                    &lt;/menuItem&gt;
+                                                    &lt;menuItem id=&quot;Lbh-J2-qVU&quot;&gt;
+                                                        &lt;string key=&quot;title&quot;&gt;        Left to Right&lt;/string&gt;
+                                                        &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                                        &lt;connections&gt;
+                                                            &lt;action selector=&quot;makeBaseWritingDirectionLeftToRight:&quot; target=&quot;-1&quot; id=&quot;S0X-9S-QSf&quot;/&gt;
+                                                        &lt;/connections&gt;
+                                                    &lt;/menuItem&gt;
+                                                    &lt;menuItem id=&quot;jFq-tB-4Kx&quot;&gt;
+                                                        &lt;string key=&quot;title&quot;&gt;        Right to Left&lt;/string&gt;
+                                                        &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                                        &lt;connections&gt;
+                                                            &lt;action selector=&quot;makeBaseWritingDirectionRightToLeft:&quot; target=&quot;-1&quot; id=&quot;5fk-qB-AqJ&quot;/&gt;
+                                                        &lt;/connections&gt;
+                                                    &lt;/menuItem&gt;
+                                                    &lt;menuItem isSeparatorItem=&quot;YES&quot; id=&quot;swp-gr-a21&quot;/&gt;
+                                                    &lt;menuItem title=&quot;Selection&quot; enabled=&quot;NO&quot; id=&quot;cqv-fj-IhA&quot;&gt;
+                                                        &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                                    &lt;/menuItem&gt;
+                                                    &lt;menuItem id=&quot;Nop-cj-93Q&quot;&gt;
+                                                        &lt;string key=&quot;title&quot;&gt;        Default&lt;/string&gt;
+                                                        &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                                        &lt;connections&gt;
+                                                            &lt;action selector=&quot;makeTextWritingDirectionNatural:&quot; target=&quot;-1&quot; id=&quot;lPI-Se-ZHp&quot;/&gt;
+                                                        &lt;/connections&gt;
+                                                    &lt;/menuItem&gt;
+                                                    &lt;menuItem id=&quot;BgM-ve-c93&quot;&gt;
+                                                        &lt;string key=&quot;title&quot;&gt;        Left to Right&lt;/string&gt;
+                                                        &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                                        &lt;connections&gt;
+                                                            &lt;action selector=&quot;makeTextWritingDirectionLeftToRight:&quot; target=&quot;-1&quot; id=&quot;caW-Bv-w94&quot;/&gt;
+                                                        &lt;/connections&gt;
+                                                    &lt;/menuItem&gt;
+                                                    &lt;menuItem id=&quot;RB4-Sm-HuC&quot;&gt;
+                                                        &lt;string key=&quot;title&quot;&gt;        Right to Left&lt;/string&gt;
+                                                        &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                                        &lt;connections&gt;
+                                                            &lt;action selector=&quot;makeTextWritingDirectionRightToLeft:&quot; target=&quot;-1&quot; id=&quot;EXD-6r-ZUu&quot;/&gt;
+                                                        &lt;/connections&gt;
+                                                    &lt;/menuItem&gt;
+                                                &lt;/items&gt;
+                                            &lt;/menu&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem isSeparatorItem=&quot;YES&quot; id=&quot;fKy-g9-1gm&quot;/&gt;
+                                        &lt;menuItem title=&quot;Show Ruler&quot; id=&quot;vLm-3I-IUL&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;toggleRuler:&quot; target=&quot;-1&quot; id=&quot;FOx-HJ-KwY&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Copy Ruler&quot; keyEquivalent=&quot;c&quot; id=&quot;MkV-Pr-PK5&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot; control=&quot;YES&quot; command=&quot;YES&quot;/&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;copyRuler:&quot; target=&quot;-1&quot; id=&quot;71i-fW-3W2&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                        &lt;menuItem title=&quot;Paste Ruler&quot; keyEquivalent=&quot;v&quot; id=&quot;LVM-kO-fVI&quot;&gt;
+                                            &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot; control=&quot;YES&quot; command=&quot;YES&quot;/&gt;
+                                            &lt;connections&gt;
+                                                &lt;action selector=&quot;pasteRuler:&quot; target=&quot;-1&quot; id=&quot;cSh-wd-qM2&quot;/&gt;
+                                            &lt;/connections&gt;
+                                        &lt;/menuItem&gt;
+                                    &lt;/items&gt;
+                                &lt;/menu&gt;
+                            &lt;/menuItem&gt;
+                        &lt;/items&gt;
+                    &lt;/menu&gt;
+                &lt;/menuItem&gt;
+                &lt;menuItem title=&quot;View&quot; id=&quot;H8h-7b-M4v&quot;&gt;
+                    &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                    &lt;menu key=&quot;submenu&quot; title=&quot;View&quot; id=&quot;HyV-fh-RgO&quot;&gt;
+                        &lt;items&gt;
+                            &lt;menuItem title=&quot;Show Toolbar&quot; keyEquivalent=&quot;t&quot; id=&quot;snW-S8-Cw5&quot;&gt;
+                                &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot; option=&quot;YES&quot; command=&quot;YES&quot;/&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;toggleToolbarShown:&quot; target=&quot;-1&quot; id=&quot;BXY-wc-z0C&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem title=&quot;Customize Toolbar…&quot; id=&quot;1UK-8n-QPP&quot;&gt;
+                                &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;runToolbarCustomizationPalette:&quot; target=&quot;-1&quot; id=&quot;pQI-g3-MTW&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                        &lt;/items&gt;
+                    &lt;/menu&gt;
+                &lt;/menuItem&gt;
+                &lt;menuItem title=&quot;Window&quot; id=&quot;aUF-d1-5bR&quot;&gt;
+                    &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                    &lt;menu key=&quot;submenu&quot; title=&quot;Window&quot; systemMenu=&quot;window&quot; id=&quot;Td7-aD-5lo&quot;&gt;
+                        &lt;items&gt;
+                            &lt;menuItem title=&quot;Minimize&quot; keyEquivalent=&quot;m&quot; id=&quot;OY7-WF-poV&quot;&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;performMiniaturize:&quot; target=&quot;-1&quot; id=&quot;VwT-WD-YPe&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem title=&quot;Zoom&quot; id=&quot;R4o-n2-Eq4&quot;&gt;
+                                &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;performZoom:&quot; target=&quot;-1&quot; id=&quot;DIl-cC-cCs&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem isSeparatorItem=&quot;YES&quot; id=&quot;eu3-7i-yIM&quot;/&gt;
+                            &lt;menuItem title=&quot;Bring All to Front&quot; id=&quot;LE2-aR-0XJ&quot;&gt;
+                                &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;arrangeInFront:&quot; target=&quot;-1&quot; id=&quot;DRN-fu-gQh&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                        &lt;/items&gt;
+                    &lt;/menu&gt;
+                &lt;/menuItem&gt;
+                &lt;menuItem title=&quot;Debug&quot; id=&quot;l0a-uE-jbj&quot;&gt;
+                    &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                    &lt;menu key=&quot;submenu&quot; title=&quot;Debug&quot; id=&quot;6qp-h8-RvU&quot;&gt;
+                        &lt;items&gt;
+                            &lt;menuItem title=&quot;Show Operations&quot; id=&quot;gU2-5P-xos&quot;&gt;
+                                &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;showOperations:&quot; target=&quot;Voe-Tx-rLC&quot; id=&quot;C9D-9o-I9c&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem title=&quot;Paste Text as Markup&quot; id=&quot;bxK-wl-oNd&quot;&gt;
+                                &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;pasteAsMarkup:&quot; target=&quot;-1&quot; id=&quot;Ejb-zz-08R&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                            &lt;menuItem title=&quot;Use WK2 by default&quot; id=&quot;AiO-8z-Uwi&quot;&gt;
+                                &lt;modifierMask key=&quot;keyEquivalentModifierMask&quot;/&gt;
+                                &lt;connections&gt;
+                                    &lt;action selector=&quot;toggleUseWK2ByDefault:&quot; target=&quot;Voe-Tx-rLC&quot; id=&quot;GoJ-wy-wd2&quot;/&gt;
+                                &lt;/connections&gt;
+                            &lt;/menuItem&gt;
+                        &lt;/items&gt;
+                    &lt;/menu&gt;
+                &lt;/menuItem&gt;
+            &lt;/items&gt;
+        &lt;/menu&gt;
+        &lt;window title=&quot;WebView Operations&quot; allowsToolTipsWhenApplicationIsInactive=&quot;NO&quot; autorecalculatesKeyViewLoop=&quot;NO&quot; hidesOnDeactivate=&quot;YES&quot; oneShot=&quot;NO&quot; releasedWhenClosed=&quot;NO&quot; visibleAtLaunch=&quot;NO&quot; animationBehavior=&quot;default&quot; id=&quot;XRZ-ss-zpK&quot; userLabel=&quot;Panel&quot; customClass=&quot;NSPanel&quot;&gt;
+            &lt;windowStyleMask key=&quot;styleMask&quot; titled=&quot;YES&quot; closable=&quot;YES&quot; miniaturizable=&quot;YES&quot; utility=&quot;YES&quot; nonactivatingPanel=&quot;YES&quot;/&gt;
+            &lt;windowPositionMask key=&quot;initialPositionMask&quot; leftStrut=&quot;YES&quot; rightStrut=&quot;YES&quot; topStrut=&quot;YES&quot; bottomStrut=&quot;YES&quot;/&gt;
+            &lt;rect key=&quot;contentRect&quot; x=&quot;272&quot; y=&quot;172&quot; width=&quot;565&quot; height=&quot;366&quot;/&gt;
+            &lt;rect key=&quot;screenRect&quot; x=&quot;0.0&quot; y=&quot;0.0&quot; width=&quot;2560&quot; height=&quot;1417&quot;/&gt;
+            &lt;view key=&quot;contentView&quot; id=&quot;64n-CD-rIB&quot;&gt;
+                &lt;rect key=&quot;frame&quot; x=&quot;0.0&quot; y=&quot;0.0&quot; width=&quot;565&quot; height=&quot;366&quot;/&gt;
+                &lt;autoresizingMask key=&quot;autoresizingMask&quot;/&gt;
+            &lt;/view&gt;
+            &lt;connections&gt;
+                &lt;outlet property=&quot;delegate&quot; destination=&quot;Voe-Tx-rLC&quot; id=&quot;h7Q-j9-6JW&quot;/&gt;
+            &lt;/connections&gt;
+            &lt;point key=&quot;canvasLocation&quot; x=&quot;392.5&quot; y=&quot;403&quot;/&gt;
+        &lt;/window&gt;
+    &lt;/objects&gt;
+&lt;/document&gt;
</ins></span></pre></div>
<a id="trunkToolsWebEditingTesterWK1WebDocumentControllerh"></a>
<div class="addfile"><h4>Added: trunk/Tools/WebEditingTester/WK1WebDocumentController.h (0 => 180348)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebEditingTester/WK1WebDocumentController.h                                (rev 0)
+++ trunk/Tools/WebEditingTester/WK1WebDocumentController.h        2015-02-19 18:41:24 UTC (rev 180348)
</span><span class="lines">@@ -0,0 +1,31 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import &quot;WebDocumentController.h&quot;
+
+@interface WK1WebDocumentController : WebDocumentController&lt;WebDocument&gt;
+
+@end
+
</ins></span></pre></div>
<a id="trunkToolsWebEditingTesterWK1WebDocumentControllerm"></a>
<div class="addfile"><h4>Added: trunk/Tools/WebEditingTester/WK1WebDocumentController.m (0 => 180348)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebEditingTester/WK1WebDocumentController.m                                (rev 0)
+++ trunk/Tools/WebEditingTester/WK1WebDocumentController.m        2015-02-19 18:41:24 UTC (rev 180348)
</span><span class="lines">@@ -0,0 +1,75 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import &quot;WK1WebDocumentController.h&quot;
+
+#import &lt;WebKit/WebKit.h&gt;
+#import &lt;WebKit/WebPreferences.h&gt;
+#import &lt;WebKit/WebPreferencesPrivate.h&gt;
+#import &lt;WebKit/WebPreferenceKeysPrivate.h&gt;
+#import &lt;WebKit/WebViewPrivate.h&gt;
+
+@implementation WK1WebDocumentController {
+    WebView *_webView;
+}
+
+- (void)awakeFromNib
+{
+    _webView = [[WebView alloc] initWithFrame:[containerView bounds] frameName:nil groupName:@&quot;WebEditingTester&quot;];
+    [_webView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
+    
+    [_webView setEditable:YES];
+    [_webView setUIDelegate:self];
+    
+    [[WebPreferences standardPreferences] setFullScreenEnabled:YES];
+    [[WebPreferences standardPreferences] setDeveloperExtrasEnabled:YES];
+    [[WebPreferences standardPreferences] setImageControlsEnabled:YES];
+    [[WebPreferences standardPreferences] setServiceControlsEnabled:YES];
+    
+    [self.window setTitle:@&quot;WebEditor [WK1]&quot;];
+    [containerView addSubview:_webView];
+}
+
+- (void)loadContent
+{
+    [[_webView mainFrame] loadHTMLString:[self defaultEditingSource] baseURL:nil];    
+}
+
+- (void)dealloc
+{
+    [_webView setUIDelegate:nil];
+    [_webView release];
+    
+    [super dealloc];
+}
+
+- (IBAction)pasteAsMarkup:(id)sender
+{
+    // FIXME: This is probably incorrect, should use WebArchive
+    NSString *markup = [[NSPasteboard generalPasteboard] stringForType:NSStringPboardType];
+    [_webView replaceSelectionWithMarkupString:markup ? markup : @&quot;&quot;];
+}
+
+@end
</ins></span></pre></div>
<a id="trunkToolsWebEditingTesterWK2WebDocumentControllerh"></a>
<div class="addfile"><h4>Added: trunk/Tools/WebEditingTester/WK2WebDocumentController.h (0 => 180348)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebEditingTester/WK2WebDocumentController.h                                (rev 0)
+++ trunk/Tools/WebEditingTester/WK2WebDocumentController.h        2015-02-19 18:41:24 UTC (rev 180348)
</span><span class="lines">@@ -0,0 +1,35 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import &quot;WebDocumentController.h&quot;
+
+@class WKWebViewConfiguration;
+
+@interface WK2WebDocumentController : WebDocumentController&lt;WebDocument&gt;
+
+- (instancetype)initWithConfiguration:(WKWebViewConfiguration *)configuration;
+
+@end
+
</ins></span></pre></div>
<a id="trunkToolsWebEditingTesterWK2WebDocumentControllerm"></a>
<div class="addfile"><h4>Added: trunk/Tools/WebEditingTester/WK2WebDocumentController.m (0 => 180348)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebEditingTester/WK2WebDocumentController.m                                (rev 0)
+++ trunk/Tools/WebEditingTester/WK2WebDocumentController.m        2015-02-19 18:41:24 UTC (rev 180348)
</span><span class="lines">@@ -0,0 +1,85 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import &quot;WK2WebDocumentController.h&quot;
+
+#import &lt;WebKit/WKFrameInfo.h&gt;
+#import &lt;WebKit/WKNavigationDelegate.h&gt;
+#import &lt;WebKit/WKPreferencesPrivate.h&gt;
+#import &lt;WebKit/WKUIDelegate.h&gt;
+#import &lt;WebKit/WKWebView.h&gt;
+#import &lt;WebKit/WKWebViewConfigurationPrivate.h&gt;
+#import &lt;WebKit/WKWebViewPrivate.h&gt;
+#import &lt;WebKit/_WKWebsiteDataStore.h&gt;
+
+@interface WK2WebDocumentController () &lt;WKUIDelegate&gt;
+@end
+
+@implementation WK2WebDocumentController {
+    WKWebViewConfiguration *_configuration;
+    WKWebView *_webView;
+}
+
+- (instancetype)initWithConfiguration:(WKWebViewConfiguration *)configuration
+{
+    if (!(self = [super initWithWindowNibName:@&quot;WebDocument&quot;]))
+        return nil;
+    _configuration = [configuration copy];
+    
+    return self;
+    
+}
+
+- (IBAction)pasteAsMarkup:(id)sender
+{
+    NSLog(@&quot;To be implemented&quot;);
+}
+
+- (void)awakeFromNib
+{
+    _webView = [[WKWebView alloc] initWithFrame:[containerView bounds] configuration:_configuration];
+    [_webView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
+    [_webView _setEditable:YES];
+    [_webView setUIDelegate:self];
+    
+    [containerView addSubview:_webView];
+    [self.window setTitle:@&quot;WebEditor [WK2]&quot;];
+}
+
+- (void)dealloc
+{
+    [_webView setUIDelegate:nil];
+    [_webView release];
+    [_configuration release];
+    
+    [super dealloc];
+}
+
+- (void)loadContent
+{
+    [_webView loadHTMLString:[self defaultEditingSource] baseURL:nil];
+}
+
+@end
</ins></span></pre></div>
<a id="trunkToolsWebEditingTesterWebDocumentxib"></a>
<div class="addfile"><h4>Added: trunk/Tools/WebEditingTester/WebDocument.xib (0 => 180348)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebEditingTester/WebDocument.xib                                (rev 0)
+++ trunk/Tools/WebEditingTester/WebDocument.xib        2015-02-19 18:41:24 UTC (rev 180348)
</span><span class="lines">@@ -0,0 +1,41 @@
</span><ins>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;
+&lt;document type=&quot;com.apple.InterfaceBuilder3.Cocoa.XIB&quot; version=&quot;3.0&quot; toolsVersion=&quot;8034&quot; systemVersion=&quot;14D87&quot; targetRuntime=&quot;MacOSX.Cocoa&quot; propertyAccessControl=&quot;none&quot; useAutolayout=&quot;YES&quot; customObjectInstantitationMethod=&quot;direct&quot;&gt;
+    &lt;dependencies&gt;
+        &lt;plugIn identifier=&quot;com.apple.InterfaceBuilder.CocoaPlugin&quot; version=&quot;8034&quot;/&gt;
+    &lt;/dependencies&gt;
+    &lt;objects&gt;
+        &lt;customObject id=&quot;-2&quot; userLabel=&quot;File's Owner&quot; customClass=&quot;WebDocumentController&quot;&gt;
+            &lt;connections&gt;
+                &lt;outlet property=&quot;containerView&quot; destination=&quot;xWm-c8-kTR&quot; id=&quot;xua-2M-DAl&quot;/&gt;
+                &lt;outlet property=&quot;window&quot; destination=&quot;xOd-HO-29H&quot; id=&quot;JIz-fz-R2o&quot;/&gt;
+            &lt;/connections&gt;
+        &lt;/customObject&gt;
+        &lt;customObject id=&quot;-1&quot; userLabel=&quot;First Responder&quot; customClass=&quot;FirstResponder&quot;/&gt;
+        &lt;customObject id=&quot;-3&quot; userLabel=&quot;Application&quot; customClass=&quot;NSObject&quot;/&gt;
+        &lt;window title=&quot;Window&quot; allowsToolTipsWhenApplicationIsInactive=&quot;NO&quot; autorecalculatesKeyViewLoop=&quot;NO&quot; animationBehavior=&quot;default&quot; id=&quot;xOd-HO-29H&quot; userLabel=&quot;Window&quot;&gt;
+            &lt;windowStyleMask key=&quot;styleMask&quot; titled=&quot;YES&quot; closable=&quot;YES&quot; miniaturizable=&quot;YES&quot; resizable=&quot;YES&quot; fullSizeContentView=&quot;YES&quot;/&gt;
+            &lt;windowPositionMask key=&quot;initialPositionMask&quot; leftStrut=&quot;YES&quot; rightStrut=&quot;YES&quot; topStrut=&quot;YES&quot; bottomStrut=&quot;YES&quot;/&gt;
+            &lt;rect key=&quot;contentRect&quot; x=&quot;133&quot; y=&quot;235&quot; width=&quot;507&quot; height=&quot;413&quot;/&gt;
+            &lt;rect key=&quot;screenRect&quot; x=&quot;0.0&quot; y=&quot;0.0&quot; width=&quot;2560&quot; height=&quot;1417&quot;/&gt;
+            &lt;value key=&quot;minSize&quot; type=&quot;size&quot; width=&quot;94&quot; height=&quot;86&quot;/&gt;
+            &lt;view key=&quot;contentView&quot; id=&quot;gIp-Ho-8D9&quot;&gt;
+                &lt;rect key=&quot;frame&quot; x=&quot;0.0&quot; y=&quot;0.0&quot; width=&quot;507&quot; height=&quot;413&quot;/&gt;
+                &lt;autoresizingMask key=&quot;autoresizingMask&quot;/&gt;
+                &lt;subviews&gt;
+                    &lt;customView translatesAutoresizingMaskIntoConstraints=&quot;NO&quot; id=&quot;xWm-c8-kTR&quot;&gt;
+                        &lt;rect key=&quot;frame&quot; x=&quot;0.0&quot; y=&quot;0.0&quot; width=&quot;507&quot; height=&quot;413&quot;/&gt;
+                    &lt;/customView&gt;
+                &lt;/subviews&gt;
+                &lt;constraints&gt;
+                    &lt;constraint firstItem=&quot;xWm-c8-kTR&quot; firstAttribute=&quot;top&quot; secondItem=&quot;gIp-Ho-8D9&quot; secondAttribute=&quot;top&quot; id=&quot;0bJ-GX-Ftr&quot;/&gt;
+                    &lt;constraint firstAttribute=&quot;bottom&quot; secondItem=&quot;xWm-c8-kTR&quot; secondAttribute=&quot;bottom&quot; id=&quot;JYw-LP-aQG&quot;/&gt;
+                    &lt;constraint firstItem=&quot;xWm-c8-kTR&quot; firstAttribute=&quot;leading&quot; secondItem=&quot;gIp-Ho-8D9&quot; secondAttribute=&quot;leading&quot; id=&quot;Lko-SY-7ZO&quot;/&gt;
+                    &lt;constraint firstAttribute=&quot;trailing&quot; secondItem=&quot;xWm-c8-kTR&quot; secondAttribute=&quot;trailing&quot; id=&quot;e9O-Wq-iuR&quot;/&gt;
+                &lt;/constraints&gt;
+            &lt;/view&gt;
+            &lt;connections&gt;
+                &lt;outlet property=&quot;delegate&quot; destination=&quot;-2&quot; id=&quot;0bl-1N-x8E&quot;/&gt;
+            &lt;/connections&gt;
+        &lt;/window&gt;
+    &lt;/objects&gt;
+&lt;/document&gt;
</ins></span></pre></div>
<a id="trunkToolsWebEditingTesterWebDocumentControllerh"></a>
<div class="addfile"><h4>Added: trunk/Tools/WebEditingTester/WebDocumentController.h (0 => 180348)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebEditingTester/WebDocumentController.h                                (rev 0)
+++ trunk/Tools/WebEditingTester/WebDocumentController.h        2015-02-19 18:41:24 UTC (rev 180348)
</span><span class="lines">@@ -0,0 +1,41 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import &lt;Cocoa/Cocoa.h&gt;
+
+@protocol WebDocument
+- (IBAction)pasteAsMarkup:(id)sender;
+@end
+
+@interface WebDocumentController : NSWindowController
+{
+    IBOutlet NSView *containerView;
+}
+- (NSString *)defaultEditingSource;
+- (void)applicationTerminating;
+- (void)loadContent;
+
+@end
+
</ins></span></pre></div>
<a id="trunkToolsWebEditingTesterWebDocumentControllerm"></a>
<div class="addfile"><h4>Added: trunk/Tools/WebEditingTester/WebDocumentController.m (0 => 180348)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebEditingTester/WebDocumentController.m                                (rev 0)
+++ trunk/Tools/WebEditingTester/WebDocumentController.m        2015-02-19 18:41:24 UTC (rev 180348)
</span><span class="lines">@@ -0,0 +1,55 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import &quot;WebDocumentController.h&quot;
+
+@implementation WebDocumentController
+
+- (id)initWithWindow:(NSWindow *)window
+{
+    self = [super initWithWindow:window];
+    return self;
+}
+
+- (void)windowDidLoad
+{    
+    [super windowDidLoad];
+}
+
+- (const NSString *)defaultEditingSource
+{
+    const static NSString *source = @&quot;&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;&quot;;
+    return source;
+}
+
+- (void)applicationTerminating
+{
+}
+
+- (void)loadContent
+{
+}
+
+@end
</ins></span></pre></div>
<a id="trunkToolsWebEditingTesterWebEditingTesterxcodeprojprojectpbxproj"></a>
<div class="addfile"><h4>Added: trunk/Tools/WebEditingTester/WebEditingTester.xcodeproj/project.pbxproj (0 => 180348)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebEditingTester/WebEditingTester.xcodeproj/project.pbxproj                                (rev 0)
+++ trunk/Tools/WebEditingTester/WebEditingTester.xcodeproj/project.pbxproj        2015-02-19 18:41:24 UTC (rev 180348)
</span><span class="lines">@@ -0,0 +1,315 @@
</span><ins>+// !$*UTF8*$!
+{
+        archiveVersion = 1;
+        classes = {
+        };
+        objectVersion = 46;
+        objects = {
+
+/* Begin PBXBuildFile section */
+                C53E7D0D1A9546E600818F19 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = C53E7D0B1A9546E600818F19 /* MainMenu.xib */; };
+                C53E7D0E1A9546E600818F19 /* WebDocument.xib in Resources */ = {isa = PBXBuildFile; fileRef = C53E7D0C1A9546E600818F19 /* WebDocument.xib */; };
+                C558CDB31A92D6900059A907 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = C558CDB21A92D6900059A907 /* AppDelegate.m */; };
+                C558CDB51A92D6900059A907 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = C558CDB41A92D6900059A907 /* main.m */; };
+                C558CDB81A92D6900059A907 /* WebDocumentController.m in Sources */ = {isa = PBXBuildFile; fileRef = C558CDB71A92D6900059A907 /* WebDocumentController.m */; };
+                C59F9B971A93C8E00041A959 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C59F9B961A93C8E00041A959 /* Cocoa.framework */; };
+                C59F9B991A93C8E90041A959 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C59F9B981A93C8E90041A959 /* WebKit.framework */; };
+                C59F9B9F1A93CB630041A959 /* WK1WebDocumentController.m in Sources */ = {isa = PBXBuildFile; fileRef = C59F9B9C1A93CB630041A959 /* WK1WebDocumentController.m */; };
+                C59F9BA01A93CB630041A959 /* WK2WebDocumentController.m in Sources */ = {isa = PBXBuildFile; fileRef = C59F9B9E1A93CB630041A959 /* WK2WebDocumentController.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+                C53E7D0B1A9546E600818F19 /* MainMenu.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainMenu.xib; sourceTree = &quot;&lt;group&gt;&quot;; };
+                C53E7D0C1A9546E600818F19 /* WebDocument.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = WebDocument.xib; sourceTree = &quot;&lt;group&gt;&quot;; };
+                C558CDAC1A92D6900059A907 /* WebEditingTester.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WebEditingTester.app; sourceTree = BUILT_PRODUCTS_DIR; };
+                C558CDB01A92D6900059A907 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = &quot;&lt;group&gt;&quot;; };
+                C558CDB11A92D6900059A907 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                C558CDB21A92D6900059A907 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+                C558CDB41A92D6900059A907 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+                C558CDB61A92D6900059A907 /* WebDocumentController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebDocumentController.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                C558CDB71A92D6900059A907 /* WebDocumentController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = WebDocumentController.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+                C59F9B961A93C8E00041A959 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
+                C59F9B981A93C8E90041A959 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
+                C59F9B9B1A93CB630041A959 /* WK1WebDocumentController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WK1WebDocumentController.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                C59F9B9C1A93CB630041A959 /* WK1WebDocumentController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WK1WebDocumentController.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+                C59F9B9D1A93CB630041A959 /* WK2WebDocumentController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WK2WebDocumentController.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                C59F9B9E1A93CB630041A959 /* WK2WebDocumentController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WK2WebDocumentController.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+                C558CDA91A92D6900059A907 /* Frameworks */ = {
+                        isa = PBXFrameworksBuildPhase;
+                        buildActionMask = 2147483647;
+                        files = (
+                                C59F9B991A93C8E90041A959 /* WebKit.framework in Frameworks */,
+                                C59F9B971A93C8E00041A959 /* Cocoa.framework in Frameworks */,
+                        );
+                        runOnlyForDeploymentPostprocessing = 0;
+                };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+                C558CDA31A92D6900059A907 = {
+                        isa = PBXGroup;
+                        children = (
+                                C558CDAE1A92D6900059A907 /* WebEditingTester */,
+                                C59F9B9A1A93C9030041A959 /* Resources */,
+                                C558CDAF1A92D6900059A907 /* Supporting Files */,
+                                C558CDD51A93C8830059A907 /* Frameworks */,
+                                C558CDAD1A92D6900059A907 /* Products */,
+                        );
+                        sourceTree = &quot;&lt;group&gt;&quot;;
+                };
+                C558CDAD1A92D6900059A907 /* Products */ = {
+                        isa = PBXGroup;
+                        children = (
+                                C558CDAC1A92D6900059A907 /* WebEditingTester.app */,
+                        );
+                        name = Products;
+                        sourceTree = &quot;&lt;group&gt;&quot;;
+                };
+                C558CDAE1A92D6900059A907 /* WebEditingTester */ = {
+                        isa = PBXGroup;
+                        children = (
+                                C558CDB11A92D6900059A907 /* AppDelegate.h */,
+                                C558CDB21A92D6900059A907 /* AppDelegate.m */,
+                                C59F9B9B1A93CB630041A959 /* WK1WebDocumentController.h */,
+                                C59F9B9C1A93CB630041A959 /* WK1WebDocumentController.m */,
+                                C59F9B9D1A93CB630041A959 /* WK2WebDocumentController.h */,
+                                C59F9B9E1A93CB630041A959 /* WK2WebDocumentController.m */,
+                                C558CDB61A92D6900059A907 /* WebDocumentController.h */,
+                                C558CDB71A92D6900059A907 /* WebDocumentController.m */,
+                        );
+                        name = WebEditingTester;
+                        sourceTree = &quot;&lt;group&gt;&quot;;
+                };
+                C558CDAF1A92D6900059A907 /* Supporting Files */ = {
+                        isa = PBXGroup;
+                        children = (
+                                C558CDB01A92D6900059A907 /* Info.plist */,
+                                C558CDB41A92D6900059A907 /* main.m */,
+                        );
+                        name = &quot;Supporting Files&quot;;
+                        sourceTree = &quot;&lt;group&gt;&quot;;
+                };
+                C558CDD51A93C8830059A907 /* Frameworks */ = {
+                        isa = PBXGroup;
+                        children = (
+                                C59F9B981A93C8E90041A959 /* WebKit.framework */,
+                                C59F9B961A93C8E00041A959 /* Cocoa.framework */,
+                        );
+                        name = Frameworks;
+                        sourceTree = &quot;&lt;group&gt;&quot;;
+                };
+                C59F9B9A1A93C9030041A959 /* Resources */ = {
+                        isa = PBXGroup;
+                        children = (
+                                C53E7D0B1A9546E600818F19 /* MainMenu.xib */,
+                                C53E7D0C1A9546E600818F19 /* WebDocument.xib */,
+                        );
+                        name = Resources;
+                        sourceTree = &quot;&lt;group&gt;&quot;;
+                };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+                C558CDAB1A92D6900059A907 /* WebEditingTester */ = {
+                        isa = PBXNativeTarget;
+                        buildConfigurationList = C558CDCF1A92D6900059A907 /* Build configuration list for PBXNativeTarget &quot;WebEditingTester&quot; */;
+                        buildPhases = (
+                                C558CDA81A92D6900059A907 /* Sources */,
+                                C558CDA91A92D6900059A907 /* Frameworks */,
+                                C558CDAA1A92D6900059A907 /* Resources */,
+                        );
+                        buildRules = (
+                        );
+                        dependencies = (
+                        );
+                        name = WebEditingTester;
+                        productName = WebEditingTester;
+                        productReference = C558CDAC1A92D6900059A907 /* WebEditingTester.app */;
+                        productType = &quot;com.apple.product-type.application&quot;;
+                };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+                C558CDA41A92D6900059A907 /* Project object */ = {
+                        isa = PBXProject;
+                        attributes = {
+                                LastUpgradeCheck = 0700;
+                                ORGANIZATIONNAME = &quot;Enrica Casucci&quot;;
+                                TargetAttributes = {
+                                        C558CDAB1A92D6900059A907 = {
+                                                CreatedOnToolsVersion = 7.0;
+                                        };
+                                };
+                        };
+                        buildConfigurationList = C558CDA71A92D6900059A907 /* Build configuration list for PBXProject &quot;WebEditingTester&quot; */;
+                        compatibilityVersion = &quot;Xcode 3.2&quot;;
+                        developmentRegion = English;
+                        hasScannedForEncodings = 0;
+                        knownRegions = (
+                                en,
+                                Base,
+                        );
+                        mainGroup = C558CDA31A92D6900059A907;
+                        productRefGroup = C558CDAD1A92D6900059A907 /* Products */;
+                        projectDirPath = &quot;&quot;;
+                        projectRoot = &quot;&quot;;
+                        targets = (
+                                C558CDAB1A92D6900059A907 /* WebEditingTester */,
+                        );
+                };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+                C558CDAA1A92D6900059A907 /* Resources */ = {
+                        isa = PBXResourcesBuildPhase;
+                        buildActionMask = 2147483647;
+                        files = (
+                                C53E7D0E1A9546E600818F19 /* WebDocument.xib in Resources */,
+                                C53E7D0D1A9546E600818F19 /* MainMenu.xib in Resources */,
+                        );
+                        runOnlyForDeploymentPostprocessing = 0;
+                };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+                C558CDA81A92D6900059A907 /* Sources */ = {
+                        isa = PBXSourcesBuildPhase;
+                        buildActionMask = 2147483647;
+                        files = (
+                                C558CDB81A92D6900059A907 /* WebDocumentController.m in Sources */,
+                                C59F9BA01A93CB630041A959 /* WK2WebDocumentController.m in Sources */,
+                                C558CDB51A92D6900059A907 /* main.m in Sources */,
+                                C558CDB31A92D6900059A907 /* AppDelegate.m in Sources */,
+                                C59F9B9F1A93CB630041A959 /* WK1WebDocumentController.m in Sources */,
+                        );
+                        runOnlyForDeploymentPostprocessing = 0;
+                };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+                C558CDCD1A92D6900059A907 /* Debug */ = {
+                        isa = XCBuildConfiguration;
+                        buildSettings = {
+                                ALWAYS_SEARCH_USER_PATHS = NO;
+                                CLANG_CXX_LANGUAGE_STANDARD = &quot;gnu++0x&quot;;
+                                CLANG_CXX_LIBRARY = &quot;libc++&quot;;
+                                CLANG_ENABLE_MODULES = YES;
+                                CLANG_ENABLE_OBJC_ARC = NO;
+                                CLANG_WARN_BOOL_CONVERSION = YES;
+                                CLANG_WARN_CONSTANT_CONVERSION = YES;
+                                CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+                                CLANG_WARN_EMPTY_BODY = YES;
+                                CLANG_WARN_ENUM_CONVERSION = YES;
+                                CLANG_WARN_INT_CONVERSION = YES;
+                                CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+                                CLANG_WARN_UNREACHABLE_CODE = YES;
+                                CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+                                CODE_SIGN_IDENTITY = &quot;&quot;;
+                                COPY_PHASE_STRIP = NO;
+                                ENABLE_STRICT_OBJC_MSGSEND = YES;
+                                GCC_C_LANGUAGE_STANDARD = gnu99;
+                                GCC_DYNAMIC_NO_PIC = NO;
+                                GCC_OPTIMIZATION_LEVEL = 0;
+                                GCC_PREPROCESSOR_DEFINITIONS = (
+                                        &quot;DEBUG=1&quot;,
+                                        &quot;$(inherited)&quot;,
+                                );
+                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+                                GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+                                GCC_WARN_UNDECLARED_SELECTOR = YES;
+                                GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+                                GCC_WARN_UNUSED_FUNCTION = YES;
+                                GCC_WARN_UNUSED_VARIABLE = YES;
+                                MACOSX_DEPLOYMENT_TARGET = 10.10;
+                                MTL_ENABLE_DEBUG_INFO = YES;
+                                ONLY_ACTIVE_ARCH = YES;
+                                SDKROOT = macosx;
+                        };
+                        name = Debug;
+                };
+                C558CDCE1A92D6900059A907 /* Release */ = {
+                        isa = XCBuildConfiguration;
+                        buildSettings = {
+                                ALWAYS_SEARCH_USER_PATHS = NO;
+                                CLANG_CXX_LANGUAGE_STANDARD = &quot;gnu++0x&quot;;
+                                CLANG_CXX_LIBRARY = &quot;libc++&quot;;
+                                CLANG_ENABLE_MODULES = YES;
+                                CLANG_ENABLE_OBJC_ARC = NO;
+                                CLANG_WARN_BOOL_CONVERSION = YES;
+                                CLANG_WARN_CONSTANT_CONVERSION = YES;
+                                CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+                                CLANG_WARN_EMPTY_BODY = YES;
+                                CLANG_WARN_ENUM_CONVERSION = YES;
+                                CLANG_WARN_INT_CONVERSION = YES;
+                                CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+                                CLANG_WARN_UNREACHABLE_CODE = YES;
+                                CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+                                CODE_SIGN_IDENTITY = &quot;&quot;;
+                                COPY_PHASE_STRIP = NO;
+                                DEBUG_INFORMATION_FORMAT = &quot;dwarf-with-dsym&quot;;
+                                ENABLE_NS_ASSERTIONS = NO;
+                                ENABLE_STRICT_OBJC_MSGSEND = YES;
+                                GCC_C_LANGUAGE_STANDARD = gnu99;
+                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+                                GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+                                GCC_WARN_UNDECLARED_SELECTOR = YES;
+                                GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+                                GCC_WARN_UNUSED_FUNCTION = YES;
+                                GCC_WARN_UNUSED_VARIABLE = YES;
+                                MACOSX_DEPLOYMENT_TARGET = 10.10;
+                                MTL_ENABLE_DEBUG_INFO = NO;
+                                SDKROOT = macosx;
+                        };
+                        name = Release;
+                };
+                C558CDD01A92D6900059A907 /* Debug */ = {
+                        isa = XCBuildConfiguration;
+                        buildSettings = {
+                                ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+                                COMBINE_HIDPI_IMAGES = YES;
+                                INFOPLIST_FILE = &quot;$(SRCROOT)/Info.plist&quot;;
+                                LD_RUNPATH_SEARCH_PATHS = &quot;$(inherited) @executable_path/../Frameworks&quot;;
+                                PRODUCT_NAME = &quot;$(TARGET_NAME)&quot;;
+                        };
+                        name = Debug;
+                };
+                C558CDD11A92D6900059A907 /* Release */ = {
+                        isa = XCBuildConfiguration;
+                        buildSettings = {
+                                ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+                                COMBINE_HIDPI_IMAGES = YES;
+                                INFOPLIST_FILE = &quot;$(SRCROOT)/Info.plist&quot;;
+                                LD_RUNPATH_SEARCH_PATHS = &quot;$(inherited) @executable_path/../Frameworks&quot;;
+                                PRODUCT_NAME = &quot;$(TARGET_NAME)&quot;;
+                        };
+                        name = Release;
+                };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+                C558CDA71A92D6900059A907 /* Build configuration list for PBXProject &quot;WebEditingTester&quot; */ = {
+                        isa = XCConfigurationList;
+                        buildConfigurations = (
+                                C558CDCD1A92D6900059A907 /* Debug */,
+                                C558CDCE1A92D6900059A907 /* Release */,
+                        );
+                        defaultConfigurationIsVisible = 0;
+                        defaultConfigurationName = Release;
+                };
+                C558CDCF1A92D6900059A907 /* Build configuration list for PBXNativeTarget &quot;WebEditingTester&quot; */ = {
+                        isa = XCConfigurationList;
+                        buildConfigurations = (
+                                C558CDD01A92D6900059A907 /* Debug */,
+                                C558CDD11A92D6900059A907 /* Release */,
+                        );
+                        defaultConfigurationIsVisible = 0;
+                        defaultConfigurationName = Release;
+                };
+/* End XCConfigurationList section */
+        };
+        rootObject = C558CDA41A92D6900059A907 /* Project object */;
+}
</ins></span></pre></div>
<a id="trunkToolsWebEditingTestermainm"></a>
<div class="addfile"><h4>Added: trunk/Tools/WebEditingTester/main.m (0 => 180348)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebEditingTester/main.m                                (rev 0)
+++ trunk/Tools/WebEditingTester/main.m        2015-02-19 18:41:24 UTC (rev 180348)
</span><span class="lines">@@ -0,0 +1,31 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import &lt;Cocoa/Cocoa.h&gt;
+
+int main(int argc, const char * argv[])
+{
+    return NSApplicationMain(argc, argv);
+}
</ins></span></pre>
</div>
</div>

</body>
</html>