From b56554c0ff2600236db95d361e81ee0c4e95ac77 Mon Sep 17 00:00:00 2001 From: Mirek Fidler Date: Fri, 17 Apr 2026 14:06:26 +0200 Subject: [PATCH] .uppbox: web --- uppbox/uppweb/www.cpp | 451 +++++++++++++++++++++--------------------- 1 file changed, 227 insertions(+), 224 deletions(-) diff --git a/uppbox/uppweb/www.cpp b/uppbox/uppweb/www.cpp index 84ce78b09..5256f2203 100644 --- a/uppbox/uppweb/www.cpp +++ b/uppbox/uppweb/www.cpp @@ -13,10 +13,10 @@ #define LLOG(x) // LOG(x) String targetdir = GetHomeDirFile("www2"); -String rootdir = GetHomeDirFile("upp.src"); -//String devdir = GetHomeDirFile("upp.src"); +String rootdir = GetHomeDirFile("upp.stable"); +String masterdir = GetHomeDirFile("upp.src"); -String uppbox = rootdir + "/uppbox"; +String uppbox = masterdir + "/uppbox"; String uppsrc = rootdir + "/uppsrc"; //String devsrc = devdir + "/uppsrc"; String reference = rootdir + "/reference"; @@ -842,234 +842,237 @@ CONSOLE_APP_MAIN RLOG("--- uppweb started at " << GetSysTime()); bool isdev = false; + + if(CommandLine().GetCount() && CommandLine()[0] == "dev") { + isdev = true; + rootdir = masterdir; + targetdir << "/dev"; + } + + uppsrc = AppendFileName(rootdir, "uppsrc"); - for(int pass = 0; pass < 1; pass++) { - uppsrc = AppendFileName(rootdir, "uppsrc"); - - RealizeDirectory(targetdir); - - RLOG("RootDir: " << rootdir); - RLOG("TargetDir: " << targetdir); - - String downloads = Downloads(); + RealizeDirectory(targetdir); - FindFile ff(AppendFileName(targetdir, "*.*")); - while(ff) { - if(ff.IsFile()) - FileDelete(ff.GetPath()); - ff.Next(); + RLOG("RootDir: " << rootdir); + RLOG("TargetDir: " << targetdir); + + String downloads = Downloads(); + + FindFile ff(AppendFileName(targetdir, "*.*")); + while(ff) { + if(ff.IsFile()) + FileDelete(ff.GetPath()); + ff.Next(); + } + + if (!DirectoryExists(rootdir)) { + Cout() << ("Directory " + DeQtf(rootdir) + " does not exist\n"); + return; + } + + uppbox = AppendFileName(rootdir, "uppbox"); + reference = AppendFileName(rootdir, "reference"); + examples = AppendFileName(rootdir, "examples"); + + InitWwwTpp(); + + languages.Add(LNG_('E','N','U','S')); // en-us has to be the first one + + RealizeDirectory(targetdir); + + RLOG("Gather ref links " << uppsrc); + GatherRefLinks(uppsrc, false); + + SaveFile(AppendFileName(targetdir, "sdj.gif"), LoadFile(GetRcFile("sdj.gif"))); + +#ifdef bmGIT_REVCOUNT + auto version = AsString(atoi(bmGIT_REVCOUNT) + 2270); + escape.Add("LATESTGIT", version); +#endif + + String release = "17810"; + escape.Add("RELEASE", release); + escape.Add("RELEASET", release); + escape.Add("UPDATETIME", Format("%`", GetUtcTime())); + + escape.Add("PAYPAL", LoadFile(GetRcFile("donations.txt"))); + + header = HtmlPackedTable() + .Width(-100) + .BgColor(White) + .Attr("style", "border: 1px solid #6E89AE;" + "padding-left: 10px;padding-right: 0px;padding-top: 0px;padding-bottom: 0px;") + / + HtmlRow() / ( + HtmlCell() / HtmlLink("index.html") / Wimg(WWW::Logo6) + + HtmlCell().Right().Bottom() + .Style("padding-bottom: 5px; " + "background-image: url('" + GetImageSrc(WWW::HB) + "')") + / HtmlArial(14) / (/*AdSense() + "  " + */(isdev ? "
development version (master branch)" : "")) + ); + + bar.SetCount(languages.GetCount()); + + int currentLang = GetCurrentLanguage(); + for (int i = 0; i < languages.GetCount(); ++i) { + Cout() << "Language " << LNGAsText(languages[i]); + Htmls bi, bex, bdoc, bcom, bcon, bsearch, blang; + int lang = languages[i]; + + SetLanguage(lang); + + Www("index", lang); + Www("contribweb", lang); + // bi << BarLink("index.html", "Home", false); + bi << BarLink(Www("overview", lang), t_("Overview"), false); + bi << BarLink(Www("examples", lang), t_("Examples")); + { + IGNORE_RESULT(Www("reference", lang)); + + int ri = tt.Find(webtopic + "/www/reference$" + ToLower(LNGAsText(lang))); + int di = tt.Find(webtopic + "/www/examples$" + ToLower(LNGAsText(lang))); + + tt[di].text << MakeExamples(examples, "examples", lang, String("/") + FormatInt(di)); + tt[di].text << tt[ri].text << '\n'; + tt[di].text << MakeExamples(reference, "reference", lang, String("/") + FormatInt(di)); } - - if (!DirectoryExists(rootdir)) { - Cout() << ("Directory " + DeQtf(rootdir) + " does not exist\n"); - return; + + bi << BarLink(Www("ss", lang), t_("Screenshots")); + bi << BarLink(Www("comparison", lang), t_("Comparisons")); + bi << BarLink(Www("apps", lang), t_("Applications")); + bi << BarLink(Www("download", lang), t_("Download")); + + bi << BarLink(Www("documentation", lang), t_("Documentation")); + { + int di = tt.Find(webtopic + "/www/documentation$" + ToLower(LNGAsText(lang))); + if (di >= 0) { + Index x; + x.Clear(); + String qtf; + PackageDocsGenerator dgen; + + dgen.Generate(x, qtf, "Core", lang, 2, String("/") + FormatInt(di) + "/[Core]"); + dgen.Generate(x, qtf, "Core/POP3", lang, 2, String("/") + FormatInt(di) + "/[Core/POP3]"); + dgen.Generate(x, qtf, "Core/SMTP", lang, 2, String("/") + FormatInt(di) + "/[Core/SMTP]"); + dgen.Generate(x, qtf, "Core/SSH", lang, 2, String("/") + FormatInt(di) + "/[Core/SSH]"); + dgen.Generate(x, qtf, "Draw", lang, 2, String("/") + FormatInt(di) + "/[Draw]"); + dgen.Generate(x, qtf, "CtrlCore", lang, 2, String("/") + FormatInt(di) + "/[CtrlCore]"); + dgen.Generate(x, qtf, "CtrlLib", lang, 2, String("/") + FormatInt(di) + "/[CtrlLib]"); + dgen.Generate(x, qtf, "RichText", lang, 2, String("/") + FormatInt(di) + "/[RichText]"); + dgen.Generate(x, qtf, "RichEdit", lang, 2, String("/") + FormatInt(di) + "/[RichEdit]"); + dgen.Generate(x, qtf, "Sql", lang, 2, String("/") + FormatInt(di) + "/[Sql]"); + + String d = AppendFileName(uppsrc, "*.*"); + String p; + for(int pass = 0; pass < 2; pass++) { + FindFile ff(d); + Array folders; + folders.Clear(); + while(ff) { + if(ff.IsFolder() && ff.GetName() != "Web") + folders.Add(p + ff.GetName()); + ff.Next(); + } + Sort(folders); + for (int ifold = 0; ifold < folders.GetCount(); ++ifold) { + dgen.Generate(x, qtf, folders[ifold], lang, 2, String("/") + FormatInt(di) + "/[" + folders[ifold] + "]"); + } + d = AppendFileName(uppsrc, "plugin/*.*"); + p = "plugin/"; + } + tt[di].text.Replace("[s5; <#packages#>]", qtf); + + String toc_qtf; + const auto& headers = dgen.GetHeaders(); + for (int i = 0; i < headers.GetCount(); i++) { + toc_qtf + << "[s0;l128; [^topic`:`/`/uppweb`/www`/documentation`$en`-us`#4`_" + << IntStr(i + 1) << "^ " << headers[i] << "]&]"; + } + + tt[di].text.Replace("[s0;l128; <#packages`_toc#>&]", toc_qtf); + } } - - uppbox = AppendFileName(rootdir, "uppbox"); - reference = AppendFileName(rootdir, "reference"); - examples = AppendFileName(rootdir, "examples"); - - InitWwwTpp(); - - languages.Add(LNG_('E','N','U','S')); // en-us has to be the first one - - RealizeDirectory(targetdir); - - RLOG("Gather ref links " << uppsrc); - GatherRefLinks(uppsrc, false); - - SaveFile(AppendFileName(targetdir, "sdj.gif"), LoadFile(GetRcFile("sdj.gif"))); - - #ifdef bmGIT_REVCOUNT - auto version = AsString(atoi(bmGIT_REVCOUNT) + 2270); - escape.Add("LATESTGIT", version); - #endif - - String release = "17810"; - escape.Add("RELEASE", release); - escape.Add("RELEASET", release); - escape.Add("UPDATETIME", Format("%`", GetUtcTime())); - - escape.Add("PAYPAL", LoadFile(GetRcFile("donations.txt"))); - - header = HtmlPackedTable() + bi << BarLink(Www("Tutorials", lang), t_("Tutorials")); + bi << BarLink(Www("UppHub", lang, "topic://ide/app/"), t_("UppHub")); + bi << BarLink(Www("Roadmap", lang), t_("Status & Roadmap")); + bi << BarLink(Www("FAQ", lang), t_("FAQ")); + bi << BarLink(Www("About", lang, "topic://ide/app/"), t_("Authors & License")); + + bi << BarLink("https://www.ultimatepp.org/forums", t_("Forums")); + // bcom << BarLink(Www("mailing"), "Mailing lists"); + // bi << BarLink("http://www.ultimatepp.org/wiki/index.php", "Wiki"); + bi << BarLink(Www("Funding", lang), t_("Funding U++")); + // bcom << BarLink(Www("helpus"), "Getting involved"); + // bcom << BarLink("mailto: upp@ntllib.org", "Contact developers"); + + bsearch << BarCaption(t_("Search on this site")); + bsearch << SearchBar("ultimatepp.org"); + + HtmlTag bf = HtmlPackedTable() .Width(-100) .BgColor(White) - .Attr("style", "border: 1px solid #6E89AE;" - "padding-left: 10px;padding-right: 0px;padding-top: 0px;padding-bottom: 0px;") - / - HtmlRow() / ( - HtmlCell() / HtmlLink("index.html") / Wimg(WWW::Logo6) + - HtmlCell().Right().Bottom() - .Style("padding-bottom: 5px; " - "background-image: url('" + GetImageSrc(WWW::HB) + "')") - / HtmlArial(14) / (/*AdSense() + "  " + */(isdev ? "
development version (master branch)" : "")) - ); - - bar.SetCount(languages.GetCount()); - - int currentLang = GetCurrentLanguage(); - for (int i = 0; i < languages.GetCount(); ++i) { - Cout() << "Language " << LNGAsText(languages[i]); - Htmls bi, bex, bdoc, bcom, bcon, bsearch, blang; - int lang = languages[i]; - - SetLanguage(lang); - - Www("index", lang); - Www("contribweb", lang); - // bi << BarLink("index.html", "Home", false); - bi << BarLink(Www("overview", lang), t_("Overview"), false); - bi << BarLink(Www("examples", lang), t_("Examples")); - { - IGNORE_RESULT(Www("reference", lang)); - - int ri = tt.Find(webtopic + "/www/reference$" + ToLower(LNGAsText(lang))); - int di = tt.Find(webtopic + "/www/examples$" + ToLower(LNGAsText(lang))); - - tt[di].text << MakeExamples(examples, "examples", lang, String("/") + FormatInt(di)); - tt[di].text << tt[ri].text << '\n'; - tt[di].text << MakeExamples(reference, "reference", lang, String("/") + FormatInt(di)); - } - - bi << BarLink(Www("ss", lang), t_("Screenshots")); - bi << BarLink(Www("comparison", lang), t_("Comparisons")); - bi << BarLink(Www("apps", lang), t_("Applications")); - bi << BarLink(Www("download", lang), t_("Download")); - - bi << BarLink(Www("documentation", lang), t_("Documentation")); - { - int di = tt.Find(webtopic + "/www/documentation$" + ToLower(LNGAsText(lang))); - if (di >= 0) { - Index x; - x.Clear(); - String qtf; - PackageDocsGenerator dgen; - - dgen.Generate(x, qtf, "Core", lang, 2, String("/") + FormatInt(di) + "/[Core]"); - dgen.Generate(x, qtf, "Core/POP3", lang, 2, String("/") + FormatInt(di) + "/[Core/POP3]"); - dgen.Generate(x, qtf, "Core/SMTP", lang, 2, String("/") + FormatInt(di) + "/[Core/SMTP]"); - dgen.Generate(x, qtf, "Core/SSH", lang, 2, String("/") + FormatInt(di) + "/[Core/SSH]"); - dgen.Generate(x, qtf, "Draw", lang, 2, String("/") + FormatInt(di) + "/[Draw]"); - dgen.Generate(x, qtf, "CtrlCore", lang, 2, String("/") + FormatInt(di) + "/[CtrlCore]"); - dgen.Generate(x, qtf, "CtrlLib", lang, 2, String("/") + FormatInt(di) + "/[CtrlLib]"); - dgen.Generate(x, qtf, "RichText", lang, 2, String("/") + FormatInt(di) + "/[RichText]"); - dgen.Generate(x, qtf, "RichEdit", lang, 2, String("/") + FormatInt(di) + "/[RichEdit]"); - dgen.Generate(x, qtf, "Sql", lang, 2, String("/") + FormatInt(di) + "/[Sql]"); - - String d = AppendFileName(uppsrc, "*.*"); - String p; - for(int pass = 0; pass < 2; pass++) { - FindFile ff(d); - Array folders; - folders.Clear(); - while(ff) { - if(ff.IsFolder() && ff.GetName() != "Web") - folders.Add(p + ff.GetName()); - ff.Next(); - } - Sort(folders); - for (int ifold = 0; ifold < folders.GetCount(); ++ifold) { - dgen.Generate(x, qtf, folders[ifold], lang, 2, String("/") + FormatInt(di) + "/[" + folders[ifold] + "]"); - } - d = AppendFileName(uppsrc, "plugin/*.*"); - p = "plugin/"; - } - tt[di].text.Replace("[s5; <#packages#>]", qtf); - - String toc_qtf; - const auto& headers = dgen.GetHeaders(); - for (int i = 0; i < headers.GetCount(); i++) { - toc_qtf - << "[s0;l128; [^topic`:`/`/uppweb`/www`/documentation`$en`-us`#4`_" - << IntStr(i + 1) << "^ " << headers[i] << "]&]"; - } - - tt[di].text.Replace("[s0;l128; <#packages`_toc#>&]", toc_qtf); - } - } - bi << BarLink(Www("Tutorials", lang), t_("Tutorials")); - bi << BarLink(Www("UppHub", lang, "topic://ide/app/"), t_("UppHub")); - bi << BarLink(Www("Roadmap", lang), t_("Status & Roadmap")); - bi << BarLink(Www("FAQ", lang), t_("FAQ")); - bi << BarLink(Www("About", lang, "topic://ide/app/"), t_("Authors & License")); - - bi << BarLink("https://www.ultimatepp.org/forums", t_("Forums")); - // bcom << BarLink(Www("mailing"), "Mailing lists"); - // bi << BarLink("http://www.ultimatepp.org/wiki/index.php", "Wiki"); - bi << BarLink(Www("Funding", lang), t_("Funding U++")); - // bcom << BarLink(Www("helpus"), "Getting involved"); - // bcom << BarLink("mailto: upp@ntllib.org", "Contact developers"); - - bsearch << BarCaption(t_("Search on this site")); - bsearch << SearchBar("ultimatepp.org"); - - HtmlTag bf = HtmlPackedTable() - .Width(-100) - .BgColor(White) - .Attr("style", "border-style: solid; border-width: 1px; border-color: #6E89AE;" - "padding: 0px"); - String div = HtmlTable().Border(0).Width(-100) / HtmlLine(); - bar[i] = bf / bi + div + - // bf / bex + div + - // bf / bdoc + div + - // bf / bcom + div + - // bf / bcon + div + - bf / bsearch + div; - // bf / blang + div; - } - SetLanguage(currentLang); - - for(int i = 0; i < tt.GetCount(); i++) { - String topic = tt.GetKey(i); - links.Add(topic, topic == webtopic + "/www/index$en-us" ? "index.html" : - memcmp(topic, "topic://", 8) ? topic : TopicFileNameHtml(topic, false)); - } - - for(int i = 0; i < tt.GetCount(); i++) { - if(tt[i].title == "Nightly builds" || tt[i].title.Find("Download") >= 0) - tt[i].text.Replace(String("<#downloads#>"), downloads); - else if (links[i].Find("index") >= 0) { - String win32 = "upp-win32-RELEASE.exe"; - String win32release = win32; - win32release.Replace(String("RELEASE"), release); - String x11 = "upp-x11-src-RELEASE.tar.gz"; - String x11release = x11; - x11release.Replace(String("RELEASE"), release); - tt[i].text.Replace(DeQtf(x11), DeQtf(x11release)); - tt[i].text.Replace(DeQtf(win32), DeQtf(win32release)); - } - } - 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); - } - - lastUpdate = HtmlItalic() / HtmlArial(8) / HtmlFontColor(Gray()) / - (String().Cat() << "Last update " << GetSysDate()); - - RLOG("Creating htmls"); - - for(int i = 0; i < tt.GetCount(); i++) - ExportPage(i); - SetLanguage(currentLang); - - FileCopy(AppendFileName(uppbox, "uppweb/favicon.png"), AppendFileName(targetdir, "favicon.png")); - -// rootdir = devdir; - targetdir << "/dev"; - isdev = true; + .Attr("style", "border-style: solid; border-width: 1px; border-color: #6E89AE;" + "padding: 0px"); + String div = HtmlTable().Border(0).Width(-100) / HtmlLine(); + bar[i] = bf / bi + div + + // bf / bex + div + + // bf / bdoc + div + + // bf / bcom + div + + // bf / bcon + div + + bf / bsearch + div; + // bf / blang + div; } + SetLanguage(currentLang); + + for(int i = 0; i < tt.GetCount(); i++) { + String topic = tt.GetKey(i); + links.Add(topic, topic == webtopic + "/www/index$en-us" ? "index.html" : + memcmp(topic, "topic://", 8) ? topic : TopicFileNameHtml(topic, false)); + } + + for(int i = 0; i < tt.GetCount(); i++) { + if(tt[i].title == "Nightly builds" || tt[i].title.Find("Download") >= 0) + tt[i].text.Replace(String("<#downloads#>"), downloads); + else if (links[i].Find("index") >= 0) { + String win32 = "upp-win32-RELEASE.exe"; + String win32release = win32; + win32release.Replace(String("RELEASE"), release); + String x11 = "upp-x11-src-RELEASE.tar.gz"; + String x11release = x11; + x11release.Replace(String("RELEASE"), release); + tt[i].text.Replace(DeQtf(x11), DeQtf(x11release)); + tt[i].text.Replace(DeQtf(win32), DeQtf(win32release)); + } + } + 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); + } + + lastUpdate = HtmlItalic() / HtmlArial(8) / HtmlFontColor(Gray()) / + (String().Cat() << "Last update " << GetSysDate()); + + RLOG("Creating htmls"); + + for(int i = 0; i < tt.GetCount(); i++) + ExportPage(i); + SetLanguage(currentLang); + + FileCopy(AppendFileName(uppbox, "uppweb/favicon.png"), AppendFileName(targetdir, "favicon.png")); + +// rootdir = devdir; + targetdir << "/dev"; RLOG("Finished OK"); }