Skip to content

Commit d54844a

Browse files
allow custom extensions in markdown-tool
1 parent d37e93e commit d54844a

File tree

3 files changed

+35
-8
lines changed

3 files changed

+35
-8
lines changed

Sources/markdown-tool/Commands/DumpTreeCommand.swift

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,27 @@ extension MarkdownCommand {
2828
@Flag<Bool>(inversion: .prefixedNo, exclusivity: .chooseLast, help: "Parse block directives")
2929
var parseBlockDirectives: Bool = false
3030

31+
@Option(help: "Additional Commonmark extensions to enable")
32+
var `extension`: [String] = []
33+
34+
@Flag<Bool>(help: "Don't enable the default Commonmark extensions (\(ConvertOptions.defaultCommonmarkExtensions.joined(separator: ", ")))")
35+
var noDefaultExtensions: Bool = false
36+
3137
func run() throws {
3238
let parseOptions: ParseOptions = parseBlockDirectives ? [.parseBlockDirectives] : []
39+
var commonmarkExts = noDefaultExtensions ? [] : ConvertOptions.defaultCommonmarkExtensions
40+
commonmarkExts.append(contentsOf: `extension`)
41+
let convertOptions = ConvertOptions.init(
42+
parseOptions: parseOptions,
43+
commonmarkOptions: ConvertOptions.defaultCommonmarkOptions,
44+
extensions: commonmarkExts
45+
)
46+
3347
let document: Document
3448
if let inputFilePath = inputFilePath {
35-
(_, document) = try MarkdownCommand.parseFile(at: inputFilePath, options: parseOptions)
49+
(_, document) = try MarkdownCommand.parseFile(at: inputFilePath, options: convertOptions)
3650
} else {
37-
(_, document) = try MarkdownCommand.parseStandardInput(options: parseOptions)
51+
(_, document) = try MarkdownCommand.parseStandardInput(options: convertOptions)
3852
}
3953
var dumpOptions = MarkupDumpOptions()
4054
if sourceLocations {

Sources/markdown-tool/Commands/FormatCommand.swift

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,12 @@ extension MarkdownCommand {
123123
@Argument(help: "Input file (default: standard input)")
124124
var inputFilePath: String?
125125

126+
@Option(help: "Additional Commonmark extensions to enable")
127+
var `extension`: [String] = []
128+
129+
@Flag<Bool>(help: "Don't enable the default Commonmark extensions (\(ConvertOptions.defaultCommonmarkExtensions.joined(separator: ", ")))")
130+
var noDefaultExtensions: Bool = false
131+
126132
/// Search for the an executable with a given base name.
127133
func findExecutable(named name: String) throws -> String? {
128134
let which = Process()
@@ -196,12 +202,19 @@ extension MarkdownCommand {
196202
if parseSymbolLinks {
197203
parseOptions.insert(.parseSymbolLinks)
198204
}
205+
var commonmarkExts = noDefaultExtensions ? [] : ConvertOptions.defaultCommonmarkExtensions
206+
commonmarkExts.append(contentsOf: `extension`)
207+
let convertOptions = ConvertOptions.init(
208+
parseOptions: parseOptions,
209+
commonmarkOptions: ConvertOptions.defaultCommonmarkOptions,
210+
extensions: commonmarkExts
211+
)
199212
let source: String
200213
let document: Document
201214
if let inputFilePath = inputFilePath {
202-
(source, document) = try MarkdownCommand.parseFile(at: inputFilePath, options: parseOptions)
215+
(source, document) = try MarkdownCommand.parseFile(at: inputFilePath, options: convertOptions)
203216
} else {
204-
(source, document) = try MarkdownCommand.parseStandardInput(options: parseOptions)
217+
(source, document) = try MarkdownCommand.parseStandardInput(options: convertOptions)
205218
}
206219

207220
guard let emphasisMarker = MarkupFormatter.Options.EmphasisMarker(argument: emphasisMarker) else {

Sources/markdown-tool/main.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@ struct MarkdownCommand: ParsableCommand {
2929
Format.self,
3030
])
3131

32-
static func parseFile(at path: String, options: ParseOptions) throws -> (source: String, parsed: Document) {
32+
static func parseFile(at path: String, options: ConvertOptions) throws -> (source: String, parsed: Document) {
3333
let data = try Data(contentsOf: URL(fileURLWithPath: path))
3434
guard let inputString = String(data: data, encoding: .utf8) else {
3535
throw Error.couldntDecodeInputAsUTF8
3636
}
37-
return (inputString, Document(parsing: inputString, options: options))
37+
return (inputString, Document(parsing: inputString, convertOptions: options))
3838
}
3939

40-
static func parseStandardInput(options: ParseOptions) throws -> (source: String, parsed: Document) {
40+
static func parseStandardInput(options: ConvertOptions) throws -> (source: String, parsed: Document) {
4141
let stdinData: Data
4242
if #available(macOS 10.15.4, *) {
4343
stdinData = try FileHandle.standardInput.readToEnd() ?? Data()
@@ -47,7 +47,7 @@ struct MarkdownCommand: ParsableCommand {
4747
guard let stdinString = String(data: stdinData, encoding: .utf8) else {
4848
throw Error.couldntDecodeInputAsUTF8
4949
}
50-
return (stdinString, Document(parsing: stdinString, options: options))
50+
return (stdinString, Document(parsing: stdinString, convertOptions: options))
5151
}
5252
}
5353

0 commit comments

Comments
 (0)