/* HEADER */ #include #include // を置換する std::string replace( std::map m, const std::string &s); /* HEADER */ static const char *ts(const char *p); static const char *te(const char *p); static const char *ts(const char *p) { while (p[0] && p[1] && p[2] && p[3] && p[4]) { if ((p[0] == '<') && (p[1] == '!') && (p[2] == '-') && (p[3] == '-') && (p[4] == '%')) { return &(p[5]); } p++; } return NULL; } static const char *te(const char *p) { while (p[0] && p[1] && p[2] && p[3]) { if ((p[0] == '%') && (p[1] == '-') && (p[2] == '-') && (p[3] == '>')) { return &(p[0]); } p++; } return NULL; } std::string replace(std::map m, const std::string &s) { std::string d; const char *mp, *sp, *ep; sp = s.c_str(); while (mp = sp, (sp = ts(sp)) && (ep = te(sp))) { std::string v = std::string(sp, ep); d += std::string(mp, &(sp[-5])); std::map::iterator it = m.find(v); if (it != m.end()) { d += it->second; } sp = &(ep[4]); } d += std::string(mp); return d; }