diff options
author | deva <deva> | 2010-08-12 10:57:04 +0000 |
---|---|---|
committer | deva <deva> | 2010-08-12 10:57:04 +0000 |
commit | d9338083192084613e5530b02710b796252d342b (patch) | |
tree | e0ec2b36e0de62328e5fd5d3b597f6ee71d1b18f /server/src/resumeparser.cc | |
parent | dbab8458dcce186e7eb7a114a83f759d7db5445a (diff) |
New scripting system part2.
Diffstat (limited to 'server/src/resumeparser.cc')
-rw-r--r-- | server/src/resumeparser.cc | 122 |
1 files changed, 24 insertions, 98 deletions
diff --git a/server/src/resumeparser.cc b/server/src/resumeparser.cc index 37b36f4..c80c2f0 100644 --- a/server/src/resumeparser.cc +++ b/server/src/resumeparser.cc @@ -31,110 +31,36 @@ #include "luaresume.h" #include "configuration.h" -static std::string resume_parser_format(Resume &r, Commit &commit) +std::string resume_parser(Macro ¯o, Commit &commit) { - const char* format = r.attributes["format"].c_str(); - - std::string resume; - std::string var; + LUAResume luaresume(commit); - const char *p = format; - const char *theend = p + strlen(format); - while(p < theend) { - switch(*p) { - case '$': - p++; - switch(*p) { - case '$': - resume.append(1, *p); - break; + std::string code; - case '{': - p++; - var = ""; - // Parser - while(p < theend && *p != '}') { - var.append(1, *p); - p++; + std::vector< Script >::iterator spi = macro.resume_scripts.begin(); + while(spi != macro.resume_scripts.end()) { + if(spi->attributes.find("src") != spi->attributes.end()) { + std::string src = spi->attributes["src"]; + std::string file = + Conf::xml_basedir + "/include/" + src; + FILE *fp = fopen(file.c_str(), "r"); + if(fp) { + char buf[64]; + size_t sz; + std::string inc; + while((sz = fread(buf, 1, sizeof(buf), fp)) != 0) { + inc.append(buf, sz); } - // p++; - //printf("[%s]\n", var.c_str()); - // resume += "var(" + var + ")"; - resume += commit.fields[var]; - break; - - default: - resume.append(1, *p); - // printf("Illigal $ command\n"); - break; - } - p++; - break; - - case '\\': - p++; - switch(*p) { - case 't': - resume.append(1, '\t'); - break; - case 'n': - resume.append(1, '\n'); - break; - case 'r': - resume.append(1, '\r'); - break; - case '\\': - default: - resume.append(1, *p); - break; + fclose(fp); + code += "\n-- BEGIN INCLUDE: '" + src + "'\n"; + code += inc; + code += "\n-- END INCLUDE: '" + src + "'\n"; } - p++; - break; - - default: - resume.append(1, *p); - p++; - break; + } else { + code += spi->code; } + spi++; } - return resume; -} - -static std::string resume_parser_lua(Macro ¯o, Commit &commit) -{ - LUAResume luaresume(commit); - std::string lua; - /* - std::vector< ScriptInclude >::iterator spii = - macro.script_includes.begin(); - while(spii != macro.script_includes.end()) { - std::string file = - Conf::xml_basedir + "/include/" + spii->attributes["file"]; - FILE *fp = fopen(file.c_str(), "r"); - if(fp) { - char buf[64]; - size_t sz; - std::string inc; - while((sz = fread(buf, 1, sizeof(buf), fp)) != 0) { - lua.append(buf, sz); - } - fclose(fp); - } - spii++; - } - */ - lua += macro.resume.attributes["format"]; - - return luaresume.run(lua); -} - -std::string resume_parser(Macro ¯o, Commit &commit) -{ - if(macro.resume.attributes["language"] == "lua") { - return resume_parser_lua(macro, commit); - } - - // Default to pracro format language. - return resume_parser_format(macro.resume, commit); + return luaresume.run(code); } |