зеркало из https://github.com/mozilla/gecko-dev.git
bug 157142, transformiix standalone should use XPCOM atoms. r=sicking, sr=peterv
This commit is contained in:
Родитель
679bb66645
Коммит
c3ed4355a0
|
@ -57,16 +57,9 @@ static PRUint32 gXPathRefCnt = 0;
|
|||
static PRUint32 gXSLTRefCnt = 0;
|
||||
static PRUint32 gHTMLRefCnt = 0;
|
||||
|
||||
#ifdef TX_EXE
|
||||
#define TX_ATOM(_name, _value) \
|
||||
_name = TX_GET_ATOM(String(_value)); \
|
||||
if (!_name) \
|
||||
return MB_FALSE
|
||||
#else
|
||||
#define TX_ATOM(_name, _value) \
|
||||
_name = NS_NewAtom(_value); \
|
||||
NS_ENSURE_TRUE(_name, MB_FALSE)
|
||||
#endif
|
||||
|
||||
MBool txXMLAtoms::init()
|
||||
{
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
|
||||
#include "txStandaloneXSLTProcessor.h"
|
||||
#include "CommandLineUtils.h"
|
||||
#include "nsXPCOM.h"
|
||||
#include <fstream.h>
|
||||
|
||||
//--------------/
|
||||
|
@ -56,6 +57,10 @@ void printUsage();
|
|||
**/
|
||||
int main(int argc, char** argv) {
|
||||
|
||||
nsresult rv;
|
||||
rv = NS_InitXPCOM2(nsnull, nsnull, nsnull);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (!txXSLTProcessor::txInit())
|
||||
return 1;
|
||||
|
||||
|
@ -107,7 +112,6 @@ int main(int argc, char** argv) {
|
|||
|
||||
SimpleErrorObserver obs;
|
||||
txStandaloneXSLTProcessor proc;
|
||||
nsresult rv = NS_OK;
|
||||
//-- process
|
||||
if (!xsltFilename) {
|
||||
if (!xmlFilename) {
|
||||
|
@ -123,7 +127,9 @@ int main(int argc, char** argv) {
|
|||
}
|
||||
resultFileStream.close();
|
||||
txXSLTProcessor::txShutdown();
|
||||
return NS_SUCCEEDED(rv);
|
||||
rv = NS_ShutdownXPCOM(nsnull);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
return 0;
|
||||
} //-- main
|
||||
|
||||
void printHelp() {
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
*/
|
||||
|
||||
#include "txStandaloneXSLTProcessor.h"
|
||||
#include "nsXPCOM.h"
|
||||
#include "xmExternalDriver.hpp"
|
||||
|
||||
class txDriverProcessor : public txStandaloneXSLTProcessor,
|
||||
|
@ -111,9 +112,11 @@ private:
|
|||
int main (int argc, char ** argv)
|
||||
{
|
||||
txDriverProcessor driver;
|
||||
NS_InitXPCOM2(nsnull, nsnull, nsnull);
|
||||
if (!txDriverProcessor::txInit())
|
||||
return 1;
|
||||
driver.main (argc, argv);
|
||||
txDriverProcessor::txShutdown();
|
||||
NS_ShutdownXPCOM(nsnull);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -42,122 +42,83 @@
|
|||
#include "XMLUtils.h"
|
||||
|
||||
txHTMLOutput::txHTMLOutput(txOutputFormat* aFormat, ostream* aOut)
|
||||
: txXMLOutput(aFormat, aOut)
|
||||
: txXMLOutput(aFormat, aOut), mHTMLEmptyTags(EMPTY_ELEMENTS_COUNT)
|
||||
{
|
||||
mUseEmptyElementShorthand = MB_FALSE;
|
||||
|
||||
mHTMLEmptyTags.setOwnership(Map::eOwnsNone);
|
||||
mHTMLEmptyTags.put(txHTMLAtoms::area, txHTMLAtoms::area);
|
||||
mHTMLEmptyTags.put(txHTMLAtoms::base, txHTMLAtoms::base);
|
||||
mHTMLEmptyTags.put(txHTMLAtoms::basefont, txHTMLAtoms::basefont);
|
||||
mHTMLEmptyTags.put(txHTMLAtoms::br, txHTMLAtoms::br);
|
||||
mHTMLEmptyTags.put(txHTMLAtoms::col, txHTMLAtoms::col);
|
||||
mHTMLEmptyTags.put(txHTMLAtoms::frame, txHTMLAtoms::frame);
|
||||
mHTMLEmptyTags.put(txHTMLAtoms::hr, txHTMLAtoms::hr);
|
||||
mHTMLEmptyTags.put(txHTMLAtoms::img, txHTMLAtoms::img);
|
||||
mHTMLEmptyTags.put(txHTMLAtoms::input, txHTMLAtoms::input);
|
||||
mHTMLEmptyTags.put(txHTMLAtoms::isindex, txHTMLAtoms::isindex);
|
||||
mHTMLEmptyTags.put(txHTMLAtoms::link, txHTMLAtoms::link);
|
||||
mHTMLEmptyTags.put(txHTMLAtoms::meta, txHTMLAtoms::meta);
|
||||
mHTMLEmptyTags.put(txHTMLAtoms::param, txHTMLAtoms::param);
|
||||
|
||||
mHTMLEmptyAttributes.setOwnership(Map::eOwnsItems);
|
||||
mHTMLEmptyTags.AppendObject(txHTMLAtoms::area);
|
||||
mHTMLEmptyTags.AppendObject(txHTMLAtoms::base);
|
||||
mHTMLEmptyTags.AppendObject(txHTMLAtoms::basefont);
|
||||
mHTMLEmptyTags.AppendObject(txHTMLAtoms::br);
|
||||
mHTMLEmptyTags.AppendObject(txHTMLAtoms::col);
|
||||
mHTMLEmptyTags.AppendObject(txHTMLAtoms::frame);
|
||||
mHTMLEmptyTags.AppendObject(txHTMLAtoms::hr);
|
||||
mHTMLEmptyTags.AppendObject(txHTMLAtoms::img);
|
||||
mHTMLEmptyTags.AppendObject(txHTMLAtoms::input);
|
||||
mHTMLEmptyTags.AppendObject(txHTMLAtoms::isindex);
|
||||
mHTMLEmptyTags.AppendObject(txHTMLAtoms::link);
|
||||
mHTMLEmptyTags.AppendObject(txHTMLAtoms::meta);
|
||||
mHTMLEmptyTags.AppendObject(txHTMLAtoms::param);
|
||||
|
||||
// checked
|
||||
txList* elementList = new List;
|
||||
if (!elementList)
|
||||
return;
|
||||
elementList->add(txHTMLAtoms::input);
|
||||
mHTMLEmptyAttributes.put(txHTMLAtoms::checked, elementList);
|
||||
mHTMLEmptyAttributes[0].mAttrName = txHTMLAtoms::checked;
|
||||
mHTMLEmptyAttributes[0].mElementList.AppendObject(txHTMLAtoms::input);
|
||||
|
||||
// compact
|
||||
elementList = new List;
|
||||
if (!elementList)
|
||||
return;
|
||||
elementList->add(txHTMLAtoms::dir);
|
||||
elementList->add(txHTMLAtoms::dl);
|
||||
elementList->add(txHTMLAtoms::menu);
|
||||
elementList->add(txHTMLAtoms::ol);
|
||||
elementList->add(txHTMLAtoms::ul);
|
||||
mHTMLEmptyAttributes.put(txHTMLAtoms::compact, elementList);
|
||||
mHTMLEmptyAttributes[1].mAttrName = txHTMLAtoms::compact;
|
||||
mHTMLEmptyAttributes[1].mElementList.AppendObject(txHTMLAtoms::dir);
|
||||
mHTMLEmptyAttributes[1].mElementList.AppendObject(txHTMLAtoms::dl);
|
||||
mHTMLEmptyAttributes[1].mElementList.AppendObject(txHTMLAtoms::menu);
|
||||
mHTMLEmptyAttributes[1].mElementList.AppendObject(txHTMLAtoms::ol);
|
||||
mHTMLEmptyAttributes[1].mElementList.AppendObject(txHTMLAtoms::ul);
|
||||
|
||||
// declare
|
||||
elementList = new List;
|
||||
if (!elementList)
|
||||
return;
|
||||
elementList->add(txHTMLAtoms::object);
|
||||
mHTMLEmptyAttributes.put(txHTMLAtoms::declare, elementList);
|
||||
mHTMLEmptyAttributes[2].mAttrName = txHTMLAtoms::declare;
|
||||
mHTMLEmptyAttributes[2].mElementList.AppendObject(txHTMLAtoms::object);
|
||||
|
||||
// defer
|
||||
elementList = new List;
|
||||
if (!elementList)
|
||||
return;
|
||||
elementList->add(txHTMLAtoms::script);
|
||||
mHTMLEmptyAttributes.put(txHTMLAtoms::defer, elementList);
|
||||
mHTMLEmptyAttributes[3].mAttrName = txHTMLAtoms::defer;
|
||||
mHTMLEmptyAttributes[3].mElementList.AppendObject(txHTMLAtoms::script);
|
||||
|
||||
// disabled
|
||||
elementList = new List;
|
||||
if (!elementList)
|
||||
return;
|
||||
elementList->add(txHTMLAtoms::button);
|
||||
elementList->add(txHTMLAtoms::input);
|
||||
elementList->add(txHTMLAtoms::optgroup);
|
||||
elementList->add(txHTMLAtoms::option);
|
||||
elementList->add(txHTMLAtoms::select);
|
||||
elementList->add(txHTMLAtoms::textarea);
|
||||
mHTMLEmptyAttributes.put(txHTMLAtoms::disabled, elementList);
|
||||
mHTMLEmptyAttributes[4].mAttrName = txHTMLAtoms::disabled;
|
||||
mHTMLEmptyAttributes[4].mElementList.AppendObject(txHTMLAtoms::button);
|
||||
mHTMLEmptyAttributes[4].mElementList.AppendObject(txHTMLAtoms::input);
|
||||
mHTMLEmptyAttributes[4].mElementList.AppendObject(txHTMLAtoms::optgroup);
|
||||
mHTMLEmptyAttributes[4].mElementList.AppendObject(txHTMLAtoms::option);
|
||||
mHTMLEmptyAttributes[4].mElementList.AppendObject(txHTMLAtoms::select);
|
||||
mHTMLEmptyAttributes[4].mElementList.AppendObject(txHTMLAtoms::textarea);
|
||||
|
||||
// ismap
|
||||
elementList = new List;
|
||||
if (!elementList)
|
||||
return;
|
||||
elementList->add(txHTMLAtoms::img);
|
||||
elementList->add(txHTMLAtoms::input);
|
||||
mHTMLEmptyAttributes.put(txHTMLAtoms::ismap, elementList);
|
||||
mHTMLEmptyAttributes[5].mAttrName = txHTMLAtoms::ismap;
|
||||
mHTMLEmptyAttributes[5].mElementList.AppendObject(txHTMLAtoms::img);
|
||||
mHTMLEmptyAttributes[5].mElementList.AppendObject(txHTMLAtoms::input);
|
||||
|
||||
// multiple
|
||||
elementList = new List;
|
||||
if (!elementList)
|
||||
return;
|
||||
elementList->add(txHTMLAtoms::select);
|
||||
mHTMLEmptyAttributes.put(txHTMLAtoms::multiple, elementList);
|
||||
mHTMLEmptyAttributes[6].mAttrName = txHTMLAtoms::multiple;
|
||||
mHTMLEmptyAttributes[6].mElementList.AppendObject(txHTMLAtoms::select);
|
||||
|
||||
// noresize
|
||||
elementList = new List;
|
||||
if (!elementList)
|
||||
return;
|
||||
elementList->add(txHTMLAtoms::frame);
|
||||
mHTMLEmptyAttributes.put(txHTMLAtoms::noresize, elementList);
|
||||
mHTMLEmptyAttributes[7].mAttrName = txHTMLAtoms::noresize;
|
||||
mHTMLEmptyAttributes[7].mElementList.AppendObject(txHTMLAtoms::frame);
|
||||
|
||||
// noshade
|
||||
elementList = new List;
|
||||
if (!elementList)
|
||||
return;
|
||||
elementList->add(txHTMLAtoms::hr);
|
||||
mHTMLEmptyAttributes.put(txHTMLAtoms::noshade, elementList);
|
||||
mHTMLEmptyAttributes[8].mAttrName = txHTMLAtoms::noshade;
|
||||
mHTMLEmptyAttributes[8].mElementList.AppendObject(txHTMLAtoms::hr);
|
||||
|
||||
// nowrap
|
||||
elementList = new List;
|
||||
if (!elementList)
|
||||
return;
|
||||
elementList->add(txHTMLAtoms::td);
|
||||
elementList->add(txHTMLAtoms::th);
|
||||
mHTMLEmptyAttributes.put(txHTMLAtoms::nowrap, elementList);
|
||||
mHTMLEmptyAttributes[9].mAttrName = txHTMLAtoms::nowrap;
|
||||
mHTMLEmptyAttributes[9].mElementList.AppendObject(txHTMLAtoms::td);
|
||||
mHTMLEmptyAttributes[9].mElementList.AppendObject(txHTMLAtoms::th);
|
||||
|
||||
// readonly
|
||||
elementList = new List;
|
||||
if (!elementList)
|
||||
return;
|
||||
elementList->add(txHTMLAtoms::input);
|
||||
elementList->add(txHTMLAtoms::textarea);
|
||||
mHTMLEmptyAttributes.put(txHTMLAtoms::readonly, elementList);
|
||||
mHTMLEmptyAttributes[10].mAttrName = txHTMLAtoms::readonly;
|
||||
mHTMLEmptyAttributes[10].mElementList.AppendObject(txHTMLAtoms::input);
|
||||
mHTMLEmptyAttributes[10].mElementList.AppendObject(txHTMLAtoms::textarea);
|
||||
|
||||
// selected
|
||||
elementList = new List;
|
||||
if (!elementList)
|
||||
return;
|
||||
elementList->add(txHTMLAtoms::option);
|
||||
mHTMLEmptyAttributes.put(txHTMLAtoms::selected, elementList);
|
||||
mHTMLEmptyAttributes[11].mAttrName = txHTMLAtoms::selected;
|
||||
mHTMLEmptyAttributes[11].mElementList.AppendObject(txHTMLAtoms::option);
|
||||
}
|
||||
|
||||
txHTMLOutput::~txHTMLOutput()
|
||||
|
@ -305,9 +266,10 @@ MBool txHTMLOutput::isShorthandElement(const String& aName)
|
|||
String localName;
|
||||
XMLUtils::getLocalPart(aName, localName);
|
||||
localName.toLowerCase();
|
||||
txAtom* localAtom = TX_GET_ATOM(localName);
|
||||
if (localAtom && mHTMLEmptyTags.get(localAtom))
|
||||
nsCOMPtr<nsIAtom> localAtom = do_GetAtom(localName);
|
||||
if (localAtom && mHTMLEmptyTags.IndexOf(localAtom) > -1) {
|
||||
return MB_TRUE;
|
||||
}
|
||||
return MB_FALSE;
|
||||
}
|
||||
|
||||
|
@ -315,14 +277,18 @@ MBool txHTMLOutput::isShorthandAttribute(const String& aLocalName)
|
|||
{
|
||||
String localName(aLocalName);
|
||||
localName.toLowerCase();
|
||||
txAtom* localAtom = TX_GET_ATOM(localName);
|
||||
txList* elements = (txList*)mHTMLEmptyAttributes.get(localAtom);
|
||||
if (localAtom && (elements)) {
|
||||
txExpandedName* currentElement = (txExpandedName*)mCurrentElements.peek();
|
||||
txListIterator iter(elements);
|
||||
while (iter.hasNext()) {
|
||||
if ((txAtom*)iter.next() == currentElement->mLocalName)
|
||||
return MB_TRUE;
|
||||
nsCOMPtr<nsIAtom> localAtom = do_GetAtom(localName);
|
||||
PRUint8 k = 0;
|
||||
for ( ; k < SHORTHAND_ATTR_COUNT; ++k) {
|
||||
if (mHTMLEmptyAttributes[k].mAttrName == localAtom) {
|
||||
txExpandedName* currentElement =
|
||||
(txExpandedName*)mCurrentElements.peek();
|
||||
if (mHTMLEmptyAttributes[k].mElementList.IndexOf(currentElement->mLocalName) > -1) {
|
||||
return MB_TRUE;
|
||||
}
|
||||
else {
|
||||
return MB_FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
return MB_FALSE;
|
||||
|
|
Загрузка…
Ссылка в новой задаче