How to determine if a font is a fallback font?

2015-04-28 Thread Urs Liska

Hi all,

#(ly:font-config-get-font-file "Emmentaler-13")

gives me the full path to the font file used by the "Emmentaler-13" 
font. If I use a non-existent font name, say

#(ly:font-config-get-font-file "SomeFont")
I get a reference to emmentaler-11.otf, which is obviously used as 
fallback font by fontconfig.
However, a Windows user reported that the same references "marlett.ttf" 
on his system.


I wanted to use this approach to determine if a requested font exists on 
the user's system, but now I'm not sure anymore if that's a reliable 
approach. Of course I can simply add the check for marlett.ttf, but I 
have the impression that the returned fallback font isn't hard-coded but 
can vary with the user's installation or font availability.


So:
1)
Does anyone know of another approach to determine if a given font is 
visible to fontconfig?
(I can't check for the file name because this doesn't necessarily match 
the font name)


or
2)
Is there a function to retrieve the "font name" from a given file name?
It would be a viable approach if I could compare the result of that 
request with the original font name.


TIA
Urs

___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Werner LEMBERG

> Is there a function to retrieve the "font name" from a given file
> name?  It would be a viable approach if I could compare the result
> of that request with the original font name.

For TTFs and TTCs (either with TrueType outlines or embedded CFFs) you
can use `ly:ttf-ps-name'.

Looking into lilypond's code, however, I don't see why this shouldn't
work for Type1 fonts (or even pure CFFs) also.  It's worth a try – and
if it works, we should provide an alias name for `ly:ttf-ps-name'.


Werner
___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Urs Liska



Am 28.04.2015 um 09:38 schrieb Werner LEMBERG:

Is there a function to retrieve the "font name" from a given file
name?  It would be a viable approach if I could compare the result
of that request with the original font name.

For TTFs and TTCs (either with TrueType outlines or embedded CFFs) you
can use `ly:ttf-ps-name'.


Thanks that seems to work perfectly. Try

\version  "2.19.19"

fontExists =
#(define-void-function  (parser location font-name)(string?)
   (let*  ((font-file (ly:font-config-get-font-file  font-name))
  (reverse-font-name (ly:ttf-ps-name  font-file))
  (font-exists (string=?  font-name reverse-font-name)))
 (ly:message  (format  "\nGiven font name: ~a"  font-name))
 (ly:message  (format  "Determined font file: ~a"  font-file))
 (ly:message  (format  "Actual font in that file: ~a"  reverse-font-name))
 (ly:message  (format  "Given font is present: ~a"  font-exists

\fontExists  "Emmentaler-13"
\fontExists  "Fancy-Font"




Looking into lilypond's code, however, I don't see why this shouldn't
work for Type1 fonts (or even pure CFFs) also.  It's worth a try – and
if it works, we should provide an alias name for `ly:ttf-ps-name'.


I don't know how to proceed with this.

However, in the context of my current patch I will add a variant of the 
above function to font.scm.


Urs


 Werner


___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Thomas Morley
2015-04-28 9:23 GMT+02:00 Urs Liska :
> Hi all,
>
> #(ly:font-config-get-font-file "Emmentaler-13")
>
> gives me the full path to the font file used by the "Emmentaler-13" font. If
> I use a non-existent font name, say
> #(ly:font-config-get-font-file "SomeFont")
> I get a reference to emmentaler-11.otf, which is obviously used as fallback
> font by fontconfig.
> However, a Windows user reported that the same references "marlett.ttf" on
> his system.

On my very old and outdated Ubuntu-system
#(display (ly:font-config-get-font-file "emmentaler-13.otf"))
in a lily-file returns:
/home/harm/.fonts/wds052801.ttf
which is surely not what I'd expect.

Cheers,
  Harm

Btw, none of the fallbacks in the file you sent privately works for me.

>
> I wanted to use this approach to determine if a requested font exists on the
> user's system, but now I'm not sure anymore if that's a reliable approach.
> Of course I can simply add the check for marlett.ttf, but I have the
> impression that the returned fallback font isn't hard-coded but can vary
> with the user's installation or font availability.
>
> So:
> 1)
> Does anyone know of another approach to determine if a given font is visible
> to fontconfig?
> (I can't check for the file name because this doesn't necessarily match the
> font name)
>
> or
> 2)
> Is there a function to retrieve the "font name" from a given file name?
> It would be a viable approach if I could compare the result of that request
> with the original font name.
>
> TIA
> Urs
>
> ___
> lilypond-user mailing list
> lilypond-user@gnu.org
> https://lists.gnu.org/mailman/listinfo/lilypond-user

___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Thomas Morley
2015-04-28 9:48 GMT+02:00 Urs Liska :
>
>
> Am 28.04.2015 um 09:38 schrieb Werner LEMBERG:
>
> Is there a function to retrieve the "font name" from a given file
> name?  It would be a viable approach if I could compare the result
> of that request with the original font name.
>
> For TTFs and TTCs (either with TrueType outlines or embedded CFFs) you
> can use `ly:ttf-ps-name'.
>
>
> Thanks that seems to work perfectly. Try
>
> \version "2.19.19"
>
> fontExists =
> #(define-void-function (parser location font-name)(string?)
>(let* ((font-file (ly:font-config-get-font-file font-name))
>   (reverse-font-name (ly:ttf-ps-name font-file))
>   (font-exists (string=? font-name reverse-font-name)))
>  (ly:message (format "\nGiven font name: ~a" font-name))
>  (ly:message (format "Determined font file: ~a" font-file))
>  (ly:message (format "Actual font in that file: ~a" reverse-font-name))
>  (ly:message (format "Given font is present: ~a" font-exists
>
> \fontExists "Emmentaler-13"
> \fontExists "Fancy-Font"
>

For me this returns:

Given font name: Emmentaler-13
Determined font file: /home/harm/.fonts/wds052801.ttf
Actual font in that file: WaltDisneyScript
Given font is present: #f

Given font name: Fancy-Font
Determined font file: /home/harm/.fonts/wds052801.ttf
Actual font in that file: WaltDisneyScript
Given font is present: #f

Again, on an outdated Ubuntu.

Cheers,
  Harm


>
> Looking into lilypond's code, however, I don't see why this shouldn't
> work for Type1 fonts (or even pure CFFs) also.  It's worth a try – and
> if it works, we should provide an alias name for `ly:ttf-ps-name'.
>
>
> I don't know how to proceed with this.
>
> However, in the context of my current patch I will add a variant of the
> above function to font.scm.
>
> Urs
>
> Werner
>
>
>
> ___
> lilypond-user mailing list
> lilypond-user@gnu.org
> https://lists.gnu.org/mailman/listinfo/lilypond-user
>

___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Urs Liska



Am 28.04.2015 um 10:07 schrieb Thomas Morley:

2015-04-28 9:23 GMT+02:00 Urs Liska :

Hi all,

#(ly:font-config-get-font-file "Emmentaler-13")

gives me the full path to the font file used by the "Emmentaler-13" font. If
I use a non-existent font name, say
#(ly:font-config-get-font-file "SomeFont")
I get a reference to emmentaler-11.otf, which is obviously used as fallback
font by fontconfig.
However, a Windows user reported that the same references "marlett.ttf" on
his system.

On my very old and outdated Ubuntu-system
#(display (ly:font-config-get-font-file "emmentaler-13.otf"))
in a lily-file returns:
/home/harm/.fonts/wds052801.ttf
which is surely not what I'd expect.


And what about

#(display (ly:font-config-get-font-file "Emmentaler-13"))

?
(it expects the font name and not the file name (actually that's the 
point of the function))


But it shows that my assumption was correct that the approach isn't 
reliably enough.


What's the output of

#(display (ly:ttf-ps-name (ly:font-config-get-font-file "Emmentaler-13")))
?

Urs



Cheers,
   Harm

Btw, none of the fallbacks in the file you sent privately works for me.


Which is clear from the above.


I wanted to use this approach to determine if a requested font exists on the
user's system, but now I'm not sure anymore if that's a reliable approach.
Of course I can simply add the check for marlett.ttf, but I have the
impression that the returned fallback font isn't hard-coded but can vary
with the user's installation or font availability.

So:
1)
Does anyone know of another approach to determine if a given font is visible
to fontconfig?
(I can't check for the file name because this doesn't necessarily match the
font name)

or
2)
Is there a function to retrieve the "font name" from a given file name?
It would be a viable approach if I could compare the result of that request
with the original font name.

TIA
Urs

___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user



___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Urs Liska



Am 28.04.2015 um 10:12 schrieb Thomas Morley:

2015-04-28 9:48 GMT+02:00 Urs Liska :


Am 28.04.2015 um 09:38 schrieb Werner LEMBERG:

Is there a function to retrieve the "font name" from a given file
name?  It would be a viable approach if I could compare the result
of that request with the original font name.

For TTFs and TTCs (either with TrueType outlines or embedded CFFs) you
can use `ly:ttf-ps-name'.


Thanks that seems to work perfectly. Try

\version "2.19.19"

fontExists =
#(define-void-function (parser location font-name)(string?)
(let* ((font-file (ly:font-config-get-font-file font-name))
   (reverse-font-name (ly:ttf-ps-name font-file))
   (font-exists (string=? font-name reverse-font-name)))
  (ly:message (format "\nGiven font name: ~a" font-name))
  (ly:message (format "Determined font file: ~a" font-file))
  (ly:message (format "Actual font in that file: ~a" reverse-font-name))
  (ly:message (format "Given font is present: ~a" font-exists

\fontExists "Emmentaler-13"
\fontExists "Fancy-Font"


For me this returns:

Given font name: Emmentaler-13
Determined font file: /home/harm/.fonts/wds052801.ttf
Actual font in that file: WaltDisneyScript
Given font is present: #f

Given font name: Fancy-Font
Determined font file: /home/harm/.fonts/wds052801.ttf
Actual font in that file: WaltDisneyScript
Given font is present: #f


OMG!



Again, on an outdated Ubuntu.


But that shouldn't make a difference. At least we can't accept that it 
makes a difference.


What is the result of ly:ttf-ps-name when you pass it the full path to a 
real emmentaler file (I can't see where they are on your system of course)?


Urs



Cheers,
   Harm



Looking into lilypond's code, however, I don't see why this shouldn't
work for Type1 fonts (or even pure CFFs) also.  It's worth a try – and
if it works, we should provide an alias name for `ly:ttf-ps-name'.


I don't know how to proceed with this.

However, in the context of my current patch I will add a variant of the
above function to font.scm.

Urs

 Werner



___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user




___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Thomas Morley
2015-04-28 10:12 GMT+02:00 Urs Liska :
>
>
> Am 28.04.2015 um 10:07 schrieb Thomas Morley:
>>
>> 2015-04-28 9:23 GMT+02:00 Urs Liska :
>>>
>>> Hi all,
>>>
>>> #(ly:font-config-get-font-file "Emmentaler-13")
>>>
>>> gives me the full path to the font file used by the "Emmentaler-13" font.
>>> If
>>> I use a non-existent font name, say
>>> #(ly:font-config-get-font-file "SomeFont")
>>> I get a reference to emmentaler-11.otf, which is obviously used as
>>> fallback
>>> font by fontconfig.
>>> However, a Windows user reported that the same references "marlett.ttf"
>>> on
>>> his system.
>>
>> On my very old and outdated Ubuntu-system
>> #(display (ly:font-config-get-font-file "emmentaler-13.otf"))
>> in a lily-file returns:
>> /home/harm/.fonts/wds052801.ttf
>> which is surely not what I'd expect.
>
>
> And what about
>
> #(display (ly:font-config-get-font-file "Emmentaler-13"))

->
/home/harm/.fonts/wds052801.ttf

>
> ?
> (it expects the font name and not the file name (actually that's the point
> of the function))
>
> But it shows that my assumption was correct that the approach isn't reliably
> enough.
>
> What's the output of
>
> #(display (ly:ttf-ps-name (ly:font-config-get-font-file "Emmentaler-13")))

->
WaltDisneyScript

