summaryrefslogtreecommitdiff
path: root/support/findfont
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2021-11-26 03:00:58 +0000
committerNorbert Preining <norbert@preining.info>2021-11-26 03:00:58 +0000
commitfcabaaa4d96d05af090f9a0eaa43bf5f0a8c1be2 (patch)
treeeceeb34adb05a4fe3a8c27819e41cc577ec94004 /support/findfont
parent943ea506edb031810b6b44d4095741f8c3500186 (diff)
CTAN sync 202111260300
Diffstat (limited to 'support/findfont')
-rw-r--r--support/findfont/CHANGELOG2
-rw-r--r--support/findfont/README.md29
-rw-r--r--support/findfont/doc/Examples/exa01.txt11
-rw-r--r--support/findfont/doc/Examples/exa02.txt16
-rw-r--r--support/findfont/doc/Examples/exa03.txt34
-rw-r--r--support/findfont/doc/Examples/exa04.txt14
-rw-r--r--support/findfont/doc/findfont-doc.pdfbin0 -> 54643 bytes
-rw-r--r--support/findfont/doc/findfont-doc.tex180
-rwxr-xr-xsupport/findfont/scripts/findfont.lua394
9 files changed, 680 insertions, 0 deletions
diff --git a/support/findfont/CHANGELOG b/support/findfont/CHANGELOG
new file mode 100644
index 0000000000..6c1a7b969e
--- /dev/null
+++ b/support/findfont/CHANGELOG
@@ -0,0 +1,2 @@
+0.02 2021-11-24 - correct README.md file
+0.01 2021-11-24 - first CTAN version
diff --git a/support/findfont/README.md b/support/findfont/README.md
new file mode 100644
index 0000000000..80b06b6dfe
--- /dev/null
+++ b/support/findfont/README.md
@@ -0,0 +1,29 @@
+# findfont
+
+Searching for fonts in the font database. It needs Lua 5.3 which
+will be included in at least LuaTeX 1.09 (TeXLive 2019)
+
+The syntax of `findfont`
+
+findfont [options] <font name>
+
+parameter handling
+ -q,--quiet
+ -h,--help
+ -o,--otfinfo (default 0)
+ -i,--info (default 0)
+ -v... Verbosity output
+ -m,--max_string (default 90)
+ <font> (string)
+\end{verbatim}
+
+For example:
+
+findfont times
+
+findfont palatino -o 3
+
+findfont -i 3 -m 50 arial
+
+
+hvoss@tug.org
diff --git a/support/findfont/doc/Examples/exa01.txt b/support/findfont/doc/Examples/exa01.txt
new file mode 100644
index 0000000000..e530f26082
--- /dev/null
+++ b/support/findfont/doc/Examples/exa01.txt
@@ -0,0 +1,11 @@
+We are using Lua 5.3
+Check for file /usr/local/texlive/2021/texmf-var/luatex-cache/generic/names/luaotfload-names
+ 1. Segoe UI Symbol.ttf segoeuisymbol /Users/voss/Library/Fonts/Segoe/Segoe UI Symbol.ttf
+ 2. Segoe_Print.ttf segoeprint /Users/voss/Library/Fonts/Segoe/Segoe_Print.ttf
+ 3. Segoe_Print_Bold.ttf segoeprint /Users/voss/Library/Fonts/Segoe/Segoe_Print_Bold.ttf
+ 4. Segoe_Script.ttf segoescript /Users/voss/Library/Fonts/Segoe/Segoe_Script.ttf
+ 5. Segoe_Script_Bold.ttf segoescript /Users/voss/Library/Fonts/Segoe/Segoe_Script_Bold.ttf
+ 6. Segoe_UI.ttf segoeui /Users/voss/Library/Fonts/Segoe/Segoe_UI.ttf
+ 7. Segoe_UI_Bold.ttf segoeui /Users/voss/Library/Fonts/Segoe/Segoe_UI_Bold.ttf
+ 8. Segoe_UI_Bold_Italic.ttf segoeui /Users/voss/Library/Fonts/Segoe/Segoe_UI_Bold_Italic.ttf
+ 9. Segoe_UI_Italic.ttf segoeui /Users/voss/Library/Fonts/Segoe/Segoe_UI_Italic.ttf
diff --git a/support/findfont/doc/Examples/exa02.txt b/support/findfont/doc/Examples/exa02.txt
new file mode 100644
index 0000000000..8c113341de
--- /dev/null
+++ b/support/findfont/doc/Examples/exa02.txt
@@ -0,0 +1,16 @@
+We are using Lua 5.3
+Check for file /usr/local/texlive/2021/texmf-var/luatex-cache/generic/names/luaotfload-names
+ 1. LibertinusKeyboard-Regular.otf libertinuskeyboard /usr/local/texlive/2021/te...Regular.otf
+ 2. LibertinusMath-Regular.otf libertinusmath /usr/local/texlive/2021/te...Regular.otf
+ 3. LibertinusMono-Regular.otf libertinusmono /usr/local/texlive/2021/te...Regular.otf
+ 4. LibertinusSans-Bold.otf libertinussans /usr/local/texlive/2021/te...ns-Bold.otf
+ 5. LibertinusSans-Italic.otf libertinussans /usr/local/texlive/2021/te...-Italic.otf
+ 6. LibertinusSans-Regular.otf libertinussans /usr/local/texlive/2021/te...Regular.otf
+ 7. LibertinusSerif-Bold.otf libertinusserif /usr/local/texlive/2021/te...if-Bold.otf
+ 8. LibertinusSerif-BoldItalic.otf libertinusserif /usr/local/texlive/2021/te...dItalic.otf
+ 9. LibertinusSerif-Italic.otf libertinusserif /usr/local/texlive/2021/te...-Italic.otf
+10. LibertinusSerif-Regular.otf libertinusserif /usr/local/texlive/2021/te...Regular.otf
+11. LibertinusSerif-Semibold.otf libertinusserif /usr/local/texlive/2021/te...emibold.otf
+12. LibertinusSerif-SemiboldItalic.otf libertinusserif /usr/local/texlive/2021/te...dItalic.otf
+13. LibertinusSerifDisplay-Regular.otf libertinusserifdisplay /usr/local/texlive/2021/te...Regular.otf
+14. LibertinusSerifInitials-Regular.otf libertinusserifinitials /usr/local/texlive/2021/te...Regular.otf
diff --git a/support/findfont/doc/Examples/exa03.txt b/support/findfont/doc/Examples/exa03.txt
new file mode 100644
index 0000000000..2bb02df1a6
--- /dev/null
+++ b/support/findfont/doc/Examples/exa03.txt
@@ -0,0 +1,34 @@
+We are using Lua 5.3
+Check for file /usr/local/texlive/2021/texmf-var/luatex-cache/generic/names/luaotfload-names
+ 1. Arial Black.ttf arialblack /System/Library/Fonts/Supplemental/Arial Black.ttf
+ 2. Arial Bold Italic.ttf arial /System/Library/Fonts/Supplemental/Arial Bold Italic.ttf
+ 3. Arial Bold.ttf arial /System/Library/Fonts/Supplemental/Arial Bold.ttf
+ 4. Arial Italic.ttf arial /System/Library/Fonts/Supplemental/Arial Italic.ttf
+ 5. Arial Narrow Bold Italic.ttf arialnarrow /System/Library/Fonts/Supplemental/Arial Narrow Bold Italic.ttf
+ 6. Arial Narrow Bold.ttf arialnarrow /System/Library/Fonts/Supplemental/Arial Narrow Bold.ttf
+ 7. Arial Narrow Italic.ttf arialnarrow /System/Library/Fonts/Supplemental/Arial Narrow Italic.ttf
+ 8. Arial Narrow.ttf arialnarrow /System/Library/Fonts/Supplemental/Arial Narrow.ttf
+ 9. Arial Rounded Bold.ttf arialroundedmtbold /System/Library/Fonts/Supplemental/Arial Rounded Bold.ttf
+10. Arial Unicode.ttf arialunicodems /Library/Fonts/Arial Unicode.ttf
+11. Arial Unicode.ttf arialunicodems /System/Library/Fonts/Supplemental/Arial Unicode.ttf
+12. Arial.ttf arial /System/Library/Fonts/Supplemental/Arial.ttf
+13. Arial.ttf arial /Users/voss/Library/Fonts/Arial/Arial.ttf
+14. ArialHB.ttc arialhebrew /System/Library/Fonts/ArialHB.ttc
+15. ArialHB.ttc arialhebrewdeskinterface /System/Library/Fonts/ArialHB.ttc
+16. ArialHB.ttc arialhebrewscholar /System/Library/Fonts/ArialHB.ttc
+17. ArialHB.ttc arialhebrew /System/Library/Fonts/ArialHB.ttc
+
+Run otfinfo:6
+Family: Arial Narrow
+Subfamily: Bold
+Full name: Arial Narrow Bold
+PostScript name: ArialNarrow-Bold
+Version: Version 2.38.1x
+Unique ID: Arial Narrow Bold : 2007
+Description: Monotype Drawing Office 1982. A contemporary sans serif design, Arial contains more humanist characteristics than many of its predecessors and as such is more in tune with the mood of the last decades of the twentieth century. The overall treatment of curves is softer and fuller than in most industrial-style sans serif faces. Terminal strokes are cut on the diagonal which helps to give the face a less mechanical appearance. Arial is an extremely versatile family of typefaces which can be used with equal success for text setting in reports, presentations, magazines etc, and for display use in newspapers, advertising and promotions.
+Designer: Robin Nicholas, Patricia Saunders
+Manufacturer: The Monotype Corporation
+Trademark: Arial is a trademark of The Monotype Corporation in the United States and/or other countries.
+Copyright: © 2007 The Monotype Corporation. All Rights Reserved.
+License Description: You may use this font to display and print content as permitted by the license terms for the product in which this font is included. You may only (i) embed this font in content as permitted by the embedding restrictions included in this font; and (ii) temporarily download this font to a printer or other output device to help print content.
+Vendor ID: TMC \ No newline at end of file
diff --git a/support/findfont/doc/Examples/exa04.txt b/support/findfont/doc/Examples/exa04.txt
new file mode 100644
index 0000000000..5de45e30c6
--- /dev/null
+++ b/support/findfont/doc/Examples/exa04.txt
@@ -0,0 +1,14 @@
+We are using Lua 5.3
+Check for file /usr/local/texlive/2021/texmf-var/luatex-cache/generic/names/luaotfload-names
+ 1. Segoe UI Symbol.ttf segoeuisymbol /Users/voss/Library/Fonts/Segoe/Segoe UI Symbol.ttf
+ 2. Segoe_Print.ttf segoeprint /Users/voss/Library/Fonts/Segoe/Segoe_Print.ttf
+ 3. Segoe_Print_Bold.ttf segoeprint /Users/voss/Library/Fonts/Segoe/Segoe_Print_Bold.ttf
+ 4. Segoe_Script.ttf segoescript /Users/voss/Library/Fonts/Segoe/Segoe_Script.ttf
+ 5. Segoe_Script_Bold.ttf segoescript /Users/voss/Library/Fonts/Segoe/Segoe_Script_Bold.ttf
+ 6. Segoe_UI.ttf segoeui /Users/voss/Library/Fonts/Segoe/Segoe_UI.ttf
+ 7. Segoe_UI_Bold.ttf segoeui /Users/voss/Library/Fonts/Segoe/Segoe_UI_Bold.ttf
+ 8. Segoe_UI_Bold_Italic.ttf segoeui /Users/voss/Library/Fonts/Segoe/Segoe_UI_Bold_Italic.ttf
+ 9. Segoe_UI_Italic.ttf segoeui /Users/voss/Library/Fonts/Segoe/Segoe_UI_Italic.ttf
+
+Font: segoeui
+Fonttype ttf(system) --> | Regular | Bold | Italic | BoldItalic |
diff --git a/support/findfont/doc/findfont-doc.pdf b/support/findfont/doc/findfont-doc.pdf
new file mode 100644
index 0000000000..d294d0ef9a
--- /dev/null
+++ b/support/findfont/doc/findfont-doc.pdf
Binary files differ
diff --git a/support/findfont/doc/findfont-doc.tex b/support/findfont/doc/findfont-doc.tex
new file mode 100644
index 0000000000..2bcf54e661
--- /dev/null
+++ b/support/findfont/doc/findfont-doc.tex
@@ -0,0 +1,180 @@
+%% $Id: findfont-doc.tex 16 2021-11-07 19:42:57Z hvoss $
+%
+\listfiles\setcounter{errorcontextlines}{100}
+\documentclass[paper=a4,fontsize=11pt,DIV=14,parskip=half-,
+ captions=tableabove,twoside=on]{scrartcl}
+\usepackage{fontspec}
+%\usepackage{libertinus-otf}
+\setmainfont{AccanthisADFStdNo3}[
+ UprightFont =*-Regular,
+ BoldFont =*-Bold,
+ ItalicFont =*-Italic,
+ BoldItalicFont=*-BoldItalic,
+ RawFeature = -rlig,
+]
+\setsansfont{GilliusADF}[
+ UprightFont =*-Regular,
+ BoldFont =*-Bold,
+ ItalicFont =*-Italic,
+ BoldItalicFont=*-BoldItalic,
+ RawFeature = -rlig,
+]
+\setmonofont{DejaVu Sans Mono}[Scale=MatchLowercase,FakeStretch=0.9]
+%\setmonofont{Anonymous Pro}[Scale=MatchLowercase,FakeStretch=0.9]
+
+\usepackage[english]{babel}
+\usepackage{scrlayer-scrpage}
+\automark[section]{section}
+\automark*[subsection]{}
+\pagestyle{scrheadings}
+
+{\catcode`\%=12
+ \gdef\perCent{%}
+ \gdef\DoubleperCent{%%}
+}
+
+\usepackage{xcolor,fancyvrb,varioref}
+\usepackage{xltabular,pdflscape}
+\usepackage{hvlogos} % for Wikipedia W
+\usepackage{listings}
+\usepackage{dtk-extern} % for Wikipedia W
+\lstset{basicstyle=\ttfamily\small,language=[LaTeX]TeX}
+\usepackage{ragged2e}
+\usepackage{makeidx}\makeindex
+\usepackage{hvindex}
+\def\Lfile#1{\texttt{#1}\index{#1 file@\texttt{#1} file}}
+\def\Lext#1{\texttt{.#1}\index{#1 file extension@\texttt{.#1} file extension}}
+\def\Lcs#1{\texttt{\textbackslash#1}\index{#1@\texttt{\textbackslash#1}}}
+\def\Lenv#1{\texttt{#1}\index{#1 environment@\texttt{#1} environment}}
+\def\Lpack#1{\texttt{#1}\index{#1 package@\texttt{#1} package}}
+\def\Lprog#1{\texttt{#1}\index{#1 program@\texttt{#1} program}}
+\def\Loption#1{\texttt{#1}\index{#1@\texttt{#1} package option}}
+\def\Largb#1{\emph{\{#1\}}}
+
+%\usepackage[bibstyle=dtk]{biblatex}
+%\addbibresource{\jobname.bib}
+
+\raggedbottom
+\usepackage{url}
+\usepackage[colorlinks,linktocpage]{hyperref}
+
+\makeatletter% from: doc.sty
+\newcommand*\GetFileInfo[1]{%
+ \def\filename{#1}%
+ \def\@tempb##1 ##2 ##3\relax##4\relax{%
+ \def\filedate{##1}%
+ \def\fileversion{##2}%
+ \def\fileinfo{##3}}%
+ \edef\@tempa{\csname ver@#1\endcsname}%
+ \expandafter\@tempb\@tempa\relax? ? \relax\relax}
+\makeatother
+
+%\GetFileInfo{xltabular.sty}
+\usepackage{xspace}
+
+\newcommand\FF{\texttt{findfont}\xspace}
+
+\def\setVersion#1{\setVVersion#1!!}
+\def\setVVersion#1=#2!!{\def\findfontVersion{#2}}
+
+\setVersion{version = 0.02}% can be automatically changed by perl
+
+\setkeys{dtk}{cleanup=true,force}
+
+\title{Program \texttt{findfont} \\--\\ \normalsize \findfontVersion\ (\today)}
+\author{\shortstack{Herbert Voß\\\small \href{mailto:hvoss@tug.org}{hvoss@tug.org}}}
+\date{}
+\begin{document}
+\maketitle
+\thispagestyle{empty}
+\enlargethispage{1cm}
+\tableofcontents
+
+\vfill
+Thanks to: \\
+Rolf Niepraschk;
+\clearpage
+
+\section{Introduction}
+The Lua program
+\FF is a program for searching installed fonts which are usable for \LuaLaTeX\ and \XeLaTeX.
+The already existing Lua program \Lprog{luaotfload-tool} can also be used for searching, but
+the search-interface is somewhat cryptic.
+
+\subsection{Syntax}
+
+The \Index{syntax} is
+
+\verb|findfont [...] <font>|
+
+where \verb|[...]| are optional \Index{argument}s, either in short or
+long form which, of course, can be mixed:
+
+\begin{verbatim}
+ parameter handling
+ -q,--quiet
+ -h,--help
+ -o,--otfinfo (default 0)
+ -i,--info (default 0)
+ -v... Verbosity output
+ -m,--max_string (default 90)
+ <font> (string)
+\end{verbatim}
+
+For example:
+
+\begin{verbatim}
+findfont times
+findfont palatino -o 3
+findfont -i 3 -m 50 arial
+\end{verbatim}
+
+\begin{enumerate}
+\item \texttt{-q}: quiet;
+\item \texttt{-m <columns>}: How many columns are used for the font with full path. This can be really long, but with e.g. \verb|-m 50|
+the length is limited to 50 characters.
+\item \texttt{-o <number>}: For the font with the given number from the font list the program \Lprog{otfinfo} is called
+ for some generell font informations.
+\item \texttt{-i <number>}: For the font with the given number from the font list the existing font styles are listed.
+\end{enumerate}
+
+\section{How it works}
+\FF uses the data file \Lfile{luaotfloadtool-names.lua} which is created by \LuaTeX. If it is
+missing it will be created by \FF itself. The name of the font should be in lowercase
+characters and must not be the complete name. A \verb|time| for finding all fonts with
+time in its names is sufficiant.
+
+\section{Examples}
+
+\begin{Verbatim}
+bash-3.2$ findfont segoe
+\end{Verbatim}
+
+\VerbatimInput{Examples/exa01.txt}
+
+\begin{Verbatim}
+bash-3.2$ findfont -m 40 libertinus
+\end{Verbatim}
+
+\VerbatimInput{Examples/exa02.txt}
+
+
+\begin{Verbatim}
+bash-3.2$ findfont -i 9 sego
+\end{Verbatim}
+
+\VerbatimInput{Examples/exa04.txt}
+
+
+\begin{landscape}
+\begin{Verbatim}[fontsize=\small]
+bash-3.2$ findfont -o 6 arial
+\end{Verbatim}
+
+\VerbatimInput[fontsize=\small]{Examples/exa03.txt}
+
+\end{landscape}
+
+\printindex
+
+\end{document}
diff --git a/support/findfont/scripts/findfont.lua b/support/findfont/scripts/findfont.lua
new file mode 100755
index 0000000000..976e3405dc
--- /dev/null
+++ b/support/findfont/scripts/findfont.lua
@@ -0,0 +1,394 @@
+#!/usr/bin/env texlua
+-----------------------------------------------------------------------
+-- FILE: findfont.lua
+-- DESCRIPTION: search for fonts in the database
+-- REQUIREMENTS: luatex v.0.80 or later; packages lualibs, xindex-lapp
+-- AUTHOR: Herbert Voß (C) 2021-11-24
+-----------------------------------------------------------------------
+ findfont = findfont or { }
+ local version = 0.02
+findfont.version = version
+
+--[[
+Search the font database for fontnames. The database is used
+by Lua(La)TeX and created by default with the first run of
+Lua(La)TeX. If there is no such data file then "findfont"
+will execute the command to create it.
+
+findfont(1)
+
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+
+Report bugs to hvoss@tug.org
+
+]]
+
+kpse.set_program_name("luatex")
+local f = kpse.find_file("lualibs.lua")
+
+require("lualibs") -- all part of LuaTeX
+--require("lpeg")
+
+local args = require ('xindex-lapp') [[
+ parameter handling
+ -q,--quiet
+ -h,--help
+ -o,--otfinfo (default 0)
+ -i,--info (default 0)
+ -v... Verbosity level; can be -v, -vv, -vvv
+ -m,--max_string (default 90)
+ <font> (string)
+]]
+
+--[[
+ No -v flag, v is just { false }. not args.v[1] is true, so vlevel becomes 0.
+ One -v flags, v is { true }
+ Two -v flags, v is { true, true }
+ Three -v flags, v is { true, true, true }
+]]
+
+local vlevel = not args.v[1] and 0 or #args.v
+local not_quiet = not args["quiet"]
+local otfinfo = args["otfinfo"]
+local info = args["info"]
+
+local maxStrLength = args["max_string"]
+local luaVersion = _VERSION
+print("We are using "..luaVersion)
+
+--[[
+if args.h then
+print(
+Syntax: fintFont [options] <font>
+By default the Lua program "findfont" creates a list of the
+fonts which have in its names the given string.)
+end
+]]
+
+local font_str = args.font
+if vlevel > 0 then print('Looking for font \"'..font_str..'\"') end
+
+function getFileLocation()
+ local cachepaths = kpse.expand_var('$TEXMFCACHE') or ""
+ if cachepaths == "" or cachepaths == "$TEXMFCACHE" then
+ cachepaths = kpse.expand_var('$TEXMFVAR') or ""
+ end
+ if vlevel > 0 then print("cachepaths: ",cachepaths) end
+ if cachepaths == "" then
+ print("umghhh ....")
+ print("No cache path found ... ")
+ return ""
+ end
+ if os.type == "windows" then
+ paths = string.split(cachepaths,";")
+ else
+ paths = string.split(cachepaths,":")
+ end
+ if vlevel > 0 then print ("Pathes: ", paths[1], paths[2]) end
+ local file = paths[1].."/luatex-cache/generic/names"
+ if vlevel > 0 then print("try: ",file) end
+ local f,err = io.open (file.."/test.tmp", "w")
+ if not f and #paths > 1 then
+ if vlevel > 0 then print("first path has no file, I'll try the second one ...") end
+ file = paths[2].."/luatex-cache/generic/names"
+ if vlevel > 0 then print("try: ",file) end
+ f,err = io.open (file.."/test.tmp", "w")
+ if not f then
+ print("Error getting file location: \n",err)
+ return ""
+ else
+ f:close()
+ end
+ else
+ f:close()
+ end
+-- print("File: "..fontListFile)
+ return file
+end
+
+function readCompiledOrZippedFile(file)
+ print("Check for file "..file)
+ local f,err = io.open (file..".luc", "rb")
+ if not f then
+ if vlevel > 0 then print("There is no binary data file ... ") end
+ f,err = io.open (file..".lua.gz", "r")
+ if not f then
+ if vlevel > 0 then print("There is no gzipped data file ... ") end
+ f,err = io.open (file..".lua", "r")
+ if not f then
+ if vlevel > 0 then print("There is no data file ... ") end
+ print("Error reading file: ",err)
+ return nil
+ else
+ if vlevel > 0 then print("Found a normal data file ... ") end
+ local str = dofile(f)
+ f:close()
+ return str
+ end
+ else
+ if vlevel > 0 then print("Found a gzipped data file ... ") end
+ local str = f:read("*all")
+ local str2 = loadstring(gzip.decompress(str))
+ str = str2()
+ f:close()
+ return str
+ end
+ else
+ if vlevel > 0 then print("Found a binary data file ... ") end
+ local chunk = f:read"*all"
+ f:close()
+ local func = load (chunk, "b")
+ str = func()
+ return str
+ end
+end
+
+function compareEntries(f1, f2)
+ if (f1["basename"] == f2["basename"]) and
+ (f1["familyname"] == f2["familyname"]) and
+ (f1["fullpath"] == f2["fullpath"]) then
+ return true
+ else
+ return false
+ end
+end
+
+
+local fontData = {}
+local fontListFile = getFileLocation()
+if fontListFile == "" then
+ print("There is no cached font file list!")
+ print('Will run at first "luaotfload-tool --update --force" ... Wait a minute, please ...')
+ local exrun = io.popen('luaotfload-tool --update --force', 'r')
+ local output = exrun:read('*all')
+ print(output)
+ exrun:close()
+ fontListFile = getFileLocation()
+end
+
+fontListFile = fontListFile.."/luaotfload-names"
+fontData = readCompiledOrZippedFile(fontListFile)
+
+if not fontData then
+ print("umghhh ....")
+ print("It does not work! I'll give it up ... :-(")
+ os.exit()
+end
+
+--print(require 'xindex-pretty'.dump(fontData)) --["families"]["system"]["otf"]))
+
+fontDataMap = fontData["mappings"]
+fontFilesTable = fontData["files"]["full"]
+
+--print(require 'xindex-pretty'.dump(fontFilesTable)) --["families"]["system"]["otf"]))
+--print(require 'xindex-pretty'.dump(fontFilesTable["bare"]["system"]["otf"])) --["families"]["system"]["otf"]))
+
+--[[
+print("Dateiliste für System->OTF")
+for i, v in ipairs(fontFilesTable) do
+ print(i,v)
+end
+]]
+
+table.sort(fontDataMap,
+ function(a,b)
+ if not a["basename"] or not b["basename"] then
+ return false
+ else
+ return string.lower(a["basename"]) < string.lower(b["basename"])
+ end end)
+-- strip duplicates
+local newFontDataMap = {}
+if #fontDataMap > 0 then
+ newFontDataMap[1] = fontDataMap[1]
+end
+for i = 2,#fontDataMap do
+ if not compareEntries(fontDataMap[i],newFontDataMap[#newFontDataMap]) then
+ newFontDataMap[#newFontDataMap+1] = fontDataMap[i]
+ end
+end
+
+fontDataMap = newFontDataMap
+--for i, v in ipairs(fontDataMap) do
+-- print(i, v["basename"],v["familyname"], v["fullpath"])
+-- end
+
+local j = 1
+local fontList = {}
+local l_max = {1, 1, 1}
+for i, v in ipairs(fontDataMap) do
+ if v["familyname"] then
+ if string.find (v["familyname"], font_str, 1, true) then
+-- print(string.format("%2d. %30s %20s %50s",j,v["basename"],v["familyname"],v["fullpath"]))
+ fontList[#fontList+1] = v
+ if string.len(v["basename"]) > l_max[1] then l_max[1] = string.len(v["basename"]) end
+ if string.len(v["familyname"]) > l_max[2] then l_max[2] = string.len(v["familyname"]) end
+ if string.len(v["fullpath"]) > l_max[3] then l_max[3] = string.len(v["fullpath"]) end
+ j = j + 1
+ end
+ end
+end
+
+-- print(l_max[1],l_max[2],l_max[3])
+if l_max[3] > maxStrLength then l_max[3] = maxStrLength end
+
+local minChars = 26
+for i, v in ipairs(fontList) do
+ local path = v["fullpath"]
+ if string.len(path) > l_max[3] then
+ path = string.sub (path, 1, minChars).."..."..string.sub (path, string.len(path)-maxStrLength+minChars+4)
+ end
+ print(string.format("%2d. %"..l_max[1].."s %"..l_max[2].."s %"..l_max[3].."s",i,v["basename"],v["familyname"],path))
+end
+
+if otfinfo > 0 then
+ print()
+ print("Run otfinfo:"..otfinfo)
+ local font = fontList[otfinfo]["fullpath"]
+ local exrun = io.popen("otfinfo -i \""..font.."\"", 'r') -- ".." font may have spaces
+ local output = exrun:read('*all')
+ print(output)
+ exrun:close()
+end
+
+if info > 0 then
+ font = fontList[info]["familyname"]
+ print("\nFont: "..font)
+ local font_dir = {"local","system","texmf"}
+ local font_ext = {"ttf","otf","ttc"}
+ for j = 1,#font_dir do
+ for i = 1,#font_ext do
+ local fonttype = ""
+ local ext = font_ext[i]
+ local dir = font_dir[j]
+ if fontData["families"][dir][ext] then -- font extension exists?
+ local entry = fontData["families"][dir][ext][font]
+ if entry then
+ if entry["r"] then fonttype = fonttype.."Regular " end
+ if entry["b"] then fonttype = fonttype.."| Bold " end
+ if entry["i"] then fonttype = fonttype.."| Italic " end
+ if entry["bi"] then fonttype = fonttype.."| BoldItalic" end
+ io.write("Fonttype "..ext.."("..dir..") --> ")
+ if #fonttype > 0 then
+ print("| "..fonttype.." |")
+ else
+ print(" undefined ") --- no regular definiert
+ end
+ else
+ print()
+ end
+ end
+ end
+ end
+end
+--print(require 'xindex-pretty'.dump(fontData["families"]["system"]["otf"])) --["families"]["system"]["otf"]))
+
+
+--[[
+
+ ["families"]={
+ ["local"]={},
+ ["system"]={
+ ["otf"]={
+ ["adobecaslonpro"]={
+ ["b"]={
+ ["default"]=3143,
+ },
+ ["bi"]={
+ ["default"]=3146,
+ },
+ ["i"]={
+ ["default"]=3145,
+ },
+ ["r"]={
+ ["default"]=3147,
+ },
+ },
+ },
+ },
+ },
+
+]]
+
+--[[
+This is a sketch of the luaotfload db:
+
+ type dbobj = {
+ families : familytable;
+ fontnames : fontnametable;
+ files : filemap;
+ status : filestatus;
+ mappings : fontentry list;
+ meta : metadata;
+ }
+ and familytable = {
+ local : (format, familyentry) hash; // specified with include dir
+ texmf : (format, familyentry) hash;
+ system : (format, familyentry) hash;
+ }
+ and familyentry = {
+ r : sizes; // regular
+ i : sizes; // italic
+ b : sizes; // bold
+ bi : sizes; // bold italic
+ }
+ and sizes = {
+ default : int; // points into mappings or names
+ optical : (int, int) list; // design size -> index entry
+ }
+ and fontnametable = {
+ local : (format, index) hash;
+ texmf : (format, index) hash;
+ system : (format, index) hash;
+ }
+ and metadata = {
+ created : string // creation time
+ formats : string list; // { "otf", "ttf", "ttc" }
+ local : bool; (* set if local fonts were added to the db *)
+ modified : string // modification time
+ statistics : TODO; // created when built with "--stats"
+ version : float; // index version
+ }
+ and filemap = { // created by generate_filedata()
+ base : {
+ local : (string, int) hash; // basename -> idx
+ system : (string, int) hash;
+ texmf : (string, int) hash;
+ };
+ bare : {
+ local : (string, (string, int) hash) hash; // location -> (barename -> idx)
+ system : (string, (string, int) hash) hash;
+ texmf : (string, (string, int) hash) hash;
+ };
+ full : (int, string) hash; // idx -> full path
+ }
+ and fontentry = { // finalized by collect_families()
+ basename : string; // file name without path "foo.otf"
+ conflicts : { barename : int; basename : int }; // filename conflict with font at index; happens with subfonts
+ familyname : string; // sanitized name of the font family the font belongs to, usually from the names table
+ fontname : string; // sanitized name of the font
+ format : string; // "otf" | "ttf" | "afm" (* | "pfb" *)
+ fullname : string; // sanitized full name of the font including style modifiers
+ fullpath : string; // path to font in filesystem
+ index : int; // index in the mappings table
+ italicangle : float; // italic angle; non-zero with oblique faces
+ location : string; // "texmf" | "system" | "local"
+ plainname : string; // unsanitized font name
+ typographicsubfamily : string; // sanitized preferred subfamily (names table 14)
+ psname : string; // PostScript name
+ size : (false | float * float * float); // if available, size info from the size table converted from decipoints
+ subfamily : string; // sanitized subfamily (names table 2)
+ subfont : (int | bool); // integer if font is part of a TrueType collection ("ttc")
+ version : string; // font version string
+ weight : int; // usWeightClass
+ }
+ and filestatus = (string, // fullname
+ { index : int list; // pointer into mappings
+ timestamp : int; }) dict
+]]