bool GatherTpp::MakeHtml(const char *folder, Gate2<int, int> progress) { DeleteFolderDeep(folder); DirectoryCreate(folder); for(int i = 0; i < tt.GetCount(); i++) { String topic = tt.GetKey(i); links.Add(topic, topic == indexTopic ? "index.html" : memcmp(topic, "topic://", 8) ? topic : TopicFileNameHtml(topic)); } for(int i = 0; i < reflink.GetCount(); i++) { String l = reflink.GetKey(i); String lbl = Filter(l, CharFilterLbl); String f = links.Get(reflink[i], Null) + '#' + lbl; links.Add(l, f); static const char *x[] = { "::struct", "::class", "::union" }; for(int ii = 0; ii < 3; ii++) { String e = x[ii]; if(EndsWith(l, e)) { links.Add(l.Mid(0, l.GetLength() - e.GetLength()), f); } } labels.Add(l, lbl); } for(int i = 0; i < tt.GetCount(); i++) { if (progress(i+1, tt.GetCount())) return false; ExportPage(i, folder); } return true; }
String GatherTpp::GatherTopics(const char *topic, String& title) { int q = tt.Find(topic); if(q < 0) { Topic p = ReadTopic(LoadFile(TopicFileName(topic))); title = p.title; String t = p; if(IsNull(t)) return "index.html"; tt.Add(topic) = p; GatherLinkIterator ti(&(reflink)); ParseQTF(t).Iterate(ti); for(int i = 0; i < ti.link.GetCount(); i++) { String dummy; GatherTopics(ti.link[i], dummy); } } else title = tt[q].title; return TopicFileNameHtml(topic); }
String GatherTpp::GatherTopics(const char *topic, String& title) { static StaticCriticalSection mapl; int q; INTERLOCKED_(mapl) q = tt.Find(topic); if(q < 0) { Topic p = ReadTopic(LoadFile(TopicFileName(topic))); title = p.title; String t = p; if(IsNull(t)) { String topicEng = ChangeTopicLanguage(topic, LNG_('E','N','U','S')); p = ReadTopic(LoadFile(TopicFileName(topicEng))); String tt = p; if(IsNull(tt)) return "index.html"; title = p.title; p.title += " (translated)"; String help = "topic://uppweb/www/contribweb$" + GetTopicLanguage(topic); p.text = String("{{1f1t0/50b0/50@(240.240.240) [<A2 ") + t_("This page has not been translated yet") + "]. " + "[^" + help + "^ [<A2 " + t_("Do you want to translate it?") + "]]}}&&" + p.text; } INTERLOCKED_(mapl) tt.Add(topic) = p; GatherLinkIterator ti(&reflink); ParseQTF(t).Iterate(ti); #ifdef MTC CoWork work; for(int i = 0; i < ti.link.GetCount(); i++) work & callback2(sGatherTopics, &tt, ti.link[i]); #else for(int i = 0; i < ti.link.GetCount(); i++) GatherTopics(ti.link[i]); #endif } else { INTERLOCKED_(mapl) title = tt[q].title; } return TopicFileNameHtml(topic); }