Should I type rofl or :(((

Cheers,
  Harm

> ?
>
> Urs
>
>>
>> Cheers,
>>Harm
>>
>> Btw, none of the fallbacks in the file you sent privately works for me.
>
>
> Which is clear from the above.
>
>
>>> I wanted to use this approach to determine if a requested font exists on
>>> the
>>> user's system, but now I'm not sure anymore if that's a reliable
>>> approach.
>>> Of course I can simply add the check for marlett.ttf, but I have the
>>> impression that the returned fallback font isn't hard-coded but can vary
>>> with the user's installation or font availability.
>>>
>>> So:
>>> 1)
>>> Does anyone know of another approach to determine if a given font is
>>> visible
>>> to fontconfig?
>>> (I can't check for the file name because this doesn't necessarily match
>>> the
>>> font name)
>>>
>>> or
>>> 2)
>>> Is there a function to retrieve the "font name" from a given file name?
>>> It would be a viable approach if I could compare the result of that
>>> request
>>> with the original font name.
>>>
>>> TIA
>>> Urs
>>>
>>> ___
>>> lilypond-user mailing list
>>> lilypond-user@gnu.org
>>> https://lists.gnu.org/mailman/listinfo/lilypond-user
>
>

___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Urs Liska



Am 28.04.2015 um 10:16 schrieb Thomas Morley:

->
WaltDisneyScript

Should I type rofl or :(((

Probably a rude complaint towards the Ubuntu maintainers ;-)

___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Thomas Morley
2015-04-28 10:16 GMT+02:00 Urs Liska :
>
>
> Am 28.04.2015 um 10:12 schrieb Thomas Morley:
>>
>> 2015-04-28 9:48 GMT+02:00 Urs Liska :
>>>
>>>
>>> Am 28.04.2015 um 09:38 schrieb Werner LEMBERG:
>>>
>>> Is there a function to retrieve the "font name" from a given file
>>> name?  It would be a viable approach if I could compare the result
>>> of that request with the original font name.
>>>
>>> For TTFs and TTCs (either with TrueType outlines or embedded CFFs) you
>>> can use `ly:ttf-ps-name'.
>>>
>>>
>>> Thanks that seems to work perfectly. Try
>>>
>>> \version "2.19.19"
>>>
>>> fontExists =
>>> #(define-void-function (parser location font-name)(string?)
>>> (let* ((font-file (ly:font-config-get-font-file font-name))
>>>(reverse-font-name (ly:ttf-ps-name font-file))
>>>(font-exists (string=? font-name reverse-font-name)))
>>>   (ly:message (format "\nGiven font name: ~a" font-name))
>>>   (ly:message (format "Determined font file: ~a" font-file))
>>>   (ly:message (format "Actual font in that file: ~a"
>>> reverse-font-name))
>>>   (ly:message (format "Given font is present: ~a" font-exists
>>>
>>> \fontExists "Emmentaler-13"
>>> \fontExists "Fancy-Font"
>>>
>> For me this returns:
>>
>> Given font name: Emmentaler-13
>> Determined font file: /home/harm/.fonts/wds052801.ttf
>> Actual font in that file: WaltDisneyScript
>> Given font is present: #f
>>
>> Given font name: Fancy-Font
>> Determined font file: /home/harm/.fonts/wds052801.ttf
>> Actual font in that file: WaltDisneyScript
>> Given font is present: #f
>
>
> OMG!
>
>>
>> Again, on an outdated Ubuntu.
>
>
> But that shouldn't make a difference. At least we can't accept that it makes
> a difference.
>
> What is the result of ly:ttf-ps-name when you pass it the full path to a
> real emmentaler file (I can't see where they are on your system of course)?

#(display
(ly:font-config-get-font-file
"/home/harm/lilydevel/usr/share/lilypond/current/fonts/otf/emmentaler-13.otf"))

->/home/harm/.fonts/wds052801.ttf

#(display
  (ly:ttf-ps-name
(ly:font-config-get-font-file
"/home/harm/lilydevel/usr/share/lilypond/current/fonts/otf/emmentaler-13.otf")))

->WaltDisneyScript

...

___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Thomas Morley
2015-04-28 10:18 GMT+02:00 Urs Liska :
>
>
> Am 28.04.2015 um 10:16 schrieb Thomas Morley:
>>
>> ->
>> WaltDisneyScript
>>
>> Should I type rofl or :(((
>
> Probably a rude complaint towards the Ubuntu maintainers ;-)

I told you, it's an outdated system.
I really should upgarde or use another Linux OS

Atm I can't test anymore, will be off for work soon ...

Cheers,
  Harm

___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Urs Liska



Am 28.04.2015 um 10:28 schrieb Thomas Morley:


But that shouldn't make a difference. At least we can't accept that it makes
a difference.

What is the result of ly:ttf-ps-name when you pass it the full path to a
real emmentaler file (I can't see where they are on your system of course)?

#(display
(ly:font-config-get-font-file
"/home/harm/lilydevel/usr/share/lilypond/current/fonts/otf/emmentaler-13.otf"))

->/home/harm/.fonts/wds052801.ttf


This should have been

#(display
(ly:ttf-ps-name
"/home/harm/lilydevel/usr/share/lilypond/current/fonts/otf/emmentaler-13.otf"))




#(display
   (ly:ttf-ps-name
 (ly:font-config-get-font-file
"/home/harm/lilydevel/usr/share/lilypond/current/fonts/otf/emmentaler-13.otf")))

->WaltDisneyScript


This is expected from the above.



...



___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Urs Liska



Am 28.04.2015 um 10:55 schrieb Alexander Kobel:

On 2015-04-28 10:16, Urs Liska wrote:

Am 28.04.2015 um 10:12 schrieb Thomas Morley:

2015-04-28 9:48 GMT+02:00 Urs Liska :

Am 28.04.2015 um 09:38 schrieb Werner LEMBERG:

For TTFs and TTCs (either with TrueType outlines or embedded CFFs) you
can use `ly:ttf-ps-name'.

 [...]
Again, on an outdated Ubuntu.


But that shouldn't make a difference. At least we can't accept that it
makes a difference.

What is the result of ly:ttf-ps-name when you pass it the full path to a
real emmentaler file (I can't see where they are on your system of 
course)?


Hi,

FWIW attached are the results on an up-to-date Arch.
I'm not surprised that the Emmentaler is not found; it is not in the 
default search path. 


Hm, on my system (up-to-date Debian stable)

#(display (ly:font-config-get-font-file "Emmentaler-13"))
->/home/uliska/git/lilypond/lilypond-builds/current/out/share/lilypond/current/fonts/otf/emmentaler-13.otf

And this works with any of the LilyPond installation (means: I haven't 
done anything to add the directories to fontconfig's search path.


These differing reports look strange to me, and I'm not happy with it.
What I need is a function that returns the full path to a font file 
(retrieved from its font name) or #f if that font isn't present in the 
system.
This makes it possible to let fonts fall back to Emmentaler or the 
default text fonts, print a warning and avoid aborting the compilation 
with a file-not-found error.


Urs

ttf-ps-name works (as Werner suspected) also for the Alegreya-OTF; but 
neither the DejaVu TTF nor any other font seems to be found via 
ly:font-config-get-font-file. BTW, appending a design size does not help.



Best,
Alexander


___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Werner LEMBERG

>> What is the result of ly:ttf-ps-name when you pass it the full path
>> to a real emmentaler file (I can't see where they are on your
>> system of course)?
>
> #(display
> (ly:font-config-get-font-file
> "/home/harm/lilydevel/usr/share/lilypond/current/fonts/otf/emmentaler-13.otf"))
>
> ->/home/harm/.fonts/wds052801.ttf

What does

  lilypond -dshow-available-fonts

report?  For example, I find

  family Emmentaler-13   
   Emmentaler\-13:style=13

in the list.  Is your lilypond font directory listed at all at the end
of the output?


Werner

___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Alexander Kobel

On 2015-04-28 10:16, Urs Liska wrote:

Am 28.04.2015 um 10:12 schrieb Thomas Morley:

2015-04-28 9:48 GMT+02:00 Urs Liska :

Am 28.04.2015 um 09:38 schrieb Werner LEMBERG:

For TTFs and TTCs (either with TrueType outlines or embedded CFFs) you
can use `ly:ttf-ps-name'.

 [...]
Again, on an outdated Ubuntu.


But that shouldn't make a difference. At least we can't accept that it
makes a difference.

What is the result of ly:ttf-ps-name when you pass it the full path to a
real emmentaler file (I can't see where they are on your system of course)?


Hi,

FWIW attached are the results on an up-to-date Arch.
I'm not surprised that the Emmentaler is not found; it is not in the 
default search path. ttf-ps-name works (as Werner suspected) also for 
the Alegreya-OTF; but neither the DejaVu TTF nor any other font seems to 
be found via ly:font-config-get-font-file. BTW, appending a design size 
does not help.



Best,
Alexander
/usr/share/fonts/OTF/Alegreya-Regular.otf: Alegreya:style=Regular
/usr/share/fonts/TTF/DejaVuSans.ttf: DejaVu Sans:style=Book
# nope, no Emmentaler in here...
\version "2.19.18"

fontExists =
#(define-void-function (parser location font-name)(string?)
   (let* ((font-file (ly:font-config-get-font-file font-name))
  (reverse-font-name (ly:ttf-ps-name font-file))
  (font-exists (string=? font-name reverse-font-name)))
 (ly:message (format "\nGiven font name: ~a" font-name))
 (ly:message (format "Determined font file: ~a" font-file))
 (ly:message (format "Actual font in that file: ~a" reverse-font-name))
 (ly:message (format "Given font is present: ~a" font-exists

\fontExists "Emmentaler-13"
#(display (ly:font-config-get-font-file "Emmentaler-13"))
#(newline)
#(display (ly:ttf-ps-name (ly:font-config-get-font-file "Emmentaler-13")))
#(newline)
#(newline)

\fontExists "Alegreya"
#(display (ly:font-config-get-font-file "Alegreya"))
#(newline)
#(display (ly:ttf-ps-name (ly:font-config-get-font-file "Alegreya")))
#(newline)
#(display (ly:ttf-ps-name "/usr/share/fonts/OTF/Alegreya-Regular.otf"))

\fontExists "DejaVu Sans"
#(display (ly:font-config-get-font-file "DejaVu Sans"))
#(newline)
#(display (ly:ttf-ps-name (ly:font-config-get-font-file "DejaVu Sans")))
#(newline)
#(display (ly:ttf-ps-name "/usr/share/fonts/TTF/DejaVuSans.ttf"))
GNU LilyPond 2.19.18
Processing `test.ly'
Parsing...

Given font name: Emmentaler-13
Determined font file: /usr/share/fonts/TTF/mplus-1c-medium.ttf
Actual font in that file: mplus-1c-medium
Given font is present: #f

Given font name: Alegreya
Determined font file: /usr/share/fonts/TTF/mplus-1c-medium.ttf
Actual font in that file: mplus-1c-medium
Given font is present: #f

Given font name: DejaVu Sans
Determined font file: /usr/share/fonts/TTF/mplus-1c-medium.ttf
Actual font in that file: mplus-1c-medium
Given font is present: #f/usr/share/fonts/TTF/mplus-1c-medium.ttf
mplus-1c-medium

/usr/share/fonts/TTF/mplus-1c-medium.ttf
mplus-1c-medium
Alegreya-Regular/usr/share/fonts/TTF/mplus-1c-medium.ttf
mplus-1c-medium
DejaVuSans
Success: compilation successfully completed
___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Alexander Kobel

On 2015-04-28 10:51, Werner LEMBERG wrote:



What is the result of ly:ttf-ps-name when you pass it the full path
to a real emmentaler file (I can't see where they are on your
system of course)?


#(display
(ly:font-config-get-font-file
"/home/harm/lilydevel/usr/share/lilypond/current/fonts/otf/emmentaler-13.otf"))

->/home/harm/.fonts/wds052801.ttf


What does

   lilypond -dshow-available-fonts

report?  For example, I find

   family Emmentaler-13
Emmentaler\-13:style=13

in the list.  Is your lilypond font directory listed at all at the end
of the output?


akobel@lap-11-06 ~ % lilypond -dshow-available-fonts 2>&1
GNU LilyPond 2.19.18

family Alegreya
 Alegreya:style=Regular

family DejaVu Sans
 DejaVu Sans:style=Book

family Emmentaler-11
 Emmentaler\-11:style=11
family Emmentaler-13
 Emmentaler\-13:style=13
family Emmentaler-14
 Emmentaler\-14:style=14
family Emmentaler-16
 Emmentaler\-16:style=16
family Emmentaler-18
 Emmentaler\-18:style=18
family Emmentaler-20
 Emmentaler\-20:style=20
family Emmentaler-23
 Emmentaler\-23:style=23
family Emmentaler-26
 Emmentaler\-26:style=26
family Emmentaler-Brace
 Emmentaler\-Brace:style=Brace


Hmm...


Best,
Alexander

___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Werner LEMBERG

> family Alegreya
>  Alegreya:style=Regular
> 
> family DejaVu Sans
>  DejaVu Sans:style=Book
> 
> family Emmentaler-11
>  Emmentaler\-11:style=11
> [...]
> 
> Hmm...

No `hmm' here :-) Lilypond adds its own font directories to the list
of directories searched by fontconfig.


Werner

___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Urs Liska



Am 28.04.2015 um 11:41 schrieb Werner LEMBERG:

family Alegreya
  Alegreya:style=Regular

family DejaVu Sans
  DejaVu Sans:style=Book

family Emmentaler-11
  Emmentaler\-11:style=11
[...]

Hmm...

No `hmm' here :-) Lilypond adds its own font directories to the list
of directories searched by fontconfig.



The hmm refers to the fact that (ly:font-config-get-font-file) doesn't 
find the fonts

Urs

 Werner



___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Alexander Kobel

On 2015-04-28 11:45, Urs Liska wrote:



Am 28.04.2015 um 11:41 schrieb Werner LEMBERG:

family Alegreya
  Alegreya:style=Regular

family DejaVu Sans
  DejaVu Sans:style=Book

family Emmentaler-11
  Emmentaler\-11:style=11
[...]

Hmm...


No `hmm' here :-) Lilypond adds its own font directories to the list
of directories searched by fontconfig.


I see. Not a surprise, on a second though.


The hmm refers to the fact that (ly:font-config-get-font-file) doesn't
find the fonts


Saved me... ;-)


Alexander

___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Werner LEMBERG

On my openSuSE GNU/Linux box, I get different results.

> Given font name: Emmentaler-13
> Determined font file: /usr/share/fonts/TTF/mplus-1c-medium.ttf
> Actual font in that file: mplus-1c-medium
> Given font is present: #f

  Given font name: Emmentaler-13
  Determined font file: 
/usr/local/share/lilypond/2.19.16/fonts/otf/emmentaler-13.otf
  Actual font in that file: Emmentaler-13
  Given font is present: 
#t/usr/local/share/lilypond/2.19.16/fonts/otf/emmentaler-13.otf
  Emmentaler-13

> Given font name: Alegreya
> Determined font file: /usr/share/fonts/TTF/mplus-1c-medium.ttf
> Actual font in that file: mplus-1c-medium
> Given font is present: #f

  Given font name: Alegreya
  Determined font file: /usr/share/fonts/truetype/Alegreya-Regular.ttf
  Actual font in that file: Alegreya-Regular
  Given font is present: #f/usr/share/fonts/truetype/Alegreya-Regular.ttf
  Alegreya-Regular

Note that `ly:ttf-ps-name' returns the font's *PostScript* name.  This
is *not* what fontconfig normally operates on (but see below).

> Given font name: DejaVu Sans
> Determined font file: /usr/share/fonts/TTF/mplus-1c-medium.ttf
> Actual font in that file: mplus-1c-medium
> Given font is present: #f/usr/share/fonts/TTF/mplus-1c-medium.ttf
> mplus-1c-medium

  Given font name: DejaVu Sans
  Determined font file: /usr/share/fonts/truetype/DejaVuSans.ttf
  Actual font in that file: DejaVuSans
  Given font is present: #f/usr/share/fonts/truetype/DejaVuSans.ttf
  DejaVuSans

Same as above: `DejaVuSans' != `DejaVu Sans'.

Since FontConfig version 2.11 (released October 2013), however, it is
possible to search for PostScript names also.  Example:

  $ fc-match "Alegreya"
  Alegreya-Regular.ttf: "Alegreya" "Regular"

  $ fc-match "AlegreyaRegular"
  arial.ttf: "Arial" "Normal"

  $ fc-match ":postscriptname=AlegreyaRegular"
  Alegreya-Regular.ttf: "Alegreya" "Regular"

Maybe lilypond's `display_fontset' function (in font-config-scheme.cc)
can be extended to display PS names also.  And perhaps it makes sense
to extend lilypond's font loading function to accept a font's PS name
– or to provide a Scheme function wrapper for FontConfig to access a
given font's PS name.


Werner
___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Johan Vromans
On Tue, 28 Apr 2015 10:32:29 +0200
Thomas Morley  wrote:

> 2015-04-28 10:18 GMT+02:00 Urs Liska :
> >
> >
> > Am 28.04.2015 um 10:16 schrieb Thomas Morley:
> >>
> >> ->
> >> WaltDisneyScript
> >>
> >> Should I type rofl or :(((
> >
> > Probably a rude complaint towards the Ubuntu maintainers ;-)

   Given font name: Emmentaler-13
   Determined font file: /usr/share/fonts/mscore/mscore-MuseJazz.ttf
   Actual font in that file: MuseJazz-Medium
   Given font is present: #f

At least I get a *music* related font :) .

   Given font name: MuseJazz-Medium
   Determined font file: /usr/share/fonts/mscore/mscore-MuseJazz.ttf
   Actual font in that file: MuseJazz-Medium
   Given font is present: #t

It seems that the "font is present" info is relevant.

-- Johan

___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Alexander Kobel

On 2015-04-28 12:18, Werner LEMBERG wrote:

On my openSuSE GNU/Linux box, I get different results.


Given font name: Emmentaler-13
Determined font file: /usr/share/fonts/TTF/mplus-1c-medium.ttf
Actual font in that file: mplus-1c-medium
Given font is present: #f


   Given font name: Emmentaler-13
   Determined font file: 
/usr/local/share/lilypond/2.19.16/fonts/otf/emmentaler-13.otf
   Actual font in that file: Emmentaler-13
   Given font is present: 
#t/usr/local/share/lilypond/2.19.16/fonts/otf/emmentaler-13.otf
   Emmentaler-13


Given font name: Alegreya
Determined font file: /usr/share/fonts/TTF/mplus-1c-medium.ttf
Actual font in that file: mplus-1c-medium
Given font is present: #f


   Given font name: Alegreya
   Determined font file: /usr/share/fonts/truetype/Alegreya-Regular.ttf
   Actual font in that file: Alegreya-Regular
   Given font is present: #f/usr/share/fonts/truetype/Alegreya-Regular.ttf
   Alegreya-Regular

Note that `ly:ttf-ps-name' returns the font's *PostScript* name.  This
is *not* what fontconfig normally operates on (but see below).


I see. It's the same situation when I ask for "Alegreya-Regular" or 
"DejaVuSans", though. No change at all.

Also, I wonder why M+ is offered in my case; because of

akobel@lap-11-06 ~/test % fc-match FOOBAR
DejaVuSans.ttf: "DejaVu Sans" "Book"
akobel@lap-11-06 ~/test % fc-list --version
fontconfig version 2.11.1

BTW, on my Debian stable, I get:

~/test % fc-match FOOBAR
Vera.ttf: "Bitstream Vera Sans" "Roman"
~/test % fc-list --version
fontconfig version 2.9.0

while the test.ly offers KanjiStrokeOrders as a substitute for what it 
cannot find.



Since FontConfig version 2.11 (released October 2013), however, it is
possible to search for PostScript names also.  Example:

   $ fc-match "Alegreya"
   Alegreya-Regular.ttf: "Alegreya" "Regular"

   $ fc-match "AlegreyaRegular"
   arial.ttf: "Arial" "Normal"

   $ fc-match ":postscriptname=AlegreyaRegular"
   Alegreya-Regular.ttf: "Alegreya" "Regular"


Ditto (on Arch, with FC 2.11.1).


Alexander

___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Urs Liska



Am 28.04.2015 um 12:18 schrieb Werner LEMBERG:

On my openSuSE GNU/Linux box, I get different results.


Given font name: Emmentaler-13
Determined font file: /usr/share/fonts/TTF/mplus-1c-medium.ttf
Actual font in that file: mplus-1c-medium
Given font is present: #f

   Given font name: Emmentaler-13
   Determined font file: 
/usr/local/share/lilypond/2.19.16/fonts/otf/emmentaler-13.otf
   Actual font in that file: Emmentaler-13
   Given font is present: 
#t/usr/local/share/lilypond/2.19.16/fonts/otf/emmentaler-13.otf
   Emmentaler-13


Given font name: Alegreya
Determined font file: /usr/share/fonts/TTF/mplus-1c-medium.ttf
Actual font in that file: mplus-1c-medium
Given font is present: #f

   Given font name: Alegreya
   Determined font file: /usr/share/fonts/truetype/Alegreya-Regular.ttf
   Actual font in that file: Alegreya-Regular
   Given font is present: #f/usr/share/fonts/truetype/Alegreya-Regular.ttf
   Alegreya-Regular

Note that `ly:ttf-ps-name' returns the font's *PostScript* name.  This
is *not* what fontconfig normally operates on (but see below).


Given font name: DejaVu Sans
Determined font file: /usr/share/fonts/TTF/mplus-1c-medium.ttf
Actual font in that file: mplus-1c-medium
Given font is present: #f/usr/share/fonts/TTF/mplus-1c-medium.ttf
mplus-1c-medium

   Given font name: DejaVu Sans
   Determined font file: /usr/share/fonts/truetype/DejaVuSans.ttf
   Actual font in that file: DejaVuSans
   Given font is present: #f/usr/share/fonts/truetype/DejaVuSans.ttf
   DejaVuSans

Same as above: `DejaVuSans' != `DejaVu Sans'.

Since FontConfig version 2.11 (released October 2013), however, it is
possible to search for PostScript names also.  Example:

   $ fc-match "Alegreya"
   Alegreya-Regular.ttf: "Alegreya" "Regular"

   $ fc-match "AlegreyaRegular"
   arial.ttf: "Arial" "Normal"

   $ fc-match ":postscriptname=AlegreyaRegular"
   Alegreya-Regular.ttf: "Alegreya" "Regular"

Maybe lilypond's `display_fontset' function (in font-config-scheme.cc)
can be extended to display PS names also.  And perhaps it makes sense
to extend lilypond's font loading function to accept a font's PS name
– or to provide a Scheme function wrapper for FontConfig to access a
given font's PS name.


As it stands I can't use this comparison either to determine if a given 
font is present on the user's system.
I think in any case it would be good to have a pair of functions that 
can reliably perform the step name->file->name and return the original 
input as its result. Currently the input is a "font name" and the output 
is a "PostScript name" (just to repeat that.)


From starting to look at the font- C++ files and searching the net for 
approaches I can think of the following possibilities:


1)
Add a companion to ly:ttf-ps-name that returns the file name. 
Unfortunately there seems to be no equivalent to FT_Get_Postscript_Name, 
and from what I've seen one would have to somehow retrieve the 
information from FT_Get_Sfnt_Name (which clearly is over my head).


2)
Modify ly:font-config-get-font-file so its return value is predictable 
if the font is not found.
I don't fully understand what happens in that function (also because 
available documentation on the Freetype commands seems even harder to 
grasp than LilyPond's internals ...), but wouldn't it be possible to 
modify this so that it doesn't perform that seemingly random font


If that's possible I would suggest this second approach and would like 
to get opinions on possible side-effects that I don't see yet.
I think that in most of the cases it is very undesirable to use an 
arbitrary font instead of the requested font. So what I'm proposing is 
to change this function so that it returns #f or an empty string if the 
requested font doesn't exist.
A modification in font.scm will then take care of handling that case 
properly by printing a warning and providing a proper (i.e. predictable) 
fallback font. In \setMusicFont (these functions are new in what I'm 
preparing) it would fallback to Emmentaler, in \setTextFont to the 
appropriate default text font.


What do you think?

Urs



 Werner


___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Urs Liska



Am 28.04.2015 um 13:36 schrieb Alexander Kobel:

BTW, on my Debian stable, I get:

~/test % fc-match FOOBAR
Vera.ttf: "Bitstream Vera Sans" "Roman"
~/test % fc-list --version
fontconfig version 2.9.0


Sorry if I ask stupid questions, but:

fc-match gives a list of
- file name (without path)
- font name
- family

How would it be possible to access these (particularly the second item) 
from a C++ function that could complement ly:ttf-ps-name?


Urs

___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Cynthia Karl
> Message: 6
> Date: Tue, 28 Apr 2015 09:48:51 +0200
> From: Urs Liska 
> To: Werner LEMBERG 
> Subject: Re: How to determine if a font is a fallback font?
> 
> Am 28.04.2015 um 09:38 schrieb Werner LEMBERG:
>>> Is there a function to retrieve the "font name" from a given file
>>> name?  It would be a viable approach if I could compare the result
>>> of that request with the original font name.
>> For TTFs and TTCs (either with TrueType outlines or embedded CFFs) you
>> can use `ly:ttf-ps-name'.
> 
> Thanks that seems to work perfectly. Try
> 
> \version  "2.19.19"
> 
> fontExists =
> #(define-void-function  (parser location font-name)(string?)
>(let*  ((font-file (ly:font-config-get-font-file  font-name))
>   (reverse-font-name (ly:ttf-ps-name  font-file))
>   (font-exists (string=?  font-name reverse-font-name)))
>  (ly:message  (format  "\nGiven font name: ~a"  font-name))
>  (ly:message  (format  "Determined font file: ~a"  font-file))
>  (ly:message  (format  "Actual font in that file: ~a"  reverse-font-name))
>  (ly:message  (format  "Given font is present: ~a"  font-exists
> 
> \fontExists  "Emmentaler-13"
> \fontExists  "Fancy-Font"
> 
> 
>> 
>> Looking into lilypond's code, however, I don't see why this shouldn't
>> work for Type1 fonts (or even pure CFFs) also.  It's worth a try ? and
>> if it works, we should provide an alias name for `ly:ttf-ps-name'.
> 
> I don't know how to proceed with this.
> 
> However, in the context of my current patch I will add a variant of the 
> above function to font.scm.

I tried the above snippet with:

\fontExists  "Emmentaler-13"
\fontExists  "Fancy-Font"
\fontExists "Ariel"
\fontExists "Ariel Black"
\fontExists "LucindaGrande"
\fontExists "Feta-13"
\fontExists "Minion Pro"
\fontExists "Century Schoolbook"
\fontExists “Avenir”

In each case, even for the case “LucindaGrande”, I get (with the correct Given 
font name):

Given font name: LucindaGrande
Determined font file: /System/Library/Fonts/LucidaGrande.ttc
Actual font in that file: LucidaGrande
Given font is present: #f

That doesn’t seem right.  Any clues?  Or is it right?


> Re: How to determine if a fon
> 
> Urs


___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Urs Liska



Am 28.04.2015 um 16:50 schrieb Cynthia Karl:

Message: 6
Date: Tue, 28 Apr 2015 09:48:51 +0200
From: Urs Liska 
To: Werner LEMBERG 
Subject: Re: How to determine if a font is a fallback font?

Am 28.04.2015 um 09:38 schrieb Werner LEMBERG:

Is there a function to retrieve the "font name" from a given file
name?  It would be a viable approach if I could compare the result
of that request with the original font name.

For TTFs and TTCs (either with TrueType outlines or embedded CFFs) you
can use `ly:ttf-ps-name'.

Thanks that seems to work perfectly. Try

\version  "2.19.19"

fontExists =
#(define-void-function  (parser location font-name)(string?)
(let*  ((font-file (ly:font-config-get-font-file  font-name))
   (reverse-font-name (ly:ttf-ps-name  font-file))
   (font-exists (string=?  font-name reverse-font-name)))
  (ly:message  (format  "\nGiven font name: ~a"  font-name))
  (ly:message  (format  "Determined font file: ~a"  font-file))
  (ly:message  (format  "Actual font in that file: ~a"  reverse-font-name))
  (ly:message  (format  "Given font is present: ~a"  font-exists

\fontExists  "Emmentaler-13"
\fontExists  "Fancy-Font"



Looking into lilypond's code, however, I don't see why this shouldn't
work for Type1 fonts (or even pure CFFs) also.  It's worth a try ? and
if it works, we should provide an alias name for `ly:ttf-ps-name'.

I don't know how to proceed with this.

However, in the context of my current patch I will add a variant of the
above function to font.scm.

I tried the above snippet with:

\fontExists  "Emmentaler-13"
\fontExists  "Fancy-Font"
\fontExists "Ariel"
\fontExists "Ariel Black"
\fontExists "LucindaGrande"
\fontExists "Feta-13"
\fontExists "Minion Pro"
\fontExists "Century Schoolbook"
\fontExists “Avenir”

In each case, even for the case “LucindaGrande”, I get (with the correct Given 
font name):

Given font name: LucindaGrande
Determined font file: /System/Library/Fonts/LucidaGrande.ttc
Actual font in that file: LucidaGrande
Given font is present: #f

That doesn’t seem right.  Any clues?  Or is it right?


I see that you give "LucindaGrande" and the retrieved font name is 
"LucidaGrande" without the *n*.

Therefore the comparison returns #f.

But anyway this appraoch is flawed as its input is a "font name" and its 
output the "Postscript name".


Currently I'm trying to wrap my head around this and try to convince 
Freetype/fontconfig (or C++) to determine if there is actually a 
non-replaced font available and to modify the return value accordingly.


Urs





Re: How to determine if a fon

Urs



___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Urs Liska



Am 28.04.2015 um 12:18 schrieb Werner LEMBERG:

On my openSuSE GNU/Linux box, I get different results.


Given font name: Emmentaler-13
Determined font file: /usr/share/fonts/TTF/mplus-1c-medium.ttf
Actual font in that file: mplus-1c-medium
Given font is present: #f

   Given font name: Emmentaler-13
   Determined font file: 
/usr/local/share/lilypond/2.19.16/fonts/otf/emmentaler-13.otf
   Actual font in that file: Emmentaler-13
   Given font is present: 
#t/usr/local/share/lilypond/2.19.16/fonts/otf/emmentaler-13.otf
   Emmentaler-13


Given font name: Alegreya
Determined font file: /usr/share/fonts/TTF/mplus-1c-medium.ttf
Actual font in that file: mplus-1c-medium
Given font is present: #f

   Given font name: Alegreya
   Determined font file: /usr/share/fonts/truetype/Alegreya-Regular.ttf
   Actual font in that file: Alegreya-Regular
   Given font is present: #f/usr/share/fonts/truetype/Alegreya-Regular.ttf
   Alegreya-Regular

Note that `ly:ttf-ps-name' returns the font's *PostScript* name.  This
is *not* what fontconfig normally operates on (but see below).


Given font name: DejaVu Sans
Determined font file: /usr/share/fonts/TTF/mplus-1c-medium.ttf
Actual font in that file: mplus-1c-medium
Given font is present: #f/usr/share/fonts/TTF/mplus-1c-medium.ttf
mplus-1c-medium

   Given font name: DejaVu Sans
   Determined font file: /usr/share/fonts/truetype/DejaVuSans.ttf
   Actual font in that file: DejaVuSans
   Given font is present: #f/usr/share/fonts/truetype/DejaVuSans.ttf
   DejaVuSans

Same as above: `DejaVuSans' != `DejaVu Sans'.

Since FontConfig version 2.11 (released October 2013), however, it is
possible to search for PostScript names also.  Example:

   $ fc-match "Alegreya"
   Alegreya-Regular.ttf: "Alegreya" "Regular"

   $ fc-match "AlegreyaRegular"
   arial.ttf: "Arial" "Normal"

   $ fc-match ":postscriptname=AlegreyaRegular"
   Alegreya-Regular.ttf: "Alegreya" "Regular"

Maybe lilypond's `display_fontset' function (in font-config-scheme.cc)
can be extended to display PS names also.  And perhaps it makes sense
to extend lilypond's font loading function to accept a font's PS name
– or to provide a Scheme function wrapper for FontConfig to access a
given font's PS name.


 Werner


I think I have found something.

After some experimenting with a copy of font-config-get-font-file and 
trying different approaches I could guess from the documentations 
available I found that replacing an item in the FcPatternGetString call 
this function returns the font name and not the Postscript name or the 
font file.


The following preliminary function (if added to font-config-scheme.cc) 
returns either the Font Name (if the font exists) or "Emmentaler-11" (on 
my system) if it doesn't exist. I assume it would return other names on 
other systems:


LY_DEFINE (ly_font_config_font_exists, "ly:font-config-font-exists", 1, 
0, 0,

   (SCM name),
   "Determing if font @var{name} exists.")
{
  LY_ASSERT_TYPE (scm_is_string, name, 1);

  FcPattern *pat = FcPatternCreate ();
  FcValue val;

  val.type = FcTypeString;
  val.u.s = (const FcChar8 *)ly_scm2string (name).c_str (); // 
FC_SLANT_ITALIC;

  FcPatternAdd (pat, FC_FAMILY, val, FcFalse);

  FcResult result;
  SCM scm_result = SCM_BOOL_F;

  FcConfigSubstitute (NULL, pat, FcMatchFont);
  FcDefaultSubstitute (pat);

  pat = FcFontMatch (NULL, pat, &result);
  FcChar8 *str = 0;
  if (FcPatternGetString (pat, FC_FAMILY, 0, &str) == FcResultMatch)
scm_result = scm_from_utf8_string ((char const *)str);

  FcPatternDestroy (pat);
  return scm_result;
}

Now I get stuck with C++ basics, namely types, references and pointers, 
but it should be possible to achieve something with the following approach:

In the line
scm_result = scm_from_utf ...

"str" holds the result from this match.
If this matches the originally passed "name" argument the return value 
should be set to SCM_BOOL_T.

This should be dead easy, but I don't know to perform this comparison.

If someone gives me a helping hand here we would get a function 
ly:font-config-font-exists that returns #t or #f depending on the 
existence of the font.


Please ...

Best
Urs
 set the return value to SCM_BOOL_T if


___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Urs Liska



Am 28.04.2015 um 17:53 schrieb Urs Liska:

I think I have found something.

After some experimenting with a copy of font-config-get-font-file and 
trying different approaches I could guess from the documentations 
available I found that replacing an item in the FcPatternGetString 
call this function returns the font name and not the Postscript name 
or the font file.


The following preliminary function (if added to font-config-scheme.cc) 
returns either the Font Name (if the font exists) or "Emmentaler-11" 
(on my system) if it doesn't exist. I assume it would return other 
names on other systems:


LY_DEFINE (ly_font_config_font_exists, "ly:font-config-font-exists", 
1, 0, 0,

   (SCM name),
   "Determing if font @var{name} exists.")
{
  LY_ASSERT_TYPE (scm_is_string, name, 1);

  FcPattern *pat = FcPatternCreate ();
  FcValue val;

  val.type = FcTypeString;
  val.u.s = (const FcChar8 *)ly_scm2string (name).c_str (); // 
FC_SLANT_ITALIC;

  FcPatternAdd (pat, FC_FAMILY, val, FcFalse);

  FcResult result;
  SCM scm_result = SCM_BOOL_F;

  FcConfigSubstitute (NULL, pat, FcMatchFont);
  FcDefaultSubstitute (pat);

  pat = FcFontMatch (NULL, pat, &result);
  FcChar8 *str = 0;
  if (FcPatternGetString (pat, FC_FAMILY, 0, &str) == FcResultMatch)
scm_result = scm_from_utf8_string ((char const *)str);

  FcPatternDestroy (pat);
  return scm_result;
}

Now I get stuck with C++ basics, namely types, references and 
pointers, but it should be possible to achieve something with the 
following approach:

In the line
scm_result = scm_from_utf ...

"str" holds the result from this match.
If this matches the originally passed "name" argument the return value 
should be set to SCM_BOOL_T.

This should be dead easy, but I don't know to perform this comparison.

If someone gives me a helping hand here we would get a function 
ly:font-config-font-exists that returns #t or #f depending on the 
existence of the font.


Please ...

Best
Urs


Wrapping this Scheme function around that:

fontExists =
#(define-scheme-function (parser location font-name)(string?)
   (string=? font-name (ly:font-config-font-exists font-name)))

