From: Jan Nieuwenhuizen Date: Sun, 15 May 2005 23:44:07 +0000 (+0000) Subject: * scm/lily.scm (PLATFORM): Export. X-Git-Tag: release/2.5.25~27 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=d1ddb3de33c8811b914cccbafdf82549c4e76034;p=lilypond.git * scm/lily.scm (PLATFORM): Export. * scm/framework-ps.scm (write-preamble)[MINGW]: Use load-font-via-GS, ttftool or fopencookie is broken on windows. * scm/backend-library.scm (postscript->pdf)[MINGW]: Do not use -dSAFER, that is broken on windows. --- diff --git a/ChangeLog b/ChangeLog index c3742717c9..f4ae3a4f2f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2005-05-16 Jan Nieuwenhuizen + + * scm/lily.scm (PLATFORM): Export. + + * scm/framework-ps.scm (write-preamble)[MINGW]: Use + load-font-via-GS, ttftool or fopencookie is broken on windows. + + * scm/backend-library.scm (postscript->pdf)[MINGW]: Do not use + -dSAFER, that is broken on windows. + 2005-05-15 Han-Wen Nienhuys * lily/GNUmakefile ($(outdir)/FlexLexer.h): conditional dependency @@ -7,6 +17,12 @@ 2005-05-15 Jan Nieuwenhuizen + * lily/lily-guile.cc (ly_scm2newstr): Use scm_i_string_length. + Fixes deprecation warning. + + * flower/include/string.icc (to_string): Only inline if + -DSTRING_UTILS_INLINED. + * lily/pango-font.cc (pango_item_string_stencil): Normalize file name. Remove windows comment. diff --git a/flower/file-name.cc b/flower/file-name.cc index f4ba75a18f..8d1a3fae8c 100644 --- a/flower/file-name.cc +++ b/flower/file-name.cc @@ -54,11 +54,8 @@ dos_to_posix (String file_name) static String slashify (String file_name) { - if (file_name.index ('/') >= 0) - return file_name; file_name.substitute ('\\', '/'); - file_name.substitute ("\"", "\\\""); - file_name.substitute ("\'", "\\\'"); + file_name.substitute ("//", "/"); return file_name; } #endif /* __MINGW32__ */ diff --git a/flower/file-path.cc b/flower/file-path.cc index f8504396cf..1c0fb5628d 100644 --- a/flower/file-path.cc +++ b/flower/file-path.cc @@ -112,7 +112,8 @@ File_path::find (String name) const return name; #ifdef __MINGW32__ - if (name[0] == '\\' || (name.length () > 2 && name[2] == '\\')) + if (name[0] == '\\' || (name.length () > 2 && name[2] == '\\') + || name.index ('//')) programming_error ("file name not normalized: " + name); #endif /* __MINGW32__ */ diff --git a/flower/include/string.hh b/flower/include/string.hh index 13d6dee460..91c3f2082f 100644 --- a/flower/include/string.hh +++ b/flower/include/string.hh @@ -160,8 +160,7 @@ public: */ /// 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); @@ -188,22 +187,10 @@ INSTANTIATE_COMPARE (String const &, String::compare); #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 diff --git a/flower/include/string.icc b/flower/include/string.icc index 86b2036650..526d7c4eba 100644 --- a/flower/include/string.icc +++ b/flower/include/string.icc @@ -9,6 +9,43 @@ #ifndef STRING_ICC #define STRING_ICC +/// for completeness (=handy) +INLINE +String +to_string (String s) +{ + return s; +} + +// 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; +} + INLINE char & String::operator [] (int n) diff --git a/flower/libc-extension.cc b/flower/libc-extension.cc index 51aabebe05..dea40b6a10 100644 --- a/flower/libc-extension.cc +++ b/flower/libc-extension.cc @@ -134,11 +134,13 @@ memrev (unsigned char *byte, int length) #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; } @@ -146,9 +148,11 @@ snprintf (char *str, size_t, char const *format, ...) #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 @@ -172,7 +176,6 @@ extern "C" { (int (*) (void *, char const *, int)) fun.write, (fpos_t (*) (void *, fpos_t, int)) fun.seek, (int (*) (void *)) fun.close); - #endif } @@ -215,9 +218,9 @@ extern "C" { 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); } diff --git a/lily/lily-guile.cc b/lily/lily-guile.cc index a7b3511a63..5b80d8580b 100644 --- a/lily/lily-guile.cc +++ b/lily/lily-guile.cc @@ -135,7 +135,7 @@ ly_scm2newstr (SCM str, size_t *lenp) { SCM_ASSERT_TYPE (scm_is_string (str), str, SCM_ARG1, __FUNCTION__, "string"); - size_t len = SCM_STRING_LENGTH (str); + size_t len = scm_i_string_length (str); if (char *new_str = (char *) malloc ((len + 1) * sizeof (char))) { memcpy (new_str, scm_i_string_chars (str), len); diff --git a/lily/pango-font.cc b/lily/pango-font.cc index ef79b09b7e..b8693c8b73 100644 --- a/lily/pango-font.cc +++ b/lily/pango-font.cc @@ -140,9 +140,9 @@ Pango_font::pango_item_string_stencil (PangoItem *item, String str, Real dx) con FcPattern *fcpat = fcfont->font_pattern; char *file_name = 0; FcPatternGetString (fcpat, FC_FILE, 0, (FcChar8 **) & file_name); -#ifdef __MINGW32__ +#ifdef __MINGW32__ /* Normalize file name. */ - // FIXME: memleak(s?) + // FIXME: memleak(s?), drop the #ifdef? file_name = File_name (file_name).to_string ().get_copy_str0 (); #endif diff --git a/scm/backend-library.scm b/scm/backend-library.scm index 5fef767162..756d6c6638 100644 --- a/scm/backend-library.scm +++ b/scm/backend-library.scm @@ -37,7 +37,7 @@ (cmd (format #f "gs\ -dCompatibilityLevel=1.4 \ - -dSAFER\ + ~S\ -sPAPERSIZE=~a\ -q\ -dNOPAUSE\ @@ -47,6 +47,9 @@ -c .setpdfwrite\ -f ~S\ " + ;; gs on windows with -dSAFER fails on opening a + ;; file that has no group read permissions. + (if (eq? PLATFORM 'windows) "" "-dSAFER") (sanitize-command-option papersizename) pdf-name name))) diff --git a/scm/framework-ps.scm b/scm/framework-ps.scm index fb00c1c05f..2731193c60 100644 --- a/scm/framework-ps.scm +++ b/scm/framework-ps.scm @@ -24,7 +24,6 @@ (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))) @@ -39,7 +38,6 @@ (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) @@ -73,7 +71,6 @@ (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))) @@ -83,7 +80,7 @@ ;; 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)) @@ -115,13 +112,13 @@ (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")) @@ -133,10 +130,10 @@ (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 @@ -195,7 +192,7 @@ (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) @@ -231,17 +228,17 @@ (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) @@ -252,14 +249,14 @@ (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)) @@ -275,7 +272,7 @@ ((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)) @@ -286,7 +283,7 @@ (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 @@ -307,14 +304,16 @@ (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) (stringexact (round (* x scale mm-to-bigpoint)))) mmbox))) @@ -397,29 +396,23 @@ (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 @@ -438,12 +431,10 @@ (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)) @@ -461,10 +452,7 @@ (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) @@ -486,9 +474,7 @@ (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) diff --git a/scm/lily.scm b/scm/lily.scm index 23d2152f07..160fdd173b 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -86,7 +86,7 @@ ;; Mingw ;; #(Windows XP HOSTNAME build 2600 5.01 Service Pack 1 i686) ;; -(define PLATFORM +(define-public PLATFORM (string->symbol (string-downcase (car (string-tokenize (vector-ref (uname) 0) char-set:letter)))))