X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fdocument-translation.scm;h=b35ce807ce8e387d328a9de067deda682dbde5cd;hb=0b544cfb7332615ef809b71b57ab656741311ae1;hp=01ae8a777f31dd1c46ce859cec2ee11ebd0bd4d1;hpb=a010a8e33a55d7b7c592804a2a30c90a33c9884d;p=lilypond.git diff --git a/scm/document-translation.scm b/scm/document-translation.scm index 01ae8a777f..b35ce807ce 100644 --- a/scm/document-translation.scm +++ b/scm/document-translation.scm @@ -1,9 +1,20 @@ -;;;; document-translation.scm -- Functions for engraver documentation +;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; source file of the GNU LilyPond music typesetter -;;;; -;;;; (c) 2000--2007 Han-Wen Nienhuys +;;;; Copyright (C) 2000--2014 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen +;;;; +;;;; LilyPond is free software: you can redistribute it and/or modify +;;;; it under the terms of the GNU General Public License as published by +;;;; the Free Software Foundation, either version 3 of the License, or +;;;; (at your option) any later version. +;;;; +;;;; LilyPond is distributed in the hope that it will be useful, +;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;;; GNU General Public License for more details. +;;;; +;;;; You should have received a copy of the GNU General Public License +;;;; along with LilyPond. If not, see . (define (engraver-makes-grob? name-symbol grav) (memq name-symbol (assoc 'grobs-created (ly:translator-description grav)))) @@ -19,83 +30,80 @@ (engraver-accepts-music-types? (cdr types) grav)))) (define (engraver-doc-string engraver in-which-contexts) - (let* ((propsr (cdr (assoc 'properties-read (ly:translator-description engraver)))) - (propsw (cdr (assoc 'properties-written (ly:translator-description engraver)))) - (accepted (cdr (assoc 'events-accepted (ly:translator-description engraver)))) - (name-sym (ly:translator-name engraver)) - (name-str (symbol->string name-sym)) - (desc (cdr (assoc 'description (ly:translator-description engraver)))) - (grobs (engraver-grobs engraver))) + (let* ((propsr (assoc-get 'properties-read (ly:translator-description engraver))) + (propsw (assoc-get 'properties-written (ly:translator-description engraver))) + (accepted (assoc-get 'events-accepted (ly:translator-description engraver))) + (name-sym (ly:translator-name engraver)) + (name-str (symbol->string name-sym)) + (desc (assoc-get 'description (ly:translator-description engraver))) + (grobs (engraver-grobs engraver))) (string-append desc "\n\n" (if (pair? accepted) - (string-append - "Music types accepted:\n\n" - (human-listify - (map (lambda (x) - (string-append - "@ref{" - (symbol->string x) - "}")) accepted))) - "") + (string-append + "Music types accepted:\n\n" + (human-listify + (map ref-ify (sort (map symbol->string accepted) ly:string-citexi - (map (lambda (x) (property->texi 'translation x '())) propsr) - #t)) - "") + (string-append + "Properties (read)" + (description-list->texi + (map (lambda (x) (property->texi 'translation x '())) + (sort propsr ly:symbol-citexi - (map (lambda (x) (property->texi 'translation x '())) propsw) - #t))) + "" + (string-append + "Properties (write)" + (description-list->texi + (map (lambda (x) (property->texi 'translation x '())) + (sort propsw ly:symbol-cistring contexts) - stringstring contexts) + ly:string-ciengraver-table (make-vector 61 '())) -(map +(define name->engraver-table (make-hash-table 61)) +(for-each (lambda (x) (hash-set! name->engraver-table (ly:translator-name x) x)) (ly:get-all-translators)) @@ -120,48 +128,45 @@ (let* ((eg (find-engraver-by-name name))) (cons (string-append "@code{" (ref-ify (symbol->string name)) "}") - (engraver-doc-string eg #f)))) + (engraver-doc-string eg #f)))) (define (document-property-operation op) (let ((tag (car op)) - (context-sym (cadr op)) - (args (cddr op)) - ) + (context-sym (cadr op)) + (args (cddr op)) + ) (cond ((equal? tag 'push) (let* - ((value (car args)) - (path (cdr args))) - - (string-append - "@item Set " - (format "grob-property @code{~a} " - (string-join (map symbol->string path) " ")) - (format "in @ref{~a} to ~a." - context-sym (scm->texi value)) - "\n"))) + ((value (car args)) + (path (cdr args))) + + (string-append + "@item Set " + (format #f "grob-property @code{~a} " + (string-join (map symbol->string path) " ")) + (format #f "in @ref{~a} to ~a." + context-sym (scm->texi value)) + "\n"))) ((equal? (object-property context-sym 'is-grob?) #t) "") ((equal? tag 'assign) - (format "@item Set translator property @code{~a} to ~a.\n" - context-sym - (scm->texi (car args)))) + (format #f "@item Set translator property @code{~a} to ~a.\n" + context-sym + (scm->texi (car args)))) ))) (define (context-doc context-desc) - (let* ((name-sym (cdr (assoc 'context-name context-desc))) - (name (symbol->string name-sym)) - (aliases (map symbol->string (cdr (assoc 'aliases context-desc)))) - (desc-handle (assoc 'description context-desc)) - (desc (if (and (pair? desc-handle) (string? (cdr desc-handle))) - (cdr desc-handle) "(not documented)")) - - (accepts (cdr (assoc 'accepts context-desc))) - (consists (cdr (assoc 'consists context-desc))) - (props (cdr (assoc 'property-ops context-desc))) - (grobs (context-grobs context-desc)) - (grob-refs (map (lambda (x) (ref-ify x)) grobs))) + (let* ((name-sym (assoc-get 'context-name context-desc)) + (name (symbol->string name-sym)) + (aliases (map symbol->string (assoc-get 'aliases context-desc))) + (desc (assoc-get 'description context-desc "(not documented")) + (accepts (assoc-get 'accepts context-desc)) + (consists (assoc-get 'consists context-desc)) + (props (assoc-get 'property-ops context-desc)) + (grobs (context-grobs context-desc)) + (grob-refs (map ref-ify (sort grobs ly:string-ci #:name name @@ -169,70 +174,71 @@ (string-append desc (if (pair? aliases) - (string-append - "\n\nThis context also accepts commands for the following context(s):\n\n" - (human-listify aliases) - ".") - "") + (string-append + "\n\nThis context also accepts commands for the following context(s):\n\n" + (human-listify (sort aliases ly:string-cistring accepts))) - ".")) + "\n\nThis context is a `bottom' context; it cannot contain other contexts." + (string-append + "\n\nContext " + name + " can contain\n" + (human-listify (map ref-ify (sort (map symbol->string accepts) + ly:string-citexi - (map document-engraver-by-name consists) - #t))))))) + "" + (string-append + "\n\nThis context is built from the following engraver(s):" + (description-list->texi + (map document-engraver-by-name (sort consists ly:symbol-cistring (cdr (assoc 'grobs-created (ly:translator-description eg))))))) + '() + (map symbol->string (assoc-get 'grobs-created (ly:translator-description eg)))))) (define (context-grobs context-desc) (let* ((group (assq-ref context-desc 'group-type)) - (consists (append - (if group - (list group) - '()) - (cdr (assoc 'consists context-desc)))) - (grobs (apply append - (map engraver-grobs consists)))) + (consists (append + (if group + (list group) + '()) + (assoc-get 'consists context-desc))) + (grobs (append-map engraver-grobs consists))) grobs)) (define (all-contexts-doc) (let* ((layout-alist - (sort (ly:output-description $defaultlayout) - (lambda (x y) (symbolstring (map car layout-alist)) stringstring (map car layout-alist)) ly:string-ci #:name "Contexts" @@ -243,8 +249,8 @@ (define all-engravers-list (ly:get-all-translators)) (set! all-engravers-list (sort all-engravers-list - (lambda (a b) (stringstring (ly:translator-name a)) - (symbol->string (ly:translator-name b)))))) + (lambda (a b) (ly:string-cistring (ly:translator-name a)) + (symbol->string (ly:translator-name b)))))) (define (all-engravers-doc) (make @@ -255,13 +261,13 @@ (map engraver-doc all-engravers-list))) (define (translation-properties-doc-string lst) - (let* ((ps (sort (map symbol->string lst) stringsymbol ps)) - (propdescs - (map - (lambda (x) (property->texi 'translation x '())) - sortedsyms)) - (texi (description-list->texi propdescs #f))) + (let* ((ps (sort (map symbol->string lst) ly:string-cisymbol ps)) + (propdescs + (map + (lambda (x) (property->texi 'translation x '())) + sortedsyms)) + (texi (description-list->texi propdescs #f))) texi)) (define (translation-doc-node) @@ -276,10 +282,10 @@ #:name "Tunable context properties" #:desc "All tunable context properties." #:text (translation-properties-doc-string - all-user-translation-properties)) + all-user-translation-properties)) (make #:name "Internal context properties" #:desc "All internal context properties." #:text (translation-properties-doc-string - all-internal-translation-properties))))) + all-internal-translation-properties)))))