src/ncc.cpp

00001 #include "ncc.h"
00002 #include "exceptions.h"
00003 
00004 namespace freedaisy {
00005   NCC::NCC() {
00006     _xmldoc = NULL;
00007     createDoc();
00008   }
00009 
00010   void NCC::createDoc(std::string title, std::string lang) {
00011     _createDoc();
00012     XMLNode html = createRootNode("html");
00013     html.setAttr("xmlns", "http://www.w3.org/1999/xhtml");
00014     
00015     XMLNode head("head");
00016     html.addChild(&head);
00017 
00018     XMLNode titlenode("title");
00019     titlenode.setContent(title);
00020     head.addChild(&titlenode);
00021 
00022     XMLNode meta("meta");
00023     meta.setAttr("http-equiv", "Content-type");
00024     meta.setAttr("content", "text/html");
00025     head.addChild(&meta);
00026 
00027     XMLNode generator("meta");
00028     generator.setAttr("name", "ncc:generator");
00029     generator.setAttr("content", "libdaisy v0.1 (c) 2006 Alexis ROBERT");
00030     head.addChild(&generator);
00031 
00032     XMLNode body("body");
00033     html.addChild(&body);
00034 
00035     setLang(lang);
00036   }
00037 
00038   std::string NCC::getTitle() {
00039     XMLNode node;
00040     node = xpathEval("//*[local-name() = 'title']")[0];
00041     return node.getContent();
00042   }
00043 
00044   void NCC::setTitle(std::string newtitle) {
00045     XMLNode node;
00046     node = xpathEval("//*[local-name() = 'title']")[0];
00047     return node.setContent(newtitle);
00048   }
00049 
00050   void NCC::setLang(std::string lang) {
00051     // Code shared with Discinfo
00052     XMLNode node;
00053     node = xpathEval("//*[local-name() = 'head']")[0];
00054     node.setAttr("lang", lang);
00055     node.setAttr("xml:lang", lang);
00056   }
00057 
00058   std::string NCC::getLang() {
00059     // Code shared with Discinfo
00060     XMLNode node;
00061     node = xpathEval("//*[local-name() = 'head']")[0];
00062     if (node.hasAttr("lang") == 0) {
00063       return node["lang"];
00064     } else {
00065       return "en";
00066     }
00067   }
00068 
00069   std::vector<Meta> NCC::getMeta(std::string name) {
00070     std::vector<Meta> metas;
00071     std::vector<XMLNode> nodes;
00072     nodes = xpathEval("//*[local-name() = 'meta']");
00073     for (int i = 0; i < nodes.size(); i++) {
00074       if (nodes[i].hasAttr("name") == 0) {
00075         if (nodes[i]["name"] == name) {
00076         } else if ((name == "dc:format") &&
00077                   (nodes[i]["name"] == "ncc:format")) {
00078         } else if ((name == "dc:identifier") &&
00079                    (nodes[i]["name"] == "ncc:identifier")) {
00080         } else if ((name == "ncc:pageFront") &&
00081                    (nodes[i]["name"] == "ncc:page-front")) {
00082         } else if ((name == "ncc:pageSpecial") &&
00083                    (nodes[i]["name"] == "ncc:page-special")) {
00084         } else if ((name == "ncc:setInfo") &&
00085                    (nodes[i]["name"] == "ncc:setinfo")) {
00086         } else if ((name == "ncc:tocItems") &&
00087                    ((nodes[i]["name"] == "ncc:tocitems") |
00088                     (nodes[i]["name"] == "ncc:TOCitems"))) {
00089         } else if ((name == "ncc:totalTime") &&
00090                    (nodes[i]["name"] == "ncc:totaltime")) {
00091         } else {
00092           continue;
00093         }
00094         Meta entry(nodes[i]);
00095         metas.push_back(entry);
00096       }
00097     }
00098     return metas;
00099   }
00100 
00101   void NCC::addMeta(Meta *m) {
00102     XMLNode node;
00103     node = xpathEval("//*[local-name() = 'head']")[0];
00104     node.addChild(m);
00105   }
00106 
00107   XMLNode NCC::getPage(std::string number) {
00108     std::vector<XMLNode> nodes;
00109     nodes = xpathEval("//*[local-name() = 'span']");
00110     for (int i = 0; i < nodes.size(); i++) {
00111       if (nodes[i].getContent() == number)
00112         return nodes[i];
00113     }
00114 
00115     throw Exceptions::PageNotFound(number);
00116   }
00117 
00118   XMLNode NCC::getBody() {
00119     return xpathEval("//*[local-name() = 'body']")[0];
00120   }
00121 
00122   std::vector<XMLNode> NCC::getHeadings() {
00123     std::vector<XMLNode> bodynodes = getBody().getChildren();
00124     std::vector<XMLNode> finalnodes;
00126     for (int i = 0; i < bodynodes.size(); i++) {
00127       std::string name = bodynodes[i].getName();
00128       if ((name[0] == 'h') && (name.size() == 2)) { // h1 to h6
00129         finalnodes.push_back(bodynodes[i]);
00130       }
00131     }
00132     return finalnodes;
00133   }
00134 }

Generated on Sun Jun 25 20:48:22 2006 for libdaisy by  doxygen 1.4.6