src/ncc.cpp

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

Generated on Sun Jun 25 23:35:45 2006 for libdaisy by  doxygen 1.4.6