;; Add number attribute with appropriate value. (=> (attribute "number" (union (q-element 'title) (q-element 'footnote))) (create-sub (origin (current-node)) (subgrove-spec node: (current-node) remove: '(implied?) children: (number-attribute-children)) property: 'attribute)) (define (number-attribute-children) (string->subgrove-spec-list (choose-element-number (origin (current-node))))) ;; Return string to be used as number of the element nd. (define (choose-element-number nd) (cond ((match-element? nd 'footnote) (number->string (list-ref (element-number-list '("chapter" "footnote") nd) 1))) ((match-element? nd '(chapter title)) (number->string (ancestor-child-number "chapter" nd))) ((match-element? nd '(section title)) (format-number-list (hierarchical-number '("chapter" "section") nd) "1" ".")))) (define (string->subgrove-spec-list s) (map (lambda (ch) (subgrove-spec class: 'data-char add: `((char ,ch)))) (string->list s)))