mirror of
https://github.com/wesnoth/wesnoth
synced 2025-05-06 15:46:57 +00:00
fixed color markup parsing...
...and allowed to seperately ignore font size, color or style markup
This commit is contained in:
parent
c353cbc5f9
commit
022a5ef56c
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user