summaryrefslogtreecommitdiffstats
path: root/WebCore/html
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2010-08-13 05:20:16 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-08-13 05:20:16 -0700
commitf4958a7d95cd5fbc1c74905e229b02c95cd5ee78 (patch)
tree14a0f1b07a19948c2ed93d0d8547caa7fe10aa0e /WebCore/html
parentd074a7997da8ce379434eb6e208b97cde8a0841c (diff)
parentf964bc1fd59a545a80a0cc2529ad8830be514871 (diff)
downloadexternal_webkit-f4958a7d95cd5fbc1c74905e229b02c95cd5ee78.zip
external_webkit-f4958a7d95cd5fbc1c74905e229b02c95cd5ee78.tar.gz
external_webkit-f4958a7d95cd5fbc1c74905e229b02c95cd5ee78.tar.bz2
Merge changes I60a96064,I6929172f,Idefd9bec,I8cf448f2,I8791737a,I992c56b0,Ibb4b089d,I779a8ec0,Ife412e30,I2da1ae98,Ibcf41849
* changes: Merge WebKit at r65072 : Update WebKit revision number. Merge WebKit at r65072 : Update test_expectations. Merge WebKit at r65072 : Complete cherry-pick of WebKit change 43848 to add EmptyDeviceMotionClient Merge WebKit at r65072 : Implement DeviceMotionClientAndroid Merge WebKit at r65072: JSC build fix in InspectorController.h Merge WebKit at r65072: Fix V8 code generator. Merge WebKit at r65072 : Build fix for JSC, update ambiguous usage of JSLock. Merge WebKit at r65072: String class has moved to the WTF namespace. Merge Webkit at r65072 : Fix conflicts. Merge Webkit at r65072 : Fix Makefiles. Merge WebKit at r65072 : Initial merge by git.
Diffstat (limited to 'WebCore/html')
-rw-r--r--WebCore/html/Blob.cpp4
-rw-r--r--WebCore/html/Blob.h2
-rw-r--r--WebCore/html/Blob.idl2
-rw-r--r--WebCore/html/CollectionCache.h2
-rw-r--r--WebCore/html/DOMFormData.h2
-rw-r--r--WebCore/html/DataGridColumnList.h2
-rw-r--r--WebCore/html/DateComponents.h3
-rw-r--r--WebCore/html/FileError.h4
-rw-r--r--WebCore/html/FileError.idl2
-rw-r--r--WebCore/html/FileReader.cpp4
-rw-r--r--WebCore/html/FileReader.h6
-rw-r--r--WebCore/html/FileReader.idl2
-rw-r--r--WebCore/html/FileStream.cpp6
-rw-r--r--WebCore/html/FileStream.h6
-rw-r--r--WebCore/html/FileStreamClient.h4
-rw-r--r--WebCore/html/FileStreamProxy.cpp4
-rw-r--r--WebCore/html/FileStreamProxy.h6
-rw-r--r--WebCore/html/FileThread.cpp4
-rw-r--r--WebCore/html/FileThread.h4
-rw-r--r--WebCore/html/FormDataList.h5
-rw-r--r--WebCore/html/HTMLAnchorElement.cpp3
-rw-r--r--WebCore/html/HTMLCanvasElement.cpp16
-rw-r--r--WebCore/html/HTMLCollection.h3
-rw-r--r--WebCore/html/HTMLConstructionSite.cpp8
-rw-r--r--WebCore/html/HTMLConstructionSite.h1
-rw-r--r--WebCore/html/HTMLDocumentParser.cpp45
-rw-r--r--WebCore/html/HTMLDocumentParser.h4
-rw-r--r--WebCore/html/HTMLElement.cpp15
-rw-r--r--WebCore/html/HTMLElementStack.cpp17
-rw-r--r--WebCore/html/HTMLElementStack.h5
-rw-r--r--WebCore/html/HTMLEntityNames.json8552
-rw-r--r--WebCore/html/HTMLFormattingElementList.h1
-rw-r--r--WebCore/html/HTMLInputElement.cpp33
-rw-r--r--WebCore/html/HTMLMediaElement.cpp58
-rw-r--r--WebCore/html/HTMLMediaElement.h16
-rw-r--r--WebCore/html/HTMLParserQuirks.h2
-rw-r--r--WebCore/html/HTMLQuoteElement.h3
-rw-r--r--WebCore/html/HTMLScriptRunner.cpp38
-rw-r--r--WebCore/html/HTMLScriptRunner.h44
-rw-r--r--WebCore/html/HTMLScriptRunnerHost.h3
-rw-r--r--WebCore/html/HTMLToken.h2
-rw-r--r--WebCore/html/HTMLTokenizer.cpp2
-rw-r--r--WebCore/html/HTMLTokenizer.h33
-rw-r--r--WebCore/html/HTMLTreeBuilder.cpp252
-rw-r--r--WebCore/html/HTMLTreeBuilder.h39
-rw-r--r--WebCore/html/HTMLVideoElement.cpp60
-rw-r--r--WebCore/html/HTMLVideoElement.h11
-rw-r--r--WebCore/html/HTMLViewSourceDocument.cpp40
-rw-r--r--WebCore/html/LegacyHTMLDocumentParser.cpp6
-rw-r--r--WebCore/html/StepRange.h2
-rw-r--r--WebCore/html/ValidityState.cpp6
-rw-r--r--WebCore/html/ValidityState.h2
-rw-r--r--WebCore/html/canvas/ArrayBuffer.cpp18
-rw-r--r--WebCore/html/canvas/ArrayBufferView.cpp7
-rw-r--r--WebCore/html/canvas/ArrayBufferView.h5
-rw-r--r--WebCore/html/canvas/CanvasGradient.h3
-rw-r--r--WebCore/html/canvas/CanvasNumberArray.h3
-rw-r--r--WebCore/html/canvas/CanvasObject.h79
-rw-r--r--WebCore/html/canvas/CanvasPattern.h2
-rw-r--r--WebCore/html/canvas/CanvasRenderingContext.h9
-rw-r--r--WebCore/html/canvas/CanvasRenderingContext2D.cpp79
-rw-r--r--WebCore/html/canvas/CanvasRenderingContext2D.h19
-rw-r--r--WebCore/html/canvas/CanvasStyle.cpp20
-rw-r--r--WebCore/html/canvas/CanvasStyle.h2
-rw-r--r--WebCore/html/canvas/TypedArrayBase.h2
-rw-r--r--WebCore/html/canvas/WebGLBuffer.cpp179
-rw-r--r--WebCore/html/canvas/WebGLBuffer.h123
-rw-r--r--WebCore/html/canvas/WebGLFramebuffer.cpp15
-rw-r--r--WebCore/html/canvas/WebGLFramebuffer.h94
-rw-r--r--WebCore/html/canvas/WebGLGetInfo.cpp7
-rw-r--r--WebCore/html/canvas/WebGLGetInfo.h18
-rw-r--r--WebCore/html/canvas/WebGLObject.cpp (renamed from WebCore/html/canvas/CanvasObject.cpp)13
-rw-r--r--WebCore/html/canvas/WebGLObject.h79
-rw-r--r--WebCore/html/canvas/WebGLProgram.cpp13
-rw-r--r--WebCore/html/canvas/WebGLProgram.h70
-rw-r--r--WebCore/html/canvas/WebGLRenderbuffer.cpp5
-rw-r--r--WebCore/html/canvas/WebGLRenderbuffer.h52
-rw-r--r--WebCore/html/canvas/WebGLRenderingContext.cpp222
-rw-r--r--WebCore/html/canvas/WebGLRenderingContext.h942
-rw-r--r--WebCore/html/canvas/WebGLRenderingContext.idl5
-rw-r--r--WebCore/html/canvas/WebGLShader.cpp5
-rw-r--r--WebCore/html/canvas/WebGLShader.h30
-rw-r--r--WebCore/html/canvas/WebGLTexture.cpp5
-rw-r--r--WebCore/html/canvas/WebGLTexture.h140
-rw-r--r--WebCore/html/canvas/WebGLUniformLocation.h2
85 files changed, 5991 insertions, 5672 deletions
diff --git a/WebCore/html/Blob.cpp b/WebCore/html/Blob.cpp
index a41fb2e..977ffa6 100644
--- a/WebCore/html/Blob.cpp
+++ b/WebCore/html/Blob.cpp
@@ -70,7 +70,7 @@ const String& Blob::path() const
return m_items[0]->toFileBlobItem()->path();
}
-#if ENABLE(BLOB_SLICE)
+#if ENABLE(BLOB)
PassRefPtr<Blob> Blob::slice(ScriptExecutionContext* scriptExecutionContext, long long start, long long length, const String& contentType) const
{
if (start < 0)
@@ -97,6 +97,6 @@ PassRefPtr<Blob> Blob::slice(ScriptExecutionContext* scriptExecutionContext, lon
}
return Blob::create(scriptExecutionContext, contentType, items);
}
-#endif // ENABLE(BLOB_SLICE)
+#endif // ENABLE(BLOB)
} // namespace WebCore
diff --git a/WebCore/html/Blob.h b/WebCore/html/Blob.h
index 12ccca7..7afc7a0 100644
--- a/WebCore/html/Blob.h
+++ b/WebCore/html/Blob.h
@@ -67,7 +67,7 @@ public:
const BlobItemList& items() const { return m_items; }
-#if ENABLE(BLOB_SLICE)
+#if ENABLE(BLOB)
PassRefPtr<Blob> slice(ScriptExecutionContext*, long long start, long long length, const String& contentType = String()) const;
#endif
diff --git a/WebCore/html/Blob.idl b/WebCore/html/Blob.idl
index 626bb73..e063b6d 100644
--- a/WebCore/html/Blob.idl
+++ b/WebCore/html/Blob.idl
@@ -35,7 +35,7 @@ module html {
readonly attribute DOMString type;
#if !defined(LANGUAGE_OBJECTIVE_C)
-#if defined(ENABLE_BLOB_SLICE) && ENABLE_BLOB_SLICE
+#if defined(ENABLE_BLOB) && ENABLE_BLOB
[CallWith=ScriptExecutionContext] Blob slice(in long long start, in long long length, in [Optional, ConvertUndefinedOrNullToNullString] DOMString contentType);
#endif
#endif
diff --git a/WebCore/html/CollectionCache.h b/WebCore/html/CollectionCache.h
index 70a5af7..df1d1fa 100644
--- a/WebCore/html/CollectionCache.h
+++ b/WebCore/html/CollectionCache.h
@@ -21,12 +21,12 @@
#ifndef CollectionCache_h
#define CollectionCache_h
+#include <wtf/Forward.h>
#include <wtf/HashMap.h>
#include <wtf/Vector.h>
namespace WebCore {
-class AtomicStringImpl;
class Element;
struct CollectionCache : FastAllocBase {
diff --git a/WebCore/html/DOMFormData.h b/WebCore/html/DOMFormData.h
index f071d4a..6c24858 100644
--- a/WebCore/html/DOMFormData.h
+++ b/WebCore/html/DOMFormData.h
@@ -32,13 +32,13 @@
#define DOMFormData_h
#include "FormDataList.h"
+#include <wtf/Forward.h>
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
namespace WebCore {
class Blob;
-class String;
class TextEncoding;
class DOMFormData : public FormDataList, public RefCounted<DOMFormData> {
diff --git a/WebCore/html/DataGridColumnList.h b/WebCore/html/DataGridColumnList.h
index ed72863..8a7ec75 100644
--- a/WebCore/html/DataGridColumnList.h
+++ b/WebCore/html/DataGridColumnList.h
@@ -5,13 +5,13 @@
#include "DataGridColumn.h"
+#include <wtf/Forward.h>
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
#include <wtf/Vector.h>
namespace WebCore {
-class AtomicString;
class HTMLDataGridElement;
class DataGridColumnList : public RefCounted<DataGridColumnList> {
diff --git a/WebCore/html/DateComponents.h b/WebCore/html/DateComponents.h
index a15d558..efc3248 100644
--- a/WebCore/html/DateComponents.h
+++ b/WebCore/html/DateComponents.h
@@ -32,12 +32,11 @@
#define DateComponents_h
#include <limits>
+#include <wtf/Forward.h>
#include <wtf/unicode/Unicode.h>
namespace WebCore {
-class String;
-
// A DateComponents instance represents one of the following date and time combinations:
// * Month type: year-month
// * Date type: year-month-day
diff --git a/WebCore/html/FileError.h b/WebCore/html/FileError.h
index 8190883..1c74c07 100644
--- a/WebCore/html/FileError.h
+++ b/WebCore/html/FileError.h
@@ -31,7 +31,7 @@
#ifndef FileError_h
#define FileError_h
-#if ENABLE(FILE_READER) || ENABLE(FILE_WRITER)
+#if ENABLE(BLOB) || ENABLE(FILE_WRITER)
#include "ExceptionCode.h"
#include <wtf/PassRefPtr.h>
@@ -55,6 +55,6 @@ private:
} // namespace WebCore
-#endif // ENABLE(FILE_READER) || ENABLE(FILE_WRITER)
+#endif // ENABLE(BLOB) || ENABLE(FILE_WRITER)
#endif // FileError_h
diff --git a/WebCore/html/FileError.idl b/WebCore/html/FileError.idl
index 555d103..3423e72 100644
--- a/WebCore/html/FileError.idl
+++ b/WebCore/html/FileError.idl
@@ -30,7 +30,7 @@
module html {
interface [
- Conditional=FILE_READER|FILE_WRITER,
+ Conditional=BLOB|FILE_WRITER,
DontCheckEnums
] FileError {
#if !defined(LANGUAGE_OBJECTIVE_C)
diff --git a/WebCore/html/FileReader.cpp b/WebCore/html/FileReader.cpp
index b44ec9d..88f218f 100644
--- a/WebCore/html/FileReader.cpp
+++ b/WebCore/html/FileReader.cpp
@@ -30,7 +30,7 @@
#include "config.h"
-#if ENABLE(FILE_READER)
+#if ENABLE(BLOB)
#include "FileReader.h"
@@ -311,4 +311,4 @@ void FileReader::convertToDataURL()
} // namespace WebCore
-#endif // ENABLE(FILE_READER)
+#endif // ENABLE(BLOB)
diff --git a/WebCore/html/FileReader.h b/WebCore/html/FileReader.h
index 80d425c..a5339a9 100644
--- a/WebCore/html/FileReader.h
+++ b/WebCore/html/FileReader.h
@@ -31,7 +31,7 @@
#ifndef FileReader_h
#define FileReader_h
-#if ENABLE(FILE_READER)
+#if ENABLE(BLOB)
#include "ActiveDOMObject.h"
#include "EventTarget.h"
@@ -138,7 +138,7 @@ private:
ReadType m_readType;
TextEncoding m_encoding;
- // Like XMLHttpRequest.m_responseText, we keep this as a ScriptString, not a WebCore::String.
+ // Like XMLHttpRequest.m_responseText, we keep this as a ScriptString, not a WTF::String.
// That's because these strings can easily get huge (they are filled from the file) and
// because JS can easily observe many intermediate states, so it's very useful to be
// able to share the buffer with JavaScript versions of the whole or partial string.
@@ -166,6 +166,6 @@ private:
} // namespace WebCore
-#endif
+#endif // ENABLE(BLOB)
#endif // FileReader_h
diff --git a/WebCore/html/FileReader.idl b/WebCore/html/FileReader.idl
index ad0e187..fb3b979 100644
--- a/WebCore/html/FileReader.idl
+++ b/WebCore/html/FileReader.idl
@@ -30,7 +30,7 @@
module html {
interface [
- Conditional=FILE_READER,
+ Conditional=BLOB,
CanBeConstructed,
CallWith=ScriptExecutionContext,
EventTarget,
diff --git a/WebCore/html/FileStream.cpp b/WebCore/html/FileStream.cpp
index f859b63..abe7bad 100644
--- a/WebCore/html/FileStream.cpp
+++ b/WebCore/html/FileStream.cpp
@@ -30,7 +30,7 @@
#include "config.h"
-#if ENABLE(FILE_READER) || ENABLE(FILE_WRITER)
+#if ENABLE(BLOB) || ENABLE(FILE_WRITER)
#include "FileStream.h"
@@ -98,7 +98,6 @@ void FileStream::openForRead(Blob* blob)
return;
}
-#if ENABLE(BLOB_SLICE)
const FileRangeBlobItem* fileRangeItem = fileItem->toFileRangeBlobItem();
if (fileRangeItem) {
// Check the modificationt time for the possible file change.
@@ -115,7 +114,6 @@ void FileStream::openForRead(Blob* blob)
}
}
}
-#endif
// Get the size.
m_totalBytesToRead = blob->size();
@@ -182,4 +180,4 @@ void FileStream::truncate(long long)
} // namespace WebCore
-#endif // ENABLE(FILE_READER) || ENABLE(FILE_WRITER)
+#endif // ENABLE(BLOB) || ENABLE(FILE_WRITER)
diff --git a/WebCore/html/FileStream.h b/WebCore/html/FileStream.h
index 9d3f7b8..b5eccd4 100644
--- a/WebCore/html/FileStream.h
+++ b/WebCore/html/FileStream.h
@@ -31,17 +31,17 @@
#ifndef FileStream_h
#define FileStream_h
-#if ENABLE(FILE_READER) || ENABLE(FILE_WRITER)
+#if ENABLE(BLOB) || ENABLE(FILE_WRITER)
#include "FileStreamClient.h"
#include "FileSystem.h"
+#include <wtf/Forward.h>
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
namespace WebCore {
class Blob;
-class String;
// All methods are synchronous and should be called on File or Worker thread.
class FileStream : public RefCounted<FileStream> {
@@ -73,6 +73,6 @@ private:
} // namespace WebCore
-#endif // ENABLE(FILE_READER) || ENABLE(FILE_WRITER)
+#endif // ENABLE(BLOB) || ENABLE(FILE_WRITER)
#endif // FileStream_h
diff --git a/WebCore/html/FileStreamClient.h b/WebCore/html/FileStreamClient.h
index 05c7df5..2e7091f 100644
--- a/WebCore/html/FileStreamClient.h
+++ b/WebCore/html/FileStreamClient.h
@@ -31,7 +31,7 @@
#ifndef FileStreamClient_h
#define FileStreamClient_h
-#if ENABLE(FILE_READER) || ENABLE(FILE_WRITER)
+#if ENABLE(BLOB) || ENABLE(FILE_WRITER)
#include "ExceptionCode.h"
@@ -58,6 +58,6 @@ protected:
} // namespace WebCore
-#endif // ENABLE(FILE_READER) || ENABLE(FILE_WRITER)
+#endif // ENABLE(BLOB) || ENABLE(FILE_WRITER)
#endif // FileStreamClient_h
diff --git a/WebCore/html/FileStreamProxy.cpp b/WebCore/html/FileStreamProxy.cpp
index e2516df..e3b9e79 100644
--- a/WebCore/html/FileStreamProxy.cpp
+++ b/WebCore/html/FileStreamProxy.cpp
@@ -30,7 +30,7 @@
#include "config.h"
-#if ENABLE(FILE_READER) || ENABLE(FILE_WRITER)
+#if ENABLE(BLOB) || ENABLE(FILE_WRITER)
#include "FileStreamProxy.h"
@@ -199,4 +199,4 @@ void FileStreamProxy::didStop()
} // namespace WebCore
-#endif // ENABLE(FILE_WRITER)
+#endif // ENABLE(BLOB) || ENABLE(FILE_WRITER)
diff --git a/WebCore/html/FileStreamProxy.h b/WebCore/html/FileStreamProxy.h
index 66d8cb3..8523d4a 100644
--- a/WebCore/html/FileStreamProxy.h
+++ b/WebCore/html/FileStreamProxy.h
@@ -32,9 +32,10 @@
#ifndef FileStreamProxy_h
#define FileStreamProxy_h
-#if ENABLE(FILE_READER) || ENABLE(FILE_WRITER)
+#if ENABLE(BLOB) || ENABLE(FILE_WRITER)
#include "FileStreamClient.h"
+#include <wtf/Forward.h>
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
#include <wtf/RefPtr.h>
@@ -45,7 +46,6 @@ class Blob;
class FileStream;
class FileThread;
class ScriptExecutionContext;
-class String;
// A proxy module that calls corresponding FileStream methods on the file thread. Note: you must call stop() first and then release the reference to destruct the FileStreamProxy instance.
class FileStreamProxy : public RefCounted<FileStreamProxy>, public FileStreamClient {
@@ -87,6 +87,6 @@ private:
} // namespace WebCore
-#endif // ENABLE(FILE_READER) || ENABLE(FILE_WRITER)
+#endif // ENABLE(BLOB) || ENABLE(FILE_WRITER)
#endif // FileStreamProxy_h
diff --git a/WebCore/html/FileThread.cpp b/WebCore/html/FileThread.cpp
index 3a3413c..4e48cfb 100644
--- a/WebCore/html/FileThread.cpp
+++ b/WebCore/html/FileThread.cpp
@@ -30,7 +30,7 @@
#include "config.h"
-#if ENABLE(FILE_WRITER) || ENABLE(FILE_READER)
+#if ENABLE(BLOB) || ENABLE(FILE_WRITER)
#include "FileThread.h"
@@ -116,4 +116,4 @@ void* FileThread::runLoop()
} // namespace WebCore
-#endif // ENABLE(FILE_WRITER) || ENABLE(FILE_READER)
+#endif // ENABLE(BLOB) || ENABLE(FILE_WRITER)
diff --git a/WebCore/html/FileThread.h b/WebCore/html/FileThread.h
index 2eba98e..16acacc 100644
--- a/WebCore/html/FileThread.h
+++ b/WebCore/html/FileThread.h
@@ -31,7 +31,7 @@
#ifndef FileThread_h
#define FileThread_h
-#if ENABLE(FILE_WRITER) || ENABLE(FILE_READER)
+#if ENABLE(BLOB) || ENABLE(FILE_WRITER)
#include <wtf/MessageQueue.h>
#include <wtf/PassOwnPtr.h>
@@ -83,6 +83,6 @@ private:
} // namespace WebCore
-#endif // ENABLE(FILE_WRITER) || ENABLE(FILE_READER)
+#endif // ENABLE(BLOB) || ENABLE(FILE_WRITER)
#endif // FileThread_h
diff --git a/WebCore/html/FormDataList.h b/WebCore/html/FormDataList.h
index f4bb905..38b07f9 100644
--- a/WebCore/html/FormDataList.h
+++ b/WebCore/html/FormDataList.h
@@ -23,6 +23,7 @@
#include "Blob.h"
#include "TextEncoding.h"
+#include <wtf/Forward.h>
#include <wtf/text/CString.h>
namespace WebCore {
@@ -36,7 +37,7 @@ public:
appendString(key);
appendString(value);
}
- void appendData(const String& key, const WTF::CString& value)
+ void appendData(const String& key, const CString& value)
{
appendString(key);
appendString(value);
@@ -52,7 +53,7 @@ public:
const TextEncoding& encoding() const { return m_encoding; }
private:
- void appendString(const WTF::CString&);
+ void appendString(const CString&);
void appendString(const String&);
TextEncoding m_encoding;
diff --git a/WebCore/html/HTMLAnchorElement.cpp b/WebCore/html/HTMLAnchorElement.cpp
index 6f9b17c..0d2e92d 100644
--- a/WebCore/html/HTMLAnchorElement.cpp
+++ b/WebCore/html/HTMLAnchorElement.cpp
@@ -237,8 +237,7 @@ void HTMLAnchorElement::setActive(bool down, bool pause)
// Don't set the link to be active if the current selection is in the same editable block as
// this link
case EditableLinkLiveWhenNotFocused:
- if (down && document()->frame() && document()->frame()->selection() &&
- document()->frame()->selection()->rootEditableElement() == rootEditableElement())
+ if (down && document()->frame() && document()->frame()->selection()->rootEditableElement() == rootEditableElement())
return;
break;
diff --git a/WebCore/html/HTMLCanvasElement.cpp b/WebCore/html/HTMLCanvasElement.cpp
index 6b5a3a3..ef5574a 100644
--- a/WebCore/html/HTMLCanvasElement.cpp
+++ b/WebCore/html/HTMLCanvasElement.cpp
@@ -169,6 +169,12 @@ CanvasRenderingContext* HTMLCanvasElement::getContext(const String& type, Canvas
usesDashbardCompatibilityMode = settings->usesDashboardBackwardCompatibilityMode();
#endif
m_context = new CanvasRenderingContext2D(this, document()->inCompatMode(), usesDashbardCompatibilityMode);
+#if ENABLE(ACCELERATED_2D_CANVAS) && USE(ACCELERATED_COMPOSITING)
+ if (m_context) {
+ // Need to make sure a RenderLayer and compositing layer get created for the Canvas
+ setNeedsStyleRecalc(SyntheticStyleChange);
+ }
+#endif
}
return m_context.get();
}
@@ -216,7 +222,7 @@ void HTMLCanvasElement::willDraw(const FloatRect& rect)
m_dirtyRect.unite(r);
ro->repaintRectangle(enclosingIntRect(m_dirtyRect));
}
-
+
if (m_observer)
m_observer->canvasChanged(this, rect);
}
@@ -299,12 +305,8 @@ bool HTMLCanvasElement::is3D() const
void HTMLCanvasElement::makeRenderingResultsAvailable()
{
-#if ENABLE(3D_CANVAS)
- if (is3D()) {
- WebGLRenderingContext* context3d = reinterpret_cast<WebGLRenderingContext*>(renderingContext());
- context3d->paintRenderingResultsToCanvas();
- }
-#endif
+ if (m_context)
+ m_context->paintRenderingResultsToCanvas();
}
void HTMLCanvasElement::recalcStyle(StyleChange change)
diff --git a/WebCore/html/HTMLCollection.h b/WebCore/html/HTMLCollection.h
index eea1777..4359724 100644
--- a/WebCore/html/HTMLCollection.h
+++ b/WebCore/html/HTMLCollection.h
@@ -31,12 +31,9 @@
namespace WebCore {
-class AtomicString;
-class AtomicStringImpl;
class Element;
class Node;
class NodeList;
-class String;
struct CollectionCache;
diff --git a/WebCore/html/HTMLConstructionSite.cpp b/WebCore/html/HTMLConstructionSite.cpp
index 0b17086..1a9a373 100644
--- a/WebCore/html/HTMLConstructionSite.cpp
+++ b/WebCore/html/HTMLConstructionSite.cpp
@@ -141,6 +141,13 @@ HTMLConstructionSite::~HTMLConstructionSite()
{
}
+void HTMLConstructionSite::setForm(HTMLFormElement* form)
+{
+ // This method should only be needed for HTMLTreeBuilder in the fragment case.
+ ASSERT(!m_form);
+ m_form = form;
+}
+
PassRefPtr<HTMLFormElement> HTMLConstructionSite::takeForm()
{
return m_form.release();
@@ -182,7 +189,6 @@ void HTMLConstructionSite::insertHTMLHtmlStartTagInBody(AtomicHTMLToken& token)
void HTMLConstructionSite::insertHTMLBodyStartTagInBody(AtomicHTMLToken& token)
{
// FIXME: parse error
- notImplemented(); // fragment case
mergeAttributesFromTokenIntoElement(token, m_openElements.bodyElement());
}
diff --git a/WebCore/html/HTMLConstructionSite.h b/WebCore/html/HTMLConstructionSite.h
index d9c8ac5..16ba56b 100644
--- a/WebCore/html/HTMLConstructionSite.h
+++ b/WebCore/html/HTMLConstructionSite.h
@@ -84,6 +84,7 @@ public:
Element* head() const { return m_head.get(); }
+ void setForm(HTMLFormElement*);
HTMLFormElement* form() const { return m_form.get(); }
PassRefPtr<HTMLFormElement> takeForm();
diff --git a/WebCore/html/HTMLDocumentParser.cpp b/WebCore/html/HTMLDocumentParser.cpp
index ee1c8af..bd2c590 100644
--- a/WebCore/html/HTMLDocumentParser.cpp
+++ b/WebCore/html/HTMLDocumentParser.cpp
@@ -29,6 +29,7 @@
#include "DocumentFragment.h"
#include "Element.h"
#include "Frame.h"
+#include "HTMLNames.h"
#include "HTMLParserScheduler.h"
#include "HTMLTokenizer.h"
#include "HTMLPreloadScanner.h"
@@ -48,6 +49,8 @@
namespace WebCore {
+using namespace HTMLNames;
+
namespace {
class NestingLevelIncrementer : public Noncopyable {
@@ -67,6 +70,31 @@ private:
int* m_counter;
};
+// This is a direct transcription of step 4 from:
+// http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#fragment-case
+HTMLTokenizer::State tokenizerStateForContextElement(Element* contextElement, bool reportErrors)
+{
+ if (!contextElement)
+ return HTMLTokenizer::DataState;
+
+ const QualifiedName& contextTag = contextElement->tagQName();
+
+ if (contextTag.matches(titleTag) || contextTag.matches(textareaTag))
+ return HTMLTokenizer::RCDATAState;
+ if (contextTag.matches(styleTag)
+ || contextTag.matches(xmpTag)
+ || contextTag.matches(iframeTag)
+ || (contextTag.matches(noembedTag) && HTMLTreeBuilder::pluginsEnabled(contextElement->document()->frame()))
+ || (contextTag.matches(noscriptTag) && HTMLTreeBuilder::scriptEnabled(contextElement->document()->frame()))
+ || contextTag.matches(noframesTag))
+ return reportErrors ? HTMLTokenizer::RAWTEXTState : HTMLTokenizer::PLAINTEXTState;
+ if (contextTag.matches(scriptTag))
+ return reportErrors ? HTMLTokenizer::ScriptDataState : HTMLTokenizer::PLAINTEXTState;
+ if (contextTag.matches(plaintextTag))
+ return HTMLTokenizer::PLAINTEXTState;
+ return HTMLTokenizer::DataState;
+}
+
} // namespace
HTMLDocumentParser::HTMLDocumentParser(HTMLDocument* document, bool reportErrors)
@@ -78,19 +106,19 @@ HTMLDocumentParser::HTMLDocumentParser(HTMLDocument* document, bool reportErrors
, m_endWasDelayed(false)
, m_writeNestingLevel(0)
{
- begin();
}
// FIXME: Member variables should be grouped into self-initializing structs to
// minimize code duplication between these constructors.
-HTMLDocumentParser::HTMLDocumentParser(DocumentFragment* fragment, FragmentScriptingPermission scriptingPermission)
+HTMLDocumentParser::HTMLDocumentParser(DocumentFragment* fragment, Element* contextElement, FragmentScriptingPermission scriptingPermission)
: ScriptableDocumentParser(fragment->document())
, m_tokenizer(new HTMLTokenizer)
- , m_treeBuilder(new HTMLTreeBuilder(m_tokenizer.get(), fragment, scriptingPermission))
+ , m_treeBuilder(new HTMLTreeBuilder(m_tokenizer.get(), fragment, contextElement, scriptingPermission))
, m_endWasDelayed(false)
, m_writeNestingLevel(0)
{
- begin();
+ bool reportErrors = false; // For now document fragment parsing never reports errors.
+ m_tokenizer->setState(tokenizerStateForContextElement(contextElement, reportErrors));
}
HTMLDocumentParser::~HTMLDocumentParser()
@@ -101,11 +129,6 @@ HTMLDocumentParser::~HTMLDocumentParser()
// then we could ASSERT some invariants here.
}
-void HTMLDocumentParser::begin()
-{
- // FIXME: Should we reset the tokenizer?
-}
-
void HTMLDocumentParser::stopParsing()
{
DocumentParser::stopParsing();
@@ -427,9 +450,9 @@ ScriptController* HTMLDocumentParser::script() const
return m_document->frame() ? m_document->frame()->script() : 0;
}
-void HTMLDocumentParser::parseDocumentFragment(const String& source, DocumentFragment* fragment, FragmentScriptingPermission scriptingPermission)
+void HTMLDocumentParser::parseDocumentFragment(const String& source, DocumentFragment* fragment, Element* contextElement, FragmentScriptingPermission scriptingPermission)
{
- HTMLDocumentParser parser(fragment, scriptingPermission);
+ HTMLDocumentParser parser(fragment, contextElement, scriptingPermission);
parser.insert(source); // Use insert() so that the parser will not yield.
parser.finish();
ASSERT(!parser.processingData()); // Make sure we're done. <rdar://problem/3963151>
diff --git a/WebCore/html/HTMLDocumentParser.h b/WebCore/html/HTMLDocumentParser.h
index cc46d31..d055861 100644
--- a/WebCore/html/HTMLDocumentParser.h
+++ b/WebCore/html/HTMLDocumentParser.h
@@ -54,13 +54,13 @@ class HTMLDocumentParser : public ScriptableDocumentParser, HTMLScriptRunnerHos
public:
// FIXME: These constructors should be made private and replaced by create() methods.
HTMLDocumentParser(HTMLDocument*, bool reportErrors);
- HTMLDocumentParser(DocumentFragment*, FragmentScriptingPermission);
+ HTMLDocumentParser(DocumentFragment*, Element* contextElement, FragmentScriptingPermission);
virtual ~HTMLDocumentParser();
// Exposed for HTMLParserScheduler
void resumeParsingAfterYield();
- static void parseDocumentFragment(const String&, DocumentFragment*, FragmentScriptingPermission = FragmentScriptingAllowed);
+ static void parseDocumentFragment(const String&, DocumentFragment*, Element* contextElement, FragmentScriptingPermission = FragmentScriptingAllowed);
private:
// DocumentParser
diff --git a/WebCore/html/HTMLElement.cpp b/WebCore/html/HTMLElement.cpp
index fb1bcc2..6fc53a2 100644
--- a/WebCore/html/HTMLElement.cpp
+++ b/WebCore/html/HTMLElement.cpp
@@ -275,6 +275,7 @@ String HTMLElement::outerHTML() const
return createMarkup(this);
}
+// FIXME: This method is unecessary with the new HTMLDocumentParser.
PassRefPtr<DocumentFragment> HTMLElement::createContextualFragment(const String& markup, FragmentScriptingPermission scriptingPermission)
{
// The following is in accordance with the definition as used by IE.
@@ -340,6 +341,7 @@ static void replaceChildrenWithText(HTMLElement* element, const String& text, Ex
void HTMLElement::setInnerHTML(const String& html, ExceptionCode& ec)
{
+ // FIXME: This code can be removed, it's handled by the HTMLDocumentParser correctly.
if (hasLocalName(scriptTag) || hasLocalName(styleTag)) {
// Script and CSS source shouldn't be parsed as HTML.
removeChildren();
@@ -551,7 +553,7 @@ void HTMLElement::insertAdjacentHTML(const String& where, const String& markup,
{
RefPtr<DocumentFragment> fragment = document()->createDocumentFragment();
if (document()->isHTMLDocument())
- fragment->parseHTML(markup);
+ fragment->parseHTML(markup, this);
else {
if (!fragment->parseXML(markup, this))
// FIXME: We should propagate a syntax error exception out here.
@@ -986,7 +988,7 @@ bool HTMLElement::checkDTD(const Node* newChild)
return true;
return inEitherTagList(newChild);
}
-
+
bool HTMLElement::rendererIsNeeded(RenderStyle *style)
{
#if !ENABLE(XHTMLMP)
@@ -994,11 +996,16 @@ bool HTMLElement::rendererIsNeeded(RenderStyle *style)
Frame* frame = document()->frame();
if (frame && frame->script()->canExecuteScripts(NotAboutToExecuteScript))
return false;
- }
+ } else
#endif
+ if (hasLocalName(noembedTag)) {
+ Frame* frame = document()->frame();
+ if (frame && frame->loader()->subframeLoader()->allowPlugins(NotAboutToInstantiatePlugin))
+ return false;
+ }
return StyledElement::rendererIsNeeded(style);
}
-
+
RenderObject* HTMLElement::createRenderer(RenderArena* arena, RenderStyle* style)
{
if (hasLocalName(wbrTag))
diff --git a/WebCore/html/HTMLElementStack.cpp b/WebCore/html/HTMLElementStack.cpp
index 531a3b4..194753b 100644
--- a/WebCore/html/HTMLElementStack.cpp
+++ b/WebCore/html/HTMLElementStack.cpp
@@ -138,6 +138,23 @@ HTMLElementStack::~HTMLElementStack()
{
}
+bool HTMLElementStack::hasOnlyOneElement() const
+{
+ return !topRecord()->next();
+}
+
+bool HTMLElementStack::secondElementIsHTMLBodyElement() const
+{
+ // This is used the fragment case of <body> and <frameset> in the "in body"
+ // insertion mode.
+ // http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#parsing-main-inbody
+ ASSERT(m_htmlElement);
+ // If we have a body element, it must always be the second element on the
+ // stack, as we always start with an html element, and any other element
+ // would cause the implicit creation of a body element.
+ return !!m_bodyElement;
+}
+
void HTMLElementStack::popHTMLHeadElement()
{
ASSERT(top() == m_headElement);
diff --git a/WebCore/html/HTMLElementStack.h b/WebCore/html/HTMLElementStack.h
index 62d031f..73cfcb1 100644
--- a/WebCore/html/HTMLElementStack.h
+++ b/WebCore/html/HTMLElementStack.h
@@ -26,6 +26,7 @@
#ifndef HTMLElementStack_h
#define HTMLElementStack_h
+#include <wtf/Forward.h>
#include <wtf/Noncopyable.h>
#include <wtf/OwnPtr.h>
#include <wtf/PassOwnPtr.h>
@@ -33,7 +34,6 @@
namespace WebCore {
-class AtomicString;
class Element;
class QualifiedName;
@@ -121,6 +121,9 @@ public:
bool hasOnlyHTMLElementsInScope() const;
bool hasNumberedHeaderElementInScope() const;
+ bool hasOnlyOneElement() const;
+ bool secondElementIsHTMLBodyElement() const;
+
Element* htmlElement() const;
Element* headElement() const;
Element* bodyElement() const;
diff --git a/WebCore/html/HTMLEntityNames.json b/WebCore/html/HTMLEntityNames.json
index 7be8c5b..da3b881 100644
--- a/WebCore/html/HTMLEntityNames.json
+++ b/WebCore/html/HTMLEntityNames.json
@@ -1,8554 +1,8554 @@
[
{
- entity: "AElig;",
- value: "U+000C6"
+ "entity": "AElig;",
+ "value": "U+000C6"
},
{
- entity: "AElig",
- value: "U+000C6"
+ "entity": "AElig",
+ "value": "U+000C6"
},
{
- entity: "AMP;",
- value: "U+00026"
+ "entity": "AMP;",
+ "value": "U+00026"
},
{
- entity: "AMP",
- value: "U+00026"
+ "entity": "AMP",
+ "value": "U+00026"
},
{
- entity: "Aacute;",
- value: "U+000C1"
+ "entity": "Aacute;",
+ "value": "U+000C1"
},
{
- entity: "Aacute",
- value: "U+000C1"
+ "entity": "Aacute",
+ "value": "U+000C1"
},
{
- entity: "Abreve;",
- value: "U+00102"
+ "entity": "Abreve;",
+ "value": "U+00102"
},
{
- entity: "Acirc;",
- value: "U+000C2"
+ "entity": "Acirc;",
+ "value": "U+000C2"
},
{
- entity: "Acirc",
- value: "U+000C2"
+ "entity": "Acirc",
+ "value": "U+000C2"
},
{
- entity: "Acy;",
- value: "U+00410"
+ "entity": "Acy;",
+ "value": "U+00410"
},
{
- entity: "Afr;",
- value: "U+1D504"
+ "entity": "Afr;",
+ "value": "U+1D504"
},
{
- entity: "Agrave;",
- value: "U+000C0"
+ "entity": "Agrave;",
+ "value": "U+000C0"
},
{
- entity: "Agrave",
- value: "U+000C0"
+ "entity": "Agrave",
+ "value": "U+000C0"
},
{
- entity: "Alpha;",
- value: "U+00391"
+ "entity": "Alpha;",
+ "value": "U+00391"
},
{
- entity: "Amacr;",
- value: "U+00100"
+ "entity": "Amacr;",
+ "value": "U+00100"
},
{
- entity: "And;",
- value: "U+02A53"
+ "entity": "And;",
+ "value": "U+02A53"
},
{
- entity: "Aogon;",
- value: "U+00104"
+ "entity": "Aogon;",
+ "value": "U+00104"
},
{
- entity: "Aopf;",
- value: "U+1D538"
+ "entity": "Aopf;",
+ "value": "U+1D538"
},
{
- entity: "ApplyFunction;",
- value: "U+02061"
+ "entity": "ApplyFunction;",
+ "value": "U+02061"
},
{
- entity: "Aring;",
- value: "U+000C5"
+ "entity": "Aring;",
+ "value": "U+000C5"
},
{
- entity: "Aring",
- value: "U+000C5"
+ "entity": "Aring",
+ "value": "U+000C5"
},
{
- entity: "Ascr;",
- value: "U+1D49C"
+ "entity": "Ascr;",
+ "value": "U+1D49C"
},
{
- entity: "Assign;",
- value: "U+02254"
+ "entity": "Assign;",
+ "value": "U+02254"
},
{
- entity: "Atilde;",
- value: "U+000C3"
+ "entity": "Atilde;",
+ "value": "U+000C3"
},
{
- entity: "Atilde",
- value: "U+000C3"
+ "entity": "Atilde",
+ "value": "U+000C3"
},
{
- entity: "Auml;",
- value: "U+000C4"
+ "entity": "Auml;",
+ "value": "U+000C4"
},
{
- entity: "Auml",
- value: "U+000C4"
+ "entity": "Auml",
+ "value": "U+000C4"
},
{
- entity: "Backslash;",
- value: "U+02216"
+ "entity": "Backslash;",
+ "value": "U+02216"
},
{
- entity: "Barv;",
- value: "U+02AE7"
+ "entity": "Barv;",
+ "value": "U+02AE7"
},
{
- entity: "Barwed;",
- value: "U+02306"
+ "entity": "Barwed;",
+ "value": "U+02306"
},
{
- entity: "Bcy;",
- value: "U+00411"
+ "entity": "Bcy;",
+ "value": "U+00411"
},
{
- entity: "Because;",
- value: "U+02235"
+ "entity": "Because;",
+ "value": "U+02235"
},
{
- entity: "Bernoullis;",
- value: "U+0212C"
+ "entity": "Bernoullis;",
+ "value": "U+0212C"
},
{
- entity: "Beta;",
- value: "U+00392"
+ "entity": "Beta;",
+ "value": "U+00392"
},
{
- entity: "Bfr;",
- value: "U+1D505"
+ "entity": "Bfr;",
+ "value": "U+1D505"
},
{
- entity: "Bopf;",
- value: "U+1D539"
+ "entity": "Bopf;",
+ "value": "U+1D539"
},
{
- entity: "Breve;",
- value: "U+002D8"
+ "entity": "Breve;",
+ "value": "U+002D8"
},
{
- entity: "Bscr;",
- value: "U+0212C"
+ "entity": "Bscr;",
+ "value": "U+0212C"
},
{
- entity: "Bumpeq;",
- value: "U+0224E"
+ "entity": "Bumpeq;",
+ "value": "U+0224E"
},
{
- entity: "CHcy;",
- value: "U+00427"
+ "entity": "CHcy;",
+ "value": "U+00427"
},
{
- entity: "COPY;",
- value: "U+000A9"
+ "entity": "COPY;",
+ "value": "U+000A9"
},
{
- entity: "COPY",
- value: "U+000A9"
+ "entity": "COPY",
+ "value": "U+000A9"
},
{
- entity: "Cacute;",
- value: "U+00106"
+ "entity": "Cacute;",
+ "value": "U+00106"
},
{
- entity: "Cap;",
- value: "U+022D2"
+ "entity": "Cap;",
+ "value": "U+022D2"
},
{
- entity: "CapitalDifferentialD;",
- value: "U+02145"
+ "entity": "CapitalDifferentialD;",
+ "value": "U+02145"
},
{
- entity: "Cayleys;",
- value: "U+0212D"
+ "entity": "Cayleys;",
+ "value": "U+0212D"
},
{
- entity: "Ccaron;",
- value: "U+0010C"
+ "entity": "Ccaron;",
+ "value": "U+0010C"
},
{
- entity: "Ccedil;",
- value: "U+000C7"
+ "entity": "Ccedil;",
+ "value": "U+000C7"
},
{
- entity: "Ccedil",
- value: "U+000C7"
+ "entity": "Ccedil",
+ "value": "U+000C7"
},
{
- entity: "Ccirc;",
- value: "U+00108"
+ "entity": "Ccirc;",
+ "value": "U+00108"
},
{
- entity: "Cconint;",
- value: "U+02230"
+ "entity": "Cconint;",
+ "value": "U+02230"
},
{
- entity: "Cdot;",
- value: "U+0010A"
+ "entity": "Cdot;",
+ "value": "U+0010A"
},
{
- entity: "Cedilla;",
- value: "U+000B8"
+ "entity": "Cedilla;",
+ "value": "U+000B8"
},
{
- entity: "CenterDot;",
- value: "U+000B7"
+ "entity": "CenterDot;",
+ "value": "U+000B7"
},
{
- entity: "Cfr;",
- value: "U+0212D"
+ "entity": "Cfr;",
+ "value": "U+0212D"
},
{
- entity: "Chi;",
- value: "U+003A7"
+ "entity": "Chi;",
+ "value": "U+003A7"
},
{
- entity: "CircleDot;",
- value: "U+02299"
+ "entity": "CircleDot;",
+ "value": "U+02299"
},
{
- entity: "CircleMinus;",
- value: "U+02296"
+ "entity": "CircleMinus;",
+ "value": "U+02296"
},
{
- entity: "CirclePlus;",
- value: "U+02295"
+ "entity": "CirclePlus;",
+ "value": "U+02295"
},
{
- entity: "CircleTimes;",
- value: "U+02297"
+ "entity": "CircleTimes;",
+ "value": "U+02297"
},
{
- entity: "ClockwiseContourIntegral;",
- value: "U+02232"
+ "entity": "ClockwiseContourIntegral;",
+ "value": "U+02232"
},
{
- entity: "CloseCurlyDoubleQuote;",
- value: "U+0201D"
+ "entity": "CloseCurlyDoubleQuote;",
+ "value": "U+0201D"
},
{
- entity: "CloseCurlyQuote;",
- value: "U+02019"
+ "entity": "CloseCurlyQuote;",
+ "value": "U+02019"
},
{
- entity: "Colon;",
- value: "U+02237"
+ "entity": "Colon;",
+ "value": "U+02237"
},
{
- entity: "Colone;",
- value: "U+02A74"
+ "entity": "Colone;",
+ "value": "U+02A74"
},
{
- entity: "Congruent;",
- value: "U+02261"
+ "entity": "Congruent;",
+ "value": "U+02261"
},
{
- entity: "Conint;",
- value: "U+0222F"
+ "entity": "Conint;",
+ "value": "U+0222F"
},
{
- entity: "ContourIntegral;",
- value: "U+0222E"
+ "entity": "ContourIntegral;",
+ "value": "U+0222E"
},
{
- entity: "Copf;",
- value: "U+02102"
+ "entity": "Copf;",
+ "value": "U+02102"
},
{
- entity: "Coproduct;",
- value: "U+02210"
+ "entity": "Coproduct;",
+ "value": "U+02210"
},
{
- entity: "CounterClockwiseContourIntegral;",
- value: "U+02233"
+ "entity": "CounterClockwiseContourIntegral;",
+ "value": "U+02233"
},
{
- entity: "Cross;",
- value: "U+02A2F"
+ "entity": "Cross;",
+ "value": "U+02A2F"
},
{
- entity: "Cscr;",
- value: "U+1D49E"
+ "entity": "Cscr;",
+ "value": "U+1D49E"
},
{
- entity: "Cup;",
- value: "U+022D3"
+ "entity": "Cup;",
+ "value": "U+022D3"
},
{
- entity: "CupCap;",
- value: "U+0224D"
+ "entity": "CupCap;",
+ "value": "U+0224D"
},
{
- entity: "DD;",
- value: "U+02145"
+ "entity": "DD;",
+ "value": "U+02145"
},
{
- entity: "DDotrahd;",
- value: "U+02911"
+ "entity": "DDotrahd;",
+ "value": "U+02911"
},
{
- entity: "DJcy;",
- value: "U+00402"
+ "entity": "DJcy;",
+ "value": "U+00402"
},
{
- entity: "DScy;",
- value: "U+00405"
+ "entity": "DScy;",
+ "value": "U+00405"
},
{
- entity: "DZcy;",
- value: "U+0040F"
+ "entity": "DZcy;",
+ "value": "U+0040F"
},
{
- entity: "Dagger;",
- value: "U+02021"
+ "entity": "Dagger;",
+ "value": "U+02021"
},
{
- entity: "Darr;",
- value: "U+021A1"
+ "entity": "Darr;",
+ "value": "U+021A1"
},
{
- entity: "Dashv;",
- value: "U+02AE4"
+ "entity": "Dashv;",
+ "value": "U+02AE4"
},
{
- entity: "Dcaron;",
- value: "U+0010E"
+ "entity": "Dcaron;",
+ "value": "U+0010E"
},
{
- entity: "Dcy;",
- value: "U+00414"
+ "entity": "Dcy;",
+ "value": "U+00414"
},
{
- entity: "Del;",
- value: "U+02207"
+ "entity": "Del;",
+ "value": "U+02207"
},
{
- entity: "Delta;",
- value: "U+00394"
+ "entity": "Delta;",
+ "value": "U+00394"
},
{
- entity: "Dfr;",
- value: "U+1D507"
+ "entity": "Dfr;",
+ "value": "U+1D507"
},
{
- entity: "DiacriticalAcute;",
- value: "U+000B4"
+ "entity": "DiacriticalAcute;",
+ "value": "U+000B4"
},
{
- entity: "DiacriticalDot;",
- value: "U+002D9"
+ "entity": "DiacriticalDot;",
+ "value": "U+002D9"
},
{
- entity: "DiacriticalDoubleAcute;",
- value: "U+002DD"
+ "entity": "DiacriticalDoubleAcute;",
+ "value": "U+002DD"
},
{
- entity: "DiacriticalGrave;",
- value: "U+00060"
+ "entity": "DiacriticalGrave;",
+ "value": "U+00060"
},
{
- entity: "DiacriticalTilde;",
- value: "U+002DC"
+ "entity": "DiacriticalTilde;",
+ "value": "U+002DC"
},
{
- entity: "Diamond;",
- value: "U+022C4"
+ "entity": "Diamond;",
+ "value": "U+022C4"
},
{
- entity: "DifferentialD;",
- value: "U+02146"
+ "entity": "DifferentialD;",
+ "value": "U+02146"
},
{
- entity: "Dopf;",
- value: "U+1D53B"
+ "entity": "Dopf;",
+ "value": "U+1D53B"
},
{
- entity: "Dot;",
- value: "U+000A8"
+ "entity": "Dot;",
+ "value": "U+000A8"
},
{
- entity: "DotDot;",
- value: "U+020DC"
+ "entity": "DotDot;",
+ "value": "U+020DC"
},
{
- entity: "DotEqual;",
- value: "U+02250"
+ "entity": "DotEqual;",
+ "value": "U+02250"
},
{
- entity: "DoubleContourIntegral;",
- value: "U+0222F"
+ "entity": "DoubleContourIntegral;",
+ "value": "U+0222F"
},
{
- entity: "DoubleDot;",
- value: "U+000A8"
+ "entity": "DoubleDot;",
+ "value": "U+000A8"
},
{
- entity: "DoubleDownArrow;",
- value: "U+021D3"
+ "entity": "DoubleDownArrow;",
+ "value": "U+021D3"
},
{
- entity: "DoubleLeftArrow;",
- value: "U+021D0"
+ "entity": "DoubleLeftArrow;",
+ "value": "U+021D0"
},
{
- entity: "DoubleLeftRightArrow;",
- value: "U+021D4"
+ "entity": "DoubleLeftRightArrow;",
+ "value": "U+021D4"
},
{
- entity: "DoubleLeftTee;",
- value: "U+02AE4"
+ "entity": "DoubleLeftTee;",
+ "value": "U+02AE4"
},
{
- entity: "DoubleLongLeftArrow;",
- value: "U+027F8"
+ "entity": "DoubleLongLeftArrow;",
+ "value": "U+027F8"
},
{
- entity: "DoubleLongLeftRightArrow;",
- value: "U+027FA"
+ "entity": "DoubleLongLeftRightArrow;",
+ "value": "U+027FA"
},
{
- entity: "DoubleLongRightArrow;",
- value: "U+027F9"
+ "entity": "DoubleLongRightArrow;",
+ "value": "U+027F9"
},
{
- entity: "DoubleRightArrow;",
- value: "U+021D2"
+ "entity": "DoubleRightArrow;",
+ "value": "U+021D2"
},
{
- entity: "DoubleRightTee;",
- value: "U+022A8"
+ "entity": "DoubleRightTee;",
+ "value": "U+022A8"
},
{
- entity: "DoubleUpArrow;",
- value: "U+021D1"
+ "entity": "DoubleUpArrow;",
+ "value": "U+021D1"
},
{
- entity: "DoubleUpDownArrow;",
- value: "U+021D5"
+ "entity": "DoubleUpDownArrow;",
+ "value": "U+021D5"
},
{
- entity: "DoubleVerticalBar;",
- value: "U+02225"
+ "entity": "DoubleVerticalBar;",
+ "value": "U+02225"
},
{
- entity: "DownArrow;",
- value: "U+02193"
+ "entity": "DownArrow;",
+ "value": "U+02193"
},
{
- entity: "DownArrowBar;",
- value: "U+02913"
+ "entity": "DownArrowBar;",
+ "value": "U+02913"
},
{
- entity: "DownArrowUpArrow;",
- value: "U+021F5"
+ "entity": "DownArrowUpArrow;",
+ "value": "U+021F5"
},
{
- entity: "DownBreve;",
- value: "U+00311"
+ "entity": "DownBreve;",
+ "value": "U+00311"
},
{
- entity: "DownLeftRightVector;",
- value: "U+02950"
+ "entity": "DownLeftRightVector;",
+ "value": "U+02950"
},
{
- entity: "DownLeftTeeVector;",
- value: "U+0295E"
+ "entity": "DownLeftTeeVector;",
+ "value": "U+0295E"
},
{
- entity: "DownLeftVector;",
- value: "U+021BD"
+ "entity": "DownLeftVector;",
+ "value": "U+021BD"
},
{
- entity: "DownLeftVectorBar;",
- value: "U+02956"
+ "entity": "DownLeftVectorBar;",
+ "value": "U+02956"
},
{
- entity: "DownRightTeeVector;",
- value: "U+0295F"
+ "entity": "DownRightTeeVector;",
+ "value": "U+0295F"
},
{
- entity: "DownRightVector;",
- value: "U+021C1"
+ "entity": "DownRightVector;",
+ "value": "U+021C1"
},
{
- entity: "DownRightVectorBar;",
- value: "U+02957"
+ "entity": "DownRightVectorBar;",
+ "value": "U+02957"
},
{
- entity: "DownTee;",
- value: "U+022A4"
+ "entity": "DownTee;",
+ "value": "U+022A4"
},
{
- entity: "DownTeeArrow;",
- value: "U+021A7"
+ "entity": "DownTeeArrow;",
+ "value": "U+021A7"
},
{
- entity: "Downarrow;",
- value: "U+021D3"
+ "entity": "Downarrow;",
+ "value": "U+021D3"
},
{
- entity: "Dscr;",
- value: "U+1D49F"
+ "entity": "Dscr;",
+ "value": "U+1D49F"
},
{
- entity: "Dstrok;",
- value: "U+00110"
+ "entity": "Dstrok;",
+ "value": "U+00110"
},
{
- entity: "ENG;",
- value: "U+0014A"
+ "entity": "ENG;",
+ "value": "U+0014A"
},
{
- entity: "ETH;",
- value: "U+000D0"
+ "entity": "ETH;",
+ "value": "U+000D0"
},
{
- entity: "ETH",
- value: "U+000D0"
+ "entity": "ETH",
+ "value": "U+000D0"
},
{
- entity: "Eacute;",
- value: "U+000C9"
+ "entity": "Eacute;",
+ "value": "U+000C9"
},
{
- entity: "Eacute",
- value: "U+000C9"
+ "entity": "Eacute",
+ "value": "U+000C9"
},
{
- entity: "Ecaron;",
- value: "U+0011A"
+ "entity": "Ecaron;",
+ "value": "U+0011A"
},
{
- entity: "Ecirc;",
- value: "U+000CA"
+ "entity": "Ecirc;",
+ "value": "U+000CA"
},
{
- entity: "Ecirc",
- value: "U+000CA"
+ "entity": "Ecirc",
+ "value": "U+000CA"
},
{
- entity: "Ecy;",
- value: "U+0042D"
+ "entity": "Ecy;",
+ "value": "U+0042D"
},
{
- entity: "Edot;",
- value: "U+00116"
+ "entity": "Edot;",
+ "value": "U+00116"
},
{
- entity: "Efr;",
- value: "U+1D508"
+ "entity": "Efr;",
+ "value": "U+1D508"
},
{
- entity: "Egrave;",
- value: "U+000C8"
+ "entity": "Egrave;",
+ "value": "U+000C8"
},
{
- entity: "Egrave",
- value: "U+000C8"
+ "entity": "Egrave",
+ "value": "U+000C8"
},
{
- entity: "Element;",
- value: "U+02208"
+ "entity": "Element;",
+ "value": "U+02208"
},
{
- entity: "Emacr;",
- value: "U+00112"
+ "entity": "Emacr;",
+ "value": "U+00112"
},
{
- entity: "EmptySmallSquare;",
- value: "U+025FB"
+ "entity": "EmptySmallSquare;",
+ "value": "U+025FB"
},
{
- entity: "EmptyVerySmallSquare;",
- value: "U+025AB"
+ "entity": "EmptyVerySmallSquare;",
+ "value": "U+025AB"
},
{
- entity: "Eogon;",
- value: "U+00118"
+ "entity": "Eogon;",
+ "value": "U+00118"
},
{
- entity: "Eopf;",
- value: "U+1D53C"
+ "entity": "Eopf;",
+ "value": "U+1D53C"
},
{
- entity: "Epsilon;",
- value: "U+00395"
+ "entity": "Epsilon;",
+ "value": "U+00395"
},
{
- entity: "Equal;",
- value: "U+02A75"
+ "entity": "Equal;",
+ "value": "U+02A75"
},
{
- entity: "EqualTilde;",
- value: "U+02242"
+ "entity": "EqualTilde;",
+ "value": "U+02242"
},
{
- entity: "Equilibrium;",
- value: "U+021CC"
+ "entity": "Equilibrium;",
+ "value": "U+021CC"
},
{
- entity: "Escr;",
- value: "U+02130"
+ "entity": "Escr;",
+ "value": "U+02130"
},
{
- entity: "Esim;",
- value: "U+02A73"
+ "entity": "Esim;",
+ "value": "U+02A73"
},
{
- entity: "Eta;",
- value: "U+00397"
+ "entity": "Eta;",
+ "value": "U+00397"
},
{
- entity: "Euml;",
- value: "U+000CB"
+ "entity": "Euml;",
+ "value": "U+000CB"
},
{
- entity: "Euml",
- value: "U+000CB"
+ "entity": "Euml",
+ "value": "U+000CB"
},
{
- entity: "Exists;",
- value: "U+02203"
+ "entity": "Exists;",
+ "value": "U+02203"
},
{
- entity: "ExponentialE;",
- value: "U+02147"
+ "entity": "ExponentialE;",
+ "value": "U+02147"
},
{
- entity: "Fcy;",
- value: "U+00424"
+ "entity": "Fcy;",
+ "value": "U+00424"
},
{
- entity: "Ffr;",
- value: "U+1D509"
+ "entity": "Ffr;",
+ "value": "U+1D509"
},
{
- entity: "FilledSmallSquare;",
- value: "U+025FC"
+ "entity": "FilledSmallSquare;",
+ "value": "U+025FC"
},
{
- entity: "FilledVerySmallSquare;",
- value: "U+025AA"
+ "entity": "FilledVerySmallSquare;",
+ "value": "U+025AA"
},
{
- entity: "Fopf;",
- value: "U+1D53D"
+ "entity": "Fopf;",
+ "value": "U+1D53D"
},
{
- entity: "ForAll;",
- value: "U+02200"
+ "entity": "ForAll;",
+ "value": "U+02200"
},
{
- entity: "Fouriertrf;",
- value: "U+02131"
+ "entity": "Fouriertrf;",
+ "value": "U+02131"
},
{
- entity: "Fscr;",
- value: "U+02131"
+ "entity": "Fscr;",
+ "value": "U+02131"
},
{
- entity: "GJcy;",
- value: "U+00403"
+ "entity": "GJcy;",
+ "value": "U+00403"
},
{
- entity: "GT;",
- value: "U+0003E"
+ "entity": "GT;",
+ "value": "U+0003E"
},
{
- entity: "GT",
- value: "U+0003E"
+ "entity": "GT",
+ "value": "U+0003E"
},
{
- entity: "Gamma;",
- value: "U+00393"
+ "entity": "Gamma;",
+ "value": "U+00393"
},
{
- entity: "Gammad;",
- value: "U+003DC"
+ "entity": "Gammad;",
+ "value": "U+003DC"
},
{
- entity: "Gbreve;",
- value: "U+0011E"
+ "entity": "Gbreve;",
+ "value": "U+0011E"
},
{
- entity: "Gcedil;",
- value: "U+00122"
+ "entity": "Gcedil;",
+ "value": "U+00122"
},
{
- entity: "Gcirc;",
- value: "U+0011C"
+ "entity": "Gcirc;",
+ "value": "U+0011C"
},
{
- entity: "Gcy;",
- value: "U+00413"
+ "entity": "Gcy;",
+ "value": "U+00413"
},
{
- entity: "Gdot;",
- value: "U+00120"
+ "entity": "Gdot;",
+ "value": "U+00120"
},
{
- entity: "Gfr;",
- value: "U+1D50A"
+ "entity": "Gfr;",
+ "value": "U+1D50A"
},
{
- entity: "Gg;",
- value: "U+022D9"
+ "entity": "Gg;",
+ "value": "U+022D9"
},
{
- entity: "Gopf;",
- value: "U+1D53E"
+ "entity": "Gopf;",
+ "value": "U+1D53E"
},
{
- entity: "GreaterEqual;",
- value: "U+02265"
+ "entity": "GreaterEqual;",
+ "value": "U+02265"
},
{
- entity: "GreaterEqualLess;",
- value: "U+022DB"
+ "entity": "GreaterEqualLess;",
+ "value": "U+022DB"
},
{
- entity: "GreaterFullEqual;",
- value: "U+02267"
+ "entity": "GreaterFullEqual;",
+ "value": "U+02267"
},
{
- entity: "GreaterGreater;",
- value: "U+02AA2"
+ "entity": "GreaterGreater;",
+ "value": "U+02AA2"
},
{
- entity: "GreaterLess;",
- value: "U+02277"
+ "entity": "GreaterLess;",
+ "value": "U+02277"
},
{
- entity: "GreaterSlantEqual;",
- value: "U+02A7E"
+ "entity": "GreaterSlantEqual;",
+ "value": "U+02A7E"
},
{
- entity: "GreaterTilde;",
- value: "U+02273"
+ "entity": "GreaterTilde;",
+ "value": "U+02273"
},
{
- entity: "Gscr;",
- value: "U+1D4A2"
+ "entity": "Gscr;",
+ "value": "U+1D4A2"
},
{
- entity: "Gt;",
- value: "U+0226B"
+ "entity": "Gt;",
+ "value": "U+0226B"
},
{
- entity: "HARDcy;",
- value: "U+0042A"
+ "entity": "HARDcy;",
+ "value": "U+0042A"
},
{
- entity: "Hacek;",
- value: "U+002C7"
+ "entity": "Hacek;",
+ "value": "U+002C7"
},
{
- entity: "Hat;",
- value: "U+0005E"
+ "entity": "Hat;",
+ "value": "U+0005E"
},
{
- entity: "Hcirc;",
- value: "U+00124"
+ "entity": "Hcirc;",
+ "value": "U+00124"
},
{
- entity: "Hfr;",
- value: "U+0210C"
+ "entity": "Hfr;",
+ "value": "U+0210C"
},
{
- entity: "HilbertSpace;",
- value: "U+0210B"
+ "entity": "HilbertSpace;",
+ "value": "U+0210B"
},
{
- entity: "Hopf;",
- value: "U+0210D"
+ "entity": "Hopf;",
+ "value": "U+0210D"
},
{
- entity: "HorizontalLine;",
- value: "U+02500"
+ "entity": "HorizontalLine;",
+ "value": "U+02500"
},
{
- entity: "Hscr;",
- value: "U+0210B"
+ "entity": "Hscr;",
+ "value": "U+0210B"
},
{
- entity: "Hstrok;",
- value: "U+00126"
+ "entity": "Hstrok;",
+ "value": "U+00126"
},
{
- entity: "HumpDownHump;",
- value: "U+0224E"
+ "entity": "HumpDownHump;",
+ "value": "U+0224E"
},
{
- entity: "HumpEqual;",
- value: "U+0224F"
+ "entity": "HumpEqual;",
+ "value": "U+0224F"
},
{
- entity: "IEcy;",
- value: "U+00415"
+ "entity": "IEcy;",
+ "value": "U+00415"
},
{
- entity: "IJlig;",
- value: "U+00132"
+ "entity": "IJlig;",
+ "value": "U+00132"
},
{
- entity: "IOcy;",
- value: "U+00401"
+ "entity": "IOcy;",
+ "value": "U+00401"
},
{
- entity: "Iacute;",
- value: "U+000CD"
+ "entity": "Iacute;",
+ "value": "U+000CD"
},
{
- entity: "Iacute",
- value: "U+000CD"
+ "entity": "Iacute",
+ "value": "U+000CD"
},
{
- entity: "Icirc;",
- value: "U+000CE"
+ "entity": "Icirc;",
+ "value": "U+000CE"
},
{
- entity: "Icirc",
- value: "U+000CE"
+ "entity": "Icirc",
+ "value": "U+000CE"
},
{
- entity: "Icy;",
- value: "U+00418"
+ "entity": "Icy;",
+ "value": "U+00418"
},
{
- entity: "Idot;",
- value: "U+00130"
+ "entity": "Idot;",
+ "value": "U+00130"
},
{
- entity: "Ifr;",
- value: "U+02111"
+ "entity": "Ifr;",
+ "value": "U+02111"
},
{
- entity: "Igrave;",
- value: "U+000CC"
+ "entity": "Igrave;",
+ "value": "U+000CC"
},
{
- entity: "Igrave",
- value: "U+000CC"
+ "entity": "Igrave",
+ "value": "U+000CC"
},
{
- entity: "Im;",
- value: "U+02111"
+ "entity": "Im;",
+ "value": "U+02111"
},
{
- entity: "Imacr;",
- value: "U+0012A"
+ "entity": "Imacr;",
+ "value": "U+0012A"
},
{
- entity: "ImaginaryI;",
- value: "U+02148"
+ "entity": "ImaginaryI;",
+ "value": "U+02148"
},
{
- entity: "Implies;",
- value: "U+021D2"
+ "entity": "Implies;",
+ "value": "U+021D2"
},
{
- entity: "Int;",
- value: "U+0222C"
+ "entity": "Int;",
+ "value": "U+0222C"
},
{
- entity: "Integral;",
- value: "U+0222B"
+ "entity": "Integral;",
+ "value": "U+0222B"
},
{
- entity: "Intersection;",
- value: "U+022C2"
+ "entity": "Intersection;",
+ "value": "U+022C2"
},
{
- entity: "InvisibleComma;",
- value: "U+02063"
+ "entity": "InvisibleComma;",
+ "value": "U+02063"
},
{
- entity: "InvisibleTimes;",
- value: "U+02062"
+ "entity": "InvisibleTimes;",
+ "value": "U+02062"
},
{
- entity: "Iogon;",
- value: "U+0012E"
+ "entity": "Iogon;",
+ "value": "U+0012E"
},
{
- entity: "Iopf;",
- value: "U+1D540"
+ "entity": "Iopf;",
+ "value": "U+1D540"
},
{
- entity: "Iota;",
- value: "U+00399"
+ "entity": "Iota;",
+ "value": "U+00399"
},
{
- entity: "Iscr;",
- value: "U+02110"
+ "entity": "Iscr;",
+ "value": "U+02110"
},
{
- entity: "Itilde;",
- value: "U+00128"
+ "entity": "Itilde;",
+ "value": "U+00128"
},
{
- entity: "Iukcy;",
- value: "U+00406"
+ "entity": "Iukcy;",
+ "value": "U+00406"
},
{
- entity: "Iuml;",
- value: "U+000CF"
+ "entity": "Iuml;",
+ "value": "U+000CF"
},
{
- entity: "Iuml",
- value: "U+000CF"
+ "entity": "Iuml",
+ "value": "U+000CF"
},
{
- entity: "Jcirc;",
- value: "U+00134"
+ "entity": "Jcirc;",
+ "value": "U+00134"
},
{
- entity: "Jcy;",
- value: "U+00419"
+ "entity": "Jcy;",
+ "value": "U+00419"
},
{
- entity: "Jfr;",
- value: "U+1D50D"
+ "entity": "Jfr;",
+ "value": "U+1D50D"
},
{
- entity: "Jopf;",
- value: "U+1D541"
+ "entity": "Jopf;",
+ "value": "U+1D541"
},
{
- entity: "Jscr;",
- value: "U+1D4A5"
+ "entity": "Jscr;",
+ "value": "U+1D4A5"
},
{
- entity: "Jsercy;",
- value: "U+00408"
+ "entity": "Jsercy;",
+ "value": "U+00408"
},
{
- entity: "Jukcy;",
- value: "U+00404"
+ "entity": "Jukcy;",
+ "value": "U+00404"
},
{
- entity: "KHcy;",
- value: "U+00425"
+ "entity": "KHcy;",
+ "value": "U+00425"
},
{
- entity: "KJcy;",
- value: "U+0040C"
+ "entity": "KJcy;",
+ "value": "U+0040C"
},
{
- entity: "Kappa;",
- value: "U+0039A"
+ "entity": "Kappa;",
+ "value": "U+0039A"
},
{
- entity: "Kcedil;",
- value: "U+00136"
+ "entity": "Kcedil;",
+ "value": "U+00136"
},
{
- entity: "Kcy;",
- value: "U+0041A"
+ "entity": "Kcy;",
+ "value": "U+0041A"
},
{
- entity: "Kfr;",
- value: "U+1D50E"
+ "entity": "Kfr;",
+ "value": "U+1D50E"
},
{
- entity: "Kopf;",
- value: "U+1D542"
+ "entity": "Kopf;",
+ "value": "U+1D542"
},
{
- entity: "Kscr;",
- value: "U+1D4A6"
+ "entity": "Kscr;",
+ "value": "U+1D4A6"
},
{
- entity: "LJcy;",
- value: "U+00409"
+ "entity": "LJcy;",
+ "value": "U+00409"
},
{
- entity: "LT;",
- value: "U+0003C"
+ "entity": "LT;",
+ "value": "U+0003C"
},
{
- entity: "LT",
- value: "U+0003C"
+ "entity": "LT",
+ "value": "U+0003C"
},
{
- entity: "Lacute;",
- value: "U+00139"
+ "entity": "Lacute;",
+ "value": "U+00139"
},
{
- entity: "Lambda;",
- value: "U+0039B"
+ "entity": "Lambda;",
+ "value": "U+0039B"
},
{
- entity: "Lang;",
- value: "U+027EA"
+ "entity": "Lang;",
+ "value": "U+027EA"
},
{
- entity: "Laplacetrf;",
- value: "U+02112"
+ "entity": "Laplacetrf;",
+ "value": "U+02112"
},
{
- entity: "Larr;",
- value: "U+0219E"
+ "entity": "Larr;",
+ "value": "U+0219E"
},
{
- entity: "Lcaron;",
- value: "U+0013D"
+ "entity": "Lcaron;",
+ "value": "U+0013D"
},
{
- entity: "Lcedil;",
- value: "U+0013B"
+ "entity": "Lcedil;",
+ "value": "U+0013B"
},
{
- entity: "Lcy;",
- value: "U+0041B"
+ "entity": "Lcy;",
+ "value": "U+0041B"
},
{
- entity: "LeftAngleBracket;",
- value: "U+027E8"
+ "entity": "LeftAngleBracket;",
+ "value": "U+027E8"
},
{
- entity: "LeftArrow;",
- value: "U+02190"
+ "entity": "LeftArrow;",
+ "value": "U+02190"
},
{
- entity: "LeftArrowBar;",
- value: "U+021E4"
+ "entity": "LeftArrowBar;",
+ "value": "U+021E4"
},
{
- entity: "LeftArrowRightArrow;",
- value: "U+021C6"
+ "entity": "LeftArrowRightArrow;",
+ "value": "U+021C6"
},
{
- entity: "LeftCeiling;",
- value: "U+02308"
+ "entity": "LeftCeiling;",
+ "value": "U+02308"
},
{
- entity: "LeftDoubleBracket;",
- value: "U+027E6"
+ "entity": "LeftDoubleBracket;",
+ "value": "U+027E6"
},
{
- entity: "LeftDownTeeVector;",
- value: "U+02961"
+ "entity": "LeftDownTeeVector;",
+ "value": "U+02961"
},
{
- entity: "LeftDownVector;",
- value: "U+021C3"
+ "entity": "LeftDownVector;",
+ "value": "U+021C3"
},
{
- entity: "LeftDownVectorBar;",
- value: "U+02959"
+ "entity": "LeftDownVectorBar;",
+ "value": "U+02959"
},
{
- entity: "LeftFloor;",
- value: "U+0230A"
+ "entity": "LeftFloor;",
+ "value": "U+0230A"
},
{
- entity: "LeftRightArrow;",
- value: "U+02194"
+ "entity": "LeftRightArrow;",
+ "value": "U+02194"
},
{
- entity: "LeftRightVector;",
- value: "U+0294E"
+ "entity": "LeftRightVector;",
+ "value": "U+0294E"
},
{
- entity: "LeftTee;",
- value: "U+022A3"
+ "entity": "LeftTee;",
+ "value": "U+022A3"
},
{
- entity: "LeftTeeArrow;",
- value: "U+021A4"
+ "entity": "LeftTeeArrow;",
+ "value": "U+021A4"
},
{
- entity: "LeftTeeVector;",
- value: "U+0295A"
+ "entity": "LeftTeeVector;",
+ "value": "U+0295A"
},
{
- entity: "LeftTriangle;",
- value: "U+022B2"
+ "entity": "LeftTriangle;",
+ "value": "U+022B2"
},
{
- entity: "LeftTriangleBar;",
- value: "U+029CF"
+ "entity": "LeftTriangleBar;",
+ "value": "U+029CF"
},
{
- entity: "LeftTriangleEqual;",
- value: "U+022B4"
+ "entity": "LeftTriangleEqual;",
+ "value": "U+022B4"
},
{
- entity: "LeftUpDownVector;",
- value: "U+02951"
+ "entity": "LeftUpDownVector;",
+ "value": "U+02951"
},
{
- entity: "LeftUpTeeVector;",
- value: "U+02960"
+ "entity": "LeftUpTeeVector;",
+ "value": "U+02960"
},
{
- entity: "LeftUpVector;",
- value: "U+021BF"
+ "entity": "LeftUpVector;",
+ "value": "U+021BF"
},
{
- entity: "LeftUpVectorBar;",
- value: "U+02958"
+ "entity": "LeftUpVectorBar;",
+ "value": "U+02958"
},
{
- entity: "LeftVector;",
- value: "U+021BC"
+ "entity": "LeftVector;",
+ "value": "U+021BC"
},
{
- entity: "LeftVectorBar;",
- value: "U+02952"
+ "entity": "LeftVectorBar;",
+ "value": "U+02952"
},
{
- entity: "Leftarrow;",
- value: "U+021D0"
+ "entity": "Leftarrow;",
+ "value": "U+021D0"
},
{
- entity: "Leftrightarrow;",
- value: "U+021D4"
+ "entity": "Leftrightarrow;",
+ "value": "U+021D4"
},
{
- entity: "LessEqualGreater;",
- value: "U+022DA"
+ "entity": "LessEqualGreater;",
+ "value": "U+022DA"
},
{
- entity: "LessFullEqual;",
- value: "U+02266"
+ "entity": "LessFullEqual;",
+ "value": "U+02266"
},
{
- entity: "LessGreater;",
- value: "U+02276"
+ "entity": "LessGreater;",
+ "value": "U+02276"
},
{
- entity: "LessLess;",
- value: "U+02AA1"
+ "entity": "LessLess;",
+ "value": "U+02AA1"
},
{
- entity: "LessSlantEqual;",
- value: "U+02A7D"
+ "entity": "LessSlantEqual;",
+ "value": "U+02A7D"
},
{
- entity: "LessTilde;",
- value: "U+02272"
+ "entity": "LessTilde;",
+ "value": "U+02272"
},
{
- entity: "Lfr;",
- value: "U+1D50F"
+ "entity": "Lfr;",
+ "value": "U+1D50F"
},
{
- entity: "Ll;",
- value: "U+022D8"
+ "entity": "Ll;",
+ "value": "U+022D8"
},
{
- entity: "Lleftarrow;",
- value: "U+021DA"
+ "entity": "Lleftarrow;",
+ "value": "U+021DA"
},
{
- entity: "Lmidot;",
- value: "U+0013F"
+ "entity": "Lmidot;",
+ "value": "U+0013F"
},
{
- entity: "LongLeftArrow;",
- value: "U+027F5"
+ "entity": "LongLeftArrow;",
+ "value": "U+027F5"
},
{
- entity: "LongLeftRightArrow;",
- value: "U+027F7"
+ "entity": "LongLeftRightArrow;",
+ "value": "U+027F7"
},
{
- entity: "LongRightArrow;",
- value: "U+027F6"
+ "entity": "LongRightArrow;",
+ "value": "U+027F6"
},
{
- entity: "Longleftarrow;",
- value: "U+027F8"
+ "entity": "Longleftarrow;",
+ "value": "U+027F8"
},
{
- entity: "Longleftrightarrow;",
- value: "U+027FA"
+ "entity": "Longleftrightarrow;",
+ "value": "U+027FA"
},
{
- entity: "Longrightarrow;",
- value: "U+027F9"
+ "entity": "Longrightarrow;",
+ "value": "U+027F9"
},
{
- entity: "Lopf;",
- value: "U+1D543"
+ "entity": "Lopf;",
+ "value": "U+1D543"
},
{
- entity: "LowerLeftArrow;",
- value: "U+02199"
+ "entity": "LowerLeftArrow;",
+ "value": "U+02199"
},
{
- entity: "LowerRightArrow;",
- value: "U+02198"
+ "entity": "LowerRightArrow;",
+ "value": "U+02198"
},
{
- entity: "Lscr;",
- value: "U+02112"
+ "entity": "Lscr;",
+ "value": "U+02112"
},
{
- entity: "Lsh;",
- value: "U+021B0"
+ "entity": "Lsh;",
+ "value": "U+021B0"
},
{
- entity: "Lstrok;",
- value: "U+00141"
+ "entity": "Lstrok;",
+ "value": "U+00141"
},
{
- entity: "Lt;",
- value: "U+0226A"
+ "entity": "Lt;",
+ "value": "U+0226A"
},
{
- entity: "Map;",
- value: "U+02905"
+ "entity": "Map;",
+ "value": "U+02905"
},
{
- entity: "Mcy;",
- value: "U+0041C"
+ "entity": "Mcy;",
+ "value": "U+0041C"
},
{
- entity: "MediumSpace;",
- value: "U+0205F"
+ "entity": "MediumSpace;",
+ "value": "U+0205F"
},
{
- entity: "Mellintrf;",
- value: "U+02133"
+ "entity": "Mellintrf;",
+ "value": "U+02133"
},
{
- entity: "Mfr;",
- value: "U+1D510"
+ "entity": "Mfr;",
+ "value": "U+1D510"
},
{
- entity: "MinusPlus;",
- value: "U+02213"
+ "entity": "MinusPlus;",
+ "value": "U+02213"
},
{
- entity: "Mopf;",
- value: "U+1D544"
+ "entity": "Mopf;",
+ "value": "U+1D544"
},
{
- entity: "Mscr;",
- value: "U+02133"
+ "entity": "Mscr;",
+ "value": "U+02133"
},
{
- entity: "Mu;",
- value: "U+0039C"
+ "entity": "Mu;",
+ "value": "U+0039C"
},
{
- entity: "NJcy;",
- value: "U+0040A"
+ "entity": "NJcy;",
+ "value": "U+0040A"
},
{
- entity: "Nacute;",
- value: "U+00143"
+ "entity": "Nacute;",
+ "value": "U+00143"
},
{
- entity: "Ncaron;",
- value: "U+00147"
+ "entity": "Ncaron;",
+ "value": "U+00147"
},
{
- entity: "Ncedil;",
- value: "U+00145"
+ "entity": "Ncedil;",
+ "value": "U+00145"
},
{
- entity: "Ncy;",
- value: "U+0041D"
+ "entity": "Ncy;",
+ "value": "U+0041D"
},
{
- entity: "NegativeMediumSpace;",
- value: "U+0200B"
+ "entity": "NegativeMediumSpace;",
+ "value": "U+0200B"
},
{
- entity: "NegativeThickSpace;",
- value: "U+0200B"
+ "entity": "NegativeThickSpace;",
+ "value": "U+0200B"
},
{
- entity: "NegativeThinSpace;",
- value: "U+0200B"
+ "entity": "NegativeThinSpace;",
+ "value": "U+0200B"
},
{
- entity: "NegativeVeryThinSpace;",
- value: "U+0200B"
+ "entity": "NegativeVeryThinSpace;",
+ "value": "U+0200B"
},
{
- entity: "NestedGreaterGreater;",
- value: "U+0226B"
+ "entity": "NestedGreaterGreater;",
+ "value": "U+0226B"
},
{
- entity: "NestedLessLess;",
- value: "U+0226A"
+ "entity": "NestedLessLess;",
+ "value": "U+0226A"
},
{
- entity: "NewLine;",
- value: "U+0000A"
+ "entity": "NewLine;",
+ "value": "U+0000A"
},
{
- entity: "Nfr;",
- value: "U+1D511"
+ "entity": "Nfr;",
+ "value": "U+1D511"
},
{
- entity: "NoBreak;",
- value: "U+02060"
+ "entity": "NoBreak;",
+ "value": "U+02060"
},
{
- entity: "NonBreakingSpace;",
- value: "U+000A0"
+ "entity": "NonBreakingSpace;",
+ "value": "U+000A0"
},
{
- entity: "Nopf;",
- value: "U+02115"
+ "entity": "Nopf;",
+ "value": "U+02115"
},
{
- entity: "Not;",
- value: "U+02AEC"
+ "entity": "Not;",
+ "value": "U+02AEC"
},
{
- entity: "NotCongruent;",
- value: "U+02262"
+ "entity": "NotCongruent;",
+ "value": "U+02262"
},
{
- entity: "NotCupCap;",
- value: "U+0226D"
+ "entity": "NotCupCap;",
+ "value": "U+0226D"
},
{
- entity: "NotDoubleVerticalBar;",
- value: "U+02226"
+ "entity": "NotDoubleVerticalBar;",
+ "value": "U+02226"
},
{
- entity: "NotElement;",
- value: "U+02209"
+ "entity": "NotElement;",
+ "value": "U+02209"
},
{
- entity: "NotEqual;",
- value: "U+02260"
+ "entity": "NotEqual;",
+ "value": "U+02260"
},
{
- entity: "NotExists;",
- value: "U+02204"
+ "entity": "NotExists;",
+ "value": "U+02204"
},
{
- entity: "NotGreater;",
- value: "U+0226F"
+ "entity": "NotGreater;",
+ "value": "U+0226F"
},
{
- entity: "NotGreaterEqual;",
- value: "U+02271"
+ "entity": "NotGreaterEqual;",
+ "value": "U+02271"
},
{
- entity: "NotGreaterLess;",
- value: "U+02279"
+ "entity": "NotGreaterLess;",
+ "value": "U+02279"
},
{
- entity: "NotGreaterTilde;",
- value: "U+02275"
+ "entity": "NotGreaterTilde;",
+ "value": "U+02275"
},
{
- entity: "NotLeftTriangle;",
- value: "U+022EA"
+ "entity": "NotLeftTriangle;",
+ "value": "U+022EA"
},
{
- entity: "NotLeftTriangleEqual;",
- value: "U+022EC"
+ "entity": "NotLeftTriangleEqual;",
+ "value": "U+022EC"
},
{
- entity: "NotLess;",
- value: "U+0226E"
+ "entity": "NotLess;",
+ "value": "U+0226E"
},
{
- entity: "NotLessEqual;",
- value: "U+02270"
+ "entity": "NotLessEqual;",
+ "value": "U+02270"
},
{
- entity: "NotLessGreater;",
- value: "U+02278"
+ "entity": "NotLessGreater;",
+ "value": "U+02278"
},
{
- entity: "NotLessTilde;",
- value: "U+02274"
+ "entity": "NotLessTilde;",
+ "value": "U+02274"
},
{
- entity: "NotPrecedes;",
- value: "U+02280"
+ "entity": "NotPrecedes;",
+ "value": "U+02280"
},
{
- entity: "NotPrecedesSlantEqual;",
- value: "U+022E0"
+ "entity": "NotPrecedesSlantEqual;",
+ "value": "U+022E0"
},
{
- entity: "NotReverseElement;",
- value: "U+0220C"
+ "entity": "NotReverseElement;",
+ "value": "U+0220C"
},
{
- entity: "NotRightTriangle;",
- value: "U+022EB"
+ "entity": "NotRightTriangle;",
+ "value": "U+022EB"
},
{
- entity: "NotRightTriangleEqual;",
- value: "U+022ED"
+ "entity": "NotRightTriangleEqual;",
+ "value": "U+022ED"
},
{
- entity: "NotSquareSubsetEqual;",
- value: "U+022E2"
+ "entity": "NotSquareSubsetEqual;",
+ "value": "U+022E2"
},
{
- entity: "NotSquareSupersetEqual;",
- value: "U+022E3"
+ "entity": "NotSquareSupersetEqual;",
+ "value": "U+022E3"
},
{
- entity: "NotSubsetEqual;",
- value: "U+02288"
+ "entity": "NotSubsetEqual;",
+ "value": "U+02288"
},
{
- entity: "NotSucceeds;",
- value: "U+02281"
+ "entity": "NotSucceeds;",
+ "value": "U+02281"
},
{
- entity: "NotSucceedsSlantEqual;",
- value: "U+022E1"
+ "entity": "NotSucceedsSlantEqual;",
+ "value": "U+022E1"
},
{
- entity: "NotSupersetEqual;",
- value: "U+02289"
+ "entity": "NotSupersetEqual;",
+ "value": "U+02289"
},
{
- entity: "NotTilde;",
- value: "U+02241"
+ "entity": "NotTilde;",
+ "value": "U+02241"
},
{
- entity: "NotTildeEqual;",
- value: "U+02244"
+ "entity": "NotTildeEqual;",
+ "value": "U+02244"
},
{
- entity: "NotTildeFullEqual;",
- value: "U+02247"
+ "entity": "NotTildeFullEqual;",
+ "value": "U+02247"
},
{
- entity: "NotTildeTilde;",
- value: "U+02249"
+ "entity": "NotTildeTilde;",
+ "value": "U+02249"
},
{
- entity: "NotVerticalBar;",
- value: "U+02224"
+ "entity": "NotVerticalBar;",
+ "value": "U+02224"
},
{
- entity: "Nscr;",
- value: "U+1D4A9"
+ "entity": "Nscr;",
+ "value": "U+1D4A9"
},
{
- entity: "Ntilde;",
- value: "U+000D1"
+ "entity": "Ntilde;",
+ "value": "U+000D1"
},
{
- entity: "Ntilde",
- value: "U+000D1"
+ "entity": "Ntilde",
+ "value": "U+000D1"
},
{
- entity: "Nu;",
- value: "U+0039D"
+ "entity": "Nu;",
+ "value": "U+0039D"
},
{
- entity: "OElig;",
- value: "U+00152"
+ "entity": "OElig;",
+ "value": "U+00152"
},
{
- entity: "Oacute;",
- value: "U+000D3"
+ "entity": "Oacute;",
+ "value": "U+000D3"
},
{
- entity: "Oacute",
- value: "U+000D3"
+ "entity": "Oacute",
+ "value": "U+000D3"
},
{
- entity: "Ocirc;",
- value: "U+000D4"
+ "entity": "Ocirc;",
+ "value": "U+000D4"
},
{
- entity: "Ocirc",
- value: "U+000D4"
+ "entity": "Ocirc",
+ "value": "U+000D4"
},
{
- entity: "Ocy;",
- value: "U+0041E"
+ "entity": "Ocy;",
+ "value": "U+0041E"
},
{
- entity: "Odblac;",
- value: "U+00150"
+ "entity": "Odblac;",
+ "value": "U+00150"
},
{
- entity: "Ofr;",
- value: "U+1D512"
+ "entity": "Ofr;",
+ "value": "U+1D512"
},
{
- entity: "Ograve;",
- value: "U+000D2"
+ "entity": "Ograve;",
+ "value": "U+000D2"
},
{
- entity: "Ograve",
- value: "U+000D2"
+ "entity": "Ograve",
+ "value": "U+000D2"
},
{
- entity: "Omacr;",
- value: "U+0014C"
+ "entity": "Omacr;",
+ "value": "U+0014C"
},
{
- entity: "Omega;",
- value: "U+003A9"
+ "entity": "Omega;",
+ "value": "U+003A9"
},
{
- entity: "Omicron;",
- value: "U+0039F"
+ "entity": "Omicron;",
+ "value": "U+0039F"
},
{
- entity: "Oopf;",
- value: "U+1D546"
+ "entity": "Oopf;",
+ "value": "U+1D546"
},
{
- entity: "OpenCurlyDoubleQuote;",
- value: "U+0201C"
+ "entity": "OpenCurlyDoubleQuote;",
+ "value": "U+0201C"
},
{
- entity: "OpenCurlyQuote;",
- value: "U+02018"
+ "entity": "OpenCurlyQuote;",
+ "value": "U+02018"
},
{
- entity: "Or;",
- value: "U+02A54"
+ "entity": "Or;",
+ "value": "U+02A54"
},
{
- entity: "Oscr;",
- value: "U+1D4AA"
+ "entity": "Oscr;",
+ "value": "U+1D4AA"
},
{
- entity: "Oslash;",
- value: "U+000D8"
+ "entity": "Oslash;",
+ "value": "U+000D8"
},
{
- entity: "Oslash",
- value: "U+000D8"
+ "entity": "Oslash",
+ "value": "U+000D8"
},
{
- entity: "Otilde;",
- value: "U+000D5"
+ "entity": "Otilde;",
+ "value": "U+000D5"
},
{
- entity: "Otilde",
- value: "U+000D5"
+ "entity": "Otilde",
+ "value": "U+000D5"
},
{
- entity: "Otimes;",
- value: "U+02A37"
+ "entity": "Otimes;",
+ "value": "U+02A37"
},
{
- entity: "Ouml;",
- value: "U+000D6"
+ "entity": "Ouml;",
+ "value": "U+000D6"
},
{
- entity: "Ouml",
- value: "U+000D6"
+ "entity": "Ouml",
+ "value": "U+000D6"
},
{
- entity: "OverBar;",
- value: "U+0203E"
+ "entity": "OverBar;",
+ "value": "U+0203E"
},
{
- entity: "OverBrace;",
- value: "U+023DE"
+ "entity": "OverBrace;",
+ "value": "U+023DE"
},
{
- entity: "OverBracket;",
- value: "U+023B4"
+ "entity": "OverBracket;",
+ "value": "U+023B4"
},
{
- entity: "OverParenthesis;",
- value: "U+023DC"
+ "entity": "OverParenthesis;",
+ "value": "U+023DC"
},
{
- entity: "PartialD;",
- value: "U+02202"
+ "entity": "PartialD;",
+ "value": "U+02202"
},
{
- entity: "Pcy;",
- value: "U+0041F"
+ "entity": "Pcy;",
+ "value": "U+0041F"
},
{
- entity: "Pfr;",
- value: "U+1D513"
+ "entity": "Pfr;",
+ "value": "U+1D513"
},
{
- entity: "Phi;",
- value: "U+003A6"
+ "entity": "Phi;",
+ "value": "U+003A6"
},
{
- entity: "Pi;",
- value: "U+003A0"
+ "entity": "Pi;",
+ "value": "U+003A0"
},
{
- entity: "PlusMinus;",
- value: "U+000B1"
+ "entity": "PlusMinus;",
+ "value": "U+000B1"
},
{
- entity: "Poincareplane;",
- value: "U+0210C"
+ "entity": "Poincareplane;",
+ "value": "U+0210C"
},
{
- entity: "Popf;",
- value: "U+02119"
+ "entity": "Popf;",
+ "value": "U+02119"
},
{
- entity: "Pr;",
- value: "U+02ABB"
+ "entity": "Pr;",
+ "value": "U+02ABB"
},
{
- entity: "Precedes;",
- value: "U+0227A"
+ "entity": "Precedes;",
+ "value": "U+0227A"
},
{
- entity: "PrecedesEqual;",
- value: "U+02AAF"
+ "entity": "PrecedesEqual;",
+ "value": "U+02AAF"
},
{
- entity: "PrecedesSlantEqual;",
- value: "U+0227C"
+ "entity": "PrecedesSlantEqual;",
+ "value": "U+0227C"
},
{
- entity: "PrecedesTilde;",
- value: "U+0227E"
+ "entity": "PrecedesTilde;",
+ "value": "U+0227E"
},
{
- entity: "Prime;",
- value: "U+02033"
+ "entity": "Prime;",
+ "value": "U+02033"
},
{
- entity: "Product;",
- value: "U+0220F"
+ "entity": "Product;",
+ "value": "U+0220F"
},
{
- entity: "Proportion;",
- value: "U+02237"
+ "entity": "Proportion;",
+ "value": "U+02237"
},
{
- entity: "Proportional;",
- value: "U+0221D"
+ "entity": "Proportional;",
+ "value": "U+0221D"
},
{
- entity: "Pscr;",
- value: "U+1D4AB"
+ "entity": "Pscr;",
+ "value": "U+1D4AB"
},
{
- entity: "Psi;",
- value: "U+003A8"
+ "entity": "Psi;",
+ "value": "U+003A8"
},
{
- entity: "QUOT;",
- value: "U+00022"
+ "entity": "QUOT;",
+ "value": "U+00022"
},
{
- entity: "QUOT",
- value: "U+00022"
+ "entity": "QUOT",
+ "value": "U+00022"
},
{
- entity: "Qfr;",
- value: "U+1D514"
+ "entity": "Qfr;",
+ "value": "U+1D514"
},
{
- entity: "Qopf;",
- value: "U+0211A"
+ "entity": "Qopf;",
+ "value": "U+0211A"
},
{
- entity: "Qscr;",
- value: "U+1D4AC"
+ "entity": "Qscr;",
+ "value": "U+1D4AC"
},
{
- entity: "RBarr;",
- value: "U+02910"
+ "entity": "RBarr;",
+ "value": "U+02910"
},
{
- entity: "REG;",
- value: "U+000AE"
+ "entity": "REG;",
+ "value": "U+000AE"
},
{
- entity: "REG",
- value: "U+000AE"
+ "entity": "REG",
+ "value": "U+000AE"
},
{
- entity: "Racute;",
- value: "U+00154"
+ "entity": "Racute;",
+ "value": "U+00154"
},
{
- entity: "Rang;",
- value: "U+027EB"
+ "entity": "Rang;",
+ "value": "U+027EB"
},
{
- entity: "Rarr;",
- value: "U+021A0"
+ "entity": "Rarr;",
+ "value": "U+021A0"
},
{
- entity: "Rarrtl;",
- value: "U+02916"
+ "entity": "Rarrtl;",
+ "value": "U+02916"
},
{
- entity: "Rcaron;",
- value: "U+00158"
+ "entity": "Rcaron;",
+ "value": "U+00158"
},
{
- entity: "Rcedil;",
- value: "U+00156"
+ "entity": "Rcedil;",
+ "value": "U+00156"
},
{
- entity: "Rcy;",
- value: "U+00420"
+ "entity": "Rcy;",
+ "value": "U+00420"
},
{
- entity: "Re;",
- value: "U+0211C"
+ "entity": "Re;",
+ "value": "U+0211C"
},
{
- entity: "ReverseElement;",
- value: "U+0220B"
+ "entity": "ReverseElement;",
+ "value": "U+0220B"
},
{
- entity: "ReverseEquilibrium;",
- value: "U+021CB"
+ "entity": "ReverseEquilibrium;",
+ "value": "U+021CB"
},
{
- entity: "ReverseUpEquilibrium;",
- value: "U+0296F"
+ "entity": "ReverseUpEquilibrium;",
+ "value": "U+0296F"
},
{
- entity: "Rfr;",
- value: "U+0211C"
+ "entity": "Rfr;",
+ "value": "U+0211C"
},
{
- entity: "Rho;",
- value: "U+003A1"
+ "entity": "Rho;",
+ "value": "U+003A1"
},
{
- entity: "RightAngleBracket;",
- value: "U+027E9"
+ "entity": "RightAngleBracket;",
+ "value": "U+027E9"
},
{
- entity: "RightArrow;",
- value: "U+02192"
+ "entity": "RightArrow;",
+ "value": "U+02192"
},
{
- entity: "RightArrowBar;",
- value: "U+021E5"
+ "entity": "RightArrowBar;",
+ "value": "U+021E5"
},
{
- entity: "RightArrowLeftArrow;",
- value: "U+021C4"
+ "entity": "RightArrowLeftArrow;",
+ "value": "U+021C4"
},
{
- entity: "RightCeiling;",
- value: "U+02309"
+ "entity": "RightCeiling;",
+ "value": "U+02309"
},
{
- entity: "RightDoubleBracket;",
- value: "U+027E7"
+ "entity": "RightDoubleBracket;",
+ "value": "U+027E7"
},
{
- entity: "RightDownTeeVector;",
- value: "U+0295D"
+ "entity": "RightDownTeeVector;",
+ "value": "U+0295D"
},
{
- entity: "RightDownVector;",
- value: "U+021C2"
+ "entity": "RightDownVector;",
+ "value": "U+021C2"
},
{
- entity: "RightDownVectorBar;",
- value: "U+02955"
+ "entity": "RightDownVectorBar;",
+ "value": "U+02955"
},
{
- entity: "RightFloor;",
- value: "U+0230B"
+ "entity": "RightFloor;",
+ "value": "U+0230B"
},
{
- entity: "RightTee;",
- value: "U+022A2"
+ "entity": "RightTee;",
+ "value": "U+022A2"
},
{
- entity: "RightTeeArrow;",
- value: "U+021A6"
+ "entity": "RightTeeArrow;",
+ "value": "U+021A6"
},
{
- entity: "RightTeeVector;",
- value: "U+0295B"
+ "entity": "RightTeeVector;",
+ "value": "U+0295B"
},
{
- entity: "RightTriangle;",
- value: "U+022B3"
+ "entity": "RightTriangle;",
+ "value": "U+022B3"
},
{
- entity: "RightTriangleBar;",
- value: "U+029D0"
+ "entity": "RightTriangleBar;",
+ "value": "U+029D0"
},
{
- entity: "RightTriangleEqual;",
- value: "U+022B5"
+ "entity": "RightTriangleEqual;",
+ "value": "U+022B5"
},
{
- entity: "RightUpDownVector;",
- value: "U+0294F"
+ "entity": "RightUpDownVector;",
+ "value": "U+0294F"
},
{
- entity: "RightUpTeeVector;",
- value: "U+0295C"
+ "entity": "RightUpTeeVector;",
+ "value": "U+0295C"
},
{
- entity: "RightUpVector;",
- value: "U+021BE"
+ "entity": "RightUpVector;",
+ "value": "U+021BE"
},
{
- entity: "RightUpVectorBar;",
- value: "U+02954"
+ "entity": "RightUpVectorBar;",
+ "value": "U+02954"
},
{
- entity: "RightVector;",
- value: "U+021C0"
+ "entity": "RightVector;",
+ "value": "U+021C0"
},
{
- entity: "RightVectorBar;",
- value: "U+02953"
+ "entity": "RightVectorBar;",
+ "value": "U+02953"
},
{
- entity: "Rightarrow;",
- value: "U+021D2"
+ "entity": "Rightarrow;",
+ "value": "U+021D2"
},
{
- entity: "Ropf;",
- value: "U+0211D"
+ "entity": "Ropf;",
+ "value": "U+0211D"
},
{
- entity: "RoundImplies;",
- value: "U+02970"
+ "entity": "RoundImplies;",
+ "value": "U+02970"
},
{
- entity: "Rrightarrow;",
- value: "U+021DB"
+ "entity": "Rrightarrow;",
+ "value": "U+021DB"
},
{
- entity: "Rscr;",
- value: "U+0211B"
+ "entity": "Rscr;",
+ "value": "U+0211B"
},
{
- entity: "Rsh;",
- value: "U+021B1"
+ "entity": "Rsh;",
+ "value": "U+021B1"
},
{
- entity: "RuleDelayed;",
- value: "U+029F4"
+ "entity": "RuleDelayed;",
+ "value": "U+029F4"
},
{
- entity: "SHCHcy;",
- value: "U+00429"
+ "entity": "SHCHcy;",
+ "value": "U+00429"
},
{
- entity: "SHcy;",
- value: "U+00428"
+ "entity": "SHcy;",
+ "value": "U+00428"
},
{
- entity: "SOFTcy;",
- value: "U+0042C"
+ "entity": "SOFTcy;",
+ "value": "U+0042C"
},
{
- entity: "Sacute;",
- value: "U+0015A"
+ "entity": "Sacute;",
+ "value": "U+0015A"
},
{
- entity: "Sc;",
- value: "U+02ABC"
+ "entity": "Sc;",
+ "value": "U+02ABC"
},
{
- entity: "Scaron;",
- value: "U+00160"
+ "entity": "Scaron;",
+ "value": "U+00160"
},
{
- entity: "Scedil;",
- value: "U+0015E"
+ "entity": "Scedil;",
+ "value": "U+0015E"
},
{
- entity: "Scirc;",
- value: "U+0015C"
+ "entity": "Scirc;",
+ "value": "U+0015C"
},
{
- entity: "Scy;",
- value: "U+00421"
+ "entity": "Scy;",
+ "value": "U+00421"
},
{
- entity: "Sfr;",
- value: "U+1D516"
+ "entity": "Sfr;",
+ "value": "U+1D516"
},
{
- entity: "ShortDownArrow;",
- value: "U+02193"
+ "entity": "ShortDownArrow;",
+ "value": "U+02193"
},
{
- entity: "ShortLeftArrow;",
- value: "U+02190"
+ "entity": "ShortLeftArrow;",
+ "value": "U+02190"
},
{
- entity: "ShortRightArrow;",
- value: "U+02192"
+ "entity": "ShortRightArrow;",
+ "value": "U+02192"
},
{
- entity: "ShortUpArrow;",
- value: "U+02191"
+ "entity": "ShortUpArrow;",
+ "value": "U+02191"
},
{
- entity: "Sigma;",
- value: "U+003A3"
+ "entity": "Sigma;",
+ "value": "U+003A3"
},
{
- entity: "SmallCircle;",
- value: "U+02218"
+ "entity": "SmallCircle;",
+ "value": "U+02218"
},
{
- entity: "Sopf;",
- value: "U+1D54A"
+ "entity": "Sopf;",
+ "value": "U+1D54A"
},
{
- entity: "Sqrt;",
- value: "U+0221A"
+ "entity": "Sqrt;",
+ "value": "U+0221A"
},
{
- entity: "Square;",
- value: "U+025A1"
+ "entity": "Square;",
+ "value": "U+025A1"
},
{
- entity: "SquareIntersection;",
- value: "U+02293"
+ "entity": "SquareIntersection;",
+ "value": "U+02293"
},
{
- entity: "SquareSubset;",
- value: "U+0228F"
+ "entity": "SquareSubset;",
+ "value": "U+0228F"
},
{
- entity: "SquareSubsetEqual;",
- value: "U+02291"
+ "entity": "SquareSubsetEqual;",
+ "value": "U+02291"
},
{
- entity: "SquareSuperset;",
- value: "U+02290"
+ "entity": "SquareSuperset;",
+ "value": "U+02290"
},
{
- entity: "SquareSupersetEqual;",
- value: "U+02292"
+ "entity": "SquareSupersetEqual;",
+ "value": "U+02292"
},
{
- entity: "SquareUnion;",
- value: "U+02294"
+ "entity": "SquareUnion;",
+ "value": "U+02294"
},
{
- entity: "Sscr;",
- value: "U+1D4AE"
+ "entity": "Sscr;",
+ "value": "U+1D4AE"
},
{
- entity: "Star;",
- value: "U+022C6"
+ "entity": "Star;",
+ "value": "U+022C6"
},
{
- entity: "Sub;",
- value: "U+022D0"
+ "entity": "Sub;",
+ "value": "U+022D0"
},
{
- entity: "Subset;",
- value: "U+022D0"
+ "entity": "Subset;",
+ "value": "U+022D0"
},
{
- entity: "SubsetEqual;",
- value: "U+02286"
+ "entity": "SubsetEqual;",
+ "value": "U+02286"
},
{
- entity: "Succeeds;",
- value: "U+0227B"
+ "entity": "Succeeds;",
+ "value": "U+0227B"
},
{
- entity: "SucceedsEqual;",
- value: "U+02AB0"
+ "entity": "SucceedsEqual;",
+ "value": "U+02AB0"
},
{
- entity: "SucceedsSlantEqual;",
- value: "U+0227D"
+ "entity": "SucceedsSlantEqual;",
+ "value": "U+0227D"
},
{
- entity: "SucceedsTilde;",
- value: "U+0227F"
+ "entity": "SucceedsTilde;",
+ "value": "U+0227F"
},
{
- entity: "SuchThat;",
- value: "U+0220B"
+ "entity": "SuchThat;",
+ "value": "U+0220B"
},
{
- entity: "Sum;",
- value: "U+02211"
+ "entity": "Sum;",
+ "value": "U+02211"
},
{
- entity: "Sup;",
- value: "U+022D1"
+ "entity": "Sup;",
+ "value": "U+022D1"
},
{
- entity: "Superset;",
- value: "U+02283"
+ "entity": "Superset;",
+ "value": "U+02283"
},
{
- entity: "SupersetEqual;",
- value: "U+02287"
+ "entity": "SupersetEqual;",
+ "value": "U+02287"
},
{
- entity: "Supset;",
- value: "U+022D1"
+ "entity": "Supset;",
+ "value": "U+022D1"
},
{
- entity: "THORN;",
- value: "U+000DE"
+ "entity": "THORN;",
+ "value": "U+000DE"
},
{
- entity: "THORN",
- value: "U+000DE"
+ "entity": "THORN",
+ "value": "U+000DE"
},
{
- entity: "TRADE;",
- value: "U+02122"
+ "entity": "TRADE;",
+ "value": "U+02122"
},
{
- entity: "TSHcy;",
- value: "U+0040B"
+ "entity": "TSHcy;",
+ "value": "U+0040B"
},
{
- entity: "TScy;",
- value: "U+00426"
+ "entity": "TScy;",
+ "value": "U+00426"
},
{
- entity: "Tab;",
- value: "U+00009"
+ "entity": "Tab;",
+ "value": "U+00009"
},
{
- entity: "Tau;",
- value: "U+003A4"
+ "entity": "Tau;",
+ "value": "U+003A4"
},
{
- entity: "Tcaron;",
- value: "U+00164"
+ "entity": "Tcaron;",
+ "value": "U+00164"
},
{
- entity: "Tcedil;",
- value: "U+00162"
+ "entity": "Tcedil;",
+ "value": "U+00162"
},
{
- entity: "Tcy;",
- value: "U+00422"
+ "entity": "Tcy;",
+ "value": "U+00422"
},
{
- entity: "Tfr;",
- value: "U+1D517"
+ "entity": "Tfr;",
+ "value": "U+1D517"
},
{
- entity: "Therefore;",
- value: "U+02234"
+ "entity": "Therefore;",
+ "value": "U+02234"
},
{
- entity: "Theta;",
- value: "U+00398"
+ "entity": "Theta;",
+ "value": "U+00398"
},
{
- entity: "ThinSpace;",
- value: "U+02009"
+ "entity": "ThinSpace;",
+ "value": "U+02009"
},
{
- entity: "Tilde;",
- value: "U+0223C"
+ "entity": "Tilde;",
+ "value": "U+0223C"
},
{
- entity: "TildeEqual;",
- value: "U+02243"
+ "entity": "TildeEqual;",
+ "value": "U+02243"
},
{
- entity: "TildeFullEqual;",
- value: "U+02245"
+ "entity": "TildeFullEqual;",
+ "value": "U+02245"
},
{
- entity: "TildeTilde;",
- value: "U+02248"
+ "entity": "TildeTilde;",
+ "value": "U+02248"
},
{
- entity: "Topf;",
- value: "U+1D54B"
+ "entity": "Topf;",
+ "value": "U+1D54B"
},
{
- entity: "TripleDot;",
- value: "U+020DB"
+ "entity": "TripleDot;",
+ "value": "U+020DB"
},
{
- entity: "Tscr;",
- value: "U+1D4AF"
+ "entity": "Tscr;",
+ "value": "U+1D4AF"
},
{
- entity: "Tstrok;",
- value: "U+00166"
+ "entity": "Tstrok;",
+ "value": "U+00166"
},
{
- entity: "Uacute;",
- value: "U+000DA"
+ "entity": "Uacute;",
+ "value": "U+000DA"
},
{
- entity: "Uacute",
- value: "U+000DA"
+ "entity": "Uacute",
+ "value": "U+000DA"
},
{
- entity: "Uarr;",
- value: "U+0219F"
+ "entity": "Uarr;",
+ "value": "U+0219F"
},
{
- entity: "Uarrocir;",
- value: "U+02949"
+ "entity": "Uarrocir;",
+ "value": "U+02949"
},
{
- entity: "Ubrcy;",
- value: "U+0040E"
+ "entity": "Ubrcy;",
+ "value": "U+0040E"
},
{
- entity: "Ubreve;",
- value: "U+0016C"
+ "entity": "Ubreve;",
+ "value": "U+0016C"
},
{
- entity: "Ucirc;",
- value: "U+000DB"
+ "entity": "Ucirc;",
+ "value": "U+000DB"
},
{
- entity: "Ucirc",
- value: "U+000DB"
+ "entity": "Ucirc",
+ "value": "U+000DB"
},
{
- entity: "Ucy;",
- value: "U+00423"
+ "entity": "Ucy;",
+ "value": "U+00423"
},
{
- entity: "Udblac;",
- value: "U+00170"
+ "entity": "Udblac;",
+ "value": "U+00170"
},
{
- entity: "Ufr;",
- value: "U+1D518"
+ "entity": "Ufr;",
+ "value": "U+1D518"
},
{
- entity: "Ugrave;",
- value: "U+000D9"
+ "entity": "Ugrave;",
+ "value": "U+000D9"
},
{
- entity: "Ugrave",
- value: "U+000D9"
+ "entity": "Ugrave",
+ "value": "U+000D9"
},
{
- entity: "Umacr;",
- value: "U+0016A"
+ "entity": "Umacr;",
+ "value": "U+0016A"
},
{
- entity: "UnderBar;",
- value: "U+0005F"
+ "entity": "UnderBar;",
+ "value": "U+0005F"
},
{
- entity: "UnderBrace;",
- value: "U+023DF"
+ "entity": "UnderBrace;",
+ "value": "U+023DF"
},
{
- entity: "UnderBracket;",
- value: "U+023B5"
+ "entity": "UnderBracket;",
+ "value": "U+023B5"
},
{
- entity: "UnderParenthesis;",
- value: "U+023DD"
+ "entity": "UnderParenthesis;",
+ "value": "U+023DD"
},
{
- entity: "Union;",
- value: "U+022C3"
+ "entity": "Union;",
+ "value": "U+022C3"
},
{
- entity: "UnionPlus;",
- value: "U+0228E"
+ "entity": "UnionPlus;",
+ "value": "U+0228E"
},
{
- entity: "Uogon;",
- value: "U+00172"
+ "entity": "Uogon;",
+ "value": "U+00172"
},
{
- entity: "Uopf;",
- value: "U+1D54C"
+ "entity": "Uopf;",
+ "value": "U+1D54C"
},
{
- entity: "UpArrow;",
- value: "U+02191"
+ "entity": "UpArrow;",
+ "value": "U+02191"
},
{
- entity: "UpArrowBar;",
- value: "U+02912"
+ "entity": "UpArrowBar;",
+ "value": "U+02912"
},
{
- entity: "UpArrowDownArrow;",
- value: "U+021C5"
+ "entity": "UpArrowDownArrow;",
+ "value": "U+021C5"
},
{
- entity: "UpDownArrow;",
- value: "U+02195"
+ "entity": "UpDownArrow;",
+ "value": "U+02195"
},
{
- entity: "UpEquilibrium;",
- value: "U+0296E"
+ "entity": "UpEquilibrium;",
+ "value": "U+0296E"
},
{
- entity: "UpTee;",
- value: "U+022A5"
+ "entity": "UpTee;",
+ "value": "U+022A5"
},
{
- entity: "UpTeeArrow;",
- value: "U+021A5"
+ "entity": "UpTeeArrow;",
+ "value": "U+021A5"
},
{
- entity: "Uparrow;",
- value: "U+021D1"
+ "entity": "Uparrow;",
+ "value": "U+021D1"
},
{
- entity: "Updownarrow;",
- value: "U+021D5"
+ "entity": "Updownarrow;",
+ "value": "U+021D5"
},
{
- entity: "UpperLeftArrow;",
- value: "U+02196"
+ "entity": "UpperLeftArrow;",
+ "value": "U+02196"
},
{
- entity: "UpperRightArrow;",
- value: "U+02197"
+ "entity": "UpperRightArrow;",
+ "value": "U+02197"
},
{
- entity: "Upsi;",
- value: "U+003D2"
+ "entity": "Upsi;",
+ "value": "U+003D2"
},
{
- entity: "Upsilon;",
- value: "U+003A5"
+ "entity": "Upsilon;",
+ "value": "U+003A5"
},
{
- entity: "Uring;",
- value: "U+0016E"
+ "entity": "Uring;",
+ "value": "U+0016E"
},
{
- entity: "Uscr;",
- value: "U+1D4B0"
+ "entity": "Uscr;",
+ "value": "U+1D4B0"
},
{
- entity: "Utilde;",
- value: "U+00168"
+ "entity": "Utilde;",
+ "value": "U+00168"
},
{
- entity: "Uuml;",
- value: "U+000DC"
+ "entity": "Uuml;",
+ "value": "U+000DC"
},
{
- entity: "Uuml",
- value: "U+000DC"
+ "entity": "Uuml",
+ "value": "U+000DC"
},
{
- entity: "VDash;",
- value: "U+022AB"
+ "entity": "VDash;",
+ "value": "U+022AB"
},
{
- entity: "Vbar;",
- value: "U+02AEB"
+ "entity": "Vbar;",
+ "value": "U+02AEB"
},
{
- entity: "Vcy;",
- value: "U+00412"
+ "entity": "Vcy;",
+ "value": "U+00412"
},
{
- entity: "Vdash;",
- value: "U+022A9"
+ "entity": "Vdash;",
+ "value": "U+022A9"
},
{
- entity: "Vdashl;",
- value: "U+02AE6"
+ "entity": "Vdashl;",
+ "value": "U+02AE6"
},
{
- entity: "Vee;",
- value: "U+022C1"
+ "entity": "Vee;",
+ "value": "U+022C1"
},
{
- entity: "Verbar;",
- value: "U+02016"
+ "entity": "Verbar;",
+ "value": "U+02016"
},
{
- entity: "Vert;",
- value: "U+02016"
+ "entity": "Vert;",
+ "value": "U+02016"
},
{
- entity: "VerticalBar;",
- value: "U+02223"
+ "entity": "VerticalBar;",
+ "value": "U+02223"
},
{
- entity: "VerticalLine;",
- value: "U+0007C"
+ "entity": "VerticalLine;",
+ "value": "U+0007C"
},
{
- entity: "VerticalSeparator;",
- value: "U+02758"
+ "entity": "VerticalSeparator;",
+ "value": "U+02758"
},
{
- entity: "VerticalTilde;",
- value: "U+02240"
+ "entity": "VerticalTilde;",
+ "value": "U+02240"
},
{
- entity: "VeryThinSpace;",
- value: "U+0200A"
+ "entity": "VeryThinSpace;",
+ "value": "U+0200A"
},
{
- entity: "Vfr;",
- value: "U+1D519"
+ "entity": "Vfr;",
+ "value": "U+1D519"
},
{
- entity: "Vopf;",
- value: "U+1D54D"
+ "entity": "Vopf;",
+ "value": "U+1D54D"
},
{
- entity: "Vscr;",
- value: "U+1D4B1"
+ "entity": "Vscr;",
+ "value": "U+1D4B1"
},
{
- entity: "Vvdash;",
- value: "U+022AA"
+ "entity": "Vvdash;",
+ "value": "U+022AA"
},
{
- entity: "Wcirc;",
- value: "U+00174"
+ "entity": "Wcirc;",
+ "value": "U+00174"
},
{
- entity: "Wedge;",
- value: "U+022C0"
+ "entity": "Wedge;",
+ "value": "U+022C0"
},
{
- entity: "Wfr;",
- value: "U+1D51A"
+ "entity": "Wfr;",
+ "value": "U+1D51A"
},
{
- entity: "Wopf;",
- value: "U+1D54E"
+ "entity": "Wopf;",
+ "value": "U+1D54E"
},
{
- entity: "Wscr;",
- value: "U+1D4B2"
+ "entity": "Wscr;",
+ "value": "U+1D4B2"
},
{
- entity: "Xfr;",
- value: "U+1D51B"
+ "entity": "Xfr;",
+ "value": "U+1D51B"
},
{
- entity: "Xi;",
- value: "U+0039E"
+ "entity": "Xi;",
+ "value": "U+0039E"
},
{
- entity: "Xopf;",
- value: "U+1D54F"
+ "entity": "Xopf;",
+ "value": "U+1D54F"
},
{
- entity: "Xscr;",
- value: "U+1D4B3"
+ "entity": "Xscr;",
+ "value": "U+1D4B3"
},
{
- entity: "YAcy;",
- value: "U+0042F"
+ "entity": "YAcy;",
+ "value": "U+0042F"
},
{
- entity: "YIcy;",
- value: "U+00407"
+ "entity": "YIcy;",
+ "value": "U+00407"
},
{
- entity: "YUcy;",
- value: "U+0042E"
+ "entity": "YUcy;",
+ "value": "U+0042E"
},
{
- entity: "Yacute;",
- value: "U+000DD"
+ "entity": "Yacute;",
+ "value": "U+000DD"
},
{
- entity: "Yacute",
- value: "U+000DD"
+ "entity": "Yacute",
+ "value": "U+000DD"
},
{
- entity: "Ycirc;",
- value: "U+00176"
+ "entity": "Ycirc;",
+ "value": "U+00176"
},
{
- entity: "Ycy;",
- value: "U+0042B"
+ "entity": "Ycy;",
+ "value": "U+0042B"
},
{
- entity: "Yfr;",
- value: "U+1D51C"
+ "entity": "Yfr;",
+ "value": "U+1D51C"
},
{
- entity: "Yopf;",
- value: "U+1D550"
+ "entity": "Yopf;",
+ "value": "U+1D550"
},
{
- entity: "Yscr;",
- value: "U+1D4B4"
+ "entity": "Yscr;",
+ "value": "U+1D4B4"
},
{
- entity: "Yuml;",
- value: "U+00178"
+ "entity": "Yuml;",
+ "value": "U+00178"
},
{
- entity: "ZHcy;",
- value: "U+00416"
+ "entity": "ZHcy;",
+ "value": "U+00416"
},
{
- entity: "Zacute;",
- value: "U+00179"
+ "entity": "Zacute;",
+ "value": "U+00179"
},
{
- entity: "Zcaron;",
- value: "U+0017D"
+ "entity": "Zcaron;",
+ "value": "U+0017D"
},
{
- entity: "Zcy;",
- value: "U+00417"
+ "entity": "Zcy;",
+ "value": "U+00417"
},
{
- entity: "Zdot;",
- value: "U+0017B"
+ "entity": "Zdot;",
+ "value": "U+0017B"
},
{
- entity: "ZeroWidthSpace;",
- value: "U+0200B"
+ "entity": "ZeroWidthSpace;",
+ "value": "U+0200B"
},
{
- entity: "Zeta;",
- value: "U+00396"
+ "entity": "Zeta;",
+ "value": "U+00396"
},
{
- entity: "Zfr;",
- value: "U+02128"
+ "entity": "Zfr;",
+ "value": "U+02128"
},
{
- entity: "Zopf;",
- value: "U+02124"
+ "entity": "Zopf;",
+ "value": "U+02124"
},
{
- entity: "Zscr;",
- value: "U+1D4B5"
+ "entity": "Zscr;",
+ "value": "U+1D4B5"
},
{
- entity: "aacute;",
- value: "U+000E1"
+ "entity": "aacute;",
+ "value": "U+000E1"
},
{
- entity: "aacute",
- value: "U+000E1"
+ "entity": "aacute",
+ "value": "U+000E1"
},
{
- entity: "abreve;",
- value: "U+00103"
+ "entity": "abreve;",
+ "value": "U+00103"
},
{
- entity: "ac;",
- value: "U+0223E"
+ "entity": "ac;",
+ "value": "U+0223E"
},
{
- entity: "acd;",
- value: "U+0223F"
+ "entity": "acd;",
+ "value": "U+0223F"
},
{
- entity: "acirc;",
- value: "U+000E2"
+ "entity": "acirc;",
+ "value": "U+000E2"
},
{
- entity: "acirc",
- value: "U+000E2"
+ "entity": "acirc",
+ "value": "U+000E2"
},
{
- entity: "acute;",
- value: "U+000B4"
+ "entity": "acute;",
+ "value": "U+000B4"
},
{
- entity: "acute",
- value: "U+000B4"
+ "entity": "acute",
+ "value": "U+000B4"
},
{
- entity: "acy;",
- value: "U+00430"
+ "entity": "acy;",
+ "value": "U+00430"
},
{
- entity: "aelig;",
- value: "U+000E6"
+ "entity": "aelig;",
+ "value": "U+000E6"
},
{
- entity: "aelig",
- value: "U+000E6"
+ "entity": "aelig",
+ "value": "U+000E6"
},
{
- entity: "af;",
- value: "U+02061"
+ "entity": "af;",
+ "value": "U+02061"
},
{
- entity: "afr;",
- value: "U+1D51E"
+ "entity": "afr;",
+ "value": "U+1D51E"
},
{
- entity: "agrave;",
- value: "U+000E0"
+ "entity": "agrave;",
+ "value": "U+000E0"
},
{
- entity: "agrave",
- value: "U+000E0"
+ "entity": "agrave",
+ "value": "U+000E0"
},
{
- entity: "alefsym;",
- value: "U+02135"
+ "entity": "alefsym;",
+ "value": "U+02135"
},
{
- entity: "aleph;",
- value: "U+02135"
+ "entity": "aleph;",
+ "value": "U+02135"
},
{
- entity: "alpha;",
- value: "U+003B1"
+ "entity": "alpha;",
+ "value": "U+003B1"
},
{
- entity: "amacr;",
- value: "U+00101"
+ "entity": "amacr;",
+ "value": "U+00101"
},
{
- entity: "amalg;",
- value: "U+02A3F"
+ "entity": "amalg;",
+ "value": "U+02A3F"
},
{
- entity: "amp;",
- value: "U+00026"
+ "entity": "amp;",
+ "value": "U+00026"
},
{
- entity: "amp",
- value: "U+00026"
+ "entity": "amp",
+ "value": "U+00026"
},
{
- entity: "and;",
- value: "U+02227"
+ "entity": "and;",
+ "value": "U+02227"
},
{
- entity: "andand;",
- value: "U+02A55"
+ "entity": "andand;",
+ "value": "U+02A55"
},
{
- entity: "andd;",
- value: "U+02A5C"
+ "entity": "andd;",
+ "value": "U+02A5C"
},
{
- entity: "andslope;",
- value: "U+02A58"
+ "entity": "andslope;",
+ "value": "U+02A58"
},
{
- entity: "andv;",
- value: "U+02A5A"
+ "entity": "andv;",
+ "value": "U+02A5A"
},
{
- entity: "ang;",
- value: "U+02220"
+ "entity": "ang;",
+ "value": "U+02220"
},
{
- entity: "ange;",
- value: "U+029A4"
+ "entity": "ange;",
+ "value": "U+029A4"
},
{
- entity: "angle;",
- value: "U+02220"
+ "entity": "angle;",
+ "value": "U+02220"
},
{
- entity: "angmsd;",
- value: "U+02221"
+ "entity": "angmsd;",
+ "value": "U+02221"
},
{
- entity: "angmsdaa;",
- value: "U+029A8"
+ "entity": "angmsdaa;",
+ "value": "U+029A8"
},
{
- entity: "angmsdab;",
- value: "U+029A9"
+ "entity": "angmsdab;",
+ "value": "U+029A9"
},
{
- entity: "angmsdac;",
- value: "U+029AA"
+ "entity": "angmsdac;",
+ "value": "U+029AA"
},
{
- entity: "angmsdad;",
- value: "U+029AB"
+ "entity": "angmsdad;",
+ "value": "U+029AB"
},
{
- entity: "angmsdae;",
- value: "U+029AC"
+ "entity": "angmsdae;",
+ "value": "U+029AC"
},
{
- entity: "angmsdaf;",
- value: "U+029AD"
+ "entity": "angmsdaf;",
+ "value": "U+029AD"
},
{
- entity: "angmsdag;",
- value: "U+029AE"
+ "entity": "angmsdag;",
+ "value": "U+029AE"
},
{
- entity: "angmsdah;",
- value: "U+029AF"
+ "entity": "angmsdah;",
+ "value": "U+029AF"
},
{
- entity: "angrt;",
- value: "U+0221F"
+ "entity": "angrt;",
+ "value": "U+0221F"
},
{
- entity: "angrtvb;",
- value: "U+022BE"
+ "entity": "angrtvb;",
+ "value": "U+022BE"
},
{
- entity: "angrtvbd;",
- value: "U+0299D"
+ "entity": "angrtvbd;",
+ "value": "U+0299D"
},
{
- entity: "angsph;",
- value: "U+02222"
+ "entity": "angsph;",
+ "value": "U+02222"
},
{
- entity: "angst;",
- value: "U+000C5"
+ "entity": "angst;",
+ "value": "U+000C5"
},
{
- entity: "angzarr;",
- value: "U+0237C"
+ "entity": "angzarr;",
+ "value": "U+0237C"
},
{
- entity: "aogon;",
- value: "U+00105"
+ "entity": "aogon;",
+ "value": "U+00105"
},
{
- entity: "aopf;",
- value: "U+1D552"
+ "entity": "aopf;",
+ "value": "U+1D552"
},
{
- entity: "ap;",
- value: "U+02248"
+ "entity": "ap;",
+ "value": "U+02248"
},
{
- entity: "apE;",
- value: "U+02A70"
+ "entity": "apE;",
+ "value": "U+02A70"
},
{
- entity: "apacir;",
- value: "U+02A6F"
+ "entity": "apacir;",
+ "value": "U+02A6F"
},
{
- entity: "ape;",
- value: "U+0224A"
+ "entity": "ape;",
+ "value": "U+0224A"
},
{
- entity: "apid;",
- value: "U+0224B"
+ "entity": "apid;",
+ "value": "U+0224B"
},
{
- entity: "apos;",
- value: "U+00027"
+ "entity": "apos;",
+ "value": "U+00027"
},
{
- entity: "approx;",
- value: "U+02248"
+ "entity": "approx;",
+ "value": "U+02248"
},
{
- entity: "approxeq;",
- value: "U+0224A"
+ "entity": "approxeq;",
+ "value": "U+0224A"
},
{
- entity: "aring;",
- value: "U+000E5"
+ "entity": "aring;",
+ "value": "U+000E5"
},
{
- entity: "aring",
- value: "U+000E5"
+ "entity": "aring",
+ "value": "U+000E5"
},
{
- entity: "ascr;",
- value: "U+1D4B6"
+ "entity": "ascr;",
+ "value": "U+1D4B6"
},
{
- entity: "ast;",
- value: "U+0002A"
+ "entity": "ast;",
+ "value": "U+0002A"
},
{
- entity: "asymp;",
- value: "U+02248"
+ "entity": "asymp;",
+ "value": "U+02248"
},
{
- entity: "asympeq;",
- value: "U+0224D"
+ "entity": "asympeq;",
+ "value": "U+0224D"
},
{
- entity: "atilde;",
- value: "U+000E3"
+ "entity": "atilde;",
+ "value": "U+000E3"
},
{
- entity: "atilde",
- value: "U+000E3"
+ "entity": "atilde",
+ "value": "U+000E3"
},
{
- entity: "auml;",
- value: "U+000E4"
+ "entity": "auml;",
+ "value": "U+000E4"
},
{
- entity: "auml",
- value: "U+000E4"
+ "entity": "auml",
+ "value": "U+000E4"
},
{
- entity: "awconint;",
- value: "U+02233"
+ "entity": "awconint;",
+ "value": "U+02233"
},
{
- entity: "awint;",
- value: "U+02A11"
+ "entity": "awint;",
+ "value": "U+02A11"
},
{
- entity: "bNot;",
- value: "U+02AED"
+ "entity": "bNot;",
+ "value": "U+02AED"
},
{
- entity: "backcong;",
- value: "U+0224C"
+ "entity": "backcong;",
+ "value": "U+0224C"
},
{
- entity: "backepsilon;",
- value: "U+003F6"
+ "entity": "backepsilon;",
+ "value": "U+003F6"
},
{
- entity: "backprime;",
- value: "U+02035"
+ "entity": "backprime;",
+ "value": "U+02035"
},
{
- entity: "backsim;",
- value: "U+0223D"
+ "entity": "backsim;",
+ "value": "U+0223D"
},
{
- entity: "backsimeq;",
- value: "U+022CD"
+ "entity": "backsimeq;",
+ "value": "U+022CD"
},
{
- entity: "barvee;",
- value: "U+022BD"
+ "entity": "barvee;",
+ "value": "U+022BD"
},
{
- entity: "barwed;",
- value: "U+02305"
+ "entity": "barwed;",
+ "value": "U+02305"
},
{
- entity: "barwedge;",
- value: "U+02305"
+ "entity": "barwedge;",
+ "value": "U+02305"
},
{
- entity: "bbrk;",
- value: "U+023B5"
+ "entity": "bbrk;",
+ "value": "U+023B5"
},
{
- entity: "bbrktbrk;",
- value: "U+023B6"
+ "entity": "bbrktbrk;",
+ "value": "U+023B6"
},
{
- entity: "bcong;",
- value: "U+0224C"
+ "entity": "bcong;",
+ "value": "U+0224C"
},
{
- entity: "bcy;",
- value: "U+00431"
+ "entity": "bcy;",
+ "value": "U+00431"
},
{
- entity: "bdquo;",
- value: "U+0201E"
+ "entity": "bdquo;",
+ "value": "U+0201E"
},
{
- entity: "becaus;",
- value: "U+02235"
+ "entity": "becaus;",
+ "value": "U+02235"
},
{
- entity: "because;",
- value: "U+02235"
+ "entity": "because;",
+ "value": "U+02235"
},
{
- entity: "bemptyv;",
- value: "U+029B0"
+ "entity": "bemptyv;",
+ "value": "U+029B0"
},
{
- entity: "bepsi;",
- value: "U+003F6"
+ "entity": "bepsi;",
+ "value": "U+003F6"
},
{
- entity: "bernou;",
- value: "U+0212C"
+ "entity": "bernou;",
+ "value": "U+0212C"
},
{
- entity: "beta;",
- value: "U+003B2"
+ "entity": "beta;",
+ "value": "U+003B2"
},
{
- entity: "beth;",
- value: "U+02136"
+ "entity": "beth;",
+ "value": "U+02136"
},
{
- entity: "between;",
- value: "U+0226C"
+ "entity": "between;",
+ "value": "U+0226C"
},
{
- entity: "bfr;",
- value: "U+1D51F"
+ "entity": "bfr;",
+ "value": "U+1D51F"
},
{
- entity: "bigcap;",
- value: "U+022C2"
+ "entity": "bigcap;",
+ "value": "U+022C2"
},
{
- entity: "bigcirc;",
- value: "U+025EF"
+ "entity": "bigcirc;",
+ "value": "U+025EF"
},
{
- entity: "bigcup;",
- value: "U+022C3"
+ "entity": "bigcup;",
+ "value": "U+022C3"
},
{
- entity: "bigodot;",
- value: "U+02A00"
+ "entity": "bigodot;",
+ "value": "U+02A00"
},
{
- entity: "bigoplus;",
- value: "U+02A01"
+ "entity": "bigoplus;",
+ "value": "U+02A01"
},
{
- entity: "bigotimes;",
- value: "U+02A02"
+ "entity": "bigotimes;",
+ "value": "U+02A02"
},
{
- entity: "bigsqcup;",
- value: "U+02A06"
+ "entity": "bigsqcup;",
+ "value": "U+02A06"
},
{
- entity: "bigstar;",
- value: "U+02605"
+ "entity": "bigstar;",
+ "value": "U+02605"
},
{
- entity: "bigtriangledown;",
- value: "U+025BD"
+ "entity": "bigtriangledown;",
+ "value": "U+025BD"
},
{
- entity: "bigtriangleup;",
- value: "U+025B3"
+ "entity": "bigtriangleup;",
+ "value": "U+025B3"
},
{
- entity: "biguplus;",
- value: "U+02A04"
+ "entity": "biguplus;",
+ "value": "U+02A04"
},
{
- entity: "bigvee;",
- value: "U+022C1"
+ "entity": "bigvee;",
+ "value": "U+022C1"
},
{
- entity: "bigwedge;",
- value: "U+022C0"
+ "entity": "bigwedge;",
+ "value": "U+022C0"
},
{
- entity: "bkarow;",
- value: "U+0290D"
+ "entity": "bkarow;",
+ "value": "U+0290D"
},
{
- entity: "blacklozenge;",
- value: "U+029EB"
+ "entity": "blacklozenge;",
+ "value": "U+029EB"
},
{
- entity: "blacksquare;",
- value: "U+025AA"
+ "entity": "blacksquare;",
+ "value": "U+025AA"
},
{
- entity: "blacktriangle;",
- value: "U+025B4"
+ "entity": "blacktriangle;",
+ "value": "U+025B4"
},
{
- entity: "blacktriangledown;",
- value: "U+025BE"
+ "entity": "blacktriangledown;",
+ "value": "U+025BE"
},
{
- entity: "blacktriangleleft;",
- value: "U+025C2"
+ "entity": "blacktriangleleft;",
+ "value": "U+025C2"
},
{
- entity: "blacktriangleright;",
- value: "U+025B8"
+ "entity": "blacktriangleright;",
+ "value": "U+025B8"
},
{
- entity: "blank;",
- value: "U+02423"
+ "entity": "blank;",
+ "value": "U+02423"
},
{
- entity: "blk12;",
- value: "U+02592"
+ "entity": "blk12;",
+ "value": "U+02592"
},
{
- entity: "blk14;",
- value: "U+02591"
+ "entity": "blk14;",
+ "value": "U+02591"
},
{
- entity: "blk34;",
- value: "U+02593"
+ "entity": "blk34;",
+ "value": "U+02593"
},
{
- entity: "block;",
- value: "U+02588"
+ "entity": "block;",
+ "value": "U+02588"
},
{
- entity: "bnot;",
- value: "U+02310"
+ "entity": "bnot;",
+ "value": "U+02310"
},
{
- entity: "bopf;",
- value: "U+1D553"
+ "entity": "bopf;",
+ "value": "U+1D553"
},
{
- entity: "bot;",
- value: "U+022A5"
+ "entity": "bot;",
+ "value": "U+022A5"
},
{
- entity: "bottom;",
- value: "U+022A5"
+ "entity": "bottom;",
+ "value": "U+022A5"
},
{
- entity: "bowtie;",
- value: "U+022C8"
+ "entity": "bowtie;",
+ "value": "U+022C8"
},
{
- entity: "boxDL;",
- value: "U+02557"
+ "entity": "boxDL;",
+ "value": "U+02557"
},
{
- entity: "boxDR;",
- value: "U+02554"
+ "entity": "boxDR;",
+ "value": "U+02554"
},
{
- entity: "boxDl;",
- value: "U+02556"
+ "entity": "boxDl;",
+ "value": "U+02556"
},
{
- entity: "boxDr;",
- value: "U+02553"
+ "entity": "boxDr;",
+ "value": "U+02553"
},
{
- entity: "boxH;",
- value: "U+02550"
+ "entity": "boxH;",
+ "value": "U+02550"
},
{
- entity: "boxHD;",
- value: "U+02566"
+ "entity": "boxHD;",
+ "value": "U+02566"
},
{
- entity: "boxHU;",
- value: "U+02569"
+ "entity": "boxHU;",
+ "value": "U+02569"
},
{
- entity: "boxHd;",
- value: "U+02564"
+ "entity": "boxHd;",
+ "value": "U+02564"
},
{
- entity: "boxHu;",
- value: "U+02567"
+ "entity": "boxHu;",
+ "value": "U+02567"
},
{
- entity: "boxUL;",
- value: "U+0255D"
+ "entity": "boxUL;",
+ "value": "U+0255D"
},
{
- entity: "boxUR;",
- value: "U+0255A"
+ "entity": "boxUR;",
+ "value": "U+0255A"
},
{
- entity: "boxUl;",
- value: "U+0255C"
+ "entity": "boxUl;",
+ "value": "U+0255C"
},
{
- entity: "boxUr;",
- value: "U+02559"
+ "entity": "boxUr;",
+ "value": "U+02559"
},
{
- entity: "boxV;",
- value: "U+02551"
+ "entity": "boxV;",
+ "value": "U+02551"
},
{
- entity: "boxVH;",
- value: "U+0256C"
+ "entity": "boxVH;",
+ "value": "U+0256C"
},
{
- entity: "boxVL;",
- value: "U+02563"
+ "entity": "boxVL;",
+ "value": "U+02563"
},
{
- entity: "boxVR;",
- value: "U+02560"
+ "entity": "boxVR;",
+ "value": "U+02560"
},
{
- entity: "boxVh;",
- value: "U+0256B"
+ "entity": "boxVh;",
+ "value": "U+0256B"
},
{
- entity: "boxVl;",
- value: "U+02562"
+ "entity": "boxVl;",
+ "value": "U+02562"
},
{
- entity: "boxVr;",
- value: "U+0255F"
+ "entity": "boxVr;",
+ "value": "U+0255F"
},
{
- entity: "boxbox;",
- value: "U+029C9"
+ "entity": "boxbox;",
+ "value": "U+029C9"
},
{
- entity: "boxdL;",
- value: "U+02555"
+ "entity": "boxdL;",
+ "value": "U+02555"
},
{
- entity: "boxdR;",
- value: "U+02552"
+ "entity": "boxdR;",
+ "value": "U+02552"
},
{
- entity: "boxdl;",
- value: "U+02510"
+ "entity": "boxdl;",
+ "value": "U+02510"
},
{
- entity: "boxdr;",
- value: "U+0250C"
+ "entity": "boxdr;",
+ "value": "U+0250C"
},
{
- entity: "boxh;",
- value: "U+02500"
+ "entity": "boxh;",
+ "value": "U+02500"
},
{
- entity: "boxhD;",
- value: "U+02565"
+ "entity": "boxhD;",
+ "value": "U+02565"
},
{
- entity: "boxhU;",
- value: "U+02568"
+ "entity": "boxhU;",
+ "value": "U+02568"
},
{
- entity: "boxhd;",
- value: "U+0252C"
+ "entity": "boxhd;",
+ "value": "U+0252C"
},
{
- entity: "boxhu;",
- value: "U+02534"
+ "entity": "boxhu;",
+ "value": "U+02534"
},
{
- entity: "boxminus;",
- value: "U+0229F"
+ "entity": "boxminus;",
+ "value": "U+0229F"
},
{
- entity: "boxplus;",
- value: "U+0229E"
+ "entity": "boxplus;",
+ "value": "U+0229E"
},
{
- entity: "boxtimes;",
- value: "U+022A0"
+ "entity": "boxtimes;",
+ "value": "U+022A0"
},
{
- entity: "boxuL;",
- value: "U+0255B"
+ "entity": "boxuL;",
+ "value": "U+0255B"
},
{
- entity: "boxuR;",
- value: "U+02558"
+ "entity": "boxuR;",
+ "value": "U+02558"
},
{
- entity: "boxul;",
- value: "U+02518"
+ "entity": "boxul;",
+ "value": "U+02518"
},
{
- entity: "boxur;",
- value: "U+02514"
+ "entity": "boxur;",
+ "value": "U+02514"
},
{
- entity: "boxv;",
- value: "U+02502"
+ "entity": "boxv;",
+ "value": "U+02502"
},
{
- entity: "boxvH;",
- value: "U+0256A"
+ "entity": "boxvH;",
+ "value": "U+0256A"
},
{
- entity: "boxvL;",
- value: "U+02561"
+ "entity": "boxvL;",
+ "value": "U+02561"
},
{
- entity: "boxvR;",
- value: "U+0255E"
+ "entity": "boxvR;",
+ "value": "U+0255E"
},
{
- entity: "boxvh;",
- value: "U+0253C"
+ "entity": "boxvh;",
+ "value": "U+0253C"
},
{
- entity: "boxvl;",
- value: "U+02524"
+ "entity": "boxvl;",
+ "value": "U+02524"
},
{
- entity: "boxvr;",
- value: "U+0251C"
+ "entity": "boxvr;",
+ "value": "U+0251C"
},
{
- entity: "bprime;",
- value: "U+02035"
+ "entity": "bprime;",
+ "value": "U+02035"
},
{
- entity: "breve;",
- value: "U+002D8"
+ "entity": "breve;",
+ "value": "U+002D8"
},
{
- entity: "brvbar;",
- value: "U+000A6"
+ "entity": "brvbar;",
+ "value": "U+000A6"
},
{
- entity: "brvbar",
- value: "U+000A6"
+ "entity": "brvbar",
+ "value": "U+000A6"
},
{
- entity: "bscr;",
- value: "U+1D4B7"
+ "entity": "bscr;",
+ "value": "U+1D4B7"
},
{
- entity: "bsemi;",
- value: "U+0204F"
+ "entity": "bsemi;",
+ "value": "U+0204F"
},
{
- entity: "bsim;",
- value: "U+0223D"
+ "entity": "bsim;",
+ "value": "U+0223D"
},
{
- entity: "bsime;",
- value: "U+022CD"
+ "entity": "bsime;",
+ "value": "U+022CD"
},
{
- entity: "bsol;",
- value: "U+0005C"
+ "entity": "bsol;",
+ "value": "U+0005C"
},
{
- entity: "bsolb;",
- value: "U+029C5"
+ "entity": "bsolb;",
+ "value": "U+029C5"
},
{
- entity: "bsolhsub;",
- value: "U+027C8"
+ "entity": "bsolhsub;",
+ "value": "U+027C8"
},
{
- entity: "bull;",
- value: "U+02022"
+ "entity": "bull;",
+ "value": "U+02022"
},
{
- entity: "bullet;",
- value: "U+02022"
+ "entity": "bullet;",
+ "value": "U+02022"
},
{
- entity: "bump;",
- value: "U+0224E"
+ "entity": "bump;",
+ "value": "U+0224E"
},
{
- entity: "bumpE;",
- value: "U+02AAE"
+ "entity": "bumpE;",
+ "value": "U+02AAE"
},
{
- entity: "bumpe;",
- value: "U+0224F"
+ "entity": "bumpe;",
+ "value": "U+0224F"
},
{
- entity: "bumpeq;",
- value: "U+0224F"
+ "entity": "bumpeq;",
+ "value": "U+0224F"
},
{
- entity: "cacute;",
- value: "U+00107"
+ "entity": "cacute;",
+ "value": "U+00107"
},
{
- entity: "cap;",
- value: "U+02229"
+ "entity": "cap;",
+ "value": "U+02229"
},
{
- entity: "capand;",
- value: "U+02A44"
+ "entity": "capand;",
+ "value": "U+02A44"
},
{
- entity: "capbrcup;",
- value: "U+02A49"
+ "entity": "capbrcup;",
+ "value": "U+02A49"
},
{
- entity: "capcap;",
- value: "U+02A4B"
+ "entity": "capcap;",
+ "value": "U+02A4B"
},
{
- entity: "capcup;",
- value: "U+02A47"
+ "entity": "capcup;",
+ "value": "U+02A47"
},
{
- entity: "capdot;",
- value: "U+02A40"
+ "entity": "capdot;",
+ "value": "U+02A40"
},
{
- entity: "caret;",
- value: "U+02041"
+ "entity": "caret;",
+ "value": "U+02041"
},
{
- entity: "caron;",
- value: "U+002C7"
+ "entity": "caron;",
+ "value": "U+002C7"
},
{
- entity: "ccaps;",
- value: "U+02A4D"
+ "entity": "ccaps;",
+ "value": "U+02A4D"
},
{
- entity: "ccaron;",
- value: "U+0010D"
+ "entity": "ccaron;",
+ "value": "U+0010D"
},
{
- entity: "ccedil;",
- value: "U+000E7"
+ "entity": "ccedil;",
+ "value": "U+000E7"
},
{
- entity: "ccedil",
- value: "U+000E7"
+ "entity": "ccedil",
+ "value": "U+000E7"
},
{
- entity: "ccirc;",
- value: "U+00109"
+ "entity": "ccirc;",
+ "value": "U+00109"
},
{
- entity: "ccups;",
- value: "U+02A4C"
+ "entity": "ccups;",
+ "value": "U+02A4C"
},
{
- entity: "ccupssm;",
- value: "U+02A50"
+ "entity": "ccupssm;",
+ "value": "U+02A50"
},
{
- entity: "cdot;",
- value: "U+0010B"
+ "entity": "cdot;",
+ "value": "U+0010B"
},
{
- entity: "cedil;",
- value: "U+000B8"
+ "entity": "cedil;",
+ "value": "U+000B8"
},
{
- entity: "cedil",
- value: "U+000B8"
+ "entity": "cedil",
+ "value": "U+000B8"
},
{
- entity: "cemptyv;",
- value: "U+029B2"
+ "entity": "cemptyv;",
+ "value": "U+029B2"
},
{
- entity: "cent;",
- value: "U+000A2"
+ "entity": "cent;",
+ "value": "U+000A2"
},
{
- entity: "cent",
- value: "U+000A2"
+ "entity": "cent",
+ "value": "U+000A2"
},
{
- entity: "centerdot;",
- value: "U+000B7"
+ "entity": "centerdot;",
+ "value": "U+000B7"
},
{
- entity: "cfr;",
- value: "U+1D520"
+ "entity": "cfr;",
+ "value": "U+1D520"
},
{
- entity: "chcy;",
- value: "U+00447"
+ "entity": "chcy;",
+ "value": "U+00447"
},
{
- entity: "check;",
- value: "U+02713"
+ "entity": "check;",
+ "value": "U+02713"
},
{
- entity: "checkmark;",
- value: "U+02713"
+ "entity": "checkmark;",
+ "value": "U+02713"
},
{
- entity: "chi;",
- value: "U+003C7"
+ "entity": "chi;",
+ "value": "U+003C7"
},
{
- entity: "cir;",
- value: "U+025CB"
+ "entity": "cir;",
+ "value": "U+025CB"
},
{
- entity: "cirE;",
- value: "U+029C3"
+ "entity": "cirE;",
+ "value": "U+029C3"
},
{
- entity: "circ;",
- value: "U+002C6"
+ "entity": "circ;",
+ "value": "U+002C6"
},
{
- entity: "circeq;",
- value: "U+02257"
+ "entity": "circeq;",
+ "value": "U+02257"
},
{
- entity: "circlearrowleft;",
- value: "U+021BA"
+ "entity": "circlearrowleft;",
+ "value": "U+021BA"
},
{
- entity: "circlearrowright;",
- value: "U+021BB"
+ "entity": "circlearrowright;",
+ "value": "U+021BB"
},
{
- entity: "circledR;",
- value: "U+000AE"
+ "entity": "circledR;",
+ "value": "U+000AE"
},
{
- entity: "circledS;",
- value: "U+024C8"
+ "entity": "circledS;",
+ "value": "U+024C8"
},
{
- entity: "circledast;",
- value: "U+0229B"
+ "entity": "circledast;",
+ "value": "U+0229B"
},
{
- entity: "circledcirc;",
- value: "U+0229A"
+ "entity": "circledcirc;",
+ "value": "U+0229A"
},
{
- entity: "circleddash;",
- value: "U+0229D"
+ "entity": "circleddash;",
+ "value": "U+0229D"
},
{
- entity: "cire;",
- value: "U+02257"
+ "entity": "cire;",
+ "value": "U+02257"
},
{
- entity: "cirfnint;",
- value: "U+02A10"
+ "entity": "cirfnint;",
+ "value": "U+02A10"
},
{
- entity: "cirmid;",
- value: "U+02AEF"
+ "entity": "cirmid;",
+ "value": "U+02AEF"
},
{
- entity: "cirscir;",
- value: "U+029C2"
+ "entity": "cirscir;",
+ "value": "U+029C2"
},
{
- entity: "clubs;",
- value: "U+02663"
+ "entity": "clubs;",
+ "value": "U+02663"
},
{
- entity: "clubsuit;",
- value: "U+02663"
+ "entity": "clubsuit;",
+ "value": "U+02663"
},
{
- entity: "colon;",
- value: "U+0003A"
+ "entity": "colon;",
+ "value": "U+0003A"
},
{
- entity: "colone;",
- value: "U+02254"
+ "entity": "colone;",
+ "value": "U+02254"
},
{
- entity: "coloneq;",
- value: "U+02254"
+ "entity": "coloneq;",
+ "value": "U+02254"
},
{
- entity: "comma;",
- value: "U+0002C"
+ "entity": "comma;",
+ "value": "U+0002C"
},
{
- entity: "commat;",
- value: "U+00040"
+ "entity": "commat;",
+ "value": "U+00040"
},
{
- entity: "comp;",
- value: "U+02201"
+ "entity": "comp;",
+ "value": "U+02201"
},
{
- entity: "compfn;",
- value: "U+02218"
+ "entity": "compfn;",
+ "value": "U+02218"
},
{
- entity: "complement;",
- value: "U+02201"
+ "entity": "complement;",
+ "value": "U+02201"
},
{
- entity: "complexes;",
- value: "U+02102"
+ "entity": "complexes;",
+ "value": "U+02102"
},
{
- entity: "cong;",
- value: "U+02245"
+ "entity": "cong;",
+ "value": "U+02245"
},
{
- entity: "congdot;",
- value: "U+02A6D"
+ "entity": "congdot;",
+ "value": "U+02A6D"
},
{
- entity: "conint;",
- value: "U+0222E"
+ "entity": "conint;",
+ "value": "U+0222E"
},
{
- entity: "copf;",
- value: "U+1D554"
+ "entity": "copf;",
+ "value": "U+1D554"
},
{
- entity: "coprod;",
- value: "U+02210"
+ "entity": "coprod;",
+ "value": "U+02210"
},
{
- entity: "copy;",
- value: "U+000A9"
+ "entity": "copy;",
+ "value": "U+000A9"
},
{
- entity: "copy",
- value: "U+000A9"
+ "entity": "copy",
+ "value": "U+000A9"
},
{
- entity: "copysr;",
- value: "U+02117"
+ "entity": "copysr;",
+ "value": "U+02117"
},
{
- entity: "crarr;",
- value: "U+021B5"
+ "entity": "crarr;",
+ "value": "U+021B5"
},
{
- entity: "cross;",
- value: "U+02717"
+ "entity": "cross;",
+ "value": "U+02717"
},
{
- entity: "cscr;",
- value: "U+1D4B8"
+ "entity": "cscr;",
+ "value": "U+1D4B8"
},
{
- entity: "csub;",
- value: "U+02ACF"
+ "entity": "csub;",
+ "value": "U+02ACF"
},
{
- entity: "csube;",
- value: "U+02AD1"
+ "entity": "csube;",
+ "value": "U+02AD1"
},
{
- entity: "csup;",
- value: "U+02AD0"
+ "entity": "csup;",
+ "value": "U+02AD0"
},
{
- entity: "csupe;",
- value: "U+02AD2"
+ "entity": "csupe;",
+ "value": "U+02AD2"
},
{
- entity: "ctdot;",
- value: "U+022EF"
+ "entity": "ctdot;",
+ "value": "U+022EF"
},
{
- entity: "cudarrl;",
- value: "U+02938"
+ "entity": "cudarrl;",
+ "value": "U+02938"
},
{
- entity: "cudarrr;",
- value: "U+02935"
+ "entity": "cudarrr;",
+ "value": "U+02935"
},
{
- entity: "cuepr;",
- value: "U+022DE"
+ "entity": "cuepr;",
+ "value": "U+022DE"
},
{
- entity: "cuesc;",
- value: "U+022DF"
+ "entity": "cuesc;",
+ "value": "U+022DF"
},
{
- entity: "cularr;",
- value: "U+021B6"
+ "entity": "cularr;",
+ "value": "U+021B6"
},
{
- entity: "cularrp;",
- value: "U+0293D"
+ "entity": "cularrp;",
+ "value": "U+0293D"
},
{
- entity: "cup;",
- value: "U+0222A"
+ "entity": "cup;",
+ "value": "U+0222A"
},
{
- entity: "cupbrcap;",
- value: "U+02A48"
+ "entity": "cupbrcap;",
+ "value": "U+02A48"
},
{
- entity: "cupcap;",
- value: "U+02A46"
+ "entity": "cupcap;",
+ "value": "U+02A46"
},
{
- entity: "cupcup;",
- value: "U+02A4A"
+ "entity": "cupcup;",
+ "value": "U+02A4A"
},
{
- entity: "cupdot;",
- value: "U+0228D"
+ "entity": "cupdot;",
+ "value": "U+0228D"
},
{
- entity: "cupor;",
- value: "U+02A45"
+ "entity": "cupor;",
+ "value": "U+02A45"
},
{
- entity: "curarr;",
- value: "U+021B7"
+ "entity": "curarr;",
+ "value": "U+021B7"
},
{
- entity: "curarrm;",
- value: "U+0293C"
+ "entity": "curarrm;",
+ "value": "U+0293C"
},
{
- entity: "curlyeqprec;",
- value: "U+022DE"
+ "entity": "curlyeqprec;",
+ "value": "U+022DE"
},
{
- entity: "curlyeqsucc;",
- value: "U+022DF"
+ "entity": "curlyeqsucc;",
+ "value": "U+022DF"
},
{
- entity: "curlyvee;",
- value: "U+022CE"
+ "entity": "curlyvee;",
+ "value": "U+022CE"
},
{
- entity: "curlywedge;",
- value: "U+022CF"
+ "entity": "curlywedge;",
+ "value": "U+022CF"
},
{
- entity: "curren;",
- value: "U+000A4"
+ "entity": "curren;",
+ "value": "U+000A4"
},
{
- entity: "curren",
- value: "U+000A4"
+ "entity": "curren",
+ "value": "U+000A4"
},
{
- entity: "curvearrowleft;",
- value: "U+021B6"
+ "entity": "curvearrowleft;",
+ "value": "U+021B6"
},
{
- entity: "curvearrowright;",
- value: "U+021B7"
+ "entity": "curvearrowright;",
+ "value": "U+021B7"
},
{
- entity: "cuvee;",
- value: "U+022CE"
+ "entity": "cuvee;",
+ "value": "U+022CE"
},
{
- entity: "cuwed;",
- value: "U+022CF"
+ "entity": "cuwed;",
+ "value": "U+022CF"
},
{
- entity: "cwconint;",
- value: "U+02232"
+ "entity": "cwconint;",
+ "value": "U+02232"
},
{
- entity: "cwint;",
- value: "U+02231"
+ "entity": "cwint;",
+ "value": "U+02231"
},
{
- entity: "cylcty;",
- value: "U+0232D"
+ "entity": "cylcty;",
+ "value": "U+0232D"
},
{
- entity: "dArr;",
- value: "U+021D3"
+ "entity": "dArr;",
+ "value": "U+021D3"
},
{
- entity: "dHar;",
- value: "U+02965"
+ "entity": "dHar;",
+ "value": "U+02965"
},
{
- entity: "dagger;",
- value: "U+02020"
+ "entity": "dagger;",
+ "value": "U+02020"
},
{
- entity: "daleth;",
- value: "U+02138"
+ "entity": "daleth;",
+ "value": "U+02138"
},
{
- entity: "darr;",
- value: "U+02193"
+ "entity": "darr;",
+ "value": "U+02193"
},
{
- entity: "dash;",
- value: "U+02010"
+ "entity": "dash;",
+ "value": "U+02010"
},
{
- entity: "dashv;",
- value: "U+022A3"
+ "entity": "dashv;",
+ "value": "U+022A3"
},
{
- entity: "dbkarow;",
- value: "U+0290F"
+ "entity": "dbkarow;",
+ "value": "U+0290F"
},
{
- entity: "dblac;",
- value: "U+002DD"
+ "entity": "dblac;",
+ "value": "U+002DD"
},
{
- entity: "dcaron;",
- value: "U+0010F"
+ "entity": "dcaron;",
+ "value": "U+0010F"
},
{
- entity: "dcy;",
- value: "U+00434"
+ "entity": "dcy;",
+ "value": "U+00434"
},
{
- entity: "dd;",
- value: "U+02146"
+ "entity": "dd;",
+ "value": "U+02146"
},
{
- entity: "ddagger;",
- value: "U+02021"
+ "entity": "ddagger;",
+ "value": "U+02021"
},
{
- entity: "ddarr;",
- value: "U+021CA"
+ "entity": "ddarr;",
+ "value": "U+021CA"
},
{
- entity: "ddotseq;",
- value: "U+02A77"
+ "entity": "ddotseq;",
+ "value": "U+02A77"
},
{
- entity: "deg;",
- value: "U+000B0"
+ "entity": "deg;",
+ "value": "U+000B0"
},
{
- entity: "deg",
- value: "U+000B0"
+ "entity": "deg",
+ "value": "U+000B0"
},
{
- entity: "delta;",
- value: "U+003B4"
+ "entity": "delta;",
+ "value": "U+003B4"
},
{
- entity: "demptyv;",
- value: "U+029B1"
+ "entity": "demptyv;",
+ "value": "U+029B1"
},
{
- entity: "dfisht;",
- value: "U+0297F"
+ "entity": "dfisht;",
+ "value": "U+0297F"
},
{
- entity: "dfr;",
- value: "U+1D521"
+ "entity": "dfr;",
+ "value": "U+1D521"
},
{
- entity: "dharl;",
- value: "U+021C3"
+ "entity": "dharl;",
+ "value": "U+021C3"
},
{
- entity: "dharr;",
- value: "U+021C2"
+ "entity": "dharr;",
+ "value": "U+021C2"
},
{
- entity: "diam;",
- value: "U+022C4"
+ "entity": "diam;",
+ "value": "U+022C4"
},
{
- entity: "diamond;",
- value: "U+022C4"
+ "entity": "diamond;",
+ "value": "U+022C4"
},
{
- entity: "diamondsuit;",
- value: "U+02666"
+ "entity": "diamondsuit;",
+ "value": "U+02666"
},
{
- entity: "diams;",
- value: "U+02666"
+ "entity": "diams;",
+ "value": "U+02666"
},
{
- entity: "die;",
- value: "U+000A8"
+ "entity": "die;",
+ "value": "U+000A8"
},
{
- entity: "digamma;",
- value: "U+003DD"
+ "entity": "digamma;",
+ "value": "U+003DD"
},
{
- entity: "disin;",
- value: "U+022F2"
+ "entity": "disin;",
+ "value": "U+022F2"
},
{
- entity: "div;",
- value: "U+000F7"
+ "entity": "div;",
+ "value": "U+000F7"
},
{
- entity: "divide;",
- value: "U+000F7"
+ "entity": "divide;",
+ "value": "U+000F7"
},
{
- entity: "divide",
- value: "U+000F7"
+ "entity": "divide",
+ "value": "U+000F7"
},
{
- entity: "divideontimes;",
- value: "U+022C7"
+ "entity": "divideontimes;",
+ "value": "U+022C7"
},
{
- entity: "divonx;",
- value: "U+022C7"
+ "entity": "divonx;",
+ "value": "U+022C7"
},
{
- entity: "djcy;",
- value: "U+00452"
+ "entity": "djcy;",
+ "value": "U+00452"
},
{
- entity: "dlcorn;",
- value: "U+0231E"
+ "entity": "dlcorn;",
+ "value": "U+0231E"
},
{
- entity: "dlcrop;",
- value: "U+0230D"
+ "entity": "dlcrop;",
+ "value": "U+0230D"
},
{
- entity: "dollar;",
- value: "U+00024"
+ "entity": "dollar;",
+ "value": "U+00024"
},
{
- entity: "dopf;",
- value: "U+1D555"
+ "entity": "dopf;",
+ "value": "U+1D555"
},
{
- entity: "dot;",
- value: "U+002D9"
+ "entity": "dot;",
+ "value": "U+002D9"
},
{
- entity: "doteq;",
- value: "U+02250"
+ "entity": "doteq;",
+ "value": "U+02250"
},
{
- entity: "doteqdot;",
- value: "U+02251"
+ "entity": "doteqdot;",
+ "value": "U+02251"
},
{
- entity: "dotminus;",
- value: "U+02238"
+ "entity": "dotminus;",
+ "value": "U+02238"
},
{
- entity: "dotplus;",
- value: "U+02214"
+ "entity": "dotplus;",
+ "value": "U+02214"
},
{
- entity: "dotsquare;",
- value: "U+022A1"
+ "entity": "dotsquare;",
+ "value": "U+022A1"
},
{
- entity: "doublebarwedge;",
- value: "U+02306"
+ "entity": "doublebarwedge;",
+ "value": "U+02306"
},
{
- entity: "downarrow;",
- value: "U+02193"
+ "entity": "downarrow;",
+ "value": "U+02193"
},
{
- entity: "downdownarrows;",
- value: "U+021CA"
+ "entity": "downdownarrows;",
+ "value": "U+021CA"
},
{
- entity: "downharpoonleft;",
- value: "U+021C3"
+ "entity": "downharpoonleft;",
+ "value": "U+021C3"
},
{
- entity: "downharpoonright;",
- value: "U+021C2"
+ "entity": "downharpoonright;",
+ "value": "U+021C2"
},
{
- entity: "drbkarow;",
- value: "U+02910"
+ "entity": "drbkarow;",
+ "value": "U+02910"
},
{
- entity: "drcorn;",
- value: "U+0231F"
+ "entity": "drcorn;",
+ "value": "U+0231F"
},
{
- entity: "drcrop;",
- value: "U+0230C"
+ "entity": "drcrop;",
+ "value": "U+0230C"
},
{
- entity: "dscr;",
- value: "U+1D4B9"
+ "entity": "dscr;",
+ "value": "U+1D4B9"
},
{
- entity: "dscy;",
- value: "U+00455"
+ "entity": "dscy;",
+ "value": "U+00455"
},
{
- entity: "dsol;",
- value: "U+029F6"
+ "entity": "dsol;",
+ "value": "U+029F6"
},
{
- entity: "dstrok;",
- value: "U+00111"
+ "entity": "dstrok;",
+ "value": "U+00111"
},
{
- entity: "dtdot;",
- value: "U+022F1"
+ "entity": "dtdot;",
+ "value": "U+022F1"
},
{
- entity: "dtri;",
- value: "U+025BF"
+ "entity": "dtri;",
+ "value": "U+025BF"
},
{
- entity: "dtrif;",
- value: "U+025BE"
+ "entity": "dtrif;",
+ "value": "U+025BE"
},
{
- entity: "duarr;",
- value: "U+021F5"
+ "entity": "duarr;",
+ "value": "U+021F5"
},
{
- entity: "duhar;",
- value: "U+0296F"
+ "entity": "duhar;",
+ "value": "U+0296F"
},
{
- entity: "dwangle;",
- value: "U+029A6"
+ "entity": "dwangle;",
+ "value": "U+029A6"
},
{
- entity: "dzcy;",
- value: "U+0045F"
+ "entity": "dzcy;",
+ "value": "U+0045F"
},
{
- entity: "dzigrarr;",
- value: "U+027FF"
+ "entity": "dzigrarr;",
+ "value": "U+027FF"
},
{
- entity: "eDDot;",
- value: "U+02A77"
+ "entity": "eDDot;",
+ "value": "U+02A77"
},
{
- entity: "eDot;",
- value: "U+02251"
+ "entity": "eDot;",
+ "value": "U+02251"
},
{
- entity: "eacute;",
- value: "U+000E9"
+ "entity": "eacute;",
+ "value": "U+000E9"
},
{
- entity: "eacute",
- value: "U+000E9"
+ "entity": "eacute",
+ "value": "U+000E9"
},
{
- entity: "easter;",
- value: "U+02A6E"
+ "entity": "easter;",
+ "value": "U+02A6E"
},
{
- entity: "ecaron;",
- value: "U+0011B"
+ "entity": "ecaron;",
+ "value": "U+0011B"
},
{
- entity: "ecir;",
- value: "U+02256"
+ "entity": "ecir;",
+ "value": "U+02256"
},
{
- entity: "ecirc;",
- value: "U+000EA"
+ "entity": "ecirc;",
+ "value": "U+000EA"
},
{
- entity: "ecirc",
- value: "U+000EA"
+ "entity": "ecirc",
+ "value": "U+000EA"
},
{
- entity: "ecolon;",
- value: "U+02255"
+ "entity": "ecolon;",
+ "value": "U+02255"
},
{
- entity: "ecy;",
- value: "U+0044D"
+ "entity": "ecy;",
+ "value": "U+0044D"
},
{
- entity: "edot;",
- value: "U+00117"
+ "entity": "edot;",
+ "value": "U+00117"
},
{
- entity: "ee;",
- value: "U+02147"
+ "entity": "ee;",
+ "value": "U+02147"
},
{
- entity: "efDot;",
- value: "U+02252"
+ "entity": "efDot;",
+ "value": "U+02252"
},
{
- entity: "efr;",
- value: "U+1D522"
+ "entity": "efr;",
+ "value": "U+1D522"
},
{
- entity: "eg;",
- value: "U+02A9A"
+ "entity": "eg;",
+ "value": "U+02A9A"
},
{
- entity: "egrave;",
- value: "U+000E8"
+ "entity": "egrave;",
+ "value": "U+000E8"
},
{
- entity: "egrave",
- value: "U+000E8"
+ "entity": "egrave",
+ "value": "U+000E8"
},
{
- entity: "egs;",
- value: "U+02A96"
+ "entity": "egs;",
+ "value": "U+02A96"
},
{
- entity: "egsdot;",
- value: "U+02A98"
+ "entity": "egsdot;",
+ "value": "U+02A98"
},
{
- entity: "el;",
- value: "U+02A99"
+ "entity": "el;",
+ "value": "U+02A99"
},
{
- entity: "elinters;",
- value: "U+023E7"
+ "entity": "elinters;",
+ "value": "U+023E7"
},
{
- entity: "ell;",
- value: "U+02113"
+ "entity": "ell;",
+ "value": "U+02113"
},
{
- entity: "els;",
- value: "U+02A95"
+ "entity": "els;",
+ "value": "U+02A95"
},
{
- entity: "elsdot;",
- value: "U+02A97"
+ "entity": "elsdot;",
+ "value": "U+02A97"
},
{
- entity: "emacr;",
- value: "U+00113"
+ "entity": "emacr;",
+ "value": "U+00113"
},
{
- entity: "empty;",
- value: "U+02205"
+ "entity": "empty;",
+ "value": "U+02205"
},
{
- entity: "emptyset;",
- value: "U+02205"
+ "entity": "emptyset;",
+ "value": "U+02205"
},
{
- entity: "emptyv;",
- value: "U+02205"
+ "entity": "emptyv;",
+ "value": "U+02205"
},
{
- entity: "emsp13;",
- value: "U+02004"
+ "entity": "emsp13;",
+ "value": "U+02004"
},
{
- entity: "emsp14;",
- value: "U+02005"
+ "entity": "emsp14;",
+ "value": "U+02005"
},
{
- entity: "emsp;",
- value: "U+02003"
+ "entity": "emsp;",
+ "value": "U+02003"
},
{
- entity: "eng;",
- value: "U+0014B"
+ "entity": "eng;",
+ "value": "U+0014B"
},
{
- entity: "ensp;",
- value: "U+02002"
+ "entity": "ensp;",
+ "value": "U+02002"
},
{
- entity: "eogon;",
- value: "U+00119"
+ "entity": "eogon;",
+ "value": "U+00119"
},
{
- entity: "eopf;",
- value: "U+1D556"
+ "entity": "eopf;",
+ "value": "U+1D556"
},
{
- entity: "epar;",
- value: "U+022D5"
+ "entity": "epar;",
+ "value": "U+022D5"
},
{
- entity: "eparsl;",
- value: "U+029E3"
+ "entity": "eparsl;",
+ "value": "U+029E3"
},
{
- entity: "eplus;",
- value: "U+02A71"
+ "entity": "eplus;",
+ "value": "U+02A71"
},
{
- entity: "epsi;",
- value: "U+003B5"
+ "entity": "epsi;",
+ "value": "U+003B5"
},
{
- entity: "epsilon;",
- value: "U+003B5"
+ "entity": "epsilon;",
+ "value": "U+003B5"
},
{
- entity: "epsiv;",
- value: "U+003F5"
+ "entity": "epsiv;",
+ "value": "U+003F5"
},
{
- entity: "eqcirc;",
- value: "U+02256"
+ "entity": "eqcirc;",
+ "value": "U+02256"
},
{
- entity: "eqcolon;",
- value: "U+02255"
+ "entity": "eqcolon;",
+ "value": "U+02255"
},
{
- entity: "eqsim;",
- value: "U+02242"
+ "entity": "eqsim;",
+ "value": "U+02242"
},
{
- entity: "eqslantgtr;",
- value: "U+02A96"
+ "entity": "eqslantgtr;",
+ "value": "U+02A96"
},
{
- entity: "eqslantless;",
- value: "U+02A95"
+ "entity": "eqslantless;",
+ "value": "U+02A95"
},
{
- entity: "equals;",
- value: "U+0003D"
+ "entity": "equals;",
+ "value": "U+0003D"
},
{
- entity: "equest;",
- value: "U+0225F"
+ "entity": "equest;",
+ "value": "U+0225F"
},
{
- entity: "equiv;",
- value: "U+02261"
+ "entity": "equiv;",
+ "value": "U+02261"
},
{
- entity: "equivDD;",
- value: "U+02A78"
+ "entity": "equivDD;",
+ "value": "U+02A78"
},
{
- entity: "eqvparsl;",
- value: "U+029E5"
+ "entity": "eqvparsl;",
+ "value": "U+029E5"
},
{
- entity: "erDot;",
- value: "U+02253"
+ "entity": "erDot;",
+ "value": "U+02253"
},
{
- entity: "erarr;",
- value: "U+02971"
+ "entity": "erarr;",
+ "value": "U+02971"
},
{
- entity: "escr;",
- value: "U+0212F"
+ "entity": "escr;",
+ "value": "U+0212F"
},
{
- entity: "esdot;",
- value: "U+02250"
+ "entity": "esdot;",
+ "value": "U+02250"
},
{
- entity: "esim;",
- value: "U+02242"
+ "entity": "esim;",
+ "value": "U+02242"
},
{
- entity: "eta;",
- value: "U+003B7"
+ "entity": "eta;",
+ "value": "U+003B7"
},
{
- entity: "eth;",
- value: "U+000F0"
+ "entity": "eth;",
+ "value": "U+000F0"
},
{
- entity: "eth",
- value: "U+000F0"
+ "entity": "eth",
+ "value": "U+000F0"
},
{
- entity: "euml;",
- value: "U+000EB"
+ "entity": "euml;",
+ "value": "U+000EB"
},
{
- entity: "euml",
- value: "U+000EB"
+ "entity": "euml",
+ "value": "U+000EB"
},
{
- entity: "euro;",
- value: "U+020AC"
+ "entity": "euro;",
+ "value": "U+020AC"
},
{
- entity: "excl;",
- value: "U+00021"
+ "entity": "excl;",
+ "value": "U+00021"
},
{
- entity: "exist;",
- value: "U+02203"
+ "entity": "exist;",
+ "value": "U+02203"
},
{
- entity: "expectation;",
- value: "U+02130"
+ "entity": "expectation;",
+ "value": "U+02130"
},
{
- entity: "exponentiale;",
- value: "U+02147"
+ "entity": "exponentiale;",
+ "value": "U+02147"
},
{
- entity: "fallingdotseq;",
- value: "U+02252"
+ "entity": "fallingdotseq;",
+ "value": "U+02252"
},
{
- entity: "fcy;",
- value: "U+00444"
+ "entity": "fcy;",
+ "value": "U+00444"
},
{
- entity: "female;",
- value: "U+02640"
+ "entity": "female;",
+ "value": "U+02640"
},
{
- entity: "ffilig;",
- value: "U+0FB03"
+ "entity": "ffilig;",
+ "value": "U+0FB03"
},
{
- entity: "fflig;",
- value: "U+0FB00"
+ "entity": "fflig;",
+ "value": "U+0FB00"
},
{
- entity: "ffllig;",
- value: "U+0FB04"
+ "entity": "ffllig;",
+ "value": "U+0FB04"
},
{
- entity: "ffr;",
- value: "U+1D523"
+ "entity": "ffr;",
+ "value": "U+1D523"
},
{
- entity: "filig;",
- value: "U+0FB01"
+ "entity": "filig;",
+ "value": "U+0FB01"
},
{
- entity: "flat;",
- value: "U+0266D"
+ "entity": "flat;",
+ "value": "U+0266D"
},
{
- entity: "fllig;",
- value: "U+0FB02"
+ "entity": "fllig;",
+ "value": "U+0FB02"
},
{
- entity: "fltns;",
- value: "U+025B1"
+ "entity": "fltns;",
+ "value": "U+025B1"
},
{
- entity: "fnof;",
- value: "U+00192"
+ "entity": "fnof;",
+ "value": "U+00192"
},
{
- entity: "fopf;",
- value: "U+1D557"
+ "entity": "fopf;",
+ "value": "U+1D557"
},
{
- entity: "forall;",
- value: "U+02200"
+ "entity": "forall;",
+ "value": "U+02200"
},
{
- entity: "fork;",
- value: "U+022D4"
+ "entity": "fork;",
+ "value": "U+022D4"
},
{
- entity: "forkv;",
- value: "U+02AD9"
+ "entity": "forkv;",
+ "value": "U+02AD9"
},
{
- entity: "fpartint;",
- value: "U+02A0D"
+ "entity": "fpartint;",
+ "value": "U+02A0D"
},
{
- entity: "frac12;",
- value: "U+000BD"
+ "entity": "frac12;",
+ "value": "U+000BD"
},
{
- entity: "frac12",
- value: "U+000BD"
+ "entity": "frac12",
+ "value": "U+000BD"
},
{
- entity: "frac13;",
- value: "U+02153"
+ "entity": "frac13;",
+ "value": "U+02153"
},
{
- entity: "frac14;",
- value: "U+000BC"
+ "entity": "frac14;",
+ "value": "U+000BC"
},
{
- entity: "frac14",
- value: "U+000BC"
+ "entity": "frac14",
+ "value": "U+000BC"
},
{
- entity: "frac15;",
- value: "U+02155"
+ "entity": "frac15;",
+ "value": "U+02155"
},
{
- entity: "frac16;",
- value: "U+02159"
+ "entity": "frac16;",
+ "value": "U+02159"
},
{
- entity: "frac18;",
- value: "U+0215B"
+ "entity": "frac18;",
+ "value": "U+0215B"
},
{
- entity: "frac23;",
- value: "U+02154"
+ "entity": "frac23;",
+ "value": "U+02154"
},
{
- entity: "frac25;",
- value: "U+02156"
+ "entity": "frac25;",
+ "value": "U+02156"
},
{
- entity: "frac34;",
- value: "U+000BE"
+ "entity": "frac34;",
+ "value": "U+000BE"
},
{
- entity: "frac34",
- value: "U+000BE"
+ "entity": "frac34",
+ "value": "U+000BE"
},
{
- entity: "frac35;",
- value: "U+02157"
+ "entity": "frac35;",
+ "value": "U+02157"
},
{
- entity: "frac38;",
- value: "U+0215C"
+ "entity": "frac38;",
+ "value": "U+0215C"
},
{
- entity: "frac45;",
- value: "U+02158"
+ "entity": "frac45;",
+ "value": "U+02158"
},
{
- entity: "frac56;",
- value: "U+0215A"
+ "entity": "frac56;",
+ "value": "U+0215A"
},
{
- entity: "frac58;",
- value: "U+0215D"
+ "entity": "frac58;",
+ "value": "U+0215D"
},
{
- entity: "frac78;",
- value: "U+0215E"
+ "entity": "frac78;",
+ "value": "U+0215E"
},
{
- entity: "frasl;",
- value: "U+02044"
+ "entity": "frasl;",
+ "value": "U+02044"
},
{
- entity: "frown;",
- value: "U+02322"
+ "entity": "frown;",
+ "value": "U+02322"
},
{
- entity: "fscr;",
- value: "U+1D4BB"
+ "entity": "fscr;",
+ "value": "U+1D4BB"
},
{
- entity: "gE;",
- value: "U+02267"
+ "entity": "gE;",
+ "value": "U+02267"
},
{
- entity: "gEl;",
- value: "U+02A8C"
+ "entity": "gEl;",
+ "value": "U+02A8C"
},
{
- entity: "gacute;",
- value: "U+001F5"
+ "entity": "gacute;",
+ "value": "U+001F5"
},
{
- entity: "gamma;",
- value: "U+003B3"
+ "entity": "gamma;",
+ "value": "U+003B3"
},
{
- entity: "gammad;",
- value: "U+003DD"
+ "entity": "gammad;",
+ "value": "U+003DD"
},
{
- entity: "gap;",
- value: "U+02A86"
+ "entity": "gap;",
+ "value": "U+02A86"
},
{
- entity: "gbreve;",
- value: "U+0011F"
+ "entity": "gbreve;",
+ "value": "U+0011F"
},
{
- entity: "gcirc;",
- value: "U+0011D"
+ "entity": "gcirc;",
+ "value": "U+0011D"
},
{
- entity: "gcy;",
- value: "U+00433"
+ "entity": "gcy;",
+ "value": "U+00433"
},
{
- entity: "gdot;",
- value: "U+00121"
+ "entity": "gdot;",
+ "value": "U+00121"
},
{
- entity: "ge;",
- value: "U+02265"
+ "entity": "ge;",
+ "value": "U+02265"
},
{
- entity: "gel;",
- value: "U+022DB"
+ "entity": "gel;",
+ "value": "U+022DB"
},
{
- entity: "geq;",
- value: "U+02265"
+ "entity": "geq;",
+ "value": "U+02265"
},
{
- entity: "geqq;",
- value: "U+02267"
+ "entity": "geqq;",
+ "value": "U+02267"
},
{
- entity: "geqslant;",
- value: "U+02A7E"
+ "entity": "geqslant;",
+ "value": "U+02A7E"
},
{
- entity: "ges;",
- value: "U+02A7E"
+ "entity": "ges;",
+ "value": "U+02A7E"
},
{
- entity: "gescc;",
- value: "U+02AA9"
+ "entity": "gescc;",
+ "value": "U+02AA9"
},
{
- entity: "gesdot;",
- value: "U+02A80"
+ "entity": "gesdot;",
+ "value": "U+02A80"
},
{
- entity: "gesdoto;",
- value: "U+02A82"
+ "entity": "gesdoto;",
+ "value": "U+02A82"
},
{
- entity: "gesdotol;",
- value: "U+02A84"
+ "entity": "gesdotol;",
+ "value": "U+02A84"
},
{
- entity: "gesles;",
- value: "U+02A94"
+ "entity": "gesles;",
+ "value": "U+02A94"
},
{
- entity: "gfr;",
- value: "U+1D524"
+ "entity": "gfr;",
+ "value": "U+1D524"
},
{
- entity: "gg;",
- value: "U+0226B"
+ "entity": "gg;",
+ "value": "U+0226B"
},
{
- entity: "ggg;",
- value: "U+022D9"
+ "entity": "ggg;",
+ "value": "U+022D9"
},
{
- entity: "gimel;",
- value: "U+02137"
+ "entity": "gimel;",
+ "value": "U+02137"
},
{
- entity: "gjcy;",
- value: "U+00453"
+ "entity": "gjcy;",
+ "value": "U+00453"
},
{
- entity: "gl;",
- value: "U+02277"
+ "entity": "gl;",
+ "value": "U+02277"
},
{
- entity: "glE;",
- value: "U+02A92"
+ "entity": "glE;",
+ "value": "U+02A92"
},
{
- entity: "gla;",
- value: "U+02AA5"
+ "entity": "gla;",
+ "value": "U+02AA5"
},
{
- entity: "glj;",
- value: "U+02AA4"
+ "entity": "glj;",
+ "value": "U+02AA4"
},
{
- entity: "gnE;",
- value: "U+02269"
+ "entity": "gnE;",
+ "value": "U+02269"
},
{
- entity: "gnap;",
- value: "U+02A8A"
+ "entity": "gnap;",
+ "value": "U+02A8A"
},
{
- entity: "gnapprox;",
- value: "U+02A8A"
+ "entity": "gnapprox;",
+ "value": "U+02A8A"
},
{
- entity: "gne;",
- value: "U+02A88"
+ "entity": "gne;",
+ "value": "U+02A88"
},
{
- entity: "gneq;",
- value: "U+02A88"
+ "entity": "gneq;",
+ "value": "U+02A88"
},
{
- entity: "gneqq;",
- value: "U+02269"
+ "entity": "gneqq;",
+ "value": "U+02269"
},
{
- entity: "gnsim;",
- value: "U+022E7"
+ "entity": "gnsim;",
+ "value": "U+022E7"
},
{
- entity: "gopf;",
- value: "U+1D558"
+ "entity": "gopf;",
+ "value": "U+1D558"
},
{
- entity: "grave;",
- value: "U+00060"
+ "entity": "grave;",
+ "value": "U+00060"
},
{
- entity: "gscr;",
- value: "U+0210A"
+ "entity": "gscr;",
+ "value": "U+0210A"
},
{
- entity: "gsim;",
- value: "U+02273"
+ "entity": "gsim;",
+ "value": "U+02273"
},
{
- entity: "gsime;",
- value: "U+02A8E"
+ "entity": "gsime;",
+ "value": "U+02A8E"
},
{
- entity: "gsiml;",
- value: "U+02A90"
+ "entity": "gsiml;",
+ "value": "U+02A90"
},
{
- entity: "gt;",
- value: "U+0003E"
+ "entity": "gt;",
+ "value": "U+0003E"
},
{
- entity: "gt",
- value: "U+0003E"
+ "entity": "gt",
+ "value": "U+0003E"
},
{
- entity: "gtcc;",
- value: "U+02AA7"
+ "entity": "gtcc;",
+ "value": "U+02AA7"
},
{
- entity: "gtcir;",
- value: "U+02A7A"
+ "entity": "gtcir;",
+ "value": "U+02A7A"
},
{
- entity: "gtdot;",
- value: "U+022D7"
+ "entity": "gtdot;",
+ "value": "U+022D7"
},
{
- entity: "gtlPar;",
- value: "U+02995"
+ "entity": "gtlPar;",
+ "value": "U+02995"
},
{
- entity: "gtquest;",
- value: "U+02A7C"
+ "entity": "gtquest;",
+ "value": "U+02A7C"
},
{
- entity: "gtrapprox;",
- value: "U+02A86"
+ "entity": "gtrapprox;",
+ "value": "U+02A86"
},
{
- entity: "gtrarr;",
- value: "U+02978"
+ "entity": "gtrarr;",
+ "value": "U+02978"
},
{
- entity: "gtrdot;",
- value: "U+022D7"
+ "entity": "gtrdot;",
+ "value": "U+022D7"
},
{
- entity: "gtreqless;",
- value: "U+022DB"
+ "entity": "gtreqless;",
+ "value": "U+022DB"
},
{
- entity: "gtreqqless;",
- value: "U+02A8C"
+ "entity": "gtreqqless;",
+ "value": "U+02A8C"
},
{
- entity: "gtrless;",
- value: "U+02277"
+ "entity": "gtrless;",
+ "value": "U+02277"
},
{
- entity: "gtrsim;",
- value: "U+02273"
+ "entity": "gtrsim;",
+ "value": "U+02273"
},
{
- entity: "hArr;",
- value: "U+021D4"
+ "entity": "hArr;",
+ "value": "U+021D4"
},
{
- entity: "hairsp;",
- value: "U+0200A"
+ "entity": "hairsp;",
+ "value": "U+0200A"
},
{
- entity: "half;",
- value: "U+000BD"
+ "entity": "half;",
+ "value": "U+000BD"
},
{
- entity: "hamilt;",
- value: "U+0210B"
+ "entity": "hamilt;",
+ "value": "U+0210B"
},
{
- entity: "hardcy;",
- value: "U+0044A"
+ "entity": "hardcy;",
+ "value": "U+0044A"
},
{
- entity: "harr;",
- value: "U+02194"
+ "entity": "harr;",
+ "value": "U+02194"
},
{
- entity: "harrcir;",
- value: "U+02948"
+ "entity": "harrcir;",
+ "value": "U+02948"
},
{
- entity: "harrw;",
- value: "U+021AD"
+ "entity": "harrw;",
+ "value": "U+021AD"
},
{
- entity: "hbar;",
- value: "U+0210F"
+ "entity": "hbar;",
+ "value": "U+0210F"
},
{
- entity: "hcirc;",
- value: "U+00125"
+ "entity": "hcirc;",
+ "value": "U+00125"
},
{
- entity: "hearts;",
- value: "U+02665"
+ "entity": "hearts;",
+ "value": "U+02665"
},
{
- entity: "heartsuit;",
- value: "U+02665"
+ "entity": "heartsuit;",
+ "value": "U+02665"
},
{
- entity: "hellip;",
- value: "U+02026"
+ "entity": "hellip;",
+ "value": "U+02026"
},
{
- entity: "hercon;",
- value: "U+022B9"
+ "entity": "hercon;",
+ "value": "U+022B9"
},
{
- entity: "hfr;",
- value: "U+1D525"
+ "entity": "hfr;",
+ "value": "U+1D525"
},
{
- entity: "hksearow;",
- value: "U+02925"
+ "entity": "hksearow;",
+ "value": "U+02925"
},
{
- entity: "hkswarow;",
- value: "U+02926"
+ "entity": "hkswarow;",
+ "value": "U+02926"
},
{
- entity: "hoarr;",
- value: "U+021FF"
+ "entity": "hoarr;",
+ "value": "U+021FF"
},
{
- entity: "homtht;",
- value: "U+0223B"
+ "entity": "homtht;",
+ "value": "U+0223B"
},
{
- entity: "hookleftarrow;",
- value: "U+021A9"
+ "entity": "hookleftarrow;",
+ "value": "U+021A9"
},
{
- entity: "hookrightarrow;",
- value: "U+021AA"
+ "entity": "hookrightarrow;",
+ "value": "U+021AA"
},
{
- entity: "hopf;",
- value: "U+1D559"
+ "entity": "hopf;",
+ "value": "U+1D559"
},
{
- entity: "horbar;",
- value: "U+02015"
+ "entity": "horbar;",
+ "value": "U+02015"
},
{
- entity: "hscr;",
- value: "U+1D4BD"
+ "entity": "hscr;",
+ "value": "U+1D4BD"
},
{
- entity: "hslash;",
- value: "U+0210F"
+ "entity": "hslash;",
+ "value": "U+0210F"
},
{
- entity: "hstrok;",
- value: "U+00127"
+ "entity": "hstrok;",
+ "value": "U+00127"
},
{
- entity: "hybull;",
- value: "U+02043"
+ "entity": "hybull;",
+ "value": "U+02043"
},
{
- entity: "hyphen;",
- value: "U+02010"
+ "entity": "hyphen;",
+ "value": "U+02010"
},
{
- entity: "iacute;",
- value: "U+000ED"
+ "entity": "iacute;",
+ "value": "U+000ED"
},
{
- entity: "iacute",
- value: "U+000ED"
+ "entity": "iacute",
+ "value": "U+000ED"
},
{
- entity: "ic;",
- value: "U+02063"
+ "entity": "ic;",
+ "value": "U+02063"
},
{
- entity: "icirc;",
- value: "U+000EE"
+ "entity": "icirc;",
+ "value": "U+000EE"
},
{
- entity: "icirc",
- value: "U+000EE"
+ "entity": "icirc",
+ "value": "U+000EE"
},
{
- entity: "icy;",
- value: "U+00438"
+ "entity": "icy;",
+ "value": "U+00438"
},
{
- entity: "iecy;",
- value: "U+00435"
+ "entity": "iecy;",
+ "value": "U+00435"
},
{
- entity: "iexcl;",
- value: "U+000A1"
+ "entity": "iexcl;",
+ "value": "U+000A1"
},
{
- entity: "iexcl",
- value: "U+000A1"
+ "entity": "iexcl",
+ "value": "U+000A1"
},
{
- entity: "iff;",
- value: "U+021D4"
+ "entity": "iff;",
+ "value": "U+021D4"
},
{
- entity: "ifr;",
- value: "U+1D526"
+ "entity": "ifr;",
+ "value": "U+1D526"
},
{
- entity: "igrave;",
- value: "U+000EC"
+ "entity": "igrave;",
+ "value": "U+000EC"
},
{
- entity: "igrave",
- value: "U+000EC"
+ "entity": "igrave",
+ "value": "U+000EC"
},
{
- entity: "ii;",
- value: "U+02148"
+ "entity": "ii;",
+ "value": "U+02148"
},
{
- entity: "iiiint;",
- value: "U+02A0C"
+ "entity": "iiiint;",
+ "value": "U+02A0C"
},
{
- entity: "iiint;",
- value: "U+0222D"
+ "entity": "iiint;",
+ "value": "U+0222D"
},
{
- entity: "iinfin;",
- value: "U+029DC"
+ "entity": "iinfin;",
+ "value": "U+029DC"
},
{
- entity: "iiota;",
- value: "U+02129"
+ "entity": "iiota;",
+ "value": "U+02129"
},
{
- entity: "ijlig;",
- value: "U+00133"
+ "entity": "ijlig;",
+ "value": "U+00133"
},
{
- entity: "imacr;",
- value: "U+0012B"
+ "entity": "imacr;",
+ "value": "U+0012B"
},
{
- entity: "image;",
- value: "U+02111"
+ "entity": "image;",
+ "value": "U+02111"
},
{
- entity: "imagline;",
- value: "U+02110"
+ "entity": "imagline;",
+ "value": "U+02110"
},
{
- entity: "imagpart;",
- value: "U+02111"
+ "entity": "imagpart;",
+ "value": "U+02111"
},
{
- entity: "imath;",
- value: "U+00131"
+ "entity": "imath;",
+ "value": "U+00131"
},
{
- entity: "imof;",
- value: "U+022B7"
+ "entity": "imof;",
+ "value": "U+022B7"
},
{
- entity: "imped;",
- value: "U+001B5"
+ "entity": "imped;",
+ "value": "U+001B5"
},
{
- entity: "in;",
- value: "U+02208"
+ "entity": "in;",
+ "value": "U+02208"
},
{
- entity: "incare;",
- value: "U+02105"
+ "entity": "incare;",
+ "value": "U+02105"
},
{
- entity: "infin;",
- value: "U+0221E"
+ "entity": "infin;",
+ "value": "U+0221E"
},
{
- entity: "infintie;",
- value: "U+029DD"
+ "entity": "infintie;",
+ "value": "U+029DD"
},
{
- entity: "inodot;",
- value: "U+00131"
+ "entity": "inodot;",
+ "value": "U+00131"
},
{
- entity: "int;",
- value: "U+0222B"
+ "entity": "int;",
+ "value": "U+0222B"
},
{
- entity: "intcal;",
- value: "U+022BA"
+ "entity": "intcal;",
+ "value": "U+022BA"
},
{
- entity: "integers;",
- value: "U+02124"
+ "entity": "integers;",
+ "value": "U+02124"
},
{
- entity: "intercal;",
- value: "U+022BA"
+ "entity": "intercal;",
+ "value": "U+022BA"
},
{
- entity: "intlarhk;",
- value: "U+02A17"
+ "entity": "intlarhk;",
+ "value": "U+02A17"
},
{
- entity: "intprod;",
- value: "U+02A3C"
+ "entity": "intprod;",
+ "value": "U+02A3C"
},
{
- entity: "iocy;",
- value: "U+00451"
+ "entity": "iocy;",
+ "value": "U+00451"
},
{
- entity: "iogon;",
- value: "U+0012F"
+ "entity": "iogon;",
+ "value": "U+0012F"
},
{
- entity: "iopf;",
- value: "U+1D55A"
+ "entity": "iopf;",
+ "value": "U+1D55A"
},
{
- entity: "iota;",
- value: "U+003B9"
+ "entity": "iota;",
+ "value": "U+003B9"
},
{
- entity: "iprod;",
- value: "U+02A3C"
+ "entity": "iprod;",
+ "value": "U+02A3C"
},
{
- entity: "iquest;",
- value: "U+000BF"
+ "entity": "iquest;",
+ "value": "U+000BF"
},
{
- entity: "iquest",
- value: "U+000BF"
+ "entity": "iquest",
+ "value": "U+000BF"
},
{
- entity: "iscr;",
- value: "U+1D4BE"
+ "entity": "iscr;",
+ "value": "U+1D4BE"
},
{
- entity: "isin;",
- value: "U+02208"
+ "entity": "isin;",
+ "value": "U+02208"
},
{
- entity: "isinE;",
- value: "U+022F9"
+ "entity": "isinE;",
+ "value": "U+022F9"
},
{
- entity: "isindot;",
- value: "U+022F5"
+ "entity": "isindot;",
+ "value": "U+022F5"
},
{
- entity: "isins;",
- value: "U+022F4"
+ "entity": "isins;",
+ "value": "U+022F4"
},
{
- entity: "isinsv;",
- value: "U+022F3"
+ "entity": "isinsv;",
+ "value": "U+022F3"
},
{
- entity: "isinv;",
- value: "U+02208"
+ "entity": "isinv;",
+ "value": "U+02208"
},
{
- entity: "it;",
- value: "U+02062"
+ "entity": "it;",
+ "value": "U+02062"
},
{
- entity: "itilde;",
- value: "U+00129"
+ "entity": "itilde;",
+ "value": "U+00129"
},
{
- entity: "iukcy;",
- value: "U+00456"
+ "entity": "iukcy;",
+ "value": "U+00456"
},
{
- entity: "iuml;",
- value: "U+000EF"
+ "entity": "iuml;",
+ "value": "U+000EF"
},
{
- entity: "iuml",
- value: "U+000EF"
+ "entity": "iuml",
+ "value": "U+000EF"
},
{
- entity: "jcirc;",
- value: "U+00135"
+ "entity": "jcirc;",
+ "value": "U+00135"
},
{
- entity: "jcy;",
- value: "U+00439"
+ "entity": "jcy;",
+ "value": "U+00439"
},
{
- entity: "jfr;",
- value: "U+1D527"
+ "entity": "jfr;",
+ "value": "U+1D527"
},
{
- entity: "jmath;",
- value: "U+00237"
+ "entity": "jmath;",
+ "value": "U+00237"
},
{
- entity: "jopf;",
- value: "U+1D55B"
+ "entity": "jopf;",
+ "value": "U+1D55B"
},
{
- entity: "jscr;",
- value: "U+1D4BF"
+ "entity": "jscr;",
+ "value": "U+1D4BF"
},
{
- entity: "jsercy;",
- value: "U+00458"
+ "entity": "jsercy;",
+ "value": "U+00458"
},
{
- entity: "jukcy;",
- value: "U+00454"
+ "entity": "jukcy;",
+ "value": "U+00454"
},
{
- entity: "kappa;",
- value: "U+003BA"
+ "entity": "kappa;",
+ "value": "U+003BA"
},
{
- entity: "kappav;",
- value: "U+003F0"
+ "entity": "kappav;",
+ "value": "U+003F0"
},
{
- entity: "kcedil;",
- value: "U+00137"
+ "entity": "kcedil;",
+ "value": "U+00137"
},
{
- entity: "kcy;",
- value: "U+0043A"
+ "entity": "kcy;",
+ "value": "U+0043A"
},
{
- entity: "kfr;",
- value: "U+1D528"
+ "entity": "kfr;",
+ "value": "U+1D528"
},
{
- entity: "kgreen;",
- value: "U+00138"
+ "entity": "kgreen;",
+ "value": "U+00138"
},
{
- entity: "khcy;",
- value: "U+00445"
+ "entity": "khcy;",
+ "value": "U+00445"
},
{
- entity: "kjcy;",
- value: "U+0045C"
+ "entity": "kjcy;",
+ "value": "U+0045C"
},
{
- entity: "kopf;",
- value: "U+1D55C"
+ "entity": "kopf;",
+ "value": "U+1D55C"
},
{
- entity: "kscr;",
- value: "U+1D4C0"
+ "entity": "kscr;",
+ "value": "U+1D4C0"
},
{
- entity: "lAarr;",
- value: "U+021DA"
+ "entity": "lAarr;",
+ "value": "U+021DA"
},
{
- entity: "lArr;",
- value: "U+021D0"
+ "entity": "lArr;",
+ "value": "U+021D0"
},
{
- entity: "lAtail;",
- value: "U+0291B"
+ "entity": "lAtail;",
+ "value": "U+0291B"
},
{
- entity: "lBarr;",
- value: "U+0290E"
+ "entity": "lBarr;",
+ "value": "U+0290E"
},
{
- entity: "lE;",
- value: "U+02266"
+ "entity": "lE;",
+ "value": "U+02266"
},
{
- entity: "lEg;",
- value: "U+02A8B"
+ "entity": "lEg;",
+ "value": "U+02A8B"
},
{
- entity: "lHar;",
- value: "U+02962"
+ "entity": "lHar;",
+ "value": "U+02962"
},
{
- entity: "lacute;",
- value: "U+0013A"
+ "entity": "lacute;",
+ "value": "U+0013A"
},
{
- entity: "laemptyv;",
- value: "U+029B4"
+ "entity": "laemptyv;",
+ "value": "U+029B4"
},
{
- entity: "lagran;",
- value: "U+02112"
+ "entity": "lagran;",
+ "value": "U+02112"
},
{
- entity: "lambda;",
- value: "U+003BB"
+ "entity": "lambda;",
+ "value": "U+003BB"
},
{
- entity: "lang;",
- value: "U+027E8"
+ "entity": "lang;",
+ "value": "U+027E8"
},
{
- entity: "langd;",
- value: "U+02991"
+ "entity": "langd;",
+ "value": "U+02991"
},
{
- entity: "langle;",
- value: "U+027E8"
+ "entity": "langle;",
+ "value": "U+027E8"
},
{
- entity: "lap;",
- value: "U+02A85"
+ "entity": "lap;",
+ "value": "U+02A85"
},
{
- entity: "laquo;",
- value: "U+000AB"
+ "entity": "laquo;",
+ "value": "U+000AB"
},
{
- entity: "laquo",
- value: "U+000AB"
+ "entity": "laquo",
+ "value": "U+000AB"
},
{
- entity: "larr;",
- value: "U+02190"
+ "entity": "larr;",
+ "value": "U+02190"
},
{
- entity: "larrb;",
- value: "U+021E4"
+ "entity": "larrb;",
+ "value": "U+021E4"
},
{
- entity: "larrbfs;",
- value: "U+0291F"
+ "entity": "larrbfs;",
+ "value": "U+0291F"
},
{
- entity: "larrfs;",
- value: "U+0291D"
+ "entity": "larrfs;",
+ "value": "U+0291D"
},
{
- entity: "larrhk;",
- value: "U+021A9"
+ "entity": "larrhk;",
+ "value": "U+021A9"
},
{
- entity: "larrlp;",
- value: "U+021AB"
+ "entity": "larrlp;",
+ "value": "U+021AB"
},
{
- entity: "larrpl;",
- value: "U+02939"
+ "entity": "larrpl;",
+ "value": "U+02939"
},
{
- entity: "larrsim;",
- value: "U+02973"
+ "entity": "larrsim;",
+ "value": "U+02973"
},
{
- entity: "larrtl;",
- value: "U+021A2"
+ "entity": "larrtl;",
+ "value": "U+021A2"
},
{
- entity: "lat;",
- value: "U+02AAB"
+ "entity": "lat;",
+ "value": "U+02AAB"
},
{
- entity: "latail;",
- value: "U+02919"
+ "entity": "latail;",
+ "value": "U+02919"
},
{
- entity: "late;",
- value: "U+02AAD"
+ "entity": "late;",
+ "value": "U+02AAD"
},
{
- entity: "lbarr;",
- value: "U+0290C"
+ "entity": "lbarr;",
+ "value": "U+0290C"
},
{
- entity: "lbbrk;",
- value: "U+02772"
+ "entity": "lbbrk;",
+ "value": "U+02772"
},
{
- entity: "lbrace;",
- value: "U+0007B"
+ "entity": "lbrace;",
+ "value": "U+0007B"
},
{
- entity: "lbrack;",
- value: "U+0005B"
+ "entity": "lbrack;",
+ "value": "U+0005B"
},
{
- entity: "lbrke;",
- value: "U+0298B"
+ "entity": "lbrke;",
+ "value": "U+0298B"
},
{
- entity: "lbrksld;",
- value: "U+0298F"
+ "entity": "lbrksld;",
+ "value": "U+0298F"
},
{
- entity: "lbrkslu;",
- value: "U+0298D"
+ "entity": "lbrkslu;",
+ "value": "U+0298D"
},
{
- entity: "lcaron;",
- value: "U+0013E"
+ "entity": "lcaron;",
+ "value": "U+0013E"
},
{
- entity: "lcedil;",
- value: "U+0013C"
+ "entity": "lcedil;",
+ "value": "U+0013C"
},
{
- entity: "lceil;",
- value: "U+02308"
+ "entity": "lceil;",
+ "value": "U+02308"
},
{
- entity: "lcub;",
- value: "U+0007B"
+ "entity": "lcub;",
+ "value": "U+0007B"
},
{
- entity: "lcy;",
- value: "U+0043B"
+ "entity": "lcy;",
+ "value": "U+0043B"
},
{
- entity: "ldca;",
- value: "U+02936"
+ "entity": "ldca;",
+ "value": "U+02936"
},
{
- entity: "ldquo;",
- value: "U+0201C"
+ "entity": "ldquo;",
+ "value": "U+0201C"
},
{
- entity: "ldquor;",
- value: "U+0201E"
+ "entity": "ldquor;",
+ "value": "U+0201E"
},
{
- entity: "ldrdhar;",
- value: "U+02967"
+ "entity": "ldrdhar;",
+ "value": "U+02967"
},
{
- entity: "ldrushar;",
- value: "U+0294B"
+ "entity": "ldrushar;",
+ "value": "U+0294B"
},
{
- entity: "ldsh;",
- value: "U+021B2"
+ "entity": "ldsh;",
+ "value": "U+021B2"
},
{
- entity: "le;",
- value: "U+02264"
+ "entity": "le;",
+ "value": "U+02264"
},
{
- entity: "leftarrow;",
- value: "U+02190"
+ "entity": "leftarrow;",
+ "value": "U+02190"
},
{
- entity: "leftarrowtail;",
- value: "U+021A2"
+ "entity": "leftarrowtail;",
+ "value": "U+021A2"
},
{
- entity: "leftharpoondown;",
- value: "U+021BD"
+ "entity": "leftharpoondown;",
+ "value": "U+021BD"
},
{
- entity: "leftharpoonup;",
- value: "U+021BC"
+ "entity": "leftharpoonup;",
+ "value": "U+021BC"
},
{
- entity: "leftleftarrows;",
- value: "U+021C7"
+ "entity": "leftleftarrows;",
+ "value": "U+021C7"
},
{
- entity: "leftrightarrow;",
- value: "U+02194"
+ "entity": "leftrightarrow;",
+ "value": "U+02194"
},
{
- entity: "leftrightarrows;",
- value: "U+021C6"
+ "entity": "leftrightarrows;",
+ "value": "U+021C6"
},
{
- entity: "leftrightharpoons;",
- value: "U+021CB"
+ "entity": "leftrightharpoons;",
+ "value": "U+021CB"
},
{
- entity: "leftrightsquigarrow;",
- value: "U+021AD"
+ "entity": "leftrightsquigarrow;",
+ "value": "U+021AD"
},
{
- entity: "leftthreetimes;",
- value: "U+022CB"
+ "entity": "leftthreetimes;",
+ "value": "U+022CB"
},
{
- entity: "leg;",
- value: "U+022DA"
+ "entity": "leg;",
+ "value": "U+022DA"
},
{
- entity: "leq;",
- value: "U+02264"
+ "entity": "leq;",
+ "value": "U+02264"
},
{
- entity: "leqq;",
- value: "U+02266"
+ "entity": "leqq;",
+ "value": "U+02266"
},
{
- entity: "leqslant;",
- value: "U+02A7D"
+ "entity": "leqslant;",
+ "value": "U+02A7D"
},
{
- entity: "les;",
- value: "U+02A7D"
+ "entity": "les;",
+ "value": "U+02A7D"
},
{
- entity: "lescc;",
- value: "U+02AA8"
+ "entity": "lescc;",
+ "value": "U+02AA8"
},
{
- entity: "lesdot;",
- value: "U+02A7F"
+ "entity": "lesdot;",
+ "value": "U+02A7F"
},
{
- entity: "lesdoto;",
- value: "U+02A81"
+ "entity": "lesdoto;",
+ "value": "U+02A81"
},
{
- entity: "lesdotor;",
- value: "U+02A83"
+ "entity": "lesdotor;",
+ "value": "U+02A83"
},
{
- entity: "lesges;",
- value: "U+02A93"
+ "entity": "lesges;",
+ "value": "U+02A93"
},
{
- entity: "lessapprox;",
- value: "U+02A85"
+ "entity": "lessapprox;",
+ "value": "U+02A85"
},
{
- entity: "lessdot;",
- value: "U+022D6"
+ "entity": "lessdot;",
+ "value": "U+022D6"
},
{
- entity: "lesseqgtr;",
- value: "U+022DA"
+ "entity": "lesseqgtr;",
+ "value": "U+022DA"
},
{
- entity: "lesseqqgtr;",
- value: "U+02A8B"
+ "entity": "lesseqqgtr;",
+ "value": "U+02A8B"
},
{
- entity: "lessgtr;",
- value: "U+02276"
+ "entity": "lessgtr;",
+ "value": "U+02276"
},
{
- entity: "lesssim;",
- value: "U+02272"
+ "entity": "lesssim;",
+ "value": "U+02272"
},
{
- entity: "lfisht;",
- value: "U+0297C"
+ "entity": "lfisht;",
+ "value": "U+0297C"
},
{
- entity: "lfloor;",
- value: "U+0230A"
+ "entity": "lfloor;",
+ "value": "U+0230A"
},
{
- entity: "lfr;",
- value: "U+1D529"
+ "entity": "lfr;",
+ "value": "U+1D529"
},
{
- entity: "lg;",
- value: "U+02276"
+ "entity": "lg;",
+ "value": "U+02276"
},
{
- entity: "lgE;",
- value: "U+02A91"
+ "entity": "lgE;",
+ "value": "U+02A91"
},
{
- entity: "lhard;",
- value: "U+021BD"
+ "entity": "lhard;",
+ "value": "U+021BD"
},
{
- entity: "lharu;",
- value: "U+021BC"
+ "entity": "lharu;",
+ "value": "U+021BC"
},
{
- entity: "lharul;",
- value: "U+0296A"
+ "entity": "lharul;",
+ "value": "U+0296A"
},
{
- entity: "lhblk;",
- value: "U+02584"
+ "entity": "lhblk;",
+ "value": "U+02584"
},
{
- entity: "ljcy;",
- value: "U+00459"
+ "entity": "ljcy;",
+ "value": "U+00459"
},
{
- entity: "ll;",
- value: "U+0226A"
+ "entity": "ll;",
+ "value": "U+0226A"
},
{
- entity: "llarr;",
- value: "U+021C7"
+ "entity": "llarr;",
+ "value": "U+021C7"
},
{
- entity: "llcorner;",
- value: "U+0231E"
+ "entity": "llcorner;",
+ "value": "U+0231E"
},
{
- entity: "llhard;",
- value: "U+0296B"
+ "entity": "llhard;",
+ "value": "U+0296B"
},
{
- entity: "lltri;",
- value: "U+025FA"
+ "entity": "lltri;",
+ "value": "U+025FA"
},
{
- entity: "lmidot;",
- value: "U+00140"
+ "entity": "lmidot;",
+ "value": "U+00140"
},
{
- entity: "lmoust;",
- value: "U+023B0"
+ "entity": "lmoust;",
+ "value": "U+023B0"
},
{
- entity: "lmoustache;",
- value: "U+023B0"
+ "entity": "lmoustache;",
+ "value": "U+023B0"
},
{
- entity: "lnE;",
- value: "U+02268"
+ "entity": "lnE;",
+ "value": "U+02268"
},
{
- entity: "lnap;",
- value: "U+02A89"
+ "entity": "lnap;",
+ "value": "U+02A89"
},
{
- entity: "lnapprox;",
- value: "U+02A89"
+ "entity": "lnapprox;",
+ "value": "U+02A89"
},
{
- entity: "lne;",
- value: "U+02A87"
+ "entity": "lne;",
+ "value": "U+02A87"
},
{
- entity: "lneq;",
- value: "U+02A87"
+ "entity": "lneq;",
+ "value": "U+02A87"
},
{
- entity: "lneqq;",
- value: "U+02268"
+ "entity": "lneqq;",
+ "value": "U+02268"
},
{
- entity: "lnsim;",
- value: "U+022E6"
+ "entity": "lnsim;",
+ "value": "U+022E6"
},
{
- entity: "loang;",
- value: "U+027EC"
+ "entity": "loang;",
+ "value": "U+027EC"
},
{
- entity: "loarr;",
- value: "U+021FD"
+ "entity": "loarr;",
+ "value": "U+021FD"
},
{
- entity: "lobrk;",
- value: "U+027E6"
+ "entity": "lobrk;",
+ "value": "U+027E6"
},
{
- entity: "longleftarrow;",
- value: "U+027F5"
+ "entity": "longleftarrow;",
+ "value": "U+027F5"
},
{
- entity: "longleftrightarrow;",
- value: "U+027F7"
+ "entity": "longleftrightarrow;",
+ "value": "U+027F7"
},
{
- entity: "longmapsto;",
- value: "U+027FC"
+ "entity": "longmapsto;",
+ "value": "U+027FC"
},
{
- entity: "longrightarrow;",
- value: "U+027F6"
+ "entity": "longrightarrow;",
+ "value": "U+027F6"
},
{
- entity: "looparrowleft;",
- value: "U+021AB"
+ "entity": "looparrowleft;",
+ "value": "U+021AB"
},
{
- entity: "looparrowright;",
- value: "U+021AC"
+ "entity": "looparrowright;",
+ "value": "U+021AC"
},
{
- entity: "lopar;",
- value: "U+02985"
+ "entity": "lopar;",
+ "value": "U+02985"
},
{
- entity: "lopf;",
- value: "U+1D55D"
+ "entity": "lopf;",
+ "value": "U+1D55D"
},
{
- entity: "loplus;",
- value: "U+02A2D"
+ "entity": "loplus;",
+ "value": "U+02A2D"
},
{
- entity: "lotimes;",
- value: "U+02A34"
+ "entity": "lotimes;",
+ "value": "U+02A34"
},
{
- entity: "lowast;",
- value: "U+02217"
+ "entity": "lowast;",
+ "value": "U+02217"
},
{
- entity: "lowbar;",
- value: "U+0005F"
+ "entity": "lowbar;",
+ "value": "U+0005F"
},
{
- entity: "loz;",
- value: "U+025CA"
+ "entity": "loz;",
+ "value": "U+025CA"
},
{
- entity: "lozenge;",
- value: "U+025CA"
+ "entity": "lozenge;",
+ "value": "U+025CA"
},
{
- entity: "lozf;",
- value: "U+029EB"
+ "entity": "lozf;",
+ "value": "U+029EB"
},
{
- entity: "lpar;",
- value: "U+00028"
+ "entity": "lpar;",
+ "value": "U+00028"
},
{
- entity: "lparlt;",
- value: "U+02993"
+ "entity": "lparlt;",
+ "value": "U+02993"
},
{
- entity: "lrarr;",
- value: "U+021C6"
+ "entity": "lrarr;",
+ "value": "U+021C6"
},
{
- entity: "lrcorner;",
- value: "U+0231F"
+ "entity": "lrcorner;",
+ "value": "U+0231F"
},
{
- entity: "lrhar;",
- value: "U+021CB"
+ "entity": "lrhar;",
+ "value": "U+021CB"
},
{
- entity: "lrhard;",
- value: "U+0296D"
+ "entity": "lrhard;",
+ "value": "U+0296D"
},
{
- entity: "lrm;",
- value: "U+0200E"
+ "entity": "lrm;",
+ "value": "U+0200E"
},
{
- entity: "lrtri;",
- value: "U+022BF"
+ "entity": "lrtri;",
+ "value": "U+022BF"
},
{
- entity: "lsaquo;",
- value: "U+02039"
+ "entity": "lsaquo;",
+ "value": "U+02039"
},
{
- entity: "lscr;",
- value: "U+1D4C1"
+ "entity": "lscr;",
+ "value": "U+1D4C1"
},
{
- entity: "lsh;",
- value: "U+021B0"
+ "entity": "lsh;",
+ "value": "U+021B0"
},
{
- entity: "lsim;",
- value: "U+02272"
+ "entity": "lsim;",
+ "value": "U+02272"
},
{
- entity: "lsime;",
- value: "U+02A8D"
+ "entity": "lsime;",
+ "value": "U+02A8D"
},
{
- entity: "lsimg;",
- value: "U+02A8F"
+ "entity": "lsimg;",
+ "value": "U+02A8F"
},
{
- entity: "lsqb;",
- value: "U+0005B"
+ "entity": "lsqb;",
+ "value": "U+0005B"
},
{
- entity: "lsquo;",
- value: "U+02018"
+ "entity": "lsquo;",
+ "value": "U+02018"
},
{
- entity: "lsquor;",
- value: "U+0201A"
+ "entity": "lsquor;",
+ "value": "U+0201A"
},
{
- entity: "lstrok;",
- value: "U+00142"
+ "entity": "lstrok;",
+ "value": "U+00142"
},
{
- entity: "lt;",
- value: "U+0003C"
+ "entity": "lt;",
+ "value": "U+0003C"
},
{
- entity: "lt",
- value: "U+0003C"
+ "entity": "lt",
+ "value": "U+0003C"
},
{
- entity: "ltcc;",
- value: "U+02AA6"
+ "entity": "ltcc;",
+ "value": "U+02AA6"
},
{
- entity: "ltcir;",
- value: "U+02A79"
+ "entity": "ltcir;",
+ "value": "U+02A79"
},
{
- entity: "ltdot;",
- value: "U+022D6"
+ "entity": "ltdot;",
+ "value": "U+022D6"
},
{
- entity: "lthree;",
- value: "U+022CB"
+ "entity": "lthree;",
+ "value": "U+022CB"
},
{
- entity: "ltimes;",
- value: "U+022C9"
+ "entity": "ltimes;",
+ "value": "U+022C9"
},
{
- entity: "ltlarr;",
- value: "U+02976"
+ "entity": "ltlarr;",
+ "value": "U+02976"
},
{
- entity: "ltquest;",
- value: "U+02A7B"
+ "entity": "ltquest;",
+ "value": "U+02A7B"
},
{
- entity: "ltrPar;",
- value: "U+02996"
+ "entity": "ltrPar;",
+ "value": "U+02996"
},
{
- entity: "ltri;",
- value: "U+025C3"
+ "entity": "ltri;",
+ "value": "U+025C3"
},
{
- entity: "ltrie;",
- value: "U+022B4"
+ "entity": "ltrie;",
+ "value": "U+022B4"
},
{
- entity: "ltrif;",
- value: "U+025C2"
+ "entity": "ltrif;",
+ "value": "U+025C2"
},
{
- entity: "lurdshar;",
- value: "U+0294A"
+ "entity": "lurdshar;",
+ "value": "U+0294A"
},
{
- entity: "luruhar;",
- value: "U+02966"
+ "entity": "luruhar;",
+ "value": "U+02966"
},
{
- entity: "mDDot;",
- value: "U+0223A"
+ "entity": "mDDot;",
+ "value": "U+0223A"
},
{
- entity: "macr;",
- value: "U+000AF"
+ "entity": "macr;",
+ "value": "U+000AF"
},
{
- entity: "macr",
- value: "U+000AF"
+ "entity": "macr",
+ "value": "U+000AF"
},
{
- entity: "male;",
- value: "U+02642"
+ "entity": "male;",
+ "value": "U+02642"
},
{
- entity: "malt;",
- value: "U+02720"
+ "entity": "malt;",
+ "value": "U+02720"
},
{
- entity: "maltese;",
- value: "U+02720"
+ "entity": "maltese;",
+ "value": "U+02720"
},
{
- entity: "map;",
- value: "U+021A6"
+ "entity": "map;",
+ "value": "U+021A6"
},
{
- entity: "mapsto;",
- value: "U+021A6"
+ "entity": "mapsto;",
+ "value": "U+021A6"
},
{
- entity: "mapstodown;",
- value: "U+021A7"
+ "entity": "mapstodown;",
+ "value": "U+021A7"
},
{
- entity: "mapstoleft;",
- value: "U+021A4"
+ "entity": "mapstoleft;",
+ "value": "U+021A4"
},
{
- entity: "mapstoup;",
- value: "U+021A5"
+ "entity": "mapstoup;",
+ "value": "U+021A5"
},
{
- entity: "marker;",
- value: "U+025AE"
+ "entity": "marker;",
+ "value": "U+025AE"
},
{
- entity: "mcomma;",
- value: "U+02A29"
+ "entity": "mcomma;",
+ "value": "U+02A29"
},
{
- entity: "mcy;",
- value: "U+0043C"
+ "entity": "mcy;",
+ "value": "U+0043C"
},
{
- entity: "mdash;",
- value: "U+02014"
+ "entity": "mdash;",
+ "value": "U+02014"
},
{
- entity: "measuredangle;",
- value: "U+02221"
+ "entity": "measuredangle;",
+ "value": "U+02221"
},
{
- entity: "mfr;",
- value: "U+1D52A"
+ "entity": "mfr;",
+ "value": "U+1D52A"
},
{
- entity: "mho;",
- value: "U+02127"
+ "entity": "mho;",
+ "value": "U+02127"
},
{
- entity: "micro;",
- value: "U+000B5"
+ "entity": "micro;",
+ "value": "U+000B5"
},
{
- entity: "micro",
- value: "U+000B5"
+ "entity": "micro",
+ "value": "U+000B5"
},
{
- entity: "mid;",
- value: "U+02223"
+ "entity": "mid;",
+ "value": "U+02223"
},
{
- entity: "midast;",
- value: "U+0002A"
+ "entity": "midast;",
+ "value": "U+0002A"
},
{
- entity: "midcir;",
- value: "U+02AF0"
+ "entity": "midcir;",
+ "value": "U+02AF0"
},
{
- entity: "middot;",
- value: "U+000B7"
+ "entity": "middot;",
+ "value": "U+000B7"
},
{
- entity: "middot",
- value: "U+000B7"
+ "entity": "middot",
+ "value": "U+000B7"
},
{
- entity: "minus;",
- value: "U+02212"
+ "entity": "minus;",
+ "value": "U+02212"
},
{
- entity: "minusb;",
- value: "U+0229F"
+ "entity": "minusb;",
+ "value": "U+0229F"
},
{
- entity: "minusd;",
- value: "U+02238"
+ "entity": "minusd;",
+ "value": "U+02238"
},
{
- entity: "minusdu;",
- value: "U+02A2A"
+ "entity": "minusdu;",
+ "value": "U+02A2A"
},
{
- entity: "mlcp;",
- value: "U+02ADB"
+ "entity": "mlcp;",
+ "value": "U+02ADB"
},
{
- entity: "mldr;",
- value: "U+02026"
+ "entity": "mldr;",
+ "value": "U+02026"
},
{
- entity: "mnplus;",
- value: "U+02213"
+ "entity": "mnplus;",
+ "value": "U+02213"
},
{
- entity: "models;",
- value: "U+022A7"
+ "entity": "models;",
+ "value": "U+022A7"
},
{
- entity: "mopf;",
- value: "U+1D55E"
+ "entity": "mopf;",
+ "value": "U+1D55E"
},
{
- entity: "mp;",
- value: "U+02213"
+ "entity": "mp;",
+ "value": "U+02213"
},
{
- entity: "mscr;",
- value: "U+1D4C2"
+ "entity": "mscr;",
+ "value": "U+1D4C2"
},
{
- entity: "mstpos;",
- value: "U+0223E"
+ "entity": "mstpos;",
+ "value": "U+0223E"
},
{
- entity: "mu;",
- value: "U+003BC"
+ "entity": "mu;",
+ "value": "U+003BC"
},
{
- entity: "multimap;",
- value: "U+022B8"
+ "entity": "multimap;",
+ "value": "U+022B8"
},
{
- entity: "mumap;",
- value: "U+022B8"
+ "entity": "mumap;",
+ "value": "U+022B8"
},
{
- entity: "nLeftarrow;",
- value: "U+021CD"
+ "entity": "nLeftarrow;",
+ "value": "U+021CD"
},
{
- entity: "nLeftrightarrow;",
- value: "U+021CE"
+ "entity": "nLeftrightarrow;",
+ "value": "U+021CE"
},
{
- entity: "nRightarrow;",
- value: "U+021CF"
+ "entity": "nRightarrow;",
+ "value": "U+021CF"
},
{
- entity: "nVDash;",
- value: "U+022AF"
+ "entity": "nVDash;",
+ "value": "U+022AF"
},
{
- entity: "nVdash;",
- value: "U+022AE"
+ "entity": "nVdash;",
+ "value": "U+022AE"
},
{
- entity: "nabla;",
- value: "U+02207"
+ "entity": "nabla;",
+ "value": "U+02207"
},
{
- entity: "nacute;",
- value: "U+00144"
+ "entity": "nacute;",
+ "value": "U+00144"
},
{
- entity: "nap;",
- value: "U+02249"
+ "entity": "nap;",
+ "value": "U+02249"
},
{
- entity: "napos;",
- value: "U+00149"
+ "entity": "napos;",
+ "value": "U+00149"
},
{
- entity: "napprox;",
- value: "U+02249"
+ "entity": "napprox;",
+ "value": "U+02249"
},
{
- entity: "natur;",
- value: "U+0266E"
+ "entity": "natur;",
+ "value": "U+0266E"
},
{
- entity: "natural;",
- value: "U+0266E"
+ "entity": "natural;",
+ "value": "U+0266E"
},
{
- entity: "naturals;",
- value: "U+02115"
+ "entity": "naturals;",
+ "value": "U+02115"
},
{
- entity: "nbsp;",
- value: "U+000A0"
+ "entity": "nbsp;",
+ "value": "U+000A0"
},
{
- entity: "nbsp",
- value: "U+000A0"
+ "entity": "nbsp",
+ "value": "U+000A0"
},
{
- entity: "ncap;",
- value: "U+02A43"
+ "entity": "ncap;",
+ "value": "U+02A43"
},
{
- entity: "ncaron;",
- value: "U+00148"
+ "entity": "ncaron;",
+ "value": "U+00148"
},
{
- entity: "ncedil;",
- value: "U+00146"
+ "entity": "ncedil;",
+ "value": "U+00146"
},
{
- entity: "ncong;",
- value: "U+02247"
+ "entity": "ncong;",
+ "value": "U+02247"
},
{
- entity: "ncup;",
- value: "U+02A42"
+ "entity": "ncup;",
+ "value": "U+02A42"
},
{
- entity: "ncy;",
- value: "U+0043D"
+ "entity": "ncy;",
+ "value": "U+0043D"
},
{
- entity: "ndash;",
- value: "U+02013"
+ "entity": "ndash;",
+ "value": "U+02013"
},
{
- entity: "ne;",
- value: "U+02260"
+ "entity": "ne;",
+ "value": "U+02260"
},
{
- entity: "neArr;",
- value: "U+021D7"
+ "entity": "neArr;",
+ "value": "U+021D7"
},
{
- entity: "nearhk;",
- value: "U+02924"
+ "entity": "nearhk;",
+ "value": "U+02924"
},
{
- entity: "nearr;",
- value: "U+02197"
+ "entity": "nearr;",
+ "value": "U+02197"
},
{
- entity: "nearrow;",
- value: "U+02197"
+ "entity": "nearrow;",
+ "value": "U+02197"
},
{
- entity: "nequiv;",
- value: "U+02262"
+ "entity": "nequiv;",
+ "value": "U+02262"
},
{
- entity: "nesear;",
- value: "U+02928"
+ "entity": "nesear;",
+ "value": "U+02928"
},
{
- entity: "nexist;",
- value: "U+02204"
+ "entity": "nexist;",
+ "value": "U+02204"
},
{
- entity: "nexists;",
- value: "U+02204"
+ "entity": "nexists;",
+ "value": "U+02204"
},
{
- entity: "nfr;",
- value: "U+1D52B"
+ "entity": "nfr;",
+ "value": "U+1D52B"
},
{
- entity: "nge;",
- value: "U+02271"
+ "entity": "nge;",
+ "value": "U+02271"
},
{
- entity: "ngeq;",
- value: "U+02271"
+ "entity": "ngeq;",
+ "value": "U+02271"
},
{
- entity: "ngsim;",
- value: "U+02275"
+ "entity": "ngsim;",
+ "value": "U+02275"
},
{
- entity: "ngt;",
- value: "U+0226F"
+ "entity": "ngt;",
+ "value": "U+0226F"
},
{
- entity: "ngtr;",
- value: "U+0226F"
+ "entity": "ngtr;",
+ "value": "U+0226F"
},
{
- entity: "nhArr;",
- value: "U+021CE"
+ "entity": "nhArr;",
+ "value": "U+021CE"
},
{
- entity: "nharr;",
- value: "U+021AE"
+ "entity": "nharr;",
+ "value": "U+021AE"
},
{
- entity: "nhpar;",
- value: "U+02AF2"
+ "entity": "nhpar;",
+ "value": "U+02AF2"
},
{
- entity: "ni;",
- value: "U+0220B"
+ "entity": "ni;",
+ "value": "U+0220B"
},
{
- entity: "nis;",
- value: "U+022FC"
+ "entity": "nis;",
+ "value": "U+022FC"
},
{
- entity: "nisd;",
- value: "U+022FA"
+ "entity": "nisd;",
+ "value": "U+022FA"
},
{
- entity: "niv;",
- value: "U+0220B"
+ "entity": "niv;",
+ "value": "U+0220B"
},
{
- entity: "njcy;",
- value: "U+0045A"
+ "entity": "njcy;",
+ "value": "U+0045A"
},
{
- entity: "nlArr;",
- value: "U+021CD"
+ "entity": "nlArr;",
+ "value": "U+021CD"
},
{
- entity: "nlarr;",
- value: "U+0219A"
+ "entity": "nlarr;",
+ "value": "U+0219A"
},
{
- entity: "nldr;",
- value: "U+02025"
+ "entity": "nldr;",
+ "value": "U+02025"
},
{
- entity: "nle;",
- value: "U+02270"
+ "entity": "nle;",
+ "value": "U+02270"
},
{
- entity: "nleftarrow;",
- value: "U+0219A"
+ "entity": "nleftarrow;",
+ "value": "U+0219A"
},
{
- entity: "nleftrightarrow;",
- value: "U+021AE"
+ "entity": "nleftrightarrow;",
+ "value": "U+021AE"
},
{
- entity: "nleq;",
- value: "U+02270"
+ "entity": "nleq;",
+ "value": "U+02270"
},
{
- entity: "nless;",
- value: "U+0226E"
+ "entity": "nless;",
+ "value": "U+0226E"
},
{
- entity: "nlsim;",
- value: "U+02274"
+ "entity": "nlsim;",
+ "value": "U+02274"
},
{
- entity: "nlt;",
- value: "U+0226E"
+ "entity": "nlt;",
+ "value": "U+0226E"
},
{
- entity: "nltri;",
- value: "U+022EA"
+ "entity": "nltri;",
+ "value": "U+022EA"
},
{
- entity: "nltrie;",
- value: "U+022EC"
+ "entity": "nltrie;",
+ "value": "U+022EC"
},
{
- entity: "nmid;",
- value: "U+02224"
+ "entity": "nmid;",
+ "value": "U+02224"
},
{
- entity: "nopf;",
- value: "U+1D55F"
+ "entity": "nopf;",
+ "value": "U+1D55F"
},
{
- entity: "not;",
- value: "U+000AC"
+ "entity": "not;",
+ "value": "U+000AC"
},
{
- entity: "not",
- value: "U+000AC"
+ "entity": "not",
+ "value": "U+000AC"
},
{
- entity: "notin;",
- value: "U+02209"
+ "entity": "notin;",
+ "value": "U+02209"
},
{
- entity: "notinva;",
- value: "U+02209"
+ "entity": "notinva;",
+ "value": "U+02209"
},
{
- entity: "notinvb;",
- value: "U+022F7"
+ "entity": "notinvb;",
+ "value": "U+022F7"
},
{
- entity: "notinvc;",
- value: "U+022F6"
+ "entity": "notinvc;",
+ "value": "U+022F6"
},
{
- entity: "notni;",
- value: "U+0220C"
+ "entity": "notni;",
+ "value": "U+0220C"
},
{
- entity: "notniva;",
- value: "U+0220C"
+ "entity": "notniva;",
+ "value": "U+0220C"
},
{
- entity: "notnivb;",
- value: "U+022FE"
+ "entity": "notnivb;",
+ "value": "U+022FE"
},
{
- entity: "notnivc;",
- value: "U+022FD"
+ "entity": "notnivc;",
+ "value": "U+022FD"
},
{
- entity: "npar;",
- value: "U+02226"
+ "entity": "npar;",
+ "value": "U+02226"
},
{
- entity: "nparallel;",
- value: "U+02226"
+ "entity": "nparallel;",
+ "value": "U+02226"
},
{
- entity: "npolint;",
- value: "U+02A14"
+ "entity": "npolint;",
+ "value": "U+02A14"
},
{
- entity: "npr;",
- value: "U+02280"
+ "entity": "npr;",
+ "value": "U+02280"
},
{
- entity: "nprcue;",
- value: "U+022E0"
+ "entity": "nprcue;",
+ "value": "U+022E0"
},
{
- entity: "nprec;",
- value: "U+02280"
+ "entity": "nprec;",
+ "value": "U+02280"
},
{
- entity: "nrArr;",
- value: "U+021CF"
+ "entity": "nrArr;",
+ "value": "U+021CF"
},
{
- entity: "nrarr;",
- value: "U+0219B"
+ "entity": "nrarr;",
+ "value": "U+0219B"
},
{
- entity: "nrightarrow;",
- value: "U+0219B"
+ "entity": "nrightarrow;",
+ "value": "U+0219B"
},
{
- entity: "nrtri;",
- value: "U+022EB"
+ "entity": "nrtri;",
+ "value": "U+022EB"
},
{
- entity: "nrtrie;",
- value: "U+022ED"
+ "entity": "nrtrie;",
+ "value": "U+022ED"
},
{
- entity: "nsc;",
- value: "U+02281"
+ "entity": "nsc;",
+ "value": "U+02281"
},
{
- entity: "nsccue;",
- value: "U+022E1"
+ "entity": "nsccue;",
+ "value": "U+022E1"
},
{
- entity: "nscr;",
- value: "U+1D4C3"
+ "entity": "nscr;",
+ "value": "U+1D4C3"
},
{
- entity: "nshortmid;",
- value: "U+02224"
+ "entity": "nshortmid;",
+ "value": "U+02224"
},
{
- entity: "nshortparallel;",
- value: "U+02226"
+ "entity": "nshortparallel;",
+ "value": "U+02226"
},
{
- entity: "nsim;",
- value: "U+02241"
+ "entity": "nsim;",
+ "value": "U+02241"
},
{
- entity: "nsime;",
- value: "U+02244"
+ "entity": "nsime;",
+ "value": "U+02244"
},
{
- entity: "nsimeq;",
- value: "U+02244"
+ "entity": "nsimeq;",
+ "value": "U+02244"
},
{
- entity: "nsmid;",
- value: "U+02224"
+ "entity": "nsmid;",
+ "value": "U+02224"
},
{
- entity: "nspar;",
- value: "U+02226"
+ "entity": "nspar;",
+ "value": "U+02226"
},
{
- entity: "nsqsube;",
- value: "U+022E2"
+ "entity": "nsqsube;",
+ "value": "U+022E2"
},
{
- entity: "nsqsupe;",
- value: "U+022E3"
+ "entity": "nsqsupe;",
+ "value": "U+022E3"
},
{
- entity: "nsub;",
- value: "U+02284"
+ "entity": "nsub;",
+ "value": "U+02284"
},
{
- entity: "nsube;",
- value: "U+02288"
+ "entity": "nsube;",
+ "value": "U+02288"
},
{
- entity: "nsubseteq;",
- value: "U+02288"
+ "entity": "nsubseteq;",
+ "value": "U+02288"
},
{
- entity: "nsucc;",
- value: "U+02281"
+ "entity": "nsucc;",
+ "value": "U+02281"
},
{
- entity: "nsup;",
- value: "U+02285"
+ "entity": "nsup;",
+ "value": "U+02285"
},
{
- entity: "nsupe;",
- value: "U+02289"
+ "entity": "nsupe;",
+ "value": "U+02289"
},
{
- entity: "nsupseteq;",
- value: "U+02289"
+ "entity": "nsupseteq;",
+ "value": "U+02289"
},
{
- entity: "ntgl;",
- value: "U+02279"
+ "entity": "ntgl;",
+ "value": "U+02279"
},
{
- entity: "ntilde;",
- value: "U+000F1"
+ "entity": "ntilde;",
+ "value": "U+000F1"
},
{
- entity: "ntilde",
- value: "U+000F1"
+ "entity": "ntilde",
+ "value": "U+000F1"
},
{
- entity: "ntlg;",
- value: "U+02278"
+ "entity": "ntlg;",
+ "value": "U+02278"
},
{
- entity: "ntriangleleft;",
- value: "U+022EA"
+ "entity": "ntriangleleft;",
+ "value": "U+022EA"
},
{
- entity: "ntrianglelefteq;",
- value: "U+022EC"
+ "entity": "ntrianglelefteq;",
+ "value": "U+022EC"
},
{
- entity: "ntriangleright;",
- value: "U+022EB"
+ "entity": "ntriangleright;",
+ "value": "U+022EB"
},
{
- entity: "ntrianglerighteq;",
- value: "U+022ED"
+ "entity": "ntrianglerighteq;",
+ "value": "U+022ED"
},
{
- entity: "nu;",
- value: "U+003BD"
+ "entity": "nu;",
+ "value": "U+003BD"
},
{
- entity: "num;",
- value: "U+00023"
+ "entity": "num;",
+ "value": "U+00023"
},
{
- entity: "numero;",
- value: "U+02116"
+ "entity": "numero;",
+ "value": "U+02116"
},
{
- entity: "numsp;",
- value: "U+02007"
+ "entity": "numsp;",
+ "value": "U+02007"
},
{
- entity: "nvDash;",
- value: "U+022AD"
+ "entity": "nvDash;",
+ "value": "U+022AD"
},
{
- entity: "nvHarr;",
- value: "U+02904"
+ "entity": "nvHarr;",
+ "value": "U+02904"
},
{
- entity: "nvdash;",
- value: "U+022AC"
+ "entity": "nvdash;",
+ "value": "U+022AC"
},
{
- entity: "nvinfin;",
- value: "U+029DE"
+ "entity": "nvinfin;",
+ "value": "U+029DE"
},
{
- entity: "nvlArr;",
- value: "U+02902"
+ "entity": "nvlArr;",
+ "value": "U+02902"
},
{
- entity: "nvrArr;",
- value: "U+02903"
+ "entity": "nvrArr;",
+ "value": "U+02903"
},
{
- entity: "nwArr;",
- value: "U+021D6"
+ "entity": "nwArr;",
+ "value": "U+021D6"
},
{
- entity: "nwarhk;",
- value: "U+02923"
+ "entity": "nwarhk;",
+ "value": "U+02923"
},
{
- entity: "nwarr;",
- value: "U+02196"
+ "entity": "nwarr;",
+ "value": "U+02196"
},
{
- entity: "nwarrow;",
- value: "U+02196"
+ "entity": "nwarrow;",
+ "value": "U+02196"
},
{
- entity: "nwnear;",
- value: "U+02927"
+ "entity": "nwnear;",
+ "value": "U+02927"
},
{
- entity: "oS;",
- value: "U+024C8"
+ "entity": "oS;",
+ "value": "U+024C8"
},
{
- entity: "oacute;",
- value: "U+000F3"
+ "entity": "oacute;",
+ "value": "U+000F3"
},
{
- entity: "oacute",
- value: "U+000F3"
+ "entity": "oacute",
+ "value": "U+000F3"
},
{
- entity: "oast;",
- value: "U+0229B"
+ "entity": "oast;",
+ "value": "U+0229B"
},
{
- entity: "ocir;",
- value: "U+0229A"
+ "entity": "ocir;",
+ "value": "U+0229A"
},
{
- entity: "ocirc;",
- value: "U+000F4"
+ "entity": "ocirc;",
+ "value": "U+000F4"
},
{
- entity: "ocirc",
- value: "U+000F4"
+ "entity": "ocirc",
+ "value": "U+000F4"
},
{
- entity: "ocy;",
- value: "U+0043E"
+ "entity": "ocy;",
+ "value": "U+0043E"
},
{
- entity: "odash;",
- value: "U+0229D"
+ "entity": "odash;",
+ "value": "U+0229D"
},
{
- entity: "odblac;",
- value: "U+00151"
+ "entity": "odblac;",
+ "value": "U+00151"
},
{
- entity: "odiv;",
- value: "U+02A38"
+ "entity": "odiv;",
+ "value": "U+02A38"
},
{
- entity: "odot;",
- value: "U+02299"
+ "entity": "odot;",
+ "value": "U+02299"
},
{
- entity: "odsold;",
- value: "U+029BC"
+ "entity": "odsold;",
+ "value": "U+029BC"
},
{
- entity: "oelig;",
- value: "U+00153"
+ "entity": "oelig;",
+ "value": "U+00153"
},
{
- entity: "ofcir;",
- value: "U+029BF"
+ "entity": "ofcir;",
+ "value": "U+029BF"
},
{
- entity: "ofr;",
- value: "U+1D52C"
+ "entity": "ofr;",
+ "value": "U+1D52C"
},
{
- entity: "ogon;",
- value: "U+002DB"
+ "entity": "ogon;",
+ "value": "U+002DB"
},
{
- entity: "ograve;",
- value: "U+000F2"
+ "entity": "ograve;",
+ "value": "U+000F2"
},
{
- entity: "ograve",
- value: "U+000F2"
+ "entity": "ograve",
+ "value": "U+000F2"
},
{
- entity: "ogt;",
- value: "U+029C1"
+ "entity": "ogt;",
+ "value": "U+029C1"
},
{
- entity: "ohbar;",
- value: "U+029B5"
+ "entity": "ohbar;",
+ "value": "U+029B5"
},
{
- entity: "ohm;",
- value: "U+003A9"
+ "entity": "ohm;",
+ "value": "U+003A9"
},
{
- entity: "oint;",
- value: "U+0222E"
+ "entity": "oint;",
+ "value": "U+0222E"
},
{
- entity: "olarr;",
- value: "U+021BA"
+ "entity": "olarr;",
+ "value": "U+021BA"
},
{
- entity: "olcir;",
- value: "U+029BE"
+ "entity": "olcir;",
+ "value": "U+029BE"
},
{
- entity: "olcross;",
- value: "U+029BB"
+ "entity": "olcross;",
+ "value": "U+029BB"
},
{
- entity: "oline;",
- value: "U+0203E"
+ "entity": "oline;",
+ "value": "U+0203E"
},
{
- entity: "olt;",
- value: "U+029C0"
+ "entity": "olt;",
+ "value": "U+029C0"
},
{
- entity: "omacr;",
- value: "U+0014D"
+ "entity": "omacr;",
+ "value": "U+0014D"
},
{
- entity: "omega;",
- value: "U+003C9"
+ "entity": "omega;",
+ "value": "U+003C9"
},
{
- entity: "omicron;",
- value: "U+003BF"
+ "entity": "omicron;",
+ "value": "U+003BF"
},
{
- entity: "omid;",
- value: "U+029B6"
+ "entity": "omid;",
+ "value": "U+029B6"
},
{
- entity: "ominus;",
- value: "U+02296"
+ "entity": "ominus;",
+ "value": "U+02296"
},
{
- entity: "oopf;",
- value: "U+1D560"
+ "entity": "oopf;",
+ "value": "U+1D560"
},
{
- entity: "opar;",
- value: "U+029B7"
+ "entity": "opar;",
+ "value": "U+029B7"
},
{
- entity: "operp;",
- value: "U+029B9"
+ "entity": "operp;",
+ "value": "U+029B9"
},
{
- entity: "oplus;",
- value: "U+02295"
+ "entity": "oplus;",
+ "value": "U+02295"
},
{
- entity: "or;",
- value: "U+02228"
+ "entity": "or;",
+ "value": "U+02228"
},
{
- entity: "orarr;",
- value: "U+021BB"
+ "entity": "orarr;",
+ "value": "U+021BB"
},
{
- entity: "ord;",
- value: "U+02A5D"
+ "entity": "ord;",
+ "value": "U+02A5D"
},
{
- entity: "order;",
- value: "U+02134"
+ "entity": "order;",
+ "value": "U+02134"
},
{
- entity: "orderof;",
- value: "U+02134"
+ "entity": "orderof;",
+ "value": "U+02134"
},
{
- entity: "ordf;",
- value: "U+000AA"
+ "entity": "ordf;",
+ "value": "U+000AA"
},
{
- entity: "ordf",
- value: "U+000AA"
+ "entity": "ordf",
+ "value": "U+000AA"
},
{
- entity: "ordm;",
- value: "U+000BA"
+ "entity": "ordm;",
+ "value": "U+000BA"
},
{
- entity: "ordm",
- value: "U+000BA"
+ "entity": "ordm",
+ "value": "U+000BA"
},
{
- entity: "origof;",
- value: "U+022B6"
+ "entity": "origof;",
+ "value": "U+022B6"
},
{
- entity: "oror;",
- value: "U+02A56"
+ "entity": "oror;",
+ "value": "U+02A56"
},
{
- entity: "orslope;",
- value: "U+02A57"
+ "entity": "orslope;",
+ "value": "U+02A57"
},
{
- entity: "orv;",
- value: "U+02A5B"
+ "entity": "orv;",
+ "value": "U+02A5B"
},
{
- entity: "oscr;",
- value: "U+02134"
+ "entity": "oscr;",
+ "value": "U+02134"
},
{
- entity: "oslash;",
- value: "U+000F8"
+ "entity": "oslash;",
+ "value": "U+000F8"
},
{
- entity: "oslash",
- value: "U+000F8"
+ "entity": "oslash",
+ "value": "U+000F8"
},
{
- entity: "osol;",
- value: "U+02298"
+ "entity": "osol;",
+ "value": "U+02298"
},
{
- entity: "otilde;",
- value: "U+000F5"
+ "entity": "otilde;",
+ "value": "U+000F5"
},
{
- entity: "otilde",
- value: "U+000F5"
+ "entity": "otilde",
+ "value": "U+000F5"
},
{
- entity: "otimes;",
- value: "U+02297"
+ "entity": "otimes;",
+ "value": "U+02297"
},
{
- entity: "otimesas;",
- value: "U+02A36"
+ "entity": "otimesas;",
+ "value": "U+02A36"
},
{
- entity: "ouml;",
- value: "U+000F6"
+ "entity": "ouml;",
+ "value": "U+000F6"
},
{
- entity: "ouml",
- value: "U+000F6"
+ "entity": "ouml",
+ "value": "U+000F6"
},
{
- entity: "ovbar;",
- value: "U+0233D"
+ "entity": "ovbar;",
+ "value": "U+0233D"
},
{
- entity: "par;",
- value: "U+02225"
+ "entity": "par;",
+ "value": "U+02225"
},
{
- entity: "para;",
- value: "U+000B6"
+ "entity": "para;",
+ "value": "U+000B6"
},
{
- entity: "para",
- value: "U+000B6"
+ "entity": "para",
+ "value": "U+000B6"
},
{
- entity: "parallel;",
- value: "U+02225"
+ "entity": "parallel;",
+ "value": "U+02225"
},
{
- entity: "parsim;",
- value: "U+02AF3"
+ "entity": "parsim;",
+ "value": "U+02AF3"
},
{
- entity: "parsl;",
- value: "U+02AFD"
+ "entity": "parsl;",
+ "value": "U+02AFD"
},
{
- entity: "part;",
- value: "U+02202"
+ "entity": "part;",
+ "value": "U+02202"
},
{
- entity: "pcy;",
- value: "U+0043F"
+ "entity": "pcy;",
+ "value": "U+0043F"
},
{
- entity: "percnt;",
- value: "U+00025"
+ "entity": "percnt;",
+ "value": "U+00025"
},
{
- entity: "period;",
- value: "U+0002E"
+ "entity": "period;",
+ "value": "U+0002E"
},
{
- entity: "permil;",
- value: "U+02030"
+ "entity": "permil;",
+ "value": "U+02030"
},
{
- entity: "perp;",
- value: "U+022A5"
+ "entity": "perp;",
+ "value": "U+022A5"
},
{
- entity: "pertenk;",
- value: "U+02031"
+ "entity": "pertenk;",
+ "value": "U+02031"
},
{
- entity: "pfr;",
- value: "U+1D52D"
+ "entity": "pfr;",
+ "value": "U+1D52D"
},
{
- entity: "phi;",
- value: "U+003C6"
+ "entity": "phi;",
+ "value": "U+003C6"
},
{
- entity: "phiv;",
- value: "U+003D5"
+ "entity": "phiv;",
+ "value": "U+003D5"
},
{
- entity: "phmmat;",
- value: "U+02133"
+ "entity": "phmmat;",
+ "value": "U+02133"
},
{
- entity: "phone;",
- value: "U+0260E"
+ "entity": "phone;",
+ "value": "U+0260E"
},
{
- entity: "pi;",
- value: "U+003C0"
+ "entity": "pi;",
+ "value": "U+003C0"
},
{
- entity: "pitchfork;",
- value: "U+022D4"
+ "entity": "pitchfork;",
+ "value": "U+022D4"
},
{
- entity: "piv;",
- value: "U+003D6"
+ "entity": "piv;",
+ "value": "U+003D6"
},
{
- entity: "planck;",
- value: "U+0210F"
+ "entity": "planck;",
+ "value": "U+0210F"
},
{
- entity: "planckh;",
- value: "U+0210E"
+ "entity": "planckh;",
+ "value": "U+0210E"
},
{
- entity: "plankv;",
- value: "U+0210F"
+ "entity": "plankv;",
+ "value": "U+0210F"
},
{
- entity: "plus;",
- value: "U+0002B"
+ "entity": "plus;",
+ "value": "U+0002B"
},
{
- entity: "plusacir;",
- value: "U+02A23"
+ "entity": "plusacir;",
+ "value": "U+02A23"
},
{
- entity: "plusb;",
- value: "U+0229E"
+ "entity": "plusb;",
+ "value": "U+0229E"
},
{
- entity: "pluscir;",
- value: "U+02A22"
+ "entity": "pluscir;",
+ "value": "U+02A22"
},
{
- entity: "plusdo;",
- value: "U+02214"
+ "entity": "plusdo;",
+ "value": "U+02214"
},
{
- entity: "plusdu;",
- value: "U+02A25"
+ "entity": "plusdu;",
+ "value": "U+02A25"
},
{
- entity: "pluse;",
- value: "U+02A72"
+ "entity": "pluse;",
+ "value": "U+02A72"
},
{
- entity: "plusmn;",
- value: "U+000B1"
+ "entity": "plusmn;",
+ "value": "U+000B1"
},
{
- entity: "plusmn",
- value: "U+000B1"
+ "entity": "plusmn",
+ "value": "U+000B1"
},
{
- entity: "plussim;",
- value: "U+02A26"
+ "entity": "plussim;",
+ "value": "U+02A26"
},
{
- entity: "plustwo;",
- value: "U+02A27"
+ "entity": "plustwo;",
+ "value": "U+02A27"
},
{
- entity: "pm;",
- value: "U+000B1"
+ "entity": "pm;",
+ "value": "U+000B1"
},
{
- entity: "pointint;",
- value: "U+02A15"
+ "entity": "pointint;",
+ "value": "U+02A15"
},
{
- entity: "popf;",
- value: "U+1D561"
+ "entity": "popf;",
+ "value": "U+1D561"
},
{
- entity: "pound;",
- value: "U+000A3"
+ "entity": "pound;",
+ "value": "U+000A3"
},
{
- entity: "pound",
- value: "U+000A3"
+ "entity": "pound",
+ "value": "U+000A3"
},
{
- entity: "pr;",
- value: "U+0227A"
+ "entity": "pr;",
+ "value": "U+0227A"
},
{
- entity: "prE;",
- value: "U+02AB3"
+ "entity": "prE;",
+ "value": "U+02AB3"
},
{
- entity: "prap;",
- value: "U+02AB7"
+ "entity": "prap;",
+ "value": "U+02AB7"
},
{
- entity: "prcue;",
- value: "U+0227C"
+ "entity": "prcue;",
+ "value": "U+0227C"
},
{
- entity: "pre;",
- value: "U+02AAF"
+ "entity": "pre;",
+ "value": "U+02AAF"
},
{
- entity: "prec;",
- value: "U+0227A"
+ "entity": "prec;",
+ "value": "U+0227A"
},
{
- entity: "precapprox;",
- value: "U+02AB7"
+ "entity": "precapprox;",
+ "value": "U+02AB7"
},
{
- entity: "preccurlyeq;",
- value: "U+0227C"
+ "entity": "preccurlyeq;",
+ "value": "U+0227C"
},
{
- entity: "preceq;",
- value: "U+02AAF"
+ "entity": "preceq;",
+ "value": "U+02AAF"
},
{
- entity: "precnapprox;",
- value: "U+02AB9"
+ "entity": "precnapprox;",
+ "value": "U+02AB9"
},
{
- entity: "precneqq;",
- value: "U+02AB5"
+ "entity": "precneqq;",
+ "value": "U+02AB5"
},
{
- entity: "precnsim;",
- value: "U+022E8"
+ "entity": "precnsim;",
+ "value": "U+022E8"
},
{
- entity: "precsim;",
- value: "U+0227E"
+ "entity": "precsim;",
+ "value": "U+0227E"
},
{
- entity: "prime;",
- value: "U+02032"
+ "entity": "prime;",
+ "value": "U+02032"
},
{
- entity: "primes;",
- value: "U+02119"
+ "entity": "primes;",
+ "value": "U+02119"
},
{
- entity: "prnE;",
- value: "U+02AB5"
+ "entity": "prnE;",
+ "value": "U+02AB5"
},
{
- entity: "prnap;",
- value: "U+02AB9"
+ "entity": "prnap;",
+ "value": "U+02AB9"
},
{
- entity: "prnsim;",
- value: "U+022E8"
+ "entity": "prnsim;",
+ "value": "U+022E8"
},
{
- entity: "prod;",
- value: "U+0220F"
+ "entity": "prod;",
+ "value": "U+0220F"
},
{
- entity: "profalar;",
- value: "U+0232E"
+ "entity": "profalar;",
+ "value": "U+0232E"
},
{
- entity: "profline;",
- value: "U+02312"
+ "entity": "profline;",
+ "value": "U+02312"
},
{
- entity: "profsurf;",
- value: "U+02313"
+ "entity": "profsurf;",
+ "value": "U+02313"
},
{
- entity: "prop;",
- value: "U+0221D"
+ "entity": "prop;",
+ "value": "U+0221D"
},
{
- entity: "propto;",
- value: "U+0221D"
+ "entity": "propto;",
+ "value": "U+0221D"
},
{
- entity: "prsim;",
- value: "U+0227E"
+ "entity": "prsim;",
+ "value": "U+0227E"
},
{
- entity: "prurel;",
- value: "U+022B0"
+ "entity": "prurel;",
+ "value": "U+022B0"
},
{
- entity: "pscr;",
- value: "U+1D4C5"
+ "entity": "pscr;",
+ "value": "U+1D4C5"
},
{
- entity: "psi;",
- value: "U+003C8"
+ "entity": "psi;",
+ "value": "U+003C8"
},
{
- entity: "puncsp;",
- value: "U+02008"
+ "entity": "puncsp;",
+ "value": "U+02008"
},
{
- entity: "qfr;",
- value: "U+1D52E"
+ "entity": "qfr;",
+ "value": "U+1D52E"
},
{
- entity: "qint;",
- value: "U+02A0C"
+ "entity": "qint;",
+ "value": "U+02A0C"
},
{
- entity: "qopf;",
- value: "U+1D562"
+ "entity": "qopf;",
+ "value": "U+1D562"
},
{
- entity: "qprime;",
- value: "U+02057"
+ "entity": "qprime;",
+ "value": "U+02057"
},
{
- entity: "qscr;",
- value: "U+1D4C6"
+ "entity": "qscr;",
+ "value": "U+1D4C6"
},
{
- entity: "quaternions;",
- value: "U+0210D"
+ "entity": "quaternions;",
+ "value": "U+0210D"
},
{
- entity: "quatint;",
- value: "U+02A16"
+ "entity": "quatint;",
+ "value": "U+02A16"
},
{
- entity: "quest;",
- value: "U+0003F"
+ "entity": "quest;",
+ "value": "U+0003F"
},
{
- entity: "questeq;",
- value: "U+0225F"
+ "entity": "questeq;",
+ "value": "U+0225F"
},
{
- entity: "quot;",
- value: "U+00022"
+ "entity": "quot;",
+ "value": "U+00022"
},
{
- entity: "quot",
- value: "U+00022"
+ "entity": "quot",
+ "value": "U+00022"
},
{
- entity: "rAarr;",
- value: "U+021DB"
+ "entity": "rAarr;",
+ "value": "U+021DB"
},
{
- entity: "rArr;",
- value: "U+021D2"
+ "entity": "rArr;",
+ "value": "U+021D2"
},
{
- entity: "rAtail;",
- value: "U+0291C"
+ "entity": "rAtail;",
+ "value": "U+0291C"
},
{
- entity: "rBarr;",
- value: "U+0290F"
+ "entity": "rBarr;",
+ "value": "U+0290F"
},
{
- entity: "rHar;",
- value: "U+02964"
+ "entity": "rHar;",
+ "value": "U+02964"
},
{
- entity: "racute;",
- value: "U+00155"
+ "entity": "racute;",
+ "value": "U+00155"
},
{
- entity: "radic;",
- value: "U+0221A"
+ "entity": "radic;",
+ "value": "U+0221A"
},
{
- entity: "raemptyv;",
- value: "U+029B3"
+ "entity": "raemptyv;",
+ "value": "U+029B3"
},
{
- entity: "rang;",
- value: "U+027E9"
+ "entity": "rang;",
+ "value": "U+027E9"
},
{
- entity: "rangd;",
- value: "U+02992"
+ "entity": "rangd;",
+ "value": "U+02992"
},
{
- entity: "range;",
- value: "U+029A5"
+ "entity": "range;",
+ "value": "U+029A5"
},
{
- entity: "rangle;",
- value: "U+027E9"
+ "entity": "rangle;",
+ "value": "U+027E9"
},
{
- entity: "raquo;",
- value: "U+000BB"
+ "entity": "raquo;",
+ "value": "U+000BB"
},
{
- entity: "raquo",
- value: "U+000BB"
+ "entity": "raquo",
+ "value": "U+000BB"
},
{
- entity: "rarr;",
- value: "U+02192"
+ "entity": "rarr;",
+ "value": "U+02192"
},
{
- entity: "rarrap;",
- value: "U+02975"
+ "entity": "rarrap;",
+ "value": "U+02975"
},
{
- entity: "rarrb;",
- value: "U+021E5"
+ "entity": "rarrb;",
+ "value": "U+021E5"
},
{
- entity: "rarrbfs;",
- value: "U+02920"
+ "entity": "rarrbfs;",
+ "value": "U+02920"
},
{
- entity: "rarrc;",
- value: "U+02933"
+ "entity": "rarrc;",
+ "value": "U+02933"
},
{
- entity: "rarrfs;",
- value: "U+0291E"
+ "entity": "rarrfs;",
+ "value": "U+0291E"
},
{
- entity: "rarrhk;",
- value: "U+021AA"
+ "entity": "rarrhk;",
+ "value": "U+021AA"
},
{
- entity: "rarrlp;",
- value: "U+021AC"
+ "entity": "rarrlp;",
+ "value": "U+021AC"
},
{
- entity: "rarrpl;",
- value: "U+02945"
+ "entity": "rarrpl;",
+ "value": "U+02945"
},
{
- entity: "rarrsim;",
- value: "U+02974"
+ "entity": "rarrsim;",
+ "value": "U+02974"
},
{
- entity: "rarrtl;",
- value: "U+021A3"
+ "entity": "rarrtl;",
+ "value": "U+021A3"
},
{
- entity: "rarrw;",
- value: "U+0219D"
+ "entity": "rarrw;",
+ "value": "U+0219D"
},
{
- entity: "ratail;",
- value: "U+0291A"
+ "entity": "ratail;",
+ "value": "U+0291A"
},
{
- entity: "ratio;",
- value: "U+02236"
+ "entity": "ratio;",
+ "value": "U+02236"
},
{
- entity: "rationals;",
- value: "U+0211A"
+ "entity": "rationals;",
+ "value": "U+0211A"
},
{
- entity: "rbarr;",
- value: "U+0290D"
+ "entity": "rbarr;",
+ "value": "U+0290D"
},
{
- entity: "rbbrk;",
- value: "U+02773"
+ "entity": "rbbrk;",
+ "value": "U+02773"
},
{
- entity: "rbrace;",
- value: "U+0007D"
+ "entity": "rbrace;",
+ "value": "U+0007D"
},
{
- entity: "rbrack;",
- value: "U+0005D"
+ "entity": "rbrack;",
+ "value": "U+0005D"
},
{
- entity: "rbrke;",
- value: "U+0298C"
+ "entity": "rbrke;",
+ "value": "U+0298C"
},
{
- entity: "rbrksld;",
- value: "U+0298E"
+ "entity": "rbrksld;",
+ "value": "U+0298E"
},
{
- entity: "rbrkslu;",
- value: "U+02990"
+ "entity": "rbrkslu;",
+ "value": "U+02990"
},
{
- entity: "rcaron;",
- value: "U+00159"
+ "entity": "rcaron;",
+ "value": "U+00159"
},
{
- entity: "rcedil;",
- value: "U+00157"
+ "entity": "rcedil;",
+ "value": "U+00157"
},
{
- entity: "rceil;",
- value: "U+02309"
+ "entity": "rceil;",
+ "value": "U+02309"
},
{
- entity: "rcub;",
- value: "U+0007D"
+ "entity": "rcub;",
+ "value": "U+0007D"
},
{
- entity: "rcy;",
- value: "U+00440"
+ "entity": "rcy;",
+ "value": "U+00440"
},
{
- entity: "rdca;",
- value: "U+02937"
+ "entity": "rdca;",
+ "value": "U+02937"
},
{
- entity: "rdldhar;",
- value: "U+02969"
+ "entity": "rdldhar;",
+ "value": "U+02969"
},
{
- entity: "rdquo;",
- value: "U+0201D"
+ "entity": "rdquo;",
+ "value": "U+0201D"
},
{
- entity: "rdquor;",
- value: "U+0201D"
+ "entity": "rdquor;",
+ "value": "U+0201D"
},
{
- entity: "rdsh;",
- value: "U+021B3"
+ "entity": "rdsh;",
+ "value": "U+021B3"
},
{
- entity: "real;",
- value: "U+0211C"
+ "entity": "real;",
+ "value": "U+0211C"
},
{
- entity: "realine;",
- value: "U+0211B"
+ "entity": "realine;",
+ "value": "U+0211B"
},
{
- entity: "realpart;",
- value: "U+0211C"
+ "entity": "realpart;",
+ "value": "U+0211C"
},
{
- entity: "reals;",
- value: "U+0211D"
+ "entity": "reals;",
+ "value": "U+0211D"
},
{
- entity: "rect;",
- value: "U+025AD"
+ "entity": "rect;",
+ "value": "U+025AD"
},
{
- entity: "reg;",
- value: "U+000AE"
+ "entity": "reg;",
+ "value": "U+000AE"
},
{
- entity: "reg",
- value: "U+000AE"
+ "entity": "reg",
+ "value": "U+000AE"
},
{
- entity: "rfisht;",
- value: "U+0297D"
+ "entity": "rfisht;",
+ "value": "U+0297D"
},
{
- entity: "rfloor;",
- value: "U+0230B"
+ "entity": "rfloor;",
+ "value": "U+0230B"
},
{
- entity: "rfr;",
- value: "U+1D52F"
+ "entity": "rfr;",
+ "value": "U+1D52F"
},
{
- entity: "rhard;",
- value: "U+021C1"
+ "entity": "rhard;",
+ "value": "U+021C1"
},
{
- entity: "rharu;",
- value: "U+021C0"
+ "entity": "rharu;",
+ "value": "U+021C0"
},
{
- entity: "rharul;",
- value: "U+0296C"
+ "entity": "rharul;",
+ "value": "U+0296C"
},
{
- entity: "rho;",
- value: "U+003C1"
+ "entity": "rho;",
+ "value": "U+003C1"
},
{
- entity: "rhov;",
- value: "U+003F1"
+ "entity": "rhov;",
+ "value": "U+003F1"
},
{
- entity: "rightarrow;",
- value: "U+02192"
+ "entity": "rightarrow;",
+ "value": "U+02192"
},
{
- entity: "rightarrowtail;",
- value: "U+021A3"
+ "entity": "rightarrowtail;",
+ "value": "U+021A3"
},
{
- entity: "rightharpoondown;",
- value: "U+021C1"
+ "entity": "rightharpoondown;",
+ "value": "U+021C1"
},
{
- entity: "rightharpoonup;",
- value: "U+021C0"
+ "entity": "rightharpoonup;",
+ "value": "U+021C0"
},
{
- entity: "rightleftarrows;",
- value: "U+021C4"
+ "entity": "rightleftarrows;",
+ "value": "U+021C4"
},
{
- entity: "rightleftharpoons;",
- value: "U+021CC"
+ "entity": "rightleftharpoons;",
+ "value": "U+021CC"
},
{
- entity: "rightrightarrows;",
- value: "U+021C9"
+ "entity": "rightrightarrows;",
+ "value": "U+021C9"
},
{
- entity: "rightsquigarrow;",
- value: "U+0219D"
+ "entity": "rightsquigarrow;",
+ "value": "U+0219D"
},
{
- entity: "rightthreetimes;",
- value: "U+022CC"
+ "entity": "rightthreetimes;",
+ "value": "U+022CC"
},
{
- entity: "ring;",
- value: "U+002DA"
+ "entity": "ring;",
+ "value": "U+002DA"
},
{
- entity: "risingdotseq;",
- value: "U+02253"
+ "entity": "risingdotseq;",
+ "value": "U+02253"
},
{
- entity: "rlarr;",
- value: "U+021C4"
+ "entity": "rlarr;",
+ "value": "U+021C4"
},
{
- entity: "rlhar;",
- value: "U+021CC"
+ "entity": "rlhar;",
+ "value": "U+021CC"
},
{
- entity: "rlm;",
- value: "U+0200F"
+ "entity": "rlm;",
+ "value": "U+0200F"
},
{
- entity: "rmoust;",
- value: "U+023B1"
+ "entity": "rmoust;",
+ "value": "U+023B1"
},
{
- entity: "rmoustache;",
- value: "U+023B1"
+ "entity": "rmoustache;",
+ "value": "U+023B1"
},
{
- entity: "rnmid;",
- value: "U+02AEE"
+ "entity": "rnmid;",
+ "value": "U+02AEE"
},
{
- entity: "roang;",
- value: "U+027ED"
+ "entity": "roang;",
+ "value": "U+027ED"
},
{
- entity: "roarr;",
- value: "U+021FE"
+ "entity": "roarr;",
+ "value": "U+021FE"
},
{
- entity: "robrk;",
- value: "U+027E7"
+ "entity": "robrk;",
+ "value": "U+027E7"
},
{
- entity: "ropar;",
- value: "U+02986"
+ "entity": "ropar;",
+ "value": "U+02986"
},
{
- entity: "ropf;",
- value: "U+1D563"
+ "entity": "ropf;",
+ "value": "U+1D563"
},
{
- entity: "roplus;",
- value: "U+02A2E"
+ "entity": "roplus;",
+ "value": "U+02A2E"
},
{
- entity: "rotimes;",
- value: "U+02A35"
+ "entity": "rotimes;",
+ "value": "U+02A35"
},
{
- entity: "rpar;",
- value: "U+00029"
+ "entity": "rpar;",
+ "value": "U+00029"
},
{
- entity: "rpargt;",
- value: "U+02994"
+ "entity": "rpargt;",
+ "value": "U+02994"
},
{
- entity: "rppolint;",
- value: "U+02A12"
+ "entity": "rppolint;",
+ "value": "U+02A12"
},
{
- entity: "rrarr;",
- value: "U+021C9"
+ "entity": "rrarr;",
+ "value": "U+021C9"
},
{
- entity: "rsaquo;",
- value: "U+0203A"
+ "entity": "rsaquo;",
+ "value": "U+0203A"
},
{
- entity: "rscr;",
- value: "U+1D4C7"
+ "entity": "rscr;",
+ "value": "U+1D4C7"
},
{
- entity: "rsh;",
- value: "U+021B1"
+ "entity": "rsh;",
+ "value": "U+021B1"
},
{
- entity: "rsqb;",
- value: "U+0005D"
+ "entity": "rsqb;",
+ "value": "U+0005D"
},
{
- entity: "rsquo;",
- value: "U+02019"
+ "entity": "rsquo;",
+ "value": "U+02019"
},
{
- entity: "rsquor;",
- value: "U+02019"
+ "entity": "rsquor;",
+ "value": "U+02019"
},
{
- entity: "rthree;",
- value: "U+022CC"
+ "entity": "rthree;",
+ "value": "U+022CC"
},
{
- entity: "rtimes;",
- value: "U+022CA"
+ "entity": "rtimes;",
+ "value": "U+022CA"
},
{
- entity: "rtri;",
- value: "U+025B9"
+ "entity": "rtri;",
+ "value": "U+025B9"
},
{
- entity: "rtrie;",
- value: "U+022B5"
+ "entity": "rtrie;",
+ "value": "U+022B5"
},
{
- entity: "rtrif;",
- value: "U+025B8"
+ "entity": "rtrif;",
+ "value": "U+025B8"
},
{
- entity: "rtriltri;",
- value: "U+029CE"
+ "entity": "rtriltri;",
+ "value": "U+029CE"
},
{
- entity: "ruluhar;",
- value: "U+02968"
+ "entity": "ruluhar;",
+ "value": "U+02968"
},
{
- entity: "rx;",
- value: "U+0211E"
+ "entity": "rx;",
+ "value": "U+0211E"
},
{
- entity: "sacute;",
- value: "U+0015B"
+ "entity": "sacute;",
+ "value": "U+0015B"
},
{
- entity: "sbquo;",
- value: "U+0201A"
+ "entity": "sbquo;",
+ "value": "U+0201A"
},
{
- entity: "sc;",
- value: "U+0227B"
+ "entity": "sc;",
+ "value": "U+0227B"
},
{
- entity: "scE;",
- value: "U+02AB4"
+ "entity": "scE;",
+ "value": "U+02AB4"
},
{
- entity: "scap;",
- value: "U+02AB8"
+ "entity": "scap;",
+ "value": "U+02AB8"
},
{
- entity: "scaron;",
- value: "U+00161"
+ "entity": "scaron;",
+ "value": "U+00161"
},
{
- entity: "sccue;",
- value: "U+0227D"
+ "entity": "sccue;",
+ "value": "U+0227D"
},
{
- entity: "sce;",
- value: "U+02AB0"
+ "entity": "sce;",
+ "value": "U+02AB0"
},
{
- entity: "scedil;",
- value: "U+0015F"
+ "entity": "scedil;",
+ "value": "U+0015F"
},
{
- entity: "scirc;",
- value: "U+0015D"
+ "entity": "scirc;",
+ "value": "U+0015D"
},
{
- entity: "scnE;",
- value: "U+02AB6"
+ "entity": "scnE;",
+ "value": "U+02AB6"
},
{
- entity: "scnap;",
- value: "U+02ABA"
+ "entity": "scnap;",
+ "value": "U+02ABA"
},
{
- entity: "scnsim;",
- value: "U+022E9"
+ "entity": "scnsim;",
+ "value": "U+022E9"
},
{
- entity: "scpolint;",
- value: "U+02A13"
+ "entity": "scpolint;",
+ "value": "U+02A13"
},
{
- entity: "scsim;",
- value: "U+0227F"
+ "entity": "scsim;",
+ "value": "U+0227F"
},
{
- entity: "scy;",
- value: "U+00441"
+ "entity": "scy;",
+ "value": "U+00441"
},
{
- entity: "sdot;",
- value: "U+022C5"
+ "entity": "sdot;",
+ "value": "U+022C5"
},
{
- entity: "sdotb;",
- value: "U+022A1"
+ "entity": "sdotb;",
+ "value": "U+022A1"
},
{
- entity: "sdote;",
- value: "U+02A66"
+ "entity": "sdote;",
+ "value": "U+02A66"
},
{
- entity: "seArr;",
- value: "U+021D8"
+ "entity": "seArr;",
+ "value": "U+021D8"
},
{
- entity: "searhk;",
- value: "U+02925"
+ "entity": "searhk;",
+ "value": "U+02925"
},
{
- entity: "searr;",
- value: "U+02198"
+ "entity": "searr;",
+ "value": "U+02198"
},
{
- entity: "searrow;",
- value: "U+02198"
+ "entity": "searrow;",
+ "value": "U+02198"
},
{
- entity: "sect;",
- value: "U+000A7"
+ "entity": "sect;",
+ "value": "U+000A7"
},
{
- entity: "sect",
- value: "U+000A7"
+ "entity": "sect",
+ "value": "U+000A7"
},
{
- entity: "semi;",
- value: "U+0003B"
+ "entity": "semi;",
+ "value": "U+0003B"
},
{
- entity: "seswar;",
- value: "U+02929"
+ "entity": "seswar;",
+ "value": "U+02929"
},
{
- entity: "setminus;",
- value: "U+02216"
+ "entity": "setminus;",
+ "value": "U+02216"
},
{
- entity: "setmn;",
- value: "U+02216"
+ "entity": "setmn;",
+ "value": "U+02216"
},
{
- entity: "sext;",
- value: "U+02736"
+ "entity": "sext;",
+ "value": "U+02736"
},
{
- entity: "sfr;",
- value: "U+1D530"
+ "entity": "sfr;",
+ "value": "U+1D530"
},
{
- entity: "sfrown;",
- value: "U+02322"
+ "entity": "sfrown;",
+ "value": "U+02322"
},
{
- entity: "sharp;",
- value: "U+0266F"
+ "entity": "sharp;",
+ "value": "U+0266F"
},
{
- entity: "shchcy;",
- value: "U+00449"
+ "entity": "shchcy;",
+ "value": "U+00449"
},
{
- entity: "shcy;",
- value: "U+00448"
+ "entity": "shcy;",
+ "value": "U+00448"
},
{
- entity: "shortmid;",
- value: "U+02223"
+ "entity": "shortmid;",
+ "value": "U+02223"
},
{
- entity: "shortparallel;",
- value: "U+02225"
+ "entity": "shortparallel;",
+ "value": "U+02225"
},
{
- entity: "shy;",
- value: "U+000AD "
+ "entity": "shy;",
+ "value": "U+000AD "
},
{
- entity: "shy",
- value: "U+000AD "
+ "entity": "shy",
+ "value": "U+000AD "
},
{
- entity: "sigma;",
- value: "U+003C3"
+ "entity": "sigma;",
+ "value": "U+003C3"
},
{
- entity: "sigmaf;",
- value: "U+003C2"
+ "entity": "sigmaf;",
+ "value": "U+003C2"
},
{
- entity: "sigmav;",
- value: "U+003C2"
+ "entity": "sigmav;",
+ "value": "U+003C2"
},
{
- entity: "sim;",
- value: "U+0223C"
+ "entity": "sim;",
+ "value": "U+0223C"
},
{
- entity: "simdot;",
- value: "U+02A6A"
+ "entity": "simdot;",
+ "value": "U+02A6A"
},
{
- entity: "sime;",
- value: "U+02243"
+ "entity": "sime;",
+ "value": "U+02243"
},
{
- entity: "simeq;",
- value: "U+02243"
+ "entity": "simeq;",
+ "value": "U+02243"
},
{
- entity: "simg;",
- value: "U+02A9E"
+ "entity": "simg;",
+ "value": "U+02A9E"
},
{
- entity: "simgE;",
- value: "U+02AA0"
+ "entity": "simgE;",
+ "value": "U+02AA0"
},
{
- entity: "siml;",
- value: "U+02A9D"
+ "entity": "siml;",
+ "value": "U+02A9D"
},
{
- entity: "simlE;",
- value: "U+02A9F"
+ "entity": "simlE;",
+ "value": "U+02A9F"
},
{
- entity: "simne;",
- value: "U+02246"
+ "entity": "simne;",
+ "value": "U+02246"
},
{
- entity: "simplus;",
- value: "U+02A24"
+ "entity": "simplus;",
+ "value": "U+02A24"
},
{
- entity: "simrarr;",
- value: "U+02972"
+ "entity": "simrarr;",
+ "value": "U+02972"
},
{
- entity: "slarr;",
- value: "U+02190"
+ "entity": "slarr;",
+ "value": "U+02190"
},
{
- entity: "smallsetminus;",
- value: "U+02216"
+ "entity": "smallsetminus;",
+ "value": "U+02216"
},
{
- entity: "smashp;",
- value: "U+02A33"
+ "entity": "smashp;",
+ "value": "U+02A33"
},
{
- entity: "smeparsl;",
- value: "U+029E4"
+ "entity": "smeparsl;",
+ "value": "U+029E4"
},
{
- entity: "smid;",
- value: "U+02223"
+ "entity": "smid;",
+ "value": "U+02223"
},
{
- entity: "smile;",
- value: "U+02323"
+ "entity": "smile;",
+ "value": "U+02323"
},
{
- entity: "smt;",
- value: "U+02AAA"
+ "entity": "smt;",
+ "value": "U+02AAA"
},
{
- entity: "smte;",
- value: "U+02AAC"
+ "entity": "smte;",
+ "value": "U+02AAC"
},
{
- entity: "softcy;",
- value: "U+0044C"
+ "entity": "softcy;",
+ "value": "U+0044C"
},
{
- entity: "sol;",
- value: "U+0002F"
+ "entity": "sol;",
+ "value": "U+0002F"
},
{
- entity: "solb;",
- value: "U+029C4"
+ "entity": "solb;",
+ "value": "U+029C4"
},
{
- entity: "solbar;",
- value: "U+0233F"
+ "entity": "solbar;",
+ "value": "U+0233F"
},
{
- entity: "sopf;",
- value: "U+1D564"
+ "entity": "sopf;",
+ "value": "U+1D564"
},
{
- entity: "spades;",
- value: "U+02660"
+ "entity": "spades;",
+ "value": "U+02660"
},
{
- entity: "spadesuit;",
- value: "U+02660"
+ "entity": "spadesuit;",
+ "value": "U+02660"
},
{
- entity: "spar;",
- value: "U+02225"
+ "entity": "spar;",
+ "value": "U+02225"
},
{
- entity: "sqcap;",
- value: "U+02293"
+ "entity": "sqcap;",
+ "value": "U+02293"
},
{
- entity: "sqcup;",
- value: "U+02294"
+ "entity": "sqcup;",
+ "value": "U+02294"
},
{
- entity: "sqsub;",
- value: "U+0228F"
+ "entity": "sqsub;",
+ "value": "U+0228F"
},
{
- entity: "sqsube;",
- value: "U+02291"
+ "entity": "sqsube;",
+ "value": "U+02291"
},
{
- entity: "sqsubset;",
- value: "U+0228F"
+ "entity": "sqsubset;",
+ "value": "U+0228F"
},
{
- entity: "sqsubseteq;",
- value: "U+02291"
+ "entity": "sqsubseteq;",
+ "value": "U+02291"
},
{
- entity: "sqsup;",
- value: "U+02290"
+ "entity": "sqsup;",
+ "value": "U+02290"
},
{
- entity: "sqsupe;",
- value: "U+02292"
+ "entity": "sqsupe;",
+ "value": "U+02292"
},
{
- entity: "sqsupset;",
- value: "U+02290"
+ "entity": "sqsupset;",
+ "value": "U+02290"
},
{
- entity: "sqsupseteq;",
- value: "U+02292"
+ "entity": "sqsupseteq;",
+ "value": "U+02292"
},
{
- entity: "squ;",
- value: "U+025A1"
+ "entity": "squ;",
+ "value": "U+025A1"
},
{
- entity: "square;",
- value: "U+025A1"
+ "entity": "square;",
+ "value": "U+025A1"
},
{
- entity: "squarf;",
- value: "U+025AA"
+ "entity": "squarf;",
+ "value": "U+025AA"
},
{
- entity: "squf;",
- value: "U+025AA"
+ "entity": "squf;",
+ "value": "U+025AA"
},
{
- entity: "srarr;",
- value: "U+02192"
+ "entity": "srarr;",
+ "value": "U+02192"
},
{
- entity: "sscr;",
- value: "U+1D4C8"
+ "entity": "sscr;",
+ "value": "U+1D4C8"
},
{
- entity: "ssetmn;",
- value: "U+02216"
+ "entity": "ssetmn;",
+ "value": "U+02216"
},
{
- entity: "ssmile;",
- value: "U+02323"
+ "entity": "ssmile;",
+ "value": "U+02323"
},
{
- entity: "sstarf;",
- value: "U+022C6"
+ "entity": "sstarf;",
+ "value": "U+022C6"
},
{
- entity: "star;",
- value: "U+02606"
+ "entity": "star;",
+ "value": "U+02606"
},
{
- entity: "starf;",
- value: "U+02605"
+ "entity": "starf;",
+ "value": "U+02605"
},
{
- entity: "straightepsilon;",
- value: "U+003F5"
+ "entity": "straightepsilon;",
+ "value": "U+003F5"
},
{
- entity: "straightphi;",
- value: "U+003D5"
+ "entity": "straightphi;",
+ "value": "U+003D5"
},
{
- entity: "strns;",
- value: "U+000AF"
+ "entity": "strns;",
+ "value": "U+000AF"
},
{
- entity: "sub;",
- value: "U+02282"
+ "entity": "sub;",
+ "value": "U+02282"
},
{
- entity: "subE;",
- value: "U+02AC5"
+ "entity": "subE;",
+ "value": "U+02AC5"
},
{
- entity: "subdot;",
- value: "U+02ABD"
+ "entity": "subdot;",
+ "value": "U+02ABD"
},
{
- entity: "sube;",
- value: "U+02286"
+ "entity": "sube;",
+ "value": "U+02286"
},
{
- entity: "subedot;",
- value: "U+02AC3"
+ "entity": "subedot;",
+ "value": "U+02AC3"
},
{
- entity: "submult;",
- value: "U+02AC1"
+ "entity": "submult;",
+ "value": "U+02AC1"
},
{
- entity: "subnE;",
- value: "U+02ACB"
+ "entity": "subnE;",
+ "value": "U+02ACB"
},
{
- entity: "subne;",
- value: "U+0228A"
+ "entity": "subne;",
+ "value": "U+0228A"
},
{
- entity: "subplus;",
- value: "U+02ABF"
+ "entity": "subplus;",
+ "value": "U+02ABF"
},
{
- entity: "subrarr;",
- value: "U+02979"
+ "entity": "subrarr;",
+ "value": "U+02979"
},
{
- entity: "subset;",
- value: "U+02282"
+ "entity": "subset;",
+ "value": "U+02282"
},
{
- entity: "subseteq;",
- value: "U+02286"
+ "entity": "subseteq;",
+ "value": "U+02286"
},
{
- entity: "subseteqq;",
- value: "U+02AC5"
+ "entity": "subseteqq;",
+ "value": "U+02AC5"
},
{
- entity: "subsetneq;",
- value: "U+0228A"
+ "entity": "subsetneq;",
+ "value": "U+0228A"
},
{
- entity: "subsetneqq;",
- value: "U+02ACB"
+ "entity": "subsetneqq;",
+ "value": "U+02ACB"
},
{
- entity: "subsim;",
- value: "U+02AC7"
+ "entity": "subsim;",
+ "value": "U+02AC7"
},
{
- entity: "subsub;",
- value: "U+02AD5"
+ "entity": "subsub;",
+ "value": "U+02AD5"
},
{
- entity: "subsup;",
- value: "U+02AD3"
+ "entity": "subsup;",
+ "value": "U+02AD3"
},
{
- entity: "succ;",
- value: "U+0227B"
+ "entity": "succ;",
+ "value": "U+0227B"
},
{
- entity: "succapprox;",
- value: "U+02AB8"
+ "entity": "succapprox;",
+ "value": "U+02AB8"
},
{
- entity: "succcurlyeq;",
- value: "U+0227D"
+ "entity": "succcurlyeq;",
+ "value": "U+0227D"
},
{
- entity: "succeq;",
- value: "U+02AB0"
+ "entity": "succeq;",
+ "value": "U+02AB0"
},
{
- entity: "succnapprox;",
- value: "U+02ABA"
+ "entity": "succnapprox;",
+ "value": "U+02ABA"
},
{
- entity: "succneqq;",
- value: "U+02AB6"
+ "entity": "succneqq;",
+ "value": "U+02AB6"
},
{
- entity: "succnsim;",
- value: "U+022E9"
+ "entity": "succnsim;",
+ "value": "U+022E9"
},
{
- entity: "succsim;",
- value: "U+0227F"
+ "entity": "succsim;",
+ "value": "U+0227F"
},
{
- entity: "sum;",
- value: "U+02211"
+ "entity": "sum;",
+ "value": "U+02211"
},
{
- entity: "sung;",
- value: "U+0266A"
+ "entity": "sung;",
+ "value": "U+0266A"
},
{
- entity: "sup1;",
- value: "U+000B9"
+ "entity": "sup1;",
+ "value": "U+000B9"
},
{
- entity: "sup1",
- value: "U+000B9"
+ "entity": "sup1",
+ "value": "U+000B9"
},
{
- entity: "sup2;",
- value: "U+000B2"
+ "entity": "sup2;",
+ "value": "U+000B2"
},
{
- entity: "sup2",
- value: "U+000B2"
+ "entity": "sup2",
+ "value": "U+000B2"
},
{
- entity: "sup3;",
- value: "U+000B3"
+ "entity": "sup3;",
+ "value": "U+000B3"
},
{
- entity: "sup3",
- value: "U+000B3"
+ "entity": "sup3",
+ "value": "U+000B3"
},
{
- entity: "sup;",
- value: "U+02283"
+ "entity": "sup;",
+ "value": "U+02283"
},
{
- entity: "supE;",
- value: "U+02AC6"
+ "entity": "supE;",
+ "value": "U+02AC6"
},
{
- entity: "supdot;",
- value: "U+02ABE"
+ "entity": "supdot;",
+ "value": "U+02ABE"
},
{
- entity: "supdsub;",
- value: "U+02AD8"
+ "entity": "supdsub;",
+ "value": "U+02AD8"
},
{
- entity: "supe;",
- value: "U+02287"
+ "entity": "supe;",
+ "value": "U+02287"
},
{
- entity: "supedot;",
- value: "U+02AC4"
+ "entity": "supedot;",
+ "value": "U+02AC4"
},
{
- entity: "suphsol;",
- value: "U+027C9"
+ "entity": "suphsol;",
+ "value": "U+027C9"
},
{
- entity: "suphsub;",
- value: "U+02AD7"
+ "entity": "suphsub;",
+ "value": "U+02AD7"
},
{
- entity: "suplarr;",
- value: "U+0297B"
+ "entity": "suplarr;",
+ "value": "U+0297B"
},
{
- entity: "supmult;",
- value: "U+02AC2"
+ "entity": "supmult;",
+ "value": "U+02AC2"
},
{
- entity: "supnE;",
- value: "U+02ACC"
+ "entity": "supnE;",
+ "value": "U+02ACC"
},
{
- entity: "supne;",
- value: "U+0228B"
+ "entity": "supne;",
+ "value": "U+0228B"
},
{
- entity: "supplus;",
- value: "U+02AC0"
+ "entity": "supplus;",
+ "value": "U+02AC0"
},
{
- entity: "supset;",
- value: "U+02283"
+ "entity": "supset;",
+ "value": "U+02283"
},
{
- entity: "supseteq;",
- value: "U+02287"
+ "entity": "supseteq;",
+ "value": "U+02287"
},
{
- entity: "supseteqq;",
- value: "U+02AC6"
+ "entity": "supseteqq;",
+ "value": "U+02AC6"
},
{
- entity: "supsetneq;",
- value: "U+0228B"
+ "entity": "supsetneq;",
+ "value": "U+0228B"
},
{
- entity: "supsetneqq;",
- value: "U+02ACC"
+ "entity": "supsetneqq;",
+ "value": "U+02ACC"
},
{
- entity: "supsim;",
- value: "U+02AC8"
+ "entity": "supsim;",
+ "value": "U+02AC8"
},
{
- entity: "supsub;",
- value: "U+02AD4"
+ "entity": "supsub;",
+ "value": "U+02AD4"
},
{
- entity: "supsup;",
- value: "U+02AD6"
+ "entity": "supsup;",
+ "value": "U+02AD6"
},
{
- entity: "swArr;",
- value: "U+021D9"
+ "entity": "swArr;",
+ "value": "U+021D9"
},
{
- entity: "swarhk;",
- value: "U+02926"
+ "entity": "swarhk;",
+ "value": "U+02926"
},
{
- entity: "swarr;",
- value: "U+02199"
+ "entity": "swarr;",
+ "value": "U+02199"
},
{
- entity: "swarrow;",
- value: "U+02199"
+ "entity": "swarrow;",
+ "value": "U+02199"
},
{
- entity: "swnwar;",
- value: "U+0292A"
+ "entity": "swnwar;",
+ "value": "U+0292A"
},
{
- entity: "szlig;",
- value: "U+000DF"
+ "entity": "szlig;",
+ "value": "U+000DF"
},
{
- entity: "szlig",
- value: "U+000DF"
+ "entity": "szlig",
+ "value": "U+000DF"
},
{
- entity: "target;",
- value: "U+02316"
+ "entity": "target;",
+ "value": "U+02316"
},
{
- entity: "tau;",
- value: "U+003C4"
+ "entity": "tau;",
+ "value": "U+003C4"
},
{
- entity: "tbrk;",
- value: "U+023B4"
+ "entity": "tbrk;",
+ "value": "U+023B4"
},
{
- entity: "tcaron;",
- value: "U+00165"
+ "entity": "tcaron;",
+ "value": "U+00165"
},
{
- entity: "tcedil;",
- value: "U+00163"
+ "entity": "tcedil;",
+ "value": "U+00163"
},
{
- entity: "tcy;",
- value: "U+00442"
+ "entity": "tcy;",
+ "value": "U+00442"
},
{
- entity: "tdot;",
- value: "U+020DB"
+ "entity": "tdot;",
+ "value": "U+020DB"
},
{
- entity: "telrec;",
- value: "U+02315"
+ "entity": "telrec;",
+ "value": "U+02315"
},
{
- entity: "tfr;",
- value: "U+1D531"
+ "entity": "tfr;",
+ "value": "U+1D531"
},
{
- entity: "there4;",
- value: "U+02234"
+ "entity": "there4;",
+ "value": "U+02234"
},
{
- entity: "therefore;",
- value: "U+02234"
+ "entity": "therefore;",
+ "value": "U+02234"
},
{
- entity: "theta;",
- value: "U+003B8"
+ "entity": "theta;",
+ "value": "U+003B8"
},
{
- entity: "thetasym;",
- value: "U+003D1"
+ "entity": "thetasym;",
+ "value": "U+003D1"
},
{
- entity: "thetav;",
- value: "U+003D1"
+ "entity": "thetav;",
+ "value": "U+003D1"
},
{
- entity: "thickapprox;",
- value: "U+02248"
+ "entity": "thickapprox;",
+ "value": "U+02248"
},
{
- entity: "thicksim;",
- value: "U+0223C"
+ "entity": "thicksim;",
+ "value": "U+0223C"
},
{
- entity: "thinsp;",
- value: "U+02009"
+ "entity": "thinsp;",
+ "value": "U+02009"
},
{
- entity: "thkap;",
- value: "U+02248"
+ "entity": "thkap;",
+ "value": "U+02248"
},
{
- entity: "thksim;",
- value: "U+0223C"
+ "entity": "thksim;",
+ "value": "U+0223C"
},
{
- entity: "thorn;",
- value: "U+000FE"
+ "entity": "thorn;",
+ "value": "U+000FE"
},
{
- entity: "thorn",
- value: "U+000FE"
+ "entity": "thorn",
+ "value": "U+000FE"
},
{
- entity: "tilde;",
- value: "U+002DC"
+ "entity": "tilde;",
+ "value": "U+002DC"
},
{
- entity: "times;",
- value: "U+000D7"
+ "entity": "times;",
+ "value": "U+000D7"
},
{
- entity: "times",
- value: "U+000D7"
+ "entity": "times",
+ "value": "U+000D7"
},
{
- entity: "timesb;",
- value: "U+022A0"
+ "entity": "timesb;",
+ "value": "U+022A0"
},
{
- entity: "timesbar;",
- value: "U+02A31"
+ "entity": "timesbar;",
+ "value": "U+02A31"
},
{
- entity: "timesd;",
- value: "U+02A30"
+ "entity": "timesd;",
+ "value": "U+02A30"
},
{
- entity: "tint;",
- value: "U+0222D"
+ "entity": "tint;",
+ "value": "U+0222D"
},
{
- entity: "toea;",
- value: "U+02928"
+ "entity": "toea;",
+ "value": "U+02928"
},
{
- entity: "top;",
- value: "U+022A4"
+ "entity": "top;",
+ "value": "U+022A4"
},
{
- entity: "topbot;",
- value: "U+02336"
+ "entity": "topbot;",
+ "value": "U+02336"
},
{
- entity: "topcir;",
- value: "U+02AF1"
+ "entity": "topcir;",
+ "value": "U+02AF1"
},
{
- entity: "topf;",
- value: "U+1D565"
+ "entity": "topf;",
+ "value": "U+1D565"
},
{
- entity: "topfork;",
- value: "U+02ADA"
+ "entity": "topfork;",
+ "value": "U+02ADA"
},
{
- entity: "tosa;",
- value: "U+02929"
+ "entity": "tosa;",
+ "value": "U+02929"
},
{
- entity: "tprime;",
- value: "U+02034"
+ "entity": "tprime;",
+ "value": "U+02034"
},
{
- entity: "trade;",
- value: "U+02122"
+ "entity": "trade;",
+ "value": "U+02122"
},
{
- entity: "triangle;",
- value: "U+025B5"
+ "entity": "triangle;",
+ "value": "U+025B5"
},
{
- entity: "triangledown;",
- value: "U+025BF"
+ "entity": "triangledown;",
+ "value": "U+025BF"
},
{
- entity: "triangleleft;",
- value: "U+025C3"
+ "entity": "triangleleft;",
+ "value": "U+025C3"
},
{
- entity: "trianglelefteq;",
- value: "U+022B4"
+ "entity": "trianglelefteq;",
+ "value": "U+022B4"
},
{
- entity: "triangleq;",
- value: "U+0225C"
+ "entity": "triangleq;",
+ "value": "U+0225C"
},
{
- entity: "triangleright;",
- value: "U+025B9"
+ "entity": "triangleright;",
+ "value": "U+025B9"
},
{
- entity: "trianglerighteq;",
- value: "U+022B5"
+ "entity": "trianglerighteq;",
+ "value": "U+022B5"
},
{
- entity: "tridot;",
- value: "U+025EC"
+ "entity": "tridot;",
+ "value": "U+025EC"
},
{
- entity: "trie;",
- value: "U+0225C"
+ "entity": "trie;",
+ "value": "U+0225C"
},
{
- entity: "triminus;",
- value: "U+02A3A"
+ "entity": "triminus;",
+ "value": "U+02A3A"
},
{
- entity: "triplus;",
- value: "U+02A39"
+ "entity": "triplus;",
+ "value": "U+02A39"
},
{
- entity: "trisb;",
- value: "U+029CD"
+ "entity": "trisb;",
+ "value": "U+029CD"
},
{
- entity: "tritime;",
- value: "U+02A3B"
+ "entity": "tritime;",
+ "value": "U+02A3B"
},
{
- entity: "trpezium;",
- value: "U+023E2"
+ "entity": "trpezium;",
+ "value": "U+023E2"
},
{
- entity: "tscr;",
- value: "U+1D4C9"
+ "entity": "tscr;",
+ "value": "U+1D4C9"
},
{
- entity: "tscy;",
- value: "U+00446"
+ "entity": "tscy;",
+ "value": "U+00446"
},
{
- entity: "tshcy;",
- value: "U+0045B"
+ "entity": "tshcy;",
+ "value": "U+0045B"
},
{
- entity: "tstrok;",
- value: "U+00167"
+ "entity": "tstrok;",
+ "value": "U+00167"
},
{
- entity: "twixt;",
- value: "U+0226C"
+ "entity": "twixt;",
+ "value": "U+0226C"
},
{
- entity: "twoheadleftarrow;",
- value: "U+0219E"
+ "entity": "twoheadleftarrow;",
+ "value": "U+0219E"
},
{
- entity: "twoheadrightarrow;",
- value: "U+021A0"
+ "entity": "twoheadrightarrow;",
+ "value": "U+021A0"
},
{
- entity: "uArr;",
- value: "U+021D1"
+ "entity": "uArr;",
+ "value": "U+021D1"
},
{
- entity: "uHar;",
- value: "U+02963"
+ "entity": "uHar;",
+ "value": "U+02963"
},
{
- entity: "uacute;",
- value: "U+000FA"
+ "entity": "uacute;",
+ "value": "U+000FA"
},
{
- entity: "uacute",
- value: "U+000FA"
+ "entity": "uacute",
+ "value": "U+000FA"
},
{
- entity: "uarr;",
- value: "U+02191"
+ "entity": "uarr;",
+ "value": "U+02191"
},
{
- entity: "ubrcy;",
- value: "U+0045E"
+ "entity": "ubrcy;",
+ "value": "U+0045E"
},
{
- entity: "ubreve;",
- value: "U+0016D"
+ "entity": "ubreve;",
+ "value": "U+0016D"
},
{
- entity: "ucirc;",
- value: "U+000FB"
+ "entity": "ucirc;",
+ "value": "U+000FB"
},
{
- entity: "ucirc",
- value: "U+000FB"
+ "entity": "ucirc",
+ "value": "U+000FB"
},
{
- entity: "ucy;",
- value: "U+00443"
+ "entity": "ucy;",
+ "value": "U+00443"
},
{
- entity: "udarr;",
- value: "U+021C5"
+ "entity": "udarr;",
+ "value": "U+021C5"
},
{
- entity: "udblac;",
- value: "U+00171"
+ "entity": "udblac;",
+ "value": "U+00171"
},
{
- entity: "udhar;",
- value: "U+0296E"
+ "entity": "udhar;",
+ "value": "U+0296E"
},
{
- entity: "ufisht;",
- value: "U+0297E"
+ "entity": "ufisht;",
+ "value": "U+0297E"
},
{
- entity: "ufr;",
- value: "U+1D532"
+ "entity": "ufr;",
+ "value": "U+1D532"
},
{
- entity: "ugrave;",
- value: "U+000F9"
+ "entity": "ugrave;",
+ "value": "U+000F9"
},
{
- entity: "ugrave",
- value: "U+000F9"
+ "entity": "ugrave",
+ "value": "U+000F9"
},
{
- entity: "uharl;",
- value: "U+021BF"
+ "entity": "uharl;",
+ "value": "U+021BF"
},
{
- entity: "uharr;",
- value: "U+021BE"
+ "entity": "uharr;",
+ "value": "U+021BE"
},
{
- entity: "uhblk;",
- value: "U+02580"
+ "entity": "uhblk;",
+ "value": "U+02580"
},
{
- entity: "ulcorn;",
- value: "U+0231C"
+ "entity": "ulcorn;",
+ "value": "U+0231C"
},
{
- entity: "ulcorner;",
- value: "U+0231C"
+ "entity": "ulcorner;",
+ "value": "U+0231C"
},
{
- entity: "ulcrop;",
- value: "U+0230F"
+ "entity": "ulcrop;",
+ "value": "U+0230F"
},
{
- entity: "ultri;",
- value: "U+025F8"
+ "entity": "ultri;",
+ "value": "U+025F8"
},
{
- entity: "umacr;",
- value: "U+0016B"
+ "entity": "umacr;",
+ "value": "U+0016B"
},
{
- entity: "uml;",
- value: "U+000A8"
+ "entity": "uml;",
+ "value": "U+000A8"
},
{
- entity: "uml",
- value: "U+000A8"
+ "entity": "uml",
+ "value": "U+000A8"
},
{
- entity: "uogon;",
- value: "U+00173"
+ "entity": "uogon;",
+ "value": "U+00173"
},
{
- entity: "uopf;",
- value: "U+1D566"
+ "entity": "uopf;",
+ "value": "U+1D566"
},
{
- entity: "uparrow;",
- value: "U+02191"
+ "entity": "uparrow;",
+ "value": "U+02191"
},
{
- entity: "updownarrow;",
- value: "U+02195"
+ "entity": "updownarrow;",
+ "value": "U+02195"
},
{
- entity: "upharpoonleft;",
- value: "U+021BF"
+ "entity": "upharpoonleft;",
+ "value": "U+021BF"
},
{
- entity: "upharpoonright;",
- value: "U+021BE"
+ "entity": "upharpoonright;",
+ "value": "U+021BE"
},
{
- entity: "uplus;",
- value: "U+0228E"
+ "entity": "uplus;",
+ "value": "U+0228E"
},
{
- entity: "upsi;",
- value: "U+003C5"
+ "entity": "upsi;",
+ "value": "U+003C5"
},
{
- entity: "upsih;",
- value: "U+003D2"
+ "entity": "upsih;",
+ "value": "U+003D2"
},
{
- entity: "upsilon;",
- value: "U+003C5"
+ "entity": "upsilon;",
+ "value": "U+003C5"
},
{
- entity: "upuparrows;",
- value: "U+021C8"
+ "entity": "upuparrows;",
+ "value": "U+021C8"
},
{
- entity: "urcorn;",
- value: "U+0231D"
+ "entity": "urcorn;",
+ "value": "U+0231D"
},
{
- entity: "urcorner;",
- value: "U+0231D"
+ "entity": "urcorner;",
+ "value": "U+0231D"
},
{
- entity: "urcrop;",
- value: "U+0230E"
+ "entity": "urcrop;",
+ "value": "U+0230E"
},
{
- entity: "uring;",
- value: "U+0016F"
+ "entity": "uring;",
+ "value": "U+0016F"
},
{
- entity: "urtri;",
- value: "U+025F9"
+ "entity": "urtri;",
+ "value": "U+025F9"
},
{
- entity: "uscr;",
- value: "U+1D4CA"
+ "entity": "uscr;",
+ "value": "U+1D4CA"
},
{
- entity: "utdot;",
- value: "U+022F0"
+ "entity": "utdot;",
+ "value": "U+022F0"
},
{
- entity: "utilde;",
- value: "U+00169"
+ "entity": "utilde;",
+ "value": "U+00169"
},
{
- entity: "utri;",
- value: "U+025B5"
+ "entity": "utri;",
+ "value": "U+025B5"
},
{
- entity: "utrif;",
- value: "U+025B4"
+ "entity": "utrif;",
+ "value": "U+025B4"
},
{
- entity: "uuarr;",
- value: "U+021C8"
+ "entity": "uuarr;",
+ "value": "U+021C8"
},
{
- entity: "uuml;",
- value: "U+000FC"
+ "entity": "uuml;",
+ "value": "U+000FC"
},
{
- entity: "uuml",
- value: "U+000FC"
+ "entity": "uuml",
+ "value": "U+000FC"
},
{
- entity: "uwangle;",
- value: "U+029A7"
+ "entity": "uwangle;",
+ "value": "U+029A7"
},
{
- entity: "vArr;",
- value: "U+021D5"
+ "entity": "vArr;",
+ "value": "U+021D5"
},
{
- entity: "vBar;",
- value: "U+02AE8"
+ "entity": "vBar;",
+ "value": "U+02AE8"
},
{
- entity: "vBarv;",
- value: "U+02AE9"
+ "entity": "vBarv;",
+ "value": "U+02AE9"
},
{
- entity: "vDash;",
- value: "U+022A8"
+ "entity": "vDash;",
+ "value": "U+022A8"
},
{
- entity: "vangrt;",
- value: "U+0299C"
+ "entity": "vangrt;",
+ "value": "U+0299C"
},
{
- entity: "varepsilon;",
- value: "U+003F5"
+ "entity": "varepsilon;",
+ "value": "U+003F5"
},
{
- entity: "varkappa;",
- value: "U+003F0"
+ "entity": "varkappa;",
+ "value": "U+003F0"
},
{
- entity: "varnothing;",
- value: "U+02205"
+ "entity": "varnothing;",
+ "value": "U+02205"
},
{
- entity: "varphi;",
- value: "U+003D5"
+ "entity": "varphi;",
+ "value": "U+003D5"
},
{
- entity: "varpi;",
- value: "U+003D6"
+ "entity": "varpi;",
+ "value": "U+003D6"
},
{
- entity: "varpropto;",
- value: "U+0221D"
+ "entity": "varpropto;",
+ "value": "U+0221D"
},
{
- entity: "varr;",
- value: "U+02195"
+ "entity": "varr;",
+ "value": "U+02195"
},
{
- entity: "varrho;",
- value: "U+003F1"
+ "entity": "varrho;",
+ "value": "U+003F1"
},
{
- entity: "varsigma;",
- value: "U+003C2"
+ "entity": "varsigma;",
+ "value": "U+003C2"
},
{
- entity: "vartheta;",
- value: "U+003D1"
+ "entity": "vartheta;",
+ "value": "U+003D1"
},
{
- entity: "vartriangleleft;",
- value: "U+022B2"
+ "entity": "vartriangleleft;",
+ "value": "U+022B2"
},
{
- entity: "vartriangleright;",
- value: "U+022B3"
+ "entity": "vartriangleright;",
+ "value": "U+022B3"
},
{
- entity: "vcy;",
- value: "U+00432"
+ "entity": "vcy;",
+ "value": "U+00432"
},
{
- entity: "vdash;",
- value: "U+022A2"
+ "entity": "vdash;",
+ "value": "U+022A2"
},
{
- entity: "vee;",
- value: "U+02228"
+ "entity": "vee;",
+ "value": "U+02228"
},
{
- entity: "veebar;",
- value: "U+022BB"
+ "entity": "veebar;",
+ "value": "U+022BB"
},
{
- entity: "veeeq;",
- value: "U+0225A"
+ "entity": "veeeq;",
+ "value": "U+0225A"
},
{
- entity: "vellip;",
- value: "U+022EE"
+ "entity": "vellip;",
+ "value": "U+022EE"
},
{
- entity: "verbar;",
- value: "U+0007C"
+ "entity": "verbar;",
+ "value": "U+0007C"
},
{
- entity: "vert;",
- value: "U+0007C"
+ "entity": "vert;",
+ "value": "U+0007C"
},
{
- entity: "vfr;",
- value: "U+1D533"
+ "entity": "vfr;",
+ "value": "U+1D533"
},
{
- entity: "vltri;",
- value: "U+022B2"
+ "entity": "vltri;",
+ "value": "U+022B2"
},
{
- entity: "vopf;",
- value: "U+1D567"
+ "entity": "vopf;",
+ "value": "U+1D567"
},
{
- entity: "vprop;",
- value: "U+0221D"
+ "entity": "vprop;",
+ "value": "U+0221D"
},
{
- entity: "vrtri;",
- value: "U+022B3"
+ "entity": "vrtri;",
+ "value": "U+022B3"
},
{
- entity: "vscr;",
- value: "U+1D4CB"
+ "entity": "vscr;",
+ "value": "U+1D4CB"
},
{
- entity: "vzigzag;",
- value: "U+0299A"
+ "entity": "vzigzag;",
+ "value": "U+0299A"
},
{
- entity: "wcirc;",
- value: "U+00175"
+ "entity": "wcirc;",
+ "value": "U+00175"
},
{
- entity: "wedbar;",
- value: "U+02A5F"
+ "entity": "wedbar;",
+ "value": "U+02A5F"
},
{
- entity: "wedge;",
- value: "U+02227"
+ "entity": "wedge;",
+ "value": "U+02227"
},
{
- entity: "wedgeq;",
- value: "U+02259"
+ "entity": "wedgeq;",
+ "value": "U+02259"
},
{
- entity: "weierp;",
- value: "U+02118"
+ "entity": "weierp;",
+ "value": "U+02118"
},
{
- entity: "wfr;",
- value: "U+1D534"
+ "entity": "wfr;",
+ "value": "U+1D534"
},
{
- entity: "wopf;",
- value: "U+1D568"
+ "entity": "wopf;",
+ "value": "U+1D568"
},
{
- entity: "wp;",
- value: "U+02118"
+ "entity": "wp;",
+ "value": "U+02118"
},
{
- entity: "wr;",
- value: "U+02240"
+ "entity": "wr;",
+ "value": "U+02240"
},
{
- entity: "wreath;",
- value: "U+02240"
+ "entity": "wreath;",
+ "value": "U+02240"
},
{
- entity: "wscr;",
- value: "U+1D4CC"
+ "entity": "wscr;",
+ "value": "U+1D4CC"
},
{
- entity: "xcap;",
- value: "U+022C2"
+ "entity": "xcap;",
+ "value": "U+022C2"
},
{
- entity: "xcirc;",
- value: "U+025EF"
+ "entity": "xcirc;",
+ "value": "U+025EF"
},
{
- entity: "xcup;",
- value: "U+022C3"
+ "entity": "xcup;",
+ "value": "U+022C3"
},
{
- entity: "xdtri;",
- value: "U+025BD"
+ "entity": "xdtri;",
+ "value": "U+025BD"
},
{
- entity: "xfr;",
- value: "U+1D535"
+ "entity": "xfr;",
+ "value": "U+1D535"
},
{
- entity: "xhArr;",
- value: "U+027FA"
+ "entity": "xhArr;",
+ "value": "U+027FA"
},
{
- entity: "xharr;",
- value: "U+027F7"
+ "entity": "xharr;",
+ "value": "U+027F7"
},
{
- entity: "xi;",
- value: "U+003BE"
+ "entity": "xi;",
+ "value": "U+003BE"
},
{
- entity: "xlArr;",
- value: "U+027F8"
+ "entity": "xlArr;",
+ "value": "U+027F8"
},
{
- entity: "xlarr;",
- value: "U+027F5"
+ "entity": "xlarr;",
+ "value": "U+027F5"
},
{
- entity: "xmap;",
- value: "U+027FC"
+ "entity": "xmap;",
+ "value": "U+027FC"
},
{
- entity: "xnis;",
- value: "U+022FB"
+ "entity": "xnis;",
+ "value": "U+022FB"
},
{
- entity: "xodot;",
- value: "U+02A00"
+ "entity": "xodot;",
+ "value": "U+02A00"
},
{
- entity: "xopf;",
- value: "U+1D569"
+ "entity": "xopf;",
+ "value": "U+1D569"
},
{
- entity: "xoplus;",
- value: "U+02A01"
+ "entity": "xoplus;",
+ "value": "U+02A01"
},
{
- entity: "xotime;",
- value: "U+02A02"
+ "entity": "xotime;",
+ "value": "U+02A02"
},
{
- entity: "xrArr;",
- value: "U+027F9"
+ "entity": "xrArr;",
+ "value": "U+027F9"
},
{
- entity: "xrarr;",
- value: "U+027F6"
+ "entity": "xrarr;",
+ "value": "U+027F6"
},
{
- entity: "xscr;",
- value: "U+1D4CD"
+ "entity": "xscr;",
+ "value": "U+1D4CD"
},
{
- entity: "xsqcup;",
- value: "U+02A06"
+ "entity": "xsqcup;",
+ "value": "U+02A06"
},
{
- entity: "xuplus;",
- value: "U+02A04"
+ "entity": "xuplus;",
+ "value": "U+02A04"
},
{
- entity: "xutri;",
- value: "U+025B3"
+ "entity": "xutri;",
+ "value": "U+025B3"
},
{
- entity: "xvee;",
- value: "U+022C1"
+ "entity": "xvee;",
+ "value": "U+022C1"
},
{
- entity: "xwedge;",
- value: "U+022C0"
+ "entity": "xwedge;",
+ "value": "U+022C0"
},
{
- entity: "yacute;",
- value: "U+000FD"
+ "entity": "yacute;",
+ "value": "U+000FD"
},
{
- entity: "yacute",
- value: "U+000FD"
+ "entity": "yacute",
+ "value": "U+000FD"
},
{
- entity: "yacy;",
- value: "U+0044F"
+ "entity": "yacy;",
+ "value": "U+0044F"
},
{
- entity: "ycirc;",
- value: "U+00177"
+ "entity": "ycirc;",
+ "value": "U+00177"
},
{
- entity: "ycy;",
- value: "U+0044B"
+ "entity": "ycy;",
+ "value": "U+0044B"
},
{
- entity: "yen;",
- value: "U+000A5"
+ "entity": "yen;",
+ "value": "U+000A5"
},
{
- entity: "yen",
- value: "U+000A5"
+ "entity": "yen",
+ "value": "U+000A5"
},
{
- entity: "yfr;",
- value: "U+1D536"
+ "entity": "yfr;",
+ "value": "U+1D536"
},
{
- entity: "yicy;",
- value: "U+00457"
+ "entity": "yicy;",
+ "value": "U+00457"
},
{
- entity: "yopf;",
- value: "U+1D56A"
+ "entity": "yopf;",
+ "value": "U+1D56A"
},
{
- entity: "yscr;",
- value: "U+1D4CE"
+ "entity": "yscr;",
+ "value": "U+1D4CE"
},
{
- entity: "yucy;",
- value: "U+0044E"
+ "entity": "yucy;",
+ "value": "U+0044E"
},
{
- entity: "yuml;",
- value: "U+000FF"
+ "entity": "yuml;",
+ "value": "U+000FF"
},
{
- entity: "yuml",
- value: "U+000FF"
+ "entity": "yuml",
+ "value": "U+000FF"
},
{
- entity: "zacute;",
- value: "U+0017A"
+ "entity": "zacute;",
+ "value": "U+0017A"
},
{
- entity: "zcaron;",
- value: "U+0017E"
+ "entity": "zcaron;",
+ "value": "U+0017E"
},
{
- entity: "zcy;",
- value: "U+00437"
+ "entity": "zcy;",
+ "value": "U+00437"
},
{
- entity: "zdot;",
- value: "U+0017C"
+ "entity": "zdot;",
+ "value": "U+0017C"
},
{
- entity: "zeetrf;",
- value: "U+02128"
+ "entity": "zeetrf;",
+ "value": "U+02128"
},
{
- entity: "zeta;",
- value: "U+003B6"
+ "entity": "zeta;",
+ "value": "U+003B6"
},
{
- entity: "zfr;",
- value: "U+1D537"
+ "entity": "zfr;",
+ "value": "U+1D537"
},
{
- entity: "zhcy;",
- value: "U+00436"
+ "entity": "zhcy;",
+ "value": "U+00436"
},
{
- entity: "zigrarr;",
- value: "U+021DD"
+ "entity": "zigrarr;",
+ "value": "U+021DD"
},
{
- entity: "zopf;",
- value: "U+1D56B"
+ "entity": "zopf;",
+ "value": "U+1D56B"
},
{
- entity: "zscr;",
- value: "U+1D4CF"
+ "entity": "zscr;",
+ "value": "U+1D4CF"
},
{
- entity: "zwj;",
- value: "U+0200D"
+ "entity": "zwj;",
+ "value": "U+0200D"
},
{
- entity: "zwnj;",
- value: "U+0200C"
+ "entity": "zwnj;",
+ "value": "U+0200C"
}
]
diff --git a/WebCore/html/HTMLFormattingElementList.h b/WebCore/html/HTMLFormattingElementList.h
index 135163c..aca05bb 100644
--- a/WebCore/html/HTMLFormattingElementList.h
+++ b/WebCore/html/HTMLFormattingElementList.h
@@ -32,7 +32,6 @@
namespace WebCore {
-class AtomicString;
class Element;
// This may end up merged into HTMLElementStack.
diff --git a/WebCore/html/HTMLInputElement.cpp b/WebCore/html/HTMLInputElement.cpp
index f4528c2..8c759cb 100644
--- a/WebCore/html/HTMLInputElement.cpp
+++ b/WebCore/html/HTMLInputElement.cpp
@@ -70,6 +70,7 @@
#ifdef ANDROID_ACCEPT_CHANGES_TO_FOCUSED_TEXTFIELDS
#include "WebViewCore.h"
#endif
+#include "WheelEvent.h"
#include <wtf/HashMap.h>
#include <wtf/MathExtras.h>
#include <wtf/StdLibExtras.h>
@@ -2040,7 +2041,7 @@ bool HTMLInputElement::storesValueSeparateFromAttribute() const
return false;
}
-struct EventHandlingState {
+struct EventHandlingState : FastAllocBase {
RefPtr<HTMLInputElement> m_currRadio;
bool m_indeterminate;
bool m_checked;
@@ -2419,6 +2420,20 @@ void HTMLInputElement::defaultEventHandler(Event* evt)
if (evt->isBeforeTextInsertedEvent())
handleBeforeTextInsertedEvent(evt);
+ if (hasSpinButton() && evt->isWheelEvent()) {
+ WheelEvent* wheel = static_cast<WheelEvent*>(evt);
+ int step = 0;
+ if (wheel->wheelDeltaY() > 0) {
+ step = 1;
+ } else if (wheel->wheelDeltaY() < 0) {
+ step = -1;
+ }
+ if (step) {
+ stepUpFromRenderer(step);
+ evt->setDefaultHandled();
+ return;
+ }
+ }
if (isTextField() && renderer() && (evt->isMouseEvent() || evt->isDragEvent() || evt->isWheelEvent() || evt->type() == eventNames().blurEvent || evt->type() == eventNames().focusEvent))
toRenderTextControlSingleLine(renderer())->forwardEvent(evt);
@@ -2814,10 +2829,16 @@ HTMLOptionElement* HTMLInputElement::selectedOption() const
void HTMLInputElement::stepUpFromRenderer(int n)
{
- // The difference from stepUp()/stepDown() is:
- // If the current value is invalid, the value will be
- // - the minimum value if n > 0
- // - the maximum value if n < 0
+ // The differences from stepUp()/stepDown():
+ // If the current value is not a number, the value will be
+ // - The value should be the minimum value if n > 0
+ // - The value should be the maximum value if n < 0
+ // If the current value is smaller than the minimum value:
+ // - The value should be the minimum value if n > 0
+ // - Nothing should happen if n < 0
+ // If the current value is larger than the maximum value:
+ // - The value should be the maximum value if n < 0
+ // - Nothing should happen if n > 0
ASSERT(hasSpinButton());
if (!hasSpinButton())
@@ -2829,7 +2850,7 @@ void HTMLInputElement::stepUpFromRenderer(int n)
const double nan = numeric_limits<double>::quiet_NaN();
String currentStringValue = value();
double current = parseToDouble(currentStringValue, nan);
- if (!isfinite(current))
+ if (!isfinite(current) || (n > 0 && current < minimum()) || (n < 0 && current > maximum()))
setValue(serialize(n > 0 ? minimum() : maximum()));
else {
ExceptionCode ec;
diff --git a/WebCore/html/HTMLMediaElement.cpp b/WebCore/html/HTMLMediaElement.cpp
index ad465bb..94c0dd2 100644
--- a/WebCore/html/HTMLMediaElement.cpp
+++ b/WebCore/html/HTMLMediaElement.cpp
@@ -108,8 +108,9 @@ HTMLMediaElement::HTMLMediaElement(const QualifiedName& tagName, Document* doc)
#endif
, m_restrictions(NoRestrictions)
, m_preload(MediaPlayer::Auto)
- , m_playing(false)
+ , m_displayMode(Unknown)
, m_processingMediaPlayerCallback(0)
+ , m_playing(false)
, m_isWaitingUntilMediaCanStart(false)
, m_processingLoad(false)
, m_delayingTheLoadEvent(false)
@@ -494,6 +495,7 @@ void HTMLMediaElement::prepareForLoad()
m_sentStalledEvent = false;
m_haveFiredLoadedData = false;
m_completelyLoaded = false;
+ m_displayMode = Unknown;
// 1 - Abort any already-running instance of the resource selection algorithm for this element.
m_currentSourceNode = 0;
@@ -533,7 +535,6 @@ void HTMLMediaElement::prepareForLoad()
m_playedTimeRanges = TimeRanges::create();
m_lastSeekTime = 0;
m_closedCaptionsVisible = false;
-
}
void HTMLMediaElement::loadInternal()
@@ -671,11 +672,9 @@ void HTMLMediaElement::loadResource(const KURL& initialURL, ContentType& content
#endif
m_player->load(m_currentSrc, contentType);
- if (isVideo() && m_player->canLoadPoster()) {
- KURL posterURL = getNonEmptyURLAttribute(posterAttr);
- if (!posterURL.isEmpty())
- m_player->setPoster(posterURL);
- }
+ // If there is no poster to display, allow the media engine to render video frames as soon as
+ // they are available.
+ updateDisplayState();
if (renderer())
renderer()->updateFromElement();
@@ -746,7 +745,7 @@ void HTMLMediaElement::noneSupported()
// 9 -Abort these steps. Until the load() method is invoked, the element won't attempt to load another resource.
- updatePosterImage();
+ updateDisplayState();
if (renderer())
renderer()->updateFromElement();
@@ -835,7 +834,7 @@ void HTMLMediaElement::setNetworkState(MediaPlayer::NetworkState state)
else if (state == MediaPlayer::FormatError && m_loadState == LoadingFromSrcAttr)
noneSupported();
- updatePosterImage();
+ updateDisplayState();
return;
}
@@ -917,17 +916,13 @@ void HTMLMediaElement::setReadyState(MediaPlayer::ReadyState state)
if (m_readyState >= HAVE_METADATA && oldState < HAVE_METADATA) {
scheduleEvent(eventNames().durationchangeEvent);
scheduleEvent(eventNames().loadedmetadataEvent);
-
-#if !ENABLE(PLUGIN_PROXY_FOR_VIDEO)
- if (renderer() && renderer()->isVideo()) {
- toRenderVideo(renderer())->videoSizeChanged();
- }
-#endif
+ if (renderer())
+ renderer()->updateFromElement();
m_delayingTheLoadEvent = false;
m_player->seek(0);
}
- bool shouldUpdatePosterImage = false;
+ bool shouldUpdateDisplayState = false;
// 4.8.10.7 says loadeddata is sent only when the new state *is* HAVE_CURRENT_DATA: "If the
// previous ready state was HAVE_METADATA and the new ready state is HAVE_CURRENT_DATA",
@@ -936,7 +931,7 @@ void HTMLMediaElement::setReadyState(MediaPlayer::ReadyState state)
// We go with the later because it seems useful to count on getting this event
if (m_readyState >= HAVE_CURRENT_DATA && oldState < HAVE_CURRENT_DATA && !m_haveFiredLoadedData) {
m_haveFiredLoadedData = true;
- shouldUpdatePosterImage = true;
+ shouldUpdateDisplayState = true;
scheduleEvent(eventNames().loadeddataEvent);
}
@@ -945,7 +940,7 @@ void HTMLMediaElement::setReadyState(MediaPlayer::ReadyState state)
scheduleEvent(eventNames().canplayEvent);
if (isPotentiallyPlaying)
scheduleEvent(eventNames().playingEvent);
- shouldUpdatePosterImage = true;
+ shouldUpdateDisplayState = true;
}
if (m_readyState == HAVE_ENOUGH_DATA && oldState < HAVE_ENOUGH_DATA) {
@@ -963,11 +958,11 @@ void HTMLMediaElement::setReadyState(MediaPlayer::ReadyState state)
scheduleEvent(eventNames().playingEvent);
}
- shouldUpdatePosterImage = true;
+ shouldUpdateDisplayState = true;
}
- if (shouldUpdatePosterImage)
- updatePosterImage();
+ if (shouldUpdateDisplayState)
+ updateDisplayState();
updatePlayState();
}
@@ -1071,7 +1066,6 @@ void HTMLMediaElement::seek(float time, ExceptionCode& ec)
m_player->seek(time);
// 10-15 are handled, if necessary, when the engine signals a readystate change.
-
}
void HTMLMediaElement::finishSeek()
@@ -1081,6 +1075,8 @@ void HTMLMediaElement::finishSeek()
// 4.8.10.10 Seeking step 13
scheduleEvent(eventNames().seekedEvent);
+
+ setDisplayMode(Video);
}
HTMLMediaElement::ReadyState HTMLMediaElement::readyState() const
@@ -1585,13 +1581,8 @@ void HTMLMediaElement::mediaPlayerDurationChanged(MediaPlayer*)
{
beginProcessingMediaPlayerCallback();
scheduleEvent(eventNames().durationchangeEvent);
-#if !ENABLE(PLUGIN_PROXY_FOR_VIDEO)
- if (renderer()) {
+ if (renderer())
renderer()->updateFromElement();
- if (renderer()->isVideo())
- toRenderVideo(renderer())->videoSizeChanged();
- }
-#endif
endProcessingMediaPlayerCallback();
}
@@ -1619,20 +1610,17 @@ void HTMLMediaElement::mediaPlayerSawUnsupportedTracks(MediaPlayer*)
void HTMLMediaElement::mediaPlayerRepaint(MediaPlayer*)
{
beginProcessingMediaPlayerCallback();
+ updateDisplayState();
if (renderer())
renderer()->repaint();
-
- updatePosterImage();
endProcessingMediaPlayerCallback();
}
void HTMLMediaElement::mediaPlayerSizeChanged(MediaPlayer*)
{
beginProcessingMediaPlayerCallback();
-#if !ENABLE(PLUGIN_PROXY_FOR_VIDEO)
- if (renderer() && renderer()->isVideo())
- toRenderVideo(renderer())->videoSizeChanged();
-#endif
+ if (renderer())
+ renderer()->updateFromElement();
endProcessingMediaPlayerCallback();
}
@@ -1783,6 +1771,8 @@ void HTMLMediaElement::updatePlayState()
bool shouldBePlaying = potentiallyPlaying();
bool playerPaused = m_player->paused();
if (shouldBePlaying && playerPaused) {
+ setDisplayMode(Video);
+
// Set rate before calling play in case the rate was set before the media engine wasn't setup.
// The media engine should just stash the rate since it isn't already playing.
m_player->setRate(m_playbackRate);
diff --git a/WebCore/html/HTMLMediaElement.h b/WebCore/html/HTMLMediaElement.h
index eede363..aeec188 100644
--- a/WebCore/html/HTMLMediaElement.h
+++ b/WebCore/html/HTMLMediaElement.h
@@ -178,6 +178,10 @@ protected:
virtual void willMoveToNewOwnerDocument();
virtual void didMoveToNewOwnerDocument();
+ enum DisplayMode { Unknown, None, Poster, Video };
+ DisplayMode displayMode() const { return m_displayMode; }
+ virtual void setDisplayMode(DisplayMode mode) { m_displayMode = mode; }
+
private:
virtual bool checkDTD(const Node* newChild);
virtual void attributeChanged(Attribute*, bool preserveDecls);
@@ -195,7 +199,8 @@ private:
virtual void documentWillBecomeInactive();
virtual void documentDidBecomeActive();
virtual void mediaVolumeDidChange();
- virtual void updatePosterImage() { }
+
+ virtual void updateDisplayState() { }
void setReadyState(MediaPlayer::ReadyState);
void setNetworkState(MediaPlayer::NetworkState);
@@ -254,7 +259,8 @@ private:
void pauseInternal();
void prepareForLoad();
-
+ void allowVideoRendering();
+
bool processingMediaPlayerCallback() const { return m_processingMediaPlayerCallback > 0; }
void beginProcessingMediaPlayerCallback() { ++m_processingMediaPlayerCallback; }
void endProcessingMediaPlayerCallback() { ASSERT(m_processingMediaPlayerCallback); --m_processingMediaPlayerCallback; }
@@ -326,14 +332,14 @@ private:
MediaPlayer::Preload m_preload;
- bool m_playing;
+ DisplayMode m_displayMode;
// Counter incremented while processing a callback from the media player, so we can avoid
// calling the media engine recursively.
int m_processingMediaPlayerCallback;
- bool m_isWaitingUntilMediaCanStart;
-
+ bool m_playing : 1;
+ bool m_isWaitingUntilMediaCanStart : 1;
bool m_processingLoad : 1;
bool m_delayingTheLoadEvent : 1;
bool m_haveFiredLoadedData : 1;
diff --git a/WebCore/html/HTMLParserQuirks.h b/WebCore/html/HTMLParserQuirks.h
index 176bbfb..50de710 100644
--- a/WebCore/html/HTMLParserQuirks.h
+++ b/WebCore/html/HTMLParserQuirks.h
@@ -26,11 +26,11 @@
#ifndef HTMLParserQuirks_h
#define HTMLParserQuirks_h
+#include <wtf/Forward.h>
#include <wtf/Noncopyable.h>
namespace WebCore {
-class AtomicString;
class Node;
class HTMLParserQuirks : public Noncopyable {
diff --git a/WebCore/html/HTMLQuoteElement.h b/WebCore/html/HTMLQuoteElement.h
index df47e73..9261da6 100644
--- a/WebCore/html/HTMLQuoteElement.h
+++ b/WebCore/html/HTMLQuoteElement.h
@@ -24,12 +24,11 @@
#ifndef HTMLQuoteElement_h
#define HTMLQuoteElement_h
+#include <wtf/Forward.h>
#include "HTMLElement.h"
namespace WebCore {
-class String;
-
class HTMLQuoteElement : public HTMLElement {
public:
static PassRefPtr<HTMLQuoteElement> create(const QualifiedName&, Document*);
diff --git a/WebCore/html/HTMLScriptRunner.cpp b/WebCore/html/HTMLScriptRunner.cpp
index f4b7013..4a9058f 100644
--- a/WebCore/html/HTMLScriptRunner.cpp
+++ b/WebCore/html/HTMLScriptRunner.cpp
@@ -105,7 +105,7 @@ ScriptSourceCode HTMLScriptRunner::sourceFromPendingScript(const PendingScript&
return ScriptSourceCode(script.cachedScript());
}
errorOccurred = false;
- return ScriptSourceCode(script.element->textContent(), documentURLForScriptExecution(m_document), script.startingLineNumber);
+ return ScriptSourceCode(script.element()->textContent(), documentURLForScriptExecution(m_document), script.startingLineNumber());
}
bool HTMLScriptRunner::isPendingScriptReady(const PendingScript& script)
@@ -195,7 +195,7 @@ bool HTMLScriptRunner::execute(PassRefPtr<Element> scriptElement, int startLine)
bool HTMLScriptRunner::haveParsingBlockingScript() const
{
- return !!m_parsingBlockingScript.element;
+ return !!m_parsingBlockingScript.element();
}
bool HTMLScriptRunner::executeParsingBlockingScripts()
@@ -230,7 +230,7 @@ bool HTMLScriptRunner::executeScriptsWaitingForStylesheets()
void HTMLScriptRunner::requestScript(Element* script)
{
- ASSERT(!m_parsingBlockingScript.element);
+ ASSERT(!m_parsingBlockingScript.element());
AtomicString srcValue = script->getAttribute(srcAttr);
// Allow the host to disllow script loads (using the XSSAuditor, etc.)
if (!m_host->shouldLoadExternalScriptFromSrc(srcValue))
@@ -238,7 +238,7 @@ void HTMLScriptRunner::requestScript(Element* script)
// FIXME: We need to resolve the url relative to the element.
if (!script->dispatchBeforeLoadEvent(srcValue))
return;
- m_parsingBlockingScript.element = script;
+ m_parsingBlockingScript.adoptElement(script);
// This should correctly return 0 for empty or invalid srcValues.
CachedScript* cachedScript = m_document->docLoader()->requestScript(srcValue, toScriptElement(script)->scriptCharset());
if (!cachedScript) {
@@ -278,34 +278,4 @@ void HTMLScriptRunner::runScript(Element* script, int startingLineNumber)
}
}
-HTMLScriptRunner::PendingScript::~PendingScript()
-{
- if (m_cachedScript)
- m_cachedScript->removeClient(this);
-}
-
-PassRefPtr<Element> HTMLScriptRunner::PendingScript::releaseElementAndClear()
-{
- setCachedScript(0);
- startingLineNumber = 0;
- m_watchingForLoad = false;
- return element.release();
-}
-
-void HTMLScriptRunner::PendingScript::setCachedScript(CachedScript* cachedScript)
-{
- if (m_cachedScript == cachedScript)
- return;
- if (m_cachedScript)
- m_cachedScript->removeClient(this);
- m_cachedScript = cachedScript;
- if (m_cachedScript)
- m_cachedScript->addClient(this);
-}
-
-CachedScript* HTMLScriptRunner::PendingScript::cachedScript() const
-{
- return m_cachedScript.get();
-}
-
}
diff --git a/WebCore/html/HTMLScriptRunner.h b/WebCore/html/HTMLScriptRunner.h
index cc69443..85801b2 100644
--- a/WebCore/html/HTMLScriptRunner.h
+++ b/WebCore/html/HTMLScriptRunner.h
@@ -26,14 +26,13 @@
#ifndef HTMLScriptRunner_h
#define HTMLScriptRunner_h
-#include "CachedResourceClient.h"
-#include "CachedResourceHandle.h"
+#include "PendingScript.h"
#include <wtf/Noncopyable.h>
#include <wtf/PassRefPtr.h>
namespace WebCore {
-class CachedResourceClient;
+class CachedResource;
class CachedScript;
class Document;
class Element;
@@ -56,45 +55,6 @@ public:
bool isExecutingScript() { return !!m_scriptNestingLevel; }
private:
- // A container for an external script which may be loaded and executed.
- //
- // A CachedResourceHandle alone does not prevent the underlying CachedResource
- // from purging its data buffer. This class holds a dummy client open for its
- // lifetime in order to guarantee that the data buffer will not be purged.
- //
- // FIXME: Finish turning this into a proper class.
- class PendingScript : public CachedResourceClient, Noncopyable {
- public:
- PendingScript()
- : startingLineNumber(0)
- , m_watchingForLoad(false)
- {
- }
-
- ~PendingScript();
-
- PassRefPtr<Element> releaseElementAndClear();
-
- bool watchingForLoad() const { return m_watchingForLoad; }
- void setWatchingForLoad(bool b) { m_watchingForLoad = b; }
-
- CachedScript* cachedScript() const;
- void setCachedScript(CachedScript*);
-
- virtual void notifyFinished(CachedResource*)
- {
- }
-
- RefPtr<Element> element;
- int startingLineNumber; // Only used for inline script tags.
- // HTML5 has an isReady parameter, however isReady ends up equivalent to
- // m_document->haveStylesheetsLoaded() && cachedScript->isLoaded()
-
- private:
- bool m_watchingForLoad;
- CachedResourceHandle<CachedScript> m_cachedScript;
- };
-
Frame* frame() const;
bool haveParsingBlockingScript() const;
diff --git a/WebCore/html/HTMLScriptRunnerHost.h b/WebCore/html/HTMLScriptRunnerHost.h
index a129520..5b40a931 100644
--- a/WebCore/html/HTMLScriptRunnerHost.h
+++ b/WebCore/html/HTMLScriptRunnerHost.h
@@ -26,9 +26,10 @@
#ifndef HTMLScriptRunnerHost_h
#define HTMLScriptRunnerHost_h
+#include <wtf/Forward.h>
+
namespace WebCore {
-class AtomicString;
class CachedResource;
class Element;
class HTMLInputStream;
diff --git a/WebCore/html/HTMLToken.h b/WebCore/html/HTMLToken.h
index 8465a35..5f2869b 100644
--- a/WebCore/html/HTMLToken.h
+++ b/WebCore/html/HTMLToken.h
@@ -262,7 +262,7 @@ private:
// want to end up with a cleaner interface between the two classes.
friend class AtomicHTMLToken;
- class DoctypeData {
+ class DoctypeData : public Noncopyable {
public:
DoctypeData()
: m_hasPublicIdentifier(false)
diff --git a/WebCore/html/HTMLTokenizer.cpp b/WebCore/html/HTMLTokenizer.cpp
index c8234e4..a52aba6 100644
--- a/WebCore/html/HTMLTokenizer.cpp
+++ b/WebCore/html/HTMLTokenizer.cpp
@@ -97,6 +97,7 @@ inline bool isEndTagBufferingState(HTMLTokenizer::State state)
}
HTMLTokenizer::HTMLTokenizer()
+ : m_inputStreamPreprocessor(this)
{
reset();
}
@@ -111,6 +112,7 @@ void HTMLTokenizer::reset()
m_token = 0;
m_lineNumber = 0;
m_skipLeadingNewLineForListing = false;
+ m_forceNullCharacterReplacement = false;
m_additionalAllowedCharacter = '\0';
}
diff --git a/WebCore/html/HTMLTokenizer.h b/WebCore/html/HTMLTokenizer.h
index 7ee9d41..0e9ba3a 100644
--- a/WebCore/html/HTMLTokenizer.h
+++ b/WebCore/html/HTMLTokenizer.h
@@ -34,6 +34,7 @@
namespace WebCore {
+class Element;
class HTMLToken;
class HTMLTokenizer : public Noncopyable {
@@ -132,14 +133,27 @@ public:
// Hack to skip leading newline in <pre>/<listing> for authoring ease.
// http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#parsing-main-inbody
- void skipLeadingNewLineForListing() { m_skipLeadingNewLineForListing = true; }
+ void setSkipLeadingNewLineForListing(bool value) { m_skipLeadingNewLineForListing = value; }
+
+ bool forceNullCharacterReplacement() const { return m_forceNullCharacterReplacement; }
+ void setForceNullCharacterReplacement(bool value) { m_forceNullCharacterReplacement = value; }
+
+ bool shouldSkipNullCharacters() const
+ {
+ return !m_forceNullCharacterReplacement
+ && (m_state == DataState
+ || m_state == RCDATAState
+ || m_state == RAWTEXTState
+ || m_state == PLAINTEXTState);
+ }
private:
// http://www.whatwg.org/specs/web-apps/current-work/#preprocessing-the-input-stream
class InputStreamPreprocessor : public Noncopyable {
public:
- InputStreamPreprocessor()
- : m_nextInputCharacter('\0')
+ InputStreamPreprocessor(HTMLTokenizer* tokenizer)
+ : m_tokenizer(tokenizer)
+ , m_nextInputCharacter('\0')
, m_skipNextNewLine(false)
{
}
@@ -151,6 +165,7 @@ private:
// characters in |source| (after collapsing \r\n, etc).
ALWAYS_INLINE bool peek(SegmentedString& source, int& lineNumber)
{
+ PeekAgain:
m_nextInputCharacter = *source;
// Every branch in this function is expensive, so we have a
@@ -179,8 +194,15 @@ private:
// a number of specific character values are parse errors and should be replaced
// by the replacement character. We suspect this is a problem with the spec as doing
// that filtering breaks surrogate pair handling and causes us not to match Minefield.
- if (m_nextInputCharacter == '\0' && !shouldTreatNullAsEndOfFileMarker(source))
+ if (m_nextInputCharacter == '\0' && !shouldTreatNullAsEndOfFileMarker(source)) {
+ if (m_tokenizer->shouldSkipNullCharacters()) {
+ source.advancePastNonNewline();
+ if (source.isEmpty())
+ return false;
+ goto PeekAgain;
+ }
m_nextInputCharacter = 0xFFFD;
+ }
}
return true;
}
@@ -202,6 +224,8 @@ private:
return source.isClosed() && source.length() == 1;
}
+ HTMLTokenizer* m_tokenizer;
+
// http://www.whatwg.org/specs/web-apps/current-work/#next-input-character
UChar m_nextInputCharacter;
bool m_skipNextNewLine;
@@ -242,6 +266,7 @@ private:
int m_lineNumber;
bool m_skipLeadingNewLineForListing;
+ bool m_forceNullCharacterReplacement;
// http://www.whatwg.org/specs/web-apps/current-work/#temporary-buffer
Vector<UChar, 32> m_temporaryBuffer;
diff --git a/WebCore/html/HTMLTreeBuilder.cpp b/WebCore/html/HTMLTreeBuilder.cpp
index ec15f9f..2c7d40d 100644
--- a/WebCore/html/HTMLTreeBuilder.cpp
+++ b/WebCore/html/HTMLTreeBuilder.cpp
@@ -61,20 +61,37 @@ static const int uninitializedLineNumberValue = -1;
namespace {
-inline bool isTreeBuilderWhitepace(UChar cc)
+inline bool isTreeBuilderWhitepace(UChar c)
{
- return cc == '\t' || cc == '\x0A' || cc == '\x0C' || cc == '\x0D' || cc == ' ';
+ // FIXME: Consider branch permutations.
+ return c == '\t' || c == '\x0A' || c == '\x0C' || c == '\x0D' || c == ' ';
}
-inline bool hasNonWhitespace(const String& string)
+inline bool isTreeBuilderWhitepaceOrReplacementCharacter(UChar c)
+{
+ return isTreeBuilderWhitepace(c) || c == 0xFFFD;
+}
+
+template<bool isSpecialCharacter(UChar c)>
+inline bool isAllSpecialCharacters(const String& string)
{
const UChar* characters = string.characters();
const unsigned length = string.length();
for (unsigned i = 0; i < length; ++i) {
- if (!isTreeBuilderWhitepace(characters[i]))
- return true;
+ if (!isSpecialCharacter(characters[i]))
+ return false;
}
- return false;
+ return true;
+}
+
+inline bool isAllWhitespace(const String& string)
+{
+ return isAllSpecialCharacters<isTreeBuilderWhitepace>(string);
+}
+
+inline bool isAllWhitespaceOrReplacementCharacters(const String& string)
+{
+ return isAllSpecialCharacters<isTreeBuilderWhitepaceOrReplacementCharacter>(string);
}
bool shouldUseLegacyTreeBuilder(Document* document)
@@ -236,6 +253,29 @@ bool isNotFormattingAndNotPhrasing(const Element* element)
return isScopingTag(tagName) || isSpecialTag(tagName);
}
+HTMLFormElement* closestFormAncestor(Element* element)
+{
+ while (element) {
+ if (element->hasTagName(formTag))
+ return static_cast<HTMLFormElement*>(element);
+ Node* parent = element->parent();
+ if (!parent || !parent->isElementNode())
+ return 0;
+ element = static_cast<Element*>(parent);
+ }
+ return 0;
+}
+
+// FIXME: This belongs on ContainerNode, where it could avoid the double ref
+// by directly releasing into the Vector. Such an implementation would need to
+// be careful not to send mutation events.
+void takeChildrenFromNode(ContainerNode* container, Vector<RefPtr<Node> >& children)
+{
+ for (Node* child = container->firstChild(); child; child = child->nextSibling())
+ children.append(child);
+ container->removeAllChildren();
+}
+
} // namespace
class HTMLTreeBuilder::ExternalCharacterTokenBuffer : public Noncopyable {
@@ -327,38 +367,89 @@ HTMLTreeBuilder::HTMLTreeBuilder(HTMLTokenizer* tokenizer, HTMLDocument* documen
, m_originalInsertionMode(InitialMode)
, m_secondaryInsertionMode(InitialMode)
, m_tokenizer(tokenizer)
- , m_legacyTreeBuilder(shouldUseLegacyTreeBuilder(document) ? new LegacyHTMLTreeBuilder(document, reportErrors) : 0)
, m_lastScriptElementStartLine(uninitializedLineNumberValue)
, m_scriptToProcessStartLine(uninitializedLineNumberValue)
- , m_fragmentScriptingPermission(FragmentScriptingAllowed)
- , m_isParsingFragment(false)
{
}
// FIXME: Member variables should be grouped into self-initializing structs to
// minimize code duplication between these constructors.
-HTMLTreeBuilder::HTMLTreeBuilder(HTMLTokenizer* tokenizer, DocumentFragment* fragment, FragmentScriptingPermission scriptingPermission)
+HTMLTreeBuilder::HTMLTreeBuilder(HTMLTokenizer* tokenizer, DocumentFragment* fragment, Element* contextElement, FragmentScriptingPermission scriptingPermission)
: m_framesetOk(true)
- , m_document(fragment->document())
- , m_tree(fragment->document(), scriptingPermission, true)
+ , m_fragmentContext(fragment, contextElement, scriptingPermission, shouldUseLegacyTreeBuilder(fragment->document()))
+ , m_document(m_fragmentContext.document())
+ , m_tree(m_document, scriptingPermission, true)
, m_reportErrors(false) // FIXME: Why not report errors in fragments?
, m_isPaused(false)
, m_insertionMode(InitialMode)
, m_originalInsertionMode(InitialMode)
, m_secondaryInsertionMode(InitialMode)
, m_tokenizer(tokenizer)
- , m_legacyTreeBuilder(new LegacyHTMLTreeBuilder(fragment, scriptingPermission))
+ , m_legacyTreeBuilder(shouldUseLegacyTreeBuilder(fragment->document()) ? new LegacyHTMLTreeBuilder(fragment, scriptingPermission) : 0)
, m_lastScriptElementStartLine(uninitializedLineNumberValue)
, m_scriptToProcessStartLine(uninitializedLineNumberValue)
- , m_fragmentScriptingPermission(scriptingPermission)
- , m_isParsingFragment(true)
{
+ if (shouldUseLegacyTreeBuilder(fragment->document()))
+ return;
+ // This is steps 2-6 of the HTML5 Fragment Case parsing algorithm:
+ // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#fragment-case
+ if (contextElement)
+ m_document->setParseMode(contextElement->document()->parseMode());
+ processFakeStartTag(htmlTag);
+ resetInsertionModeAppropriately();
+ m_tree.setForm(closestFormAncestor(contextElement));
}
HTMLTreeBuilder::~HTMLTreeBuilder()
{
}
+HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext()
+ : m_fragment(0)
+ , m_contextElement(0)
+ , m_usingLegacyTreeBuilder(false)
+ , m_scriptingPermission(FragmentScriptingAllowed)
+{
+}
+
+HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext(DocumentFragment* fragment, Element* contextElement, FragmentScriptingPermission scriptingPermission, bool legacyMode)
+ : m_dummyDocumentForFragmentParsing(legacyMode ? 0 : HTMLDocument::create(0, KURL()))
+ , m_fragment(fragment)
+ , m_contextElement(contextElement)
+ , m_usingLegacyTreeBuilder(legacyMode)
+ , m_scriptingPermission(scriptingPermission)
+{
+}
+
+Document* HTMLTreeBuilder::FragmentParsingContext::document() const
+{
+ ASSERT(m_fragment);
+ if (m_usingLegacyTreeBuilder)
+ return m_fragment->document();
+ return m_dummyDocumentForFragmentParsing.get();
+}
+
+void HTMLTreeBuilder::FragmentParsingContext::finished()
+{
+ // Populate the DocumentFragment with the parsed content now that we're done.
+ ContainerNode* root = m_dummyDocumentForFragmentParsing.get();
+ if (m_contextElement)
+ root = m_dummyDocumentForFragmentParsing->documentElement();
+ Vector<RefPtr<Node> > children;
+ takeChildrenFromNode(root, children);
+ for (unsigned i = 0; i < children.size(); ++i) {
+ ExceptionCode ec = 0;
+ // FIXME: We need a parser-safe (no events) version of adoptNode.
+ RefPtr<Node> child = m_fragment->document()->adoptNode(children[i].release(), ec);
+ ASSERT(!ec);
+ m_fragment->parserAddChild(child.release());
+ }
+}
+
+HTMLTreeBuilder::FragmentParsingContext::~FragmentParsingContext()
+{
+}
+
static void convertToOldStyle(AtomicHTMLToken& token, Token& oldStyleToken)
{
switch (token.type()) {
@@ -412,9 +503,9 @@ HTMLTokenizer::State HTMLTreeBuilder::adjustedLexerState(HTMLTokenizer::State st
if (tagName == styleTag
|| tagName == iframeTag
|| tagName == xmpTag
- || tagName == noembedTag
+ || (tagName == noembedTag && pluginsEnabled(frame))
|| tagName == noframesTag
- || (tagName == noscriptTag && isScriptingFlagEnabled(frame)))
+ || (tagName == noscriptTag && scriptEnabled(frame)))
return HTMLTokenizer::RAWTEXTState;
if (tagName == plaintextTag)
@@ -453,14 +544,14 @@ void HTMLTreeBuilder::passTokenToLegacyParser(HTMLToken& token)
m_lastScriptElement = static_pointer_cast<Element>(result);
m_lastScriptElementStartLine = m_tokenizer->lineNumber();
} else if (oldStyleToken.tagName == preTag || oldStyleToken.tagName == listingTag)
- m_tokenizer->skipLeadingNewLineForListing();
+ m_tokenizer->setSkipLeadingNewLineForListing(true);
else
m_tokenizer->setState(adjustedLexerState(m_tokenizer->state(), oldStyleToken.tagName, m_document->frame()));
} else if (token.type() == HTMLToken::EndTag) {
if (oldStyleToken.tagName == scriptTag) {
if (m_lastScriptElement) {
ASSERT(m_lastScriptElementStartLine != uninitializedLineNumberValue);
- if (m_fragmentScriptingPermission == FragmentScriptingNotAllowed) {
+ if (m_fragmentContext.scriptingPermission() == FragmentScriptingNotAllowed) {
// FIXME: This is a horrible hack for platform/Pasteboard.
// Clear the <script> tag when using the Parser to create
// a DocumentFragment for pasting so that javascript content
@@ -493,6 +584,11 @@ void HTMLTreeBuilder::constructTreeFromToken(HTMLToken& rawToken)
AtomicHTMLToken token(rawToken);
processToken(token);
+
+ // Swallowing U+0000 characters isn't in the HTML5 spec, but turning all
+ // the U+0000 characters into replacement characters has compatibility
+ // problems.
+ m_tokenizer->setForceNullCharacterReplacement(m_insertionMode == TextMode || m_insertionMode == InForeignContentMode);
}
void HTMLTreeBuilder::processToken(AtomicHTMLToken& token)
@@ -776,12 +872,19 @@ void HTMLTreeBuilder::processStartTagForInBody(AtomicHTMLToken& token)
return;
}
if (token.name() == bodyTag) {
+ if (!m_tree.openElements()->secondElementIsHTMLBodyElement() || m_tree.openElements()->hasOnlyOneElement()) {
+ ASSERT(isParsingFragment());
+ return;
+ }
m_tree.insertHTMLBodyStartTagInBody(token);
return;
}
if (token.name() == framesetTag) {
parseError(token);
- notImplemented(); // fragment case
+ if (!m_tree.openElements()->secondElementIsHTMLBodyElement() || m_tree.openElements()->hasOnlyOneElement()) {
+ ASSERT(isParsingFragment());
+ return;
+ }
if (!m_framesetOk)
return;
ExceptionCode ec = 0;
@@ -832,7 +935,7 @@ void HTMLTreeBuilder::processStartTagForInBody(AtomicHTMLToken& token)
if (token.name() == preTag || token.name() == listingTag) {
processFakePEndTagIfPInButtonScope();
m_tree.insertHTMLElement(token);
- m_tokenizer->skipLeadingNewLineForListing();
+ m_tokenizer->setSkipLeadingNewLineForListing(true);
m_framesetOk = false;
return;
}
@@ -952,7 +1055,7 @@ void HTMLTreeBuilder::processStartTagForInBody(AtomicHTMLToken& token)
}
if (token.name() == textareaTag) {
m_tree.insertHTMLElement(token);
- m_tokenizer->skipLeadingNewLineForListing();
+ m_tokenizer->setSkipLeadingNewLineForListing(true);
m_tokenizer->setState(HTMLTokenizer::RCDATAState);
m_originalInsertionMode = m_insertionMode;
m_framesetOk = false;
@@ -971,11 +1074,11 @@ void HTMLTreeBuilder::processStartTagForInBody(AtomicHTMLToken& token)
processGenericRawTextStartTag(token);
return;
}
- if (token.name() == noembedTag) {
+ if (token.name() == noembedTag && pluginsEnabled(m_document->frame())) {
processGenericRawTextStartTag(token);
return;
}
- if (token.name() == noscriptTag && isScriptingFlagEnabled(m_document->frame())) {
+ if (token.name() == noscriptTag && scriptEnabled(m_document->frame())) {
processGenericRawTextStartTag(token);
return;
}
@@ -1052,7 +1155,7 @@ void HTMLTreeBuilder::processStartTagForInBody(AtomicHTMLToken& token)
bool HTMLTreeBuilder::processColgroupEndTagForInColumnGroup()
{
if (m_tree.currentElement() == m_tree.openElements()->htmlElement()) {
- ASSERT(m_isParsingFragment);
+ ASSERT(isParsingFragment());
// FIXME: parse error
return false;
}
@@ -1113,7 +1216,7 @@ void HTMLTreeBuilder::processStartTagForInTable(AtomicHTMLToken& token)
if (token.name() == tableTag) {
parseError(token);
if (!processTableEndTagForInTable()) {
- ASSERT(m_isParsingFragment);
+ ASSERT(isParsingFragment());
return;
}
processStartTag(token);
@@ -1262,7 +1365,7 @@ void HTMLTreeBuilder::processStartTag(AtomicHTMLToken& token)
|| token.name() == trTag) {
parseError(token);
if (!processCaptionEndTagForInCaption()) {
- ASSERT(m_isParsingFragment);
+ ASSERT(isParsingFragment());
return;
}
processStartTag(token);
@@ -1281,7 +1384,7 @@ void HTMLTreeBuilder::processStartTag(AtomicHTMLToken& token)
return;
}
if (!processColgroupEndTagForInColumnGroup()) {
- ASSERT(m_isParsingFragment);
+ ASSERT(isParsingFragment());
return;
}
processStartTag(token);
@@ -1304,7 +1407,7 @@ void HTMLTreeBuilder::processStartTag(AtomicHTMLToken& token)
if (isCaptionColOrColgroupTag(token.name()) || isTableBodyContextTag(token.name())) {
// FIXME: This is slow.
if (!m_tree.openElements()->inTableScope(tbodyTag.localName()) && !m_tree.openElements()->inTableScope(theadTag.localName()) && !m_tree.openElements()->inTableScope(tfootTag.localName())) {
- ASSERT(m_isParsingFragment);
+ ASSERT(isParsingFragment());
parseError(token);
return;
}
@@ -1329,7 +1432,7 @@ void HTMLTreeBuilder::processStartTag(AtomicHTMLToken& token)
|| isCaptionColOrColgroupTag(token.name())
|| isTableBodyContextTag(token.name())) {
if (!processTrEndTagForInRow()) {
- ASSERT(m_isParsingFragment);
+ ASSERT(isParsingFragment());
return;
}
ASSERT(insertionMode() == InTableBodyMode);
@@ -1346,7 +1449,7 @@ void HTMLTreeBuilder::processStartTag(AtomicHTMLToken& token)
|| isTableBodyContextTag(token.name())) {
// FIXME: This could be more efficient.
if (!m_tree.openElements()->inTableScope(tdTag) && !m_tree.openElements()->inTableScope(thTag)) {
- ASSERT(m_isParsingFragment);
+ ASSERT(isParsingFragment());
parseError(token);
return;
}
@@ -1630,7 +1733,12 @@ void HTMLTreeBuilder::reparentChildren(Element* oldParent, Element* newParent)
// http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#parsing-main-inbody
void HTMLTreeBuilder::callTheAdoptionAgency(AtomicHTMLToken& token)
{
- while (1) {
+ // The adoption agency algorithm is N^2. We limit the number of iterations
+ // to stop from hanging the whole browser. This limit is copied from the
+ // legacy tree builder and might need to be tweaked in the future.
+ static const int adoptionAgencyIterationLimit = 10;
+
+ for (int i = 0; i < adoptionAgencyIterationLimit; ++i) {
// 1.
Element* formattingElement = m_tree.activeFormattingElements()->closestElementInScopeWithName(token.name());
if (!formattingElement || ((m_tree.openElements()->contains(formattingElement)) && !m_tree.openElements()->inScope(formattingElement))) {
@@ -1663,7 +1771,7 @@ void HTMLTreeBuilder::callTheAdoptionAgency(AtomicHTMLToken& token)
HTMLElementStack::ElementRecord* node = furthestBlock;
HTMLElementStack::ElementRecord* nextNode = node->next();
HTMLElementStack::ElementRecord* lastNode = furthestBlock;
- while (1) {
+ for (int i = 0; i < adoptionAgencyIterationLimit; ++i) {
// 6.1
node = nextNode;
ASSERT(node);
@@ -1690,7 +1798,7 @@ void HTMLTreeBuilder::callTheAdoptionAgency(AtomicHTMLToken& token)
// 6.6
// Use appendChild instead of parserAddChild to handle possible reparenting.
ExceptionCode ec;
- node->element()->appendChild(lastNode->element(), ec);
+ node->element()->appendChild(lastNode->element(), ec, true);
ASSERT(!ec);
// 6.7
lastNode = node;
@@ -1705,7 +1813,7 @@ void HTMLTreeBuilder::callTheAdoptionAgency(AtomicHTMLToken& token)
m_tree.fosterParent(lastNode->element());
else {
ExceptionCode ec;
- commonAncestor->appendChild(lastNode->element(), ec);
+ commonAncestor->appendChild(lastNode->element(), ec, true);
ASSERT(!ec);
}
// 8
@@ -1718,8 +1826,9 @@ void HTMLTreeBuilder::callTheAdoptionAgency(AtomicHTMLToken& token)
// be in HTMLConstructionSite. My guess is that steps 8--12
// should all be in some HTMLConstructionSite function.
furthestBlockElement->parserAddChild(newElement);
- if (furthestBlockElement->attached()) {
- ASSERT(!newElement->attached());
+ if (furthestBlockElement->attached() && !newElement->attached()) {
+ // Notice that newElement might already be attached if, for example, one of the reparented
+ // children is a style element, which attaches itself automatically.
newElement->attach();
}
// 11
@@ -1754,12 +1863,12 @@ void HTMLTreeBuilder::resetInsertionModeAppropriately()
while (1) {
Element* node = nodeRecord->element();
if (node == m_tree.openElements()->bottom()) {
- ASSERT(m_isParsingFragment);
+ ASSERT(isParsingFragment());
last = true;
- notImplemented(); // node = m_contextElement;
+ node = m_fragmentContext.contextElement();
}
if (node->hasTagName(selectTag)) {
- ASSERT(m_isParsingFragment);
+ ASSERT(isParsingFragment());
return setInsertionModeAndEnd(InSelectMode, foreign);
}
if (node->hasTagName(tdTag) || node->hasTagName(thTag))
@@ -1771,30 +1880,30 @@ void HTMLTreeBuilder::resetInsertionModeAppropriately()
if (node->hasTagName(captionTag))
return setInsertionModeAndEnd(InCaptionMode, foreign);
if (node->hasTagName(colgroupTag)) {
- ASSERT(m_isParsingFragment);
+ ASSERT(isParsingFragment());
return setInsertionModeAndEnd(InColumnGroupMode, foreign);
}
if (node->hasTagName(tableTag))
return setInsertionModeAndEnd(InTableMode, foreign);
if (node->hasTagName(headTag)) {
- ASSERT(m_isParsingFragment);
+ ASSERT(isParsingFragment());
return setInsertionModeAndEnd(InBodyMode, foreign);
}
if (node->hasTagName(bodyTag))
return setInsertionModeAndEnd(InBodyMode, foreign);
if (node->hasTagName(framesetTag)) {
- ASSERT(m_isParsingFragment);
+ ASSERT(isParsingFragment());
return setInsertionModeAndEnd(InFramesetMode, foreign);
}
if (node->hasTagName(htmlTag)) {
- ASSERT(m_isParsingFragment);
+ ASSERT(isParsingFragment());
return setInsertionModeAndEnd(BeforeHeadMode, foreign);
}
if (node->namespaceURI() == SVGNames::svgNamespaceURI
|| node->namespaceURI() == MathMLNames::mathmlNamespaceURI)
foreign = true;
if (last) {
- ASSERT(m_isParsingFragment);
+ ASSERT(isParsingFragment());
return setInsertionModeAndEnd(InBodyMode, foreign);
}
nodeRecord = nodeRecord->next();
@@ -1817,7 +1926,7 @@ void HTMLTreeBuilder::processEndTagForInTableBody(AtomicHTMLToken& token)
if (token.name() == tableTag) {
// FIXME: This is slow.
if (!m_tree.openElements()->inTableScope(tbodyTag.localName()) && !m_tree.openElements()->inTableScope(theadTag.localName()) && !m_tree.openElements()->inTableScope(tfootTag.localName())) {
- ASSERT(m_isParsingFragment);
+ ASSERT(isParsingFragment());
parseError(token);
return;
}
@@ -1847,7 +1956,7 @@ void HTMLTreeBuilder::processEndTagForInRow(AtomicHTMLToken& token)
}
if (token.name() == tableTag) {
if (!processTrEndTagForInRow()) {
- ASSERT(m_isParsingFragment);
+ ASSERT(isParsingFragment());
return;
}
ASSERT(insertionMode() == InTableBodyMode);
@@ -1901,7 +2010,7 @@ void HTMLTreeBuilder::processEndTagForInCell(AtomicHTMLToken& token)
|| token.name() == trTag
|| isTableBodyContextTag(token.name())) {
if (!m_tree.openElements()->inTableScope(token.name())) {
- ASSERT(m_isParsingFragment);
+ ASSERT(isParsingFragment());
// FIXME: It is unclear what the exact ASSERT should be.
// http://www.w3.org/Bugs/Public/show_bug.cgi?id=10098
parseError(token);
@@ -1938,6 +2047,7 @@ void HTMLTreeBuilder::processEndTagForInBody(AtomicHTMLToken& token)
|| token.name() == divTag
|| token.name() == dlTag
|| token.name() == fieldsetTag
+ || token.name() == figcaptionTag
|| token.name() == figureTag
|| token.name() == footerTag
|| token.name() == headerTag
@@ -1948,6 +2058,7 @@ void HTMLTreeBuilder::processEndTagForInBody(AtomicHTMLToken& token)
|| token.name() == olTag
|| token.name() == preTag
|| token.name() == sectionTag
+ || token.name() == summaryTag
|| token.name() == ulTag) {
if (!m_tree.openElements()->inScope(token.name())) {
parseError(token);
@@ -2051,7 +2162,7 @@ void HTMLTreeBuilder::processEndTagForInBody(AtomicHTMLToken& token)
bool HTMLTreeBuilder::processCaptionEndTagForInCaption()
{
if (!m_tree.openElements()->inTableScope(captionTag.localName())) {
- ASSERT(m_isParsingFragment);
+ ASSERT(isParsingFragment());
// FIXME: parse error
return false;
}
@@ -2066,7 +2177,7 @@ bool HTMLTreeBuilder::processCaptionEndTagForInCaption()
bool HTMLTreeBuilder::processTrEndTagForInRow()
{
if (!m_tree.openElements()->inTableScope(trTag.localName())) {
- ASSERT(m_isParsingFragment);
+ ASSERT(isParsingFragment());
// FIXME: parse error
return false;
}
@@ -2080,7 +2191,7 @@ bool HTMLTreeBuilder::processTrEndTagForInRow()
bool HTMLTreeBuilder::processTableEndTagForInTable()
{
if (!m_tree.openElements()->inTableScope(tableTag)) {
- ASSERT(m_isParsingFragment);
+ ASSERT(isParsingFragment());
// FIXME: parse error.
return false;
}
@@ -2172,7 +2283,7 @@ void HTMLTreeBuilder::processEndTag(AtomicHTMLToken& token)
if (token.name() == tableTag) {
parseError(token);
if (!processCaptionEndTagForInCaption()) {
- ASSERT(m_isParsingFragment);
+ ASSERT(isParsingFragment());
return;
}
processEndTag(token);
@@ -2201,7 +2312,7 @@ void HTMLTreeBuilder::processEndTag(AtomicHTMLToken& token)
return;
}
if (!processColgroupEndTagForInColumnGroup()) {
- ASSERT(m_isParsingFragment);
+ ASSERT(isParsingFragment());
return;
}
processEndTag(token);
@@ -2221,7 +2332,7 @@ void HTMLTreeBuilder::processEndTag(AtomicHTMLToken& token)
case AfterBodyMode:
ASSERT(insertionMode() == AfterBodyMode);
if (token.name() == htmlTag) {
- if (m_isParsingFragment) {
+ if (isParsingFragment()) {
parseError(token);
return;
}
@@ -2273,7 +2384,7 @@ void HTMLTreeBuilder::processEndTag(AtomicHTMLToken& token)
return;
}
m_tree.openElements()->pop();
- if (!m_isParsingFragment && !m_tree.currentElement()->hasTagName(framesetTag))
+ if (!isParsingFragment() && !m_tree.currentElement()->hasTagName(framesetTag))
setInsertionMode(AfterFramesetMode);
return;
}
@@ -2491,7 +2602,7 @@ ReprocessBuffer:
m_tree.reconstructTheActiveFormattingElements();
String characters = buffer.takeRemaining();
m_tree.insertTextNode(characters);
- if (m_framesetOk && hasNonWhitespace(characters))
+ if (m_framesetOk && !isAllWhitespaceOrReplacementCharacters(characters))
m_framesetOk = false;
break;
}
@@ -2516,7 +2627,7 @@ ReprocessBuffer:
if (buffer.isEmpty())
return;
if (!processColgroupEndTagForInColumnGroup()) {
- ASSERT(m_isParsingFragment);
+ ASSERT(isParsingFragment());
return;
}
goto ReprocessBuffer;
@@ -2565,7 +2676,7 @@ ReprocessBuffer:
ASSERT(insertionMode() == InForeignContentMode);
String characters = buffer.takeRemaining();
m_tree.insertTextNode(characters);
- if (m_framesetOk && hasNonWhitespace(characters))
+ if (m_framesetOk && !isAllWhitespace(characters))
m_framesetOk = false;
break;
}
@@ -2636,11 +2747,11 @@ void HTMLTreeBuilder::processEndOfFile(AtomicHTMLToken& token)
break;
case InColumnGroupMode:
if (m_tree.currentElement() == m_tree.openElements()->htmlElement()) {
- ASSERT(m_isParsingFragment);
+ ASSERT(isParsingFragment());
return;
}
if (!processColgroupEndTagForInColumnGroup()) {
- ASSERT(m_isParsingFragment);
+ ASSERT(isParsingFragment());
return;
}
processEndOfFile(token);
@@ -2709,7 +2820,7 @@ void HTMLTreeBuilder::defaultForAfterHead()
void HTMLTreeBuilder::defaultForInTableText()
{
String characters = String::adopt(m_pendingTableCharacters);
- if (hasNonWhitespace(characters)) {
+ if (!isAllWhitespace(characters)) {
// FIXME: parse error
HTMLConstructionSite::RedirectToFosterParentGuard redirecter(m_tree);
m_tree.reconstructTheActiveFormattingElements();
@@ -2744,7 +2855,7 @@ bool HTMLTreeBuilder::processStartTagForInHead(AtomicHTMLToken& token)
return true;
}
if (token.name() == noscriptTag) {
- if (isScriptingFlagEnabled(m_document->frame())) {
+ if (scriptEnabled(m_document->frame())) {
processGenericRawTextStartTag(token);
return true;
}
@@ -2804,12 +2915,16 @@ void HTMLTreeBuilder::finished()
return;
}
+ if (isParsingFragment()) {
+ m_fragmentContext.finished();
+ return;
+ }
+
// Warning, this may delete the parser, so don't try to do anything else after this.
- if (!m_isParsingFragment)
- m_document->finishedParsing();
+ m_document->finishedParsing();
}
-bool HTMLTreeBuilder::isScriptingFlagEnabled(Frame* frame)
+bool HTMLTreeBuilder::scriptEnabled(Frame* frame)
{
if (!frame)
return false;
@@ -2818,4 +2933,11 @@ bool HTMLTreeBuilder::isScriptingFlagEnabled(Frame* frame)
return false;
}
+bool HTMLTreeBuilder::pluginsEnabled(Frame* frame)
+{
+ if (!frame)
+ return false;
+ return frame->loader()->subframeLoader()->allowPlugins(NotAboutToInstantiatePlugin);
+}
+
}
diff --git a/WebCore/html/HTMLTreeBuilder.h b/WebCore/html/HTMLTreeBuilder.h
index d723384..24cb542 100644
--- a/WebCore/html/HTMLTreeBuilder.h
+++ b/WebCore/html/HTMLTreeBuilder.h
@@ -54,7 +54,7 @@ class HTMLTreeBuilder : public Noncopyable {
public:
// FIXME: Replace constructors with create() functions returning PassOwnPtrs
HTMLTreeBuilder(HTMLTokenizer*, HTMLDocument*, bool reportErrors);
- HTMLTreeBuilder(HTMLTokenizer*, DocumentFragment*, FragmentScriptingPermission);
+ HTMLTreeBuilder(HTMLTokenizer*, DocumentFragment*, Element* contextElement, FragmentScriptingPermission);
~HTMLTreeBuilder();
void setPaused(bool paused) { m_isPaused = paused; }
@@ -74,6 +74,9 @@ public:
// until we stop using the legacy parser. DO NOT CALL THIS METHOD.
LegacyHTMLTreeBuilder* legacyTreeBuilder() const { return m_legacyTreeBuilder.get(); }
+ static bool scriptEnabled(Frame*);
+ static bool pluginsEnabled(Frame*);
+
private:
class FakeInsertionMode;
class ExternalCharacterTokenBuffer;
@@ -105,6 +108,8 @@ private:
AfterAfterFramesetMode,
};
+ bool isParsingFragment() const { return !!m_fragmentContext.fragment(); }
+
void passTokenToLegacyParser(HTMLToken&);
void processToken(AtomicHTMLToken&);
@@ -192,7 +197,31 @@ private:
void setInsertionModeAndEnd(InsertionMode, bool foreign); // Helper for resetInsertionModeAppropriately
void resetInsertionModeAppropriately();
- static bool isScriptingFlagEnabled(Frame* frame);
+ class FragmentParsingContext : public Noncopyable {
+ public:
+ FragmentParsingContext();
+ FragmentParsingContext(DocumentFragment*, Element* contextElement, FragmentScriptingPermission, bool usingLegacyTreeBuilder);
+ ~FragmentParsingContext();
+
+ Document* document() const;
+ DocumentFragment* fragment() const { return m_fragment; }
+ Element* contextElement() const { ASSERT(m_fragment); ASSERT(!m_usingLegacyTreeBuilder); return m_contextElement; }
+ FragmentScriptingPermission scriptingPermission() const { ASSERT(m_fragment); return m_scriptingPermission; }
+
+ void finished();
+
+ private:
+ RefPtr<Document> m_dummyDocumentForFragmentParsing;
+ DocumentFragment* m_fragment;
+ Element* m_contextElement;
+ bool m_usingLegacyTreeBuilder;
+
+ // FragmentScriptingNotAllowed causes the Parser to remove children
+ // from <script> tags (so javascript doesn't show up in pastes).
+ FragmentScriptingPermission m_scriptingPermission;
+ };
+
+ FragmentParsingContext m_fragmentContext;
Document* m_document;
HTMLConstructionSite m_tree;
@@ -225,12 +254,6 @@ private:
RefPtr<Element> m_scriptToProcess; // <script> tag which needs processing before resuming the parser.
int m_scriptToProcessStartLine; // Starting line number of the script tag needing processing.
-
- // FIXME: FragmentScriptingPermission is a HACK for platform/Pasteboard.
- // FragmentScriptingNotAllowed causes the Parser to remove children
- // from <script> tags (so javascript doesn't show up in pastes).
- FragmentScriptingPermission m_fragmentScriptingPermission;
- bool m_isParsingFragment;
};
}
diff --git a/WebCore/html/HTMLVideoElement.cpp b/WebCore/html/HTMLVideoElement.cpp
index bfdf241..ed2d35c 100644
--- a/WebCore/html/HTMLVideoElement.cpp
+++ b/WebCore/html/HTMLVideoElement.cpp
@@ -47,7 +47,6 @@ using namespace HTMLNames;
inline HTMLVideoElement::HTMLVideoElement(const QualifiedName& tagName, Document* document)
: HTMLMediaElement(tagName, document)
- , m_shouldDisplayPosterImage(false)
{
ASSERT(hasTagName(videoTag));
}
@@ -74,8 +73,8 @@ void HTMLVideoElement::attach()
HTMLMediaElement::attach();
#if !ENABLE(PLUGIN_PROXY_FOR_VIDEO)
- updatePosterImage();
- if (m_shouldDisplayPosterImage) {
+ updateDisplayState();
+ if (shouldDisplayPosterImage()) {
if (!m_imageLoader)
m_imageLoader.set(new HTMLImageLoader(this));
m_imageLoader->updateFromElement();
@@ -91,9 +90,8 @@ void HTMLVideoElement::detach()
{
HTMLMediaElement::detach();
- if (!m_shouldDisplayPosterImage)
- if (m_imageLoader)
- m_imageLoader.clear();
+ if (!shouldDisplayPosterImage() && m_imageLoader)
+ m_imageLoader.clear();
}
void HTMLVideoElement::parseMappedAttribute(Attribute* attr)
@@ -101,17 +99,21 @@ void HTMLVideoElement::parseMappedAttribute(Attribute* attr)
const QualifiedName& attrName = attr->name();
if (attrName == posterAttr) {
- updatePosterImage();
- if (m_shouldDisplayPosterImage) {
+ // Force a poster recalc by setting m_displayMode to Unknown directly before calling updateDisplayState.
+ HTMLMediaElement::setDisplayMode(Unknown);
+ updateDisplayState();
#if !ENABLE(PLUGIN_PROXY_FOR_VIDEO)
+ if (shouldDisplayPosterImage()) {
if (!m_imageLoader)
m_imageLoader.set(new HTMLImageLoader(this));
m_imageLoader->updateFromElementIgnoringPreviousError();
-#else
- if (player())
- player()->setPoster(getNonEmptyURLAttribute(posterAttr));
-#endif
+ } else {
+ if (m_imageLoader)
+ m_imageLoader.clear();
+ if (renderer())
+ toRenderImage(renderer())->setCachedImage(0);
}
+#endif
} else if (attrName == widthAttr)
addCSSLength(attr, CSSPropertyWidth, attr->value());
else if (attrName == heightAttr)
@@ -172,20 +174,42 @@ const QualifiedName& HTMLVideoElement::imageSourceAttributeName() const
return posterAttr;
}
-void HTMLVideoElement::updatePosterImage()
+void HTMLVideoElement::setDisplayMode(DisplayMode mode)
{
-#if !ENABLE(PLUGIN_PROXY_FOR_VIDEO)
- bool oldShouldShowPosterImage = m_shouldDisplayPosterImage;
-#endif
+ DisplayMode oldMode = displayMode();
+ KURL poster = getNonEmptyURLAttribute(posterAttr);
+
+ if (!poster.isEmpty()) {
+ // We have a poster path, but only show it until the user triggers display by playing or seeking and the
+ // media engine has something to display.
+ if (mode == Video) {
+ if (oldMode != Video && player())
+ player()->prepareForRendering();
+ if (!hasAvailableVideoFrame())
+ mode = Poster;
+ }
+ } else if (oldMode != Video && player())
+ player()->prepareForRendering();
- m_shouldDisplayPosterImage = !getAttribute(posterAttr).isEmpty() && !hasAvailableVideoFrame();
+ HTMLMediaElement::setDisplayMode(mode);
+
+ if (player() && player()->canLoadPoster())
+ player()->setPoster(poster);
#if !ENABLE(PLUGIN_PROXY_FOR_VIDEO)
- if (renderer() && oldShouldShowPosterImage != m_shouldDisplayPosterImage)
+ if (renderer() && displayMode() != oldMode)
renderer()->updateFromElement();
#endif
}
+void HTMLVideoElement::updateDisplayState()
+{
+ if (getNonEmptyURLAttribute(posterAttr).isEmpty())
+ setDisplayMode(Video);
+ else if (displayMode() < Poster)
+ setDisplayMode(Poster);
+}
+
void HTMLVideoElement::paintCurrentFrameInContext(GraphicsContext* context, const IntRect& destRect)
{
MediaPlayer* player = HTMLMediaElement::player();
diff --git a/WebCore/html/HTMLVideoElement.h b/WebCore/html/HTMLVideoElement.h
index e7c3f34..04a0beb 100644
--- a/WebCore/html/HTMLVideoElement.h
+++ b/WebCore/html/HTMLVideoElement.h
@@ -55,11 +55,11 @@ public:
void webkitEnterFullScreen(bool isUserGesture, ExceptionCode& ec) { webkitEnterFullscreen(isUserGesture, ec); }
void webkitExitFullScreen() { webkitExitFullscreen(); }
- bool shouldDisplayPosterImage() const { return m_shouldDisplayPosterImage; }
-
// Used by canvas to gain raw pixel access
void paintCurrentFrameInContext(GraphicsContext*, const IntRect&);
+ bool shouldDisplayPosterImage() const { return displayMode() == Poster; }
+
private:
HTMLVideoElement(const QualifiedName&, Document*);
@@ -78,11 +78,14 @@ private:
virtual const QualifiedName& imageSourceAttributeName() const;
virtual bool hasAvailableVideoFrame() const;
- virtual void updatePosterImage();
+ virtual void updateDisplayState();
+
virtual void willMoveToNewOwnerDocument();
+ virtual void setDisplayMode(DisplayMode);
+
OwnPtr<HTMLImageLoader> m_imageLoader;
- bool m_shouldDisplayPosterImage;
+
};
} //namespace
diff --git a/WebCore/html/HTMLViewSourceDocument.cpp b/WebCore/html/HTMLViewSourceDocument.cpp
index 6cee27c..e1b959b 100644
--- a/WebCore/html/HTMLViewSourceDocument.cpp
+++ b/WebCore/html/HTMLViewSourceDocument.cpp
@@ -19,7 +19,7 @@
* 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.
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
@@ -69,26 +69,26 @@ DocumentParser* HTMLViewSourceDocument::createParser()
void HTMLViewSourceDocument::createContainingTable()
{
RefPtr<HTMLHtmlElement> html = HTMLHtmlElement::create(this);
- legacyParserAddChild(html);
+ parserAddChild(html);
html->attach();
RefPtr<HTMLBodyElement> body = HTMLBodyElement::create(this);
- html->legacyParserAddChild(body);
+ html->parserAddChild(body);
body->attach();
-
+
// Create a line gutter div that can be used to make sure the gutter extends down the height of the whole
// document.
RefPtr<HTMLDivElement> div = HTMLDivElement::create(this);
RefPtr<NamedNodeMap> attrs = NamedNodeMap::create();
attrs->addAttribute(Attribute::createMapped(classAttr, "webkit-line-gutter-backdrop"));
div->setAttributeMap(attrs.release());
- body->legacyParserAddChild(div);
+ body->parserAddChild(div);
div->attach();
RefPtr<HTMLTableElement> table = HTMLTableElement::create(this);
- body->legacyParserAddChild(table);
+ body->parserAddChild(table);
table->attach();
m_tbody = HTMLTableSectionElement::create(tbodyTag, this);
- table->legacyParserAddChild(m_tbody);
+ table->parserAddChild(m_tbody);
m_tbody->attach();
m_current = m_tbody;
}
@@ -137,7 +137,7 @@ void HTMLViewSourceDocument::addViewSourceToken(Token* token)
if (guide->at(i) == 'a' || guide->at(i) == 'x' || guide->at(i) == 'v') {
// Add in the string.
addText(String(static_cast<UChar*>(guide->data()) + begin, i - begin), classNameStr);
-
+
begin = i + 1;
if (guide->at(i) == 'a') {
@@ -149,7 +149,7 @@ void HTMLViewSourceDocument::addViewSourceToken(Token* token)
if (attr) {
if (guide->at(i) == 'a') {
String name = attr->name().toString();
-
+
m_current = addSpanWithClassName("webkit-html-attribute-name");
addText(name, "webkit-html-attribute-name");
if (m_current != m_tbody)
@@ -179,7 +179,7 @@ void HTMLViewSourceDocument::addViewSourceToken(Token* token)
}
}
}
-
+
// Add in any string that might be left.
if (begin < size)
addText(String(static_cast<UChar*>(guide->data()) + begin, size - begin), classNameStr);
@@ -187,7 +187,7 @@ void HTMLViewSourceDocument::addViewSourceToken(Token* token)
// Add in the end tag.
addText(">", classNameStr);
}
-
+
m_current = m_td;
}
}
@@ -214,7 +214,7 @@ PassRefPtr<Element> HTMLViewSourceDocument::addSpanWithClassName(const String& c
RefPtr<NamedNodeMap> attrs = NamedNodeMap::create();
attrs->addAttribute(Attribute::createMapped(classAttr, className));
span->setAttributeMap(attrs.release());
- m_current->legacyParserAddChild(span);
+ m_current->parserAddChild(span);
span->attach();
return span.release();
}
@@ -223,15 +223,15 @@ void HTMLViewSourceDocument::addLine(const String& className)
{
// Create a table row.
RefPtr<HTMLTableRowElement> trow = HTMLTableRowElement::create(this);
- m_tbody->legacyParserAddChild(trow);
+ m_tbody->parserAddChild(trow);
trow->attach();
-
+
// Create a cell that will hold the line number (it is generated in the stylesheet using counters).
RefPtr<HTMLTableCellElement> td = HTMLTableCellElement::create(tdTag, this);
RefPtr<NamedNodeMap> attrs = NamedNodeMap::create();
attrs->addAttribute(Attribute::createMapped(classAttr, "webkit-line-number"));
td->setAttributeMap(attrs.release());
- trow->legacyParserAddChild(td);
+ trow->parserAddChild(td);
td->attach();
// Create a second cell for the line contents
@@ -239,7 +239,7 @@ void HTMLViewSourceDocument::addLine(const String& className)
attrs = NamedNodeMap::create();
attrs->addAttribute(Attribute::createMapped(classAttr, "webkit-line-content"));
td->setAttributeMap(attrs.release());
- trow->legacyParserAddChild(td);
+ trow->parserAddChild(td);
td->attach();
m_current = m_td = td;
@@ -276,12 +276,12 @@ void HTMLViewSourceDocument::addText(const String& text, const String& className
if (m_current == m_tbody)
addLine(className);
RefPtr<Text> t = Text::create(this, substring);
- m_current->legacyParserAddChild(t);
+ m_current->parserAddChild(t);
t->attach();
if (i < size - 1)
m_current = m_tbody;
}
-
+
// Set current to m_tbody if the last character was a newline.
if (text[text.length() - 1] == '\n')
m_current = m_tbody;
@@ -291,7 +291,7 @@ PassRefPtr<Element> HTMLViewSourceDocument::addLink(const String& url, bool isAn
{
if (m_current == m_tbody)
addLine("webkit-html-tag");
-
+
// Now create a link for the attribute value instead of a span.
RefPtr<HTMLAnchorElement> anchor = HTMLAnchorElement::create(this);
RefPtr<NamedNodeMap> attrs = NamedNodeMap::create();
@@ -304,7 +304,7 @@ PassRefPtr<Element> HTMLViewSourceDocument::addLink(const String& url, bool isAn
attrs->addAttribute(Attribute::createMapped(targetAttr, "_blank"));
attrs->addAttribute(Attribute::createMapped(hrefAttr, url));
anchor->setAttributeMap(attrs.release());
- m_current->legacyParserAddChild(anchor);
+ m_current->parserAddChild(anchor);
anchor->attach();
return anchor.release();
}
diff --git a/WebCore/html/LegacyHTMLDocumentParser.cpp b/WebCore/html/LegacyHTMLDocumentParser.cpp
index cb5fac8..980d6ed 100644
--- a/WebCore/html/LegacyHTMLDocumentParser.cpp
+++ b/WebCore/html/LegacyHTMLDocumentParser.cpp
@@ -346,7 +346,7 @@ LegacyHTMLDocumentParser::State LegacyHTMLDocumentParser::parseNonHTMLText(Segme
if (state.inScript())
state = scriptHandler(state);
else {
- state = processListing(SegmentedString(m_scriptCode, m_scriptCodeSize), state);
+ state = processListing(SegmentedString(String(m_scriptCode, m_scriptCodeSize)), state);
processToken();
if (state.inStyle()) {
m_currentToken.tagName = styleTag.localName();
@@ -451,7 +451,7 @@ LegacyHTMLDocumentParser::State LegacyHTMLDocumentParser::scriptHandler(State st
}
}
- state = processListing(SegmentedString(m_scriptCode, m_scriptCodeSize), state);
+ state = processListing(SegmentedString(String(m_scriptCode, m_scriptCodeSize)), state);
RefPtr<Node> node = processToken();
if (node && m_scriptingPermission == FragmentScriptingNotAllowed) {
@@ -625,7 +625,7 @@ LegacyHTMLDocumentParser::State LegacyHTMLDocumentParser::parseComment(Segmented
m_scriptCode[m_scriptCodeSize + 1] = 0;
m_currentToken.tagName = commentAtom;
m_currentToken.beginTag = true;
- state = processListing(SegmentedString(m_scriptCode, m_scriptCodeSize - endCharsCount), state);
+ state = processListing(SegmentedString(String(m_scriptCode, m_scriptCodeSize - endCharsCount)), state);
processToken();
m_currentToken.tagName = commentAtom;
m_currentToken.beginTag = false;
diff --git a/WebCore/html/StepRange.h b/WebCore/html/StepRange.h
index 2f5013a..ce044ea 100644
--- a/WebCore/html/StepRange.h
+++ b/WebCore/html/StepRange.h
@@ -21,12 +21,12 @@
#ifndef StepRange_h
#define StepRange_h
+#include <wtf/Forward.h>
#include <wtf/Noncopyable.h>
namespace WebCore {
class HTMLInputElement;
-class String;
class StepRange : public Noncopyable {
public:
diff --git a/WebCore/html/ValidityState.cpp b/WebCore/html/ValidityState.cpp
index 6a159e8..e286b64 100644
--- a/WebCore/html/ValidityState.cpp
+++ b/WebCore/html/ValidityState.cpp
@@ -66,6 +66,12 @@ String ValidityState::validationMessage() const
return String();
}
+void ValidityState::setCustomErrorMessage(const String& message)
+{
+ m_customErrorMessage = message;
+ m_control->setNeedsValidityCheck();
+}
+
bool ValidityState::typeMismatch() const
{
if (!m_control->hasTagName(inputTag))
diff --git a/WebCore/html/ValidityState.h b/WebCore/html/ValidityState.h
index 78238f1..04f11a1 100644
--- a/WebCore/html/ValidityState.h
+++ b/WebCore/html/ValidityState.h
@@ -41,7 +41,7 @@ public:
String validationMessage() const;
- void setCustomErrorMessage(const String& message) { m_customErrorMessage = message; }
+ void setCustomErrorMessage(const String&);
bool valueMissing() const { return m_control->valueMissing(); }
bool typeMismatch() const;
diff --git a/WebCore/html/canvas/ArrayBuffer.cpp b/WebCore/html/canvas/ArrayBuffer.cpp
index 0ba2ffd..3b204ff 100644
--- a/WebCore/html/canvas/ArrayBuffer.cpp
+++ b/WebCore/html/canvas/ArrayBuffer.cpp
@@ -53,26 +53,32 @@ PassRefPtr<ArrayBuffer> ArrayBuffer::create(ArrayBuffer* other)
ArrayBuffer::ArrayBuffer(void* data, unsigned sizeInBytes)
: m_sizeInBytes(sizeInBytes)
- , m_data(data) {
+ , m_data(data)
+{
}
-void* ArrayBuffer::data() {
+void* ArrayBuffer::data()
+{
return m_data;
}
-const void* ArrayBuffer::data() const {
+const void* ArrayBuffer::data() const
+{
return m_data;
}
-unsigned ArrayBuffer::byteLength() const {
+unsigned ArrayBuffer::byteLength() const
+{
return m_sizeInBytes;
}
-ArrayBuffer::~ArrayBuffer() {
+ArrayBuffer::~ArrayBuffer()
+{
WTF::fastFree(m_data);
}
-void* ArrayBuffer::tryAllocate(unsigned numElements, unsigned elementByteSize) {
+void* ArrayBuffer::tryAllocate(unsigned numElements, unsigned elementByteSize)
+{
void* result;
// Do not allow 32-bit overflow of the total size
if (numElements) {
diff --git a/WebCore/html/canvas/ArrayBufferView.cpp b/WebCore/html/canvas/ArrayBufferView.cpp
index 787fd61..bd22f88 100644
--- a/WebCore/html/canvas/ArrayBufferView.cpp
+++ b/WebCore/html/canvas/ArrayBufferView.cpp
@@ -28,6 +28,7 @@
#if ENABLE(3D_CANVAS)
#include "ArrayBufferView.h"
+
#include "ArrayBuffer.h"
namespace WebCore {
@@ -46,9 +47,9 @@ ArrayBufferView::~ArrayBufferView()
void ArrayBufferView::setImpl(ArrayBufferView* array, unsigned byteOffset, ExceptionCode& ec)
{
- if (byteOffset > byteLength() ||
- byteOffset + array->byteLength() > byteLength() ||
- byteOffset + array->byteLength() < byteOffset) {
+ if (byteOffset > byteLength()
+ || byteOffset + array->byteLength() > byteLength()
+ || byteOffset + array->byteLength() < byteOffset) {
// Out of range offset or overflow
ec = INDEX_SIZE_ERR;
return;
diff --git a/WebCore/html/canvas/ArrayBufferView.h b/WebCore/html/canvas/ArrayBufferView.h
index dcf6d13..29ad691 100644
--- a/WebCore/html/canvas/ArrayBufferView.h
+++ b/WebCore/html/canvas/ArrayBufferView.h
@@ -26,13 +26,14 @@
#ifndef ArrayBufferView_h
#define ArrayBufferView_h
-#include <algorithm>
+#include "ArrayBuffer.h"
#include "ExceptionCode.h"
+
+#include <algorithm>
#include <limits.h>
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
#include <wtf/RefPtr.h>
-#include "ArrayBuffer.h"
namespace WebCore {
diff --git a/WebCore/html/canvas/CanvasGradient.h b/WebCore/html/canvas/CanvasGradient.h
index 0a77652..7550f9b 100644
--- a/WebCore/html/canvas/CanvasGradient.h
+++ b/WebCore/html/canvas/CanvasGradient.h
@@ -28,13 +28,12 @@
#define CanvasGradient_h
#include "Gradient.h"
+#include <wtf/Forward.h>
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
namespace WebCore {
- class String;
-
typedef int ExceptionCode;
class CanvasGradient : public RefCounted<CanvasGradient> {
diff --git a/WebCore/html/canvas/CanvasNumberArray.h b/WebCore/html/canvas/CanvasNumberArray.h
index eb79866..09714a0 100644
--- a/WebCore/html/canvas/CanvasNumberArray.h
+++ b/WebCore/html/canvas/CanvasNumberArray.h
@@ -26,6 +26,7 @@
#ifndef CanvasNumberArray_h
#define CanvasNumberArray_h
+#include <wtf/Forward.h>
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
#include <wtf/Vector.h>
@@ -33,8 +34,6 @@
namespace WebCore {
- class String;
-
class CanvasNumberArray : public RefCounted<CanvasNumberArray> {
public:
static PassRefPtr<CanvasNumberArray> create(unsigned length);
diff --git a/WebCore/html/canvas/CanvasObject.h b/WebCore/html/canvas/CanvasObject.h
deleted file mode 100644
index 6f89f12..0000000
--- a/WebCore/html/canvas/CanvasObject.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (C) 2009 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 COMPUTER, INC. ``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 COMPUTER, INC. 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 CanvasObject_h
-#define CanvasObject_h
-
-#include <wtf/PassRefPtr.h>
-#include <wtf/RefCounted.h>
-
-#include "GraphicsContext3D.h"
-
-namespace WebCore {
-
- class WebGLRenderingContext;
-
- class CanvasObject : public RefCounted<CanvasObject> {
- public:
- virtual ~CanvasObject();
-
- Platform3DObject object() const { return m_object; }
- void setObject(Platform3DObject, bool shouldDeleteObject = true);
- void deleteObject();
-
- void detachContext()
- {
- deleteObject();
- m_context = 0;
- }
-
- WebGLRenderingContext* context() const { return m_context; }
-
- virtual bool isBuffer() const { return false; }
- virtual bool isFramebuffer() const { return false; }
- virtual bool isProgram() const { return false; }
- virtual bool isRenderbuffer() const { return false; }
- virtual bool isShader() const { return false; }
- virtual bool isTexture() const { return false; }
-
- protected:
- CanvasObject(WebGLRenderingContext*);
- virtual void _deleteObject(Platform3DObject) = 0;
-
- private:
- Platform3DObject m_object;
- // The shouldDeleteObject flag indicates whether this wrapper
- // owns the underlying resource and should delete it when the
- // wrapper is unreferenced for the last time and deleted. It
- // is only set to false for certain objects returned from get
- // queries. FIXME: should consider canonicalizing all of these
- // objects in the future.
- bool m_shouldDeleteObject;
- WebGLRenderingContext* m_context;
- };
-
-} // namespace WebCore
-
-#endif // CanvasObject_h
diff --git a/WebCore/html/canvas/CanvasPattern.h b/WebCore/html/canvas/CanvasPattern.h
index 6c012d1..91e0794 100644
--- a/WebCore/html/canvas/CanvasPattern.h
+++ b/WebCore/html/canvas/CanvasPattern.h
@@ -27,13 +27,13 @@
#define CanvasPattern_h
#include "Pattern.h"
+#include <wtf/Forward.h>
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
namespace WebCore {
class Image;
- class String;
typedef int ExceptionCode;
diff --git a/WebCore/html/canvas/CanvasRenderingContext.h b/WebCore/html/canvas/CanvasRenderingContext.h
index 2ee1693..cb26363 100644
--- a/WebCore/html/canvas/CanvasRenderingContext.h
+++ b/WebCore/html/canvas/CanvasRenderingContext.h
@@ -30,7 +30,8 @@
namespace WebCore {
- class CanvasObject;
+ class WebGLObject;
+ class GraphicsContext3D;
class HTMLCanvasElement;
class CanvasRenderingContext : public Noncopyable {
@@ -47,6 +48,12 @@ namespace WebCore {
virtual bool is2d() const { return false; }
virtual bool is3d() const { return false; }
virtual bool isAccelerated() const { return false; }
+
+ // For accelerated canvases, returns a pointer to the underlying GraphicsContext3D.
+ // For non accelerated canvases returns 0.
+ virtual GraphicsContext3D* graphicsContext3D() const { return 0; }
+
+ virtual void paintRenderingResultsToCanvas() {}
private:
HTMLCanvasElement* m_canvas;
diff --git a/WebCore/html/canvas/CanvasRenderingContext2D.cpp b/WebCore/html/canvas/CanvasRenderingContext2D.cpp
index 3b05348..559ddda 100644
--- a/WebCore/html/canvas/CanvasRenderingContext2D.cpp
+++ b/WebCore/html/canvas/CanvasRenderingContext2D.cpp
@@ -58,7 +58,13 @@
#include "StrokeStyleApplier.h"
#include "TextMetrics.h"
-#include <stdio.h>
+#if ENABLE(ACCELERATED_2D_CANVAS)
+#include "FrameView.h"
+#include "GraphicsContext3D.h"
+#if USE(ACCELERATED_COMPOSITING)
+#include "RenderLayer.h"
+#endif
+#endif
#include <wtf/ByteArray.h>
#include <wtf/MathExtras.h>
@@ -100,6 +106,9 @@ CanvasRenderingContext2D::CanvasRenderingContext2D(HTMLCanvasElement* canvas, bo
#if ENABLE(DASHBOARD_SUPPORT)
, m_usesDashboardCompatibilityMode(usesDashboardCompatibilityMode)
#endif
+#if ENABLE(ACCELERATED_2D_CANVAS)
+ , m_context3D(0)
+#endif
{
#if !ENABLE(DASHBOARD_SUPPORT)
ASSERT_UNUSED(usesDashboardCompatibilityMode, !usesDashboardCompatibilityMode);
@@ -108,17 +117,53 @@ CanvasRenderingContext2D::CanvasRenderingContext2D(HTMLCanvasElement* canvas, bo
// Make sure that even if the drawingContext() has a different default
// thickness, it is in sync with the canvas thickness.
setLineWidth(lineWidth());
+
+#if ENABLE(ACCELERATED_2D_CANVAS)
+ Page* p = canvas->document()->page();
+ if (!p)
+ return;
+ if (!p->settings()->accelerated2dCanvasEnabled())
+ return;
+ if (FrameView* view = canvas->document()->view()) {
+ if (ScrollView* rootView = view->root()) {
+ if (HostWindow* hostWindow = view->root()->hostWindow()) {
+ // Set up our context
+ GraphicsContext3D::Attributes attr;
+ attr.stencil = true;
+ m_context3D = GraphicsContext3D::create(attr, hostWindow);
+ if (m_context3D)
+ if (GraphicsContext* c = drawingContext())
+ c->setGraphicsContext3D(m_context3D.get(), IntSize(canvas->width(), canvas->height()));
+ }
+ }
+ }
+#endif
}
CanvasRenderingContext2D::~CanvasRenderingContext2D()
{
}
+bool CanvasRenderingContext2D::isAccelerated() const
+{
+#if ENABLE(ACCELERATED_2D_CANVAS)
+ return m_context3D;
+#else
+ return false;
+#endif
+}
+
void CanvasRenderingContext2D::reset()
{
m_stateStack.resize(1);
m_stateStack.first() = State();
m_path.clear();
+#if ENABLE(ACCELERATED_2D_CANVAS)
+ if (m_context3D) {
+ if (GraphicsContext* c = drawingContext())
+ c->setGraphicsContext3D(m_context3D.get(), IntSize(canvas()->width(), canvas()->height()));
+ }
+#endif
}
CanvasRenderingContext2D::State::State()
@@ -511,6 +556,8 @@ void CanvasRenderingContext2D::setStrokeColor(const String& color)
void CanvasRenderingContext2D::setStrokeColor(float grayLevel)
{
+ if (state().m_strokeStyle && state().m_strokeStyle->isEquivalentColor(grayLevel, grayLevel, grayLevel, 1.0f))
+ return;
setStrokeStyle(CanvasStyle::create(grayLevel, 1));
}
@@ -521,16 +568,22 @@ void CanvasRenderingContext2D::setStrokeColor(const String& color, float alpha)
void CanvasRenderingContext2D::setStrokeColor(float grayLevel, float alpha)
{
+ if (state().m_strokeStyle && state().m_strokeStyle->isEquivalentColor(grayLevel, grayLevel, grayLevel, alpha))
+ return;
setStrokeStyle(CanvasStyle::create(grayLevel, alpha));
}
void CanvasRenderingContext2D::setStrokeColor(float r, float g, float b, float a)
{
+ if (state().m_strokeStyle && state().m_strokeStyle->isEquivalentColor(r, g, b, a))
+ return;
setStrokeStyle(CanvasStyle::create(r, g, b, a));
}
void CanvasRenderingContext2D::setStrokeColor(float c, float m, float y, float k, float a)
{
+ if (state().m_strokeStyle && state().m_strokeStyle->isEquivalentColor(c, m, y, k, a))
+ return;
setStrokeStyle(CanvasStyle::create(c, m, y, k, a));
}
@@ -544,6 +597,8 @@ void CanvasRenderingContext2D::setFillColor(const String& color)
void CanvasRenderingContext2D::setFillColor(float grayLevel)
{
+ if (state().m_fillStyle && state().m_fillStyle->isEquivalentColor(grayLevel, grayLevel, grayLevel, 1.0f))
+ return;
setFillStyle(CanvasStyle::create(grayLevel, 1));
}
@@ -554,16 +609,22 @@ void CanvasRenderingContext2D::setFillColor(const String& color, float alpha)
void CanvasRenderingContext2D::setFillColor(float grayLevel, float alpha)
{
+ if (state().m_fillStyle && state().m_fillStyle->isEquivalentColor(grayLevel, grayLevel, grayLevel, alpha))
+ return;
setFillStyle(CanvasStyle::create(grayLevel, alpha));
}
void CanvasRenderingContext2D::setFillColor(float r, float g, float b, float a)
{
+ if (state().m_fillStyle && state().m_fillStyle->isEquivalentColor(r, g, b, a))
+ return;
setFillStyle(CanvasStyle::create(r, g, b, a));
}
void CanvasRenderingContext2D::setFillColor(float c, float m, float y, float k, float a)
{
+ if (state().m_fillStyle && state().m_fillStyle->isEquivalentColor(c, m, y, k, a))
+ return;
setFillStyle(CanvasStyle::create(c, m, y, k, a));
}
@@ -1434,7 +1495,14 @@ void CanvasRenderingContext2D::willDraw(const FloatRect& r, unsigned options)
// we'd have to keep the clip path around.
}
- canvas()->willDraw(dirtyRect);
+#if ENABLE(ACCELERATED_2D_CANVAS) && USE(ACCELERATED_COMPOSITING)
+ // If we are drawing to hardware and we have a composited layer, just call rendererContentChanged().
+ RenderBox* renderBox = canvas()->renderBox();
+ if (m_context3D && renderBox && renderBox->hasLayer() && renderBox->layer()->hasAcceleratedCompositing())
+ renderBox->layer()->rendererContentChanged();
+ else
+#endif
+ canvas()->willDraw(dirtyRect);
}
GraphicsContext* CanvasRenderingContext2D::drawingContext() const
@@ -1772,4 +1840,11 @@ const Font& CanvasRenderingContext2D::accessFont()
return state().m_font;
}
+void CanvasRenderingContext2D::paintRenderingResultsToCanvas()
+{
+#if ENABLE(ACCELERATED_2D_CANVAS)
+ drawingContext()->syncSoftwareCanvas();
+#endif
+}
+
} // namespace WebCore
diff --git a/WebCore/html/canvas/CanvasRenderingContext2D.h b/WebCore/html/canvas/CanvasRenderingContext2D.h
index 22ed7fc..f610250 100644
--- a/WebCore/html/canvas/CanvasRenderingContext2D.h
+++ b/WebCore/html/canvas/CanvasRenderingContext2D.h
@@ -42,6 +42,10 @@
#include <ApplicationServices/ApplicationServices.h>
#endif
+#if USE(ACCELERATED_COMPOSITING)
+#include "GraphicsLayer.h"
+#endif
+
namespace WebCore {
class CanvasGradient;
@@ -56,6 +60,10 @@ class ImageData;
class KURL;
class TextMetrics;
+#if ENABLE(ACCELERATED_2D_CANVAS)
+class GraphicsContext3D;
+#endif
+
typedef int ExceptionCode;
class CanvasRenderingContext2D : public CanvasRenderingContext {
@@ -65,6 +73,7 @@ public:
virtual ~CanvasRenderingContext2D();
virtual bool is2d() const { return true; }
+ virtual bool isAccelerated() const;
CanvasStyle* strokeStyle() const;
void setStrokeStyle(PassRefPtr<CanvasStyle>);
@@ -212,6 +221,12 @@ public:
LineCap getLineCap() const { return state().m_lineCap; }
LineJoin getLineJoin() const { return state().m_lineJoin; }
+ virtual void paintRenderingResultsToCanvas();
+
+#if ENABLE(ACCELERATED_2D_CANVAS)
+ virtual GraphicsContext3D* graphicsContext3D() const { return m_context3D.get(); }
+#endif
+
private:
struct State {
State();
@@ -281,6 +296,10 @@ private:
#if ENABLE(DASHBOARD_SUPPORT)
bool m_usesDashboardCompatibilityMode;
#endif
+
+#if ENABLE(ACCELERATED_2D_CANVAS)
+ OwnPtr<GraphicsContext3D> m_context3D;
+#endif
};
} // namespace WebCore
diff --git a/WebCore/html/canvas/CanvasStyle.cpp b/WebCore/html/canvas/CanvasStyle.cpp
index 1ae5236..52b31c8 100644
--- a/WebCore/html/canvas/CanvasStyle.cpp
+++ b/WebCore/html/canvas/CanvasStyle.cpp
@@ -144,6 +144,26 @@ bool CanvasStyle::isEquivalentColor(const CanvasStyle& other) const
return false;
}
+bool CanvasStyle::isEquivalentColor(float r, float g, float b, float a) const
+{
+ if (m_type != RGBA)
+ return false;
+
+ return m_rgba == makeRGBA32FromFloats(r, g, b, a);
+}
+
+bool CanvasStyle::isEquivalentColor(float c, float m, float y, float k, float a) const
+{
+ if (m_type != CMYKA)
+ return false;
+
+ return c == m_cmyka.c
+ && m == m_cmyka.m
+ && y == m_cmyka.y
+ && k == m_cmyka.k
+ && a == m_cmyka.a;
+}
+
void CanvasStyle::applyStrokeColor(GraphicsContext* context)
{
if (!context)
diff --git a/WebCore/html/canvas/CanvasStyle.h b/WebCore/html/canvas/CanvasStyle.h
index 76ba6ef..8e47e63 100644
--- a/WebCore/html/canvas/CanvasStyle.h
+++ b/WebCore/html/canvas/CanvasStyle.h
@@ -56,6 +56,8 @@ namespace WebCore {
void applyStrokeColor(GraphicsContext*);
bool isEquivalentColor(const CanvasStyle&) const;
+ bool isEquivalentColor(float r, float g, float b, float a) const;
+ bool isEquivalentColor(float c, float m, float y, float k, float a) const;
private:
CanvasStyle(RGBA32 rgba);
diff --git a/WebCore/html/canvas/TypedArrayBase.h b/WebCore/html/canvas/TypedArrayBase.h
index a8bebd9..c55896b 100644
--- a/WebCore/html/canvas/TypedArrayBase.h
+++ b/WebCore/html/canvas/TypedArrayBase.h
@@ -27,8 +27,8 @@
#ifndef TypedArrayBase_h
#define TypedArrayBase_h
-#include "ArrayBufferView.h"
#include "ArrayBuffer.h"
+#include "ArrayBufferView.h"
namespace WebCore {
diff --git a/WebCore/html/canvas/WebGLBuffer.cpp b/WebCore/html/canvas/WebGLBuffer.cpp
index e449052..fc98a9d 100644
--- a/WebCore/html/canvas/WebGLBuffer.cpp
+++ b/WebCore/html/canvas/WebGLBuffer.cpp
@@ -28,6 +28,8 @@
#if ENABLE(3D_CANVAS)
#include "WebGLBuffer.h"
+
+#include "CheckedInt.h"
#include "WebGLRenderingContext.h"
namespace WebCore {
@@ -38,7 +40,7 @@ PassRefPtr<WebGLBuffer> WebGLBuffer::create(WebGLRenderingContext* ctx)
}
WebGLBuffer::WebGLBuffer(WebGLRenderingContext* ctx)
- : CanvasObject(ctx)
+ : WebGLObject(ctx)
, m_target(0)
, m_byteLength(0)
, m_nextAvailableCacheEntry(0)
@@ -47,153 +49,116 @@ WebGLBuffer::WebGLBuffer(WebGLRenderingContext* ctx)
clearCachedMaxIndices();
}
-void WebGLBuffer::_deleteObject(Platform3DObject object)
+void WebGLBuffer::deleteObjectImpl(Platform3DObject object)
{
context()->graphicsContext3D()->deleteBuffer(object);
}
-bool WebGLBuffer::associateBufferData(int size)
+bool WebGLBuffer::associateBufferDataImpl(ArrayBuffer* array, unsigned byteOffset, unsigned byteLength)
{
- if (!m_target)
- return false;
+ if (array && byteLength) {
+ CheckedInt<uint32_t> checkedOffset(byteOffset);
+ CheckedInt<uint32_t> checkedLength(byteLength);
+ CheckedInt<uint32_t> checkedMax = checkedOffset + checkedLength;
+ if (!checkedMax.valid() || checkedMax.value() > array->byteLength())
+ return false;
+ }
- if (m_target == GraphicsContext3D::ELEMENT_ARRAY_BUFFER) {
- m_byteLength = size;
+ switch (m_target) {
+ case GraphicsContext3D::ELEMENT_ARRAY_BUFFER:
+ m_byteLength = byteLength;
clearCachedMaxIndices();
- m_elementArrayBuffer = ArrayBuffer::create(size, 1);
- if (!m_elementArrayBuffer) {
- m_byteLength = 0;
- return false;
- }
+ if (byteLength) {
+ m_elementArrayBuffer = ArrayBuffer::create(byteLength, 1);
+ if (!m_elementArrayBuffer) {
+ m_byteLength = 0;
+ return false;
+ }
+ if (array) {
+ // We must always clone the incoming data because client-side
+ // modifications without calling bufferData or bufferSubData
+ // must never be able to change the validation results.
+ memcpy(static_cast<unsigned char*>(m_elementArrayBuffer->data()),
+ static_cast<unsigned char*>(array->data()) + byteOffset,
+ byteLength);
+ }
+ } else
+ m_elementArrayBuffer = 0;
return true;
- } else if (m_target == GraphicsContext3D::ARRAY_BUFFER) {
- m_byteLength = size;
+ case GraphicsContext3D::ARRAY_BUFFER:
+ m_byteLength = byteLength;
return true;
+ default:
+ return false;
}
+}
- return false;
+bool WebGLBuffer::associateBufferData(int size)
+{
+ if (size < 0)
+ return false;
+ return associateBufferDataImpl(0, 0, static_cast<unsigned>(size));
}
bool WebGLBuffer::associateBufferData(ArrayBuffer* array)
{
- if (!m_target)
- return false;
if (!array)
return false;
-
- if (m_target == GraphicsContext3D::ELEMENT_ARRAY_BUFFER) {
- clearCachedMaxIndices();
- m_byteLength = array->byteLength();
- // We must always clone the incoming data because client-side
- // modifications without calling bufferData or bufferSubData
- // must never be able to change the validation results.
- m_elementArrayBuffer = ArrayBuffer::create(array);
- if (!m_elementArrayBuffer) {
- m_byteLength = 0;
- return false;
- }
- return true;
- }
-
- if (m_target == GraphicsContext3D::ARRAY_BUFFER) {
- m_byteLength = array->byteLength();
- return true;
- }
-
- return false;
+ return associateBufferDataImpl(array, 0, array->byteLength());
}
bool WebGLBuffer::associateBufferData(ArrayBufferView* array)
{
- if (!m_target)
- return false;
if (!array)
return false;
+ return associateBufferDataImpl(array->buffer().get(), array->byteOffset(), array->byteLength());
+}
- if (m_target == GraphicsContext3D::ELEMENT_ARRAY_BUFFER) {
- clearCachedMaxIndices();
- m_byteLength = array->byteLength();
- // We must always clone the incoming data because client-side
- // modifications without calling bufferData or bufferSubData
- // must never be able to change the validation results.
- m_elementArrayBuffer = ArrayBuffer::create(array->buffer().get());
- if (!m_elementArrayBuffer) {
- m_byteLength = 0;
+bool WebGLBuffer::associateBufferSubDataImpl(long offset, ArrayBuffer* array, unsigned arrayByteOffset, unsigned byteLength)
+{
+ if (!array || offset < 0)
+ return false;
+
+ if (byteLength) {
+ CheckedInt<uint32_t> checkedBufferOffset(offset);
+ CheckedInt<uint32_t> checkedArrayOffset(arrayByteOffset);
+ CheckedInt<uint32_t> checkedLength(byteLength);
+ CheckedInt<uint32_t> checkedArrayMax = checkedArrayOffset + checkedLength;
+ CheckedInt<uint32_t> checkedBufferMax = checkedBufferOffset + checkedLength;
+ if (!checkedArrayMax.valid() || checkedArrayMax.value() > array->byteLength() || !checkedBufferMax.valid() || checkedBufferMax.value() > m_byteLength)
return false;
- }
- return true;
}
- if (m_target == GraphicsContext3D::ARRAY_BUFFER) {
- m_byteLength = array->byteLength();
+ switch (m_target) {
+ case GraphicsContext3D::ELEMENT_ARRAY_BUFFER:
+ clearCachedMaxIndices();
+ if (byteLength) {
+ if (!m_elementArrayBuffer)
+ return false;
+ memcpy(static_cast<unsigned char*>(m_elementArrayBuffer->data()) + offset,
+ static_cast<unsigned char*>(array->data()) + arrayByteOffset,
+ byteLength);
+ }
return true;
+ case GraphicsContext3D::ARRAY_BUFFER:
+ return true;
+ default:
+ return false;
}
-
- return false;
}
bool WebGLBuffer::associateBufferSubData(long offset, ArrayBuffer* array)
{
- if (!m_target)
- return false;
if (!array)
return false;
-
- if (m_target == GraphicsContext3D::ELEMENT_ARRAY_BUFFER) {
- clearCachedMaxIndices();
-
- // We need to protect against integer overflow with these tests
- if (offset < 0)
- return false;
-
- unsigned long uoffset = static_cast<unsigned long>(offset);
- if (uoffset > m_byteLength || array->byteLength() > m_byteLength - uoffset)
- return false;
-
- if (!m_elementArrayBuffer)
- return false;
-
- memcpy(static_cast<unsigned char*>(m_elementArrayBuffer->data()) + offset,
- static_cast<unsigned char*>(array->data()),
- array->byteLength());
- return true;
- }
-
- if (m_target == GraphicsContext3D::ARRAY_BUFFER)
- return array->byteLength() + offset <= m_byteLength;
-
- return false;
+ return associateBufferSubDataImpl(offset, array, 0, array->byteLength());
}
bool WebGLBuffer::associateBufferSubData(long offset, ArrayBufferView* array)
{
- if (!m_target)
- return false;
if (!array)
return false;
-
- if (m_target == GraphicsContext3D::ELEMENT_ARRAY_BUFFER) {
- clearCachedMaxIndices();
-
- // We need to protect against integer overflow with these tests
- if (offset < 0)
- return false;
-
- unsigned long uoffset = static_cast<unsigned long>(offset);
- if (uoffset > m_byteLength || array->byteLength() > m_byteLength - uoffset)
- return false;
-
- if (!m_elementArrayBuffer)
- return false;
-
- memcpy(static_cast<unsigned char*>(m_elementArrayBuffer->data()) + offset, array->baseAddress(), array->byteLength());
- return true;
- }
-
- if (m_target == GraphicsContext3D::ARRAY_BUFFER)
- return array->byteLength() + offset <= m_byteLength;
-
- return false;
+ return associateBufferSubDataImpl(offset, array->buffer().get(), array->byteOffset(), array->byteLength());
}
unsigned WebGLBuffer::byteLength() const
diff --git a/WebCore/html/canvas/WebGLBuffer.h b/WebCore/html/canvas/WebGLBuffer.h
index 1280cf9..a7a25b9 100644
--- a/WebCore/html/canvas/WebGLBuffer.h
+++ b/WebCore/html/canvas/WebGLBuffer.h
@@ -26,72 +26,77 @@
#ifndef WebGLBuffer_h
#define WebGLBuffer_h
-#include "CanvasObject.h"
#include "ArrayBuffer.h"
+#include "WebGLObject.h"
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
namespace WebCore {
-
- class WebGLBuffer : public CanvasObject {
- public:
- virtual ~WebGLBuffer() { deleteObject(); }
-
- static PassRefPtr<WebGLBuffer> create(WebGLRenderingContext*);
-
- bool associateBufferData(int size);
- bool associateBufferData(ArrayBuffer* array);
- bool associateBufferData(ArrayBufferView* array);
- bool associateBufferSubData(long offset, ArrayBuffer* array);
- bool associateBufferSubData(long offset, ArrayBufferView* array);
-
- unsigned byteLength() const;
- const ArrayBuffer* elementArrayBuffer() const { return m_elementArrayBuffer.get(); }
-
- // Gets the cached max index for the given type. Returns -1 if
- // none has been set.
- long getCachedMaxIndex(unsigned long type);
- // Sets the cached max index for the given type.
- void setCachedMaxIndex(unsigned long type, long value);
-
- unsigned long getTarget() const { return m_target; }
- void setTarget(unsigned long);
-
- protected:
- WebGLBuffer(WebGLRenderingContext*);
-
- virtual void _deleteObject(Platform3DObject o);
-
- private:
- virtual bool isBuffer() const { return true; }
-
- unsigned long m_target;
-
- RefPtr<ArrayBuffer> m_elementArrayBuffer;
- unsigned m_byteLength;
-
- // Optimization for index validation. For each type of index
- // (i.e., UNSIGNED_SHORT), cache the maximum index in the
- // entire buffer.
- //
- // This is sufficient to eliminate a lot of work upon each
- // draw call as long as all bound array buffers are at least
- // that size.
- struct MaxIndexCacheEntry {
- unsigned long type;
- long maxIndex;
- };
- // OpenGL ES 2.0 only has two valid index types (UNSIGNED_BYTE
- // and UNSIGNED_SHORT), but might as well leave open the
- // possibility of adding others.
- MaxIndexCacheEntry m_maxIndexCache[4];
- unsigned m_nextAvailableCacheEntry;
-
- // Clears all of the cached max indices.
- void clearCachedMaxIndices();
+
+class WebGLBuffer : public WebGLObject {
+public:
+ virtual ~WebGLBuffer() { deleteObject(); }
+
+ static PassRefPtr<WebGLBuffer> create(WebGLRenderingContext*);
+
+ bool associateBufferData(int size);
+ bool associateBufferData(ArrayBuffer* array);
+ bool associateBufferData(ArrayBufferView* array);
+ bool associateBufferSubData(long offset, ArrayBuffer* array);
+ bool associateBufferSubData(long offset, ArrayBufferView* array);
+
+ unsigned byteLength() const;
+ const ArrayBuffer* elementArrayBuffer() const { return m_elementArrayBuffer.get(); }
+
+ // Gets the cached max index for the given type. Returns -1 if
+ // none has been set.
+ long getCachedMaxIndex(unsigned long type);
+ // Sets the cached max index for the given type.
+ void setCachedMaxIndex(unsigned long type, long value);
+
+ unsigned long getTarget() const { return m_target; }
+ void setTarget(unsigned long);
+
+protected:
+ WebGLBuffer(WebGLRenderingContext*);
+
+ virtual void deleteObjectImpl(Platform3DObject o);
+
+private:
+ virtual bool isBuffer() const { return true; }
+
+ unsigned long m_target;
+
+ RefPtr<ArrayBuffer> m_elementArrayBuffer;
+ unsigned m_byteLength;
+
+ // Optimization for index validation. For each type of index
+ // (i.e., UNSIGNED_SHORT), cache the maximum index in the
+ // entire buffer.
+ //
+ // This is sufficient to eliminate a lot of work upon each
+ // draw call as long as all bound array buffers are at least
+ // that size.
+ struct MaxIndexCacheEntry {
+ unsigned long type;
+ long maxIndex;
};
-
+ // OpenGL ES 2.0 only has two valid index types (UNSIGNED_BYTE
+ // and UNSIGNED_SHORT), but might as well leave open the
+ // possibility of adding others.
+ MaxIndexCacheEntry m_maxIndexCache[4];
+ unsigned m_nextAvailableCacheEntry;
+
+ // Clears all of the cached max indices.
+ void clearCachedMaxIndices();
+
+ // Helper function called by the three associateBufferData().
+ bool associateBufferDataImpl(ArrayBuffer* array, unsigned byteOffset, unsigned byteLength);
+ // Helper function called by the two associateBufferSubData().
+ bool associateBufferSubDataImpl(long offset, ArrayBuffer* array, unsigned arrayByteOffset, unsigned byteLength);
+};
+
} // namespace WebCore
#endif // WebGLBuffer_h
diff --git a/WebCore/html/canvas/WebGLFramebuffer.cpp b/WebCore/html/canvas/WebGLFramebuffer.cpp
index a3d4681..bfa08b7 100644
--- a/WebCore/html/canvas/WebGLFramebuffer.cpp
+++ b/WebCore/html/canvas/WebGLFramebuffer.cpp
@@ -28,6 +28,7 @@
#if ENABLE(3D_CANVAS)
#include "WebGLFramebuffer.h"
+
#include "WebGLRenderingContext.h"
namespace WebCore {
@@ -38,7 +39,7 @@ PassRefPtr<WebGLFramebuffer> WebGLFramebuffer::create(WebGLRenderingContext* ctx
}
WebGLFramebuffer::WebGLFramebuffer(WebGLRenderingContext* ctx)
- : CanvasObject(ctx)
+ : WebGLObject(ctx)
, m_colorAttachment(0)
, m_depthAttachment(0)
, m_stencilAttachment(0)
@@ -47,7 +48,7 @@ WebGLFramebuffer::WebGLFramebuffer(WebGLRenderingContext* ctx)
setObject(context()->graphicsContext3D()->createFramebuffer());
}
-void WebGLFramebuffer::setAttachment(unsigned long attachment, CanvasObject* attachedObject)
+void WebGLFramebuffer::setAttachment(unsigned long attachment, WebGLObject* attachedObject)
{
if (!object())
return;
@@ -77,10 +78,10 @@ void WebGLFramebuffer::onBind()
initializeRenderbuffers();
}
-void WebGLFramebuffer::onAttachedObjectChange(CanvasObject* object)
+void WebGLFramebuffer::onAttachedObjectChange(WebGLObject* object)
{
// Currently object == 0 is not considered, but this might change if the
- // lifespan of CanvasObject changes.
+ // lifespan of WebGLObject changes.
if (object
&& (object == m_colorAttachment || object == m_depthAttachment
|| object == m_stencilAttachment || object == m_depthStencilAttachment))
@@ -105,12 +106,12 @@ unsigned long WebGLFramebuffer::getColorBufferFormat()
return 0;
}
-void WebGLFramebuffer::_deleteObject(Platform3DObject object)
+void WebGLFramebuffer::deleteObjectImpl(Platform3DObject object)
{
context()->graphicsContext3D()->deleteFramebuffer(object);
}
-bool WebGLFramebuffer::isUninitialized(CanvasObject* attachedObject)
+bool WebGLFramebuffer::isUninitialized(WebGLObject* attachedObject)
{
if (attachedObject && attachedObject->object() && attachedObject->isRenderbuffer()
&& !(reinterpret_cast<WebGLRenderbuffer*>(attachedObject))->isInitialized())
@@ -118,7 +119,7 @@ bool WebGLFramebuffer::isUninitialized(CanvasObject* attachedObject)
return false;
}
-void WebGLFramebuffer::setInitialized(CanvasObject* attachedObject)
+void WebGLFramebuffer::setInitialized(WebGLObject* attachedObject)
{
if (attachedObject && attachedObject->object() && attachedObject->isRenderbuffer())
(reinterpret_cast<WebGLRenderbuffer*>(attachedObject))->setInitialized();
diff --git a/WebCore/html/canvas/WebGLFramebuffer.h b/WebCore/html/canvas/WebGLFramebuffer.h
index ae1f4dc..ac945dd 100644
--- a/WebCore/html/canvas/WebGLFramebuffer.h
+++ b/WebCore/html/canvas/WebGLFramebuffer.h
@@ -26,59 +26,59 @@
#ifndef WebGLFramebuffer_h
#define WebGLFramebuffer_h
-#include "CanvasObject.h"
+#include "WebGLObject.h"
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
namespace WebCore {
- class WebGLFramebuffer : public CanvasObject {
- public:
- virtual ~WebGLFramebuffer() { deleteObject(); }
-
- static PassRefPtr<WebGLFramebuffer> create(WebGLRenderingContext*);
-
- bool isDepthAttached() const { return (m_depthAttachment && m_depthAttachment->object()); }
- bool isStencilAttached() const { return (m_stencilAttachment && m_stencilAttachment->object()); }
- bool isDepthStencilAttached() const { return (m_depthStencilAttachment && m_depthStencilAttachment->object()); }
-
- void setAttachment(unsigned long, CanvasObject*);
-
- // This function is called right after a framebuffer is bound.
- // Because renderbuffers and textures attached to the framebuffer might
- // have changed and the framebuffer might have become complete when it
- // isn't bound, so we need to clear un-initialized renderbuffers.
- void onBind();
-
- // When a texture or a renderbuffer changes, we need to check the
- // current bound framebuffer; if the newly changed object is attached
- // to the framebuffer and the framebuffer becomes complete, we need to
- // clear un-initialized renderbuffers.
- void onAttachedObjectChange(CanvasObject*);
-
- unsigned long getColorBufferFormat();
-
- protected:
- WebGLFramebuffer(WebGLRenderingContext*);
-
- virtual void _deleteObject(Platform3DObject);
-
- private:
- virtual bool isFramebuffer() const { return true; }
-
- bool isUninitialized(CanvasObject*);
- void setInitialized(CanvasObject*);
- void initializeRenderbuffers();
-
- // These objects are kept alive by the global table in
- // WebGLRenderingContext.
- CanvasObject* m_colorAttachment;
- CanvasObject* m_depthAttachment;
- CanvasObject* m_stencilAttachment;
- CanvasObject* m_depthStencilAttachment;
- };
-
+class WebGLFramebuffer : public WebGLObject {
+public:
+ virtual ~WebGLFramebuffer() { deleteObject(); }
+
+ static PassRefPtr<WebGLFramebuffer> create(WebGLRenderingContext*);
+
+ bool isDepthAttached() const { return (m_depthAttachment && m_depthAttachment->object()); }
+ bool isStencilAttached() const { return (m_stencilAttachment && m_stencilAttachment->object()); }
+ bool isDepthStencilAttached() const { return (m_depthStencilAttachment && m_depthStencilAttachment->object()); }
+
+ void setAttachment(unsigned long, WebGLObject*);
+
+ // This function is called right after a framebuffer is bound.
+ // Because renderbuffers and textures attached to the framebuffer might
+ // have changed and the framebuffer might have become complete when it
+ // isn't bound, so we need to clear un-initialized renderbuffers.
+ void onBind();
+
+ // When a texture or a renderbuffer changes, we need to check the
+ // current bound framebuffer; if the newly changed object is attached
+ // to the framebuffer and the framebuffer becomes complete, we need to
+ // clear un-initialized renderbuffers.
+ void onAttachedObjectChange(WebGLObject*);
+
+ unsigned long getColorBufferFormat();
+
+protected:
+ WebGLFramebuffer(WebGLRenderingContext*);
+
+ virtual void deleteObjectImpl(Platform3DObject);
+
+private:
+ virtual bool isFramebuffer() const { return true; }
+
+ bool isUninitialized(WebGLObject*);
+ void setInitialized(WebGLObject*);
+ void initializeRenderbuffers();
+
+ // These objects are kept alive by the global table in
+ // WebGLRenderingContext.
+ WebGLObject* m_colorAttachment;
+ WebGLObject* m_depthAttachment;
+ WebGLObject* m_stencilAttachment;
+ WebGLObject* m_depthStencilAttachment;
+};
+
} // namespace WebCore
#endif // WebGLFramebuffer_h
diff --git a/WebCore/html/canvas/WebGLGetInfo.cpp b/WebCore/html/canvas/WebGLGetInfo.cpp
index 0c8b548..6aff82f 100644
--- a/WebCore/html/canvas/WebGLGetInfo.cpp
+++ b/WebCore/html/canvas/WebGLGetInfo.cpp
@@ -29,14 +29,15 @@
#if ENABLE(3D_CANVAS)
#include "WebGLGetInfo.h"
-#include "WebGLBuffer.h"
+
#include "Float32Array.h"
-#include "WebGLFramebuffer.h"
#include "Int32Array.h"
+#include "Uint8Array.h"
+#include "WebGLBuffer.h"
+#include "WebGLFramebuffer.h"
#include "WebGLProgram.h"
#include "WebGLRenderbuffer.h"
#include "WebGLTexture.h"
-#include "Uint8Array.h"
namespace WebCore {
diff --git a/WebCore/html/canvas/WebGLGetInfo.h b/WebCore/html/canvas/WebGLGetInfo.h
index 94f6f9b..caee520 100644
--- a/WebCore/html/canvas/WebGLGetInfo.h
+++ b/WebCore/html/canvas/WebGLGetInfo.h
@@ -27,20 +27,18 @@
#ifndef WebGLGetInfo_h
#define WebGLGetInfo_h
-#include "wtf/PassRefPtr.h"
-#include "wtf/RefPtr.h"
+#include "Float32Array.h"
+#include "Int32Array.h"
#include "PlatformString.h"
-
+#include "Uint8Array.h"
#include "WebGLBuffer.h"
-#include "Float32Array.h"
#include "WebGLFramebuffer.h"
-#include "Int32Array.h"
-// FIXME: implement WebGLObjectArray
-//#include "WebGLObjectArray.h"
#include "WebGLProgram.h"
#include "WebGLRenderbuffer.h"
#include "WebGLTexture.h"
-#include "Uint8Array.h"
+
+#include <wtf/PassRefPtr.h>
+#include <wtf/RefPtr.h>
namespace WebCore {
@@ -74,7 +72,7 @@ public:
WebGLGetInfo(const bool* value, int size);
WebGLGetInfo(float value);
WebGLGetInfo(long value);
- // Represents the NULL value and type
+ // Represents the null value and type.
WebGLGetInfo();
WebGLGetInfo(const String& value);
WebGLGetInfo(unsigned long value);
@@ -132,4 +130,4 @@ private:
} // namespace WebCore
-#endif // WebGLGetInfo_h
+#endif // WebGLGetInfo_h
diff --git a/WebCore/html/canvas/CanvasObject.cpp b/WebCore/html/canvas/WebGLObject.cpp
index 6c7667b..6a34269 100644
--- a/WebCore/html/canvas/CanvasObject.cpp
+++ b/WebCore/html/canvas/WebGLObject.cpp
@@ -27,25 +27,26 @@
#if ENABLE(3D_CANVAS)
-#include "CanvasObject.h"
+#include "WebGLObject.h"
+
#include "WebGLRenderingContext.h"
namespace WebCore {
-CanvasObject::CanvasObject(WebGLRenderingContext* context)
+WebGLObject::WebGLObject(WebGLRenderingContext* context)
: m_object(0)
, m_shouldDeleteObject(true)
, m_context(context)
{
}
-CanvasObject::~CanvasObject()
+WebGLObject::~WebGLObject()
{
if (m_context)
m_context->removeObject(this);
}
-void CanvasObject::setObject(Platform3DObject object, bool shouldDeleteObject)
+void WebGLObject::setObject(Platform3DObject object, bool shouldDeleteObject)
{
if (object == m_object)
return;
@@ -55,13 +56,13 @@ void CanvasObject::setObject(Platform3DObject object, bool shouldDeleteObject)
m_shouldDeleteObject = shouldDeleteObject;
}
-void CanvasObject::deleteObject()
+void WebGLObject::deleteObject()
{
if (m_object) {
if (m_shouldDeleteObject)
if (m_context) {
m_context->graphicsContext3D()->makeContextCurrent();
- _deleteObject(m_object);
+ deleteObjectImpl(m_object);
}
m_object = 0;
}
diff --git a/WebCore/html/canvas/WebGLObject.h b/WebCore/html/canvas/WebGLObject.h
new file mode 100644
index 0000000..b66311f
--- /dev/null
+++ b/WebCore/html/canvas/WebGLObject.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2009 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 COMPUTER, INC. ``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 COMPUTER, INC. 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 WebGLObject_h
+#define WebGLObject_h
+
+#include "GraphicsContext3D.h"
+
+#include <wtf/PassRefPtr.h>
+#include <wtf/RefCounted.h>
+
+namespace WebCore {
+
+class WebGLRenderingContext;
+
+class WebGLObject : public RefCounted<WebGLObject> {
+public:
+ virtual ~WebGLObject();
+
+ Platform3DObject object() const { return m_object; }
+ void setObject(Platform3DObject, bool shouldDeleteObject = true);
+ void deleteObject();
+
+ void detachContext()
+ {
+ deleteObject();
+ m_context = 0;
+ }
+
+ WebGLRenderingContext* context() const { return m_context; }
+
+ virtual bool isBuffer() const { return false; }
+ virtual bool isFramebuffer() const { return false; }
+ virtual bool isProgram() const { return false; }
+ virtual bool isRenderbuffer() const { return false; }
+ virtual bool isShader() const { return false; }
+ virtual bool isTexture() const { return false; }
+
+protected:
+ WebGLObject(WebGLRenderingContext*);
+ virtual void deleteObjectImpl(Platform3DObject) = 0;
+
+private:
+ Platform3DObject m_object;
+ // The shouldDeleteObject flag indicates whether this wrapper
+ // owns the underlying resource and should delete it when the
+ // wrapper is unreferenced for the last time and deleted. It
+ // is only set to false for certain objects returned from get
+ // queries. FIXME: should consider canonicalizing all of these
+ // objects in the future.
+ bool m_shouldDeleteObject;
+ WebGLRenderingContext* m_context;
+};
+
+} // namespace WebCore
+
+#endif // WebGLObject_h
diff --git a/WebCore/html/canvas/WebGLProgram.cpp b/WebCore/html/canvas/WebGLProgram.cpp
index 0004465..846b171 100644
--- a/WebCore/html/canvas/WebGLProgram.cpp
+++ b/WebCore/html/canvas/WebGLProgram.cpp
@@ -28,6 +28,7 @@
#if ENABLE(3D_CANVAS)
#include "WebGLProgram.h"
+
#include "WebGLRenderingContext.h"
namespace WebCore {
@@ -38,13 +39,13 @@ PassRefPtr<WebGLProgram> WebGLProgram::create(WebGLRenderingContext* ctx)
}
WebGLProgram::WebGLProgram(WebGLRenderingContext* ctx)
- : CanvasObject(ctx)
+ : WebGLObject(ctx)
, m_linkFailure(false)
{
setObject(context()->graphicsContext3D()->createProgram());
}
-void WebGLProgram::_deleteObject(Platform3DObject object)
+void WebGLProgram::deleteObjectImpl(Platform3DObject object)
{
context()->graphicsContext3D()->deleteProgram(object);
}
@@ -56,17 +57,17 @@ bool WebGLProgram::cacheActiveAttribLocations()
return false;
GraphicsContext3D* context3d = context()->graphicsContext3D();
int linkStatus;
- context3d->getProgramiv(this, GraphicsContext3D::LINK_STATUS, &linkStatus);
+ context3d->getProgramiv(object(), GraphicsContext3D::LINK_STATUS, &linkStatus);
if (!linkStatus)
return false;
int numAttribs = 0;
- context3d->getProgramiv(this, GraphicsContext3D::ACTIVE_ATTRIBUTES, &numAttribs);
+ context3d->getProgramiv(object(), GraphicsContext3D::ACTIVE_ATTRIBUTES, &numAttribs);
m_activeAttribLocations.resize(static_cast<size_t>(numAttribs));
for (int i = 0; i < numAttribs; ++i) {
ActiveInfo info;
- context3d->getActiveAttrib(this, i, info);
- m_activeAttribLocations[i] = context3d->getAttribLocation(this, info.name.charactersWithNullTermination());
+ context3d->getActiveAttrib(object(), i, info);
+ m_activeAttribLocations[i] = context3d->getAttribLocation(object(), info.name.charactersWithNullTermination());
}
return true;
diff --git a/WebCore/html/canvas/WebGLProgram.h b/WebCore/html/canvas/WebGLProgram.h
index 1049334..0156938 100644
--- a/WebCore/html/canvas/WebGLProgram.h
+++ b/WebCore/html/canvas/WebGLProgram.h
@@ -26,47 +26,47 @@
#ifndef WebGLProgram_h
#define WebGLProgram_h
-#include "CanvasObject.h"
+#include "WebGLObject.h"
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
#include <wtf/Vector.h>
namespace WebCore {
-
- class WebGLProgram : public CanvasObject {
- public:
- virtual ~WebGLProgram() { deleteObject(); }
-
- static PassRefPtr<WebGLProgram> create(WebGLRenderingContext*);
-
- // cacheActiveAttribLocation() is only called once after linkProgram()
- // succeeds.
- bool cacheActiveAttribLocations();
- int numActiveAttribLocations() const;
- int getActiveAttribLocation(int index) const;
-
- bool isUsingVertexAttrib0() const;
-
- // Return true means getProgramParameter(LINK_STATUS) should return
- // false; return false means we should actually call
- // getProgramParameter(LINK_STATUS) to find out.
- bool isLinkFailureFlagSet() const { return m_linkFailure; }
- void setLinkFailureFlag(bool failed) { m_linkFailure = failed; }
-
- protected:
- WebGLProgram(WebGLRenderingContext*);
-
- virtual void _deleteObject(Platform3DObject);
-
- private:
- virtual bool isProgram() const { return true; }
-
- Vector<int> m_activeAttribLocations;
-
- bool m_linkFailure;
- };
-
+
+class WebGLProgram : public WebGLObject {
+public:
+ virtual ~WebGLProgram() { deleteObject(); }
+
+ static PassRefPtr<WebGLProgram> create(WebGLRenderingContext*);
+
+ // cacheActiveAttribLocation() is only called once after linkProgram()
+ // succeeds.
+ bool cacheActiveAttribLocations();
+ int numActiveAttribLocations() const;
+ int getActiveAttribLocation(int index) const;
+
+ bool isUsingVertexAttrib0() const;
+
+ // Return true means getProgramParameter(LINK_STATUS) should return
+ // false; return false means we should actually call
+ // getProgramParameter(LINK_STATUS) to find out.
+ bool isLinkFailureFlagSet() const { return m_linkFailure; }
+ void setLinkFailureFlag(bool failed) { m_linkFailure = failed; }
+
+protected:
+ WebGLProgram(WebGLRenderingContext*);
+
+ virtual void deleteObjectImpl(Platform3DObject);
+
+private:
+ virtual bool isProgram() const { return true; }
+
+ Vector<int> m_activeAttribLocations;
+
+ bool m_linkFailure;
+};
+
} // namespace WebCore
#endif // WebGLProgram_h
diff --git a/WebCore/html/canvas/WebGLRenderbuffer.cpp b/WebCore/html/canvas/WebGLRenderbuffer.cpp
index 701e2c9..7bc2eec 100644
--- a/WebCore/html/canvas/WebGLRenderbuffer.cpp
+++ b/WebCore/html/canvas/WebGLRenderbuffer.cpp
@@ -28,6 +28,7 @@
#if ENABLE(3D_CANVAS)
#include "WebGLRenderbuffer.h"
+
#include "WebGLRenderingContext.h"
namespace WebCore {
@@ -38,14 +39,14 @@ PassRefPtr<WebGLRenderbuffer> WebGLRenderbuffer::create(WebGLRenderingContext* c
}
WebGLRenderbuffer::WebGLRenderbuffer(WebGLRenderingContext* ctx)
- : CanvasObject(ctx)
+ : WebGLObject(ctx)
, m_internalFormat(GraphicsContext3D::RGBA4)
, m_initialized(false)
{
setObject(context()->graphicsContext3D()->createRenderbuffer());
}
-void WebGLRenderbuffer::_deleteObject(Platform3DObject object)
+void WebGLRenderbuffer::deleteObjectImpl(Platform3DObject object)
{
context()->graphicsContext3D()->deleteRenderbuffer(object);
}
diff --git a/WebCore/html/canvas/WebGLRenderbuffer.h b/WebCore/html/canvas/WebGLRenderbuffer.h
index dbb08c1..5765061 100644
--- a/WebCore/html/canvas/WebGLRenderbuffer.h
+++ b/WebCore/html/canvas/WebGLRenderbuffer.h
@@ -26,37 +26,37 @@
#ifndef WebGLRenderbuffer_h
#define WebGLRenderbuffer_h
-#include "CanvasObject.h"
+#include "WebGLObject.h"
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
namespace WebCore {
-
- class WebGLRenderbuffer : public CanvasObject {
- public:
- virtual ~WebGLRenderbuffer() { deleteObject(); }
-
- static PassRefPtr<WebGLRenderbuffer> create(WebGLRenderingContext*);
-
- void setInternalFormat(unsigned long internalformat) { m_internalFormat = internalformat; }
- unsigned long getInternalFormat() const { return m_internalFormat; }
-
- bool isInitialized() const { return m_initialized; }
- void setInitialized() { m_initialized = true; }
-
- protected:
- WebGLRenderbuffer(WebGLRenderingContext*);
-
- virtual void _deleteObject(Platform3DObject);
-
- private:
- virtual bool isRenderbuffer() const { return true; }
-
- unsigned long m_internalFormat;
- bool m_initialized;
- };
-
+
+class WebGLRenderbuffer : public WebGLObject {
+public:
+ virtual ~WebGLRenderbuffer() { deleteObject(); }
+
+ static PassRefPtr<WebGLRenderbuffer> create(WebGLRenderingContext*);
+
+ void setInternalFormat(unsigned long internalformat) { m_internalFormat = internalformat; }
+ unsigned long getInternalFormat() const { return m_internalFormat; }
+
+ bool isInitialized() const { return m_initialized; }
+ void setInitialized() { m_initialized = true; }
+
+protected:
+ WebGLRenderbuffer(WebGLRenderingContext*);
+
+ virtual void deleteObjectImpl(Platform3DObject);
+
+private:
+ virtual bool isRenderbuffer() const { return true; }
+
+ unsigned long m_internalFormat;
+ bool m_initialized;
+};
+
} // namespace WebCore
#endif // WebGLRenderbuffer_h
diff --git a/WebCore/html/canvas/WebGLRenderingContext.cpp b/WebCore/html/canvas/WebGLRenderingContext.cpp
index fb17db9..0284ec6 100644
--- a/WebCore/html/canvas/WebGLRenderingContext.cpp
+++ b/WebCore/html/canvas/WebGLRenderingContext.cpp
@@ -29,8 +29,8 @@
#include "WebGLRenderingContext.h"
-#include "CheckedInt.h"
#include "CanvasPixelArray.h"
+#include "CheckedInt.h"
#include "Console.h"
#include "DOMWindow.h"
#include "FrameView.h"
@@ -41,15 +41,15 @@
#include "NotImplemented.h"
#include "RenderBox.h"
#include "RenderLayer.h"
-#include "WebGLActiveInfo.h"
#include "Uint16Array.h"
+#include "WebGLActiveInfo.h"
#include "WebGLBuffer.h"
#include "WebGLContextAttributes.h"
#include "WebGLFramebuffer.h"
#include "WebGLProgram.h"
#include "WebGLRenderbuffer.h"
-#include "WebGLTexture.h"
#include "WebGLShader.h"
+#include "WebGLTexture.h"
#include "WebGLUniformLocation.h"
#include <wtf/ByteArray.h>
@@ -57,6 +57,11 @@
namespace WebCore {
+static inline Platform3DObject objectOrZero(WebGLObject* object)
+{
+ return object ? object->object() : 0;
+}
+
class WebGLStateRestorer {
public:
WebGLStateRestorer(WebGLRenderingContext* context,
@@ -151,7 +156,7 @@ void WebGLRenderingContext::markContextChanged()
m_markedCanvasDirty = true;
}
-bool WebGLRenderingContext::paintRenderingResultsToCanvas()
+void WebGLRenderingContext::paintRenderingResultsToCanvas()
{
if (m_markedCanvasDirty) {
// FIXME: It should not be necessary to clear the image before doing a readback.
@@ -159,16 +164,13 @@ bool WebGLRenderingContext::paintRenderingResultsToCanvas()
canvas()->buffer()->clearImage();
m_markedCanvasDirty = false;
m_context->paintRenderingResultsToCanvas(this);
- return true;
}
- return false;
}
void WebGLRenderingContext::beginPaint()
{
- if (m_markedCanvasDirty) {
+ if (m_markedCanvasDirty)
m_context->beginPaint(this);
- }
}
void WebGLRenderingContext::endPaint()
@@ -193,14 +195,9 @@ void WebGLRenderingContext::reshape(int width, int height)
m_context->reshape(width, height);
}
-int WebGLRenderingContext::sizeInBytes(int type, ExceptionCode& ec)
+int WebGLRenderingContext::sizeInBytes(int type)
{
- UNUSED_PARAM(ec);
- int result = m_context->sizeInBytes(type);
- if (result <= 0)
- m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
-
- return result;
+ return m_context->sizeInBytes(type);
}
void WebGLRenderingContext::activeTexture(unsigned long texture, ExceptionCode& ec)
@@ -220,7 +217,7 @@ void WebGLRenderingContext::attachShader(WebGLProgram* program, WebGLShader* sha
UNUSED_PARAM(ec);
if (!validateWebGLObject(program) || !validateWebGLObject(shader))
return;
- m_context->attachShader(program, shader);
+ m_context->attachShader(objectOrZero(program), objectOrZero(shader));
cleanupAfterGraphicsCall(false);
}
@@ -229,7 +226,7 @@ void WebGLRenderingContext::bindAttribLocation(WebGLProgram* program, unsigned l
UNUSED_PARAM(ec);
if (!validateWebGLObject(program))
return;
- m_context->bindAttribLocation(program, index, name);
+ m_context->bindAttribLocation(objectOrZero(program), index, name);
cleanupAfterGraphicsCall(false);
}
@@ -254,7 +251,7 @@ void WebGLRenderingContext::bindBuffer(unsigned long target, WebGLBuffer* buffer
return;
}
- m_context->bindBuffer(target, buffer);
+ m_context->bindBuffer(target, objectOrZero(buffer));
if (buffer)
buffer->setTarget(target);
cleanupAfterGraphicsCall(false);
@@ -273,7 +270,7 @@ void WebGLRenderingContext::bindFramebuffer(unsigned long target, WebGLFramebuff
return;
}
m_framebufferBinding = buffer;
- m_context->bindFramebuffer(target, buffer);
+ m_context->bindFramebuffer(target, objectOrZero(buffer));
if (m_framebufferBinding)
m_framebufferBinding->onBind();
cleanupAfterGraphicsCall(false);
@@ -291,7 +288,7 @@ void WebGLRenderingContext::bindRenderbuffer(unsigned long target, WebGLRenderbu
return;
}
m_renderbufferBinding = renderBuffer;
- m_context->bindRenderbuffer(target, renderBuffer);
+ m_context->bindRenderbuffer(target, objectOrZero(renderBuffer));
cleanupAfterGraphicsCall(false);
}
@@ -314,9 +311,28 @@ void WebGLRenderingContext::bindTexture(unsigned long target, WebGLTexture* text
m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
return;
}
- m_context->bindTexture(target, texture);
+ m_context->bindTexture(target, objectOrZero(texture));
if (!isGLES2Compliant() && texture)
texture->setTarget(target, maxLevel);
+
+ // FIXME: do we want to do this on all platforms?
+#if PLATFORM(CHROMIUM)
+ // FIXME: GL_TEXTURE_WRAP_R isn't exposed in the OpenGL ES 2.0
+ // API. On desktop OpenGL implementations it seems necessary to
+ // set this wrap mode to GL_CLAMP_TO_EDGE to get correct behavior
+ // of cube maps.
+ if (texture) {
+ if (target == GraphicsContext3D::TEXTURE_CUBE_MAP) {
+ if (!texture->isCubeMapRWrapModeInitialized()) {
+ static const int textureWrapR = 0x8072;
+ texParameteri(GraphicsContext3D::TEXTURE_CUBE_MAP, textureWrapR, GraphicsContext3D::CLAMP_TO_EDGE);
+ texture->setCubeMapRWrapModeInitialized(true);
+ }
+ } else
+ texture->setCubeMapRWrapModeInitialized(false);
+ }
+#endif
+
cleanupAfterGraphicsCall(false);
}
@@ -326,7 +342,7 @@ void WebGLRenderingContext::blendColor(double red, double green, double blue, do
cleanupAfterGraphicsCall(false);
}
-void WebGLRenderingContext::blendEquation( unsigned long mode )
+void WebGLRenderingContext::blendEquation(unsigned long mode)
{
if (!isGLES2Compliant()) {
if (!validateBlendEquation(mode))
@@ -497,7 +513,7 @@ void WebGLRenderingContext::compileShader(WebGLShader* shader, ExceptionCode& ec
UNUSED_PARAM(ec);
if (!validateWebGLObject(shader))
return;
- m_context->compileShader(shader);
+ m_context->compileShader(objectOrZero(shader));
cleanupAfterGraphicsCall(false);
}
@@ -687,7 +703,7 @@ void WebGLRenderingContext::detachShader(WebGLProgram* program, WebGLShader* sha
UNUSED_PARAM(ec);
if (!validateWebGLObject(program) || !validateWebGLObject(shader))
return;
- m_context->detachShader(program, shader);
+ m_context->detachShader(objectOrZero(program), objectOrZero(shader));
cleanupAfterGraphicsCall(false);
}
@@ -872,7 +888,7 @@ bool WebGLRenderingContext::validateRenderingState(long numElementsRequired)
return numElementsRequired <= smallestNumElements;
}
-bool WebGLRenderingContext::validateWebGLObject(CanvasObject* object)
+bool WebGLRenderingContext::validateWebGLObject(WebGLObject* object)
{
if (!object) {
m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
@@ -1056,7 +1072,7 @@ void WebGLRenderingContext::framebufferRenderbuffer(unsigned long target, unsign
return;
}
}
- m_context->framebufferRenderbuffer(target, attachment, renderbuffertarget, buffer);
+ m_context->framebufferRenderbuffer(target, attachment, renderbuffertarget, objectOrZero(buffer));
m_framebufferBinding->setAttachment(attachment, buffer);
cleanupAfterGraphicsCall(false);
}
@@ -1081,7 +1097,7 @@ void WebGLRenderingContext::framebufferTexture2D(unsigned long target, unsigned
m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION);
return;
}
- m_context->framebufferTexture2D(target, attachment, textarget, texture, level);
+ m_context->framebufferTexture2D(target, attachment, textarget, objectOrZero(texture), level);
m_framebufferBinding->setAttachment(attachment, texture);
cleanupAfterGraphicsCall(false);
}
@@ -1119,9 +1135,8 @@ PassRefPtr<WebGLActiveInfo> WebGLRenderingContext::getActiveAttrib(WebGLProgram*
ActiveInfo info;
if (!validateWebGLObject(program))
return 0;
- if (!m_context->getActiveAttrib(program, index, info)) {
+ if (!m_context->getActiveAttrib(objectOrZero(program), index, info))
return 0;
- }
return WebGLActiveInfo::create(info.name, info.type, info.size);
}
@@ -1131,13 +1146,11 @@ PassRefPtr<WebGLActiveInfo> WebGLRenderingContext::getActiveUniform(WebGLProgram
ActiveInfo info;
if (!validateWebGLObject(program))
return 0;
- if (!m_context->getActiveUniform(program, index, info)) {
+ if (!m_context->getActiveUniform(objectOrZero(program), index, info))
return 0;
- }
- if (!isGLES2Compliant()) {
+ if (!isGLES2Compliant())
if (info.size > 1 && !info.name.endsWith("[0]"))
info.name.append("[0]");
- }
return WebGLActiveInfo::create(info.name, info.type, info.size);
}
@@ -1148,11 +1161,11 @@ bool WebGLRenderingContext::getAttachedShaders(WebGLProgram* program, Vector<Web
if (!validateWebGLObject(program))
return false;
int numShaders = 0;
- m_context->getProgramiv(program, GraphicsContext3D::ATTACHED_SHADERS, &numShaders);
+ m_context->getProgramiv(objectOrZero(program), GraphicsContext3D::ATTACHED_SHADERS, &numShaders);
if (numShaders) {
OwnArrayPtr<unsigned int> shaders(new unsigned int[numShaders]);
int count;
- m_context->getAttachedShaders(program, numShaders, &count, shaders.get());
+ m_context->getAttachedShaders(objectOrZero(program), numShaders, &count, shaders.get());
if (count != numShaders)
return false;
shaderObjects.resize(numShaders);
@@ -1170,7 +1183,7 @@ bool WebGLRenderingContext::getAttachedShaders(WebGLProgram* program, Vector<Web
int WebGLRenderingContext::getAttribLocation(WebGLProgram* program, const String& name)
{
- return m_context->getAttribLocation(program, name);
+ return m_context->getAttribLocation(objectOrZero(program), name);
}
WebGLGetInfo WebGLRenderingContext::getBufferParameter(unsigned long target, unsigned long pname, ExceptionCode& ec)
@@ -1191,8 +1204,7 @@ WebGLGetInfo WebGLRenderingContext::getBufferParameter(unsigned long target, uns
m_context->getBufferParameteriv(target, pname, &value);
if (pname == GraphicsContext3D::BUFFER_SIZE)
return WebGLGetInfo(static_cast<long>(value));
- else
- return WebGLGetInfo(static_cast<unsigned long>(value));
+ return WebGLGetInfo(static_cast<unsigned long>(value));
}
PassRefPtr<WebGLContextAttributes> WebGLRenderingContext::getContextAttributes()
@@ -1234,23 +1246,22 @@ WebGLGetInfo WebGLRenderingContext::getFramebufferAttachmentParameter(unsigned l
m_context->getFramebufferAttachmentParameteriv(target, attachment, pname, &value);
if (pname == GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE)
return WebGLGetInfo(static_cast<unsigned long>(value));
- else
- return WebGLGetInfo(static_cast<long>(value));
- } else {
- WebGLStateRestorer(this, false);
- int type = 0;
- m_context->getFramebufferAttachmentParameteriv(target, attachment, GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &type);
- int value = 0;
- m_context->getFramebufferAttachmentParameteriv(target, attachment, GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &value);
- switch (type) {
- case GraphicsContext3D::RENDERBUFFER:
- return WebGLGetInfo(PassRefPtr<WebGLRenderbuffer>(findRenderbuffer(static_cast<Platform3DObject>(value))));
- case GraphicsContext3D::TEXTURE:
- return WebGLGetInfo(PassRefPtr<WebGLTexture>(findTexture(static_cast<Platform3DObject>(value))));
- default:
- // FIXME: raise exception?
- return WebGLGetInfo();
- }
+ return WebGLGetInfo(static_cast<long>(value));
+ }
+
+ WebGLStateRestorer(this, false);
+ int type = 0;
+ m_context->getFramebufferAttachmentParameteriv(target, attachment, GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &type);
+ int value = 0;
+ m_context->getFramebufferAttachmentParameteriv(target, attachment, GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &value);
+ switch (type) {
+ case GraphicsContext3D::RENDERBUFFER:
+ return WebGLGetInfo(PassRefPtr<WebGLRenderbuffer>(findRenderbuffer(static_cast<Platform3DObject>(value))));
+ case GraphicsContext3D::TEXTURE:
+ return WebGLGetInfo(PassRefPtr<WebGLTexture>(findTexture(static_cast<Platform3DObject>(value))));
+ default:
+ // FIXME: raise exception?
+ return WebGLGetInfo();
}
}
@@ -1448,12 +1459,12 @@ WebGLGetInfo WebGLRenderingContext::getProgramParameter(WebGLProgram* program, u
switch (pname) {
case GraphicsContext3D::DELETE_STATUS:
case GraphicsContext3D::VALIDATE_STATUS:
- m_context->getProgramiv(program, pname, &value);
+ m_context->getProgramiv(objectOrZero(program), pname, &value);
return WebGLGetInfo(static_cast<bool>(value));
case GraphicsContext3D::LINK_STATUS:
if (program->isLinkFailureFlagSet())
return WebGLGetInfo(false);
- m_context->getProgramiv(program, pname, &value);
+ m_context->getProgramiv(objectOrZero(program), pname, &value);
return WebGLGetInfo(static_cast<bool>(value));
case GraphicsContext3D::INFO_LOG_LENGTH:
case GraphicsContext3D::ATTACHED_SHADERS:
@@ -1461,7 +1472,7 @@ WebGLGetInfo WebGLRenderingContext::getProgramParameter(WebGLProgram* program, u
case GraphicsContext3D::ACTIVE_ATTRIBUTE_MAX_LENGTH:
case GraphicsContext3D::ACTIVE_UNIFORMS:
case GraphicsContext3D::ACTIVE_UNIFORM_MAX_LENGTH:
- m_context->getProgramiv(program, pname, &value);
+ m_context->getProgramiv(objectOrZero(program), pname, &value);
return WebGLGetInfo(static_cast<long>(value));
default:
m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
@@ -1475,7 +1486,7 @@ String WebGLRenderingContext::getProgramInfoLog(WebGLProgram* program, Exception
if (!validateWebGLObject(program))
return "";
WebGLStateRestorer(this, false);
- return m_context->getProgramInfoLog(program);
+ return m_context->getProgramInfoLog(objectOrZero(program));
}
WebGLGetInfo WebGLRenderingContext::getRenderbufferParameter(unsigned long target, unsigned long pname, ExceptionCode& ec)
@@ -1521,14 +1532,14 @@ WebGLGetInfo WebGLRenderingContext::getShaderParameter(WebGLShader* shader, unsi
switch (pname) {
case GraphicsContext3D::DELETE_STATUS:
case GraphicsContext3D::COMPILE_STATUS:
- m_context->getShaderiv(shader, pname, &value);
+ m_context->getShaderiv(objectOrZero(shader), pname, &value);
return WebGLGetInfo(static_cast<bool>(value));
case GraphicsContext3D::SHADER_TYPE:
- m_context->getShaderiv(shader, pname, &value);
+ m_context->getShaderiv(objectOrZero(shader), pname, &value);
return WebGLGetInfo(static_cast<unsigned long>(value));
case GraphicsContext3D::INFO_LOG_LENGTH:
case GraphicsContext3D::SHADER_SOURCE_LENGTH:
- m_context->getShaderiv(shader, pname, &value);
+ m_context->getShaderiv(objectOrZero(shader), pname, &value);
return WebGLGetInfo(static_cast<long>(value));
default:
m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
@@ -1542,7 +1553,7 @@ String WebGLRenderingContext::getShaderInfoLog(WebGLShader* shader, ExceptionCod
if (!validateWebGLObject(shader))
return "";
WebGLStateRestorer(this, false);
- return m_context->getShaderInfoLog(shader);
+ return m_context->getShaderInfoLog(objectOrZero(shader));
}
String WebGLRenderingContext::getShaderSource(WebGLShader* shader, ExceptionCode& ec)
@@ -1551,7 +1562,7 @@ String WebGLRenderingContext::getShaderSource(WebGLShader* shader, ExceptionCode
if (!validateWebGLObject(shader))
return "";
WebGLStateRestorer(this, false);
- return m_context->getShaderSource(shader);
+ return m_context->getShaderSource(objectOrZero(shader));
}
String WebGLRenderingContext::getString(unsigned long name)
@@ -1601,10 +1612,10 @@ WebGLGetInfo WebGLRenderingContext::getUniform(WebGLProgram* program, const WebG
WebGLStateRestorer(this, false);
// FIXME: make this more efficient using WebGLUniformLocation and caching types in it
int activeUniforms = 0;
- m_context->getProgramiv(program, GraphicsContext3D::ACTIVE_UNIFORMS, &activeUniforms);
+ m_context->getProgramiv(objectOrZero(program), GraphicsContext3D::ACTIVE_UNIFORMS, &activeUniforms);
for (int i = 0; i < activeUniforms; i++) {
ActiveInfo info;
- if (!m_context->getActiveUniform(program, i, info))
+ if (!m_context->getActiveUniform(objectOrZero(program), i, info))
return WebGLGetInfo();
// Strip "[0]" from the name if it's an array.
if (info.size > 1)
@@ -1618,7 +1629,7 @@ WebGLGetInfo WebGLRenderingContext::getUniform(WebGLProgram* program, const WebG
name.append(']');
}
// Now need to look this up by name again to find its location
- long loc = m_context->getUniformLocation(program, name);
+ long loc = m_context->getUniformLocation(objectOrZero(program), name);
if (loc == location) {
// Found it. Use the type in the ActiveInfo to determine the return type.
GraphicsContext3D::WebGLEnumType baseType;
@@ -1693,21 +1704,21 @@ WebGLGetInfo WebGLRenderingContext::getUniform(WebGLProgram* program, const WebG
switch (baseType) {
case GraphicsContext3D::FLOAT: {
float value[16] = {0};
- m_context->getUniformfv(program, location, value);
+ m_context->getUniformfv(objectOrZero(program), location, value);
if (length == 1)
return WebGLGetInfo(value[0]);
return WebGLGetInfo(Float32Array::create(value, length));
}
case GraphicsContext3D::INT: {
int value[16] = {0};
- m_context->getUniformiv(program, location, value);
+ m_context->getUniformiv(objectOrZero(program), location, value);
if (length == 1)
return WebGLGetInfo(static_cast<long>(value[0]));
return WebGLGetInfo(Int32Array::create(value, length));
}
case GraphicsContext3D::BOOL: {
int value[16] = {0};
- m_context->getUniformiv(program, location, value);
+ m_context->getUniformiv(objectOrZero(program), location, value);
if (length > 1) {
unsigned char boolValue[16] = {0};
for (unsigned j = 0; j < length; j++)
@@ -1733,7 +1744,7 @@ PassRefPtr<WebGLUniformLocation> WebGLRenderingContext::getUniformLocation(WebGL
if (!validateWebGLObject(program))
return 0;
WebGLStateRestorer(this, false);
- long uniformLocation = m_context->getUniformLocation(program, name);
+ long uniformLocation = m_context->getUniformLocation(objectOrZero(program), name);
if (uniformLocation == -1)
return 0;
return WebGLUniformLocation::create(program, uniformLocation);
@@ -1811,7 +1822,7 @@ bool WebGLRenderingContext::isBuffer(WebGLBuffer* buffer)
if (!buffer)
return false;
- return m_context->isBuffer(buffer);
+ return m_context->isBuffer(buffer->object());
}
bool WebGLRenderingContext::isEnabled(unsigned long cap)
@@ -1828,7 +1839,7 @@ bool WebGLRenderingContext::isFramebuffer(WebGLFramebuffer* framebuffer)
if (!framebuffer)
return false;
- return m_context->isFramebuffer(framebuffer);
+ return m_context->isFramebuffer(framebuffer->object());
}
bool WebGLRenderingContext::isProgram(WebGLProgram* program)
@@ -1836,7 +1847,7 @@ bool WebGLRenderingContext::isProgram(WebGLProgram* program)
if (!program)
return false;
- return m_context->isProgram(program);
+ return m_context->isProgram(program->object());
}
bool WebGLRenderingContext::isRenderbuffer(WebGLRenderbuffer* renderbuffer)
@@ -1844,7 +1855,7 @@ bool WebGLRenderingContext::isRenderbuffer(WebGLRenderbuffer* renderbuffer)
if (!renderbuffer)
return false;
- return m_context->isRenderbuffer(renderbuffer);
+ return m_context->isRenderbuffer(renderbuffer->object());
}
bool WebGLRenderingContext::isShader(WebGLShader* shader)
@@ -1852,7 +1863,7 @@ bool WebGLRenderingContext::isShader(WebGLShader* shader)
if (!shader)
return false;
- return m_context->isShader(shader);
+ return m_context->isShader(shader->object());
}
bool WebGLRenderingContext::isTexture(WebGLTexture* texture)
@@ -1860,7 +1871,7 @@ bool WebGLRenderingContext::isTexture(WebGLTexture* texture)
if (!texture)
return false;
- return m_context->isTexture(texture);
+ return m_context->isTexture(texture->object());
}
void WebGLRenderingContext::lineWidth(double width)
@@ -1896,7 +1907,7 @@ void WebGLRenderingContext::linkProgram(WebGLProgram* program, ExceptionCode& ec
program->setLinkFailureFlag(false);
}
- m_context->linkProgram(program);
+ m_context->linkProgram(objectOrZero(program));
program->cacheActiveAttribLocations();
cleanupAfterGraphicsCall(false);
}
@@ -2041,7 +2052,7 @@ void WebGLRenderingContext::shaderSource(WebGLShader* shader, const String& stri
UNUSED_PARAM(ec);
if (!validateWebGLObject(shader))
return;
- m_context->shaderSource(shader, string);
+ m_context->shaderSource(objectOrZero(shader), string);
cleanupAfterGraphicsCall(false);
}
@@ -2930,7 +2941,7 @@ void WebGLRenderingContext::useProgram(WebGLProgram* program, ExceptionCode& ec)
return;
}
m_currentProgram = program;
- m_context->useProgram(program);
+ m_context->useProgram(objectOrZero(program));
cleanupAfterGraphicsCall(false);
}
@@ -2939,7 +2950,7 @@ void WebGLRenderingContext::validateProgram(WebGLProgram* program, ExceptionCode
UNUSED_PARAM(ec);
if (!validateWebGLObject(program))
return;
- m_context->validateProgram(program);
+ m_context->validateProgram(objectOrZero(program));
cleanupAfterGraphicsCall(false);
}
@@ -3005,6 +3016,7 @@ void WebGLRenderingContext::vertexAttrib4fv(unsigned long index, float* v, int s
void WebGLRenderingContext::vertexAttribPointer(unsigned long index, long size, unsigned long type, bool normalized, long stride, long offset, ExceptionCode& ec)
{
+ UNUSED_PARAM(ec);
if (index >= m_maxVertexAttribs) {
m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
return;
@@ -3018,15 +3030,17 @@ void WebGLRenderingContext::vertexAttribPointer(unsigned long index, long size,
return;
}
// Determine the number of elements the bound buffer can hold, given the offset, size, type and stride
- long bytesPerElement = size * sizeInBytes(type, ec);
- if (bytesPerElement <= 0)
+ long bytesPerElement = size * sizeInBytes(type);
+ if (bytesPerElement <= 0) {
+ m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
return;
+ }
if (index >= m_vertexAttribState.size())
m_vertexAttribState.resize(index + 1);
long validatedStride = bytesPerElement;
- if (stride != 0) {
+ if (stride) {
if ((long) stride < bytesPerElement) {
m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
return;
@@ -3059,12 +3073,12 @@ void WebGLRenderingContext::viewport(long x, long y, unsigned long width, unsign
cleanupAfterGraphicsCall(false);
}
-void WebGLRenderingContext::removeObject(CanvasObject* object)
+void WebGLRenderingContext::removeObject(WebGLObject* object)
{
m_canvasObjects.remove(object);
}
-void WebGLRenderingContext::addObject(CanvasObject* object)
+void WebGLRenderingContext::addObject(WebGLObject* object)
{
removeObject(object);
m_canvasObjects.add(object);
@@ -3072,8 +3086,8 @@ void WebGLRenderingContext::addObject(CanvasObject* object)
void WebGLRenderingContext::detachAndRemoveAllObjects()
{
- HashSet<RefPtr<CanvasObject> >::iterator pend = m_canvasObjects.end();
- for (HashSet<RefPtr<CanvasObject> >::iterator it = m_canvasObjects.begin(); it != pend; ++it)
+ HashSet<RefPtr<WebGLObject> >::iterator pend = m_canvasObjects.end();
+ for (HashSet<RefPtr<WebGLObject> >::iterator it = m_canvasObjects.begin(); it != pend; ++it)
(*it)->detachContext();
m_canvasObjects.clear();
@@ -3083,8 +3097,8 @@ WebGLTexture* WebGLRenderingContext::findTexture(Platform3DObject obj)
{
if (!obj)
return 0;
- HashSet<RefPtr<CanvasObject> >::iterator pend = m_canvasObjects.end();
- for (HashSet<RefPtr<CanvasObject> >::iterator it = m_canvasObjects.begin(); it != pend; ++it) {
+ HashSet<RefPtr<WebGLObject> >::iterator pend = m_canvasObjects.end();
+ for (HashSet<RefPtr<WebGLObject> >::iterator it = m_canvasObjects.begin(); it != pend; ++it) {
if ((*it)->isTexture() && (*it)->object() == obj)
return reinterpret_cast<WebGLTexture*>((*it).get());
}
@@ -3095,8 +3109,8 @@ WebGLRenderbuffer* WebGLRenderingContext::findRenderbuffer(Platform3DObject obj)
{
if (!obj)
return 0;
- HashSet<RefPtr<CanvasObject> >::iterator pend = m_canvasObjects.end();
- for (HashSet<RefPtr<CanvasObject> >::iterator it = m_canvasObjects.begin(); it != pend; ++it) {
+ HashSet<RefPtr<WebGLObject> >::iterator pend = m_canvasObjects.end();
+ for (HashSet<RefPtr<WebGLObject> >::iterator it = m_canvasObjects.begin(); it != pend; ++it) {
if ((*it)->isRenderbuffer() && (*it)->object() == obj)
return reinterpret_cast<WebGLRenderbuffer*>((*it).get());
}
@@ -3107,8 +3121,8 @@ WebGLBuffer* WebGLRenderingContext::findBuffer(Platform3DObject obj)
{
if (!obj)
return 0;
- HashSet<RefPtr<CanvasObject> >::iterator pend = m_canvasObjects.end();
- for (HashSet<RefPtr<CanvasObject> >::iterator it = m_canvasObjects.begin(); it != pend; ++it) {
+ HashSet<RefPtr<WebGLObject> >::iterator pend = m_canvasObjects.end();
+ for (HashSet<RefPtr<WebGLObject> >::iterator it = m_canvasObjects.begin(); it != pend; ++it) {
if ((*it)->isBuffer() && (*it)->object() == obj)
return reinterpret_cast<WebGLBuffer*>((*it).get());
}
@@ -3119,8 +3133,8 @@ WebGLShader* WebGLRenderingContext::findShader(Platform3DObject obj)
{
if (!obj)
return 0;
- HashSet<RefPtr<CanvasObject> >::iterator pend = m_canvasObjects.end();
- for (HashSet<RefPtr<CanvasObject> >::iterator it = m_canvasObjects.begin(); it != pend; ++it) {
+ HashSet<RefPtr<WebGLObject> >::iterator pend = m_canvasObjects.end();
+ for (HashSet<RefPtr<WebGLObject> >::iterator it = m_canvasObjects.begin(); it != pend; ++it) {
if ((*it)->isShader() && (*it)->object() == obj)
return reinterpret_cast<WebGLShader*>((*it).get());
}
@@ -3242,9 +3256,9 @@ void WebGLRenderingContext::handleNPOTTextures(bool prepareToDraw)
texCubeMap = m_textureUnits[ii].m_textureCubeMapBinding.get();
}
if (m_textureUnits[ii].m_texture2DBinding && m_textureUnits[ii].m_texture2DBinding->needToUseBlackTexture())
- m_context->bindTexture(GraphicsContext3D::TEXTURE_2D, tex2D);
+ m_context->bindTexture(GraphicsContext3D::TEXTURE_2D, objectOrZero(tex2D));
if (m_textureUnits[ii].m_textureCubeMapBinding && m_textureUnits[ii].m_textureCubeMapBinding->needToUseBlackTexture())
- m_context->bindTexture(GraphicsContext3D::TEXTURE_CUBE_MAP, texCubeMap);
+ m_context->bindTexture(GraphicsContext3D::TEXTURE_CUBE_MAP, objectOrZero(texCubeMap));
}
}
if (resetActiveUnit)
@@ -3255,12 +3269,12 @@ void WebGLRenderingContext::createFallbackBlackTextures1x1()
{
unsigned char black[] = {0, 0, 0, 255};
m_blackTexture2D = createTexture();
- m_context->bindTexture(GraphicsContext3D::TEXTURE_2D, m_blackTexture2D.get());
+ m_context->bindTexture(GraphicsContext3D::TEXTURE_2D, m_blackTexture2D->object());
m_context->texImage2D(GraphicsContext3D::TEXTURE_2D, 0, GraphicsContext3D::RGBA, 1, 1,
0, GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNED_BYTE, black);
m_context->bindTexture(GraphicsContext3D::TEXTURE_2D, 0);
m_blackTextureCubeMap = createTexture();
- m_context->bindTexture(GraphicsContext3D::TEXTURE_CUBE_MAP, m_blackTextureCubeMap.get());
+ m_context->bindTexture(GraphicsContext3D::TEXTURE_CUBE_MAP, m_blackTextureCubeMap->object());
m_context->texImage2D(GraphicsContext3D::TEXTURE_CUBE_MAP_POSITIVE_X, 0, GraphicsContext3D::RGBA, 1, 1,
0, GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNED_BYTE, black);
m_context->texImage2D(GraphicsContext3D::TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GraphicsContext3D::RGBA, 1, 1,
@@ -3716,7 +3730,7 @@ void WebGLRenderingContext::initVertexAttrib0()
{
m_vertexAttribState.resize(1);
m_vertexAttrib0Buffer = createBuffer();
- m_context->bindBuffer(GraphicsContext3D::ARRAY_BUFFER, m_vertexAttrib0Buffer.get());
+ m_context->bindBuffer(GraphicsContext3D::ARRAY_BUFFER, m_vertexAttrib0Buffer->object());
m_context->bufferData(GraphicsContext3D::ARRAY_BUFFER, 0, GraphicsContext3D::DYNAMIC_DRAW);
m_context->vertexAttribPointer(0, 4, GraphicsContext3D::FLOAT, false, 0, 0);
m_vertexAttribState[0].bufferBinding = m_vertexAttrib0Buffer;
@@ -3735,7 +3749,7 @@ bool WebGLRenderingContext::simulateVertexAttrib0(long numVertex)
if (state.enabled || !m_currentProgram || !m_currentProgram->object()
|| !m_currentProgram->isUsingVertexAttrib0())
return false;
- m_context->bindBuffer(GraphicsContext3D::ARRAY_BUFFER, m_vertexAttrib0Buffer.get());
+ m_context->bindBuffer(GraphicsContext3D::ARRAY_BUFFER, m_vertexAttrib0Buffer->object());
long bufferDataSize = (numVertex + 1) * 4 * sizeof(float);
if (bufferDataSize > m_vertexAttrib0BufferSize
|| state.value[0] != m_vertexAttrib0BufferValue[0]
@@ -3764,10 +3778,10 @@ void WebGLRenderingContext::restoreStatesAfterVertexAttrib0Simulation()
{
const VertexAttribState& state = m_vertexAttribState[0];
if (state.bufferBinding != m_vertexAttrib0Buffer) {
- m_context->bindBuffer(GraphicsContext3D::ARRAY_BUFFER, state.bufferBinding.get());
+ m_context->bindBuffer(GraphicsContext3D::ARRAY_BUFFER, objectOrZero(state.bufferBinding.get()));
m_context->vertexAttribPointer(0, state.size, state.type, state.normalized, state.originalStride, state.offset);
}
- m_context->bindBuffer(GraphicsContext3D::ARRAY_BUFFER, m_boundArrayBuffer.get());
+ m_context->bindBuffer(GraphicsContext3D::ARRAY_BUFFER, objectOrZero(m_boundArrayBuffer.get()));
}
} // namespace WebCore
diff --git a/WebCore/html/canvas/WebGLRenderingContext.h b/WebCore/html/canvas/WebGLRenderingContext.h
index 017570b..608797f 100644
--- a/WebCore/html/canvas/WebGLRenderingContext.h
+++ b/WebCore/html/canvas/WebGLRenderingContext.h
@@ -29,11 +29,11 @@
#include "CanvasRenderingContext.h"
#include "ExceptionCode.h"
#include "Float32Array.h"
-#include "WebGLGetInfo.h"
-#include "Int32Array.h"
-#include "Uint8Array.h"
#include "GraphicsContext3D.h"
+#include "Int32Array.h"
#include "PlatformString.h"
+#include "Uint8Array.h"
+#include "WebGLGetInfo.h"
namespace WebCore {
@@ -41,7 +41,7 @@ class WebGLActiveInfo;
class WebGLBuffer;
class WebGLContextAttributes;
class WebGLFramebuffer;
-class CanvasObject;
+class WebGLObject;
class WebGLProgram;
class WebGLRenderbuffer;
class WebGLShader;
@@ -52,480 +52,478 @@ class HTMLVideoElement;
class ImageData;
class WebKitCSSMatrix;
- class WebGLRenderingContext : public CanvasRenderingContext {
- public:
- static PassOwnPtr<WebGLRenderingContext> create(HTMLCanvasElement*, WebGLContextAttributes*);
- virtual ~WebGLRenderingContext();
-
- virtual bool is3d() const { return true; }
- virtual bool isAccelerated() const { return true; }
-
- // Helper to return the size in bytes of OpenGL data types
- // like GL_FLOAT, GL_INT, etc.
- int sizeInBytes(int type, ExceptionCode& ec);
-
- void activeTexture(unsigned long texture, ExceptionCode& ec);
- void attachShader(WebGLProgram*, WebGLShader*, ExceptionCode& ec);
- void bindAttribLocation(WebGLProgram*, unsigned long index, const String& name, ExceptionCode& ec);
- void bindBuffer(unsigned long target, WebGLBuffer*, ExceptionCode& ec);
- void bindFramebuffer(unsigned long target, WebGLFramebuffer*, ExceptionCode& ec);
- void bindRenderbuffer(unsigned long target, WebGLRenderbuffer*, ExceptionCode& ec);
- void bindTexture(unsigned long target, WebGLTexture*, ExceptionCode& ec);
- void blendColor(double red, double green, double blue, double alpha);
- void blendEquation(unsigned long mode);
- void blendEquationSeparate(unsigned long modeRGB, unsigned long modeAlpha);
- void blendFunc(unsigned long sfactor, unsigned long dfactor);
- void blendFuncSeparate(unsigned long srcRGB, unsigned long dstRGB, unsigned long srcAlpha, unsigned long dstAlpha);
+class WebGLRenderingContext : public CanvasRenderingContext {
+public:
+ static PassOwnPtr<WebGLRenderingContext> create(HTMLCanvasElement*, WebGLContextAttributes*);
+ virtual ~WebGLRenderingContext();
- void bufferData(unsigned long target, int size, unsigned long usage, ExceptionCode&);
- void bufferData(unsigned long target, ArrayBuffer* data, unsigned long usage, ExceptionCode&);
- void bufferData(unsigned long target, ArrayBufferView* data, unsigned long usage, ExceptionCode&);
- void bufferSubData(unsigned long target, long offset, ArrayBuffer* data, ExceptionCode&);
- void bufferSubData(unsigned long target, long offset, ArrayBufferView* data, ExceptionCode&);
-
- unsigned long checkFramebufferStatus(unsigned long target);
- void clear(unsigned long mask);
- void clearColor(double red, double green, double blue, double alpha);
- void clearDepth(double);
- void clearStencil(long);
- void colorMask(bool red, bool green, bool blue, bool alpha);
- void compileShader(WebGLShader*, ExceptionCode& ec);
-
- //void compressedTexImage2D(unsigned long target, long level, unsigned long internalformat, unsigned long width, unsigned long height, long border, unsigned long imageSize, const void* data);
- //void compressedTexSubImage2D(unsigned long target, long level, long xoffset, long yoffset, unsigned long width, unsigned long height, unsigned long format, unsigned long imageSize, const void* data);
-
- void copyTexImage2D(unsigned long target, long level, unsigned long internalformat, long x, long y, unsigned long width, unsigned long height, long border);
- void copyTexSubImage2D(unsigned long target, long level, long xoffset, long yoffset, long x, long y, unsigned long width, unsigned long height);
-
- PassRefPtr<WebGLBuffer> createBuffer();
- PassRefPtr<WebGLFramebuffer> createFramebuffer();
- PassRefPtr<WebGLProgram> createProgram();
- PassRefPtr<WebGLRenderbuffer> createRenderbuffer();
- PassRefPtr<WebGLShader> createShader(unsigned long type, ExceptionCode&);
- PassRefPtr<WebGLTexture> createTexture();
-
- void cullFace(unsigned long mode);
-
- void deleteBuffer(WebGLBuffer*);
- void deleteFramebuffer(WebGLFramebuffer*);
- void deleteProgram(WebGLProgram*);
- void deleteRenderbuffer(WebGLRenderbuffer*);
- void deleteShader(WebGLShader*);
- void deleteTexture(WebGLTexture*);
-
- void depthFunc(unsigned long);
- void depthMask(bool);
- void depthRange(double zNear, double zFar);
- void detachShader(WebGLProgram*, WebGLShader*, ExceptionCode&);
- void disable(unsigned long cap);
- void disableVertexAttribArray(unsigned long index, ExceptionCode&);
- void drawArrays(unsigned long mode, long first, long count, ExceptionCode&);
- void drawElements(unsigned long mode, long count, unsigned long type, long offset, ExceptionCode&);
-
- void enable(unsigned long cap);
- void enableVertexAttribArray(unsigned long index, ExceptionCode&);
- void finish();
- void flush();
- void framebufferRenderbuffer(unsigned long target, unsigned long attachment, unsigned long renderbuffertarget, WebGLRenderbuffer*, ExceptionCode& ec);
- void framebufferTexture2D(unsigned long target, unsigned long attachment, unsigned long textarget, WebGLTexture*, long level, ExceptionCode& ec);
- void frontFace(unsigned long mode);
- void generateMipmap(unsigned long target);
-
- PassRefPtr<WebGLActiveInfo> getActiveAttrib(WebGLProgram*, unsigned long index, ExceptionCode&);
- PassRefPtr<WebGLActiveInfo> getActiveUniform(WebGLProgram*, unsigned long index, ExceptionCode&);
-
- bool getAttachedShaders(WebGLProgram*, Vector<WebGLShader*>&, ExceptionCode&);
-
- int getAttribLocation(WebGLProgram*, const String& name);
-
- WebGLGetInfo getBufferParameter(unsigned long target, unsigned long pname, ExceptionCode&);
-
- PassRefPtr<WebGLContextAttributes> getContextAttributes();
-
- unsigned long getError();
-
- WebGLGetInfo getFramebufferAttachmentParameter(unsigned long target, unsigned long attachment, unsigned long pname, ExceptionCode&);
-
- WebGLGetInfo getParameter(unsigned long pname, ExceptionCode&);
-
- WebGLGetInfo getProgramParameter(WebGLProgram*, unsigned long pname, ExceptionCode&);
-
- String getProgramInfoLog(WebGLProgram*, ExceptionCode& ec);
-
- WebGLGetInfo getRenderbufferParameter(unsigned long target, unsigned long pname, ExceptionCode&);
-
- WebGLGetInfo getShaderParameter(WebGLShader*, unsigned long pname, ExceptionCode& ec);
-
- String getShaderInfoLog(WebGLShader*, ExceptionCode& ec);
-
- // TBD
- // void glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision);
-
- String getShaderSource(WebGLShader*, ExceptionCode&);
- String getString(unsigned long name);
-
- WebGLGetInfo getTexParameter(unsigned long target, unsigned long pname, ExceptionCode&);
-
- WebGLGetInfo getUniform(WebGLProgram*, const WebGLUniformLocation*, ExceptionCode&);
-
- PassRefPtr<WebGLUniformLocation> getUniformLocation(WebGLProgram*, const String&, ExceptionCode&);
-
- WebGLGetInfo getVertexAttrib(unsigned long index, unsigned long pname, ExceptionCode&);
-
- long getVertexAttribOffset(unsigned long index, unsigned long pname);
-
- void hint(unsigned long target, unsigned long mode);
- bool isBuffer(WebGLBuffer*);
- bool isEnabled(unsigned long cap);
- bool isFramebuffer(WebGLFramebuffer*);
- bool isProgram(WebGLProgram*);
- bool isRenderbuffer(WebGLRenderbuffer*);
- bool isShader(WebGLShader*);
- bool isTexture(WebGLTexture*);
- void lineWidth(double);
- void linkProgram(WebGLProgram*, ExceptionCode&);
- void pixelStorei(unsigned long pname, long param);
- void polygonOffset(double factor, double units);
- void readPixels(long x, long y, long width, long height, unsigned long format, unsigned long type, ArrayBufferView* pixels);
- void releaseShaderCompiler();
- void renderbufferStorage(unsigned long target, unsigned long internalformat, unsigned long width, unsigned long height);
- void sampleCoverage(double value, bool invert);
- void scissor(long x, long y, unsigned long width, unsigned long height);
- void shaderSource(WebGLShader*, const String&, ExceptionCode&);
- void stencilFunc(unsigned long func, long ref, unsigned long mask);
- void stencilFuncSeparate(unsigned long face, unsigned long func, long ref, unsigned long mask);
- void stencilMask(unsigned long);
- void stencilMaskSeparate(unsigned long face, unsigned long mask);
- void stencilOp(unsigned long fail, unsigned long zfail, unsigned long zpass);
- void stencilOpSeparate(unsigned long face, unsigned long fail, unsigned long zfail, unsigned long zpass);
+ virtual bool is3d() const { return true; }
+ virtual bool isAccelerated() const { return true; }
- void texImage2D(unsigned target, unsigned level, unsigned internalformat,
- unsigned width, unsigned height, unsigned border,
- unsigned format, unsigned type, ArrayBufferView* pixels, ExceptionCode&);
- void texImage2D(unsigned target, unsigned level, unsigned internalformat,
- unsigned format, unsigned type, ImageData* pixels, ExceptionCode&);
- void texImage2D(unsigned target, unsigned level, unsigned internalformat,
- unsigned format, unsigned type, HTMLImageElement* image, ExceptionCode&);
- void texImage2D(unsigned target, unsigned level, unsigned internalformat,
- unsigned format, unsigned type, HTMLCanvasElement* canvas, ExceptionCode&);
- void texImage2D(unsigned target, unsigned level, unsigned internalformat,
- unsigned format, unsigned type, HTMLVideoElement* video, ExceptionCode&);
- // Obsolete entry points -- to be removed shortly. (FIXME)
- void texImage2D(unsigned target, unsigned level, ImageData* pixels, ExceptionCode&);
- void texImage2D(unsigned target, unsigned level, ImageData* pixels, bool flipY, ExceptionCode&);
- void texImage2D(unsigned target, unsigned level, ImageData* pixels, bool flipY, bool premultiplyAlpha, ExceptionCode&);
- void texImage2D(unsigned target, unsigned level, HTMLImageElement* image, ExceptionCode&);
- void texImage2D(unsigned target, unsigned level, HTMLImageElement* image, bool flipY, ExceptionCode&);
- void texImage2D(unsigned target, unsigned level, HTMLImageElement* image, bool flipY, bool premultiplyAlpha, ExceptionCode&);
- void texImage2D(unsigned target, unsigned level, HTMLCanvasElement* canvas, ExceptionCode&);
- void texImage2D(unsigned target, unsigned level, HTMLCanvasElement* canvas, bool flipY, ExceptionCode&);
- void texImage2D(unsigned target, unsigned level, HTMLCanvasElement* canvas, bool flipY, bool premultiplyAlpha, ExceptionCode&);
- void texImage2D(unsigned target, unsigned level, HTMLVideoElement* video, ExceptionCode&);
- void texImage2D(unsigned target, unsigned level, HTMLVideoElement* video, bool flipY, ExceptionCode&);
- void texImage2D(unsigned target, unsigned level, HTMLVideoElement* video, bool flipY, bool premultiplyAlpha, ExceptionCode&);
-
- void texParameterf(unsigned target, unsigned pname, float param);
- void texParameteri(unsigned target, unsigned pname, int param);
-
- void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset,
- unsigned width, unsigned height,
- unsigned format, unsigned type, ArrayBufferView* pixels, ExceptionCode&);
- void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset,
- unsigned format, unsigned type, ImageData* pixels, ExceptionCode&);
- void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset,
- unsigned format, unsigned type, HTMLImageElement* image, ExceptionCode&);
- void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset,
- unsigned format, unsigned type, HTMLCanvasElement* canvas, ExceptionCode&);
- void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset,
- unsigned format, unsigned type, HTMLVideoElement* video, ExceptionCode&);
- // Obsolete entry points -- to be removed shortly. (FIXME)
- void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, ImageData* pixels, ExceptionCode&);
- void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, ImageData* pixels, bool flipY, ExceptionCode&);
- void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, ImageData* pixels, bool flipY, bool premultiplyAlpha, ExceptionCode&);
- void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, HTMLImageElement* image, ExceptionCode&);
- void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, HTMLImageElement* image, bool flipY, ExceptionCode&);
- void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, HTMLImageElement* image, bool flipY, bool premultiplyAlpha, ExceptionCode&);
- void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, HTMLCanvasElement* canvas, ExceptionCode&);
- void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, HTMLCanvasElement* canvas, bool flipY, ExceptionCode&);
- void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, HTMLCanvasElement* canvas, bool flipY, bool premultiplyAlpha, ExceptionCode&);
- void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, HTMLVideoElement* video, ExceptionCode&);
- void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, HTMLVideoElement* video, bool flipY, ExceptionCode&);
- void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, HTMLVideoElement* video, bool flipY, bool premultiplyAlpha, ExceptionCode&);
-
- void uniform1f(const WebGLUniformLocation* location, float x, ExceptionCode&);
- void uniform1fv(const WebGLUniformLocation* location, Float32Array* v, ExceptionCode&);
- void uniform1fv(const WebGLUniformLocation* location, float* v, int size, ExceptionCode&);
- void uniform1i(const WebGLUniformLocation* location, int x, ExceptionCode&);
- void uniform1iv(const WebGLUniformLocation* location, Int32Array* v, ExceptionCode&);
- void uniform1iv(const WebGLUniformLocation* location, int* v, int size, ExceptionCode&);
- void uniform2f(const WebGLUniformLocation* location, float x, float y, ExceptionCode&);
- void uniform2fv(const WebGLUniformLocation* location, Float32Array* v, ExceptionCode&);
- void uniform2fv(const WebGLUniformLocation* location, float* v, int size, ExceptionCode&);
- void uniform2i(const WebGLUniformLocation* location, int x, int y, ExceptionCode&);
- void uniform2iv(const WebGLUniformLocation* location, Int32Array* v, ExceptionCode&);
- void uniform2iv(const WebGLUniformLocation* location, int* v, int size, ExceptionCode&);
- void uniform3f(const WebGLUniformLocation* location, float x, float y, float z, ExceptionCode&);
- void uniform3fv(const WebGLUniformLocation* location, Float32Array* v, ExceptionCode&);
- void uniform3fv(const WebGLUniformLocation* location, float* v, int size, ExceptionCode&);
- void uniform3i(const WebGLUniformLocation* location, int x, int y, int z, ExceptionCode&);
- void uniform3iv(const WebGLUniformLocation* location, Int32Array* v, ExceptionCode&);
- void uniform3iv(const WebGLUniformLocation* location, int* v, int size, ExceptionCode&);
- void uniform4f(const WebGLUniformLocation* location, float x, float y, float z, float w, ExceptionCode&);
- void uniform4fv(const WebGLUniformLocation* location, Float32Array* v, ExceptionCode&);
- void uniform4fv(const WebGLUniformLocation* location, float* v, int size, ExceptionCode&);
- void uniform4i(const WebGLUniformLocation* location, int x, int y, int z, int w, ExceptionCode&);
- void uniform4iv(const WebGLUniformLocation* location, Int32Array* v, ExceptionCode&);
- void uniform4iv(const WebGLUniformLocation* location, int* v, int size, ExceptionCode&);
- void uniformMatrix2fv(const WebGLUniformLocation* location, bool transpose, Float32Array* value, ExceptionCode&);
- void uniformMatrix2fv(const WebGLUniformLocation* location, bool transpose, float* value, int size, ExceptionCode&);
- void uniformMatrix3fv(const WebGLUniformLocation* location, bool transpose, Float32Array* value, ExceptionCode&);
- void uniformMatrix3fv(const WebGLUniformLocation* location, bool transpose, float* value, int size, ExceptionCode&);
- void uniformMatrix4fv(const WebGLUniformLocation* location, bool transpose, Float32Array* value, ExceptionCode&);
- void uniformMatrix4fv(const WebGLUniformLocation* location, bool transpose, float* value, int size, ExceptionCode&);
-
- void useProgram(WebGLProgram*, ExceptionCode&);
- void validateProgram(WebGLProgram*, ExceptionCode&);
-
- void vertexAttrib1f(unsigned long index, float x);
- void vertexAttrib1fv(unsigned long index, Float32Array* values);
- void vertexAttrib1fv(unsigned long index, float* values, int size);
- void vertexAttrib2f(unsigned long index, float x, float y);
- void vertexAttrib2fv(unsigned long index, Float32Array* values);
- void vertexAttrib2fv(unsigned long index, float* values, int size);
- void vertexAttrib3f(unsigned long index, float x, float y, float z);
- void vertexAttrib3fv(unsigned long index, Float32Array* values);
- void vertexAttrib3fv(unsigned long index, float* values, int size);
- void vertexAttrib4f(unsigned long index, float x, float y, float z, float w);
- void vertexAttrib4fv(unsigned long index, Float32Array* values);
- void vertexAttrib4fv(unsigned long index, float* values, int size);
- void vertexAttribPointer(unsigned long index, long size, unsigned long type, bool normalized,
- long stride, long offset, ExceptionCode&);
-
- void viewport(long x, long y, unsigned long width, unsigned long height);
-
- GraphicsContext3D* graphicsContext3D() const { return m_context.get(); }
-
- void reshape(int width, int height);
-
- // Return value true indicates canvas is updated during the call,
- // false indicates no updates.
- bool paintRenderingResultsToCanvas();
-
- // Helpers for notification about paint events.
- void beginPaint();
- void endPaint();
-
- void removeObject(CanvasObject*);
-
- private:
- friend class CanvasObject;
-
- WebGLRenderingContext(HTMLCanvasElement*, PassOwnPtr<GraphicsContext3D>);
-
- void addObject(CanvasObject*);
- void detachAndRemoveAllObjects();
- WebGLTexture* findTexture(Platform3DObject);
- WebGLRenderbuffer* findRenderbuffer(Platform3DObject);
- WebGLBuffer* findBuffer(Platform3DObject);
- WebGLShader* findShader(Platform3DObject);
-
- void markContextChanged();
- void cleanupAfterGraphicsCall(bool changed)
+ void activeTexture(unsigned long texture, ExceptionCode& ec);
+ void attachShader(WebGLProgram*, WebGLShader*, ExceptionCode& ec);
+ void bindAttribLocation(WebGLProgram*, unsigned long index, const String& name, ExceptionCode& ec);
+ void bindBuffer(unsigned long target, WebGLBuffer*, ExceptionCode& ec);
+ void bindFramebuffer(unsigned long target, WebGLFramebuffer*, ExceptionCode& ec);
+ void bindRenderbuffer(unsigned long target, WebGLRenderbuffer*, ExceptionCode& ec);
+ void bindTexture(unsigned long target, WebGLTexture*, ExceptionCode& ec);
+ void blendColor(double red, double green, double blue, double alpha);
+ void blendEquation(unsigned long mode);
+ void blendEquationSeparate(unsigned long modeRGB, unsigned long modeAlpha);
+ void blendFunc(unsigned long sfactor, unsigned long dfactor);
+ void blendFuncSeparate(unsigned long srcRGB, unsigned long dstRGB, unsigned long srcAlpha, unsigned long dstAlpha);
+
+ void bufferData(unsigned long target, int size, unsigned long usage, ExceptionCode&);
+ void bufferData(unsigned long target, ArrayBuffer* data, unsigned long usage, ExceptionCode&);
+ void bufferData(unsigned long target, ArrayBufferView* data, unsigned long usage, ExceptionCode&);
+ void bufferSubData(unsigned long target, long offset, ArrayBuffer* data, ExceptionCode&);
+ void bufferSubData(unsigned long target, long offset, ArrayBufferView* data, ExceptionCode&);
+
+ unsigned long checkFramebufferStatus(unsigned long target);
+ void clear(unsigned long mask);
+ void clearColor(double red, double green, double blue, double alpha);
+ void clearDepth(double);
+ void clearStencil(long);
+ void colorMask(bool red, bool green, bool blue, bool alpha);
+ void compileShader(WebGLShader*, ExceptionCode& ec);
+
+ // void compressedTexImage2D(unsigned long target, long level, unsigned long internalformat, unsigned long width, unsigned long height, long border, unsigned long imageSize, const void* data);
+ // void compressedTexSubImage2D(unsigned long target, long level, long xoffset, long yoffset, unsigned long width, unsigned long height, unsigned long format, unsigned long imageSize, const void* data);
+
+ void copyTexImage2D(unsigned long target, long level, unsigned long internalformat, long x, long y, unsigned long width, unsigned long height, long border);
+ void copyTexSubImage2D(unsigned long target, long level, long xoffset, long yoffset, long x, long y, unsigned long width, unsigned long height);
+
+ PassRefPtr<WebGLBuffer> createBuffer();
+ PassRefPtr<WebGLFramebuffer> createFramebuffer();
+ PassRefPtr<WebGLProgram> createProgram();
+ PassRefPtr<WebGLRenderbuffer> createRenderbuffer();
+ PassRefPtr<WebGLShader> createShader(unsigned long type, ExceptionCode&);
+ PassRefPtr<WebGLTexture> createTexture();
+
+ void cullFace(unsigned long mode);
+
+ void deleteBuffer(WebGLBuffer*);
+ void deleteFramebuffer(WebGLFramebuffer*);
+ void deleteProgram(WebGLProgram*);
+ void deleteRenderbuffer(WebGLRenderbuffer*);
+ void deleteShader(WebGLShader*);
+ void deleteTexture(WebGLTexture*);
+
+ void depthFunc(unsigned long);
+ void depthMask(bool);
+ void depthRange(double zNear, double zFar);
+ void detachShader(WebGLProgram*, WebGLShader*, ExceptionCode&);
+ void disable(unsigned long cap);
+ void disableVertexAttribArray(unsigned long index, ExceptionCode&);
+ void drawArrays(unsigned long mode, long first, long count, ExceptionCode&);
+ void drawElements(unsigned long mode, long count, unsigned long type, long offset, ExceptionCode&);
+
+ void enable(unsigned long cap);
+ void enableVertexAttribArray(unsigned long index, ExceptionCode&);
+ void finish();
+ void flush();
+ void framebufferRenderbuffer(unsigned long target, unsigned long attachment, unsigned long renderbuffertarget, WebGLRenderbuffer*, ExceptionCode& ec);
+ void framebufferTexture2D(unsigned long target, unsigned long attachment, unsigned long textarget, WebGLTexture*, long level, ExceptionCode& ec);
+ void frontFace(unsigned long mode);
+ void generateMipmap(unsigned long target);
+
+ PassRefPtr<WebGLActiveInfo> getActiveAttrib(WebGLProgram*, unsigned long index, ExceptionCode&);
+ PassRefPtr<WebGLActiveInfo> getActiveUniform(WebGLProgram*, unsigned long index, ExceptionCode&);
+
+ bool getAttachedShaders(WebGLProgram*, Vector<WebGLShader*>&, ExceptionCode&);
+
+ int getAttribLocation(WebGLProgram*, const String& name);
+
+ WebGLGetInfo getBufferParameter(unsigned long target, unsigned long pname, ExceptionCode&);
+
+ PassRefPtr<WebGLContextAttributes> getContextAttributes();
+
+ unsigned long getError();
+
+ WebGLGetInfo getFramebufferAttachmentParameter(unsigned long target, unsigned long attachment, unsigned long pname, ExceptionCode&);
+
+ WebGLGetInfo getParameter(unsigned long pname, ExceptionCode&);
+
+ WebGLGetInfo getProgramParameter(WebGLProgram*, unsigned long pname, ExceptionCode&);
+
+ String getProgramInfoLog(WebGLProgram*, ExceptionCode& ec);
+
+ WebGLGetInfo getRenderbufferParameter(unsigned long target, unsigned long pname, ExceptionCode&);
+
+ WebGLGetInfo getShaderParameter(WebGLShader*, unsigned long pname, ExceptionCode& ec);
+
+ String getShaderInfoLog(WebGLShader*, ExceptionCode& ec);
+
+ // TBD
+ // void glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision);
+
+ String getShaderSource(WebGLShader*, ExceptionCode&);
+ String getString(unsigned long name);
+
+ WebGLGetInfo getTexParameter(unsigned long target, unsigned long pname, ExceptionCode&);
+
+ WebGLGetInfo getUniform(WebGLProgram*, const WebGLUniformLocation*, ExceptionCode&);
+
+ PassRefPtr<WebGLUniformLocation> getUniformLocation(WebGLProgram*, const String&, ExceptionCode&);
+
+ WebGLGetInfo getVertexAttrib(unsigned long index, unsigned long pname, ExceptionCode&);
+
+ long getVertexAttribOffset(unsigned long index, unsigned long pname);
+
+ void hint(unsigned long target, unsigned long mode);
+ bool isBuffer(WebGLBuffer*);
+ bool isEnabled(unsigned long cap);
+ bool isFramebuffer(WebGLFramebuffer*);
+ bool isProgram(WebGLProgram*);
+ bool isRenderbuffer(WebGLRenderbuffer*);
+ bool isShader(WebGLShader*);
+ bool isTexture(WebGLTexture*);
+ void lineWidth(double);
+ void linkProgram(WebGLProgram*, ExceptionCode&);
+ void pixelStorei(unsigned long pname, long param);
+ void polygonOffset(double factor, double units);
+ void readPixels(long x, long y, long width, long height, unsigned long format, unsigned long type, ArrayBufferView* pixels);
+ void releaseShaderCompiler();
+ void renderbufferStorage(unsigned long target, unsigned long internalformat, unsigned long width, unsigned long height);
+ void sampleCoverage(double value, bool invert);
+ void scissor(long x, long y, unsigned long width, unsigned long height);
+ void shaderSource(WebGLShader*, const String&, ExceptionCode&);
+ void stencilFunc(unsigned long func, long ref, unsigned long mask);
+ void stencilFuncSeparate(unsigned long face, unsigned long func, long ref, unsigned long mask);
+ void stencilMask(unsigned long);
+ void stencilMaskSeparate(unsigned long face, unsigned long mask);
+ void stencilOp(unsigned long fail, unsigned long zfail, unsigned long zpass);
+ void stencilOpSeparate(unsigned long face, unsigned long fail, unsigned long zfail, unsigned long zpass);
+
+ void texImage2D(unsigned target, unsigned level, unsigned internalformat,
+ unsigned width, unsigned height, unsigned border,
+ unsigned format, unsigned type, ArrayBufferView* pixels, ExceptionCode&);
+ void texImage2D(unsigned target, unsigned level, unsigned internalformat,
+ unsigned format, unsigned type, ImageData* pixels, ExceptionCode&);
+ void texImage2D(unsigned target, unsigned level, unsigned internalformat,
+ unsigned format, unsigned type, HTMLImageElement* image, ExceptionCode&);
+ void texImage2D(unsigned target, unsigned level, unsigned internalformat,
+ unsigned format, unsigned type, HTMLCanvasElement* canvas, ExceptionCode&);
+ void texImage2D(unsigned target, unsigned level, unsigned internalformat,
+ unsigned format, unsigned type, HTMLVideoElement* video, ExceptionCode&);
+ // Obsolete entry points -- to be removed shortly. (FIXME)
+ void texImage2D(unsigned target, unsigned level, ImageData* pixels, ExceptionCode&);
+ void texImage2D(unsigned target, unsigned level, ImageData* pixels, bool flipY, ExceptionCode&);
+ void texImage2D(unsigned target, unsigned level, ImageData* pixels, bool flipY, bool premultiplyAlpha, ExceptionCode&);
+ void texImage2D(unsigned target, unsigned level, HTMLImageElement* image, ExceptionCode&);
+ void texImage2D(unsigned target, unsigned level, HTMLImageElement* image, bool flipY, ExceptionCode&);
+ void texImage2D(unsigned target, unsigned level, HTMLImageElement* image, bool flipY, bool premultiplyAlpha, ExceptionCode&);
+ void texImage2D(unsigned target, unsigned level, HTMLCanvasElement* canvas, ExceptionCode&);
+ void texImage2D(unsigned target, unsigned level, HTMLCanvasElement* canvas, bool flipY, ExceptionCode&);
+ void texImage2D(unsigned target, unsigned level, HTMLCanvasElement* canvas, bool flipY, bool premultiplyAlpha, ExceptionCode&);
+ void texImage2D(unsigned target, unsigned level, HTMLVideoElement* video, ExceptionCode&);
+ void texImage2D(unsigned target, unsigned level, HTMLVideoElement* video, bool flipY, ExceptionCode&);
+ void texImage2D(unsigned target, unsigned level, HTMLVideoElement* video, bool flipY, bool premultiplyAlpha, ExceptionCode&);
+
+ void texParameterf(unsigned target, unsigned pname, float param);
+ void texParameteri(unsigned target, unsigned pname, int param);
+
+ void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset,
+ unsigned width, unsigned height,
+ unsigned format, unsigned type, ArrayBufferView* pixels, ExceptionCode&);
+ void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset,
+ unsigned format, unsigned type, ImageData* pixels, ExceptionCode&);
+ void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset,
+ unsigned format, unsigned type, HTMLImageElement* image, ExceptionCode&);
+ void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset,
+ unsigned format, unsigned type, HTMLCanvasElement* canvas, ExceptionCode&);
+ void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset,
+ unsigned format, unsigned type, HTMLVideoElement* video, ExceptionCode&);
+ // Obsolete entry points -- to be removed shortly. (FIXME)
+ void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, ImageData* pixels, ExceptionCode&);
+ void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, ImageData* pixels, bool flipY, ExceptionCode&);
+ void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, ImageData* pixels, bool flipY, bool premultiplyAlpha, ExceptionCode&);
+ void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, HTMLImageElement* image, ExceptionCode&);
+ void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, HTMLImageElement* image, bool flipY, ExceptionCode&);
+ void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, HTMLImageElement* image, bool flipY, bool premultiplyAlpha, ExceptionCode&);
+ void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, HTMLCanvasElement* canvas, ExceptionCode&);
+ void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, HTMLCanvasElement* canvas, bool flipY, ExceptionCode&);
+ void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, HTMLCanvasElement* canvas, bool flipY, bool premultiplyAlpha, ExceptionCode&);
+ void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, HTMLVideoElement* video, ExceptionCode&);
+ void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, HTMLVideoElement* video, bool flipY, ExceptionCode&);
+ void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, HTMLVideoElement* video, bool flipY, bool premultiplyAlpha, ExceptionCode&);
+
+ void uniform1f(const WebGLUniformLocation* location, float x, ExceptionCode&);
+ void uniform1fv(const WebGLUniformLocation* location, Float32Array* v, ExceptionCode&);
+ void uniform1fv(const WebGLUniformLocation* location, float* v, int size, ExceptionCode&);
+ void uniform1i(const WebGLUniformLocation* location, int x, ExceptionCode&);
+ void uniform1iv(const WebGLUniformLocation* location, Int32Array* v, ExceptionCode&);
+ void uniform1iv(const WebGLUniformLocation* location, int* v, int size, ExceptionCode&);
+ void uniform2f(const WebGLUniformLocation* location, float x, float y, ExceptionCode&);
+ void uniform2fv(const WebGLUniformLocation* location, Float32Array* v, ExceptionCode&);
+ void uniform2fv(const WebGLUniformLocation* location, float* v, int size, ExceptionCode&);
+ void uniform2i(const WebGLUniformLocation* location, int x, int y, ExceptionCode&);
+ void uniform2iv(const WebGLUniformLocation* location, Int32Array* v, ExceptionCode&);
+ void uniform2iv(const WebGLUniformLocation* location, int* v, int size, ExceptionCode&);
+ void uniform3f(const WebGLUniformLocation* location, float x, float y, float z, ExceptionCode&);
+ void uniform3fv(const WebGLUniformLocation* location, Float32Array* v, ExceptionCode&);
+ void uniform3fv(const WebGLUniformLocation* location, float* v, int size, ExceptionCode&);
+ void uniform3i(const WebGLUniformLocation* location, int x, int y, int z, ExceptionCode&);
+ void uniform3iv(const WebGLUniformLocation* location, Int32Array* v, ExceptionCode&);
+ void uniform3iv(const WebGLUniformLocation* location, int* v, int size, ExceptionCode&);
+ void uniform4f(const WebGLUniformLocation* location, float x, float y, float z, float w, ExceptionCode&);
+ void uniform4fv(const WebGLUniformLocation* location, Float32Array* v, ExceptionCode&);
+ void uniform4fv(const WebGLUniformLocation* location, float* v, int size, ExceptionCode&);
+ void uniform4i(const WebGLUniformLocation* location, int x, int y, int z, int w, ExceptionCode&);
+ void uniform4iv(const WebGLUniformLocation* location, Int32Array* v, ExceptionCode&);
+ void uniform4iv(const WebGLUniformLocation* location, int* v, int size, ExceptionCode&);
+ void uniformMatrix2fv(const WebGLUniformLocation* location, bool transpose, Float32Array* value, ExceptionCode&);
+ void uniformMatrix2fv(const WebGLUniformLocation* location, bool transpose, float* value, int size, ExceptionCode&);
+ void uniformMatrix3fv(const WebGLUniformLocation* location, bool transpose, Float32Array* value, ExceptionCode&);
+ void uniformMatrix3fv(const WebGLUniformLocation* location, bool transpose, float* value, int size, ExceptionCode&);
+ void uniformMatrix4fv(const WebGLUniformLocation* location, bool transpose, Float32Array* value, ExceptionCode&);
+ void uniformMatrix4fv(const WebGLUniformLocation* location, bool transpose, float* value, int size, ExceptionCode&);
+
+ void useProgram(WebGLProgram*, ExceptionCode&);
+ void validateProgram(WebGLProgram*, ExceptionCode&);
+
+ void vertexAttrib1f(unsigned long index, float x);
+ void vertexAttrib1fv(unsigned long index, Float32Array* values);
+ void vertexAttrib1fv(unsigned long index, float* values, int size);
+ void vertexAttrib2f(unsigned long index, float x, float y);
+ void vertexAttrib2fv(unsigned long index, Float32Array* values);
+ void vertexAttrib2fv(unsigned long index, float* values, int size);
+ void vertexAttrib3f(unsigned long index, float x, float y, float z);
+ void vertexAttrib3fv(unsigned long index, Float32Array* values);
+ void vertexAttrib3fv(unsigned long index, float* values, int size);
+ void vertexAttrib4f(unsigned long index, float x, float y, float z, float w);
+ void vertexAttrib4fv(unsigned long index, Float32Array* values);
+ void vertexAttrib4fv(unsigned long index, float* values, int size);
+ void vertexAttribPointer(unsigned long index, long size, unsigned long type, bool normalized,
+ long stride, long offset, ExceptionCode&);
+
+ void viewport(long x, long y, unsigned long width, unsigned long height);
+
+ virtual GraphicsContext3D* graphicsContext3D() const { return m_context.get(); }
+
+ void reshape(int width, int height);
+
+ virtual void paintRenderingResultsToCanvas();
+
+ // Helpers for notification about paint events.
+ void beginPaint();
+ void endPaint();
+
+ void removeObject(WebGLObject*);
+
+ private:
+ friend class WebGLObject;
+
+ WebGLRenderingContext(HTMLCanvasElement*, PassOwnPtr<GraphicsContext3D>);
+
+ void addObject(WebGLObject*);
+ void detachAndRemoveAllObjects();
+ WebGLTexture* findTexture(Platform3DObject);
+ WebGLRenderbuffer* findRenderbuffer(Platform3DObject);
+ WebGLBuffer* findBuffer(Platform3DObject);
+ WebGLShader* findShader(Platform3DObject);
+
+ void markContextChanged();
+ void cleanupAfterGraphicsCall(bool changed)
+ {
+ if (changed)
+ markContextChanged();
+ }
+
+ bool isGLES2Compliant();
+
+ // Helper to return the size in bytes of OpenGL data types
+ // like GL_FLOAT, GL_INT, etc.
+ int sizeInBytes(int type);
+
+ // Basic validation of count and offset against number of elements in element array buffer
+ bool validateElementArraySize(unsigned long count, unsigned long type, long offset);
+
+ // Conservative but quick index validation
+ bool validateIndexArrayConservative(unsigned long type, long& numElementsRequired);
+
+ // Precise but slow index validation -- only done if conservative checks fail
+ bool validateIndexArrayPrecise(unsigned long count, unsigned long type, long offset, long& numElementsRequired);
+ bool validateRenderingState(long numElements);
+
+ bool validateWebGLObject(WebGLObject* object);
+
+ OwnPtr<GraphicsContext3D> m_context;
+ bool m_needsUpdate;
+ bool m_markedCanvasDirty;
+ // FIXME: I think this is broken -- it does not increment any
+ // reference counts, so may refer to destroyed objects.
+ HashSet<RefPtr<WebGLObject> > m_canvasObjects;
+
+ // List of bound VBO's. Used to maintain info about sizes for ARRAY_BUFFER and stored values for ELEMENT_ARRAY_BUFFER
+ RefPtr<WebGLBuffer> m_boundArrayBuffer;
+ RefPtr<WebGLBuffer> m_boundElementArrayBuffer;
+
+ // Cached values for vertex attrib range checks
+ class VertexAttribState {
+ public:
+ VertexAttribState()
+ : enabled(false)
+ , bytesPerElement(0)
+ , size(4)
+ , type(GraphicsContext3D::FLOAT)
+ , normalized(false)
+ , stride(16)
+ , originalStride(0)
+ , offset(0)
{
- if (changed)
- markContextChanged();
+ initValue();
}
- bool isGLES2Compliant();
-
- // Basic validation of count and offset against number of elements in element array buffer
- bool validateElementArraySize(unsigned long count, unsigned long type, long offset);
-
- // Conservative but quick index validation
- bool validateIndexArrayConservative(unsigned long type, long& numElementsRequired);
-
- // Precise but slow index validation -- only done if conservative checks fail
- bool validateIndexArrayPrecise(unsigned long count, unsigned long type, long offset, long& numElementsRequired);
- bool validateRenderingState(long numElements);
-
- bool validateWebGLObject(CanvasObject* object);
-
- OwnPtr<GraphicsContext3D> m_context;
- bool m_needsUpdate;
- bool m_markedCanvasDirty;
- // FIXME: I think this is broken -- it does not increment any
- // reference counts, so may refer to destroyed objects.
- HashSet<RefPtr<CanvasObject> > m_canvasObjects;
-
- // List of bound VBO's. Used to maintain info about sizes for ARRAY_BUFFER and stored values for ELEMENT_ARRAY_BUFFER
- RefPtr<WebGLBuffer> m_boundArrayBuffer;
- RefPtr<WebGLBuffer> m_boundElementArrayBuffer;
-
- // Cached values for vertex attrib range checks
- class VertexAttribState {
- public:
- VertexAttribState()
- : enabled(false)
- , bytesPerElement(0)
- , size(4)
- , type(GraphicsContext3D::FLOAT)
- , normalized(false)
- , stride(16)
- , originalStride(0)
- , offset(0)
- {
- initValue();
- }
-
- void initValue()
- {
- value[0] = 0.0f;
- value[1] = 0.0f;
- value[2] = 0.0f;
- value[3] = 1.0f;
- }
-
- bool enabled;
- RefPtr<WebGLBuffer> bufferBinding;
- long bytesPerElement;
- long size;
- unsigned long type;
- bool normalized;
- long stride;
- long originalStride;
- long offset;
- float value[4];
- };
-
- Vector<VertexAttribState> m_vertexAttribState;
- unsigned m_maxVertexAttribs;
- RefPtr<WebGLBuffer> m_vertexAttrib0Buffer;
- long m_vertexAttrib0BufferSize;
- float m_vertexAttrib0BufferValue[4];
-
- RefPtr<WebGLProgram> m_currentProgram;
- RefPtr<WebGLFramebuffer> m_framebufferBinding;
- RefPtr<WebGLRenderbuffer> m_renderbufferBinding;
- class TextureUnitState {
- public:
- RefPtr<WebGLTexture> m_texture2DBinding;
- RefPtr<WebGLTexture> m_textureCubeMapBinding;
- };
- Vector<TextureUnitState> m_textureUnits;
- unsigned long m_activeTextureUnit;
-
- RefPtr<WebGLTexture> m_blackTexture2D;
- RefPtr<WebGLTexture> m_blackTextureCubeMap;
-
- int m_maxTextureSize;
- int m_maxCubeMapTextureSize;
- int m_maxTextureLevel;
- int m_maxCubeMapTextureLevel;
-
- int m_packAlignment;
- int m_unpackAlignment;
- unsigned long m_implementationColorReadFormat;
- unsigned long m_implementationColorReadType;
- bool m_unpackFlipY;
- bool m_unpackPremultiplyAlpha;
-
- // Helpers for getParameter and others
- WebGLGetInfo getBooleanParameter(unsigned long pname);
- WebGLGetInfo getBooleanArrayParameter(unsigned long pname);
- WebGLGetInfo getFloatParameter(unsigned long pname);
- WebGLGetInfo getIntParameter(unsigned long pname);
- WebGLGetInfo getLongParameter(unsigned long pname);
- WebGLGetInfo getUnsignedLongParameter(unsigned long pname);
- WebGLGetInfo getWebGLFloatArrayParameter(unsigned long pname);
- WebGLGetInfo getWebGLIntArrayParameter(unsigned long pname);
-
- void texImage2DBase(unsigned target, unsigned level, unsigned internalformat,
- unsigned width, unsigned height, unsigned border,
- unsigned format, unsigned type, void* pixels, ExceptionCode&);
- void texImage2DImpl(unsigned target, unsigned level, unsigned internalformat,
- unsigned format, unsigned type, Image* image,
- bool flipY, bool premultiplyAlpha, ExceptionCode&);
- void texSubImage2DBase(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset,
- unsigned width, unsigned height,
- unsigned format, unsigned type, void* pixels, ExceptionCode&);
- void texSubImage2DImpl(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset,
- unsigned format, unsigned type,
- Image* image, bool flipY, bool premultiplyAlpha, ExceptionCode&);
-
- void handleNPOTTextures(bool prepareToDraw);
-
- void createFallbackBlackTextures1x1();
-
- // Helper function for copyTex{Sub}Image, check whether the internalformat
- // and the color buffer format of the current bound framebuffer combination
- // is valid.
- bool isTexInternalFormatColorBufferCombinationValid(unsigned long texInternalFormat,
- unsigned long colorBufferFormat);
-
- // Helper function to get the current bound texture.
- WebGLTexture* getTextureBinding(unsigned long target);
-
- // Helper function to check input format/type for functions {copy}Tex{Sub}Image.
- // Generates GL error and returns false if parameters are invalid.
- bool validateTexFuncFormatAndType(unsigned long format, unsigned long type);
-
- // Helper function to check input parameters for functions {copy}Tex{Sub}Image.
- // Generates GL error and returns false if parameters are invalid.
- bool validateTexFuncParameters(unsigned long target, long level,
- unsigned long internalformat,
- long width, long height, long border,
- unsigned long format, unsigned long type);
-
- // Helper function to validate that the given ArrayBufferView
- // is of the correct type and contains enough data for the texImage call.
- // Generates GL error and returns false if parameters are invalid.
- bool validateTexFuncData(long width, long height,
- unsigned long format, unsigned long type,
- ArrayBufferView* pixels);
-
- // Helper function to validate mode for draw{Arrays/Elements}.
- bool validateDrawMode(unsigned long);
-
- // Helper function for texParameterf and texParameteri.
- void texParameter(unsigned long target, unsigned long pname, float parami, int paramf, bool isFloat);
-
- // Helper function to print warnings to console. Currently
- // used only to warn about use of obsolete functions.
- void printWarningToConsole(const String& message);
-
- // Helper function to validate input parameters for framebuffer functions.
- // Generate GL error if parameters are illegal.
- bool validateFramebufferFuncParameters(unsigned long target, unsigned long attachment);
-
- // Helper function to validate blend equation mode.
- bool validateBlendEquation(unsigned long);
-
- // Helper function to validate a GL capability.
- bool validateCapability(unsigned long);
-
- // Helper function to validate input parameters for uniform functions.
- bool validateUniformParameters(const WebGLUniformLocation* location, Float32Array* v, int mod);
- bool validateUniformParameters(const WebGLUniformLocation* location, Int32Array* v, int mod);
- bool validateUniformParameters(const WebGLUniformLocation* location, void* v, int size, int mod);
- bool validateUniformMatrixParameters(const WebGLUniformLocation* location, bool transpose, Float32Array* v, int mod);
- bool validateUniformMatrixParameters(const WebGLUniformLocation* location, bool transpose, void* v, int size, int mod);
-
- // Helper function to validate parameters for bufferData.
- // Return the current bound buffer to target, or 0 if parameters are invalid.
- WebGLBuffer* validateBufferDataParameters(unsigned long target, unsigned long usage);
-
- // Helper functions for vertexAttribNf{v}.
- void vertexAttribfImpl(unsigned long index, int expectedSize, float v0, float v1, float v2, float v3);
- void vertexAttribfvImpl(unsigned long index, Float32Array* v, int expectedSize);
- void vertexAttribfvImpl(unsigned long index, float* v, int size, int expectedSize);
-
- // Helpers for simulating vertexAttrib0
- void initVertexAttrib0();
- bool simulateVertexAttrib0(long numVertex);
- void restoreStatesAfterVertexAttrib0Simulation();
-
- friend class WebGLStateRestorer;
+ void initValue()
+ {
+ value[0] = 0.0f;
+ value[1] = 0.0f;
+ value[2] = 0.0f;
+ value[3] = 1.0f;
+ }
+
+ bool enabled;
+ RefPtr<WebGLBuffer> bufferBinding;
+ long bytesPerElement;
+ long size;
+ unsigned long type;
+ bool normalized;
+ long stride;
+ long originalStride;
+ long offset;
+ float value[4];
+ };
+
+ Vector<VertexAttribState> m_vertexAttribState;
+ unsigned m_maxVertexAttribs;
+ RefPtr<WebGLBuffer> m_vertexAttrib0Buffer;
+ long m_vertexAttrib0BufferSize;
+ float m_vertexAttrib0BufferValue[4];
+
+ RefPtr<WebGLProgram> m_currentProgram;
+ RefPtr<WebGLFramebuffer> m_framebufferBinding;
+ RefPtr<WebGLRenderbuffer> m_renderbufferBinding;
+ class TextureUnitState {
+ public:
+ RefPtr<WebGLTexture> m_texture2DBinding;
+ RefPtr<WebGLTexture> m_textureCubeMapBinding;
};
+ Vector<TextureUnitState> m_textureUnits;
+ unsigned long m_activeTextureUnit;
+
+ RefPtr<WebGLTexture> m_blackTexture2D;
+ RefPtr<WebGLTexture> m_blackTextureCubeMap;
+
+ int m_maxTextureSize;
+ int m_maxCubeMapTextureSize;
+ int m_maxTextureLevel;
+ int m_maxCubeMapTextureLevel;
+
+ int m_packAlignment;
+ int m_unpackAlignment;
+ unsigned long m_implementationColorReadFormat;
+ unsigned long m_implementationColorReadType;
+ bool m_unpackFlipY;
+ bool m_unpackPremultiplyAlpha;
+
+ // Helpers for getParameter and others
+ WebGLGetInfo getBooleanParameter(unsigned long pname);
+ WebGLGetInfo getBooleanArrayParameter(unsigned long pname);
+ WebGLGetInfo getFloatParameter(unsigned long pname);
+ WebGLGetInfo getIntParameter(unsigned long pname);
+ WebGLGetInfo getLongParameter(unsigned long pname);
+ WebGLGetInfo getUnsignedLongParameter(unsigned long pname);
+ WebGLGetInfo getWebGLFloatArrayParameter(unsigned long pname);
+ WebGLGetInfo getWebGLIntArrayParameter(unsigned long pname);
+
+ void texImage2DBase(unsigned target, unsigned level, unsigned internalformat,
+ unsigned width, unsigned height, unsigned border,
+ unsigned format, unsigned type, void* pixels, ExceptionCode&);
+ void texImage2DImpl(unsigned target, unsigned level, unsigned internalformat,
+ unsigned format, unsigned type, Image* image,
+ bool flipY, bool premultiplyAlpha, ExceptionCode&);
+ void texSubImage2DBase(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset,
+ unsigned width, unsigned height,
+ unsigned format, unsigned type, void* pixels, ExceptionCode&);
+ void texSubImage2DImpl(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset,
+ unsigned format, unsigned type,
+ Image* image, bool flipY, bool premultiplyAlpha, ExceptionCode&);
+
+ void handleNPOTTextures(bool prepareToDraw);
+
+ void createFallbackBlackTextures1x1();
+
+ // Helper function for copyTex{Sub}Image, check whether the internalformat
+ // and the color buffer format of the current bound framebuffer combination
+ // is valid.
+ bool isTexInternalFormatColorBufferCombinationValid(unsigned long texInternalFormat,
+ unsigned long colorBufferFormat);
+
+ // Helper function to get the current bound texture.
+ WebGLTexture* getTextureBinding(unsigned long target);
+
+ // Helper function to check input format/type for functions {copy}Tex{Sub}Image.
+ // Generates GL error and returns false if parameters are invalid.
+ bool validateTexFuncFormatAndType(unsigned long format, unsigned long type);
+
+ // Helper function to check input parameters for functions {copy}Tex{Sub}Image.
+ // Generates GL error and returns false if parameters are invalid.
+ bool validateTexFuncParameters(unsigned long target, long level,
+ unsigned long internalformat,
+ long width, long height, long border,
+ unsigned long format, unsigned long type);
+
+ // Helper function to validate that the given ArrayBufferView
+ // is of the correct type and contains enough data for the texImage call.
+ // Generates GL error and returns false if parameters are invalid.
+ bool validateTexFuncData(long width, long height,
+ unsigned long format, unsigned long type,
+ ArrayBufferView* pixels);
+
+ // Helper function to validate mode for draw{Arrays/Elements}.
+ bool validateDrawMode(unsigned long);
+
+ // Helper function for texParameterf and texParameteri.
+ void texParameter(unsigned long target, unsigned long pname, float parami, int paramf, bool isFloat);
+
+ // Helper function to print warnings to console. Currently
+ // used only to warn about use of obsolete functions.
+ void printWarningToConsole(const String& message);
+
+ // Helper function to validate input parameters for framebuffer functions.
+ // Generate GL error if parameters are illegal.
+ bool validateFramebufferFuncParameters(unsigned long target, unsigned long attachment);
+
+ // Helper function to validate blend equation mode.
+ bool validateBlendEquation(unsigned long);
+
+ // Helper function to validate a GL capability.
+ bool validateCapability(unsigned long);
+
+ // Helper function to validate input parameters for uniform functions.
+ bool validateUniformParameters(const WebGLUniformLocation* location, Float32Array* v, int mod);
+ bool validateUniformParameters(const WebGLUniformLocation* location, Int32Array* v, int mod);
+ bool validateUniformParameters(const WebGLUniformLocation* location, void* v, int size, int mod);
+ bool validateUniformMatrixParameters(const WebGLUniformLocation* location, bool transpose, Float32Array* v, int mod);
+ bool validateUniformMatrixParameters(const WebGLUniformLocation* location, bool transpose, void* v, int size, int mod);
+
+ // Helper function to validate parameters for bufferData.
+ // Return the current bound buffer to target, or 0 if parameters are invalid.
+ WebGLBuffer* validateBufferDataParameters(unsigned long target, unsigned long usage);
+
+ // Helper functions for vertexAttribNf{v}.
+ void vertexAttribfImpl(unsigned long index, int expectedSize, float v0, float v1, float v2, float v3);
+ void vertexAttribfvImpl(unsigned long index, Float32Array* v, int expectedSize);
+ void vertexAttribfvImpl(unsigned long index, float* v, int size, int expectedSize);
+
+ // Helpers for simulating vertexAttrib0
+ void initVertexAttrib0();
+ bool simulateVertexAttrib0(long numVertex);
+ void restoreStatesAfterVertexAttrib0Simulation();
+
+ friend class WebGLStateRestorer;
+};
} // namespace WebCore
diff --git a/WebCore/html/canvas/WebGLRenderingContext.idl b/WebCore/html/canvas/WebGLRenderingContext.idl
index 654c7aa..711aa42 100644
--- a/WebCore/html/canvas/WebGLRenderingContext.idl
+++ b/WebCore/html/canvas/WebGLRenderingContext.idl
@@ -464,8 +464,6 @@ module html {
const unsigned int UNPACK_FLIP_Y_WEBGL = 0x9240;
const unsigned int UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241;
- long sizeInBytes(in unsigned long type) raises(DOMException);
-
void activeTexture(in unsigned long texture) raises(DOMException);
void attachShader(in WebGLProgram program, in WebGLShader shader) raises(DOMException);
void bindAttribLocation(in WebGLProgram program, in unsigned long index, in DOMString name) raises(DOMException);
@@ -538,8 +536,7 @@ module html {
WebGLActiveInfo getActiveUniform(in WebGLProgram program, in unsigned long index)
raises (DOMException);
- // Array getAttachedShaders(GLuint program) raises (DOMException);
- [Custom] void getAttachedShaders(GLuint program)
+ [Custom] void getAttachedShaders(in WebGLProgram program)
raises (DOMException);
int getAttribLocation(in WebGLProgram program, in DOMString name);
diff --git a/WebCore/html/canvas/WebGLShader.cpp b/WebCore/html/canvas/WebGLShader.cpp
index 664d3cb..4f8bf68 100644
--- a/WebCore/html/canvas/WebGLShader.cpp
+++ b/WebCore/html/canvas/WebGLShader.cpp
@@ -28,6 +28,7 @@
#if ENABLE(3D_CANVAS)
#include "WebGLShader.h"
+
#include "WebGLRenderingContext.h"
namespace WebCore {
@@ -38,13 +39,13 @@ PassRefPtr<WebGLShader> WebGLShader::create(WebGLRenderingContext* ctx, Graphics
}
WebGLShader::WebGLShader(WebGLRenderingContext* ctx, GraphicsContext3D::WebGLEnumType type)
- : CanvasObject(ctx)
+ : WebGLObject(ctx)
, m_type(type)
{
setObject(context()->graphicsContext3D()->createShader(type));
}
-void WebGLShader::_deleteObject(Platform3DObject object)
+void WebGLShader::deleteObjectImpl(Platform3DObject object)
{
context()->graphicsContext3D()->deleteShader(object);
}
diff --git a/WebCore/html/canvas/WebGLShader.h b/WebCore/html/canvas/WebGLShader.h
index a0daa59..c0c41df 100644
--- a/WebCore/html/canvas/WebGLShader.h
+++ b/WebCore/html/canvas/WebGLShader.h
@@ -26,31 +26,31 @@
#ifndef WebGLShader_h
#define WebGLShader_h
-#include "CanvasObject.h"
+#include "WebGLObject.h"
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
namespace WebCore {
-
- class WebGLShader : public CanvasObject {
- public:
- virtual ~WebGLShader() { deleteObject(); }
-
- static PassRefPtr<WebGLShader> create(WebGLRenderingContext*, GraphicsContext3D::WebGLEnumType);
- GraphicsContext3D::WebGLEnumType getType() const { return m_type; }
+class WebGLShader : public WebGLObject {
+public:
+ virtual ~WebGLShader() { deleteObject(); }
- private:
- WebGLShader(WebGLRenderingContext*, GraphicsContext3D::WebGLEnumType);
+ static PassRefPtr<WebGLShader> create(WebGLRenderingContext*, GraphicsContext3D::WebGLEnumType);
- virtual void _deleteObject(Platform3DObject);
+ GraphicsContext3D::WebGLEnumType getType() const { return m_type; }
- virtual bool isShader() const { return true; }
+private:
+ WebGLShader(WebGLRenderingContext*, GraphicsContext3D::WebGLEnumType);
+
+ virtual void deleteObjectImpl(Platform3DObject);
+
+ virtual bool isShader() const { return true; }
+
+ GraphicsContext3D::WebGLEnumType m_type;
+};
- GraphicsContext3D::WebGLEnumType m_type;
- };
-
} // namespace WebCore
#endif // WebGLShader_h
diff --git a/WebCore/html/canvas/WebGLTexture.cpp b/WebCore/html/canvas/WebGLTexture.cpp
index d832038..2c50bf8 100644
--- a/WebCore/html/canvas/WebGLTexture.cpp
+++ b/WebCore/html/canvas/WebGLTexture.cpp
@@ -28,6 +28,7 @@
#if ENABLE(3D_CANVAS)
#include "WebGLTexture.h"
+
#include "WebGLRenderingContext.h"
namespace WebCore {
@@ -38,7 +39,7 @@ PassRefPtr<WebGLTexture> WebGLTexture::create(WebGLRenderingContext* ctx)
}
WebGLTexture::WebGLTexture(WebGLRenderingContext* ctx)
- : CanvasObject(ctx)
+ : WebGLObject(ctx)
, cubeMapRWrapModeInitialized(false)
, m_target(0)
, m_minFilter(GraphicsContext3D::NEAREST_MIPMAP_LINEAR)
@@ -197,7 +198,7 @@ bool WebGLTexture::needToUseBlackTexture() const
return m_needToUseBlackTexture;
}
-void WebGLTexture::_deleteObject(Platform3DObject object)
+void WebGLTexture::deleteObjectImpl(Platform3DObject object)
{
context()->graphicsContext3D()->deleteTexture(object);
}
diff --git a/WebCore/html/canvas/WebGLTexture.h b/WebCore/html/canvas/WebGLTexture.h
index d4a32f0..64bd6e0 100644
--- a/WebCore/html/canvas/WebGLTexture.h
+++ b/WebCore/html/canvas/WebGLTexture.h
@@ -26,104 +26,106 @@
#ifndef WebGLTexture_h
#define WebGLTexture_h
-#include "CanvasObject.h"
+#include "WebGLObject.h"
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
#include <wtf/Vector.h>
namespace WebCore {
-
- class WebGLTexture : public CanvasObject {
- public:
- virtual ~WebGLTexture() { deleteObject(); }
-
- static PassRefPtr<WebGLTexture> create(WebGLRenderingContext*);
- bool isCubeMapRWrapModeInitialized() {
- return cubeMapRWrapModeInitialized;
- }
+class WebGLTexture : public WebGLObject {
+public:
+ virtual ~WebGLTexture() { deleteObject(); }
- void setCubeMapRWrapModeInitialized(bool initialized) {
- cubeMapRWrapModeInitialized = initialized;
- }
+ static PassRefPtr<WebGLTexture> create(WebGLRenderingContext*);
- void setTarget(unsigned long target, int maxLevel);
- void setParameteri(unsigned long pname, int param);
- void setParameterf(unsigned long pname, float param);
+ bool isCubeMapRWrapModeInitialized()
+ {
+ return cubeMapRWrapModeInitialized;
+ }
- void setLevelInfo(unsigned long target, int level, unsigned long internalFormat, int width, int height, unsigned long type);
+ void setCubeMapRWrapModeInitialized(bool initialized)
+ {
+ cubeMapRWrapModeInitialized = initialized;
+ }
- bool canGenerateMipmaps();
- // Generate all level information.
- void generateMipmapLevelInfo();
+ void setTarget(unsigned long target, int maxLevel);
+ void setParameteri(unsigned long pname, int param);
+ void setParameterf(unsigned long pname, float param);
- unsigned long getInternalFormat() const;
+ void setLevelInfo(unsigned long target, int level, unsigned long internalFormat, int width, int height, unsigned long type);
- // Whether width/height is NotPowerOfTwo.
- static bool isNPOT(unsigned, unsigned);
+ bool canGenerateMipmaps();
+ // Generate all level information.
+ void generateMipmapLevelInfo();
- bool isNPOT() const;
- // Determine if texture sampling should always return [0, 0, 0, 1] (OpenGL ES 2.0 Sec 3.8.2).
- bool needToUseBlackTexture() const;
+ unsigned long getInternalFormat() const;
- static int computeLevelCount(int width, int height);
+ // Whether width/height is NotPowerOfTwo.
+ static bool isNPOT(unsigned, unsigned);
- protected:
- WebGLTexture(WebGLRenderingContext*);
+ bool isNPOT() const;
+ // Determine if texture sampling should always return [0, 0, 0, 1] (OpenGL ES 2.0 Sec 3.8.2).
+ bool needToUseBlackTexture() const;
- virtual void _deleteObject(Platform3DObject);
+ static int computeLevelCount(int width, int height);
- private:
- virtual bool isTexture() const { return true; }
+protected:
+ WebGLTexture(WebGLRenderingContext*);
- void update();
+ virtual void deleteObjectImpl(Platform3DObject);
- int mapTargetToIndex(unsigned long);
+private:
+ virtual bool isTexture() const { return true; }
- bool cubeMapRWrapModeInitialized;
+ void update();
- unsigned long m_target;
+ int mapTargetToIndex(unsigned long);
- int m_minFilter;
- int m_magFilter;
- int m_wrapS;
- int m_wrapT;
+ bool cubeMapRWrapModeInitialized;
- class LevelInfo {
- public:
- LevelInfo()
- : valid(false)
- , internalFormat(0)
- , width(0)
- , height(0)
- , type(0)
- {
- }
+ unsigned long m_target;
- void setInfo(unsigned long internalFmt, int w, int h, unsigned long tp)
- {
- valid = true;
- internalFormat = internalFmt;
- width = w;
- height = h;
- type = tp;
- }
+ int m_minFilter;
+ int m_magFilter;
+ int m_wrapS;
+ int m_wrapT;
- bool valid;
- unsigned long internalFormat;
- int width;
- int height;
- unsigned long type;
- };
+ class LevelInfo {
+ public:
+ LevelInfo()
+ : valid(false)
+ , internalFormat(0)
+ , width(0)
+ , height(0)
+ , type(0)
+ {
+ }
- Vector<Vector<LevelInfo> > m_info;
+ void setInfo(unsigned long internalFmt, int w, int h, unsigned long tp)
+ {
+ valid = true;
+ internalFormat = internalFmt;
+ width = w;
+ height = h;
+ type = tp;
+ }
- bool m_isNPOT;
- bool m_isComplete;
- bool m_needToUseBlackTexture;
+ bool valid;
+ unsigned long internalFormat;
+ int width;
+ int height;
+ unsigned long type;
};
-
+
+ Vector<Vector<LevelInfo> > m_info;
+
+ bool m_isNPOT;
+ bool m_isComplete;
+ bool m_needToUseBlackTexture;
+};
+
} // namespace WebCore
#endif // WebGLTexture_h
diff --git a/WebCore/html/canvas/WebGLUniformLocation.h b/WebCore/html/canvas/WebGLUniformLocation.h
index f9f7a11..66647c5 100644
--- a/WebCore/html/canvas/WebGLUniformLocation.h
+++ b/WebCore/html/canvas/WebGLUniformLocation.h
@@ -27,7 +27,7 @@
#ifndef WebGLUniformLocation_h
#define WebGLUniformLocation_h
-#include "CanvasObject.h"
+#include "WebGLObject.h"
#include "WebGLProgram.h"
#include <wtf/PassRefPtr.h>