I think this should work:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\directlua0{
callback.register('define_font',
  function(name, size)
    fonttype = nil
    filename = kpse.find_file(name,"opentype fonts")
    if (filename)
    then fonttype = 'opentype'
    else filename = kpse.find_file(name, "truetype fonts")
    end
    if filename and not fonttype then fonttype = 'truetype' end
    if fonttype then
      if (size < 0) then size = (- 655.36) * size end
      ttffont = fontforge.to_table(fontforge.open(filename))
      if ttffont then
        f = { }
        f.name = ttffont.fontname
        f.fullname = ttffont.names[1].names.fullname
        f.parameters = { }
        f.designsize = size
        f.size = size
        direction = 0
        f.parameters.slant = 0
        f.parameters.space = size * 0.25
        f.parameters.space_stretch = 0.3 * size
        f.parameters.space_shrink = 0.1 * size
        f.parameters.x_height = 0.4 * size
        f.parameters.quad = 1.0 * size
        f.parameters.extra_space = 0
        f.characters = { }
        mag = size / ttffont.units_per_em

         names_of_char = { }
        for char, glyph in pairs(ttffont.map.map)
        do
          names_of_char[ttffont.glyphs[glyph].name]
            = ttffont.map.backmap[glyph]
        end

        names_of_glyph = { }
        for char, glyph in pairs(ttffont.map.map)
        do
          names_of_glyph[ttffont.glyphs[glyph].name]
            = glyph
        end

       for char, glyph in pairs(ttffont.map.map)
        do
          glyph_table = ttffont.glyphs[glyph]

          f.characters[char] = {
            index = glyph,
            width = glyph_table.width * mag,
            name = glyph_table.name,
          }
          if glyph_table.kerns then
            local kerns = { }
            for _, kern in pairs(glyph_table.kerns)
            do
              kerns[names_of_char[kern.char]] = kern.off * mag
            end
          f.characters[char].kerns = kerns
          end
        end
        f.filename = filename
        f.type = 'real'
        f.format = fonttype
        f.embedding = "subset"
        f.cidinfo = {
          registry = "Adobe",
          ordering = "Identity",
          supplement = 0,
          version = 1
        }
      end
    else
      f = font.read_tfm(name, size)
    end
  return f
  end
)
}

\font\test=nazli.ttf at 12pt
\test
Hi. This is just a test.
\end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
Hope that helps

________________________________
> Date: Wed, 1 Oct 2008 11:38:41 +0200
> From: [EMAIL PROTECTED]
> To: [email protected]
> Subject: [Dev-luatex] How to use an OpenType font.
> 
> I am trying to use an open type font. In the manual I can see a piece of Lua 
> code for loading such a font. I "suppose" that I have to enclose it within 
> \direclua0{}, so I wrote
> 
> \directlua0{function load_font (filename)
>  local metrics = nil
>  local font = fontforge.open(filename)
>  if font then
>   metrics = fontforge.to_table(font)
>   fontforge.close(font)
>  end
>  return metrics
> end
> }
> \directlua0{twelverm = load_font('C:/Windows/Fonts/LMRoman12-Regular.otf')}
> 
> but it still does not solve the problem. I have no idea of how to make the 
> font known for TeX.
> 
> This is command is expandable. As an example, the following input:
> $\pi = \directlua0{tex.print(math.pi)}$
> 
> will result in p = 3.1415926535898
> 
> But this leaves me none the wiser about fonts. The problem is: which is the 
> equivalent of
> 
> \font\tenrm=cmr10
> 
> for OpenType (or TrueType) fonts?
> 
> This problem is present to some extent all troughout the manual. It seems as 
> if you were taking always something for granted about the interaction between 
> Lua and TeX that is not explained anywhere. You may find it obvious, but keep 
> in mind that manuals are intended for people who still don't know.
>     For somebody like me who comes from TeX, the impression got when reading 
> the manual (or at least the impression I had) is as having all the pieces 
> from a conglomerate rock but not having the cement. And the lack of examples 
> is exasperating. This I understand given the development state of the 
> program, but men, since one of the main features of LuaTeX is accesing and 
> modifing the TeX parameters and state with Lua code, some exemples of this, 
> even if kept to a minimum, would be very helpful.
>    I wouldn't have any problem in taking the time to write them myself... if 
> knew it, but the LuaTeX manual is still very far from serving to the learning 
> of LuaTeX in the same way as the TeXBook serves for the learnig TeX or "the 
> red book" serves for the learning of the postscript language.
> 
> Continuing with my problem with using an otf font, I found some pages below 
> in the manual an example intended for a diferent purpose but that looked 
> usefull for solving my problem even if not the way it should be done. So 
> below the avobe mentioned lua code I boldly wrote
> 
> \directlua0 {
> callback.register('define_font', function (name,size)
>  if name == 'LMRoman12-Regular' then
>   f = twelverm
>  else
>   f = font.read_tfm(name,size)
>  end
>  return f
> end
> )
> }
> \font\twelverm= LMRoman12-Regular
> it does not work, but it exhibits a bug in LuaTeX: I get a warning at \dump 
> time:
> 
> luaTeX warning: lua-loaded font [1] () has no character table!
> 
> but right afterwards the program dies and is closed by Windows.
> 
> --Javier A.

_________________________________________________________________

_______________________________________________
dev-luatex mailing list
[email protected]
http://www.ntg.nl/mailman/listinfo/dev-luatex

Reply via email to