当前位置: 首页 > news >正文

VitePress 中以中文字符结尾的字体加粗 Markdown 格式无法解析

背景

在编写vitepress项目过程中,发现了一个markdown格式解析的问题。

md文件中,以中文句号结尾的字体加粗,无法正确解析:

不只是中文句号,只要是加粗语句中以中文字符结尾,都无法被正确解析

需要将中文字符移动到外部,才能被解析为正确的markdown格式

但如果在typora笔记软件上的话,是一切正常的。

原因

在vitepess的github项目上发起了issue,收到外国coder的回复

以句号结尾的字体加粗md格式无法被正确解析 · Issue #4752 · vuejs/vitepress · GitHub

原因是这是markdown语法的规范,中文(CJK)用户来说是个问题,因为他们的文本周围没有空格

加粗语句星号后处加上空格就可以被正确解析。

解决方案

在项目的配置文件处加上以下markdown自定义解析代码。

import { defineConfig } from 'vitepress';export default defineConfig({markdown: {config(md) {// https://github.com/markdown-it/markdown-it/blob/a367c44154d6c906c8652ed779af6a21f7eaed2e/lib/rules_inline/state_inline.mjs#L88md.inline.State.prototype.scanDelims = function (start, canSplitWord) {const max = this.posMax;const marker = this.src.charCodeAt(start);// treat beginning of the line as a whitespaceconst lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20;let pos = start;while (pos < max && this.src.charCodeAt(pos) === marker) {pos++;}const count = pos - start;// treat end of the line as a whitespaceconst nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20;const isLastPunctChar = md.utils.isMdAsciiPunct(lastChar); // MODIFIEDconst isNextPunctChar = md.utils.isMdAsciiPunct(nextChar); // MODIFIEDconst isLastWhiteSpace = md.utils.isWhiteSpace(lastChar);const isNextWhiteSpace = md.utils.isWhiteSpace(nextChar);const left_flanking =!isNextWhiteSpace &&(!isNextPunctChar || isLastWhiteSpace || isLastPunctChar);const right_flanking =!isLastWhiteSpace &&(!isLastPunctChar || isNextWhiteSpace || isNextPunctChar);const can_open =left_flanking && (canSplitWord || !right_flanking || isLastPunctChar);const can_close =right_flanking && (canSplitWord || !left_flanking || isNextPunctChar);return { can_open, can_close, length: count };};},},
});

相关文章:

  • 嵌入式学习笔记 D24 :系统编程之i/o操作
  • PyTorch 之 torch.distributions.Categorical 详解
  • MATLAB中进行语音信号分析
  • USB学习【13】STM32+USB接收数据过程详解
  • 关于element-ui的table type=“expand“ 嵌套表格展开异常问题解决方案
  • CYT4BB Dual Bank 1 - 存储机制
  • 02 基本介绍及Pod基础排错
  • P/Invoke 内存资源处理方案
  • Linux bash shell的循环命令for、while和until
  • C++面向对象——多态
  • 单片机复用功能重映射Remap功能
  • 基于单片机的车辆防盗系统设计与实现
  • 第六部分:第三节 - 路由与请求处理:解析顾客的点单细节
  • 【基础知识】SPI协议的种类及异同
  • OpenCV CUDA 模块特征检测与描述------在GPU上执行特征描述符匹配的类cv::cuda::DescriptorMatcher
  • SetThrowSegvLongjmpSEHFilter错误和myFuncInitialize 崩溃
  • 宝塔+fastadmin:给项目添加定时任务
  • 汽车区域电子电气架构(Zonal E/E)的统一
  • CentOS 7上BIND9配置DNS服务器指南
  • SpringSecurity基础入门
  • 钟睒睒:不反对代工,但农夫山泉目前所有产品是无法代工的
  • 自然资源部:适应存量时代城市更新发展,严控增量盘活存量
  • 国家外汇管理局:4月货物贸易项下跨境资金净流入649亿美元
  • 这位中国电影早期的全能奇才,90年前唱响国歌
  • 王毅同丹麦外交大臣拉斯穆森会谈
  • 加快推进科技服务业高质量发展,九部门联合发文