From f187a55653e04cf80434c9ec8c126bc8e6b4cb51 Mon Sep 17 00:00:00 2001 From: Leif Andersen Date: Thu, 7 Jan 2016 13:18:41 -0500 Subject: [PATCH] Add #lang markdown --- .gitignore | 2 ++ markdown/base.rkt | 17 +++++++++++++++++ markdown/lang.rkt | 6 ++++++ markdown/lang/reader.rkt | 11 +++++++++++ markdown/main.rkt | 19 ++++++++++--------- markdown/parse.rkt | 6 +++--- 6 files changed, 49 insertions(+), 12 deletions(-) create mode 100644 markdown/base.rkt create mode 100644 markdown/lang.rkt create mode 100644 markdown/lang/reader.rkt diff --git a/.gitignore b/.gitignore index 3281a0c..6b060f0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ compiled/ .DS_Store +*~ +\#* diff --git a/markdown/base.rkt b/markdown/base.rkt new file mode 100644 index 0000000..8e80290 --- /dev/null +++ b/markdown/base.rkt @@ -0,0 +1,17 @@ +#lang racket + +(require "parse.rkt" + "display-xexpr.rkt" + "toc.rkt") + +(provide (all-from-out "parse.rkt") + (all-from-out "display-xexpr.rkt") + (all-from-out "toc.rkt") + markdown->html) + +(define (markdown->html md) + (with-output-to-string + (lambda () + (display "") + (display-xexpr `(html (head () (meta ([charset "utf-8"]))) + (body () ,@md)))))) diff --git a/markdown/lang.rkt b/markdown/lang.rkt new file mode 100644 index 0000000..fef2650 --- /dev/null +++ b/markdown/lang.rkt @@ -0,0 +1,6 @@ +#lang racket + +(require "main.rkt") + +(provide (all-from-out "main.rkt") + (rename-out [module-begin/markdown #%module-begin])) diff --git a/markdown/lang/reader.rkt b/markdown/lang/reader.rkt new file mode 100644 index 0000000..2a92abf --- /dev/null +++ b/markdown/lang/reader.rkt @@ -0,0 +1,11 @@ +#lang s-exp syntax/module-reader +markdown/lang + +#:read read-markdown +#:read-syntax read-markdown-syntax +#:whole-body-readers? #t + +(require "../parse.rkt") + +(define (read-markdown-syntax source in) + (datum->syntax #f (read-markdown in))) diff --git a/markdown/main.rkt b/markdown/main.rkt index a2ec1c9..0649fba 100644 --- a/markdown/main.rkt +++ b/markdown/main.rkt @@ -1,15 +1,16 @@ #lang racket -(require "parse.rkt" - "display-xexpr.rkt" - "toc.rkt") +(require "base.rkt" + (for-syntax racket + "base.rkt")) -(provide (all-from-out "parse.rkt") - (all-from-out "display-xexpr.rkt") - (all-from-out "toc.rkt")) +(provide (all-from-out "base.rkt") + module-begin/markdown) + +(define-syntax-rule (module-begin/markdown body ...) + (#%plain-module-begin + (display (markdown->html '(body ...))))) ;; For use as command-line pipe. (module+ main - (display "") - (display-xexpr `(html (head () (meta ([charset "utf-8"]))) - (body () ,@(read-markdown))))) + (display (markdown->html (read-markdown)))) diff --git a/markdown/parse.rkt b/markdown/parse.rkt index 60d29ee..a51a7cd 100644 --- a/markdown/parse.rkt +++ b/markdown/parse.rkt @@ -20,7 +20,7 @@ (provide (contract-out - [read-markdown (->* () (symbol?) xexpr-element-list?)] + [read-markdown (->* () (input-port? symbol?) xexpr-element-list?)] [parse-markdown (->* ((or/c string? path?)) (symbol?) xexpr-element-list?)] [current-strict-markdown? (parameter/c boolean?)])) @@ -125,8 +125,8 @@ normalize-xexprs)) ;; For backward compatibility -(define (read-markdown [footnote-prefix-symbol (gensym)]) - (parse-markdown (port->string (current-input-port)) footnote-prefix-symbol)) +(define (read-markdown [in-port (current-input-port)] [footnote-prefix-symbol (gensym)]) + (parse-markdown (port->string in-port) footnote-prefix-symbol)) ;; Parameter to limit us to strict markdown (no customizations). (define current-strict-markdown? (make-parameter #f))