<!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>[281685] trunk</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/281685">281685</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2021-08-26 21:58:53 -0700 (Thu, 26 Aug 2021)</dd>
</dl>

<h3>Log Message</h3>
<pre>Caret should respect text background color
https://bugs.webkit.org/show_bug.cgi?id=117493

Patch by Joone Hur <joone@webkit.org> on 2021-08-26
Reviewed by Ryosuke Niwa.

Source/WebCore:

An earlier fix for caret color, which we are now improving, was this commit:
https://trac.webkit.org/changeset/152612/webkit

This patch allows the caret to become visible in the black background
by getting the caret color from the element containing
the text, not the root editable element that has the contentEditable attribute.

* editing/FrameSelection.cpp:
(WebCore::CaretBase::computeCaretColor):

LayoutTests:

Rebaselined caret rendering tests.

* editing/caret/caret-color.html:
* editing/caret/color-span-inside-editable-background-expected.html:
* editing/caret/color-span-inside-editable-expected.html:
* fast/css/caret-color-auto-expected.html:
* platform/ios-wk2/editing/caret/caret-color-expected.png:
* platform/ios/editing/caret/caret-color-expected.txt:
* platform/mac/editing/caret/caret-color-expected.png:
* platform/mac/editing/caret/caret-color-expected.txt:
* platform/win/editing/caret/caret-color-expected.txt:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestseditingcaretcaretcolorhtml">trunk/LayoutTests/editing/caret/caret-color.html</a></li>
<li><a href="#trunkLayoutTestseditingcaretcolorspaninsideeditablebackgroundexpectedhtml">trunk/LayoutTests/editing/caret/color-span-inside-editable-background-expected.html</a></li>
<li><a href="#trunkLayoutTestseditingcaretcolorspaninsideeditableexpectedhtml">trunk/LayoutTests/editing/caret/color-span-inside-editable-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastcsscaretcolorautoexpectedhtml">trunk/LayoutTests/fast/css/caret-color-auto-expected.html</a></li>
<li><a href="#trunkLayoutTestsplatformioseditingcaretcaretcolorexpectedtxt">trunk/LayoutTests/platform/ios/editing/caret/caret-color-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformioswk2editingcaretcaretcolorexpectedpng">trunk/LayoutTests/platform/ios-wk2/editing/caret/caret-color-expected.png</a></li>
<li><a href="#trunkLayoutTestsplatformmaceditingcaretcaretcolorexpectedpng">trunk/LayoutTests/platform/mac/editing/caret/caret-color-expected.png</a></li>
<li><a href="#trunkLayoutTestsplatformmaceditingcaretcaretcolorexpectedtxt">trunk/LayoutTests/platform/mac/editing/caret/caret-color-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformwineditingcaretcaretcolorexpectedtxt">trunk/LayoutTests/platform/win/editing/caret/caret-color-expected.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreeditingFrameSelectioncpp">trunk/Source/WebCore/editing/FrameSelection.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (281684 => 281685)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog      2021-08-27 04:26:35 UTC (rev 281684)
+++ trunk/LayoutTests/ChangeLog 2021-08-27 04:58:53 UTC (rev 281685)
</span><span class="lines">@@ -1,3 +1,22 @@
</span><ins>+2021-08-26  Joone Hur  <joone@webkit.org>
+
+        Caret should respect text background color
+        https://bugs.webkit.org/show_bug.cgi?id=117493
+
+        Reviewed by Ryosuke Niwa.
+
+        Rebaselined caret rendering tests.
+
+        * editing/caret/caret-color.html:
+        * editing/caret/color-span-inside-editable-background-expected.html:
+        * editing/caret/color-span-inside-editable-expected.html:
+        * fast/css/caret-color-auto-expected.html:
+        * platform/ios-wk2/editing/caret/caret-color-expected.png:
+        * platform/ios/editing/caret/caret-color-expected.txt:
+        * platform/mac/editing/caret/caret-color-expected.png:
+        * platform/mac/editing/caret/caret-color-expected.txt:
+        * platform/win/editing/caret/caret-color-expected.txt:
+
</ins><span class="cx"> 2021-08-26  Simon Fraser  <simon.fraser@apple.com>
</span><span class="cx"> 
</span><span class="cx">         CSS keyframed animations don't respect edges in 4 value background-position
</span></span></pre></div>
<a id="trunkLayoutTestseditingcaretcaretcolorhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/editing/caret/caret-color.html (281684 => 281685)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/editing/caret/caret-color.html 2021-08-27 04:26:35 UTC (rev 281684)
+++ trunk/LayoutTests/editing/caret/caret-color.html    2021-08-27 04:58:53 UTC (rev 281685)
</span><span class="lines">@@ -16,10 +16,10 @@
</span><span class="cx"> <title>Editing Test</title> 
</span><span class="cx"> </head> 
</span><span class="cx"> <body>
</span><del>-<p>This tests to make sure that the caret is visible in the black background by getting the caret color from the color of the element(span) containing the text, not the parent element(div) that has the contentEditable attribute.
</del><ins>+<p>This tests to make sure that the caret is visible in the black background by getting the caret color from the color of the element(span) containing the text, not the root editable element(div) that has the contentEditable attribute.
</ins><span class="cx"> </p>
</span><del>-<div contenteditable id="root" class="editing">
-<span id="test" style="color: white; background-color: black">Where is my caret?</span>
</del><ins>+<div contenteditable id="root" class="editing" style="background-color: black" >
+<span id="test" style="color: white">Where is my caret?</span>
</ins><span class="cx"> </div>
</span><span class="cx"> 
</span><span class="cx"> <script>
</span></span></pre></div>
<a id="trunkLayoutTestseditingcaretcolorspaninsideeditablebackgroundexpectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/editing/caret/color-span-inside-editable-background-expected.html (281684 => 281685)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/editing/caret/color-span-inside-editable-background-expected.html      2021-08-27 04:26:35 UTC (rev 281684)
+++ trunk/LayoutTests/editing/caret/color-span-inside-editable-background-expected.html 2021-08-27 04:58:53 UTC (rev 281685)
</span><span class="lines">@@ -1,4 +1,4 @@
</span><span class="cx"> This test makes sure that carets in content editable divs with a background color specified remain black even if there is a span inside them with a foreground color specified.
</span><span class="cx"> <div style="width: 505px; height: 505px; overflow: hidden;">
</span><del>-<div style="width: 50px; height: 500px; background-color: black"></div>
</del><ins>+<div style="width: 50px; height: 500px; background-color: red"></div>
</ins><span class="cx"> </div>
</span></span></pre></div>
<a id="trunkLayoutTestseditingcaretcolorspaninsideeditableexpectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/editing/caret/color-span-inside-editable-expected.html (281684 => 281685)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/editing/caret/color-span-inside-editable-expected.html 2021-08-27 04:26:35 UTC (rev 281684)
+++ trunk/LayoutTests/editing/caret/color-span-inside-editable-expected.html    2021-08-27 04:58:53 UTC (rev 281685)
</span><span class="lines">@@ -1,4 +1,4 @@
</span><span class="cx"> This test makes sure that carets in content editable divs remain black even if there is a span inside them with a foreground color specified.
</span><span class="cx"> <div style="width: 505px; height: 505px; overflow: hidden;">
</span><del>-<div style="width: 50px; height: 500px; background-color: black"></div>
</del><ins>+<div style="width: 50px; height: 500px; background-color: red"></div>
</ins><span class="cx"> </div>
</span></span></pre></div>
<a id="trunkLayoutTestsfastcsscaretcolorautoexpectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/css/caret-color-auto-expected.html (281684 => 281685)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/caret-color-auto-expected.html        2021-08-27 04:26:35 UTC (rev 281684)
+++ trunk/LayoutTests/fast/css/caret-color-auto-expected.html   2021-08-27 04:58:53 UTC (rev 281685)
</span><span class="lines">@@ -11,7 +11,7 @@
</span><span class="cx"> #test {
</span><span class="cx">     background-color: white;
</span><span class="cx">     color: red;
</span><del>-    caret-color: green;
</del><ins>+    caret-color: red;
</ins><span class="cx">     transform-origin: left top;
</span><span class="cx">     transform: scale(50, 50);
</span><span class="cx">     font-size: 10px; /* Needed for the caret to render in Firefox. */
</span></span></pre></div>
<a id="trunkLayoutTestsplatformioseditingcaretcaretcolorexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/ios/editing/caret/caret-color-expected.txt (281684 => 281685)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/ios/editing/caret/caret-color-expected.txt    2021-08-27 04:26:35 UTC (rev 281684)
+++ trunk/LayoutTests/platform/ios/editing/caret/caret-color-expected.txt       2021-08-27 04:58:53 UTC (rev 281685)
</span><span class="lines">@@ -11,9 +11,9 @@
</span><span class="cx">       RenderBlock {P} at (0,0) size 784x40
</span><span class="cx">         RenderText {#text} at (0,0) size 754x39
</span><span class="cx">           text run at (0,0) width 754: "This tests to make sure that the caret is visible in the black background by getting the caret color from the color of the"
</span><del>-          text run at (0,20) width 638: "element(span) containing the text, not the parent element(div) that has the contentEditable attribute."
-      RenderBlock {DIV} at (0,56) size 784x20
-        RenderInline {SPAN} at (0,0) size 124x19 [color=#FFFFFF] [bgcolor=#000000]
</del><ins>+          text run at (0,20) width 679: "element(span) containing the text, not the root editable element(div) that has the contentEditable attribute."
+      RenderBlock {DIV} at (0,56) size 784x20 [bgcolor=#000000]
+        RenderInline {SPAN} at (0,0) size 124x19 [color=#FFFFFF]
</ins><span class="cx">           RenderText {#text} at (0,0) size 124x19
</span><span class="cx">             text run at (0,0) width 124: "Where is my caret?"
</span><span class="cx">         RenderText {#text} at (0,0) size 0x0
</span></span></pre></div>
<a id="trunkLayoutTestsplatformioswk2editingcaretcaretcolorexpectedpng"></a>
<div class="binary"><h4>Modified: trunk/LayoutTests/platform/ios-wk2/editing/caret/caret-color-expected.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmaceditingcaretcaretcolorexpectedpng"></a>
<div class="binary"><h4>Modified: trunk/LayoutTests/platform/mac/editing/caret/caret-color-expected.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmaceditingcaretcaretcolorexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/editing/caret/caret-color-expected.txt (281684 => 281685)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/editing/caret/caret-color-expected.txt    2021-08-27 04:26:35 UTC (rev 281684)
+++ trunk/LayoutTests/platform/mac/editing/caret/caret-color-expected.txt       2021-08-27 04:58:53 UTC (rev 281685)
</span><span class="lines">@@ -11,9 +11,9 @@
</span><span class="cx">       RenderBlock {P} at (0,0) size 784x36
</span><span class="cx">         RenderText {#text} at (0,0) size 754x36
</span><span class="cx">           text run at (0,0) width 754: "This tests to make sure that the caret is visible in the black background by getting the caret color from the color of the"
</span><del>-          text run at (0,18) width 638: "element(span) containing the text, not the parent element(div) that has the contentEditable attribute."
-      RenderBlock {DIV} at (0,52) size 784x18
-        RenderInline {SPAN} at (0,0) size 124x18 [color=#FFFFFF] [bgcolor=#000000]
</del><ins>+          text run at (0,18) width 679: "element(span) containing the text, not the root editable element(div) that has the contentEditable attribute."
+      RenderBlock {DIV} at (0,52) size 784x18 [bgcolor=#000000]
+        RenderInline {SPAN} at (0,0) size 124x18 [color=#FFFFFF]
</ins><span class="cx">           RenderText {#text} at (0,0) size 124x18
</span><span class="cx">             text run at (0,0) width 124: "Where is my caret?"
</span><span class="cx">         RenderText {#text} at (0,0) size 0x0
</span></span></pre></div>
<a id="trunkLayoutTestsplatformwineditingcaretcaretcolorexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/win/editing/caret/caret-color-expected.txt (281684 => 281685)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/win/editing/caret/caret-color-expected.txt    2021-08-27 04:26:35 UTC (rev 281684)
+++ trunk/LayoutTests/platform/win/editing/caret/caret-color-expected.txt       2021-08-27 04:58:53 UTC (rev 281685)
</span><span class="lines">@@ -1,3 +1,8 @@
</span><ins>+EDITING DELEGATE: shouldBeginEditingInDOMRange:range from 0 of DIV > BODY > HTML > #document to 3 of DIV > BODY > HTML > #document
+EDITING DELEGATE: webViewDidBeginEditing:WebViewDidBeginEditingNotification
+EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
+EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
+EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
</ins><span class="cx"> layer at (0,0) size 800x600
</span><span class="cx">   RenderView at (0,0) size 800x600
</span><span class="cx"> layer at (0,0) size 800x94
</span><span class="lines">@@ -6,9 +11,9 @@
</span><span class="cx">       RenderBlock {P} at (0,0) size 784x36
</span><span class="cx">         RenderText {#text} at (0,0) size 735x36
</span><span class="cx">           text run at (0,0) width 735: "This tests to make sure that the caret is visible in the black background by getting the caret color from the color of the"
</span><del>-          text run at (0,18) width 621: "element(span) containing the text, not the parent element(div) that has the contentEditable attribute."
-      RenderBlock {DIV} at (0,52) size 784x18
-        RenderInline {SPAN} at (0,0) size 121x18 [color=#FFFFFF] [bgcolor=#000000]
</del><ins>+          text run at (0,18) width 660: "element(span) containing the text, not the root editable element(div) that has the contentEditable attribute."
+      RenderBlock {DIV} at (0,52) size 784x18 [bgcolor=#000000]
+        RenderInline {SPAN} at (0,0) size 121x18 [color=#FFFFFF]
</ins><span class="cx">           RenderText {#text} at (0,0) size 121x18
</span><span class="cx">             text run at (0,0) width 121: "Where is my caret?"
</span><span class="cx">         RenderText {#text} at (0,0) size 0x0
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (281684 => 281685)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog   2021-08-27 04:26:35 UTC (rev 281684)
+++ trunk/Source/WebCore/ChangeLog      2021-08-27 04:58:53 UTC (rev 281685)
</span><span class="lines">@@ -1,3 +1,20 @@
</span><ins>+2021-08-26  Joone Hur  <joone@webkit.org>
+
+        Caret should respect text background color
+        https://bugs.webkit.org/show_bug.cgi?id=117493
+
+        Reviewed by Ryosuke Niwa.
+
+        An earlier fix for caret color, which we are now improving, was this commit:
+        https://trac.webkit.org/changeset/152612/webkit
+
+        This patch allows the caret to become visible in the black background
+        by getting the caret color from the element containing
+        the text, not the root editable element that has the contentEditable attribute.
+
+        * editing/FrameSelection.cpp:
+        (WebCore::CaretBase::computeCaretColor):
+
</ins><span class="cx"> 2021-08-26  Simon Fraser  <simon.fraser@apple.com>
</span><span class="cx"> 
</span><span class="cx">         CSS keyframed animations don't respect edges in 4 value background-position
</span></span></pre></div>
<a id="trunkSourceWebCoreeditingFrameSelectioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/editing/FrameSelection.cpp (281684 => 281685)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/editing/FrameSelection.cpp  2021-08-27 04:26:35 UTC (rev 281684)
+++ trunk/Source/WebCore/editing/FrameSelection.cpp     2021-08-27 04:58:53 UTC (rev 281685)
</span><span class="lines">@@ -1790,15 +1790,15 @@
</span><span class="cx">     UNUSED_PARAM(node);
</span><span class="cx">     return elementStyle.caretColor();
</span><span class="cx"> #else
</span><del>-    auto* rootEditableElement = node ? node->rootEditableElement() : nullptr;
-    auto* rootEditableStyle = rootEditableElement && rootEditableElement->renderer() ? &rootEditableElement->renderer()->style() : nullptr;
</del><ins>+    RefPtr parentElement = node ? node->parentElement() : nullptr;
+    auto* parentStyle = parentElement && parentElement->renderer() ? &parentElement->renderer()->style() : nullptr;
</ins><span class="cx">     // CSS value "auto" is treated as an invalid color.
</span><del>-    if (!elementStyle.caretColor().isValid() && rootEditableStyle) {
-        auto rootEditableBackgroundColor = rootEditableStyle->visitedDependentColorWithColorFilter(CSSPropertyBackgroundColor);
</del><ins>+    if (!elementStyle.caretColor().isValid() && parentStyle) {
+        auto parentBackgroundColor = parentStyle->visitedDependentColorWithColorFilter(CSSPropertyBackgroundColor);
</ins><span class="cx">         auto elementBackgroundColor = elementStyle.visitedDependentColorWithColorFilter(CSSPropertyBackgroundColor);
</span><del>-        auto disappearsIntoBackground = blendSourceOver(rootEditableBackgroundColor, elementBackgroundColor) == rootEditableBackgroundColor;
</del><ins>+        auto disappearsIntoBackground = blendSourceOver(parentBackgroundColor, elementBackgroundColor) == parentBackgroundColor;
</ins><span class="cx">         if (disappearsIntoBackground)
</span><del>-            return rootEditableStyle->visitedDependentColorWithColorFilter(CSSPropertyCaretColor);
</del><ins>+            return parentStyle->visitedDependentColorWithColorFilter(CSSPropertyCaretColor);
</ins><span class="cx">     }
</span><span class="cx">     return elementStyle.visitedDependentColorWithColorFilter(CSSPropertyCaretColor);
</span><span class="cx"> #endif
</span></span></pre>
</div>
</div>

</body>
</html>