shows that my idea is right: The C++ function returns the family name of 
either the given font or the (system-dependent) fallback font. Now all 
there would be to it is moving the comparison of the latter Scheme 
function to the C++ function .


Urs


___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Urs Liska



Am 28.04.2015 um 18:14 schrieb Urs Liska:



Am 28.04.2015 um 17:53 schrieb Urs Liska:

I think I have found something.

After some experimenting with a copy of font-config-get-font-file and 
trying different approaches I could guess from the documentations 
available I found that replacing an item in the FcPatternGetString 
call this function returns the font name and not the Postscript name 
or the font file.


The following preliminary function (if added to 
font-config-scheme.cc) returns either the Font Name (if the font 
exists) or "Emmentaler-11" (on my system) if it doesn't exist. I 
assume it would return other names on other systems:


LY_DEFINE (ly_font_config_font_exists, "ly:font-config-font-exists", 
1, 0, 0,


...

Best
Urs


Wrapping this Scheme function around that:

fontExists =
#(define-scheme-function (parser location font-name)(string?)
   (string=? font-name (ly:font-config-font-exists font-name)))

shows that my idea is right: The C++ function returns the family name 
of either the given font or the (system-dependent) fallback font. Now 
all there would be to it is moving the comparison of the latter Scheme 
function to the C++ function .


