Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(473)

Side by Side Diff: third_party/WebKit/WebCore/dom/Document.cpp

Issue 56198: Roll out dominantScript, getGenericFontForScript patches to unfork a bunch of... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed.
7 * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/) 7 * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/)
8 * Copyright (C) 2008 David Levin (levin@chromium.org) 8 * Copyright (C) 2008 David Levin (levin@chromium.org)
9 * 9 *
10 * This library is free software; you can redistribute it and/or 10 * This library is free software; you can redistribute it and/or
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 #include "DocumentType.h" 46 #include "DocumentType.h"
47 #include "EditingText.h" 47 #include "EditingText.h"
48 #include "Editor.h" 48 #include "Editor.h"
49 #include "EntityReference.h" 49 #include "EntityReference.h"
50 #include "Event.h" 50 #include "Event.h"
51 #include "EventHandler.h" 51 #include "EventHandler.h"
52 #include "EventListener.h" 52 #include "EventListener.h"
53 #include "EventNames.h" 53 #include "EventNames.h"
54 #include "ExceptionCode.h" 54 #include "ExceptionCode.h"
55 #include "FocusController.h" 55 #include "FocusController.h"
56 #include "FontCache.h"
57 #include "Frame.h" 56 #include "Frame.h"
58 #include "FrameLoader.h" 57 #include "FrameLoader.h"
59 #include "FrameTree.h" 58 #include "FrameTree.h"
60 #include "FrameView.h" 59 #include "FrameView.h"
61 #include "HTMLAnchorElement.h" 60 #include "HTMLAnchorElement.h"
62 #include "HTMLBodyElement.h" 61 #include "HTMLBodyElement.h"
63 #include "HTMLCanvasElement.h" 62 #include "HTMLCanvasElement.h"
64 #include "HTMLDocument.h" 63 #include "HTMLDocument.h"
65 #include "HTMLElementFactory.h" 64 #include "HTMLElementFactory.h"
66 #include "HTMLFrameOwnerElement.h" 65 #include "HTMLFrameOwnerElement.h"
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 #if ENABLE(DASHBOARD_SUPPORT) 322 #if ENABLE(DASHBOARD_SUPPORT)
324 , m_hasDashboardRegions(false) 323 , m_hasDashboardRegions(false)
325 , m_dashboardRegionsDirty(false) 324 , m_dashboardRegionsDirty(false)
326 #endif 325 #endif
327 , m_accessKeyMapValid(false) 326 , m_accessKeyMapValid(false)
328 , m_createRenderers(true) 327 , m_createRenderers(true)
329 , m_inPageCache(false) 328 , m_inPageCache(false)
330 , m_useSecureKeyboardEntryWhenActive(false) 329 , m_useSecureKeyboardEntryWhenActive(false)
331 , m_isXHTML(isXHTML) 330 , m_isXHTML(isXHTML)
332 , m_numNodeListCaches(0) 331 , m_numNodeListCaches(0)
333 , m_dominantScript(USCRIPT_INVALID_CODE)
334 #if ENABLE(DATABASE) 332 #if ENABLE(DATABASE)
335 , m_hasOpenDatabases(false) 333 , m_hasOpenDatabases(false)
336 #endif 334 #endif
337 , m_usingGeolocation(false) 335 , m_usingGeolocation(false)
338 { 336 {
339 m_document.resetSkippingRef(this); 337 m_document.resetSkippingRef(this);
340 338
341 m_printing = false; 339 m_printing = false;
342 340
343 m_ignoreAutofocus = false; 341 m_ignoreAutofocus = false;
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
436 434
437 Document::~Document() 435 Document::~Document()
438 { 436 {
439 ASSERT(!renderer()); 437 ASSERT(!renderer());
440 ASSERT(!m_inPageCache); 438 ASSERT(!m_inPageCache);
441 ASSERT(!m_savedRenderer); 439 ASSERT(!m_savedRenderer);
442 ASSERT(m_ranges.isEmpty()); 440 ASSERT(m_ranges.isEmpty());
443 441
444 removeAllEventListeners(); 442 removeAllEventListeners();
445 443
446
447 #if USE(JSC) 444 #if USE(JSC)
448 forgetAllDOMNodesForDocument(this); 445 forgetAllDOMNodesForDocument(this);
449 #endif 446 #endif
450 447
451 if (m_docChanged && changedDocuments) 448 if (m_docChanged && changedDocuments)
452 changedDocuments->remove(this); 449 changedDocuments->remove(this);
453 delete m_tokenizer; 450 delete m_tokenizer;
454 m_document.resetSkippingRef(0); 451 m_document.resetSkippingRef(0);
455 delete m_styleSelector; 452 delete m_styleSelector;
456 delete m_docLoader; 453 delete m_docLoader;
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after
864 return String(); 861 return String();
865 } 862 }
866 863
867 void Document::setCharset(const String& charset) 864 void Document::setCharset(const String& charset)
868 { 865 {
869 if (!decoder()) 866 if (!decoder())
870 return; 867 return;
871 decoder()->setEncoding(charset, TextResourceDecoder::UserChosenEncoding); 868 decoder()->setEncoding(charset, TextResourceDecoder::UserChosenEncoding);
872 } 869 }
873 870
874 UScriptCode Document::dominantScript() const
875 {
876 struct EncodingScript {
877 const char* encoding;
878 UScriptCode script;
879 };
880
881 // inputEncoding() always returns a canonical name. We use
882 // MIME names and IANA names (if the former is not available).
883 static const EncodingScript encodingScriptList[] = {
884 { "GB2312", USCRIPT_SIMPLIFIED_HAN },
885 { "GBK", USCRIPT_SIMPLIFIED_HAN },
886 { "GB18030", USCRIPT_SIMPLIFIED_HAN },
887 { "Big5", USCRIPT_TRADITIONAL_HAN },
888 { "Big5-HKSCS", USCRIPT_TRADITIONAL_HAN },
889 { "Shift_JIS", USCRIPT_HIRAGANA},
890 { "EUC-JP", USCRIPT_HIRAGANA }, // Japanese (USCRIPT_JAPANESE)
891 { "ISO-2022-KR", USCRIPT_HIRAGANA },
892 { "EUC-KR", USCRIPT_HANGUL }, // Korean (USCRIPT_KOREAN)
893 { "TIS-620", USCRIPT_THAI },
894 { "ISO-8859-1", USCRIPT_LATIN },
895 { "ISO-8859-15", USCRIPT_LATIN },
896 { "windows-1252", USCRIPT_LATIN },
897 { "ISO-8859-2", USCRIPT_LATIN },
898 { "windows-1250", USCRIPT_LATIN },
899 { "ISO-8859-3", USCRIPT_LATIN },
900 { "ISO-8859-4", USCRIPT_LATIN },
901 { "ISO-8859-13", USCRIPT_LATIN },
902 { "windows-1257", USCRIPT_LATIN },
903 { "ISO-8859-5", USCRIPT_CYRILLIC },
904 { "windows-1251", USCRIPT_CYRILLIC },
905 { "KOI8-R", USCRIPT_CYRILLIC },
906 { "KOI8-U", USCRIPT_CYRILLIC },
907 { "ISO-8859-6", USCRIPT_ARABIC },
908 { "windows-1256", USCRIPT_ARABIC },
909 { "ISO-8859-7", USCRIPT_GREEK },
910 { "windows-1253", USCRIPT_GREEK },
911 { "ISO-8859-8", USCRIPT_HEBREW },
912 { "windows-1255", USCRIPT_HEBREW },
913 { "ISO-8859-9", USCRIPT_LATIN }, // Turkish
914 { "windows-1254", USCRIPT_LATIN },
915 { "ISO-8859-10", USCRIPT_LATIN }, // Nordic
916 { "ISO-8859-14", USCRIPT_LATIN }, // Celtic
917 { "ISO-8859-16", USCRIPT_LATIN }, // Romanian
918 { "windows-1258", USCRIPT_LATIN }, // Vietnamese
919 };
920
921 static HashMap<String, UScriptCode> encodingScriptMap;
922
923 if (encodingScriptMap.isEmpty()) {
924 for (unsigned i = 0; i < sizeof(encodingScriptList) / sizeof(encodingScr iptList[0]); ++i)
925 encodingScriptMap.set(encodingScriptList[i].encoding,
926 encodingScriptList[i].script);
927 }
928
929 if (m_dominantScript != USCRIPT_INVALID_CODE)
930 return m_dominantScript;
931 String encoding = inputEncoding();
932 if (encoding.isEmpty())
933 return m_dominantScript;
934
935 HashMap<String, UScriptCode>::iterator it = encodingScriptMap.find(encoding) ;
936 if (it != encodingScriptMap.end())
937 m_dominantScript = it->second;
938 else
939 // TODO(jungshik) : should return a script corresponding to the locale.
940 m_dominantScript = USCRIPT_COMMON;
941 return m_dominantScript;
942 }
943
944 void Document::setXMLVersion(const String& version, ExceptionCode& ec) 871 void Document::setXMLVersion(const String& version, ExceptionCode& ec)
945 { 872 {
946 if (!implementation()->hasFeature("XML", String())) { 873 if (!implementation()->hasFeature("XML", String())) {
947 ec = NOT_SUPPORTED_ERR; 874 ec = NOT_SUPPORTED_ERR;
948 return; 875 return;
949 } 876 }
950 877
951 // FIXME: Also raise NOT_SUPPORTED_ERR if the version is set to a value that is not supported by this Document. 878 // FIXME: Also raise NOT_SUPPORTED_ERR if the version is set to a value that is not supported by this Document.
952 879
953 m_xmlVersion = version; 880 m_xmlVersion = version;
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
1204 m_hasNodesWithPlaceholderStyle = false; 1131 m_hasNodesWithPlaceholderStyle = false;
1205 1132
1206 RefPtr<RenderStyle> documentStyle = RenderStyle::create(); 1133 RefPtr<RenderStyle> documentStyle = RenderStyle::create();
1207 documentStyle->setDisplay(BLOCK); 1134 documentStyle->setDisplay(BLOCK);
1208 documentStyle->setVisuallyOrdered(visuallyOrdered); 1135 documentStyle->setVisuallyOrdered(visuallyOrdered);
1209 documentStyle->setZoom(frame()->pageZoomFactor()); 1136 documentStyle->setZoom(frame()->pageZoomFactor());
1210 m_styleSelector->setStyle(documentStyle); 1137 m_styleSelector->setStyle(documentStyle);
1211 1138
1212 FontDescription fontDescription; 1139 FontDescription fontDescription;
1213 fontDescription.setUsePrinterFont(printing()); 1140 fontDescription.setUsePrinterFont(printing());
1214 // TODO(jungshik): Eventually, we need to derive the dominant script
1215 // for the current node based on 'xml:lang' and 'lang' specified for
1216 // it or inherited from its parent rather than using the document-wide
1217 // value (inferred from charset). Note also that it does not work
1218 // for 'script-agnostic' charsets like UTF-8. In that case, Firefox
1219 // uses the script corresponding to the application locale.
1220 // While a document is loaded, this function is called multiple
1221 // times. At the beginning, the document charset is not known and
1222 // dominantScript remains invalid. Only when it's determined, we
1223 // change the font accordingly.
1224 // See http://bugs.webkit.org/show_bug.cgi?id=10874 and
1225 // https://bugs.webkit.org/show_bug.cgi?id=18085
1226 UScriptCode script = dominantScript();
1227 if (script != USCRIPT_INVALID_CODE)
1228 fontDescription.setDominantScript(script);
1229 if (Settings* settings = this->settings()) { 1141 if (Settings* settings = this->settings()) {
1230 fontDescription.setRenderingMode(settings->fontRenderingMode()); 1142 fontDescription.setRenderingMode(settings->fontRenderingMode());
1231 if (printing() && !settings->shouldPrintBackgrounds()) 1143 if (printing() && !settings->shouldPrintBackgrounds())
1232 documentStyle->setForceBackgroundsToWhite(true); 1144 documentStyle->setForceBackgroundsToWhite(true);
1233 const AtomicString& stdfont = settings->standardFontFamily(); 1145 const AtomicString& stdfont = settings->standardFontFamily();
1234 if (!stdfont.isEmpty()) { 1146 if (!stdfont.isEmpty()) {
1235 fontDescription.firstFamily().setFamily(stdfont); 1147 fontDescription.firstFamily().setFamily(stdfont);
1236 FontFamily& currFamily = fontDescription.firstFamily(); 1148 fontDescription.firstFamily().appendFamily(0);
1237 if (script != USCRIPT_INVALID_CODE) {
1238 // TODO(jungshik) : I might as well modify |genericFamily| of
1239 // |fontDescription| here, but I'm wary of a potential breakag e.
1240 // For now, just use a temporary variable.
1241 FontDescription tmpDescription;
1242 tmpDescription.setGenericFamily(FontDescription::StandardFamil y);
1243 AtomicString docFont = FontCache::getGenericFontForScript(
1244 script, tmpDescription);
1245 if (!docFont.isEmpty()) {
1246 RefPtr<SharedFontFamily> newFamily(SharedFontFamily::creat e());
1247 newFamily->setFamily(docFont);
1248 currFamily.appendFamily(newFamily);
1249 currFamily = *newFamily;
1250 }
1251 }
1252 currFamily.appendFamily(0);
1253 } 1149 }
1254 fontDescription.setKeywordSize(CSSValueMedium - CSSValueXxSmall + 1) ; 1150 fontDescription.setKeywordSize(CSSValueMedium - CSSValueXxSmall + 1) ;
1255 m_styleSelector->setFontSize(fontDescription, m_styleSelector->fontS izeForKeyword(CSSValueMedium, inCompatMode(), false)); 1151 m_styleSelector->setFontSize(fontDescription, m_styleSelector->fontS izeForKeyword(CSSValueMedium, inCompatMode(), false));
1256 } 1152 }
1257 1153
1258 documentStyle->setFontDescription(fontDescription); 1154 documentStyle->setFontDescription(fontDescription);
1259 documentStyle->font().update(m_styleSelector->fontSelector()); 1155 documentStyle->font().update(m_styleSelector->fontSelector());
1260 if (inCompatMode()) 1156 if (inCompatMode())
1261 documentStyle->setHtmlHacks(true); // enable html specific rendering tricks 1157 documentStyle->setHtmlHacks(true); // enable html specific rendering tricks
1262 1158
(...skipping 3253 matching lines...) Expand 10 before | Expand all | Expand 10 after
4516 { 4412 {
4517 if (m_decoder) 4413 if (m_decoder)
4518 return m_decoder->encoding().displayString(str); 4414 return m_decoder->encoding().displayString(str);
4519 return str; 4415 return str;
4520 } 4416 }
4521 4417
4522 void Document::displayBufferModifiedByEncoding(UChar* buffer, unsigned len) cons t 4418 void Document::displayBufferModifiedByEncoding(UChar* buffer, unsigned len) cons t
4523 { 4419 {
4524 if (m_decoder) 4420 if (m_decoder)
4525 m_decoder->encoding().displayBuffer(buffer, len); 4421 m_decoder->encoding().displayBuffer(buffer, len);
4526
4527 } 4422 }
4528 4423
4529 } // namespace WebCore 4424 } // namespace WebCore
OLDNEW
« no previous file with comments | « third_party/WebKit/WebCore/dom/Document.h ('k') | third_party/WebKit/WebCore/platform/graphics/FontCache.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698