summaryrefslogtreecommitdiff
path: root/mkluatexfontdb.lua
blob: 3e1caf3a2245e9b4c33b81318029933500a1d52c (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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#!/usr/bin/env texlua
--[[
This file was originally written by 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"

local stringformat  = string.format
local texiowrite_nl = texio.write_nl

-- First we need to be able to load module (code copied from
-- luatexbase-loader.sty):
local loader_file = "luatexbase.loader.lua"
local loader_path = assert(kpse.find_file(loader_file, 'tex'),
                           "File '"..loader_file.."' not found")
--texiowrite_nl("("..loader_path..")")
dofile(loader_path) -- FIXME this pollutes stdout with filenames

_G.config      = _G.config or { }
local config   = _G.config
config.lualibs = config.lualibs or { }
config.lualibs.prefer_merged = false
config.lualibs.load_extended = false

require"lualibs"
require"otfl-basics-gen.lua"
require"otfl-luat-ovr.lua"  --- this populates the logs.* namespace
require"otfl-font-nms"
require"alt_getopt"

local name    = 'mkluatexfontdb'
local version = '2.1' -- same version number as luaotfload
local names    = fonts.names

local db_src_out = names.path.dir.."/"..names.path.basename
local db_bin_out = file.replacesuffix(db_src_out, "luc")
local function help_msg()
    texiowrite_nl(stringformat([[

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
  --log=stdout                 redirect log output to stdout

The font database will be saved to
   %s
   %s

]], name, db_src_out, db_bin_out))
end

local function version_msg()
    texiowrite_nl(stringformat(
        "%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_options = {
    force            = "f",
    help             = "h",
    log              = 1,
    quiet            = "q",
    verbose          = 1  ,
    version          = "V",
}

local short_options = "fqvVh"

local force_reload = nil

local function process_cmdline()
    local options, _, optarg =
        alt_getopt.get_ordered_opts (arg, short_options, long_options)
    local log_level = 1
    local nopts = #options
    for n=1, nopts do
        local v = options[n]
        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
        elseif v == "verbose" then
            local lvl = optarg[n]
            if lvl then
                log_level = tonumber(lvl)
            end
        elseif v == "log" then
            local str = optarg[n]
            if str then
                logs.set_logout(str)
            end
        end
    end
    logs.set_loglevel(log_level)
end

local function generate(force)
    local fontnames, saved
    fontnames = names.update(fontnames, force)
    logs.names_report("log", 0, "fonts in the database",
                      "%i", #fontnames.mappings)
    saved = names.save(fontnames)
    texiowrite_nl("")
end

process_cmdline()
generate(force_reload)
-- vim:tw=71:sw=4:ts=4:expandtab