diff options
author | mrwastl <mrwastl@users.sourceforge.net> | 2010-04-17 19:16:26 +0200 |
---|---|---|
committer | mrwastl <mrwastl@users.sourceforge.net> | 2010-04-17 19:16:26 +0200 |
commit | 68ac6628a31cb1472275b5282c5cf9a971d9bddd (patch) | |
tree | 0ef788b563efab6688b0381cedd43baaefbc66cc /glcdskin/string.h | |
parent | 1011961a8af0615ee25b79d2bbd7e6820b851556 (diff) | |
download | graphlcd-base-68ac6628a31cb1472275b5282c5cf9a971d9bddd.tar.gz graphlcd-base-68ac6628a31cb1472275b5282c5cf9a971d9bddd.tar.bz2 |
backport of skin-support from 0.2.x to 0.1.x, changes for gcc 4.3 conformity
Diffstat (limited to 'glcdskin/string.h')
-rw-r--r-- | glcdskin/string.h | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/glcdskin/string.h b/glcdskin/string.h new file mode 100644 index 0000000..b75fa11 --- /dev/null +++ b/glcdskin/string.h @@ -0,0 +1,125 @@ +/* + * GraphLCD skin library + * + * string.h - skin string class + * + * This file is released under the GNU General Public License. Refer + * to the COPYING file distributed with this package. + * + * based on text2skin + * + */ + +#ifndef _GLCDSKIN_STRING_H_ +#define _GLCDSKIN_STRING_H_ + +#include <string> +#include <vector> + +#include "type.h" + +namespace GLCD +{ + +enum eSkinAttrib +{ + aNone, + aNumber, + aString, + aClean, + aRest + +#define __COUNT_ATTRIB__ (aRest + 1) +}; + +struct tSkinAttrib +{ + eSkinAttrib Type; + std::string Text; + int Number; + + tSkinAttrib(const std::string & a): Type(aString), Text(a), Number(0) {} + tSkinAttrib(int n): Type(aNumber), Text(""), Number(n) {} + tSkinAttrib(eSkinAttrib t): Type(t), Text(""), Number(0) {} + tSkinAttrib(void): Type(aNone), Text(""), Number(0) {} + + friend bool operator== (const tSkinAttrib & A, const tSkinAttrib & B); + friend bool operator< (const tSkinAttrib & A, const tSkinAttrib & B); +}; + +inline bool operator== (const tSkinAttrib & A, const tSkinAttrib & B) +{ + return A.Type == B.Type + && A.Text == B.Text + && A.Number == B.Number; +} + +inline bool operator< (const tSkinAttrib & A, const tSkinAttrib & B) +{ + return A.Type == B.Type + ? A.Text == B.Text + ? A.Number < B.Number + : A.Text < B.Text + : A.Type < B.Type; +} + +struct tSkinToken +{ + int Id; + std::string Name; + uint32_t Offset; + tSkinAttrib Attrib; + int MaxItems; + int Index; + + tSkinToken(void); + tSkinToken(int id, std::string n, uint32_t o, const std::string & a); + + friend bool operator< (const tSkinToken & A, const tSkinToken & B); + + static std::string Token(const tSkinToken & Token); +}; + +class cSkinObject; +class cSkin; + +class cSkinString +{ +private: + typedef std::vector<cSkinString*> tStringList; + static tStringList mStrings; + + cSkinObject * mObject; + cSkin * mSkin; + std::string mText; + std::string mOriginal; + std::vector<tSkinToken> mTokens; + bool mTranslate; + +public: + static void Reparse(void); + + cSkinString(cSkinObject *Parent, bool Translate); + ~cSkinString(); + + bool Parse(const std::string & Text, bool Translate = false); + cType Evaluate(void) const; + + void SetListIndex(int MaxItems, int Index); + + cSkinObject * Object(void) const { return mObject; } + cSkin * Skin(void) const { return mSkin; } +}; + +inline void cSkinString::SetListIndex(int MaxItems, int Index) +{ + for (uint32_t i = 0; i < mTokens.size(); ++i) + { + mTokens[i].MaxItems = MaxItems; + mTokens[i].Index = Index; + } +} + +} // end of namespace + +#endif |