From kde-commits Sat Sep 09 17:10:57 2006 From: Andras Mantia Date: Sat, 09 Sep 2006 17:10:57 +0000 To: kde-commits Subject: branches/KDE/3.5/kdewebdev/quanta Message-Id: <1157821857.855102.13246.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=115782190800718 SVN commit 582528 by amantia: Improve mimetype and extension based searching for a DTEP that can handle the currently opened file. Related to bug #129808. M +2 -1 ChangeLog M +1 -0 data/dtep/docbook-4.2/description.rc M +1 -1 data/dtep/empty/description.rc M +1 -0 data/dtep/html-frameset/description.rc M +1 -0 data/dtep/html-strict/description.rc M +1 -0 data/dtep/html/description.rc M +1 -0 data/dtep/kde-docbook-4.1.2/description.rc M +1 -0 data/dtep/kde-docbook-4.2/description.rc M +1 -0 data/dtep/php/description.rc M +1 -0 data/dtep/schema/description.rc M +1 -0 data/dtep/tagxml/description.rc M +1 -0 data/dtep/wml-1-2/description.rc M +1 -0 data/dtep/xhtml-basic/description.rc M +1 -0 data/dtep/xhtml-frameset/description.rc M +1 -0 data/dtep/xhtml-strict/description.rc M +1 -0 data/dtep/xhtml/description.rc M +1 -0 data/dtep/xhtml11/description.rc M +1 -0 data/dtep/xslt/description.rc M +8 -8 quanta.kdevelop M +15 -6 src/document.cpp M +50 -13 src/dtds.cpp M +14 -6 src/dtds.h --- branches/KDE/3.5/kdewebdev/quanta/ChangeLog #582527:582528 @@ -19,11 +19,12 @@ - really abort if a remote directory cannot be created [#117032] - fix automatic updating of closing tags [#132357] - accept float numbers for length values [#130295] - - handle correctly the escaped backslashes inside strings [] + - handle correctly the escaped backslashes inside strings [#128819] - improvements: - make CSS completion work inside style attributes [#80605] - improve usability of the File Changed dialog [#126058] + - improve finding a DTEP for a file [related to #129808] Version 3.5.4 (Release date: 02-08-2006; Started 24-06-2005): - bugfixes: --- branches/KDE/3.5/kdewebdev/quanta/data/dtep/docbook-4.2/description.rc #582527:582528 @@ -3,6 +3,7 @@ NickName = Docbook XML 4.2 URL = http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd DoctypeString = book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" +MimeTypes = text/docbook DefaultExtension = docbook Groups = Core NumOfPages = 1 --- branches/KDE/3.5/kdewebdev/quanta/data/dtep/empty/description.rc #582527:582528 @@ -1,7 +1,7 @@ [General] Name = empty NickName = Empty DTEP valid for all files -MimeTypes = text/all +MimeTypes = all/all NumOfPages = 0 CaseSensitive = false Family = 2 --- branches/KDE/3.5/kdewebdev/quanta/data/dtep/html-frameset/description.rc #582527:582528 @@ -4,6 +4,7 @@ URL = http://www.w3.org/TR/html4/frameset.dtd DoctypeString = HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd" Inherits = -//W3C//DTD HTML 4.01//EN +MimeTypes = text/html DefaultExtension = html Groups = Core, I18n, Script NumOfPages = 2 --- branches/KDE/3.5/kdewebdev/quanta/data/dtep/html-strict/description.rc #582527:582528 @@ -3,6 +3,7 @@ NickName = HTML 4.01 Strict URL = http://www.w3.org/TR/html4/strict.dtd DoctypeString = HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd" +MimeTypes = text/html DefaultExtension = html Groups = Core, I18n, Script NumOfPages = 2 --- branches/KDE/3.5/kdewebdev/quanta/data/dtep/html/description.rc #582527:582528 @@ -3,6 +3,7 @@ NickName = HTML 4.01 Transitional URL = http://www.w3.org/TR/html4/loose.dtd DoctypeString = HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" +MimeTypes = text/html DefaultExtension = html Groups = Core, I18n, Script NumOfPages = 2 --- branches/KDE/3.5/kdewebdev/quanta/data/dtep/kde-docbook-4.1.2/description.rc #582527:582528 @@ -3,6 +3,7 @@ NickName = KDE Docbook XML 4.1.2 URL = dtd/kdex.dtd DoctypeString = book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.0//EN" "dtd/kdex.dtd" +MimeTypes = text/docbook DefaultExtension = docbook Groups = Core NumOfPages = 1 --- branches/KDE/3.5/kdewebdev/quanta/data/dtep/kde-docbook-4.2/description.rc #582527:582528 @@ -4,6 +4,7 @@ URL = dtd/kdex.dtd DoctypeString = book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" Inherits = -//KDE//DTD DocBook XML V4.1.2-Based Variant V1.0//EN +MimeTypes = text/docbook DefaultExtension = docbook Groups = Core NumOfPages = 1 --- branches/KDE/3.5/kdewebdev/quanta/data/dtep/php/description.rc #582527:582528 @@ -1,5 +1,6 @@ [General] Name = PHP +MimeTypes = application/x-php DefaultExtension = php NumOfPages = 0 CaseSensitive = true --- branches/KDE/3.5/kdewebdev/quanta/data/dtep/schema/description.rc #582527:582528 @@ -1,6 +1,7 @@ [General] Name = XML Schema NickName = XML Schema 1.0 +MimeTypes = application/xsd DefaultExtension = xsd NumOfPages = 0 CaseSensitive = true --- branches/KDE/3.5/kdewebdev/quanta/data/dtep/tagxml/description.rc #582527:582528 @@ -1,5 +1,6 @@ [General] Name = TAGS +MimeTypes = text/xml DefaultExtension = tag NickName = Quanta Tag Files NumOfPages = 0 --- branches/KDE/3.5/kdewebdev/quanta/data/dtep/wml-1-2/description.rc #582527:582528 @@ -1,6 +1,7 @@ [General] Name = -//WAPFORUM//DTD WML 1.2//EN NickName = WML 1.2 +MimeTypes = text/vnd.wap.wml DefaultExtension = wml Groups = Core NumOfPages = 1 --- branches/KDE/3.5/kdewebdev/quanta/data/dtep/xhtml-basic/description.rc #582527:582528 @@ -3,6 +3,7 @@ NickName = XHTML 1.0 Basic URL = http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd DoctypeString = html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd" +MimeTypes = text/html DefaultExtension = html Groups = Core, I18n NumOfPages = 1 --- branches/KDE/3.5/kdewebdev/quanta/data/dtep/xhtml-frameset/description.rc #582527:582528 @@ -3,6 +3,7 @@ NickName = XHTML 1.0 Frameset URL = http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd DoctypeString = html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd" +MimeTypes = text/html DefaultExtension = html Groups = Core, I18n, Script, Focus, Others NumOfPages = 4 --- branches/KDE/3.5/kdewebdev/quanta/data/dtep/xhtml-strict/description.rc #582527:582528 @@ -3,6 +3,7 @@ NickName = XHTML 1.0 Strict URL = http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd DoctypeString = html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" +MimeTypes = text/html DefaultExtension = html Groups = Core, I18n, Script, Focus, Others NumOfPages = 4 --- branches/KDE/3.5/kdewebdev/quanta/data/dtep/xhtml/description.rc #582527:582528 @@ -3,6 +3,7 @@ NickName = XHTML 1.0 Transitional URL = http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd DoctypeString = html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" +MimeTypes = text/html DefaultExtension = html Groups = Core, I18n, Script, Focus, Others NumOfPages = 4 --- branches/KDE/3.5/kdewebdev/quanta/data/dtep/xhtml11/description.rc #582527:582528 @@ -3,6 +3,7 @@ NickName = XHTML 1.1 URL = http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd DoctypeString = html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" +MimeTypes = text/html DefaultExtension = html Groups = Core, I18n, Script,Focus NumOfPages = 3 --- branches/KDE/3.5/kdewebdev/quanta/data/dtep/xslt/description.rc #582527:582528 @@ -1,6 +1,7 @@ [General] Name = XSLT NickName = XSLT 1.0 +MimeTypes = text/x-xslt DefaultExtension = xslt NumOfPages = 0 CaseSensitive = true --- branches/KDE/3.5/kdewebdev/quanta/quanta.kdevelop #582527:582528 @@ -19,7 +19,7 @@ false - + @@ -170,7 +170,7 @@ false - + true @@ -193,16 +193,16 @@ - - + + /usr/bin/gdb true false false true - - - + + + false @@ -280,7 +280,7 @@ KDElibs3 - + set m_,_ theValue --- branches/KDE/3.5/kdewebdev/quanta/src/document.cpp #582527:582528 @@ -2949,12 +2949,21 @@ } } else //DOCTYPE not found in file { - QString mimetype = KMimeType::findByURL(url())->name(); - const DTDStruct *currdtd = DTDs::ref()->DTDfromMimeType(mimetype); - if (currdtd) - setDTDIdentifier(currdtd->name); - else - setDTDIdentifier(projectDTD); + KURL u = url(); + QString dtdId = DTDs::ref()->DTDforURL(u)->name; +// if (dtdId == "empty") + { + const DTDStruct * dtd = DTDs::ref()->find(projectDTD); + if (DTDs::canHandle(dtd, u)) + dtdId = projectDTD; + else + { + dtd = DTDs::ref()->find(qConfig.defaultDocType); + if (DTDs::canHandle(dtd, u)) + dtdId = qConfig.defaultDocType; + } + } + setDTDIdentifier(dtdId); } } else //dtdName is read from the method's parameter { --- branches/KDE/3.5/kdewebdev/quanta/src/dtds.cpp #582527:582528 @@ -109,7 +109,23 @@ // kdDebug(24000) << "read:" << *it << endl; readTagDir(*it, false); // read all tags, but only short form } -// kdDebug(24000) << "dtds::dtds constructed" << endl; + +//load the mimetypes from the insideDTDs + QDictIterator it(*m_dict); + for( ; it.current(); ++it ) + { + DTDStruct * dtd = it.current(); + for (uint i = 0; i < dtd->insideDTDs.count(); i++) + { + const DTDStruct *insideDTD = m_dict->find(dtd->insideDTDs[i]); // search but don't load + if (!insideDTD) + insideDTD = m_dict->find(getDTDNameFromNickName(dtd->insideDTDs[i])); // search but don't load + if (insideDTD && !insideDTD->toplevel) + dtd->mimeTypes += insideDTD->mimeTypes; + } + } + + // kdDebug(24000) << "dtds::dtds constructed" << endl; } DTDs::~DTDs() @@ -189,6 +205,12 @@ int pos = tmpStr.find('('); dtd->definitionTags[tmpStr.left(pos).stripWhiteSpace()] = tmpStr.mid(pos+1, tmpStr.findRev(')')-pos-1).stripWhiteSpace(); } + //Which DTD can be present in this one? + dtd->insideDTDs = dtdConfig->readListEntry("MayContain"); + for (uint i = 0; i < dtd->insideDTDs.count(); i++) + { + dtd->insideDTDs[i] = dtd->insideDTDs[i].stripWhiteSpace().lower(); + } m_dict->insert(dtdName.lower(), dtd); //insert the structure into the dictionary @@ -236,7 +258,7 @@ dtd->inheritsTagsFrom = dtdConfig->readEntry("Inherits").lower(); dtd->documentation = dtdConfig->readEntry("Documentation").lower(); - dtd->defaultExtension = dtdConfig->readEntry("DefaultExtension", "html"); + dtd->defaultExtension = dtdConfig->readEntry("DefaultExtension"); dtd->caseSensitive = caseSensitive; int numOfTags = 0; QTagList *tagList = new QTagList(119, false); //max 119 tag in a DTD @@ -356,12 +378,6 @@ /**** Code for the new parser *****/ dtdConfig->setGroup("Parsing rules"); - //Which DTD can be present in this one? - dtd->insideDTDs = dtdConfig->readListEntry("MayContain"); - for (uint i = 0; i < dtd->insideDTDs.count(); i++) - { - dtd->insideDTDs[i] = dtd->insideDTDs[i].stripWhiteSpace().lower(); - } bool appendCommonRules = dtdConfig->readBoolEntry("AppendCommonSpecialAreas", true); //Read the special areas and area names QString rxStr = ""; @@ -1046,18 +1062,39 @@ } -/** find a DTD for a given mimetype */ -const DTDStruct * DTDs::DTDfromMimeType(const QString &mimetype) +const DTDStruct * DTDs::DTDforURL(const KURL &url) { + QValueList foundList; QDictIterator it(*m_dict); for( ; it.current(); ++it ) { - if (it.current()->toplevel && it.current()->mimeTypes.contains(mimetype)) + if (it.current()->toplevel && canHandle(it.current(), url)) { - return it.current(); + foundList.append(it.current()); } } - return 0L; + if (foundList.isEmpty()) + return find("empty"); + else + { + QString path = url.path(); + for (uint i = 0; i < foundList.count(); i++) + { + if (path.endsWith('.' + foundList[i]->defaultExtension)) + return foundList[i]; + } + return foundList[0]; + } } +bool DTDs::canHandle(const DTDStruct *dtd, const KURL &url) +{ + QString mimetype = KMimeType::findByURL(url)->name(); + if (dtd->mimeTypes.contains(mimetype)) + return true; + if (url.path().endsWith('.' + dtd->defaultExtension)) + return true; + return false; +} + #include "dtds.moc" --- branches/KDE/3.5/kdewebdev/quanta/src/dtds.h #582527:582528 @@ -127,13 +127,21 @@ QStringList fileNameList (bool topLevelOnly=false); - /** finds a dtd for a given mimetype + /** finds a dtd for a given url * - * @param mimetype look for this type - * @return the first DTD for this mimetype or 0L + * @param url look for this file + * @return the first DTD for this mimetype or the "empty" DTD if not found */ - const DTDStruct * DTDfromMimeType(const QString &mimetype); + const DTDStruct * DTDforURL(const KURL &url); + /** + * Checks if a DTD can handle the file or not. + * @param dtd the DTD to check against + * @param url the url pointing to the file + * @return true if it can handle + */ + static bool canHandle(const DTDStruct *dtd, const KURL &url); + public slots: /** Load a DTD and convert to a DTEP */ @@ -158,10 +166,10 @@ /** DTD has changed need reparse */ void forceReparse(); - + /** Enable/disbale the idle timer*/ void enableIdleTimer(bool); - + void loadToolbarForDTD(const QString&); private: