]> git.donarmstrong.com Git - lilypond.git/commitdiff
* scm/framework-gnome.scm: Add pango decoders.
authorJan Nieuwenhuizen <janneke@gnu.org>
Thu, 17 Jun 2004 00:17:57 +0000 (00:17 +0000)
committerJan Nieuwenhuizen <janneke@gnu.org>
Thu, 17 Jun 2004 00:17:57 +0000 (00:17 +0000)
* lily/include/pangofc-afm-decoder.hh:
* lily/pangofc-afm-decoder.cc: New file.

* lily/lily-guile.cc (ly:pango-add-afm-decoder): New function.

* configure.in: Check for pango.

* stepmake/aclocal.m4 (PKG_CHECK_MODULES): New function (from
autoconf).
(STEPMAKE_GTK2, STEPMAKE_PANGO): New function.

* config.make.in (USER_CFLAGS, USER_LDLAGS): Update.

ChangeLog
autogen.sh
config.hh.in
config.make.in
configure.in
lily/include/pangofc-afm-decoder.hh [new file with mode: 0644]
lily/lily-guile.cc
lily/pangofc-afm-decoder.cc [new file with mode: 0644]
scm/framework-gnome.scm
stepmake/aclocal.m4
stepmake/autogen.sh

index 914ca80f2024928451f44d9e664386f55317e028..76778c0377805e1f895be89cb2c399c810a8e6bc 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2004-06-17  Jan Nieuwenhuizen  <janneke@gnu.org>
+
+       * scm/framework-gnome.scm: Add pango decoders.
+
+       * lily/include/pangofc-afm-decoder.hh: 
+       * lily/pangofc-afm-decoder.cc: New file.
+
+       * lily/lily-guile.cc (ly:pango-add-afm-decoder): New function.
+
+       * configure.in: Check for pango.
+
+       * stepmake/aclocal.m4 (PKG_CHECK_MODULES): New function (from
+       autoconf).
+       (STEPMAKE_GTK2, STEPMAKE_PANGO): New function.
+
+       * config.make.in (USER_CFLAGS, USER_LDLAGS): Update.
+
 2004-06-17  Han-Wen Nienhuys   <hanwen@xs4all.nl>
 
        * Documentation/user/tutorial.itely (Integrating text and music):
@@ -18,7 +35,7 @@
 
 2004-06-15  Jan Nieuwenhuizen  <janneke@gnu.org>
 
-       * buildscripts/guile-gnome.sh: Pick-up user-installe pango.
+       * buildscripts/guile-gnome.sh: Pick-up user-installed pango.
 
 2004-06-15  Han-Wen Nienhuys   <hanwen@xs4all.nl>
 
index ef2afec2d7bc561455fa1dbc2675aec486c3a472..6678367b65a4f46648ecb5b9b2db2aacd61a60a2 100755 (executable)
@@ -3,6 +3,9 @@
 
 srcdir=`dirname $0`
 
+case $1 in
+    --noconf*) NOCONFIGURE=true;;
+esac
 
 if [ ! -f aclocal.m4 -o stepmake/aclocal.m4 -nt aclocal.m4 ]; then
     echo "stepmake/aclocal.m4 is newer. Copying file." 
index 96ede6ebae7c71b378f322af4602b17a3f7db688..fe37006e49346aa15c4125885ce978b44761317f 100644 (file)
@@ -91,3 +91,6 @@
 #define GUILE_PATCH_LEVEL 0
 #endif
 #endif
+
+/* define if you have pango_fc_font_map_add_decoder_find_func */
+#define HAVE_PANGO_FC_FONT_MAP_ADD_DECODER_FIND_FUNC 0
index 1724a5fad53a8bbfe9a7422bac295bc04f9c3f32..55ff72debc02ca391d033f8cd6a31043ea07e436 100644 (file)
@@ -7,10 +7,10 @@ MISSING_REQUIRED = @REQUIRED@
 
 package-depth = @package_depth@
 
