summaryrefslogtreecommitdiffstats
path: root/yql/essentials/utils/docs/page.cpp
diff options
context:
space:
mode:
authorrobot-piglet <[email protected]>2025-08-26 12:24:49 +0300
committerrobot-piglet <[email protected]>2025-08-26 13:20:42 +0300
commit285d3d7ff9007f76a37f83df4d04a15b11d0c4fc (patch)
treea0d2f750a79e7c651148eeea449062ae8ad9c157 /yql/essentials/utils/docs/page.cpp
parentde426dc86f042213e0272aa95f7a65df2bf80872 (diff)
Intermediate changes
commit_hash:53ee5ad3f72b210dbba037e11d60c0237a7e7af0
Diffstat (limited to 'yql/essentials/utils/docs/page.cpp')
-rw-r--r--yql/essentials/utils/docs/page.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/yql/essentials/utils/docs/page.cpp b/yql/essentials/utils/docs/page.cpp
index 3543ba0737f..33c2a059c5d 100644
--- a/yql/essentials/utils/docs/page.cpp
+++ b/yql/essentials/utils/docs/page.cpp
@@ -1,7 +1,41 @@
#include "page.h"
+#include <yql/essentials/utils/yql_panic.h>
+
+#include <contrib/libs/re2/re2/re2.h>
+
namespace NYql::NDocs {
+ TString ResolvedMarkdownText(TStringBuf relativePath, TString text, TStringBuf baseURL) {
+ static const RE2 anchorRegex(R"re(\[([^\\\]]+)\]\((#[^\\)]+)\))re");
+ static const RE2 linkRegex(R"re(\[([^\\\]]+)\]\(([A-Za-z0-9/_\-\.]+).md(#[^\\)]+)?\))re");
+
+ TString base = TString(baseURL) + "/" + TString(relativePath);
+ TString anchorRewrite = "[\\1](" + base + "\\2)";
+ TString linkRewrite = "[\\1](" + base + "/../" + "\\2\\3)";
+
+ TString error;
+ YQL_ENSURE(
+ anchorRegex.CheckRewriteString(anchorRewrite, &error),
+ "Bad rewrite '" << anchorRewrite << "': " << error);
+ YQL_ENSURE(
+ linkRegex.CheckRewriteString(linkRewrite, &error),
+ "Bad rewrite '" << linkRewrite << "': " << error);
+
+ RE2::GlobalReplace(&text, anchorRegex, anchorRewrite);
+ RE2::GlobalReplace(&text, linkRegex, linkRewrite);
+
+ return text;
+ }
+
+ TMarkdownPage Resolved(TStringBuf relativePath, TMarkdownPage page, TStringBuf baseURL) {
+ page.Text = ResolvedMarkdownText(relativePath, page.Text, baseURL);
+ for (auto& [_, section] : page.SectionsByAnchor) {
+ section.Body = ResolvedMarkdownText(relativePath, section.Body, baseURL);
+ }
+ return page;
+ }
+
TPages ParsePages(TResourcesByRelativePath resources) {
TPages pages;
for (auto& [path, resource] : resources) {
@@ -11,4 +45,11 @@ namespace NYql::NDocs {
return pages;
}
+ TPages Resolved(TPages pages, TStringBuf baseURL) {
+ for (auto& [relativeURL, page] : pages) {
+ page = Resolved(relativeURL, std::move(page), baseURL);
+ }
+ return pages;
+ }
+
} // namespace NYql::NDocs