X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fdocument-translation.scm;h=8de267f6d94f7e6b6ae27bcbb84620f1c8687146;hb=90e4d7057f3857da049dfda3d130017d4719bd6b;hp=222ee0985164ac90413bd6c08454c2dfc39a469c;hpb=d5fce41ff513cba5e4775ebbdfe888dd13464b80;p=lilypond.git diff --git a/scm/document-translation.scm b/scm/document-translation.scm index 222ee09851..8de267f6d9 100644 --- a/scm/document-translation.scm +++ b/scm/document-translation.scm @@ -1,326 +1,297 @@ -;;;; 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--2004 Han-Wen Nienhuys +;;;; Copyright (C) 2000--2015 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))) - ) + (memq name-symbol (assoc 'grobs-created (ly:translator-description grav)))) (define (engraver-accepts-music-type? name-symbol grav) - (memq name-symbol (assoc 'events-accepted (ly:translator-description grav))) - - ) + (memq name-symbol (assoc 'events-accepted (ly:translator-description grav)))) (define (engraver-accepts-music-types? types grav) (if (null? types) #f (or (engraver-accepts-music-type? (car types) grav) - (engraver-accepts-music-types? (cdr types) grav))) - ) + (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))) - "") - + (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)))) + "" + (string-append + "Properties (write)" + (description-list->texi + (map (lambda (x) (property->texi 'translation x '())) + (sort propsw ly:symbol-cistring contexts) stringstring contexts) + ly:string-ci #:name (symbol->string (ly:translator-name grav)) - #:text (engraver-doc-string grav #t) - )) + #:text (engraver-doc-string grav #t))) ;; Second level, part of Context description -(define name->engraver-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)) (define (find-engraver-by-name name) - "NAME is a symbol." + "NAME is a symbol." (hash-ref name->engraver-table name #f)) (define (document-engraver-by-name name) "NAME is a symbol." - (let* - ( - (eg (find-engraver-by-name name )) - ) + + (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)) - (body (cdr op)) - (sym (cadr op)) - ) - - (cond - ((equal? tag 'push) - (string-append - "@item " - (if (null? (cddr body)) - "Revert " - "Set " - ) - "grob-property @code{" - (symbol->string (cadr body)) - "} in @ref{" (symbol->string sym) - "}" - (if (not (null? (cddr body))) - (string-append " to @code{" (scm->texi (cadr (cdr body))) "}" ) - ) - "\n" - ) - - ) - ((equal? (object-property sym 'is-grob?) #t) "") - ((equal? (car op) 'assign) - (string-append - "@item Set translator property @code{" - (symbol->string (car body)) - "} to @code{" - (scm->texi (cadr body)) - "}\n" - ) - ) - ) - )) + (let ((tag (car op)) + (context-sym (cadr op)) + (args (cddr op)) + ) + + (cond + ((equal? tag 'push) + (let* + ((value (car args)) + (path (cdr args))) + + (string-append + (format #f "@item Set grob-property @code{~{~a~^.~}} " path) + (format #f "in @ref{~a} to" context-sym) + (if (pretty-printable? value) + (format #f ":~a\n" (scm->texi value)) + (format #f " ~a.\n" (scm->texi value)))))) + ((equal? (object-property context-sym 'is-grob?) #t) "") + ((equal? tag 'assign) + (string-append + (format #f "@item Set translator property @code{~a} to" context-sym) + (if (pretty-printable? (car args)) + (format #f ":~a\n" (scm->texi (car args))) + (format #f " ~a.\n" (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))) - (group (assq-ref context-desc 'group-type)) - - (consists (append - (if group (list group) - '()) - (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)) + (defaultchild (assoc-get 'default-child context-desc)) + (grobs (context-grobs context-desc)) + (grob-refs (map ref-ify (sort grobs ly:string-ci #:name name #:text - (string-append + (string-append desc (if (pair? aliases) - (string-append "\n\n This context is also known as: \n\n" - (human-listify aliases)) - "") - "\n\nThis context creates the following layout objects: \n\n" - (human-listify (uniq-list (sort grob-refs stringstring accepts))))) - - "\n\nThis context is built from the following engravers: " - (description-list->texi - (map document-engraver-by-name consists)) - )))) + "\n\nThis context 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 (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)) - )) - grobs - )) - - + (let* ((group (assq-ref context-desc 'group-type)) + (consists (append + (if group + (list group) + '()) + (assoc-get 'consists context-desc))) + (grobs (append-map engraver-grobs consists))) + grobs)) (define (all-contexts-doc) - (let* ( - (paper-alist - (sort (ly:output-description $defaultpaper) - (lambda (x y) (symbolstring (map car paper-alist)) stringstring (map car layout-alist)) ly:string-ci #:name "Contexts" - #:desc "Complete descriptions of all contexts" + #:desc "Complete descriptions of all contexts." #:children - (map context-doc contexts) - ) - )) - + (map context-doc contexts)))) (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 - #:name "Engravers" - #:desc "All separate engravers" - #:text "See @usermanref{Modifying context plug-ins}." + #:name "Engravers and Performers" + #:desc "All separate engravers and performers." + #:text "See @ruser{Modifying context plug-ins}." #:children (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))) - texi - )) - + (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) (make #:name "Translation" - #:desc "From music to layout" + #:desc "From music to layout." #:children (list (all-contexts-doc) (all-engravers-doc) (make #:name "Tunable context properties" - #:desc "All 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" + #:desc "All internal context properties." #:text (translation-properties-doc-string - all-internal-translation-properties)) - ) ) ) + all-internal-translation-properties)))))