static char *clean_line(char *s);
+DataMap::DataMap()
+{
+ strip_paths = false;
+}
+
void DataMap::clear()
{
dmap.clear();
root = std::string(path);
}
+void DataMap::set_strip(bool s)
+{
+ strip_paths = s;
+}
+
bool DataMap::load_map(const char *fname)
{
std::string path = root.empty() ? fname : root + std::string("/") + fname;
{
std::string res;
- char *inbuf = (char*)alloca(strlen(in) + 1);
- strcpy(inbuf, in);
- if(!(in = clean_line(inbuf))) {
- if(buf && bsz > 0) {
- buf[0] = 0;
+ if(strip_paths) {
+ const char *ptr = strrchr(in, '/');
+ if(ptr) {
+ in = ptr + 1;
}
- return 0;
}
+ char *inbuf = (char*)alloca(strlen(in) + 1);
+ strcpy(inbuf, in);
+ in = clean_line(inbuf);
+
// first check the cache
std::map<std::string, std::string>::iterator it = cache.find(in);
if(it != cache.end()) {
std::vector<std::pair<std::string, std::string>> dmap;
mutable std::map<std::string, std::string> cache;
std::string root;
+ bool strip_paths;
public:
+ DataMap();
+
void clear();
void set_path(const char *path);
+ void set_strip(bool s);
bool load_map(const char *fname);
void map(const char *match, const char *path);
// datapath
struct ts_attr *adpath = attr_inscope(node, "datapath");
if(adpath && adpath->val.type == TS_STRING) {
- info_log("adding data path: %s\n", adpath->val.str);
mscn->datamap.set_path(adpath->val.str);
}
+ // strip path
+ struct ts_attr *aspath = attr_inscope(node, "strip_path");
+ if(aspath && aspath->val.type == TS_NUMBER) {
+ mscn->datamap.set_strip(aspath->val.inum);
+ }
+
// walkmesh
struct ts_attr *awmesh = attr_inscope(node, "walkmesh");
if(awmesh && awmesh->val.type == TS_STRING) {