CFLMY-PPT自动生成记录文档002
前言
这是一个更新的版本,演示站点仍为:CFLMY-生成至美PPT
更改的配置:
const fs = require('fs');
const path = require('path');
const MarkdownIt = require('markdown-it');
const md = new MarkdownIt({
html: true
});
// 读取头部和尾部文件
const headerFilePath = 'decorate/header.html'; // 头部文件路径
const footerFilePath = 'decorate/footer.html'; // 尾部文件路径
const markdownFilePath = 'index.md'; // Markdown 文件路径
const markdownDirPath = 'md'; // Markdown 文件夹路径
// 读取头部和尾部内容
const headerContent = fs.readFileSync(headerFilePath, 'utf-8');
const footerContent = fs.readFileSync(footerFilePath, 'utf-8');
// 读取 Markdown 文件
const markdownContent = fs.readFileSync(markdownFilePath, 'utf-8');
const markdownFiles = fs.readdirSync(markdownDirPath).filter(file => {
return path.extname(file) === '.md'; // 仅处理 .md 文件
});
//更改定义自己的全新规则
//Error
//将标题进行更改
//新增规则,仅当标题为1级的时候,开辟新页
md.renderer.rules.heading_open = function (tokens, idx, options, env, self) {
const level = tokens[idx].tag.slice(1); // 获取标题级别(h1, h2, h3...)
if (level == 1)
{
return '\n <section> \n <h1>'
}
return self.renderToken(tokens, idx, options);// 更改标题的样式或添加自定义属性
};
// 自定义分割线的渲染规则
md.renderer.rules.hr = function () {
return ' <hr> \n </div> \n </section> \n'; // 自定义分割线样式
};
// 重写图片处理规则
md.renderer.rules.image = function (tokens, idx, options, env, self) {
const token = tokens[idx];
const alt = token.content; // 获取alt文本
const src = token.attrs[token.attrIndex('src')][1]; // 获取src属性
// 定义一个映射对象用于存储不同 alt 文本的处理信息
const backgroundStyles = {
'BackGround': '', // 不添加额外类
'BackGround-aligncenter': ' aligncenter', // 添加 aligncenter 类
// 你可以添加更多的 alt 文本和对应样式
};
// 获取对应样式后缀
const className = backgroundStyles[alt]; // 如果 alt 不在映射中,className 为 undefined
// 默认情况下,使用缺省的背景图像
const backgroundImage = src ? `url('${src}')` : `url('Assert/CFLMY.webp')`;
// 只要 alt 文本在映射中存在,就返回相应的 HTML
if (className !== undefined) {
return `<span class="background" style="background-image:${backgroundImage};"></span>\n<div class="wrap${className}">`;
}
// 默认行为
return self.renderToken(tokens, idx, options);
};
// 自定义有序列表的渲染规则
// 自定义有序列表的渲染规则
md.renderer.rules.ordered_list_open = function (tokens, idx, options, env, self) {
// 在有序列表前添加内容
return `<div class="bg-white shadow">
<ul class="flexblock reasons">`; // 可以自定义前置内容
};
md.renderer.rules.ordered_list_close = function (tokens, idx, options, env, self) {
// 在有序列表后添加内容
return `</ul>
</div>`; // 可以自定义后置内容
};
// 自定义无序列表的渲染规则,这里暂时先和无序列表保持一致
md.renderer.rules.bullet_list_open = function() {
// 在有序列表前添加内容
return `<ul class="flexblock gallery">`; // 可以自定义前置内容
};
// 自定义无序列表的渲染规则
md.renderer.rules.bullet_list_close = function() {
// 在有序列表后添加内容
return `</ul>`; // 可以自定义后置内容
};
// 自定义代码块的渲染规则
md.renderer.rules.fenced_code_open = function(tokens, idx, options, env, self) {
// 在代码块前添加内容
return `<div class="column">
<pre>`;
};
md.renderer.rules.fenced_code_close = function(tokens, idx, options, env, self) {
// 在代码块后添加内容
return `</pre>
</div>`;
};
// 自定义链接样式和行为
md.renderer.rules.link_open = function (tokens, idx, options, env, self) {
const token = tokens[idx];
const alt = tokens[idx + 1].content; // 获取链接文本
const href = tokens[idx].attrs[token.attrIndex('href')][1];
// 使用正则表达式给包含 "IMG-" 的 alt 文本设置类名
const match = alt.match(/^(IMG)-(.*?)-(.*)$/);
if (match) {
const prefix = match[1]; // "IMG"
const imgHref = match[2]; // "图片链接"
const description = match[3]; // "描述"
tokens[idx + 1].content = description;
return `<a href="${href}">
<figure>
<img alt="" src="${imgHref}">
<figcaption>
<h2>
`;
}
// 默认行为
return self.renderToken(tokens, idx, options);
};
md.renderer.rules.link_close = function (tokens, idx, options, env, self) {
return `</h2>
</figcaption>
</figure>
</a>`;
};
// 重写引用处理规则
md.renderer.rules.blockquote_open = function (tokens, idx, options, env, self) {
// 返回定义好的开头HTML,可以为引用添加特定的类或样式
return '<ul class="flexblock features"><li>';
};
md.renderer.rules.blockquote_close = function (tokens, idx, options, env, self) {
// 返回引用结束的HTML
return '</li></ul>';
};
const htmlContent = md.render(markdownContent);
// 生成完整的 HTML
const fullHtml = headerContent + htmlContent + footerContent;
// 写入 HTML 文件
const outputFilePath = 'index.html'; // 你的输出 HTML 文件路径
fs.writeFileSync(outputFilePath, fullHtml, 'utf-8');
console.log(`Index HTML 文件已生成: ${outputFilePath}`);
// 遍历每个 Markdown 文件并生成对应的 HTML 文件
markdownFiles.forEach(markdownFile => {
const markdownFilePath = path.join(markdownDirPath, markdownFile); // Markdown 文件的完整路径
const markdownContent = fs.readFileSync(markdownFilePath, 'utf-8'); // 读取 Markdown 文件
// 用于自定义渲染规则的代码
// ... (保留原有的渲染规则) ...
// 重写图片处理规则
md.renderer.rules.image = function (tokens, idx, options, env, self) {
const token = tokens[idx];
const alt = token.content; // 获取alt文本
const src = token.attrs[token.attrIndex('src')][1]; // 获取src属性
// 定义一个映射对象用于存储不同 alt 文本的处理信息
const backgroundStyles = {
'BackGround': '', // 不添加额外类
'BackGround-aligncenter': ' aligncenter', // 添加 aligncenter 类
// 你可以添加更多的 alt 文本和对应样式
};
// 获取对应样式后缀
const className = backgroundStyles[alt]; // 如果 alt 不在映射中,className 为 undefined
// 默认情况下,使用缺省的背景图像
const backgroundImage = src ? `url('${src}')` : `url('../Assert/CFLMY.webp')`;
// 只要 alt 文本在映射中存在,就返回相应的 HTML
if (className !== undefined) {
return `<span class="background" style="background-image:${backgroundImage};"></span>\n<div class="wrap${className}">`;
}
// 默认行为
return self.renderToken(tokens, idx, options);
};
const htmlContent = md.render(markdownContent); // 渲染 Markdown 内容为 HTML
// 生成完整的 HTML
const outputHtml = headerContent + htmlContent + footerContent;
const outputFileName = path.basename(markdownFile, '.md') + '.html'; // 输出文件名
const outputFilePath = path.join('html', outputFileName); // 输出 HTML 文件路径
// 创建输出目录(如果不存在)
if (!fs.existsSync('html')) {
fs.mkdirSync('html');
}
// 写入 HTML 文件
fs.writeFileSync(outputFilePath, outputHtml, 'utf-8');
console.log(`md 目录下的HTML 文件已生成: ${outputFilePath}`);
});
更新内容
- 新增读取md文件夹下的所有.md后缀的文件,并且在html文件夹下生成同名的.html文件。提高了泛用性
- 修改无序列表的渲染样式,并将原有的无序列表样式移动到引用。
- 修改原有的背景表达方式,简洁化代码
- 增加链接的支持,使得对于
* [IMG-imgHref-description](href)
的链接样式进行修改 5. 背景缺省的情况下改变默认背景名称,防止出现兼容性问题。
后记
0.0.2版本就算更新了这么多吧,以后或许会有更近一步的更新的。