-USER_CFLAGS = @CFLAGS@ @CPPFLAGS@ @GUILE_CFLAGS@
-USER_CXXFLAGS = @CXXFLAGS@ @CPPFLAGS@ @GUILE_CFLAGS@
+USER_CFLAGS = @CFLAGS@ @CPPFLAGS@ @GUILE_CFLAGS@ @PANGO_CFLAGS@
+USER_CXXFLAGS = @CXXFLAGS@ @CPPFLAGS@ @GUILE_CFLAGS@ @PANGO_CFLAGS@
 USER_LDFLAGS = @LDFLAGS@ @GUILE_LDFLAGS@
-EXTRA_LIBES = @EXTRA_LIBES@ @LIBS@
+EXTRA_LIBES = @EXTRA_LIBES@ @LIBS@ @PANGO_LIBS@
 
 PACKAGE = @PACKAGE@
 package = @package@
index ec0618de7a4886b6cf333303fd370c917fc2f1ea..9014e5c6d9c23c846d7d34621d10a58257529a7f 100644 (file)
@@ -58,6 +58,17 @@ AC_FUNC_VPRINTF
 AC_CHECK_FUNCS([gettext isinf memmem snprintf vsnprintf gettext])
 
 
+# This is developer only anyway, help pkgconfig a bit
+export PKG_CONFIG_PATH
+PKG_CONFIG_PATH=/usr/lib/pkgconfig:$PKG_CONFIG_PATH
+PKG_CONFIG_PATH=/opt/gnome/lib/pkgconfig:$PKG_CONFIG_PATH
+PKG_CONFIG_PATH=$HOME/usr/pkg/gnome/lib/pkgconfig:$PKG_CONFIG_PATH
+PKG_CONFIG_PATH=$HOME/usr/pkg/pango/lib/pkgconfig:$PKG_CONFIG_PATH
+
+#STEPMAKE_FREETYPE2
+STEPMAKE_GTK2
+STEPMAKE_PANGO
+
 ## Optional tools for building documentation, website, extra fonts.
 
 # guile executable for some scripts
