gbranden pushed a commit to branch master
in repository groff.
commit 20a41b7640a67a2f4a0c8ca129ab24fcc6cd9c70
Author: G. Branden Robinson <[email protected]>
AuthorDate: Fri Nov 14 13:16:35 2025 -0600
[install-font]: Add new component.
* Makefile.am: Include "contrib/install-font/install-font.am".
* contrib/install-font/install-font.bash: Import Peter Schaffter's
"install-font.sh" script from his website. Rename as shown; its
"shebang" line declares it a Bash script (albeit one that operates in
Bash's POSIX mode). Cosmetic changes to Peter's version comprise
removal of trailing whitespace, a replacement of the GPL license
notice with model language from the current version of the GPL, and
addition of a Vim modeline reflecting the code style in evidence. I
also recoded the file to plain ASCII (Unicode Basic Latin), the only
consequence of which was dropping of the U+00A9 copyright sign.
* contrib/install-font/COPYRIGHT: Add file promised by groff's
"LICENSES" file.
* contrib/install-font/install-font.am: Automake script, when driven by
a groff build, installs "install-font.bash" to the target's "examples"
directory.
Fixes <https://savannah.gnu.org/bugs/?60930>.
---
ChangeLog | 4 +
Makefile.am | 1 +
contrib/install-font/COPYRIGHT | 14 +
contrib/install-font/ChangeLog | 38 ++
contrib/install-font/install-font.am | 33 ++
contrib/install-font/install-font.bash | 723 +++++++++++++++++++++++++++++++++
6 files changed, 813 insertions(+)
diff --git a/ChangeLog b/ChangeLog
index af56dfbed..60982953c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2025-11-14 G. Branden Robinson <[email protected]>
+
+ * Makefile.am: Include "contrib/install-font/install-font.am".
+
2025-11-14 G. Branden Robinson <[email protected]>
[troff]: Withdraw "right-brace" warning category.
diff --git a/Makefile.am b/Makefile.am
index 184fc1c72..caa854f20 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -563,6 +563,7 @@ include $(top_srcdir)/contrib/gperl/gperl.am
include $(top_srcdir)/contrib/gpinyin/gpinyin.am
include $(top_srcdir)/contrib/grap2graph/grap2graph.am
include $(top_srcdir)/contrib/hdtbl/hdtbl.am
+include $(top_srcdir)/contrib/install-font/install-font.am
include $(top_srcdir)/contrib/mm/mm.am
include $(top_srcdir)/contrib/mom/mom.am
include $(top_srcdir)/contrib/pic2graph/pic2graph.am
diff --git a/contrib/install-font/COPYRIGHT b/contrib/install-font/COPYRIGHT
new file mode 100644
index 000000000..ebb53b074
--- /dev/null
+++ b/contrib/install-font/COPYRIGHT
@@ -0,0 +1,14 @@
+Copyright 2024 Peter Schaffter
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
diff --git a/contrib/install-font/ChangeLog b/contrib/install-font/ChangeLog
new file mode 100644
index 000000000..188d2786d
--- /dev/null
+++ b/contrib/install-font/ChangeLog
@@ -0,0 +1,38 @@
+2025-11-14 G. Branden Robinson <[email protected]>
+
+ * install-font.bash: Import Peter Schaffter's "install-font.sh"
+ script from his website. Rename as shown; its "shebang" line
+ declares it a Bash script (albeit one that operates in Bash's
+ POSIX mode). Cosmetic changes to Peter's version comprise
+ removal of trailing whitespace, a replacement of the GPL license
+ notice with model language from the current version of the GPL,
+ and addition of a Vim modeline reflecting the code style in
+ evidence. I also recoded the file to plain ASCII (Unicode Basic
+ Latin), the only consequence of which was dropping of the U+00A9
+ copyright sign.
+ * COPYRIGHT: Add file promised by groff's "LICENSES" file.
+ * install-font.am: Automake script, when driven by a groff
+ build, installs "install-font.bash" to the target's "examples"
+ directory.
+
+ Fixes <https://savannah.gnu.org/bugs/?60930>.
+
+
+________________________________________________________________________
+
+##### License
+
+Copyright 2025 G. Branden Robinson
+
+Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.
+
+
+##### Editor settings
+Local Variables:
+fill-column: 72
+mode: change-log
+version-control: never
+End:
+vim:set autoindent textwidth=72:
diff --git a/contrib/install-font/install-font.am
b/contrib/install-font/install-font.am
new file mode 100644
index 000000000..17cfbb9c2
--- /dev/null
+++ b/contrib/install-font/install-font.am
@@ -0,0 +1,33 @@
+# Copyright 2025 G. Branden Robinson
+#
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your
+# option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+installfont_srcdir = $(abs_top_srcdir)/doc
+installfont_builddir = $(abs_top_builddir)/doc
+
+installfontexamplesdir = $(exampledir)
+dist_installfontexamples_DATA = contrib/install-font/install-font.bash
+
+EXTRA_DIST += \
+ contrib/install-font/COPYRIGHT \
+ contrib/install-font/ChangeLog
+
+
+# Local Variables:
+# fill-column: 72
+# mode: makefile-automake
+# End:
+# vim: set autoindent filetype=automake textwidth=72:
diff --git a/contrib/install-font/install-font.bash
b/contrib/install-font/install-font.bash
new file mode 100644
index 000000000..d07f1c8a0
--- /dev/null
+++ b/contrib/install-font/install-font.bash
@@ -0,0 +1,723 @@
+#!/bin/bash
+#
+# Copyright 2024 Peter Schaffter
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+set -o posix
+
+ROOT_UID=0
+OPTERR=1
+
+loc_or_sysdir=/usr/local/share/groff # make this default
+version=current
+
+trap interrupt SIGINT
+
+shopt -s expand_aliases
+
+alias cp='cp -f' # -p flag for interactive
+alias ln='ln -f'
+alias mv='mv -f'
+
+script="$(basename ${0%.*})"
+
+show_usage()
+{
+printf \
+"Usage: ${script} [-lscpdD] \
+[-C \033[4mdir\033[0m] \
+[-F \033[4mfamily\033[0m] \
+[-f \033[4mgroff fontname\033[0m] | +\033[4mSTYLE\033[0m] file ...\n\
+Longer help: install-font.sh -H (pipe through 'less' or 'more')\n"
+}
+
+long_help()
+{
+ printf <<EOF \
+"USAGE:
+
+ install-font.sh [-hHlscpn] [-P \033[4mdir\033[0m] [-C \033[4mdir\033[0m]
[-F \033[4mfamily\033[0m] \
+[-f \033[4mgroff fontname\033[0m] file1 file2 ...
+
+DESCRIPTION:
+
+ A utility to make TrueType (.ttf), OpenType (.otf), and
+ PostScript Type1 (.pfa, .pfb) fonts available for use with
+ groff.
+
+ With no options, for every file named on the command line,
+ \033[4minstall-font\033[0m prompts for
+
+ - a family name
+ - a groff fontname
+ - whether to make the font available to gropdf
+ - whether to copy the input file(s) to a system-wide location
+
+ \033[4minstall-font.sh\033[0m calls fontforge to convert TrueType and
OpenType
+ fonts to PostScript Type42 (.t42) and Type1 (.pfa), from which
+ a groff font is generated. The .t42 and groff fonts are moved
+ to site-font/devps/ and registered in the 'download' file. If
+ the font is to be available to gropdf, the .pfa is moved to
+ site-font/devpdf/ and registered in its 'download' file. A
+ symlink is made to the groff font in site-font/devps.
+
+ PostScript fonts are converted to .pfa, even those with a .pfa
+ extension. The newly-generated .pfa has a filename derived from the
+ font's PostScript name. This is helpful in the case of fonts with
+ cryptic names like 'bchri8a.pfa', which becomes 'CharterBT-Italic.pfa'.
+ In all cases, the original file is preserved with its original
+ name in the directory from which the font is being installed.
+
+ The .pfa and groff fonts are moved to site-font/devps/ and
+ registered in the 'download' file. If the font is to be
+ available to gropdf, symlinks are made in site-font/devpdf/ to
+ both the .pfa and the groff font, and the .pfa is registered
+ in /site-font/devpdf/download.
+
+OPTIONS
+
+ Options not requiring an argument may be grouped.
+
+ -h Short help.
+
+ -H Long help.
+
+ -l Assume prefix /usr/local/share/groff for all directories. (default)
+
+ -s Assume prefix /usr/share/groff for all directories.
+
+ -P \033[4mdir\033[0m
+ Path to the top-level groff directory if groff has been
+ installed in a non-default location.
+
+ -c Copy file(s) named on the command line to a system-accessible
+ location. If neither -s nor -C is given, copy to the family
+ directory (see -F) under /usr/local/share/fonts/<fonttype>/,
+ where <fonttype> is one of 'truetype', 'type1', or 'opentype'.
+ If -s is given, copy to the family directory located under
+ /usr/share/fonts/<fonttype>/.
+
+ If neither -c nor -C is given, a prompt asks whether to copy
+ the file(s) named on the command line.
+
+ -n Don't copy file(s) named on the command line to a system-accessible
+ location.
+
+ -d Make font available to gropdf.
+
+ -D Do not make font available to gropdf.
+
+ -p Ask before overwriting or linking files. Default is to
+ overwrite without asking.
+
+ -C \033[4mdir\033[0m
+ Copy file(s) named on the command line to the family directory
+ (see -F) in \033[4mdir\033[0m.
+
+ -F \033[4mfamily\033[0m
+ Family to which the font belongs. Creates a family for the
+ groff font, which can then be accessed by calls to .fam or
+ .FAMILY (mom macros). Also creates a family directory for
+ fonts being made available system-wide (see -c and -C).
+
+ -F is useful for batch processing fonts that belong to the
+ same family. Use with care, since all files named on the
+ command line will be assigned to \033[4mfamily\033[0m.
+
+ If -F is not given, a prompt asks for the family name.
+
+ -f \033[4mname\033[0m or +\033[4mSTYLE\033[0m
+ Name by which to access the font with calls to .ft or
+ .FT (mom macros). \033[4mname\033[0m may be arbitrary, or
+ a '+' sign prefixed to an uppercase fontstyle recognized
+ by groff, eg +R, +I, +B, +BI, which respectively stand for
+ regular, italic, bold, and bold italic. The mom macros
+ provide additional styles, which may also be used.
+
+ +\033[4mSTYLE\033[0m is affixed to the family name to arrive at the
+ groff fontname.
+
+ install-font -F Garamond -f +R <file>
+
+ creates font GaramondR, which can be accessed by
+
+ .fam Garamond
+ .ft R
+
+ or
+
+ .ft GaramondR
+
+ -f is not compatible with batch processing. \033[4minstall-font\033[0m
+ will abort if the -f option is given and multiple files are
+ named on the command line.
+
+ If -f is not given, a prompt asks for the font name.
+"
+EOF
+}
+
+case $1 in
+ -h | "")
+ show_usage
+ exit 0
+ ;;
+ -H)
+ long_help
+ exit 0
+ ;;
+esac
+
+# if fontforge not installed, no point going any further
+
+type fontforge > /dev/null 2>&1 || {
+ printf "fontforge not installed. Aborting.\n" >&2
+ exit 1
+}
+
+tmp_dir=/tmp/install-font
+
+[ -d ${tmp_dir} ] || mkdir ${tmp_dir}
+
+clean_tmp()
+{
+ for i in ${tmp_dir}/*[!pe] ; do rm -f "$i" ; done # everything but
.pe
+ for i in ${tmp_dir}/* ; do [ -L "$i" ] && rm "$i" ; done # symlinks
+}
+
+interrupt()
+{
+ clean_tmp
+ printf "\nAborting.\n"
+ exit 130
+}
+
+error()
+{
+ case "$1" in
+ no_filename)
+ printf \
+"[${script}]: Missing filename. \
+Aborting.\n" >&2
+ exit 1
+ ;;
+ no_file)
+ printf \
+"[${script}]: File \"${file}\" not found. \
+Aborting.\n" >&2
+ exit 1
+ ;;
+ no_arg)
+ printf \
+"[${script}]: Option \"-${option}\" requires an argument. \
+Aborting.\n" >&2
+ show_usage
+ exit 1
+ ;;
+ filename_arg)
+ printf \
+"[${script}]: Option \"-${option}\" requires a non-filename argument. \
+Aborting.\n" >&2
+ show_usage
+ exit 1
+ ;;
+ no_dir)
+ printf \
+"[${script}]: Directory \"${copy_dir}\" not found. \
+Aborting.\n" >&2
+ exit 1
+ ;;
+ not_dir)
+ printf \
+"[${script}]: \"${OPTARG}\" not a directory. \
+Aborting.\n" >&2
+ exit 1
+ ;;
+ not_writable)
+ printf \
+"[${script}]: \"${OPTARG}\" is not writable. \
+Aborting.\n" >&2
+ exit 1
+ ;;
+ incompatible)
+ printf \
+"[${script}]: Incompatible file type. Must have extension ttf|pfa|pfb|otf. \
+Aborting.\n" >&2
+ exit 1
+ ;;
+ arg_to_f)
+ printf \
+"[${script}]: Option -${option} incompatible with multiple filenames. \
+Aborting.\n" >&2
+ exit 1
+ esac
+}
+
+generate_t42()
+{
+cat <<EOF > ${tmp_dir}/generate-t42.pe
+# generate-t42.pe
+
+Open(\$1);
+Generate(\$fontname + ".pfa");
+Generate(\$fontname + ".t42");
+EOF
+}
+
+generate_pfa()
+{
+cat <<EOF > ${tmp_dir}/generate-pfa.pe
+# generate-pfa.pe
+
+Open(\$1);
+Generate(\$fontname + ".pfa");
+EOF
+}
+
+convert_font()
+{
+ printf "Running fontforge...\n"
+
+ fontforge -script ${script} "`basename "${file}"`"
+
+ printf "Done.\n"
+}
+
+make_font()
+{
+ printf "Creating \033[33m${groff_font}\033[0m...\n"
+
+ if [ "${is_italic}" ] ; then
+ afmtodit_opts="-e text.enc -i50"
+ else
+ afmtodit_opts="-e text.enc -i0 -m"
+ fi
+
+ afmtodit ${afmtodit_opts} ${font}.afm ${textmap} ${groff_font}
+
+ unset afmtodit_opts
+ rm ${font}.afm
+
+ printf "Done.\n"
+}
+
+install_to_devps()
+{
+ printf \
+"Installing \033[33m${groff_font}\033[0m in ${site_font_devps}/... "
+
+ mv ${font}.${ext} ${site_font_devps}/
+ mv ${groff_font} ${site_font_devps}/
+ chmod 644 ${site_font_devps}/${font}.${ext}
+ chmod 644 ${site_font_devps}/${groff_font}
+
+ # update the download file in site-font/devps
+ [ -e ${site_font_devps}/download ] || {
+ cp ${devps}/download ${site_font_devps}
+ chmod 666 ${site_font_devps}/download
+ }
+
+ [ $argc -eq 1 ] && {
+ cp ${site_font_devps}/download ${site_font_devps}/download.bak
+ }
+
+ printf "${font}\t${font}.${ext}\n" >> ${site_font_devps}/download
+
+ printf "Done.\n"
+}
+
+install_to_devpdf()
+{
+ if [ ${install_in_devpdf} ] ; then
+ gropdf=yes
+ else
+ printf \
+"Make \033[33m${groff_font}\033[0m available to gropdf? (y/n; default = y) "
+ read gropdf
+ fi
+
+ case $gropdf in
+ Y | y | YES | Yes | yes | "")
+ printf "Checking for gropdf executable and devpdf directory... "
+ have_gropdf=`type gropdf`
+
+ if [ "$have_gropdf" ] ; then
+ printf \
+"gropdf found.\nInstalling \033[33m${groff_font}\033[0m in
${site_font_devpdf}/... "
+
+ case ${ext} in
+ t42)
+ mv ${font}.pfa ${site_font_devpdf}/
+ chmod 644 ${site_font_devpdf}/${font}.pfa
+ ;;
+ pfa)
+ ln -s ${site_font_devps}/${font}.pfa
${site_font_devpdf}/${font}.pfa
+ ;;
+ esac
+
+ ln -s ${site_font_devps}/${groff_font}
${site_font_devpdf}/${groff_font}
+
+ [ -e ${site_font_devpdf}/download ] || {
+ touch ${site_font_devpdf}/download && chmod 666
${site_font_devpdf}/download
+ }
+
+ [ $argc -eq 1 ] && {
+ cp -f ${site_font_devpdf}/download ${site_font_devpdf}/download.bak
+ }
+
+ printf "\t${font}\t${font}.pfa\n" >> ${site_font_devpdf}/download
+
+ printf "Done.\n"
+ else
+ printf \
+"gropdf not found.\nNo fonts will be installed in ${site_font_devpdf}.\n"
+ fi ;;
+ esac
+}
+
+get_fontname()
+{
+ printf \
+"Enter +STYLE (eg +R, +I, +B, +BI), or a unique groff name for \
+\033[36m${font}\033[0m.\n"
+ printf \
+"Leave blank to set name to '\033[36m${font}\033[0m': "
+}
+
+convert_install()
+{
+ cd ${tmp_dir}
+ convert_font # generate t42/pfa and afm files
+
+ # get postscript family and font name from afm
+ family_name=`grep "^FamilyName" *afm | \
+ sed -e 's/^FamilyName *\([[:graph:]]\{1,\}\) *[[:print:]]*$/\1/'`
+ font=`grep "^FontName" *afm | \
+ sed -e 's/^FontName *\([[:graph:]]\{1,\}\) *[[:print:]]*$/\1/'`
+ is_italic=`grep -i "^FullName .*italic" *afm | sed -e
's/.*\([Ii]talic\)/\1/'`
+
+ if [ ! ${family} ] ; then # get user's name for family
+ printf "Family name (default = ${family_name}): "
+ read family
+ [ ${family} ] || family=${family_name}
+ fi
+
+ printf \
+" =>\033[36m${font}\033[0m (${file}) assigned to family \
+'\033[33m${family}\033[0m'.\n"
+
+ if [ ! ${groff_font} ] ; then # get groff fontname
+ if [ ! ${append_style} ] ; then
+ get_fontname
+ read groff_font
+ [ ${groff_font} ] || groff_font=${font}
+ append_style=${groff_font:0:1}
+ [ "$append_style" = "+" ] && {
+ append_style=${groff_font##*+}
+ groff_font=${family}${append_style}
+ }
+ else
+ groff_font=${family}${append_style}
+ fi
+ fi
+
+ printf \
+" =>\033[36m${font}\033[0m assigned groff fontname \
+'\033[33m${groff_font}\033[0m'.\n"
+
+# make links to textmap and text.enc if not already present in tmp_dir
+# test for textmap or text.map first.
+
+ [ -e ${devps}/generate/text.map ] && textmap=text.map
+ [ -e ${devps}/generate/textmap ] && textmap=textmap
+
+ if [ ! -e ${textmap} ] ; then
+ [ -e ${devps}/generate/${textmap} ] && ln -s ${devps}/generate/${textmap}
. || {
+ printf "'\${textmap}' not found. Aborting.\n" >&2 ; exit 1
+ }
+ fi
+ if [ ! -e text.enc ] ; then
+ [ -e ${devps}/text.enc ] && ln -s ${devps}/text.enc . || {
+ printf "'text.enc' not found. Aborting.\n" >&2 ; exit 1
+ }
+ fi
+
+ make_font
+ install_to_devps
+
+ [ ${skip_devpdf} ] || install_to_devpdf
+
+ rm -f ${font}*
+ cd - &>/dev/null
+}
+
+copy_file()
+{
+ [ -d ${copy_dir} ] || {
+ echo "${copy_dir} not found; creating."
+ mkdir -p ${copy_dir}
+ chmod 755 ${copy_dir} ;
+ }
+ [ -d ${copy_dir}/${family} ] || {
+ mkdir -p ${copy_dir}/${family}
+ chmod 755 ${copy_dir}/${family}
+ }
+ printf "Installing ${file} in ${copy_dir}/${family}/... "
+ cp "${file}" ${copy_dir}/${family}/
+ chmod 644 ${copy_dir}/${family}/"${file}"
+ printf "Done.\n"
+}
+
+print_sep()
+{
+ printf \
+"======================================================================\n"
+}
+
+# getopts doesn't check if OPTARG is a flag, or a filename when some
+# other value is expected
+
+check_optarg()
+{
+ [ "${OPTARG:0:1}" = "-" ] && error no_arg # is an opt when arg to opt
expected
+
+ eval "has_ext=`echo ${OPTARG} | sed -e 's/^[[:graph:]]*\.[[:graph:]]*$/./'`"
+
+ [ "${has_ext}" = "." ] && error filename_arg # is a filename when filename
not expected
+ :
+}
+
+check_optarg_dir()
+{
+ [ "${OPTARG:0:1}" = "-" ] && error no_arg # is an opt when arg to opt
expected
+
+ [ ! -d "${OPTARG}" ] && error not_dir
+
+ [ ! -w "${OPTARG}" ] && error not_writable
+ :
+}
+
+while getopts ":C:cndDF:f:hHlpP:s" opt
+do
+ case "$opt" in
+ c)
+ copy_orig=yes
+ ;;
+ C)
+ option=C
+ check_optarg
+ copy_orig=yes
+ copy_dir=${OPTARG}
+ [ -d ${copy_dir} ] || error no_dir
+ ;;
+ n)
+ dont_copy=yes
+ ;;
+ d)
+ install_in_devpdf=yes
+ ;;
+ D)
+ skip_devpdf=yes
+ ;;
+ F)
+ option=F
+ check_optarg
+ family=${OPTARG}
+ ;;
+ f)
+ option=f
+ opt_f=true
+ check_optarg
+ append_style=${OPTARG:0:1}
+ case ${append_style} in
+ "+")
+ append_style=${OPTARG##*+}
+ ;;
+ *)
+ groff_font=${OPTARG}
+ ;;
+ esac
+ ;;
+ h)
+ show_usage
+ exit 0
+ ;;
+ H)
+ long_help
+ exit 0
+ ;;
+ l)
+ loc_or_sysdir=/usr/local/share/groff
+ ;;
+ P)
+ option=P
+ check_optarg_dir
+ loc_or_sysdir=${OPTARG}
+ ;;
+ p)
+ alias mv='mv -i'
+ alias ln='ln -i'
+ alias cp='cp -i'
+ ;;
+ s)
+ loc_or_sysdir=/usr/share/groff
+ ;;
+ \?)
+ printf "Option \"-${OPTARG}\" not valid. Aborting.\n" >&2
+ show_usage
+ exit 1
+ ;;
+ :)
+ printf "Option \"-${OPTARG}\" requires an argument. Aborting.\n" >&2
+ show_usage
+ exit 1
+ ;;
+ esac
+done
+
+shift $((OPTIND-1))
+
+[ "$#" -eq 0 ] && error no_filename
+
+[ $# -gt 1 -a "${opt_f}" ] && {
+ error arg_to_f
+ exit 1
+}
+
+if [ ! -w "$loc_or_sysdir" ] ; then
+ # need write access to $loc_or_sysdir
+
+ scriptname=`basename $0`
+ printf \
+"You don't have write access to ${loc_or_sysdir}
+Superuser priviledges required.\nRerun as \
+'\033[33msudo ${scriptname} \033[4margs\033[0m' \
+or \
+'\033[33msu root -c \"${scriptname} \033[4margs\033[0m\033[33m\"\033[0m'\n"
+ exit 126
+fi
+
+devps=${loc_or_sysdir}/${version}/font/devps
+devpdf=${loc_or_sysdir}/${version}/font/devpdf
+site_font_devps=${loc_or_sysdir}/site-font/devps
+site_font_devpdf=${loc_or_sysdir}/site-font/devpdf
+
+# create site-font and site-font/devps and site-font/devpdf
+# if not present
+
+[ -d ${loc_or_sysdir}/site-font ] || {
+ printf "${loc_or_sysdir}/site-font not found; creating.\n"
+ mkdir -p ${loc_or_sysdir}/site-font
+ chmod 755 ${loc_or_sysdir}/site-font
+}
+
+[ -d ${site_font_devps} ] || {
+ printf "${site_font_devps} not found; creating.\n"
+ mkdir -p ${site_font_devps}
+ chmod 755 ${site_font_devps}
+}
+
+[ -d ${site_font_devpdf} ] || {
+ printf "${site_font_devpdf} not found; creating.\n"
+ mkdir -p ${site_font_devpdf}
+ chmod 755 ${site_font_devpdf}
+}
+
+# process files
+
+for i in "$@" ; do
+
+ file="$i"
+ argc=$((argc+1))
+
+ [ -f "${file}" ] || error no_file
+
+ case ${file##*.} in
+ TTF | ttf | PFB | pfb | PFA | pfa | OTF | otf)
+ font_type=${file##*.}
+ ;;
+ *)
+ error incompatible
+ ;;
+ esac
+
+ ln -s "$PWD/${file}" "${tmp_dir}/`basename "${file}"`" # make a link in
tmp dir to file
+
+ [ $argc -gt 1 ] && print_sep
+
+ printf "Processing \033[36m$file\033[0m...\n"
+
+ case ${font_type} in
+ TTF | ttf | OTF | otf)
+ script=generate-t42.pe
+ ext=t42
+
+ [ -e /tmp/$script ] || generate_t42 # create if it doesn't exist
+
+ convert_install
+
+ if [ "${font_type}" = "TTF" -o "${font_type}" = "ttf" ] ; then
+ [ ${copy_dir} ] || copy_dir=/usr/local/share/fonts/truetype
+ else
+ [ ${copy_dir} ] || copy_dir=/usr/local/share/fonts/opentype
+ fi
+ ;;
+ PFB | pfb | PFA | pfa)
+ script=generate-pfa.pe
+ ext=pfa
+
+ [ -e /tmp/$script ] || generate_pfa # create if it doesn't exist
+
+ convert_install
+
+ [ ${copy_dir} ] || copy_dir=/usr/local/share/fonts/type1
+ ;;
+ esac
+
+# copy input file to a system or named directory
+
+ if [ ! "$dont_copy" ] ; then
+ if [ ! "$copy_orig" ] ; then
+ printf \
+ "Copy \033[36m${file}\033[0m to ${copy_dir}/${family}/?\n (y/n;
default = n) "
+ read copy_file
+
+ case "$copy_file" in
+ Y | y | YES | Yes | yes)
+ copy_file
+ ;;
+ * )
+ printf \
+ "Install \033[36m${file}\033[0m manually to make it available
system-wide.\n"
+ ;;
+ esac
+ else
+ copy_file
+ fi
+ fi
+ unset append_style
+ unset ext
+ unset font
+ unset groff_font
+ unset is_italic
+
+done
+
+clean_tmp
+
+exit 0
+
+# vim:set autoindent expandtab shiftwidth=2 softtabstop=2:
_______________________________________________
groff-commit mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/groff-commit