仿照chatgpt代码块高亮

2023-11-07 11:04
文章标签 chatgpt 代码 ai 高亮 仿照

本文主要是介绍仿照chatgpt代码块高亮,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我们公司最近写了一个仿照gpt回答用户问题的网站
我要实现一个功能,正确展示代码,如下图:
在这里插入图片描述
这里面我遇到了一些问题,记录下来:

1、代码高亮

后端返回的markdown格式的字符串,所以我要用插件转化为dom结构,这里我使用的插件是:markdown-it,代码高亮我使用的插件是:highlight.js

markdonw-it官方文档:https://markdown-it.docschina.org/

我按照官方文档写了如下代码:

<span v-html="mdToHtml(content)"></span>
import hljs from "highlight.js";
import 'highlight.js/styles/a11y-dark.css'
// 通常的默认值们
var md = require('markdown-it')('commonmark', {highlight: function (str, lang) {if (lang && hljs.getLanguage(lang)) {try {return '<pre class="hljs"><code>' +hljs.highlight(lang, str, true).value +'</code></pre>';} catch (__) {}}return '<pre class="hljs"><code>' + md.utils.escapeHtml(str) + '</code></pre>';}
});export default {methods: {mdToHtml(content) {return md.render(content)},
}

2、系统回答问题的过程中字体忽大忽小

QQ录屏20231106180307

从视频里明显的看到材料两个字由大变小,体验不好

这个有问题的回答,后端返给我的字符串是这个:

content: "鱼香肉丝是一道经典的川菜,下面是鱼香肉丝的做法步骤:\n\n材料:\n- 猪肉(瘦肉):150克......"

把内容固定为:

<span v-html="mdToHtml(`\n\n材料:\n-`)"></span>

现在展示的样式是:
在这里插入图片描述

把内容固定为:

<span v-html="mdToHtml(`\n\n材料:\n- 猪肉(瘦肉)`)"></span>

现在展示的样式是:
在这里插入图片描述

问题这就找到了,那我想如果markdown-it遇到其他的字符串不去解析成dom,只在遇到代码字符串的时候解析成dom,这个问题就解决了

markdown-it git地址:markdown-it

在项目里找到这个文件:lib/presets/commonmark.js,把components对象复制过来,然后我试了试,只留下fence和paragraph的时候可以达到我想要的效果

md.configure({components: {core: {rules: ['normalize','block','inline','text_join']},block: {rules: [// 'blockquote',// 'code','fence',// 'heading',// 'hr',// 'html_block',// 'lheading',// 'list',// 'reference','paragraph']},inline: {rules: [// 'autolink',// 'backticks',// 'emphasis',// 'entity',// 'escape',// 'html_inline',// 'image',// 'link',// 'newline',// 'text'],rules2: [// 'balance_pairs',// 'emphasis',// 'fragments_join']}}
});

这个问题就这样解决了

这篇关于仿照chatgpt代码块高亮的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/363198

相关文章

MySQL批量替换数据库字符集的实用方法(附详细代码)

《MySQL批量替换数据库字符集的实用方法(附详细代码)》当需要修改数据库编码和字符集时,通常需要对其下属的所有表及表中所有字段进行修改,下面:本文主要介绍MySQL批量替换数据库字符集的实用方法... 目录前言为什么要批量修改字符集?整体脚本脚本逻辑解析1. 设置目标参数2. 生成修改表默认字符集的语句3

C#使用SendMessage实现进程间通信的示例代码

《C#使用SendMessage实现进程间通信的示例代码》在软件开发中,进程间通信(IPC)是关键技术之一,C#通过调用WindowsAPI的SendMessage函数实现这一功能,本文将通过实例介绍... 目录第一章:SendMessage的底层原理揭秘第二章:构建跨进程通信桥梁2.1 定义通信协议2.2

JAVA实现亿级千万级数据顺序导出的示例代码

《JAVA实现亿级千万级数据顺序导出的示例代码》本文主要介绍了JAVA实现亿级千万级数据顺序导出的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 前提:主要考虑控制内存占用空间,避免出现同时导出,导致主程序OOM问题。实现思路:A.启用线程池

在.NET项目中嵌入Python代码的实践指南

《在.NET项目中嵌入Python代码的实践指南》在现代开发中,.NET与Python的协作需求日益增长,从机器学习模型集成到科学计算,从脚本自动化到数据分析,然而,传统的解决方案(如HTTPAPI或... 目录一、CSnakes vs python.NET:为何选择 CSnakes?二、环境准备:从 Py

Nginx实现端口映射的示例代码

《Nginx实现端口映射的示例代码》本文主要介绍了Nginx实现端口映射的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1. 找到nginx的部署路径2. 备份原来的配置文件3. 编辑nginx.conf文件4. 在

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python