File tree Expand file tree Collapse file tree 4 files changed +58
-6
lines changed
Expand file tree Collapse file tree 4 files changed +58
-6
lines changed Original file line number Diff line number Diff line change 1+ ---
2+ title : CodeBlock
3+ icon : code
4+ ---
5+
6+ PageForge 支持使用代码块,用户可以自定义代码块的样式,以便更好地展示代码的语法和格式。
7+
8+ ## 基本语法
9+
10+ ---
11+
12+ 以下是一个简单的示例:
13+
14+ ``` java
15+ public class HelloWorld {
16+ public static void main (String [] args ) {
17+ System . out. println(" Hello, World!" );
18+ }
19+ }
20+ ```
21+
22+ ## 配置行号
23+
24+ ---
25+
26+ > 默认情况下,代码块不会显示行号,但可以通过配置 ` showLineNumbers ` 或者 ` showLineNumbers=true ` 参数来启用行号显示。格式为
27+ > ** ```java showLineNumbers**
28+ > 或者
29+ > ** ```java showLineNumbers=true**
30+
31+ ``` java showLineNumbers
32+ public class HelloWorld {
33+ public static void main (String [] args ) {
34+ System . out. println(" Hello, World!" );
35+ }
36+ }
37+ ```
Original file line number Diff line number Diff line change 2929 Setup : Setup
3030 Usage : Usage Docs
3131 EjsTemplate : EJS Template
32+ CodeBlock : Code Block
3233 ReleaseNotes : Release Notes
3334 zh-CN :
3435 name : 中文
3839 Setup : 设置
3940 Usage : 使用文档
4041 EjsTemplate : EJS 模板
42+ CodeBlock : 代码块
4143 ReleaseNotes : 发布日志
4244
4345footer :
9294 - /usage/alert
9395 - /usage/tab
9496 - /usage/ejs
97+ - /usage/code
9598 - ReleaseNotes :
9699 - /release/2025.1.0
97100 - /release/1.0.0
Original file line number Diff line number Diff line change @@ -48,12 +48,13 @@ const PageForgeCodeBlockExtension = {
4848 return src . match ( / ^ ` ` ` / ) ?. index ;
4949 } ,
5050 tokenizer ( src , tokens ) {
51- const rule = / ^ ` ` ` ( \w * ) \n ( [ \s \S ] * ?) \n ` ` ` / ;
51+ const rule = / ^ ` ` ` ( \w * ) (?: \s + s h o w L i n e N u m b e r s (?: = ( t r u e | f a l s e ) ) ? ) ? \n ( [ \s \S ] * ?) \n ` ` ` / ;
5252 const match = rule . exec ( src ) ;
5353
5454 if ( match ) {
5555 let language = match [ 1 ] . toLowerCase ( ) ;
56- const code = match [ 2 ] . replace ( / < / g, '<' ) . replace ( / > / g, '>' ) ;
56+ const showLineNumbers = match [ 2 ] === undefined && match [ 0 ] . includes ( 'showLineNumbers' ) ? true : match [ 2 ] === 'true' ;
57+ const code = match [ 3 ] . trim ( ) . replace ( / < / g, '<' ) . replace ( / > / g, '>' ) ;
5758
5859 // 处理特殊语言映射
5960 const languageMap = {
@@ -76,10 +77,12 @@ const PageForgeCodeBlockExtension = {
7677 raw : match [ 0 ] ,
7778 lang : language ,
7879 text : highlightedCode ,
80+ showLineNumbers,
7981 tokens : [ ]
8082 } ;
8183 }
82- } catch ( e ) {
84+ }
85+ catch ( e ) {
8386 console . warn ( `Failed to highlight code for language: ${ language } ` , e ) ;
8487 }
8588
@@ -88,6 +91,7 @@ const PageForgeCodeBlockExtension = {
8891 raw : match [ 0 ] ,
8992 lang : language ,
9093 text : code ,
94+ showLineNumbers,
9195 tokens : [ ]
9296 } ;
9397 }
@@ -96,7 +100,8 @@ const PageForgeCodeBlockExtension = {
96100 renderer ( item ) {
97101 return loadComponent ( 'block-code' , {
98102 language : item . lang ,
99- text : item . text
103+ text : item . text ,
104+ showLineNumbers : item . showLineNumbers
100105 } ) ;
101106 }
102107} ;
Original file line number Diff line number Diff line change @@ -3,10 +3,17 @@ module.exports = function template(item) {
33 const language = item . language ? `language-${ item . language } ` : '' ;
44 const languageLabel = item . language ? `<div class="!absolute !right-2 !top-2 !text-sm !text-gray-500 !dark:text-gray-400 !bg-gray-100 !dark:bg-gray-800 !z-10">${ item . language } </div>` : '' ;
55
6+ const lines = item . text . split ( '\n' ) ;
7+ const lineNumbers = lines . map ( ( _ , i ) => `<span class="!block !w-8 !pr-2 !text-right !text-gray-500 !select-none">${ i + 1 } </span>` ) . join ( '' ) ;
8+ const lineNumbersDiv = item . showLineNumbers ? `<div class="!py-2.5 !bg-gray-200 !dark:bg-gray-700">${ lineNumbers } </div>` : '' ;
9+
610 return `<div class="${ wrapperClass } ">
711 ${ languageLabel }
8- <div class="!overflow-x-auto">
9- <pre class="!px-3 !py-2.5 !m-0"><code class="${ language } ">${ item . text } </code></pre>
12+ <div class="!overflow-x-auto !flex">
13+ ${ lineNumbersDiv }
14+ <div class="!flex-1">
15+ <pre class="!px-3 !py-2.5 !m-0"><code class="${ language } ">${ item . text } </code></pre>
16+ </div>
1017 </div>
1118 </div>` ;
1219} ;
You can’t perform that action at this time.
0 commit comments