The Gnome Chemistry Utils 0.13.3
|
00001 // -*- C++ -*- 00002 00003 /* 00004 * Gnome Chemistry Utils 00005 * gccv/text-tag.h 00006 * 00007 * Copyright (C) 2008-2010 Jean Bréfort <jean.brefort@normalesup.org> 00008 * 00009 * This program is free software; you can redistribute it and/or 00010 * modify it under the terms of the GNU General Public License as 00011 * published by the Free Software Foundation; either version 2 of the 00012 * License, or (at your option) any later version. 00013 * 00014 * This program is distributed in the hope that it will be useful, 00015 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00017 * GNU General Public License for more details. 00018 * 00019 * You should have received a copy of the GNU General Public License 00020 * along with this program; if not, write to the Free Software 00021 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 00022 * USA 00023 */ 00024 00025 #ifndef GCCV_TEXT_TAG_H 00026 #define GCCV_TEXT_TAG_H 00027 00028 #include "structs.h" 00029 #include <gcu/macros.h> 00030 #include <list> 00031 #include <string> 00032 00034 namespace gccv { 00035 00039 typedef enum 00040 { 00044 Invalid, 00048 Family, 00052 Size, 00056 Style, 00060 Weight, 00064 Variant, 00068 Stretch, 00072 Underline, 00076 Overline, 00080 Strikethrough, 00084 Foreground, 00088 Background, 00092 Rise, 00096 Position, 00100 NewLine, 00104 MaxTag 00105 } Tag; 00106 00110 typedef enum 00111 { 00116 TagPriorityFirst, 00120 TagPriorityLast, 00121 } TagPriority; 00122 00128 class TextTag 00129 { 00130 public: 00137 TextTag (Tag tag, TagPriority priority = TagPriorityFirst); 00141 virtual ~TextTag (); 00142 00152 virtual void Filter (PangoAttrList *l, unsigned start, unsigned end) = 0; 00160 virtual bool operator== (TextTag const& tag) const = 0; 00166 virtual TextTag *Duplicate () const = 0; 00170 virtual bool NeedsNewRun () {return false;} 00178 virtual TextTag *Restrict (TextTag *tag); 00179 00185 static Tag RegisterTagType (); 00189 static Tag MaxTag; 00197 static bool Order (TextTag *first, TextTag *last); 00198 00202 GCU_RO_PROP (Tag, Tag) 00206 GCU_RO_PROP (TagPriority, Priority) 00218 GCU_PROP (unsigned, StartIndex) 00230 GCU_PROP (unsigned, EndIndex) 00238 GCU_PROT_PROP (bool, Stacked) 00245 GCU_PROT_PROP (bool, NewLine) 00246 }; 00247 00253 class FamilyTextTag: public TextTag 00254 { 00255 public: 00261 FamilyTextTag (std::string const &family); 00267 FamilyTextTag (char const *family); 00271 virtual ~FamilyTextTag (); 00272 00280 void Filter (PangoAttrList *l, unsigned start, unsigned end); 00288 bool operator== (TextTag const& tag) const; 00293 TextTag *Duplicate () const; 00297 std::string const &GetFamily () const {return m_Family;} 00298 00299 private: 00300 std::string m_Family; 00301 }; 00302 00308 class SizeTextTag: public TextTag 00309 { 00310 public: 00316 SizeTextTag (double size); 00320 virtual ~SizeTextTag (); 00321 00329 void Filter (PangoAttrList *l, unsigned start, unsigned end); 00337 bool operator== (TextTag const& tag) const; 00342 TextTag *Duplicate () const; 00346 double GetSize () const {return m_Size;} 00347 00348 private: 00349 double m_Size; 00350 }; 00351 00352 00358 class StyleTextTag: public TextTag 00359 { 00360 public: 00366 StyleTextTag (PangoStyle style); 00370 virtual ~StyleTextTag (); 00371 00379 void Filter (PangoAttrList *l, unsigned start, unsigned end); 00387 bool operator== (TextTag const& tag) const; 00392 TextTag *Duplicate () const; 00396 PangoStyle GetStyle () const {return m_Style;} 00397 00398 private: 00399 PangoStyle m_Style; 00400 }; 00401 00402 00408 class WeightTextTag: public TextTag 00409 { 00410 public: 00416 WeightTextTag (PangoWeight weight); 00420 virtual ~WeightTextTag (); 00421 00429 void Filter (PangoAttrList *l, unsigned start, unsigned end); 00437 bool operator== (TextTag const& tag) const; 00442 TextTag *Duplicate () const; 00446 PangoWeight GetWeight () const {return m_Weight;} 00447 00448 private: 00449 PangoWeight m_Weight; 00450 }; 00451 00452 00458 class VariantTextTag: public TextTag 00459 { 00460 public: 00466 VariantTextTag (PangoVariant variant); 00470 virtual ~VariantTextTag (); 00471 00479 void Filter (PangoAttrList *l, unsigned start, unsigned end); 00487 bool operator== (TextTag const& tag) const; 00492 TextTag *Duplicate () const; 00496 PangoVariant GetVariant () const {return m_Variant;} 00497 00498 private: 00499 PangoVariant m_Variant; 00500 }; 00501 00502 00508 class StretchTextTag: public TextTag 00509 { 00510 public: 00516 StretchTextTag (PangoStretch stretch); 00520 virtual ~StretchTextTag (); 00521 00529 void Filter (PangoAttrList *l, unsigned start, unsigned end); 00537 bool operator== (TextTag const& tag) const; 00542 TextTag *Duplicate () const; 00546 PangoStretch GetStretch () const {return m_Stretch;} 00547 00548 private: 00549 PangoStretch m_Stretch; 00550 }; 00551 00552 00558 class UnderlineTextTag: public TextTag 00559 { 00560 public: 00568 UnderlineTextTag (TextDecoration underline, GOColor color = GO_COLOR_BLACK); 00572 virtual ~UnderlineTextTag (); 00573 00581 void Filter (PangoAttrList *l, unsigned start, unsigned end); 00589 bool operator== (TextTag const& tag) const; 00594 TextTag *Duplicate () const; 00598 TextDecoration GetUnderline () const {return m_Underline;} 00599 00600 private: 00601 TextDecoration m_Underline; 00602 00603 GCU_PROP (GOColor, Color) 00604 }; 00605 00611 class OverlineTextTag: public TextTag 00612 { 00613 public: 00621 OverlineTextTag (TextDecoration overline, GOColor color = GO_COLOR_BLACK); 00625 virtual ~OverlineTextTag (); 00626 00634 void Filter (PangoAttrList *l, unsigned start, unsigned end); 00642 bool operator== (TextTag const& tag) const; 00647 TextTag *Duplicate () const; 00651 TextDecoration GetOverline () const {return m_Overline;} 00652 00653 private: 00654 TextDecoration m_Overline; 00655 00656 GCU_PROP (GOColor, Color) 00657 }; 00658 00664 class StrikethroughTextTag: public TextTag 00665 { 00666 public: 00674 StrikethroughTextTag (TextDecoration strikethrough, GOColor color = GO_COLOR_BLACK); 00678 virtual ~StrikethroughTextTag (); 00679 00687 void Filter (PangoAttrList *l, unsigned start, unsigned end); 00695 bool operator== (TextTag const& tag) const; 00700 TextTag *Duplicate () const; 00704 TextDecoration GetStrikethrough () const {return m_Strikethrough;} 00705 00706 private: 00707 TextDecoration m_Strikethrough; 00708 00709 GCU_PROP (GOColor, Color) 00710 }; 00711 00717 class ForegroundTextTag: public TextTag 00718 { 00719 public: 00725 ForegroundTextTag (GOColor color); 00729 virtual ~ForegroundTextTag (); 00730 00738 void Filter (PangoAttrList *l, unsigned start, unsigned end); 00746 bool operator== (TextTag const& tag) const; 00751 TextTag *Duplicate () const; 00755 GOColor GetColor () const {return m_Color;} 00756 00757 private: 00758 GOColor m_Color; 00759 }; 00760 00766 class BackgroundTextTag: public TextTag 00767 { 00768 public: 00774 BackgroundTextTag (GOColor color); 00778 virtual ~BackgroundTextTag (); 00779 00787 void Filter (PangoAttrList *l, unsigned start, unsigned end); 00795 bool operator== (TextTag const& tag) const; 00800 TextTag *Duplicate () const; 00804 GOColor GetColor () const {return m_Color;} 00805 00806 private: 00807 GOColor m_Color; 00808 }; 00809 00815 class RiseTextTag: public TextTag 00816 { 00817 public: 00824 RiseTextTag (double rise); 00828 virtual ~RiseTextTag (); 00829 00837 void Filter (PangoAttrList *l, unsigned start, unsigned end); 00845 bool operator== (TextTag const& tag) const; 00850 TextTag *Duplicate () const; 00854 double GetRise () const {return m_Rise;} 00855 00856 private: 00857 double m_Rise; 00858 }; 00859 00866 class PositionTextTag: public TextTag 00867 { 00868 public: 00880 PositionTextTag (TextPosition position, double size, bool stacked = false, Tag tag = Position); 00884 virtual ~PositionTextTag (); 00885 00893 void Filter (PangoAttrList *l, unsigned start, unsigned end); 00901 bool operator== (TextTag const& tag) const; 00907 TextTag *Duplicate () const; 00914 TextPosition GetPosition (bool &stacked, double &size) const {stacked = m_Stacked; size = m_Size; return m_Position;} 00918 virtual bool NeedsNewRun () {return false;} 00925 TextTag *Restrict (G_GNUC_UNUSED TextTag *tag) {return NULL;} 00926 00927 private: 00928 TextPosition m_Position; 00929 double m_Size; // default size 00930 }; 00931 00937 class NewLineTextTag: public TextTag 00938 { 00939 public: 00943 NewLineTextTag (); 00947 virtual ~NewLineTextTag (); 00948 00956 void Filter (PangoAttrList *l, unsigned start, unsigned end); 00963 bool operator== (TextTag const& tag) const; 00968 TextTag *Duplicate () const; 00969 }; 00970 00976 class TextTagList:public std::list <TextTag *> 00977 { 00978 public: 00982 TextTagList (); 00987 ~TextTagList (); 00988 }; 00989 00990 } // namespace gccv 00991 00992 #endif // GCCV_TEXT_TAG_H