Urs



Last one for this working session: The following function 
ly:font-config-font-exists will return true or false depending on 
whether the given font is available. The only drawback (yet) is that now 
the comparison is case sensitive. But *that* should be easy now?


Urs

LY_DEFINE (ly_font_config_font_exists, "ly:font-config-font-exists", 1, 
0, 0,

   (SCM name),
   "Determine if font @var{name} exists.")
{
  LY_ASSERT_TYPE (scm_is_string, name, 1);

  string in_name = ly_scm2string (name).c_str ();

  FcPattern *pat = FcPatternCreate ();
  FcValue val;

  val.type = FcTypeString;
  val.u.s = (const FcChar8 *)ly_scm2string (name).c_str (); // 
FC_SLANT_ITALIC;

  FcPatternAdd (pat, FC_FAMILY, val, FcFalse);

  FcResult result;
  SCM scm_result = SCM_BOOL_F;

  FcConfigSubstitute (NULL, pat, FcMatchFont);
  FcDefaultSubstitute (pat);

  pat = FcFontMatch (NULL, pat, &result);
  FcChar8 *str = 0;
  if ((FcPatternGetString (pat, FC_FAMILY, 0, &str) == FcResultMatch) &&
  (in_name.compare((char const *)str) == 0))
  scm_result = SCM_BOOL_T;

  FcPatternDestroy (pat);
  return scm_result;
}



