@peaceroad/markdown-it-strong-ja 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # p7d-markdown-it-strong-ja
2
2
 
3
- This is a plugin for markdown-it. It is an alternative to the standard `**` (strong) processing. It also processes strings that cannot be converted by the standard."
3
+ This is a plugin for markdown-it. It is an alternative to the standard `**` (strong) and `*` (em) processing. It also processes strings that cannot be converted by the standard.
4
+
5
+ Since em processing was added from 0.2, the package name is strange.
4
6
 
5
7
  ## Use
6
8
 
@@ -11,10 +13,15 @@ const md = mdit().use(mdStrongJa)
11
13
 
12
14
  md.render('HTMLは**「HyperText Markup Language」**の略です。')
13
15
  // <p>HTMLは<strong>「HyperText Markup Language」</strong>の略です。</p>
16
+
17
+ md.render('HTMLは*「HyperText Markup Language」*の略です。')
18
+ // <p>HTMLは<em>「HyperText Markup Language」</em>の略です。</p>
14
19
  ```
15
20
 
16
21
  ## Example
17
22
 
23
+ The following examples is for strong. The process for em is roughly the same.
24
+
18
25
  ~~~
19
26
  [Markdown]
20
27
  HTMLは「**HyperText Markup Language**」の略です。
@@ -137,10 +144,10 @@ HTMLは**「HyperText Markup Language」**。
137
144
  [Markdown]
138
145
  a****b
139
146
  [HTML]
140
- <p>a<strong></strong>b</p>
147
+ <p>a****b</p>
141
148
 
142
149
  [Markdown]
143
- a****
150
+ a****
144
151
  [HTML]
145
- <p>a<strong></strong></p>
152
+ <p>a****</p>
146
153
  ~~~
package/index.js CHANGED
@@ -1,84 +1,92 @@
1
- import mdit from 'markdown-it'
1
+ const processInlineTokens = (state, start, end, type, max) => {
2
+ let token
3
+ const content = type === 'strong' ? state.src.slice(start, end - 1) : state.src.slice(start, end)
2
4
 
3
- const strongJa = (state, silent, mdOptions) => {
5
+ const childTokens = state.md.parseInline(content, state.env)
4
6
 
5
- let content, token
6
- let found = false
7
- const max = state.posMax
8
- const start = state.pos
9
-
10
- // console.log('input:: state.src.length: ' + state.src.length + ', state.posMax: ' + state.posMax + ', state.pos: ' + state.pos + ', start: ' + start)
11
-
12
- if (silent) return false
13
- if (start + 3 > max) return false
14
- if (state.src.charCodeAt(start) !== 0x2A || state.src.charCodeAt(start + 1) !== 0x2A) return false
15
-
16
-
17
- let end = start + 2
18
- while (end < max) {
19
- if (state.src.charCodeAt(end) === 0x2A && state.src.charCodeAt(end +1) === 0x2A) {
20
- found = true
21
- end++
22
- break
23
- }
24
- //state.md.inline.skipToken(state);
25
- end++
26
- }
27
- //console.log('found: ' + found + ', start: ' + start + ', end: '+ end)
28
-
29
- if (!found) {
30
- state.pos = start
31
- return false
32
- }
33
-
34
-
35
- content = state.src.slice(start + 2, end - 1)
36
-
37
- //console.log('content: ' + content)
38
-
39
- token = state.push('strong_open', 'strong', 1)
40
- token.markup = '**'
41
-
42
- const md = new mdit({html: mdOptions.html})
43
- const childTokens = md.parseInline(content)
7
+ token = state.push(`${type}_open`, type, 1)
8
+ token.markup = type === 'strong' ? '**' : '*'
44
9
 
45
10
  if (childTokens[0] && childTokens[0].children) {
46
11
  childTokens[0].children.forEach(t => {
47
- token = state.push(t.type, t.tag, t.nesting)
48
- token.attrs = t.attrs
49
- token.map = t.map
50
- token.level = t.level
51
- token.children = t.children
52
- token.content = t.content
53
- token.markup = t.markup
54
- token.info = t.info
55
- token.meta = t.meta
56
- token.block = t.block
57
- token.hidden = t.hidden
12
+ token = state.push(t.type, t.tag, t.nesting)
13
+ token.attrs = t.attrs
14
+ token.map = t.map
15
+ token.level = t.level
16
+ token.children = t.children
17
+ token.content = t.content
18
+ token.markup = t.markup
19
+ token.info = t.info
20
+ token.meta = t.meta
21
+ token.block = t.block
22
+ token.hidden = t.hidden
58
23
  })
59
24
  }
60
25
 
61
- token = state.push('strong_close', 'strong', -1)
62
- token.markup = '**'
26
+ token = state.push(`${type}_close`, type, -1)
27
+ token.markup = type === 'strong' ? '**' : '*'
63
28
 
64
29
  state.pos = end + 1
30
+
65
31
  if (state.pos === max) {
66
32
  state.pos = end
67
33
  token = state.push('text', '', 0)
68
34
  token.content = '★mdStrongJa★'
69
- return true
70
35
  }
36
+ }
71
37
 
72
- //console.log('output:: state.src.length: ' + state.src.length + ', state.posMax: ' + state.posMax + ', state.pos: ' + state.pos)
38
+ const strongJa = (state, silent, md) => {
39
+ let end, type
40
+ const max = state.posMax
41
+ const start = state.pos
42
+
43
+ if (silent) return false
44
+ if (start + 1 > max) return false
45
+ if (state.src.charCodeAt(start) !== 0x2A) return false
46
+
47
+ if (state.src.charCodeAt(start + 1) === 0x2A) {
48
+ end = start + 2
49
+ type = 'strong'
50
+ } else {
51
+ end = start + 1
52
+ type = 'em'
53
+ }
54
+
55
+ while (end < max) {
56
+ if (state.src.charCodeAt(end) === 0x2A) {
57
+ if (type === 'strong' && state.src.charCodeAt(end + 1) === 0x2A) {
58
+ end += 1
59
+ break
60
+ } else if (type === 'em' && (state.src.charCodeAt(end - 1) === 0x2A || state.src.charCodeAt(end + 1) === 0x2A)) {
61
+ end++
62
+ continue
63
+ } else if (type === 'em') {
64
+ break
65
+ }
66
+ }
67
+ end++
68
+ }
69
+ const noContent = type === 'strong' ? end === start + 3 :end === start + 1
70
+ if (end >= max || noContent) {
71
+ state.pos = start
72
+ return false
73
+ }
74
+ //console.log('start: ' + start + ', end: '+ end+ ', state.pos: ' + state.pos)
73
75
 
74
- return false
76
+ processInlineTokens(state, start + (type === 'strong' ? 2 : 1), end, type, max)
77
+ //console.log('output:: state.src.length: ' + state.src.length + ', state.posMax: ' + state.posMax + ', state.pos: ' + state.pos)
78
+ return true
75
79
  }
76
80
 
77
81
  const mdStrongJa = (md) => {
78
82
  md.inline.ruler.before('emphasis', 'strong_ja', (state, silent) => {
79
- strongJa(state, silent, md.options)
80
-
83
+ strongJa(state, silent, md)
81
84
  })
85
+ /*
86
+ md.inline.ruler.before('emphasis', 'em_ja', (state, silent) => {
87
+ emJa(state, silent, md)
88
+ })*/
89
+
82
90
 
83
91
  md.core.ruler.push('remove_strong_ja_sp_chars', (state) => {
84
92
  let i = 0
@@ -104,4 +112,4 @@ const mdStrongJa = (md) => {
104
112
  })
105
113
  }
106
114
 
107
- export default mdStrongJa
115
+ export default mdStrongJa
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@peaceroad/markdown-it-strong-ja",
3
- "description": "This is a plugin for markdown-it. It is an alternative to the standard `**` (strong) processing. It also processes strings that cannot be converted by the standard.",
4
- "version": "0.1.3",
3
+ "description": "This is a plugin for markdown-it. It is an alternative to the standard `**` (strong) and `*` (em) processing. It also processes strings that cannot be converted by the standard.",
4
+ "version": "0.2.0",
5
5
  "main": "index.js",
6
6
  "type": "module",
7
7
  "scripts": {
@@ -10,7 +10,7 @@
10
10
  "repository": "https://github.com/peaceroad/p7d-markdown-it-strong-ja.git",
11
11
  "author": "peaceroad <peaceroad@gmail.com>",
12
12
  "license": "MIT",
13
- "dependencies": {
13
+ "devDependencies": {
14
14
  "markdown-it": "^14.1.0"
15
15
  }
16
16
  }
@@ -0,0 +1,176 @@
1
+ [Markdown]
2
+ HTMLは「*HyperText Markup Language*」の略です。
3
+ [HTML]
4
+ <p>HTMLは「<em>HyperText Markup Language</em>」の略です。</p>
5
+
6
+
7
+ [Markdown]
8
+ HTMLは*「HyperText Markup Language」*の略です。
9
+ [HTML]
10
+ <p>HTMLは<em>「HyperText Markup Language」</em>の略です。</p>
11
+
12
+
13
+ [Markdown]
14
+ HTMLは*「HyperText **Markup** Language」*の略です。
15
+ [HTML]
16
+ <p>HTMLは<em>「HyperText <strong>Markup</strong> Language」</em>の略です。</p>
17
+
18
+
19
+ [Markdown]
20
+ HTMLは*「HyperText **Markup** `Language`」*の略です。
21
+ [HTML]
22
+ <p>HTMLは<em>「HyperText <strong>Markup</strong> <code>Language</code>」</em>の略です。</p>
23
+
24
+
25
+ [Markdown]
26
+ HTMLは*「HyperText Mark
27
+
28
+ up Language」*の略です。
29
+ [HTML]
30
+ <p>HTMLは*「HyperText Mark</p>
31
+ <p>up Language」*の略です。</p>
32
+
33
+
34
+ [Markdown]
35
+ HTMLは\*「HyperText Markup Language」*の略です。
36
+ [HTML]
37
+ <p>HTMLは*「HyperText Markup Language」*の略です。</p>
38
+
39
+
40
+ [Markdown]
41
+ HTMLは\\*「HyperText Markup Language」*の略です。
42
+ [HTML]
43
+ <p>HTMLは\<em>「HyperText Markup Language」</em>の略です。</p>
44
+
45
+
46
+ [Markdown]
47
+ HTMLは\\\*「HyperText Markup Language」*の略です。
48
+ [HTML]
49
+ <p>HTMLは\*「HyperText Markup Language」*の略です。</p>
50
+
51
+
52
+ [Markdown]
53
+ HTMLは`*`は*「HyperText Markup Language」*の略です。
54
+ [HTML]
55
+ <p>HTMLは<code>*</code>は<em>「HyperText Markup Language」</em>の略です。</p>
56
+
57
+ [Markdown]
58
+ HTMLは`*`は*「HyperText* <b>Markup</b> Language」の略です。
59
+ [HTML:false]
60
+ <p>HTMLは<code>*</code>は<em>「HyperText</em> &lt;b&gt;Markup&lt;/b&gt; Language」の略です。</p>
61
+ [HTML:true]
62
+ <p>HTMLは<code>*</code>は<em>「HyperText</em> <b>Markup</b> Language」の略です。</p>
63
+
64
+
65
+ [Markdown]
66
+ HTMLは`*`は*「HyperText <b>Markup</b> Language」*の略です。
67
+ [HTML:false]
68
+ <p>HTMLは<code>*</code>は<em>「HyperText &lt;b&gt;Markup&lt;/b&gt; Language」</em>の略です。</p>
69
+ [HTML:true]
70
+ <p>HTMLは<code>*</code>は<em>「HyperText <b>Markup</b> Language」</em>の略です。</p>
71
+
72
+
73
+ [Markdown]
74
+ ```
75
+ HTMLは`*`は*「HyperText Markup Language」*の略です。
76
+ ```
77
+ [HTML:false]
78
+ <pre><code>HTMLは`*`は*「HyperText Markup Language」*の略です。
79
+ </code></pre>
80
+ [HTML:true]
81
+ <pre><code>HTMLは`*`は*「HyperText Markup Language」*の略です。
82
+ </code></pre>
83
+
84
+
85
+ [Markdown]
86
+ HTMLは*「HyperText <b>Markup</b> Language」*
87
+ [HTML:false]
88
+ <p>HTMLは<em>「HyperText &lt;b&gt;Markup&lt;/b&gt; Language」</em></p>
89
+ [HTML:true]
90
+ <p>HTMLは<em>「HyperText <b>Markup</b> Language」</em></p>
91
+
92
+
93
+ [Markdown]
94
+ HTMLは「*HyperText Markup Language*」
95
+ [HTML]
96
+ <p>HTMLは「<em>HyperText Markup Language</em>」</p>
97
+
98
+ [Markdown]
99
+ HTMLは*「HyperText Markup Language」*。
100
+ [HTML]
101
+ <p>HTMLは<em>「HyperText Markup Language」</em>。</p>
102
+
103
+ [Markdown]
104
+ HTMLは*「HyperText Markup Language」*
105
+ [HTML]
106
+ <p>HTMLは<em>「HyperText Markup Language」</em></p>
107
+
108
+
109
+ [Markdown]
110
+ HTMLは*「HyperText Markup Language」*。
111
+ [HTML]
112
+ <p>HTMLは<em>「HyperText Markup Language」</em>。</p>
113
+
114
+ [Markdown]
115
+ **
116
+ [HTML]
117
+ <p>**</p>
118
+
119
+ [Markdown]
120
+ ***
121
+ [HTML]
122
+ <hr>
123
+
124
+ [Markdown]
125
+ a**b
126
+ [HTML]
127
+ <p>a**b</p>
128
+
129
+ [Markdown]
130
+ a**
131
+ [HTML]
132
+ <p>a**</p>
133
+
134
+ [Markdown]
135
+ HTMLは*「HyperText <b>Markup</b> Language」*
136
+
137
+ HTMLは*「HyperText <b>Markup</b> Language」*
138
+ [HTML:false]
139
+ <p>HTMLは<em>「HyperText &lt;b&gt;Markup&lt;/b&gt; Language」</em></p>
140
+ <p>HTMLは<em>「HyperText &lt;b&gt;Markup&lt;/b&gt; Language」</em></p>
141
+ [HTML:true]
142
+ <p>HTMLは<em>「HyperText <b>Markup</b> Language」</em></p>
143
+ <p>HTMLは<em>「HyperText <b>Markup</b> Language」</em></p>
144
+
145
+ [Markdown]
146
+ HTMLは*「Hyper[Text] Markup Language」*
147
+ [HTML]
148
+ <p>HTMLは<em>「Hyper[Text] Markup Language」</em></p>
149
+
150
+ [Markdown]
151
+ HTMLは*「Hyper[Text] <b>Markup</b> Language」*
152
+ [HTML:false]
153
+ <p>HTMLは<em>「Hyper[Text] &lt;b&gt;Markup&lt;/b&gt; Language」</em></p>
154
+ [HTML:true]
155
+ <p>HTMLは<em>「Hyper[Text] <b>Markup</b> Language」</em></p>
156
+
157
+
158
+ [Markdown]
159
+ HTMLは*「Hyper[Text] Markup Language」*
160
+ [HTML]
161
+ <p>HTMLは<em>「Hyper[Text] Markup Language」</em></p>
162
+
163
+ [Markdown]
164
+ HTMLは*「Hyper[Text] <b>Markup</b> Language」*
165
+ [HTML:false]
166
+ <p>HTMLは<em>「Hyper[Text] &lt;b&gt;Markup&lt;/b&gt; Language」</em></p>
167
+ [HTML:true]
168
+ <p>HTMLは<em>「Hyper[Text] <b>Markup</b> Language」</em></p>
169
+
170
+
171
+ [Markdown]
172
+ - HTMLは*「Hyper[Text] Markup Language」*
173
+ [HTML]
174
+ <ul>
175
+ <li>HTMLは<em>「Hyper[Text] Markup Language」</em></li>
176
+ </ul>
@@ -119,12 +119,12 @@ HTMLは**「HyperText Markup Language」**。
119
119
  [Markdown]
120
120
  a****b
121
121
  [HTML]
122
- <p>a<strong></strong>b</p>
122
+ <p>a****b</p>
123
123
 
124
124
  [Markdown]
125
- a****
125
+ a****
126
126
  [HTML]
127
- <p>a<strong></strong></p>
127
+ <p>a****</p>
128
128
 
129
129
 
130
130
  [Markdown]
@@ -137,3 +137,36 @@ HTMLは**「HyperText <b>Markup</b> Language」**
137
137
  [HTML:true]
138
138
  <p>HTMLは<strong>「HyperText <b>Markup</b> Language」</strong></p>
139
139
  <p>HTMLは<strong>「HyperText <b>Markup</b> Language」</strong></p>
140
+
141
+ [Markdown]
142
+ HTMLは**「Hyper[Text] Markup Language」**
143
+ [HTML]
144
+ <p>HTMLは<strong>「Hyper[Text] Markup Language」</strong></p>
145
+
146
+ [Markdown]
147
+ HTMLは**「Hyper[Text] <b>Markup</b> Language」**
148
+ [HTML:false]
149
+ <p>HTMLは<strong>「Hyper[Text] &lt;b&gt;Markup&lt;/b&gt; Language」</strong></p>
150
+ [HTML:true]
151
+ <p>HTMLは<strong>「Hyper[Text] <b>Markup</b> Language」</strong></p>
152
+
153
+
154
+ [Markdown]
155
+ HTMLは**「Hyper[Text] Markup Language」**
156
+ [HTML]
157
+ <p>HTMLは<strong>「Hyper[Text] Markup Language」</strong></p>
158
+
159
+ [Markdown]
160
+ HTMLは**「Hyper[Text] <b>Markup</b> Language」**
161
+ [HTML:false]
162
+ <p>HTMLは<strong>「Hyper[Text] &lt;b&gt;Markup&lt;/b&gt; Language」</strong></p>
163
+ [HTML:true]
164
+ <p>HTMLは<strong>「Hyper[Text] <b>Markup</b> Language」</strong></p>
165
+
166
+
167
+ [Markdown]
168
+ - HTMLは**「Hyper[Text] Markup Language」**
169
+ [HTML]
170
+ <ul>
171
+ <li>HTMLは<strong>「Hyper[Text] Markup Language」</strong></li>
172
+ </ul>
package/test/test.js CHANGED
@@ -4,13 +4,13 @@ import path from 'path'
4
4
  import url from 'url'
5
5
 
6
6
  import mdit from 'markdown-it'
7
- import mdStrongJa from '../index.js'
7
+ import mditStrongJa from '../index.js'
8
8
 
9
9
  const __dirname = path.dirname(url.fileURLToPath(import.meta.url)).replace(/\\/g, '/')
10
10
 
11
11
  const check = (ms, example) => {
12
- const md = mdit().use(mdStrongJa)
13
- const mdWithHtml = mdit({html: true}).use(mdStrongJa)
12
+ const md = mdit().use(mditStrongJa)
13
+ const mdWithHtml = mdit({html: true}).use(mditStrongJa)
14
14
  let n = 1
15
15
  while (n < ms.length) {
16
16
  //if (n !== 13) { n++; continue }
@@ -41,6 +41,7 @@ const check = (ms, example) => {
41
41
 
42
42
  const examples = {
43
43
  strong: __dirname + '/example-strong.txt',
44
+ em: __dirname + '/example-em.txt',
44
45
  }
45
46
 
46
47
  for (let example in examples) {