diff --git a/lily/include/pangofc-afm-decoder.hh b/lily/include/pangofc-afm-decoder.hh
new file mode 100644 (file)
index 0000000..b9fb616
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+  pangofc-afm-decoder.h -- 
+
+  source file of the GNU LilyPond music typesetter
+
+  Copyright (C) 2004  Jan Nieuwenhuizen <janneke@gnu.org>
+
+  Note: in C and with explicit LPGL header for easier use with PANGO
+  outside of LilyPond.
+
+  This library is free software; you can redistribute it and/or
+  modify it under the terms of the GNU Lesser General Public
+  License as published by the Free Software Foundation; either
+  version 2.1 of the License, or (at your option) any later version.
+  This library is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  Lesser General Public License for more details.
+  You should have received a copy of the GNU Lesser General Public
+  License along with this library; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#ifndef __PANGOFC_AFM_DECODER_H__
+#define __PANGOFC_AFM_DECODER_H__
+
+#include "config.h"
+#ifdef HAVE_PANGO_FC_FONT_MAP_ADD_DECODER_FIND_FUNC
+
+/* Note: in C and with explicit header for use outside of LilyPond.  */
+
+#include <pango/pangofc-fontmap.h>
+
+G_BEGIN_DECLS
+
+#define PANGO_TYPE_FC_AFM_DECODER              (pango_fc_afm_decoder_get_type ())
+#define PANGO_FC_AFM_DECODER(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FC_AFM_DECODER, PangoFcAfmDecoder))
+#define PANGO_IS_FC_AFM_DECODER(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FC_AFM_DECODER))
+
+#define PANGO_FC_AFM_DECODER_CLASS(clss)      (G_TYPE_CHECK_CLASS_CAST ((clss), PANGO_TYPE_FC_AFM_DECODER, PangoFcAfmDecoderClass))
+#define PANGO_IS_FC_AFM_DECODER_CLASS(clss)   (G_TYPE_CHECK_CLASS_TYPE ((clss), PANGO_TYPE_FC_AFM_DECODER))
+#define PANGO_FC_AFM_DECODER_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_FC_AFM_DECODER, PangoFcAfmDecoderClass))
+
+typedef struct _PangoFcAfmDecoder        PangoFcAfmDecoder;
+typedef struct _PangoFcAfmDecoderClass   PangoFcAfmDecoderClass;
+typedef struct _PangoFcAfmDecoderPrivate PangoFcAfmDecoderPrivate;
+
+
+/**
+ * PangoFcAfmDecoder:
+ * 
+ * #PangoFcAfmDecoder implements an PangoFcDecoder for fonts
+ * with an afm mapping.
+ **/
+struct _PangoFcAfmDecoder
+{
+  PangoFcDecoder parent_instance;
+
+  /*< private >*/
+  PangoFcAfmDecoderPrivate *priv;
+};
+
+PangoFcAfmDecoder *pango_fc_afm_decoder_new (void);
+PangoFcDecoder *pango_fc_afm_find_decoder (FcPattern *pattern, gpointer user_data);
+void pango_fc_afm_add_decoder (char const *family_name);
+
+/**
+ * PangoFcAfmDecoderClass:
+ * @read_afm: Read afm mapping for #fcfont.
+ *
+ * Class structure for #PangoFcAfmDecoder.
+ **/
+struct _PangoFcAfmDecoderClass
+{
+  /*< private >*/
+  PangoFcDecoderClass parent_class;
+
+  /*< public >*/
+  void (*read_afm) (PangoFcAfmDecoder *self, PangoFcFont *fcfont);
+};
+
+G_END_DECLS
+
+#endif /* HAVE_PANGO_FC_FONT_MAP_ADD_DECODER_FIND_FUNC */
+
+#endif /* __PANGOFC_AFM_DECODER_H__ */
index c21e7e7a437b624b1c6fbf7469fb804345bffa46..5c9d9b6b2116864ee73a51d5da26622b68556d1a 100644 (file)
@@ -134,24 +134,20 @@ ly_scm2string (SCM s)
 char *
 ly_scm2newstr (SCM str, size_t *lenp)
 {
-  char *new_str;
-  size_t len;
-
   SCM_ASSERT_TYPE (ly_c_string_p (str), str, SCM_ARG1, __FUNCTION__, "string");
 
-  len = SCM_STRING_LENGTH (str);
-  new_str = (char *) malloc ((len + 1) * sizeof (char));
-  
-  if (new_str == NULL)
-    return NULL;
-
-  memcpy (new_str, SCM_STRING_CHARS (str), len);
-  new_str[len] = '\0';
-
-  if (lenp != NULL)
-      *lenp = len;
+  size_t len = SCM_STRING_LENGTH (str);
+  if (char *new_str = (char *) malloc ((len + 1) * sizeof (char)))
+    {
+      memcpy (new_str, SCM_STRING_CHARS (str), len);
+      new_str[len] = '\0';
 
-  return new_str;
+      if (lenp)
+       *lenp = len;
+      
+      return new_str;
+    }
+  return 0;
 }
 
 SCM
@@ -776,9 +772,26 @@ alist_to_hashq (SCM alist)
 /*
   Debugging mem leaks:
  */
