Closes #169. Add YAML Front Matter support to Markdown beautification

This commit is contained in:
Glavin Wiechert 2015-01-02 00:53:55 -04:00
parent 20206a654c
commit e7a980045d
9 changed files with 176 additions and 74 deletions

View File

@ -1,3 +1,7 @@
---
{}
---
- item
- item
- item

View File

@ -1,7 +1,23 @@
---
title: This is a title!
title: "This is a title!"
name: Derek Worthen
age: young
contact: null
email: "email@domain.com"
address: some location
pets:
- cat
- dog
- bat
match: !<tag:yaml.org,2002:js/regexp> /pattern/gmi
run: !<tag:yaml.org,2002:js/function> "function () {\n \n \n \n\n\n}"
---
stuff
- item
- item
- item
1. one
2. two
3. three
more stuff

View File

@ -1,7 +0,0 @@
---
title: This is a title!
---
stuff
more stuff

View File

@ -0,0 +1,27 @@
---
title: This is a title!
name: Derek Worthen
age: young
contact:
email: email@domain.com
address: some location
pets:
- cat
- dog
- bat
match: !!js/regexp /pattern/gim
run: !!js/function function() { }
---
- item
- item
- item
1. one
2. two
2. three

View File

@ -81,7 +81,8 @@ beautify = ({onSave}) ->
# Do nothing, is undefined
else if text instanceof Error
showError(text)
else if oldText isnt text
else if typeof text is "string"
if oldText isnt text
# console.log "Replacing current editor's text with new text"
posArray = getCursors(editor)
# console.log "posArray: #{posArray}"
@ -105,6 +106,8 @@ beautify = ({onSave}) ->
editor.setScrollTop origScrollTop
return
), 0
else
@showError(new Error("Unsupported beautification result '#{text}'."))
# else
# console.log "Already Beautiful!"
@loadingView.hide()

View File

@ -23,12 +23,19 @@ module.exports = (getCmd, isStdout) ->
temp.cleanup()
# Delete the output path
fs.unlink outputPath, (err) ->
console.log "Deleting output file", err if err
# console.log "Deleting output file", err if err
return
return
# Process the command
processCmd = (cmd) ->
processCmd = (cmd, optCallback) ->
if optCallback? and typeof optCallback is "function"
# console.log('Optional Callback found')
cb = callback # Save callback for later
callback = (output) -> # Wrap callback (cb) with optCallback
# console.log('Callback called!', output)
optCallback(output, cb)
if typeof cmd is "string"
config = env: process.env

View File

@ -1,18 +1,68 @@
###
Requires http: //johnmacfarlane.net/pandoc/
###
getCmd = (inputPath, outputPath, options) ->
yamlFront = null
fs = null
yaml = null
allowUnsafeNewFunction = null
getCmd = (inputPath, outputPath, options, cb) ->
optionsStr = " --read markdown --write markdown --output \"" + outputPath + "\" \"" + inputPath + "\""
pandocPath = options.markdown_beautifier_path # jshint ignore: line
if pandocPath
yamlFrontMatter = options.yaml_front_matter # jshint ignore: line
cmd = ""
if pandocPath?
# Use absolute path
pandocPath + optionsStr
cmd = pandocPath + optionsStr
else
# Use command available in $PATH
"pandoc" + optionsStr
cmd = "pandoc" + optionsStr
if yamlFrontMatter?
# console.log("YAML Front Matter!")
fs ?= require "fs"
fs.readFile(inputPath, (err, contents) ->
# console.log('readFile', err, contents)
return cb(err) if err
# Parse with YAML front Matter
yamlFront ?= require "yaml-front-matter"
# console.log('Parse YAML Front Matter')
allowUnsafeNewFunction ?= require("loophole").allowUnsafeNewFunction
results = null
try
allowUnsafeNewFunction ->
results = yamlFront.loadFront(contents)
catch e
return cb(e)
newContents = results.__content # jshint ignore: line
delete results.__content # jshint ignore: line
# console.log('newContents', newContents)
# Write out new contents to input file
fs.writeFile(inputPath, newContents, (err) ->
# console.log('writeFile', err)
return cb(err) if err
# Completetion callback to combine YAML Front Matter and Markdown
completionCallback = (output, callback) ->
# console.log('Completion callback!')
try
yaml ?= require "js-yaml"
# Pre-pend YAML Front Matter to top of Markdown output
front = yaml.dump(results)
output = "---\n#{front}---\n\n#{output}"
# console.log('final output!', output)
return callback(output)
catch e
return callback(e)
# Run it all together now!
# console.log('Run!')
return cb(cmd, completionCallback)
)
)
return # Use Callback
else
return cmd # Return cmd synchronously
"use strict"
cliBeautify = require("./cli-beautify")
module.exports = cliBeautify(getCmd)

View File

@ -98,6 +98,7 @@ module.exports =
# Markdown
markdown_pandoc_path: ""
markdown_yaml_front_matter: true
# Perl
perl_perltidy_path: "perltidy"

View File

@ -40,6 +40,38 @@
"url": "https://github.com/vadirn"
}
],
"engines": {
"atom": ">0.50.0"
},
"dependencies": {
"analytics-node": "^1.0.2",
"async": "^0.9.0",
"atom-message-panel": "^1.1.1",
"coffee-formatter": "^0.1.1",
"editorconfig": "^0.11.4",
"emissary": "^1.0.0",
"extend": "^1.2.1",
"js-beautify": "^1.5.4",
"js-yaml": "^3.0.2",
"lodash": "2.4.1",
"loophole": "^1.0.0",
"node-dir": "^0.1.6",
"node-uuid": "^1.4.1",
"prettydiff": "^1.6.13",
"space-pen": "^4.3.0",
"strip-json-comments": "^0.1.3",
"temp": "^0.8.0",
"typescript-formatter": "~0.1.4",
"yaml-front-matter": "^3.2.3"
},
"activationEvents": [
"beautify",
"beautify:beautify-editor",
"beautify:beautify-file",
"beautify:beautify-directory",
"core:save",
"core:save-as"
],
"keywords": [
"atom",
"beautify",
@ -78,36 +110,5 @@
"d",
"erb",
"editorconfig"
],
"engines": {
"atom": ">0.50.0"
},
"dependencies": {
"analytics-node": "^1.0.2",
"async": "^0.9.0",
"atom-message-panel": "^1.1.1",
"coffee-formatter": "^0.1.1",
"editorconfig": "^0.11.4",
"emissary": "^1.0.0",
"extend": "^1.2.1",
"js-beautify": "^1.5.4",
"js-yaml": "^3.0.2",
"lodash": "2.4.1",
"loophole": "^1.0.0",
"node-dir": "^0.1.6",
"node-uuid": "^1.4.1",
"prettydiff": "^1.6.13",
"space-pen": "^4.3.0",
"strip-json-comments": "^0.1.3",
"temp": "^0.8.0",
"typescript-formatter": "~0.1.4"
},
"activationEvents": [
"beautify",
"beautify:beautify-editor",
"beautify:beautify-file",
"beautify:beautify-directory",
"core:save",
"core:save-as"
]
}