This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris-website.git
The following commit(s) were added to refs/heads/master by this push:
new e8435c87fdc [add]node script for merge markdown (#1046)
e8435c87fdc is described below
commit e8435c87fdc60f6bcb5ce6171442d80d00905fa1
Author: 0xFlackoLFG <[email protected]>
AuthorDate: Sun Sep 1 23:28:48 2024 +0800
[add]node script for merge markdown (#1046)
---
scripts/merge_md.js | 160 ++++++++++++++++++++++++++++++++++++++++++++++++++
scripts/test_error.sh | 15 +----
2 files changed, 162 insertions(+), 13 deletions(-)
diff --git a/scripts/merge_md.js b/scripts/merge_md.js
new file mode 100644
index 00000000000..a611a921111
--- /dev/null
+++ b/scripts/merge_md.js
@@ -0,0 +1,160 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+
+// http://www.apache.org/licenses/LICENSE-2.0
+
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+const fs = require('fs');
+const path = require('path');
+
+const sidebarPath = 'versioned_sidebars/version-3.0-sidebars.json'
+const docsBaseDir = 'i18n/zh-CN/docusaurus-plugin-content-docs/version-3.0'
+const outputPath = 'doc.md'
+
+const fileLinkName = {};
+
+
+function readJSON(filePath) {
+ const data = fs.readFileSync(filePath, 'utf-8');
+ return JSON.parse(data);
+}
+
+function readMarkdownFile(filePath) {
+ return fs.readFileSync(filePath, 'utf-8');
+}
+
+function writeMarkdownContent(filePath, content) {
+ fs.writeFileSync(filePath, content, 'utf-8');
+}
+
+function replaceLinkWrap(chapter) {
+ const hyperLinkPattern = /\[([^\]]+)\]\(([^#)]+)(#[^)]+)?\)/g;
+
+ function replaceLink(match, linkName, link, frag) {
+ if (link.startsWith('http')) {
+ return match;
+ } else if (/\.(png|jpeg|svg|gif|jpg)$/.test(link)) {
+ const imgLink = link.replace(/images\//, 'static/images/');
+ return `[${linkName}](${imgLink})`;
+ } else {
+ if (link.includes('.md#') && frag) {
+ return frag.replace(/[\s]+/g, '-').toLowerCase()
+ } else {
+ let fullPath = path.join(docsBaseDir, customResolve(link))
+ if (!link.endsWith('.md')) {
+ fullPath += '.md';
+ }
+ return
`[${linkName}](#${getMainTitleFromFile(fullPath).replace(/[\s]+/g,
'-').toLowerCase()})`
+ }
+ }
+ }
+ return chapter.replace(hyperLinkPattern, replaceLink);
+}
+
+function customResolve(relativePath) {
+ const parts = relativePath.split('/');
+ const resolvedParts = [];
+ for (const part of parts) {
+ if (part === '..') {
+ resolvedParts.pop();
+ } else if (part !== '.') {
+ resolvedParts.push(part);
+ }
+ }
+ return resolvedParts.join('/');
+}
+
+function getMainTitleFromFile(filePath) {
+ if (!fs.existsSync(filePath)) {
+ return '';
+ }
+ const mdContent = fs.readFileSync(filePath, 'utf8');
+ const match = mdContent.match(/{[^}]*}/);
+ if (match) {
+ const mainTitle = JSON.parse(match[0].replace(/'/g, '"')).title;
+ return mainTitle;
+ }
+ return '';
+}
+
+function processItems(items, level) {
+ let content = '';
+ items.forEach(item => {
+ if (typeof item === 'string') {
+ const filePath = path.join(docsBaseDir, item + '.md');
+ if (fs.existsSync(filePath)) {
+ let mdContent = readMarkdownFile(filePath);
+ mdContent = replaceLinkWrap(mdContent);
+ content += adjustHeaders(mdContent, level) + '\n\n';
+ }
+ } else if (typeof item === 'object' && item.items) {
+ content += `${'#'.repeat(level + 1)} ${item.label}\n\n`;
+ content += processItems(item.items, level + 1);
+ }
+ });
+ return content;
+}
+
+function adjustHeaders(mdContent, level) {
+ const match = mdContent.match(/{[^}]*}/);
+ const mainTitle = JSON.parse(match[0].replace(/'/g, '"')).title;
+ const lines = mdContent.split('\n');
+
+ let hasMainTitle = false;
+ let firstSeparatorIndex = -1;
+ let secondSeparatorIndex = -1;
+ for (let i = 0; i < lines.length; i++) {
+ const line = lines[i];
+ if (line.startsWith('# ')) {
+ hasMainTitle = true;
+ break;
+ }
+ if (line.trim() === '---') {
+ if (firstSeparatorIndex === -1) {
+ firstSeparatorIndex = i;
+ } else {
+ secondSeparatorIndex = i;
+ break
+ }
+ }
+ }
+
+ const adjustedLines = lines.map(line => {
+ if (line.startsWith('#')) {
+ const numHashes = line.match(/^#+/)[0].length;
+
+ return '#'.repeat(numHashes + level) + line.slice(numHashes);
+ }
+ return line;
+ });
+
+ if (!hasMainTitle && secondSeparatorIndex !== -1) {
+ adjustedLines.splice(secondSeparatorIndex + 2, 0, `${'#'.repeat(level
+ 1)} ${mainTitle}`);
+ }
+
+ return adjustedLines.join('\n');
+}
+
+function mergeMarkdownFiles() {
+ const sidebarData = readJSON(sidebarPath);
+ let content = '';
+ sidebarData.docs.forEach(category => {
+ content += `# ${category.label}\n\n`;
+ content += processItems(category.items, 1);
+ });
+ writeMarkdownContent(outputPath, content);
+}
+
+mergeMarkdownFiles();
+console.log('successfully');
\ No newline at end of file
diff --git a/scripts/test_error.sh b/scripts/test_error.sh
index 4402b2af9d1..0dfd41eb22d 100755
--- a/scripts/test_error.sh
+++ b/scripts/test_error.sh
@@ -1,48 +1,38 @@
#!/bin/bash
-# pdf纠错脚本 bash scripts/test_error.sh inputFilePath outputFilePath
+# bash scripts/test_error.sh inputFilePath outputFilePath
-# 脚本在遇到错误时不会退出
set +e
-# 设置字体
MAINFONT="WenQuanYi Micro Hei"
MONOFONT="WenQuanYi Micro Hei Mono"
-# 版本标签
_version_tag="$(date '+%Y%m%d')"
-# 检查是否提供了两个参数
if [ "$#" -ne 2 ]; then
echo "Usage: $0 <directory_path> <output_directory>"
exit 1
fi
-# 获取输入的目录路径和输出目录
INPUT_DIRECTORY=$1
OUTPUT_DIRECTORY=$2
-# 检查输入的目录是否存在
if [ ! -d "$INPUT_DIRECTORY" ]; then
echo "Error: Directory $INPUT_DIRECTORY does not exist."
exit 1
fi
-# 创建输出目录(如果不存在)
mkdir -p "$OUTPUT_DIRECTORY"
-# 遍历目录下的所有 Markdown 文件
find "$INPUT_DIRECTORY" -type f -name "*.md" | while read -r FILE; do
- # 获取文件名(不带路径和扩展名)
+
filename=$(basename -- "$FILE")
filename="${filename%.*}"
- # 生成输出文件路径
output_file="${OUTPUT_DIRECTORY}/${filename}.pdf"
echo "Processing $FILE..."
- # 尝试转换文件
pandoc -N --toc --smart --latex-engine=xelatex \
--template=templates/template.tex \
--listings \
@@ -57,7 +47,6 @@ find "$INPUT_DIRECTORY" -type f -name "*.md" | while read -r
FILE; do
-V include-after="\\input{templates/copyright.tex}" \
"$FILE" -s -o "$output_file"
- # 检查是否有错误
if [ $? -ne 0 ]; then
echo "Error processing $FILE"
else
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]