本文整理汇总了C++中TagStack类的典型用法代码示例。如果您正苦于以下问题:C++ TagStack类的具体用法?C++ TagStack怎么用?C++ TagStack使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了TagStack类的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: tag_end
void RTFGenParser::tag_end(const QString &tagName)
{
// Roll back until we find our tag.
bool found = false;
for(Tag* pTag = m_tags.peek(); pTag != NULL && !found; pTag = m_tags.peek())
{
if (pTag->name == tagName)
{
found = true;
}
if (pTag->hasCharStyle())
{
CharStyle style = *(pTag->pCharStyle);
// We must pop here, so that getTopTagWithCharStyle will find a parent tag.
m_tags.pop();
pTag = NULL; // to avoid confusion
Tag* pParentTag = m_tags.getTopTagWithCharStyle();
if (pParentTag != NULL)
{
if (pParentTag->hasCharStyle())
{
CharStyle* pParentStyle = pParentTag->pCharStyle;
// Roll back the character style. This is regardless of whether
// we found the closed tag; we just collapse all styles on our way.
QString rtf = pParentStyle->getDiffRTF(style);
if (!rtf.isEmpty())
{
res += rtf.utf8();
m_bSpace = true;
}
}
}
}
else // if this tag has no char style attached
{
m_tags.pop(); // just pop the tag out
pTag = NULL; // to avoid confusion
}
if (found)
{
if (tagName.lower() == "p")
{
res += "\\par";
m_bSpace = true;
}
}
}
}
示例2: tag_start
void RTFGenParser::tag_start(const QString &tagName, const list<QString> &attrs)
{
if (m_res_size)
return;
CharStyle parentStyle, style;
{
Tag* pParentTag = m_tags.getTopTagWithCharStyle();
if (pParentTag != NULL)
{
parentStyle = *(pParentTag->pCharStyle);
}
}
style = parentStyle;
if ((tagName == "b") || (tagName == "i") || (tagName == "u") ||
(tagName == "font") || (tagName == "p") || (tagName == "span")){
QString tag = tagName;
QString option;
for (list<QString>::const_iterator it = attrs.begin(); it != attrs.end(); ++it){
QString key = *it;
++it;
QString value = *it;
option += " ";
option += key;
if (!value.isEmpty()){
option += "=\"";
option += value;
option += "\"";
}
}
tags.push(tag);
options.push(option);
}
if (tagName == "b"){
style.bold = true;
}
else if (tagName == "i"){
style.italic = true;
}
else if (tagName == "u"){
style.underline = true;
}
else if (tagName == "font"){
for (list<QString>::const_iterator it = attrs.begin(); it != attrs.end(); it++){
QString name = (*it);
++it;
QString value = (*it);
if (name == "color")
{
style.colorIdx = getColorIdx(value);
}
else if (name == "face")
{
style.faceIdx = getFontFaceIdx(value);
}
else if (name == "size")
{
int logicalSize = value.toInt();
if (value[0] == '+' || value[0] == '-')
logicalSize += 3;
if (logicalSize < 1)
logicalSize = 1;
else if (logicalSize > 7)
logicalSize = 7;
style.sizePt = htmlFontSizeToPt(logicalSize);
}
}
}
else if (tagName == "p"){
m_paragraphDir = DirUnknown;
m_lastParagraphPos = res.length();
m_bSpace = true;
for (list<QString>::const_iterator it = attrs.begin(); it != attrs.end(); ++it){
QString name = (*it).lower();
++it;
QString value = (*it);
if (name == "dir")
{
QString dir = value.lower();
if (dir == "ltr")
{
res += "\\ltrpar";
m_paragraphDir = DirLTR;
}
if (dir == "rtl")
{
res += "\\rtlpar";
m_paragraphDir = DirRTL;
}
}
}
}
else if (tagName == "br"){
res += "\\line";
m_bSpace = true;
}
else if (tagName == "img"){
QString src;
QString alt;
//.........这里部分代码省略.........
示例3: parse
string RTFGenParser::parse(const QString &text)
{
res = "";
m_res_size = 0;
m_codec = getContacts()->getCodec(m_contact);
int charset = 0;
for (const ENCODING *c = getContacts()->getEncodings(); c->language; c++){
if (!strcasecmp(c->codec, m_codec->name())){
charset = c->rtf_code;
break;
}
}
#ifdef WIN32
if ((charset == 0) && !strcasecmp(m_codec->name(), "system")){
char buff[256];
int res = GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_IDEFAULTANSICODEPAGE, (char*)&buff, sizeof(buff));
if (res){
unsigned codepage = atol(buff);
if (codepage){
for (const rtf_cp *c = rtf_cps; c->cp; c++){
if (c->cp == codepage)
charset = c->charset;
}
}
}
}
#endif
unsigned ansicpg = 0;
const char *send_encoding = 0;
m_codec = NULL;
if (charset){
for (const ENCODING *c = getContacts()->getEncodings(); c->language; c++){
if ((c->rtf_code == charset) && c->bMain){
send_encoding = c->codec;
m_codec = getContacts()->getCodecByName(send_encoding);
ansicpg = c->cp_code;
break;
}
}
}
// Add defaults to the tables
m_fontFaces.push_back("MS Sans Serif");
m_colors.push_back(m_foreColor);
// Create a "fake" tag which'll serve as the default style
CharStyle style;
style.faceIdx = 0;
style.colorIdx = 1; // colors are 1-based (0 = default)
style.sizePt = 12; // default according to Microsoft
Tag& tag = *(m_tags.pushNew());
tag.setCharStyle(style);
// Assume we go immediately after a tag.
m_bSpace = true;
HTMLParser::parse(text);
string s;
s = "{\\rtf1\\ansi";
if (ansicpg){
s += "\\ansicpg";
s += number(ansicpg);
}
s += "\\deff0\r\n";
s += "{\\fonttbl";
unsigned n = 0;
for (list<QString>::iterator it_face = m_fontFaces.begin(); it_face != m_fontFaces.end(); it_face++, n++){
s += "{\\f";
s += number(n);
QString face = (*it_face);
if (face.find("Times") >= 0){
s += "\\froman";
}else if (face.find("Courier") >= 0){
s += "\\fmodern";
}else{
s += "\\fswiss";
}
if (charset){
s += "\\fcharset";
s += number(charset);
}
s += " ";
int pos = face.find(QRegExp(" +["));
if (pos > 0)
face = face.left(pos);
s += static_cast<string>(face.toLatin1());
s += ";}";
}
s += "}\r\n";
s += "{\\colortbl ;";
for (list<QColor>::iterator it_colors = m_colors.begin(); it_colors != m_colors.end(); ++it_colors){
QColor c = *it_colors;
s += "\\red";
s += number(c.red());
s += "\\green";
s += number(c.green());
s += "\\blue";
s += number(c.blue());
s += ";";
}
s += "}\r\n";
//.........这里部分代码省略.........
示例4: tag_start
void RTFGenParser::tag_start(const QString &tagName, const list<QString> &attrs)
{
CharStyle parentStyle, style;
{
Tag* pParentTag = m_tags.getTopTagWithCharStyle();
if (pParentTag != NULL)
{
parentStyle = *(pParentTag->pCharStyle);
}
}
style = parentStyle;
if (tagName == "b"){
style.bold = true;
}
else if (tagName == "i"){
style.italic = true;
}
else if (tagName == "u"){
style.underline = true;
}
else if (tagName == "font"){
for (list<QString>::const_iterator it = attrs.begin(); it != attrs.end(); it++){
QString name = (*it);
++it;
QString value = (*it);
if (name == "color")
{
style.colorIdx = getColorIdx(value);
}
else if (name == "face")
{
style.faceIdx = getFontFaceIdx(value);
}
else if (name == "size")
{
int logicalSize = value.toInt();
if (value[0] == '+' || value[0] == '-')
logicalSize += 3;
if (logicalSize < 1)
logicalSize = 1;
else if (logicalSize > 7)
logicalSize = 7;
style.sizePt = htmlFontSizeToPt(logicalSize);
}
}
}
else if (tagName == "p"){
m_paragraphDir = DirUnknown;
m_lastParagraphPos = res.length();
m_bSpace = true;
for (list<QString>::const_iterator it = attrs.begin(); it != attrs.end(); ++it){
QString name = (*it).lower();
++it;
QString value = (*it);
if (name == "dir")
{
QString dir = value.lower();
if (dir == "ltr")
{
res += "\\ltrpar";
m_paragraphDir = DirLTR;
}
if (dir == "rtl")
{
res += "\\rtlpar";
m_paragraphDir = DirRTL;
}
}
}
}
else if (tagName == "br"){
res += "\\line";
m_bSpace = true;
}
else if (tagName == "img"){
QString src;
for (list<QString>::const_iterator it = attrs.begin(); it != attrs.end(); ++it){
QString name = (*it);
++it;
QString value = (*it);
if (name == "src"){
src = value;
break;
}
}
if (src.left(10) != "icon:smile")
return;
bool bOK;
unsigned nSmile = src.mid(10).toUInt(&bOK, 16);
if (!bOK)
return;
if (nSmile < 16){
res += "<##icqimage000";
if (nSmile < 10){
res += (char)(nSmile + '0');
}else{
res += (char)(nSmile - 10 + 'A');
}
//.........这里部分代码省略.........