summaryrefslogtreecommitdiffstats
path: root/markup/goldmark/goldmark_config/config.go
blob: c22852b29af26b387239adda65cbb149b166d360 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
// Copyright 2019 The Hugo Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package goldmark_config holds Goldmark related configuration.
package goldmark_config

const (
	AutoHeadingIDTypeGitHub      = "github"
	AutoHeadingIDTypeGitHubAscii = "github-ascii"
	AutoHeadingIDTypeBlackfriday = "blackfriday"
)

// Default holds the default Goldmark configuration.
var Default = Config{
	Extensions: Extensions{
		Typographer: Typographer{
			Disable:          false,
			LeftSingleQuote:  "‘",
			RightSingleQuote: "’",
			LeftDoubleQuote:  "“",
			RightDoubleQuote: "”",
			EnDash:           "–",
			EmDash:           "—",
			Ellipsis:         "…",
			LeftAngleQuote:   "«",
			RightAngleQuote:  "»",
			Apostrophe:       "’",
		},
		Footnote:        true,
		DefinitionList:  true,
		Table:           true,
		Strikethrough:   true,
		Linkify:         true,
		LinkifyProtocol: "https",
		TaskList:        true,
		CJK: CJK{
			Enable:                   false,
			EastAsianLineBreaks:      false,
			EastAsianLineBreaksStyle: "simple",
			EscapedSpace:             false,
		},
		Passthrough: Passthrough{
			Enable: false,
			Delimiters: DelimitersConfig{
				Inline: [][]string{},
				Block:  [][]string{},
			},
		},
	},
	Renderer: Renderer{
		Unsafe: false,
	},
	Parser: Parser{
		AutoHeadingID:                      true,
		AutoHeadingIDType:                  AutoHeadingIDTypeGitHub,
		WrapStandAloneImageWithinParagraph: true,
		Attribute: ParserAttribute{
			Title: true,
			Block: false,
		},
	},
}

// Config configures Goldmark.
type Config struct {
	Renderer               Renderer
	Parser                 Parser
	Extensions             Extensions
	DuplicateResourceFiles bool
	RenderHooks            RenderHooks
}

// RenderHooks contains configuration for Goldmark render hooks.
type RenderHooks struct {
	Image ImageRenderHook
	Link  LinkRenderHook
}

// ImageRenderHook contains configuration for the image render hook.
type ImageRenderHook struct {
	// Enable the default image render hook.
	// We need to know if it is set or not, hence the pointer.
	EnableDefault *bool
}

func (h ImageRenderHook) IsEnableDefault() bool {
	return h.EnableDefault != nil && *h.EnableDefault
}

// LinkRenderHook contains configuration for the link render hook.
type LinkRenderHook struct {
	// Disable the default image render hook.
	// We need to know if it is set or not, hence the pointer.
	EnableDefault *bool
}

func (h LinkRenderHook) IsEnableDefault() bool {
	return h.EnableDefault != nil && *h.EnableDefault
}

type Extensions struct {
	Typographer    Typographer
	Footnote       bool
	DefinitionList bool
	Passthrough    Passthrough

	// GitHub flavored markdown
	Table           bool
	Strikethrough   bool
	Linkify         bool
	LinkifyProtocol string
	TaskList        bool
	CJK             CJK
}

// Typographer holds typographer configuration.
type Typographer struct {
	// Whether to disable typographer.
	Disable bool

	// Value used for left single quote.
	LeftSingleQuote string
	// Value used for right single quote.
	RightSingleQuote string
	// Value used for left double quote.
	LeftDoubleQuote string
	// Value used for right double quote.
	RightDoubleQuote string
	// Value used for en dash.
	EnDash string
	// Value used for em dash.
	EmDash string
	// Value used for ellipsis.
	Ellipsis string
	// Value used for left angle quote.
	LeftAngleQuote string
	// Value used for right angle quote.
	RightAngleQuote string
	// Value used for apostrophe.
	Apostrophe string
}

// Passthrough hold passthrough configuration.
// github.com/hugoio/hugo-goldmark-extensions/passthrough
type Passthrough struct {
	// Whether to enable the extension
	Enable bool

	// The delimiters to use for inline and block passthroughs.
	Delimiters DelimitersConfig
}

type DelimitersConfig struct {
	// The delimiters to use for inline passthroughs. Each entry in the list
	// is a size-2 list of strings, where the first string is the opening delimiter
	// and the second string is the closing delimiter, e.g.,
	//
	// [["$", "$"], ["\\(", "\\)"]]
	Inline [][]string

	// The delimiters to use for block passthroughs. Same format as Inline.
	Block [][]string
}

type CJK struct {
	// Whether to enable CJK support.
	Enable bool

	// Whether softline breaks between east asian wide characters should be ignored.
	EastAsianLineBreaks bool

	// Styles of Line Breaking of EastAsianLineBreaks: "simple" or "css3draft"
	EastAsianLineBreaksStyle string

	// 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

	// XHTML instead of HTML5.
	XHTML bool

	// Allow raw HTML etc.
	Unsafe bool
}

type Parser struct {
	// Enables custom heading ids and
	// auto generated heading ids.
	AutoHeadingID bool

	// The strategy to use when generating heading IDs.
	// Available options are "github", "github-ascii".
	// Default is "github", which will create GitHub-compatible anchor names.
	AutoHeadingIDType string

	// Enables custom attributes.
	Attribute ParserAttribute

	// Whether to wrap stand-alone images within a paragraph or not.
	WrapStandAloneImageWithinParagraph bool
}

type ParserAttribute struct {
	// Enables custom attributes for titles.
	Title bool
	// Enables custom attributes for blocks.
	Block bool
}