mirror of https://github.com/bsnes-emu/bsnes.git
76 lines
1.5 KiB
C++
76 lines
1.5 KiB
C++
|
#ifndef NALL_STRING_BSV_HPP
|
||
|
#define NALL_STRING_BSV_HPP
|
||
|
|
||
|
//BSV parser
|
||
|
//version 0.01
|
||
|
|
||
|
namespace nall {
|
||
|
|
||
|
inline string bsv_decode(const char *input) {
|
||
|
string output;
|
||
|
unsigned offset = 0;
|
||
|
while(*input) {
|
||
|
//illegal characters
|
||
|
if(*input == '}' ) return "";
|
||
|
if(*input == '\r') return "";
|
||
|
if(*input == '\n') return "";
|
||
|
|
||
|
//normal characters
|
||
|
if(*input != '{') { output[offset++] = *input++; continue; }
|
||
|
|
||
|
//entities
|
||
|
if(strbegin(input, "{lf}")) { output[offset++] = '\n'; input += 4; continue; }
|
||
|
if(strbegin(input, "{lb}")) { output[offset++] = '{'; input += 4; continue; }
|
||
|
if(strbegin(input, "{rb}")) { output[offset++] = '}'; input += 4; continue; }
|
||
|
|
||
|
//illegal entities
|
||
|
return "";
|
||
|
}
|
||
|
output[offset] = 0;
|
||
|
return output;
|
||
|
}
|
||
|
|
||
|
inline string bsv_encode(const char *input) {
|
||
|
string output;
|
||
|
unsigned offset = 0;
|
||
|
while(*input) {
|
||
|
//illegal characters
|
||
|
if(*input == '\r') return "";
|
||
|
|
||
|
if(*input == '\n') {
|
||
|
output[offset++] = '{';
|
||
|
output[offset++] = 'l';
|
||
|
output[offset++] = 'f';
|
||
|
output[offset++] = '}';
|
||
|
input++;
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
if(*input == '{') {
|
||
|
output[offset++] = '{';
|
||
|
output[offset++] = 'l';
|
||
|
output[offset++] = 'b';
|
||
|
output[offset++] = '}';
|
||
|
input++;
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
if(*input == '}') {
|
||
|
output[offset++] = '{';
|
||
|
output[offset++] = 'r';
|
||
|
output[offset++] = 'b';
|
||
|
output[offset++] = '}';
|
||
|
input++;
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
output[offset++] = *input++;
|
||
|
}
|
||
|
output[offset] = 0;
|
||
|
return output;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
#endif
|