light: experimental -parse_escape_sequences option to toggle \b escape sequence (toggles bold text)

This commit is contained in:
Eric Wasylishen 2015-11-26 18:30:10 -07:00
parent fee62faa24
commit 50b556993a
3 changed files with 42 additions and 2 deletions

View File

@ -150,6 +150,7 @@ extern int oversample;
extern qboolean write_litfile;
extern qboolean write_luxfile;
extern qboolean onlyents;
extern qboolean parse_escape_sequences;
void SetupDirt();

View File

@ -940,6 +940,29 @@ Get_EntityStringSize(const entity_t *entities)
return size;
}
const char *
CopyValueWithEscapeSequencesParsed(const char *value)
{
char *result = copystring(value);
const char *inptr = value;
char *outptr = result;
qboolean bold = false;
for ( ; *inptr; inptr++) {
if (inptr[0] == '\\' && inptr[1] == 'b') {
bold = !bold; // Toggle bold
inptr++;
continue;
} else {
int mask = bold ? 128 : 0;
*(outptr++) = *inptr | mask;
}
}
*outptr = 0;
return result;
}
/*
* ================
* WriteEntitiesToString
@ -979,8 +1002,20 @@ WriteEntitiesToString(bsp2_t *bsp)
space -= length;
for (epair = entity->epairs; epair; epair = epair->next) {
const char *value;
if (parse_escape_sequences) {
value = CopyValueWithEscapeSequencesParsed(epair->value);
} else {
value = epair->value;
}
length = snprintf(pos, space, "\"%s\" \"%s\"\n",
epair->key, epair->value);
epair->key, value);
if (parse_escape_sequences) {
free(value);
}
pos += length;
space -= length;
}

View File

@ -78,6 +78,7 @@ int oversample = 1;
qboolean write_litfile = false;
qboolean write_luxfile = false;
qboolean onlyents = false;
qboolean parse_escape_sequences = false;
void
GetFileSpace(byte **lightdata, byte **colordata, byte **deluxdata, int size)
@ -376,6 +377,9 @@ main(int argc, const char **argv)
} else if ( !strcmp( argv[ i ], "-onlyents" ) ) {
onlyents = true;
logprint( "Onlyents mode enabled\n" );
} else if ( !strcmp( argv[ i ], "-parse_escape_sequences" ) ) {
parse_escape_sequences = true;
logprint( "Parsing escape sequences enabled\n" );
} else if (argv[i][0] == '-')
Error("Unknown option \"%s\"", argv[i]);
else
@ -387,7 +391,7 @@ main(int argc, const char **argv)
" [-light num] [-addmin] [-anglescale|-anglesense]\n"
" [-dist n] [-range n] [-gate n] [-lit] [-lux]\n"
" [-dirt] [-dirtdebug] [-dirtmode n] [-dirtdepth n] [-dirtscale n] [-dirtgain n] [-dirtangle n]\n"
" [-soft [n]] [-fence] [-gamma n] [-surflight_subdivide n] [-onlyents] [-sunsamples n] bspfile\n");
" [-soft [n]] [-fence] [-gamma n] [-surflight_subdivide n] [-onlyents] [-sunsamples n] [-parse_escape_sequences] bspfile\n");
exit(1);
}