-LY_DEFINE (ly_protects, "ly:protects", 0, 0, 0, (),
+LY_DEFINE (ly_protects, "ly:protects",
+          0, 0, 0, (),
          "Return hash of protected objects.")
 {
   return scm_protects;
 }
 #endif
+
+
+#ifdef HAVE_PANGO_FC_FONT_MAP_ADD_DECODER_FIND_FUNC
+
+#include "pangofc-afm-decoder.hh"
+
+LY_DEFINE (ly_pango_add_afm_decoder, "ly:pango-add-afm-decoder",
+          1, 0, 0, (SCM font_family),
+          "Add pango afm decoder for FONT-FAMILY.")
+{
+  SCM_ASSERT_TYPE (ly_c_string_p (font_family), font_family, SCM_ARG1, __FUNCTION__, "font_family");
+  pango_fc_afm_add_decoder (ly_scm2newstr (font_family, 0));
+  return SCM_UNSPECIFIED;
+}
+
+#endif
diff --git a/lily/pangofc-afm-decoder.cc b/lily/pangofc-afm-decoder.cc
new file mode 100644 (file)
index 0000000..184418b
--- /dev/null
@@ -0,0 +1,312 @@
+/*
+  pango-afm-decoder.c -- AFM fontencoding for Pango fontconfig
+
+  source file of the GNU LilyPond music typesetter
+
+  Copyright (C) 2004  Jan Nieuwenhuizen <janneke@gnu.org>
+
+  Note: in C and with explicit LPGL header for easier use with PANGO
+  outside of LilyPond.
+
+  This library is free software; you can redistribute it and/or
+  modify it under the terms of the GNU Lesser General Public
+  License as published by the Free Software Foundation; either
+  version 2.1 of the License, or (at your option) any later version.
+  This library is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  Lesser General Public License for more details.
+  You should have received a copy of the GNU Lesser General Public
+  License along with this library; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include "config.h"
+#ifdef HAVE_PANGO_FC_FONT_MAP_ADD_DECODER_FIND_FUNC
+
+/* Need to access to PangoFcFont.full_pattern.  */
+#define PANGO_ENABLE_BACKEND
+
+#include <pango/pango-font.h>
+#include <pango/pangoxft.h>
+#include <pango/pangofc-font.h>
+#include <gdk/gdkx.h>
+#include <X11/Xft/Xft.h>
+
+#include "pangofc-afm-decoder.hh"
+
+#ifdef DEBUG_PANGO_AFM
+#include <stdio.h>
+#define dprintf(args...) fprintf (stderr, args)
+#else
+#define dprintf(args...)
+#endif
+
+struct _PangoFcAfmDecoderPrivate
+{
+  GString encoding[256];
+  //GString file_name;
+  char const *file_name;
+  PangoFcFont *fc_font;
+};
+
+static void pango_fc_afm_decoder_init (PangoFcAfmDecoder *fontmap);
+static void pango_fc_afm_decoder_class_init (PangoFcAfmDecoderClass *clss);
+static void pango_fc_afm_decoder_finalize (GObject *object);
+
+static FcCharSet *pango_fc_afm_get_charset (PangoFcFont *fcfont);
+static PangoGlyph pango_fc_afm_get_glyph (PangoFcFont *fcfont, guint32 wc);
+static void pango_fc_afm_decoder_set_file_name (PangoFcAfmDecoder *self, char const *file_name);
+
+static PangoFcDecoderClass *parent_class;
+
+#if 0
+/* ugly warning */
+G_DEFINE_TYPE (PangoFcAfmDecoder, pango_fc_afm_decoder, PANGO_TYPE_FC_DECODER);
+#else
+GType
+pango_fc_afm_decoder_get_type (void)
+{
+  static GType object_type = 0;
+
+  if (!object_type)
+    {
+      static const GTypeInfo object_info =
+      {
+        sizeof (PangoFcAfmDecoderClass),
+        (GBaseInitFunc) 0,
+        (GBaseFinalizeFunc) 0,
+        (GClassInitFunc) pango_fc_afm_decoder_class_init,
+        0,           /* class_finalize */
+        0,           /* class_data */
+        sizeof (PangoFcAfmDecoder),
+        0,              /* n_preallocs */
+        (GInstanceInitFunc) pango_fc_afm_decoder_init,
+       0, /* value table */
+      };
+      
+      object_type = g_type_register_static (PANGO_TYPE_FC_DECODER,
+                                            "PangoFcAfmDecoder",
+                                            &object_info, (GTypeFlags)0);
+    }
+  
+  return object_type;
+}
+#endif
+
+static void 
+pango_fc_afm_decoder_init (PangoFcAfmDecoder *fcafmdecoder)
+{
+  PangoFcAfmDecoderPrivate *priv = fcafmdecoder->priv;
+  priv = fcafmdecoder->priv
+    = G_TYPE_INSTANCE_GET_PRIVATE (fcafmdecoder,
+                                  PANGO_TYPE_FC_AFM_DECODER,
+                                  PangoFcAfmDecoderPrivate);
+  /*
+    init members
+   */
+}
+
+static void
+pango_fc_afm_decoder_class_init (PangoFcAfmDecoderClass *clss)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (clss);
+  object_class->finalize = pango_fc_afm_decoder_finalize;
+  g_type_class_add_private (object_class, sizeof (PangoFcAfmDecoderPrivate));
+
+  PangoFcDecoderClass *parent_class = PANGO_FC_DECODER_CLASS (clss);
+  parent_class->get_charset = pango_fc_afm_get_charset;
+  parent_class->get_glyph = pango_fc_afm_get_glyph;
+}
+
+static void
+pango_fc_afm_decoder_finalize (GObject *object)
+{
+#if 0  
+  PangoFcAfmDecoder *fcafmdecoder = PANGO_FC_AFM_DECODER (object);
+  PangoFcAfmDecoderPrivate *priv = fcafmdecoder->priv;
+#endif
+
+  /*
+    destroy members
+   */
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static FcCharSet *
+pango_fc_afm_get_charset (PangoFcFont *fcfont)
+{
+  //dprintf ("get charset: %s\n", fcfont->font_pattern);
+  dprintf ("get charset: \n");
+#if 0  
+  FcCharSet *charset = 0;
+  FcPatternGetCharSet (fcfont->font_pattern, FC_CHARSET, 0, &charset);
+#else
+  /* Return plain, undecoded charset.
+     TODO:
+       - actually read AFM?
+       - caching?
+       - PUA mapping ? */
+  (void) fcfont;
+  int i;
+  FcChar32 chr = 0;
+  FcCharSet *charset = FcCharSetCreate ();
+  for (i = 0; i < 256; i++)
+    if (!FcCharSetAddChar (charset, chr++))
+      return 0;
+#endif  
+  return charset;
+}
+
+static PangoGlyph
+pango_fc_afm_get_glyph (PangoFcFont *fcfont, guint32 wc)
+{
+#if 0
+  XftFont *xft_font;
+  xft_font = XftFontOpenPattern (GDK_DISPLAY (),
+                                FcPatternDuplicate (fcfont->font_pattern));
+  PangoGlyph g = XftCharIndex (0, xft_font, wc);
+  dprintf ("get glyph! 0x%x --> 0x%x\n", wc, (unsigned)g);
+#else
+  /* TODO:
+       - PUA mapping?
+       
+     Shortcut PUA mapping/AFM reading: The Feta charsets are encoded
+     without any gaps, starting at 0x21.  *grin*  */
+  (void) fcfont;
+  return wc - 0x21;
+#endif  
+}
+
+static void
+pango_fc_afm_decoder_set_file_name (PangoFcAfmDecoder *self,
+                                   char const *file_name)
+{
+  self->priv->file_name = file_name;
+}
+
+PangoFcAfmDecoder *
+pango_fc_afm_decoder_new (void)
+{
+  return PANGO_FC_AFM_DECODER (g_object_new (PANGO_TYPE_FC_AFM_DECODER, 0));
+}
+
+PangoFcDecoder *
+pango_fc_afm_find_decoder (FcPattern *pattern, gpointer user_data)
+{
+  FcChar8 *family_name;
+  
+  if (FcPatternGetString (pattern, FC_FAMILY, 0, &family_name)
+      == FcResultMatch)
+    {
+      dprintf ("Family name: %s\n", family_name);
+      dprintf ("user_data: %s\n", (char const*) user_data);
+
+      if (!strcasecmp ((char const*) family_name, (char const*) user_data))
+       {
+         PangoFcAfmDecoder *afm = pango_fc_afm_decoder_new ();
+         char const *file_name = "feta20.afm";
+         pango_fc_afm_decoder_set_file_name (afm, file_name);
+         dprintf ("Adding decoder: %s\n", file_name);
+         return PANGO_FC_DECODER (afm);
+       }
+    }
+  return 0;
+}
+
+void
+pango_fc_afm_add_decoder (char const *family_name)
+{
+  PangoFcFontMap *fc_map
+    = PANGO_FC_FONT_MAP (pango_xft_get_font_map (GDK_DISPLAY (), 0));
+
+  pango_fc_font_map_add_decoder_find_func (fc_map, pango_fc_afm_find_decoder,
+                                          (gpointer)family_name, 0);
+}
+
+#ifdef PANGO_FC_AFM_DECODER_TEST
+
+#include <gtk/gtk.h>
+#include <libgnomecanvas/libgnomecanvas.h>
+#include <pango/pangoft2.h>
+#include <pango/pangox.h>
+#include <pango/pangoxft.h>
+
+#include "pangofc-afm-decoder.h"
+
+#define CANVAS_WIDTH 600
+#define CANVAS_HEIGHT 300
+
+static void
+exit_clicked (GtkWidget *widget, gpointer data)
+{
+  gtk_widget_destroy (GTK_WIDGET (data));
+  gtk_main_quit ();
+}
+
+static gint
+delete_event (GtkWidget *widget, GdkEvent *event, gpointer data)
+{
+  gtk_widget_destroy (widget);
+  gtk_main_quit ();
+  return TRUE;
+}
+
+GnomeCanvas *
+make_canvas (int width, int height)
+{
+  GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  GtkWidget *vbox = gtk_vbox_new (FALSE, 0);
+  GtkWidget *canvas = gnome_canvas_new ();
+  GtkWidget *hbox = gtk_hbox_new (TRUE, 0);
+  GtkWidget *button = gtk_button_new_with_label ("Exit");
+
+  gtk_container_add (GTK_CONTAINER (window), vbox);
+  gtk_widget_set_size_request (canvas, width, height);
+  gtk_box_pack_start (GTK_BOX (vbox), canvas, TRUE, TRUE, 0);
+  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
+
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                     (GtkSignalFunc) exit_clicked, window);
+  
+  gtk_signal_connect (GTK_OBJECT (window), "delete_event",
+                     (GtkSignalFunc) delete_event, 0);
+
+  gtk_widget_show_all (window);
+  return GNOME_CANVAS (canvas);
+}
+
+#define gnome_canvas_text(x, y, font, text) \
+  gnome_canvas_item_new (root, text_item, "x", x, "y", y, "font", font, \
+                        "text", text, "anchor", GTK_ANCHOR_SOUTH_WEST, \
+                        "fill_color", "black", 0)
+
+int
+main (int argc, char **argv)
+{
+  gtk_init (&argc, &argv);
+  GnomeCanvas *canvas = make_canvas (CANVAS_WIDTH, CANVAS_HEIGHT);
+
+  /* Register GNU LilyPond FETA AFM decoders.  */
+  pango_fc_afm_add_decoder ("lilypond-feta");
+  pango_fc_afm_add_decoder ("lilypond-braces");
+  pango_fc_afm_add_decoder ("lilypond-dyn");
+  pango_fc_afm_add_decoder ("lilypond-parmesan");
+
+  int text_item = gnome_canvas_text_get_type ();
+  GnomeCanvasGroup *root = gnome_canvas_root (canvas);
+  char const *g_clef_utf8 = "\302\220";
+
+  gnome_canvas_text (45.0, 122.5, "LilyPond-feta-nummer 16", "3");
+  gnome_canvas_text (45.0, 142.5, "LilyPond-feta-nummer, r 16", "4");
+  gnome_canvas_text (10.0, 142.0, "LilyPond-feta, 32", g_clef_utf8);
+
+  gtk_main ();
+  return 0;
+}
+#endif /* PANGO_FC_AFM_DECODER_TEST */
+
+#endif /* HAVE_PANGO_FC_FONT_MAP_ADD_DECODER_FIND_FUNC */
index fb1c34914ec4c628fe5965422c0b5279bd05cb8e..bc62a7aa227d71e092ec7a8a36ce2c3a98d95ec5 100644 (file)
 
     ;; ugh.  The GOOPS doc promises this is called automagically.
     (initialize go)
