fixed color markup parsing...

...and allowed to seperately ignore font size, color or style markup
This commit is contained in:
Gunter Labes 2009-06-15 12:33:25 +00:00
parent c353cbc5f9
commit 022a5ef56c

View File

@ -43,7 +43,7 @@ std::string::const_iterator parse_markup(std::string::const_iterator i1,
int* font_size, int* font_size,
SDL_Color* colour, int* style) SDL_Color* colour, int* style)
{ {
if(font_size == NULL || colour == NULL) { if (font_size == NULL && colour == NULL && style == NULL) {
return i1; return i1;
} }
@ -55,74 +55,76 @@ std::string::const_iterator parse_markup(std::string::const_iterator i1,
// quoted backslash - either way, remove leading backslash // quoted backslash - either way, remove leading backslash
break; break;
case BAD_TEXT: case BAD_TEXT:
*colour = BAD_COLOUR; if (colour) *colour = BAD_COLOUR;
break; break;
case GOOD_TEXT: case GOOD_TEXT:
*colour = GOOD_COLOUR; if (colour) *colour = GOOD_COLOUR;
break; break;
case NORMAL_TEXT: case NORMAL_TEXT:
*colour = NORMAL_COLOUR; if (colour) *colour = NORMAL_COLOUR;
break; break;
case BLACK_TEXT: case BLACK_TEXT:
*colour = BLACK_COLOUR; if (colour) *colour = BLACK_COLOUR;
break; break;
case GRAY_TEXT: case GRAY_TEXT:
*colour = GRAY_COLOUR; if (colour) *colour = GRAY_COLOUR;
break; break;
case LARGE_TEXT: case LARGE_TEXT:
*font_size += 2; if (font_size) *font_size += 2;
break; break;
case SMALL_TEXT: case SMALL_TEXT:
*font_size -= 2; if (font_size) *font_size -= 2;
break; break;
case BOLD_TEXT: case BOLD_TEXT:
*style |= TTF_STYLE_BOLD; if (style) *style |= TTF_STYLE_BOLD;
break; break;
case NULL_MARKUP: case NULL_MARKUP:
return i1+1; return i1+1;
case COLOR_TEXT: case COLOR_TEXT:
{ {
//Very primitive parsing for rgb value std::string::const_iterator start = i1;
//should look like <213,14,151> // Very primitive parsing for rgb value
//but no checking on commas or end '>', // should look like <213,14,151>
//could be any non-# char ++i1;
++i1; Uint8 red=0, green=0, blue=0, temp=0;
Uint8 red=0, green=0, blue=0, temp=0; while (i1 != i2 && *i1 >= '0' && *i1<='9') {
while(i1 != i2 && *i1 >= '0' && *i1<='9'){ temp*=10;
temp*=10; temp += lexical_cast<int, char>(*i1);
temp += lexical_cast<int, char>(*i1); ++i1;
++i1; }
} red=temp;
red=temp; temp=0;
temp=0; if (i1 != i2 && ',' == (*i1)) {
if(i1 != i2 && '>' != (*i1)){ ++i1;
++i1; while(i1 != i2 && *i1 >= '0' && *i1<='9'){
while(i1 != i2 && *i1 >= '0' && *i1<='9'){ temp*=10;
temp*=10; temp += lexical_cast<int, char>(*i1);
temp += lexical_cast<int, char>(*i1); ++i1;
++i1; }
} green=temp;
green=temp; temp=0;
temp=0; }
} if (i1 != i2 && ',' == (*i1)) {
if(i1 != i2 && '>' != (*i1)){ ++i1;
++i1; while(i1 != i2 && *i1 >= '0' && *i1<='9'){
while(i1 != i2 && *i1 >= '0' && *i1<='9'){ temp*=10;
temp*=10; temp += lexical_cast<int, char>(*i1);
temp += lexical_cast<int, char>(*i1); ++i1;
++i1; }
} }
} blue=temp;
blue=temp; if (i1 != i2 && '>' == (*i1)) {
if(i1 != i2 && '>'==(*i1)){ SDL_Color temp_color = {red, green, blue, 0};
SDL_Color temp_color = {red,green,blue,0}; if (colour) *colour = temp_color;
(*colour) = temp_color; } else {
} // stop parsing and do not consume any chars
if(i1 == i2) return i1; return start;
break; }
} if (i1 == i2) return i1;
break;
}
default: default:
return i1; return i1;
} }
++i1; ++i1;
} }