*/
/// for completeness (=handy)
-inline String to_string (String s) { return s; }
-/// "cccc"
+String to_string (String s);
String to_string (char c, int n = 1);
String to_string (int i, char const *format = 0);
String to_string (double f, char const *format = 0);
#endif
// because char const* also has an operator ==, this is for safety:
-inline bool operator == (String s1, char const *s2)
-{
- return s1 == String (s2);
-}
-inline bool operator == (char const *s1, String s2)
-{
- return String (s1) == s2;
-}
-inline bool operator != (String s1, char const *s2)
-{
- return s1 != String (s2);
-}
-inline bool operator != (char const *s1, String s2)
-{
- return String (s2) != s1;
-}
+bool operator == (String s1, char const *s2);
+bool operator == (char const *s1, String s2);
+bool operator != (String s1, char const *s2);
+bool operator != (char const *s1, String s2);
IMPLEMENT_ARITHMETIC_OPERATOR (String, +);
#ifdef STREAM_SUPPORT
#if ! HAVE_SNPRINTF
int
-snprintf (char *str, size_t, char const *format, ...)
+snprintf (char *str, size_t n, char const *format, ...)
{
va_list ap;
va_start (ap, format);
int i = vsprintf (str, format, ap);
+ if (i > 0 && (unsigned) i > n)
+ assert (false);
va_end (ap);
return i;
}
#if ! HAVE_VSNPRINTF
int
-vsnprintf (char *str, size_t, char const *format, va_list args)
+vsnprintf (char *str, size_t n, char const *format, va_list args)
{
int i = vsprintf (str, format, args);
+ if (i > 0 && (unsigned) i > n)
+ assert (false);
return i;
}
#endif
(int (*) (void *, char const *, int)) fun.write,
(fpos_t (*) (void *, fpos_t, int)) fun.seek,
(int (*) (void *)) fun.close);
-
#endif
}
va_start (ap, format);
if (is_memory_stream (file))
{
- static char buf[1024];
+ static char buf[65536];
int i = vsnprintf (buf, sizeof (buf), format, ap);
- if (i == -1)
+ if (i == -1 || (unsigned) i > sizeof (buf))
assert (false);
return Memory_out_stream::writer (file, buf, i);
}
(define mm-to-bigpoint
(/ 72 25.4))
-
(define-public (ps-font-command font)
(let* ((name (munge-lily-font-name (ly:font-file-name font)))
(magnify (ly:font-magnification font)))
(equal? (substring fontname 0 2) "cm")
(equal? (substring fontname 0 2) "ec")))
-
(define (define-fonts paper)
(define font-list (ly:paper-fonts paper))
(define (define-font command fontname scaling)
(display (list font fontname)))
(define-font plain fontname scaling)))
-
(apply string-append
(map (lambda (x) (font-load-command x))
(filter (lambda (x) (not (ly:pango-font? x)))
;; FIXME: silly interface name
(define (output-variables layout)
;; FIXME: duplicates output-layout's scope-entry->string, mostly
- (define (value->string val)
+ (define (value->string val)
(cond
((string? val) (string-append "(" val ")"))
((symbol? val) (symbol->string val))
(string-append
"%%Page: "
(number->string page-number) " " (number->string page-count) "\n"
-
+
"%%BeginPageSetup\n"
(if landscape?
"page-width output-scale lily-output-units mul mul 0 translate 90 rotate\n"
"")
"%%EndPageSetup\n"
-
+
"start-page { "
"set-ps-scale-to-lily-scale "
"\n"))
(if (ly:pango-font? font)
(map car (ly:pango-font-physical-fonts font))
(list (munge-lily-font-name (ly:font-name font)))))
-
+
(let* ((fonts (ly:paper-fonts paper))
(names (apply append (map extract-names fonts))))
-
+
(apply string-append
(map (lambda (f)
(format
(define (cff-font? font)
(let*
- ((cff-string (ly:otf-font-table-data font "CFF ")))
+ ((cff-string (ly:otf-font-table-data font "CFF ")))
(> (string-length cff-string) 0)))
(define-public (ps-embed-cff body font-set-name version)
(define (write-preamble paper load-fonts? port)
-
+
(define (load-font-via-GS font-name-filename)
(define (ps-load-file name)
(format "(~a) (r) file .loadfont " name))
-
+
(let* ((font (car font-name-filename))
(name (cadr font-name-filename))
(file-name (caddr font-name-filename))
(bare-file-name (ly:find-file file-name)))
- (cons
+ (cons
(munge-lily-font-name name)
(cond
((string-match "([eE]mmentaler|[Aa]ybabtu)" file-name)
(else
(ly:warning (_ "don't know how to embed ~S=~S") name file-name)
"")))))
-
+
(define (load-font font-name-filename)
(let* ((font (car font-name-filename))
(name (cadr font-name-filename))
(file-name (caddr font-name-filename))
(bare-file-name (ly:find-file file-name)))
- (cons
+ (cons
(munge-lily-font-name name)
(cond
((and bare-file-name (string-match "\\.pfa" bare-file-name))
((and bare-file-name (string-match "\\.otf" bare-file-name))
(ps-embed-cff (ly:otf->cff bare-file-name) name 0))
-
+
((and bare-file-name (string-match "\\.ttf" bare-file-name))
(ly:ttf->pfa bare-file-name))
(else
(ly:warning (_ "don't know how to embed ~S=~S") name file-name)
"")))))
-
+
(define (load-fonts paper)
(let* ((fonts (ly:paper-fonts paper))
(all-font-names
(ly:pango-font-physical-fonts font)))
(else
(ly:font-sub-fonts font))))
-
+
fonts))
(font-names
(uniq-list
(sort (apply append all-font-names)
(lambda (x y) (string<? (cadr x) (cadr y))))))
-
- (pfas (map load-font font-names)))
+ ;; ttftool/fopencookie is broken on Windows,
+ ;; possibly a stack corruption bug.
+ (pfas (map (if (eq? PLATFORM 'windows) load-font-via-GS load-font)
+ font-names)))
pfas))
(if load-fonts?
(display (cdr f) port)
(display "\n%%EndFont\n" port))
(load-fonts paper)))
-
+
(display (setup paper) port)
- ; adobe note 5002: should initialize variables before loading routines.
+ ;; adobe note 5002: should initialize variables before loading routines.
(display (procset "music-drawing-routines.ps") port)
(display (procset "lilyponddefs.ps") port)
(display "init-lilypond-parameters\n" port))
(define-public (output-framework basename book scopes fields)
(let* ((filename (format "~a.ps" basename))
- (outputter (ly:make-paper-outputter filename "ps"))
+ (outputter (ly:make-paper-outputter filename "ps"))
(paper (ly:paper-book-paper book))
(pages (ly:paper-book-pages book))
(landscape? (eq? (ly:output-def-lookup paper 'landscape) #t))
(output-scopes scopes fields basename)
(display (page-header paper page-count #t) port)
- (write-preamble paper #t port)
+ (write-preamble paper #t port)
(for-each
(lambda (page)
(define-public (dump-stencil-as-EPS paper dump-me filename load-fonts?)
(define (mm-to-bp-box mmbox)
- (let* ((scale (ly:output-def-lookup paper 'outputscale))
- (box (map
+ (let* ((scale (ly:output-def-lookup paper 'outputscale))
+ (box (map
(lambda (x)
(inexact->exact
(round (* x scale mm-to-bigpoint)))) mmbox)))
(display "} stop-system\n%%Trailer\n%%EOF\n" port)
(ly:outputter-close outputter)))
-
(define-public (output-preview-framework basename book scopes fields)
-
(let* ((paper (ly:paper-book-paper book))
(systems (ly:paper-book-systems book))
(scale (ly:output-def-lookup paper 'outputscale))
- (to-dump-systems '())
- )
+ (to-dump-systems '()))
-
-
;; skip booktitles.
(if (and
(not
(cdr (assoc
'preview-include-book-title
- (ly:get-option 'command-line-settings)
- )))
+ (ly:get-option 'command-line-settings))))
(< 1 (length systems))
(ly:paper-system-title? (list-ref systems 0))
(ly:paper-system-title? (list-ref systems 1)))
(set! systems (cdr systems)))
-
+
(for-each
(lambda (sys)
(if (or
(postprocess-output book framework-ps-module
(format "~a.preview.eps" basename)
- (completize-formats (cons "png" (ly:output-formats))))
-
- ))
+ (completize-formats (cons "png" (ly:output-formats))))))
(if #f
(define-public (output-preview-framework basename book scopes fields)
-
+
(let* ((paper (ly:paper-book-paper book))
(systems (ly:paper-book-systems book))
(scale (ly:output-def-lookup paper 'outputscale))
(postprocess-output book framework-ps-module
(format "~a.preview.eps" basename)
- (completize-formats (ly:output-formats)))
-
- ))
- )
+ (completize-formats (ly:output-formats))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define-public (convert-to-pdf book name)
(papersizename (ly:output-def-lookup defs 'papersizename)))
(postscript->png resolution
- (if (string? papersizename)
- papersizename "a4")
-
+ (if (string? papersizename) papersizename "a4")
name)))
(define-public (convert-to-dvi book name)