___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread David Nalesnik
Hi Urs,

On Tue, Apr 28, 2015 at 11:38 AM, Urs Liska  wrote:

>
>
> Am 28.04.2015 um 18:14 schrieb Urs Liska:
>
>>
>>
>> Am 28.04.2015 um 17:53 schrieb Urs Liska:
>>
>>> I think I have found something.
>>>
>>> After some experimenting with a copy of font-config-get-font-file and
>>> trying different approaches I could guess from the documentations available
>>> I found that replacing an item in the FcPatternGetString call this function
>>> returns the font name and not the Postscript name or the font file.
>>>
>>> The following preliminary function (if added to font-config-scheme.cc)
>>> returns either the Font Name (if the font exists) or "Emmentaler-11" (on my
>>> system) if it doesn't exist. I assume it would return other names on other
>>> systems:
>>>
>>> LY_DEFINE (ly_font_config_font_exists, "ly:font-config-font-exists", 1,
>>> 0, 0,
>>>
>>> ...
>>>
>>> Best
>>> Urs
>>>
>>
>> Wrapping this Scheme function around that:
>>
>> fontExists =
>> #(define-scheme-function (parser location font-name)(string?)
>>(string=? font-name (ly:font-config-font-exists font-name)))
>>
>> shows that my idea is right: The C++ function returns the family name of
>> either the given font or the (system-dependent) fallback font. Now all
>> there would be to it is moving the comparison of the latter Scheme function
>> to the C++ function .
>>
>> Urs
>>
>
>
> Last one for this working session: The following function
> ly:font-config-font-exists will return true or false depending on whether
> the given font is available.


