Summary: | tag and attribute case changed within php (<?php ?>) | ||
---|---|---|---|
Product: | quanta | Reporter: | kde |
Component: | general | Assignee: | András Manţia <amantia> |
Status: | RESOLVED FIXED | ||
Severity: | normal | ||
Priority: | NOR | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | unspecified | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: |
Description
kde
2004-04-30 12:12:45 UTC
<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Arial"> <p>The problem here is that you used " " to quote the tag attribute values, but use " " inside the attribute value as well, and this confuses Quanta (and the Kate highlighting), and I'd say this is not a problem. I'm not even sure that using " " inside " " is correct...</p> <p> If you change the attribute quotation to ' ' and run the tag changing dialog, you will see that it behaves in the correct way.</p> </body></html> Using "" inside attribute values is ok in this case, because it is inside <?php ?> tags. Regardless, Quanta shouldnt change the case of things inside <?php ?> tags. On Monday 10 May 2004 11:00, theboywho@ruddyperl.com wrote: > 10:00 ------- Using "" inside attribute values is ok in this case, > because it is inside <?php ?> tags. That's bad. :-( Kate also highlights it wrong than... > > Regardless, Quanta shouldnt change the case of things inside <?php ?> > tags. This is not about php at all. It's about getting confused by the quotation marks. When <a href="<? echo "foo" ?>"> is analyzed, there is a search for the pair of the first ". And this is the next " unless it's escaped. So this will transalte to: tag name: a attribute1: href attribute1 value: <? echo attribute2: foo attribute2 value: ?> You can easily check in the attribute editor tree or the tag dialog that the value for href is "<? echo" only in this case. When you change the tag case of attributes, the href and foo will be changed... I don't see an easy way to solve this, and this happens only when the quotation is in this form (and never happens if the PHP area is outside of a tag). I'll try to find a solution, but I think it won't be soon. Ah, ok. I understand what you mean now! It was just a small niggle - and I wouldn't consider it critical. Thanks again anyway. CVS commit by amantia: Don't be confused by quotation marks inside a script area which is inside a tag value (like <a href="<? echo "foo" ?>">) Hopefully doesn't slow down the parser too much. CCMAIL: 80683-done@bugs.kde.org M +2 -0 ChangeLog 1.262 M +2 -2 quanta.kdevelop 1.196 M +22 -1 parsers/tag.cpp 1.62 M +2 -0 parsers/tag.h 1.46 --- kdewebdev/quanta/ChangeLog #1.261:1.262 @@ -14,4 +14,6 @@ - fix a major memory leak, cause of many crashes and instability - <fieldset> is not a single tag [#79926] + - don't be confused by quotation marks inside a script area which is inside a tag value + (like <a href="<? echo "foo" ?>">) [#80683] - behavioral/user interface changes: --- kdewebdev/quanta/quanta.kdevelop #1.195:1.196 @@ -236,8 +236,8 @@ <kdevfilecreate> <filetypes> - <type icon="" ext="h" name="C++ header" create="template" > + <type icon="" ext="h" create="template" name="C++ header" > <descr>Quanta speicfic header</descr> </type> - <type icon="source_cpp" ext="cpp" name="C++ source" create="template" > + <type icon="source_cpp" ext="cpp" create="template" name="C++ source" > <descr>A new empty C++ file.</descr> </type> --- kdewebdev/quanta/parsers/tag.cpp #1.61:1.62 @@ -28,4 +28,8 @@ #include "resource.h" +#include "parser.h" +#include "node.h" + + Tag::Tag() { @@ -191,5 +195,6 @@ void Tag::parse(const QString &p_tagStr, while (pos < strLength && (m_tagStr[pos] != quotation || - (m_tagStr[pos] == quotation && m_tagStr[pos-1] == '\\'))) + (m_tagStr[pos] == quotation && + (m_tagStr[pos-1] == '\\' || isInsideScript(m_tagStr.mid(valueStartPos, pos - valueStartPos)) ) ))) { pos++; @@ -551,2 +556,18 @@ void Tag::setDtd(const DTDStruct *dtd) m_dtd = dtd; } + +bool Tag::isInsideScript(const QString &str) +{ + //This detects if the last char from str is inside a script area or not, to + //treat cases like <a href="<? echo "foo" ?>"> correctly + //TODO: speed up if you can... + if (str.find(m_dtd->specialAreaStartRx) != -1) + { + QString foundString = m_dtd->specialAreaStartRx.cap(); + if (str.find(m_dtd->specialAreas[foundString]) == -1) + { + return true; + } + } + return false; +} --- kdewebdev/quanta/parsers/tag.h #1.45:1.46 @@ -174,4 +174,6 @@ public: private: void init(); + /** Verifies if the last char from @param str is inside a script area or not */ + bool isInsideScript(const QString& str); AreaStruct m_area; //where the tag is in the doc Ive been testing this today - it works very well! thank you again!! |