summaryrefslogtreecommitdiff
path: root/mkluatexfontdb.lua
blob: 034de578f54418e7fa8ee20880bceff81a9098ab (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
#!/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

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

require"lualibs"
require"otfl-basics-gen.lua"
require"otfl-luat-ovr.lua"
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

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",
    quiet            = "q",
    help             = "h",
    verbose          = 1  ,
    version          = "V",
}

local short_options = "fqpvVh"

local force_reload = nil

local function process_cmdline()
    local options, _, _ = alt_getopt.get_ordered_opts (arg, short_options, long_options)
    local log_level = 1
    for _,v in next, options 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("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