aknlayoutcompiler/src/MLAttributesParse.cpp
changeset 0 f58d6ec98e88
child 1 b700e12870ca
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/aknlayoutcompiler/src/MLAttributesParse.cpp	Thu Dec 17 09:14:18 2009 +0200
@@ -0,0 +1,257 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*    
+*
+*/
+
+
+
+// disable "identifier was truncated to '255' characters in the browser information" warning
+#pragma warning(disable: 4786 4250 4503 4541)
+
+
+#include "MLAttributesParse.h"
+#include "MLCompDataParse.h" // for converting zoom strings
+
+#include <akndef.hrh> // for logical font ids
+
+#include <sstream>
+#include <fstream>
+#include <algorithm>
+#include <iostream> // !!! for debug output only
+
+extern string whiteSpace;
+
+
+// const data
+//
+
+const string KAttributesParseRoot = "LayoutAttributes";
+const string KAttributesParseRootAttributeCreatedOn = "createdOn";
+
+const string KAttributesParseNodeAttributeSet = "attributeset";
+const string KAttributesParseNodeAttributeSetAttributeId = "compId";
+const string KAttributesParseNodeAttributeSetAttributeName = "name";
+
+const string KAttributesParseNodeAttribute = "attribute";
+const string KAttributesParseNodeAttributeAttributeId = "id";
+const string KAttributesParseNodeAttributeAttributeName = "name";
+
+const string KAttributesParseNodeCalc = "calc";
+const string KAttributesParseNodeCalcAttributeValue = "value";
+const string KAttributesParseNodeCalcAttributeZoom = "zoom";
+
+
+//
+// class TMLAttributeSetParse
+//
+TMLAttributeSetParse::TMLAttributeSetParse(TMLAttributes* aAttributes)
+	:
+	TMLAttributeSet(aAttributes),
+	iSaxZoomLevels(0)
+	{
+
+	}
+
+MSaxLayoutAttributesHandler* TMLAttributeSetParse::HandleSax(const std::string& aElement, const TAttribs& aAttribs)
+	{
+	//	<attributeset compId="1" name="a0">
+	if (aElement == KAttributesParseNodeAttributeSet)	
+		{
+		iCompId = CdlTkUtil::ParseInt(aAttribs.getValue(KAttributesParseNodeAttributeSetAttributeId));
+		iName = aAttribs.getValue(KAttributesParseNodeAttributeSetAttributeName);
+		}
+	else if(aElement == KAttributesParseNodeAttribute)
+		{
+		HandleSaxAttribute(aAttribs);
+		}
+	else if(aElement == KAttributesParseNodeCalc)
+		{
+		HandleSaxCalc(aAttribs);
+		}
+	return this;
+	}
+
+void TMLAttributeSetParse::HandleSaxEnd(const std::string& aElement)
+	{
+	if (aElement == KAttributesParseNodeAttribute)
+		{
+		insert(make_pair(iId, *iSaxZoomLevels));
+		delete iSaxZoomLevels;
+		iSaxZoomLevels = 0;
+		}
+	}
+
+void TMLAttributeSetParse::HandleSaxAttribute(const TAttribs& aAttribs)
+	{
+	delete iSaxZoomLevels;
+	iSaxZoomLevels = 0;
+	iSaxZoomLevels = new TMLAttributeZoomLevels;
+
+	//    <attribute id="8" name="style 1">
+	iId = CdlTkUtil::ParseInt(aAttribs.getValue(KAttributesParseNodeAttributeAttributeId));
+	string attributeName = CdlTkUtil::ToCpp(aAttribs.getValue(KAttributesParseNodeAttributeAttributeName));
+	iAttributes->iNames.insert(make_pair(attributeName, iId));
+	}
+
+void TMLAttributeSetParse::HandleSaxCalc(const TAttribs& aAttribs)
+	{
+	//      <calc value="32"/>
+	//      <calc value="28" zoom="-2 zoom"/>
+	//      <calc value="38" zoom="+2 zoom"/>
+	//      <calc value="30" zoom="-1 zoom"/>
+	//      <calc value="36" zoom="+1 zoom"/>
+
+	string zoomStr = aAttribs.getValue(KAttributesParseNodeCalcAttributeZoom);
+	int zoom = TMLCompDataParseValues::ConvertZoomStr(zoomStr);
+	if(zoom != EAknUiZoomAutomatic)
+		{
+		string& calc = (*iSaxZoomLevels)[zoom];
+		calc = aAttribs.getValue(KAttributesParseNodeCalcAttributeValue);
+		}
+	}
+
+int TMLAttributeSetParse::CompId() const 
+	{
+	return iCompId;
+	}
+
+string TMLAttributeSetParse::Name() const
+	{
+	return iName;
+	}
+
+
+//
+// class TMLAttributesParse
+//
+auto_ptr<TMLAttributesParse> TMLAttributesParse::Parse(const string& aLayName)
+	{
+	auto_ptr<TMLAttributesParse> layout(new TMLAttributesParse);
+	int pos=0;
+	string layName = aLayName;
+
+	if (layName.size() >= 2 && layName.substr(0,2) == "-m")
+		{
+		layName = layName.substr(2);
+		layout->iCanBeMirror = true;
+		}
+	layout->iName = layName;
+
+	// SAX parsing method
+	cout << "reading MLAttributes(SAX) " << layName << endl;
+	TLayoutAttributesSaxParser saxParser(layout.get());
+	saxParser.Parse(layName);
+
+	return layout;
+	}
+
+TMLAttributesParse::TMLAttributesParse()
+	:
+	iSaxAttributeSet(0)
+	{
+
+	}
+
+MSaxLayoutAttributesHandler* TMLAttributesParse::HandleSax(const std::string& aElement, const TAttribs& aAttribs)
+	{
+	if (aElement == KAttributesParseRoot)
+		{
+		// <LayoutAttributes 
+		//		createdOn="2005-05-20 00:55:40.185" 
+		//		LayoutToolVer="2005-05-12 04:10 PM" 
+		//		MasterId="0.6921563014440754">
+		iTimestamp = aAttribs.getValue(KAttributesParseRootAttributeCreatedOn);
+		return this;
+		}
+	else if (aElement == KAttributesParseNodeAttributeSet)
+		{
+		delete iSaxAttributeSet;
+		iSaxAttributeSet = 0;
+		iSaxAttributeSet = new TMLAttributeSetParse(this);
+		iSaxAttributeSet->HandleSax(aElement, aAttribs);
+		return iSaxAttributeSet;
+		}
+	else
+		return this;
+	}
+
+void TMLAttributesParse::HandleSaxEnd(const std::string& aElement)
+	{
+	if (aElement == KAttributesParseNodeAttributeSet)
+		{
+		TMLAttributeSetComponent& component = (*this)[iSaxAttributeSet->CompId()];
+		component.insert(make_pair(iSaxAttributeSet->Name(), iSaxAttributeSet));
+		iSaxAttributeSet = 0;
+		}
+	}
+
+
+//
+// TLayoutAttributesSaxParser
+//
+
+TLayoutAttributesSaxParser::TLayoutAttributesSaxParser(MSaxLayoutAttributesHandler* aHandler)
+	{ 
+	iStack.push(aHandler);
+	}
+
+void TLayoutAttributesSaxParser::Parse(const std::string& aFileName)
+	{
+	SAX::basic_InputSource<std::string> is(aFileName);
+	SAX::XMLReader<std::string> parser;
+	parser.setContentHandler(*this);
+	parser.setErrorHandler(*this);
+	parser.parse(is);
+	}
+
+void TLayoutAttributesSaxParser::startElement(const std::string& /*namespaceURI*/, const std::string& localName,
+                              const std::string& /*qName*/, const SAX::basic_Attributes<std::string>& atts)
+    {
+	MSaxLayoutAttributesHandler* handler = iStack.top();
+	if (!handler)
+		throw GeneralErr("SAX: No element handler");
+	MSaxLayoutAttributesHandler* next = handler->HandleSax(localName, atts);
+	iStack.push(next);
+    }
+
+void TLayoutAttributesSaxParser::endElement(const std::string& /*namespaceURI*/, const std::string& localName,
+                            const std::string& /*qName*/)
+    {
+	iStack.pop();
+	MSaxLayoutAttributesHandler* handler = iStack.top();
+	if (handler)
+		handler->HandleSaxEnd(localName);
+    }
+
+
+void TLayoutAttributesSaxParser::warning(const TException& aException) 
+    {
+	cerr << aException.what();
+    }
+
+void TLayoutAttributesSaxParser::error(const TException& aException) 
+    {
+	cerr << aException.what();
+    }
+
+void TLayoutAttributesSaxParser::fatalError(const TException& aException)
+    {
+	cerr << aException.what();
+    }
+
+
+
+// End of File