+/*
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// EXTERNAL INCLUDES
+#include <cstring> // for strlen()
+
+// FILE HEADER
+#include "xhtml-entities.h"
+
+namespace Dali
+{
+
+namespace Toolkit
+{
+
+namespace Text
+{
+
+namespace
+{
+/**
+ * Implementation of the XHTML Entity matching
+ */
+struct XHTMLEntityLookup
+{
+ const char* const entityName; // XHTML Named Entity string
+ const char* const entityCode; // Corresponding UTF-8
+};
+
+/* table of html name entities supported in DALi
+ *
+ * these are stored as pair with Named entity as Key and
+ * its utf 8 as value
+ */
+const XHTMLEntityLookup XHTMLEntityLookupTable[] =
+ {
+ { ""\0" ,"\x22\0" },
+ { "&\0" ,"\x26\0" },
+ { "'\0" ,"\x27\0" },
+ { "<\0" ,"\x3c\0" },
+ { ">\0" ,"\x3e\0" },
+ { " \0" ,"\xc2\xa0\0" },
+ { "¡\0" ,"\xc2\xa1\0" },
+ { "¢\0" ,"\xc2\xa2\0" },
+ { "£\0" ,"\xc2\xa3\0" },
+ { "¤\0" ,"\xc2\xa4\0" },
+ { "¥\0" ,"\xc2\xa5\0" },
+ { "¦\0" ,"\xc2\xa6\0" },
+ { "§\0" ,"\xc2\xa7\0" },
+ { "¨\0" ,"\xc2\xa8\0" },
+ { "©\0" ,"\xc2\xa9\0" },
+ { "ª\0" ,"\xc2\xaa\0" },
+ { "«\0" ,"\xc2\xab\0" },
+ { "¬\0" ,"\xc2\xac\0" },
+ { "­\0" ,"\xc2\xad\0" },
+ { "®\0" ,"\xc2\xae\0" },
+ { "¯\0" ,"\xc2\xaf\0" },
+ { "°\0" ,"\xc2\xb0\0" },
+ { "±\0" ,"\xc2\xb1\0" },
+ { "²\0" ,"\xc2\xb2\0" },
+ { "³\0" ,"\xc2\xb3\0" },
+ { "´\0" ,"\xc2\xb4\0" },
+ { "µ\0" ,"\xc2\xb5\0" },
+ { "¶\0" ,"\xc2\xb6\0" },
+ { "·\0" ,"\xc2\xb7\0" },
+ { "¸\0" ,"\xc2\xb8\0" },
+ { "¹\0" ,"\xc2\xb9\0" },
+ { "º\0" ,"\xc2\xba\0" },
+ { "»\0" ,"\xc2\xbb\0" },
+ { "¼\0" ,"\xc2\xbc\0" },
+ { "½\0" ,"\xc2\xbd\0" },
+ { "¾\0" ,"\xc2\xbe\0" },
+ { "¿\0" ,"\xc2\xbf\0" },
+ { "À\0" ,"\xc3\x80\0" },
+ { "Á\0" ,"\xc3\x81\0" },
+ { "Â\0" ,"\xc3\x82\0" },
+ { "Ã\0" ,"\xc3\x83\0" },
+ { "Ä\0" ,"\xc3\x84\0" },
+ { "Å\0" ,"\xc3\x85\0" },
+ { "Æ\0" ,"\xc3\x86\0" },
+ { "Ç\0" ,"\xc3\x87\0" },
+ { "È\0" ,"\xc3\x88\0" },
+ { "É\0" ,"\xc3\x89\0" },
+ { "Ê\0" ,"\xc3\x8a\0" },
+ { "Ë\0" ,"\xc3\x8b\0" },
+ { "Ì\0" ,"\xc3\x8c\0" },
+ { "Í\0" ,"\xc3\x8d\0" },
+ { "Î\0" ,"\xc3\x8e\0" },
+ { "Ï\0" ,"\xc3\x8f\0" },
+ { "Ð\0" ,"\xc3\x90\0" },
+ { "Ñ\0" ,"\xc3\x91\0" },
+ { "Ò\0" ,"\xc3\x92\0" },
+ { "Ó\0" ,"\xc3\x93\0" },
+ { "Ô\0" ,"\xc3\x94\0" },
+ { "Õ\0" ,"\xc3\x95\0" },
+ { "Ö\0" ,"\xc3\x96\0" },
+ { "×\0" ,"\xc3\x97\0" },
+ { "Ø\0" ,"\xc3\x98\0" },
+ { "Ù\0" ,"\xc3\x99\0" },
+ { "Ú\0" ,"\xc3\x9a\0" },
+ { "Û\0" ,"\xc3\x9b\0" },
+ { "Ü\0" ,"\xc3\x9c\0" },
+ { "Ý\0" ,"\xc3\x9d\0" },
+ { "Þ\0" ,"\xc3\x9e\0" },
+ { "ß\0" ,"\xc3\x9f\0" },
+ { "à\0" ,"\xc3\xa0\0" },
+ { "á\0" ,"\xc3\xa1\0" },
+ { "â\0" ,"\xc3\xa2\0" },
+ { "ã\0" ,"\xc3\xa3\0" },
+ { "ä\0" ,"\xc3\xa4\0" },
+ { "å\0" ,"\xc3\xa5\0" },
+ { "æ\0" ,"\xc3\xa6\0" },
+ { "ç\0" ,"\xc3\xa7\0" },
+ { "è\0" ,"\xc3\xa8\0" },
+ { "é\0" ,"\xc3\xa9\0" },
+ { "ê\0" ,"\xc3\xaa\0" },
+ { "ë\0" ,"\xc3\xab\0" },
+ { "ì\0" ,"\xc3\xac\0" },
+ { "í\0" ,"\xc3\xad\0" },
+ { "î\0" ,"\xc3\xae\0" },
+ { "ï\0" ,"\xc3\xaf\0" },
+ { "ð\0" ,"\xc3\xb0\0" },
+ { "ñ\0" ,"\xc3\xb1\0" },
+ { "ò\0" ,"\xc3\xb2\0" },
+ { "ó\0" ,"\xc3\xb3\0" },
+ { "ô\0" ,"\xc3\xb4\0" },
+ { "õ\0" ,"\xc3\xb5\0" },
+ { "ö\0" ,"\xc3\xb6\0" },
+ { "÷\0" ,"\xc3\xb7\0" },
+ { "ø\0" ,"\xc3\xb8\0" },
+ { "ù\0" ,"\xc3\xb9\0" },
+ { "ú\0" ,"\xc3\xba\0" },
+ { "û\0" ,"\xc3\xbb\0" },
+ { "ü\0" ,"\xc3\xbc\0" },
+ { "ý\0" ,"\xc3\xbd\0" },
+ { "þ\0" ,"\xc3\xbe\0" },
+ { "ÿ\0" ,"\xc3\xbf\0" },
+ { "Œ\0" ,"\xc5\x92\0" },
+ { "œ\0" ,"\xc5\x93\0" },
+ { "Š\0" ,"\xc5\xa0\0" },
+ { "š\0" ,"\xc5\xa1\0" },
+ { "Ÿ\0" ,"\xc5\xb8\0" },
+ { "ƒ\0" ,"\xc6\x92\0" },
+ { "ˆ\0" ,"\xcb\x86\0" },
+ { "˜\0" ,"\xcb\x9c\0" },
+ { "Α\0" ,"\xce\x91\0" },
+ { "Β\0" ,"\xce\x92\0" },
+ { "Γ\0" ,"\xce\x93\0" },
+ { "Δ\0" ,"\xce\x94\0" },
+ { "Ε\0" ,"\xce\x95\0" },
+ { "Ζ\0" ,"\xce\x96\0" },
+ { "Η\0" ,"\xce\x97\0" },
+ { "Θ\0" ,"\xce\x98\0" },
+ { "Ι\0" ,"\xce\x99\0" },
+ { "Κ\0" ,"\xce\x9a\0" },
+ { "Λ\0" ,"\xce\x9b\0" },
+ { "Μ\0" ,"\xce\x9c\0" },
+ { "Ν\0" ,"\xce\x9d\0" },
+ { "Ξ\0" ,"\xce\x9e\0" },
+ { "Ο\0" ,"\xce\x9f\0" },
+ { "Π\0" ,"\xce\xa0\0" },
+ { "Ρ\0" ,"\xce\xa1\0" },
+ { "Σ\0" ,"\xce\xa3\0" },
+ { "Τ\0" ,"\xce\xa4\0" },
+ { "Υ\0" ,"\xce\xa5\0" },
+ { "Φ\0" ,"\xce\xa6\0" },
+ { "Χ\0" ,"\xce\xa7\0" },
+ { "Ψ\0" ,"\xce\xa8\0" },
+ { "Ω\0" ,"\xce\xa9\0" },
+ { "α\0" ,"\xce\xb1\0" },
+ { "β\0" ,"\xce\xb2\0" },
+ { "γ\0" ,"\xce\xb3\0" },
+ { "δ\0" ,"\xce\xb4\0" },
+ { "ε\0" ,"\xce\xb5\0" },
+ { "ζ\0" ,"\xce\xb6\0" },
+ { "η\0" ,"\xce\xb7\0" },
+ { "θ\0" ,"\xce\xb8\0" },
+ { "ι\0" ,"\xce\xb9\0" },
+ { "κ\0" ,"\xce\xba\0" },
+ { "λ\0" ,"\xce\xbb\0" },
+ { "μ\0" ,"\xce\xbc\0" },
+ { "ν\0" ,"\xce\xbd\0" },
+ { "ξ\0" ,"\xce\xbe\0" },
+ { "ο\0" ,"\xce\xbf\0" },
+ { "π\0" ,"\xcf\x80\0" },
+ { "ρ\0" ,"\xcf\x81\0" },
+ { "ς\0" ,"\xcf\x82\0" },
+ { "σ\0" ,"\xcf\x83\0" },
+ { "τ\0" ,"\xcf\x84\0" },
+ { "υ\0" ,"\xcf\x85\0" },
+ { "φ\0" ,"\xcf\x86\0" },
+ { "χ\0" ,"\xcf\x87\0" },
+ { "ψ\0" ,"\xcf\x88\0" },
+ { "ω\0" ,"\xcf\x89\0" },
+ { "ϑ\0","\xcf\x91\0" },
+ { "ϒ\0" ,"\xcf\x92\0" },
+ { "ϖ\0" ,"\xcf\x96\0" },
+ { " \0" ,"\xe2\x80\x82\0" },
+ { " \0" ,"\xe2\x80\x83\0" },
+ { " \0" ,"\xe2\x80\x89\0" },
+ { "‌\0" ,"\xe2\x80\x8c\0" },
+ { "‍\0" ,"\xe2\x80\x8d\0" },
+ { "‎\0" ,"\xe2\x80\x8e\0" },
+ { "‏\0" ,"\xe2\x80\x8f\0" },
+ { "–\0" ,"\xe2\x80\x93\0" },
+ { "—\0" ,"\xe2\x80\x94\0" },
+ { "‘\0" ,"\xe2\x80\x98\0" },
+ { "’\0" ,"\xe2\x80\x99\0" },
+ { "‚\0" ,"\xe2\x80\x9a\0" },
+ { "“\0" ,"\xe2\x80\x9c\0" },
+ { "”\0" ,"\xe2\x80\x9d\0" },
+ { "„\0" ,"\xe2\x80\x9e\0" },
+ { "†\0" ,"\xe2\x80\xa0\0" },
+ { "‡\0" ,"\xe2\x80\xa1\0" },
+ { "•\0" ,"\xe2\x80\xa2\0" },
+ { "…\0" ,"\xe2\x80\xa6\0" },
+ { "‰\0" ,"\xe2\x80\xb0\0" },
+ { "′\0" ,"\xe2\x80\xb2\0" },
+ { "″\0" ,"\xe2\x80\xb3\0" },
+ { "‹\0" ,"\xe2\x80\xb9\0" },
+ { "›\0" ,"\xe2\x80\xba\0" },
+ { "‾\0" ,"\xe2\x80\xbe\0" },
+ { "⁄\0" ,"\xe2\x81\x84\0" },
+ { "€\0" ,"\xe2\x82\xac\0" },
+ { "ℑ\0" ,"\xe2\x84\x91\0" },
+ { "℘\0" ,"\xe2\x84\x98\0" },
+ { "ℜ\0" ,"\xe2\x84\x9c\0" },
+ { "™\0" ,"\xe2\x84\xa2\0" },
+ { "ℵ\0" ,"\xe2\x84\xb5\0" },
+ { "←\0" ,"\xe2\x86\x90\0" },
+ { "↑\0" ,"\xe2\x86\x91\0" },
+ { "→\0" ,"\xe2\x86\x92\0" },
+ { "↓\0" ,"\xe2\x86\x93\0" },
+ { "↔\0" ,"\xe2\x86\x94\0" },
+ { "↵\0" ,"\xe2\x86\xb5\0" },
+ { "⇐\0" ,"\xe2\x87\x90\0" },
+ { "⇑\0" ,"\xe2\x87\x91\0" },
+ { "⇒\0" ,"\xe2\x87\x92\0" },
+ { "⇓\0" ,"\xe2\x87\x93\0" },
+ { "⇔\0" ,"\xe2\x87\x94\0" },
+ { "∀\0" ,"\xe2\x88\x80\0" },
+ { "∂\0" ,"\xe2\x88\x82\0" },
+ { "∃\0" ,"\xe2\x88\x83\0" },
+ { "∅\0" ,"\xe2\x88\x85\0" },
+ { "∇\0" ,"\xe2\x88\x87\0" },
+ { "∈\0" ,"\xe2\x88\x88\0" },
+ { "∉\0" ,"\xe2\x88\x89\0" },
+ { "∋\0" ,"\xe2\x88\x8b\0" },
+ { "∏\0" ,"\xe2\x88\x8f\0" },
+ { "∑\0" ,"\xe2\x88\x91\0" },
+ { "−\0" ,"\xe2\x88\x92\0" },
+ { "∗\0" ,"\xe2\x88\x97\0" },
+ { "√\0" ,"\xe2\x88\x9a\0" },
+ { "∝\0" ,"\xe2\x88\x9d\0" },
+ { "∞\0" ,"\xe2\x88\x9e\0" },
+ { "∠\0" ,"\xe2\x88\xa0\0" },
+ { "∧\0" ,"\xe2\x88\xa7\0" },
+ { "∨\0" ,"\xe2\x88\xa8\0" },
+ { "∩\0" ,"\xe2\x88\xa9\0" },
+ { "∪\0" ,"\xe2\x88\xaa\0" },
+ { "∫\0" ,"\xe2\x88\xab\0" },
+ { "∴\0" ,"\xe2\x88\xb4\0" },
+ { "∼\0" ,"\xe2\x88\xbc\0" },
+ { "≅\0" ,"\xe2\x89\x85\0" },
+ { "≈\0" ,"\xe2\x89\x88\0" },
+ { "≠\0" ,"\xe2\x89\xa0\0" },
+ { "≡\0" ,"\xe2\x89\xa1\0" },
+ { "≤\0" ,"\xe2\x89\xa4\0" },
+ { "≥\0" ,"\xe2\x89\xa5\0" },
+ { "⊂\0" ,"\xe2\x8a\x82\0" },
+ { "⊃\0" ,"\xe2\x8a\x83\0" },
+ { "⊄\0" ,"\xe2\x8a\x84\0" },
+ { "⊆\0" ,"\xe2\x8a\x86\0" },
+ { "⊇\0" ,"\xe2\x8a\x87\0" },
+ { "⊕\0" ,"\xe2\x8a\x95\0" },
+ { "⊗\0" ,"\xe2\x8a\x97\0" },
+ { "⊥\0" ,"\xe2\x8a\xa5\0" },
+ { "⋅\0" ,"\xe2\x8b\x85\0" },
+ { "⌈\0" ,"\xe2\x8c\x88\0" },
+ { "⌉\0" ,"\xe2\x8c\x89\0" },
+ { "⌊\0" ,"\xe2\x8c\x8a\0" },
+ { "⌋\0" ,"\xe2\x8c\x8b\0" },
+ { "◊\0" ,"\xe2\x97\x8a\0" },
+ { "♠\0" ,"\xe2\x99\xa0\0" },
+ { "♣\0" ,"\xe2\x99\xa3\0" },
+ { "♥\0" ,"\xe2\x99\xa5\0" },
+ { "♦\0" ,"\xe2\x99\xa6\0" },
+ { "⟨\0" ,"\xe2\x9f\xa8\0" },
+ { "⟩\0" ,"\xe2\x9f\xa9\0" }
+};
+
+const std::size_t XHTMLENTITY_LOOKUP_COUNT = (sizeof( XHTMLEntityLookupTable))/ (sizeof(XHTMLEntityLookup));
+
+} // unnamed namespace
+
+const char* const NamedEntityToUtf8( const char* const markupText, unsigned int len )
+{
+ // finding if given XHTML named entity is supported or not
+ for( size_t i = 0; i < XHTMLENTITY_LOOKUP_COUNT ; ++i )
+ {
+ unsigned int entityLen = strlen(XHTMLEntityLookupTable[i].entityName);
+ if( len == entityLen )
+ {
+ if( strncmp( markupText, XHTMLEntityLookupTable[i].entityName, len ) == 0 ) // if named Entity found in table
+ {
+ return XHTMLEntityLookupTable[i].entityCode;
+ }
+ }
+ }
+ return NULL;
+}
+
+} // namespace Text
+
+} // namespace Toolkit
+
+} // namespace Dali