From 415bb34ffbf3e888972025dc7aada6bdf19861e1 Mon Sep 17 00:00:00 2001 From: Matthias Andreas Benkard Date: Thu, 3 Mar 2011 16:48:04 +0100 Subject: =?UTF-8?q?Add=20=E2=80=9Chtml=E2=80=9D=20and=20=E2=80=9Chtml-attr?= =?UTF-8?q?-value=E2=80=9D=20formatters.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- formatters.lisp | 46 ++++++++++++++++++++++++++++++++++++++++++++++ json-template.asd | 4 +++- json-template.lisp | 6 +----- 3 files changed, 50 insertions(+), 6 deletions(-) create mode 100644 formatters.lisp diff --git a/formatters.lisp b/formatters.lisp new file mode 100644 index 0000000..6d86a98 --- /dev/null +++ b/formatters.lisp @@ -0,0 +1,46 @@ +;; -*- mode: lisp; coding: utf-8 -*- +;; +;; Copyright 2011, Matthias Andreas Benkard. +;; +;; 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. + + +(in-package #:json-template) + + +(defun make-escaper (replacements) + (let* ((escapees (mapcar #'car replacements)) + (escapee-p (lambda (x) (member x escapees :test #'char=)))) + (lambda (string) + (with-output-to-string (out) + (loop with position = 0 + for escapee-pos = (position-if escapee-p string :start position) + while escapee-pos + do (write-string string out :start position :end escapee-pos) + (write-string (cdr (assoc (char string escapee-pos) + replacements)) + out) + (setq position (1+ escapee-pos)) + finally (write-string string out :start position)))))) + + +(defvar *template-formatters* + `(("html" . ,(make-escaper '((#\< . "<") + (#\> . "?") + (#\& . "&")))) + ("html-attr-value" . ,(make-escaper '((#\< . "<") + (#\> . "?") + (#\& . "&") + (#\' . "'") + (#\" . """)))) + ("raw" . identity))) diff --git a/json-template.asd b/json-template.asd index 39f94dc..2f1cfe8 100644 --- a/json-template.asd +++ b/json-template.asd @@ -20,4 +20,6 @@ :description "An implementation of a subset of the JSON Template language." :license "Apache License, version 2.0" :version "0.1.0" - :components ((:file "json-template"))) + :components ((:file "json-template") + (:file "formatters")) + :serial t) diff --git a/json-template.lisp b/json-template.lisp index 2acc811..9e36a42 100644 --- a/json-template.lisp +++ b/json-template.lisp @@ -24,11 +24,6 @@ (in-package #:json-template) -(defvar *template-formatters* - `(;;("html" . format-html) - ;;("html-attr-value" . format-html-attr-value) - ("raw" . identity))) - (defun tokenize-template-string (string) (loop with in-command-p = nil with skip-newline-p = nil @@ -188,3 +183,4 @@ (expand-template-to-stream branch (cons ctx contexts) stream)) value) (expand-template-to-stream alternative contexts stream)))))))) + -- cgit v1.2.3