summaryrefslogtreecommitdiffstats
path: root/kopete/protocols/irc/ksparser.h
blob: a71ff1759a1a6f16aa92128c12de2edaaabc29a1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/* This file is part of the KDE project
   Copyright (C) 2001 Simon Hausmann <[email protected]>

   This program is free software; you can redistribute it and/or
   modify it under the terms of the Artistic License.
*/
#ifndef __ksparser_h__
#define __ksparser_h__

#include <tqcolor.h>
#include <tqmap.h>
#include <tqregexp.h>
#include <tqstring.h>
#include <tqvaluestack.h>

/*
 * Helper class to parse IRC color/style codes and convert them to
 * richtext. The parser maintains an internal stack of the styles
 * applied because the IRC message could contain sequences as
 * (bold)Hello (red)World(endbold)! (blue)blue text
 * which needs to be converted to
 * <b>Hello </b><font color="red"><b>World</b>! </font><font color="blue">blue text</font>
 * to get correctly nested tags. (malte)
 */
class KSParser
{
public:
	static TQCString parse(const TQCString &);
	static int colorForHTML( const TQString &html );

	static TQColor ircColor(const TQString &color);
	static TQColor ircColor(unsigned int color);

	~KSParser();
private:
	KSParser();

	TQCString _parse(const TQCString &);
	TQString pushTag(const TQString &, const TQString & = TQString());
	TQString pushColorTag(const TQColor &fgColor, const TQColor &bgColor);
	TQString popTag(const TQString &);
	TQString toggleTag(const TQString &);
	TQString popAll();

private:
	static KSParser m_parser;
	static const TQColor IRC_Colors[17];
	static const TQRegExp sm_colorsModeRegexp;

	TQValueStack<TQString> m_tags;
	TQMap<TQString, TQString> m_attributes;
};

#endif