summaryrefslogtreecommitdiff
path: root/mkluatexfontdb.lua
blob: dc46ac09c22c06b2e0050a29f01925867c2ae490 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/usr/bin/env texlua
--[[
This file is copyright 2010 Elie Roux and Khaled Hosny and is under CC0
license (see http://creativecommons.org/publicdomain/zero/1.0/legalcode).

This file is a wrapper for the luaotfload's font names module. It is part of the
luaotfload bundle, please see the luaotfload documentation for more info.
--]]

kpse.set_program_name("luatex")

require("lualibs")
require("otfl-font-nms")
require("alt_getopt")

local name = 'mkluatexfontdb'
local version = '1.07' -- same version number as luaotfload

local names    = fonts.names

local function help_msg()
    texio.write(string.format([[
Usage: %s [OPTION]...
    
Rebuild the LuaTeX font database.

Valid options:
  -f --force                   force re-indexing all fonts
  -q --quiet                   don't output anything
  -v --verbose=LEVEL           be more verbose (print the searched directories)
  -vv                          print the loaded fonts
  -vvv                         print all steps of directory searching
  -V --version                 print version and exit
  -h --help                    print this message

Fonts are searched in directories on Windows or Linux that have been
searched with fontconfig.

On Mac OS X, only fonts located in the following standard font locations are
included in the font database:
    ~/Library/Fonts          /Library/Fonts
    /System/Library/Fonts    /Network/Library/Fonts
In particular, fonts installed in other locations with "Font Book" will not
be available.

Rather than using the fontconfig locations or, in Mac OS X, searching the
default system font locations, you may specify where fonts are located by
setting the OSFONTDIR environment variable. Doing so will override the use of
fontconfig or scanning the system font locations. If you wish to continue to
include them while also including other font locations, simply include them in
the list. For example (using a bash shell),

   export OSFONTDIR='/path/to/other/fonts:/Users/will/Library/Fonts:...'

The output database file is named otfl-fonts.lua and is placed under:

   %s"
]], name, names.path.localdir))
end

local function version_msg()
    texio.write(string.format(
        "%s version %s, database version %s.\n", name, version, names.version))
end

--[[
Command-line processing.
Here we fill cmdargs with the good values, and then analyze it.
--]]

local long_opts = {
    force            = "f",
    quiet            = "q",
    help             = "h",
    verbose          = 1  ,
    version          = "V",
}

local short_opts = "fqpvVh"

local force_reload = nil

local function process_cmdline()
    local opts, optind, optarg = alt_getopt.get_ordered_opts (arg, short_opts, long_opts)
    local log_level = 1
    for i,v in ipairs(opts) do
        if     v == "q" then
            log_level = 0
        elseif v == "v" then
            if log_level > 0 then
                log_level = log_level + 1
            else
                log_level = 2
            end
        elseif v == "V" then
            version_msg()
            os.exit(0)
        elseif v == "h" then
            help_msg()
            os.exit(0)
        elseif v == "f" then
            force_reload = 1
        end
    end
    names.set_log_level(log_level)
end

local function generate(force)
    local fontnames, saved
    fontnames = names.update(fontnames, force)
    logs.report("%s fonts in the database", #fontnames.mappings)
    saved = names.save(fontnames)
end

process_cmdline()
generate(force_reload)