diff options
author | robot-piglet <[email protected]> | 2025-08-26 12:24:49 +0300 |
---|---|---|
committer | robot-piglet <[email protected]> | 2025-08-26 13:20:42 +0300 |
commit | 285d3d7ff9007f76a37f83df4d04a15b11d0c4fc (patch) | |
tree | a0d2f750a79e7c651148eeea449062ae8ad9c157 /yql/essentials/utils/docs/page.cpp | |
parent | de426dc86f042213e0272aa95f7a65df2bf80872 (diff) |
Intermediate changes
commit_hash:53ee5ad3f72b210dbba037e11d60c0237a7e7af0
Diffstat (limited to 'yql/essentials/utils/docs/page.cpp')
-rw-r--r-- | yql/essentials/utils/docs/page.cpp | 41 |
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 |