]> git.donarmstrong.com Git - lilypond.git/commitdiff
* scm/lily.scm (PLATFORM): Export.
authorjanneke <janneke>
Sun, 15 May 2005 23:44:07 +0000 (23:44 +0000)
committerjanneke <janneke>
Sun, 15 May 2005 23:44:07 +0000 (23:44 +0000)
* 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.

ChangeLog
flower/file-name.cc
flower/file-path.cc
flower/include/string.hh
flower/include/string.icc
flower/libc-extension.cc
lily/lily-guile.cc
lily/pango-font.cc
scm/backend-library.scm
scm/framework-ps.scm
scm/lily.scm

index c3742717c98d0fe89c22ce68a82efcbd68bef69a..f4ae3a4f2f78fc12b8fda2a30f229244ea1f2944 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2005-05-16  Jan Nieuwenhuizen  <janneke@gnu.org>
+
+       * 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  <hanwen@xs4all.nl>
 
        * lily/GNUmakefile ($(outdir)/FlexLexer.h): conditional dependency
@@ -7,6 +17,12 @@
 
 2005-05-15  Jan Nieuwenhuizen  <janneke@gnu.org>
 
+       * 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.
 
index f4ba75a18fe7cce26ab900878116a244660bb2d4..8d1a3fae8c3acbe2f8d2be9e95f411eef022e981 100644 (file)
@@ -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__ */
index f8504396cf0b9fcae5f09403457e709a317d4683..1c0fb5628de9a9496482fca84ce420f1cfad2555 100644 (file)
@@ -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__ */
 
index 13d6dee460be6c47e7f40c9159c3a0a6274d8ea4..91c3f2082f682f8bac135effde321500b86af0e7 100644 (file)
@@ -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
index 86b203665040c94aacfb633fb03b37506f8b7c2e..526d7c4eba9448be4aa5972a5537ce7d7cc63dca 100644 (file)
@@ -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)
index 51aabebe054648c750e17322f9f42689ea3a5afa..dea40b6a108a36c3cd3b3e8e1dad269ff822344d 100644 (file)
@@ -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);
       }
index a7b3511a63ad929afed7ed18ac452a3fa04c7681..5b80d8580b4ba4f27bd04b0c635cd4afdc6c53c2 100644 (file)
@@ -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);
index ef79b09b7ef236c6f9ed3da58cc36f4c13e4375e..b8693c8b735096e88fc36eabc4f287b3a26376ea 100644 (file)
@@ -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
 
index 5fef767162eaefaba4cbbfe854b4250598e4c765..756d6c6638ad70cde0badec3a18f5bf9e39fe453 100644 (file)
@@ -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)))
index fb00c1c05ff82275f9d243bad06e809b5e246244..2731193c6043f6c427510cba1544d5b1f9d2e8c8 100644 (file)
@@ -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))
    (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)
index 23d2152f077b7b00cd77f6de70a81d872cb3f390..160fdd173b20ff9265a562b8c8c5766675788419 100644 (file)
@@ -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)))))