]> git.donarmstrong.com Git - lilypond.git/blobdiff - ly/graphviz-init.ly
Web-ja: update introduction
[lilypond.git] / ly / graphviz-init.ly
index 12330a345fcba250c60faff1a26746cd7e9098af..96f45ded93ccc3f784eeaea6e1ebe8a61764f2b1 100644 (file)
@@ -1,7 +1,9 @@
-\version "2.12.0"
+\version "2.19.22"
 
 #(use-modules (scm graphviz))
 
+#(use-modules (ice-9 regex))
+
 #(define last-grob-action '())
 
 #(define sym-blacklist '())
 #(define (whitelist-symbol sym)
   (set! sym-whitelist (cons sym sym-whitelist)))
 
-#(define (whitelist-grob str)
-  (set! grob-whitelist (cons str grob-whitelist)))
-
-#(define graph (make-empty-graph (ly:parser-output-name parser)))
+#(define (whitelist-grob sym)
+  (set! grob-whitelist (cons sym grob-whitelist)))
 
-#(define (grob-name g)
-  (let* ((meta (ly:grob-property g 'meta))
-        (name-pair (assq 'name meta)))
-   (if (pair? name-pair)
-       (cdr name-pair)
-       #f)))
+#(define graph (make-empty-graph (ly:parser-output-name)))
 
 % an event is relevant if
 % (it is on some whitelist or all whitelists are empty)
     (or
      (= 0 (length file-line-whitelist) (length sym-whitelist) (length grob-whitelist))
      (memq prop sym-whitelist)
-     (memq (grob-name grob) grob-whitelist)
+     (memq (grob::name grob) grob-whitelist)
      (member file-line file-line-whitelist))
     (and
      (not (memq prop sym-blacklist))
-     (not (memq (grob-name grob) grob-blacklist))
+     (not (memq (grob::name grob) grob-blacklist))
      (not (member file-line file-line-blacklist))))))
 
 #(define (grob-event-node grob label cluster)
   (let ((node-id (add-node graph label cluster))
-       (prev (assv grob last-grob-action)))
+        (prev (assv grob last-grob-action)))
    (if (pair? prev)
        (add-edge graph (cdr prev) node-id))
    (set! last-grob-action (assv-set! last-grob-action grob node-id))))
 
 #(define (truncate-value val)
-  (let ((val-str (format "~a" val)))
+  (let ((val-str (format #f "~a" val)))
    (string-take val-str (min 50 (string-length val-str)))))
 
 #(define (grob-mod grob file line func prop val)
   (let* ((val-str (truncate-value val))
-        (label (format "~a\\n~a:~a\\n~a <- ~a" (grob-name grob) file line prop val-str)))
+         (label (format #f "~a\\n~a:~a\\n~a <- ~a" (grob::name grob) file line prop val-str))
+         ;; to keep escaped "\"" we need to transform it to "\\\""
+         ;; otherwise the final pdf-creation will break
+         (escaped-label
+           (regexp-substitute/global #f "\"" label 'pre "\\\"" 'post)))
    (if (relevant? grob file line prop)
-       (grob-event-node grob label file))))
+       (grob-event-node grob escaped-label file))))
 
 #(define (grob-cache grob prop callback value)
   (let* ((val-str (truncate-value value))
-        (label (format "caching ~a.~a\\n~a -> ~a" (grob-name grob) prop callback value)))
+         (label (format #f "caching ~a.~a\\n~a -> ~a" (grob::name grob) prop callback value)))
    (if (relevant? grob #f #f prop)
        (grob-event-node grob label #f))))
 
 #(define (grob-create grob file line func)
-  (let ((label (format "~a\\n~a:~a" (grob-name grob) file line)))
+  (let ((label (format #f "~a\\n~a:~a" (grob::name grob) file line)))
    (grob-event-node grob label file)))
 
 #(ly:set-grob-modification-callback grob-mod)