for design_size in [11,13,14,16,18,20,23,26]:
- name = 'bigcheese'
+ name = 'emmentaler'
script = '''#!@FONTFORGE@
New();
# Separate Feta versioning?
# Naming: * expose LilyPond20/LilyPond rather than %(name)s
# * using 20 as Weight works for gnome-font-select widget: gfs
-SetFontNames("%(name)s%(design_size)d", "LilyPond", "LilyPond %(name)s %(design_size)d", "%(design_size)d", "GNU GPL", "@TOPLEVEL_VERSION@");
+SetFontNames("%(name)s-%(design_size)d", "%(name)s", "%(name)s %(design_size)d", "%(design_size)d", "GNU GPL", "@TOPLEVEL_VERSION@");
MergeFonts("feta%(design_size)d.pfa");
MergeFonts("parmesan%(design_size)d.pfa");
/* FIXME: better warning message
(maybe check upon startup for feta16.afm, feta16.tfm?) */
- if (tfm && tfm->info_.checksum != afm->checksum_)
+ if (tfm && tfm->info ().checksum != afm->checksum_)
{
// FIXME: broken sentence
String s = _f ("checksum mismatch for font file: `%s'",
s += " " + _f ("does not match: `%s'",
tfm->file_name_.to_str0 ());
s += "\n";
- s += " TFM: " + to_string ((int) tfm->info_.checksum);
+ s += " TFM: " + to_string ((int) tfm->info ().checksum);
s += " AFM: " + to_string ((int) afm->checksum_);
s += "\n";
s += _ ("Rebuild all .afm files, and remove all .pk and .tfm files.");
class Arpeggio_engraver : public Engraver
{
public:
- TRANSLATOR_DECLARATIONS (Arpeggio_engraver);
+ TRANSLATOR_DECLARATIONS (Arpeggio_engraver);
+
protected:
virtual void acknowledge_grob (Grob_info);
virtual void process_music ();
-
virtual void stop_translation_timestep ();
virtual bool try_music (Music *);
-
private:
- Item* arpeggio_;
+ Item *arpeggio_;
Music *arpeggio_req_;
};
}
bool
-Arpeggio_engraver::try_music (Music* m)
+Arpeggio_engraver::try_music (Music *m)
{
if (!arpeggio_req_)
{
if (!arpeggio_->get_parent (Y_AXIS))
arpeggio_->set_parent (info.grob_, Y_AXIS);
- Pointer_group_interface::add_grob (arpeggio_, ly_symbol2scm ("stems"), info.grob_);
+ Pointer_group_interface::add_grob (arpeggio_,
+ ly_symbol2scm ("stems"),
+ info.grob_);
}
/*
arpeggio_req_ = 0;
}
-
-
-
ADD_TRANSLATOR (Arpeggio_engraver,
/* descr */ "Generate an Arpeggio from a Arpeggio_req",
/* creats*/ "Arpeggio",
--- /dev/null
+/*
+ font-config.cc -- implement Font_config related functions
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 2005 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+*/
+
+#include "config.hh"
+
+#ifdef HAVE_PANGO_FT2
+#include <fontconfig/fontconfig.h>
+
+#include "main.hh"
+#include "warn.hh"
+
+void
+init_fontconfig ()
+{
+ if (!FcInit())
+ {
+ error ("FontConfig failed to initialize");
+ }
+
+ char const **dirs = prefix_directories;
+ for (; *dirs; dirs++)
+ {
+ String path = String (*dirs) + "/" + "otf";
+
+ if (!FcConfigAppFontAddDir (0, (FcChar8*)path.to_str0 ()))
+ {
+ error (_f ("Failed to add lilypond directory %s", path.to_str0 ()));
+ }
+ }
+}
+
+#else
+
+void init_fontconfig() {}
+#endif
extern bool store_locations_global;
extern bool do_internal_type_checking_global;
extern bool is_pango_format_global;
+extern char const *prefix_directories[];
/*
todo: collect in Output_option struct?
class Tex_font_metric : public Simple_font_metric
{
public:
- static SCM make_tfm (String file_name);
+ static SCM make_tfm (String file_name);
virtual int count () const;
virtual Box get_ascii_char (int) const;
virtual Real design_size () const;
virtual void derived_mark () const;
virtual int name_to_index (String) const;
+ virtual String font_name () const;
+
+ Tfm_info const &info () const;
-
+protected:
Tfm_info info_;
Tfm_header header_;
Array<Tex_font_char_metric> char_metrics_;
Array<int> ascii_to_metric_idx_;
SCM encoding_table_;
-
+ String font_name_;
private:
Tex_font_char_metric const *find_ascii (int ascii, bool warn = true) const;
Tex_font_metric ();
/* Where the init files live. Typically:
LILYPOND_DATADIR = /usr/share/lilypond
LOCAL_LILYPOND_DATADIR = /usr/share/lilypond/<VERSION> */
-char const *prefix_directory[] = {LILYPOND_DATADIR, LOCAL_LILYPOND_DATADIR, 0};
+char const *prefix_directories[] = {LILYPOND_DATADIR, LOCAL_LILYPOND_DATADIR, 0};
/* The option parser */
static Getopt_long *option_parser = 0;
setup_paths ()
{
if (char const *lilypond_prefix = getenv ("LILYPONDPREFIX"))
- prefix_directory[1] = lilypond_prefix;
+ prefix_directories[1] = lilypond_prefix;
global_path.append ("");
LILYPONDPREFIX to lilypond-x.y.z */
char *suffixes[] = {"ly", "otf", "mf/out", "scm", "tfm", "ps", "svg", 0};
- for (unsigned i = 0; prefix_directory[i]; i++)
+ for (unsigned i = 0; prefix_directories[i]; i++)
for (char **s = suffixes; *s; s++)
{
- String p = prefix_directory[i] + to_string ('/') + String (*s);
+ String p = prefix_directories[i] + to_string ('/') + String (*s);
global_path.prepend (p);
#if !KPATHSEA
}
void init_global_tweak_registry ();
+void init_fontconfig ();
+
static void
main_with_guile (void *, int, char **)
{
/* Engravers use lily.scm contents, need to make Guile find it.
Prepend onto GUILE %load-path, very ugh. */
- for (unsigned i = 0; prefix_directory[i]; i++)
+ for (unsigned i = 0; prefix_directories[i]; i++)
{
- prepend_load_path (prefix_directory[i]);
+ prepend_load_path (prefix_directories[i]);
/* Junk this. We should make real modules iso. just loading files. */
- prepend_load_path (String (prefix_directory[i]) + "/scm");
+ prepend_load_path (String (prefix_directories[i]) + "/scm");
}
if (be_verbose_global)
ly_c_init_guile ();
call_constructors ();
init_global_tweak_registry ();
+ init_fontconfig ();
init_freetype ();
all_fonts_global = new All_font_metrics (global_path.to_string ());
some code shamelessly copied from GNU fontutils-0.6/tfm/tfm_input.c
*/
+#include "file-name.hh"
#include "tfm.hh"
#include "tfm-reader.hh"
#include "string-convert.hh"
tfm->char_metrics_ = reader.char_metrics_;
tfm->ascii_to_metric_idx_ = reader.ascii_to_metric_idx_;
+ File_name fn (file_name);
+ tfm->font_name_ = fn.base_;
return tfm->self_scm ();
}
+Tfm_info const &
+Tex_font_metric::info () const
+{
+ return info_;
+}
+
Real
Tex_font_metric::design_size () const
{
return info_.design_size * point_constant;
}
+String
+Tex_font_metric::font_name () const
+{
+ return font_name_;
+}
+
int
-Tex_font_metric::name_to_index (String s) const
+Tex_font_metric::name_to_index (String) const
{
assert (false);
}
(list (cons 'font-encoding (car x)))
(cons (* factor (cadr x))
(caddr x))))
- `(
- (fetaNumber ,(ly:pt 20)
- #(
- ,(delay (ly:font-load "feta-alphabet11"))
+ `((fetaNumber ,(ly:pt 20)
+ #(,(delay (ly:font-load "feta-alphabet11"))
,(delay (ly:font-load "feta-alphabet13"))
,(delay (ly:font-load "feta-alphabet14"))
,(delay (ly:font-load "feta-alphabet16"))
,(delay (ly:font-load "feta-alphabet23"))
,(delay (ly:font-load "feta-alphabet26"))))
- (fetaDynamic ,(ly:pt 20.0) #(
- ,(delay (ly:font-load "feta-alphabet11"))
- ,(delay (ly:font-load "feta-alphabet13"))
- ,(delay (ly:font-load "feta-alphabet14"))
- ,(delay (ly:font-load "feta-alphabet16"))
- ,(delay (ly:font-load "feta-alphabet18"))
- ,(delay (ly:font-load "feta-alphabet20"))
- ,(delay (ly:font-load "feta-alphabet23"))
- ,(delay (ly:font-load "feta-alphabet26"))))
+ (fetaDynamic ,(ly:pt 20.0) #(,(delay (ly:font-load "feta-alphabet11"))
+ ,(delay (ly:font-load "feta-alphabet13"))
+ ,(delay (ly:font-load "feta-alphabet14"))
+ ,(delay (ly:font-load "feta-alphabet16"))
+ ,(delay (ly:font-load "feta-alphabet18"))
+ ,(delay (ly:font-load "feta-alphabet20"))
+ ,(delay (ly:font-load "feta-alphabet23"))
+ ,(delay (ly:font-load "feta-alphabet26"))))
(fetaMusic ,(ly:pt 20.0)
- #(
- ,(delay (ly:font-load "bigcheese11"))
- ,(delay (ly:font-load "bigcheese13"))
- ,(delay (ly:font-load "bigcheese14"))
- ,(delay (ly:font-load "bigcheese16"))
- ,(delay (ly:font-load "bigcheese18"))
- ,(delay (ly:font-load "bigcheese20"))
- ,(delay (ly:font-load "bigcheese23"))
- ,(delay (ly:font-load "bigcheese26"))))
+ #(,(delay (ly:font-load "emmentaler11"))
+ ,(delay (ly:font-load "emmentaler13"))
+ ,(delay (ly:font-load "emmentaler14"))
+ ,(delay (ly:font-load "emmentaler16"))
+ ,(delay (ly:font-load "emmentaler18"))
+ ,(delay (ly:font-load "emmentaler20"))
+ ,(delay (ly:font-load "emmentaler23"))
+ ,(delay (ly:font-load "emmentaler26"))))
(fetaBraces 100.0 #(,(delay
(ly:font-load "aybabtu")))))))
;; FIXME - don't support Bluesky?
(if (standard-tex-font? fontname)
(set! fontname (string-upcase fontname)))
-
-
+ (if (equal? fontname "unknown")
+ (display (list font fontname)))
(define-font plain fontname scaling)))
(apply string-append
(let* ((space-length (cdar (ly:text-dimension font " ")))
(space-move (string-append (number->string space-length)
" 0.0 rmoveto "))
- (input-enc (assoc-get 'input-name
- (ly:font-encoding-alist font)
- 'latin1))
+ (input-enc 'latin1)
(out-vec (decode-byte-string input-enc s)))
(string-append
;;(define text old-text)
(define (text font str)
(ly:warn "TEXT backend-command encountered in Pango backend\nargs: ~a ~a" font str)
- "")
+ (new-text font str))
;; FIXME: BARF helvetica?
(define (white-text scale s)