summaryrefslogtreecommitdiffstats
path: root/office
diff options
context:
space:
mode:
author Matteo Bernardini2020-01-18 10:16:11 +0100
committer Matteo Bernardini2020-01-18 10:16:11 +0100
commit54d3863f4487caf692625d6d85d083f03915b05a (patch)
tree6e6ba1d4f953177ef295937086863b69130b4ba4 /office
parente7c5997b9311a3ac31e986a3d4f525c9af840c89 (diff)
downloadslackbuilds-current-20200118.1.tar.gz
20200118.1 global branch merge.current-20200118.1
Signed-off-by: Matteo Bernardini <ponce@slackbuilds.org>
Diffstat (limited to 'office')
-rw-r--r--office/LibreOffice/LibreOffice.SlackBuild9
-rw-r--r--office/LibreOffice/LibreOffice.info12
-rw-r--r--office/LibreOffice/README20
-rw-r--r--office/abiword/abiword.SlackBuild2
-rw-r--r--office/abiword/libical-deprecated.patch13
-rw-r--r--office/apvlv/apvlv.SlackBuild25
-rw-r--r--office/apvlv/apvlv.info6
-rw-r--r--office/calibre/calibre.SlackBuild4
-rw-r--r--office/coolreader/coolreader.SlackBuild45
-rw-r--r--office/coolreader/coolreader.info6
-rw-r--r--office/evince/evince.SlackBuild25
-rw-r--r--office/evince/evince.info6
-rw-r--r--office/evince/shim.h25
-rw-r--r--office/fbreader/fbreader.SlackBuild3
-rw-r--r--office/gbgoffice/gbgoffice.SlackBuild1
-rw-r--r--office/gbgoffice/patches/12_gcc6.patch21
-rw-r--r--office/gnokii/gnokii-0.6.31-gcc7.patch17
-rw-r--r--office/gnokii/gnokii.SlackBuild3
-rw-r--r--office/gnucash-legacy/gnucash-legacy.info2
-rw-r--r--office/gnucash/gnucash.SlackBuild6
-rw-r--r--office/gnumeric/gnumeric.SlackBuild4
-rw-r--r--office/htmldoc/build_fix.patch11
-rw-r--r--office/htmldoc/htmldoc.SlackBuild20
-rw-r--r--office/htmldoc/htmldoc.info6
-rw-r--r--office/juffed/README6
-rw-r--r--office/juffed/doinst.sh3
-rw-r--r--office/juffed/juffed.SlackBuild98
-rw-r--r--office/juffed/juffed.info10
-rw-r--r--office/juffed/slack-desc19
-rw-r--r--office/kbgoffice/gcc6.patch17
-rw-r--r--office/kbgoffice/kbgoffice.SlackBuild3
-rw-r--r--office/mu/mu.SlackBuild4
-rw-r--r--office/mu/mu.info6
-rw-r--r--office/pdfjam/README4
-rw-r--r--office/pdfjam/pdfjam.SlackBuild56
-rw-r--r--office/pdfjam/pdfjam.info10
-rw-r--r--office/pdfjam/slack-desc19
-rw-r--r--office/pdftk/README7
-rw-r--r--office/pdftk/pdftk-1.44-add_custom_optflags.patch26
-rw-r--r--office/pdftk/pdftk-2.02-use-gcc5.patch15
-rw-r--r--office/pdftk/pdftk.SlackBuild11
-rw-r--r--office/pdftk/pdftk.info2
-rw-r--r--office/referencer/referencer-lib_path.patch11
-rw-r--r--office/referencer/referencer.SlackBuild3
-rw-r--r--office/sc-im/README2
-rw-r--r--office/sc-im/sc-im.SlackBuild99
-rw-r--r--office/sc-im/sc-im.info10
-rw-r--r--office/sc-im/slack-desc19
-rw-r--r--office/scribus/scribus.SlackBuild10
-rw-r--r--office/scribus/scribus.info6
-rw-r--r--office/texlive/README14
-rw-r--r--office/texlive/README.tlpkg17
-rw-r--r--office/texlive/doinst.sh5
-rw-r--r--office/texlive/patches/tabu.sty.diff32
-rw-r--r--office/texlive/patches/texlive-20190410-source-upstream_fixes-1.patch4096
-rw-r--r--office/texlive/prep/texmf_get.sh1106
-rw-r--r--office/texlive/slack-desc19
-rw-r--r--office/texlive/texlive.SlackBuild249
-rw-r--r--office/texlive/texlive.info12
59 files changed, 232 insertions, 6086 deletions
diff --git a/office/LibreOffice/LibreOffice.SlackBuild b/office/LibreOffice/LibreOffice.SlackBuild
index 14fd0f2042..416819871f 100644
--- a/office/LibreOffice/LibreOffice.SlackBuild
+++ b/office/LibreOffice/LibreOffice.SlackBuild
@@ -26,9 +26,9 @@
PRGNAM=LibreOffice
SRCNAM=libreoffice
-VERSION=${VERSION:-6.2.8.2}
+VERSION=${VERSION:-6.3.1.2}
SHORT_VERSION=${VERSION%.*.*}
-BUILD=${BUILD:-1}
+BUILD=${BUILD:-2}
TAG=${TAG:-_SBo}
PACKAGER=${PACKAGER:-"AnonymousCoward"}
@@ -91,7 +91,7 @@ jval="$(echo $MAKEFLAGS |grep -o "\-j *[0-9]*" | grep -o "[0-9]*")" || true
# If PARALLEL environment variable is set, use that to override everything.
[ "${PARALLEL:-0}" != "0" ] && parallel="--with-parallelism=$PARALLEL"
-JAVA=${JAVA:-openjdk7}
+JAVA=${JAVA:-jdk}
if [ "$JAVA" = "openjdk7" ]; then
. /etc/profile.d/openjdk7.sh
use_java="--with-java=java"
@@ -154,7 +154,6 @@ if pkg-config --exists python3 ; then Python3="--enable-python=system" ; else Py
if pkg-config --exists Qt5 ; then qt5="--enable-qt5" ; else qt5="" ; fi
if pkg-config --exists valgrind ; then valgrind="--with-valgrind" ; else valgrind="" ; fi
-kde4="--enable-kde4" ; [ "${KDE4:-yes}" != "yes" ] && kde4="--disable-kde4"
use_ccache="--disable-ccache" ; [ "${USE_CCACHE:-no}" != "no" ] && use_ccache=""
# Extensions
@@ -168,7 +167,6 @@ extnlpsolver="--enable-ext-nlpsolver"; [ "${EXTNLPSOLVER:-yes}" != "yes" ] &
./autogen.sh \
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
- NSS_CFLAGS="$(pkg-config --cflags-only-I mozilla-nss)"\
--prefix=/usr \
--mandir=/usr/man \
--docdir=/usr/doc/$PRGNAM-$VERSION \
@@ -188,7 +186,6 @@ extnlpsolver="--enable-ext-nlpsolver"; [ "${EXTNLPSOLVER:-yes}" != "yes" ] &
$avahi \
$Python3 \
$vlc \
- $kde4 \
$use_ccache \
$use_java \
$parallel \
diff --git a/office/LibreOffice/LibreOffice.info b/office/LibreOffice/LibreOffice.info
index fc9a4c48ec..32a6570afe 100644
--- a/office/LibreOffice/LibreOffice.info
+++ b/office/LibreOffice/LibreOffice.info
@@ -1,12 +1,12 @@
PRGNAM="LibreOffice"
-VERSION="6.2.8.2"
+VERSION="6.3.1.2"
HOMEPAGE="https://www.libreoffice.org"
-DOWNLOAD="https://download.documentfoundation.org/libreoffice/src/6.2.8/libreoffice-6.2.8.2.tar.xz \
- http://sourceforge.net/projects/slackbuildsdirectlinks/files/LibreOffice/libreoffice-6.2.8.2-srcs.tar.xz"
-MD5SUM="1438fdfae3076b8b1b1460054a318f0b \
- b5d5e57832056d8a5625b1d5dc3aa024"
+DOWNLOAD="https://download.documentfoundation.org/libreoffice/src/6.3.1/libreoffice-6.3.1.2.tar.xz \
+ http://sourceforge.net/projects/slackbuildsdirectlinks/files/LibreOffice/libreoffice-6.3.1.2-srcs.tar.xz"
+MD5SUM="d6d546055af3569b3c4064f273d3baf1 \
+ 030c8647db051c7ef51c6594b854427f"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
-REQUIRES="python3 openjdk7 apache-ant perl-Archive-Zip"
+REQUIRES="python3 apache-ant perl-Archive-Zip jdk"
MAINTAINER="Christoph Willing"
EMAIL="chris.willing@linux.com"
diff --git a/office/LibreOffice/README b/office/LibreOffice/README
index 69c212624c..addec25a27 100644
--- a/office/LibreOffice/README
+++ b/office/LibreOffice/README
@@ -35,10 +35,7 @@ Build time environment variables that may be set to vary features are as follows
VLC="yes"
This requires the vlc package (available from SBo) to be installed.
-3. disable kde4 support (enabled by default) with:
- KDE4="no"
-
-4. support additional languages by overriding the LOLANGS variable, whose
+2. support additional languages by overriding the LOLANGS variable, whose
default setting is LOLANGS="de es fr id it ja nl vi zh-CN". Note that en-US
is always added to whatever LOLANGS is set. Thus building with, for example,
LOLANGS="de" sh LibreOffice
@@ -46,19 +43,20 @@ Build time environment variables that may be set to vary features are as follows
Additionally, setting LOLANGS="ALL" will build in support for all available
languages.
-5. A number of Java Development Kits are suitable for building LibreOffice.
- The default JDK for this SlackBuild is openjdk7. Others may be chosen by
+3. A number of Java Development Kits are suitable for building LibreOffice.
+ The default JDK for this SlackBuild is jdk. Others may be chosen by
setting the JAVA environment variable when running the SlackBuild. Recognised
- values are openjdk7 (the default, not explicitly required), openjdk8 and jdk
- e.g. JAVA=jdk (to use SBo jdk package with Oracle binary version). Using an
- alternate JDK will require presence of the appropriate package when building
+ values are jdk, openjdk7 and openjdk8. For example:
+ JAVA=jdk
+ (to use SBo jdk package with Oracle binary version). Using an alternate
+ JDK will require the presence of the appropriate package when building
LibreOffice. Since the apache-ant package is already required by openjdk7,
hence openjdk8, its listing in the REQUIRES field is redundant in these cases.
However it remains listed to accomodate the case of JAVA=jdk, in which the
apache-ant package is needed to build LibreOffice.
Finally, setting JAVA=no will build LibreOffice without any Java support.
-6. The number of parallel make jobs used by the LibreOffice build system defaults
+4. The number of parallel make jobs used by the LibreOffice build system defaults
to the number of available cpu cores. If the MAKEFLAGS environment variable
contains the -j option e.g.
MAKEFLAGS=-j6
@@ -69,7 +67,7 @@ Build time environment variables that may be set to vary features are as follows
which would limit building to a single make process, overriding any value set
with the -j option in MAKEFLAGS.
-7. Use of ccache during building is turned off by default to save disk space (and
+5. Use of ccache during building is turned off by default to save disk space (and
possible build failure due to lack of disk space). It may be reinstated by
setting the USE_CCACHE environment to "yes" e.g.
USE_CCACHE=yes sh LibreOffice.SlackBuild
diff --git a/office/abiword/abiword.SlackBuild b/office/abiword/abiword.SlackBuild
index 77fdffe278..d3c9925d88 100644
--- a/office/abiword/abiword.SlackBuild
+++ b/office/abiword/abiword.SlackBuild
@@ -80,6 +80,8 @@ find -L . \
# https://bugs.archlinux.org/task/46659
patch -p1 < $CWD/bug13815.patch
+patch -p1 < $CWD/libical-deprecated.patch
+
CPPFLAGS="-I$TMP/$PRGNAM-$VERSION" \
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS -std=c++11" \
diff --git a/office/abiword/libical-deprecated.patch b/office/abiword/libical-deprecated.patch
new file mode 100644
index 0000000000..9ca15bee12
--- /dev/null
+++ b/office/abiword/libical-deprecated.patch
@@ -0,0 +1,13 @@
+--- abiword-3.0.2/src/text/ptbl/xp/pd_DocumentRDF.cpp.orig 2015-04-02 03:09:20.000000000 +0000
++++ abiword-3.0.2/src/text/ptbl/xp/pd_DocumentRDF.cpp 2017-11-19 22:57:49.533304878 +0000
+@@ -2269,8 +2269,8 @@
+ icalcomponent_set_uid( c, m_uid.c_str() );
+ icalcomponent_set_location( c, m_location.c_str() );
+ icalcomponent_set_description( c, m_desc.c_str() );
+- icalcomponent_set_dtstart( c, icaltime_from_timet( m_dtstart, 0 ) );
+- icalcomponent_set_dtend( c, icaltime_from_timet( m_dtend, 0 ) );
++ icalcomponent_set_dtstart( c, icaltime_from_timet_with_zone( m_dtstart, 0, 0 ) );
++ icalcomponent_set_dtend( c, icaltime_from_timet_with_zone( m_dtend, 0, 0 ) );
+
+ char* data = icalcomponent_as_ical_string( c );
+ std::ofstream oss( filename.c_str() );
diff --git a/office/apvlv/apvlv.SlackBuild b/office/apvlv/apvlv.SlackBuild
index 5246eb400f..62eff77de8 100644
--- a/office/apvlv/apvlv.SlackBuild
+++ b/office/apvlv/apvlv.SlackBuild
@@ -23,15 +23,14 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
PRGNAM=apvlv
-VERSION=${VERSION:-0.1.4}
+VERSION=${VERSION:-20160627_9ab7626}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
- i?86) ARCH=i486 ;;
+ i?86) ARCH=i586 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
@@ -42,8 +41,8 @@ TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
-if [ "$ARCH" = "i486" ]; then
- SLKCFLAGS="-O2 -march=i486 -mtune=i686"
+if [ "$ARCH" = "i586" ]; then
+ SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
@@ -61,21 +60,21 @@ set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
-rm -rf $PRGNAM-$VERSION-Source
-tar xvf $CWD/$PRGNAM-$VERSION-Source.tar.gz
-cd $PRGNAM-$VERSION-Source
+rm -rf $PRGNAM-$VERSION
+tar xvf $CWD/$PRGNAM-$VERSION.tar.xz
+cd $PRGNAM-$VERSION
chown -R root:root .
find -L . \
- \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 -o -perm 511 \) \
- -exec chmod 755 {} \; -o \
- \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
- -exec chmod 644 {} \;
+ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
+ -o -perm 511 \) -exec chmod 755 {} \; -o \
+ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
+ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
mkdir -p build
cd build
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
- -DCMAKE_CXX_FLAGS_RELEASE="$SLKCFLAGS" \
+ -DCMAKE_CXX_FLAGS_RELEASE="$SLKCFLAGS -fpermissive" \
-DCMAKE_INSTALL_PREFIX=/usr \
-DAPVLV_WITH_UMD=false \
-DMANDIR=/usr/man \
diff --git a/office/apvlv/apvlv.info b/office/apvlv/apvlv.info
index da882def19..4df540a600 100644
--- a/office/apvlv/apvlv.info
+++ b/office/apvlv/apvlv.info
@@ -1,8 +1,8 @@
PRGNAM="apvlv"
-VERSION="0.1.4"
+VERSION="20160627_9ab7626"
HOMEPAGE="http://naihe2010.github.com/apvlv/"
-DOWNLOAD="https://github.com/downloads/naihe2010/apvlv/apvlv-0.1.4-Source.tar.gz"
-MD5SUM="bcd3e96350a2378662e2f2d0fa02d342"
+DOWNLOAD="http://ponce.cc/slackware/sources/repo/apvlv-20160627_9ab7626.tar.xz"
+MD5SUM="e7a285ca7ac4d3abc1842519c0f20987"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""
diff --git a/office/calibre/calibre.SlackBuild b/office/calibre/calibre.SlackBuild
index 048798bcf9..cff4dbdc86 100644
--- a/office/calibre/calibre.SlackBuild
+++ b/office/calibre/calibre.SlackBuild
@@ -79,10 +79,6 @@ patch -p1 < $CWD/patches/calibre-no-update.patch
# Remove calibre portable scripts.
rm -f resources/calibre-portable.*
-PYTHONVER=$(python -V 2>&1 | cut -f 2 -d' ' | cut -f 1-2 -d.)
-export SIP_BIN=/usr/bin/python2-sip
-export SIP_INC_DIR="/usr/include/python$PYTHONVER/python2-sip"
-
OVERRIDE_CFLAGS="$SLKCFLAGS" \
OVERRIDE_LDFLAGS="-L/usr/lib${LIBDIRSUFFIX}" \
python setup.py build
diff --git a/office/coolreader/coolreader.SlackBuild b/office/coolreader/coolreader.SlackBuild
index d4cd5b4820..dd38f2cb84 100644
--- a/office/coolreader/coolreader.SlackBuild
+++ b/office/coolreader/coolreader.SlackBuild
@@ -22,19 +22,16 @@
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# Upsteam url: https://sourceforge.net/p/crengine/crengine/ci/master/tree/
+
PRGNAM=coolreader
-VERSION=${VERSION:-3.0.56}
+VERSION=${VERSION:-20160825_d8a3a1b}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
-ORIG_PRGNAM=cr3
-ORIG_VERSION=$VERSION-7
-ORIG_DIRNAME=cr$ORIG_VERSION
-ORIG_FILENAME=${ORIG_PRGNAM}_$VERSION.orig.tar.gz
-
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
- i?86) ARCH=i486 ;;
+ i?86) ARCH=i586 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
@@ -45,8 +42,8 @@ TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
-if [ "$ARCH" = "i486" ]; then
- SLKCFLAGS="-O2 -march=i486 -mtune=i686"
+if [ "$ARCH" = "i586" ]; then
+ SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
@@ -59,28 +56,34 @@ else
LIBDIRSUFFIX=""
fi
+ORIG_PRGNAM=cr3
+
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
-rm -rf $ORIG_DIRNAME
-tar xvf $CWD/$ORIG_FILENAME
-cd $ORIG_DIRNAME
+rm -rf $PRGNAM-$VERSION
+tar xvf $CWD/$PRGNAM-$VERSION.tar.xz
+cd $PRGNAM-$VERSION
chown -R root:root .
+find -L . \
+ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
+ -o -perm 511 \) -exec chmod 755 {} \; -o \
+ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
+ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
mkdir -p build
cd build
cmake \
- -D CMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
- -D CMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
- -D CMAKE_INSTALL_PREFIX=/usr \
- -D LIB_SUFFIX=${LIBDIRSUFFIX} \
- -D CMAKE_BUILD_TYPE=Release \
- -D MAX_IMAGE_SCALE_MUL=2 \
- -D DOC_DATA_COMPRESSION_LEVEL=3 \
- -D DOC_BUFFER_SIZE=0x1400000 \
- -D GUI=QT ..
+ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
+ -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DMAX_IMAGE_SCALE_MUL=2 \
+ -DDOC_DATA_COMPRESSION_LEVEL=3 \
+ -DDOC_BUFFER_SIZE=0x1400000 \
+ -DGUI=QT ..
make VERBOSE=1
make install DESTDIR=$PKG
cd ..
diff --git a/office/coolreader/coolreader.info b/office/coolreader/coolreader.info
index c5b6d8c40f..6da261f458 100644
--- a/office/coolreader/coolreader.info
+++ b/office/coolreader/coolreader.info
@@ -1,8 +1,8 @@
PRGNAM="coolreader"
-VERSION="3.0.56"
+VERSION="20160825_d8a3a1b"
HOMEPAGE="https://sourceforge.net/projects/crengine/"
-DOWNLOAD="https://downloads.sourceforge.net/crengine/CoolReader3/cr3_3.0.56.orig.tar.gz"
-MD5SUM="cc221a608a1b5fea2db5a519c14eeb39"
+DOWNLOAD="http://ponce.cc/slackware/sources/repo/coolreader-20160825_d8a3a1b.tar.xz"
+MD5SUM="0c65e080d2cba8213dd19fb26f4ad9b3"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""
diff --git a/office/evince/evince.SlackBuild b/office/evince/evince.SlackBuild
index a1f6e48489..b944aacad0 100644
--- a/office/evince/evince.SlackBuild
+++ b/office/evince/evince.SlackBuild
@@ -33,7 +33,7 @@
# some fugly hackery to work, see shim.h for gory details and polemic.
PRGNAM=evince
-VERSION=${VERSION:-3.28.5}
+VERSION=${VERSION:-3.34.2}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
@@ -89,20 +89,6 @@ if [ "$NLS" != "YES" ]; then
-e 's/ENABLE_NLS 1/ENABLE_NLS 0/g' configure
fi
-# 20200101 bkw: "shim" to let us actually compile with gtk+-3.18 and
-# glib-2.46.2. Supposedly these versions are supported by evince-3.28.5,
-# but upstream uses a couple of functions that are new in gtk+-3.22
-# and glib-2.52. Fortunately it's stuff we can work around with a few
-# #defines.
-SLKCFLAGS="$SLKCFLAGS -include $CWD/shim.h"
-
-# 20200101 bkw: 14.2's mime stuff identifies djvu files as
-# image/vnd.djvu only, but evince wants image/vnd.djvu+multipage.
-sed -i '/^ *DJVU_MIME_TYPES/s|="|&image/vnd.djvu;|' configure
-
-# If we were building 3.30.x, we'd need this:
-# --without-gspell \
-
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
./configure \
@@ -126,23 +112,18 @@ CXXFLAGS="$SLKCFLAGS" \
--disable-static \
--disable-nautilus \
--disable-maintainer-mode \
+ --without-gspell \
--with-systemduserunitdir=no \
--build=$ARCH-slackware-linux
-# ugh. glib-genmarshal's flags changed gratuitously.
-sed -i 's,--prototypes,--header,' libview/Makefile
-
make V=1
make install-strip DESTDIR=$PKG
-# Fix desktop entry
-sed -i "/NoDisplay=true/d" $PKG/usr/share/applications/evince.desktop
-
gzip -9 $PKG/usr/man/man1/$PRGNAM.1
rm -rf $PKG/{usr/share/gtk-doc,etc}
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
-cp -a AUTHORS COPYING NEWS README MAINTAINERS $PKG/usr/doc/$PRGNAM-$VERSION
+cp -a AUTHORS COPYING NEWS README.md MAINTAINERS $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
mkdir -p $PKG/install
diff --git a/office/evince/evince.info b/office/evince/evince.info
index 91a6eca4f1..a5814eea74 100644
--- a/office/evince/evince.info
+++ b/office/evince/evince.info
@@ -1,8 +1,8 @@
PRGNAM="evince"
-VERSION="3.28.5"
+VERSION="3.34.2"
HOMEPAGE="http://projects.gnome.org/evince/"
-DOWNLOAD="https://download.gnome.org/sources/evince/3.28/evince-3.28.5.tar.xz"
-MD5SUM="855600d64544a959add349e32f5185e0"
+DOWNLOAD="https://download.gnome.org/sources/evince/3.34/evince-3.34.2.tar.xz"
+MD5SUM="9e9e82fa8f6045ad7817157d9335d185"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""
diff --git a/office/evince/shim.h b/office/evince/shim.h
deleted file mode 100644
index 8439c34ac5..0000000000
--- a/office/evince/shim.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* 20191231 bkw: This seems like stupidity: g_content_type_is_mime_type
- is a new function in glib-2.52, which literally just calls the
- g_content_type_is_a function from older glibs, and returns its
- result. Here's the function from the glib-2.52 source:
-
- gboolean
- g_content_type_is_mime_type (const gchar *type,
- const gchar *mime_type)
- {
- return g_content_type_is_a (type, mime_type);
- }
-
- The docs describe it as a "convenience wrapper" but there's
- nothing more or less convenient about it, except that it breaks builds
- with older glib versions. Why does it even exist?
- */
-#define g_content_type_is_mime_type(x,y) g_content_type_is_a(x,y)
-
-/* 20191231 bkw: We'd need gtk+-3.22 to have gtk_popover_popup and
- gtk_popover_popdown. They're functionally the same as gtk_widget_show
- and gtk_widget_hide, except they have a "transition" (fade-in/out).
- Some folks might actually prefer it without the fade.
- */
-#define gtk_popover_popup(x) gtk_widget_show(GTK_WIDGET(x))
-#define gtk_popover_popdown(x) gtk_widget_hide(GTK_WIDGET(x))
diff --git a/office/fbreader/fbreader.SlackBuild b/office/fbreader/fbreader.SlackBuild
index d5c54adeac..d19b2904a3 100644
--- a/office/fbreader/fbreader.SlackBuild
+++ b/office/fbreader/fbreader.SlackBuild
@@ -56,6 +56,9 @@ find -L . \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+# Needed for gcc >= 6.x
+sed -i "s|-Wall|-Wall -Wno-narrowing|" makefiles/arch/desktop.mk
+
patch -p1 < $CWD/fbreader-0.99.4.patch
export TARGET_ARCH=desktop
diff --git a/office/gbgoffice/gbgoffice.SlackBuild b/office/gbgoffice/gbgoffice.SlackBuild
index 08a3eac59b..268a1f6f00 100644
--- a/office/gbgoffice/gbgoffice.SlackBuild
+++ b/office/gbgoffice/gbgoffice.SlackBuild
@@ -78,6 +78,7 @@ patch -p1 -i $CWD/patches/08_fix_const_conversion.patch
patch -p1 -i $CWD/patches/09_deprecated_SigC.patch
patch -p1 -i $CWD/patches/10_workhelper-buttonbox.patch
patch -p1 -i $CWD/patches/11_explicit-linkage.patch
+patch -p1 -i $CWD/patches/12_gcc6.patch
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS -std=c++11" \
diff --git a/office/gbgoffice/patches/12_gcc6.patch b/office/gbgoffice/patches/12_gcc6.patch
new file mode 100644
index 0000000000..2ec2c344f4
--- /dev/null
+++ b/office/gbgoffice/patches/12_gcc6.patch
@@ -0,0 +1,21 @@
+Description: fixes compilation with GCC-6
+ return type must be Translator* and can't be boolean
+Author: Damyan Ivanov <dmn@debian.org>
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811619
+
+--- a/src/translator_manager.cpp
++++ b/src/translator_manager.cpp
+@@ -176,11 +176,11 @@ Translator *TranslatorManager::getTestDi
+ isDataOk = isDataOk && tr->init(tr->BG_EN, string(string(prop->getDirectory()) + prop->getString("data")).c_str());
+ } else {
+ cerr << "TranslatorManager::getTestDictionaryObject - Wrong description file: " << testDictionaries[index].fileName << "\n";
+- return false;
++ return NULL;
+ }
+ if (!isDataOk) {
+ cerr << "TranslatorManager::getTestDictionaryObject - Problem initialazing dictionary: " << testDictionaries[index].fileName << "\n";
+- return false;
++ return NULL;
+ }
+ char c[16];
+ sprintf(c, "%d", level);
diff --git a/office/gnokii/gnokii-0.6.31-gcc7.patch b/office/gnokii/gnokii-0.6.31-gcc7.patch
new file mode 100644
index 0000000000..6637a6af62
--- /dev/null
+++ b/office/gnokii/gnokii-0.6.31-gcc7.patch
@@ -0,0 +1,17 @@
+Patch by Robert Scheck <robert@fedoraproject.org> for gnokii <= 0.6.31 to avoid
+build failures with GCC 7.x as "../common/.libs/libgnokii.so: undefined reference
+to `local_atoi'". The "inline" is only a hint that the compiler doesn't complain
+about double defined symbols, but does not guarantee that a function is inlined
+or that a symbol is generated when needed.
+
+--- gnokii-0.6.31/common/gsm-filetypes.c 2011-12-02 15:53:04.000000000 +0100
++++ gnokii-0.6.31/common/gsm-filetypes.c.gcc7 2017-02-12 00:55:39.000000000 +0100
+@@ -1409,7 +1409,7 @@
+ #define GET_NEXT_TOKEN() o = get_next_token(line + offset, ';')
+ #define STORE_TOKEN(a) strip_slashes(a, line + offset, sizeof(a) - 1, o - 1)
+
+-inline int local_atoi(char *str, int len)
++static int local_atoi(char *str, int len)
+ {
+ int retval;
+ char *aux = strndup(str, len);
diff --git a/office/gnokii/gnokii.SlackBuild b/office/gnokii/gnokii.SlackBuild
index eb3b4f1519..5301e1c7cf 100644
--- a/office/gnokii/gnokii.SlackBuild
+++ b/office/gnokii/gnokii.SlackBuild
@@ -73,6 +73,9 @@ find -L . \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
-exec chmod 644 {} \;
+# Thnx to fedora for this patch
+patch -p1 < $CWD/gnokii-0.6.31-gcc7.patch
+
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
./configure \
diff --git a/office/gnucash-legacy/gnucash-legacy.info b/office/gnucash-legacy/gnucash-legacy.info
index 7c4ad9d1f9..5449ab2e68 100644
--- a/office/gnucash-legacy/gnucash-legacy.info
+++ b/office/gnucash-legacy/gnucash-legacy.info
@@ -5,6 +5,6 @@ DOWNLOAD="http://downloads.sourceforge.net/gnucash/gnucash-2.6.21.tar.bz2"
MD5SUM="63226e9b49e11dc0d7106bd15c09996b"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
-REQUIRES="libgnomecanvas goffice0.8 webkitgtk"
+REQUIRES="libgnomecanvas goffice0.8 guile1.8 webkitgtk"
MAINTAINER="Lenard Spencer"
EMAIL="lenardrspencer@gmail.com"
diff --git a/office/gnucash/gnucash.SlackBuild b/office/gnucash/gnucash.SlackBuild
index 05e1dd5e52..044b33304d 100644
--- a/office/gnucash/gnucash.SlackBuild
+++ b/office/gnucash/gnucash.SlackBuild
@@ -117,11 +117,13 @@ find -L . \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+sed -i '1iinclude(CheckSymbolExists)' gnucash/register/register-gnome/CMakeLists.txt
+
mkdir -p build
cd build
cmake \
- -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
- -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
+ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS -Wno-error" \
+ -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS -Wno-error" \
-DCMAKE_INSTALL_PREFIX=/usr \
-DLIBDIR=/usr/lib${LIBDIRSUFFIX} \
-DSYSCONFDIR=/etc \
diff --git a/office/gnumeric/gnumeric.SlackBuild b/office/gnumeric/gnumeric.SlackBuild
index 0a5d0ee899..e87c652629 100644
--- a/office/gnumeric/gnumeric.SlackBuild
+++ b/office/gnumeric/gnumeric.SlackBuild
@@ -66,6 +66,10 @@ find -L . \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+# Avoid the cs help or build will break
+sed -i "s|cs\ de\ es|de es|" doc/Makefile.am || exit 1
+autoreconf -fi
+
# Thanks to mancha for this gem :-)
# The docs will still be missing, but at least we can build the app itself
touch doc/C/gnumeric-C.omf.out
diff --git a/office/htmldoc/build_fix.patch b/office/htmldoc/build_fix.patch
new file mode 100644
index 0000000000..f0e2e64993
--- /dev/null
+++ b/office/htmldoc/build_fix.patch
@@ -0,0 +1,11 @@
+--- htmldoc/ps-pdf.cxx.orig 2018-04-10 11:56:03 UTC
++++ htmldoc/ps-pdf.cxx
+@@ -5361,7 +5361,7 @@ parse_pre(tree_t *t, /* I - Tree to parse */
+ line[10240],
+ *lineptr,
+ *dataptr;
+- int col;
++ volatile int col;
+ float width,
+ height,
+ rgb[3];
diff --git a/office/htmldoc/htmldoc.SlackBuild b/office/htmldoc/htmldoc.SlackBuild
index f88d47c057..4336fd627f 100644
--- a/office/htmldoc/htmldoc.SlackBuild
+++ b/office/htmldoc/htmldoc.SlackBuild
@@ -31,7 +31,7 @@
# not being copied into the package
PRGNAM=htmldoc
-VERSION=${VERSION:-1.8.29}
+VERSION=${VERSION:-1.9.5}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
@@ -48,7 +48,7 @@ TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
-DOCFILES="CHANGES.txt README.txt COMPILE.txt COPYING.txt htmldoc.readme"
+DOCFILES="CHANGES.md README.md COPYING"
if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
@@ -70,7 +70,7 @@ rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
-tar xvf $CWD/$PRGNAM-$VERSION-source.tar.bz2
+tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
cd $PRGNAM-$VERSION
chown -R root:root .
find -L . \
@@ -79,6 +79,9 @@ find -L . \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+# https://github.com/michaelrsweet/htmldoc/issues/349#issuecomment-486094260
+patch -p0 < $CWD/build_fix.patch
+
# workaround to avoid /usr/share/doc/htmldoc's use for help function
sed -r -i 's|^#define DOCUMENTATION "$prefix/share/doc/htmldoc"|\
#define DOCUMENTATION "$prefix/doc/htmldoc-$VERSION"|g' ./configure
@@ -117,23 +120,16 @@ mkdir -p $PKG/usr/man/man1
cp -a doc/$PRGNAM.1 $PKG/usr/man/man1
mkdir -p $PKG/usr/share/applications
cp -a desktop/$PRGNAM.desktop $PKG/usr/share/applications
-mkdir -p $PKG/usr/share/mimelnk/application
-cp -a desktop/vnd.htmldoc-book.desktop $PKG/usr/share/mimelnk/application
mkdir -p $PKG/usr/share/mime/packages
cp -a desktop/htmldoc.xml $PKG/usr/share/mime/packages
-mkdir -p $PKG/usr/share/icons/hicolor/{16x16,24x24,32x32,48x48,64x64,96x96,128x128}/apps/
-cp -a desktop/htmldoc-16.png $PKG/usr/share/icons/hicolor/16x16/apps/$PRGNAM.png
-cp -a desktop/htmldoc-24.png $PKG/usr/share/icons/hicolor/24x24/apps/$PRGNAM.png
+mkdir -p $PKG/usr/share/icons/hicolor/{32x32,128x128}/apps/ $PKG/usr/share/pixmaps
cp -a desktop/htmldoc-32.png $PKG/usr/share/icons/hicolor/32x32/apps/$PRGNAM.png
-cp -a desktop/htmldoc-48.png $PKG/usr/share/icons/hicolor/48x48/apps/$PRGNAM.png
-cp -a desktop/htmldoc-64.png $PKG/usr/share/icons/hicolor/64x64/apps/$PRGNAM.png
-cp -a desktop/htmldoc-96.png $PKG/usr/share/icons/hicolor/96x96/apps/$PRGNAM.png
cp -a desktop/htmldoc-128.png $PKG/usr/share/icons/hicolor/128x128/apps/$PRGNAM.png
+cp -a desktop/htmldoc.xpm $PKG/usr/share/pixmaps/$PRGNAM.xpm
mkdir -p $PKG/usr/share/htmldoc/
cp -a fonts $PKG/usr/share/htmldoc/
cp -a data $PKG/usr/share/htmldoc/
-
find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
diff --git a/office/htmldoc/htmldoc.info b/office/htmldoc/htmldoc.info
index 5bdd183509..d74acb287c 100644
--- a/office/htmldoc/htmldoc.info
+++ b/office/htmldoc/htmldoc.info
@@ -1,8 +1,8 @@
PRGNAM="htmldoc"
-VERSION="1.8.29"
+VERSION="1.9.5"
HOMEPAGE="https://www.msweet.org/htmldoc/index.html"
-DOWNLOAD="http://www.mirrorservice.org/sites/distfiles.finkmirrors.net/md5/dd2a05e2608d4f34db13c17a6667bb5e/htmldoc-1.8.29-source.tar.bz2"
-MD5SUM="dd2a05e2608d4f34db13c17a6667bb5e"
+DOWNLOAD="https://github.com/michaelrsweet/htmldoc/archive/v1.9.5/htmldoc-1.9.5.tar.gz"
+MD5SUM="afcb95956be031ed8964322385c73e0d"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES="fltk"
diff --git a/office/juffed/README b/office/juffed/README
deleted file mode 100644
index b322d42743..0000000000
--- a/office/juffed/README
+++ /dev/null
@@ -1,6 +0,0 @@
-JuffEd is a free, cross-platform text editor for programmers and
-advanced users. Has syntax highlighting for many languages, code
-folding, find/replace using plain text and regexps, code completion,
-multiple charsets and many other useful features.
-
-enca is an optional dependency (for auto language detection).
diff --git a/office/juffed/doinst.sh b/office/juffed/doinst.sh
deleted file mode 100644
index 5fb28930db..0000000000
--- a/office/juffed/doinst.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-if [ -x /usr/bin/update-desktop-database ]; then
- /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1
-fi
diff --git a/office/juffed/juffed.SlackBuild b/office/juffed/juffed.SlackBuild
deleted file mode 100644
index f37a401a21..0000000000
--- a/office/juffed/juffed.SlackBuild
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/bin/sh
-
-# Slackware build script for juffed
-
-# Copyright 2011-2018 Matteo Bernardini <ponce@slackbuilds.org>, Pisa, Italy
-# All rights reserved.
-#
-# Redistribution and use of this script, with or without modification, is
-# permitted provided that the following conditions are met:
-#
-# 1. Redistributions of this script must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-PRGNAM=juffed
-VERSION=${VERSION:-20180114_9b7af21}
-BUILD=${BUILD:-1}
-TAG=${TAG:-_SBo}
-
-if [ -z "$ARCH" ]; then
- case "$( uname -m )" in
- i?86) ARCH=i586 ;;
- arm*) ARCH=arm ;;
- *) ARCH=$( uname -m ) ;;
- esac
-fi
-
-CWD=$(pwd)
-TMP=${TMP:-/tmp/SBo}
-PKG=$TMP/package-$PRGNAM
-OUTPUT=${OUTPUT:-/tmp}
-
-if [ "$ARCH" = "i586" ]; then
- SLKCFLAGS="-O2 -march=i586 -mtune=i686"
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "i686" ]; then
- SLKCFLAGS="-O2 -march=i686 -mtune=i686"
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "x86_64" ]; then
- SLKCFLAGS="-O2 -fPIC"
- LIBDIRSUFFIX="64"
-else
- SLKCFLAGS="-O2"
- LIBDIRSUFFIX=""
-fi
-
-DOCS="COPYING ChangeLog README"
-
-set -e
-
-rm -rf $PKG
-mkdir -p $TMP $PKG $OUTPUT
-cd $TMP
-rm -rf $PRGNAM-$VERSION
-tar xvf $CWD/$PRGNAM-$VERSION.tar.?z*
-cd $PRGNAM-$VERSION
-chown -R root:root .
-find -L . \
- \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
- -o -perm 511 \) -exec chmod 755 {} \; -o \
- \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
- -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
-
-mkdir -p build
-cd build
- cmake \
- -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
- -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
- -DCMAKE_INSTALL_PREFIX=/usr \
- -DLIB_SUFFIX=$LIBDIRSUFFIX \
- -DCMAKE_BUILD_TYPE=Release ..
- make
- make install DESTDIR=$PKG
-cd ..
-
-find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
- | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
-
-mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
-cp -a $DOCS $PKG/usr/doc/$PRGNAM-$VERSION
-cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
-
-mkdir -p $PKG/install
-cat $CWD/slack-desc > $PKG/install/slack-desc
-cat $CWD/doinst.sh > $PKG/install/doinst.sh
-
-cd $PKG
-/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}
diff --git a/office/juffed/juffed.info b/office/juffed/juffed.info
deleted file mode 100644
index 0b6740222a..0000000000
--- a/office/juffed/juffed.info
+++ /dev/null
@@ -1,10 +0,0 @@
-PRGNAM="juffed"
-VERSION="20180114_9b7af21"
-HOMEPAGE="http://juffed.com"
-DOWNLOAD="http://ponce.cc/slackware/sources/repo/juffed-20180114_9b7af21.tar.xz"
-MD5SUM="6b6c56fecdcfd408638a8023deda09cf"
-DOWNLOAD_x86_64=""
-MD5SUM_x86_64=""
-REQUIRES=""
-MAINTAINER="Matteo Bernardini"
-EMAIL="ponce@slackbuilds.org"
diff --git a/office/juffed/slack-desc b/office/juffed/slack-desc
deleted file mode 100644
index ae39cf2747..0000000000
--- a/office/juffed/slack-desc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description.
-# Line up the first '|' above the ':' following the base package name, and
-# the '|' on the right side marks the last column you can put a character in.
-# You must make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':' except on otherwise blank lines.
-
- |-----handy-ruler------------------------------------------------------|
-juffed: juffed (light qt editor)
-juffed:
-juffed: JuffEd is a free, cross-platform text editor for programmers and
-juffed: advanced users. Has syntax highlighting for many languages, code
-juffed: folding, find/replace using plain text and regexps, code completion,
-juffed: multiple charsets and many other useful features.
-juffed:
-juffed: homepage: http://juffed.com
-juffed:
-juffed:
-juffed:
diff --git a/office/kbgoffice/gcc6.patch b/office/kbgoffice/gcc6.patch
new file mode 100644
index 0000000000..6e2d45e572
--- /dev/null
+++ b/office/kbgoffice/gcc6.patch
@@ -0,0 +1,17 @@
+diff -Naur kbgoffice-2.1.orig/src/translator_manager.cpp kbgoffice-2.1/src/translator_manager.cpp
+--- kbgoffice-2.1.orig/src/translator_manager.cpp 2010-04-30 14:37:42.000000000 +0200
++++ kbgoffice-2.1/src/translator_manager.cpp 2017-06-01 18:10:20.308920738 +0200
+@@ -141,11 +141,11 @@
+ isDataOk = isDataOk && tr->init(tr->BG_EN, string(string(dataDir) + prop->getString("data")).c_str());
+ } else {
+ cerr << "TranslatorManager::getTestDictionaryObject - Wrong description file: " << testDictionaries[index].file << "\n";
+- return false;
++ return NULL;
+ }
+ if (!isDataOk) {
+ cerr << "TranslatorManager::getTestDictionaryObject - Problem initialazing dictionary: " << testDictionaries[index].file << "\n";
+- return false;
++ return NULL;
+ }
+ char c[16];
+ sprintf(c, "%d", level);
diff --git a/office/kbgoffice/kbgoffice.SlackBuild b/office/kbgoffice/kbgoffice.SlackBuild
index c4f4cbb1af..91069ba041 100644
--- a/office/kbgoffice/kbgoffice.SlackBuild
+++ b/office/kbgoffice/kbgoffice.SlackBuild
@@ -52,6 +52,9 @@ find -L . \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
-exec chmod 644 {} \;
+# Thanks debian
+patch -p1 < $CWD/gcc6.patch
+
cd src
sed "s:/usr/local:/usr:" -i.orig $PRGNAM.pro
sed "s:/usr/local:/usr:" -i.orig main.cpp
diff --git a/office/mu/mu.SlackBuild b/office/mu/mu.SlackBuild
index c4c856b5bf..3f9a255f3a 100644
--- a/office/mu/mu.SlackBuild
+++ b/office/mu/mu.SlackBuild
@@ -23,7 +23,7 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PRGNAM=mu
-VERSION=${VERSION:-1.0}
+VERSION=${VERSION:-1.2.0}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
@@ -60,7 +60,7 @@ rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
-tar xvf $CWD/$PRGNAM-$VERSION.tar.gz || tar xvf $CWD/v$VERSION.tar.gz
+tar xvf $CWD/$PRGNAM-$VERSION.tar.xz
cd $PRGNAM-$VERSION
chown -R root:root .
find -L . \
diff --git a/office/mu/mu.info b/office/mu/mu.info
index 534da643df..18d17d047f 100644
--- a/office/mu/mu.info
+++ b/office/mu/mu.info
@@ -1,8 +1,8 @@
PRGNAM="mu"
-VERSION="1.0"
+VERSION="1.2.0"
HOMEPAGE="http://www.djcbsoftware.nl/code/mu/"
-DOWNLOAD="https://github.com/djcb/mu/archive/v1.0.tar.gz"
-MD5SUM="b415f84d4538cf05ec3360a449c1de4d"
+DOWNLOAD="https://github.com/djcb/mu/releases/download/1.2/mu-1.2.0.tar.xz"
+MD5SUM="e90fcd4abfed0e36ff97807d0194e9f9"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""
diff --git a/office/pdfjam/README b/office/pdfjam/README
deleted file mode 100644
index 7d3d58266c..0000000000
--- a/office/pdfjam/README
+++ /dev/null
@@ -1,4 +0,0 @@
-PDFjam is a collection of shell scripts providing a simple interface
-to functionality of the pdfpages package for pdfLaTeX. PDFjam can
-rotate pages, join PDFs, n-up several pages onto one page, generate a
-printer spread for books, and much much more.
diff --git a/office/pdfjam/pdfjam.SlackBuild b/office/pdfjam/pdfjam.SlackBuild
deleted file mode 100644
index 79a862e459..0000000000
--- a/office/pdfjam/pdfjam.SlackBuild
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/bin/sh
-
-# Slackware build script for pdfjam
-# Copyright 2016 Klaatu klaatu@member.fsf.org
-#
-# GNU All-Permissive License
-# 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. This file is offered as-is,
-# without any warranty.
-
-PRGNAM=pdfjam
-VERSION=${VERSION:-2.08}
-VERTAR=${VERTAR:-latest}
-BUILD=${BUILD:-1}
-TAG=${TAG:-_SBo}
-ARCH='noarch'
-CWD=$(pwd)
-TMP=${TMP:-/tmp/SBo}
-PKG=$TMP/package-$PRGNAM
-OUTPUT=${OUTPUT:-/tmp}
-
-set -e
-
-rm -rf $PKG
-mkdir -p $TMP $PKG $OUTPUT
-cd $TMP
-rm -rf $PRGNAM-$VERSION
-tar xvf $CWD/"$PRGNAM"_"$VERTAR".tgz
-cd $PRGNAM
-chown -R root:root .
-find -L . \
- \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
- -o -perm 511 \) -exec chmod 755 {} \; -o \
- \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
- -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
-
-# already in PRGNAM
-mkdir $PKG/usr
-mv bin $PKG/usr/bin
-mkdir -p $PKG/usr/man/man1
-mkdir $PKG/etc
-mv pdfjam.conf $PKG/etc
-mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
-
-for i in man1/* ; do gzip -9c "$i" > $PKG/usr/man/"$i".gz ; done
-
-cp -a COPYING VERSION tests.zip PDFjam-README.html pdfdroplets.png \
- $PKG/usr/doc/$PRGNAM-$VERSION/
-cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
-
-mkdir -p $PKG/install
-cat $CWD/slack-desc > $PKG/install/slack-desc
-
-cd $PKG
-/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}
diff --git a/office/pdfjam/pdfjam.info b/office/pdfjam/pdfjam.info
deleted file mode 100644
index d97fbbdeed..0000000000
--- a/office/pdfjam/pdfjam.info
+++ /dev/null
@@ -1,10 +0,0 @@
-PRGNAM="pdfjam"
-VERSION="2.08"
-HOMEPAGE="https://www2.warwick.ac.uk/fac/sci/statistics/staff/academic-research/firth/software/pdfjam"
-DOWNLOAD="https://www2.warwick.ac.uk/fac/sci/statistics/staff/academic/firth/software/pdfjam/pdfjam_latest.tgz"
-MD5SUM="7df075df7f129091f826275ce8c1f374"
-DOWNLOAD_x86_64=""
-MD5SUM_x86_64=""
-REQUIRES=""
-MAINTAINER="Klaatu"
-EMAIL="klaatu@member.fsf.org"
diff --git a/office/pdfjam/slack-desc b/office/pdfjam/slack-desc
deleted file mode 100644
index 8f35a106b2..0000000000
--- a/office/pdfjam/slack-desc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description.
-# Line up the first '|' above the ':' following the base package name, and
-# the '|' on the right side marks the last column you can put a character in.
-# You must make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':' except on otherwise blank lines.
-
- |-----handy-ruler------------------------------------------------------|
-pdfjam: pdfjam (pdf toolkit)
-pdfjam:
-pdfjam: PDFjam is a collection of shell scripts for PDF manipulation, like
-pdfjam: joining, rotating, modifying page layout, generating printer
-pdfjam: spreads, and more.
-pdfjam:
-pdfjam: https://www2.warwick.ac.uk/fac/sci/statistics/staff/\
-pdfjam: academic-research/firth/software/pdfjam/
-pdfjam:
-pdfjam:
-pdfjam:
diff --git a/office/pdftk/README b/office/pdftk/README
index c84c0b6589..6f0d6399e0 100644
--- a/office/pdftk/README
+++ b/office/pdftk/README
@@ -4,3 +4,10 @@ command-line tool for doing everyday things with PDF documents. Keep one
in the top drawer of your desktop and use it to merge PDF documents,
split PDF documents, apply watermarks, repair corrupt PDF, update PDF
metadata, and more. pdftk does not require Acrobat and is free software.
+
+NOTE: Starting with Slackware 15.0 pdftk compilation requires SBo gcc-5
+because gcc-java was dropped from the GNU Compiler Collection as of gcc-7:
+don't forget to source /etc/profile.d/gcc5.sh before starting to build
+this, like
+
+ . /etc/profile.d/gcc5.sh
diff --git a/office/pdftk/pdftk-1.44-add_custom_optflags.patch b/office/pdftk/pdftk-1.44-add_custom_optflags.patch
deleted file mode 100644
index 660073115f..0000000000
--- a/office/pdftk/pdftk-1.44-add_custom_optflags.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-diff -Nurp pdftk-1.44-dist-orig/pdftk/Makefile.Slackware-13.1 pdftk-1.44-dist/pdftk/Makefile.Slackware-13.1
---- pdftk-1.44-dist-orig/pdftk/Makefile.Slackware-13.1 2010-10-25 20:04:51.000000000 +0100
-+++ pdftk-1.44-dist/pdftk/Makefile.Slackware-13.1 2010-10-31 01:44:31.000000000 +0000
-@@ -34,7 +34,7 @@ export CXX= $(TOOLPATH)g++
- export GCJ= $(TOOLPATH)gcj
- export GCJH= $(TOOLPATH)gcjh
- export GJAR= $(TOOLPATH)gjar
--export LIBGCJ= /usr/share/java/libgcj$(VERSUFF).jar
-+export LIBGCJ= /usr/share/java
- export AR= ar
- export RM= rm
- export ARFLAGS= rs
-@@ -71,9 +71,10 @@ export RMFLAGS= -vf
- # only effects libraries following option on the command line
- #
- #
--export CPPFLAGS= -DPATH_DELIM=0x2f -DASK_ABOUT_WARNINGS=false -DUNBLOCK_SIGNALS -fdollars-in-identifiers
--export CXXFLAGS= -Wall -Wextra -Weffc++ -O2
--export GCJFLAGS= -Wall -fsource=1.3 -O2
-+export OPT= -O2
-+export CPPFLAGS= $(OPT) -DPATH_DELIM=0x2f -DASK_ABOUT_WARNINGS=false -DUNBLOCK_SIGNALS -fdollars-in-identifiers
-+export CXXFLAGS= $(OPT) -Wall -Wextra -Weffc++
-+export GCJFLAGS= $(OPT) -Wall -fsource=1.3
- export GCJHFLAGS= -force
- export LDLIBS= -lgcj
-
diff --git a/office/pdftk/pdftk-2.02-use-gcc5.patch b/office/pdftk/pdftk-2.02-use-gcc5.patch
new file mode 100644
index 0000000000..d1e6e124de
--- /dev/null
+++ b/office/pdftk/pdftk-2.02-use-gcc5.patch
@@ -0,0 +1,15 @@
+# diff -Nurp pdftk/Makefile.Slackware-13.1.orig pdftk/Makefile.Slackware-13.1
+--- orig/pdftk/Makefile.Slackware-13.1 2013-07-24 13:27:46.000000000 -0500
++++ pdftk/Makefile.Slackware-13.1 2018-03-04 06:20:55.312900883 -0600
+@@ -21,8 +21,9 @@
+ # tools
+ # need direct path to libgcj for gcjh (starting in gcj 4.1.2 per Aurélien GÃRÃME)
+ TOOLPATH=
+-export VERSUFF=-4.4.4
+-export CXX= $(TOOLPATH)g++
++GCCMAJORTAG=-5 # kjh was here
++export VERSUFF=-5.5.0 # kjh was here
++export CXX= $(TOOLPATH)g++$(GCCMAJORTAG) # kjh was here
+ export GCJ= $(TOOLPATH)gcj
+ export GCJH= $(TOOLPATH)gcjh
+ export GJAR= $(TOOLPATH)gjar
diff --git a/office/pdftk/pdftk.SlackBuild b/office/pdftk/pdftk.SlackBuild
index aa5bad4885..854b6da935 100644
--- a/office/pdftk/pdftk.SlackBuild
+++ b/office/pdftk/pdftk.SlackBuild
@@ -30,7 +30,7 @@ TAG=${TAG:-_SBo}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
- i?86) ARCH=i486 ;;
+ i?86) ARCH=i586 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
@@ -41,8 +41,8 @@ TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
-if [ "$ARCH" = "i486" ]; then
- SLKCFLAGS="-O2 -march=i486 -mtune=i686"
+if [ "$ARCH" = "i586" ]; then
+ SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
@@ -68,10 +68,9 @@ find -L . \
\( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
-o -perm 511 \) -exec chmod 755 {} \; -o \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
- -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
-# Use our SLKCFLAGS
-patch -p1 < $CWD/pdftk-1.44-add_custom_optflags.patch
+patch -p1 < $CWD/pdftk-2.02-use-gcc5.patch
cd $PRGNAM
# Hardcode "-j1" since this fails with multiple make jobs
diff --git a/office/pdftk/pdftk.info b/office/pdftk/pdftk.info
index 01151c62f1..b4e36211a9 100644
--- a/office/pdftk/pdftk.info
+++ b/office/pdftk/pdftk.info
@@ -5,6 +5,6 @@ DOWNLOAD="https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/pdftk-2.02-src.zip
MD5SUM="6534365fd6727724f288a556ede33faa"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
-REQUIRES=""
+REQUIRES="gcc5"
MAINTAINER="ArTourter"
EMAIL="artourter@gmail.com"
diff --git a/office/referencer/referencer-lib_path.patch b/office/referencer/referencer-lib_path.patch
new file mode 100644
index 0000000000..78a1952089
--- /dev/null
+++ b/office/referencer/referencer-lib_path.patch
@@ -0,0 +1,11 @@
+--- referencer-1.2.2/src/Document.C 2014-01-27 03:43:00.000000000 +0700
++++ referencer-1.2.2_/src/Document.C 2016-11-03 16:25:00.698676538 +0700
+@@ -297,7 +297,7 @@
+
+ lib_path = lib_path->get_parent();
+ up_dir_level += "../";
+- if (lib_path == 0) {
++ if (!lib_path) {
+ doc_is_relative_to_library = false;
+ break;
+ }
diff --git a/office/referencer/referencer.SlackBuild b/office/referencer/referencer.SlackBuild
index 8d279093fd..0a3da09354 100644
--- a/office/referencer/referencer.SlackBuild
+++ b/office/referencer/referencer.SlackBuild
@@ -69,6 +69,9 @@ find -L . \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+# Fix comparison with zero - thanks archlinux
+patch -p1 < $CWD/referencer-lib_path.patch
+
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS -std=c++11" \
./configure \
diff --git a/office/sc-im/README b/office/sc-im/README
deleted file mode 100644
index d63f9fca91..0000000000
--- a/office/sc-im/README
+++ /dev/null
@@ -1,2 +0,0 @@
-SC-IM - Spreadsheet Calculator Improvised -- An ncurses spreadsheet program
-for terminal. SC-IM is a spreadsheet program that is based on SC.
diff --git a/office/sc-im/sc-im.SlackBuild b/office/sc-im/sc-im.SlackBuild
deleted file mode 100644
index 25e318343e..0000000000
--- a/office/sc-im/sc-im.SlackBuild
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/bin/sh
-
-# Slackware build script for sc-im
-
-# Copyright 2016-2018 Jostein Berntsen <jbernts@broadpark.no>
-# All rights reserved.
-#
-# Redistribution and use of this script, with or without modification, is
-# permitted provided that the following conditions are met:
-#
-# 1. Redistributions of this script must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-PRGNAM=sc-im
-VERSION=${VERSION:-0.7.0}
-BUILD=${BUILD:-1}
-TAG=${TAG:-_SBo}
-
-if [ -z "$ARCH" ]; then
- case "$( uname -m )" in
- i?86) ARCH=i586 ;;
- arm*) ARCH=arm ;;
- *) ARCH=$( uname -m ) ;;
- esac
-fi
-
-CWD=$(pwd)
-TMP=${TMP:-/tmp/SBo}
-PKG=$TMP/package-$PRGNAM
-OUTPUT=${OUTPUT:-/tmp}
-
-if [ "$ARCH" = "i586" ]; then
- SLKCFLAGS="-O2 -march=i586 -mtune=i686"
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "i686" ]; then
- SLKCFLAGS="-O2 -march=i686 -mtune=i686"
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "x86_64" ]; then
- SLKCFLAGS="-O2 -fPIC"
- LIBDIRSUFFIX="64"
-else
- SLKCFLAGS="-O2"
- LIBDIRSUFFIX=""
-fi
-
-set -e
-
-rm -rf $PKG
-mkdir -p $TMP $PKG $OUTPUT
-cd $TMP
-rm -rf $PRGNAM-$VERSION
-tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
-cd $PRGNAM-$VERSION
-chown -R root:root .
-find -L . \
- \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
- -o -perm 511 \) -exec chmod 755 {} \; -o \
- \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
- -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
-
-cd src/
-
-perl -pi -e 's#name = scim#name = sc-im#g|s#prefix = /usr/local#prefix = /usr#g' Makefile
-
-CFLAGS="-DXLS $SLKCFLAGS" \
-CXXFLAGS="-DXLS $SLKCFLAGS" \
-LDLIBS="-lxlsreader" \
-make
-make install DESTDIR=$PKG
-
-find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
- | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
-
-mv $PKG/usr/share/man $PKG/usr
-find $PKG/usr/man -type f -exec gzip -9 {} \;
-for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done
-
-mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
-cd ..
-cp -a BUGS CHANGES HELP KNOWN_ISSUES LICENSE Readme.md USER_REQUESTS WIKI \
- $PKG/usr/doc/$PRGNAM-$VERSION
-cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
-
-mkdir -p $PKG/install
-cat $CWD/slack-desc > $PKG/install/slack-desc
-
-cd $PKG
-/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}
diff --git a/office/sc-im/sc-im.info b/office/sc-im/sc-im.info
deleted file mode 100644
index 69ea4bfb9b..0000000000
--- a/office/sc-im/sc-im.info
+++ /dev/null
@@ -1,10 +0,0 @@
-PRGNAM="sc-im"
-VERSION="0.7.0"
-HOMEPAGE="https://github.com/andmarti1424/sc-im"
-DOWNLOAD="https://github.com/andmarti1424/sc-im/archive/v0.7.0/sc-im-0.7.0.tar.gz"
-MD5SUM="2f270d957a215f0124d15d0a82c5abfa"
-DOWNLOAD_x86_64=""
-MD5SUM_x86_64=""
-REQUIRES="libxls libxlsxwriter"
-MAINTAINER="Jostein Berntsen"
-EMAIL="jbernts@broadpark.no"
diff --git a/office/sc-im/slack-desc b/office/sc-im/slack-desc
deleted file mode 100644
index d0321b449a..0000000000
--- a/office/sc-im/slack-desc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description.
-# Line up the first '|' above the ':' following the base package name, and
-# the '|' on the right side marks the last column you can put a character in.
-# You must make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':' except on otherwise blank lines.
-
- |-----handy-ruler------------------------------------------------------|
-sc-im: sc-im (spreadsheet)
-sc-im:
-sc-im: SC-IM is a spreadsheet program that is based on SC
-sc-im:
-sc-im: SC-IM - Spreadsheet Calculator Improvised
-sc-im: An ncurses spreadsheet program for terminal
-sc-im:
-sc-im:
-sc-im: https://github.com/andmarti1424/sc-im
-sc-im:
-sc-im:
diff --git a/office/scribus/scribus.SlackBuild b/office/scribus/scribus.SlackBuild
index 5842344c68..5f92f22b53 100644
--- a/office/scribus/scribus.SlackBuild
+++ b/office/scribus/scribus.SlackBuild
@@ -27,13 +27,13 @@
# Including input by Yalla-One and some code cleanup by rworkman
PRGNAM=scribus
-VERSION=${VERSION:-1.4.6}
+VERSION=${VERSION:-1.4.8}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
- i?86) ARCH=i486 ;;
+ i?86) ARCH=i586 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
@@ -44,8 +44,8 @@ TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
-if [ "$ARCH" = "i486" ]; then
- SLKCFLAGS="-O2 -march=i486 -mtune=i686"
+if [ "$ARCH" = "i586" ]; then
+ SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
@@ -78,7 +78,7 @@ cmake \
-DCMAKE_CXX_FLAGS="$SLKCFLAGS" \
-DCMAKE_INSTALL_PREFIX:PATH=/usr \
-DLIB_SUFFIX=${LIBDIRSUFFIX} \
- -DRENDER_LIB=CAIRO
+ -DRENDER_LIB=CAIRO .
make
make install DESTDIR=$PKG
diff --git a/office/scribus/scribus.info b/office/scribus/scribus.info
index 10e5f6a05f..41872c4856 100644
--- a/office/scribus/scribus.info
+++ b/office/scribus/scribus.info
@@ -1,8 +1,8 @@
PRGNAM="scribus"
-VERSION="1.4.6"
+VERSION="1.4.8"
HOMEPAGE="https://www.scribus.net"
-DOWNLOAD="https://downloads.sourceforge.net/scribus/scribus-1.4.6.tar.xz"
-MD5SUM="f6161785e24755ea77c8f14b319ff1aa"
+DOWNLOAD="https://downloads.sourceforge.net/scribus/scribus-1.4.8.tar.xz"
+MD5SUM="ef61b996b6d07f8a19475f51330d3535"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""
diff --git a/office/texlive/README b/office/texlive/README
deleted file mode 100644
index d08796d591..0000000000
--- a/office/texlive/README
+++ /dev/null
@@ -1,14 +0,0 @@
-TeXLive (TeXLive binaries, support files, TeX formats)
-
-This package contains binaries and many support files, TeX formats and
-packages, and other files included in the TeXLive TeX distribution.
-This should be adequate for the needs of most TeX users.
-
-The remaining stuff can be found in texlive-extra and texlive-docs,
-all of which are also available at SlackBuilds.org.
-
-Have a look at the scripts in the prep/ directory to see how the texmf
-archives were created from the original Texlive netarchives.
-
-Note that this package conflicts with the tetex packages in Slackware,
-so you'll need to remove tetex and tetex-doc before installing TeXLive.
diff --git a/office/texlive/README.tlpkg b/office/texlive/README.tlpkg
deleted file mode 100644
index 7a6f790ca8..0000000000
--- a/office/texlive/README.tlpkg
+++ /dev/null
@@ -1,17 +0,0 @@
-The TeXLive Package Manager, i.e. tlmgr(1), is not shipped with this
-TeXLive package, as it's not expected to work properly (if at all).
-The general consensus from the TeXLive users mailing list is that
-distributions should not be shipping tlpkg.
-
-The *proper* way to upgrade the TeXLive Slackware package (or any
-part of it) is through your Slackware's package manager. If you
-elect to try tlmgr(1), and it doesn't work at all, or worse, it messes
-up part of your TeXLive installation, too bad. On the other hand,
-if you are able to document exactly what we need to do in order to
-make it:
- 1) work
- 2) put updates and such in a user-specific directory, i.e.
- *not* alter/replace system package contents
-then we would love to hear from you. :-)
-
---rworkman :-)
diff --git a/office/texlive/doinst.sh b/office/texlive/doinst.sh
deleted file mode 100644
index f864e767d6..0000000000
--- a/office/texlive/doinst.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-chroot . /usr/bin/mktexlsr 1>/dev/null 2>/dev/null
-printf "y\n" | chroot . /usr/bin/updmap-sys --syncwithtrees 1>/dev/null 2>/dev/null
-chroot . /usr/bin/updmap-sys 1>/dev/null 2>/dev/null
-chroot . /usr/bin/fmtutil-sys --all 1>/dev/null 2>/dev/null
-chroot . /usr/bin/mtxrun --generate 1>/dev/null 2>/dev/null
diff --git a/office/texlive/patches/tabu.sty.diff b/office/texlive/patches/tabu.sty.diff
deleted file mode 100644
index 8ebe034d18..0000000000
--- a/office/texlive/patches/tabu.sty.diff
+++ /dev/null
@@ -1,32 +0,0 @@
---- ./tabu.sty.orig 2019-01-14 16:10:48.000000000 -0600
-+++ ./tabu.sty 2019-06-30 16:24:01.975474339 -0500
-@@ -57,7 +57,7 @@
- %%
-
- \NeedsTeXFormat{LaTeX2e}
--\ProvidesPackage{tabu}[2019/01/11 v2.9 - flexible LaTeX tabulars (FC+tabu-fixed)]
-+\ProvidesPackage{tabu}[2019/01/11 v2.9 - flexible LaTeX tabulars (FC+tabu-fixed) + intermediate FMi]
- \RequirePackage{array}[2008/09/09]
- \RequirePackage{varwidth}[2009/03/30]
- \AtEndOfPackage{\tabu@AtEnd \let\tabu@AtEnd \@undefined}
-@@ -727,6 +727,10 @@
- \tabu@currentgrouptype\expandafter{\the\currentgrouptype}}%
- \fi
- }% \tabu@init
-+%%TABU-FIXED set up \tabu@currentgrouptype
-+%FMi cancel for nested arrays ...
-+\def\@tabarray{\m@th\def\tabu@currentgrouptype{\currentgrouptype}\@ifnextchar[\@array{\@array[c]}}
-+
- \def\tabu@indent{% correction for indentation
- \ifdim \parindent>\z@\ifx \linewidth\tabudefaulttarget
- \everypar\expandafter{%
-@@ -1663,6 +1667,9 @@
- \ifdim \tabu@temp\p@>\z@ \ifdim \tabu@temp\tabucolX<\tabu@target
- \tabu@target=\tabu@temp\tabucolX \fi\fi
- \setbox\tabu@box \hbox \bgroup
-+%%TABU-FIXED add \color@begingroup
-+%%FMi not yet understood why this one is also needed ...
-+ \color@begingroup
- \begin{varwidth}\tabu@target
- \let\FV@ListProcessLine \tabu@FV@ListProcessLine % \hbox to natural width...
- \narrowragged \arraybackslash \parfillskip \@flushglue
diff --git a/office/texlive/patches/texlive-20190410-source-upstream_fixes-1.patch b/office/texlive/patches/texlive-20190410-source-upstream_fixes-1.patch
deleted file mode 100644
index 8e29d492d9..0000000000
--- a/office/texlive/patches/texlive-20190410-source-upstream_fixes-1.patch
+++ /dev/null
@@ -1,4096 +0,0 @@
-Submitted By: Ken Moffat <ken at linuxfromscratch dot org>
-Date: 2019-05-31
-Initial Package Version: 2019
-Upstream Status: Applied
-Origin: Upstream
-Description: Fixes from branch2019 up to svn r51236, and fixes
-from trunk for harfbuzz-2.5.0 changes (svn r51269, 51271).
-
-diff -Naur a/texk/dvipdfm-x/ChangeLog b/texk/dvipdfm-x/ChangeLog
---- a/texk/dvipdfm-x/ChangeLog 2019-04-07 02:42:55.000000000 +0100
-+++ b/texk/dvipdfm-x/ChangeLog 2019-05-31 22:00:04.006964029 +0100
-@@ -1,3 +1,47 @@
-+2019-05-08 Akira Kakuto <kakuto@w32tex.org>
-+
-+ * dpxfile.c: Avoid buffer overflow.
-+
-+2019-05-08 Shunsaku Hirata <shunsaku.hirata74@gmail.com>
-+
-+ * spc_pdfm.c: Transformation also applies to annotations
-+ created by pdf:ann.
-+
-+2019-05-07 Shunsaku Hirata <shunsaku.hirata74@gmail.com>
-+
-+ * tt_cmap.c: Fix a bug that CFF charset data were not read.
-+ * unicode.c: Fix a bug that end-of-buffer calculation was
-+ wrong.
-+
-+2019-05-05 Shunsaku Hirata <shunsaku.hirata74@gmail.com>
-+
-+ * pdfdoc.c: g option affects only annotations created by
-+ "pdf:bann/eann" and html "a link" specials.
-+ Report from Joseph Wright:
-+ https://tug.org/pipermail/tex-live/2019-May/043612.html
-+
-+2019-05-03 Shunsaku Hirata <shunsaku.hirata74@gmail.com>
-+
-+ * specials.c: transformation applied to current point was not
-+ done properly.
-+
-+2019-05-03 Akira Kakuto <kakuto@w32tex.org>
-+
-+ * dpxfile.c, mfileio.h, pdfximage.c: Support non-ascii file
-+ names in default code page of OS irrespective of values of a
-+ variable 'command_line_encoding' (Windows only).
-+
-+2019-05-03 Shunsaku Hirata <shunsaku.hirata74@gmail.com>
-+
-+ * pdfobj.c, pdfobj.h: Add support for ASCIIHex and ASCII85
-+ decode filter. Support for decoding stream data with multiple
-+ filters applied. Remove unused function.
-+ * tt_cmap.c, tt_gsub.[ch]: Revise ToUnicode CMap creation for
-+ OpenType. Use GSUB for mapping unencoded glyphs to Unicode
-+ (XeTeX support), lowering priority of CJK compatibility
-+ ideographs.
-+ * configure.ac: Version 20190503.
-+
- 2019-04-07 Karl Berry <karl@freefriends.org>
-
- * TeX Live 2019.
-diff -Naur a/texk/dvipdfm-x/configure b/texk/dvipdfm-x/configure
---- a/texk/dvipdfm-x/configure 2019-02-24 22:07:11.000000000 +0000
-+++ b/texk/dvipdfm-x/configure 2019-05-31 22:00:04.007964030 +0100
-@@ -1,8 +1,8 @@
- #! /bin/sh
- # Guess values for system-dependent variables and create Makefiles.
--# Generated by GNU Autoconf 2.69 for dvipdfm-x (TeX Live) 20190225.
-+# Generated by GNU Autoconf 2.69 for dvipdfm-x (TeX Live) 20190503.
- #
--# Report bugs to <tex-k@tug.org>.
-+# Report bugs to <dvipdfmx@tug.org>.
- #
- #
- # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
-@@ -274,7 +274,7 @@
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
- else
-- $as_echo "$0: Please tell bug-autoconf@gnu.org and tex-k@tug.org
-+ $as_echo "$0: Please tell bug-autoconf@gnu.org and dvipdfmx@tug.org
- $0: about your system, including any error possibly output
- $0: before this message. Then install a modern shell, or
- $0: manually run the script under such a shell if you do
-@@ -590,9 +590,9 @@
- # Identity of this package.
- PACKAGE_NAME='dvipdfm-x (TeX Live)'
- PACKAGE_TARNAME='dvipdfm-x--tex-live-'
--PACKAGE_VERSION='20190225'
--PACKAGE_STRING='dvipdfm-x (TeX Live) 20190225'
--PACKAGE_BUGREPORT='tex-k@tug.org'
-+PACKAGE_VERSION='20190503'
-+PACKAGE_STRING='dvipdfm-x (TeX Live) 20190503'
-+PACKAGE_BUGREPORT='dvipdfmx@tug.org'
- PACKAGE_URL=''
-
- ac_unique_file="agl.c"
-@@ -1350,7 +1350,7 @@
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat <<_ACEOF
--\`configure' configures dvipdfm-x (TeX Live) 20190225 to adapt to many kinds of systems.
-+\`configure' configures dvipdfm-x (TeX Live) 20190503 to adapt to many kinds of systems.
-
- Usage: $0 [OPTION]... [VAR=VALUE]...
-
-@@ -1421,7 +1421,7 @@
-
- if test -n "$ac_init_help"; then
- case $ac_init_help in
-- short | recursive ) echo "Configuration of dvipdfm-x (TeX Live) 20190225:";;
-+ short | recursive ) echo "Configuration of dvipdfm-x (TeX Live) 20190503:";;
- esac
- cat <<\_ACEOF
-
-@@ -1488,7 +1488,7 @@
- Use these variables to override the choices made by `configure' or to help
- it to find libraries and programs with nonstandard names/locations.
-
--Report bugs to <tex-k@tug.org>.
-+Report bugs to <dvipdfmx@tug.org>.
- _ACEOF
- ac_status=$?
- fi
-@@ -1551,7 +1551,7 @@
- test -n "$ac_init_help" && exit $ac_status
- if $ac_init_version; then
- cat <<\_ACEOF
--dvipdfm-x (TeX Live) configure 20190225
-+dvipdfm-x (TeX Live) configure 20190503
- generated by GNU Autoconf 2.69
-
- Copyright (C) 2012 Free Software Foundation, Inc.
-@@ -1896,9 +1896,9 @@
- $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
- $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
--( $as_echo "## ---------------------------- ##
--## Report this to tex-k@tug.org ##
--## ---------------------------- ##"
-+( $as_echo "## ------------------------------- ##
-+## Report this to dvipdfmx@tug.org ##
-+## ------------------------------- ##"
- ) | sed "s/^/$as_me: WARNING: /" >&2
- ;;
- esac
-@@ -2390,7 +2390,7 @@
- This file contains any messages produced by compilers while
- running configure, to aid debugging if configure makes a mistake.
-
--It was created by dvipdfm-x (TeX Live) $as_me 20190225, which was
-+It was created by dvipdfm-x (TeX Live) $as_me 20190503, which was
- generated by GNU Autoconf 2.69. Invocation command line was
-
- $ $0 $@
-@@ -8077,7 +8077,7 @@
-
- # Define the identity of the package.
- PACKAGE='dvipdfm-x--tex-live-'
-- VERSION='20190225'
-+ VERSION='20190503'
-
-
- cat >>confdefs.h <<_ACEOF
-@@ -14746,7 +14746,7 @@
- Report bugs to <bug-libtool@gnu.org>."
-
- lt_cl_version="\
--dvipdfm-x (TeX Live) config.lt 20190225
-+dvipdfm-x (TeX Live) config.lt 20190503
- configured by $0, generated by GNU Autoconf 2.69.
-
- Copyright (C) 2011 Free Software Foundation, Inc.
-@@ -16636,7 +16636,7 @@
- # report actual input values of CONFIG_FILES etc. instead of their
- # values after options handling.
- ac_log="
--This file was extended by dvipdfm-x (TeX Live) $as_me 20190225, which was
-+This file was extended by dvipdfm-x (TeX Live) $as_me 20190503, which was
- generated by GNU Autoconf 2.69. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
-@@ -16700,13 +16700,13 @@
- Configuration commands:
- $config_commands
-
--Report bugs to <tex-k@tug.org>."
-+Report bugs to <dvipdfmx@tug.org>."
-
- _ACEOF
- cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
- ac_cs_version="\\
--dvipdfm-x (TeX Live) config.status 20190225
-+dvipdfm-x (TeX Live) config.status 20190503
- configured by $0, generated by GNU Autoconf 2.69,
- with options \\"\$ac_cs_config\\"
-
-diff -Naur a/texk/dvipdfm-x/configure.ac b/texk/dvipdfm-x/configure.ac
---- a/texk/dvipdfm-x/configure.ac 2019-02-24 22:07:11.000000000 +0000
-+++ b/texk/dvipdfm-x/configure.ac 2019-05-31 22:00:04.007964030 +0100
-@@ -7,7 +7,7 @@
- dnl gives unlimited permission to copy and/or distribute it,
- dnl with or without modifications, as long as this notice is preserved.
- dnl
--AC_INIT([dvipdfm-x (TeX Live)], [20190225], [tex-k@tug.org])
-+AC_INIT([dvipdfm-x (TeX Live)], [20190503], [dvipdfmx@tug.org])
- AC_PREREQ([2.65])
- AC_CONFIG_SRCDIR([agl.c])
- AC_CONFIG_AUX_DIR([../../build-aux])
-diff -Naur a/texk/dvipdfm-x/dpxfile.c b/texk/dvipdfm-x/dpxfile.c
---- a/texk/dvipdfm-x/dpxfile.c 2018-10-07 22:27:40.000000000 +0100
-+++ b/texk/dvipdfm-x/dpxfile.c 2019-05-31 22:00:04.007964030 +0100
-@@ -1,5 +1,5 @@
- /* This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
-- Copyright (C) 2007-2018 by Jin-Hwan Cho and Shunsaku Hirata,
-+ Copyright (C) 2007-2019 by Jin-Hwan Cho and Shunsaku Hirata,
- the dvipdfmx project team.
-
- Copyright (C) 1998, 1999 by Mark A. Wicks <mwicks@kettering.edu>
-@@ -159,11 +159,17 @@
- static char _tmpbuf[PATH_MAX+1];
- #endif /* MIKTEX */
-
-+#if defined(WIN32)
-+extern int utf8name_failed;
-+#endif /* WIN32 */
-+
-+#define CMDBUFSIZ 1024
- static int exec_spawn (char *cmd)
- {
- char **cmdv, **qv;
- char *p, *pp;
-- char buf[1024];
-+ char buf[CMDBUFSIZ];
-+ int charcnt;
- int i, ret = -1;
- #ifdef WIN32
- wchar_t **cmdvw, **qvw;
-@@ -182,11 +188,12 @@
- i++;
- p++;
- }
-- cmdv = xcalloc (i + 2, sizeof (char *));
-+ cmdv = xcalloc (i + 4, sizeof (char *));
- p = cmd;
- qv = cmdv;
- while (*p) {
- pp = buf;
-+ charcnt = 0;
- if (*p == '"') {
- p++;
- while (*p != '"') {
-@@ -194,6 +201,10 @@
- goto done;
- }
- *pp++ = *p++;
-+ charcnt++;
-+ if (charcnt > CMDBUFSIZ - 1) {
-+ ERROR("Too long a command line.");
-+ }
- }
- p++;
- } else if (*p == '\'') {
-@@ -203,6 +214,10 @@
- goto done;
- }
- *pp++ = *p++;
-+ charcnt++;
-+ if (charcnt > CMDBUFSIZ - 1) {
-+ ERROR("Too long a command line.");
-+ }
- }
- p++;
- } else {
-@@ -214,10 +229,18 @@
- goto done;
- }
- *pp++ = *p++;
-+ charcnt++;
-+ if (charcnt > CMDBUFSIZ - 1) {
-+ ERROR("Too long a command line.");
-+ }
- }
- p++;
- } else {
- *pp++ = *p++;
-+ charcnt++;
-+ if (charcnt > CMDBUFSIZ - 1) {
-+ ERROR("Too long a command line.");
-+ }
- }
- }
- }
-@@ -235,20 +258,39 @@
- p++;
- qv++;
- }
-+ *qv = NULL;
-+
- #ifdef WIN32
- #if defined(MIKTEX)
- ret = _spawnvp(_P_WAIT, *cmdv, (const char* const*)cmdv);
- #else
-- cmdvw = xcalloc (i + 2, sizeof (wchar_t *));
-- qv = cmdv;
-- qvw = cmdvw;
-- while (*qv) {
-- *qvw = get_wstring_from_fsyscp(*qv, *qvw=NULL);
-- qv++;
-- qvw++;
-+ cmdvw = xcalloc (i + 4, sizeof (wchar_t *));
-+ if (utf8name_failed == 0) {
-+ qv = cmdv;
-+ qvw = cmdvw;
-+ while (*qv) {
-+ *qvw = get_wstring_from_fsyscp(*qv, *qvw=NULL);
-+ qv++;
-+ qvw++;
-+ }
-+ *qvw = NULL;
-+ ret = _wspawnvp (_P_WAIT, *cmdvw, (const wchar_t* const*) cmdvw);
-+ } else {
-+ int tmpcp;
-+ tmpcp = file_system_codepage;
-+ file_system_codepage = win32_codepage;
-+ qv = cmdv;
-+ qvw = cmdvw;
-+ while (*qv) {
-+ *qvw = get_wstring_from_fsyscp(*qv, *qvw=NULL);
-+ qv++;
-+ qvw++;
-+ }
-+ *qvw = NULL;
-+ file_system_codepage = tmpcp;
-+ utf8name_failed = 0;
-+ ret = _wspawnvp (_P_WAIT, *cmdvw, (const wchar_t* const*) cmdvw);
- }
-- *qvw = NULL;
-- ret = _wspawnvp (_P_WAIT, *cmdvw, (const wchar_t* const*) cmdvw);
- if (cmdvw) {
- qvw = cmdvw;
- while (*qvw) {
-@@ -1242,3 +1284,21 @@
-
- return r;
- }
-+
-+#if defined(WIN32)
-+FILE *generic_fsyscp_fopen (const char *filename, const char *mode)
-+{
-+ FILE *f;
-+
-+ f = fsyscp_fopen (filename, mode);
-+
-+ if (f == NULL && file_system_codepage != win32_codepage) {
-+ int tmpcp = file_system_codepage;
-+ file_system_codepage = win32_codepage;
-+ f = fsyscp_fopen (filename, mode);
-+ file_system_codepage = tmpcp;
-+ }
-+
-+ return f;
-+}
-+#endif /* WIN32 */
-diff -Naur a/texk/dvipdfm-x/dvipdfmx.c b/texk/dvipdfm-x/dvipdfmx.c
---- a/texk/dvipdfm-x/dvipdfmx.c 2019-02-11 18:22:31.000000000 +0000
-+++ b/texk/dvipdfm-x/dvipdfmx.c 2019-05-31 22:00:04.007964030 +0100
-@@ -232,7 +232,7 @@
- printf ("Papersize is specified by paper format (e.g., \"a4\")\n");
- printf ("\tor by w<unit>,h<unit> (e.g., \"20cm,30cm\").\n");
- printf ("\n");
-- printf ("Email bug reports to tex-k@tug.org.\n");
-+ printf ("Email bug reports to dvipdfmx@tug.org.\n");
- }
-
- static void
-diff -Naur a/texk/dvipdfm-x/mfileio.h b/texk/dvipdfm-x/mfileio.h
---- a/texk/dvipdfm-x/mfileio.h 2016-01-11 03:57:04.000000000 +0000
-+++ b/texk/dvipdfm-x/mfileio.h 2019-05-31 22:00:04.008964031 +0100
-@@ -1,6 +1,6 @@
- /* This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
-
-- Copyright (C) 2002-2016 by Jin-Hwan Cho and Shunsaku Hirata,
-+ Copyright (C) 2002-2019 by Jin-Hwan Cho and Shunsaku Hirata,
- the dvipdfmx project team.
-
- Copyright (C) 1998, 1999 by Mark A. Wicks <mwicks@kettering.edu>
-@@ -36,7 +36,8 @@
- mfclose((file),__FUNCTION__,__LINE__)
- #else
- #if defined(WIN32)
--#define MFOPEN(name,mode) fsyscp_fopen((name),(mode))
-+extern FILE *generic_fsyscp_fopen(const char *fname, const char *mode);
-+#define MFOPEN(name,mode) generic_fsyscp_fopen((name),(mode))
- #else
- #define MFOPEN(name,mode) fopen((name),(mode))
- #endif
-diff -Naur a/texk/dvipdfm-x/pdfdoc.c b/texk/dvipdfm-x/pdfdoc.c
---- a/texk/dvipdfm-x/pdfdoc.c 2018-12-21 03:39:51.000000000 +0000
-+++ b/texk/dvipdfm-x/pdfdoc.c 2019-05-31 22:00:04.008964031 +0100
-@@ -1,6 +1,6 @@
- /* This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
-
-- Copyright (C) 2008-2018 by Jin-Hwan Cho, Matthias Franz, and Shunsaku Hirata,
-+ Copyright (C) 2008-2019 by Jin-Hwan Cho, Matthias Franz, and Shunsaku Hirata,
- the dvipdfmx project team.
-
- Copyright (C) 1998, 1999 by Mark A. Wicks <mwicks@kettering.edu>
-@@ -1780,7 +1780,6 @@
- pdf_doc *p = &pdoc;
- pdf_page *page;
- pdf_obj *rect_array;
-- double annot_grow = p->opt.annot_grow;
- double xpos, ypos;
- pdf_rect annbox;
-
-@@ -1812,10 +1811,10 @@
- }
-
- rect_array = pdf_new_array();
-- pdf_add_array(rect_array, pdf_new_number(ROUND(annbox.llx - annot_grow, 0.001)));
-- pdf_add_array(rect_array, pdf_new_number(ROUND(annbox.lly - annot_grow, 0.001)));
-- pdf_add_array(rect_array, pdf_new_number(ROUND(annbox.urx + annot_grow, 0.001)));
-- pdf_add_array(rect_array, pdf_new_number(ROUND(annbox.ury + annot_grow, 0.001)));
-+ pdf_add_array(rect_array, pdf_new_number(ROUND(annbox.llx, 0.001)));
-+ pdf_add_array(rect_array, pdf_new_number(ROUND(annbox.lly, 0.001)));
-+ pdf_add_array(rect_array, pdf_new_number(ROUND(annbox.urx, 0.001)));
-+ pdf_add_array(rect_array, pdf_new_number(ROUND(annbox.ury, 0.001)));
- pdf_add_dict (annot_dict, pdf_new_name("Rect"), rect_array);
-
- pdf_add_array(page->annots, pdf_ref_obj(annot_dict));
-@@ -2802,13 +2801,22 @@
- void
- pdf_doc_break_annot (void)
- {
-+ pdf_doc *p = &pdoc;
-+ double g = p->opt.annot_grow;
-+
- if (breaking_state.dirty) {
- pdf_obj *annot_dict;
-+ pdf_rect rect;
-
- /* Copy dict */
- annot_dict = pdf_new_dict();
- pdf_merge_dict(annot_dict, breaking_state.annot_dict);
-- pdf_doc_add_annot(pdf_doc_current_page_number(), &(breaking_state.rect),
-+ rect = breaking_state.rect;
-+ rect.llx -= g;
-+ rect.lly -= g;
-+ rect.urx += g;
-+ rect.ury += g;
-+ pdf_doc_add_annot(pdf_doc_current_page_number(), &rect,
- annot_dict, !breaking_state.broken);
- pdf_release_obj(annot_dict);
-
-diff -Naur a/texk/dvipdfm-x/pdfobj.c b/texk/dvipdfm-x/pdfobj.c
---- a/texk/dvipdfm-x/pdfobj.c 2018-12-26 23:07:57.000000000 +0000
-+++ b/texk/dvipdfm-x/pdfobj.c 2019-05-31 22:00:04.008964031 +0100
-@@ -1,6 +1,6 @@
- /* This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
-
-- Copyright (C) 2007-2018 by Jin-Hwan Cho and Shunsaku Hirata,
-+ Copyright (C) 2007-2019 by Jin-Hwan Cho and Shunsaku Hirata,
- the dvipdfmx project team.
-
- Copyright (C) 1998, 1999 by Mark A. Wicks <mwicks@kettering.edu>
-@@ -2223,48 +2223,9 @@
-
- #if HAVE_ZLIB
- #define WBUF_SIZE 4096
--int
--pdf_add_stream_flate (pdf_obj *dst, const void *data, int len)
--{
-- z_stream z;
-- Bytef wbuf[WBUF_SIZE];
--
-- z.zalloc = Z_NULL; z.zfree = Z_NULL; z.opaque = Z_NULL;
--
-- z.next_in = (z_const Bytef *) data; z.avail_in = len;
-- z.next_out = (Bytef *) wbuf; z.avail_out = WBUF_SIZE;
--
-- if (inflateInit(&z) != Z_OK) {
-- WARN("inflateInit() failed.");
-- return -1;
-- }
--
-- for (;;) {
-- int status;
-- status = inflate(&z, Z_NO_FLUSH);
-- if (status == Z_STREAM_END)
-- break;
-- else if (status != Z_OK) {
-- WARN("inflate() failed. Broken PDF file?");
-- inflateEnd(&z);
-- return -1;
-- }
--
-- if (z.avail_out == 0) {
-- pdf_add_stream(dst, wbuf, WBUF_SIZE);
-- z.next_out = wbuf;
-- z.avail_out = WBUF_SIZE;
-- }
-- }
--
-- if (WBUF_SIZE - z.avail_out > 0)
-- pdf_add_stream(dst, wbuf, WBUF_SIZE - z.avail_out);
--
-- return (inflateEnd(&z) == Z_OK ? 0 : -1);
--}
-
- static int
--get_decode_parms (struct decode_parms *parms, pdf_obj *dict)
-+filter_get_DecodeParms_FlateDecode (struct decode_parms *parms, pdf_obj *dict)
- {
- pdf_obj *tmp;
-
-@@ -2278,18 +2239,25 @@
- parms->columns = 1;
-
- tmp = pdf_deref_obj(pdf_lookup_dict(dict, "Predictor"));
-- if (tmp)
-+ if (tmp) {
- parms->predictor = pdf_number_value(tmp);
-+ pdf_release_obj(tmp);
-+ }
- tmp = pdf_deref_obj(pdf_lookup_dict(dict, "Colors"));
-- if (tmp)
-+ if (tmp) {
- parms->colors = pdf_number_value(tmp);
-+ pdf_release_obj(tmp);
-+ }
- tmp = pdf_deref_obj(pdf_lookup_dict(dict, "BitsPerComponent"));
-- if (tmp)
-+ if (tmp) {
- parms->bits_per_component = pdf_number_value(tmp);
-+ pdf_release_obj(tmp);
-+ }
- tmp = pdf_deref_obj(pdf_lookup_dict(dict, "Columns"));
-- if (tmp)
-+ if (tmp) {
- parms->columns = pdf_number_value(tmp);
--
-+ pdf_release_obj(tmp);
-+ }
- if (parms->bits_per_component != 1 &&
- parms->bits_per_component != 2 &&
- parms->bits_per_component != 4 &&
-@@ -2354,17 +2322,19 @@
- * Especially, calling pdf_add_stream() for each 4 bytes append is highly
- * inefficient.
- */
--static int
--filter_decoded (pdf_obj *dst, const void *src, int srclen,
-- struct decode_parms *parms)
-+static pdf_obj *
-+filter_stream_decode_Predictor (const void *src, size_t srclen, struct decode_parms *parms)
- {
-+ pdf_obj *dst;
- const unsigned char *p = (const unsigned char *) src;
- const unsigned char *endptr = p + srclen;
-- unsigned char *prev, *buf;
-- int bits_per_pixel = parms->colors * parms->bits_per_component;
-- int bytes_per_pixel = (bits_per_pixel + 7) / 8;
-- int length = (parms->columns * bits_per_pixel + 7) / 8;
-- int i, error = 0;
-+ unsigned char *prev, *buf;
-+ int bits_per_pixel = parms->colors * parms->bits_per_component;
-+ int bytes_per_pixel = (bits_per_pixel + 7) / 8;
-+ int length = (parms->columns * bits_per_pixel + 7) / 8;
-+ int i, error = 0;
-+
-+ dst = pdf_new_stream(0);
-
- prev = NEW(length, unsigned char);
- buf = NEW(length, unsigned char);
-@@ -2491,16 +2461,21 @@
- RELEASE(prev);
- RELEASE(buf);
-
-- return error;
-+ if (error) {
-+ pdf_release_obj(dst);
-+ dst = NULL;
-+ }
-+
-+ return dst;
- }
-
--static int
--pdf_add_stream_flate_filtered (pdf_obj *dst, const void *data, int len, struct decode_parms *parms)
-+static pdf_obj *
-+filter_stream_decode_FlateDecode (const void *data, size_t len, struct decode_parms *parms)
- {
-- pdf_obj *tmp;
-- z_stream z;
-- Bytef wbuf[WBUF_SIZE];
-- int error;
-+ pdf_obj *dst;
-+ pdf_obj *tmp;
-+ z_stream z;
-+ Bytef wbuf[WBUF_SIZE];
-
- z.zalloc = Z_NULL; z.zfree = Z_NULL; z.opaque = Z_NULL;
-
-@@ -2509,7 +2484,7 @@
-
- if (inflateInit(&z) != Z_OK) {
- WARN("inflateInit() failed.");
-- return -1;
-+ return NULL;
- }
-
- tmp = pdf_new_stream(0);
-@@ -2521,7 +2496,8 @@
- else if (status != Z_OK) {
- WARN("inflate() failed. Broken PDF file?");
- inflateEnd(&z);
-- return -1;
-+ pdf_release_obj(tmp);
-+ return NULL;
- }
-
- if (z.avail_out == 0) {
-@@ -2534,79 +2510,310 @@
- if (WBUF_SIZE - z.avail_out > 0)
- pdf_add_stream(tmp, wbuf, WBUF_SIZE - z.avail_out);
-
-- error = filter_decoded(dst, pdf_stream_dataptr(tmp), pdf_stream_length(tmp), parms);
-+ if (inflateEnd(&z) == Z_OK) {
-+ if (parms) {
-+ dst = filter_stream_decode_Predictor(pdf_stream_dataptr(tmp), pdf_stream_length(tmp), parms);
-+ } else {
-+ dst = pdf_link_obj(tmp);
-+ }
-+ } else {
-+ dst = NULL;
-+ }
- pdf_release_obj(tmp);
-
-- return ((!error && inflateEnd(&z) == Z_OK) ? 0 : -1);
-+ return dst;
- }
- #endif
-
--int
--pdf_concat_stream (pdf_obj *dst, pdf_obj *src)
-+static pdf_obj *
-+filter_stream_decode_ASCIIHexDecode (const void *data, size_t len)
-+{
-+ pdf_obj *dst;
-+ int eod, error;
-+ const char *p = (const char *) data;
-+ const char *endptr = p + len;
-+ unsigned char *buf, ch;
-+ size_t pos, n;
-+
-+ buf = NEW((len+1)/2, unsigned char);
-+ skip_white(&p, endptr);
-+ ch = 0; n = 0; pos = 0; eod = 0; error = 0;
-+ while (p < endptr && !error && !eod) {
-+ char c1, val;
-+ c1 = p[0];
-+ if (c1 >= 'A' && c1 <= 'F') {
-+ val = c1 - 'A' + 10;
-+ } else if (c1 >= 'a' && c1 <= 'f') {
-+ val = c1 - 'a' + 10;
-+ } else if (c1 >= '0' && c1 <= '9') {
-+ val = c1 - '0';
-+ } else if (c1 == '>') {
-+ val = 0;
-+ eod = 1;
-+ if ((pos % 2) == 0)
-+ break;
-+ } else {
-+ error = -1;
-+ break;
-+ }
-+ if (pos % 2) {
-+ buf[n] = ch + val;
-+ n++;
-+ ch = 0;
-+ } else {
-+ ch = val << 4;
-+ }
-+ pos++; p++;
-+ skip_white(&p, endptr);
-+ }
-+ if (error || !eod) {
-+ WARN("Invalid ASCIIHex data seen: %s", error ? "Invalid character" : "No EOD marker");
-+ dst = NULL;
-+ } else {
-+ dst = pdf_new_stream(0);
-+ pdf_add_stream(dst, buf, n);
-+ }
-+ RELEASE(buf);
-+
-+ return dst;
-+}
-+
-+/* Percent sign is not start of comment here.
-+ * We need this for reading Ascii85 encoded data.
-+ */
-+#define is_space(c) ((c) == ' ' || (c) == '\t' || (c) == '\f' || \
-+ (c) == '\r' || (c) == '\n' || (c) == '\0')
-+static void
-+skip_white_a85 (const char **p, const char *endptr)
-+{
-+ while (*p < endptr && (is_space(**p))) {
-+ (*p)++;
-+ }
-+}
-+
-+static pdf_obj *
-+filter_stream_decode_ASCII85Decode (const void *data, size_t len)
- {
-+ pdf_obj *dst;
-+ int eod, error;
-+ const char *p = (const char *) data;
-+ const char *endptr = p + len;
-+ unsigned char *buf;
-+ size_t n;
-+
-+ buf = NEW(((len+4)/5)*4, unsigned char);
-+ skip_white_a85(&p, endptr);
-+ n = 0; eod = 0; error = 0;
-+ while (p < endptr && !error && !eod) {
-+ char q[5] = {'u', 'u', 'u', 'u', 'u'};
-+ int m;
-+ char ch;
-+
-+ ch = p[0];
-+ p++;
-+ skip_white_a85(&p, endptr);
-+ if (ch == 'z') {
-+ memset(buf+n, 0, 4);
-+ n += 4;
-+ continue;
-+ } else if (ch == '~') {
-+ if (p < endptr && p[0] == '>') {
-+ eod = 1;
-+ p++;
-+ } else {
-+ error = -1;
-+ }
-+ break;
-+ }
-+ q[0] = ch;
-+ for (m = 1; m < 5 && p < endptr; m++) {
-+ ch = p[0];
-+ p++;
-+ skip_white_a85(&p, endptr);
-+ if (ch == '~') {
-+ if (p < endptr && p[0] == '>') {
-+ eod = 1;
-+ p++;
-+ } else {
-+ error = -1;
-+ }
-+ break;
-+ } else if (ch < '!' || ch > 'u') {
-+ error = -1;
-+ break;
-+ } else {
-+ q[m] = ch;
-+ }
-+ }
-+ if (!error) {
-+ uint32_t val = 0;
-+ int i;
-+ if (m <= 1) {
-+ error = -1;
-+ break;
-+ }
-+ val = 85*85*85*(q[0] - '!') + 85*85*(q[1] - '!')
-+ + 85*(q[2] - '!') + (q[3] - '!');
-+ /* Check overflow */
-+ if (val > UINT32_MAX / 85) {
-+ error = -1;
-+ break;
-+ } else {
-+ val = 85 * val;
-+ if (val > UINT32_MAX - (q[4] - '!')) {
-+ error = -1;
-+ break;
-+ }
-+ val += (q[4] - '!');
-+ }
-+ if (!error) {
-+ for (i = 3; i >= 0; i--) {
-+ buf[n + i] = val & 0xff;
-+ val /= 256;
-+ }
-+ n += m - 1;
-+ }
-+ }
-+ }
-+
-+ if (error) {
-+ WARN("Error in reading ASCII85 data.");
-+ dst = NULL;
-+ } else if (!eod) {
-+ WARN("Error in reading ASCII85 data: No EOD");
-+ dst = NULL;
-+ } else {
-+ dst = pdf_new_stream(0);
-+ pdf_add_stream(dst, buf, n);
-+ }
-+ RELEASE(buf);
-+
-+ return dst;
-+}
-+
-+static pdf_obj *
-+filter_stream_decode (const char *filter_name, pdf_obj *src, pdf_obj *parm)
-+{
-+ pdf_obj *dec;
- const char *stream_data;
-- int stream_length;
-- pdf_obj *stream_dict;
-- pdf_obj *filter;
-- int error = 0;
-+ size_t stream_length;
-
-- if (!PDF_OBJ_STREAMTYPE(dst) || !PDF_OBJ_STREAMTYPE(src))
-- ERROR("Invalid type.");
-+ if (!filter_name)
-+ return pdf_link_obj(src);
-
- stream_data = pdf_stream_dataptr(src);
-- stream_length = pdf_stream_length (src);
-- stream_dict = pdf_stream_dict (src);
-+ stream_length = pdf_stream_length(src);
-
-- filter = pdf_lookup_dict(stream_dict, "Filter");
-- if (!filter)
-- pdf_add_stream(dst, stream_data, stream_length);
-+ if (!strcmp(filter_name, "ASCIIHexDecode")) {
-+ dec = filter_stream_decode_ASCIIHexDecode(stream_data, stream_length);
-+ } else if (!strcmp(filter_name, "ASCII85Decode")) {
-+ dec = filter_stream_decode_ASCII85Decode(stream_data, stream_length);
- #if HAVE_ZLIB
-- else {
-- struct decode_parms parms;
-- int have_parms = 0;
-+ } else if (!strcmp(filter_name, "FlateDecode")) {
-+ struct decode_parms decode_parm;
-+ if (parm)
-+ filter_get_DecodeParms_FlateDecode(&decode_parm, parm);
-+ dec = filter_stream_decode_FlateDecode(stream_data, stream_length, parm ? &decode_parm : NULL);
-+#endif /* HAVE_ZLIB */
-+ } else {
-+ WARN("DecodeFilter \"%s\" not supported.", filter_name);
-+ dec = NULL;
-+ }
-
-- if (pdf_lookup_dict(stream_dict, "DecodeParms")) {
-- pdf_obj *tmp;
-+ return dec;
-+}
-
-- /* Dictionary or array */
-- tmp = pdf_deref_obj(pdf_lookup_dict(stream_dict, "DecodeParms"));
-- if (PDF_OBJ_ARRAYTYPE(tmp)) {
-- if (pdf_array_length(tmp) > 1) {
-- WARN("Unexpected size for DecodeParms array.");
-- return -1;
-- }
-- tmp = pdf_deref_obj(pdf_get_array(tmp, 0));
-- }
-- if (!PDF_OBJ_DICTTYPE(tmp)) {
-- WARN("PDF dict expected for DecodeParms...");
-- return -1;
-- }
-- error = get_decode_parms(&parms, tmp);
-- if (error)
-- ERROR("Invalid value(s) in DecodeParms dictionary.");
-- have_parms = 1;
-- }
-- if (PDF_OBJ_ARRAYTYPE(filter)) {
-- if (pdf_array_length(filter) > 1) {
-- WARN("Multiple DecodeFilter not supported.");
-+int
-+pdf_concat_stream (pdf_obj *dst, pdf_obj *src)
-+{
-+ pdf_obj *filtered;
-+ pdf_obj *stream_dict;
-+ pdf_obj *filter, *parms;
-+ int error = 0;
-+
-+ if (!PDF_OBJ_STREAMTYPE(dst) || !PDF_OBJ_STREAMTYPE(src)) {
-+ WARN("Passed invalid type in pdf_concat_stream().");
-+ return -1;
-+ }
-+
-+ stream_dict = pdf_stream_dict(src);
-+
-+ filter = pdf_lookup_dict(stream_dict, "Filter");
-+ if (!filter) {
-+ pdf_add_stream(dst, pdf_stream_dataptr(src), pdf_stream_length(src));
-+ return 0;
-+ }
-+ if (pdf_lookup_dict(stream_dict, "DecodeParms")) {
-+ /* Dictionary or array */
-+ parms = pdf_deref_obj(pdf_lookup_dict(stream_dict, "DecodeParms"));
-+ if (!parms) {
-+ WARN("Failed to deref DeocdeParms...");
-+ return -1;
-+ } else if (!PDF_OBJ_ARRAYTYPE(parms) && !PDF_OBJ_DICTTYPE(parms)) {
-+ WARN("PDF dict or array expected for DecodeParms...");
-+ pdf_release_obj(parms);
-+ return -1;
-+ }
-+ } else {
-+ parms = NULL;
-+ }
-+ if (PDF_OBJ_ARRAYTYPE(filter)) {
-+ int i, num;
-+ pdf_obj *prev = NULL;
-+
-+ num = pdf_array_length(filter);
-+ if (parms) {
-+ if (!PDF_OBJ_ARRAYTYPE(parms) || pdf_array_length(parms) != num) {
-+ WARN("Invalid DecodeParam object found.");
-+ pdf_release_obj(parms);
- return -1;
- }
-- filter = pdf_get_array(filter, 0);
- }
-- if (PDF_OBJ_NAMETYPE(filter)) {
-- char *filter_name = pdf_name_value(filter);
-- if (filter_name && !strcmp(filter_name, "FlateDecode")) {
-- if (have_parms)
-- error = pdf_add_stream_flate_filtered(dst, stream_data, stream_length, &parms);
-- else
-- error = pdf_add_stream_flate(dst, stream_data, stream_length);
-- } else {
-- WARN("DecodeFilter \"%s\" not supported.", filter_name);
-- error = -1;
-+ if (num == 0) {
-+ filtered = pdf_link_obj(src);
-+ } else {
-+ filtered = NULL;
-+ prev = pdf_link_obj(src);
-+ for (i = 0; i < num && prev != NULL; i++) {
-+ pdf_obj *tmp1, *tmp2;
-+
-+ tmp1 = pdf_deref_obj(pdf_get_array(filter, i));
-+ if (parms) {
-+ tmp2 = pdf_deref_obj(pdf_get_array(parms, i));
-+ } else {
-+ tmp2 = NULL;
-+ }
-+ if (PDF_OBJ_NAMETYPE(tmp1)) {
-+ filtered = filter_stream_decode(pdf_name_value(tmp1), prev, tmp2);
-+ } else if (PDF_OBJ_NULLTYPE(tmp1)) {
-+ filtered = pdf_link_obj(prev);
-+ } else {
-+ WARN("Unexpected object found for /Filter...");
-+ filtered = NULL;
-+ }
-+ if (prev)
-+ pdf_release_obj(prev);
-+ if (tmp1)
-+ pdf_release_obj(tmp1);
-+ if (tmp2)
-+ pdf_release_obj(tmp2);
-+ prev = filtered;
- }
-- } else
-- ERROR("Broken PDF file?");
--#endif /* HAVE_ZLIB */
-+ }
-+ } else if (PDF_OBJ_NAMETYPE(filter)) {
-+ filtered = filter_stream_decode(pdf_name_value(filter), src, parms);
-+ } else {
-+ WARN("Invalid value for /Filter found.");
-+ filtered = NULL;
-+ }
-+ if (parms)
-+ pdf_release_obj(parms);
-+ if (filtered) {
-+ pdf_add_stream(dst, pdf_stream_dataptr(filtered), pdf_stream_length(filtered));
-+ pdf_release_obj(filtered);
-+ error = 0;
-+ } else {
-+ error = -1;
- }
-
- return error;
-diff -Naur a/texk/dvipdfm-x/pdfobj.h b/texk/dvipdfm-x/pdfobj.h
---- a/texk/dvipdfm-x/pdfobj.h 2018-09-15 22:18:43.000000000 +0100
-+++ b/texk/dvipdfm-x/pdfobj.h 2019-05-31 22:00:04.008964031 +0100
-@@ -1,6 +1,6 @@
- /* This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
-
-- Copyright (C) 2007-2018 by Jin-Hwan Cho and Shunsaku Hirata,
-+ Copyright (C) 2007-2019 by Jin-Hwan Cho and Shunsaku Hirata,
- the dvipdfmx project team.
-
- Copyright (C) 1998, 1999 by Mark A. Wicks <mwicks@kettering.edu>
-@@ -152,11 +152,6 @@
- extern void pdf_add_stream (pdf_obj *stream,
- const void *stream_data_ptr,
- int stream_data_len);
--#if HAVE_ZLIB
--extern int pdf_add_stream_flate (pdf_obj *stream,
-- const void *stream_data_ptr,
-- int stream_data_len);
--#endif
- extern int pdf_concat_stream (pdf_obj *dst, pdf_obj *src);
- extern pdf_obj *pdf_stream_dict (pdf_obj *stream);
- extern int pdf_stream_length (pdf_obj *stream);
-diff -Naur a/texk/dvipdfm-x/pdfximage.c b/texk/dvipdfm-x/pdfximage.c
---- a/texk/dvipdfm-x/pdfximage.c 2018-09-14 04:34:50.000000000 +0100
-+++ b/texk/dvipdfm-x/pdfximage.c 2019-05-31 22:00:04.008964031 +0100
-@@ -1,6 +1,6 @@
- /* This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
-
-- Copyright (C) 2007-2018 by Jin-Hwan Cho and Shunsaku Hirata,
-+ Copyright (C) 2007-2019 by Jin-Hwan Cho and Shunsaku Hirata,
- the dvipdfmx project team.
-
- Copyright (C) 1998, 1999 by Mark A. Wicks <mwicks@kettering.edu>
-@@ -363,6 +363,10 @@
- #define dpx_fopen(n,m) (MFOPEN((n),(m)))
- #define dpx_fclose(f) (MFCLOSE((f)))
-
-+#if defined(WIN32)
-+int utf8name_failed = 0;
-+#endif /* WIN32 */
-+
- int
- pdf_ximage_findresource (const char *ident, load_options options)
- {
-@@ -394,8 +398,23 @@
- strcpy(fullname, f);
- } else {
- /* try loading image */
-+#if defined(WIN32)
-+ utf8name_failed = 0;
-+#endif /* WIN32 */
- fullname = dpx_find_file(ident, "_pic_", "");
-+#if defined(WIN32)
-+ if (!fullname && file_system_codepage != win32_codepage) {
-+ int tmpcp = file_system_codepage;
-+ utf8name_failed = 1;
-+ file_system_codepage = win32_codepage;
-+ fullname = dpx_find_file(ident, "_pic_", "");
-+ file_system_codepage = tmpcp;
-+ }
-+#endif /* WIN32 */
- if (!fullname) {
-+#if defined(WIN32)
-+ utf8name_failed = 0;
-+#endif /* WIN32 */
- WARN("Error locating image file \"%s\"", ident);
- return -1;
- }
-diff -Naur a/texk/dvipdfm-x/README b/texk/dvipdfm-x/README
---- a/texk/dvipdfm-x/README 2015-07-06 17:13:08.000000000 +0100
-+++ b/texk/dvipdfm-x/README 2019-05-31 22:00:04.006964029 +0100
-@@ -1,9 +1,17 @@
- dvipdfmx and xdvipdfmx for TeX Live
- ===================================
-
-+This package is released under the GNU GPL, version 2, or (at your
-+option) any later version.
-+
-+dvipdfmx is now maintained as part of TeX Live.
-+
-+Mailing list for bug reports and all discussion:
-+https://lists.tug.org/dvipdfmx; anyone can join the list, but it is not
-+necessary to join to post. Archives are public.
-+
- xdvipdfmx
- =========
--
- xdvipdfmx is an extended version of dvipdfmx, and is now incorporated in
- the same sources.
-
-@@ -15,8 +23,6 @@
- redistributed under the terms of the GNU General Public License,
- version 2 or (at your option) any later version.
-
--There is a hope to merge xdvipdfmx into dvipdfmx.
--
- Jonathan Kew mentions that in the past, XeTeX used a Mac-specific
- program xdv2pdf as the backend instead of xdvipdfmx. xdv2pdf supported
- a couple of special effects that are not yet available through
-@@ -26,18 +32,8 @@
- if anyone is looking for some nontrivial but not-impossible job and
- happens across this file.
-
--The dvipdfmx Project
--====================
--
--Copyright (C) 2002-2014 by Jin-Hwan Cho, Shunsaku Hirata,
--Matthias Franz, and the dvipdfmx project team. This package is released
--under the GNU GPL, version 2, or (at your option) any later version.
--
--dvipdfmx is now maintained as part of TeX Live.
--
- Contents
- --------
--
- 1. Introduction
-
- 2. Installation
-diff -Naur a/texk/dvipdfm-x/spc_pdfm.c b/texk/dvipdfm-x/spc_pdfm.c
---- a/texk/dvipdfm-x/spc_pdfm.c 2019-03-30 03:42:07.000000000 +0000
-+++ b/texk/dvipdfm-x/spc_pdfm.c 2019-05-31 22:00:04.008964031 +0100
-@@ -597,6 +597,7 @@
- return dict;
- }
-
-+#define SPC_PDFM_SUPPORT_ANNOT_TRANS 1
- static int
- spc_handler_pdfm_annot (struct spc_env *spe, struct spc_arg *args)
- {
-@@ -604,7 +605,6 @@
- pdf_obj *annot_dict;
- pdf_rect rect;
- char *ident = NULL;
-- pdf_coord cp;
- transform_info ti;
-
- skip_white(&args->curptr, args->endptr);
-@@ -642,19 +642,96 @@
- return -1;
- }
-
-- cp.x = spe->x_user; cp.y = spe->y_user;
-- pdf_dev_transform(&cp, NULL);
-- if (ti.flags & INFO_HAS_USER_BBOX) {
-- rect.llx = ti.bbox.llx + cp.x;
-- rect.lly = ti.bbox.lly + cp.y;
-- rect.urx = ti.bbox.urx + cp.x;
-- rect.ury = ti.bbox.ury + cp.y;
-- } else {
-- rect.llx = cp.x;
-- rect.lly = cp.y - spe->mag * ti.depth;
-- rect.urx = cp.x + spe->mag * ti.width;
-- rect.ury = cp.y + spe->mag * ti.height;
-+#ifdef SPC_PDFM_SUPPORT_ANNOT_TRANS
-+ {
-+ pdf_coord cp1, cp2, cp3, cp4;
-+ /* QuadPoints not working? */
-+#ifdef USE_QUADPOINTS
-+ pdf_obj *qpoints;
-+#endif
-+ if (ti.flags & INFO_HAS_USER_BBOX) {
-+ cp1.x = spe->x_user + ti.bbox.llx;
-+ cp1.y = spe->y_user + ti.bbox.lly;
-+ cp2.x = spe->x_user + ti.bbox.urx;
-+ cp2.y = spe->y_user + ti.bbox.lly;
-+ cp3.x = spe->x_user + ti.bbox.urx;
-+ cp3.y = spe->y_user + ti.bbox.ury;
-+ cp4.x = spe->x_user + ti.bbox.llx;
-+ cp4.y = spe->y_user + ti.bbox.ury;
-+ } else {
-+ cp1.x = spe->x_user;
-+ cp1.y = spe->y_user - spe->mag * ti.depth;
-+ cp2.x = spe->x_user + spe->mag * ti.width;
-+ cp2.y = spe->y_user - spe->mag * ti.depth;
-+ cp3.x = spe->x_user + spe->mag * ti.width;
-+ cp3.y = spe->y_user + spe->mag * ti.height;
-+ cp4.x = spe->x_user;
-+ cp4.y = spe->y_user + spe->mag * ti.height;
-+ }
-+ pdf_dev_transform(&cp1, NULL);
-+ pdf_dev_transform(&cp2, NULL);
-+ pdf_dev_transform(&cp3, NULL);
-+ pdf_dev_transform(&cp4, NULL);
-+ rect.llx = cp1.x;
-+ if (cp2.x < rect.llx)
-+ rect.llx = cp2.x;
-+ if (cp3.x < rect.llx)
-+ rect.llx = cp3.x;
-+ if (cp4.x < rect.llx)
-+ rect.llx = cp4.x;
-+ rect.urx = cp1.x;
-+ if (cp2.x > rect.urx)
-+ rect.urx = cp2.x;
-+ if (cp3.x > rect.urx)
-+ rect.urx = cp3.x;
-+ if (cp4.x > rect.urx)
-+ rect.urx = cp4.x;
-+ rect.lly = cp1.y;
-+ if (cp2.y < rect.lly)
-+ rect.lly = cp2.y;
-+ if (cp3.y < rect.lly)
-+ rect.lly = cp3.y;
-+ if (cp4.y < rect.lly)
-+ rect.lly = cp4.y;
-+ rect.ury = cp1.y;
-+ if (cp2.y > rect.ury)
-+ rect.ury = cp2.y;
-+ if (cp3.y > rect.ury)
-+ rect.ury = cp3.y;
-+ if (cp4.y > rect.ury)
-+ rect.ury = cp4.y;
-+#ifdef USE_QUADPOINTS
-+ qpoints = pdf_new_array();
-+ pdf_add_array(qpoints, pdf_new_number(ROUND(cp1.x, 0.01)));
-+ pdf_add_array(qpoints, pdf_new_number(ROUND(cp1.y, 0.01)));
-+ pdf_add_array(qpoints, pdf_new_number(ROUND(cp2.x, 0.01)));
-+ pdf_add_array(qpoints, pdf_new_number(ROUND(cp2.y, 0.01)));
-+ pdf_add_array(qpoints, pdf_new_number(ROUND(cp3.x, 0.01)));
-+ pdf_add_array(qpoints, pdf_new_number(ROUND(cp3.y, 0.01)));
-+ pdf_add_array(qpoints, pdf_new_number(ROUND(cp4.x, 0.01)));
-+ pdf_add_array(qpoints, pdf_new_number(ROUND(cp4.y, 0.01)));
-+ pdf_add_dict(annot_dict, pdf_new_name("QuadPoints"), qpoints);
-+#endif
- }
-+#else
-+ {
-+ pdf_coord cp;
-+
-+ cp.x = spe->x_user; cp.y = spe->y_user;
-+ pdf_dev_transform(&cp, NULL);
-+ if (ti.flags & INFO_HAS_USER_BBOX) {
-+ rect.llx = ti.bbox.llx + cp.x;
-+ rect.lly = ti.bbox.lly + cp.y;
-+ rect.urx = ti.bbox.urx + cp.x;
-+ rect.ury = ti.bbox.ury + cp.y;
-+ } else {
-+ rect.llx = cp.x;
-+ rect.lly = cp.y - spe->mag * ti.depth;
-+ rect.urx = cp.x + spe->mag * ti.width;
-+ rect.ury = cp.y + spe->mag * ti.height;
-+ }
-+ }
-+#endif
-
- /* Order is important... */
- if (ident)
-diff -Naur a/texk/dvipdfm-x/specials.c b/texk/dvipdfm-x/specials.c
---- a/texk/dvipdfm-x/specials.c 2019-03-29 22:13:05.000000000 +0000
-+++ b/texk/dvipdfm-x/specials.c 2019-05-31 22:00:04.008964031 +0100
-@@ -169,12 +169,12 @@
- switch (k) {
- /* xpos and ypos must be position in device space here. */
- case K_OBJ__XPOS:
-- cp.x = dvi_dev_xpos(); cp.y = 0.0;
-+ cp.x = dvi_dev_xpos(); cp.y = dvi_dev_ypos();
- pdf_dev_transform(&cp, NULL);
- value = pdf_new_number(ROUND(cp.x, .01));
- break;
- case K_OBJ__YPOS:
-- cp.x = 0.0; cp.y = dvi_dev_ypos();
-+ cp.x = dvi_dev_xpos(); cp.y = dvi_dev_ypos();
- pdf_dev_transform(&cp, NULL);
- value = pdf_new_number(ROUND(cp.y, .01));
- break;
-@@ -233,12 +233,12 @@
- for (k = 0; _rkeys[k] && strcmp(key, _rkeys[k]); k++);
- switch (k) {
- case K_OBJ__XPOS:
-- cp.x = dvi_dev_xpos(); cp.y = 0.0;
-+ cp.x = dvi_dev_xpos(); cp.y = dvi_dev_ypos();
- pdf_dev_transform(&cp, NULL);
- value = pdf_new_number(ROUND(cp.x, .01));
- break;
- case K_OBJ__YPOS:
-- cp.x = 0.0; cp.y = dvi_dev_ypos();
-+ cp.x = dvi_dev_xpos(); cp.y = dvi_dev_ypos();
- pdf_dev_transform(&cp, NULL);
- value = pdf_new_number(ROUND(cp.y, .01));
- break;
-diff -Naur a/texk/dvipdfm-x/tt_cmap.c b/texk/dvipdfm-x/tt_cmap.c
---- a/texk/dvipdfm-x/tt_cmap.c 2019-02-25 10:27:33.000000000 +0000
-+++ b/texk/dvipdfm-x/tt_cmap.c 2019-05-31 22:00:04.009964032 +0100
-@@ -1,6 +1,6 @@
- /* This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
-
-- Copyright (C) 2007-2018 by Jin-Hwan Cho and Shunsaku Hirata,
-+ Copyright (C) 2002-2019 by Jin-Hwan Cho and Shunsaku Hirata,
- the dvipdfmx project team.
-
- This program is free software; you can redistribute it and/or modify
-@@ -68,11 +68,12 @@
- struct cmap0 *map;
- int i;
-
-- if (len < 256)
-- ERROR("invalid cmap subtable");
-+ if (len < 256) {
-+ WARN("invalid format 0 TT cmap subtable");
-+ return NULL;
-+ }
-
- map = NEW(1, struct cmap0);
--
- for (i = 0; i < 256; i++)
- map->glyphIndexArray[i] = sfnt_get_byte(sfont);
-
-@@ -114,14 +115,14 @@
- struct cmap2 *map;
- USHORT i, n;
-
-- if (len < 512)
-- ERROR("invalid cmap subtable");
--
-- map = NEW(1, struct cmap2);
-+ if (len < 512) {
-+ WARN("invalid fromt2 TT cmap subtable");
-+ return NULL;
-+ }
-
-+ map = NEW(1, struct cmap2);
- for (i = 0; i < 256; i++)
- map->subHeaderKeys[i] = sfnt_get_ushort(sfont);
--
- for (n = 0, i = 0; i < 256; i++) {
- map->subHeaderKeys[i] /= 8;
- if (n < map->subHeaderKeys[i])
-@@ -129,7 +130,13 @@
- }
- n += 1; /* the number of subHeaders is one plus the max of subHeaderKeys */
-
-- map->subHeaders = NEW(n, struct SubHeader);
-+ if (len < 512 + n * 8 ) {
-+ WARN("invalid/truncated format2 TT cmap subtable");
-+ RELEASE(map);
-+ return NULL;
-+ }
-+
-+ map->subHeaders = NEW(n, struct SubHeader);
- for (i = 0; i < n; i++) {
- map->subHeaders[i].firstCode = sfnt_get_ushort(sfont);
- map->subHeaders[i].entryCount = sfnt_get_ushort(sfont);
-@@ -222,8 +229,10 @@
- struct cmap4 *map;
- USHORT i, n, segCount;
-
-- if (len < 8)
-- ERROR("invalid cmap subtable");
-+ if (len < 8) {
-+ WARN("invalid format 4 TT cmap subtable");
-+ return NULL;
-+ }
-
- map = NEW(1, struct cmap4);
-
-@@ -288,19 +297,19 @@
- * Last segment maps 0xffff to gid 0 (?)
- */
- i = segCount = map->segCountX2 / 2;
-- while (i-- > 0 && cc <= map->endCount[i]) {
-+ while (i-- > 0 && cc <= map->endCount[i]) {
- if (cc >= map->startCount[i]) {
- if (map->idRangeOffset[i] == 0) {
-- gid = (cc + map->idDelta[i]) & 0xffff;
-+ gid = (cc + map->idDelta[i]) & 0xffff;
- } else if (cc == 0xffff && map->idRangeOffset[i] == 0xffff) {
-- /* this is for protection against some old broken fonts... */
-- gid = 0;
-+ /* this is for protection against some old broken fonts... */
-+ gid = 0;
- } else {
-- j = map->idRangeOffset[i] - (segCount - i) * 2;
-- j = (cc - map->startCount[i]) + (j / 2);
-- gid = map->glyphIndexArray[j];
-- if (gid != 0)
-- gid = (gid + map->idDelta[i]) & 0xffff;
-+ j = map->idRangeOffset[i] - (segCount - i) * 2;
-+ j = (cc - map->startCount[i]) + (j / 2);
-+ gid = map->glyphIndexArray[j];
-+ if (gid != 0)
-+ gid = (gid + map->idDelta[i]) & 0xffff;
- }
- break;
- }
-@@ -323,14 +332,15 @@
- struct cmap6 *map;
- USHORT i;
-
-- if (len < 4)
-- ERROR("invalid cmap subtable");
-+ if (len < 4) {
-+ WARN("invalid format 6 TT cmap subtable");
-+ return NULL;
-+ }
-
- map = NEW(1, struct cmap6);
- map->firstCode = sfnt_get_ushort(sfont);
- map->entryCount = sfnt_get_ushort(sfont);
-- map->glyphIndexArray = NEW(map->entryCount, USHORT);
--
-+ map->glyphIndexArray = NEW(map->entryCount, USHORT);
- for (i = 0; i < map->entryCount; i++)
- map->glyphIndexArray[i] = sfnt_get_ushort(sfont);
-
-@@ -390,13 +400,14 @@
- struct cmap12 *map;
- ULONG i;
-
-- if (len < 4)
-- ERROR("invalid cmap subtable");
-+ if (len < 4) {
-+ WARN("invalid format 12 TT cmap subtable");
-+ return NULL;
-+ }
-
- map = NEW(1, struct cmap12);
- map->nGroups = sfnt_get_ulong(sfont);
- map->groups = NEW(map->nGroups, struct charGroup);
--
- for (i = 0; i < map->nGroups; i++) {
- map->groups[i].startCharCode = sfnt_get_ulong(sfont);
- map->groups[i].endCharCode = sfnt_get_ulong(sfont);
-@@ -427,8 +438,8 @@
- cccc <= map->groups[i].endCharCode) {
- if (cccc >= map->groups[i].startCharCode) {
- gid = (USHORT) ((cccc -
-- map->groups[i].startCharCode +
-- map->groups[i].startGlyphID) & 0xffff);
-+ map->groups[i].startCharCode +
-+ map->groups[i].startGlyphID) & 0xffff);
- break;
- }
- }
-@@ -510,6 +521,7 @@
- WARN("Unrecognized OpenType/TrueType cmap format.");
- tt_cmap_release(cmap);
- return NULL;
-+ break;
- }
-
- if (!cmap->map) {
-@@ -526,24 +538,25 @@
-
- if (cmap) {
- if (cmap->map) {
-- switch(cmap->format) {
-+ switch (cmap->format) {
- case 0:
-- release_cmap0(cmap->map);
-- break;
-+ release_cmap0(cmap->map);
-+ break;
- case 2:
-- release_cmap2(cmap->map);
-- break;
-+ release_cmap2(cmap->map);
-+ break;
- case 4:
-- release_cmap4(cmap->map);
-- break;
-+ release_cmap4(cmap->map);
-+ break;
- case 6:
-- release_cmap6(cmap->map);
-- break;
-+ release_cmap6(cmap->map);
-+ break;
- case 12:
-- release_cmap12(cmap->map);
-- break;
-+ release_cmap12(cmap->map);
-+ break;
- default:
-- ERROR("Unrecognized OpenType/TrueType cmap format.");
-+ WARN("Unrecognized OpenType/TrueType cmap format: %d", cmap->format);
-+ break;
- }
- }
- RELEASE(cmap);
-@@ -582,129 +595,20 @@
- gid = lookup_cmap12(cmap->map, (ULONG) cc);
- break;
- default:
-- ERROR("Unrecognized OpenType/TrueType cmap subtable format");
-+ WARN("Unrecognized OpenType/TrueType cmap subtable format: %d", cmap->format);
- break;
- }
-
- return gid;
- }
-
--/* Sorry for placing this here.
-- * We need to rewrite TrueType font support code...
-- */
-
--#define WBUF_SIZE 1024
--static unsigned char wbuf[WBUF_SIZE];
-
- static unsigned char srange_min[2] = {0x00, 0x00};
- static unsigned char srange_max[2] = {0xff, 0xff};
- static unsigned char lrange_min[4] = {0x00, 0x00, 0x00, 0x00};
- static unsigned char lrange_max[4] = {0x7f, 0xff, 0xff, 0xff};
-
--static void
--load_cmap4 (struct cmap4 *map,
-- unsigned char *GIDToCIDMap,
-- otl_gsub *gsub_vert, otl_gsub *gsub_list,
-- CMap *cmap, CMap *tounicode_add)
--{
-- USHORT c0, c1, gid, cid;
-- USHORT j, d, segCount;
-- USHORT ch;
-- int i;
--
-- segCount = map->segCountX2 / 2;
-- for (i = segCount - 1; i >= 0 ; i--) {
-- c0 = map->startCount[i];
-- c1 = map->endCount[i];
-- d = map->idRangeOffset[i] / 2 - (segCount - i);
-- for (j = 0; j <= c1 - c0; j++) {
-- ch = c0 + j;
-- if (map->idRangeOffset[i] == 0) {
-- gid = (ch + map->idDelta[i]) & 0xffff;
-- } else if (c0 == 0xffff && c1 == 0xffff &&
-- map->idRangeOffset[i] == 0xffff) {
-- /* this is for protection against some old broken fonts... */
-- gid = 0;
-- } else {
-- gid = (map->glyphIndexArray[j+d] + map->idDelta[i]) & 0xffff;
-- }
-- if (gid != 0 && gid != 0xffff) {
-- if (gsub_list)
-- otl_gsub_apply_chain(gsub_list, &gid);
-- if (gsub_vert)
-- otl_gsub_apply(gsub_vert, &gid);
-- if (GIDToCIDMap) {
-- cid = ((GIDToCIDMap[2*gid] << 8)|GIDToCIDMap[2*gid+1]);
-- if (cid == 0)
-- WARN("GID %u does not have corresponding CID %u.", gid, cid);
-- } else {
-- cid = gid;
-- }
-- wbuf[0] = 0;
-- wbuf[1] = 0;
-- wbuf[2] = (ch >> 8) & 0xff;
-- wbuf[3] = ch & 0xff;
-- wbuf[4] = (cid >> 8) & 0xff;
-- wbuf[5] = cid & 0xff;
-- CMap_add_cidchar(cmap, wbuf, 4, cid);
-- if (tounicode_add) {
-- unsigned char *p = wbuf + 6;
-- size_t uc_len;
-- uc_len = UC_UTF16BE_encode_char(ch, &p, wbuf + WBUF_SIZE -1 );
-- CMap_add_bfchar(tounicode_add, wbuf+4, 2, wbuf+6, uc_len);
-- }
-- }
-- }
-- }
--
-- return;
--}
--
--static void
--load_cmap12 (struct cmap12 *map,
-- unsigned char *GIDToCIDMap,
-- otl_gsub *gsub_vert, otl_gsub *gsub_list,
-- CMap *cmap, CMap *tounicode_add)
--{
-- ULONG i, ch; /* LONG ? */
-- USHORT gid, cid;
--
-- for (i = 0; i < map->nGroups; i++) {
-- for (ch = map->groups[i].startCharCode;
-- ch <= map->groups[i].endCharCode;
-- ch++) {
-- int d = ch - map->groups[i].startCharCode;
-- gid = (USHORT) ((map->groups[i].startGlyphID + d) & 0xffff);
-- if (gsub_list)
-- otl_gsub_apply_chain(gsub_list, &gid);
-- if (gsub_vert)
-- otl_gsub_apply(gsub_vert, &gid);
-- if (GIDToCIDMap) {
-- cid = ((GIDToCIDMap[2*gid] << 8)|GIDToCIDMap[2*gid+1]);
-- if (cid == 0)
-- WARN("GID %u does not have corresponding CID %u.", gid, cid);
-- } else {
-- cid = gid;
-- }
-- wbuf[0] = (ch >> 24) & 0xff;
-- wbuf[1] = (ch >> 16) & 0xff;
-- wbuf[2] = (ch >> 8) & 0xff;
-- wbuf[3] = ch & 0xff;
-- wbuf[4] = (cid >> 8) & 0xff;
-- wbuf[5] = cid & 0xff;
-- CMap_add_cidchar(cmap, wbuf, 4, cid);
-- if (tounicode_add) {
-- unsigned char *p = wbuf + 6;
-- size_t uc_len;
-- uc_len = UC_UTF16BE_encode_char(ch, &p, wbuf + WBUF_SIZE -1 );
-- CMap_add_bfchar(tounicode_add, wbuf+4, 2, wbuf+6, uc_len);
-- }
-- }
-- }
--
-- return;
--}
--
- /* OpenType CIDFont:
- *
- * We don't use GID for them. OpenType cmap table is for
-@@ -717,78 +621,37 @@
- #include "cff_dict.h"
- #include "cff.h"
-
--static int
--handle_CIDFont (sfnt *sfont,
-- unsigned char **GIDToCIDMap, CIDSysInfo *csi)
--{
-- cff_font *cffont;
-- int offset, i;
-- card16 num_glyphs, gid;
-- cff_charsets *charset;
-- unsigned char *map;
-- struct tt_maxp_table *maxp;
--
-- ASSERT(csi);
--
-- offset = sfnt_find_table_pos(sfont, "CFF ");
-- if (offset == 0) {
-- csi->registry = NULL;
-- csi->ordering = NULL;
-- *GIDToCIDMap = NULL;
-- return 0;
-- }
--
-- maxp = tt_read_maxp_table(sfont);
-- num_glyphs = (card16) maxp->numGlyphs;
-- RELEASE(maxp);
-- if (num_glyphs < 1)
-- ERROR("No glyph contained in this font...");
--
-- cffont = cff_open(sfont->stream, offset, 0);
-- if (!cffont)
-- ERROR("Could not open CFF font...");
--
--
-- if (!(cffont->flag & FONTTYPE_CIDFONT)) {
-- cff_close(cffont);
-- csi->registry = NULL;
-- csi->ordering = NULL;
-- *GIDToCIDMap = NULL;
-- return 0;
-- }
-+/* This should be moved to cff.c */
-+static void
-+create_GIDToCIDMap (uint16_t *GIDToCIDMap, uint16_t num_glyphs, cff_font *cffont)
-+{
-+ cff_charsets *charset;
-+ uint16_t gid, i;
-
-- if (!cff_dict_known(cffont->topdict, "ROS")) {
-- ERROR("No CIDSystemInfo???");
-- } else {
-- card16 reg, ord;
-+ ASSERT(GIDToCIDMap);
-
-- reg = (card16) cff_dict_get(cffont->topdict, "ROS", 0);
-- ord = (card16) cff_dict_get(cffont->topdict, "ROS", 1);
-+ if (!cffont || !(cffont->flag & FONTTYPE_CIDFONT)) {
-+ for (gid = 0; gid < num_glyphs; gid++) {
-+ GIDToCIDMap[gid] = gid;
-+ }
-
-- csi->registry = cff_get_string(cffont, reg);
-- csi->ordering = cff_get_string(cffont, ord);
-- csi->supplement = (int) cff_dict_get(cffont->topdict, "ROS", 2);
-+ return;
- }
-
-- cff_read_charsets(cffont);
-- charset = cffont->charsets;
-- if (!charset) {
-- ERROR("No CFF charset data???");
-- }
-+ memset(GIDToCIDMap, 0, num_glyphs*sizeof(uint16_t));
-
-- map = NEW(65536 * 2, unsigned char);
-- memset(map, 0, 65536 * 2);
-+ charset = cffont->charsets;
-+ if (!charset)
-+ return;
- switch (charset->format) {
- case 0:
- {
- s_SID *cids; /* CID... */
--
-+
- cids = charset->data.glyphs;
-- for (gid = 1, i = 0;
-- i < charset->num_entries; i++) {
-- map[2*gid ] = (cids[i] >> 8) & 0xff;
-- map[2*gid+1] = cids[i] & 0xff;
-- gid++;
-+ for (gid = 1, i = 0; i < charset->num_entries; i++) {
-+ GIDToCIDMap[gid] = cids[i];
-+ gid++;
- }
- }
- break;
-@@ -798,16 +661,14 @@
- card16 cid, count;
-
- ranges = charset->data.range1;
-- for (gid = 1, i = 0;
-- i < charset->num_entries; i++) {
-- cid = ranges[i].first;
-- count = ranges[i].n_left + 1; /* card8 */
-- while (count-- > 0 &&
-- gid <= num_glyphs) {
-- map[2*gid ] = (cid >> 8) & 0xff;
-- map[2*gid + 1] = cid & 0xff;
-- gid++; cid++;
-- }
-+ for (gid = 1, i = 0; i < charset->num_entries; i++) {
-+ cid = ranges[i].first;
-+ count = ranges[i].n_left + 1; /* card8 */
-+ while (count-- > 0 && gid <= num_glyphs) {
-+ GIDToCIDMap[gid] = cid;
-+ gid++;
-+ cid++;
-+ }
- }
- }
- break;
-@@ -817,55 +678,52 @@
- card16 cid, count;
-
- ranges = charset->data.range2;
-- if (charset->num_entries == 1 &&
-- ranges[0].first == 1) {
-- /* "Complete" CIDFont */
-- RELEASE(map); map = NULL;
-+ if (charset->num_entries == 1 && ranges[0].first == 1) {
-+ /* "Complete" CIDFont */
-+ for (gid = 0; gid < num_glyphs; gid++) {
-+ GIDToCIDMap[gid] = gid;
-+ }
- } else {
-- /* Not trivial mapping */
-- for (gid = 1, i = 0;
-- i < charset->num_entries; i++) {
-- cid = ranges[i].first;
-- count = ranges[i].n_left + 1;
-- while (count-- > 0 &&
-- gid <= num_glyphs) {
-- map[2*gid] = (cid >> 8) & 0xff;
-- map[2*gid+1] = cid & 0xff;
-- gid++; cid++;
-- }
-- }
-+ /* Not trivial mapping */
-+ for (gid = 1, i = 0; i < charset->num_entries; i++) {
-+ cid = ranges[i].first;
-+ count = ranges[i].n_left + 1;
-+ while (count-- > 0 && gid <= num_glyphs) {
-+ GIDToCIDMap[gid] = cid;
-+ gid++;
-+ cid++;
-+ }
-+ }
- }
- }
- break;
- default:
-- RELEASE(map); map = NULL;
-- ERROR("Unknown CFF charset format...: %d", charset->format);
-+ WARN("Unknown CFF charset format...: %d", charset->format);
- break;
- }
-- cff_close(cffont);
-
-- *GIDToCIDMap = map;
-- return 1;
-+ return;
- }
-
- static int is_PUA_or_presentation (unsigned int uni)
- {
- /* Some of CJK Radicals Supplement and Kangxi Radicals
- * are commonly double encoded, lower the priority.
-+ * CJK Compatibility Ideographs & Supplement added.
- */
- return ((uni >= 0x2E80 && uni <= 0x2EF3) || (uni >= 0x2F00 && uni <= 0x2FD5) ||
- (uni >= 0xE000 && uni <= 0xF8FF) || (uni >= 0xFB00 && uni <= 0xFB4F) ||
-+ (uni >= 0xF900 && uni <= 0xFAFF) || (uni >= 0x2F800 && uni <= 0x2FA1F) ||
- (uni >= 0xF0000 && uni <= 0xFFFFD) || (uni >= 0x100000 && uni <= 0x10FFFD));
- }
-
--static char*
--sfnt_get_glyphname(struct tt_post_table *post, cff_font *cffont, USHORT gid)
-+static char *
-+lookup_glyph_name (struct tt_post_table *post, cff_font *cffont, USHORT gid)
- {
-- char* name = NULL;
-+ char *name = NULL;
-
- if (post)
- name = tt_get_glyphname(post, gid);
--
- if (!name && cffont)
- name = cff_get_glyphname(cffont, gid);
-
-@@ -881,94 +739,82 @@
- #define is_used_char2(b,c) (((b)[(c)/8]) & (1 << (7-((c)%8))))
- #endif
-
--static USHORT
--handle_subst_glyphs (CMap *cmap,
-- CMap *cmap_add,
-- const char *used_glyphs,
-- sfnt *sfont,
-- cff_font *cffont)
-+static int32_t
-+handle_subst_glyphs (CMap *cmap, CMap *cmap_add, char *used_chars)
- {
-- USHORT count;
-- USHORT i;
-- struct tt_post_table *post = NULL;
--
-- if (!cmap_add)
-- post = tt_read_post_table(sfont);
--
-- for (count = 0, i = 0; i < 8192; i++) {
-- int j;
-- int32_t len;
-- int inbytesleft, outbytesleft;
-- const unsigned char *inbuf;
-- unsigned char *outbuf;
-+ int32_t count = 0;
-+ int32_t cid;
-
-- if (used_glyphs[i] == 0)
-+ for (cid = 0; cid < 65536; cid++) {
-+ if (!is_used_char2(used_chars, cid))
- continue;
-+ else {
-+ unsigned char buf[256];
-+ int inbytesleft = 2, outbytesleft = 254;
-+ size_t len;
-+ unsigned char *outbuf = buf + 2;
-+ const unsigned char *inbuf = buf;
-+
-+ buf[0] = (cid >> 8) & 0xff;
-+ buf[1] = cid & 0xff;
-+ CMap_decode(cmap_add, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
-+ if (inbytesleft == 0) {
-+ len = 254 - outbytesleft;
-+ CMap_add_bfchar(cmap, buf, 2, buf + 2, len);
-+ used_chars[cid / 8] &= ~(1 << (7 - (cid % 8)));
-+ count++;
-+ }
-+ }
-+ }
-
-- for (j = 0; j < 8; j++) {
-- USHORT gid = 8 * i + j;
-+ return count;
-+}
-
-- if (!is_used_char2(used_glyphs, gid))
-- continue;
-+static int32_t
-+add_ToUnicode_via_glyph_name (CMap *cmap, char *used_chars, USHORT num_glyphs,
-+ uint16_t *GIDToCIDMap,
-+ sfnt *sfont, cff_font *cffont)
-+{
-+ int32_t count = 0;
-+ USHORT gid;
-+ struct tt_post_table *post = NULL;
-
-- if (!cmap_add) {
--#define MAX_UNICODES 16
-- /* try to look up Unicode values from the glyph name... */
-- char* name;
-- int32_t unicodes[MAX_UNICODES];
-- int unicode_count = -1;
-- name = sfnt_get_glyphname(post, cffont, gid);
-- if (name) {
-- unicode_count = agl_get_unicodes(name, unicodes, MAX_UNICODES);
-- }
-+ post = tt_read_post_table(sfont);
-+ if (!post && !cffont)
-+ return count;
-+
-+ for (gid = 0; gid < num_glyphs; gid++) {
-+ uint16_t cid = GIDToCIDMap[gid];
-+ if (is_used_char2(used_chars, cid)) {
-+#define MAX_UNICODES 32
-+ char *name;
-+ int32_t unicodes[MAX_UNICODES];
-+ int unicode_count = -1;
-+
-+ name = lookup_glyph_name(post, cffont, gid);
-+ if (name) {
-+ unicode_count = agl_get_unicodes(name, unicodes, MAX_UNICODES);
- #undef MAX_UNICODES
-- if (unicode_count == -1) {
-- if(dpx_conf.verbose_level > VERBOSE_LEVEL_MIN) {
-- if (name)
-- MESG("No Unicode mapping available: GID=%u, name=%s\n", gid, name);
-- else
-- MESG("No Unicode mapping available: GID=%u\n", gid);
-- }
-- } else {
-- /* the Unicode characters go into wbuf[2] and following, in UTF16BE */
-- /* we rely on WBUF_SIZE being more than adequate for MAX_UNICODES */
-- unsigned char* p = wbuf + 2;
-- int k;
-- len = 0;
-+ RELEASE(name);
-+ if (unicode_count > 0) {
-+ unsigned char *buf;
-+ unsigned char *p, *endptr;
-+ int k;
-+ size_t len = 0;
-+
-+ buf = NEW(unicode_count*4+2, unsigned char);
-+ p = buf + 2;
-+ endptr = buf + (unicode_count * 4 + 2);
- for (k = 0; k < unicode_count; ++k) {
-- len += UC_UTF16BE_encode_char(unicodes[k], &p, wbuf+WBUF_SIZE);
-+ len += UC_UTF16BE_encode_char(unicodes[k], &p, endptr);
- }
-- wbuf[0] = (gid >> 8) & 0xff;
-- wbuf[1] = gid & 0xff;
-- CMap_add_bfchar(cmap, wbuf, 2, wbuf + 2, len);
-- }
-- RELEASE(name);
-- } else {
-- wbuf[0] = (gid >> 8) & 0xff;
-- wbuf[1] = gid & 0xff;
--
-- inbuf = wbuf;
-- inbytesleft = 2;
-- outbuf = wbuf + 2;
-- outbytesleft = WBUF_SIZE - 2;
-- CMap_decode(cmap_add, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
--
-- if (inbytesleft != 0) {
-- WARN("CMap conversion failed...");
-- } else {
-- len = WBUF_SIZE - 2 - outbytesleft;
-- CMap_add_bfchar(cmap, wbuf, 2, wbuf + 2, len);
-+ buf[0] = (cid >> 8) & 0xff;
-+ buf[1] = cid & 0xff;
-+ CMap_add_bfchar(cmap, buf, 2, buf + 2, len);
-+ used_chars[cid / 8] &= ~(1 << (7 - (cid % 8)));
- count++;
-
-- if (dpx_conf.verbose_level > VERBOSE_LEVEL_MIN) {
-- int _i;
--
-- MESG("otf_cmap>> Additional ToUnicode mapping: <%04X> <", gid);
-- for (_i = 0; _i < len; _i++) {
-- MESG("%02X", wbuf[2 + _i]);
-- }
-- MESG(">\n");
-- }
-+ RELEASE(buf);
- }
- }
- }
-@@ -980,70 +826,11 @@
- return count;
- }
-
--static cff_font *
--prepare_CIDFont_from_sfnt(sfnt* sfont)
--{
-- cff_font *cffont;
-- unsigned offset = 0;
--
-- if (sfont->type != SFNT_TYPE_POSTSCRIPT ||
-- sfnt_read_table_directory(sfont, 0) < 0 ||
-- (offset = sfnt_find_table_pos(sfont, "CFF ")) == 0) {
-- return NULL;
-- }
--
-- cffont = cff_open(sfont->stream, offset, 0);
-- if (!cffont)
-- return NULL;
--
-- cff_read_charsets(cffont);
-- return cffont;
--}
--
--static USHORT
--add_to_cmap_if_used (CMap *cmap,
-- cff_font *cffont,
-- char *used_chars,
-- USHORT gid,
-- ULONG ch)
--{
-- USHORT count = 0;
-- USHORT cid = cffont ? cff_charsets_lookup_inverse(cffont, gid) : gid;
-- if (is_used_char2(used_chars, cid)) {
-- int len;
-- unsigned char *p = wbuf + 2;
--
-- count++;
--
-- wbuf[0] = (cid >> 8) & 0xff;
-- wbuf[1] = (cid & 0xff);
-- len = UC_UTF16BE_encode_char((int32_t) ch, &p, wbuf + WBUF_SIZE);
-- CMap_add_bfchar(cmap, wbuf, 2, wbuf + 2, len);
--
-- /* Skip PUA characters and alphabetic presentation forms, allowing
-- * handle_subst_glyphs() as it might find better mapping. Fixes the
-- * mapping of ligatures encoded in PUA in fonts like Linux Libertine
-- * and old Adobe fonts.
-- */
-- if (!is_PUA_or_presentation(ch)) {
-- /* Avoid duplicate entry
-- * There are problem when two Unicode code is mapped to
-- * single glyph...
-- */
-- used_chars[cid / 8] &= ~(1 << (7 - (cid % 8)));
-- }
-- }
--
-- return count;
--}
--
--static USHORT
--create_ToUnicode_cmap4 (CMap *cmap,
-- struct cmap4 *map,
-- char *used_chars,
-- cff_font *cffont)
-+static void
-+create_inverse_cmap4 (int32_t *map_base, int32_t *map_sub, USHORT num_glyphs,
-+ struct cmap4 *map)
- {
-- USHORT count = 0, segCount = map->segCountX2 / 2;
-+ USHORT segCount = map->segCountX2 / 2;
- USHORT i, j;
-
- for (i = 0; i < segCount; i++) {
-@@ -1062,32 +849,33 @@
- } else {
- gid = (map->glyphIndexArray[j + d] + map->idDelta[i]) & 0xffff;
- }
--
-- count += add_to_cmap_if_used(cmap, cffont, used_chars, gid, ch);
-+ if (is_PUA_or_presentation(ch)) {
-+ map_sub[gid] = ch;
-+ } else {
-+ map_base[gid] = ch;
-+ }
- }
- }
--
-- return count;
- }
-
--static USHORT
--create_ToUnicode_cmap12 (CMap *cmap,
-- struct cmap12 *map,
-- char *used_chars,
-- cff_font *cffont)
-+static void
-+create_inverse_cmap12 (int32_t *map_base, int32_t *map_sub, USHORT num_glyphs,
-+ struct cmap12 *map)
- {
-- ULONG i, ch, count = 0;
-+ ULONG i, ch;
-
- for (i = 0; i < map->nGroups; i++) {
- for (ch = map->groups[i].startCharCode;
- ch <= map->groups[i].endCharCode; ch++) {
- int d = ch - map->groups[i].startCharCode;
- USHORT gid = (USHORT) ((map->groups[i].startGlyphID + d) & 0xffff);
-- count += add_to_cmap_if_used(cmap, cffont, used_chars, gid, ch);
-+ if (is_PUA_or_presentation(ch)) {
-+ map_sub[gid] = ch;
-+ } else {
-+ map_base[gid] = ch;
-+ }
- }
- }
--
-- return count;
- }
-
- /* NOTE: Reverse mapping code which had been placed here is removed since:
-@@ -1096,60 +884,163 @@
- * Especially, the second one causes problems.
- */
- static pdf_obj *
--create_ToUnicode_cmap (tt_cmap *ttcmap,
-+create_ToUnicode_cmap (tt_cmap *ttcmap,
- const char *cmap_name,
-- CMap *cmap_add,
-+ CMap *cmap_add,
- const char *used_chars,
-- sfnt *sfont)
-+ sfnt *sfont)
- {
-- pdf_obj *stream = NULL;
-- CMap *cmap;
-- USHORT count = 0;
-- cff_font *cffont = prepare_CIDFont_from_sfnt(sfont);
-- char is_cidfont = cffont && (cffont->flag & FONTTYPE_CIDFONT);
--
-- cmap = CMap_new();
-- CMap_set_name (cmap, cmap_name);
-- CMap_set_wmode(cmap, 0);
-- CMap_set_type (cmap, CMAP_TYPE_TO_UNICODE);
-- CMap_set_CIDSysInfo(cmap, &CSI_UNICODE);
-- CMap_add_codespacerange(cmap, srange_min, srange_max, 2);
-+ pdf_obj *stream = NULL;
-+ int32_t *map_base = NULL, *map_sub = NULL;
-+ USHORT gid, num_glyphs = 0;
-
-- /* cmap_add here stores information about all unencoded glyphs which can be
-- * accessed only through OT Layout GSUB table.
-- */
-- {
-- char used_chars_copy[8192];
-- memcpy(used_chars_copy, used_chars, 8192);
-+ ASSERT(ttcmap);
-
-- /* For create_ToUnicode_cmap{4,12}(), cffont is for GID -> CID lookup,
-- * so it is only needed for CID fonts. */
-- switch (ttcmap->format) {
-- case 4:
-- count = create_ToUnicode_cmap4(cmap, ttcmap->map, used_chars_copy,
-- is_cidfont ? cffont : NULL);
-- break;
-- case 12:
-- count = create_ToUnicode_cmap12(cmap, ttcmap->map, used_chars_copy,
-- is_cidfont ? cffont : NULL);
-- break;
-+ /* Get num_glyphs from maxp talbe */
-+ {
-+ struct tt_maxp_table *maxp;
-+
-+ maxp = tt_read_maxp_table(sfont);
-+ if (maxp) {
-+ num_glyphs = maxp->numGlyphs;
-+ RELEASE(maxp);
- }
-+ }
-
-- /* For handle_subst_glyphs(), cffont is for GID -> glyph name lookup, so
-- * it is only needed for non-CID fonts. */
-- count += handle_subst_glyphs(cmap, cmap_add, used_chars_copy, sfont,
-- is_cidfont ? NULL : cffont);
-+ /* Initialize GID to Unicode mapping table */
-+ map_base = NEW(num_glyphs, int32_t);
-+ map_sub = NEW(num_glyphs, int32_t);
-+ for (gid = 0; gid < num_glyphs; gid++) {
-+ map_base[gid] = -1;
-+ map_sub [gid] = -1;
- }
-
-- if (count < 1)
-- stream = NULL;
-- else {
-- stream = CMap_create_stream(cmap);
-+ /* Create "base" mapping from inverse mapping of OpenType cmap */
-+ switch (ttcmap->format) {
-+ case 4:
-+ create_inverse_cmap4(map_base, map_sub, num_glyphs, ttcmap->map);
-+ break;
-+ case 12:
-+ create_inverse_cmap12(map_base, map_sub, num_glyphs, ttcmap->map);
-+ break;
- }
-- CMap_release(cmap);
-
-- if (cffont)
-- cff_close(cffont);
-+ /* Now create ToUnicode CMap stream */
-+ {
-+ CMap *cmap;
-+ int32_t count;
-+ cff_font *cffont = NULL;
-+ char is_cidfont = 0;
-+ uint16_t *GIDToCIDMap = NULL;
-+ char *used_chars_copy = NULL;
-+
-+ if (sfont->type == SFNT_TYPE_POSTSCRIPT) {
-+ ULONG offset;
-+ offset = sfnt_find_table_pos(sfont, "CFF ");
-+ cffont = cff_open(sfont->stream, offset, 0);
-+ cff_read_charsets(cffont);
-+ }
-+ is_cidfont = cffont && (cffont->flag & FONTTYPE_CIDFONT);
-+
-+ /* GIT to CID mapping info. */
-+ GIDToCIDMap = NEW(num_glyphs, uint16_t);
-+ if (is_cidfont) {
-+ create_GIDToCIDMap(GIDToCIDMap, num_glyphs, cffont);
-+ } else {
-+ for (gid = 0; gid < num_glyphs; gid++) {
-+ GIDToCIDMap[gid] = gid;
-+ }
-+ }
-+ cmap = CMap_new();
-+ CMap_set_name (cmap, cmap_name);
-+ CMap_set_wmode(cmap, 0);
-+ CMap_set_type (cmap, CMAP_TYPE_TO_UNICODE);
-+ CMap_set_CIDSysInfo(cmap, &CSI_UNICODE);
-+ CMap_add_codespacerange(cmap, srange_min, srange_max, 2);
-+
-+ count = 0;
-+ used_chars_copy = NEW(8192, char);
-+ memcpy(used_chars_copy, used_chars, 8192);
-+ for (gid = 0; gid < num_glyphs; gid++) {
-+ uint16_t cid = GIDToCIDMap[gid];
-+ if (is_used_char2(used_chars_copy, cid)) {
-+ int32_t ch;
-+ unsigned char src[2], dst[4];
-+ unsigned char *p = dst, *endptr = dst + 4;
-+ size_t len;
-+
-+ ch = map_base[gid];
-+ if (UC_is_valid(ch)) {
-+ src[0] = (cid >> 8) & 0xff;
-+ src[1] = cid & 0xff;
-+ len = UC_UTF16BE_encode_char(ch, &p, endptr);
-+ CMap_add_bfchar(cmap, src, 2, dst, len);
-+ used_chars_copy[cid / 8] &= ~(1 << (7 - (cid % 8)));
-+ count++;
-+ }
-+ }
-+ }
-+
-+ /* cmap_add here stores information about all unencoded glyphs which can be
-+ * accessed only through OT Layout GSUB table.
-+ * This is only availabel when encoding is "unicode".
-+ */
-+ if (cmap_add) {
-+ count += handle_subst_glyphs(cmap, cmap_add, used_chars_copy);
-+ } else {
-+ /* Else, try gathering information from GSUB tables */
-+ count += otl_gsub_add_ToUnicode(cmap, used_chars_copy,
-+ map_base, map_sub, num_glyphs,
-+ GIDToCIDMap, sfont);
-+ }
-+ /* Find Unicode mapping via PostScript glyph names... */
-+ count += add_ToUnicode_via_glyph_name(cmap, used_chars_copy, num_glyphs,
-+ GIDToCIDMap, sfont, is_cidfont ? NULL : cffont);
-+ if (cffont)
-+ cff_close(cffont);
-+
-+ /* Finaly, PUA and presentation forms... */
-+ for (gid = 0; gid < num_glyphs; gid++) {
-+ uint16_t cid = GIDToCIDMap[gid];
-+ if (is_used_char2(used_chars_copy, cid)) {
-+ int32_t ch;
-+ unsigned char src[2], dst[4];
-+ unsigned char *p = dst, *endptr = dst + 4;
-+ size_t len;
-+
-+ ch = map_sub[gid];
-+ if (UC_is_valid(ch)) {
-+ src[0] = (cid >> 8) & 0xff;
-+ src[1] = cid & 0xff;
-+ len = UC_UTF16BE_encode_char(ch, &p, endptr);
-+ CMap_add_bfchar(cmap, src, 2, dst, len);
-+ used_chars_copy[cid / 8] &= ~(1 << (7 - (cid % 8)));
-+ count++;
-+ }
-+ }
-+ }
-+
-+ /* Check for missing mapping */
-+ if (dpx_conf.verbose_level > VERBOSE_LEVEL_MIN) {
-+ for (gid = 0; gid < num_glyphs; gid++) {
-+ uint16_t cid = GIDToCIDMap[gid];
-+ if (is_used_char2(used_chars_copy, cid)) {
-+ WARN("Unable to find ToUnicode mapping for glyph CID=%u (GID=%u)", cid, gid);
-+ }
-+ }
-+ }
-+ RELEASE(GIDToCIDMap);
-+ RELEASE(used_chars_copy);
-+
-+ if (count < 1)
-+ stream = NULL;
-+ else {
-+ stream = CMap_create_stream(cmap);
-+ }
-+ CMap_release(cmap);
-+ }
-+ RELEASE(map_base);
-+ RELEASE(map_sub);
-
- return stream;
- }
-@@ -1169,29 +1060,27 @@
-
- pdf_obj *
- otf_create_ToUnicode_stream (const char *font_name,
-- int ttc_index, /* 0 for non-TTC */
-+ int ttc_index, /* 0 for non-TTC */
- const char *basefont,
- const char *used_chars)
- {
-- pdf_obj *cmap_ref = NULL;
-- int res_id;
-- pdf_obj *cmap_obj = NULL;
-- CMap *cmap_add;
-- int cmap_add_id;
-- tt_cmap *ttcmap;
-- char *cmap_name, *cmap_add_name;
-- FILE *fp = NULL;
-- sfnt *sfont;
-- ULONG offset = 0;
-- int i;
-+ pdf_obj *cmap_ref = NULL; /* returned value */
-+ CMap *cmap_add = NULL;
-+ char *cmap_name;
-+ FILE *fp = NULL;
-+ sfnt *sfont;
-+ ULONG offset = 0;
-+ tt_cmap *ttcmap;
-+ int cmap_id, cmap_add_id;
-+ int i;
-
- cmap_name = NEW(strlen(basefont)+strlen("-UTF16")+1, char);
- sprintf(cmap_name, "%s-UTF16", basefont);
-
-- res_id = pdf_findresource("CMap", cmap_name);
-- if (res_id >= 0) {
-+ cmap_id = pdf_findresource("CMap", cmap_name);
-+ if (cmap_id >= 0) {
- RELEASE(cmap_name);
-- cmap_ref = pdf_get_resource_reference(res_id);
-+ cmap_ref = pdf_get_resource_reference(cmap_id);
- return cmap_ref;
- }
-
-@@ -1212,7 +1101,10 @@
- }
-
- if (!sfont) {
-- ERROR("Could not open OpenType/TrueType font file \"%s\"", font_name);
-+ WARN("Could not open OpenType/TrueType font file \"%s\"", font_name);
-+ RELEASE(cmap_name);
-+ DPXFCLOSE(fp);
-+ return NULL;
- }
-
- switch (sfont->type) {
-@@ -1222,7 +1114,11 @@
- case SFNT_TYPE_TTC:
- offset = ttc_read_offset(sfont, ttc_index);
- if (offset == 0) {
-- ERROR("Invalid TTC index");
-+ WARN("Invalid TTC index for font: %s", font_name);
-+ sfnt_close(sfont);
-+ DPXFCLOSE(fp);
-+ RELEASE(cmap_name);
-+ return NULL;
- }
- break;
- default:
-@@ -1231,111 +1127,180 @@
- }
-
- if (sfnt_read_table_directory(sfont, offset) < 0) {
-- ERROR("Could not read OpenType/TrueType table directory.");
-+ WARN("Could not read OpenType/TrueType table directory: %s", font_name);
-+ sfnt_close(sfont);
-+ DPXFCLOSE(fp);
-+ RELEASE(cmap_name);
-+ return NULL;
- }
-
-- cmap_add_name = NEW(strlen(font_name)+strlen(",000-UCS32-Add")+1, char);
-- sprintf(cmap_add_name, "%s,%03d-UCS32-Add", font_name, ttc_index);
-- cmap_add_id = CMap_cache_find(cmap_add_name);
-- RELEASE(cmap_add_name);
-- if (cmap_add_id < 0) {
-- cmap_add = NULL;
-- } else {
-- cmap_add = CMap_cache_get(cmap_add_id);
-+ /* cmap_add is used for storing information on ToUnicode mapping for
-+ * unencoded glyphs which can be reached only through GSUB substitution.
-+ * This is available only when "unicode" is specified in the encoding
-+ * field of fontmap. We remember the inverse mapping via cmap_add in this
-+ * case.
-+ */
-+ {
-+ char *cmap_add_name;
-+
-+ cmap_add_name = NEW(strlen(font_name)+strlen(",000-UCS32-Add")+1, char);
-+ sprintf(cmap_add_name, "%s,%03d-UCS32-Add", font_name, ttc_index);
-+ cmap_add_id = CMap_cache_find(cmap_add_name);
-+ RELEASE(cmap_add_name);
-+ if (cmap_add_id < 0) {
-+ cmap_add = NULL;
-+ } else {
-+ cmap_add = CMap_cache_get(cmap_add_id);
-+ }
- }
-
-- CMap_set_silent(1); /* many warnings without this... */
-+ ttcmap = NULL;
- for (i = 0; i < sizeof(cmap_plat_encs) / sizeof(cmap_plat_enc_rec); ++i) {
- ttcmap = tt_cmap_read(sfont, cmap_plat_encs[i].platform, cmap_plat_encs[i].encoding);
- if (!ttcmap)
- continue;
-
- if (ttcmap->format == 4 || ttcmap->format == 12) {
-- cmap_obj = create_ToUnicode_cmap(ttcmap, cmap_name, cmap_add, used_chars, sfont);
- break;
-+ } else {
-+ tt_cmap_release(ttcmap);
-+ ttcmap = NULL;
- }
- }
--#if defined(LIBDPX)
-- if (cmap_obj == NULL && dpx_conf.verbose_level > VERBOSE_LEVEL_MIN)
--#else
-- if (cmap_obj == NULL)
--#endif /* LIBDPX */
-- WARN("Unable to read OpenType/TrueType Unicode cmap table.");
-- tt_cmap_release(ttcmap);
-- CMap_set_silent(0);
--
-- if (cmap_obj) {
-- res_id = pdf_defineresource("CMap", cmap_name,
-- cmap_obj, PDF_RES_FLUSH_IMMEDIATE);
-- cmap_ref = pdf_get_resource_reference(res_id);
-- } else {
-- cmap_ref = NULL;
-+ if (ttcmap) {
-+ pdf_obj *cmap_obj;
-+
-+ CMap_set_silent(1); /* many warnings without this... */
-+ cmap_obj = create_ToUnicode_cmap(ttcmap, cmap_name, cmap_add, used_chars, sfont);
-+ CMap_set_silent(0);
-+ if (cmap_obj) {
-+ cmap_id = pdf_defineresource("CMap", cmap_name,
-+ cmap_obj, PDF_RES_FLUSH_IMMEDIATE);
-+ cmap_ref = pdf_get_resource_reference(cmap_id);
-+ }
-+ tt_cmap_release(ttcmap);
- }
-- RELEASE(cmap_name);
-
-+ /* Cleanup */
-+ RELEASE(cmap_name);
- sfnt_close(sfont);
-- if (fp)
-- DPXFCLOSE(fp);
-+ DPXFCLOSE(fp);
-+
-+#ifndef LIBDPX
-+ if (!cmap_ref) {
-+ WARN("Creating ToUnicode CMap failed for \"%s\"", font_name);
-+ }
-+#endif
-
- return cmap_ref;
- }
-
--static int
--load_base_CMap (const char *cmap_name, CMap *tounicode_add, int wmode,
-- CIDSysInfo *csi, unsigned char *GIDToCIDMap,
-- otl_gsub *gsub_vert, otl_gsub *gsub_list,
-- tt_cmap *ttcmap)
--{
-- int cmap_id;
-
-- cmap_id = CMap_cache_find(cmap_name);
-- if (cmap_id < 0) {
-- CMap *cmap;
-+/* Creating input CMaps from OT cmap table */
-
-- cmap = CMap_new();
-- CMap_set_name (cmap, cmap_name);
-- CMap_set_type (cmap, CMAP_TYPE_CODE_TO_CID);
-- CMap_set_wmode(cmap, wmode);
-- CMap_add_codespacerange(cmap, lrange_min, lrange_max, 4);
-+static void
-+load_cmap4 (struct cmap4 *map, uint16_t *GIDToCIDMap, USHORT num_glyphs,
-+ otl_gsub *gsub_vert, otl_gsub *gsub_list,
-+ CMap *cmap, int32_t *map_base, int32_t *map_sub)
-+{
-+ USHORT c0, c1, gid, cid;
-+ USHORT j, d, segCount;
-+ USHORT ch;
-+ int i;
-+ unsigned char buf[4];
-
-- if (csi) { /* CID */
-- CMap_set_CIDSysInfo(cmap, csi);
-- } else {
-- CMap_set_CIDSysInfo(cmap, &CSI_IDENTITY);
-+ segCount = map->segCountX2 / 2;
-+ for (i = segCount - 1; i >= 0 ; i--) {
-+ c0 = map->startCount[i];
-+ c1 = map->endCount[i];
-+ d = map->idRangeOffset[i] / 2 - (segCount - i);
-+ for (j = 0; j <= c1 - c0; j++) {
-+ ch = c0 + j;
-+ if (map->idRangeOffset[i] == 0) {
-+ gid = (ch + map->idDelta[i]) & 0xffff;
-+ } else if (c0 == 0xffff && c1 == 0xffff && map->idRangeOffset[i] == 0xffff) {
-+ /* this is for protection against some old broken fonts... */
-+ gid = 0;
-+ } else {
-+ gid = (map->glyphIndexArray[j+d] + map->idDelta[i]) & 0xffff;
-+ }
-+ if (gid != 0 && gid != 0xffff) {
-+ /* Apply GSUB features */
-+ if (gsub_list)
-+ otl_gsub_apply_chain(gsub_list, &gid);
-+ if (gsub_vert)
-+ otl_gsub_apply(gsub_vert, &gid);
-+ cid = (gid < num_glyphs) ? GIDToCIDMap[gid] : 0;
-+ buf[0] = 0;
-+ buf[1] = 0;
-+ buf[2] = (ch >> 8) & 0xff;
-+ buf[3] = ch & 0xff;
-+ CMap_add_cidchar(cmap, buf, 4, cid);
-+ /* For ToUnicode creation */
-+ if (map_base && map_sub) {
-+ if (is_PUA_or_presentation(ch)) {
-+ map_sub[gid] = ch;
-+ } else {
-+ map_base[gid] = ch;
-+ }
-+ }
-+ }
- }
-+ }
-
-- if (ttcmap->format == 12) {
-- load_cmap12(ttcmap->map, GIDToCIDMap, gsub_vert, gsub_list,
-- cmap, tounicode_add);
-- } else if (ttcmap->format == 4) {
-- load_cmap4(ttcmap->map, GIDToCIDMap, gsub_vert, gsub_list,
-- cmap, tounicode_add);
-- }
-+ return;
-+}
-
-- cmap_id = CMap_cache_add(cmap);
-+static void
-+load_cmap12 (struct cmap12 *map, uint16_t *GIDToCIDMap, USHORT num_glyphs,
-+ otl_gsub *gsub_vert, otl_gsub *gsub_list,
-+ CMap *cmap, int32_t *map_base, int32_t *map_sub)
-+{
-+ ULONG i, ch;
-+ USHORT gid, cid;
-+ unsigned char buf[4];
-+
-+ for (i = 0; i < map->nGroups; i++) {
-+ for (ch = map->groups[i].startCharCode;
-+ ch <= map->groups[i].endCharCode; ch++) {
-+ int d = ch - map->groups[i].startCharCode;
-+ gid = (USHORT) ((map->groups[i].startGlyphID + d) & 0xffff);
-+ if (gsub_list)
-+ otl_gsub_apply_chain(gsub_list, &gid);
-+ if (gsub_vert)
-+ otl_gsub_apply(gsub_vert, &gid);
-+ cid = (gid < num_glyphs) ? GIDToCIDMap[gid] : 0;
-+ buf[0] = (ch >> 24) & 0xff;
-+ buf[1] = (ch >> 16) & 0xff;
-+ buf[2] = (ch >> 8) & 0xff;
-+ buf[3] = ch & 0xff;
-+ CMap_add_cidchar(cmap, buf, 4, cid);
-+ if (map_base && map_sub) {
-+ if (is_PUA_or_presentation(ch)) {
-+ map_sub[gid] = ch;
-+ } else {
-+ map_base[gid] = ch;
-+ }
-+ }
-+ }
- }
-
-- return cmap_id;
-+ return;
- }
-
- int
- otf_load_Unicode_CMap (const char *map_name, int ttc_index, /* 0 for non-TTC font */
-- const char *otl_tags, int wmode)
-+ const char *otl_tags, int wmode)
- {
-- int cmap_id = -1;
-- /* Additional ToUncidoe mappings required by OTL GSUB substitusion */
-- int tounicode_add_id = -1;
-- CMap *tounicode_add = NULL;
-- char *tounicode_add_name = NULL;
-- int is_cidfont = 0;
-- sfnt *sfont;
-- ULONG offset = 0;
-- char *cmap_name = NULL;
-- FILE *fp = NULL;
-- otl_gsub *gsub_vert = NULL, *gsub_list = NULL;
-- tt_cmap *ttcmap;
-- CIDSysInfo csi = {NULL, NULL, 0};
-- unsigned char *GIDToCIDMap = NULL;
-+ int cmap_id = -1;
-+ char *cmap_name = NULL;
-+ sfnt *sfont = NULL;
-+ ULONG offset = 0;
-+ uint16_t num_glyphs = 0;
-+ FILE *fp = NULL;
-+ tt_cmap *ttcmap = NULL;
-+ CIDSysInfo csi = {NULL, NULL, 0};
-+ uint16_t *GIDToCIDMap = NULL;
-
- if (!map_name)
- return -1;
-@@ -1359,11 +1324,6 @@
- sprintf(cmap_name, "%s,%03d-UCS4-H", map_name, ttc_index);
- }
- }
-- if (dpx_conf.verbose_level > VERBOSE_LEVEL_MIN) {
-- MESG("\n");
-- MESG("otf_cmap>> Unicode charmap for font=\"%s\" layout=\"%s\"\n",
-- map_name, (otl_tags ? otl_tags : "none"));
-- }
- cmap_id = CMap_cache_find(cmap_name);
- if (cmap_id >= 0) {
- RELEASE(cmap_name);
-@@ -1374,6 +1334,12 @@
- }
-
- /* CMap not found */
-+ if (dpx_conf.verbose_level > VERBOSE_LEVEL_MIN) {
-+ MESG("\n");
-+ MESG("otf_cmap>> Creating Unicode charmap for font=\"%s\" layout=\"%s\"\n",
-+ map_name, (otl_tags ? otl_tags : "none"));
-+ }
-+
- fp = DPXFOPEN(map_name, DPX_RES_TYPE_TTFONT);
- if (!fp) {
- fp = DPXFOPEN(map_name, DPX_RES_TYPE_OTFONT);
-@@ -1390,13 +1356,20 @@
- }
-
- if (!sfont) {
-- ERROR("Could not open OpenType/TrueType/dfont font file \"%s\"", map_name);
-+ WARN("Could not open OpenType/TrueType/dfont font file \"%s\"", map_name);
-+ RELEASE(cmap_name);
-+ DPXFCLOSE(fp);
-+ return -1;
- }
- switch (sfont->type) {
- case SFNT_TYPE_TTC:
- offset = ttc_read_offset(sfont, ttc_index);
- if (offset == 0) {
-- ERROR("Invalid TTC index");
-+ WARN("Offset=0 returned for font=%s, TTC_index=%d", map_name, ttc_index);
-+ RELEASE(cmap_name);
-+ sfnt_close(sfont);
-+ DPXFCLOSE(fp);
-+ return -1;
- }
- break;
- case SFNT_TYPE_TRUETYPE:
-@@ -1407,41 +1380,79 @@
- offset = sfont->offset;
- break;
- default:
-- ERROR("Not a OpenType/TrueType/TTC font?: %s", map_name);
-+ WARN("Not a OpenType/TrueType/TTC font?: %s", map_name);
-+ RELEASE(cmap_name);
-+ sfnt_close(sfont);
-+ DPXFCLOSE(fp);
-+ return -1;
- break;
- }
-
-- if (sfnt_read_table_directory(sfont, offset) < 0)
-- ERROR("Could not read OpenType/TrueType table directory.");
-+ if (sfnt_read_table_directory(sfont, offset) < 0) {
-+ WARN("Could not read OpenType/TrueType table directory: %s", map_name);
-+ RELEASE(cmap_name);
-+ sfnt_close(sfont);
-+ DPXFCLOSE(fp);
-+ return -1;
-+ }
-
-+ {
-+ struct tt_maxp_table *maxp;
-
-- if (otl_tags) {
-- /* tounicode_add here is later refered by otf_create_ToUnicode_stream()
-- * for finding additional CID to Unicode mapping entries required by
-- * OTL gsub substitution.
-- */
-- tounicode_add_name = NEW(strlen(map_name)+strlen(",000-UCS32-Add")+1, char);
-- sprintf(tounicode_add_name, "%s,%03d-UCS32-Add", map_name, ttc_index);
-- tounicode_add_id = CMap_cache_find(tounicode_add_name);
-- if (tounicode_add_id >= 0)
-- tounicode_add = CMap_cache_get(tounicode_add_id);
-- else {
-- tounicode_add = CMap_new();
-- CMap_set_name (tounicode_add, tounicode_add_name);
-- CMap_set_type (tounicode_add, CMAP_TYPE_TO_UNICODE);
-- CMap_set_wmode(tounicode_add, 0);
-- CMap_add_codespacerange(tounicode_add, srange_min, srange_max, 2);
-- CMap_set_CIDSysInfo(tounicode_add, &CSI_UNICODE);
-- CMap_add_bfchar(tounicode_add, srange_min, 2, srange_max, 2);
-- tounicode_add_id = CMap_cache_add(tounicode_add);
-- }
-- RELEASE(tounicode_add_name);
-+ maxp = tt_read_maxp_table(sfont);
-+ num_glyphs = (card16) maxp->numGlyphs;
-+ RELEASE(maxp);
- }
-
-+ GIDToCIDMap = NEW(num_glyphs, uint16_t);
-+ memset(GIDToCIDMap, 0, num_glyphs*sizeof(uint16_t));
- if (sfont->type == SFNT_TYPE_POSTSCRIPT) {
-- is_cidfont = handle_CIDFont(sfont, &GIDToCIDMap, &csi);
-+ cff_font *cffont;
-+ card16 gid;
-+
-+ offset = sfnt_find_table_pos(sfont, "CFF ");
-+ cffont = cff_open(sfont->stream, offset, 0);
-+ if (!cffont) {
-+ RELEASE(cmap_name);
-+ RELEASE(GIDToCIDMap);
-+ sfnt_close(sfont);
-+ DPXFCLOSE(fp);
-+ return -1;
-+ }
-+ if (!(cffont->flag & FONTTYPE_CIDFONT)) {
-+ csi.registry = strdup("Adobe");
-+ csi.ordering = strdup("Identity");
-+ csi.supplement = 0;
-+ for (gid = 0; gid < num_glyphs; gid++) {
-+ GIDToCIDMap[gid] = gid;
-+ }
-+ } else {
-+ if (!cff_dict_known(cffont->topdict, "ROS")) {
-+ csi.registry = strdup("Adobe");
-+ csi.ordering = strdup("Identity");
-+ csi.supplement = 0;
-+ } else {
-+ card16 reg, ord;
-+
-+ reg = (card16) cff_dict_get(cffont->topdict, "ROS", 0);
-+ ord = (card16) cff_dict_get(cffont->topdict, "ROS", 1);
-+ csi.registry = cff_get_string(cffont, reg);
-+ csi.ordering = cff_get_string(cffont, ord);
-+ csi.supplement = (int) cff_dict_get(cffont->topdict, "ROS", 2);
-+ }
-+ cff_read_charsets(cffont);
-+ create_GIDToCIDMap(GIDToCIDMap, num_glyphs, cffont);
-+ }
-+ cff_close(cffont);
- } else {
-- is_cidfont = 0;
-+ uint16_t gid;
-+
-+ csi.registry = strdup("Adobe");
-+ csi.ordering = strdup("Identity");
-+ csi.supplement = 0;
-+ for (gid = 0; gid < num_glyphs; gid++) {
-+ GIDToCIDMap[gid] = gid;
-+ }
- }
-
- ttcmap = tt_cmap_read(sfont, 3, 10); /* Microsoft UCS4 */
-@@ -1449,63 +1460,122 @@
- ttcmap = tt_cmap_read(sfont, 3, 1); /* Microsoft UCS2 */
- if (!ttcmap) {
- ttcmap = tt_cmap_read(sfont, 0, 3); /* Unicode 2.0 or later */
--#if defined(LIBDPX)
-- if (!ttcmap && dpx_conf.verbose_level > VERBOSE_LEVEL_MIN) {
--#else
-- if (!ttcmap) {
--#endif /* LIBDPX */
-- ERROR("Unable to read OpenType/TrueType Unicode cmap table.");
-- }
- }
- }
-- if (wmode == 1) {
-- gsub_vert = otl_gsub_new();
-- if (otl_gsub_add_feat(gsub_vert, "*", "*", "vrt2", sfont) < 0) {
-- if (otl_gsub_add_feat(gsub_vert, "*", "*", "vert", sfont) < 0) {
-- WARN("GSUB feature vrt2/vert not found.");
-- otl_gsub_release(gsub_vert);
-- gsub_vert = NULL;
-+
-+ if (ttcmap) {
-+ CMap *cmap = NULL;
-+ int32_t *map_base, *map_sub;
-+ otl_gsub *gsub_vert = NULL;
-+ otl_gsub *gsub_list = NULL;
-+ uint32_t gid;
-+
-+ if (wmode == 1) {
-+ gsub_vert = otl_gsub_new();
-+ if (otl_gsub_add_feat(gsub_vert, "*", "*", "vrt2", sfont) < 0) {
-+ if (otl_gsub_add_feat(gsub_vert, "*", "*", "vert", sfont) < 0) {
-+ WARN("GSUB feature vrt2/vert not found.");
-+ otl_gsub_release(gsub_vert);
-+ gsub_vert = NULL;
-+ } else {
-+ otl_gsub_select(gsub_vert, "*", "*", "vert");
-+ }
- } else {
-- otl_gsub_select(gsub_vert, "*", "*", "vert");
-+ otl_gsub_select(gsub_vert, "*", "*", "vrt2");
- }
- } else {
-- otl_gsub_select(gsub_vert, "*", "*", "vrt2");
-+ gsub_vert = NULL;
- }
-- } else {
-- gsub_vert = NULL;
-- }
-- if (otl_tags) {
-- gsub_list = otl_gsub_new();
-- if (otl_gsub_add_feat_list(gsub_list, otl_tags, sfont) < 0) {
-- WARN("Readin GSUB feature table(s) failed for \"%s\"", otl_tags);
-+ if (otl_tags) {
-+ gsub_list = otl_gsub_new();
-+ if (otl_gsub_add_feat_list(gsub_list, otl_tags, sfont) < 0) {
-+ WARN("Reading GSUB feature table(s) failed for \"%s\"", otl_tags);
-+ } else {
-+ otl_gsub_set_chain(gsub_list, otl_tags);
-+ }
- } else {
-- otl_gsub_set_chain(gsub_list, otl_tags);
-+ gsub_list = NULL;
- }
-- } else {
-- gsub_list = NULL;
-+ cmap = CMap_new();
-+ CMap_set_name(cmap, cmap_name);
-+ CMap_set_type(cmap, CMAP_TYPE_CODE_TO_CID);
-+ CMap_set_wmode(cmap, wmode);
-+ CMap_add_codespacerange(cmap, lrange_min, lrange_max, 4);
-+ CMap_set_CIDSysInfo(cmap, &csi);
-+ map_base = NEW(num_glyphs, int32_t);
-+ map_sub = NEW(num_glyphs, int32_t);
-+ for (gid = 0; gid < num_glyphs; gid++) {
-+ map_base[gid] = -1;
-+ map_sub[gid] = -1;
-+ }
-+ switch (ttcmap->format) {
-+ case 12:
-+ load_cmap12(ttcmap->map, GIDToCIDMap, num_glyphs,
-+ gsub_vert, gsub_list,
-+ cmap, map_base, map_sub);
-+ break;
-+ case 4:
-+ load_cmap4(ttcmap->map, GIDToCIDMap, num_glyphs,
-+ gsub_vert, gsub_list,
-+ cmap, map_base, map_sub);
-+ break;
-+ }
-+ if (gsub_vert)
-+ otl_gsub_release(gsub_vert);
-+ if (gsub_list)
-+ otl_gsub_release(gsub_list);
-+ tt_cmap_release(ttcmap);
-+
-+ if (otl_tags) {
-+ CMap *tounicode = NULL;
-+ char *tounicode_name;
-+ int tounicode_id;
-+
-+ tounicode_name = NEW(strlen(map_name)+strlen(",000-UCS32-Add")+1, char);
-+ sprintf(tounicode_name, "%s,%03d-UCS32-Add", map_name, ttc_index);
-+ tounicode_id = CMap_cache_find(tounicode_name);
-+ if (tounicode_id >= 0)
-+ tounicode = CMap_cache_get(tounicode_id);
-+ else {
-+ tounicode = CMap_new();
-+ CMap_set_name (tounicode, tounicode_name);
-+ CMap_set_type (tounicode, CMAP_TYPE_TO_UNICODE);
-+ CMap_set_wmode(tounicode, 0);
-+ CMap_add_codespacerange(tounicode, srange_min, srange_max, 2);
-+ CMap_set_CIDSysInfo(tounicode, &CSI_UNICODE);
-+ CMap_add_bfchar(tounicode, srange_min, 2, srange_max, 2);
-+ tounicode_id = CMap_cache_add(tounicode);
-+ }
-+ RELEASE(tounicode_name);
-+
-+ for (gid = 0; gid < num_glyphs; gid++) {
-+ uint16_t cid = GIDToCIDMap[gid];
-+ unsigned char src[2], dst[4];
-+ if (cid > 0) {
-+ int32_t ch = UC_is_valid(map_base[gid]) ? map_base[gid] : map_sub[gid];
-+ if (UC_is_valid(ch)) {
-+ unsigned char *p = dst;
-+ unsigned char *endptr = dst + 4;
-+ size_t len;
-+ src[0] = (cid >> 8) & 0xff;
-+ src[1] = cid & 0xff;
-+ len = UC_UTF16BE_encode_char(ch, &p, endptr);
-+ if (len > 0) {
-+ CMap_add_bfchar(tounicode, src, 2, dst, len);
-+ }
-+ }
-+ }
-+ }
-+ }
-+ cmap_id = CMap_cache_add(cmap);
- }
-- cmap_id = load_base_CMap(cmap_name, tounicode_add, wmode,
-- (is_cidfont ? &csi : NULL), GIDToCIDMap,
-- gsub_vert, gsub_list, ttcmap);
-- if (cmap_id < 0)
-- ERROR("Failed to read OpenType/TrueType cmap table.");
-- if (gsub_vert)
-- otl_gsub_release(gsub_vert);
-- gsub_vert = NULL;
-- if (gsub_list)
-- otl_gsub_release(gsub_list);
-- gsub_list = NULL;
-
- RELEASE(cmap_name);
-- if (GIDToCIDMap)
-- RELEASE(GIDToCIDMap);
-- if (is_cidfont) {
-- if (csi.registry)
-- RELEASE(csi.registry);
-- if (csi.ordering)
-- RELEASE(csi.ordering);
-- }
-- tt_cmap_release(ttcmap);
-+ RELEASE(GIDToCIDMap);
-+ if (csi.registry)
-+ RELEASE(csi.registry);
-+ if (csi.ordering)
-+ RELEASE(csi.ordering);
- sfnt_close(sfont);
- DPXFCLOSE(fp);
-
-@@ -1515,14 +1585,11 @@
- int
- otf_try_load_GID_to_CID_map (const char *map_name, int ttc_index, int wmode)
- {
-- int cmap_id = -1;
-- sfnt *sfont;
-- ULONG offset = 0;
-- char *cmap_name = NULL;
-- FILE *fp = NULL;
-- CIDSysInfo csi = {NULL, NULL, 0};
-- int is_cidfont = 0;
-- unsigned char *GIDToCIDMap = NULL;
-+ int cmap_id = -1;
-+ sfnt *sfont = NULL;
-+ ULONG offset = 0;
-+ char *cmap_name = NULL;
-+ FILE *fp = NULL;
-
- if (!map_name)
- return -1;
-@@ -1559,13 +1626,20 @@
- }
-
- if (!sfont) {
-- ERROR("Could not open OpenType/TrueType/dfont font file \"%s\"", map_name);
-+ WARN("Could not open OpenType/TrueType/dfont font file \"%s\"", map_name);
-+ RELEASE(cmap_name);
-+ DPXFCLOSE(fp);
-+ return -1;
- }
- switch (sfont->type) {
- case SFNT_TYPE_TTC:
- offset = ttc_read_offset(sfont, ttc_index);
- if (offset == 0) {
-- ERROR("Invalid TTC index");
-+ WARN("Invalid TTC index for font \"%s\": %d", map_name, ttc_index);
-+ sfnt_close(sfont);
-+ DPXFCLOSE(fp);
-+ RELEASE(cmap_name);
-+ return -1;
- }
- break;
- case SFNT_TYPE_TRUETYPE:
-@@ -1576,12 +1650,20 @@
- offset = sfont->offset;
- break;
- default:
-- ERROR("Not a OpenType/TrueType/TTC font?: %s", map_name);
-- break;
-+ WARN("Not a OpenType/TrueType/TTC font?: %s", map_name);
-+ sfnt_close(sfont);
-+ DPXFCLOSE(fp);
-+ RELEASE(cmap_name);
-+ return -1;
- }
-
-- if (sfnt_read_table_directory(sfont, offset) < 0)
-- ERROR("Could not read OpenType/TrueType table directory.");
-+ if (sfnt_read_table_directory(sfont, offset) < 0) {
-+ WARN("Could not read OpenType/TrueType table directory: %s", map_name);
-+ sfnt_close(sfont);
-+ DPXFCLOSE(fp);
-+ RELEASE(cmap_name);
-+ return -1;
-+ }
- if (sfont->type != SFNT_TYPE_POSTSCRIPT) {
- RELEASE(cmap_name);
- sfnt_close(sfont);
-@@ -1590,41 +1672,71 @@
- }
-
- /* Read GID-to-CID mapping if CFF OpenType is found. */
-- is_cidfont = handle_CIDFont(sfont, &GIDToCIDMap, &csi);
-- if (is_cidfont) {
-- if (GIDToCIDMap) {
-- CMap *cmap;
-- int32_t gid;
-- const unsigned char csrange[4] = {0x00, 0x00, 0xff, 0xff};
-+ if (sfont->type == SFNT_TYPE_POSTSCRIPT) {
-+ cff_font *cffont;
-+ struct tt_maxp_table *maxp;
-+ const unsigned char csrange[4] = {0x00, 0x00, 0xff, 0xff};
-+ uint16_t num_glyphs = 0;
-+
-+ maxp = tt_read_maxp_table(sfont);
-+ num_glyphs = (card16) maxp->numGlyphs;
-+ RELEASE(maxp);
-+
-+ offset = sfnt_find_table_pos(sfont, "CFF ");
-+ cffont = cff_open(sfont->stream, offset, 0);
-+ if (cffont && cffont->flag & FONTTYPE_CIDFONT) {
-+ CMap *cmap;
-+ uint16_t gid;
-+ uint16_t *GIDToCIDMap = NULL;
-+ CIDSysInfo csi = {NULL, NULL, 0};
-+
-+ if (!cff_dict_known(cffont->topdict, "ROS")) {
-+ csi.registry = strdup("Adobe");
-+ csi.ordering = strdup("Identity");
-+ csi.supplement = 0;
-+ } else {
-+ card16 reg, ord;
-
-+ reg = (card16) cff_dict_get(cffont->topdict, "ROS", 0);
-+ ord = (card16) cff_dict_get(cffont->topdict, "ROS", 1);
-+ csi.registry = cff_get_string(cffont, reg);
-+ csi.ordering = cff_get_string(cffont, ord);
-+ csi.supplement = (int) cff_dict_get(cffont->topdict, "ROS", 2);
-+ }
-+ cff_read_charsets(cffont);
-+ GIDToCIDMap = NEW(num_glyphs, uint16_t);
-+ memset(GIDToCIDMap, 0, num_glyphs*sizeof(uint16_t));
-+ create_GIDToCIDMap(GIDToCIDMap, num_glyphs, cffont);
- cmap = CMap_new();
- CMap_set_name (cmap, cmap_name);
- CMap_set_type (cmap, CMAP_TYPE_CODE_TO_CID);
- CMap_set_wmode(cmap, wmode);
- CMap_add_codespacerange(cmap, &csrange[0], &csrange[2], 2);
- CMap_set_CIDSysInfo(cmap, &csi);
--
-- for (gid = 0; gid < 65536; gid++) {
-- unsigned char src[2];
-+ for (gid = 0; gid < num_glyphs; gid++) {
-+ unsigned char src[2], dst[2];
- src[0] = (gid >> 8) & 0xff;
- src[1] = gid & 0xff;
-- CMap_add_bfchar(cmap, src, 2, &GIDToCIDMap[gid*2], 2);
-+ dst[0] = (GIDToCIDMap[gid] >> 8) & 0xff;
-+ dst[1] = GIDToCIDMap[gid] & 0xff;
-+ CMap_add_bfchar(cmap, src, 2, dst, 2);
- }
- cmap_id = CMap_cache_add(cmap);
- if (dpx_conf.verbose_level > VERBOSE_LEVEL_MIN) {
- MESG("\n");
- MESG("otf_cmap>> Creating GID-to-CID mapping for font=\"%s\"\n", map_name);
- }
-+ RELEASE(GIDToCIDMap);
-+ if (csi.registry)
-+ RELEASE(csi.registry);
-+ if (csi.ordering)
-+ RELEASE(csi.ordering);
- }
-- /* Identity mapping for null GIDToCIDMap */
-+ if (cffont)
-+ cff_close(cffont);
- }
-+
- RELEASE(cmap_name);
-- if (GIDToCIDMap)
-- RELEASE(GIDToCIDMap);
-- if (csi.registry)
-- RELEASE(csi.registry);
-- if (csi.ordering)
-- RELEASE(csi.ordering);
- sfnt_close(sfont);
- DPXFCLOSE(fp);
-
-diff -Naur a/texk/dvipdfm-x/tt_gsub.c b/texk/dvipdfm-x/tt_gsub.c
---- a/texk/dvipdfm-x/tt_gsub.c 2018-12-21 03:39:51.000000000 +0000
-+++ b/texk/dvipdfm-x/tt_gsub.c 2019-05-31 22:00:04.009964032 +0100
-@@ -1,6 +1,6 @@
- /* This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
-
-- Copyright (C) 2002-2018 by Jin-Hwan Cho and Shunsaku Hirata,
-+ Copyright (C) 2002-2019 by Jin-Hwan Cho and Shunsaku Hirata,
- the dvipdfmx project team.
-
- This program is free software; you can redistribute it and/or modify
-@@ -977,10 +977,11 @@
-
- sfnt_seek_set(sfont, offset);
- clt_read_feature_table(&feature_table, sfont);
-+#if 0
- if (feature_table.FeatureParams != 0) {
- ERROR("unrecognized FeatureParams");
- }
--
-+#endif
- /* Lookup table */
- for (i = 0; i < feature_table.LookupListIndex.count; i++) {
- struct clt_lookup_table lookup_table;
-@@ -1680,98 +1681,303 @@
- return retval;
- }
-
--#if 0
-+#if 1
-+#include "unicode.h"
-+
-+#ifndef is_used_char2
-+#define is_used_char2(b,c) (((b)[(c)/8]) & (1 << (7-((c)%8))))
-+#endif
-+
-+static int
-+add_glyph_if_valid (CMap *cmap, char *used_chars,
-+ int32_t *map_base, int32_t *map_sub, USHORT num_glyphs,
-+ uint16_t *GIDToCIDMap, USHORT gid, USHORT gid_sub)
-+{
-+ int count = 0;
-+ unsigned char src[2], dst[4];
-+ unsigned char *p = dst, *endptr = dst + 4;
-+ size_t len;
-+ uint16_t cid_sub;
-+
-+ if (gid_sub >= num_glyphs || gid >= num_glyphs)
-+ return 0;
-+
-+ cid_sub = GIDToCIDMap[gid_sub];
-+ if (is_used_char2(used_chars, cid_sub)) {
-+ int32_t ch = map_base[gid];
-+ if (UC_is_valid(ch)) {
-+ src[0] = (cid_sub >> 8) & 0xff;
-+ src[1] = cid_sub & 0xff;
-+ len = UC_UTF16BE_encode_char(ch, &p, endptr);
-+ CMap_add_bfchar(cmap, src, 2, dst, len);
-+ used_chars[cid_sub / 8] &= ~(1 << (7 - (cid_sub % 8)));
-+ count = 1;
-+ } else {
-+ ch = map_sub[gid];
-+ if (UC_is_valid(ch)) {
-+ src[0] = (cid_sub >> 8) & 0xff;
-+ src[1] = cid_sub & 0xff;
-+ len = UC_UTF16BE_encode_char(ch, &p, endptr);
-+ CMap_add_bfchar(cmap, src, 2, dst, len);
-+ used_chars[cid_sub / 8] &= ~(1 << (7 - (cid_sub % 8)));
-+ count = 1;
-+ }
-+ }
-+ }
-+ return count;
-+}
-+
- static int
--otl_gsub_dump_single (struct otl_gsub_subtab *subtab)
-+add_ToUnicode_single (CMap *cmap, char *used_chars,
-+ struct otl_gsub_subtab *subtab,
-+ int32_t *map_base, int32_t *map_sub, USHORT num_glyphs,
-+ uint16_t *GIDToCIDMap)
- {
-- int gid, idx;
-+ int count = 0;
-+ USHORT i, idx, gid;
-+ USHORT gid_sub;
-
- ASSERT(subtab);
-
- if (subtab->SubstFormat == 1) {
- struct otl_gsub_single1 *data;
-+ struct clt_coverage *cov;
-
- data = (subtab->table).single1;
-- for (gid = 0; gid < 0x10000; gid++) {
-- idx = clt_lookup_coverage(&data->coverage, gid);
-- if (idx >= 0) {
-- fprintf(stdout, "substitute \\%u by \\%u;\n",
-- (USHORT) gid, (USHORT) (gid + data->DeltaGlyphID));
-+ cov = &data->coverage;
-+ switch (cov->format) {
-+ case 1: /* list */
-+ for (idx = 0; idx < cov->count; idx++) {
-+ gid = cov->list[idx];
-+ gid_sub = gid + data->DeltaGlyphID;
-+ count += add_glyph_if_valid(cmap, used_chars,
-+ map_base, map_sub, num_glyphs,
-+ GIDToCIDMap, gid, gid_sub);
- }
-+ break;
-+ case 2: /* range */
-+ for (i = 0; i < cov->count; i++) {
-+ for (gid = cov->range[i].Start;
-+ gid <= cov->range[i].End && gid < num_glyphs; gid++) {
-+ idx = cov->range[i].StartCoverageIndex + gid - cov->range[i].Start;
-+ gid_sub = gid + data->DeltaGlyphID;
-+ count += add_glyph_if_valid(cmap, used_chars,
-+ map_base, map_sub, num_glyphs,
-+ GIDToCIDMap, gid, gid_sub);
-+ }
-+ }
-+ break;
- }
- } else if (subtab->SubstFormat == 2) {
- struct otl_gsub_single2 *data;
-+ struct clt_coverage *cov;
-
- data = (subtab->table).single2;
-- for (gid = 0; gid < 0x10000; gid++) {
-- idx = clt_lookup_coverage(&data->coverage, gid);
-- if (idx >= 0 &&
-- idx < data->GlyphCount) {
-- fprintf(stdout, "substitute \\%u by \\%u;\n",
-- (USHORT) gid, (data->Substitute)[idx]);
-+ cov = &data->coverage;
-+ switch (cov->format) {
-+ case 1: /* list */
-+ for (idx = 0; idx < cov->count; idx++) {
-+ gid = cov->list[idx];
-+ if (idx >= 0 && idx < data->GlyphCount) {
-+ gid_sub = (data->Substitute)[idx];
-+ count += add_glyph_if_valid(cmap, used_chars,
-+ map_base, map_sub, num_glyphs,
-+ GIDToCIDMap, gid, gid_sub);
-+ }
- }
-+ break;
-+ case 2: /* range */
-+ for (i = 0; i < cov->count; i++) {
-+ for (gid = cov->range[i].Start;
-+ gid <= cov->range[i].End && gid < num_glyphs; gid++) {
-+ idx = cov->range[i].StartCoverageIndex + gid - cov->range[i].Start;
-+ if (idx >= 0 && idx < data->GlyphCount) {
-+ gid_sub = (data->Substitute)[idx];
-+ count += add_glyph_if_valid(cmap, used_chars,
-+ map_base, map_sub, num_glyphs,
-+ GIDToCIDMap, gid, gid_sub);
-+ }
-+ }
-+ }
-+ break;
- }
- }
-
-- return 0;
-+ return count;
- }
-
--static int
--otl_gsub_dump_alternate (struct otl_gsub_subtab *subtab)
-+static int32_t
-+add_alternate1_inverse_map (CMap *cmap, char *used_chars,
-+ int32_t *map_base, int32_t *map_sub, USHORT num_glyphs,
-+ uint16_t *GIDToCIDMap, USHORT gid, int idx,
-+ struct otl_gsub_alternate1 *data)
- {
-- int gid, idx;
-+ int32_t count = 0;
-+
-+ if (idx >= 0 && idx < data->AlternateSetCount) {
-+ struct otl_gsub_altset *altset;
-+ USHORT i;
-+
-+ altset = &(data->AlternateSet[idx]);
-+ if (altset->GlyphCount == 0)
-+ return count;
-+ for (i = 0; i < altset->GlyphCount; i++) {
-+ USHORT gid_alt = altset->Alternate[i];
-+ count += add_glyph_if_valid(cmap, used_chars,
-+ map_base, map_sub, num_glyphs,
-+ GIDToCIDMap, gid, gid_alt);
-+ }
-+ }
-+ return count;
-+}
-+
-+static int32_t
-+add_ToUnicode_alternate (CMap *cmap, char *used_chars,
-+ struct otl_gsub_subtab *subtab,
-+ int32_t *map_base, int32_t *map_sub, USHORT num_glyphs,
-+ uint16_t *GIDToCIDMap)
-+{
-+ int32_t count = 0;
-+ USHORT i, gid, idx;
-
- ASSERT(subtab);
-
- if (subtab->SubstFormat == 1) {
- struct otl_gsub_alternate1 *data;
--
-+ struct clt_coverage *cov;
- data = subtab->table.alternate1;
-- for (gid = 0; gid < 0x10000; gid++) {
-- idx = clt_lookup_coverage(&data->coverage, gid);
-- if (idx >= 0 && idx < data->AlternateSetCount) {
-- struct otl_gsub_altset *altset;
-- USHORT i;
-- altset = &(data->AlternateSet[idx]);
-- if (altset->GlyphCount == 0)
-- continue;
-- fprintf(stdout, "substitute \\%u from [", (USHORT) gid);
-- for (i = 0; i < altset->GlyphCount; i++) {
-- fprintf(stdout, " \\%u", altset->Alternate[i]);
-+ cov = &data->coverage;
-+ switch (cov->format) {
-+ case 1: /* list */
-+ for (idx = 0; idx < cov->count; idx++) {
-+ gid = cov->list[idx];
-+ if (gid < num_glyphs) {
-+ count += add_alternate1_inverse_map(cmap, used_chars,
-+ map_base, map_sub, num_glyphs,
-+ GIDToCIDMap, gid, idx, data);
-+ }
-+ }
-+ break;
-+ case 2: /* range */
-+ for (i = 0; i < cov->count; i++) {
-+ for (gid = cov->range[i].Start;
-+ gid <= cov->range[i].End && gid < num_glyphs; gid++) {
-+ idx = cov->range[i].StartCoverageIndex + gid - cov->range[i].Start;
-+ count += add_alternate1_inverse_map(cmap, used_chars,
-+ map_base, map_sub, num_glyphs,
-+ GIDToCIDMap, gid, idx, data);
- }
-- fprintf(stdout, " ];\n");
- }
-+ break;
- }
- }
-+ return count;
-+}
-
-- return 0;
-+static int32_t
-+add_ligature1_inverse_map (CMap *cmap, char *used_chars,
-+ int32_t *map_base, int32_t *map_sub, USHORT num_glyphs,
-+ uint16_t *GIDToCIDMap, USHORT gid_1, int idx,
-+ struct otl_gsub_ligature1 *data)
-+{
-+ int32_t count = 0;
-+
-+ if (idx >= 0 && idx < data->LigSetCount) {
-+ struct otl_gsub_ligset *ligset;
-+ USHORT i, j;
-+
-+ ligset = &(data->LigatureSet[idx]);
-+ for (j = 0; j < ligset->LigatureCount; j++) {
-+ USHORT gid_sub = ligset->Ligature[j].LigGlyph;
-+ if (gid_sub < num_glyphs) {
-+ uint16_t cid = GIDToCIDMap[gid_sub];
-+ if (is_used_char2(used_chars, cid)) {
-+ int32_t ch, *ucv;
-+ USHORT comp_count = ligset->Ligature[j].CompCount;
-+ int fail_count = 0;
-+
-+ ucv = NEW(comp_count, int32_t);
-+ ch = UC_is_valid(map_base[gid_1]) ? map_base[gid_1] : map_sub[gid_1];
-+ ucv[0] = ch;
-+ fail_count += UC_is_valid(ch) ? 0 : 1;
-+ for (i = 0; i < ligset->Ligature[j].CompCount - 1; i++) {
-+ USHORT gid = ligset->Ligature[j].Component[i];
-+ if (gid < num_glyphs) {
-+ ch = UC_is_valid(map_base[gid]) ? map_base[gid] : map_sub[gid];
-+ ucv[i+1] = ch;
-+ fail_count += UC_is_valid(ch) ? 0 : 1;
-+ } else {
-+ fail_count += 1;
-+ }
-+ }
-+ if (fail_count == 0) {
-+ unsigned char src[2], *dst;
-+ unsigned char *p, *endptr;
-+ size_t len = 0;
-+
-+ src[0] = (cid >> 8) & 0xff;
-+ src[1] = cid & 0xff;
-+ dst = NEW(comp_count*4, unsigned char);
-+ p = dst;
-+ endptr = dst + comp_count * 4;
-+ for (i = 0; i < comp_count; i++) {
-+ len += UC_UTF16BE_encode_char(ucv[i], &p, endptr);
-+ }
-+ CMap_add_bfchar(cmap, src, 2, dst, len);
-+ used_chars[cid / 8] &= ~(1 << (7 - (cid % 8)));
-+ count++;
-+ RELEASE(dst);
-+ }
-+ RELEASE(ucv);
-+ }
-+ }
-+ }
-+ }
-+
-+ return count;
- }
-
--static int
--otl_gsub_dump_ligature (struct otl_gsub_subtab *subtab)
-+static int32_t
-+add_ToUnicode_ligature (CMap *cmap, char *used_chars,
-+ struct otl_gsub_subtab *subtab,
-+ int32_t *map_base, int32_t *map_sub, USHORT num_glyphs,
-+ uint16_t *GIDToCIDMap)
- {
-- int gid, idx;
-+ int32_t count = 0;
-+ USHORT i, idx, gid;
-
- ASSERT(subtab);
-
- if (subtab->SubstFormat == 1) {
- struct otl_gsub_ligature1 *data;
-+ struct clt_coverage *cov;
-
- data = subtab->table.ligature1;
-- for (gid = 0; gid < 0x10000; gid++) {
-- idx = clt_lookup_coverage(&data->coverage, gid);
-- if (idx >= 0 && idx < data->LigSetCount) {
-- struct otl_gsub_ligset *ligset;
-- USHORT i, j;
-- ligset = &(data->LigatureSet[idx]);
-- for (j = 0; j < ligset->LigatureCount; j++) {
-- fprintf(stdout, "substitute \\%u", (USHORT) gid);
-- for (i = 0; i < ligset->Ligature[j].CompCount - 1; i++) {
-- fprintf(stdout, " \\%u", ligset->Ligature[j].Component[i]);
-+ cov = &data->coverage;
-+ switch (cov->format) {
-+ case 1: /* list */
-+ for (idx = 0; idx < cov->count; idx++) {
-+ gid = cov->list[idx];
-+ if (gid < num_glyphs) {
-+ count += add_ligature1_inverse_map(cmap, used_chars,
-+ map_base, map_sub, num_glyphs,
-+ GIDToCIDMap, gid, idx, data);
-+ }
-+ }
-+ break;
-+ case 2: /* range */
-+ for (i = 0; i < cov->count; i++) {
-+ for (gid = cov->range[i].Start;
-+ gid <= cov->range[i].End && gid < num_glyphs; gid++) {
-+ idx = cov->range[i].StartCoverageIndex + gid - cov->range[i].Start;
-+ if (gid < num_glyphs) {
-+ count += add_ligature1_inverse_map(cmap, used_chars,
-+ map_base, map_sub, num_glyphs,
-+ GIDToCIDMap, gid, idx, data);
- }
-- fprintf(stdout, " by \\%u;\n", ligset->Ligature[j].LigGlyph);
- }
- }
-+ break;
- }
- }
-
-@@ -1779,48 +1985,44 @@
- }
-
- int
--otl_gsub_dump (otl_gsub *gsub_list,
-- const char *script, const char *language, const char *feature)
-+otl_gsub_add_ToUnicode (CMap *cmap, char *used_chars,
-+ int32_t *map_base, int32_t *map_sub, USHORT num_glyphs,
-+ uint16_t *GIDToCIDMap, sfnt *sfont)
- {
-- int error = -1;
-+ int count = 0;
-+ otl_gsub *gsub_list;
- struct otl_gsub_tab *gsub;
- struct otl_gsub_subtab *subtab;
-- int sel, i, j;
--
-- if (!gsub_list)
-- return -1;
-+ int i, j;
-
-- sel = gsub_list->select;
-- error = otl_gsub_select(gsub_list, script, language, feature);
-- if (error < 0) {
-- ERROR("GSUB feature %s.%s.%s not found.", script, language, feature);
-- }
--
-- i = gsub_list->select;
-- if (i < 0 || i >= gsub_list->num_gsubs) {
-- ERROR("GSUB not selected...");
-- return -1;
-- }
-- gsub = &(gsub_list->gsubs[i]);
-+ gsub_list = otl_gsub_new();
-+ otl_gsub_add_feat(gsub_list, "*", "*", "*", sfont);
-
-- for (j = 0;
-- !error &&
-- j < gsub->num_subtables; j++) {
-- subtab = &(gsub->subtables[j]);
-- switch ((int) subtab->LookupType){
-- case OTL_GSUB_TYPE_SINGLE:
-- error = otl_gsub_dump_single(subtab);
-- break;
-- case OTL_GSUB_TYPE_ALTERNATE:
-- error = otl_gsub_dump_alternate(subtab);
-- break;
-- case OTL_GSUB_TYPE_LIGATURE:
-- error = otl_gsub_dump_ligature(subtab);
-- break;
-+ for (i = 0; i < gsub_list->num_gsubs; i++) {
-+ gsub = &(gsub_list->gsubs[i]);
-+ for (j = 0; j < gsub->num_subtables; j++) {
-+ subtab = &(gsub->subtables[j]);
-+ switch ((int) subtab->LookupType){
-+ case OTL_GSUB_TYPE_SINGLE:
-+ count += add_ToUnicode_single(cmap, used_chars, subtab,
-+ map_base, map_sub, num_glyphs,
-+ GIDToCIDMap);
-+ break;
-+ case OTL_GSUB_TYPE_ALTERNATE:
-+ count += add_ToUnicode_alternate(cmap, used_chars, subtab,
-+ map_base, map_sub, num_glyphs,
-+ GIDToCIDMap);
-+ break;
-+ case OTL_GSUB_TYPE_LIGATURE:
-+ count += add_ToUnicode_ligature(cmap, used_chars, subtab,
-+ map_base, map_sub, num_glyphs,
-+ GIDToCIDMap);
-+ break;
-+ }
- }
- }
-- gsub_list->select = sel;
-+ otl_gsub_release(gsub_list);
-
-- return error;
-+ return count;
- }
- #endif
-diff -Naur a/texk/dvipdfm-x/tt_gsub.h b/texk/dvipdfm-x/tt_gsub.h
---- a/texk/dvipdfm-x/tt_gsub.h 2018-09-14 04:34:50.000000000 +0100
-+++ b/texk/dvipdfm-x/tt_gsub.h 2019-05-31 22:00:04.009964032 +0100
-@@ -1,6 +1,6 @@
- /* This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
-
-- Copyright (C) 2002-2018 by Jin-Hwan Cho and Shunsaku Hirata,
-+ Copyright (C) 2002-2019 by Jin-Hwan Cho and Shunsaku Hirata,
- the dvipdfmx project team.
-
- This program is free software; you can redistribute it and/or modify
-@@ -23,6 +23,7 @@
-
- #include "sfnt.h"
- #include "otl_opt.h"
-+#include "cmap.h"
-
- typedef struct otl_gsub otl_gsub;
-
-@@ -59,11 +60,7 @@
- extern int otl_gsub_set_chain (otl_gsub *gsub_list, const char *otl_tags);
- extern int otl_gsub_apply_chain (otl_gsub *gsub_list, USHORT *gid);
-
--#if 0
--extern int otl_gsub_dump (otl_gsub *gsub_list,
-- const char *script,
-- const char *language,
-- const char *feature);
--#endif
--
-+extern int otl_gsub_add_ToUnicode (CMap *cmap, char *used_chars,
-+ int32_t *map_base, int32_t *map_sub, USHORT num_glyphs,
-+ uint16_t *GIDToCIDMap, sfnt *sfont);
- #endif /* _TT_GSUB_H_ */
-diff -Naur a/texk/dvipdfm-x/unicode.c b/texk/dvipdfm-x/unicode.c
---- a/texk/dvipdfm-x/unicode.c 2016-01-06 10:13:28.000000000 +0000
-+++ b/texk/dvipdfm-x/unicode.c 2019-05-31 22:00:04.009964032 +0100
-@@ -1,6 +1,6 @@
- /* This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
-
-- Copyright (C) 2002-2016 by Jin-Hwan Cho and Shunsaku Hirata,
-+ Copyright (C) 2002-2019 by Jin-Hwan Cho and Shunsaku Hirata,
- the dvipdfmx project team.
-
- Copyright (C) 1998, 1999 by Mark A. Wicks <mwicks@kettering.edu>
-@@ -123,7 +123,7 @@
- unsigned char *p = *pp;
-
- if (ucv >= 0 && ucv <= 0xFFFF) {
-- if (p + 2 >= endptr)
-+ if (p + 2 > endptr)
- return 0;
- p[0] = (ucv >> 8) & 0xff;
- p[1] = ucv & 0xff;
-@@ -131,7 +131,7 @@
- } else if (ucv >= 0x010000 && ucv <= 0x10FFFF) {
- unsigned short high, low;
-
-- if (p + 4 >= endptr)
-+ if (p + 4 > endptr)
- return 0;
- ucv -= 0x00010000;
- high = (ucv >> UC_SUR_SHIFT) + UC_SUR_HIGH_START;
-@@ -142,7 +142,7 @@
- p[3] = (low & 0xff);
- count = 4;
- } else {
-- if (p + 2 >= endptr)
-+ if (p + 2 > endptr)
- return 0;
- p[0] = (UC_REPLACEMENT_CHAR >> 8) & 0xff;
- p[1] = (UC_REPLACEMENT_CHAR & 0xff);
-@@ -207,25 +207,25 @@
- return 0;
-
- if (ucv < 0x7f) {
-- if (p >= endptr - 1)
-+ if (p + 1 > endptr)
- return 0;
- p[0] = (unsigned char) ucv;
- count = 1;
- } else if (ucv <= 0x7ff) {
-- if (p >= endptr -2)
-+ if (p + 2 > endptr)
- return 0;
- p[0] = (unsigned char) (0xc0 | (ucv >> 6));
- p[1] = (unsigned char) (0x80 | (ucv & 0x3f));
- count = 2;
- } else if (ucv <= 0xffff) {
-- if (p >= endptr - 3)
-+ if (p + 3 > endptr)
- return 0;
- p[0] = (unsigned char) (0xe0 | (ucv >> 12));
- p[1] = (unsigned char) (0x80 | ((ucv >> 6) & 0x3f));
- p[2] = (unsigned char) (0x80 | (ucv & 0x3f));
- count = 3;
- } else if (ucv <= 0x1fffff) {
-- if (p >= endptr - 4)
-+ if (p + 4 > endptr)
- return 0;
- p[0] = (unsigned char) (0xf0 | (ucv >> 18));
- p[1] = (unsigned char) (0x80 | ((ucv >> 12) & 0x3f));
-@@ -233,7 +233,7 @@
- p[3] = (unsigned char) (0x80 | (ucv & 0x3f));
- count = 4;
- } else if (ucv <= 0x3ffffff) {
-- if (p >= endptr - 5)
-+ if (p + 5 > endptr)
- return 0;
- p[0] = (unsigned char) (0xf8 | (ucv >> 24));
- p[1] = (unsigned char) (0x80 | ((ucv >> 18) & 0x3f));
-@@ -242,7 +242,7 @@
- p[4] = (unsigned char) (0x80 | (ucv & 0x3f));
- count = 5;
- } else if (ucv <= 0x7fffffff) {
-- if (p >= endptr - 6)
-+ if (p + 6 > endptr)
- return 0;
- p[0] = (unsigned char) (0xfc | (ucv >> 30));
- p[1] = (unsigned char) (0x80 | ((ucv >> 24) & 0x3f));
-diff -Naur a/texk/dvipsk/ChangeLog b/texk/dvipsk/ChangeLog
---- a/texk/dvipsk/ChangeLog 2019-04-07 02:42:55.000000000 +0100
-+++ b/texk/dvipsk/ChangeLog 2019-05-31 22:00:04.009964032 +0100
-@@ -1,3 +1,9 @@
-+2019-04-30 Karl Berry <karl@tug.org>
-+
-+ * dosection.c (dosection): close PostScript string constant
-+ for long filenames. tex-k mail from Arnaud Blouin,
-+ 24 Apr 2019 13:54:10.
-+
- 2019-04-07 Karl Berry <karl@freefriends.org>
-
- * TeX Live 2019.
-diff -Naur a/texk/dvipsk/dosection.c b/texk/dvipsk/dosection.c
---- a/texk/dvipsk/dosection.c 2019-03-30 01:50:10.000000000 +0000
-+++ b/texk/dvipsk/dosection.c 2019-05-31 22:00:04.009964032 +0100
-@@ -23,7 +23,7 @@
- int np;
- int k;
- integer thispage = 0;
-- char buf[104];
-+ char buf[300]; /* really 253 */
-
- dopsfont(s);
- #ifdef HPS
-@@ -40,7 +40,9 @@
- doubleout(mag);
- numout((integer)DPI);
- numout((integer)VDPI);
-- snprintf(buf, sizeof(buf), "(%.500s)", fulliname);
-+ /* possibly lines in eps files are supposed to be <= 255;
-+ not worth testing the limits merely to output a long file name. */
-+ snprintf(buf, sizeof(buf), "(%.250s)", fulliname);
- cmdout(buf);
- newline();
- cmdout("@start");
-diff -Naur a/texk/web2c/ptexdir/ChangeLog b/texk/web2c/ptexdir/ChangeLog
---- a/texk/web2c/ptexdir/ChangeLog 2019-02-06 11:01:31.000000000 +0000
-+++ b/texk/web2c/ptexdir/ChangeLog 2019-05-31 22:00:04.010964033 +0100
-@@ -1,3 +1,11 @@
-+2019-05-06 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
-+
-+ * ptex-base.ch:
-+ Make appropriate comparison of U+0100 by \if in upTeX.
-+ https://github.com/texjporg/tex-jp-build/issues/68
-+ Re-eval kcatcode of Japanese character token in \if and \ifcat.
-+ https://github.com/texjporg/ptex-manual/issues/4
-+
- 2019-02-03 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
-
- * ptex-base.ch: Ignore newline char after Japanese control
-diff -Naur a/texk/web2c/ptexdir/ptex-base.ch b/texk/web2c/ptexdir/ptex-base.ch
---- a/texk/web2c/ptexdir/ptex-base.ch 2019-02-06 11:00:54.000000000 +0000
-+++ b/texk/web2c/ptexdir/ptex-base.ch 2019-05-31 22:00:04.010964033 +0100
-@@ -59,6 +59,7 @@
- % (2017-09-07) HK pTeX p3.7.2 More restrictions on direction change commands.
- % (2018-01-21) HK Added \ptexversion primitive and co. pTeX p3.8.
- % (2018-04-14) HK pTeX p3.8.1 Bug fix for discontinuous KINSOKU table.
-+% (2019-02-03) HK pTeX p3.8.2 Change \inhibitglue, add \disinhibitglue.
- %
-
- @x
-@@ -324,6 +325,13 @@
- wterm(')');
- @z
-
-+@x
-+@d max_halfword==@"FFFFFFF {largest allowable value in a |halfword|}
-+@y
-+@d max_halfword==@"FFFFFFF {largest allowable value in a |halfword|}
-+@d max_cjk_val=@"10000
-+@z
-+
- @x [8.111] l.2436 - pTeX: check hi/ho
- (mem_top+sup_main_memory>=max_halfword) then bad:=14;
- @y
-@@ -2533,19 +2541,19 @@
- end;
- @y
- if (cur_cmd=kanji)or(cur_cmd=kana)or(cur_cmd=other_kchar) then
-- begin m:=cur_cmd; n:=cur_chr;
-+ begin n:=cur_chr; m:=kcat_code(kcatcodekey(n));
- end
- else if (cur_cmd>active_char)or(cur_chr>255) then
-- begin m:=relax; n:=256;
-+ begin m:=relax; n:=max_cjk_val;
- end
- else begin m:=cur_cmd; n:=cur_chr;
- end;
- get_x_token_or_active_char;
- if (cur_cmd=kanji)or(cur_cmd=kana)or(cur_cmd=other_kchar) then
-- begin cur_cmd:=cur_cmd;
-- end {dummy}
-+ begin cur_cmd:=kcat_code(kcatcodekey(cur_chr));
-+ end
- else if (cur_cmd>active_char)or(cur_chr>255) then
-- begin cur_cmd:=relax; cur_chr:=256;
-+ begin cur_cmd:=relax; cur_chr:=max_cjk_val;
- end;
- @z
-
-diff -Naur a/texk/web2c/uptexdir/ChangeLog b/texk/web2c/uptexdir/ChangeLog
---- a/texk/web2c/uptexdir/ChangeLog 2019-02-23 01:59:36.000000000 +0000
-+++ b/texk/web2c/uptexdir/ChangeLog 2019-05-31 22:00:04.010964033 +0100
-@@ -1,3 +1,28 @@
-+2019-05-25 TANAKA Takuji <ttk@t-lab.opal.ne.jp>
-+
-+ * uptex-m.ch:
-+ Correct upTeX_revision ".25", upTeX_version_string "-u1.25".
-+
-+2019-05-06 TANAKA Takuji <ttk@t-lab.opal.ne.jp>
-+
-+ * uptex-m.ch, upbibtex.ch, updvitype.ch, uppltotf.ch, uptftopl.ch,
-+ uptex_version.h: upTeX version u1.25.
-+ * kanji.c, kanji.h:
-+ Fix bug of kcatcode at Fullwidth ASCII variants and
-+ Halfwidth Katakana variants from Yusuke Terada san:
-+ https://github.com/texjporg/tex-jp-build/pull/79
-+ Set default internal encoding EUC/SJIS if a command name is
-+ with prefix of "p" or "ep", intending to be compatible with
-+ pTeX family (ptex, eptex, pbibtex, pdvitype, ppltotf, ptftopl)
-+ (experimental).
-+
-+2019-05-06 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
-+
-+ * uptex-m.ch:
-+ Make appropreate comparison of U+0100 by \if.
-+ https://github.com/texjporg/tex-jp-build/issues/68
-+ * tests/test_if.tex: Test case.
-+
- 2019-02-23 TANAKA Takuji <ttk@t-lab.opal.ne.jp>
-
- * uptex-m.ch, upbibtex.ch, updvitype.ch, uppltotf.ch, uptftopl.ch,
-@@ -24,7 +49,7 @@
- 2018-09-16 TANAKA Takuji <ttk@t-lab.opal.ne.jp>
-
- * upbibtex.ch: Fix bug of substring$
-- from Takashi Sakai:
-+ from Takashi Sakai san:
- https://github.com/texjporg/tex-jp-build/issues/64
- https://github.com/texjporg/tex-jp-build/pull/66
-
-diff -Naur a/texk/web2c/uptexdir/kanji.c b/texk/web2c/uptexdir/kanji.c
---- a/texk/web2c/uptexdir/kanji.c 2019-02-23 01:59:36.000000000 +0000
-+++ b/texk/web2c/uptexdir/kanji.c 2019-05-31 22:00:04.010964033 +0100
-@@ -444,7 +444,7 @@
- || (LATIN_SMALL_LETTER_O_WITH_STROKE <=c && c<=LATIN_SMALL_LETTER_Y_WITH_DIAERESIS ) )
- return 0x1FD;
- }
-- if (block==0xa0) {
-+ if (block==0xa1) {
- /* Fullwidth ASCII variants except for U+FF01..FF0F, U+FF1A..FF20, U+FF3B..FF40, U+FF5B..FF5E */
- if ( (FULLWIDTH_DIGIT_0 <=c && c<=FULLWIDTH_DIGIT_9 )
- || (FULLWIDTH_CAPITAL_A<=c && c<=FULLWIDTH_CAPITAL_Z)
-@@ -485,8 +485,6 @@
- {
- char *p;
-
-- enable_UPTEX (true); /* enable */
--
- init_kanji (file_str, internal_str);
-
- p = getenv ("PTEX_KANJI_ENC");
-@@ -504,3 +502,33 @@
- }
- #endif
- }
-+
-+void init_default_kanji_select(void)
-+{
-+ char *base;
-+
-+ base = kpse_program_basename (argv[0]);
-+
-+ if (FILESTRNCASEEQ(base, "p", 1) || FILESTRNCASEEQ(base, "ep", 2)) {
-+
-+ enable_UPTEX (false); /* disable */
-+#if defined(WIN32)
-+/* pBibTeX is EUC only */
-+ if (FILESTRNCASEEQ(base, "pbibtex", 7)) {
-+ init_default_kanji(NULL, "euc");
-+ } else {
-+/* for pTeX, e-pTeX, pDVItype, pPLtoTF, and pTFtoPL */
-+ init_default_kanji(NULL, "sjis");
-+ }
-+#else
-+ init_default_kanji(NULL, "euc");
-+#endif
-+
-+ } else {
-+
-+/* for upTeX, e-upTeX, upBibTeX, upDVItype, upPLtoTF, and upTFtoPL */
-+ enable_UPTEX (true); /* enable */
-+ init_default_kanji ("utf8", "uptex");
-+
-+ }
-+}
-diff -Naur a/texk/web2c/uptexdir/kanji.h b/texk/web2c/uptexdir/kanji.h
---- a/texk/web2c/uptexdir/kanji.h 2019-02-06 11:01:31.000000000 +0000
-+++ b/texk/web2c/uptexdir/kanji.h 2019-05-31 22:00:04.010964033 +0100
-@@ -38,8 +38,9 @@
- extern integer multilenbuffchar (integer c);
-
- extern void init_default_kanji (const_string file_str, const_string internal_str);
-+extern void init_default_kanji_select (void);
- /* for upTeX, e-upTeX, upBibTeX, upDVItype, upPLtoTF, and upTFtoPL */
--#define initkanji() init_default_kanji("utf8", "uptex")
-+#define initkanji() init_default_kanji_select()
- /* for upDVItype */
- #define setpriorfileenc() set_prior_file_enc()
-
-diff -Naur a/texk/web2c/uptexdir/tests/test_if.tex b/texk/web2c/uptexdir/tests/test_if.tex
---- a/texk/web2c/uptexdir/tests/test_if.tex 1970-01-01 01:00:00.000000000 +0100
-+++ b/texk/web2c/uptexdir/tests/test_if.tex 2019-05-31 22:00:04.010964033 +0100
-@@ -0,0 +1,29 @@
-+\kcatcode`ã‚=18
-+\def\xA{ã‚}\let\yA=ã‚
-+\kcatcode`ã‚=17
-+\def\xB{ã‚}\let\yB=ã‚
-+\kcatcode`ã‚=16
-+
-+\message{\ifcat ã‚\xA Y\else N\fi}
-+\message{\ifcat ã‚\yA Y\else N\fi}
-+\message{\ifcat ã‚\xB Y\else N\fi}
-+\message{\ifcat ã‚\yB Y\else N\fi}
-+
-+\message{\if ã‚\xA Y\else N\fi}
-+\message{\if ã‚\yA Y\else N\fi}
-+\message{\if ã„\xA Y\else N\fi}
-+\message{\if ã„\yA Y\else N\fi}
-+
-+\ifx\ucs\undefined\else
-+ \kcatcode"100=16
-+ \message{upTeX}
-+ \def\xA{Ä€}% U+0100
-+ \def\xB{Ä}% U+0101
-+ \message{\if \xA\relax Y\else N\fi}
-+ \message{\if \xB\relax Y\else N\fi}
-+ \message{\ifcat\xA\relax Y\else N\fi}
-+ \message{\ifcat\xB\relax Y\else N\fi}
-+\fi
-+\end
-+
-+
-diff -Naur a/texk/web2c/uptexdir/upbibtex.ch b/texk/web2c/uptexdir/upbibtex.ch
---- a/texk/web2c/uptexdir/upbibtex.ch 2019-02-23 01:59:36.000000000 +0000
-+++ b/texk/web2c/uptexdir/upbibtex.ch 2019-05-31 22:00:04.010964033 +0100
-@@ -3,7 +3,7 @@
- @d banner=='This is pBibTeX, Version 0.99d-j0.33'
- @y
- @d my_name=='upbibtex'
--@d banner=='This is upBibTeX, Version 0.99d-j0.33-u1.24'
-+@d banner=='This is upBibTeX, Version 0.99d-j0.33-u1.25'
- @z
-
- @x
-diff -Naur a/texk/web2c/uptexdir/updvitype.ch b/texk/web2c/uptexdir/updvitype.ch
---- a/texk/web2c/uptexdir/updvitype.ch 2019-02-23 01:59:36.000000000 +0000
-+++ b/texk/web2c/uptexdir/updvitype.ch 2019-05-31 22:00:04.010964033 +0100
-@@ -3,7 +3,7 @@
- @d banner=='This is pDVItype, Version 3.6-p0.4'
- @y
- @d my_name=='updvitype'
--@d banner=='This is upDVItype, Version 3.6-p0.4-u1.24'
-+@d banner=='This is upDVItype, Version 3.6-p0.4-u1.25'
- @z
-
- @x procedure initialize
-diff -Naur a/texk/web2c/uptexdir/uppltotf.ch b/texk/web2c/uptexdir/uppltotf.ch
---- a/texk/web2c/uptexdir/uppltotf.ch 2019-02-23 01:59:36.000000000 +0000
-+++ b/texk/web2c/uptexdir/uppltotf.ch 2019-05-31 22:00:04.010964033 +0100
-@@ -3,7 +3,7 @@
- @d banner=='This is pPLtoTF, Version 3.6-p2.0'
- @y
- @d my_name=='uppltotf'
--@d banner=='This is upPLtoTF, Version 3.6-p2.0-u1.24'
-+@d banner=='This is upPLtoTF, Version 3.6-p2.0-u1.25'
- @z
-
- @x
-diff -Naur a/texk/web2c/uptexdir/uptex-m.ch b/texk/web2c/uptexdir/uptex-m.ch
---- a/texk/web2c/uptexdir/uptex-m.ch 2019-02-23 01:59:36.000000000 +0000
-+++ b/texk/web2c/uptexdir/uptex-m.ch 2019-05-31 22:00:04.010964033 +0100
-@@ -1,4 +1,4 @@
--% This is a change file for upTeX u1.24
-+% This is a change file for upTeX u1.25
- % By Takuji Tanaka.
- %
- % (02/26/2007) TTK upTeX u0.01
-@@ -39,6 +39,8 @@
- % (2018-01-21) HK Added \uptexversion primitive and co.
- % (2018-02-24) TTK upTeX u1.23
- % (2019-02-23) TTK upTeX u1.24
-+% (2019-05-06) HK Hironori Kitagawa fixed a bug in \if.
-+% (2019-05-06) TTK upTeX u1.25
-
- @x upTeX: banner
- {printed when \pTeX\ starts}
-@@ -46,8 +48,8 @@
- {printed when \pTeX\ starts}
- @#
- @d upTeX_version=1
--@d upTeX_revision==".24"
--@d upTeX_version_string=='-u1.24' {current u\pTeX\ version}
-+@d upTeX_revision==".25"
-+@d upTeX_version_string=='-u1.25' {current u\pTeX\ version}
- @#
- @d upTeX_banner=='This is upTeX, Version 3.14159265',pTeX_version_string,upTeX_version_string
- @d upTeX_banner_k==upTeX_banner
-@@ -142,6 +144,7 @@
- @d max_quarterword=255 {largest allowable value in a |quarterword|}
- @d min_halfword==-@"FFFFFFF {smallest allowable value in a |halfword|}
- @d max_halfword==@"FFFFFFF {largest allowable value in a |halfword|}
-+@d max_cjk_val=@"10000
- @y
- @d min_quarterword=0 {smallest allowable value in a |quarterword|}
- @d max_quarterword=@"FFFF {largest allowable value in a |quarterword|}
-@@ -699,16 +702,24 @@
-
- @x
- if (cur_cmd=kanji)or(cur_cmd=kana)or(cur_cmd=other_kchar) then
-+ begin n:=cur_chr; m:=kcat_code(kcatcodekey(n));
-+ end
- @y
- if (cur_cmd>=kanji)and(cur_cmd<=hangul) then
-+ begin m:=cur_cmd; n:=cur_chr;
-+ end
- @z
-
- @x
- get_x_token_or_active_char;
- if (cur_cmd=kanji)or(cur_cmd=kana)or(cur_cmd=other_kchar) then
-+ begin cur_cmd:=kcat_code(kcatcodekey(cur_chr));
-+ end
- @y
- get_x_token_or_active_char;
- if (cur_cmd>=kanji)and(cur_cmd<=hangul) then
-+ begin cur_cmd:=cur_cmd;
-+ end {dummy}
- @z
-
- @x
-diff -Naur a/texk/web2c/uptexdir/uptex_version.h b/texk/web2c/uptexdir/uptex_version.h
---- a/texk/web2c/uptexdir/uptex_version.h 2019-02-23 01:59:36.000000000 +0000
-+++ b/texk/web2c/uptexdir/uptex_version.h 2019-05-31 22:00:04.010964033 +0100
-@@ -1 +1 @@
--#define UPTEX_VERSION "u1.24"
-+#define UPTEX_VERSION "u1.25"
-diff -Naur a/texk/web2c/uptexdir/uptftopl.ch b/texk/web2c/uptexdir/uptftopl.ch
---- a/texk/web2c/uptexdir/uptftopl.ch 2019-02-23 01:59:36.000000000 +0000
-+++ b/texk/web2c/uptexdir/uptftopl.ch 2019-05-31 22:00:04.010964033 +0100
-@@ -3,7 +3,7 @@
- @d banner=='This is pTFtoPL, Version 3.3-p2.0'
- @y
- @d my_name=='uptftopl'
--@d banner=='This is upTFtoPL, Version 3.3-p2.0-u1.24'
-+@d banner=='This is upTFtoPL, Version 3.3-p2.0-u1.25'
- @z
-
- @x
-diff -Naur a/texk/web2c/xetexdir/ChangeLog b/texk/web2c/xetexdir/ChangeLog
---- a/texk/web2c/xetexdir/ChangeLog 2019-01-02 22:41:45.000000000 +0000
-+++ b/texk/web2c/xetexdir/ChangeLog 2019-05-31 22:02:30.345042172 +0100
-@@ -1,3 +1,8 @@
-+2019-05-30 Khaled Hosny <dr.khaled.hosny@gmail.com>
-+
-+ * XeTeXLayoutInterface.cpp: Do not use hb-icu if HarfBuzz
-+ version is 2.5.0 or newer.
-+
- 2019-01-03 Akira Kakuto <kakuto@fuk.kindai.ac.jp>
-
- * NEWS, xetex_version.h, xetex.web: Sync with the upstream.
-diff -Naur a/texk/web2c/xetexdir/XeTeXLayoutInterface.cpp b/texk/web2c/xetexdir/XeTeXLayoutInterface.cpp
---- a/texk/web2c/xetexdir/XeTeXLayoutInterface.cpp 2017-03-12 08:47:36.000000000 +0000
-+++ b/texk/web2c/xetexdir/XeTeXLayoutInterface.cpp 2019-05-31 22:05:06.636170781 +0100
-@@ -2,7 +2,7 @@
- Part of the XeTeX typesetting system
- Copyright (c) 1994-2008 by SIL International
- Copyright (c) 2009-2012 by Jonathan Kew
-- Copyright (c) 2012-2015 by Khaled Hosny
-+ Copyright (c) 2012-2019 by Khaled Hosny
-
- SIL Author(s): Jonathan Kew
-
-@@ -39,8 +39,11 @@
-
- #include <graphite2/Font.h>
- #include <graphite2/Segment.h>
-+#include <hb.h>
- #include <hb-graphite2.h>
-+#if !HB_VERSION_ATLEAST(2,5,0)
- #include <hb-icu.h>
-+#endif
- #include <hb-ot.h>
-
- #include "XeTeX_web.h"
-@@ -661,6 +664,7 @@
- free(engine->shaper);
- }
-
-+#if !HB_VERSION_ATLEAST(2,5,0)
- static unsigned int
- _decompose_compat(hb_unicode_funcs_t* ufuncs,
- hb_codepoint_t u,
-@@ -677,8 +681,7 @@
- hb_unicode_funcs_set_decompose_compatibility_func(ufuncs, _decompose_compat, NULL, NULL);
- return ufuncs;
- }
--
--static hb_unicode_funcs_t* hbUnicodeFuncs = NULL;
-+#endif
-
- int
- layoutChars(XeTeXLayoutEngine engine, uint16_t chars[], int32_t offset, int32_t count, int32_t max,
-@@ -699,11 +702,15 @@
-
- script = hb_ot_tag_to_script (engine->script);
-
-+ hb_buffer_reset(engine->hbBuffer);
-+
-+#if !HB_VERSION_ATLEAST(2,5,0)
-+ static hb_unicode_funcs_t* hbUnicodeFuncs = NULL;
- if (hbUnicodeFuncs == NULL)
- hbUnicodeFuncs = _get_unicode_funcs();
--
-- hb_buffer_reset(engine->hbBuffer);
- hb_buffer_set_unicode_funcs(engine->hbBuffer, hbUnicodeFuncs);
-+#endif
-+
- hb_buffer_add_utf16(engine->hbBuffer, chars, max, offset, count);
- hb_buffer_set_direction(engine->hbBuffer, direction);
- hb_buffer_set_script(engine->hbBuffer, script);
diff --git a/office/texlive/prep/texmf_get.sh b/office/texlive/prep/texmf_get.sh
deleted file mode 100644
index e5494a26cd..0000000000
--- a/office/texlive/prep/texmf_get.sh
+++ /dev/null
@@ -1,1106 +0,0 @@
-#!/bin/bash
-
-# texmf_get.sh (c) 2016 - 2019 Johannes Schoepfer, Germany, slackbuilds[at]schoepfer[dot]info
-# All rights reserved.
-#
-# Redistribution and use of this script, with or without modification, is
-# permitted provided that the following conditions are met:
-#
-# 1. Redistributions of this script must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-# V 15.0.3
-#
-# Prepare xz-compressed tarballs of texlive-texmf-trees based on texlive.tlpdb
-# This script takes care of dependencies(as far as these are present in texlive.tlpdb)
-# of collections and packages, and that every texlive-package is included only once.
-# The editions(base/extra/docs) should contain no binaries(exception biber)
-# -base: the most usefull stuff, most binaries/scripts,
-# manpages for compiled binaries 65mb 2017-11-07
-# -docs: -base documentation only, no manpages/GNU infofiles
-# -extra: remaining stuff and corresponding docs
-#
-# texlive netarchive policy: Every package is included as dependency
-# in exactly one collection. A package may have dependencies on other
-# packages from any collection.
-
-# package source: http://mirror.ctan.org/systems/texlive/tlnet/archive/
-
-#set -e
-MAJORVERSION=2019
-mirror="http://mirror.ctan.org/systems/texlive/tlnet/"
-TMP=$PWD/tmp
-
-# Globally excluded packages, which are/contain
-# -useless without tlmgr-installer
-# -non-linux
-# -covered by an external package, e.g. asymptote on SBo
-# -obsolete, e.g. omega
-# -java dependend packages
-# -binaries provided already by texlive.Slackbuild
-# -binaries provided already other system packages, e.g. texlive-scripts.ARCH
-# -only sources, or hyphen directives, e.g. metatype1, patch, ...
-# -only hyphen directives, e.g. hyphen-farsi ...
-
-global_exclude="
- aleph
- antomega
- asymptote
- bibtexu
- cslatex
- dviout.win32
- hyphen-arabic
- hyphen-farsi
- lambda
- metatype1
- ocherokee
- oinuit
- omega
- omegaware
- otibet
- patch
- texlive-common
- texlive-docindex
- texlive-msg-translations
- texlive-scripts
- texlive.infra
- texliveonfly
- texosquery
- texworks
- tlcockpit
- tlshell
- wintools.win32
- dvisvgm
- "
-
- # special packages, move their type1 fonts(if metafonts are present)
- # and/or docs to -extra
-special_packages="
- koma-script
- velthuis
- armtex
- montex
- vntex
- pl
- cc-pl
- cs
- musixtex-fonts
- tipa
- cbfonts
- ptex-fonts
- uptex-fonts
- "
-#Todo: split type1 fonts, or keep subset of type1 fonts in base
-# cm-super
-
-# keep precompiled binaries, list binary, not package name
-keep_precompiled="
- biber
- "
-
-texmf_editions () {
-
- # "excludes from -base", also dependencies are excluded
- PACKAGES="
- cm-super
- biber
- bib2gls
- knitting
- pgfornament
- pgfplots
- pst-cox
- pst-poker
- pst-vectorian
- pst-geo
- bclogo
- $(grep ^"name .*biblatex" $db | cut -d' ' -f2 )
- " texmfget extra || exit 1
-
- # packages/collections and their dependencies for -base
- PACKAGES="
- $(cat $corepackages)
- etoolbox
- xcolor
- memoir
- velthuis
- wasy
- ptex
- platex
- revtex
- uptex
- uplatex
- ucs
- collection-basic
- collection-latex
- collection-metapost
- collection-plaingeneric
- collection-luatex
- collection-context
- collection-fontutils
- collection-langczechslovak
- collection-langeuropean
- collection-langenglish
- collection-langfrench
- collection-langitalian
- collection-langpolish
- collection-langportuguese
- collection-langspanish
- collection-latexrecommended
- $(collection_by_size fontsextra 70000 || exit 1)
- $(collection_by_size publishers 10000 || exit 1)
- " texmfget base
-
- # packages/collections and their dependencies for -extra
- PACKAGES="
- amiri
- arabi
- arabi-add
- arara
- arev
- bangorcsthesis
- beamer2thesis
- beamertheme-detlevcm
- beamertheme-epyt
- beamertheme-npbt
- beamertheme-saintpetersburg
- beebe
- bhcexam
- bxtexlogo
- churchslavonic
- collection-fontsextra
- collection-langchinese
- collection-langcjk
- collection-langjapanese
- collection-langkorean
- collection-publishers
- collection-texworks
- collection-wintools
- ctan-o-mat
- ctanify
- ctanupload
- dad
- duckuments
- ethiop-t1
- fibeamer
- fithesis
- ghsystem
- gregoriotex
- hustthesis
- ijsra
- iwhdp
- jpsj
- kerkis
- ketcindy
- kpfonts
- langsci
- latex2nemeth
- libertine
- lilyglyphs
- lni
- luatexko
- media9
- musuos
- mwe
- newtx
- nwejm
- padauk
- pdfwin
- pdfx
- powerdot-tuliplab
- powerdot-FUBerlin
- quran
- quran-de
- realhats
- resumecls
- sanskrit-t1
- sapthesis
- sduthesis
- seuthesix
- simurgh
- skaknew
- stellenbosch
- suanpan
- tudscr
- uantwerpendocs
- ucs
- udesoftec
- universalis
- uowthesis
- wasy2-ps
- xduthesis
- xetexko
- xq
- " texmfget extra || exit 1
-
- # What's left, for base again
- PACKAGES="
- collection-fontsrecommended
- collection-xetex
- collection-langcyrillic
- collection-langarabic
- collection-langgerman
- collection-langgreek
- collection-langother
- collection-humanities
- collection-mathscience
- collection-pictures
- collection-pstricks
- collection-music
- collection-games
- collection-binextra
- collection-bibtexextra
- collection-formatsextra
- collection-latexextra
- " texmfget base || exit 1
-
-}
-
-# ==== Nothing to edit beyond this line ====
-
-usage () {
- echo
- echo "Generate texmf trees/editions based on collections/packages"
- echo "and their (hard)dependencies."
- echo "./texmf_get.sh [base|docs|extra|lint]"
- echo
- echo "-base: texfiles, no docs"
- echo "-docs: docs of -base"
- echo "-extra: remaining texfiles and docs"
- echo "[lint]: compare filename contents of all generated editions,"
- echo " to detect overlapping files"
- echo
- echo "Only new/updated/missing tex packages are downloaded."
- echo "The first run takes \"long\", tex packages(about 2500Mb)"
- echo "need to be downloaded."
- echo "To check out a new version/release, delete"
- echo "$db"
- echo "A new ascii index file/database(texlive.tlpdb) is will be"
- echo "pulled on the next run, and a new version yymmdd will be set."
- echo
- echo "All generated tarballs, logs etc. are going to"
- echo "$TMP"
- echo
-}
-
-collection_by_size () {
- # from collection $1, pull packages smaller $2 bytes
- start_n="$(grep -n ^"name collection-$1"$ $db | cut -d':' -f1)"
- # find end of package/collection
- for emptyline in $emptylines
- do
- if [ "$emptyline" -gt "$start_n" ]
- then
- end_n=$emptyline
- break
- fi
- done
- extrapackages="$(sed "${start_n},${end_n}!d" $db | grep ^"depend " | grep -v ^"depend collection" | sed "s/^depend//g" )"
-
- # add if smaller than ...
- for checksize in $extrapackages
- do
- package_meta $checksize || exit 1
- size=$(grep ^"containersize " $texmf/$checksize.meta | cut -d' ' -f2)
- # for $2, e.g. 3000 means 3kb
- [ $size -lt $2 ] && echo $checksize
- done
-}
-
-package_meta () {
- if [ ! -s "$texmf/$1.meta" ]
- then
- # collection start linenumer
- start_n="$(grep -n ^"name ${1}"$ $db | cut -d':' -f1)"
- [ -z "$start_n" ] && echo "$1 was not found in $db, bye." && exit 1
- # find end of package/collection
- for emptyline in $emptylines
- do
- if [ "$emptyline" -gt "$start_n" ]
- then
- end_n=$emptyline
- break
- fi
- done
- # Don't handle collections as dependency of other collections
- sed "${start_n},${end_n}!d;/^depend collection/d" $db > $texmf/$1.meta
- fi
-}
-
-download () {
- # Download packages, if not already available. Not every packages has a corresponding .doc package.
- # Try three times if package isn't present, with -t1 to get another mirror the second time
- cd $texmf
- if [ ! -s "${1}${flavour}.tar.xz" ]
- then
- for run in {1..10}
- do
- wget -q --show-progress -t1 -c ${mirror}archive/${1}${flavour}.tar.xz
- [ -s "${1}${flavour}.tar.xz" ] && break
- done
- fi
- # If no success by downloading, write error log
- [ ! -s ${1}${flavour}.tar.xz ] && echo "Downloading ${1}${flavour}.tar.xz did not work, writing to $errorlog" && echo "$VERSION" >> $errorlog && echo "Error downloading ${1}${flavour}.tar.xz" >> $errorlog && exit 1
-
- # check sha512, give three tries for downloading again(diffrent mirrors are used automatically)
- if [ "$flavour" = ".doc" ]
- then
- sha512="$(grep ^doccontainerchecksum $texmf/$1.meta | cut -d' ' -f2 )"
- else
- sha512="$(grep ^containerchecksum $texmf/$1.meta | cut -d' ' -f2 )"
- fi
-
- for run in {1..10}
- do
- if [ "$(sha512sum ${1}${flavour}.tar.xz | cut -d' ' -f1 )" != "$sha512" ]
- then
- # Download (hopefully) newer file
- rm ${1}${flavour}.tar.xz
- wget -q --show-progress -t1 -c ${mirror}archive/${1}${flavour}.tar.xz
- else
- break
- fi
- done
- # check sha512 again, exit if it fails
- if [ "$(sha512sum ${1}${flavour}.tar.xz | cut -d' ' -f1 )" != "$sha512" ]
- then
- echo "sha512sum $(sha512sum ${1}${flavour}.tar.xz | cut -d' ' -f1 ) of"
- echo "${package}${flavour}.tar.xz doesn't match with $db"
- # delete metafile on failure to get generated again on next run, where new $db may be in use
- rm $texmf/$1.meta
- echo "sha512sum $sha512"
- echo "Delete ${db}* to be current again, and try again."
- exit 1
- fi
-}
-
-untar () {
- # leave if $1 has no content
- if [ -s "$1" ]
- then
- while read package
- do
- echo "untar $package"
- # untar all packages, check for relocation, "relocate 1" -> untar in texmf-dist
- download $package || exit 1
- # untar package, relocate to texmf-dist if necessary, binary packages always need relocation
- relocated='.'
- [ -n "$(grep -w ^"relocated 1" $texmf/$package.meta)" -o -n "$(grep ^"binfiles " $texmf/$package.meta)" ] && relocated="texmf-dist"
- # if not .doc package, investigate files for dependencies/provides
- if [ -n "$flavour" ]
- then
- tar xf ${package}${flavour}.tar.xz --exclude tlpkg -C $relocated || exit 1
- else
- tar vxf ${package}${flavour}.tar.xz --exclude tlpkg -C $relocated | grep -E '\.sty$|\.bbx$|\.cls$' > $texmf/$package.deps
- if [ -n "$texmf/$package.deps" ]
- then
- unset provide
- unset depends
- for depfile in $(cat $texmf/$package.deps)
- do
- filename="$( echo $depfile | rev | cut -d'.' -f2- | cut -d'/' -f1 | rev)"
- # always add $filename as "ProvidesPackage", if it's a .sty
- echo $depfile | grep '\.sty'$ &>/dev/null
- [ $? = 0 ] && provide+="${filename},"
- # remove comments, if there are backslashes ignore that content, except it is \filename
- #provide+="$(sed "s/%.*//g" $texmf/$relocated/$depfile | sed -n "s/.*\\\ProvidesPackage{\([^}]*\)}.*/\1/p" | sed "s/\\\filename/$filename/g;/\\\/d" | sort -u | tr '\n' ',')"
- #sed -z "s/.*\\\Provides\(Package\|ExplPackage\|File\|Class\)*.\n//g" | sed "s/[[:space:]]//
- #provide+="$(sed "s/%.*//g" $texmf/$relocated/$depfile | sed -z "s/.*\\\Provides\(Package\|ExplPackage\|File\|Class\)*.\n//g" | sed "s/[[:space:]]// | sed -n "s/.*\\\Provides\(Package\|ExplPackage\|File\|Class\){\([^}]*\)}.*/\2/p" | sed "s/\\\filename/$filename/g;s/\\\ExplFileName/$filename/g;/\\\/d" | sed "s/\(\.sty$\|\.cls$\)//g" | sort -u | tr '\n' ',')"
- provide+="$(sed "s/%.*//g" $texmf/$relocated/$depfile | sed -z "s/\(Package\|ExplPackage\|File\|Class\)\n/\1/g" | sed "s/[[:space:]]//" | sed -n "s/.*\\\Provides\(Package\|ExplPackage\|File\|Class\){\([^}]*\)}.*/\2/p" | sed "s/\\\filename/$filename/g;s/\\\ExplFileName/$filename/g" | sed "s/\(\.sty$\|\.cls$\)//g" | sort -u | tr '\n' ',')"
- #depends+="$(sed "s/%.*//g" $texmf/$relocated/$depfile | sed -n "s/.*\(\\\require\|\\\use\)package{\([^}]*\)}.*/\2/p" | sed "/\\\/d" | sort -u | tr '\n' ',')"
- depends+="$(sed "s/%.*//g" $texmf/$relocated/$depfile | sed -n "s/.*\(\\\require\|\\\use\)package{\([^}]*\)}.*/\2/p" | sort -u | tr '\n' ',')"
- #depends+="$(sed "s/%.*//g" $texmf/$relocated/$depfile | sed -n "s/.*\\\\(require\|use\)package{\([^}]*\)}.*/\2/p" | sed "/\\\/d" | sort -u | tr '\n' ',')"
- done
- if [ -n "$provide" ]
- then
- echo "$package $provide" >> $TMP/provides.run.$edition
- fi
- if [ -n "$depends" ]
- then
- echo "$package $depends" >> $TMP/depends.run.$edition
- fi
- fi
- fi
-
- # Delete binaries, these are provided
- # by texlive.Slackbuild, keep symlinks and scripts
-
- for arch in $platforms
- do
- if [ -d $texmf/texmf-dist/bin/$arch ]
- then
- [ ! -d $texmf/texmf-dist/linked_scripts ] \
- && mkdir $texmf/texmf-dist/linked_scripts
- # rewrite link target to fit systemwide installation
- for link in $(find $texmf/texmf-dist/bin/$arch -type l)
- do
- ln -sf $(readlink $link | sed "s/^..\/..\(.*\)/..\/share\1/" ) $link || exit 1
- done
- # move symlinks to linked_scripts
- find $texmf/texmf-dist/bin/$arch -type l -exec mv '{}' $texmf/texmf-dist/linked_scripts/ \;
-
- # keep only binaries of special packages
- # remove xindy.mem(gzip compresses data) to prevent overwriting
- for bin in $(find $texmf/texmf-dist/bin/$arch -type f -exec file '{}' + | \
- grep -e "executable" -e "shared object" -e "gzip compressed data" | \
- grep -e ELF -e "gzip compressed data" | cut -f 1 -d : )
- do
- for binary in $keep_precompiled
- do
- if [ "$(echo $bin | rev | cut -d'/' -f1 | rev)" != "$binary" ]
- then
- rm $bin
- echo $bin | rev | cut -d'/' -f1 | rev >> $binary_removed.$edition
- fi
- done
- done
- # move scripts to linked-scripts
- scripts="$(find $texmf/texmf-dist/bin/$arch -type f -exec file '{}' + | grep -wv ELF | cut -f 1 -d : )"
- for script in $scripts
- do
- mv $script $texmf/texmf-dist/linked_scripts/
- done
- fi
- done
-
- if [ "$flavour" = ".doc" ]
- then
- size=$(grep ^doccontainersize $texmf/$package.meta | cut -d' ' -f2)
- else
- size=$(grep ^containersize $texmf/$package.meta | cut -d' ' -f2)
- # add maps to updmap.cfg, don't add special_packages map files to -base
- add_map=yes
- if [ $edition = base ]
- then
- for no_map in $special_packages
- do
- [ $no_map = $package ] && add_map=no && break
- done
- fi
- [ $add_map = yes ] && grep ^'execute ' $texmf/$package.meta | grep Map | cut -d' ' -f2- | sed "s/^add//g" >> $updmap.$edition
- fi
- shortdesc="$(grep ^shortdesc $texmf/$package.meta | cut -d' ' -f2- )"
- echo "$size byte, $package$flavour: $shortdesc" >> $output.meta
- # make index of uncompressed size of each package
- echo "$(xz -l --verbose ${package}${flavour}.tar.xz | grep "Uncompressed size" | \
- cut -d'(' -f2 | cut -d' ' -f1 ) byte, $package$flavour: $shortdesc" >> $output.meta.uncompressed
- done < $1
-
- # copy packages index to texmf-dist, so included packages are known in later installation
- # don't list binary packages, as the binaries itself are not contained, only the symlinks.
- cat $output.meta | grep -v '\-linux:' >> $output.$edition.meta
- cat $output.meta.uncompressed | grep -v '\-linux:' >> $output.$edition.meta.uncompressed
-
- # cleanup
- [ -f $output.meta ] && rm $output.meta
- [ -f $output.meta.uncompressed ] && rm $output.meta.uncompressed
- fi
-}
-
-remove_cruft () {
- # Remove m$-stuff, ConTeXt single-user-system stuff, source leftovers and pdf-versions of manpages
- rm -rf texmf-dist/source
- rm -rf texmf-dist/scripts/context/stubs/source/
- find texmf-dist/ -type d -name 'win32' -exec rm -rf {} +
- find texmf-dist/ -type d -name 'win64' -exec rm -rf {} +
- find texmf-dist/ -type d -name 'mswin' -exec rm -rf {} +
- find texmf-dist/ -type d -name 'win' -exec rm -rf {} +
- find texmf-dist/ -type d -name 'setup' -exec rm -rf {} +
- find texmf-dist/ -type d -name 'install' -exec rm -rf {} +
- find texmf-dist/ -type f -name 'uninstall*.sh' -delete
- find texmf-dist/ -type f -name '*.bat' -delete
- find texmf-dist/ -type f -name '*.bat.w95' -delete
- find texmf-dist/ -type f -name '*win32*' -delete
- find texmf-dist/ -type f -name 'winansi*' -delete
- find texmf-dist/ -type f -name '*man1.pdf' -delete
- find texmf-dist/ -type f -name '*man5.pdf' -delete
- # Remove zero-length files, as these appear e.g. in hyph-utf8 tex-package.
- # find texmf-dist/ -type f -size 0c -delete
- find texmf-dist/ -type f -empty -delete
- # Remove empty directories recursively
- find texmf-dist/ -type d -empty -delete
-}
-
-texmfget () {
- # make sure no package is added more than once.
- echo "Preparing index of packages to be added to -${1} ..."
- echo "$PACKAGES" | sed "s/[[:space:]]//g;/^$/d" > $collections_tobedone
- # Remove outputfile if already present
- >$output
- >$output_doc
-
- # Only do something if $collection wasn't already done before
- while [ -s $collections_tobedone ]
- do
- collection=$(tail -n1 $collections_tobedone)
-
- # continue with next collection if collection was already done
- if [ -s "$collections_done" ]
- then
- grep -w "^${collection}$" $collections_done &> /dev/null
- if [ $? = 0 ]
- then
- # remove from $collections_tobedone
- sed -i "/^$collection$/d" $collections_tobedone
- if [ -n "$(grep "^${collection} added to" $logfile)" ]
- then
- echo "$collection already added " >> $logfile
- fi
- continue
- fi
- fi
-
- package_meta $collection || exit 1
-
- # If $collection is a singel package(not a collection-), add it here
- if [ -n "$(head -n1 $texmf/$collection.meta | grep -v "name collection" )" ]
- then
- addpackage=no
- # if package contains docs, add to docpackages
- if [ -n "$(grep ^docfiles $texmf/$collection.meta)" ]
- then
- echo "$collection" >> $output_doc
- echo "$collection added to docs $1" >> $logfile
- addpackage=yes
- fi
- if [ -n "$(grep ^runfiles $texmf/$collection.meta)" -o -n "$(grep ^binfiles $texmf/$collection.meta)" ]
- then
- echo "$collection" >> $output
- echo "$collection added to -$1" >> $logfile
- addpackage=yes
- fi
- # every package should be added to one dedicated edition, abort if that didn't work
- if [ $addpackage = no ]
- then
- echo "$collection doesn't contain any docfiles/runfiles/binfiles"
- echo "Please exclude package/report to upstream mailinglist tex-live@tug.org, bye."
- exit 1
- fi
- fi
-
- # Don't handle collections as dependency of other collections, as this destroys control over what packages to be added
- # add dependend packages, but no binary(ARCH) and no packages conataining a '.'. Packges with dot indicate binary/texlive-manager/windows packages
-
- grep ^"depend " $texmf/$collection.meta | cut -d' ' -f2- > $dependencies
-
- if [ -s "$dependencies" ]
- then
- # check for .ARCH packages which may be binaries, scripts or links
- # Binaries should all come from the sourcebuild(exception biber)
- for dependency in $(cat $dependencies)
- do
- echo $dependency | grep '\.ARCH'$ &>/dev/null
- if [ $? = 0 ]
- then
- for arch in $platforms
- do
- archpackage="$(echo $dependency | sed "s/\.ARCH$/\.$arch/")"
- grep ^"name $archpackage"$ $db &>/dev/null && echo "$archpackage" >> $dependencies.verified_arch
- done
- else
- echo $dependency >> $dependencies.verified_arch
- fi
- done
- if [ -f $dependencies.verified_arch ]
- then
- mv $dependencies.verified_arch $dependencies
- else
- rm $dependencies
- fi
- fi
-
- if [ -s "$dependencies" ]
- then
- echo "----------------" >> $logfile
- echo "Dependencies of $collection: $(cat $dependencies | tr '\n' ' ')" >> $logfile
- for dependency in $(cat $dependencies)
- do
- if [ -n "$(grep ^"${dependency}"$ $collections_done)" ]
- then
- sed -i "/^${dependency}$/d" $dependencies
- continue
- else
- for exclude in $global_exclude
- do
- if [ "$exclude" = "$dependency" ]
- then
- sed -i "/^${exclude}$/d" $dependencies
- echo "$exclude excluded, see \$global_exclude" >> $logfile
- fi
- done
- fi
- done
- cat $dependencies >> $collections_tobedone
- echo "----------------" >> $logfile
- fi
-
- sed -i "/^${collection}$/d" $collections_tobedone
- echo "$collection" >> $collections_done
- done
- # handle package index list per edition
- cat $output >> $TMP/packages.$1
- # handle doc package index, one for each edition
- cat $output_doc >> $TMP/packages.$1.doc
-
- # untar only one $edition, untar docs together with -extra edition
- if [ "$1" = $edition -o docs = $edition ]
- then
- cd $texmf
- # Cleanup tar-directory
- [ -d $texmf/texmf-dist ] && rm -rf $texmf/texmf-dist
- mkdir $texmf/texmf-dist
-
- # Make tarball/checksum reproducible by setting mtime(clamp-mtime), owner, group and sort content
- # --clamp-mtime --mtime doesn't work with tar 1.13, when makepkg creates the tarball:
- # tar-1.13: time_t value 9223372036854775808 too large (max=68719476735)
- echo "Adding files to $( echo $tarball | rev | cut -d'/' -f1 | rev ) ..."
- case $edition in
- base)
- unset flavour
- untar $output || exit 1
- remove_cruft || exit 1
- tar rf $tarball --owner=0 --group=0 --sort=name texmf-dist || exit 1
- rm -rf texmf-dist
- ;;
- extra)
- unset flavour
- untar $output || exit 1
- export flavour=".doc"
- untar $output_doc || exit 1
- remove_cruft || exit 1
- #tar vrf $tarball --clamp-mtime --mtime --owner=0 --group=0 --sort=name texmf-dist || exit 1
- tar rf $tarball --owner=0 --group=0 --sort=name texmf-dist || exit 1
- rm -rf texmf-dist
- ;;
- docs)
- export flavour=".doc"
- # only add -base docs to -docs
- if [ $1 = base ]
- then
- untar $output_doc || exit 1
- remove_cruft || exit 1
- #tar vrf $tarball --clamp-mtime --mtime --owner=0 --group=0 --sort=name texmf-dist || exit 1
- tar rf $tarball --owner=0 --group=0 --sort=name texmf-dist || exit 1
- rm -rf texmf-dist
- fi
- ;;
- esac
- fi
-}
-
-lint () {
-
-echo "Comparing content of all editions, this may take a while ..."
-cd $TMP
-# check if all editions of same VERSION are there, take -base as reference
-lint_version=$( ls texlive-base-*tar.xz | head -n1 | cut -d'.' -f2 || exit 1)
-if [ -s texlive-extra-$MAJORVERSION.$lint_version.tar.xz \
- -a -s texlive-docs-$MAJORVERSION.$lint_version.tar.xz ]
-then
- for edition in base extra docs
- do
- echo "Extracting index of texlive-${edition}-$MAJORVERSION.$lint_version.tar.xz ..."
- # don't list directories
- tar tf texlive-${edition}-$MAJORVERSION.$lint_version.tar.xz | grep -v '/'$ > $TMP/packages.$edition.lint
- done
-
- # compare content
- for edition in base extra docs
- do
- >$TMP/packages.$edition.lint.dup
- if [ $edition = base ]
- then
- echo "check if files of base are present in another edition"
- while read line
- do
- grep ^"$line"$ $TMP/packages.extra.lint >> $TMP/packages.base.lint.dup
- grep ^"$line"$ $TMP/packages.docs.lint >> $TMP/packages.base.lint.dup
- done < $TMP/packages.$edition.lint
- fi
- done
-else
- echo "Not all editions are present to lint them. Create them first by"
- echo "$0 [base|docs|extra]"
- echo "bye."
- exit 1
-fi
-
-exit 0
-
-}
-
-# Main
-
-LANG=C
-output=$TMP/packages
-output_doc=$TMP/packages.doc.tmp
-errorlog=$TMP/error.log
-texmf=$TMP/texmf
-db=$TMP/texlive.tlpdb
-tmpfile=$TMP/tmpfile
-collections_done=$TMP/done
-collections_tobedone=$TMP/tobedone
-corepackages=$TMP/corepackages
-allcollections=$TMP/allcollections
-binary_removed=$TMP/binaries.removed
-manpages=$TMP/manpages
-dependencies=$TMP/deps
-packages_base=$TMP/packages.base
-packages_extra=$TMP/packages.extra
-packages_manpages=$TMP/packages.manpages
-updmap=$TMP/updmap.cfg
-files_split=$TMP/files.split
-platforms="x86_64-linux i386-linux"
-
-mkdir -p $texmf
-cd $TMP
-
-case "$1" in
- base|docs|extra) edition=$1;;
- lint) lint ;;
- *) usage; exit 0 ;;
-esac
-
-echo "Building $edition tarball ..."
-
-# Set VERSION, get texlive.tlpdb and keep unshorten $db.orig
-if [ ! -s ${db}.orig -o ! -s $db -o ! -s VERSION ]
-then
- echo $MAJORVERSION.$(date +%y%m%d) > VERSION
- wget -q --show-progress -c -O ${db}.orig ${mirror}tlpkg/texlive.tlpdb
- # remove most content from $db to be faster on later processing.
- # keep dependencies/manpages/binfiles/shortdesc/sizes
- grep -E \
- '^\S|^ RELOC/doc/man|^ texmf-dist/doc/man/man|^ RELOC/doc/info/|^ texmf-dist/doc/info/|^ bin|^$' \
- ${db}.orig | grep -v ^longdesc > $db
-
- # As $db might be renewed, remove the meta-files to be created again
- rm -rf $texmf/*.meta
-fi
-
-# Get linenumbers of empty lines from $db
-emptylines="$(grep -n ^$ $db | cut -d':' -f1)"
-
-# Provide TLCore packages for -base, as these packages(and their dependencies) should be present in any case.
-grep -B1 ^'category TLCore' $db | grep -v ^'category TLCore' | grep -v ^-- | grep -v '\.' | cut -d' ' -f2 > $corepackages
-
-# Make a list of all collections
-grep ^"name collection-" $db | cut -d' ' -f2 > $allcollections
-
-# translate .ARCH to platforms in excludes, to make .ARCH packages excludeable by $global_exclude
-for exclude in $global_exclude
-do
- if [ -n "$(echo $exclude | grep '\.ARCH'$ )" ]
- then
- for arch in $platforms
- do
- global_exclude+=" $(echo $exclude | sed "s/\.ARCH$/\.$arch/")"
- done
- global_exclude=${global_exclude/$exclude/}
- fi
-done
-# globally exclude from $corepackages
-for exclude in $global_exclude
-do
- sed -i "/^${exclude}$/d" $corepackages
-done
-
-VERSION=$(cat $TMP/VERSION)
-tarball=$TMP/texlive-$edition-$VERSION.tar
-# set logfile
-logfile=$TMP/$VERSION.log
-
-# reset some files
->$logfile
->$tarball
->$collections_done
->$files_split
->$manpages
->$packages_manpages
->$updmap.$edition
->$packages_base
->$packages_extra
->$packages_base.doc
->$packages_extra.doc
->$TMP/packages.$edition.meta
->$TMP/packages.$edition.meta.uncompressed
->$TMP/provides.run.$edition
->$TMP/depends.run.$edition
->$binary_removed.$edition
-
-# put the editions base/extra together
-texmf_editions || exit 1
-
-# Check if all collections are part in at least one edition
-while read collection
-do
- grep -w "$collection" $collections_done &> /dev/null
- if [ $? != 0 ]
- then
- echo "Error: $collection was not handled."
- echo "Edit packages/collections in the texmfget function." | tee -a $logfile
- exit 1
- fi
-done < $allcollections
-
-# cleanup
-rm $allcollections
-rm $corepackages
-rm $collections_done
-rm $collections_tobedone
-rm $output
-rm $output_doc
-rm $dependencies
-
-# untar special- and manpage packages to be splitted/moved to other editions
-# splitting special packages, files index
-echo "Prepare index of to be splitted/moved files from -base"
-[ ! -d texmf-dist ] && mkdir texmf-dist
-for package in $special_packages
-do
- echo "Splitting $package"
- # special packages have to be in -base, as only here are special
- # tasks done to reduce size of -base edition
- if [ -z "$( grep ^"$package"$ $packages_base )" ]
- then
- echo "$package was not found to be part of -base"
- echo "Edit \$special_packages in $0,"
- echo "it should contain only packages from -base, bye."
- exit 1
- fi
- unset relocated
- pathprefix="texmf-dist/"
- [ -n "$(grep -w ^"relocated 1" $texmf/$package.meta)" ] && \
- relocated="-C texmf-dist" && unset pathprefix
- # avoid big pdf docs which are also present as html
- # move (big)type1 fonts to -extra
- # $files_split lists files to be moved from -base to -extra
- if [ $package = "cm-super" ]
- then
- # cm-super minimal for -base, create index of extended cm-super
- tar tf $texmf/$package.tar.xz | sed \
- "/1000\.pfb$/d;/^tlpkg/d;/\.sty$/d;/\.enc$/d;/\.GS$/d" \
- | tee -a $files_split > $files_split.tmp
- else
- tar tf $texmf/${package}.tar.xz | sed \
- -ne "/.*doc\/latex\/.*\.pdf$/p" \
- -ne "/.*fonts\/map\/.*\.map$/p" \
- -ne "/.*fonts\/enc\/.*\.enc$/p" \
- -ne "/.*fonts\/afm\/.*\.\(afm\|afm\.gz\)$/p" \
- -ne "/.*fonts\/type1\/.*\.pfb$/p" \
- -ne "/.*fonts\/vf\/.*\.vf$/p" \
- | tee -a $files_split > $files_split.tmp
- fi
-
- if [ $edition = base ]
- then
- # Calculate package-minimal size, uncompressed and compressed
- mkdir -p calculate/texmf-dist
- tar xf $texmf/$package.tar.xz -C calculate/texmf-dist --exclude-from=$files_split.tmp
- tar cf calculate/calc.tar.xz -I 'xz -9' calculate/texmf-dist
- size_minimal=$(du -bc calculate/calc.tar.xz | tail -n1 | sed "s/[[:space:]].*//")
- size_minimal_uncompressed="$(xz -l --verbose calculate/calc.tar.xz | grep "Uncompressed size" | cut -d'(' -f2 | cut -d' ' -f1 )"
- sed -i \
- -e "s/^[0-9]* byte, $package: /$size_minimal byte, $package-minimal: /" \
- $output.base.meta
- sed -i \
- -e "s/^[0-9]* byte, $package: /$size_minimal_uncompressed byte, $package-minimal: /" \
- $output.base.meta.uncompressed
- rm -rf calculate
- fi
-
- if [ $edition = extra ]
- then
- mkdir -p calculate/texmf-dist
- tar xf $texmf/${package}.tar.xz -C calculate/texmf-dist $(paste $files_split.tmp)
- tar cf calculate/calc.tar.xz -I 'xz -9' calculate/texmf-dist
- size_extended=$(du -bc calculate/calc.tar.xz | tail -n1 | sed "s/[[:space:]].*//")
- size_extended_uncompressed="$(xz -l --verbose calculate/calc.tar.xz | \
- grep "Uncompressed size" | cut -d'(' -f2 | cut -d' ' -f1 )"
-
- # put new sizes in package index uncompressed
- sed -i \
- -e "s/^[0-9]* byte, $package: /$size_extended byte, $package-extended: /" \
- $output.extra.meta
- sed -i \
- -e "s/^[0-9]* byte, $package: /$size_extended_uncompressed byte, $package-extended: /" \
- $output.extra.meta.uncompressed
- rm -rf calculate
-
- # put map files from splitted packages in -extra
- mkdir meta_tmp
- tar xf $texmf/${package}.tar.xz -C meta_tmp tlpkg/tlpobj/$package.tlpobj
- grep ^'execute ' meta_tmp/tlpkg/tlpobj/$package.tlpobj | grep Map | cut -d' ' -f2- | sed "s/^add//g" >> $updmap.$edition
- rm -rf meta_tmp
- fi
-
- # untar to provide files for -extra
- tar xf $texmf/${package}.tar.xz $relocated $(paste $files_split.tmp)
- if [ $package = "cm-super" ]
- then
- # create cm-super- minimal config/maps with 10pt glyphs only
- sed "s/cm-super/cm-super-minimal/g" $texmf/texmf-dist/dvips/cm-super/config.cm-super \
- > $texmf/texmf-dist/dvips/cm-super/config-minimal.cm-super
- for map in t1 t2a t2b t2c ts1 x2
- do
- grep 1000 $texmf/texmf-dist/fonts/map/dvips/cm-super/cm-super-$map.map \
- > $texmf/texmf-dist/fonts/map/dvips/cm-super/cm-super-minimal-$map.map
- sed -i "/.*1000\.pfb/d" $texmf/texmf-dist/fonts/map/dvips/cm-super/cm-super-$map.map
- done
- fi
-done
-
-# cleanup
-rm $files_split.tmp
-# fix relocation in index for splitted packages
-sed -i \
- -e "s|^doc|texmf-dist\/doc|g" \
- -e "s|^fonts|texmf-dist\/fonts|g" \
- -e "s|^dvips|texmf-dist\/dvips|g" \
- $files_split
-
-# sort meta data about added packages
-sort -n $output.$edition.meta > $tmpfile
-mv $tmpfile $output.$edition.meta
-sort -n $output.$edition.meta.uncompressed > $tmpfile
-mv $tmpfile $output.$edition.meta.uncompressed
-
-sort -u $binary_removed.$edition > $tmpfile
-mv $tmpfile $binary_removed.$edition
-
-# include manpages/GNU infofiles in -base, write index for later exclusion from other editions.
-# In -extra/-docs there should not be any manpage left.
-echo "Looking for manpages/GNU infofiles to be included in -base ..."
-for package in $(paste -s $packages_base.doc | sort -u)
-do
- if [ -n "$(grep -E "(doc/man/man|doc/info/)" $texmf/$package.meta )" ]
- then
- echo "Adding manpage from $package.doc to -base"
- flavour=".doc" download $package || exit 1
- unset relocated
- pathprefix="texmf-dist/"
- [ -n "$(grep -w ^"relocated 1" $texmf/$package.meta)" ] \
- && relocated="-C texmf-dist" && unset pathprefix
- tar tf $texmf/${package}.doc.tar.xz | sed \
- -ne "/.*doc\/man\/.*\.1$/p" \
- -ne "/.*doc\/man\/.*\.5$/p" \
- -ne "/.*doc\/info\/.*\.info$/p" \
- | tee -a $manpages > $manpages.tmp
- # untar to provide files for -/extra/-docs
- tar xf $texmf/${package}.doc.tar.xz $relocated $(paste $manpages.tmp)
- echo "$package" >> $packages_manpages
- fi
-done
-# cleanup
-rm $manpages.tmp
-sed -i \
- -e "s/^doc/texmf-dist\/doc/g" \
- $manpages
-
-case $edition in
- base)
- # Content info
- cat << EOF | gzip -9 >> $texmf/texmf-dist/packages.$edition.gz
-Content of -$edition:
-$(sed "/-linux$/d" $packages_base | sort)
-EOF
- # create texdoc cache file
- if [ $(command -v texdoc) ]
- then
- mkdir -p texmf-dist/scripts/texdoc || exit 1
- TEXMFVAR=$texmf/texmf-dist \
- texdoc -c texlive_tlpdb=$TMP/texlive.tlpdb.orig \
- -DlM texlive-en >/dev/null 2>&1
- mv texmf-dist/texdoc/cache-tlpdb.lua \
- texmf-dist/scripts/texdoc/Data.tlpdb.lua || exit 1
- # add cache to tarball
- tar rf $tarball --owner=0 --group=0 --sort=name \
- texmf-dist/scripts/texdoc/Data.tlpdb.lua || exit 1
- else
- echo "WARNING: texdoc binary(comming with texlive) is not installed, the texdoc cache"
- echo "Data.tlpdb.lua can't be created and wont't be available."
- echo "Texdoc will not wotk without this."
- echo ""
- echo "Continue with any key or abort with ctrl-c"
- read -n1
- fi
-
- # prepare updmap.cfg
- tar xf $tarball texmf-dist/web2c/updmap.cfg
- end_n="$(grep -n 'end of updmap-hdr' texmf-dist/web2c/updmap.cfg | cut -d':' -f1)"
-
- sed "1,${end_n}!d" texmf-dist/web2c/updmap.cfg > $TMP/updmap.cfg.tmp
- cat $updmap.$edition >> $TMP/updmap.cfg.tmp
- mv $TMP/updmap.cfg.tmp texmf-dist/web2c/updmap.cfg
- tar f $tarball --delete texmf-dist/web2c/updmap.cfg
- tar rf $tarball --owner=0 --group=0 --sort=name \
- texmf-dist/web2c/updmap.cfg
-
-# add manpages/GNU infofiles to the tarball
- tar rf $tarball --owner=0 --group=0 --sort=name \
- texmf-dist/doc/man/ texmf-dist/doc/info/ \
- texmf-dist/packages.$edition.gz \
- || exit 1
-# # add cm-super minimal maps/config
-# tar rf $tarball --owner=0 --group=0 --sort=name \
-# texmf-dist/dvips/cm-super/config-minimal.cm-super \
-# --wildcards texmf-dist/fonts/map/dvips/cm-super/cm-super-minimal-*.map \
-# || exit 1
- echo "Removing files -from base, splitted from special packages to be included in -extra"
- tar f $tarball --delete $(paste $files_split) || exit 1
- ;;
- extra)
- echo "Removing manpages from $edition which now reside in -base"
- tar f $tarball --delete $(paste $manpages) 2>/dev/null
- # content info
- echo "Content of -$edition, including documentation:" > $texmf/texmf-dist/packages.$edition
- sed "/-linux$/d" $TMP/packages.$edition | sort >> $texmf/texmf-dist/packages.$edition
- gzip -9 $texmf/texmf-dist/packages.$edition
-# # remove cm-super minimal config, which resides in -base
-# rm \
-# $texmf/texmf-dist/dvips/cm-super/config-minimal.cm-super \
-# $texmf/texmf-dist/fonts/map/dvips/cm-super/cm-super-minimal-*.map
-
- # add -extra updmap.cfg
- mkdir -p $texmf/texmf-dist/web2c
- mv $updmap.$edition $texmf/texmf-dist/web2c
- tar rf $tarball --owner=0 --group=0 --sort=name \
- --exclude texmf-dist/doc \
- texmf-dist \
- || exit 1
- ;;
- docs)
- # add docs splittet from base from special packages, add packages index
- # content info, this edition contains all docs from -base
- echo "Content of -$edition, documentation for -base:" > $texmf/texmf-dist/packages.$edition
- sort $packages_base.doc >> $texmf/texmf-dist/packages.$edition
- gzip -9 $texmf/texmf-dist/packages.$edition
- tar rf $tarball --owner=0 --group=0 --sort=name \
- texmf-dist/doc/ \
- texmf-dist/packages.$edition.gz \
- || exit 1
- echo "Removing manpages from $edition which now reside in -base"
- tar f $tarball --delete $(paste $manpages) || exit 1
- ;;
-esac
-
-rm -rf texmf-dist
-[ -f $updmap.$edition ] && rm $updmap.$edition
-
-# compress the tarball as everything is in place now
-echo "Compressing $tarball ..."
-[ -f $tarball.xz ] && rm $tarball.xz
-xz -9 -T0 $tarball || exit 1
-md5sum $tarball.xz
-ls -lh $tarball.xz
-echo "Logfile: $logfile"
diff --git a/office/texlive/slack-desc b/office/texlive/slack-desc
deleted file mode 100644
index 5feea19c55..0000000000
--- a/office/texlive/slack-desc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description.
-# Line up the first '|' above the ':' following the base package name, and
-# the '|' on the right side marks the last column you can put a character in.
-# You must make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':' except on otherwise blank lines.
-
- |-----handy-ruler------------------------------------------------------|
-texlive: texlive (TeX binaries, support files, and formats)
-texlive:
-texlive: This package contains binaries, support files, TeX formats and
-texlive: packages,and other files included in the TeXLive TeX distribution.
-texlive: Included are input files for TeX, runtime configuration files,
-texlive: hyphenation tables, manpages, and the computer modern fonts.
-texlive:
-texlive: SlackBuilds.org has more texmf files and documentation in the
-texlive: texlive-extra and texlive-docs packages.
-texlive:
-texlive:
diff --git a/office/texlive/texlive.SlackBuild b/office/texlive/texlive.SlackBuild
deleted file mode 100644
index a29afb9ab1..0000000000
--- a/office/texlive/texlive.SlackBuild
+++ /dev/null
@@ -1,249 +0,0 @@
-#!/bin/sh
-
-# TeXLive build script for Slackware
-
-# Copyright 2009, 2017 - 2019 Patrick J. Volkerding, Sebeka, MN, USA
-# Copyright 2009 - 2014 Robby Workman, Northport, AL, USA
-# Copyright 2016 - 2017 Johannes Schoepfer, Germany
-# All rights reserved.
-#
-# Redistribution and use of this script, with or without modification, is
-# permitted provided that the following conditions are met:
-#
-# 1. Redistributions of this script must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-# URL: ftp://tug.org/historic/systems/texlive/
-# Testrelease: ftp://tug.org/texlive/Images/test/
-# Upstream stable fixes: svn://tug.org/texlive/branches/branch2019/Build/source
-
-PRGNAM=texlive
-SOURCEVERSION=20190410
-VERSION=${VERSION:-2019.190626}
-BUILD=${BUILD:-2}
-TAG=${TAG:-_SBo}
-
-CWD=$(pwd)
-TMP=${TMP:-/tmp/SBo}
-PKG=$TMP/package-texlive
-OUTPUT=${OUTPUT:-/tmp}
-
-set -e
-
-if [ -z "$ARCH" ]; then
- case "$( uname -m )" in
- i?86) ARCH=i586 ;;
- arm*) ARCH=arm ;;
- *) ARCH=$( uname -m ) ;;
- esac
-fi
-
-if [ "$ARCH" = "i586" ]; then
- SLKCFLAGS="-O2 -march=i586 -mtune=i686"
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "x86_64" ]; then
- SLKCFLAGS="-O2 -fPIC"
- LIBDIRSUFFIX="64"
-else
- SLKCFLAGS="-O2"
- LIBDIRSUFFIX=""
-fi
-
-# NOTE: Using the system version of poppler will require texlive to be
-# recompiled with pretty much every poppler update, as they almost always
-# bump the shared library version. But sometimes you do what you have
-# to do...
-SYSTEMPOPPLER=${SYSTEMPOPPLER:-NO}
-if [ "$SYSTEMPOPPLER" = "NO" ]; then
- POPPLER="--without-system-poppler --without-system-xpdf"
-else
- POPPLER="--with-system-poppler --with-system-xpdf"
-fi
-
-rm -rf $PKG
-mkdir -p $TMP $PKG $OUTPUT
-cd $TMP
-rm -rf texlive-$SOURCEVERSION-source
-tar xvf $CWD/texlive-${SOURCEVERSION}-source.tar.xz || exit 1
-cd texlive-$SOURCEVERSION-source || exit 1
-chown -R root:root .
-chmod -R u+w,go-w,a+rX-st .
-
-export LANG=C
-export PATH="$PKG/usr/bin:$PATH"
-export LD_LIBRARY_PATH="$PKG/usr/lib${LIBDIRSUFFIX}:$LD_LIBRARY_PATH"
-
-# set TEXMFROOT and TEXMFLOCAL
-sed -i \
- -e 's|^TEXMFROOT.*|TEXMFROOT = $SELFAUTODIR/share|' \
- -e 's|^TEXMFLOCAL.*|TEXMFLOCAL = $TEXMFROOT/texmf-local|' \
- texk/kpathsea/texmf.cnf
-
-# Upstream stable fixes
-patch -Np1 -i $CWD/patches/texlive-20190410-source-upstream_fixes-1.patch || exit 1
-
-# prevent compiling Xdvi with libXp
-sed -i 's|-lXp ||' texk/xdvik/configure
-
-mkdir build
-cd build
- CFLAGS="$SLKCFLAGS" \
- CXXFLAGS="$SLKCFLAGS -fpermissive" \
- ../configure \
- --prefix=/usr \
- --libdir=/usr/lib${LIBDIRSUFFIX} \
- --mandir=/usr/man \
- --infodir=/usr/info \
- --with-banner-add=' on Slackware (SlackBuilds.org)' \
- --disable-native-texlive-build \
- --enable-largefile \
- --enable-shared \
- --disable-static \
- --disable-missing \
- --disable-multiplatform \
- --disable-debug \
- --disable-dialog \
- --disable-bibtexu \
- --disable-xz \
- --with-x \
- --disable-dvisvgm \
- --enable-xindy \
- --disable-xindy-docs \
- --disable-xindy-rules \
- --with-clisp-runtime=system \
- --enable-gc=system \
- --with-system-zlib \
- --with-system-libpng \
- --with-system-t1lib \
- --with-system-gd \
- --with-system-freetype2 \
- --with-system-libgs \
- --with-system-icu \
- --with-system-pixman \
- --with-system-cairo \
- --with-system-gmp \
- --with-system-mpfr \
- --with-system-fontconfig \
- --with-system-ncurses \
- --without-system-harfbuzz \
- --disable-aleph \
- --disable-dump-share \
- --disable-linked-scripts \
- $POPPLER \
- --build=$ARCH-slackware-linux || exit 1
-
- make || exit 1
- # make check || exit 1
- make install-strip DESTDIR=$PKG || exit 1
-
-cd ..
-
-# Don't ship .la files:
-rm -f $PKG/usr/lib${LIBDIRSUFFIX}/*.la
-
-# Remove all files which are covered by tlnet
-rm -rf $PKG/usr/share $PKG/usr/man $PKG/usr/info
-
-# install the tlnet stuff
-mkdir -p $PKG/usr/share
-tar xvf $CWD/texlive-base-$VERSION.tar.xz -C $PKG/usr/share || exit 1
-chown -R root:root $PKG
-chmod -R u+w,go-w,a+rX-st $PKG
-
-# use symlinks/scripts from tlnet
-mv $PKG/usr/share/texmf-dist/linked_scripts/* $PKG/usr/bin
-rmdir $PKG/usr/share/texmf-dist/linked_scripts
-
-# set some paths
-sed -i \
- -e 's|^TEXMFROOT.*|TEXMFROOT = $SELFAUTODIR/share|' \
- -e 's|^TEXMFLOCAL.*|TEXMFLOCAL = $TEXMFROOT/texmf-local|' \
- -e 's|^OSFONTDIR.*|OSFONTDIR = ~/.fonts:/usr/share/fonts|' \
- $PKG/usr/share/texmf-dist/web2c/texmf.cnf
-
-# disable obsolete aleph/lamed/cslatex/pdfcslatex
-sed -i \
- -e 's|^aleph|#! aleph|' \
- -e 's|^lamed|#! lamed|' \
- -e 's|^cslatex|#! cslatex|' \
- -e 's|^pdfcslatex|#! pdfcslatex|' \
- $PKG/usr/share/texmf-dist/web2c/fmtutil.cnf
-
-# make ConTeXt work, and remove unused settings
-sed -i \
- -e 's|selfautoparent:|/usr/share/|g' \
- -e 's|\(TEXMFLOCAL[ ]*=[ ]*\)[^,]*|\1"/usr/share/texmf-local"|' \
- -e '/selfautodir/d' \
- -e '/texmflocal/d' \
- $PKG/usr/share/texmf-dist/web2c/texmfcnf.lua
-
-# provide texlive fonts optionally for other system apps
-mkdir -p $PKG/etc/fonts/conf.avail
-cat > $PKG/etc/fonts/conf.avail/09-texlive.conf << EOF
-<?xml version='1.0'?>
-<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
-<fontconfig>
- <dir>/usr/share/texmf-dist/fonts/opentype</dir>
- <dir>/usr/share/texmf-dist/fonts/truetype</dir>
-</fontconfig>
-EOF
-
-# Install the docs while we're still here
-mkdir -p $PKG/usr/doc/texlive-$VERSION
-cp -a ChangeLog README* $PKG/usr/doc/texlive-$VERSION
-# Install index of provided tex packages to the docs
-mv $PKG/usr/share/texmf-dist/packages.base.gz $PKG/usr/doc/texlive-$VERSION
-
-# Put a symlink to /usr/share/texmf-dist/doc in our Slackware docdir
-ln -s ../../share/texmf-dist/doc $PKG/usr/doc/texlive-$VERSION/doc
-
-# We won't make tlmgr easily available; it's still there, but
-# we'll make it harder to void the warranty :-)
-rm -f $PKG/usr/bin/tlmgr
-cat $CWD/README.tlpkg > $PKG/usr/doc/texlive-$VERSION/README.tlpkg
-
-# Create some directories to make it clear that they're owned by this package
-mkdir -p $PKG/usr/share/{texmf-config,texmf-var,texmf-local}
-
-# Use patch for tabu.sty from https://github.com/tabu-fixed/tabu to fix
-# breakage when compiling doxygen:
-( cd $PKG/usr/share/texmf-dist/tex/latex/tabu
- cat $CWD/patches/tabu.sty.diff | patch -p1 --verbose || exit 1
- ) || exit 1
-
-# Add some perl modules, at least one of which is required by updmap
-mkdir -p $PKG/usr/share/perl5
-mv texk/tests/TeXLive $PKG/usr/share/perl5/
-
-# Move manual pages to the correct place
-mkdir $PKG/usr/man
-mv $PKG/usr/share/texmf-dist/doc/man/man1 $PKG/usr/man
-mv $PKG/usr/share/texmf-dist/doc/man/man5 $PKG/usr/man
-rmdir $PKG/usr/share/texmf-dist/doc/man
-mv $PKG/usr/share/texmf-dist/doc/info $PKG/usr
-
-# Handle the man pages
-find $PKG/usr/man -type f -exec gzip -9 {} \;
-for i in $(find $PKG/usr/man -type l) ; do ln -s $(readlink $i).gz $i.gz ; rm $i ; done
-
-# Handle the GNU info pages
-rm -f $PKG/usr/info/dir
-gzip -9 $PKG/usr/info/*
-
-mkdir -p $PKG/install
-cat $CWD/doinst.sh > $PKG/install/doinst.sh
-cat $CWD/slack-desc > $PKG/install/slack-desc
-
-cd $PKG
-/sbin/makepkg -p -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}
diff --git a/office/texlive/texlive.info b/office/texlive/texlive.info
deleted file mode 100644
index 6d337e6f80..0000000000
--- a/office/texlive/texlive.info
+++ /dev/null
@@ -1,12 +0,0 @@
-PRGNAM="texlive"
-VERSION="2019.190626"
-HOMEPAGE="https://tug.org/texlive/"
-DOWNLOAD="http://slackware.schoepfer.info/slackbuilds/texlive/2019/texlive-20190410-source.tar.xz \
- http://slackware.schoepfer.info/slackbuilds/texlive/2019/texlive-base-2019.190626.tar.xz"
-MD5SUM="be4b20aa60861bc510bcbc5b228bcb51 \
- 0a6a69d6e921989287a8a24471150b28"
-DOWNLOAD_x86_64=""
-MD5SUM_x86_64=""
-REQUIRES=""
-MAINTAINER="Johannes Schoepfer"
-EMAIL="slackbuilds@schoepfer.info"