I tried this out on my VM (Ubuntu 10.04.4 -- yes, I need to update to the
most recent LilyDev...)

Should it work for any font that's listed by ly:font-config-display-fonts?
It works for most of the names I've tried, though not all.  For example.
"Kedage" returns #f.



> The only drawback (yet) is that now the comparison is case sensitive. But
> *that* should be easy now?
>

I don't find anything convenient.  I suppose you could just convert both
strings to lower- or uppercase and then compare. But is this desirable?  I
mean, is LilyPond ever case-insensitive?

Thanks for working on this!

David
___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Urs Liska



Am 28.04.2015 um 20:16 schrieb David Nalesnik:

Hi Urs,

On Tue, Apr 28, 2015 at 11:38 AM, Urs Liska > wrote:




Am 28.04.2015 um 18:14 schrieb Urs Liska:



Am 28.04.2015 um 17:53 schrieb Urs Liska:

I think I have found something.

After some experimenting with a copy of
font-config-get-font-file and trying different approaches
I could guess from the documentations available I found
that replacing an item in the FcPatternGetString call this
function returns the font name and not the Postscript name
or the font file.

The following preliminary function (if added to
font-config-scheme.cc) returns either the Font Name (if
the font exists) or "Emmentaler-11" (on my system) if it
doesn't exist. I assume it would return other names on
other systems:

LY_DEFINE (ly_font_config_font_exists,
"ly:font-config-font-exists", 1, 0, 0,

...

Best
Urs


Wrapping this Scheme function around that:

fontExists =
#(define-scheme-function (parser location font-name)(string?)
   (string=? font-name (ly:font-config-font-exists font-name)))

shows that my idea is right: The C++ function returns the
family name of either the given font or the (system-dependent)
fallback font. Now all there would be to it is moving the
comparison of the latter Scheme function to the C++ function .

Urs



Last one for this working session: The following function
ly:font-config-font-exists will return true or false depending on
whether the given font is available.


I tried this out on my VM (Ubuntu 10.04.4 -- yes, I need to update to 
the most recent LilyDev...)


Should it work for any font that's listed by 
ly:font-config-display-fonts?  It works for most of the names I've 
tried, though not all.  For example. "Kedage" returns #f.


AFAICS it should, What is the "font name" of Kedage?
You could try out with my version from the second-to-last post, which 
returns the "plain" result of the fontconfig lookup.




The only drawback (yet) is that now the comparison is case
sensitive. But *that* should be easy now?


I don't find anything convenient.  I suppose you could just convert 
both strings to lower- or uppercase and then compare.


An Unicode/utf8 things to consider here?


But is this desirable?  I mean, is LilyPond ever case-insensitive?


Well, when calling *text* fonts it has always been case insensitive. And 
I would like to keep that because you can't really look into the fonts 
to know how they are capitalized. So I'd be happy if we can make music 
fonts case insensitive too instead of the other way round.


Urs



Thanks for working on this!

David


___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread Werner LEMBERG
>> I think I have found something.  [...]

Looks promising!  Thanks for working on that.  Note that I can help
with FreeType details, but not with FontConfig issues.  However, the
maintainers on fontconfig's e-mail list are very responsive in case
you have difficulties.


Werner


PS: I suggest that you move this discussion to lilypond-devel.

