summaryrefslogtreecommitdiff
path: root/update-luatex-font-database.lua
blob: c34c1c2a471124fe5eb8e2b5292e948271064b3c (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
#!/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-fonts.lua script.
-- It is part of the luaotfload bundle, please see the luaotfload documentation
-- for more info.

kpse.set_program_name("luatex")

local name = 'update-luatex-font-database'
local version = '1.07' -- same version number as luaotfload

-- first we import luaotfload-fonts.lua.
-- Basically it 'exports' three usefult things: the two overwritable variables
-- - luaotfload.fonts.basename: the filename of the database
-- - luaotfload.fonts.directory: the directory of the database
-- and the function
-- - luaotfload.fonts.generate: the function to generate the database

local luaotfload_file = kpse.find_file("luaotfload-fonts.lua")
if not luaotfload_file then
    texio.write_nl("Error: cannot find 'luaotfload-fonts.lua', exiting.")
    os.exit(1)
end
dofile(luaotfload_file)

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

Valid options:
  -d --dbdir DIRECTORY       writes the database in the specified directory
  -q --quiet                 don't output anything
  -v --verbose               be more verbose (print the searched directories)
  -vv                        print the loaded fonts
  -vvv                       print all steps of directory searching
  -V --version               prints the version and exits
  -h --help                  prints this message
  --sys                      writes the database for the whole system
                             (default is only for the user)

The output database file is named otfl-fonts.lua.
]], name))
end

local function version_msg()
    texio.write_nl(string.format(
        "%s version %s, database version %s.\n", name, version, luaotfload.fonts.version))
end

-- Command-line processing.
-- Here we fill cmdargs with the good values, and then analyze it, setting
-- luaotfload.fonts.log_level luaotfload.fonts.directory if necessary. 
local function process_cmdline()
    local waiting_for_dir = false
    local cmdargs = {}
    for _, varg in ipairs(arg) do
        if varg == "-v" or varg == "--verbose" then
            cmdargs.loglvl = 2
        elseif varg == "-vv" then
            cmdargs.loglvl = 3
        elseif varg == "-vvv" then
            cmdargs.loglvl = 4
        elseif varg == "-q" or varg == "--quiet" then
            cmdargs.loglvl = 0
        elseif varg == "--version" or varg == "-V" then
            cmdargs.version = true
        elseif varg == "--help" or varg == "-h" then
            cmdargs.help = true
        elseif varg == "--sys" then
            cmdargs.sys = true
        elseif varg == '-d' or varg == '--dbdir' then
            waiting_for_dir = true
        elseif string.match(varg, '--dbdir=.+') then
            cmdargs.dbdir = string.match(varg, '--dbdir=(.+)')
        elseif string.match(varg, '-d.+') then
            cmdargs.dbdir = string.match(varg, '-d(.+)')
        elseif waiting_for_dir == true then
            cmdargs.dbdir = string.gsub(varg, '^( *= *)', '')
        else
            texio.write_nl(string.format("Unknown option '%s', ignoring.", varg))
        end
    end
    if cmdargs.help then
        help_msg()
        os.exit(0)
    elseif cmdargs.version then
        version_msg()
        os.exit(0)
    elseif cmdargs.loglvl then
        luaotfload.fonts.log_level = cmdargs.loglvl
    end
    if cmdargs.sys then
        luaotfload.fonts.directory = kpse.expand_var("$TEXMFSYSVAR") .. "/tex/"
    elseif cmdargs.dbdir then
        luaotfload.fonts.directory = cmdargs.dbdir
    end
end

process_cmdline()
luaotfload.fonts.generate()