-    
+
+    (map ly:pango-add-afm-decoder
+        '("lilypond-feta"
+          "lilypond-braces"
+          "lilypond-dyn"
+          "lilypond-parmesan"))
+
     (dump-page go 0)
 
     ;; ugh
index e1d0b37af1be6b7ebeab8fcd6faf3265069d9285..a592a8ab0d08cd772fcd7369a6b524c053ddbe71 100644 (file)
@@ -1014,3 +1014,91 @@ AC_DEFUN(STEPMAKE_WARN, [
 ])
 
 
+dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
+dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
+dnl also defines GSTUFF_PKG_ERRORS on error
+AC_DEFUN(PKG_CHECK_MODULES, [
+  succeeded=no
+
+  if test -z "$PKG_CONFIG"; then
+    AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+  fi
+
+  if test "$PKG_CONFIG" = "no" ; then
+     echo "*** The pkg-config script could not be found. Make sure it is"
+     echo "*** in your path, or set the PKG_CONFIG environment variable"
+     echo "*** to the full path to pkg-config."
+     echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
+  else
+     PKG_CONFIG_MIN_VERSION=0.9.0
+     if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
+        AC_MSG_CHECKING(for $2)
+
+        if $PKG_CONFIG --exists "$2" ; then
+            AC_MSG_RESULT(yes)
+            succeeded=yes
+
+            AC_MSG_CHECKING($1_CFLAGS)
+            $1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
+            AC_MSG_RESULT($$1_CFLAGS)
+
+            AC_MSG_CHECKING($1_LIBS)
+            $1_LIBS=`$PKG_CONFIG --libs "$2"`
+            AC_MSG_RESULT($$1_LIBS)
+        else
+            $1_CFLAGS=""
+            $1_LIBS=""
+            ## If we have a custom action on failure, don't print errors, but 
+            ## do set a variable so people can do so.
+            $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
+            ifelse([$4], ,echo $$1_PKG_ERRORS,)
+        fi
+
+        AC_SUBST($1_CFLAGS)
+        AC_SUBST($1_LIBS)
+     else
+        echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
+        echo "*** See http://www.freedesktop.org/software/pkgconfig"
+     fi
+  fi
+
+  if test $succeeded = yes; then
+     ifelse([$3], , :, [$3])
+  else
+     ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
+  fi
+])
+
+
+AC_DEFUN(STEPMAKE_FREETYPE2, [
+    PKG_CHECK_MODULES(FREETYPE2, freetype2 >= 0, have_freetype2=true, true)
+    if $have_freetype2 ; then
+       AC_DEFINE(HAVE_FREETYPE2)
+       AC_SUBST(FREETYPE2_CFLAGS)
+       AC_SUBST(FREETYPE2_LIBS)
+    fi
+])
+
+AC_DEFUN(STEPMAKE_GTK2, [
+    PKG_CHECK_MODULES(GTK2, gtk+-2.0 >= 2.4.0, have_gtk2=true, true)
+    if $have_gtk2 ; then
+       AC_DEFINE(HAVE_GTK2)
+       AC_SUBST(GTK2_CFLAGS)
+       AC_SUBST(GTK2_LIBS)
+    fi
+])
+
+AC_DEFUN(STEPMAKE_PANGO, [
+    PKG_CHECK_MODULES(PANGO, pango >= 1.5.0, have_pango_cvs=true, true)
+    if $have_pango_cvs ; then
+       AC_DEFINE(HAVE_PANGO_CVS)
+       PANGO_CFLAGS="$PANGO_CFLAGS $GTK2_CFLAGS"
+       PANGO_LIBS="$PANGO_LIBS $GTK2_LIBS"
+       CPPFLAGS="$PANGO_CFLAGS $CPPFLAGS"
+       LIBS="$PANGO_LIBS $LIBS"
+       AC_CHECK_HEADERS([pango/pangofc-fontmap.h])
+       AC_CHECK_FUNCS([pango_fc_font_map_add_decoder_find_func])
+       AC_SUBST(PANGO_CFLAGS)
+       AC_SUBST(PANGO_LIBS)
+fi
+])
index ef2afec2d7bc561455fa1dbc2675aec486c3a472..6678367b65a4f46648ecb5b9b2db2aacd61a60a2 100755 (executable)
@@ -3,6 +3,9 @@
 
 srcdir=`dirname $0`
 
+case $1 in
+    --noconf*) NOCONFIGURE=true;;
+esac
 
 if [ ! -f aclocal.m4 -o stepmake/aclocal.m4 -nt aclocal.m4 ]; then
     echo "stepmake/aclocal.m4 is newer. Copying file."