securemark 0.283.7 → 0.284.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/CHANGELOG.md +4 -0
- package/README.md +11 -11
- package/dist/index.js +29 -3
- package/markdown.d.ts +9 -0
- package/package.json +1 -1
- package/src/parser/inline/autolink/url.test.ts +1 -1
- package/src/parser/inline/italic.test.ts +53 -0
- package/src/parser/inline/italic.ts +21 -0
- package/src/parser/inline/math.ts +1 -1
- package/src/parser/inline/template.ts +1 -1
- package/src/parser/inline.test.ts +4 -3
- package/src/parser/inline.ts +4 -0
- package/src/parser/source/text.ts +1 -0
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -47,7 +47,7 @@ Secure markdown renderer working on browsers for user input data.
|
|
|
47
47
|
- Blockquote (>, !>)
|
|
48
48
|
- Preformattedtext (```)
|
|
49
49
|
- Pagebreak (===)
|
|
50
|
-
- Inline markups (*, **, `, []{}, {}, ![]{}, !{}, \[](), ++, ~~, (()), ...)
|
|
50
|
+
- Inline markups (*, **, ///, `, []{}, {}, ![]{}, !{}, \[](), ++, ~~, (()), ...)
|
|
51
51
|
- Inline HTML tags (\<bdi>, \<bdo>)
|
|
52
52
|
- Autolink (https://host, user@host, @user)
|
|
53
53
|
- Shortmedia (!https://host/image.png, !https://youtu.be/...)
|
|
@@ -65,16 +65,16 @@ Secure markdown renderer working on browsers for user input data.
|
|
|
65
65
|
|
|
66
66
|
## Operator precedence
|
|
67
67
|
|
|
68
|
-
|P| Operators
|
|
69
|
-
|
|
70
|
-
|9| \n, \\\n
|
|
71
|
-
|
|
|
72
|
-
|
|
|
73
|
-
|
|
|
74
|
-
|
|
|
75
|
-
|
|
|
76
|
-
|
|
|
77
|
-
|
|
|
68
|
+
|P| Operators |
|
|
69
|
+
|-|------------------------------|
|
|
70
|
+
|9| \n, \\\n |
|
|
71
|
+
|6| ` |
|
|
72
|
+
|5| ${}$ |
|
|
73
|
+
|4| [% %] |
|
|
74
|
+
|3| \<tag>\</tag> |
|
|
75
|
+
|2| $, " |
|
|
76
|
+
|1| (), [], {}, (()), [[]], {{}} |
|
|
77
|
+
|0| *, **, ///, ==, ++, ~~ |
|
|
78
78
|
|
|
79
79
|
## Dependencies
|
|
80
80
|
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! securemark v0.
|
|
1
|
+
/*! securemark v0.284.0 https://github.com/falsandtru/securemark | (c) 2017, falsandtru | UNLICENSED License */
|
|
2
2
|
(function webpackUniversalModuleDefinition(root, factory) {
|
|
3
3
|
if(typeof exports === 'object' && typeof module === 'object')
|
|
4
4
|
module.exports = factory(require("Prism"), require("DOMPurify"));
|
|
@@ -2426,7 +2426,7 @@ exports.math = (0, combinator_1.lazy)(() => (0, combinator_1.validate)('$', (0,
|
|
|
2426
2426
|
'data-invalid-type': 'content',
|
|
2427
2427
|
'data-invalid-message': `"${source.match(forbiddenCommand)[0]}" command is forbidden`
|
|
2428
2428
|
}, source)], '']))));
|
|
2429
|
-
const bracket = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(0, 6 /* Recursion.terminal */, (0, combinator_1.surround)((0, source_1.str)('{'), (0, combinator_1.some)((0, combinator_1.union)([bracket, (0, combinator_1.some)(source_1.escsource, /^
|
|
2429
|
+
const bracket = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(0, 6 /* Recursion.terminal */, (0, combinator_1.surround)((0, source_1.str)('{'), (0, combinator_1.some)((0, combinator_1.union)([bracket, (0, combinator_1.some)(source_1.escsource, /^[{}$\n]/)])), (0, source_1.str)('}'), true)));
|
|
2430
2430
|
|
|
2431
2431
|
/***/ },
|
|
2432
2432
|
|
|
@@ -3917,6 +3917,28 @@ MultiHeap.min = Heap.min;
|
|
|
3917
3917
|
|
|
3918
3918
|
/***/ },
|
|
3919
3919
|
|
|
3920
|
+
/***/ 3744
|
|
3921
|
+
(__unused_webpack_module, exports, __webpack_require__) {
|
|
3922
|
+
|
|
3923
|
+
"use strict";
|
|
3924
|
+
|
|
3925
|
+
|
|
3926
|
+
Object.defineProperty(exports, "__esModule", ({
|
|
3927
|
+
value: true
|
|
3928
|
+
}));
|
|
3929
|
+
exports.italic = void 0;
|
|
3930
|
+
const combinator_1 = __webpack_require__(3484);
|
|
3931
|
+
const inline_1 = __webpack_require__(7973);
|
|
3932
|
+
const source_1 = __webpack_require__(8745);
|
|
3933
|
+
const visibility_1 = __webpack_require__(6364);
|
|
3934
|
+
const array_1 = __webpack_require__(6876);
|
|
3935
|
+
const dom_1 = __webpack_require__(394);
|
|
3936
|
+
// 斜体は単語に使うとかえって見づらく読み飛ばしやすくなるため使わないべきであり
|
|
3937
|
+
// ある程度の長さのある文に使うのが望ましい。
|
|
3938
|
+
exports.italic = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 4 /* Recursion.inline */, (0, combinator_1.surround)((0, source_1.str)('///', '/'), (0, combinator_1.precedence)(0, (0, visibility_1.startTight)((0, combinator_1.some)((0, combinator_1.union)([(0, combinator_1.some)(inline_1.inline, (0, visibility_1.blankWith)('///')), (0, combinator_1.open)((0, combinator_1.some)(inline_1.inline, '/'), exports.italic)])))), (0, source_1.str)('///'), false, ([, bs], rest) => [[(0, dom_1.html)('i', (0, dom_1.defrag)(bs))], rest], ([as, bs], rest) => [(0, array_1.unshift)(as, bs), rest])));
|
|
3939
|
+
|
|
3940
|
+
/***/ },
|
|
3941
|
+
|
|
3920
3942
|
/***/ 3770
|
|
3921
3943
|
(__unused_webpack_module, exports, __webpack_require__) {
|
|
3922
3944
|
|
|
@@ -4959,7 +4981,7 @@ const dom_1 = __webpack_require__(394);
|
|
|
4959
4981
|
exports.template = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, (0, combinator_1.surround)('{{', (0, combinator_1.precedence)(1, (0, combinator_1.some)((0, combinator_1.union)([bracket, source_1.escsource]), '}')), '}}', true, ([, ns = []], rest) => [[(0, dom_1.html)('span', {
|
|
4960
4982
|
class: 'template'
|
|
4961
4983
|
}, `{{${ns.join('')}}}`)], rest], undefined, 3 | 28 /* Backtrack.template */)));
|
|
4962
|
-
const bracket = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(0, 6 /* Recursion.terminal */, (0, combinator_1.union)([(0, combinator_1.surround)((0, source_1.str)('('), (0, combinator_1.some)((0, combinator_1.union)([bracket, source_1.escsource]), ')'), (0, source_1.str)(')'), true, undefined, ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest], 3 | 28 /* Backtrack.template */), (0, combinator_1.surround)((0, source_1.str)('['), (0, combinator_1.some)((0, combinator_1.union)([bracket, source_1.escsource]), ']'), (0, source_1.str)(']'), true, undefined, ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest], 3 | 28 /* Backtrack.template */), (0, combinator_1.surround)((0, source_1.str)('{'), (0, combinator_1.some)((0, combinator_1.union)([bracket, source_1.escsource]), '}'), (0, source_1.str)('}'), true, undefined, ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest], 3 | 28 /* Backtrack.template */), (0, combinator_1.surround)((0, source_1.str)('"'), (0, combinator_1.precedence)(2, (0, combinator_1.some)(source_1.escsource, /^"
|
|
4984
|
+
const bracket = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(0, 6 /* Recursion.terminal */, (0, combinator_1.union)([(0, combinator_1.surround)((0, source_1.str)('('), (0, combinator_1.some)((0, combinator_1.union)([bracket, source_1.escsource]), ')'), (0, source_1.str)(')'), true, undefined, ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest], 3 | 28 /* Backtrack.template */), (0, combinator_1.surround)((0, source_1.str)('['), (0, combinator_1.some)((0, combinator_1.union)([bracket, source_1.escsource]), ']'), (0, source_1.str)(']'), true, undefined, ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest], 3 | 28 /* Backtrack.template */), (0, combinator_1.surround)((0, source_1.str)('{'), (0, combinator_1.some)((0, combinator_1.union)([bracket, source_1.escsource]), '}'), (0, source_1.str)('}'), true, undefined, ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest], 3 | 28 /* Backtrack.template */), (0, combinator_1.surround)((0, source_1.str)('"'), (0, combinator_1.precedence)(2, (0, combinator_1.some)(source_1.escsource, /^["\n]/)), (0, source_1.str)('"'), true, undefined, undefined, 3 | 28 /* Backtrack.template */)])));
|
|
4963
4985
|
|
|
4964
4986
|
/***/ },
|
|
4965
4987
|
|
|
@@ -5435,6 +5457,7 @@ exports.text = (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, ({
|
|
|
5435
5457
|
case '\n':
|
|
5436
5458
|
return [[(0, dom_1.html)('br')], source.slice(1)];
|
|
5437
5459
|
case '*':
|
|
5460
|
+
case '/':
|
|
5438
5461
|
case '+':
|
|
5439
5462
|
case '~':
|
|
5440
5463
|
case '=':
|
|
@@ -7674,6 +7697,7 @@ const mark_1 = __webpack_require__(5381);
|
|
|
7674
7697
|
const emstrong_1 = __webpack_require__(365);
|
|
7675
7698
|
const strong_1 = __webpack_require__(6591);
|
|
7676
7699
|
const emphasis_1 = __webpack_require__(1354);
|
|
7700
|
+
const italic_1 = __webpack_require__(3744);
|
|
7677
7701
|
const math_1 = __webpack_require__(2962);
|
|
7678
7702
|
const code_1 = __webpack_require__(3481);
|
|
7679
7703
|
const htmlentity_1 = __webpack_require__(470);
|
|
@@ -7708,6 +7732,8 @@ exports.inline = (0, combinator_1.lazy)(() => (0, combinator_1.union)([input =>
|
|
|
7708
7732
|
return (0, deletion_1.deletion)(input);
|
|
7709
7733
|
case '==':
|
|
7710
7734
|
return (0, mark_1.mark)(input);
|
|
7735
|
+
case '//':
|
|
7736
|
+
return (0, italic_1.italic)(input);
|
|
7711
7737
|
}
|
|
7712
7738
|
switch (source[0]) {
|
|
7713
7739
|
case '[':
|
package/markdown.d.ts
CHANGED
|
@@ -661,6 +661,7 @@ export namespace MarkdownParser {
|
|
|
661
661
|
InlineParser.EmStrongParser,
|
|
662
662
|
InlineParser.StrongParser,
|
|
663
663
|
InlineParser.EmphasisParser,
|
|
664
|
+
InlineParser.ItalicParser,
|
|
664
665
|
InlineParser.MathParser,
|
|
665
666
|
InlineParser.CodeParser,
|
|
666
667
|
InlineParser.HTMLEntityParser,
|
|
@@ -1066,6 +1067,14 @@ export namespace MarkdownParser {
|
|
|
1066
1067
|
]>,
|
|
1067
1068
|
]> {
|
|
1068
1069
|
}
|
|
1070
|
+
export interface ItalicParser extends
|
|
1071
|
+
// ///abc///
|
|
1072
|
+
Inline<'italic'>,
|
|
1073
|
+
Parser<HTMLElement | string, Context, [
|
|
1074
|
+
InlineParser,
|
|
1075
|
+
ItalicParser,
|
|
1076
|
+
]> {
|
|
1077
|
+
}
|
|
1069
1078
|
export interface MathParser extends
|
|
1070
1079
|
// $expr$
|
|
1071
1080
|
// ${expr}$
|
package/package.json
CHANGED
|
@@ -16,7 +16,7 @@ describe('Unit: parser/inline/autolink/url', () => {
|
|
|
16
16
|
assert.deepStrictEqual(inspect(parser('Http://host')), [['Http'], '://host']);
|
|
17
17
|
//assert.deepStrictEqual(inspect(parser('http://[::ffff:0:0%1]')), [['<a class="invalid">http://[::ffff:0:0%1]</a>'], '']);
|
|
18
18
|
//assert.deepStrictEqual(inspect(parser('http://[::ffff:0:0/96]')), [['<a class="invalid">http://[::ffff:0:0/96]</a>'], '']);
|
|
19
|
-
assert.deepStrictEqual(inspect(parser(' http://
|
|
19
|
+
assert.deepStrictEqual(inspect(parser(' http://host')), undefined);
|
|
20
20
|
});
|
|
21
21
|
|
|
22
22
|
it('basic', () => {
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { italic } from './italic';
|
|
2
|
+
import { some } from '../../combinator';
|
|
3
|
+
import { inspect } from '../../debug.test';
|
|
4
|
+
|
|
5
|
+
describe('Unit: parser/inline/italic', () => {
|
|
6
|
+
describe('italic', () => {
|
|
7
|
+
const parser = (source: string) => some(italic)({ source, context: {} });
|
|
8
|
+
|
|
9
|
+
it('invalid', () => {
|
|
10
|
+
assert.deepStrictEqual(inspect(parser('///')), undefined);
|
|
11
|
+
assert.deepStrictEqual(inspect(parser('///a')), [['///', 'a'], '']);
|
|
12
|
+
assert.deepStrictEqual(inspect(parser('///a ///')), [['///', 'a'], ' ///']);
|
|
13
|
+
assert.deepStrictEqual(inspect(parser('///a ///')), [['///', 'a', ' '], ' ///']);
|
|
14
|
+
assert.deepStrictEqual(inspect(parser('///a\n///')), [['///', 'a'], '\n///']);
|
|
15
|
+
assert.deepStrictEqual(inspect(parser('///a\\ ///')), [['///', 'a'], '\\ ///']);
|
|
16
|
+
assert.deepStrictEqual(inspect(parser('///a\\\n///')), [['///', 'a'], '\\\n///']);
|
|
17
|
+
assert.deepStrictEqual(inspect(parser('///a/b')), [['///', 'a', '/', 'b'], '']);
|
|
18
|
+
assert.deepStrictEqual(inspect(parser('///a//b')), [['///', 'a', '//', 'b'], '']);
|
|
19
|
+
assert.deepStrictEqual(inspect(parser('///a*b///')), [['///', 'a', '*', 'b', '///'], '']);
|
|
20
|
+
assert.deepStrictEqual(inspect(parser('/// ///')), undefined);
|
|
21
|
+
assert.deepStrictEqual(inspect(parser('/// a///')), undefined);
|
|
22
|
+
assert.deepStrictEqual(inspect(parser('/// a ///')), undefined);
|
|
23
|
+
assert.deepStrictEqual(inspect(parser('///\n///')), undefined);
|
|
24
|
+
assert.deepStrictEqual(inspect(parser('///\na///')), undefined);
|
|
25
|
+
assert.deepStrictEqual(inspect(parser('///\\ a///')), undefined);
|
|
26
|
+
assert.deepStrictEqual(inspect(parser('///\\\na///')), undefined);
|
|
27
|
+
assert.deepStrictEqual(inspect(parser('///<wbr>a///')), undefined);
|
|
28
|
+
assert.deepStrictEqual(inspect(parser('////a////')), undefined);
|
|
29
|
+
assert.deepStrictEqual(inspect(parser('/////a/////')), undefined);
|
|
30
|
+
assert.deepStrictEqual(inspect(parser(' ///a///')), undefined);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it('basic', () => {
|
|
34
|
+
assert.deepStrictEqual(inspect(parser('///a///')), [['<i>a</i>'], '']);
|
|
35
|
+
assert.deepStrictEqual(inspect(parser('///ab///')), [['<i>ab</i>'], '']);
|
|
36
|
+
assert.deepStrictEqual(inspect(parser('///a////')), [['<i>a</i>'], '/']);
|
|
37
|
+
assert.deepStrictEqual(inspect(parser('///a\nb///')), [['<i>a<br>b</i>'], '']);
|
|
38
|
+
assert.deepStrictEqual(inspect(parser('///a\\\nb///')), [['<i>a<br>b</i>'], '']);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it('nest', () => {
|
|
42
|
+
assert.deepStrictEqual(inspect(parser('///a ///b//////')), [['<i>a <i>b</i></i>'], '']);
|
|
43
|
+
assert.deepStrictEqual(inspect(parser('///a\\ ///b//////')), [['<i>a <i>b</i></i>'], '']);
|
|
44
|
+
assert.deepStrictEqual(inspect(parser('///a	///b//////')), [['<i>a\t<i>b</i></i>'], '']);
|
|
45
|
+
assert.deepStrictEqual(inspect(parser('///a<wbr>///b//////')), [['<i>a<wbr><i>b</i></i>'], '']);
|
|
46
|
+
assert.deepStrictEqual(inspect(parser('///`a`///')), [['<i><code data-src="`a`">a</code></i>'], '']);
|
|
47
|
+
assert.deepStrictEqual(inspect(parser('///(///a///)///')), [['<i><span class="paren">(<i>a</i>)</span></i>'], '']);
|
|
48
|
+
assert.deepStrictEqual(inspect(parser('///{http://host/}///')), [['<i><a class="url" href="http://host/" target="_blank">http://host/</a></i>'], '']);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ItalicParser } from '../inline';
|
|
2
|
+
import { Recursion } from '../context';
|
|
3
|
+
import { union, some, creation, precedence, surround, open, lazy } from '../../combinator';
|
|
4
|
+
import { inline } from '../inline';
|
|
5
|
+
import { str } from '../source';
|
|
6
|
+
import { startTight, blankWith } from '../visibility';
|
|
7
|
+
import { unshift } from 'spica/array';
|
|
8
|
+
import { html, defrag } from 'typed-dom/dom';
|
|
9
|
+
|
|
10
|
+
// 斜体は単語に使うとかえって見づらく読み飛ばしやすくなるため使わないべきであり
|
|
11
|
+
// ある程度の長さのある文に使うのが望ましい。
|
|
12
|
+
export const italic: ItalicParser = lazy(() => creation(1, Recursion.inline, surround(
|
|
13
|
+
str('///', '/'),
|
|
14
|
+
precedence(0,
|
|
15
|
+
startTight(some(union([
|
|
16
|
+
some(inline, blankWith('///')),
|
|
17
|
+
open(some(inline, '/'), italic),
|
|
18
|
+
])))),
|
|
19
|
+
str('///'), false,
|
|
20
|
+
([, bs], rest) => [[html('i', defrag(bs))], rest],
|
|
21
|
+
([as, bs], rest) => [unshift(as, bs), rest])));
|
|
@@ -20,6 +20,6 @@ const bracket: TemplateParser.BracketParser = lazy(() => creation(0, Recursion.t
|
|
|
20
20
|
undefined, ([as, bs = []], rest) => [unshift(as, bs), rest], 3 | Backtrack.template),
|
|
21
21
|
surround(str('{'), some(union([bracket, escsource]), '}'), str('}'), true,
|
|
22
22
|
undefined, ([as, bs = []], rest) => [unshift(as, bs), rest], 3 | Backtrack.template),
|
|
23
|
-
surround(str('"'), precedence(2, some(escsource, /^"
|
|
23
|
+
surround(str('"'), precedence(2, some(escsource, /^["\n]/)), str('"'), true,
|
|
24
24
|
undefined, undefined, 3 | Backtrack.template),
|
|
25
25
|
])));
|
|
@@ -96,6 +96,7 @@ describe('Unit: parser/inline', () => {
|
|
|
96
96
|
assert.deepStrictEqual(inspect(parser('***a****')), [['<em><strong>a</strong></em>', '*'], '']);
|
|
97
97
|
assert.deepStrictEqual(inspect(parser('****a***')), [['****', 'a', '***'], '']);
|
|
98
98
|
assert.deepStrictEqual(inspect(parser('****a****')), [['****', 'a', '****'], '']);
|
|
99
|
+
assert.deepStrictEqual(inspect(parser('//////a//////')), [['//////', 'a', '//////'], '']);
|
|
99
100
|
assert.deepStrictEqual(inspect(parser('*(*a*)*')), [['<em><span class="paren">(<em>a</em>)</span></em>'], '']);
|
|
100
101
|
assert.deepStrictEqual(inspect(parser('**(**a**)**')), [['<strong><span class="paren">(<strong>a</strong>)</span></strong>'], '']);
|
|
101
102
|
assert.deepStrictEqual(inspect(parser('*++ ++*')), [['<em><ins> </ins></em>'], '']);
|
|
@@ -175,13 +176,13 @@ describe('Unit: parser/inline', () => {
|
|
|
175
176
|
assert.deepStrictEqual(inspect(parser('"[% "*"* %]')), [['"', '<span class="remark"><input type="checkbox"><span>[% "*"* %]</span></span>'], '']);
|
|
176
177
|
assert.deepStrictEqual(inspect(parser('"{{""}}')), [['"', '{', '{', '"', '"', '}', '}'], '']);
|
|
177
178
|
assert.deepStrictEqual(inspect(parser('[#http://host/(<bdi>)]</bdi>')), [['<a class="index" href="#index::http://host/(<bdi>)">http://host/(<bdi>)</a>', '<', '/', 'bdi', '>'], '']);
|
|
178
|
-
assert.deepStrictEqual(inspect(parser('[#@a/http://host/(<bdi>)]</bdi>')), [[ '[', '#@a/http', ':', '
|
|
179
|
+
assert.deepStrictEqual(inspect(parser('[#@a/http://host/(<bdi>)]</bdi>')), [[ '[', '#@a/http', ':', '//', 'host', '/', '(', '<bdi>)]</bdi>' ], '']);
|
|
179
180
|
});
|
|
180
181
|
|
|
181
182
|
it('uri', () => {
|
|
182
183
|
assert.deepStrictEqual(inspect(parser('\nhttp://host')), [['<br>', '<a class="url" href="http://host" target="_blank">http://host</a>'], '']);
|
|
183
|
-
assert.deepStrictEqual(inspect(parser('0http://host')), [['0http', ':', '
|
|
184
|
-
assert.deepStrictEqual(inspect(parser('0aAhttp://host')), [['0aAhttp', ':', '
|
|
184
|
+
assert.deepStrictEqual(inspect(parser('0http://host')), [['0http', ':', '//', 'host'], '']);
|
|
185
|
+
assert.deepStrictEqual(inspect(parser('0aAhttp://host')), [['0aAhttp', ':', '//', 'host'], '']);
|
|
185
186
|
assert.deepStrictEqual(inspect(parser('?http://host')), [['?', '<a class="url" href="http://host" target="_blank">http://host</a>'], '']);
|
|
186
187
|
assert.deepStrictEqual(inspect(parser('0!http://host')), [['0', '!', '<a class="url" href="http://host" target="_blank">http://host</a>'], '']);
|
|
187
188
|
assert.deepStrictEqual(inspect(parser('0?http://host')), [['0', '?', '<a class="url" href="http://host" target="_blank">http://host</a>'], '']);
|
package/src/parser/inline.ts
CHANGED
|
@@ -14,6 +14,7 @@ import { mark } from './inline/mark';
|
|
|
14
14
|
import { emstrong } from './inline/emstrong';
|
|
15
15
|
import { strong } from './inline/strong';
|
|
16
16
|
import { emphasis } from './inline/emphasis';
|
|
17
|
+
import { italic } from './inline/italic';
|
|
17
18
|
import { math } from './inline/math';
|
|
18
19
|
import { code } from './inline/code';
|
|
19
20
|
import { htmlentity } from './inline/htmlentity';
|
|
@@ -36,6 +37,7 @@ export import MarkParser = InlineParser.MarkParser;
|
|
|
36
37
|
export import EmStrongParser = InlineParser.EmStrongParser;
|
|
37
38
|
export import StrongParser = InlineParser.StrongParser;
|
|
38
39
|
export import EmphasisParser = InlineParser.EmphasisParser;
|
|
40
|
+
export import ItalicParser = InlineParser.ItalicParser;
|
|
39
41
|
export import MathParser = InlineParser.MathParser;
|
|
40
42
|
export import CodeParser = InlineParser.CodeParser;
|
|
41
43
|
export import MediaParser = InlineParser.MediaParser;
|
|
@@ -75,6 +77,8 @@ export const inline: InlineParser = lazy(() => union([
|
|
|
75
77
|
return deletion(input);
|
|
76
78
|
case '==':
|
|
77
79
|
return mark(input);
|
|
80
|
+
case '//':
|
|
81
|
+
return italic(input);
|
|
78
82
|
}
|
|
79
83
|
switch (source[0]) {
|
|
80
84
|
case '[':
|