___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-28 Thread David Nalesnik
On Tue, Apr 28, 2015 at 1:43 PM, Urs Liska  wrote:

>
>
> Am 28.04.2015 um 20:16 schrieb David Nalesnik:
>
> Hi Urs,
>
> On Tue, Apr 28, 2015 at 11:38 AM, Urs Liska  wrote:
>
>>
>>
>> Am 28.04.2015 um 18:14 schrieb Urs Liska:
>>
>>>
>>>
>>> Am 28.04.2015 um 17:53 schrieb Urs Liska:
>>>
 I think I have found something.

 After some experimenting with a copy of font-config-get-font-file and
 trying different approaches I could guess from the documentations available
 I found that replacing an item in the FcPatternGetString call this function
 returns the font name and not the Postscript name or the font file.

 The following preliminary function (if added to font-config-scheme.cc)
 returns either the Font Name (if the font exists) or "Emmentaler-11" (on my
 system) if it doesn't exist. I assume it would return other names on other
 systems:

 LY_DEFINE (ly_font_config_font_exists, "ly:font-config-font-exists", 1,
 0, 0,

  ...

 Best
 Urs

>>>
>>> Wrapping this Scheme function around that:
>>>
>>> fontExists =
>>> #(define-scheme-function (parser location font-name)(string?)
>>>(string=? font-name (ly:font-config-font-exists font-name)))
>>>
>>> shows that my idea is right: The C++ function returns the family name of
>>> either the given font or the (system-dependent) fallback font. Now all
>>> there would be to it is moving the comparison of the latter Scheme function
>>> to the C++ function .
>>>
>>> Urs
>>>
>>
>>
>> Last one for this working session: The following function
>> ly:font-config-font-exists will return true or false depending on whether
>> the given font is available.
>
>
>  I tried this out on my VM (Ubuntu 10.04.4 -- yes, I need to update to
> the most recent LilyDev...)
>
>  Should it work for any font that's listed by
> ly:font-config-display-fonts?  It works for most of the names I've tried,
> though not all.  For example. "Kedage" returns #f.
>
>
> AFAICS it should, What is the "font name" of Kedage?
>

Here is a part of the output of (display (ly:font-config-display-fonts):

family DejaVu Sans Mono
 DejaVu Sans Mono:style=Book
family DejaVu Sans Mono
 DejaVu Sans Mono:style=Bold
family Century Schoolbook L
 Century Schoolbook L:style=BoldItalic
family Liberation Serif
 Liberation Serif:style=Italic
family Umpush
 Umpush:style=BoldOblique
family Kedage
 Kedage:style=Normal
family Lohit Bengali
 Lohit Bengali:style=Regular

I simply used the family name, so
\fontExists "Kedage"

Doing so with this list, all return #t except Kedage and Umpush.

Both

(display (ly:font-config-get-font-file "Kedage"))

and

(display (ly:font-config-get-font-file "Umpush"))

return

/usr/share/fonts/truetype/thai/TlwgTypo.ttf

so I presume I am using the right name for the two fonts.



> You could try out with my version from the second-to-last post, which
> returns the "plain" result of the fontconfig lookup.
>

OK, here with both Umpush and Kedage I get
Tlwg Typo

\fontExists "Tlwg Typo"
does in fact return #t with the later patch.

but then one of the entries from ly:font-config-display-fonts is

family Tlwg Typo
 Tlwg Typo:style=Oblique

...so I'm pretty sure I understand nothing of what is going on here :(



>
>
>
>
>> The only drawback (yet) is that now the comparison is case sensitive. But
>> *that* should be easy now?
>>
>
>  I don't find anything convenient.  I suppose you could just convert both
> strings to lower- or uppercase and then compare.
>
>
> An Unicode/utf8 things to consider here?
>

Yes, there's that.  I find this link:
http://stackoverflow.com/questions/11635/case-insensitive-string-comparison-in-c
Maybe there's something useful there.


>
>

>
>   But is this desirable?  I mean, is LilyPond ever case-insensitive?
>
>
> Well, when calling *text* fonts it has always been case insensitive. And I
> would like to keep that because you can't really look into the fonts to
> know how they are capitalized. So I'd be happy if we can make music fonts
> case insensitive too instead of the other way round.
>

Makes sense to me.

David
___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-29 Thread Urs Liska



Am 29.04.2015 um 02:14 schrieb David Nalesnik:



I tried this out on my VM (Ubuntu 10.04.4 -- yes, I need to
update to the most recent LilyDev...)

Should it work for any font that's listed by
ly:font-config-display-fonts?  It works for most of the names
I've tried, though not all.  For example. "Kedage" returns #f.


AFAICS it should, What is the "font name" of Kedage?


Here is a part of the output of (display (ly:font-config-display-fonts):

family DejaVu Sans Mono
 DejaVu Sans Mono:style=Book
family DejaVu Sans Mono
 DejaVu Sans Mono:style=Bold
family Century Schoolbook L
 Century Schoolbook L:style=BoldItalic
family Liberation Serif
 Liberation Serif:style=Italic
family Umpush
 Umpush:style=BoldOblique
family Kedage
 Kedage:style=Normal
family Lohit Bengali
 Lohit Bengali:style=Regular

I simply used the family name, so
\fontExists "Kedage"

Doing so with this list, all return #t except Kedage and Umpush.

Both

(display (ly:font-config-get-font-file "Kedage"))

and

(display (ly:font-config-get-font-file "Umpush"))

return

/usr/share/fonts/truetype/thai/TlwgTypo.ttf

so I presume I am using the right name for the two fonts.


You could try out with my version from the second-to-last post,
which returns the "plain" result of the fontconfig lookup.


OK, here with both Umpush and Kedage I get
Tlwg Typo

\fontExists "Tlwg Typo"
does in fact return #t with the later patch.

but then one of the entries from ly:font-config-display-fonts is

family Tlwg Typo
 Tlwg Typo:style=Oblique

...so I'm pretty sure I understand nothing of what is going on here :(



I assume this has to do with fontconfig not handling these special fonts.

I just installed the  ttf-thai-tlwg package (which installs fonts in a 
slightly different location on my system) which contains Umpush and the 
Tlwg fonts but no Kedage. Umpush and Tlwg Typo are shown in 
ly:font-config-display-fonts;


family Umpush
 Umpush:style=LightOblique

family Tlwg Typo
 Tlwg Typo:style=Bold

while ly:font-config-get-font-file "Umpush" returns the fallback file, 
in my case the emmentaler-11 font file.


fc-match (on the command line) correctly locates both fonts.

I conclude that the lookup function used in ly:font-config-get-font-file 
is not absolutely correct, but has never been so.
So I tend to ignore this for now and open an issue about it so it could 
be handled separately *if* someone has the knowledge to do so.


Urs
___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-29 Thread Urs Liska



Am 29.04.2015 um 09:42 schrieb Urs Liska:
I conclude that the lookup function used in 
ly:font-config-get-font-file is not absolutely correct, but has never 
been so.
So I tend to ignore this for now and open an issue about it so it 
could be handled separately *if* someone has the knowledge to do so.


Urs



Sorry, forgot to ask:
Can you use these fonts the default way at all?

___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: How to determine if a font is a fallback font?

2015-04-29 Thread David Nalesnik
On Wed, Apr 29, 2015 at 2:45 AM, Urs Liska  wrote:

>
>
> Am 29.04.2015 um 09:42 schrieb Urs Liska:
>
>> I conclude that the lookup function used in ly:font-config-get-font-file
>> is not absolutely correct, but has never been so.
>> So I tend to ignore this for now and open an issue about it so it could
>> be handled separately *if* someone has the knowledge to do so.
>>
>> Urs
>>
>>
> Sorry, forgot to ask:
> Can you use these fonts the default way at all?
>

Yes--the following works just fine for me:

 \version "2.19.19"

\paper {
  #(define fonts
(set-global-fonts
  #:roman "Kedage"))
}

\markup {
  \char ##x0CE7 \char ##x0CE8 \char ##x0CE9
  \char ##x0CEA \char ##x0CEB \char ##x0CEC
}

DN
___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user