diff options
Diffstat (limited to 'markup')
-rw-r--r-- | markup/goldmark/convert.go | 13 | ||||
-rw-r--r-- | markup/goldmark/convert_test.go | 73 | ||||
-rw-r--r-- | markup/goldmark/goldmark_config/config.go | 17 |
3 files changed, 103 insertions, 0 deletions
diff --git a/markup/goldmark/convert.go b/markup/goldmark/convert.go index 20bbfc210..fa2ab548b 100644 --- a/markup/goldmark/convert.go +++ b/markup/goldmark/convert.go @@ -136,6 +136,19 @@ func newMarkdown(pcfg converter.ProviderConfig) goldmark.Markdown { extensions = append(extensions, extension.Footnote) } + if cfg.Extensions.CJK.Enable { + opts := []extension.CJKOption{} + if cfg.Extensions.CJK.EastAsianLineBreaks { + opts = append(opts, extension.WithEastAsianLineBreaks()) + } + + if cfg.Extensions.CJK.EscapedSpace { + opts = append(opts, extension.WithEscapedSpace()) + } + c := extension.NewCJK(opts...) + extensions = append(extensions, c) + } + if cfg.Parser.AutoHeadingID { parserOptions = append(parserOptions, parser.WithAutoHeadingID()) } diff --git a/markup/goldmark/convert_test.go b/markup/goldmark/convert_test.go index a2f7b9597..ed791448b 100644 --- a/markup/goldmark/convert_test.go +++ b/markup/goldmark/convert_test.go @@ -626,3 +626,76 @@ unsafe = false return testconfig.GetTestConfig(nil, cfg) } + +func TestConvertCJK(t *testing.T) { + c := qt.New(t) + + content := ` +私は太郎です。 +プログラミングが好きです。\ 運動が苦手です。 +` + + confStr := ` +[markup] +[markup.goldmark] +` + + cfg := config.FromTOMLConfigString(confStr) + conf := testconfig.GetTestConfig(nil, cfg) + + b := convert(c, conf, content) + got := string(b.Bytes()) + + c.Assert(got, qt.Contains, "<p>私は太郎です。\nプログラミングが好きです。\\ 運動が苦手です。</p>\n") +} + +func TestConvertCJKWithExtensionWithEastAsianLineBreaksOption(t *testing.T) { + c := qt.New(t) + + content := ` +私は太郎です。 +プログラミングが好きで、 +運動が苦手です。 +` + + confStr := ` +[markup] +[markup.goldmark] +[markup.goldmark.extensions.CJK] +enable=true +eastAsianLineBreaks=true +` + + cfg := config.FromTOMLConfigString(confStr) + conf := testconfig.GetTestConfig(nil, cfg) + + b := convert(c, conf, content) + got := string(b.Bytes()) + + c.Assert(got, qt.Contains, "<p>私は太郎です。プログラミングが好きで、運動が苦手です。</p>\n") +} + +func TestConvertCJKWithExtensionWithEscapedSpaceOption(t *testing.T) { + c := qt.New(t) + + content := ` +私は太郎です。 +プログラミングが好きです。\ 運動が苦手です。 +` + + confStr := ` +[markup] +[markup.goldmark] +[markup.goldmark.extensions.CJK] +enable=true +escapedSpace=true +` + + cfg := config.FromTOMLConfigString(confStr) + conf := testconfig.GetTestConfig(nil, cfg) + + b := convert(c, conf, content) + got := string(b.Bytes()) + + c.Assert(got, qt.Contains, "<p>私は太郎です。\nプログラミングが好きです。運動が苦手です。</p>\n") +} diff --git a/markup/goldmark/goldmark_config/config.go b/markup/goldmark/goldmark_config/config.go index a6fe0e624..dfbcc5a90 100644 --- a/markup/goldmark/goldmark_config/config.go +++ b/markup/goldmark/goldmark_config/config.go @@ -43,6 +43,11 @@ var Default = Config{ Linkify: true, LinkifyProtocol: "https", TaskList: true, + CJK: CJK{ + Enable: false, + EastAsianLineBreaks: false, + EscapedSpace: false, + }, }, Renderer: Renderer{ Unsafe: false, @@ -76,6 +81,7 @@ type Extensions struct { Linkify bool LinkifyProtocol string TaskList bool + CJK CJK } // Typographer holds typographer configuration. @@ -105,6 +111,17 @@ type Typographer struct { Apostrophe string } +type CJK struct { + // Whether to enable CJK support. + Enable bool + + // Whether softline breaks between east asian wide characters should be ignored. + EastAsianLineBreaks bool + + // Whether a '\' escaped half-space(0x20) should not be rendered. + EscapedSpace bool +} + type Renderer struct { // Whether softline breaks should be rendered as '<br>' HardWraps bool |