Skip to content

Commit d98ca1d

Browse files
authored
fix(template): add {{{backtick}} for template (#56)
* fix(template): add {{{backtick}} for template * style: fix lint
1 parent 77902c5 commit d98ca1d

File tree

10 files changed

+2682
-14
lines changed

10 files changed

+2682
-14
lines changed

src/backtick-maker.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// MIT © 2017 azu
2+
"use strict";
3+
4+
const codeBlockBackTick = /```/;
5+
6+
/**
7+
* backtcik count is 3 by default.
8+
* But, We should increase backtick if content include ```.
9+
* https://github.com/azu/gitbook-plugin-include-codeblock/issues/55
10+
* https://stackoverflow.com/questions/33224686/how-to-render-triple-backticks-as-inline-code-block-in-markdown
11+
* @param {string} content
12+
* @return {string} codebloack begin/end backtick
13+
*/
14+
export function codeBlockBacktick(content) {
15+
if (codeBlockBackTick.test(content)) {
16+
return "````";
17+
}
18+
return "```";
19+
}

src/parser.js

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import { getMarker, hasMarker, markerSliceCode, removeMarkers } from "./marker";
1010
import { sliceCode, hasSliceRange, getSliceRange } from "./slicer";
1111
import { hasTitle } from "./title";
1212
import { getTemplateContent, readFileFromPath } from "./template";
13+
import { codeBlockBacktick } from "./backtick-maker";
14+
1315
const markdownLinkFormatRegExp = /\[((?:[^\]]|\\.)*?)\]\(((?:[^\)]|\\.)*?)\)/gm;
1416

1517
const keyEx = "\\w+";
@@ -63,7 +65,11 @@ export function strip(s) {
6365
if (s === undefined || s === "") {
6466
return s;
6567
}
66-
const indents = s.split(/\n/).map(s => s.match(/^[ \t]*(?=\S)/)).filter(m => m).map(m => m[0]);
68+
const indents = s
69+
.split(/\n/)
70+
.map(s => s.match(/^[ \t]*(?=\S)/))
71+
.filter(m => m)
72+
.map(m => m[0]);
6773
const smallestIndent = indents.sort((a, b) => a.length - b.length)[0];
6874
return s.replace(new RegExp(`^${smallestIndent}`, "gm"), "");
6975
}
@@ -163,9 +169,10 @@ export function parseVariablesFromLabel(kvMap, label) {
163169
* @param {string} fileName
164170
* @param {string} originalPath
165171
* @param {string} content
172+
* @param {string} backtick
166173
* @return {string}
167174
*/
168-
export function generateEmbedCode(kvMap, { fileName, originalPath, content }) {
175+
export function generateEmbedCode(kvMap, { fileName, originalPath, content, backtick }) {
169176
const tContent = getTemplateContent(kvMap);
170177
const kv = Object.assign({}, kvMap);
171178
const count = hasTitle(kv) ? codeCounter() : -1;
@@ -174,7 +181,8 @@ export function generateEmbedCode(kvMap, { fileName, originalPath, content }) {
174181
content: content,
175182
count: count,
176183
fileName: fileName,
177-
originalPath: originalPath
184+
originalPath: originalPath,
185+
backtick
178186
});
179187
// compile template
180188
const handlebars = Handlebars.compile(tContent);
@@ -206,7 +214,7 @@ export function embedCode(kvMap, { filePath, originalPath, label }) {
206214
const kvm = getLang(kvmparsed, originalPath);
207215
const unindent = kvm.unindent;
208216

209-
var content = code;
217+
let content = code;
210218
// Slice content via line numbers.
211219
if (hasSliceRange(label)) {
212220
const [start, end] = getSliceRange(label);
@@ -219,7 +227,9 @@ export function embedCode(kvMap, { filePath, originalPath, label }) {
219227
if (unindent === true) {
220228
content = strip(content);
221229
}
222-
return generateEmbedCode(kvm, { fileName, originalPath, content });
230+
231+
const backtick = codeBlockBacktick(content);
232+
return generateEmbedCode(kvm, { fileName, originalPath, content, backtick });
223233
}
224234

225235
/**

src/template.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { defaultBookOptionsMap, defaultTemplateMap } from "./options.js";
1010
* @return {string}
1111
*/
1212
export function readFileFromPath(path) {
13-
var content;
13+
let content;
1414
try {
1515
content = fs.readFileSync(path, "utf8");
1616
} catch (err) {
@@ -35,8 +35,8 @@ export function getTemplateContent(kvMap) {
3535
const tPath = defaultTemplateMap[t];
3636
const dtPath = defaultTemplateMap[dt];
3737

38-
const isTemplateDefault = t == dt;
39-
const isTemplatePath = tPath == undefined;
38+
const isTemplateDefault = t === dt;
39+
const isTemplatePath = tPath === undefined;
4040

4141
let p;
4242
// No template option.
@@ -49,6 +49,5 @@ export function getTemplateContent(kvMap) {
4949
// Template option one of template/ directory.
5050
p = tPath || dtPath;
5151
}
52-
const content = readFileFromPath(p);
53-
return content;
52+
return readFileFromPath(p);
5453
}

templates/default-template.hbs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
``` {{lang}}
1+
{{{backtick}}} {{lang}}
22
{{{content}}}
3-
```
3+
{{{backtick}}}

templates/full-template.hbs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@
2020
{% endif %}
2121
{{/if}}
2222

23-
``` {{lang}}
23+
{{{backtick}}} {{lang}}
2424
{{{content}}}
25-
```
25+
{{{backtick}}}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[import](test.js)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const fs = require("fs");
2+
module.exports = {
3+
"pluginsConfig": {
4+
"include-codeblock": {
5+
}
6+
}
7+
};
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
```` javascript
2+
/**
3+
* @example
4+
* ```js
5+
* a()
6+
* ```
7+
*/
8+
function a(){
9+
10+
}
11+
````
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/**
2+
* @example
3+
* ```js
4+
* a()
5+
* ```
6+
*/
7+
function a(){
8+
9+
}

0 commit comments

Comments
 (0)