<!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>[166364] trunk/Source/WebCore</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/166364">166364</a></dd>
<dt>Author</dt> <dd>fred.wang@free.fr</dd>
<dt>Date</dt> <dd>2014-03-27 11:06:21 -0700 (Thu, 27 Mar 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Operator stretching: expose a math data API
https://bugs.webkit.org/show_bug.cgi?id=130572

Reviewed by Chris Fleizach.

We expose a new SimpleFontData API to give access to the data from the
OpenType MATH table using a font cache. The class OpenTypeMathData will
be implemented in bug 130324. On Darwin platform, we also implement the
missing FontPlatformData::openTypeTable function which will be necessary
to load the OpenType MATH table. The changes are intended to be used
for MathML operator stretching (bug 130322) so tests are not added yet.

* CMakeLists.txt: add new OpenTypeMathData files.
* WebCore.vcxproj/WebCore.vcxproj: ditto.
* WebCore.vcxproj/WebCore.vcxproj.filters: ditto.
* WebCore.xcodeproj/project.pbxproj: ditto.
* platform/graphics/FontCache.cpp: We add a FontCache::getMathData function to implement a cache for the math data.
We make the math and vertical data share the same key for the cache.
(WebCore::fontMathDataCacheInstance):
(WebCore::FontCache::getMathData):
(WebCore::fontVerticalDataCacheInstance):
* platform/graphics/FontCache.h: We declare FontCache::getMathData and FontFileKey on all platforms.
* platform/graphics/FontPlatformData.cpp:
(WebCore::FontPlatformData::openTypeTable): We implement openTypeTable() on Darwin platform.
* platform/graphics/FontPlatformData.h: We expose openTypeTable() on Darwin platform.
* platform/graphics/SimpleFontData.cpp: We initialize m_mathData from the font cache.
(WebCore::SimpleFontData::SimpleFontData):
* platform/graphics/SimpleFontData.h: We expose a mathData() function to access the MATH data.
* platform/graphics/opentype/OpenTypeMathData.cpp: Added. This is a new class that will be used to parse the data from the OpenType MATH table.
(WebCore::OpenTypeMathData::OpenTypeMathData):
* platform/graphics/opentype/OpenTypeMathData.h: Added.
(WebCore::OpenTypeMathData::create):
(WebCore::OpenTypeMathData::hasMathData):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreCMakeListstxt">trunk/Source/WebCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCorevcxprojWebCorevcxproj">trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj</a></li>
<li><a href="#trunkSourceWebCoreWebCorevcxprojWebCorevcxprojfilters">trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFontCachecpp">trunk/Source/WebCore/platform/graphics/FontCache.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFontCacheh">trunk/Source/WebCore/platform/graphics/FontCache.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFontPlatformDatacpp">trunk/Source/WebCore/platform/graphics/FontPlatformData.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFontPlatformDatah">trunk/Source/WebCore/platform/graphics/FontPlatformData.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsSimpleFontDatacpp">trunk/Source/WebCore/platform/graphics/SimpleFontData.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsSimpleFontDatah">trunk/Source/WebCore/platform/graphics/SimpleFontData.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreplatformgraphicsopentypeOpenTypeMathDatacpp">trunk/Source/WebCore/platform/graphics/opentype/OpenTypeMathData.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsopentypeOpenTypeMathDatah">trunk/Source/WebCore/platform/graphics/opentype/OpenTypeMathData.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/CMakeLists.txt (166363 => 166364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/CMakeLists.txt        2014-03-27 17:51:38 UTC (rev 166363)
+++ trunk/Source/WebCore/CMakeLists.txt        2014-03-27 18:06:21 UTC (rev 166364)
</span><span class="lines">@@ -1950,6 +1950,8 @@
</span><span class="cx">     platform/graphics/filters/SourceGraphic.cpp
</span><span class="cx">     platform/graphics/filters/SpotLightSource.cpp
</span><span class="cx"> 
</span><ins>+    platform/graphics/opentype/OpenTypeMathData.cpp
+
</ins><span class="cx">     platform/graphics/texmap/TextureMapper.cpp
</span><span class="cx">     platform/graphics/texmap/TextureMapperBackingStore.cpp
</span><span class="cx">     platform/graphics/texmap/TextureMapperFPSCounter.cpp
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (166363 => 166364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-03-27 17:51:38 UTC (rev 166363)
+++ trunk/Source/WebCore/ChangeLog        2014-03-27 18:06:21 UTC (rev 166364)
</span><span class="lines">@@ -1,3 +1,39 @@
</span><ins>+2014-03-27  Frédéric Wang  &lt;fred.wang@free.fr&gt;
+
+        Operator stretching: expose a math data API
+        https://bugs.webkit.org/show_bug.cgi?id=130572
+
+        Reviewed by Chris Fleizach.
+
+        We expose a new SimpleFontData API to give access to the data from the
+        OpenType MATH table using a font cache. The class OpenTypeMathData will
+        be implemented in bug 130324. On Darwin platform, we also implement the
+        missing FontPlatformData::openTypeTable function which will be necessary
+        to load the OpenType MATH table. The changes are intended to be used
+        for MathML operator stretching (bug 130322) so tests are not added yet.
+
+        * CMakeLists.txt: add new OpenTypeMathData files.
+        * WebCore.vcxproj/WebCore.vcxproj: ditto.
+        * WebCore.vcxproj/WebCore.vcxproj.filters: ditto.
+        * WebCore.xcodeproj/project.pbxproj: ditto.
+        * platform/graphics/FontCache.cpp: We add a FontCache::getMathData function to implement a cache for the math data.
+        We make the math and vertical data share the same key for the cache.
+        (WebCore::fontMathDataCacheInstance):
+        (WebCore::FontCache::getMathData):
+        (WebCore::fontVerticalDataCacheInstance):
+        * platform/graphics/FontCache.h: We declare FontCache::getMathData and FontFileKey on all platforms.
+        * platform/graphics/FontPlatformData.cpp:
+        (WebCore::FontPlatformData::openTypeTable): We implement openTypeTable() on Darwin platform.
+        * platform/graphics/FontPlatformData.h: We expose openTypeTable() on Darwin platform.
+        * platform/graphics/SimpleFontData.cpp: We initialize m_mathData from the font cache.
+        (WebCore::SimpleFontData::SimpleFontData):
+        * platform/graphics/SimpleFontData.h: We expose a mathData() function to access the MATH data.
+        * platform/graphics/opentype/OpenTypeMathData.cpp: Added. This is a new class that will be used to parse the data from the OpenType MATH table.
+        (WebCore::OpenTypeMathData::OpenTypeMathData):
+        * platform/graphics/opentype/OpenTypeMathData.h: Added.
+        (WebCore::OpenTypeMathData::create):
+        (WebCore::OpenTypeMathData::hasMathData):
+
</ins><span class="cx"> 2014-03-27  Brent Fulgham  &lt;bfulgham@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Fix a crash caused by track insertion after load()
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorevcxprojWebCorevcxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj (166363 => 166364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj        2014-03-27 17:51:38 UTC (rev 166363)
+++ trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj        2014-03-27 18:06:21 UTC (rev 166364)
</span><span class="lines">@@ -7949,6 +7949,7 @@
</span><span class="cx">     &lt;ClCompile Include=&quot;..\platform\graphics\win\IntRectWin.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\platform\graphics\win\IntSizeWin.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\platform\graphics\win\MediaPlayerPrivateFullscreenWindow.cpp&quot; /&gt;
</span><ins>+    &lt;ClCompile Include=&quot;..\platform\graphics\opentype\OpenTypeMathData.cpp&quot; /&gt;
</ins><span class="cx">     &lt;ClCompile Include=&quot;..\platform\graphics\opentype\OpenTypeUtilities.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\platform\graphics\opentype\OpenTypeVerticalData.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\platform\graphics\win\SimpleFontDataCairoWin.cpp&quot;&gt;
</span><span class="lines">@@ -19373,6 +19374,7 @@
</span><span class="cx">     &lt;ClInclude Include=&quot;..\platform\graphics\win\FullScreenControllerClient.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\platform\graphics\win\LocalWindowsContext.h&quot; /&gt;
</span><span class="cx">     &lt;CustomBuildStep Include=&quot;..\platform\graphics\win\MediaPlayerPrivateFullscreenWindow.h&quot; /&gt;
</span><ins>+    &lt;ClInclude Include=&quot;..\platform\graphics\opentype\OpenTypeMathData.h&quot; /&gt;
</ins><span class="cx">     &lt;ClInclude Include=&quot;..\platform\graphics\opentype\OpenTypeTypes.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\platform\graphics\opentype\OpenTypeUtilities.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\platform\graphics\opentype\OpenTypeVerticalData.h&quot; /&gt;
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorevcxprojWebCorevcxprojfilters"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters (166363 => 166364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters        2014-03-27 17:51:38 UTC (rev 166363)
+++ trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters        2014-03-27 18:06:21 UTC (rev 166364)
</span><span class="lines">@@ -1476,6 +1476,9 @@
</span><span class="cx">     &lt;ClCompile Include=&quot;..\platform\graphics\win\MediaPlayerPrivateFullscreenWindow.cpp&quot;&gt;
</span><span class="cx">       &lt;Filter&gt;platform\graphics\win&lt;/Filter&gt;
</span><span class="cx">     &lt;/ClCompile&gt;
</span><ins>+    &lt;ClCompile Include=&quot;..\platform\graphics\opentype\OpenTypeMathData.cpp&quot;&gt;
+      &lt;Filter&gt;platform\graphics\win&lt;/Filter&gt;
+    &lt;/ClCompile&gt;
</ins><span class="cx">     &lt;ClCompile Include=&quot;..\platform\graphics\opentype\OpenTypeUtilities.cpp&quot;&gt;
</span><span class="cx">       &lt;Filter&gt;platform\graphics\win&lt;/Filter&gt;
</span><span class="cx">     &lt;/ClCompile&gt;
</span><span class="lines">@@ -8434,6 +8437,9 @@
</span><span class="cx">     &lt;ClInclude Include=&quot;..\platform\graphics\win\LocalWindowsContext.h&quot;&gt;
</span><span class="cx">       &lt;Filter&gt;platform\graphics\win&lt;/Filter&gt;
</span><span class="cx">     &lt;/ClInclude&gt;
</span><ins>+    &lt;ClInclude Include=&quot;..\platform\graphics\opentype\OpenTypeMathData.h&quot;&gt;
+      &lt;Filter&gt;platform\graphics\win&lt;/Filter&gt;
+    &lt;/ClInclude&gt;
</ins><span class="cx">     &lt;ClInclude Include=&quot;..\platform\graphics\opentype\OpenTypeTypes.h&quot;&gt;
</span><span class="cx">       &lt;Filter&gt;platform\graphics\win&lt;/Filter&gt;
</span><span class="cx">     &lt;/ClInclude&gt;
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (166363 => 166364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2014-03-27 17:51:38 UTC (rev 166363)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2014-03-27 18:06:21 UTC (rev 166364)
</span><span class="lines">@@ -4593,6 +4593,8 @@
</span><span class="cx">                 B2C3DA630D006CD600EF6F26 /* FontCache.h in Headers */ = {isa = PBXBuildFile; fileRef = B2C3DA520D006CD600EF6F26 /* FontCache.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 B2C3DA640D006CD600EF6F26 /* SimpleFontData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2C3DA530D006CD600EF6F26 /* SimpleFontData.cpp */; };
</span><span class="cx">                 B2C3DA650D006CD600EF6F26 /* SimpleFontData.h in Headers */ = {isa = PBXBuildFile; fileRef = B2C3DA540D006CD600EF6F26 /* SimpleFontData.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><ins>+                B2D3DA640D006CD600EF6F27 /* OpenTypeMathData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2D3DA530D006CD600EF6F27 /* OpenTypeMathData.cpp */; };
+                B2D3DA650D006CD600EF6F27 /* OpenTypeMathData.h in Headers */ = {isa = PBXBuildFile; fileRef = B2D3DA540D006CD600EF6F27 /* OpenTypeMathData.h */; settings = {ATTRIBUTES = (Private, ); }; };
</ins><span class="cx">                 B2C3DA660D006CD600EF6F26 /* FontDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = B2C3DA550D006CD600EF6F26 /* FontDescription.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 B2C3DA670D006CD600EF6F26 /* FontGlyphs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2C3DA560D006CD600EF6F26 /* FontGlyphs.cpp */; };
</span><span class="cx">                 B2C3DA680D006CD600EF6F26 /* FontGlyphs.h in Headers */ = {isa = PBXBuildFile; fileRef = B2C3DA570D006CD600EF6F26 /* FontGlyphs.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -11844,6 +11846,8 @@
</span><span class="cx">                 B2C3DA520D006CD600EF6F26 /* FontCache.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FontCache.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 B2C3DA530D006CD600EF6F26 /* SimpleFontData.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SimpleFontData.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 B2C3DA540D006CD600EF6F26 /* SimpleFontData.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SimpleFontData.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                B2D3DA530D006CD600EF6F27 /* OpenTypeMathData.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = opentype/OpenTypeMathData.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
+                B2D3DA540D006CD600EF6F27 /* OpenTypeMathData.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = opentype/OpenTypeMathData.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 B2C3DA550D006CD600EF6F26 /* FontDescription.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FontDescription.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 B2C3DA560D006CD600EF6F26 /* FontGlyphs.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = FontGlyphs.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 B2C3DA570D006CD600EF6F26 /* FontGlyphs.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FontGlyphs.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -20136,6 +20140,8 @@
</span><span class="cx">                                 0F3DD44E12F5EA1B000D9190 /* ShadowBlur.h */,
</span><span class="cx">                                 B2C3DA530D006CD600EF6F26 /* SimpleFontData.cpp */,
</span><span class="cx">                                 B2C3DA540D006CD600EF6F26 /* SimpleFontData.h */,
</span><ins>+                                B2D3DA530D006CD600EF6F27 /* OpenTypeMathData.cpp */,
+                                B2D3DA540D006CD600EF6F27 /* OpenTypeMathData.h */,
</ins><span class="cx">                                 CD641EB21818F5ED00EE4C41 /* SourceBufferPrivate.h */,
</span><span class="cx">                                 CDC61DA0180867D8004B913F /* SourceBufferPrivate.h */,
</span><span class="cx">                                 CDC8B5AC1804AE5D0016E685 /* SourceBufferPrivateClient.h */,
</span><span class="lines">@@ -25479,6 +25485,7 @@
</span><span class="cx">                                 E1B7839C163740A70007B692 /* SharedWorkerStrategy.h in Headers */,
</span><span class="cx">                                 41D168EE10226E89009BC827 /* SharedWorkerThread.h in Headers */,
</span><span class="cx">                                 B2C3DA650D006CD600EF6F26 /* SimpleFontData.h in Headers */,
</span><ins>+                                B2D3DA650D006CD600EF6F27 /* OpenTypeMathData.h in Headers */,
</ins><span class="cx">                                 E48944A3180B57D800F165D8 /* SimpleLineLayout.h in Headers */,
</span><span class="cx">                                 E4E9B11D1814569C003ACCDF /* SimpleLineLayoutFunctions.h in Headers */,
</span><span class="cx">                                 E4E9B1191810916F003ACCDF /* SimpleLineLayoutResolver.h in Headers */,
</span><span class="lines">@@ -28843,6 +28850,7 @@
</span><span class="cx">                                 E1B784201639CBBE0007B692 /* SharedWorkerRepository.cpp in Sources */,
</span><span class="cx">                                 41D168ED10226E89009BC827 /* SharedWorkerThread.cpp in Sources */,
</span><span class="cx">                                 B2C3DA640D006CD600EF6F26 /* SimpleFontData.cpp in Sources */,
</span><ins>+                                B2D3DA640D006CD600EF6F27 /* OpenTypeMathData.cpp in Sources */,
</ins><span class="cx">                                 163E88F7118A39D200ED9231 /* SimpleFontDataCoreText.cpp in Sources */,
</span><span class="cx">                                 37E65950163B10C200EB4574 /* SimpleFontDataIOS.mm in Sources */,
</span><span class="cx">                                 B2AFFC7F0D00A5C10030074D /* SimpleFontDataMac.mm in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFontCachecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FontCache.cpp (166363 => 166364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FontCache.cpp        2014-03-27 17:51:38 UTC (rev 166363)
+++ trunk/Source/WebCore/platform/graphics/FontCache.cpp        2014-03-27 18:06:21 UTC (rev 166364)
</span><span class="lines">@@ -34,6 +34,7 @@
</span><span class="cx"> #include &quot;FontGlyphs.h&quot;
</span><span class="cx"> #include &quot;FontPlatformData.h&quot;
</span><span class="cx"> #include &quot;FontSelector.h&quot;
</span><ins>+#include &quot;OpenTypeMathData.h&quot;
</ins><span class="cx"> #include &quot;WebKitFontFamilyNames.h&quot;
</span><span class="cx"> #include &lt;wtf/HashMap.h&gt;
</span><span class="cx"> #include &lt;wtf/ListHashSet.h&gt;
</span><span class="lines">@@ -266,8 +267,7 @@
</span><span class="cx">     return it-&gt;value.get();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-#if ENABLE(OPENTYPE_VERTICAL)
-struct FontVerticalDataCacheKeyHash {
</del><ins>+struct FontFileCacheKeyHash {
</ins><span class="cx">     static unsigned hash(const FontCache::FontFileKey&amp; fontFileKey)
</span><span class="cx">     {
</span><span class="cx">         return PtrHash&lt;const FontCache::FontFileKey*&gt;::hash(&amp;fontFileKey);
</span><span class="lines">@@ -281,7 +281,7 @@
</span><span class="cx">     static const bool safeToCompareToEmptyOrDeleted = true;
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-struct FontVerticalDataCacheKeyTraits : WTF::GenericHashTraits&lt;FontCache::FontFileKey&gt; {
</del><ins>+struct FontFileCacheKeyTraits : WTF::GenericHashTraits&lt;FontCache::FontFileKey&gt; {
</ins><span class="cx">     static const bool emptyValueIsZero = true;
</span><span class="cx">     static const bool needsDestruction = true;
</span><span class="cx">     static const FontCache::FontFileKey&amp; emptyValue()
</span><span class="lines">@@ -299,10 +299,33 @@
</span><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-typedef HashMap&lt;FontCache::FontFileKey, RefPtr&lt;OpenTypeVerticalData&gt;, FontVerticalDataCacheKeyHash, FontVerticalDataCacheKeyTraits&gt; FontVerticalDataCache;
</del><ins>+typedef HashMap&lt;FontCache::FontFileKey, RefPtr&lt;OpenTypeMathData&gt;, FontFileCacheKeyHash, FontFileCacheKeyTraits&gt; FontMathDataCache;
</ins><span class="cx"> 
</span><del>-FontVerticalDataCache&amp; fontVerticalDataCacheInstance()
</del><ins>+static FontMathDataCache&amp; fontMathDataCacheInstance()
</ins><span class="cx"> {
</span><ins>+    static NeverDestroyed&lt;FontMathDataCache&gt; fontMathDataCache;
+    return fontMathDataCache;
+}
+
+PassRefPtr&lt;OpenTypeMathData&gt; FontCache::getMathData(const FontFileKey&amp; key, const FontPlatformData&amp; fontData)
+{
+    FontMathDataCache&amp; fontMathDataCache = fontMathDataCacheInstance();
+    FontMathDataCache::iterator result = fontMathDataCache.find(key);
+    if (result != fontMathDataCache.end())
+        return result.get()-&gt;value;
+
+    RefPtr&lt;OpenTypeMathData&gt; mathData = OpenTypeMathData::create(fontData);
+    if (!mathData-&gt;hasMathData())
+        mathData.clear();
+    fontMathDataCache.set(key, mathData);
+    return mathData;
+}
+
+#if ENABLE(OPENTYPE_VERTICAL)
+typedef HashMap&lt;FontCache::FontFileKey, RefPtr&lt;OpenTypeVerticalData&gt;, FontFileCacheKeyHash, FontFileCacheKeyTraits&gt; FontVerticalDataCache;
+
+static FontVerticalDataCache&amp; fontVerticalDataCacheInstance()
+{
</ins><span class="cx">     static NeverDestroyed&lt;FontVerticalDataCache&gt; fontVerticalDataCache;
</span><span class="cx">     return fontVerticalDataCache;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFontCacheh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FontCache.h (166363 => 166364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FontCache.h        2014-03-27 17:51:38 UTC (rev 166363)
+++ trunk/Source/WebCore/platform/graphics/FontCache.h        2014-03-27 18:06:21 UTC (rev 166364)
</span><span class="lines">@@ -54,6 +54,7 @@
</span><span class="cx"> class FontPlatformData;
</span><span class="cx"> class FontData;
</span><span class="cx"> class FontSelector;
</span><ins>+class OpenTypeMathData;
</ins><span class="cx"> class OpenTypeVerticalData;
</span><span class="cx"> class SimpleFontData;
</span><span class="cx"> 
</span><span class="lines">@@ -151,8 +152,9 @@
</span><span class="cx">     PassRefPtr&lt;SimpleFontData&gt; fontDataFromDescriptionAndLogFont(const FontDescription&amp;, ShouldRetain, const LOGFONT&amp;, AtomicString&amp; outFontFamilyName);
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+    typedef AtomicString FontFileKey;
+    PassRefPtr&lt;OpenTypeMathData&gt; getMathData(const FontFileKey&amp;, const FontPlatformData&amp;);
</ins><span class="cx"> #if ENABLE(OPENTYPE_VERTICAL)
</span><del>-    typedef AtomicString FontFileKey;
</del><span class="cx">     PassRefPtr&lt;OpenTypeVerticalData&gt; getVerticalData(const FontFileKey&amp;, const FontPlatformData&amp;);
</span><span class="cx"> #endif
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFontPlatformDatacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FontPlatformData.cpp (166363 => 166364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FontPlatformData.cpp        2014-03-27 17:51:38 UTC (rev 166363)
+++ trunk/Source/WebCore/platform/graphics/FontPlatformData.cpp        2014-03-27 18:06:21 UTC (rev 166364)
</span><span class="lines">@@ -27,6 +27,11 @@
</span><span class="cx"> #include &lt;wtf/text/StringHash.h&gt;
</span><span class="cx"> #include &lt;wtf/text/WTFString.h&gt;
</span><span class="cx"> 
</span><ins>+#if OS(DARWIN) &amp;&amp; USE(CG)
+#include &quot;SharedBuffer.h&quot;
+#include &lt;CoreGraphics/CGFont.h&gt;
+#endif
+
</ins><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> FontPlatformData::FontPlatformData(WTF::HashTableDeletedValueType)
</span><span class="lines">@@ -169,4 +174,14 @@
</span><span class="cx">     return platformDataAssign(other);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#if OS(DARWIN) &amp;&amp; USE(CG)
+PassRefPtr&lt;SharedBuffer&gt; FontPlatformData::openTypeTable(uint32_t table) const
+{
+    if (CFDataRef data = CGFontCopyTableForTag(cgFont(), table))
+        return SharedBuffer::wrapCFData(data);
+    
+    return nullptr;
</ins><span class="cx"> }
</span><ins>+#endif
+
+}
</ins></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFontPlatformDatah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FontPlatformData.h (166363 => 166364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FontPlatformData.h        2014-03-27 17:51:38 UTC (rev 166363)
+++ trunk/Source/WebCore/platform/graphics/FontPlatformData.h        2014-03-27 18:06:21 UTC (rev 166364)
</span><span class="lines">@@ -216,7 +216,7 @@
</span><span class="cx"> #endif
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-#if PLATFORM(WIN) &amp;&amp; (USE(CG) || USE(CAIRO))
</del><ins>+#if (OS(DARWIN) &amp;&amp; USE(CG)) || (PLATFORM(WIN) &amp;&amp; (USE(CG) || USE(CAIRO)))
</ins><span class="cx">     PassRefPtr&lt;SharedBuffer&gt; openTypeTable(uint32_t table) const;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsSimpleFontDatacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/SimpleFontData.cpp (166363 => 166364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/SimpleFontData.cpp        2014-03-27 17:51:38 UTC (rev 166363)
+++ trunk/Source/WebCore/platform/graphics/SimpleFontData.cpp        2014-03-27 18:06:21 UTC (rev 166364)
</span><span class="lines">@@ -32,6 +32,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;Font.h&quot;
</span><span class="cx"> #include &quot;FontCache.h&quot;
</span><ins>+#include &quot;OpenTypeMathData.h&quot;
</ins><span class="cx"> #include &lt;wtf/MathExtras.h&gt;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(OPENTYPE_VERTICAL)
</span><span class="lines">@@ -52,6 +53,7 @@
</span><span class="cx">     , m_isLoading(isLoading)
</span><span class="cx">     , m_isTextOrientationFallback(isTextOrientationFallback)
</span><span class="cx">     , m_isBrokenIdeographFallback(false)
</span><ins>+    , m_mathData(nullptr)
</ins><span class="cx"> #if ENABLE(OPENTYPE_VERTICAL)
</span><span class="cx">     , m_verticalData(0)
</span><span class="cx"> #endif
</span><span class="lines">@@ -60,6 +62,18 @@
</span><span class="cx">     platformInit();
</span><span class="cx">     platformGlyphInit();
</span><span class="cx">     platformCharWidthInit();
</span><ins>+
+    bool tryMathData = false;
+#if PLATFORM(WIN) &amp;&amp; (USE(CG) || USE(CAIRO))
+    tryMathData = platformData.hfont();
+#elif OS(DARWIN) &amp;&amp; USE(CG)
+    tryMathData = platformData.font();
+#elif USE(FREETYPE)
+    tryMathData = platformData.hash();
+#endif
+    if (tryMathData)
+        m_mathData = fontCache()-&gt;getMathData(String::number(platformData.hash()), platformData);
+
</ins><span class="cx"> #if ENABLE(OPENTYPE_VERTICAL)
</span><span class="cx">     if (platformData.orientation() == Vertical &amp;&amp; !isTextOrientationFallback) {
</span><span class="cx">         m_verticalData = platformData.verticalData();
</span><span class="lines">@@ -76,6 +90,7 @@
</span><span class="cx">     , m_isLoading(false)
</span><span class="cx">     , m_isTextOrientationFallback(false)
</span><span class="cx">     , m_isBrokenIdeographFallback(false)
</span><ins>+    , m_mathData(nullptr)
</ins><span class="cx"> #if ENABLE(OPENTYPE_VERTICAL)
</span><span class="cx">     , m_verticalData(0)
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsSimpleFontDatah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/SimpleFontData.h (166363 => 166364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/SimpleFontData.h        2014-03-27 17:51:38 UTC (rev 166363)
+++ trunk/Source/WebCore/platform/graphics/SimpleFontData.h        2014-03-27 18:06:21 UTC (rev 166364)
</span><span class="lines">@@ -32,6 +32,7 @@
</span><span class="cx"> #include &quot;GlyphBuffer.h&quot;
</span><span class="cx"> #include &quot;GlyphMetricsMap.h&quot;
</span><span class="cx"> #include &quot;GlyphPageTreeNode.h&quot;
</span><ins>+#include &quot;OpenTypeMathData.h&quot;
</ins><span class="cx"> #if ENABLE(OPENTYPE_VERTICAL)
</span><span class="cx"> #include &quot;OpenTypeVerticalData.h&quot;
</span><span class="cx"> #endif
</span><span class="lines">@@ -92,6 +93,7 @@
</span><span class="cx">     static const SimpleFontData* systemFallback() { return reinterpret_cast&lt;const SimpleFontData*&gt;(-1); }
</span><span class="cx"> 
</span><span class="cx">     const FontPlatformData&amp; platformData() const { return m_platformData; }
</span><ins>+    const OpenTypeMathData* mathData() const { return m_mathData ? m_mathData.get() : nullptr; }
</ins><span class="cx"> #if ENABLE(OPENTYPE_VERTICAL)
</span><span class="cx">     const OpenTypeVerticalData* verticalData() const { return m_verticalData.get(); }
</span><span class="cx"> #endif
</span><span class="lines">@@ -259,6 +261,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool m_isTextOrientationFallback;
</span><span class="cx">     bool m_isBrokenIdeographFallback;
</span><ins>+    RefPtr&lt;OpenTypeMathData&gt; m_mathData;
</ins><span class="cx"> #if ENABLE(OPENTYPE_VERTICAL)
</span><span class="cx">     RefPtr&lt;OpenTypeVerticalData&gt; m_verticalData;
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsopentypeOpenTypeMathDatacpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/platform/graphics/opentype/OpenTypeMathData.cpp (0 => 166364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/opentype/OpenTypeMathData.cpp                                (rev 0)
+++ trunk/Source/WebCore/platform/graphics/opentype/OpenTypeMathData.cpp        2014-03-27 18:06:21 UTC (rev 166364)
</span><span class="lines">@@ -0,0 +1,41 @@
</span><ins>+/*
+ * Copyright (C) 2014 Frederic Wang (fred.wang@free.fr). 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 THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * &quot;AS IS&quot; 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 THE COPYRIGHT
+ * OWNER OR 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.
+ */
+
+#include &quot;config.h&quot;
+#include &quot;OpenTypeMathData.h&quot;
+
+#include &quot;FontPlatformData.h&quot;
+
+using namespace std;
+
+namespace WebCore {
+
+OpenTypeMathData::OpenTypeMathData(const FontPlatformData&amp;)
+{
+    // FIXME: We should read the data from the MATH table (https://bugs.webkit.org/show_bug.cgi?id=130324).
+    m_mathBuffer = nullptr;
+}
+
+} // namespace WebCore
</ins><span class="cx">Property changes on: trunk/Source/WebCore/platform/graphics/opentype/OpenTypeMathData.cpp
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkSourceWebCoreplatformgraphicsopentypeOpenTypeMathDatah"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/platform/graphics/opentype/OpenTypeMathData.h (0 => 166364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/opentype/OpenTypeMathData.h                                (rev 0)
+++ trunk/Source/WebCore/platform/graphics/opentype/OpenTypeMathData.h        2014-03-27 18:06:21 UTC (rev 166364)
</span><span class="lines">@@ -0,0 +1,53 @@
</span><ins>+/*
+ * Copyright (C) 2014 Frederic Wang (fred.wang@free.fr). 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 THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * &quot;AS IS&quot; 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 THE COPYRIGHT
+ * OWNER OR 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.
+ */
+
+#ifndef OpenTypeMathData_h
+#define OpenTypeMathData_h
+
+#include &quot;SharedBuffer.h&quot;
+#include &lt;wtf/PassRefPtr.h&gt;
+#include &lt;wtf/RefCounted.h&gt;
+
+namespace WebCore {
+
+class FontPlatformData;
+
+class OpenTypeMathData : public RefCounted&lt;OpenTypeMathData&gt; {
+public:
+    static PassRefPtr&lt;OpenTypeMathData&gt; create(const FontPlatformData&amp; fontData)
+    {
+        return adoptRef(new OpenTypeMathData(fontData));
+    }
+
+    bool hasMathData() const { return m_mathBuffer; }
+
+private:
+    explicit OpenTypeMathData(const FontPlatformData&amp;);
+    RefPtr&lt;SharedBuffer&gt; m_mathBuffer;
+};
+
+} // namespace WebCore
+
+#endif // OpenTypeMathData_h
</ins><span class="cx">Property changes on: trunk/Source/WebCore/platform/graphics/opentype/OpenTypeMathData.h
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
</div>

</body>
</html>