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_litfile;
extern qboolean write_luxfile; extern qboolean write_luxfile;
extern qboolean onlyents; extern qboolean onlyents;
extern qboolean parse_escape_sequences;
void SetupDirt(); void SetupDirt();

View File

@ -940,6 +940,29 @@ Get_EntityStringSize(const entity_t *entities)
return size; 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 * WriteEntitiesToString
@ -979,8 +1002,20 @@ WriteEntitiesToString(bsp2_t *bsp)
space -= length; space -= length;
for (epair = entity->epairs; epair; epair = epair->next) { 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", length = snprintf(pos, space, "\"%s\" \"%s\"\n",
epair->key, epair->value); epair->key, value);
if (parse_escape_sequences) {
free(value);
}
pos += length; pos += length;
space -= length; space -= length;
} }

View File

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