struct tag_list { GtkTextTag *command1; GtkTextTag *command2; GtkTextTag *command_error; GtkTextTag *spelling_error; GtkTextTag *text; GtkTextTag *gear; }; struct krySSACommandHighlighterState { kryList m_unprocessed; gboolean m_buffer_strings; int m_parameter_count; int m_last_parameter_index; int m_str_pos; }; enum highlight_type { HIGHLIGHT_NONE, HIGHLIGHT_TEXT, HIGHLIGHT_COMMAND1, HIGHLIGHT_COMMAND2, HIGHLIGHT_ERROR, HIGHLIGHT_GEAR }; class krySSACommandHighlighterHiddenPart { public: krySSACommandHighlighterHiddenPart(); ~krySSACommandHighlighterHiddenPart(); void AddString(char *text); GList *GetStringGList(); private: GList *m_strings; }; class krySSACommandHighlighterHiddenPartList { public: krySSACommandHighlighterHiddenPartList(); ~krySSACommandHighlighterHiddenPartList(); void StartPart(); void AddText(char *text); void EndPart(); GList *GetGList(); private: GList *m_parts; krySSACommandHighlighterHiddenPart *m_part_cur; }; struct krySSACommandHighlighterPart { char *text; enum highlight_type type; }; class krySSACommandHighlighter : public krySSACommandParser { public: krySSACommandHighlighter(kryString str, gboolean icon_mode = FALSE, GList *cursors = NULL); virtual ~krySSACommandHighlighter(); GList *GetPartList(); char *GetStringFromPartList(); krySSACommandHighlighterHiddenPartList *GetHiddenPartList(); void OnAnything(kryString &str, gboolean is_command = TRUE, enum highlight_type highlight_type = HIGHLIGHT_NONE); void OnString(kryString &str, int offset); void OnCommandGroupStart(kryString str, int offset); void OnCommandGroupEnd(kryString str, int offset); void OnCommandParameterStart(kryString str); void OnCommandParameterEnd(kryString str); void OnCommandParameter(kryString &str); void OnCommandParameterSeparator(kryString str); void OnCommandUnparsed(kryString &str); void OnCommandText(kryString &str); void OnCommandEnd(); /*virtual void OnHighlightCodeBlock() {} ; virtual void OnHighlightText(kryString &string, enum highlight_type type) {}; virtual void OnHighlightUpdateCursors(kryString &string) {};*/ private: gboolean m_alternate_tag; gboolean m_is_last_tag_command; gboolean m_is_icon_mode; gboolean m_free_hidden_parts; krySSACommandHighlighterHiddenPartList *m_hidden_parts; int m_length_parts; GList *m_parts; GList *m_cursors; void AddPart(char *str, int len, enum highlight_type type); protected: krySSACommandHighlighterState *m_state; };