diff options
author | Luigi Scarso <luigi.scarso@gmail.com> | 2020-04-21 18:43:36 +0000 |
---|---|---|
committer | Luigi Scarso <luigi.scarso@gmail.com> | 2020-04-21 18:43:36 +0000 |
commit | 7c0b908f1a6e1489834fbdb0789766eed8a37b49 (patch) | |
tree | cb55d631b861bfcf95fe853713af6f760227ba0f /Build/source/texk | |
parent | e783b071ded7eef421d0333416b47142bc5542cb (diff) |
pplib under libs -- WORK IN PROGRSS grep '?' out
git-svn-id: svn://tug.org/texlive/trunk@54824 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk')
300 files changed, 1815 insertions, 48980 deletions
diff --git a/Build/source/texk/Makefile.in b/Build/source/texk/Makefile.in index b93e9a1c9a7..03b97549449 100644 --- a/Build/source/texk/Makefile.in +++ b/Build/source/texk/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -171,6 +171,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../m4/kpse-cairo-flags.m4 \ $(top_srcdir)/../texk/xdvik/ac/xdvik.ac \ $(top_srcdir)/../texk/texlive/ac/withenable.ac \ $(top_srcdir)/../texk/texlive/ac/texlive.ac \ + $(top_srcdir)/../libs/pplib/ac/withenable.ac \ $(top_srcdir)/../libs/harfbuzz/ac/withenable.ac \ $(top_srcdir)/../libs/icu/ac/withenable.ac \ $(top_srcdir)/../libs/teckit/ac/withenable.ac \ @@ -668,10 +669,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -714,8 +711,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -892,17 +887,16 @@ uninstall-am: am--refresh check check-am clean clean-cscope clean-generic \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \ - dist-zip dist-zstd distcheck distclean distclean-generic \ - distclean-tags distcleancheck distdir distuninstallcheck dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am + dist-zip distcheck distclean distclean-generic distclean-tags \ + distcleancheck distdir distuninstallcheck dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile diff --git a/Build/source/texk/aclocal.m4 b/Build/source/texk/aclocal.m4 index 023c395f2e4..dae4686cafd 100644 --- a/Build/source/texk/aclocal.m4 +++ b/Build/source/texk/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/afm2pl/Makefile.in b/Build/source/texk/afm2pl/Makefile.in index c5ae2952859..4d8af0c2ee9 100644 --- a/Build/source/texk/afm2pl/Makefile.in +++ b/Build/source/texk/afm2pl/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -193,8 +193,8 @@ am__uninstall_files_from_dir = { \ man1dir = $(mandir)/man1 NROFF = nroff MANS = $(dist_man1_MANS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - c-auto.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)c-auto.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1020,10 +1020,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1066,8 +1062,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1257,8 +1251,8 @@ uninstall-man: uninstall-man1 check-TESTS check-am clean clean-binPROGRAMS clean-cscope \ clean-generic clean-libtool cscope cscopelist-am ctags \ ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \ - dist-shar dist-tarZ dist-xz dist-zip dist-zstd distcheck \ - distclean distclean-compile distclean-generic distclean-hdr \ + dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ + distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ diff --git a/Build/source/texk/afm2pl/aclocal.m4 b/Build/source/texk/afm2pl/aclocal.m4 index 7e719b5326f..36330023bfe 100644 --- a/Build/source/texk/afm2pl/aclocal.m4 +++ b/Build/source/texk/afm2pl/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/afm2pl/configure b/Build/source/texk/afm2pl/configure index 4adba3e5853..74af46b8937 100755 --- a/Build/source/texk/afm2pl/configure +++ b/Build/source/texk/afm2pl/configure @@ -16705,9 +16705,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/bibtex-x/Makefile.in b/Build/source/texk/bibtex-x/Makefile.in index 55816fb82e5..3a3ca507333 100644 --- a/Build/source/texk/bibtex-x/Makefile.in +++ b/Build/source/texk/bibtex-x/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -240,8 +240,8 @@ man1dir = $(mandir)/man1 NROFF = nroff MANS = $(dist_man1_MANS) DATA = $(dist_btdoc_DATA) $(dist_csf_DATA) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - config.h.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1391,10 +1391,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1437,8 +1433,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1654,8 +1648,8 @@ uninstall-man: uninstall-man1 check-TESTS check-am clean clean-binPROGRAMS clean-cscope \ clean-generic clean-libtool cscope cscopelist-am ctags \ ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \ - dist-shar dist-tarZ dist-xz dist-zip dist-zstd distcheck \ - distclean distclean-compile distclean-generic distclean-hdr \ + dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ + distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ diff --git a/Build/source/texk/bibtex-x/aclocal.m4 b/Build/source/texk/bibtex-x/aclocal.m4 index 05b73266f16..5dc224d3180 100644 --- a/Build/source/texk/bibtex-x/aclocal.m4 +++ b/Build/source/texk/bibtex-x/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/bibtex-x/configure b/Build/source/texk/bibtex-x/configure index 1f12fbbb53d..8dc8cce21df 100755 --- a/Build/source/texk/bibtex-x/configure +++ b/Build/source/texk/bibtex-x/configure @@ -21420,9 +21420,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/chktex/Makefile.in b/Build/source/texk/chktex/Makefile.in index ea147b1e359..6516b8001ee 100644 --- a/Build/source/texk/chktex/Makefile.in +++ b/Build/source/texk/chktex/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -232,8 +232,8 @@ man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) DATA = $(config_DATA) $(pdfdoc_DATA) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - config.h.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1310,10 +1310,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1356,8 +1352,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1574,26 +1568,25 @@ uninstall-man: uninstall-man1 check-TESTS check-am clean clean-binPROGRAMS clean-cscope \ clean-generic clean-libtool cscope cscopelist-am ctags \ ctags-am dist dist-all dist-bzip2 dist-gzip dist-hook \ - dist-lzip dist-shar dist-tarZ dist-xz dist-zip dist-zstd \ - distcheck distclean distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-tags distcleancheck \ - distdir distuninstallcheck dvi dvi-am html html-am info \ - info-am install install-am install-binPROGRAMS \ - install-configDATA install-data install-data-am \ - install-data-hook install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-man1 \ - install-nodist_binSCRIPTS install-nodist_texmfSCRIPTS \ - install-pdf install-pdf-am install-pdfdocDATA install-ps \ - install-ps-am install-strip install-texmfSCRIPTS installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - recheck tags tags-am uninstall uninstall-am \ - uninstall-binPROGRAMS uninstall-configDATA uninstall-hook \ - uninstall-man uninstall-man1 uninstall-nodist_binSCRIPTS \ - uninstall-nodist_texmfSCRIPTS uninstall-pdfdocDATA \ - uninstall-texmfSCRIPTS + dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \ + distclean distclean-compile distclean-generic distclean-hdr \ + distclean-libtool distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-configDATA \ + install-data install-data-am install-data-hook install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man1 install-nodist_binSCRIPTS \ + install-nodist_texmfSCRIPTS install-pdf install-pdf-am \ + install-pdfdocDATA install-ps install-ps-am install-strip \ + install-texmfSCRIPTS installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am recheck tags tags-am uninstall \ + uninstall-am uninstall-binPROGRAMS uninstall-configDATA \ + uninstall-hook uninstall-man uninstall-man1 \ + uninstall-nodist_binSCRIPTS uninstall-nodist_texmfSCRIPTS \ + uninstall-pdfdocDATA uninstall-texmfSCRIPTS .PRECIOUS: Makefile diff --git a/Build/source/texk/chktex/aclocal.m4 b/Build/source/texk/chktex/aclocal.m4 index f3c52a10c99..58e3d4d5da0 100644 --- a/Build/source/texk/chktex/aclocal.m4 +++ b/Build/source/texk/chktex/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/chktex/configure b/Build/source/texk/chktex/configure index 88400d1f945..279a4708a3c 100755 --- a/Build/source/texk/chktex/configure +++ b/Build/source/texk/chktex/configure @@ -16974,9 +16974,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/cjkutils/Makefile.in b/Build/source/texk/cjkutils/Makefile.in index fb8d6cbcda7..f3de7e3c842 100644 --- a/Build/source/texk/cjkutils/Makefile.in +++ b/Build/source/texk/cjkutils/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -241,8 +241,8 @@ man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man1_MANS) DATA = $(hbf2gf_cfg_DATA) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - c-auto.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)c-auto.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1313,10 +1313,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1359,8 +1355,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1578,13 +1572,13 @@ uninstall-man: uninstall-man1 check check-TESTS check-am clean clean-binPROGRAMS \ clean-cscope clean-generic clean-libtool cscope cscopelist-am \ ctags ctags-am dist dist-all dist-bzip2 dist-gzip dist-hook \ - dist-lzip dist-shar dist-tarZ dist-xz dist-zip dist-zstd \ - distcheck distclean distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-tags distcleancheck \ - distdir distuninstallcheck dvi dvi-am html html-am info \ - info-am install install-am install-binPROGRAMS \ - install-binSCRIPTS install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-exec-hook \ + dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \ + distclean distclean-compile distclean-generic distclean-hdr \ + distclean-libtool distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-binSCRIPTS \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-exec-hook \ install-hbf2gf_cfgDATA install-html install-html-am \ install-info install-info-am install-man install-man1 \ install-pdf install-pdf-am install-ps install-ps-am \ diff --git a/Build/source/texk/cjkutils/aclocal.m4 b/Build/source/texk/cjkutils/aclocal.m4 index 35338f6818b..dccfe30646b 100644 --- a/Build/source/texk/cjkutils/aclocal.m4 +++ b/Build/source/texk/cjkutils/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/cjkutils/configure b/Build/source/texk/cjkutils/configure index 63fa3161697..2c966ac5546 100755 --- a/Build/source/texk/cjkutils/configure +++ b/Build/source/texk/cjkutils/configure @@ -16928,9 +16928,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/configure b/Build/source/texk/configure index a021ad870d2..463be931486 100755 --- a/Build/source/texk/configure +++ b/Build/source/texk/configure @@ -3882,6 +3882,7 @@ case $enable_luatex in #( esac test "x$enable_web2c:$enable_luatex" = xyes:yes && { + need_pplib=yes need_libpng=yes need_zziplib=yes need_lua53=yes @@ -3898,6 +3899,7 @@ case $enable_luajittex in #( esac test "x$enable_web2c:$enable_luajittex" = xyes:yes && { + need_pplib=yes need_libpng=yes need_zziplib=yes need_luajit=yes @@ -3914,6 +3916,7 @@ case $enable_luahbtex in #( esac test "x$enable_web2c:$enable_luahbtex" = xyes:yes && { + need_pplib=yes need_libpng=yes need_zziplib=yes need_lua53=yes @@ -3931,6 +3934,7 @@ case $enable_luajithbtex in #( esac test "x$enable_web2c:$enable_luajithbtex" = xyes:yes && { + need_pplib=yes need_libpng=yes need_zziplib=yes need_luajit=yes @@ -4959,6 +4963,9 @@ if test "${enable_linked_scripts+set}" = set; then : fi +## libs/pplib/ac/withenable.ac: configure.ac fragment for the TeX Live subdirectory libs/pplib/ +## configure options and TL libraries required for pplib + ## libs/harfbuzz/ac/withenable.ac: configure.ac fragment for the TeX Live subdirectory libs/harfbuzz/ ## configure options and TL libraries required for harfbuzz @@ -7861,9 +7868,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/detex/Makefile.in b/Build/source/texk/detex/Makefile.in index 9cba2e03e0d..460a253d70e 100644 --- a/Build/source/texk/detex/Makefile.in +++ b/Build/source/texk/detex/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -203,8 +203,8 @@ am__uninstall_files_from_dir = { \ man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man1_MANS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - c-auto.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)c-auto.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1062,10 +1062,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1108,8 +1104,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1303,11 +1297,11 @@ uninstall-man: uninstall-man1 check-TESTS check-am clean clean-binPROGRAMS clean-cscope \ clean-generic clean-libtool cscope cscopelist-am ctags \ ctags-am dist dist-all dist-bzip2 dist-gzip dist-hook \ - dist-lzip dist-shar dist-tarZ dist-xz dist-zip dist-zstd \ - distcheck distclean distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-tags distcleancheck \ - distdir distuninstallcheck dvi dvi-am html html-am info \ - info-am install install-am install-binPROGRAMS install-data \ + dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \ + distclean distclean-compile distclean-generic distclean-hdr \ + distclean-libtool distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-man1 install-pdf \ diff --git a/Build/source/texk/detex/aclocal.m4 b/Build/source/texk/detex/aclocal.m4 index 7e719b5326f..36330023bfe 100644 --- a/Build/source/texk/detex/aclocal.m4 +++ b/Build/source/texk/detex/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/detex/configure b/Build/source/texk/detex/configure index dca44b2412b..98160739989 100755 --- a/Build/source/texk/detex/configure +++ b/Build/source/texk/detex/configure @@ -16830,9 +16830,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/dtl/Makefile.in b/Build/source/texk/dtl/Makefile.in index ba5191cb6a8..2fb4adfac70 100644 --- a/Build/source/texk/dtl/Makefile.in +++ b/Build/source/texk/dtl/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -197,8 +197,8 @@ am__uninstall_files_from_dir = { \ man1dir = $(mandir)/man1 NROFF = nroff MANS = $(dist_man1_MANS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - config.h.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1031,10 +1031,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1077,8 +1073,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1271,8 +1265,8 @@ uninstall-man: uninstall-man1 check-TESTS check-am clean clean-binPROGRAMS clean-cscope \ clean-generic clean-libtool cscope cscopelist-am ctags \ ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \ - dist-shar dist-tarZ dist-xz dist-zip dist-zstd distcheck \ - distclean distclean-compile distclean-generic distclean-hdr \ + dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ + distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ diff --git a/Build/source/texk/dtl/aclocal.m4 b/Build/source/texk/dtl/aclocal.m4 index 7e719b5326f..36330023bfe 100644 --- a/Build/source/texk/dtl/aclocal.m4 +++ b/Build/source/texk/dtl/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/dtl/configure b/Build/source/texk/dtl/configure index cf2d7836755..fcd2ff667d5 100755 --- a/Build/source/texk/dtl/configure +++ b/Build/source/texk/dtl/configure @@ -16877,9 +16877,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/dvi2tty/Makefile.in b/Build/source/texk/dvi2tty/Makefile.in index 6ebbf8963b7..526c867c62a 100644 --- a/Build/source/texk/dvi2tty/Makefile.in +++ b/Build/source/texk/dvi2tty/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -202,8 +202,8 @@ am__uninstall_files_from_dir = { \ man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man1_MANS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - c-auto.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)c-auto.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1079,10 +1079,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1125,8 +1121,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1322,11 +1316,11 @@ uninstall-man: uninstall-man1 check-TESTS check-am clean clean-binPROGRAMS clean-cscope \ clean-generic clean-libtool cscope cscopelist-am ctags \ ctags-am dist dist-all dist-bzip2 dist-gzip dist-hook \ - dist-lzip dist-shar dist-tarZ dist-xz dist-zip dist-zstd \ - distcheck distclean distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-tags distcleancheck \ - distdir distuninstallcheck dvi dvi-am html html-am info \ - info-am install install-am install-binPROGRAMS install-data \ + dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \ + distclean distclean-compile distclean-generic distclean-hdr \ + distclean-libtool distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-man1 install-pdf \ diff --git a/Build/source/texk/dvi2tty/aclocal.m4 b/Build/source/texk/dvi2tty/aclocal.m4 index 00084a9c43e..4907d165e82 100644 --- a/Build/source/texk/dvi2tty/aclocal.m4 +++ b/Build/source/texk/dvi2tty/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/dvi2tty/configure b/Build/source/texk/dvi2tty/configure index 9b014651e75..f924783173c 100755 --- a/Build/source/texk/dvi2tty/configure +++ b/Build/source/texk/dvi2tty/configure @@ -16663,9 +16663,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/dvidvi/Makefile.in b/Build/source/texk/dvidvi/Makefile.in index 5f47ac0e5ac..7fff1d29b12 100644 --- a/Build/source/texk/dvidvi/Makefile.in +++ b/Build/source/texk/dvidvi/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -194,8 +194,8 @@ am__uninstall_files_from_dir = { \ man1dir = $(mandir)/man1 NROFF = nroff MANS = $(dist_man1_MANS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - config.h.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1023,10 +1023,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1069,8 +1065,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1260,8 +1254,8 @@ uninstall-man: uninstall-man1 check-TESTS check-am clean clean-binPROGRAMS clean-cscope \ clean-generic clean-libtool cscope cscopelist-am ctags \ ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \ - dist-shar dist-tarZ dist-xz dist-zip dist-zstd distcheck \ - distclean distclean-compile distclean-generic distclean-hdr \ + dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ + distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ diff --git a/Build/source/texk/dvidvi/aclocal.m4 b/Build/source/texk/dvidvi/aclocal.m4 index 35338f6818b..dccfe30646b 100644 --- a/Build/source/texk/dvidvi/aclocal.m4 +++ b/Build/source/texk/dvidvi/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/dvidvi/configure b/Build/source/texk/dvidvi/configure index 1b1a8c80153..74cdac3184d 100755 --- a/Build/source/texk/dvidvi/configure +++ b/Build/source/texk/dvidvi/configure @@ -16656,9 +16656,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/dviljk/Makefile.in b/Build/source/texk/dviljk/Makefile.in index 93d10a2c756..d5eb7f2b177 100644 --- a/Build/source/texk/dviljk/Makefile.in +++ b/Build/source/texk/dviljk/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -253,8 +253,8 @@ am__recursive_targets = \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir distdir-am dist dist-all distcheck -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - c-auto.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)c-auto.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1012,10 +1012,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1058,8 +1054,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1263,22 +1257,22 @@ uninstall-man: uninstall-man1 clean-binPROGRAMS clean-cscope clean-generic clean-libtool \ clean-noinstLIBRARIES cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ - dist-xz dist-zip dist-zstd distcheck distclean \ - distclean-compile distclean-generic distclean-hdr \ - distclean-libtool distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-binPROGRAMS install-data \ - install-data-am install-data-hook install-dist_binSCRIPTS \ - install-dvi install-dvi-am install-exec install-exec-am \ - install-exec-hook install-html install-html-am install-info \ - install-info-am install-man install-man1 install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ - uninstall-binPROGRAMS uninstall-dist_binSCRIPTS uninstall-hook \ - uninstall-man uninstall-man1 + dist-xz dist-zip distcheck distclean distclean-compile \ + distclean-generic distclean-hdr distclean-libtool \ + distclean-tags distcleancheck distdir distuninstallcheck dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am \ + install-data-hook install-dist_binSCRIPTS install-dvi \ + install-dvi-am install-exec install-exec-am install-exec-hook \ + install-html install-html-am install-info install-info-am \ + install-man install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \ + uninstall-dist_binSCRIPTS uninstall-hook uninstall-man \ + uninstall-man1 .PRECIOUS: Makefile diff --git a/Build/source/texk/dviljk/aclocal.m4 b/Build/source/texk/dviljk/aclocal.m4 index 39c74069737..03cbe85517f 100644 --- a/Build/source/texk/dviljk/aclocal.m4 +++ b/Build/source/texk/dviljk/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_COND_IF -*- Autoconf -*- -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -147,7 +147,7 @@ fi[]dnl # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -178,7 +178,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -369,7 +369,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -408,9 +408,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -437,7 +435,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -634,7 +632,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -655,7 +653,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -677,7 +675,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -712,7 +710,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -755,7 +753,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -794,7 +792,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -823,7 +821,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -870,7 +868,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -889,7 +887,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -970,7 +968,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1030,7 +1028,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1058,7 +1056,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1077,7 +1075,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/dviljk/configure b/Build/source/texk/dviljk/configure index 32b3d7a2e7f..3aa3c85e2b8 100755 --- a/Build/source/texk/dviljk/configure +++ b/Build/source/texk/dviljk/configure @@ -17000,9 +17000,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/dviljk/win32/Makefile.in b/Build/source/texk/dviljk/win32/Makefile.in index 9518ddfada0..541e6eeb595 100644 --- a/Build/source/texk/dviljk/win32/Makefile.in +++ b/Build/source/texk/dviljk/win32/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/dviout-util/Makefile.in b/Build/source/texk/dviout-util/Makefile.in index ad609122b3d..fa6ced8930e 100644 --- a/Build/source/texk/dviout-util/Makefile.in +++ b/Build/source/texk/dviout-util/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -198,8 +198,8 @@ am__uninstall_files_from_dir = { \ man1dir = $(mandir)/man1 NROFF = nroff MANS = $(dist_man1_MANS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - config.h.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1057,10 +1057,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1103,8 +1099,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1296,8 +1290,8 @@ uninstall-man: uninstall-man1 check-TESTS check-am clean clean-binPROGRAMS clean-cscope \ clean-generic clean-libtool cscope cscopelist-am ctags \ ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \ - dist-shar dist-tarZ dist-xz dist-zip dist-zstd distcheck \ - distclean distclean-compile distclean-generic distclean-hdr \ + dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ + distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ diff --git a/Build/source/texk/dviout-util/aclocal.m4 b/Build/source/texk/dviout-util/aclocal.m4 index 00084a9c43e..4907d165e82 100644 --- a/Build/source/texk/dviout-util/aclocal.m4 +++ b/Build/source/texk/dviout-util/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/dviout-util/configure b/Build/source/texk/dviout-util/configure index d095c4c3c70..5ed38649428 100755 --- a/Build/source/texk/dviout-util/configure +++ b/Build/source/texk/dviout-util/configure @@ -16664,9 +16664,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/dvipdfm-x/Makefile.in b/Build/source/texk/dvipdfm-x/Makefile.in index c49a9ca535a..dbba58c3359 100644 --- a/Build/source/texk/dvipdfm-x/Makefile.in +++ b/Build/source/texk/dvipdfm-x/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -274,8 +274,8 @@ NROFF = nroff MANS = $(dist_man1_MANS) DATA = $(dist_cmapdata_DATA) $(dist_configdata_DATA) \ $(dist_glyphlistdata_DATA) $(dist_mapdata_DATA) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - config.h.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1525,10 +1525,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1571,8 +1567,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1918,12 +1912,11 @@ uninstall-man: uninstall-man1 clean-cscope clean-generic clean-libtool clean-noinstPROGRAMS \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ - dist-zstd distcheck distclean distclean-compile \ - distclean-generic distclean-hdr distclean-libtool \ - distclean-tags distcleancheck distdir distuninstallcheck dvi \ - dvi-am html html-am info info-am install install-am \ - install-binPROGRAMS install-data install-data-am \ - install-data-hook install-dist_binSCRIPTS \ + distcheck distclean distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags distcleancheck \ + distdir distuninstallcheck dvi dvi-am html html-am info \ + info-am install install-am install-binPROGRAMS install-data \ + install-data-am install-data-hook install-dist_binSCRIPTS \ install-dist_cmapdataDATA install-dist_configdataDATA \ install-dist_glyphlistdataDATA install-dist_mapdataDATA \ install-dvi install-dvi-am install-exec install-exec-am \ diff --git a/Build/source/texk/dvipdfm-x/aclocal.m4 b/Build/source/texk/dvipdfm-x/aclocal.m4 index 0ea14b631c0..602c8070d98 100644 --- a/Build/source/texk/dvipdfm-x/aclocal.m4 +++ b/Build/source/texk/dvipdfm-x/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_COND_IF -*- Autoconf -*- -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -147,7 +147,7 @@ fi[]dnl # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -178,7 +178,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -369,7 +369,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -408,9 +408,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -437,7 +435,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -634,7 +632,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -655,7 +653,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -677,7 +675,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -712,7 +710,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -755,7 +753,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -794,7 +792,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -823,7 +821,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -870,7 +868,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -889,7 +887,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -970,7 +968,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1030,7 +1028,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1058,7 +1056,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1077,7 +1075,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/dvipdfm-x/configure b/Build/source/texk/dvipdfm-x/configure index 82c95d14489..4f4a26269c3 100755 --- a/Build/source/texk/dvipdfm-x/configure +++ b/Build/source/texk/dvipdfm-x/configure @@ -17835,9 +17835,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/dvipng/Makefile.in b/Build/source/texk/dvipng/Makefile.in index 070607fd6e0..0af7b0fbbc9 100644 --- a/Build/source/texk/dvipng/Makefile.in +++ b/Build/source/texk/dvipng/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -225,8 +225,8 @@ am__recursive_targets = \ AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope check recheck distdir distdir-am dist dist-all \ distcheck -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - config.h.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1261,10 +1261,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1307,8 +1303,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1542,7 +1536,7 @@ uninstall-am: uninstall-binPROGRAMS clean-binPROGRAMS clean-cscope clean-generic clean-libtool \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \ - dist-zip dist-zstd distcheck distclean distclean-compile \ + dist-zip distcheck distclean distclean-compile \ distclean-generic distclean-hdr distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ diff --git a/Build/source/texk/dvipng/aclocal.m4 b/Build/source/texk/dvipng/aclocal.m4 index c617eb9c796..d44e869f7bc 100644 --- a/Build/source/texk/dvipng/aclocal.m4 +++ b/Build/source/texk/dvipng/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_COND_IF -*- Autoconf -*- -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -147,7 +147,7 @@ fi[]dnl # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -178,7 +178,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -369,7 +369,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -408,9 +408,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -437,7 +435,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -634,7 +632,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -655,7 +653,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -677,7 +675,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -712,7 +710,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -755,7 +753,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -794,7 +792,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -823,7 +821,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -870,7 +868,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -889,7 +887,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -970,7 +968,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1030,7 +1028,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1058,7 +1056,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1077,7 +1075,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/dvipng/configure b/Build/source/texk/dvipng/configure index 026fefdc2fc..28e2c65c420 100755 --- a/Build/source/texk/dvipng/configure +++ b/Build/source/texk/dvipng/configure @@ -18556,9 +18556,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/dvipng/doc/Makefile.in b/Build/source/texk/dvipng/doc/Makefile.in index 184b1837bf3..223da365b0e 100644 --- a/Build/source/texk/dvipng/doc/Makefile.in +++ b/Build/source/texk/dvipng/doc/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/dvipng/help/Makefile.in b/Build/source/texk/dvipng/help/Makefile.in index 362683ba3d2..e486c91de98 100644 --- a/Build/source/texk/dvipng/help/Makefile.in +++ b/Build/source/texk/dvipng/help/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/dvipos/Makefile.in b/Build/source/texk/dvipos/Makefile.in index 612deadaae3..b248682f2f7 100644 --- a/Build/source/texk/dvipos/Makefile.in +++ b/Build/source/texk/dvipos/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -195,8 +195,8 @@ am__uninstall_files_from_dir = { \ man1dir = $(mandir)/man1 NROFF = nroff MANS = $(dist_man1_MANS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - config.h.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -698,10 +698,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -744,8 +740,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -936,20 +930,20 @@ uninstall-man: uninstall-man1 check-am clean clean-binPROGRAMS clean-cscope clean-generic \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ - dist-xz dist-zip dist-zstd distcheck distclean \ - distclean-compile distclean-generic distclean-hdr \ - distclean-libtool distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-binPROGRAMS install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-man1 install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \ - uninstall-man uninstall-man1 + dist-xz dist-zip distcheck distclean distclean-compile \ + distclean-generic distclean-hdr distclean-libtool \ + distclean-tags distcleancheck distdir distuninstallcheck dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-binPROGRAMS uninstall-man \ + uninstall-man1 .PRECIOUS: Makefile diff --git a/Build/source/texk/dvipos/aclocal.m4 b/Build/source/texk/dvipos/aclocal.m4 index 7e719b5326f..36330023bfe 100644 --- a/Build/source/texk/dvipos/aclocal.m4 +++ b/Build/source/texk/dvipos/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/dvipos/configure b/Build/source/texk/dvipos/configure index 72eaa45ef45..b148776405f 100755 --- a/Build/source/texk/dvipos/configure +++ b/Build/source/texk/dvipos/configure @@ -16684,9 +16684,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/dvipsk/Makefile.in b/Build/source/texk/dvipsk/Makefile.in index e27e1edf17c..7c43a4d944f 100644 --- a/Build/source/texk/dvipsk/Makefile.in +++ b/Build/source/texk/dvipsk/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -285,8 +285,8 @@ am__recursive_targets = \ AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope check recheck distdir distdir-am dist dist-all \ distcheck -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - c-auto.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)c-auto.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1551,10 +1551,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1597,8 +1593,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1951,8 +1945,8 @@ uninstall-man: uninstall-man1 clean-aminfo clean-binPROGRAMS clean-cscope clean-generic \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-hook dist-info dist-lzip \ - dist-shar dist-tarZ dist-xz dist-zip dist-zstd distcheck \ - distclean distclean-compile distclean-generic distclean-hdr \ + dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ + distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ diff --git a/Build/source/texk/dvipsk/aclocal.m4 b/Build/source/texk/dvipsk/aclocal.m4 index 7e719b5326f..36330023bfe 100644 --- a/Build/source/texk/dvipsk/aclocal.m4 +++ b/Build/source/texk/dvipsk/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/dvipsk/configure b/Build/source/texk/dvipsk/configure index e6d8575cd0b..f145971b236 100755 --- a/Build/source/texk/dvipsk/configure +++ b/Build/source/texk/dvipsk/configure @@ -16923,9 +16923,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/dvipsk/squeeze/Makefile.in b/Build/source/texk/dvipsk/squeeze/Makefile.in index a671885c5fb..acf7bfa7b67 100644 --- a/Build/source/texk/dvipsk/squeeze/Makefile.in +++ b/Build/source/texk/dvipsk/squeeze/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -472,10 +472,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -518,8 +514,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -699,17 +693,17 @@ uninstall-am: check-am clean clean-cscope clean-generic clean-noinstPROGRAMS \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ - dist-zstd distcheck distclean distclean-compile \ - distclean-generic distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ - tags tags-am uninstall uninstall-am + distcheck distclean distclean-compile distclean-generic \ + distclean-tags distcleancheck distdir distuninstallcheck dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am .PRECIOUS: Makefile diff --git a/Build/source/texk/dvipsk/squeeze/aclocal.m4 b/Build/source/texk/dvipsk/squeeze/aclocal.m4 index 85308c30617..79e0b598557 100644 --- a/Build/source/texk/dvipsk/squeeze/aclocal.m4 +++ b/Build/source/texk/dvipsk/squeeze/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/dvipsk/squeeze/configure b/Build/source/texk/dvipsk/squeeze/configure index 37cf5aba6cf..22c8c78f8de 100755 --- a/Build/source/texk/dvipsk/squeeze/configure +++ b/Build/source/texk/dvipsk/squeeze/configure @@ -5611,9 +5611,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/dvisvgm/Makefile.in b/Build/source/texk/dvisvgm/Makefile.in index 9b8f200d32f..1ba128a99f6 100644 --- a/Build/source/texk/dvisvgm/Makefile.in +++ b/Build/source/texk/dvisvgm/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -190,8 +190,8 @@ am__recursive_targets = \ AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope check recheck distdir distdir-am dist dist-all \ distcheck -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - config.h.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1063,10 +1063,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1109,8 +1105,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1298,19 +1292,19 @@ uninstall-man: uninstall-man1 am--refresh check check-TESTS check-am clean clean-cscope \ clean-generic clean-libtool cscope cscopelist-am ctags \ ctags-am dist dist-all dist-bzip2 dist-gzip dist-hook \ - dist-lzip dist-shar dist-tarZ dist-xz dist-zip dist-zstd \ - distcheck distclean distclean-generic distclean-hdr \ - distclean-libtool distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-man1 install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am recheck tags tags-am \ - uninstall uninstall-am uninstall-man uninstall-man1 + dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \ + distclean distclean-generic distclean-hdr distclean-libtool \ + distclean-tags distcleancheck distdir distuninstallcheck dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-man1 \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am recheck tags tags-am uninstall uninstall-am \ + uninstall-man uninstall-man1 .PRECIOUS: Makefile diff --git a/Build/source/texk/dvisvgm/aclocal.m4 b/Build/source/texk/dvisvgm/aclocal.m4 index 2cff05592b2..8e92805971f 100644 --- a/Build/source/texk/dvisvgm/aclocal.m4 +++ b/Build/source/texk/dvisvgm/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,12 +51,12 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -118,7 +118,7 @@ AC_SUBST([AR])dnl # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -170,7 +170,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -201,7 +201,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -392,7 +392,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -431,9 +431,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -460,7 +458,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -657,7 +655,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -678,7 +676,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -700,7 +698,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -735,7 +733,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -778,7 +776,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -817,7 +815,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -846,7 +844,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -893,7 +891,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -912,7 +910,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1053,7 +1051,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1081,7 +1079,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1100,7 +1098,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/dvisvgm/configure b/Build/source/texk/dvisvgm/configure index 38127bbb89b..3592a2666fd 100755 --- a/Build/source/texk/dvisvgm/configure +++ b/Build/source/texk/dvisvgm/configure @@ -24792,9 +24792,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-src/Makefile.in index 0892be550fe..b92cc984869 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/Makefile.in +++ b/Build/source/texk/dvisvgm/dvisvgm-src/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-src/libs/Makefile.in index de95dc8b441..59be1566478 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/Makefile.in +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/Makefile.in index 3ae9b483872..874748e2458 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/Makefile.in +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/clipper/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-src/libs/clipper/Makefile.in index dfe563982c4..3b76d47ee77 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/clipper/Makefile.in +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/clipper/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/Makefile.in index 63c26902728..60a53229713 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/Makefile.in +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/md5/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-src/libs/md5/Makefile.in index 3cc6c60f437..ecab065f473 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/md5/Makefile.in +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/md5/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/Makefile.in index bacdfe31717..907fc30280d 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/Makefile.in +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/Makefile.in index 91c17628b87..ab2196fba1b 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/Makefile.in +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/Makefile.in index b73efa15426..712076a65a9 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/Makefile.in +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/xxHash/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-src/libs/xxHash/Makefile.in index 448d2d238fb..fdb5c76dd4c 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/xxHash/Makefile.in +++ b/Build/source/texk/dvisvgm/dvisvgm-src/libs/xxHash/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.in index bef28ae009e..47584fce862 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.in +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/Makefile.in index 08b30fb612e..103e6bc0e36 100644 --- a/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/Makefile.in +++ b/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/gregorio/Makefile.in b/Build/source/texk/gregorio/Makefile.in index 390d081adef..afa758339b1 100644 --- a/Build/source/texk/gregorio/Makefile.in +++ b/Build/source/texk/gregorio/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -202,8 +202,8 @@ am__can_run_installinfo = \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - config_.h.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config_.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1167,10 +1167,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1213,8 +1209,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1450,11 +1444,11 @@ uninstall-am: uninstall-binPROGRAMS check-TESTS check-am clean clean-binPROGRAMS clean-cscope \ clean-generic clean-libtool cscope cscopelist-am ctags \ ctags-am dist dist-all dist-bzip2 dist-gzip dist-hook \ - dist-lzip dist-shar dist-tarZ dist-xz dist-zip dist-zstd \ - distcheck distclean distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-tags distcleancheck \ - distdir distuninstallcheck dvi dvi-am html html-am info \ - info-am install install-am install-binPROGRAMS install-data \ + dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \ + distclean distclean-compile distclean-generic distclean-hdr \ + distclean-libtool distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ diff --git a/Build/source/texk/gregorio/aclocal.m4 b/Build/source/texk/gregorio/aclocal.m4 index 7e719b5326f..36330023bfe 100644 --- a/Build/source/texk/gregorio/aclocal.m4 +++ b/Build/source/texk/gregorio/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/gregorio/configure b/Build/source/texk/gregorio/configure index 9b4e862447b..eacfee74592 100755 --- a/Build/source/texk/gregorio/configure +++ b/Build/source/texk/gregorio/configure @@ -17220,9 +17220,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/gsftopk/Makefile.in b/Build/source/texk/gsftopk/Makefile.in index 07cf08ba490..8e09fa51001 100644 --- a/Build/source/texk/gsftopk/Makefile.in +++ b/Build/source/texk/gsftopk/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -197,8 +197,8 @@ man1dir = $(mandir)/man1 NROFF = nroff MANS = $(nodist_man1_MANS) DATA = $(dist_gsftopkpsheader_DATA) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - c-auto.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)c-auto.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -716,10 +716,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -762,8 +758,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -950,22 +944,21 @@ uninstall-man: uninstall-man1 check-am clean clean-binPROGRAMS clean-cscope clean-generic \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ - dist-xz dist-zip dist-zstd distcheck distclean \ - distclean-compile distclean-generic distclean-hdr \ - distclean-libtool distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-binPROGRAMS install-data \ - install-data-am install-dist_gsftopkpsheaderDATA install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-man1 install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am uninstall-binPROGRAMS \ - uninstall-dist_gsftopkpsheaderDATA uninstall-man \ - uninstall-man1 + dist-xz dist-zip distcheck distclean distclean-compile \ + distclean-generic distclean-hdr distclean-libtool \ + distclean-tags distcleancheck distdir distuninstallcheck dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am \ + install-dist_gsftopkpsheaderDATA install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-man1 \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-binPROGRAMS uninstall-dist_gsftopkpsheaderDATA \ + uninstall-man uninstall-man1 .PRECIOUS: Makefile diff --git a/Build/source/texk/gsftopk/aclocal.m4 b/Build/source/texk/gsftopk/aclocal.m4 index 7e719b5326f..36330023bfe 100644 --- a/Build/source/texk/gsftopk/aclocal.m4 +++ b/Build/source/texk/gsftopk/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/gsftopk/configure b/Build/source/texk/gsftopk/configure index c8d8be26fe3..639af528ecc 100755 --- a/Build/source/texk/gsftopk/configure +++ b/Build/source/texk/gsftopk/configure @@ -17024,9 +17024,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/kpathsea/Makefile.in b/Build/source/texk/kpathsea/Makefile.in index c3f2c30df02..6f17519e45a 100644 --- a/Build/source/texk/kpathsea/Makefile.in +++ b/Build/source/texk/kpathsea/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -375,8 +375,8 @@ am__recursive_targets = \ AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope check recheck distdir distdir-am dist dist-all \ distcheck -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - c-auto.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)c-auto.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1974,10 +1974,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -2020,8 +2016,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -2351,8 +2345,8 @@ uninstall-am: uninstall-binPROGRAMS uninstall-kpseincludeHEADERS \ clean-binPROGRAMS clean-cscope clean-generic \ clean-libLTLIBRARIES clean-libtool cscope cscopelist-am ctags \ ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \ - dist-shar dist-tarZ dist-xz dist-zip dist-zstd distcheck \ - distclean distclean-compile distclean-generic distclean-hdr \ + dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ + distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ diff --git a/Build/source/texk/kpathsea/aclocal.m4 b/Build/source/texk/kpathsea/aclocal.m4 index 04262021f56..05904f3f92f 100644 --- a/Build/source/texk/kpathsea/aclocal.m4 +++ b/Build/source/texk/kpathsea/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/kpathsea/configure b/Build/source/texk/kpathsea/configure index 6f0c31e50d1..f40e104058d 100755 --- a/Build/source/texk/kpathsea/configure +++ b/Build/source/texk/kpathsea/configure @@ -15862,9 +15862,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/kpathsea/doc/Makefile.in b/Build/source/texk/kpathsea/doc/Makefile.in index 55db371ad6a..2cd1be928cf 100644 --- a/Build/source/texk/kpathsea/doc/Makefile.in +++ b/Build/source/texk/kpathsea/doc/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/kpathsea/man/Makefile.in b/Build/source/texk/kpathsea/man/Makefile.in index 846b78d4d39..4fa5ba71a5a 100644 --- a/Build/source/texk/kpathsea/man/Makefile.in +++ b/Build/source/texk/kpathsea/man/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/kpathsea/win32/Makefile.in b/Build/source/texk/kpathsea/win32/Makefile.in index a46dd068cf1..e645b257428 100644 --- a/Build/source/texk/kpathsea/win32/Makefile.in +++ b/Build/source/texk/kpathsea/win32/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/lcdf-typetools/Makefile.in b/Build/source/texk/lcdf-typetools/Makefile.in index 25713cbe065..db24102195e 100644 --- a/Build/source/texk/lcdf-typetools/Makefile.in +++ b/Build/source/texk/lcdf-typetools/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -150,8 +150,8 @@ am__recursive_targets = \ AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope check recheck distdir distdir-am dist dist-all \ distcheck -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - autoconf.h.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)autoconf.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -994,10 +994,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1040,8 +1036,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1224,18 +1218,18 @@ uninstall-am: am--refresh check check-TESTS check-am clean clean-cscope \ clean-generic clean-libtool cscope cscopelist-am ctags \ ctags-am dist dist-all dist-bzip2 dist-gzip dist-hook \ - dist-lzip dist-shar dist-tarZ dist-xz dist-zip dist-zstd \ - distcheck distclean distclean-generic distclean-hdr \ - distclean-libtool distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - installdirs-am maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ - ps ps-am recheck tags tags-am uninstall uninstall-am + dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \ + distclean distclean-generic distclean-hdr distclean-libtool \ + distclean-tags distcleancheck distdir distuninstallcheck dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + recheck tags tags-am uninstall uninstall-am .PRECIOUS: Makefile diff --git a/Build/source/texk/lcdf-typetools/aclocal.m4 b/Build/source/texk/lcdf-typetools/aclocal.m4 index 0e61de09ea8..e9f6e0596be 100644 --- a/Build/source/texk/lcdf-typetools/aclocal.m4 +++ b/Build/source/texk/lcdf-typetools/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/lcdf-typetools/configure b/Build/source/texk/lcdf-typetools/configure index c920bf1bc80..b546e72c194 100755 --- a/Build/source/texk/lcdf-typetools/configure +++ b/Build/source/texk/lcdf-typetools/configure @@ -23291,9 +23291,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/Makefile.in b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/Makefile.in index 54f293e59a6..6f74663fbd1 100644 --- a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/Makefile.in +++ b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/cfftot1/Makefile.in b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/cfftot1/Makefile.in index 414de0c8dc6..ccbb5f823e0 100644 --- a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/cfftot1/Makefile.in +++ b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/cfftot1/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/libefont/Makefile.in b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/libefont/Makefile.in index 9fb6a4d54a0..0dad01cda71 100644 --- a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/libefont/Makefile.in +++ b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/libefont/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/liblcdf/Makefile.in b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/liblcdf/Makefile.in index b966133b07e..59c15803731 100644 --- a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/liblcdf/Makefile.in +++ b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/liblcdf/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/mmafm/Makefile.in b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/mmafm/Makefile.in index ac2ffd5b842..fa8d869d4e9 100644 --- a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/mmafm/Makefile.in +++ b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/mmafm/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/mmpfb/Makefile.in b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/mmpfb/Makefile.in index 204767063fe..9812b135d34 100644 --- a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/mmpfb/Makefile.in +++ b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/mmpfb/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/otfinfo/Makefile.in b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/otfinfo/Makefile.in index 3bd3bed0b44..2732f05e322 100644 --- a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/otfinfo/Makefile.in +++ b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/otfinfo/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/otftotfm/Makefile.in b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/otftotfm/Makefile.in index d963ef047ce..baaf7a2f97f 100644 --- a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/otftotfm/Makefile.in +++ b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/otftotfm/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/t1dotlessj/Makefile.in b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/t1dotlessj/Makefile.in index 0a3402ee813..53769ebe97a 100644 --- a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/t1dotlessj/Makefile.in +++ b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/t1dotlessj/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/t1lint/Makefile.in b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/t1lint/Makefile.in index 1f565a1affe..7b626b5822d 100644 --- a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/t1lint/Makefile.in +++ b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/t1lint/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/t1rawafm/Makefile.in b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/t1rawafm/Makefile.in index 118719d9054..6579da7829e 100644 --- a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/t1rawafm/Makefile.in +++ b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/t1rawafm/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/t1reencode/Makefile.in b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/t1reencode/Makefile.in index d83e7108ecd..bacd1593dab 100644 --- a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/t1reencode/Makefile.in +++ b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/t1reencode/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/t1testpage/Makefile.in b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/t1testpage/Makefile.in index ba5e408f141..8ce62b9c5a6 100644 --- a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/t1testpage/Makefile.in +++ b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/t1testpage/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/ttftotype42/Makefile.in b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/ttftotype42/Makefile.in index 83631105317..24af6b93746 100644 --- a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/ttftotype42/Makefile.in +++ b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/ttftotype42/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/makeindexk/Makefile.in b/Build/source/texk/makeindexk/Makefile.in index 48578613add..f23fcae2982 100644 --- a/Build/source/texk/makeindexk/Makefile.in +++ b/Build/source/texk/makeindexk/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -203,8 +203,8 @@ am__can_run_installinfo = \ man1dir = $(mandir)/man1 NROFF = nroff MANS = $(dist_man1_MANS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - c-auto.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)c-auto.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1101,10 +1101,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1147,8 +1143,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1349,8 +1343,8 @@ uninstall-man: uninstall-man1 check-TESTS check-am clean clean-binPROGRAMS clean-cscope \ clean-generic clean-libtool cscope cscopelist-am ctags \ ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \ - dist-shar dist-tarZ dist-xz dist-zip dist-zstd distcheck \ - distclean distclean-compile distclean-generic distclean-hdr \ + dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ + distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ diff --git a/Build/source/texk/makeindexk/aclocal.m4 b/Build/source/texk/makeindexk/aclocal.m4 index 35338f6818b..dccfe30646b 100644 --- a/Build/source/texk/makeindexk/aclocal.m4 +++ b/Build/source/texk/makeindexk/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/makeindexk/configure b/Build/source/texk/makeindexk/configure index 1058367d6aa..50c51244bd5 100755 --- a/Build/source/texk/makeindexk/configure +++ b/Build/source/texk/makeindexk/configure @@ -16712,9 +16712,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/makejvf/Makefile.in b/Build/source/texk/makejvf/Makefile.in index d1b72b96b81..04cac4d1424 100644 --- a/Build/source/texk/makejvf/Makefile.in +++ b/Build/source/texk/makejvf/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -197,8 +197,8 @@ am__uninstall_files_from_dir = { \ man1dir = $(mandir)/man1 NROFF = nroff MANS = $(dist_man1_MANS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - c-auto.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)c-auto.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1040,10 +1040,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1086,8 +1082,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1288,8 +1282,8 @@ uninstall-man: uninstall-man1 check-TESTS check-am clean clean-binPROGRAMS clean-cscope \ clean-generic clean-libtool cscope cscopelist-am ctags \ ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \ - dist-shar dist-tarZ dist-xz dist-zip dist-zstd distcheck \ - distclean distclean-compile distclean-generic distclean-hdr \ + dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ + distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ diff --git a/Build/source/texk/makejvf/aclocal.m4 b/Build/source/texk/makejvf/aclocal.m4 index 00084a9c43e..4907d165e82 100644 --- a/Build/source/texk/makejvf/aclocal.m4 +++ b/Build/source/texk/makejvf/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/makejvf/configure b/Build/source/texk/makejvf/configure index b4c54c16959..17ef3f035ba 100755 --- a/Build/source/texk/makejvf/configure +++ b/Build/source/texk/makejvf/configure @@ -16656,9 +16656,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/mendexk/Makefile.in b/Build/source/texk/mendexk/Makefile.in index b4a8c06905b..658bf19bc78 100644 --- a/Build/source/texk/mendexk/Makefile.in +++ b/Build/source/texk/mendexk/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -199,8 +199,8 @@ am__uninstall_files_from_dir = { \ man1dir = $(mandir)/man1 NROFF = nroff MANS = $(dist_man1_MANS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - c-auto.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)c-auto.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1056,10 +1056,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1102,8 +1098,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1309,8 +1303,8 @@ uninstall-man: uninstall-man1 check-TESTS check-am clean clean-binPROGRAMS clean-cscope \ clean-generic clean-libtool cscope cscopelist-am ctags \ ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \ - dist-shar dist-tarZ dist-xz dist-zip dist-zstd distcheck \ - distclean distclean-compile distclean-generic distclean-hdr \ + dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ + distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ diff --git a/Build/source/texk/mendexk/aclocal.m4 b/Build/source/texk/mendexk/aclocal.m4 index 00084a9c43e..4907d165e82 100644 --- a/Build/source/texk/mendexk/aclocal.m4 +++ b/Build/source/texk/mendexk/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/mendexk/configure b/Build/source/texk/mendexk/configure index 73e24a17a62..160286611c2 100755 --- a/Build/source/texk/mendexk/configure +++ b/Build/source/texk/mendexk/configure @@ -16683,9 +16683,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/musixtnt/Makefile.in b/Build/source/texk/musixtnt/Makefile.in index f74bec39cae..c8fba8cf47c 100644 --- a/Build/source/texk/musixtnt/Makefile.in +++ b/Build/source/texk/musixtnt/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -196,8 +196,8 @@ am__uninstall_files_from_dir = { \ man1dir = $(mandir)/man1 NROFF = nroff MANS = $(dist_man_MANS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - config.h.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1055,10 +1055,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1101,8 +1097,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1296,11 +1290,11 @@ uninstall-man: uninstall-man1 check-TESTS check-am clean clean-binPROGRAMS clean-cscope \ clean-generic clean-libtool cscope cscopelist-am ctags \ ctags-am dist dist-all dist-bzip2 dist-gzip dist-hook \ - dist-lzip dist-shar dist-tarZ dist-xz dist-zip dist-zstd \ - distcheck distclean distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-tags distcleancheck \ - distdir distuninstallcheck dvi dvi-am html html-am info \ - info-am install install-am install-binPROGRAMS install-data \ + dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \ + distclean distclean-compile distclean-generic distclean-hdr \ + distclean-libtool distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-man1 install-pdf \ diff --git a/Build/source/texk/musixtnt/aclocal.m4 b/Build/source/texk/musixtnt/aclocal.m4 index 7e719b5326f..36330023bfe 100644 --- a/Build/source/texk/musixtnt/aclocal.m4 +++ b/Build/source/texk/musixtnt/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/musixtnt/configure b/Build/source/texk/musixtnt/configure index afea759f025..fc83523e0cd 100755 --- a/Build/source/texk/musixtnt/configure +++ b/Build/source/texk/musixtnt/configure @@ -16726,9 +16726,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/ps2pk/Makefile.in b/Build/source/texk/ps2pk/Makefile.in index 3dcf071281f..1400c0ede14 100644 --- a/Build/source/texk/ps2pk/Makefile.in +++ b/Build/source/texk/ps2pk/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -233,8 +233,8 @@ am__uninstall_files_from_dir = { \ man1dir = $(mandir)/man1 NROFF = nroff MANS = $(dist_man1_MANS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - c-auto.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)c-auto.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1205,10 +1205,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1251,8 +1247,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1498,20 +1492,19 @@ uninstall-man: uninstall-man1 clean-generic clean-libtool clean-noinstPROGRAMS cscope \ cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ - dist-zstd distcheck distclean distclean-compile \ - distclean-generic distclean-hdr distclean-libtool \ - distclean-tags distcleancheck distdir distuninstallcheck dvi \ - dvi-am html html-am info info-am install install-am \ - install-binPROGRAMS install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-man1 install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am recheck tags tags-am \ - uninstall uninstall-am uninstall-binPROGRAMS uninstall-man \ - uninstall-man1 + distcheck distclean distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags distcleancheck \ + distdir distuninstallcheck dvi dvi-am html html-am info \ + info-am install install-am install-binPROGRAMS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-man1 install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + recheck tags tags-am uninstall uninstall-am \ + uninstall-binPROGRAMS uninstall-man uninstall-man1 .PRECIOUS: Makefile diff --git a/Build/source/texk/ps2pk/aclocal.m4 b/Build/source/texk/ps2pk/aclocal.m4 index 7e719b5326f..36330023bfe 100644 --- a/Build/source/texk/ps2pk/aclocal.m4 +++ b/Build/source/texk/ps2pk/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/ps2pk/configure b/Build/source/texk/ps2pk/configure index 623078391eb..475349d659d 100755 --- a/Build/source/texk/ps2pk/configure +++ b/Build/source/texk/ps2pk/configure @@ -16939,9 +16939,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/psutils/Makefile.in b/Build/source/texk/psutils/Makefile.in index 318d0845577..9a5f948f53a 100644 --- a/Build/source/texk/psutils/Makefile.in +++ b/Build/source/texk/psutils/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -257,8 +257,8 @@ man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man1_MANS) DATA = $(dist_configdata_DATA) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - config.h.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1302,10 +1302,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1348,8 +1344,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1570,7 +1564,7 @@ uninstall-man: uninstall-man1 clean-generic clean-libtool clean-noinstLIBRARIES cscope \ cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \ - dist-zip dist-zstd distcheck distclean distclean-compile \ + dist-zip distcheck distclean distclean-compile \ distclean-generic distclean-hdr distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ diff --git a/Build/source/texk/psutils/aclocal.m4 b/Build/source/texk/psutils/aclocal.m4 index faab18d40f5..6ea1a8b03e2 100644 --- a/Build/source/texk/psutils/aclocal.m4 +++ b/Build/source/texk/psutils/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/psutils/configure b/Build/source/texk/psutils/configure index 6c2a656b115..c5a5fc17687 100755 --- a/Build/source/texk/psutils/configure +++ b/Build/source/texk/psutils/configure @@ -16847,9 +16847,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/ptexenc/Makefile.in b/Build/source/texk/ptexenc/Makefile.in index 44647507c2e..21e5a65f37b 100644 --- a/Build/source/texk/ptexenc/Makefile.in +++ b/Build/source/texk/ptexenc/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -203,8 +203,8 @@ am__can_run_installinfo = \ esac DATA = $(pkgconfig_DATA) HEADERS = $(nobase_include_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - c-auto.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)c-auto.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -744,10 +744,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -790,8 +786,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -983,21 +977,21 @@ uninstall-am: uninstall-libLTLIBRARIES uninstall-nobase_includeHEADERS \ check-am clean clean-cscope clean-generic clean-libLTLIBRARIES \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ - dist-xz dist-zip dist-zstd distcheck distclean \ - distclean-compile distclean-generic distclean-hdr \ - distclean-libtool distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am \ - install-libLTLIBRARIES install-man \ - install-nobase_includeHEADERS install-pdf install-pdf-am \ - install-pkgconfigDATA install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES \ - uninstall-nobase_includeHEADERS uninstall-pkgconfigDATA + dist-xz dist-zip distcheck distclean distclean-compile \ + distclean-generic distclean-hdr distclean-libtool \ + distclean-tags distcleancheck distdir distuninstallcheck dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-libLTLIBRARIES \ + install-man install-nobase_includeHEADERS install-pdf \ + install-pdf-am install-pkgconfigDATA install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-libLTLIBRARIES uninstall-nobase_includeHEADERS \ + uninstall-pkgconfigDATA .PRECIOUS: Makefile diff --git a/Build/source/texk/ptexenc/aclocal.m4 b/Build/source/texk/ptexenc/aclocal.m4 index 72a7ebc5081..3c210e36e41 100644 --- a/Build/source/texk/ptexenc/aclocal.m4 +++ b/Build/source/texk/ptexenc/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/ptexenc/configure b/Build/source/texk/ptexenc/configure index 92c31e35712..80b5fafc0aa 100755 --- a/Build/source/texk/ptexenc/configure +++ b/Build/source/texk/ptexenc/configure @@ -16779,9 +16779,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/seetexk/Makefile.in b/Build/source/texk/seetexk/Makefile.in index ae2b5dc001b..dcbeb09325c 100644 --- a/Build/source/texk/seetexk/Makefile.in +++ b/Build/source/texk/seetexk/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -228,8 +228,8 @@ man1dir = $(mandir)/man1 NROFF = nroff MANS = $(dist_man1_MANS) HEADERS = $(noinst_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - config.h.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1110,10 +1110,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1156,8 +1152,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1371,20 +1365,19 @@ uninstall-man: uninstall-man1 clean-generic clean-libtool clean-noinstLIBRARIES cscope \ cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ - dist-zstd distcheck distclean distclean-compile \ - distclean-generic distclean-hdr distclean-libtool \ - distclean-tags distcleancheck distdir distuninstallcheck dvi \ - dvi-am html html-am info info-am install install-am \ - install-binPROGRAMS install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-man1 install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am recheck tags tags-am \ - uninstall uninstall-am uninstall-binPROGRAMS uninstall-man \ - uninstall-man1 + distcheck distclean distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags distcleancheck \ + distdir distuninstallcheck dvi dvi-am html html-am info \ + info-am install install-am install-binPROGRAMS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-man1 install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + recheck tags tags-am uninstall uninstall-am \ + uninstall-binPROGRAMS uninstall-man uninstall-man1 .PRECIOUS: Makefile diff --git a/Build/source/texk/seetexk/aclocal.m4 b/Build/source/texk/seetexk/aclocal.m4 index 7e719b5326f..36330023bfe 100644 --- a/Build/source/texk/seetexk/aclocal.m4 +++ b/Build/source/texk/seetexk/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/seetexk/configure b/Build/source/texk/seetexk/configure index 93849084a51..f87119f346a 100755 --- a/Build/source/texk/seetexk/configure +++ b/Build/source/texk/seetexk/configure @@ -16689,9 +16689,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/tex4htk/Makefile.in b/Build/source/texk/tex4htk/Makefile.in index 0ca3ec83323..ce81eacf220 100644 --- a/Build/source/texk/tex4htk/Makefile.in +++ b/Build/source/texk/tex4htk/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -203,8 +203,8 @@ am__can_run_installinfo = \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - c-auto.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)c-auto.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -805,10 +805,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -851,8 +847,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1042,7 +1036,7 @@ uninstall-am: uninstall-binPROGRAMS uninstall-dist_binSCRIPTS \ check-am clean clean-binPROGRAMS clean-cscope clean-generic \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \ - dist-tarZ dist-xz dist-zip dist-zstd distcheck distclean \ + dist-tarZ dist-xz dist-zip distcheck distclean \ distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ diff --git a/Build/source/texk/tex4htk/aclocal.m4 b/Build/source/texk/tex4htk/aclocal.m4 index 35338f6818b..dccfe30646b 100644 --- a/Build/source/texk/tex4htk/aclocal.m4 +++ b/Build/source/texk/tex4htk/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/tex4htk/configure b/Build/source/texk/tex4htk/configure index f96cb9dd46d..55b660606e6 100755 --- a/Build/source/texk/tex4htk/configure +++ b/Build/source/texk/tex4htk/configure @@ -16961,9 +16961,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/texlive/Makefile.in b/Build/source/texk/texlive/Makefile.in index 90bc98780cc..3b165a5f469 100644 --- a/Build/source/texk/texlive/Makefile.in +++ b/Build/source/texk/texlive/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -882,10 +882,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -928,8 +924,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1110,17 +1104,17 @@ uninstall-am: am--refresh check check-TESTS check-am clean clean-cscope \ clean-generic cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ - dist-xz dist-zip dist-zstd distcheck distclean \ - distclean-generic distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - installdirs-am maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-generic pdf pdf-am ps ps-am recheck \ - tags tags-am uninstall uninstall-am + dist-xz dist-zip distcheck distclean distclean-generic \ + distclean-tags distcleancheck distdir distuninstallcheck dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am recheck tags tags-am \ + uninstall uninstall-am .PRECIOUS: Makefile diff --git a/Build/source/texk/texlive/aclocal.m4 b/Build/source/texk/texlive/aclocal.m4 index 6753815bb95..a9e38914ff6 100644 --- a/Build/source/texk/texlive/aclocal.m4 +++ b/Build/source/texk/texlive/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/texlive/configure b/Build/source/texk/texlive/configure index 49e09c33aa8..1575895f783 100755 --- a/Build/source/texk/texlive/configure +++ b/Build/source/texk/texlive/configure @@ -4918,9 +4918,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/texlive/linked_scripts/Makefile.in b/Build/source/texk/texlive/linked_scripts/Makefile.in index e9e95215d7f..b41c430ead7 100644 --- a/Build/source/texk/texlive/linked_scripts/Makefile.in +++ b/Build/source/texk/texlive/linked_scripts/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/texlive/tl_support/Makefile.in b/Build/source/texk/texlive/tl_support/Makefile.in index 5258464cb93..42345481f07 100644 --- a/Build/source/texk/texlive/tl_support/Makefile.in +++ b/Build/source/texk/texlive/tl_support/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/ttf2pk2/Makefile.in b/Build/source/texk/ttf2pk2/Makefile.in index eb1b0be1a54..3fd49554b40 100644 --- a/Build/source/texk/ttf2pk2/Makefile.in +++ b/Build/source/texk/ttf2pk2/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -221,8 +221,8 @@ NROFF = nroff MANS = $(dist_man1_MANS) DATA = $(dist_cfgdata_DATA) $(dist_encdata_DATA) $(dist_mapdata_DATA) \ $(dist_sfddata_DATA) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - config.h.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1227,10 +1227,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1273,8 +1269,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1499,8 +1493,8 @@ uninstall-man: uninstall-man1 check-TESTS check-am clean clean-binPROGRAMS clean-cscope \ clean-generic clean-libtool cscope cscopelist-am ctags \ ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \ - dist-shar dist-tarZ dist-xz dist-zip dist-zstd distcheck \ - distclean distclean-compile distclean-generic distclean-hdr \ + dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ + distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ diff --git a/Build/source/texk/ttf2pk2/aclocal.m4 b/Build/source/texk/ttf2pk2/aclocal.m4 index 97f868b40a1..3a8f2b92b47 100644 --- a/Build/source/texk/ttf2pk2/aclocal.m4 +++ b/Build/source/texk/ttf2pk2/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/ttf2pk2/configure b/Build/source/texk/ttf2pk2/configure index 4e7df89fbb9..9f12fde9e28 100755 --- a/Build/source/texk/ttf2pk2/configure +++ b/Build/source/texk/ttf2pk2/configure @@ -17005,9 +17005,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/ttfdump/Makefile.in b/Build/source/texk/ttfdump/Makefile.in index 8c49a834e40..16f32e09d97 100644 --- a/Build/source/texk/ttfdump/Makefile.in +++ b/Build/source/texk/ttfdump/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -236,8 +236,8 @@ am__uninstall_files_from_dir = { \ man1dir = $(mandir)/man1 NROFF = nroff MANS = $(dist_man1_MANS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - config.h.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1235,10 +1235,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1281,8 +1277,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1542,20 +1536,19 @@ uninstall-man: uninstall-man1 clean-generic clean-libtool clean-noinstLIBRARIES cscope \ cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ - dist-zstd distcheck distclean distclean-compile \ - distclean-generic distclean-hdr distclean-libtool \ - distclean-tags distcleancheck distdir distuninstallcheck dvi \ - dvi-am html html-am info info-am install install-am \ - install-binPROGRAMS install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-man1 install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am recheck tags tags-am \ - uninstall uninstall-am uninstall-binPROGRAMS uninstall-man \ - uninstall-man1 + distcheck distclean distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags distcleancheck \ + distdir distuninstallcheck dvi dvi-am html html-am info \ + info-am install install-am install-binPROGRAMS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-man1 install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + recheck tags tags-am uninstall uninstall-am \ + uninstall-binPROGRAMS uninstall-man uninstall-man1 .PRECIOUS: Makefile diff --git a/Build/source/texk/ttfdump/aclocal.m4 b/Build/source/texk/ttfdump/aclocal.m4 index 7e719b5326f..36330023bfe 100644 --- a/Build/source/texk/ttfdump/aclocal.m4 +++ b/Build/source/texk/ttfdump/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/ttfdump/configure b/Build/source/texk/ttfdump/configure index e144bfd2e2e..5e4efe7104c 100755 --- a/Build/source/texk/ttfdump/configure +++ b/Build/source/texk/ttfdump/configure @@ -16845,9 +16845,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/upmendex/Makefile.in b/Build/source/texk/upmendex/Makefile.in index feb3e6fdf05..08c9fae74a1 100644 --- a/Build/source/texk/upmendex/Makefile.in +++ b/Build/source/texk/upmendex/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -191,8 +191,8 @@ am__can_run_installinfo = \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - c-auto.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)c-auto.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1069,10 +1069,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1115,8 +1111,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1322,8 +1316,8 @@ uninstall-am: uninstall-binPROGRAMS check-TESTS check-am clean clean-binPROGRAMS clean-cscope \ clean-generic clean-libtool cscope cscopelist-am ctags \ ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \ - dist-shar dist-tarZ dist-xz dist-zip dist-zstd distcheck \ - distclean distclean-compile distclean-generic distclean-hdr \ + dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ + distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ diff --git a/Build/source/texk/upmendex/aclocal.m4 b/Build/source/texk/upmendex/aclocal.m4 index 0f39289fa4a..5392efefa96 100644 --- a/Build/source/texk/upmendex/aclocal.m4 +++ b/Build/source/texk/upmendex/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/upmendex/configure b/Build/source/texk/upmendex/configure index 54a1ee4c6f1..f1bf93d036f 100755 --- a/Build/source/texk/upmendex/configure +++ b/Build/source/texk/upmendex/configure @@ -21605,9 +21605,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/web2c/Makefile.am b/Build/source/texk/web2c/Makefile.am index 9d87dcca169..cdf26e5929b 100644 --- a/Build/source/texk/web2c/Makefile.am +++ b/Build/source/texk/web2c/Makefile.am @@ -107,6 +107,8 @@ $(proglib): ${srcdir}/lib/*.c @MPFR_RULE@ ## Rebuild libxpdf @XPDF_RULE@ +## Rebuild pplib +@PPLIB_RULE@ ## Rebuild poppler @POPPLER_RULE@ ## Rebuild libzzip @@ -237,7 +239,6 @@ include $(srcdir)/luatexdir/am/libunilib.am include $(srcdir)/luatexdir/am/luafontforge.am include $(srcdir)/luatexdir/am/libluatex.am include $(srcdir)/luatexdir/am/luaffi.am -include $(srcdir)/luatexdir/am/luapplib.am include $(srcdir)/luatexdir/am/luatex.am diff --git a/Build/source/texk/web2c/Makefile.in b/Build/source/texk/web2c/Makefile.in index b8869838b92..5fa7d5b4dc4 100644 --- a/Build/source/texk/web2c/Makefile.in +++ b/Build/source/texk/web2c/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -384,6 +384,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/web2c-disable.m4 \ $(top_srcdir)/../../m4/kpse-mpfr-flags.m4 \ $(top_srcdir)/../../m4/kpse-pixman-flags.m4 \ $(top_srcdir)/../../m4/kpse-poppler-flags.m4 \ + $(top_srcdir)/../../m4/kpse-pplib-flags.m4 \ $(top_srcdir)/../../m4/kpse-ptexenc-flags.m4 \ $(top_srcdir)/../../m4/kpse-socket-libs.m4 \ $(top_srcdir)/../../m4/kpse-teckit-flags.m4 \ @@ -629,38 +630,9 @@ am__objects_5 = \ luatexdir/slnunicode/libluajitmisc_a-slnunico.$(OBJEXT) nodist_libluajitmisc_a_OBJECTS = $(am__objects_5) libluajitmisc_a_OBJECTS = $(nodist_libluajitmisc_a_OBJECTS) -libluajitpplib_a_AR = $(AR) $(ARFLAGS) -libluajitpplib_a_LIBADD = -am__objects_6 = \ - luatexdir/luapplib/src/libluajitpplib_a-pparray.$(OBJEXT) \ - luatexdir/luapplib/src/libluajitpplib_a-ppcrypt.$(OBJEXT) \ - luatexdir/luapplib/src/libluajitpplib_a-ppdict.$(OBJEXT) \ - luatexdir/luapplib/src/libluajitpplib_a-ppheap.$(OBJEXT) \ - luatexdir/luapplib/src/libluajitpplib_a-ppload.$(OBJEXT) \ - luatexdir/luapplib/src/libluajitpplib_a-ppstream.$(OBJEXT) \ - luatexdir/luapplib/src/libluajitpplib_a-pptest1.$(OBJEXT) \ - luatexdir/luapplib/src/libluajitpplib_a-pptest2.$(OBJEXT) \ - luatexdir/luapplib/src/libluajitpplib_a-pptest3.$(OBJEXT) \ - luatexdir/luapplib/src/libluajitpplib_a-ppxref.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluajitpplib_a-utilbasexx.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluajitpplib_a-utilcrypt.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluajitpplib_a-utilflate.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluajitpplib_a-utilfpred.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluajitpplib_a-utiliof.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluajitpplib_a-utillog.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluajitpplib_a-utillzw.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluajitpplib_a-utilmd5.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluajitpplib_a-utilmem.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluajitpplib_a-utilmemheap.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluajitpplib_a-utilmemheapiof.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluajitpplib_a-utilmeminfo.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluajitpplib_a-utilnumber.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluajitpplib_a-utilsha.$(OBJEXT) -nodist_libluajitpplib_a_OBJECTS = $(am__objects_6) -libluajitpplib_a_OBJECTS = $(nodist_libluajitpplib_a_OBJECTS) libluajitsocket_a_AR = $(AR) $(ARFLAGS) libluajitsocket_a_LIBADD = -am__objects_7 = \ +am__objects_6 = \ luatexdir/luasocket/src/libluajitsocket_a-auxiliar.$(OBJEXT) \ luatexdir/luasocket/src/libluajitsocket_a-buffer.$(OBJEXT) \ luatexdir/luasocket/src/libluajitsocket_a-compat.$(OBJEXT) \ @@ -677,14 +649,14 @@ am__objects_7 = \ luatexdir/luasocket/src/libluajitsocket_a-tcp.$(OBJEXT) \ luatexdir/luasocket/src/libluajitsocket_a-timeout.$(OBJEXT) \ luatexdir/luasocket/src/libluajitsocket_a-udp.$(OBJEXT) -nodist_libluajitsocket_a_OBJECTS = $(am__objects_7) +nodist_libluajitsocket_a_OBJECTS = $(am__objects_6) libluajitsocket_a_OBJECTS = $(nodist_libluajitsocket_a_OBJECTS) libluajittex_a_AR = $(AR) $(ARFLAGS) libluajittex_a_LIBADD = dist_libluajittex_a_OBJECTS = \ luatexdir/lua/libluajittex_a-lstrlibext.$(OBJEXT) \ luatexdir/lua/libluajittex_a-texluajitc.$(OBJEXT) -am__objects_8 = luatexdir/luafontloader/src/libluajittex_a-ffdummies.$(OBJEXT) \ +am__objects_7 = luatexdir/luafontloader/src/libluajittex_a-ffdummies.$(OBJEXT) \ luatexdir/luafontloader/src/libluajittex_a-luafflib.$(OBJEXT) \ luatexdir/dvi/libluajittex_a-dvigen.$(OBJEXT) \ luatexdir/font/libluajittex_a-dofont.$(OBJEXT) \ @@ -796,23 +768,23 @@ am__objects_8 = luatexdir/luafontloader/src/libluajittex_a-ffdummies.$(OBJEXT) \ luatexdir/utils/libluajittex_a-managed-sa.$(OBJEXT) \ luatexdir/utils/libluajittex_a-unistring.$(OBJEXT) \ synctexdir/libluajittex_a-synctex.$(OBJEXT) -am__objects_9 = -nodist_libluajittex_a_OBJECTS = $(am__objects_8) $(am__objects_9) +am__objects_8 = +nodist_libluajittex_a_OBJECTS = $(am__objects_7) $(am__objects_8) libluajittex_a_OBJECTS = $(dist_libluajittex_a_OBJECTS) \ $(nodist_libluajittex_a_OBJECTS) libluajittexspecific_a_AR = $(AR) $(ARFLAGS) libluajittexspecific_a_LIBADD = -am__objects_10 = \ +am__objects_9 = \ luatexdir/utils/libluajittexspecific_a-utils.$(OBJEXT) \ luatexdir/lua/libluajittexspecific_a-luastuff.$(OBJEXT) \ luatexdir/lua/libluajittexspecific_a-luainit.$(OBJEXT) \ luatexdir/tex/libluajittexspecific_a-printing.$(OBJEXT) -nodist_libluajittexspecific_a_OBJECTS = $(am__objects_10) +nodist_libluajittexspecific_a_OBJECTS = $(am__objects_9) libluajittexspecific_a_OBJECTS = \ $(nodist_libluajittexspecific_a_OBJECTS) libluamisc_a_AR = $(AR) $(ARFLAGS) libluamisc_a_LIBADD = -am__objects_11 = \ +am__objects_10 = \ luatexdir/luafilesystem/src/libluamisc_a-lfs.$(OBJEXT) \ luatexdir/luamd5/libluamisc_a-md5.$(OBJEXT) \ luatexdir/luamd5/libluamisc_a-md5lib.$(OBJEXT) \ @@ -821,40 +793,11 @@ am__objects_11 = \ luatexdir/luazlib/libluamisc_a-lgzip.$(OBJEXT) \ luatexdir/luazlib/libluamisc_a-lzlib.$(OBJEXT) \ luatexdir/slnunicode/libluamisc_a-slnunico.$(OBJEXT) -nodist_libluamisc_a_OBJECTS = $(am__objects_11) +nodist_libluamisc_a_OBJECTS = $(am__objects_10) libluamisc_a_OBJECTS = $(nodist_libluamisc_a_OBJECTS) -libluapplib_a_AR = $(AR) $(ARFLAGS) -libluapplib_a_LIBADD = -am__objects_12 = \ - luatexdir/luapplib/src/libluapplib_a-pparray.$(OBJEXT) \ - luatexdir/luapplib/src/libluapplib_a-ppcrypt.$(OBJEXT) \ - luatexdir/luapplib/src/libluapplib_a-ppdict.$(OBJEXT) \ - luatexdir/luapplib/src/libluapplib_a-ppheap.$(OBJEXT) \ - luatexdir/luapplib/src/libluapplib_a-ppload.$(OBJEXT) \ - luatexdir/luapplib/src/libluapplib_a-ppstream.$(OBJEXT) \ - luatexdir/luapplib/src/libluapplib_a-pptest1.$(OBJEXT) \ - luatexdir/luapplib/src/libluapplib_a-pptest2.$(OBJEXT) \ - luatexdir/luapplib/src/libluapplib_a-pptest3.$(OBJEXT) \ - luatexdir/luapplib/src/libluapplib_a-ppxref.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluapplib_a-utilbasexx.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluapplib_a-utilcrypt.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluapplib_a-utilflate.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluapplib_a-utilfpred.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluapplib_a-utiliof.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluapplib_a-utillog.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluapplib_a-utillzw.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluapplib_a-utilmd5.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluapplib_a-utilmem.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluapplib_a-utilmemheap.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluapplib_a-utilmemheapiof.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluapplib_a-utilmeminfo.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluapplib_a-utilnumber.$(OBJEXT) \ - luatexdir/luapplib/src/util/libluapplib_a-utilsha.$(OBJEXT) -nodist_libluapplib_a_OBJECTS = $(am__objects_12) -libluapplib_a_OBJECTS = $(nodist_libluapplib_a_OBJECTS) libluasocket_a_AR = $(AR) $(ARFLAGS) libluasocket_a_LIBADD = -am__objects_13 = \ +am__objects_11 = \ luatexdir/luasocket/src/libluasocket_a-auxiliar.$(OBJEXT) \ luatexdir/luasocket/src/libluasocket_a-buffer.$(OBJEXT) \ luatexdir/luasocket/src/libluasocket_a-compat.$(OBJEXT) \ @@ -871,7 +814,7 @@ am__objects_13 = \ luatexdir/luasocket/src/libluasocket_a-tcp.$(OBJEXT) \ luatexdir/luasocket/src/libluasocket_a-timeout.$(OBJEXT) \ luatexdir/luasocket/src/libluasocket_a-udp.$(OBJEXT) -nodist_libluasocket_a_OBJECTS = $(am__objects_13) +nodist_libluasocket_a_OBJECTS = $(am__objects_11) libluasocket_a_OBJECTS = $(nodist_libluasocket_a_OBJECTS) libluatex_a_AR = $(AR) $(ARFLAGS) libluatex_a_LIBADD = @@ -879,7 +822,7 @@ dist_libluatex_a_OBJECTS = \ luatexdir/lua/libluatex_a-lstrlibext.$(OBJEXT) \ luatexdir/lua/libluatex_a-helpers.$(OBJEXT) \ luatexdir/lua/libluatex_a-texluac.$(OBJEXT) -am__objects_14 = \ +am__objects_12 = \ luatexdir/luafontloader/src/libluatex_a-ffdummies.$(OBJEXT) \ luatexdir/luafontloader/src/libluatex_a-luafflib.$(OBJEXT) \ luatexdir/dvi/libluatex_a-dvigen.$(OBJEXT) \ @@ -992,16 +935,16 @@ am__objects_14 = \ luatexdir/utils/libluatex_a-managed-sa.$(OBJEXT) \ luatexdir/utils/libluatex_a-unistring.$(OBJEXT) \ synctexdir/libluatex_a-synctex.$(OBJEXT) -nodist_libluatex_a_OBJECTS = $(am__objects_14) $(am__objects_9) +nodist_libluatex_a_OBJECTS = $(am__objects_12) $(am__objects_8) libluatex_a_OBJECTS = $(dist_libluatex_a_OBJECTS) \ $(nodist_libluatex_a_OBJECTS) libluatexspecific_a_AR = $(AR) $(ARFLAGS) libluatexspecific_a_LIBADD = -am__objects_15 = luatexdir/utils/libluatexspecific_a-utils.$(OBJEXT) \ +am__objects_13 = luatexdir/utils/libluatexspecific_a-utils.$(OBJEXT) \ luatexdir/lua/libluatexspecific_a-luastuff.$(OBJEXT) \ luatexdir/lua/libluatexspecific_a-luainit.$(OBJEXT) \ luatexdir/tex/libluatexspecific_a-printing.$(OBJEXT) -nodist_libluatexspecific_a_OBJECTS = $(am__objects_15) +nodist_libluatexspecific_a_OBJECTS = $(am__objects_13) libluatexspecific_a_OBJECTS = $(nodist_libluatexspecific_a_OBJECTS) libmd5_a_AR = $(AR) $(ARFLAGS) libmd5_a_LIBADD = @@ -1009,16 +952,16 @@ am_libmd5_a_OBJECTS = libmd5/a-md5.$(OBJEXT) libmd5_a_OBJECTS = $(am_libmd5_a_OBJECTS) libmf_a_AR = $(AR) $(ARFLAGS) libmf_a_LIBADD = -am__objects_16 = mfini.$(OBJEXT) mf0.$(OBJEXT) -nodist_libmf_a_OBJECTS = $(am__objects_16) mf-pool.$(OBJEXT) +am__objects_14 = mfini.$(OBJEXT) mf0.$(OBJEXT) +nodist_libmf_a_OBJECTS = $(am__objects_14) mf-pool.$(OBJEXT) libmf_a_OBJECTS = $(nodist_libmf_a_OBJECTS) libmflua_a_AR = $(AR) $(ARFLAGS) libmflua_a_LIBADD = dist_libmflua_a_OBJECTS = luatexdir/lua/libmflua_a-lkpselib.$(OBJEXT) \ mfluadir/libmflua_a-mfluac.$(OBJEXT) -am__objects_17 = libmflua_a-mfluaini.$(OBJEXT) \ +am__objects_15 = libmflua_a-mfluaini.$(OBJEXT) \ libmflua_a-mflua0.$(OBJEXT) -nodist_libmflua_a_OBJECTS = $(am__objects_17) \ +nodist_libmflua_a_OBJECTS = $(am__objects_15) \ libmflua_a-mflua-pool.$(OBJEXT) libmflua_a_OBJECTS = $(dist_libmflua_a_OBJECTS) \ $(nodist_libmflua_a_OBJECTS) @@ -1027,35 +970,35 @@ libmfluajit_a_LIBADD = dist_libmfluajit_a_OBJECTS = \ luatexdir/lua/libmfluajit_a-lkpselib.$(OBJEXT) \ mfluadir/libmfluajit_a-mfluac.$(OBJEXT) -am__objects_18 = libmfluajit_a-mfluajitini.$(OBJEXT) \ +am__objects_16 = libmfluajit_a-mfluajitini.$(OBJEXT) \ libmfluajit_a-mfluajit0.$(OBJEXT) -nodist_libmfluajit_a_OBJECTS = $(am__objects_18) \ +nodist_libmfluajit_a_OBJECTS = $(am__objects_16) \ libmfluajit_a-mfluajit-pool.$(OBJEXT) libmfluajit_a_OBJECTS = $(dist_libmfluajit_a_OBJECTS) \ $(nodist_libmfluajit_a_OBJECTS) libmplibbackends_a_AR = $(AR) $(ARFLAGS) libmplibbackends_a_LIBADD = -am__objects_19 = libmplibbackends_a-pngout.$(OBJEXT) -am__objects_20 = libmplibbackends_a-svgout.$(OBJEXT) -nodist_libmplibbackends_a_OBJECTS = $(am__objects_19) \ - $(am__objects_20) +am__objects_17 = libmplibbackends_a-pngout.$(OBJEXT) +am__objects_18 = libmplibbackends_a-svgout.$(OBJEXT) +nodist_libmplibbackends_a_OBJECTS = $(am__objects_17) \ + $(am__objects_18) libmplibbackends_a_OBJECTS = $(nodist_libmplibbackends_a_OBJECTS) libmplibcore_a_AR = $(AR) $(ARFLAGS) libmplibcore_a_LIBADD = -am__objects_21 = libmplibcore_a-mp.$(OBJEXT) -am__objects_22 = libmplibcore_a-mpmath.$(OBJEXT) -am__objects_23 = libmplibcore_a-mpmathdecimal.$(OBJEXT) -am__objects_24 = libmplibcore_a-mpmathdouble.$(OBJEXT) -am__objects_25 = libmplibcore_a-mpstrings.$(OBJEXT) -am__objects_26 = libmplibcore_a-psout.$(OBJEXT) +am__objects_19 = libmplibcore_a-mp.$(OBJEXT) +am__objects_20 = libmplibcore_a-mpmath.$(OBJEXT) +am__objects_21 = libmplibcore_a-mpmathdecimal.$(OBJEXT) +am__objects_22 = libmplibcore_a-mpmathdouble.$(OBJEXT) +am__objects_23 = libmplibcore_a-mpstrings.$(OBJEXT) +am__objects_24 = libmplibcore_a-psout.$(OBJEXT) nodist_libmplibcore_a_OBJECTS = libmplibcore_a-tfmin.$(OBJEXT) \ - $(am__objects_21) $(am__objects_22) $(am__objects_23) \ - $(am__objects_24) $(am__objects_25) $(am__objects_26) + $(am__objects_19) $(am__objects_20) $(am__objects_21) \ + $(am__objects_22) $(am__objects_23) $(am__objects_24) libmplibcore_a_OBJECTS = $(nodist_libmplibcore_a_OBJECTS) libmplibextramath_a_AR = $(AR) $(ARFLAGS) libmplibextramath_a_LIBADD = -am__objects_27 = libmplibextramath_a-mpmathbinary.$(OBJEXT) -nodist_libmplibextramath_a_OBJECTS = $(am__objects_27) +am__objects_25 = libmplibextramath_a-mpmathbinary.$(OBJEXT) +nodist_libmplibextramath_a_OBJECTS = $(am__objects_25) libmplibextramath_a_OBJECTS = $(nodist_libmplibextramath_a_OBJECTS) libmputil_a_AR = $(AR) $(ARFLAGS) libmputil_a_LIBADD = @@ -1077,7 +1020,7 @@ am__libpdftex_a_SOURCES_DIST = pdftexdir/avl.c pdftexdir/avl.h \ pdftexdir/writepng.c pdftexdir/writet1.c pdftexdir/writet3.c \ pdftexdir/writettf.c pdftexdir/writettf.h pdftexdir/writezip.c \ pdftexdir/regex/regex.c pdftexdir/regex/regex.h -@MINGW32_TRUE@am__objects_28 = \ +@MINGW32_TRUE@am__objects_26 = \ @MINGW32_TRUE@ pdftexdir/regex/libpdftex_a-regex.$(OBJEXT) am_libpdftex_a_OBJECTS = pdftexdir/libpdftex_a-avl.$(OBJEXT) \ pdftexdir/libpdftex_a-avlstuff.$(OBJEXT) \ @@ -1098,13 +1041,13 @@ am_libpdftex_a_OBJECTS = pdftexdir/libpdftex_a-avl.$(OBJEXT) \ pdftexdir/libpdftex_a-writet1.$(OBJEXT) \ pdftexdir/libpdftex_a-writet3.$(OBJEXT) \ pdftexdir/libpdftex_a-writettf.$(OBJEXT) \ - pdftexdir/libpdftex_a-writezip.$(OBJEXT) $(am__objects_28) + pdftexdir/libpdftex_a-writezip.$(OBJEXT) $(am__objects_26) libpdftex_a_OBJECTS = $(am_libpdftex_a_OBJECTS) libsynctex_a_AR = $(AR) $(ARFLAGS) libsynctex_a_LIBADD = -am__objects_29 = synctexdir/libsynctex_a-synctex_parser.$(OBJEXT) \ +am__objects_27 = synctexdir/libsynctex_a-synctex_parser.$(OBJEXT) \ synctexdir/libsynctex_a-synctex_parser_utils.$(OBJEXT) -nodist_libsynctex_a_OBJECTS = $(am__objects_29) +nodist_libsynctex_a_OBJECTS = $(am__objects_27) libsynctex_a_OBJECTS = $(nodist_libsynctex_a_OBJECTS) libukanji_a_AR = $(AR) $(ARFLAGS) libukanji_a_LIBADD = @@ -1144,10 +1087,10 @@ am__libxetex_a_SOURCES_DIST = xetexdir/XeTeXFontInst.cpp \ xetexdir/XeTeXFontInst_Mac.h xetexdir/XeTeXFontMgr_Mac.mm \ xetexdir/XeTeXFontMgr_Mac.h xetexdir/XeTeX_mac.c \ xetexdir/XeTeXFontMgr_FC.cpp xetexdir/XeTeXFontMgr_FC.h -@XETEX_MACOSX_TRUE@am__objects_30 = xetexdir/libxetex_a-XeTeXFontInst_Mac.$(OBJEXT) \ +@XETEX_MACOSX_TRUE@am__objects_28 = xetexdir/libxetex_a-XeTeXFontInst_Mac.$(OBJEXT) \ @XETEX_MACOSX_TRUE@ xetexdir/libxetex_a-XeTeXFontMgr_Mac.$(OBJEXT) \ @XETEX_MACOSX_TRUE@ xetexdir/libxetex_a-XeTeX_mac.$(OBJEXT) -@XETEX_MACOSX_FALSE@am__objects_31 = xetexdir/libxetex_a-XeTeXFontMgr_FC.$(OBJEXT) +@XETEX_MACOSX_FALSE@am__objects_29 = xetexdir/libxetex_a-XeTeXFontMgr_FC.$(OBJEXT) am_libxetex_a_OBJECTS = xetexdir/libxetex_a-XeTeXFontInst.$(OBJEXT) \ xetexdir/libxetex_a-XeTeXFontMgr.$(OBJEXT) \ xetexdir/libxetex_a-XeTeXLayoutInterface.$(OBJEXT) \ @@ -1161,8 +1104,8 @@ am_libxetex_a_OBJECTS = xetexdir/libxetex_a-XeTeXFontInst.$(OBJEXT) \ xetexdir/image/libxetex_a-jpegimage.$(OBJEXT) \ xetexdir/image/libxetex_a-mfileio.$(OBJEXT) \ xetexdir/image/libxetex_a-numbers.$(OBJEXT) \ - xetexdir/image/libxetex_a-pngimage.$(OBJEXT) $(am__objects_30) \ - $(am__objects_31) + xetexdir/image/libxetex_a-pngimage.$(OBJEXT) $(am__objects_28) \ + $(am__objects_29) libxetex_a_OBJECTS = $(am_libxetex_a_OBJECTS) am__DEPENDENCIES_1 = libsynctex_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ @@ -1180,8 +1123,8 @@ libsynctex_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ dist_aleph_OBJECTS = alephdir/aleph-aleph.$(OBJEXT) \ alephdir/aleph-alephbis.$(OBJEXT) \ alephdir/aleph-alephextra.$(OBJEXT) -am__objects_32 = aleph-alephini.$(OBJEXT) aleph-aleph0.$(OBJEXT) -nodist_aleph_OBJECTS = $(am__objects_32) aleph-aleph-pool.$(OBJEXT) +am__objects_30 = aleph-alephini.$(OBJEXT) aleph-aleph0.$(OBJEXT) +nodist_aleph_OBJECTS = $(am__objects_30) aleph-aleph-pool.$(OBJEXT) aleph_OBJECTS = $(dist_aleph_OBJECTS) $(nodist_aleph_OBJECTS) am__DEPENDENCIES_2 = $(proglib) $(am__DEPENDENCIES_1) aleph_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) @@ -1258,34 +1201,34 @@ am__dist_eptex_SOURCES_DIST = eptexdir/eptexextra.c \ eptexdir/eptexextra.h eptexdir/eptex_version.h \ synctexdir/synctex.c synctexdir/synctex.h \ synctexdir/synctex-common.h synctexdir/synctex-eptex.h -@EPTEX_SYNCTEX_TRUE@am__objects_33 = \ +@EPTEX_SYNCTEX_TRUE@am__objects_31 = \ @EPTEX_SYNCTEX_TRUE@ synctexdir/eptex-synctex.$(OBJEXT) dist_eptex_OBJECTS = eptexdir/eptex-eptexextra.$(OBJEXT) \ - $(am__objects_33) -am__objects_34 = eptex-eptexini.$(OBJEXT) eptex-eptex0.$(OBJEXT) -nodist_eptex_OBJECTS = $(am__objects_34) eptex-eptex-pool.$(OBJEXT) + $(am__objects_31) +am__objects_32 = eptex-eptexini.$(OBJEXT) eptex-eptex0.$(OBJEXT) +nodist_eptex_OBJECTS = $(am__objects_32) eptex-eptex-pool.$(OBJEXT) eptex_OBJECTS = $(dist_eptex_OBJECTS) $(nodist_eptex_OBJECTS) @EPTEX_SYNCTEX_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1) am__dist_etex_SOURCES_DIST = etexdir/etexextra.c etexdir/etexextra.h \ etexdir/etex_version.h synctexdir/synctex.c \ synctexdir/synctex.h synctexdir/synctex-common.h \ synctexdir/synctex-etex.h -@ETEX_SYNCTEX_TRUE@am__objects_35 = synctexdir/etex-synctex.$(OBJEXT) -dist_etex_OBJECTS = etexdir/etex-etexextra.$(OBJEXT) $(am__objects_35) -am__objects_36 = etex-etexini.$(OBJEXT) etex-etex0.$(OBJEXT) -nodist_etex_OBJECTS = $(am__objects_36) etex-etex-pool.$(OBJEXT) +@ETEX_SYNCTEX_TRUE@am__objects_33 = synctexdir/etex-synctex.$(OBJEXT) +dist_etex_OBJECTS = etexdir/etex-etexextra.$(OBJEXT) $(am__objects_33) +am__objects_34 = etex-etexini.$(OBJEXT) etex-etex0.$(OBJEXT) +nodist_etex_OBJECTS = $(am__objects_34) etex-etex-pool.$(OBJEXT) etex_OBJECTS = $(dist_etex_OBJECTS) $(nodist_etex_OBJECTS) @ETEX_SYNCTEX_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1) am__dist_euptex_SOURCES_DIST = euptexdir/euptexextra.c \ euptexdir/euptexextra.h synctexdir/synctex.c \ synctexdir/synctex.h synctexdir/synctex-common.h \ synctexdir/synctex-euptex.h -@EUPTEX_SYNCTEX_TRUE@am__objects_37 = \ +@EUPTEX_SYNCTEX_TRUE@am__objects_35 = \ @EUPTEX_SYNCTEX_TRUE@ synctexdir/euptex-synctex.$(OBJEXT) dist_euptex_OBJECTS = euptexdir/euptex-euptexextra.$(OBJEXT) \ - $(am__objects_37) -am__objects_38 = euptex-euptexini.$(OBJEXT) euptex-euptex0.$(OBJEXT) -nodist_euptex_OBJECTS = $(am__objects_38) euptex-euptex-pool.$(OBJEXT) + $(am__objects_35) +am__objects_36 = euptex-euptexini.$(OBJEXT) euptex-euptex0.$(OBJEXT) +nodist_euptex_OBJECTS = $(am__objects_36) euptex-euptex-pool.$(OBJEXT) euptex_OBJECTS = $(dist_euptex_OBJECTS) $(nodist_euptex_OBJECTS) @EUPTEX_SYNCTEX_TRUE@am__DEPENDENCIES_5 = $(am__DEPENDENCIES_1) am_gftodvi_OBJECTS = @@ -1304,40 +1247,40 @@ gftype_DEPENDENCIES = $(proglib) $(am__DEPENDENCIES_1) nodist_initex_OBJECTS = initex-callexe.$(OBJEXT) initex_OBJECTS = $(nodist_initex_OBJECTS) initex_DEPENDENCIES = -am__objects_39 = luatexdir/luahbtex-luatex.$(OBJEXT) \ +am__objects_37 = luatexdir/luahbtex-luatex.$(OBJEXT) \ mplibdir/luahbtex-lmplib.$(OBJEXT) -nodist_luahbtex_OBJECTS = $(am__objects_39) +nodist_luahbtex_OBJECTS = $(am__objects_37) luahbtex_OBJECTS = $(nodist_luahbtex_OBJECTS) am__DEPENDENCIES_6 = $(am__DEPENDENCIES_1) am__DEPENDENCIES_7 = libmplibcore.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_2) libmputil.a libunilib.a libmd5.a \ - $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) libmputil.a \ + libunilib.a libmd5.a $(am__DEPENDENCIES_1) luahbtex_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(luahbtex_CXXFLAGS) \ $(CXXFLAGS) $(luahbtex_LDFLAGS) $(LDFLAGS) -o $@ -am__objects_40 = luatexdir/luajithbtex-luatex.$(OBJEXT) \ +am__objects_38 = luatexdir/luajithbtex-luatex.$(OBJEXT) \ mplibdir/luajithbtex-lmplib.$(OBJEXT) -nodist_luajithbtex_OBJECTS = $(am__objects_40) +nodist_luajithbtex_OBJECTS = $(am__objects_38) luajithbtex_OBJECTS = $(nodist_luajithbtex_OBJECTS) luajithbtex_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(luajithbtex_CXXFLAGS) \ $(CXXFLAGS) $(luajithbtex_LDFLAGS) $(LDFLAGS) -o $@ -am__objects_41 = luatexdir/luajittex-luatex.$(OBJEXT) \ +am__objects_39 = luatexdir/luajittex-luatex.$(OBJEXT) \ mplibdir/luajittex-lmplib.$(OBJEXT) -nodist_luajittex_OBJECTS = $(am__objects_41) +nodist_luajittex_OBJECTS = $(am__objects_39) luajittex_OBJECTS = $(nodist_luajittex_OBJECTS) am__DEPENDENCIES_8 = libmplibcore.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_2) libmputil.a libunilib.a libmd5.a \ - $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) libmputil.a \ + libunilib.a libmd5.a $(am__DEPENDENCIES_1) luajittex_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(luajittex_LDFLAGS) $(LDFLAGS) -o $@ -am__objects_42 = luatexdir/luatex-luatex.$(OBJEXT) \ +am__objects_40 = luatexdir/luatex-luatex.$(OBJEXT) \ mplibdir/luatex-lmplib.$(OBJEXT) -nodist_luatex_OBJECTS = $(am__objects_42) +nodist_luatex_OBJECTS = $(am__objects_40) luatex_OBJECTS = $(nodist_luatex_OBJECTS) luatex_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ @@ -1363,8 +1306,8 @@ mflua_DEPENDENCIES = libmflua.a $(am__DEPENDENCIES_2) $(windowlib) \ mflua_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(mflua_LDFLAGS) $(LDFLAGS) -o $@ -am__objects_43 = mfluadir/mflua_nowin-mfluaextra.$(OBJEXT) -nodist_mflua_nowin_OBJECTS = $(am__objects_43) +am__objects_41 = mfluadir/mflua_nowin-mfluaextra.$(OBJEXT) +nodist_mflua_nowin_OBJECTS = $(am__objects_41) mflua_nowin_OBJECTS = $(nodist_mflua_nowin_OBJECTS) mflua_nowin_DEPENDENCIES = libmflua.a $(am__DEPENDENCIES_2) \ $(windowlib) $(am__DEPENDENCIES_6) @@ -1378,8 +1321,8 @@ mfluajit_DEPENDENCIES = libmfluajit.a $(am__DEPENDENCIES_2) \ mfluajit_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(mfluajit_LDFLAGS) $(LDFLAGS) -o $@ -am__objects_44 = mfluajitdir/mfluajit_nowin-mfluajitextra.$(OBJEXT) -nodist_mfluajit_nowin_OBJECTS = $(am__objects_44) +am__objects_42 = mfluajitdir/mfluajit_nowin-mfluajitextra.$(OBJEXT) +nodist_mfluajit_nowin_OBJECTS = $(am__objects_42) mfluajit_nowin_OBJECTS = $(nodist_mfluajit_nowin_OBJECTS) mfluajit_nowin_DEPENDENCIES = libmfluajit.a $(am__DEPENDENCIES_2) \ $(windowlib) $(am__DEPENDENCIES_1) @@ -1391,8 +1334,8 @@ nodist_mft_OBJECTS = mft.$(OBJEXT) mft_OBJECTS = $(nodist_mft_OBJECTS) mft_LDADD = $(LDADD) mft_DEPENDENCIES = $(proglib) $(am__DEPENDENCIES_1) -am__objects_45 = mpost-mpxout.$(OBJEXT) -nodist_mpost_OBJECTS = mpost-mpost.$(OBJEXT) $(am__objects_45) +am__objects_43 = mpost-mpxout.$(OBJEXT) +nodist_mpost_OBJECTS = mpost-mpost.$(OBJEXT) $(am__objects_43) mpost_OBJECTS = $(nodist_mpost_OBJECTS) mpost_DEPENDENCIES = libmplibcore.a libmplibextramath.a \ libmplibbackends.a $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ @@ -1425,12 +1368,12 @@ am__dist_pdftex_SOURCES_DIST = pdftexdir/pdftexextra.c \ pdftexdir/etex_version.h synctexdir/synctex.c \ synctexdir/synctex.h synctexdir/synctex-common.h \ synctexdir/synctex-pdftex.h -@PDFTEX_SYNCTEX_TRUE@am__objects_46 = \ +@PDFTEX_SYNCTEX_TRUE@am__objects_44 = \ @PDFTEX_SYNCTEX_TRUE@ synctexdir/pdftex-synctex.$(OBJEXT) dist_pdftex_OBJECTS = pdftexdir/pdftex-pdftexextra.$(OBJEXT) \ - $(am__objects_46) -am__objects_47 = pdftex-pdftexini.$(OBJEXT) pdftex-pdftex0.$(OBJEXT) -nodist_pdftex_OBJECTS = $(am__objects_47) pdftex-pdftex-pool.$(OBJEXT) + $(am__objects_44) +am__objects_45 = pdftex-pdftexini.$(OBJEXT) pdftex-pdftex0.$(OBJEXT) +nodist_pdftex_OBJECTS = $(am__objects_45) pdftex-pdftex-pool.$(OBJEXT) pdftex_OBJECTS = $(dist_pdftex_OBJECTS) $(nodist_pdftex_OBJECTS) am__DEPENDENCIES_11 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) libmd5.a @@ -1457,20 +1400,20 @@ nodist_pltotf_OBJECTS = pltotf.$(OBJEXT) pltotf_OBJECTS = $(nodist_pltotf_OBJECTS) pltotf_LDADD = $(LDADD) pltotf_DEPENDENCIES = $(proglib) $(am__DEPENDENCIES_1) -am__objects_48 = pmpost-pmp.$(OBJEXT) -am__objects_49 = pmpost-pmpmath.$(OBJEXT) -am__objects_50 = pmpost-pmpmathbinary.$(OBJEXT) -am__objects_51 = pmpost-pmpmathdecimal.$(OBJEXT) -am__objects_52 = pmpost-pmpmathdouble.$(OBJEXT) -am__objects_53 = pmpost-pmpstrings.$(OBJEXT) -am__objects_54 = pmpost-pmpxout.$(OBJEXT) -am__objects_55 = pmpost-ppngout.$(OBJEXT) -am__objects_56 = pmpost-ppsout.$(OBJEXT) -am__objects_57 = pmpost-psvgout.$(OBJEXT) -nodist_pmpost_OBJECTS = $(am__objects_48) $(am__objects_49) \ - $(am__objects_50) $(am__objects_51) $(am__objects_52) \ - pmpost-pmpost.$(OBJEXT) $(am__objects_53) $(am__objects_54) \ - $(am__objects_55) $(am__objects_56) $(am__objects_57) \ +am__objects_46 = pmpost-pmp.$(OBJEXT) +am__objects_47 = pmpost-pmpmath.$(OBJEXT) +am__objects_48 = pmpost-pmpmathbinary.$(OBJEXT) +am__objects_49 = pmpost-pmpmathdecimal.$(OBJEXT) +am__objects_50 = pmpost-pmpmathdouble.$(OBJEXT) +am__objects_51 = pmpost-pmpstrings.$(OBJEXT) +am__objects_52 = pmpost-pmpxout.$(OBJEXT) +am__objects_53 = pmpost-ppngout.$(OBJEXT) +am__objects_54 = pmpost-ppsout.$(OBJEXT) +am__objects_55 = pmpost-psvgout.$(OBJEXT) +nodist_pmpost_OBJECTS = $(am__objects_46) $(am__objects_47) \ + $(am__objects_48) $(am__objects_49) $(am__objects_50) \ + pmpost-pmpost.$(OBJEXT) $(am__objects_51) $(am__objects_52) \ + $(am__objects_53) $(am__objects_54) $(am__objects_55) \ pmpost-ptfmin.$(OBJEXT) pmpost_OBJECTS = $(nodist_pmpost_OBJECTS) pmpost_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ @@ -1488,10 +1431,10 @@ am__dist_ptex_SOURCES_DIST = ptexdir/ptexextra.c ptexdir/ptexextra.h \ ptexdir/ptex_version.h synctexdir/synctex.c \ synctexdir/synctex.h synctexdir/synctex-common.h \ synctexdir/synctex-ptex.h -@PTEX_SYNCTEX_TRUE@am__objects_58 = synctexdir/ptex-synctex.$(OBJEXT) -dist_ptex_OBJECTS = ptexdir/ptex-ptexextra.$(OBJEXT) $(am__objects_58) -am__objects_59 = ptex-ptexini.$(OBJEXT) ptex-ptex0.$(OBJEXT) -nodist_ptex_OBJECTS = $(am__objects_59) ptex-ptex-pool.$(OBJEXT) +@PTEX_SYNCTEX_TRUE@am__objects_56 = synctexdir/ptex-synctex.$(OBJEXT) +dist_ptex_OBJECTS = ptexdir/ptex-ptexextra.$(OBJEXT) $(am__objects_56) +am__objects_57 = ptex-ptexini.$(OBJEXT) ptex-ptex0.$(OBJEXT) +nodist_ptex_OBJECTS = $(am__objects_57) ptex-ptex-pool.$(OBJEXT) ptex_OBJECTS = $(dist_ptex_OBJECTS) $(nodist_ptex_OBJECTS) @PTEX_SYNCTEX_TRUE@am__DEPENDENCIES_12 = $(am__DEPENDENCIES_1) am_ptftopl_OBJECTS = @@ -1512,10 +1455,10 @@ tangleboot_LDADD = $(LDADD) am__dist_tex_SOURCES_DIST = texextra.c synctexdir/synctex.c \ synctexdir/synctex.h synctexdir/synctex-common.h \ synctexdir/synctex-tex.h -@TEX_SYNCTEX_TRUE@am__objects_60 = synctexdir/tex-synctex.$(OBJEXT) -dist_tex_OBJECTS = tex-texextra.$(OBJEXT) $(am__objects_60) -am__objects_61 = tex-texini.$(OBJEXT) tex-tex0.$(OBJEXT) -nodist_tex_OBJECTS = $(am__objects_61) tex-tex-pool.$(OBJEXT) +@TEX_SYNCTEX_TRUE@am__objects_58 = synctexdir/tex-synctex.$(OBJEXT) +dist_tex_OBJECTS = tex-texextra.$(OBJEXT) $(am__objects_58) +am__objects_59 = tex-texini.$(OBJEXT) tex-tex0.$(OBJEXT) +nodist_tex_OBJECTS = $(am__objects_59) tex-tex-pool.$(OBJEXT) tex_OBJECTS = $(dist_tex_OBJECTS) $(nodist_tex_OBJECTS) @TEX_SYNCTEX_TRUE@am__DEPENDENCIES_14 = $(am__DEPENDENCIES_1) tex_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \ @@ -1540,21 +1483,21 @@ am_updvitype_OBJECTS = nodist_updvitype_OBJECTS = updvitype-updvitype.$(OBJEXT) updvitype_OBJECTS = $(am_updvitype_OBJECTS) \ $(nodist_updvitype_OBJECTS) -am__objects_62 = upmpost-pmp.$(OBJEXT) -am__objects_63 = upmpost-pmpmath.$(OBJEXT) -am__objects_64 = upmpost-pmpmathbinary.$(OBJEXT) -am__objects_65 = upmpost-pmpmathdecimal.$(OBJEXT) -am__objects_66 = upmpost-pmpmathdouble.$(OBJEXT) -am__objects_67 = upmpost-pmpstrings.$(OBJEXT) -am__objects_68 = upmpost-pmpxout.$(OBJEXT) -am__objects_69 = upmpost-ppngout.$(OBJEXT) -am__objects_70 = upmpost-ppsout.$(OBJEXT) -am__objects_71 = upmpost-psvgout.$(OBJEXT) -am__objects_72 = $(am__objects_62) $(am__objects_63) $(am__objects_64) \ - $(am__objects_65) $(am__objects_66) upmpost-pmpost.$(OBJEXT) \ - $(am__objects_67) $(am__objects_68) $(am__objects_69) \ - $(am__objects_70) $(am__objects_71) upmpost-ptfmin.$(OBJEXT) -nodist_upmpost_OBJECTS = $(am__objects_72) +am__objects_60 = upmpost-pmp.$(OBJEXT) +am__objects_61 = upmpost-pmpmath.$(OBJEXT) +am__objects_62 = upmpost-pmpmathbinary.$(OBJEXT) +am__objects_63 = upmpost-pmpmathdecimal.$(OBJEXT) +am__objects_64 = upmpost-pmpmathdouble.$(OBJEXT) +am__objects_65 = upmpost-pmpstrings.$(OBJEXT) +am__objects_66 = upmpost-pmpxout.$(OBJEXT) +am__objects_67 = upmpost-ppngout.$(OBJEXT) +am__objects_68 = upmpost-ppsout.$(OBJEXT) +am__objects_69 = upmpost-psvgout.$(OBJEXT) +am__objects_70 = $(am__objects_60) $(am__objects_61) $(am__objects_62) \ + $(am__objects_63) $(am__objects_64) upmpost-pmpost.$(OBJEXT) \ + $(am__objects_65) $(am__objects_66) $(am__objects_67) \ + $(am__objects_68) $(am__objects_69) upmpost-ptfmin.$(OBJEXT) +nodist_upmpost_OBJECTS = $(am__objects_70) upmpost_OBJECTS = $(nodist_upmpost_OBJECTS) am__DEPENDENCIES_16 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ @@ -1568,12 +1511,12 @@ am__dist_uptex_SOURCES_DIST = uptexdir/uptexextra.c \ uptexdir/uptexextra.h uptexdir/uptex_version.h \ synctexdir/synctex.c synctexdir/synctex.h \ synctexdir/synctex-common.h synctexdir/synctex-uptex.h -@UPTEX_SYNCTEX_TRUE@am__objects_73 = \ +@UPTEX_SYNCTEX_TRUE@am__objects_71 = \ @UPTEX_SYNCTEX_TRUE@ synctexdir/uptex-synctex.$(OBJEXT) dist_uptex_OBJECTS = uptexdir/uptex-uptexextra.$(OBJEXT) \ - $(am__objects_73) -am__objects_74 = uptex-uptexini.$(OBJEXT) uptex-uptex0.$(OBJEXT) -nodist_uptex_OBJECTS = $(am__objects_74) uptex-uptex-pool.$(OBJEXT) + $(am__objects_71) +am__objects_72 = uptex-uptexini.$(OBJEXT) uptex-uptex0.$(OBJEXT) +nodist_uptex_OBJECTS = $(am__objects_72) uptex-uptex-pool.$(OBJEXT) uptex_OBJECTS = $(dist_uptex_OBJECTS) $(nodist_uptex_OBJECTS) @UPTEX_SYNCTEX_TRUE@am__DEPENDENCIES_17 = $(am__DEPENDENCIES_1) am_uptftopl_OBJECTS = @@ -1612,12 +1555,12 @@ am__dist_xetex_SOURCES_DIST = xetexdir/xetexextra.c \ xetexdir/xetex_version.h synctexdir/synctex.c \ synctexdir/synctex.h synctexdir/synctex-common.h \ synctexdir/synctex-xetex.h -@XETEX_SYNCTEX_TRUE@am__objects_75 = \ +@XETEX_SYNCTEX_TRUE@am__objects_73 = \ @XETEX_SYNCTEX_TRUE@ synctexdir/xetex-synctex.$(OBJEXT) dist_xetex_OBJECTS = xetexdir/xetex-xetexextra.$(OBJEXT) \ - $(am__objects_75) -am__objects_76 = xetex-xetexini.$(OBJEXT) xetex-xetex0.$(OBJEXT) -nodist_xetex_OBJECTS = $(am__objects_76) xetex-xetex-pool.$(OBJEXT) + $(am__objects_73) +am__objects_74 = xetex-xetexini.$(OBJEXT) xetex-xetex0.$(OBJEXT) +nodist_xetex_OBJECTS = $(am__objects_74) xetex-xetex-pool.$(OBJEXT) xetex_OBJECTS = $(dist_xetex_OBJECTS) $(nodist_xetex_OBJECTS) @XETEX_MACOSX_FALSE@am__DEPENDENCIES_18 = $(am__DEPENDENCIES_1) am__DEPENDENCIES_19 = $(libxetex) $(am__DEPENDENCIES_1) \ @@ -1946,54 +1889,6 @@ am__depfiles_remade = ./$(DEPDIR)/aleph-aleph-pool.Po \ luatexdir/luamd5/$(DEPDIR)/libluamisc_a-md5lib.Po \ luatexdir/luapeg/$(DEPDIR)/libluajitmisc_a-lpeg.Po \ luatexdir/luapeg/$(DEPDIR)/libluamisc_a-lpeg.Po \ - luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pparray.Po \ - luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppcrypt.Po \ - luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppdict.Po \ - luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppheap.Po \ - luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppload.Po \ - luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppstream.Po \ - luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest1.Po \ - luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest2.Po \ - luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest3.Po \ - luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppxref.Po \ - luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pparray.Po \ - luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppcrypt.Po \ - luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppdict.Po \ - luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppheap.Po \ - luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppload.Po \ - luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppstream.Po \ - luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest1.Po \ - luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest2.Po \ - luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest3.Po \ - luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppxref.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilbasexx.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilcrypt.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilflate.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilfpred.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utiliof.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utillog.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utillzw.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmd5.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmem.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmemheap.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmemheapiof.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmeminfo.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilnumber.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilsha.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilbasexx.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilcrypt.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilflate.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilfpred.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utiliof.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utillog.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utillzw.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmd5.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmem.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmemheap.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmemheapiof.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmeminfo.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilnumber.Po \ - luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilsha.Po \ luatexdir/luasocket/src/$(DEPDIR)/libluajitsocket_a-auxiliar.Po \ luatexdir/luasocket/src/$(DEPDIR)/libluajitsocket_a-buffer.Po \ luatexdir/luasocket/src/$(DEPDIR)/libluajitsocket_a-compat.Po \ @@ -2306,12 +2201,11 @@ SOURCES = $(libff_a_SOURCES) $(libkanji_a_SOURCES) \ $(libluajitharfbuzz_a_SOURCES) \ $(nodist_libluajithbtexspecific_a_SOURCES) \ $(nodist_libluajitmisc_a_SOURCES) \ - $(nodist_libluajitpplib_a_SOURCES) \ $(nodist_libluajitsocket_a_SOURCES) \ $(dist_libluajittex_a_SOURCES) \ $(nodist_libluajittex_a_SOURCES) \ $(nodist_libluajittexspecific_a_SOURCES) \ - $(nodist_libluamisc_a_SOURCES) $(nodist_libluapplib_a_SOURCES) \ + $(nodist_libluamisc_a_SOURCES) \ $(nodist_libluasocket_a_SOURCES) $(dist_libluatex_a_SOURCES) \ $(nodist_libluatex_a_SOURCES) \ $(nodist_libluatexspecific_a_SOURCES) $(libmd5_a_SOURCES) \ @@ -2428,8 +2322,8 @@ am__recursive_targets = \ AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope check recheck distdir distdir-am dist dist-all \ distcheck -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - c-auto.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)c-auto.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -2647,7 +2541,6 @@ am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/../../am/bin_links.am \ $(srcdir)/luatexdir/am/luafontforge.am \ $(srcdir)/luatexdir/am/luaharfbuzz.am \ $(srcdir)/luatexdir/am/luamisc.am \ - $(srcdir)/luatexdir/am/luapplib.am \ $(srcdir)/luatexdir/am/luasocket.am \ $(srcdir)/luatexdir/am/luatex.am \ $(srcdir)/mfluadir/am/mflua.am \ @@ -2851,6 +2744,9 @@ PKG_CONFIG = @PKG_CONFIG@ POPPLER_DEPEND = @POPPLER_DEPEND@ POPPLER_INCLUDES = @POPPLER_INCLUDES@ POPPLER_LIBS = @POPPLER_LIBS@ +PPLIB_DEPEND = @PPLIB_DEPEND@ +PPLIB_INCLUDES = @PPLIB_INCLUDES@ +PPLIB_LIBS = @PPLIB_LIBS@ PTEXENC_DEPEND = @PTEXENC_DEPEND@ PTEXENC_INCLUDES = @PTEXENC_INCLUDES@ PTEXENC_LIBS = @PTEXENC_LIBS@ @@ -2961,17 +2857,14 @@ proglib = lib/lib.a #EXTRA_LIBRARIES += libluamisc.a liblua53misc.a libluajitmisc.a #EXTRA_LIBRARIES += libluaffi.a liblua53ffi.a - -#EXTRA_LIBRARIES += libluapplib.a liblua53pplib.a libluajitpplib.a EXTRA_LIBRARIES = libmf.a libmflua.a libmfluajit.a libmputil.a \ libmplibcore.a libmplibextramath.a libmplibbackends.a \ libkanji.a libukanji.a libpdftex.a libluasocket.a \ libluajitsocket.a libluamisc.a libluajitmisc.a libunilib.a \ libff.a libluatex.a libluajittex.a libluatexspecific.a \ libluajittexspecific.a libluahbtexspecific.a \ - libluajithbtexspecific.a libluaffi.a libluapplib.a \ - libluajitpplib.a libluaharfbuzz.a libluajitharfbuzz.a \ - libxetex.a libsynctex.a libmd5.a + libluajithbtexspecific.a libluaffi.a libluaharfbuzz.a \ + libluajitharfbuzz.a libxetex.a libsynctex.a libmd5.a EXTRA_LTLIBRARIES = libsynctex.la lib_LIBRARIES = $(am__append_122) lib_LTLIBRARIES = $(am__append_121) @@ -4155,13 +4048,14 @@ libluasocket_sources = \ luatexdir/luasocket/src/udp.h \ luatexdir/luasocket/src/usocket.h -libluamisc_a_DEPENDENCIES = $(ZZIPLIB_DEPEND) libluasocket.a libluaffi.a libluapplib.a -#liblua53misc_a_DEPENDENCIES = $(ZZIPLIB_DEPEND) liblua53socket.a liblua53ffi.a liblua53pplib.a -libluajitmisc_a_DEPENDENCIES = $(ZZIPLIB_DEPEND) libluajitsocket.a libluajitpplib.a -libluamisc_a_CPPFLAGS = $(ZLIB_INCLUDES) $(ZZIPLIB_INCLUDES) $(LUA_INCLUDES) -#liblua53misc_a_CPPFLAGS = $(ZLIB_INCLUDES) $(ZZIPLIB_INCLUDES) $(LUA_LUA53_INCLUDES) +libluamisc_a_DEPENDENCIES = $(ZZIPLIB_DEPEND) libluasocket.a libluaffi.a +#liblua53misc_a_DEPENDENCIES = $(ZZIPLIB_DEPEND) liblua53socket.a liblua53ffi.a +libluajitmisc_a_DEPENDENCIES = $(ZZIPLIB_DEPEND) libluajitsocket.a +libluamisc_a_CPPFLAGS = $(ZLIB_INCLUDES) $(ZZIPLIB_INCLUDES) $(PPLIB_INCLUDES) $(LUA_INCLUDES) +#liblua53misc_a_CPPFLAGS = $(ZLIB_INCLUDES) $(ZZIPLIB_INCLUDES) $(PPLIB_INCLUDES) $(LUA_LUA53_INCLUDES) libluajitmisc_a_CPPFLAGS = $(ZLIB_INCLUDES) $(ZZIPLIB_INCLUDES) \ - $(LUAJIT_INCLUDES) -DLuajitTeX -I$(srcdir)/luatexdir + $(PPLIB_INCLUDES) $(LUAJIT_INCLUDES) -DLuajitTeX \ + -I$(srcdir)/luatexdir libluamisc_a_CFLAGS = # $(WARNING_CFLAGS) #liblua53misc_a_CFLAGS = # $(WARNING_CFLAGS) libluajitmisc_a_CFLAGS = # $(WARNING_CFLAGS) @@ -4289,9 +4183,9 @@ LUA_DEPEND = $(LUA53_DEPEND) libluatex_a_DEPENDENCIES = libff.a libluamisc.a libluajittex_a_DEPENDENCIES = libff.a libluajitmisc.a libluatex_a_preflags = $(AM_CPPFLAGS) $(ZLIB_INCLUDES) \ - $(LIBPNG_INCLUDES) $(HARFBUZZ_INCLUDES) -I$(srcdir)/libmd5 \ - -DpdfTeX -I$(srcdir)/luatexdir -I$(srcdir)/luatexdir/unilib \ - -I$(srcdir)/luatexdir/luapplib/src/util \ + $(LIBPNG_INCLUDES) $(HARFBUZZ_INCLUDES) $(PPLIB_INCLUDES) \ + -I$(srcdir)/libmd5 -DpdfTeX -I$(srcdir)/luatexdir \ + -I$(srcdir)/luatexdir/unilib \ -I$(srcdir)/luatexdir/luafontloader/fontforge/inc \ -DLUA_FF_LIB=1 \ -I$(srcdir)/luatexdir/luafontloader/fontforge/fontforge \ @@ -4635,91 +4529,15 @@ libluaffi_sources = \ luatexdir/luaffi/ffi.h \ luatexdir/luaffi/parser.c -libluapplib_a_DEPENDENCIES = $(ZLIB_DEPEND) -#liblua53pplib_a_DEPENDENCIES = $(ZLIB_DEPEND) -libluajitpplib_a_DEPENDENCIES = $(ZLIB_DEPEND) -libluapplib_a_CPPFLAGS = \ - -I$(top_srcdir)/luatexdir/luapplib -I$(top_srcdir)/luatexdir/luapplib/src -I$(top_srcdir)/luatexdir/luapplib/src/util $(ZLIB_INCLUDES) $(LUA_INCLUDES) - - -#liblua53pplib_a_CPPFLAGS = \ -# -I$(top_srcdir)/luatexdir/luapplib -I$(top_srcdir)/luatexdir/luapplib/src -I$(top_srcdir)/luatexdir/luapplib/src/util $(ZLIB_INCLUDES) $(LUA_LUA53_INCLUDES) -libluajitpplib_a_CPPFLAGS = \ - -I$(top_srcdir)/luatexdir/luapplib -I$(top_srcdir)/luatexdir/luapplib/src -I$(top_srcdir)/luatexdir/luapplib/src/util $(ZLIB_INCLUDES) $(LUAJIT_INCLUDES) - -libluapplib_a_CFLAGS = # $(WARNING_CFLAGS) -libluajitpplib_a_CFLAGS = # $(WARNING_CFLAGS) -nodist_libluapplib_a_SOURCES = $(libluapplib_sources) -#nodist_liblua53pplib_a_SOURCES = $(libluapplib_sources) -nodist_libluajitpplib_a_SOURCES = $(libluapplib_sources) -libluapplib_sources = \ - luatexdir/luapplib/src/ppapi.h \ - luatexdir/luapplib/src/pparray.c \ - luatexdir/luapplib/src/pparray.h \ - luatexdir/luapplib/src/ppconf.h \ - luatexdir/luapplib/src/ppcrypt.c \ - luatexdir/luapplib/src/ppcrypt.h \ - luatexdir/luapplib/src/ppdict.c \ - luatexdir/luapplib/src/ppdict.h \ - luatexdir/luapplib/src/ppfilter.h \ - luatexdir/luapplib/src/ppheap.c \ - luatexdir/luapplib/src/ppheap.h \ - luatexdir/luapplib/src/pplib.h \ - luatexdir/luapplib/src/ppload.c \ - luatexdir/luapplib/src/ppload.h \ - luatexdir/luapplib/src/ppstream.c \ - luatexdir/luapplib/src/ppstream.h \ - luatexdir/luapplib/src/pptest1.c \ - luatexdir/luapplib/src/pptest2.c \ - luatexdir/luapplib/src/pptest3.c \ - luatexdir/luapplib/src/ppxref.c \ - luatexdir/luapplib/src/ppxref.h \ - luatexdir/luapplib/src/util/utilbasexx.c \ - luatexdir/luapplib/src/util/utilbasexx.h \ - luatexdir/luapplib/src/util/utilcrypt.c \ - luatexdir/luapplib/src/util/utilcrypt.h \ - luatexdir/luapplib/src/util/utilcryptdef.h \ - luatexdir/luapplib/src/util/utildecl.h \ - luatexdir/luapplib/src/util/utilflate.c \ - luatexdir/luapplib/src/util/utilflate.h \ - luatexdir/luapplib/src/util/utilfpred.c \ - luatexdir/luapplib/src/util/utilfpred.h \ - luatexdir/luapplib/src/util/utiliof.c \ - luatexdir/luapplib/src/util/utiliof.h \ - luatexdir/luapplib/src/util/utillog.c \ - luatexdir/luapplib/src/util/utillog.h \ - luatexdir/luapplib/src/util/utillzw.c \ - luatexdir/luapplib/src/util/utillzw.h \ - luatexdir/luapplib/src/util/utilmd5.c \ - luatexdir/luapplib/src/util/utilmd5.h \ - luatexdir/luapplib/src/util/utilmem.c \ - luatexdir/luapplib/src/util/utilmem.h \ - luatexdir/luapplib/src/util/utilmemallc.h \ - luatexdir/luapplib/src/util/utilmemallh.h \ - luatexdir/luapplib/src/util/utilmemheap.c \ - luatexdir/luapplib/src/util/utilmemheap.h \ - luatexdir/luapplib/src/util/utilmemheapiof.c \ - luatexdir/luapplib/src/util/utilmemheapiof.h \ - luatexdir/luapplib/src/util/utilmeminfo.c \ - luatexdir/luapplib/src/util/utilmeminfo.h \ - luatexdir/luapplib/src/util/utilnumber.c \ - luatexdir/luapplib/src/util/utilnumber.h \ - luatexdir/luapplib/src/util/utilplat.h \ - luatexdir/luapplib/src/util/utilsha.c \ - luatexdir/luapplib/src/util/utilsha.h - - -#liblua53pplib_sources = $(libluapplib_sources) -libluajitpplib_sources = $(libluapplib_sources) # Force Automake to use CXXLD for linking nodist_EXTRA_luahbtex_SOURCES = dummy.cxx nodist_EXTRA_luajithbtex_SOURCES = dummy.cxx -luatex_preflags = $(AM_CPPFLAGS) $(ZLIB_INCLUDES) $(LIBPNG_INCLUDES) +luatex_preflags = $(AM_CPPFLAGS) $(ZLIB_INCLUDES) $(LIBPNG_INCLUDES) $(PPLIB_INCLUDES) luatex_postflags = -I$(srcdir)/libmd5 -DpdfTeX -I$(srcdir)/luatexdir \ -I$(srcdir)/mplibdir -Dextra_version_info=`date +-%Y%m%d%H` \ -I$(srcdir)/synctexdir -DSYNCTEX_ENGINE_H='<synctex-luatex.h>' -luahbtex_preflags = $(AM_CPPFLAGS) $(ZLIB_INCLUDES) $(LIBPNG_INCLUDES) $(HARFBUZZ_INCLUDES) +luahbtex_preflags = $(AM_CPPFLAGS) $(ZLIB_INCLUDES) $(LIBPNG_INCLUDES) $(HARFBUZZ_INCLUDES) $(PPLIB_INCLUDES) luahbtex_postflags = -I$(srcdir)/libmd5 -DpdfTeX -I$(srcdir)/luatexdir \ -I$(srcdir)/mplibdir -Dextra_version_info=`date +-%Y%m%d%H` \ -DLUATEX_HARFBUZZ_ENABLED -I$(srcdir)/synctexdir \ @@ -4737,15 +4555,15 @@ luajittex_LDFLAGS = -export-dynamic $(LUAJIT_LDEXTRA) luahbtex_LDFLAGS = -export-dynamic luajithbtex_LDFLAGS = -export-dynamic $(LUAJIT_LDEXTRA) luatex_postldadd = libmplibcore.a $(ZZIPLIB_LIBS) $(LIBPNG_LIBS) \ - $(ZLIB_LIBS) $(LDADD) libmputil.a libunilib.a libmd5.a \ - $(lua_socketlibs) + $(ZLIB_LIBS) $(PPLIB_LIBS) $(LDADD) libmputil.a libunilib.a \ + libmd5.a $(lua_socketlibs) luahbtex_postldadd = libmplibcore.a $(ZZIPLIB_LIBS) $(LIBPNG_LIBS) \ - $(ZLIB_LIBS) $(HARFBUZZ_LIBS) $(GRAPHITE2_LIBS) $(LDADD) \ - libmputil.a libunilib.a libmd5.a $(lua_socketlibs) -luatex_LDADD = libluatex.a libluatexspecific.a libluatex.a libff.a libluamisc.a libluasocket.a libluaffi.a libluapplib.a $(LUA_LIBS) $(luatex_postldadd) -luajittex_LDADD = libluajittex.a libluajittexspecific.a libluajittex.a libff.a libluajitmisc.a libluajitsocket.a libluajitpplib.a $(LUAJIT_LIBS) $(luatex_postldadd) -luahbtex_LDADD = libluatex.a libluahbtexspecific.a libluatex.a libff.a libluamisc.a libluasocket.a libluaffi.a libluapplib.a libluaharfbuzz.a $(LUA_LIBS) $(luahbtex_postldadd) -luajithbtex_LDADD = libluajittex.a libluajithbtexspecific.a libluajittex.a libff.a libluajitmisc.a libluajitsocket.a libluajitpplib.a libluajitharfbuzz.a $(LUAJIT_LIBS) $(luahbtex_postldadd) + $(ZLIB_LIBS) $(HARFBUZZ_LIBS) $(GRAPHITE2_LIBS) $(PPLIB_LIBS) \ + $(LDADD) libmputil.a libunilib.a libmd5.a $(lua_socketlibs) +luatex_LDADD = libluatex.a libluatexspecific.a libluatex.a libff.a libluamisc.a libluasocket.a libluaffi.a $(LUA_LIBS) $(luatex_postldadd) +luajittex_LDADD = libluajittex.a libluajittexspecific.a libluajittex.a libff.a libluajitmisc.a libluajitsocket.a $(LUAJIT_LIBS) $(luatex_postldadd) +luahbtex_LDADD = libluatex.a libluahbtexspecific.a libluatex.a libff.a libluamisc.a libluasocket.a libluaffi.a libluaharfbuzz.a $(LUA_LIBS) $(luahbtex_postldadd) +luajithbtex_LDADD = libluajittex.a libluajithbtexspecific.a libluajittex.a libff.a libluajitmisc.a libluajitsocket.a libluajitharfbuzz.a $(LUAJIT_LIBS) $(luahbtex_postldadd) #not here ? #LIBTOOLFLAGS += --preserve-dup-deps @@ -5092,7 +4910,7 @@ all: ff-config.h .SUFFIXES: .c .cc .cin .cpp .cxx .h .hin .lo .log .mm .o .obj .p .pin .pl .pl$(EXEEXT) .test .test$(EXEEXT) .trs am--refresh: Makefile @: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../../am/dist_hook.am $(srcdir)/am/bootstrap.am $(srcdir)/am/web.am $(srcdir)/am/cweb.am $(srcdir)/am/texmf.am $(srcdir)/mfluadir/am/mflua.am $(srcdir)/mfluajitdir/am/mfluajit.am $(srcdir)/mplibdir/am/mplib.am $(srcdir)/pmpostdir/am/pmpost.am $(srcdir)/mplibdir/am/libmputil.am $(srcdir)/mplibdir/am/libmplib.am $(srcdir)/etexdir/am/etex.am $(srcdir)/ptexdir/am/ptex.am $(srcdir)/eptexdir/am/eptex.am $(srcdir)/uptexdir/am/uptex.am $(srcdir)/euptexdir/am/euptex.am $(srcdir)/pdftexdir/am/libpdftex.am $(srcdir)/pdftexdir/am/pdftex.am $(srcdir)/pdftexdir/am/ttf2afm.am $(srcdir)/pdftexdir/am/pdftosrc.am $(srcdir)/luatexdir/am/luasocket.am $(srcdir)/luatexdir/am/luamisc.am $(srcdir)/luatexdir/am/libunilib.am $(srcdir)/luatexdir/am/luafontforge.am $(srcdir)/luatexdir/am/libluatex.am $(srcdir)/luatexdir/am/luaffi.am $(srcdir)/luatexdir/am/luapplib.am $(srcdir)/luatexdir/am/luatex.am $(srcdir)/luatexdir/am/luaharfbuzz.am $(srcdir)/xetexdir/am/xetex.am $(srcdir)/omegaware/am/omegaware.am $(srcdir)/alephdir/am/aleph.am $(srcdir)/synctexdir/am/synctex.am $(srcdir)/libmd5/am/md5.am $(srcdir)/../../am/bin_links.am $(am__configure_deps) +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../../am/dist_hook.am $(srcdir)/am/bootstrap.am $(srcdir)/am/web.am $(srcdir)/am/cweb.am $(srcdir)/am/texmf.am $(srcdir)/mfluadir/am/mflua.am $(srcdir)/mfluajitdir/am/mfluajit.am $(srcdir)/mplibdir/am/mplib.am $(srcdir)/pmpostdir/am/pmpost.am $(srcdir)/mplibdir/am/libmputil.am $(srcdir)/mplibdir/am/libmplib.am $(srcdir)/etexdir/am/etex.am $(srcdir)/ptexdir/am/ptex.am $(srcdir)/eptexdir/am/eptex.am $(srcdir)/uptexdir/am/uptex.am $(srcdir)/euptexdir/am/euptex.am $(srcdir)/pdftexdir/am/libpdftex.am $(srcdir)/pdftexdir/am/pdftex.am $(srcdir)/pdftexdir/am/ttf2afm.am $(srcdir)/pdftexdir/am/pdftosrc.am $(srcdir)/luatexdir/am/luasocket.am $(srcdir)/luatexdir/am/luamisc.am $(srcdir)/luatexdir/am/libunilib.am $(srcdir)/luatexdir/am/luafontforge.am $(srcdir)/luatexdir/am/libluatex.am $(srcdir)/luatexdir/am/luaffi.am $(srcdir)/luatexdir/am/luatex.am $(srcdir)/luatexdir/am/luaharfbuzz.am $(srcdir)/xetexdir/am/xetex.am $(srcdir)/omegaware/am/omegaware.am $(srcdir)/alephdir/am/aleph.am $(srcdir)/synctexdir/am/synctex.am $(srcdir)/libmd5/am/md5.am $(srcdir)/../../am/bin_links.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ @@ -5114,7 +4932,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; -$(srcdir)/../../am/dist_hook.am $(srcdir)/am/bootstrap.am $(srcdir)/am/web.am $(srcdir)/am/cweb.am $(srcdir)/am/texmf.am $(srcdir)/mfluadir/am/mflua.am $(srcdir)/mfluajitdir/am/mfluajit.am $(srcdir)/mplibdir/am/mplib.am $(srcdir)/pmpostdir/am/pmpost.am $(srcdir)/mplibdir/am/libmputil.am $(srcdir)/mplibdir/am/libmplib.am $(srcdir)/etexdir/am/etex.am $(srcdir)/ptexdir/am/ptex.am $(srcdir)/eptexdir/am/eptex.am $(srcdir)/uptexdir/am/uptex.am $(srcdir)/euptexdir/am/euptex.am $(srcdir)/pdftexdir/am/libpdftex.am $(srcdir)/pdftexdir/am/pdftex.am $(srcdir)/pdftexdir/am/ttf2afm.am $(srcdir)/pdftexdir/am/pdftosrc.am $(srcdir)/luatexdir/am/luasocket.am $(srcdir)/luatexdir/am/luamisc.am $(srcdir)/luatexdir/am/libunilib.am $(srcdir)/luatexdir/am/luafontforge.am $(srcdir)/luatexdir/am/libluatex.am $(srcdir)/luatexdir/am/luaffi.am $(srcdir)/luatexdir/am/luapplib.am $(srcdir)/luatexdir/am/luatex.am $(srcdir)/luatexdir/am/luaharfbuzz.am $(srcdir)/xetexdir/am/xetex.am $(srcdir)/omegaware/am/omegaware.am $(srcdir)/alephdir/am/aleph.am $(srcdir)/synctexdir/am/synctex.am $(srcdir)/libmd5/am/md5.am $(srcdir)/../../am/bin_links.am $(am__empty): +$(srcdir)/../../am/dist_hook.am $(srcdir)/am/bootstrap.am $(srcdir)/am/web.am $(srcdir)/am/cweb.am $(srcdir)/am/texmf.am $(srcdir)/mfluadir/am/mflua.am $(srcdir)/mfluajitdir/am/mfluajit.am $(srcdir)/mplibdir/am/mplib.am $(srcdir)/pmpostdir/am/pmpost.am $(srcdir)/mplibdir/am/libmputil.am $(srcdir)/mplibdir/am/libmplib.am $(srcdir)/etexdir/am/etex.am $(srcdir)/ptexdir/am/ptex.am $(srcdir)/eptexdir/am/eptex.am $(srcdir)/uptexdir/am/uptex.am $(srcdir)/euptexdir/am/euptex.am $(srcdir)/pdftexdir/am/libpdftex.am $(srcdir)/pdftexdir/am/pdftex.am $(srcdir)/pdftexdir/am/ttf2afm.am $(srcdir)/pdftexdir/am/pdftosrc.am $(srcdir)/luatexdir/am/luasocket.am $(srcdir)/luatexdir/am/luamisc.am $(srcdir)/luatexdir/am/libunilib.am $(srcdir)/luatexdir/am/luafontforge.am $(srcdir)/luatexdir/am/libluatex.am $(srcdir)/luatexdir/am/luaffi.am $(srcdir)/luatexdir/am/luatex.am $(srcdir)/luatexdir/am/luaharfbuzz.am $(srcdir)/xetexdir/am/xetex.am $(srcdir)/omegaware/am/omegaware.am $(srcdir)/alephdir/am/aleph.am $(srcdir)/synctexdir/am/synctex.am $(srcdir)/libmd5/am/md5.am $(srcdir)/../../am/bin_links.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck @@ -5631,95 +5449,6 @@ libluajitmisc.a: $(libluajitmisc_a_OBJECTS) $(libluajitmisc_a_DEPENDENCIES) $(EX $(AM_V_at)-rm -f libluajitmisc.a $(AM_V_AR)$(libluajitmisc_a_AR) libluajitmisc.a $(libluajitmisc_a_OBJECTS) $(libluajitmisc_a_LIBADD) $(AM_V_at)$(RANLIB) libluajitmisc.a -luatexdir/luapplib/src/$(am__dirstamp): - @$(MKDIR_P) luatexdir/luapplib/src - @: > luatexdir/luapplib/src/$(am__dirstamp) -luatexdir/luapplib/src/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) luatexdir/luapplib/src/$(DEPDIR) - @: > luatexdir/luapplib/src/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/libluajitpplib_a-pparray.$(OBJEXT): \ - luatexdir/luapplib/src/$(am__dirstamp) \ - luatexdir/luapplib/src/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/libluajitpplib_a-ppcrypt.$(OBJEXT): \ - luatexdir/luapplib/src/$(am__dirstamp) \ - luatexdir/luapplib/src/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/libluajitpplib_a-ppdict.$(OBJEXT): \ - luatexdir/luapplib/src/$(am__dirstamp) \ - luatexdir/luapplib/src/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/libluajitpplib_a-ppheap.$(OBJEXT): \ - luatexdir/luapplib/src/$(am__dirstamp) \ - luatexdir/luapplib/src/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/libluajitpplib_a-ppload.$(OBJEXT): \ - luatexdir/luapplib/src/$(am__dirstamp) \ - luatexdir/luapplib/src/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/libluajitpplib_a-ppstream.$(OBJEXT): \ - luatexdir/luapplib/src/$(am__dirstamp) \ - luatexdir/luapplib/src/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/libluajitpplib_a-pptest1.$(OBJEXT): \ - luatexdir/luapplib/src/$(am__dirstamp) \ - luatexdir/luapplib/src/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/libluajitpplib_a-pptest2.$(OBJEXT): \ - luatexdir/luapplib/src/$(am__dirstamp) \ - luatexdir/luapplib/src/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/libluajitpplib_a-pptest3.$(OBJEXT): \ - luatexdir/luapplib/src/$(am__dirstamp) \ - luatexdir/luapplib/src/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/libluajitpplib_a-ppxref.$(OBJEXT): \ - luatexdir/luapplib/src/$(am__dirstamp) \ - luatexdir/luapplib/src/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/$(am__dirstamp): - @$(MKDIR_P) luatexdir/luapplib/src/util - @: > luatexdir/luapplib/src/util/$(am__dirstamp) -luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) luatexdir/luapplib/src/util/$(DEPDIR) - @: > luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluajitpplib_a-utilbasexx.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluajitpplib_a-utilcrypt.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluajitpplib_a-utilflate.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluajitpplib_a-utilfpred.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluajitpplib_a-utiliof.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluajitpplib_a-utillog.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluajitpplib_a-utillzw.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluajitpplib_a-utilmd5.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluajitpplib_a-utilmem.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluajitpplib_a-utilmemheap.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluajitpplib_a-utilmemheapiof.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluajitpplib_a-utilmeminfo.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluajitpplib_a-utilnumber.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluajitpplib_a-utilsha.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) - -libluajitpplib.a: $(libluajitpplib_a_OBJECTS) $(libluajitpplib_a_DEPENDENCIES) $(EXTRA_libluajitpplib_a_DEPENDENCIES) - $(AM_V_at)-rm -f libluajitpplib.a - $(AM_V_AR)$(libluajitpplib_a_AR) libluajitpplib.a $(libluajitpplib_a_OBJECTS) $(libluajitpplib_a_LIBADD) - $(AM_V_at)$(RANLIB) libluajitpplib.a luatexdir/luasocket/src/$(am__dirstamp): @$(MKDIR_P) luatexdir/luasocket/src @: > luatexdir/luasocket/src/$(am__dirstamp) @@ -6232,83 +5961,6 @@ libluamisc.a: $(libluamisc_a_OBJECTS) $(libluamisc_a_DEPENDENCIES) $(EXTRA_liblu $(AM_V_at)-rm -f libluamisc.a $(AM_V_AR)$(libluamisc_a_AR) libluamisc.a $(libluamisc_a_OBJECTS) $(libluamisc_a_LIBADD) $(AM_V_at)$(RANLIB) libluamisc.a -luatexdir/luapplib/src/libluapplib_a-pparray.$(OBJEXT): \ - luatexdir/luapplib/src/$(am__dirstamp) \ - luatexdir/luapplib/src/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/libluapplib_a-ppcrypt.$(OBJEXT): \ - luatexdir/luapplib/src/$(am__dirstamp) \ - luatexdir/luapplib/src/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/libluapplib_a-ppdict.$(OBJEXT): \ - luatexdir/luapplib/src/$(am__dirstamp) \ - luatexdir/luapplib/src/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/libluapplib_a-ppheap.$(OBJEXT): \ - luatexdir/luapplib/src/$(am__dirstamp) \ - luatexdir/luapplib/src/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/libluapplib_a-ppload.$(OBJEXT): \ - luatexdir/luapplib/src/$(am__dirstamp) \ - luatexdir/luapplib/src/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/libluapplib_a-ppstream.$(OBJEXT): \ - luatexdir/luapplib/src/$(am__dirstamp) \ - luatexdir/luapplib/src/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/libluapplib_a-pptest1.$(OBJEXT): \ - luatexdir/luapplib/src/$(am__dirstamp) \ - luatexdir/luapplib/src/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/libluapplib_a-pptest2.$(OBJEXT): \ - luatexdir/luapplib/src/$(am__dirstamp) \ - luatexdir/luapplib/src/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/libluapplib_a-pptest3.$(OBJEXT): \ - luatexdir/luapplib/src/$(am__dirstamp) \ - luatexdir/luapplib/src/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/libluapplib_a-ppxref.$(OBJEXT): \ - luatexdir/luapplib/src/$(am__dirstamp) \ - luatexdir/luapplib/src/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluapplib_a-utilbasexx.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluapplib_a-utilcrypt.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluapplib_a-utilflate.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluapplib_a-utilfpred.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluapplib_a-utiliof.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluapplib_a-utillog.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluapplib_a-utillzw.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluapplib_a-utilmd5.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluapplib_a-utilmem.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluapplib_a-utilmemheap.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluapplib_a-utilmemheapiof.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluapplib_a-utilmeminfo.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluapplib_a-utilnumber.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) -luatexdir/luapplib/src/util/libluapplib_a-utilsha.$(OBJEXT): \ - luatexdir/luapplib/src/util/$(am__dirstamp) \ - luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) - -libluapplib.a: $(libluapplib_a_OBJECTS) $(libluapplib_a_DEPENDENCIES) $(EXTRA_libluapplib_a_DEPENDENCIES) - $(AM_V_at)-rm -f libluapplib.a - $(AM_V_AR)$(libluapplib_a_AR) libluapplib.a $(libluapplib_a_OBJECTS) $(libluapplib_a_LIBADD) - $(AM_V_at)$(RANLIB) libluapplib.a luatexdir/luasocket/src/libluasocket_a-auxiliar.$(OBJEXT): \ luatexdir/luasocket/src/$(am__dirstamp) \ luatexdir/luasocket/src/$(DEPDIR)/$(am__dirstamp) @@ -7448,8 +7100,6 @@ mostlyclean-compile: -rm -f luatexdir/luaharfbuzz/src/luaharfbuzz/*.$(OBJEXT) -rm -f luatexdir/luamd5/*.$(OBJEXT) -rm -f luatexdir/luapeg/*.$(OBJEXT) - -rm -f luatexdir/luapplib/src/*.$(OBJEXT) - -rm -f luatexdir/luapplib/src/util/*.$(OBJEXT) -rm -f luatexdir/luasocket/src/*.$(OBJEXT) -rm -f luatexdir/luazip/src/*.$(OBJEXT) -rm -f luatexdir/luazlib/*.$(OBJEXT) @@ -7823,54 +7473,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luamd5/$(DEPDIR)/libluamisc_a-md5lib.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapeg/$(DEPDIR)/libluajitmisc_a-lpeg.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapeg/$(DEPDIR)/libluamisc_a-lpeg.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pparray.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppcrypt.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppdict.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppheap.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppload.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppstream.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest1.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest2.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest3.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppxref.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pparray.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppcrypt.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppdict.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppheap.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppload.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppstream.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest1.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest2.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest3.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppxref.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilbasexx.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilcrypt.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilflate.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilfpred.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utiliof.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utillog.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utillzw.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmd5.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmem.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmemheap.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmemheapiof.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmeminfo.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilnumber.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilsha.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilbasexx.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilcrypt.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilflate.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilfpred.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utiliof.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utillog.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utillzw.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmd5.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmem.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmemheap.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmemheapiof.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmeminfo.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilnumber.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilsha.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luasocket/src/$(DEPDIR)/libluajitsocket_a-auxiliar.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luasocket/src/$(DEPDIR)/libluajitsocket_a-buffer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@luatexdir/luasocket/src/$(DEPDIR)/libluajitsocket_a-compat.Po@am__quote@ # am--include-marker @@ -9414,342 +9016,6 @@ luatexdir/slnunicode/libluajitmisc_a-slnunico.obj: luatexdir/slnunicode/slnunico @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitmisc_a_CPPFLAGS) $(CPPFLAGS) $(libluajitmisc_a_CFLAGS) $(CFLAGS) -c -o luatexdir/slnunicode/libluajitmisc_a-slnunico.obj `if test -f 'luatexdir/slnunicode/slnunico.c'; then $(CYGPATH_W) 'luatexdir/slnunicode/slnunico.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/slnunicode/slnunico.c'; fi` -luatexdir/luapplib/src/libluajitpplib_a-pparray.o: luatexdir/luapplib/src/pparray.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluajitpplib_a-pparray.o -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pparray.Tpo -c -o luatexdir/luapplib/src/libluajitpplib_a-pparray.o `test -f 'luatexdir/luapplib/src/pparray.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/pparray.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pparray.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pparray.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/pparray.c' object='luatexdir/luapplib/src/libluajitpplib_a-pparray.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluajitpplib_a-pparray.o `test -f 'luatexdir/luapplib/src/pparray.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/pparray.c - -luatexdir/luapplib/src/libluajitpplib_a-pparray.obj: luatexdir/luapplib/src/pparray.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluajitpplib_a-pparray.obj -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pparray.Tpo -c -o luatexdir/luapplib/src/libluajitpplib_a-pparray.obj `if test -f 'luatexdir/luapplib/src/pparray.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/pparray.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/pparray.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pparray.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pparray.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/pparray.c' object='luatexdir/luapplib/src/libluajitpplib_a-pparray.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluajitpplib_a-pparray.obj `if test -f 'luatexdir/luapplib/src/pparray.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/pparray.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/pparray.c'; fi` - -luatexdir/luapplib/src/libluajitpplib_a-ppcrypt.o: luatexdir/luapplib/src/ppcrypt.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluajitpplib_a-ppcrypt.o -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppcrypt.Tpo -c -o luatexdir/luapplib/src/libluajitpplib_a-ppcrypt.o `test -f 'luatexdir/luapplib/src/ppcrypt.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/ppcrypt.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppcrypt.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppcrypt.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/ppcrypt.c' object='luatexdir/luapplib/src/libluajitpplib_a-ppcrypt.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluajitpplib_a-ppcrypt.o `test -f 'luatexdir/luapplib/src/ppcrypt.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/ppcrypt.c - -luatexdir/luapplib/src/libluajitpplib_a-ppcrypt.obj: luatexdir/luapplib/src/ppcrypt.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluajitpplib_a-ppcrypt.obj -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppcrypt.Tpo -c -o luatexdir/luapplib/src/libluajitpplib_a-ppcrypt.obj `if test -f 'luatexdir/luapplib/src/ppcrypt.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/ppcrypt.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/ppcrypt.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppcrypt.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppcrypt.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/ppcrypt.c' object='luatexdir/luapplib/src/libluajitpplib_a-ppcrypt.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluajitpplib_a-ppcrypt.obj `if test -f 'luatexdir/luapplib/src/ppcrypt.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/ppcrypt.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/ppcrypt.c'; fi` - -luatexdir/luapplib/src/libluajitpplib_a-ppdict.o: luatexdir/luapplib/src/ppdict.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluajitpplib_a-ppdict.o -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppdict.Tpo -c -o luatexdir/luapplib/src/libluajitpplib_a-ppdict.o `test -f 'luatexdir/luapplib/src/ppdict.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/ppdict.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppdict.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppdict.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/ppdict.c' object='luatexdir/luapplib/src/libluajitpplib_a-ppdict.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluajitpplib_a-ppdict.o `test -f 'luatexdir/luapplib/src/ppdict.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/ppdict.c - -luatexdir/luapplib/src/libluajitpplib_a-ppdict.obj: luatexdir/luapplib/src/ppdict.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluajitpplib_a-ppdict.obj -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppdict.Tpo -c -o luatexdir/luapplib/src/libluajitpplib_a-ppdict.obj `if test -f 'luatexdir/luapplib/src/ppdict.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/ppdict.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/ppdict.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppdict.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppdict.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/ppdict.c' object='luatexdir/luapplib/src/libluajitpplib_a-ppdict.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluajitpplib_a-ppdict.obj `if test -f 'luatexdir/luapplib/src/ppdict.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/ppdict.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/ppdict.c'; fi` - -luatexdir/luapplib/src/libluajitpplib_a-ppheap.o: luatexdir/luapplib/src/ppheap.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluajitpplib_a-ppheap.o -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppheap.Tpo -c -o luatexdir/luapplib/src/libluajitpplib_a-ppheap.o `test -f 'luatexdir/luapplib/src/ppheap.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/ppheap.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppheap.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppheap.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/ppheap.c' object='luatexdir/luapplib/src/libluajitpplib_a-ppheap.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluajitpplib_a-ppheap.o `test -f 'luatexdir/luapplib/src/ppheap.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/ppheap.c - -luatexdir/luapplib/src/libluajitpplib_a-ppheap.obj: luatexdir/luapplib/src/ppheap.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluajitpplib_a-ppheap.obj -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppheap.Tpo -c -o luatexdir/luapplib/src/libluajitpplib_a-ppheap.obj `if test -f 'luatexdir/luapplib/src/ppheap.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/ppheap.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/ppheap.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppheap.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppheap.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/ppheap.c' object='luatexdir/luapplib/src/libluajitpplib_a-ppheap.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluajitpplib_a-ppheap.obj `if test -f 'luatexdir/luapplib/src/ppheap.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/ppheap.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/ppheap.c'; fi` - -luatexdir/luapplib/src/libluajitpplib_a-ppload.o: luatexdir/luapplib/src/ppload.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluajitpplib_a-ppload.o -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppload.Tpo -c -o luatexdir/luapplib/src/libluajitpplib_a-ppload.o `test -f 'luatexdir/luapplib/src/ppload.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/ppload.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppload.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppload.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/ppload.c' object='luatexdir/luapplib/src/libluajitpplib_a-ppload.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluajitpplib_a-ppload.o `test -f 'luatexdir/luapplib/src/ppload.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/ppload.c - -luatexdir/luapplib/src/libluajitpplib_a-ppload.obj: luatexdir/luapplib/src/ppload.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluajitpplib_a-ppload.obj -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppload.Tpo -c -o luatexdir/luapplib/src/libluajitpplib_a-ppload.obj `if test -f 'luatexdir/luapplib/src/ppload.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/ppload.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/ppload.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppload.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppload.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/ppload.c' object='luatexdir/luapplib/src/libluajitpplib_a-ppload.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluajitpplib_a-ppload.obj `if test -f 'luatexdir/luapplib/src/ppload.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/ppload.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/ppload.c'; fi` - -luatexdir/luapplib/src/libluajitpplib_a-ppstream.o: luatexdir/luapplib/src/ppstream.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluajitpplib_a-ppstream.o -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppstream.Tpo -c -o luatexdir/luapplib/src/libluajitpplib_a-ppstream.o `test -f 'luatexdir/luapplib/src/ppstream.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/ppstream.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppstream.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppstream.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/ppstream.c' object='luatexdir/luapplib/src/libluajitpplib_a-ppstream.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluajitpplib_a-ppstream.o `test -f 'luatexdir/luapplib/src/ppstream.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/ppstream.c - -luatexdir/luapplib/src/libluajitpplib_a-ppstream.obj: luatexdir/luapplib/src/ppstream.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluajitpplib_a-ppstream.obj -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppstream.Tpo -c -o luatexdir/luapplib/src/libluajitpplib_a-ppstream.obj `if test -f 'luatexdir/luapplib/src/ppstream.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/ppstream.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/ppstream.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppstream.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppstream.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/ppstream.c' object='luatexdir/luapplib/src/libluajitpplib_a-ppstream.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluajitpplib_a-ppstream.obj `if test -f 'luatexdir/luapplib/src/ppstream.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/ppstream.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/ppstream.c'; fi` - -luatexdir/luapplib/src/libluajitpplib_a-pptest1.o: luatexdir/luapplib/src/pptest1.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluajitpplib_a-pptest1.o -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest1.Tpo -c -o luatexdir/luapplib/src/libluajitpplib_a-pptest1.o `test -f 'luatexdir/luapplib/src/pptest1.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/pptest1.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest1.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest1.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/pptest1.c' object='luatexdir/luapplib/src/libluajitpplib_a-pptest1.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluajitpplib_a-pptest1.o `test -f 'luatexdir/luapplib/src/pptest1.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/pptest1.c - -luatexdir/luapplib/src/libluajitpplib_a-pptest1.obj: luatexdir/luapplib/src/pptest1.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluajitpplib_a-pptest1.obj -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest1.Tpo -c -o luatexdir/luapplib/src/libluajitpplib_a-pptest1.obj `if test -f 'luatexdir/luapplib/src/pptest1.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/pptest1.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/pptest1.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest1.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest1.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/pptest1.c' object='luatexdir/luapplib/src/libluajitpplib_a-pptest1.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluajitpplib_a-pptest1.obj `if test -f 'luatexdir/luapplib/src/pptest1.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/pptest1.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/pptest1.c'; fi` - -luatexdir/luapplib/src/libluajitpplib_a-pptest2.o: luatexdir/luapplib/src/pptest2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluajitpplib_a-pptest2.o -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest2.Tpo -c -o luatexdir/luapplib/src/libluajitpplib_a-pptest2.o `test -f 'luatexdir/luapplib/src/pptest2.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/pptest2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest2.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest2.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/pptest2.c' object='luatexdir/luapplib/src/libluajitpplib_a-pptest2.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluajitpplib_a-pptest2.o `test -f 'luatexdir/luapplib/src/pptest2.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/pptest2.c - -luatexdir/luapplib/src/libluajitpplib_a-pptest2.obj: luatexdir/luapplib/src/pptest2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluajitpplib_a-pptest2.obj -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest2.Tpo -c -o luatexdir/luapplib/src/libluajitpplib_a-pptest2.obj `if test -f 'luatexdir/luapplib/src/pptest2.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/pptest2.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/pptest2.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest2.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest2.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/pptest2.c' object='luatexdir/luapplib/src/libluajitpplib_a-pptest2.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluajitpplib_a-pptest2.obj `if test -f 'luatexdir/luapplib/src/pptest2.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/pptest2.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/pptest2.c'; fi` - -luatexdir/luapplib/src/libluajitpplib_a-pptest3.o: luatexdir/luapplib/src/pptest3.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluajitpplib_a-pptest3.o -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest3.Tpo -c -o luatexdir/luapplib/src/libluajitpplib_a-pptest3.o `test -f 'luatexdir/luapplib/src/pptest3.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/pptest3.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest3.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest3.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/pptest3.c' object='luatexdir/luapplib/src/libluajitpplib_a-pptest3.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluajitpplib_a-pptest3.o `test -f 'luatexdir/luapplib/src/pptest3.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/pptest3.c - -luatexdir/luapplib/src/libluajitpplib_a-pptest3.obj: luatexdir/luapplib/src/pptest3.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluajitpplib_a-pptest3.obj -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest3.Tpo -c -o luatexdir/luapplib/src/libluajitpplib_a-pptest3.obj `if test -f 'luatexdir/luapplib/src/pptest3.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/pptest3.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/pptest3.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest3.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest3.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/pptest3.c' object='luatexdir/luapplib/src/libluajitpplib_a-pptest3.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluajitpplib_a-pptest3.obj `if test -f 'luatexdir/luapplib/src/pptest3.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/pptest3.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/pptest3.c'; fi` - -luatexdir/luapplib/src/libluajitpplib_a-ppxref.o: luatexdir/luapplib/src/ppxref.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluajitpplib_a-ppxref.o -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppxref.Tpo -c -o luatexdir/luapplib/src/libluajitpplib_a-ppxref.o `test -f 'luatexdir/luapplib/src/ppxref.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/ppxref.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppxref.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppxref.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/ppxref.c' object='luatexdir/luapplib/src/libluajitpplib_a-ppxref.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluajitpplib_a-ppxref.o `test -f 'luatexdir/luapplib/src/ppxref.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/ppxref.c - -luatexdir/luapplib/src/libluajitpplib_a-ppxref.obj: luatexdir/luapplib/src/ppxref.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluajitpplib_a-ppxref.obj -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppxref.Tpo -c -o luatexdir/luapplib/src/libluajitpplib_a-ppxref.obj `if test -f 'luatexdir/luapplib/src/ppxref.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/ppxref.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/ppxref.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppxref.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppxref.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/ppxref.c' object='luatexdir/luapplib/src/libluajitpplib_a-ppxref.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluajitpplib_a-ppxref.obj `if test -f 'luatexdir/luapplib/src/ppxref.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/ppxref.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/ppxref.c'; fi` - -luatexdir/luapplib/src/util/libluajitpplib_a-utilbasexx.o: luatexdir/luapplib/src/util/utilbasexx.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utilbasexx.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilbasexx.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilbasexx.o `test -f 'luatexdir/luapplib/src/util/utilbasexx.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilbasexx.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilbasexx.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilbasexx.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilbasexx.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utilbasexx.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilbasexx.o `test -f 'luatexdir/luapplib/src/util/utilbasexx.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilbasexx.c - -luatexdir/luapplib/src/util/libluajitpplib_a-utilbasexx.obj: luatexdir/luapplib/src/util/utilbasexx.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utilbasexx.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilbasexx.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilbasexx.obj `if test -f 'luatexdir/luapplib/src/util/utilbasexx.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilbasexx.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilbasexx.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilbasexx.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilbasexx.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilbasexx.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utilbasexx.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilbasexx.obj `if test -f 'luatexdir/luapplib/src/util/utilbasexx.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilbasexx.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilbasexx.c'; fi` - -luatexdir/luapplib/src/util/libluajitpplib_a-utilcrypt.o: luatexdir/luapplib/src/util/utilcrypt.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utilcrypt.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilcrypt.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilcrypt.o `test -f 'luatexdir/luapplib/src/util/utilcrypt.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilcrypt.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilcrypt.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilcrypt.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilcrypt.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utilcrypt.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilcrypt.o `test -f 'luatexdir/luapplib/src/util/utilcrypt.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilcrypt.c - -luatexdir/luapplib/src/util/libluajitpplib_a-utilcrypt.obj: luatexdir/luapplib/src/util/utilcrypt.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utilcrypt.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilcrypt.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilcrypt.obj `if test -f 'luatexdir/luapplib/src/util/utilcrypt.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilcrypt.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilcrypt.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilcrypt.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilcrypt.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilcrypt.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utilcrypt.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilcrypt.obj `if test -f 'luatexdir/luapplib/src/util/utilcrypt.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilcrypt.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilcrypt.c'; fi` - -luatexdir/luapplib/src/util/libluajitpplib_a-utilflate.o: luatexdir/luapplib/src/util/utilflate.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utilflate.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilflate.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilflate.o `test -f 'luatexdir/luapplib/src/util/utilflate.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilflate.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilflate.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilflate.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilflate.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utilflate.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilflate.o `test -f 'luatexdir/luapplib/src/util/utilflate.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilflate.c - -luatexdir/luapplib/src/util/libluajitpplib_a-utilflate.obj: luatexdir/luapplib/src/util/utilflate.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utilflate.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilflate.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilflate.obj `if test -f 'luatexdir/luapplib/src/util/utilflate.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilflate.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilflate.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilflate.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilflate.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilflate.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utilflate.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilflate.obj `if test -f 'luatexdir/luapplib/src/util/utilflate.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilflate.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilflate.c'; fi` - -luatexdir/luapplib/src/util/libluajitpplib_a-utilfpred.o: luatexdir/luapplib/src/util/utilfpred.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utilfpred.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilfpred.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilfpred.o `test -f 'luatexdir/luapplib/src/util/utilfpred.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilfpred.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilfpred.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilfpred.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilfpred.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utilfpred.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilfpred.o `test -f 'luatexdir/luapplib/src/util/utilfpred.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilfpred.c - -luatexdir/luapplib/src/util/libluajitpplib_a-utilfpred.obj: luatexdir/luapplib/src/util/utilfpred.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utilfpred.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilfpred.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilfpred.obj `if test -f 'luatexdir/luapplib/src/util/utilfpred.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilfpred.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilfpred.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilfpred.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilfpred.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilfpred.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utilfpred.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilfpred.obj `if test -f 'luatexdir/luapplib/src/util/utilfpred.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilfpred.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilfpred.c'; fi` - -luatexdir/luapplib/src/util/libluajitpplib_a-utiliof.o: luatexdir/luapplib/src/util/utiliof.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utiliof.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utiliof.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utiliof.o `test -f 'luatexdir/luapplib/src/util/utiliof.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utiliof.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utiliof.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utiliof.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utiliof.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utiliof.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utiliof.o `test -f 'luatexdir/luapplib/src/util/utiliof.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utiliof.c - -luatexdir/luapplib/src/util/libluajitpplib_a-utiliof.obj: luatexdir/luapplib/src/util/utiliof.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utiliof.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utiliof.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utiliof.obj `if test -f 'luatexdir/luapplib/src/util/utiliof.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utiliof.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utiliof.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utiliof.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utiliof.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utiliof.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utiliof.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utiliof.obj `if test -f 'luatexdir/luapplib/src/util/utiliof.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utiliof.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utiliof.c'; fi` - -luatexdir/luapplib/src/util/libluajitpplib_a-utillog.o: luatexdir/luapplib/src/util/utillog.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utillog.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utillog.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utillog.o `test -f 'luatexdir/luapplib/src/util/utillog.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utillog.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utillog.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utillog.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utillog.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utillog.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utillog.o `test -f 'luatexdir/luapplib/src/util/utillog.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utillog.c - -luatexdir/luapplib/src/util/libluajitpplib_a-utillog.obj: luatexdir/luapplib/src/util/utillog.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utillog.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utillog.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utillog.obj `if test -f 'luatexdir/luapplib/src/util/utillog.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utillog.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utillog.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utillog.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utillog.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utillog.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utillog.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utillog.obj `if test -f 'luatexdir/luapplib/src/util/utillog.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utillog.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utillog.c'; fi` - -luatexdir/luapplib/src/util/libluajitpplib_a-utillzw.o: luatexdir/luapplib/src/util/utillzw.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utillzw.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utillzw.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utillzw.o `test -f 'luatexdir/luapplib/src/util/utillzw.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utillzw.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utillzw.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utillzw.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utillzw.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utillzw.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utillzw.o `test -f 'luatexdir/luapplib/src/util/utillzw.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utillzw.c - -luatexdir/luapplib/src/util/libluajitpplib_a-utillzw.obj: luatexdir/luapplib/src/util/utillzw.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utillzw.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utillzw.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utillzw.obj `if test -f 'luatexdir/luapplib/src/util/utillzw.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utillzw.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utillzw.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utillzw.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utillzw.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utillzw.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utillzw.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utillzw.obj `if test -f 'luatexdir/luapplib/src/util/utillzw.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utillzw.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utillzw.c'; fi` - -luatexdir/luapplib/src/util/libluajitpplib_a-utilmd5.o: luatexdir/luapplib/src/util/utilmd5.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utilmd5.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmd5.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilmd5.o `test -f 'luatexdir/luapplib/src/util/utilmd5.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilmd5.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmd5.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmd5.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilmd5.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utilmd5.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilmd5.o `test -f 'luatexdir/luapplib/src/util/utilmd5.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilmd5.c - -luatexdir/luapplib/src/util/libluajitpplib_a-utilmd5.obj: luatexdir/luapplib/src/util/utilmd5.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utilmd5.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmd5.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilmd5.obj `if test -f 'luatexdir/luapplib/src/util/utilmd5.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilmd5.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilmd5.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmd5.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmd5.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilmd5.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utilmd5.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilmd5.obj `if test -f 'luatexdir/luapplib/src/util/utilmd5.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilmd5.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilmd5.c'; fi` - -luatexdir/luapplib/src/util/libluajitpplib_a-utilmem.o: luatexdir/luapplib/src/util/utilmem.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utilmem.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmem.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilmem.o `test -f 'luatexdir/luapplib/src/util/utilmem.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilmem.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmem.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmem.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilmem.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utilmem.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilmem.o `test -f 'luatexdir/luapplib/src/util/utilmem.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilmem.c - -luatexdir/luapplib/src/util/libluajitpplib_a-utilmem.obj: luatexdir/luapplib/src/util/utilmem.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utilmem.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmem.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilmem.obj `if test -f 'luatexdir/luapplib/src/util/utilmem.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilmem.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilmem.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmem.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmem.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilmem.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utilmem.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilmem.obj `if test -f 'luatexdir/luapplib/src/util/utilmem.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilmem.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilmem.c'; fi` - -luatexdir/luapplib/src/util/libluajitpplib_a-utilmemheap.o: luatexdir/luapplib/src/util/utilmemheap.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utilmemheap.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmemheap.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilmemheap.o `test -f 'luatexdir/luapplib/src/util/utilmemheap.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilmemheap.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmemheap.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmemheap.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilmemheap.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utilmemheap.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilmemheap.o `test -f 'luatexdir/luapplib/src/util/utilmemheap.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilmemheap.c - -luatexdir/luapplib/src/util/libluajitpplib_a-utilmemheap.obj: luatexdir/luapplib/src/util/utilmemheap.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utilmemheap.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmemheap.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilmemheap.obj `if test -f 'luatexdir/luapplib/src/util/utilmemheap.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilmemheap.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilmemheap.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmemheap.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmemheap.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilmemheap.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utilmemheap.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilmemheap.obj `if test -f 'luatexdir/luapplib/src/util/utilmemheap.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilmemheap.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilmemheap.c'; fi` - -luatexdir/luapplib/src/util/libluajitpplib_a-utilmemheapiof.o: luatexdir/luapplib/src/util/utilmemheapiof.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utilmemheapiof.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmemheapiof.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilmemheapiof.o `test -f 'luatexdir/luapplib/src/util/utilmemheapiof.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilmemheapiof.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmemheapiof.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmemheapiof.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilmemheapiof.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utilmemheapiof.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilmemheapiof.o `test -f 'luatexdir/luapplib/src/util/utilmemheapiof.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilmemheapiof.c - -luatexdir/luapplib/src/util/libluajitpplib_a-utilmemheapiof.obj: luatexdir/luapplib/src/util/utilmemheapiof.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utilmemheapiof.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmemheapiof.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilmemheapiof.obj `if test -f 'luatexdir/luapplib/src/util/utilmemheapiof.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilmemheapiof.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilmemheapiof.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmemheapiof.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmemheapiof.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilmemheapiof.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utilmemheapiof.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilmemheapiof.obj `if test -f 'luatexdir/luapplib/src/util/utilmemheapiof.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilmemheapiof.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilmemheapiof.c'; fi` - -luatexdir/luapplib/src/util/libluajitpplib_a-utilmeminfo.o: luatexdir/luapplib/src/util/utilmeminfo.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utilmeminfo.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmeminfo.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilmeminfo.o `test -f 'luatexdir/luapplib/src/util/utilmeminfo.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilmeminfo.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmeminfo.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmeminfo.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilmeminfo.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utilmeminfo.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilmeminfo.o `test -f 'luatexdir/luapplib/src/util/utilmeminfo.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilmeminfo.c - -luatexdir/luapplib/src/util/libluajitpplib_a-utilmeminfo.obj: luatexdir/luapplib/src/util/utilmeminfo.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utilmeminfo.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmeminfo.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilmeminfo.obj `if test -f 'luatexdir/luapplib/src/util/utilmeminfo.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilmeminfo.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilmeminfo.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmeminfo.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmeminfo.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilmeminfo.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utilmeminfo.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilmeminfo.obj `if test -f 'luatexdir/luapplib/src/util/utilmeminfo.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilmeminfo.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilmeminfo.c'; fi` - -luatexdir/luapplib/src/util/libluajitpplib_a-utilnumber.o: luatexdir/luapplib/src/util/utilnumber.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utilnumber.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilnumber.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilnumber.o `test -f 'luatexdir/luapplib/src/util/utilnumber.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilnumber.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilnumber.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilnumber.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilnumber.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utilnumber.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilnumber.o `test -f 'luatexdir/luapplib/src/util/utilnumber.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilnumber.c - -luatexdir/luapplib/src/util/libluajitpplib_a-utilnumber.obj: luatexdir/luapplib/src/util/utilnumber.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utilnumber.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilnumber.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilnumber.obj `if test -f 'luatexdir/luapplib/src/util/utilnumber.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilnumber.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilnumber.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilnumber.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilnumber.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilnumber.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utilnumber.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilnumber.obj `if test -f 'luatexdir/luapplib/src/util/utilnumber.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilnumber.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilnumber.c'; fi` - -luatexdir/luapplib/src/util/libluajitpplib_a-utilsha.o: luatexdir/luapplib/src/util/utilsha.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utilsha.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilsha.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilsha.o `test -f 'luatexdir/luapplib/src/util/utilsha.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilsha.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilsha.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilsha.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilsha.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utilsha.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilsha.o `test -f 'luatexdir/luapplib/src/util/utilsha.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilsha.c - -luatexdir/luapplib/src/util/libluajitpplib_a-utilsha.obj: luatexdir/luapplib/src/util/utilsha.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluajitpplib_a-utilsha.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilsha.Tpo -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilsha.obj `if test -f 'luatexdir/luapplib/src/util/utilsha.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilsha.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilsha.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilsha.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilsha.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilsha.c' object='luatexdir/luapplib/src/util/libluajitpplib_a-utilsha.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitpplib_a_CPPFLAGS) $(CPPFLAGS) $(libluajitpplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluajitpplib_a-utilsha.obj `if test -f 'luatexdir/luapplib/src/util/utilsha.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilsha.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilsha.c'; fi` - luatexdir/luasocket/src/libluajitsocket_a-auxiliar.o: luatexdir/luasocket/src/auxiliar.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluajitsocket_a_CPPFLAGS) $(CPPFLAGS) $(libluajitsocket_a_CFLAGS) $(CFLAGS) -MT luatexdir/luasocket/src/libluajitsocket_a-auxiliar.o -MD -MP -MF luatexdir/luasocket/src/$(DEPDIR)/libluajitsocket_a-auxiliar.Tpo -c -o luatexdir/luasocket/src/libluajitsocket_a-auxiliar.o `test -f 'luatexdir/luasocket/src/auxiliar.c' || echo '$(srcdir)/'`luatexdir/luasocket/src/auxiliar.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luasocket/src/$(DEPDIR)/libluajitsocket_a-auxiliar.Tpo luatexdir/luasocket/src/$(DEPDIR)/libluajitsocket_a-auxiliar.Po @@ -11738,342 +11004,6 @@ luatexdir/slnunicode/libluamisc_a-slnunico.obj: luatexdir/slnunicode/slnunico.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluamisc_a_CPPFLAGS) $(CPPFLAGS) $(libluamisc_a_CFLAGS) $(CFLAGS) -c -o luatexdir/slnunicode/libluamisc_a-slnunico.obj `if test -f 'luatexdir/slnunicode/slnunico.c'; then $(CYGPATH_W) 'luatexdir/slnunicode/slnunico.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/slnunicode/slnunico.c'; fi` -luatexdir/luapplib/src/libluapplib_a-pparray.o: luatexdir/luapplib/src/pparray.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluapplib_a-pparray.o -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pparray.Tpo -c -o luatexdir/luapplib/src/libluapplib_a-pparray.o `test -f 'luatexdir/luapplib/src/pparray.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/pparray.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pparray.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pparray.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/pparray.c' object='luatexdir/luapplib/src/libluapplib_a-pparray.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluapplib_a-pparray.o `test -f 'luatexdir/luapplib/src/pparray.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/pparray.c - -luatexdir/luapplib/src/libluapplib_a-pparray.obj: luatexdir/luapplib/src/pparray.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluapplib_a-pparray.obj -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pparray.Tpo -c -o luatexdir/luapplib/src/libluapplib_a-pparray.obj `if test -f 'luatexdir/luapplib/src/pparray.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/pparray.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/pparray.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pparray.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pparray.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/pparray.c' object='luatexdir/luapplib/src/libluapplib_a-pparray.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluapplib_a-pparray.obj `if test -f 'luatexdir/luapplib/src/pparray.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/pparray.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/pparray.c'; fi` - -luatexdir/luapplib/src/libluapplib_a-ppcrypt.o: luatexdir/luapplib/src/ppcrypt.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluapplib_a-ppcrypt.o -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppcrypt.Tpo -c -o luatexdir/luapplib/src/libluapplib_a-ppcrypt.o `test -f 'luatexdir/luapplib/src/ppcrypt.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/ppcrypt.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppcrypt.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppcrypt.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/ppcrypt.c' object='luatexdir/luapplib/src/libluapplib_a-ppcrypt.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluapplib_a-ppcrypt.o `test -f 'luatexdir/luapplib/src/ppcrypt.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/ppcrypt.c - -luatexdir/luapplib/src/libluapplib_a-ppcrypt.obj: luatexdir/luapplib/src/ppcrypt.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluapplib_a-ppcrypt.obj -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppcrypt.Tpo -c -o luatexdir/luapplib/src/libluapplib_a-ppcrypt.obj `if test -f 'luatexdir/luapplib/src/ppcrypt.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/ppcrypt.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/ppcrypt.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppcrypt.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppcrypt.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/ppcrypt.c' object='luatexdir/luapplib/src/libluapplib_a-ppcrypt.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluapplib_a-ppcrypt.obj `if test -f 'luatexdir/luapplib/src/ppcrypt.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/ppcrypt.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/ppcrypt.c'; fi` - -luatexdir/luapplib/src/libluapplib_a-ppdict.o: luatexdir/luapplib/src/ppdict.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluapplib_a-ppdict.o -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppdict.Tpo -c -o luatexdir/luapplib/src/libluapplib_a-ppdict.o `test -f 'luatexdir/luapplib/src/ppdict.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/ppdict.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppdict.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppdict.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/ppdict.c' object='luatexdir/luapplib/src/libluapplib_a-ppdict.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluapplib_a-ppdict.o `test -f 'luatexdir/luapplib/src/ppdict.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/ppdict.c - -luatexdir/luapplib/src/libluapplib_a-ppdict.obj: luatexdir/luapplib/src/ppdict.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluapplib_a-ppdict.obj -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppdict.Tpo -c -o luatexdir/luapplib/src/libluapplib_a-ppdict.obj `if test -f 'luatexdir/luapplib/src/ppdict.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/ppdict.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/ppdict.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppdict.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppdict.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/ppdict.c' object='luatexdir/luapplib/src/libluapplib_a-ppdict.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluapplib_a-ppdict.obj `if test -f 'luatexdir/luapplib/src/ppdict.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/ppdict.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/ppdict.c'; fi` - -luatexdir/luapplib/src/libluapplib_a-ppheap.o: luatexdir/luapplib/src/ppheap.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluapplib_a-ppheap.o -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppheap.Tpo -c -o luatexdir/luapplib/src/libluapplib_a-ppheap.o `test -f 'luatexdir/luapplib/src/ppheap.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/ppheap.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppheap.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppheap.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/ppheap.c' object='luatexdir/luapplib/src/libluapplib_a-ppheap.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluapplib_a-ppheap.o `test -f 'luatexdir/luapplib/src/ppheap.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/ppheap.c - -luatexdir/luapplib/src/libluapplib_a-ppheap.obj: luatexdir/luapplib/src/ppheap.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluapplib_a-ppheap.obj -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppheap.Tpo -c -o luatexdir/luapplib/src/libluapplib_a-ppheap.obj `if test -f 'luatexdir/luapplib/src/ppheap.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/ppheap.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/ppheap.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppheap.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppheap.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/ppheap.c' object='luatexdir/luapplib/src/libluapplib_a-ppheap.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluapplib_a-ppheap.obj `if test -f 'luatexdir/luapplib/src/ppheap.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/ppheap.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/ppheap.c'; fi` - -luatexdir/luapplib/src/libluapplib_a-ppload.o: luatexdir/luapplib/src/ppload.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluapplib_a-ppload.o -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppload.Tpo -c -o luatexdir/luapplib/src/libluapplib_a-ppload.o `test -f 'luatexdir/luapplib/src/ppload.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/ppload.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppload.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppload.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/ppload.c' object='luatexdir/luapplib/src/libluapplib_a-ppload.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluapplib_a-ppload.o `test -f 'luatexdir/luapplib/src/ppload.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/ppload.c - -luatexdir/luapplib/src/libluapplib_a-ppload.obj: luatexdir/luapplib/src/ppload.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluapplib_a-ppload.obj -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppload.Tpo -c -o luatexdir/luapplib/src/libluapplib_a-ppload.obj `if test -f 'luatexdir/luapplib/src/ppload.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/ppload.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/ppload.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppload.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppload.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/ppload.c' object='luatexdir/luapplib/src/libluapplib_a-ppload.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluapplib_a-ppload.obj `if test -f 'luatexdir/luapplib/src/ppload.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/ppload.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/ppload.c'; fi` - -luatexdir/luapplib/src/libluapplib_a-ppstream.o: luatexdir/luapplib/src/ppstream.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluapplib_a-ppstream.o -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppstream.Tpo -c -o luatexdir/luapplib/src/libluapplib_a-ppstream.o `test -f 'luatexdir/luapplib/src/ppstream.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/ppstream.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppstream.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppstream.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/ppstream.c' object='luatexdir/luapplib/src/libluapplib_a-ppstream.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluapplib_a-ppstream.o `test -f 'luatexdir/luapplib/src/ppstream.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/ppstream.c - -luatexdir/luapplib/src/libluapplib_a-ppstream.obj: luatexdir/luapplib/src/ppstream.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluapplib_a-ppstream.obj -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppstream.Tpo -c -o luatexdir/luapplib/src/libluapplib_a-ppstream.obj `if test -f 'luatexdir/luapplib/src/ppstream.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/ppstream.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/ppstream.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppstream.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppstream.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/ppstream.c' object='luatexdir/luapplib/src/libluapplib_a-ppstream.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluapplib_a-ppstream.obj `if test -f 'luatexdir/luapplib/src/ppstream.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/ppstream.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/ppstream.c'; fi` - -luatexdir/luapplib/src/libluapplib_a-pptest1.o: luatexdir/luapplib/src/pptest1.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluapplib_a-pptest1.o -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest1.Tpo -c -o luatexdir/luapplib/src/libluapplib_a-pptest1.o `test -f 'luatexdir/luapplib/src/pptest1.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/pptest1.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest1.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest1.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/pptest1.c' object='luatexdir/luapplib/src/libluapplib_a-pptest1.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluapplib_a-pptest1.o `test -f 'luatexdir/luapplib/src/pptest1.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/pptest1.c - -luatexdir/luapplib/src/libluapplib_a-pptest1.obj: luatexdir/luapplib/src/pptest1.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluapplib_a-pptest1.obj -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest1.Tpo -c -o luatexdir/luapplib/src/libluapplib_a-pptest1.obj `if test -f 'luatexdir/luapplib/src/pptest1.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/pptest1.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/pptest1.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest1.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest1.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/pptest1.c' object='luatexdir/luapplib/src/libluapplib_a-pptest1.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluapplib_a-pptest1.obj `if test -f 'luatexdir/luapplib/src/pptest1.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/pptest1.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/pptest1.c'; fi` - -luatexdir/luapplib/src/libluapplib_a-pptest2.o: luatexdir/luapplib/src/pptest2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluapplib_a-pptest2.o -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest2.Tpo -c -o luatexdir/luapplib/src/libluapplib_a-pptest2.o `test -f 'luatexdir/luapplib/src/pptest2.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/pptest2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest2.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest2.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/pptest2.c' object='luatexdir/luapplib/src/libluapplib_a-pptest2.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluapplib_a-pptest2.o `test -f 'luatexdir/luapplib/src/pptest2.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/pptest2.c - -luatexdir/luapplib/src/libluapplib_a-pptest2.obj: luatexdir/luapplib/src/pptest2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluapplib_a-pptest2.obj -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest2.Tpo -c -o luatexdir/luapplib/src/libluapplib_a-pptest2.obj `if test -f 'luatexdir/luapplib/src/pptest2.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/pptest2.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/pptest2.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest2.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest2.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/pptest2.c' object='luatexdir/luapplib/src/libluapplib_a-pptest2.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluapplib_a-pptest2.obj `if test -f 'luatexdir/luapplib/src/pptest2.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/pptest2.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/pptest2.c'; fi` - -luatexdir/luapplib/src/libluapplib_a-pptest3.o: luatexdir/luapplib/src/pptest3.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluapplib_a-pptest3.o -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest3.Tpo -c -o luatexdir/luapplib/src/libluapplib_a-pptest3.o `test -f 'luatexdir/luapplib/src/pptest3.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/pptest3.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest3.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest3.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/pptest3.c' object='luatexdir/luapplib/src/libluapplib_a-pptest3.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluapplib_a-pptest3.o `test -f 'luatexdir/luapplib/src/pptest3.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/pptest3.c - -luatexdir/luapplib/src/libluapplib_a-pptest3.obj: luatexdir/luapplib/src/pptest3.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluapplib_a-pptest3.obj -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest3.Tpo -c -o luatexdir/luapplib/src/libluapplib_a-pptest3.obj `if test -f 'luatexdir/luapplib/src/pptest3.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/pptest3.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/pptest3.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest3.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest3.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/pptest3.c' object='luatexdir/luapplib/src/libluapplib_a-pptest3.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluapplib_a-pptest3.obj `if test -f 'luatexdir/luapplib/src/pptest3.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/pptest3.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/pptest3.c'; fi` - -luatexdir/luapplib/src/libluapplib_a-ppxref.o: luatexdir/luapplib/src/ppxref.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluapplib_a-ppxref.o -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppxref.Tpo -c -o luatexdir/luapplib/src/libluapplib_a-ppxref.o `test -f 'luatexdir/luapplib/src/ppxref.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/ppxref.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppxref.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppxref.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/ppxref.c' object='luatexdir/luapplib/src/libluapplib_a-ppxref.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluapplib_a-ppxref.o `test -f 'luatexdir/luapplib/src/ppxref.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/ppxref.c - -luatexdir/luapplib/src/libluapplib_a-ppxref.obj: luatexdir/luapplib/src/ppxref.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/libluapplib_a-ppxref.obj -MD -MP -MF luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppxref.Tpo -c -o luatexdir/luapplib/src/libluapplib_a-ppxref.obj `if test -f 'luatexdir/luapplib/src/ppxref.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/ppxref.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/ppxref.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppxref.Tpo luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppxref.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/ppxref.c' object='luatexdir/luapplib/src/libluapplib_a-ppxref.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/libluapplib_a-ppxref.obj `if test -f 'luatexdir/luapplib/src/ppxref.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/ppxref.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/ppxref.c'; fi` - -luatexdir/luapplib/src/util/libluapplib_a-utilbasexx.o: luatexdir/luapplib/src/util/utilbasexx.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utilbasexx.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilbasexx.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utilbasexx.o `test -f 'luatexdir/luapplib/src/util/utilbasexx.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilbasexx.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilbasexx.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilbasexx.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilbasexx.c' object='luatexdir/luapplib/src/util/libluapplib_a-utilbasexx.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utilbasexx.o `test -f 'luatexdir/luapplib/src/util/utilbasexx.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilbasexx.c - -luatexdir/luapplib/src/util/libluapplib_a-utilbasexx.obj: luatexdir/luapplib/src/util/utilbasexx.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utilbasexx.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilbasexx.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utilbasexx.obj `if test -f 'luatexdir/luapplib/src/util/utilbasexx.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilbasexx.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilbasexx.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilbasexx.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilbasexx.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilbasexx.c' object='luatexdir/luapplib/src/util/libluapplib_a-utilbasexx.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utilbasexx.obj `if test -f 'luatexdir/luapplib/src/util/utilbasexx.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilbasexx.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilbasexx.c'; fi` - -luatexdir/luapplib/src/util/libluapplib_a-utilcrypt.o: luatexdir/luapplib/src/util/utilcrypt.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utilcrypt.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilcrypt.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utilcrypt.o `test -f 'luatexdir/luapplib/src/util/utilcrypt.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilcrypt.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilcrypt.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilcrypt.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilcrypt.c' object='luatexdir/luapplib/src/util/libluapplib_a-utilcrypt.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utilcrypt.o `test -f 'luatexdir/luapplib/src/util/utilcrypt.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilcrypt.c - -luatexdir/luapplib/src/util/libluapplib_a-utilcrypt.obj: luatexdir/luapplib/src/util/utilcrypt.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utilcrypt.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilcrypt.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utilcrypt.obj `if test -f 'luatexdir/luapplib/src/util/utilcrypt.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilcrypt.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilcrypt.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilcrypt.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilcrypt.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilcrypt.c' object='luatexdir/luapplib/src/util/libluapplib_a-utilcrypt.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utilcrypt.obj `if test -f 'luatexdir/luapplib/src/util/utilcrypt.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilcrypt.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilcrypt.c'; fi` - -luatexdir/luapplib/src/util/libluapplib_a-utilflate.o: luatexdir/luapplib/src/util/utilflate.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utilflate.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilflate.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utilflate.o `test -f 'luatexdir/luapplib/src/util/utilflate.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilflate.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilflate.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilflate.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilflate.c' object='luatexdir/luapplib/src/util/libluapplib_a-utilflate.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utilflate.o `test -f 'luatexdir/luapplib/src/util/utilflate.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilflate.c - -luatexdir/luapplib/src/util/libluapplib_a-utilflate.obj: luatexdir/luapplib/src/util/utilflate.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utilflate.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilflate.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utilflate.obj `if test -f 'luatexdir/luapplib/src/util/utilflate.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilflate.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilflate.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilflate.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilflate.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilflate.c' object='luatexdir/luapplib/src/util/libluapplib_a-utilflate.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utilflate.obj `if test -f 'luatexdir/luapplib/src/util/utilflate.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilflate.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilflate.c'; fi` - -luatexdir/luapplib/src/util/libluapplib_a-utilfpred.o: luatexdir/luapplib/src/util/utilfpred.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utilfpred.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilfpred.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utilfpred.o `test -f 'luatexdir/luapplib/src/util/utilfpred.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilfpred.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilfpred.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilfpred.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilfpred.c' object='luatexdir/luapplib/src/util/libluapplib_a-utilfpred.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utilfpred.o `test -f 'luatexdir/luapplib/src/util/utilfpred.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilfpred.c - -luatexdir/luapplib/src/util/libluapplib_a-utilfpred.obj: luatexdir/luapplib/src/util/utilfpred.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utilfpred.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilfpred.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utilfpred.obj `if test -f 'luatexdir/luapplib/src/util/utilfpred.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilfpred.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilfpred.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilfpred.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilfpred.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilfpred.c' object='luatexdir/luapplib/src/util/libluapplib_a-utilfpred.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utilfpred.obj `if test -f 'luatexdir/luapplib/src/util/utilfpred.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilfpred.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilfpred.c'; fi` - -luatexdir/luapplib/src/util/libluapplib_a-utiliof.o: luatexdir/luapplib/src/util/utiliof.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utiliof.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utiliof.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utiliof.o `test -f 'luatexdir/luapplib/src/util/utiliof.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utiliof.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utiliof.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utiliof.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utiliof.c' object='luatexdir/luapplib/src/util/libluapplib_a-utiliof.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utiliof.o `test -f 'luatexdir/luapplib/src/util/utiliof.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utiliof.c - -luatexdir/luapplib/src/util/libluapplib_a-utiliof.obj: luatexdir/luapplib/src/util/utiliof.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utiliof.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utiliof.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utiliof.obj `if test -f 'luatexdir/luapplib/src/util/utiliof.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utiliof.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utiliof.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utiliof.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utiliof.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utiliof.c' object='luatexdir/luapplib/src/util/libluapplib_a-utiliof.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utiliof.obj `if test -f 'luatexdir/luapplib/src/util/utiliof.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utiliof.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utiliof.c'; fi` - -luatexdir/luapplib/src/util/libluapplib_a-utillog.o: luatexdir/luapplib/src/util/utillog.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utillog.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utillog.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utillog.o `test -f 'luatexdir/luapplib/src/util/utillog.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utillog.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utillog.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utillog.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utillog.c' object='luatexdir/luapplib/src/util/libluapplib_a-utillog.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utillog.o `test -f 'luatexdir/luapplib/src/util/utillog.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utillog.c - -luatexdir/luapplib/src/util/libluapplib_a-utillog.obj: luatexdir/luapplib/src/util/utillog.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utillog.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utillog.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utillog.obj `if test -f 'luatexdir/luapplib/src/util/utillog.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utillog.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utillog.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utillog.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utillog.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utillog.c' object='luatexdir/luapplib/src/util/libluapplib_a-utillog.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utillog.obj `if test -f 'luatexdir/luapplib/src/util/utillog.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utillog.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utillog.c'; fi` - -luatexdir/luapplib/src/util/libluapplib_a-utillzw.o: luatexdir/luapplib/src/util/utillzw.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utillzw.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utillzw.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utillzw.o `test -f 'luatexdir/luapplib/src/util/utillzw.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utillzw.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utillzw.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utillzw.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utillzw.c' object='luatexdir/luapplib/src/util/libluapplib_a-utillzw.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utillzw.o `test -f 'luatexdir/luapplib/src/util/utillzw.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utillzw.c - -luatexdir/luapplib/src/util/libluapplib_a-utillzw.obj: luatexdir/luapplib/src/util/utillzw.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utillzw.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utillzw.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utillzw.obj `if test -f 'luatexdir/luapplib/src/util/utillzw.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utillzw.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utillzw.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utillzw.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utillzw.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utillzw.c' object='luatexdir/luapplib/src/util/libluapplib_a-utillzw.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utillzw.obj `if test -f 'luatexdir/luapplib/src/util/utillzw.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utillzw.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utillzw.c'; fi` - -luatexdir/luapplib/src/util/libluapplib_a-utilmd5.o: luatexdir/luapplib/src/util/utilmd5.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utilmd5.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmd5.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utilmd5.o `test -f 'luatexdir/luapplib/src/util/utilmd5.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilmd5.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmd5.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmd5.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilmd5.c' object='luatexdir/luapplib/src/util/libluapplib_a-utilmd5.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utilmd5.o `test -f 'luatexdir/luapplib/src/util/utilmd5.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilmd5.c - -luatexdir/luapplib/src/util/libluapplib_a-utilmd5.obj: luatexdir/luapplib/src/util/utilmd5.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utilmd5.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmd5.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utilmd5.obj `if test -f 'luatexdir/luapplib/src/util/utilmd5.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilmd5.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilmd5.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmd5.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmd5.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilmd5.c' object='luatexdir/luapplib/src/util/libluapplib_a-utilmd5.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utilmd5.obj `if test -f 'luatexdir/luapplib/src/util/utilmd5.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilmd5.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilmd5.c'; fi` - -luatexdir/luapplib/src/util/libluapplib_a-utilmem.o: luatexdir/luapplib/src/util/utilmem.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utilmem.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmem.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utilmem.o `test -f 'luatexdir/luapplib/src/util/utilmem.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilmem.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmem.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmem.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilmem.c' object='luatexdir/luapplib/src/util/libluapplib_a-utilmem.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utilmem.o `test -f 'luatexdir/luapplib/src/util/utilmem.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilmem.c - -luatexdir/luapplib/src/util/libluapplib_a-utilmem.obj: luatexdir/luapplib/src/util/utilmem.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utilmem.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmem.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utilmem.obj `if test -f 'luatexdir/luapplib/src/util/utilmem.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilmem.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilmem.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmem.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmem.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilmem.c' object='luatexdir/luapplib/src/util/libluapplib_a-utilmem.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utilmem.obj `if test -f 'luatexdir/luapplib/src/util/utilmem.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilmem.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilmem.c'; fi` - -luatexdir/luapplib/src/util/libluapplib_a-utilmemheap.o: luatexdir/luapplib/src/util/utilmemheap.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utilmemheap.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmemheap.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utilmemheap.o `test -f 'luatexdir/luapplib/src/util/utilmemheap.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilmemheap.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmemheap.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmemheap.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilmemheap.c' object='luatexdir/luapplib/src/util/libluapplib_a-utilmemheap.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utilmemheap.o `test -f 'luatexdir/luapplib/src/util/utilmemheap.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilmemheap.c - -luatexdir/luapplib/src/util/libluapplib_a-utilmemheap.obj: luatexdir/luapplib/src/util/utilmemheap.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utilmemheap.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmemheap.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utilmemheap.obj `if test -f 'luatexdir/luapplib/src/util/utilmemheap.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilmemheap.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilmemheap.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmemheap.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmemheap.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilmemheap.c' object='luatexdir/luapplib/src/util/libluapplib_a-utilmemheap.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utilmemheap.obj `if test -f 'luatexdir/luapplib/src/util/utilmemheap.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilmemheap.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilmemheap.c'; fi` - -luatexdir/luapplib/src/util/libluapplib_a-utilmemheapiof.o: luatexdir/luapplib/src/util/utilmemheapiof.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utilmemheapiof.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmemheapiof.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utilmemheapiof.o `test -f 'luatexdir/luapplib/src/util/utilmemheapiof.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilmemheapiof.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmemheapiof.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmemheapiof.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilmemheapiof.c' object='luatexdir/luapplib/src/util/libluapplib_a-utilmemheapiof.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utilmemheapiof.o `test -f 'luatexdir/luapplib/src/util/utilmemheapiof.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilmemheapiof.c - -luatexdir/luapplib/src/util/libluapplib_a-utilmemheapiof.obj: luatexdir/luapplib/src/util/utilmemheapiof.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utilmemheapiof.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmemheapiof.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utilmemheapiof.obj `if test -f 'luatexdir/luapplib/src/util/utilmemheapiof.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilmemheapiof.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilmemheapiof.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmemheapiof.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmemheapiof.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilmemheapiof.c' object='luatexdir/luapplib/src/util/libluapplib_a-utilmemheapiof.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utilmemheapiof.obj `if test -f 'luatexdir/luapplib/src/util/utilmemheapiof.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilmemheapiof.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilmemheapiof.c'; fi` - -luatexdir/luapplib/src/util/libluapplib_a-utilmeminfo.o: luatexdir/luapplib/src/util/utilmeminfo.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utilmeminfo.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmeminfo.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utilmeminfo.o `test -f 'luatexdir/luapplib/src/util/utilmeminfo.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilmeminfo.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmeminfo.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmeminfo.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilmeminfo.c' object='luatexdir/luapplib/src/util/libluapplib_a-utilmeminfo.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utilmeminfo.o `test -f 'luatexdir/luapplib/src/util/utilmeminfo.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilmeminfo.c - -luatexdir/luapplib/src/util/libluapplib_a-utilmeminfo.obj: luatexdir/luapplib/src/util/utilmeminfo.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utilmeminfo.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmeminfo.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utilmeminfo.obj `if test -f 'luatexdir/luapplib/src/util/utilmeminfo.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilmeminfo.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilmeminfo.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmeminfo.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmeminfo.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilmeminfo.c' object='luatexdir/luapplib/src/util/libluapplib_a-utilmeminfo.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utilmeminfo.obj `if test -f 'luatexdir/luapplib/src/util/utilmeminfo.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilmeminfo.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilmeminfo.c'; fi` - -luatexdir/luapplib/src/util/libluapplib_a-utilnumber.o: luatexdir/luapplib/src/util/utilnumber.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utilnumber.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilnumber.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utilnumber.o `test -f 'luatexdir/luapplib/src/util/utilnumber.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilnumber.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilnumber.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilnumber.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilnumber.c' object='luatexdir/luapplib/src/util/libluapplib_a-utilnumber.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utilnumber.o `test -f 'luatexdir/luapplib/src/util/utilnumber.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilnumber.c - -luatexdir/luapplib/src/util/libluapplib_a-utilnumber.obj: luatexdir/luapplib/src/util/utilnumber.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utilnumber.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilnumber.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utilnumber.obj `if test -f 'luatexdir/luapplib/src/util/utilnumber.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilnumber.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilnumber.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilnumber.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilnumber.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilnumber.c' object='luatexdir/luapplib/src/util/libluapplib_a-utilnumber.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utilnumber.obj `if test -f 'luatexdir/luapplib/src/util/utilnumber.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilnumber.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilnumber.c'; fi` - -luatexdir/luapplib/src/util/libluapplib_a-utilsha.o: luatexdir/luapplib/src/util/utilsha.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utilsha.o -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilsha.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utilsha.o `test -f 'luatexdir/luapplib/src/util/utilsha.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilsha.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilsha.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilsha.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilsha.c' object='luatexdir/luapplib/src/util/libluapplib_a-utilsha.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utilsha.o `test -f 'luatexdir/luapplib/src/util/utilsha.c' || echo '$(srcdir)/'`luatexdir/luapplib/src/util/utilsha.c - -luatexdir/luapplib/src/util/libluapplib_a-utilsha.obj: luatexdir/luapplib/src/util/utilsha.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -MT luatexdir/luapplib/src/util/libluapplib_a-utilsha.obj -MD -MP -MF luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilsha.Tpo -c -o luatexdir/luapplib/src/util/libluapplib_a-utilsha.obj `if test -f 'luatexdir/luapplib/src/util/utilsha.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilsha.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilsha.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilsha.Tpo luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilsha.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='luatexdir/luapplib/src/util/utilsha.c' object='luatexdir/luapplib/src/util/libluapplib_a-utilsha.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluapplib_a_CPPFLAGS) $(CPPFLAGS) $(libluapplib_a_CFLAGS) $(CFLAGS) -c -o luatexdir/luapplib/src/util/libluapplib_a-utilsha.obj `if test -f 'luatexdir/luapplib/src/util/utilsha.c'; then $(CYGPATH_W) 'luatexdir/luapplib/src/util/utilsha.c'; else $(CYGPATH_W) '$(srcdir)/luatexdir/luapplib/src/util/utilsha.c'; fi` - luatexdir/luasocket/src/libluasocket_a-auxiliar.o: luatexdir/luasocket/src/auxiliar.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluasocket_a_CPPFLAGS) $(CPPFLAGS) $(libluasocket_a_CFLAGS) $(CFLAGS) -MT luatexdir/luasocket/src/libluasocket_a-auxiliar.o -MD -MP -MF luatexdir/luasocket/src/$(DEPDIR)/libluasocket_a-auxiliar.Tpo -c -o luatexdir/luasocket/src/libluasocket_a-auxiliar.o `test -f 'luatexdir/luasocket/src/auxiliar.c' || echo '$(srcdir)/'`luatexdir/luasocket/src/auxiliar.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) luatexdir/luasocket/src/$(DEPDIR)/libluasocket_a-auxiliar.Tpo luatexdir/luasocket/src/$(DEPDIR)/libluasocket_a-auxiliar.Po @@ -17318,10 +16248,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -17364,8 +16290,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -17512,10 +16436,6 @@ distclean-generic: -rm -f luatexdir/luamd5/$(am__dirstamp) -rm -f luatexdir/luapeg/$(DEPDIR)/$(am__dirstamp) -rm -f luatexdir/luapeg/$(am__dirstamp) - -rm -f luatexdir/luapplib/src/$(DEPDIR)/$(am__dirstamp) - -rm -f luatexdir/luapplib/src/$(am__dirstamp) - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/$(am__dirstamp) - -rm -f luatexdir/luapplib/src/util/$(am__dirstamp) -rm -f luatexdir/luasocket/src/$(DEPDIR)/$(am__dirstamp) -rm -f luatexdir/luasocket/src/$(am__dirstamp) -rm -f luatexdir/luazip/src/$(DEPDIR)/$(am__dirstamp) @@ -17915,54 +16835,6 @@ distclean: distclean-recursive -rm -f luatexdir/luamd5/$(DEPDIR)/libluamisc_a-md5lib.Po -rm -f luatexdir/luapeg/$(DEPDIR)/libluajitmisc_a-lpeg.Po -rm -f luatexdir/luapeg/$(DEPDIR)/libluamisc_a-lpeg.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pparray.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppcrypt.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppdict.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppheap.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppload.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppstream.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest1.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest2.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest3.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppxref.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pparray.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppcrypt.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppdict.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppheap.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppload.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppstream.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest1.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest2.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest3.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppxref.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilbasexx.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilcrypt.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilflate.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilfpred.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utiliof.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utillog.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utillzw.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmd5.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmem.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmemheap.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmemheapiof.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmeminfo.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilnumber.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilsha.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilbasexx.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilcrypt.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilflate.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilfpred.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utiliof.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utillog.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utillzw.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmd5.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmem.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmemheap.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmemheapiof.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmeminfo.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilnumber.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilsha.Po -rm -f luatexdir/luasocket/src/$(DEPDIR)/libluajitsocket_a-auxiliar.Po -rm -f luatexdir/luasocket/src/$(DEPDIR)/libluajitsocket_a-buffer.Po -rm -f luatexdir/luasocket/src/$(DEPDIR)/libluajitsocket_a-compat.Po @@ -18615,54 +17487,6 @@ maintainer-clean: maintainer-clean-recursive -rm -f luatexdir/luamd5/$(DEPDIR)/libluamisc_a-md5lib.Po -rm -f luatexdir/luapeg/$(DEPDIR)/libluajitmisc_a-lpeg.Po -rm -f luatexdir/luapeg/$(DEPDIR)/libluamisc_a-lpeg.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pparray.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppcrypt.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppdict.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppheap.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppload.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppstream.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest1.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest2.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-pptest3.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluajitpplib_a-ppxref.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pparray.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppcrypt.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppdict.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppheap.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppload.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppstream.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest1.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest2.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-pptest3.Po - -rm -f luatexdir/luapplib/src/$(DEPDIR)/libluapplib_a-ppxref.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilbasexx.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilcrypt.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilflate.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilfpred.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utiliof.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utillog.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utillzw.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmd5.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmem.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmemheap.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmemheapiof.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilmeminfo.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilnumber.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluajitpplib_a-utilsha.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilbasexx.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilcrypt.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilflate.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilfpred.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utiliof.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utillog.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utillzw.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmd5.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmem.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmemheap.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmemheapiof.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilmeminfo.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilnumber.Po - -rm -f luatexdir/luapplib/src/util/$(DEPDIR)/libluapplib_a-utilsha.Po -rm -f luatexdir/luasocket/src/$(DEPDIR)/libluajitsocket_a-auxiliar.Po -rm -f luatexdir/luasocket/src/$(DEPDIR)/libluajitsocket_a-buffer.Po -rm -f luatexdir/luasocket/src/$(DEPDIR)/libluajitsocket_a-compat.Po @@ -18947,11 +17771,11 @@ uninstall-man: uninstall-man1 uninstall-man5 clean-libLIBRARIES clean-libLTLIBRARIES clean-libtool \ clean-local clean-noinstPROGRAMS cscope cscopelist-am ctags \ ctags-am dist dist-all dist-bzip2 dist-gzip dist-hook \ - dist-lzip dist-shar dist-tarZ dist-xz dist-zip dist-zstd \ - distcheck distclean distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-tags distcleancheck \ - distdir distuninstallcheck dvi dvi-am html html-am info \ - info-am install install-am install-binPROGRAMS install-data \ + dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \ + distclean distclean-compile distclean-generic distclean-hdr \ + distclean-libtool distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-exec-hook install-html install-html-am \ install-info install-info-am install-libLIBRARIES \ @@ -19001,6 +17825,7 @@ $(proglib): ${srcdir}/lib/*.c @GMP_RULE@ @MPFR_RULE@ @XPDF_RULE@ +@PPLIB_RULE@ @POPPLER_RULE@ @ZZIPLIB_RULE@ @TECKIT_RULE@ @@ -19853,10 +18678,6 @@ $(libluaffi_a_OBJECTS): $(LUA_DEPEND) #liblua53ffi_sources = $(libluaffi_sources) #EXTRA_DIST -$(libluapplib_a_OBJECTS): $(LUA_DEPEND) -#$(liblua53pplib_a_OBJECTS): $(LUA_DEPEND) -$(libluajitpplib_a_OBJECTS): $(LUAJIT_DEPEND) - $(luatex_OBJECTS): libluatex.a $(luajittex_OBJECTS): libluajittex.a diff --git a/Build/source/texk/web2c/ac/web2c.ac b/Build/source/texk/web2c/ac/web2c.ac index 5d5bfadb4e2..890ff13e41a 100644 --- a/Build/source/texk/web2c/ac/web2c.ac +++ b/Build/source/texk/web2c/ac/web2c.ac @@ -37,10 +37,10 @@ m4_define([kpse_tex_progs], [dnl [[euptex], [yes], [yes], [e-upTeX], [ptexenc zlib]], [[aleph], [yes], [], [Aleph], []], [[pdftex], [yes], [yes], [pdfTeX], [xpdf libpng zlib]], -[[luatex], [yes], [], [LuaTeX], [libpng zziplib lua53]], -[[luajittex], [yes], [], [LuaJITTeX], [libpng zziplib luajit]], -[[luahbtex], [yes], [], [LuaHBTeX], [libpng zziplib lua53 harfbuzz]], -[[luajithbtex], [yes], [], [LuaHBJITTeX], [libpng zziplib luajit harfbuzz]], +[[luatex], [yes], [], [LuaTeX], [pplib libpng zziplib lua53]], +[[luajittex], [yes], [], [LuaJITTeX], [pplib libpng zziplib luajit]], +[[luahbtex], [yes], [], [LuaHBTeX], [pplib libpng zziplib lua53 harfbuzz]], +[[luajithbtex], [yes], [], [LuaHBJITTeX], [pplib libpng zziplib luajit harfbuzz]], [[mp], [yes], [], [MetaPost], [mpfr cairo libpng]], [[pmp], [yes], [], [pMetaPost], [mpfr cairo libpng ptexenc]], [[upmp], [yes], [], [upMetaPost], [mpfr cairo libpng ptexenc]], diff --git a/Build/source/texk/web2c/aclocal.m4 b/Build/source/texk/web2c/aclocal.m4 index 5cc259683ee..a2260777e87 100644 --- a/Build/source/texk/web2c/aclocal.m4 +++ b/Build/source/texk/web2c/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_COND_IF -*- Autoconf -*- -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -147,7 +147,7 @@ fi[]dnl # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -178,7 +178,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -369,7 +369,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -408,9 +408,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -437,7 +435,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -634,7 +632,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -655,7 +653,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -677,7 +675,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -712,7 +710,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -755,7 +753,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -794,7 +792,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -823,7 +821,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -870,7 +868,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -889,7 +887,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -970,7 +968,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1030,7 +1028,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1058,7 +1056,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1077,7 +1075,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1233,6 +1231,7 @@ m4_include([../../m4/kpse-macos-framework.m4]) m4_include([../../m4/kpse-mpfr-flags.m4]) m4_include([../../m4/kpse-pixman-flags.m4]) m4_include([../../m4/kpse-poppler-flags.m4]) +m4_include([../../m4/kpse-pplib-flags.m4]) m4_include([../../m4/kpse-ptexenc-flags.m4]) m4_include([../../m4/kpse-socket-libs.m4]) m4_include([../../m4/kpse-teckit-flags.m4]) diff --git a/Build/source/texk/web2c/configure b/Build/source/texk/web2c/configure index 6d5db59e87b..2669a75b0c9 100755 --- a/Build/source/texk/web2c/configure +++ b/Build/source/texk/web2c/configure @@ -721,6 +721,10 @@ ZLIB_RULE ZLIB_DEPEND ZLIB_LIBS ZLIB_INCLUDES +PPLIB_RULE +PPLIB_DEPEND +PPLIB_LIBS +PPLIB_INCLUDES PTEXENC_RULE PTEXENC_DEPEND PTEXENC_LIBS @@ -18783,6 +18787,7 @@ case $enable_luatex in #( esac test "x$enable_web2c:$enable_luatex" = xyes:yes && { + need_pplib=yes need_libpng=yes need_zziplib=yes need_lua53=yes @@ -18799,6 +18804,7 @@ case $enable_luajittex in #( esac test "x$enable_web2c:$enable_luajittex" = xyes:yes && { + need_pplib=yes need_libpng=yes need_zziplib=yes need_luajit=yes @@ -18815,6 +18821,7 @@ case $enable_luahbtex in #( esac test "x$enable_web2c:$enable_luahbtex" = xyes:yes && { + need_pplib=yes need_libpng=yes need_zziplib=yes need_lua53=yes @@ -18832,6 +18839,7 @@ case $enable_luajithbtex in #( esac test "x$enable_web2c:$enable_luajithbtex" = xyes:yes && { + need_pplib=yes need_libpng=yes need_zziplib=yes need_luajit=yes @@ -24943,6 +24951,18 @@ $(PTEXENC_DEPEND): ${top_srcdir}/../ptexenc/*.c ${top_srcdir}/../ptexenc/ptexenc cd ${top_builddir}/../ptexenc && $(MAKE) $(AM_MAKEFLAGS) rebuild' fi +##tldbg _KPSE_LIB_FLAGS: Setup pplib (-lpplib) flags. +echo 'tldbg:_KPSE_LIB_FLAGS called: libdir=pplib, libname=pplib, options=tree, tlincl=-IBLD/libs/pplib/include, tllib=BLD/libs/pplib/libpplib.a, tlextra=, rebuildsrcdeps=, rebuildblddeps=${top_builddir}/../../libs/pplib/include/pplib.h.' >&5 +##tldbg _KPSE_LIB_FLAGS_TL: pplib (pplib) tree. + PPLIB_INCLUDES="-I$kpse_BLD/libs/pplib/include" + PPLIB_LIBS="$kpse_BLD/libs/pplib/libpplib.a" + PPLIB_DEPEND='${top_builddir}/../../libs/pplib/libpplib.a' + PPLIB_RULE='# Rebuild libpplib +$(PPLIB_DEPEND): ${top_builddir}/../../libs/pplib/include/pplib.h + cd ${top_builddir}/../../libs/pplib && $(MAKE) $(AM_MAKEFLAGS) rebuild +${top_builddir}/../../libs/pplib/include/pplib.h: + cd ${top_builddir}/../../libs/pplib && $(MAKE) $(AM_MAKEFLAGS) rebuild' + ##tldbg _KPSE_LIB_FLAGS: Setup zlib (-lz) flags. echo 'tldbg:_KPSE_LIB_FLAGS called: libdir=zlib, libname=z, options=, tlincl=-IBLD/libs/zlib/include, tllib=BLD/libs/zlib/libz.a, tlextra=, rebuildsrcdeps=, rebuildblddeps=${top_builddir}/../../libs/zlib/include/zconf.h.' >&5 ##tldbg _KPSE_LIB_FLAGS_TL: zlib (z) . @@ -28447,9 +28467,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/web2c/configure.ac b/Build/source/texk/web2c/configure.ac index d7e5be5ac88..9ddc894afa0 100644 --- a/Build/source/texk/web2c/configure.ac +++ b/Build/source/texk/web2c/configure.ac @@ -249,6 +249,7 @@ AC_TYPE_SIGNAL KPSE_KPATHSEA_FLAGS KPSE_PTEXENC_FLAGS +KPSE_PPLIB_FLAGS KPSE_ZLIB_FLAGS KPSE_LUA53_FLAGS KPSE_LUA52_FLAGS diff --git a/Build/source/texk/web2c/doc/Makefile.in b/Build/source/texk/web2c/doc/Makefile.in index 706e433f158..aebc11baa6c 100644 --- a/Build/source/texk/web2c/doc/Makefile.in +++ b/Build/source/texk/web2c/doc/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -114,6 +114,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/web2c-disable.m4 \ $(top_srcdir)/../../m4/kpse-mpfr-flags.m4 \ $(top_srcdir)/../../m4/kpse-pixman-flags.m4 \ $(top_srcdir)/../../m4/kpse-poppler-flags.m4 \ + $(top_srcdir)/../../m4/kpse-pplib-flags.m4 \ $(top_srcdir)/../../m4/kpse-ptexenc-flags.m4 \ $(top_srcdir)/../../m4/kpse-socket-libs.m4 \ $(top_srcdir)/../../m4/kpse-teckit-flags.m4 \ @@ -362,6 +363,9 @@ PKG_CONFIG = @PKG_CONFIG@ POPPLER_DEPEND = @POPPLER_DEPEND@ POPPLER_INCLUDES = @POPPLER_INCLUDES@ POPPLER_LIBS = @POPPLER_LIBS@ +PPLIB_DEPEND = @PPLIB_DEPEND@ +PPLIB_INCLUDES = @PPLIB_INCLUDES@ +PPLIB_LIBS = @PPLIB_LIBS@ PTEXENC_DEPEND = @PTEXENC_DEPEND@ PTEXENC_INCLUDES = @PTEXENC_INCLUDES@ PTEXENC_LIBS = @PTEXENC_LIBS@ diff --git a/Build/source/texk/web2c/lib/Makefile.in b/Build/source/texk/web2c/lib/Makefile.in index 4b18b90639c..ff3b4208b2d 100644 --- a/Build/source/texk/web2c/lib/Makefile.in +++ b/Build/source/texk/web2c/lib/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -116,6 +116,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/web2c-disable.m4 \ $(top_srcdir)/../../m4/kpse-mpfr-flags.m4 \ $(top_srcdir)/../../m4/kpse-pixman-flags.m4 \ $(top_srcdir)/../../m4/kpse-poppler-flags.m4 \ + $(top_srcdir)/../../m4/kpse-pplib-flags.m4 \ $(top_srcdir)/../../m4/kpse-ptexenc-flags.m4 \ $(top_srcdir)/../../m4/kpse-socket-libs.m4 \ $(top_srcdir)/../../m4/kpse-teckit-flags.m4 \ @@ -368,6 +369,9 @@ PKG_CONFIG = @PKG_CONFIG@ POPPLER_DEPEND = @POPPLER_DEPEND@ POPPLER_INCLUDES = @POPPLER_INCLUDES@ POPPLER_LIBS = @POPPLER_LIBS@ +PPLIB_DEPEND = @PPLIB_DEPEND@ +PPLIB_INCLUDES = @PPLIB_INCLUDES@ +PPLIB_LIBS = @PPLIB_LIBS@ PTEXENC_DEPEND = @PTEXENC_DEPEND@ PTEXENC_INCLUDES = @PTEXENC_INCLUDES@ PTEXENC_LIBS = @PTEXENC_LIBS@ diff --git a/Build/source/texk/web2c/luatexdir/ChangeLog b/Build/source/texk/web2c/luatexdir/ChangeLog index 8a1f767026f..92bcb391a3d 100644 --- a/Build/source/texk/web2c/luatexdir/ChangeLog +++ b/Build/source/texk/web2c/luatexdir/ChangeLog @@ -1,3 +1,8 @@ +2020-04-07 Luigi Scarso <luigi.scarso@gmail.com> + * Version 1.13.0. + getstring extra argument to pdfe.getstring (triggers unencoded or flag + return values) (HH). + 2020-03-09 Luigi Scarso <luigi.scarso@gmail.com> * texluahb / texluahbjit for luahbtex / luajithbtex diff --git a/Build/source/texk/web2c/luatexdir/am/libluatex.am b/Build/source/texk/web2c/luatexdir/am/libluatex.am index f3ba0d4f0ec..9558beef6b2 100644 --- a/Build/source/texk/web2c/luatexdir/am/libluatex.am +++ b/Build/source/texk/web2c/luatexdir/am/libluatex.am @@ -20,11 +20,10 @@ EXTRA_LIBRARIES += libluatex.a libluajittex.a libluatexspecific.a libluajittexs libluatex_a_DEPENDENCIES = libff.a libluamisc.a libluajittex_a_DEPENDENCIES = libff.a libluajitmisc.a -libluatex_a_preflags = $(AM_CPPFLAGS) $(ZLIB_INCLUDES) $(LIBPNG_INCLUDES) $(HARFBUZZ_INCLUDES) +libluatex_a_preflags = $(AM_CPPFLAGS) $(ZLIB_INCLUDES) $(LIBPNG_INCLUDES) $(HARFBUZZ_INCLUDES) $(PPLIB_INCLUDES) libluatex_a_preflags += -I$(srcdir)/libmd5 libluatex_a_preflags += -DpdfTeX -I$(srcdir)/luatexdir libluatex_a_preflags += -I$(srcdir)/luatexdir/unilib -libluatex_a_preflags += -I$(srcdir)/luatexdir/luapplib/src/util libluatex_a_preflags += -I$(srcdir)/luatexdir/luafontloader/fontforge/inc libluatex_a_preflags += -DLUA_FF_LIB=1 -I$(srcdir)/luatexdir/luafontloader/fontforge/fontforge libluatex_a_preflags += -DSYNCTEX_ENGINE_H='<synctex-luatex.h>' -I$(srcdir)/synctexdir diff --git a/Build/source/texk/web2c/luatexdir/am/luamisc.am b/Build/source/texk/web2c/luatexdir/am/luamisc.am index 9b9915e11b2..8dde34c76a1 100644 --- a/Build/source/texk/web2c/luatexdir/am/luamisc.am +++ b/Build/source/texk/web2c/luatexdir/am/luamisc.am @@ -9,17 +9,17 @@ #EXTRA_LIBRARIES += libluamisc.a liblua53misc.a libluajitmisc.a EXTRA_LIBRARIES += libluamisc.a libluajitmisc.a -libluamisc_a_DEPENDENCIES = $(ZZIPLIB_DEPEND) libluasocket.a libluaffi.a libluapplib.a -#liblua53misc_a_DEPENDENCIES = $(ZZIPLIB_DEPEND) liblua53socket.a liblua53ffi.a liblua53pplib.a -libluajitmisc_a_DEPENDENCIES = $(ZZIPLIB_DEPEND) libluajitsocket.a libluajitpplib.a +libluamisc_a_DEPENDENCIES = $(ZZIPLIB_DEPEND) libluasocket.a libluaffi.a +#liblua53misc_a_DEPENDENCIES = $(ZZIPLIB_DEPEND) liblua53socket.a liblua53ffi.a +libluajitmisc_a_DEPENDENCIES = $(ZZIPLIB_DEPEND) libluajitsocket.a $(libluamisc_a_OBJECTS): $(libluamisc_a_DEPENDENCIES) #$(liblua53misc_a_OBJECTS): $(liblua53misc_a_DEPENDENCIES) $(libluajitmisc_a_OBJECTS): $(libluajitmisc_a_DEPENDENCIES) -libluamisc_a_CPPFLAGS = $(ZLIB_INCLUDES) $(ZZIPLIB_INCLUDES) $(LUA_INCLUDES) -#liblua53misc_a_CPPFLAGS = $(ZLIB_INCLUDES) $(ZZIPLIB_INCLUDES) $(LUA_LUA53_INCLUDES) -libluajitmisc_a_CPPFLAGS = $(ZLIB_INCLUDES) $(ZZIPLIB_INCLUDES) $(LUAJIT_INCLUDES) +libluamisc_a_CPPFLAGS = $(ZLIB_INCLUDES) $(ZZIPLIB_INCLUDES) $(PPLIB_INCLUDES) $(LUA_INCLUDES) +#liblua53misc_a_CPPFLAGS = $(ZLIB_INCLUDES) $(ZZIPLIB_INCLUDES) $(PPLIB_INCLUDES) $(LUA_LUA53_INCLUDES) +libluajitmisc_a_CPPFLAGS = $(ZLIB_INCLUDES) $(ZZIPLIB_INCLUDES) $(PPLIB_INCLUDES) $(LUAJIT_INCLUDES) libluajitmisc_a_CPPFLAGS += -DLuajitTeX -I$(srcdir)/luatexdir libluamisc_a_CFLAGS = # $(WARNING_CFLAGS) diff --git a/Build/source/texk/web2c/luatexdir/am/luatex.am b/Build/source/texk/web2c/luatexdir/am/luatex.am index 31210a4ed74..bf2065978c1 100644 --- a/Build/source/texk/web2c/luatexdir/am/luatex.am +++ b/Build/source/texk/web2c/luatexdir/am/luatex.am @@ -64,12 +64,12 @@ nodist_EXTRA_luahbtex_SOURCES = dummy.cxx nodist_EXTRA_luajithbtex_SOURCES = dummy.cxx -luatex_preflags = $(AM_CPPFLAGS) $(ZLIB_INCLUDES) $(LIBPNG_INCLUDES) +luatex_preflags = $(AM_CPPFLAGS) $(ZLIB_INCLUDES) $(LIBPNG_INCLUDES) $(PPLIB_INCLUDES) luatex_postflags = -I$(srcdir)/libmd5 -DpdfTeX -I$(srcdir)/luatexdir -I$(srcdir)/mplibdir luatex_postflags += -Dextra_version_info=`date +-%Y%m%d%H` luatex_postflags += -I$(srcdir)/synctexdir -DSYNCTEX_ENGINE_H='<synctex-luatex.h>' -luahbtex_preflags = $(AM_CPPFLAGS) $(ZLIB_INCLUDES) $(LIBPNG_INCLUDES) $(HARFBUZZ_INCLUDES) +luahbtex_preflags = $(AM_CPPFLAGS) $(ZLIB_INCLUDES) $(LIBPNG_INCLUDES) $(HARFBUZZ_INCLUDES) $(PPLIB_INCLUDES) luahbtex_postflags = -I$(srcdir)/libmd5 -DpdfTeX -I$(srcdir)/luatexdir -I$(srcdir)/mplibdir luahbtex_postflags += -Dextra_version_info=`date +-%Y%m%d%H` luahbtex_postflags += -DLUATEX_HARFBUZZ_ENABLED @@ -95,19 +95,19 @@ luahbtex_LDFLAGS = -export-dynamic luajithbtex_LDFLAGS = -export-dynamic $(LUAJIT_LDEXTRA) luatex_postldadd = libmplibcore.a -luatex_postldadd += $(ZZIPLIB_LIBS) $(LIBPNG_LIBS) $(ZLIB_LIBS) +luatex_postldadd += $(ZZIPLIB_LIBS) $(LIBPNG_LIBS) $(ZLIB_LIBS) $(PPLIB_LIBS) luatex_postldadd += $(LDADD) libmputil.a libunilib.a libmd5.a $(lua_socketlibs) luahbtex_postldadd = libmplibcore.a -luahbtex_postldadd += $(ZZIPLIB_LIBS) $(LIBPNG_LIBS) $(ZLIB_LIBS) $(HARFBUZZ_LIBS) $(GRAPHITE2_LIBS) +luahbtex_postldadd += $(ZZIPLIB_LIBS) $(LIBPNG_LIBS) $(ZLIB_LIBS) $(HARFBUZZ_LIBS) $(GRAPHITE2_LIBS) $(PPLIB_LIBS) luahbtex_postldadd += $(LDADD) libmputil.a libunilib.a libmd5.a $(lua_socketlibs) -luatex_LDADD = libluatex.a libluatexspecific.a libluatex.a libff.a libluamisc.a libluasocket.a libluaffi.a libluapplib.a $(LUA_LIBS) $(luatex_postldadd) -luajittex_LDADD = libluajittex.a libluajittexspecific.a libluajittex.a libff.a libluajitmisc.a libluajitsocket.a libluajitpplib.a $(LUAJIT_LIBS) $(luatex_postldadd) +luatex_LDADD = libluatex.a libluatexspecific.a libluatex.a libff.a libluamisc.a libluasocket.a libluaffi.a $(LUA_LIBS) $(luatex_postldadd) +luajittex_LDADD = libluajittex.a libluajittexspecific.a libluajittex.a libff.a libluajitmisc.a libluajitsocket.a $(LUAJIT_LIBS) $(luatex_postldadd) -luahbtex_LDADD = libluatex.a libluahbtexspecific.a libluatex.a libff.a libluamisc.a libluasocket.a libluaffi.a libluapplib.a libluaharfbuzz.a $(LUA_LIBS) $(luahbtex_postldadd) -luajithbtex_LDADD = libluajittex.a libluajithbtexspecific.a libluajittex.a libff.a libluajitmisc.a libluajitsocket.a libluajitpplib.a libluajitharfbuzz.a $(LUAJIT_LIBS) $(luahbtex_postldadd) +luahbtex_LDADD = libluatex.a libluahbtexspecific.a libluatex.a libff.a libluamisc.a libluasocket.a libluaffi.a libluaharfbuzz.a $(LUA_LIBS) $(luahbtex_postldadd) +luajithbtex_LDADD = libluajittex.a libluajithbtexspecific.a libluajittex.a libff.a libluajitmisc.a libluajitsocket.a libluajitharfbuzz.a $(LUAJIT_LIBS) $(luahbtex_postldadd) #not here ? diff --git a/Build/source/texk/web2c/luatexdir/image/epdf.h b/Build/source/texk/web2c/luatexdir/image/epdf.h index e002b0b5c7c..737682d791a 100644 --- a/Build/source/texk/web2c/luatexdir/image/epdf.h +++ b/Build/source/texk/web2c/luatexdir/image/epdf.h @@ -70,7 +70,7 @@ typedef enum { FE_FAIL, FE_RETURN_NULL } file_error_mode; # include "lua.h" # include "lauxlib.h" -# include "luapplib/src/pplib.h" +# include "pplib.h" /* pdfgen.w */ diff --git a/Build/source/texk/web2c/luatexdir/lua/lnodelib.c b/Build/source/texk/web2c/luatexdir/lua/lnodelib.c index d5ab00a5541..7e76746037b 100644 --- a/Build/source/texk/web2c/luatexdir/lua/lnodelib.c +++ b/Build/source/texk/web2c/luatexdir/lua/lnodelib.c @@ -8403,10 +8403,11 @@ static int lua_nodelib_properties_get_table(lua_State * L) static int lua_nodelib_get_property_t(lua_State * L) { /* <table> <node> */ halfword n = *((halfword *) lua_touserdata(L, 2)); - if (n == null) { - lua_pushnil(L); + if (n != null) { + lua_get_metatablelua(node_properties); + lua_rawgeti(L, -1, n); } else { - lua_rawgeti(L,1,n); + lua_pushnil(L); } return 1; } @@ -8416,8 +8417,9 @@ static int lua_nodelib_set_property_t(lua_State * L) /* <table> <node> <value> */ halfword n = *((halfword *) lua_touserdata(L, 2)); if (n != null) { - lua_settop(L,3); - lua_rawseti(L,1,n); + lua_get_metatablelua(node_properties); + lua_insert(L, -2); + lua_rawseti(L, -2, n); } return 0; } diff --git a/Build/source/texk/web2c/luatexdir/lua/lpdfelib.c b/Build/source/texk/web2c/luatexdir/lua/lpdfelib.c index 5b1093a28a5..030e3db7e6c 100644 --- a/Build/source/texk/web2c/luatexdir/lua/lpdfelib.c +++ b/Build/source/texk/web2c/luatexdir/lua/lpdfelib.c @@ -45,7 +45,7 @@ # undef output # endif -# include "luapplib/src/pplib.h" +# include "pplib.h" # include "image/epdf.h" @@ -1237,9 +1237,10 @@ static int pdfelib_getfromreference(lua_State * L) ppref *r = (((pdfe_reference *) p)->xref != NULL) ? ppxref_find(((pdfe_reference *) p)->xref, (ppuint) (((pdfe_reference *) p)->onum)) : NULL; \ ppobj *o = (r != NULL) ? ppref_obj(r) : NULL; \ -# define pdfelib_get_value_direct(get_d,get_a) do { \ +# define pdfelib_get_value_direct(get_d,get_a) do { \ int t = lua_type(L,2); \ void *p = lua_touserdata(L, 1); \ + lua_settop(L,2); \ pdfelib_get_value_check_1; \ if (t == LUA_TSTRING) { \ const char *key = lua_tostring(L,-2); \ @@ -1286,6 +1287,7 @@ static int pdfelib_getfromreference(lua_State * L) # define pdfelib_get_value_indirect(get_d,get_a) do { \ int t = lua_type(L,2); \ void *p = lua_touserdata(L, 1); \ + lua_settop(L,2); \ pdfelib_get_value_check_1; \ if (t == LUA_TSTRING) { \ const char *key = lua_tostring(L,-2); \ @@ -1320,6 +1322,8 @@ static int pdfelib_getfromreference(lua_State * L) } \ } while (0) +/* pre 1.13 version: + static int pdfelib_getstring(lua_State * L) { if (lua_gettop(L) > 1) { @@ -1327,7 +1331,38 @@ static int pdfelib_getstring(lua_State * L) pdfelib_get_value_direct(ppdict_rget_string,pparray_rget_string); if (value != NULL) { lua_pushlstring(L, ppstring_data(value), ppstring_size(value)); - return 1; + return 2; + } + } + return 0; +} + +*/ + +static int pdfelib_getstring(lua_State *L) +{ + if (lua_gettop(L) > 1) { + ppstring *value = NULL; + int how = 0; + if (lua_type(L, 3) == LUA_TBOOLEAN) { + if (lua_toboolean(L, 3)) { + how = 1; + } else { + how = 2; + } + } + pdfelib_get_value_direct(ppdict_rget_string,pparray_rget_string); + if (value != NULL) { + if (how == 1) { + value = ppstring_decoded(value); + } + lua_pushlstring(L,ppstring_data(value),ppstring_size(value)); + if (how == 2) { + lua_pushboolean(L,ppstring_hex(value)); + return 2; + } else { + return 1; + } } } return 0; diff --git a/Build/source/texk/web2c/luatexdir/lua/lpdfscannerlib.c b/Build/source/texk/web2c/luatexdir/lua/lpdfscannerlib.c index 4fc62a2ccf9..90e7da58bf0 100644 --- a/Build/source/texk/web2c/luatexdir/lua/lpdfscannerlib.c +++ b/Build/source/texk/web2c/luatexdir/lua/lpdfscannerlib.c @@ -78,7 +78,7 @@ #include <lauxlib.h> #include <lualib.h> -#include "luapplib/src/pplib.h" +#include "pplib.h" #include <lua/luatex-api.h> diff --git a/Build/source/texk/web2c/luatexdir/luamd5/md5lib.c b/Build/source/texk/web2c/luatexdir/luamd5/md5lib.c index d111a9142c6..db112659ac3 100644 --- a/Build/source/texk/web2c/luatexdir/luamd5/md5lib.c +++ b/Build/source/texk/web2c/luatexdir/luamd5/md5lib.c @@ -194,7 +194,7 @@ int luaopen_md5(lua_State *L) { /* We could use a different file but this is as easy. */ -#include "../luapplib/src/util/utilsha.h" +#include "utilsha.h" static int sha2_256(lua_State * L) { diff --git a/Build/source/texk/web2c/luatexdir/luapplib/.gitattributes b/Build/source/texk/web2c/luatexdir/luapplib/.gitattributes deleted file mode 100644 index 8d68adf9ae9..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/.gitattributes +++ /dev/null @@ -1,10 +0,0 @@ -*.c text=auto eol=lf -*.h text=auto eol=lf -Makefile text=auto eol=lf - -*.rst binary -*.png binary -*.jpg binary -*.css binary -*.html binary -*.js binary
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/.gitignore b/Build/source/texk/web2c/luatexdir/luapplib/.gitignore deleted file mode 100644 index 84d76071422..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -src/build/* -src/CMakeFiles/* -src/CMakeCache.txt -src/.vs/* -src/.cproject -src/.project -src/.settings -zlib/*
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/.gitmodules b/Build/source/texk/web2c/luatexdir/luapplib/.gitmodules deleted file mode 100644 index 4792336ecfc..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "zlib"] - path = zlib - url = git://github.com/madler/zlib.git diff --git a/Build/source/texk/web2c/luatexdir/luapplib/.travis.yml b/Build/source/texk/web2c/luatexdir/luapplib/.travis.yml deleted file mode 100644 index 2f1c9a01cbc..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/.travis.yml +++ /dev/null @@ -1,20 +0,0 @@ -language: c - -script: - - mkdir build - - cd build - - cmake .. - - make -j 2 - - make -j 2 test - -matrix: - include: - - os: linux - compiler: clang - - os: linux - compiler: gcc - - os: osx - osx_image: xcode10.2 - allow_failures: - - os: osx - osx_image: xcode8 diff --git a/Build/source/texk/web2c/luatexdir/luapplib/CMakeLists.txt b/Build/source/texk/web2c/luatexdir/luapplib/CMakeLists.txt deleted file mode 100644 index 8c2ea1e89ae..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -add_subdirectory(zlib) -add_subdirectory(src) - -enable_testing() diff --git a/Build/source/texk/web2c/luatexdir/luapplib/README.md b/Build/source/texk/web2c/luatexdir/luapplib/README.md deleted file mode 100644 index c684e9ed7ce..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/README.md +++ /dev/null @@ -1,9 +0,0 @@ -## pplib - pdf disassembling library for LuaTeX - -This is `plib` - PDF disassembling library for LuaTeX (http://luatex.org) - -The library has no LuaTeX dependency, it depends only on `zlib`. -However, `pplib` was tailor-made for LuaTeX and its functionals are -somewhat limited (eg. read-only PDF support). - -Author: Paweł Jackowski p.jackowski@gust.org.pl diff --git a/Build/source/texk/web2c/luatexdir/luapplib/azure-pipelines.yml b/Build/source/texk/web2c/luatexdir/luapplib/azure-pipelines.yml deleted file mode 100644 index 365abe00716..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/azure-pipelines.yml +++ /dev/null @@ -1,36 +0,0 @@ -# C/C++ with GCC -# Build your C/C++ project with GCC using make. -# Add steps that publish test results, save build artifacts, deploy, and more: -# https://docs.microsoft.com/azure/devops/pipelines/apps/c-cpp/gcc - -trigger: -- master - -jobs: - -- job: Build - - strategy: - matrix: - linux: - imageName: "ubuntu-16.04" - mac: - imageName: "macos-10.13" - windows: - imageName: "vs2017-win2016" - maxParallel: 3 - - pool: - vmImage: $(imageName) - - steps: - - checkout: self - submodules: recursive - - task: CMake@1 - displayName: 'CMake ..' - inputs: - cmakeArgs: '..' - - task: CMake@1 - displayName: 'CMake --build . --config Debug' - inputs: - cmakeArgs: '--build . --config Debug' diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/Makefile b/Build/source/texk/web2c/luatexdir/luapplib/doc/Makefile deleted file mode 100644 index 3ca7eeebf89..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -SPHINXPROJ = pplib -SOURCEDIR = . -BUILDDIR = _build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/doctrees/environment.pickle b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/doctrees/environment.pickle Binary files differdeleted file mode 100644 index c4d657a1115..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/doctrees/environment.pickle +++ /dev/null diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/doctrees/ppapi-1.x.doctree b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/doctrees/ppapi-1.x.doctree Binary files differdeleted file mode 100644 index bd22032c659..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/doctrees/ppapi-1.x.doctree +++ /dev/null diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/doctrees/ppapi-2.x.doctree b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/doctrees/ppapi-2.x.doctree Binary files differdeleted file mode 100644 index d8c91b48bed..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/doctrees/ppapi-2.x.doctree +++ /dev/null diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/doctrees/ppapi.doctree b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/doctrees/ppapi.doctree Binary files differdeleted file mode 100644 index 9e432d80125..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/doctrees/ppapi.doctree +++ /dev/null diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/doctrees/ppcode.doctree b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/doctrees/ppcode.doctree Binary files differdeleted file mode 100644 index a33b506208e..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/doctrees/ppcode.doctree +++ /dev/null diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/doctrees/pplib.doctree b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/doctrees/pplib.doctree Binary files differdeleted file mode 100644 index 0d5e84fe5a5..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/doctrees/pplib.doctree +++ /dev/null diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/doctrees/ppnew.doctree b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/doctrees/ppnew.doctree Binary files differdeleted file mode 100644 index 5c152d321a5..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/doctrees/ppnew.doctree +++ /dev/null diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/.buildinfo b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/.buildinfo deleted file mode 100644 index ec014001dee..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/.buildinfo +++ /dev/null @@ -1,4 +0,0 @@ -# Sphinx build info version 1
-# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: 5a0a9f8c8bb0798c3d499fe9e55f5963
-tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_sources/ppapi-1.x.rst.txt b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_sources/ppapi-1.x.rst.txt deleted file mode 100644 index df661a7b82d..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_sources/ppapi-1.x.rst.txt +++ /dev/null @@ -1,937 +0,0 @@ -
-``pplib`` 1.x
-=============
-
-``pplib`` is a library for raw PDF access. It parses PDF documents and provides an interface to access document structures in C.
-
-C-API
-=====
-
-Types
------
-
-``pplib`` defines several C-types to represent PDF types:
-
-- ``ppint`` - signed integer (``int64_t``)
-- ``ppnum`` - real number (double)
-- ``ppname`` - PDF name
-- ``ppstring`` - PDF string
-- ``pparray`` - PDF array
-- ``ppdict`` - PDF dict
-- ``ppstream`` - PDF stream
-- ``ppref`` - PDF indirect reference
-- ``ppobj`` - a container of all above
-
-Among ``ppint`` and ``ppnum``, we also use ``ppuint`` - unsigned integer (machine word, alias to ``size_t``).
-
-Other API types:
-
-- ``ppdoc`` - PDF document
-- ``ppxref`` - cross-references table
-- ``ppcontext`` - ... later
-- ``pprect`` - rectangle
-- ``ppmatrix`` - matrix
-
-Integer, number, name and string are treated as simple types.
-Names and strings are actually C-structures, but exposed to API as typedefs to ``const char *``.
-Other types (array, dict, stream, reference, object container, xref, PDF) are C-structures,
-and you operate it their pointers. So when you declare a simple type variable you say::
-
- ppuint u;
- ppnum n;
- ppname name;
- ppstring string;
- ...
-
-And when you declare a compound type you operate on pointers::
-
- ppobj *obj;
- pparray *array;
- ppdict *dict;
- ppstream *stream;
- ppref *ref;
- ppdoc *pdf;
-
-Some of those C-types are defined in library header ``ppapi.h`` (complete types). Some others are incomplete
-(eg. you can't say ``sizeof(ppdoc)`` or ``sizeof(ppxref)``). This is to avoid unnecesary dependencies in
-the header. [At some points it's not clear to me what to hide and what to expose, will see.] The library itself
-uses ``pplib.h`` but for auxilary applications including a standalone ``ppapi.h`` header should be enough.
-
-``pplib`` was designed having **read-only** PDF access in mind. Even if some structure is completelly exposed,
-so that you can directly access its members, you should treat them as read-only. I don't make them ``const`` because
-then all variable declarations would need to be ``const``, which is annoying, and I'd need some trickery in the library
-internals to unconst. Besides, nothing is really const for C type casts.
-
-Object
-------
-
-A common container for all elementary PDF object types is ``ppobj`` structure. ``ppobj`` has a type identifier
-(integer) and union of values::
-
- struct ppobj {
- ppobjtp type;
- union {
- ppint integer;
- ppnum number;
- ppname name;
- ppstring string;
- pparray *array;
- ppdict *dict;
- ppstream *stream;
- ppref *ref;
- void *any;
- };
- };
-
-Object type is one of constants (enum)::
-
- PPNONE
- PPNULL
- PPBOOL
- PPINT
- PPNUM
- PPNAME
- PPSTRING
- PPARRAY
- PPDICT
- PPSTREAM
- PPREF
-
-The type determines the structure member you're allowed to access::
-
- ppobj *obj;
- ...
- switch (obj->type)
- {
- case PPNONE: // shouldn't actually happen, indicates some failure
- break;
- case PPNULL: // valid PDF null object, no value
- break;
- case PPBOOL: // do something with obj->integer (ppint), value 0 or 1
- break;
- case PPINT: // do something with obj->integer (ppint)
- break;
- case PPNUM: // do something with obj->number (ppnum)
- break;
- case PPNAME: // do something with obj->name (ppname)
- break;
- case PPSTRING: // do something with obj->string (ppstring)
- break;
- case PPARRAY: // do something with obj->array (pparray *)
- break;
- case PPDICT: // do something with obj->dict (ppdict *)
- break;
- case PPSTREAM: // do something with obj->stream (ppstream *)
- break;
- case PPREF: // do something with obj->ref (ppref *)
- break;
- }
-
-More often then not you know exactly what type of object value is expected, in which case
-you may use one of the following macros::
-
- // returns 1 if o->type is PPNULL
- int ppobj_get_null(o) \
-
- // if o->type is PPBOOL, sets int v to 0 or 1 and returns 1, 0 otherwise
- int ppobj_get_bool(o, v)
-
- // if o->type is PPINT, sets ppint v and returns 1, 0 otherwise
- int ppobj_get_int(o, v)
-
- // if o->type is PPINT and >= 0, sets ppuint v and returns 1, 0 otherwise
- int ppobj_get_uint(o, v)
-
- // if o->type is PPNUM or PPINT, sets ppnum v and returns 1, 0 otherwise
- int ppobj_get_num(o, v)
-
- // if o->type is PPNAME returns the name, NULL otherwise
- ppname ppobj_get_name(o)
-
- // if o->type is PPSTRING returns the string, NULL otherwise
- ppstring ppobj_get_string(o)
-
- // if o->type is PPARRAY returns the array, NULL otherwise
- pparray * ppobj_get_array(o)
-
- // if o->type is PPDICT returns the dict, NULL otherwise
- ppdict * ppobj_get_dict(o)
-
- // if o->type is PPSTREAM returns the stream, NULL otherwise
- ppstream * ppobj_get_stream(o)
-
- // if o->type is PPREF returns the reference, NULL otherwise
- ppref * ppobj_get_ref(o)
-
-Note the coercion from integer to real number, but not reverse. In practise, whenever you expect a real number,
-you should also handle integer (eg. '1' used instead of '1.0').
-
-It is a common case that the object is given as an indirect reference, but what you actually
-want is not the reference, but the object referred by it. Here is a helper for it::
-
- // if o->type is PPREF, returns what the reference points, otherwise returns o
- ppobj * ppobj_rget_obj(o)
-
-Also every ``ppobj_get_*`` macro has ``ppobj_rget_*`` counterpart that makes a check
-for the expected type, but if the object is PPREF, it jumps to the target object.
-So for example ``ppobj_rget_dict(obj)`` will return dict if ``obj`` is of type PPDICT
-or if it is of type PPREF and ``obj->ref`` hosts an object of type PPDICT.
-
-Names
------
-
-PDF names are represented as ``ppname``.
-I find it convenient to have ``ppname`` type pretending ``const char *``. This allows to use ``ppname``
-in all C-style string functions like ``printf("%s", name)``.
-
-Be aware, however, that ``ppname`` is actually a C-structure. It is perfectly ok to cast ``ppname`` to ``const char *``::
-
- ppname name;
- ...
- (const char *)name;
-
-But reverse is forbidden::
-
- const char *cstr = "cstring";
- ...
- (ppname)cstr; // expect segmentation fault soon
-
-For convenient use in C, names are ``'\0'`` terminated. But to get the length of name better always use
-``ppname_size()`` macro. ``ppname`` object knows its size, don't use ``strlen()``::
-
- size_t ppname_size(ppname name); // macro, returns length of name in bytes
-
-In current implementation names are not hashed anyhow, so name-to-name comparison is not smarter than ``memcmp()``.
-Use macros::
-
- int ppname_is(ppname name, "literal"); // to compare ppname with C-literal string
- int ppname_eq(ppname name, ppname other); // to compare ppname with a different name
-
-If you'll use ``pplib`` to parse contents streams, you may need to distinguish names from operators
-(more precisely executable names). Names in PDF are preceeded by '/', executable names aren't. In both
-cases PDF parser will produce ``ppname`` but can be distingushed with::
-
- int ppname_exec(ppname name); // returns non-zero if name is executable
-
-Names are kept in their raw form, with possible PDF specific escapes (in text below we call it **encoded** form).
-Leading '/' is omitted, though. One may need a decoded name, with no PDF escapes.
-A pair of functions provides a simple interface to switch between those two forms::
-
- ppname ppname_decoded (ppname name); // returns decoded (unescaped) form of the name
- ppname ppname_encoded (ppname name); // returns encoded (escaped) form of the name
-
-In pretty most cases PDF names contains only letters (no special characters, no escapes), so decoded and encoded forms are identical.
-In that case both functions simply return the argument. It is ok to call ``ppname_decoded()`` on already decoded form
-and ``ppname_encoded()`` on already encoded form. Both forms are produced by PDF objects parser, so accessing ``ppname`` alter ego
-in whatever direction needs no extra decoding or allocation costs.
-
-String
-------
-
-PDF strings have the same internal construction as names, so most of names description above applies to strings as well.
-``ppstring`` is a typedef of ``const char *``, roughly ``'\0'`` terminiated C-string. To get the size of the string::
-
- size_t ppstring_size(ppstring string); // macro, returns the length of the string in bytes
-
-Strings are provided in their raw form, preserving PDF specific escapes, but with no
-``()`` or ``<>`` delims. To distinguish plain strings from hex strings::
-
- int ppstring_hex(ppstring string); // macro, returns non zero if hex string
-
-Or if you prefer::
-
- switch (ppstring_type(string))
- {
- case PPSTRING_PLAIN: // literal string, surrounded by ``(`` and ``)`` in PDF
- break;
- case PPSTRING_BASE16: // hex string, surrounded by ``<`` and ``>`` in PDF
- break;
- case PPSTRING_BASE85: // base85 string surrounded by ``<~`` and ``~>`` in PDF
- break;
- }
-
-The last is actually Postscript specific, not used in PDF, but I think it might appear in contents streams...
-No matter how the string is given in PDF (plain or hex), here are two functions to
-switch between encoded and decoded strings forms::
-
- ppstring ppstring_decoded (ppstring string); // returns decoded string possibly with PDF escapes
- ppstring ppstring_encoded (ppstring string); // returns encoded string with no PDF escapes
-
-For hex strings, encoded form contains hex digits, while decoded form contains arbitrary bytes (the result of hex decoding).
-Plain strings usually contains printable ASCII characters, but they might contain any binary data.
-As with names, objects parser produces both forms. The raw form with PDF escapes (or raw hex form) is considered the main one.
-Eg. when you access ``obj->string`` you always get the encoded form. At any moment you can switch to its alter ego.
-
-No matter if the string is plain or hex, if its first two bytes (decoded) are UTF16 BOM, the string
-is considered unicode. ``ppstring`` object *knows* it is unicode or not::
-
- switch (ppstring_utf(string))
- {
- case PPSTRING_UTF16LE: // unicode string, utf16le
- break;
- case PPSTRING_UTF16BE: // unicode string, utf16be
- break;
- default: // no unicode
- }
-
-Or simply::
-
- if (ppstring_utf(string) != 0) {
- // handle unicode string
- }
-
-If the string is unicode, BOM remains the part of the string -- ``pplib`` parser does not strip it.
-Unicode or not, encoded or decoded, strings are always C-arrays of bytes and ``ppstring_size()``
-always returns the size in bytes.
-
-Array
------
-
-PDF arrays are represented as ``pparray`` type, which is C-array of ``ppobj`` structures.
-To get the size::
-
- size_t pparray_size(pparray *array) // macro, returns the number of array items
-
-To get ``ppobj *`` at a given index::
-
- ppobj * pparray_at(array, index) // macro, returns ppobj * (no index check)
- ppobj * pparray_get(array, index) // macro, returns ppobj * or NULL (with index check)
- ppobj * pparray_get_obj (pparray *array, size_t index); // function equiv to pparray_get()
-
-Iterating over array elements::
-
- pparray *array;
- size_t index, size;
- ppobj *obj;
- for (size = pparray_size(array), pparray_first(array, index, obj); index < size; pparray_next(index, obj))
- {
- // do something with index and obj
- }
-
-There is no magic first/next macros, just iteration over pointers. One could also use something like::
-
- for (index = 0, size = array->size; index < size; ++index)
- {
- obj = pparray_at(array, index);
- // do something with index and obj
- }
-
-When getting values from array and expecting a result of known type, use one of the following::
-
- int pparray_get_bool (pparray *array, size_t index, int *v); // get boolean value
- int pparray_get_int (pparray *array, size_t index, ppint *v); // get ppint value
- int pparray_get_uint (pparray *array, size_t index, ppuint *v); // get ppuint value
- int pparray_get_num (pparray *array, size_t index, ppnum *v); // get ppnum value
- ppname pparray_get_name (pparray *array, size_t index); // get ppname value
- ppstring pparray_get_string (pparray *array, size_t index); // get ppstring value
- pparray * pparray_get_array (pparray *array, size_t index); // get pparray * value
- ppdict * pparray_get_dict (pparray *array, size_t index); // get ppdict * value
- ppref * pparray_get_ref (pparray *array, size_t index); // get ppref * value
-
-As with ``ppobj_get_*`` suite, numeric types getters set the value of a given type and returns 1, if the type matches.
-Otherwise sets nothing and returns 0. Other getters return the value if the type matches, or NULL.
-
-Every function from ``pparray_get_*`` suite have its ``pparray_rget_*`` counterpart that
-that dereferences indirect objects (as explained for ``ppobj_rget_*`` getters). Note that
-there is no ``pparray_get_stream()`` function, as streams in PDF are always indirect.
-To get the stream from array use::
-
- ppstream * pparray_rget_stream (pparray *array, size_t index);
-
-Dict
-----
-
-PDF dicts are represented as ``ppdict`` structure, which is C-array of ``ppobj`` with parallel
-C-array of ``ppname`` pointers. To get the size of a dict::
-
- size_t ppdict_size(ppdict *dict) // macro, returns the number of key-val pairs
-
-To get the value at a given index (integer)::
-
- ppobj * ppdict_at(ppdict *dict, index) // macro, no index check
-
-To get the name (key) at a given index::
-
- ppname ppdict_key(ppdict *dict, index) // macro, no index check
-
-To iterate over dict key-val pairs::
-
- ppdict *dict;
- ppname *pkey;
- ppobj *obj;
-
- for (ppdict_first(dict, pkey, obj); *pkey != NULL; ppdict_next(pkey, obj))
- {
- // do something with *pkey and obj
- }
-
-There is no magic in first/next macros, just iteration through keys and values lists pointers.
-For convenient iteration, a list of keys is terminated with NULL, so in the code above ``*pkey != NULL``
-is used as the loop condition. One may also iterate via indices::
-
- ppdict *dict;
- size_t index, size;
- ppname key;
- ppobj *obj;
- for (index = 0, size = ppdict_size(dict); index < size; ++index)
- {
- key = ppdict_key(dict, index);
- obj = ppdict_at(dict, index);
- // do something with key and obj
- }
-
-To get the object associated with a given name, use one of the following::
-
- ppobj * ppdict_get_obj (ppdict *dict, const char *name);
- int ppdict_get_bool (ppdict *dict, const char *name, int *v);
- int ppdict_get_int (ppdict *dict, const char *name, ppint *v);
- int ppdict_get_uint (ppdict *dict, const char *name, ppuint *v);
- int ppdict_get_num (ppdict *dict, const char *name, ppnum *v);
- ppname ppdict_get_name (ppdict *dict, const char *name);
- ppstring ppdict_get_string (ppdict *dict, const char *name);
- pparray * ppdict_get_array (ppdict *dict, const char *name);
- ppdict * ppdict_get_dict (ppdict *dict, const char *name);
- ppref * ppdict_get_ref (ppdict *dict, const char *name);
-
-Note that all getters accepts ``const char *`` as key, so it is ok to say::
-
- ppdict_rget_dict(dict, "Resources");
-
-as well as::
-
- ppdic_rget_dict(dict, name); // ppname name
-
-Every ``ppdict_get_*`` getter has ``ppdict_rget_*`` counterpart that dereferences
-indirect objects if necessary. Note that there is no ``ppdict_get_stream()`` function,
-but there is::
-
- ppstream * ppdict_rget_stream (ppdict *dict, const char *name);
-
-So far dicts comes with no names mapping, so by-name dict accessors perform a linear search
-through the keys list. PDF dicts are usually small, so it is fast enough.
-Building names lookup for every dict in PDF makes no sense I think, as ``pplib`` applications
-will query just several dicts I guess.. However, some apps may extensively query
-resources, which may refer to hundreds of objects (eg. images). So some mapping for dicts
-is still considered.
-
-Stream
-------
-
-PDF streams are represented as ``ppstream`` objects. To get the stream dict::
-
- ppdict * ppstream_dict(ppstream *stream) // macro
-
-To read the stream data::
-
- uint8_t * ppstream_first (ppstream *stream, size_t *size, int decode);
- uint8_t * ppstream_next (ppstream *stream, size_t *size);
- void ppstream_done (ppstream *stream);
-
-Both ``first` and ``next`` functions return a chunk of stream data and sets the ``size`` of the chunk.
-``decode`` parameter tell the reader to decompress the stream (1) or return raw (0). A call to ``ppstream_next()``
-must be preceeded by ``ppstream_first()``. Once you're done with the stream, you have to call ``ppstream_done()``,
-no matter if the stream has been read to the end or not. The stream data iterator in use::
-
- uint8_t *data;
- size_t size;
- ppstream *stream;
- int decode = 1; // 1 - get decompressed, 0 - get raw
-
- for (data = ppstream_first(stream, &size, decode); data != NULL; data = ppstream_next(stream, &size))
- {
- // do something with data and its size
- }
- ppstream_done(stream);
-
-Every subsequent iterator call invalidates the previous reader output, so you have to utilize the returned chunk
-of data just after you ot that. So the following is wrong::
-
- data1 = ppstream_first(stream, &size, 1);
- data2 = ppstream_next(stream, &size);
- data3 = ppstream_next(stream, &size);
- some_output(data1, size);
- some_output(data2, size);
-
-The reader calls usually return the same pointer to internal buffer, just filled with a different data.
-``pplib`` allocates reasonably large buffer and fills that buffer on subsequent calls to the reader.
-
-If the source stream has no compression, using both ``decode == 1`` and ``decode == 0`` should give the same result.
-You can check if the stream is actually compressed with::
-
- ppstream_compressed(stream) // macro, returns non zero if /Filter is present
-
-It might be necessary to load the entire stream data at once::
-
- uint8_t * ppstream_all (ppstream *stream, size_t *size, int decode);
-
-If the initial buffer size is insufficient, it grows until the entire stream data is loaded. You must call
-``ppstream_done(stream)`` after using returned data.
-
-``ppstream_done()`` doesn't invalidate the stream object, it just closes its internal reader.
-The stream itself remains a valid object (eg. one can read it again if necessary),
-but the reader buffer is released. It is actually not freed but kept for future the reuse with that on some other stream,
-but you still need to mark it ready for reuse to avoid allocating a separate buffer for every stream you're going to read.
-
-Stream data readers will return ``NULL`` if you haven't close the previous reader process with ``ppstream_done()``. All below is wrong::
-
- data1 = ppstream_all(stream, &size, 1);
- data2 = ppstream_all(stream, &size, 1); // data2 == NULL
- // or
- data1 = ppstream_first(stream, &size, 1);
- data2 = ppstream_first(stream, &size, 1); // data2 == NULL
- // or
- data1 = ppstream_first(stream, &size, 1);
- data2 = ppstream_all(stream, &size, 1); // data2 == NULL
-
-To avoid unnecessary dependencies, ``pplib`` does not support image filters (``/DCT``, ``/JPX``, ``/JBIG``, ``/CCITT``).
-But it is ok to read the stream with ``decode`` set to 1 on such streams. ``pplib`` assumes that the image is the
-final/target stream form and just returns it as-is. Eg. in the case of JPEG (``/DCT`` filtered) image both calls should
-give the same results::
-
- ppstream_all(jpegstream, &jpegsize, 0); // don't decode, return what's there
- ppstream_all(jpegstream, &jpegsize, 1); // decode but found image filter, effectively the same
-
-A bit more about streams memory. As mentioned, ``pplib`` allocates buffers for stream readers. After ``ppstream_done()``,
-the stream no longer *owns* the buffer space. But the buffer may remain allocated, to be reused with future readers.
-``pplib`` keeps a pool of several buffers. This means, that when you use stream readers, ``pplib`` eats
-some memory (1MB or so) that is not freed, even if no streams are used. And even if you free all objects.
-If you suffer from this, you can optionally use a pair of functions::
-
- void ppstream_init_buffers (void);
- void ppstream_free_buffers (void);
-
-The first initializes buffers pool, unless done so far. Currently ``pplib`` cares of it before opening every stream reader,
-so it is not obligatory. The second frees a pool of buffers. The intended use is to call ``ppstream_init_buffers()`` once
-as kind of library initializer and to call ``ppstream_free_buffers()`` once, as the library finalizer.
-
-Filters
--------
-
-In version v1.00 (20190916) ``ppstream`` API has been extended with filters information.
-``ppstream`` knows its filter(s) and keps it as ``stream->filter``::
-
- // ppstream *stream;
- ppstream_filter *info = &stream->filter;
-
-``ppstream_filter`` is the following structure::
-
- typedef struct {
- ppstreamtp *filters; // c-array of filter identifiers (enum integers)
- ppdict **params; // c-array of ppdict pointers
- size_t count; // number of filters, length of the arrays (typically 1)
- } ppstream_filter;
-
-If ``count > 0`` then ``filters`` member is not NULL. Filters array keeps integer constants::
-
- PPSTREAM_BASE16 /* /ASCIIHexDecode */
- PPSTREAM_BASE85 /* /ASCII85Decode */
- PPSTREAM_RUNLENGTH /* /RunLengthDecode */
- PPSTREAM_FLATE /* /FlateDecode */
- PPSTREAM_LZW /* /LZWDecode */
- PPSTREAM_CCITT /* /CCITTFaxDecode */
- PPSTREAM_DCT /* /DCTDecode */
- PPSTREAM_JBIG2 /* /JBIG2Decode */
- PPSTREAM_JPX /* /JPXDecode */
- PPSTREAM_CRYPT /* /Crypt */
-
-Params array keeps corresponding filter parameters (``/DecodeParms``) if present. ``params`` member is not NULL
-if ``count > 0`` and the stream dict has ``/DecodeParms`` entry. Even if ``params`` is there,
-for every N-th filter, ``params[N]`` may be NULL (corresponding to PDF ``null``).
-
-``stream->filter`` keeps the source stream filter information, which may not correspond to the result of stream readers
-(``ppstream_first()``, ``ppstream_next()``, ``ppstream_all()``). The get the filters info relevant to the result from readers::
-
- void ppstream_filter_info (ppstream *stream, ppstream_filter *info, int decode);
-
-The function fills ``ppstream_filter`` structure according to the expected result from stream readers (example 3 shows
-how to use it to reconstruct ``/Filter`` and ``/DecodeParms`` when copying the stream to some other PDF).
-
-To convert filter identifier (``ppstreamtp``) to a corresponding PDF filter name::
-
- const char * ppstream_filter_name[];
-
-To covert ``ppname`` to filter identifier::
-
- int ppstream_filter_type (ppname filtername, ppstreamtp *filtertype);
- // returns 1 and sets filtertype if filtername is the proper filter name
-
-Additional information about the stream can be fetched from macros::
-
- ppstream_compressed(stream) /* stream->flags & (PPSTREAM_FILTER|PPSTREAM_IMAGE) */
- ppstream_filtered(stream) /* stream->flags & PPSTREAM_FILTER */
- ppstream_image(stream) /* stream->flags * PPSTREAM_IMAGE */
-
-``stream->flags`` is a binary sum of the following::
-
- PPSTREAM_FILTER /* set iff the stream filters list has one of: BASE16, BASE85, RUNLENGTH, FLATE, LZW */
- PPSTREAM_IMAGE /* set iff the stream filters list has one of: CCITT, DCT, JBIG2, JPX */
- PPSTREAM_ENCRYPTED /* set iff the stream is encrypted */
- PPSTREAM_ENCRYPTED_OWN /* set iff the stream has own CRYPT filter */
-
-Note that ``PPSTREAM_COMPRESSED`` is not there any longer, use ``ppstream_compressed()`` instead.
-And there is some more, see ``ppapi.h``.
-
-Ref
----
-
-Indirect objects are represented as ``ppref`` structure. To get the object that the
-reference refers to::
-
- ppobj * ppref_obj(ppref *ref) // macro
-
-``ppref`` structure also keeps the reference number and version, a pointer to cross reference table it belongs
-to and others, but I guess you won't need anything but the referenced object. ``pplib`` parser resolves references
-on-fly. So if there is a dict with indirect objects::
-
- <<
- /Type /Page
- /Resources 123 0 R
- ...
- >>
-
-the parser will produce ``ppdict`` with ``Resources`` key pointing the proper ``ppref *`` value.
-If you need more, access ``ppref`` members::
-
- struct ppref {
- ppobj object; // target object
- ppuint number, version; // identifiers
- size_t offset; // file offset (useless for you, may be zero for compressed objects)
- ppuint length; // the length of the original object data
- ppxref *xref; // cross reference table it belongs to
- };
-
-
-XRef
-----
-
-Cross reference table is exposed as ``ppxref`` (incomplete type, you can only oprate on its pointer).
-To get top document xref::
-
- ppxref * ppdoc_xref (ppdoc *pdf);
-
-To get previous (older) xref::
-
- ppxref * ppxref_prev (ppxref *xref);
-
-To find an object of a given refnumber::
-
- ppref * ppxref_find (ppxref *xref, ppuint refnumber);
-
-[Note: since pplib v0.98 in case of documents with incremental update, ``ppxref_find()`` returns
-the newest available version of a given object rather than the object in a given body.]
-
-PDF
----
-
-PDF document is represented as ``ppdoc`` structure (incomplete type, you can only operate on its pointer).
-To load a document from file::
-
- ppdoc * ppdoc_load (const char *filename);
-
-To load a document from memory data::
-
- ppdoc * ppdoc_mem (const void *data, size_t size);
-
-The data is assumed to be a buffer allocated with ``malloc`` - it is freed when destroying ``ppdoc``.
-
-Both loaders returns ``NULL`` on failure.
-
-To free ``ppdoc`` and all objects it refers to::
-
- void ppdoc_free (ppdoc *pdf);
-
-So far we haven't mention about any explicit object reclaimers. There are no dedicated ``free`` functions
-for other objects. You don't allocate or free objects yourself. ``ppdoc`` object is an owner of all
-beings it refers to. It also means that every object described so far is alive as long as the containing
-``ppdoc`` is alive.
-
-To access main PDF dicts::
-
- ppdict * ppdoc_trailer(ppdoc *pdf); // returns top xref trailer dict
- ppdict * ppdoc_catalog(ppdoc *pdf); // returns catalog referred from the trailer
- ppdict * ppdoc_info(ppdoc *pdf); // returns info dict referred from the trailer
-
-To get the PDF version::
-
- const char * ppdoc_version_string (ppdoc *pdf); // version string
- int ppdoc_version_number (ppdoc *pdf, int *minor); // minor and major numbers
-
-To get the file size of the source PDF document::
-
- size_t ppdoc_file_size (ppdoc *pdf);
-
-To get the number of objects in all xrefs::
-
- ppuint ppdoc_objects (ppdoc *pdf);
-
-To get the approx usage of memory::
-
- size_t ppdoc_memory (ppdoc *pdf, size_t *waste);
-
-Encryption
-----------
-
-``pplib`` handles encrypted (password protected) documents. If a document is encrypted, most of strings and streams are ciphered.
-In that form they are unreadable and rather useless, you can't even rewrite such strings/streams as-is to a different PDF output.
-It is a common practise to *protect* documents with an empty password. Such documents remain readable in Acrobat (just opens them without prompting
-for a password), but some features (eg. printing) may restricted by the application.
-
-When ``pplib`` detects encryption, it follows Acrobat approach and first tries an empty password. If it succeeds, ``pplib`` proceeeds normally, providing
-an access to decrypted strings and streams, as if they weren't ciphered. If the document is protected with non-empty password, ``pplib`` gives
-a way to provide a password and proceed. Until you provide a password, ``ppdoc`` object returned by ``ppdoc_load()`` function has all object wntries
-set to ``null``.
-
-After loading a document you should check encryption status with::
-
- ppcrypt_status ppdoc_crypt_status (ppdoc *pdf);
-
-``ppcrypt_status`` (integer) may have the following values:
-
- ``PPCRYPT_NONE`` - no encryption, go ahead
- ``PPCRYPT_DONE`` - encryption present but password succeeded, go ahead
- ``PPCRYPT_PASS`` - encryption present, need non-empty password
- ``PPCRYPT_FAIL`` - invalid or unsupported encryption (eg. undocumented in pdf spec)
-
-If a password is needed, you can provide one with::
-
- ppcrypt_status ppdoc_crypt_pass (ppdoc *pdf, const void *userpass, size_t userpasslength,
- const void *ownerpass, size_t ownerpasslength);
-
-Well, yes, there are actually two passwords in encrypted documents. Relation between them is obscure to me, but enough
-to know that having one of them is enough to decrypt the document. If you know the password, you probably mean
-``userpass``, in which case you should put ``NULL`` as ``ownerpass``. The function returns ``PPCRYPT_DONE`` if the password
-succeeds and the previous status otherwise. Your custom loader function may look like that::
-
- ppdoc *pdf;
- pdf = ppdoc_load("file.pdf");
- if (pdf == NULL)
- return NULL;
- switch (ppdoc_crypt_status(pdf))
- {
- case PPCRYPT_NONE:
- case PPCRYPT_DONE:
- return pdf;
- case PPCRYPT_PASS:
- if (ppdoc_crypt_pass(pdf, "dummy", 5, NULL, 0) == PPCRYPT_DONE ||
- ppdoc_crypt_pass(pdf, NULL, 0, "dummy", 5) == PPCRYPT_DONE)
- return pdf;
- printf("sorry, password needed\n");
- ppdoc_free(pdf);
- return NULL;
- case PPCRYPT_FAIL:
- printf("sorry, encryption failed\n");
- ppdoc_free(pdf);
- return NULL;
- }
-
-[If you get ``PPCRYPT_FAIL`` it might mean *I failed*, so treat as a bug.]
-
-If you'd like to know what permissions are given/restricted to encrypted document::
-
- ppint ppdoc_permissions (ppdoc *pdf);
-
-Returned value can be queried with the following binary flags (you can verify with Acrobat *File -> Properties -> Security* tab)::
-
- PPDOC_ALLOW_PRINT // printing
- PPDOC_ALLOW_MODIFY // filling form fields, signing, creating template pages
- PPDOC_ALLOW_COPY // copying, copying for accessibility
- PPDOC_ALLOW_ANNOTS // filling form fields, copying, signing
- PPDOC_ALLOW_EXTRACT // contents copying for accessibility
- PPDOC_ALLOW_ASSEMBLY // (no effect)
- PPDOC_ALLOW_PRINT_HIRES // (no effect)
-
-``pplib`` does absolutelly nothing with permissions, it cares only to decrypt the document. As mentioned, encryption applies to strings
-and streams. ``pplib`` decrypt strings when parsing document objects, so the result you get is *normal* (not ciphered).
-Streams are decrypted whenever you access them. Even if you ask for a raw stream data, you'll get a raw (compressed) stream, but decrypted.
-So except the check to ``ppdoc_crypt_status()``, you shouldn't bother about encryption.
-
-In encrypted documents most of streams are encrypted. To check if a given stream is encrypted::
-
- ppstream_encrypted(stream) // macro, returns non-zero if encrypted
-
-Encryption is independent from compression, don't confuse with ``ppstream_compressed()``
-
-Pages
------
-
-Several helpers to deal with pages. To get the number of pages::
-
- ppuint ppdoc_page_count (ppdoc *pdf);
-
-To access the root pages tree node::
-
- ppref * ppdoc_pages(ppdoc *pdf);
-
-To get the page reference at a given index::
-
- ppref * ppdoc_page (ppdoc *pdf, ppuint index);
-
-``index`` is a page number. First page has number 1. For index out of bounds ``ppdoc_page()`` returns NULL.
-Iterating over pages using index from 1 to ``ppdoc_page_count()`` and calling ``ppdoc_page()`` on each iteration
-would be suboptimal. Here is a dedicted iterator for this::
-
- ppref * ppdoc_first_page (ppdoc *pdf);
- ppref * ppdoc_next_page (ppdoc *pdf);
-
-The iterator in use::
-
- ppdoc *pdf;
- ppref *ref;
- ppdict *dict;
- int pageno;
-
- pdf = ppdoc_load("file.pdf");
- for (ref = ppdoc_first_page(pdf), pageno = 1; ref != NULL; ref = ppdoc_next_page(pdf), ++pageno)
- {
- dict = ppref_obj(obj)->dict; // take for granted it is a dict
- // do something with the page dict
- }
-
-Functions related to pages return ``ppref *`` ensured to contain dict object, so you don't need sanity
-type checks here.
-
-Contents
---------
-
-PDF page contents can be given as a stream or array of streams. Here is a convenience iterator over page
-contents streams::
-
- ppstream * ppcontents_first (ppdict *dict);
- ppstream * ppcontents_next (ppdict *dict, ppstream *stream);
-
-A complete example of contents stream parser use is given below (example 2).
-But before we get there, we need to introduce ``ppcontext`` object. Conceptually,
-``ppcontext`` is an owner (memory handler) of objects created on demand (beyond the ``ppdoc``).
-So far used only with contents stream parser, which might produce quite some data that we want
-to release just after used. To create a new context::
-
- pcontext * ppcontext_new (void);
-
-It initializes a new context and its internal memory heap, taking about 64kB on start. After that,
-the context is ready to produce objects (contents parsing functions below). Once objects produced
-from a given context are no longer needed::
-
- void ppcontext_done (ppcontext *context);
-
-It restores the context to its initial state, as after ``ppcontext_new()``. It means that the context
-is ready to produce another bunch of beings (in the example below, all objects from the next page contents).
-Once the context is not needed anymore::
-
- void ppcontext_free (ppcontext *context);
-
-Now, contents stream parser functions take the context as an argument. Iterator form of contents stream parser
-that allows to process the contents operator by operator::
-
- ppobj * ppcontents_first_op (ppcontext *context, ppstream *stream, size_t *psize, ppname *pname);
- ppobj * ppcontents_next_op (ppcontext *context, ppstream *stream, size_t *psize, ppname *pname);
-
-Returned ``ppobj *`` is a pointer to operands list. ``*psize`` is the number of operands on stack.
-The operator itself is stored as ``*pname``.
-
-To parse the entire contents stream at once with no stop at every operator::
-
- ppobj * ppcontents_parse (ppcontext *context, ppstream *stream, size_t *psize);
-
-Returns probably quite long list of all parsed objects (operands and operatos) in one piece.
-The number of objects is stored to ``*psize``.
-
-[Contents may contain so called inline images, that breaks a simple scheme of operands / operator syntax::
-
- BI <keyval pairs> ID <binary image data> EI
-
-Contents parser treats this genuine triplet as a single piece, producing two operands (dict and string)
-followed by ``EI`` operator name.]
-
-Boxes
------
-
-Boxes (rectangles) in PDF are roughly 4-number arrays, but with a special intent.
-``pplib`` provides a basic interface for these special arrays::
-
- typedef struct {
- ppnum lx, ly, rx, ry;
- } pprect;
-
-This type is used only by helper functions - PDF parser is not aware of the rectangle type.
-To convert ``pparray`` to ``pprect``::
-
- pprect * pparray_to_rect (pparray *array, pprect *rect); // returns rect or NULL
-
-In example::
-
- pprect rect;
- if (pparray_to_rect(array, &rect) != NULL)
- ; // do something with rect
-
-To get some image bounding box::
-
- pprect * ppdict_get_rect (ppdict *dict, const char *name, pprect *rect);
- // eg. ppdict_get_rect(imagedict, "BBox", &rect)
-
-To get some page box::
-
- pprect * ppdict_get_box (ppdict *dict, const char *name, pprect *rect);
- // eg. ppdict_get_box(pagedict, "MediaBox", &rect)
-
-The later not only checks the pagedict, but also goes through parent page nodes.
-
-Transforms
-----------
-
-Transformations are given as 6-number arrays, but with a special intent.
-``pplib`` provides a basic interface for these special arrays::
-
- typedef struct {
- ppnum xx, xy, yx, yy, x, y;
- } ppmatrix;
-
-This type is used only by helper functions - PDF parser is not aware of the matrix type.
-To convert ``pparray`` to ``ppmatrix``::
-
- ppmatrix * pparray_to_matrix (pparray *array, ppmatrix *matrix);
-
-In example::
-
- ppmatrix matrix;
- if (pparray_to_matrix(array, &matrix) != NULL)
- ; // do something with matrix
-
-To get the matrix from dict::
-
- ppmatrix * ppdict_get_matrix (ppdict *dict, const char *name, ppmatrix *matrix);
- // eg. ppdict_get_matrix(imagedict, "Matrix", &matrix)
-
-Errors handling
----------------
-
-``pplib`` is not verbose, but might happen that it needs to log some error message, eg. when parsing
-of some PDF boject fails due to invalid offsets. By default, ``pplib`` prints the message to stdout, eg.::
-
- invalid 123 0 R object at offset 123123
-
-To replace the default logger, you can provide your own::
-
- void pplog_callback (pplogger_callback logger, void *alien);
-
-``pplogger_callback`` is a function::
-
- void your_callback (const char *message, void *alien);
-
-In example, to redirect messages to stderr you may define a function::
-
- void your_callback (const char *message, void *alien)
- {
- fprintf((FILE *)alien, "\nooops: %s\n", message);
- }
-
-Then set the callback somewhere before loading documents::
-
- pplog_callback(your_callback, stderr);
-
-(example 2 uses that).
-
-To set the default log messages prefix, eg. ``pplib:``, use::
-
- int pplog_prefix (const char *prefix)
-
-Default is empty. The function succeeds if provided prefix is reasonably short (less then 32 bytes).
diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_sources/ppapi-2.x.rst.txt b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_sources/ppapi-2.x.rst.txt deleted file mode 100644 index 250cd8fcd35..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_sources/ppapi-2.x.rst.txt +++ /dev/null @@ -1,937 +0,0 @@ -
-``pplib`` 2.x
-=============
-
-``pplib`` is a library for raw PDF access. It parses PDF documents and provides an interface to access document structures in C.
-
-C-API
-=====
-
-Types
------
-
-``pplib`` defines several C-types to represent PDF types:
-
-- ``ppbyte`` - char
-- ``ppint`` - signed integer (``int64_t``)
-- ``ppnum`` - real number (double)
-- ``ppname`` - PDF name
-- ``ppstring`` - PDF string
-- ``pparray`` - PDF array
-- ``ppdict`` - PDF dict
-- ``ppstream`` - PDF stream
-- ``ppref`` - PDF indirect reference
-- ``ppobj`` - a container of all above
-
-Among ``ppint`` and ``ppnum``, we also use ``ppuint`` - unsigned integer (machine word, alias to ``size_t``).
-
-Other API types:
-
-- ``ppdoc`` - PDF document
-- ``ppxref`` - cross-references table
-- ``ppcontext`` - ... later
-- ``pprect`` - rectangle
-- ``ppmatrix`` - matrix
-
-Integer and number are as simple types. Names and strings used to be aliases to ``char *``
-in ``pplib 1.x``, now they are structures; all related API functions operate on pointers.
-Other types (array, dict, stream, reference, object container, xref, doc) are C-structures,
-and you operate it their pointers. So when you declare a simple type variable you say::
-
- ppuint u;
- ppnum n;
- ...
-
-And when you declare a compound type you operate on pointers::
-
- ppobj *obj;
- ppname *name;
- ppstring *string;
- pparray *array;
- ppdict *dict;
- ppstream *stream;
- ppref *ref;
- ppdoc *pdf;
-
-Most of those C-types are defined in library header ``ppapi.h`` (complete types). Some others are incomplete
-(eg. you can't say ``sizeof(ppdoc)`` or ``sizeof(ppxref)``). This is to avoid unnecesary dependencies in
-the header. The library itself uses ``pplib.h`` header but for auxilary applications including a standalone
-``ppapi.h`` header should be enough.
-
-``pplib`` was designed having **read-only** PDF access in mind. Even if some structure is completelly exposed,
-so that you can directly access its members, you should treat them as read-only. I don't make them ``const`` because
-then all variable declarations would need to be ``const``, which is annoying, and I'd need some trickery in the library
-internals to unconst. Besides, nothing is really const for C type casts.
-
-Object
-------
-
-A common container for all elementary PDF object types is ``ppobj`` structure. ``ppobj`` has a type identifier
-(integer) and union of values::
-
- struct ppobj {
- ppobjtp type;
- union {
- ppint integer;
- ppnum number;
- ppname *name;
- ppstring *string;
- pparray *array;
- ppdict *dict;
- ppstream *stream;
- ppref *ref;
- void *any;
- };
- };
-
-Object type is one of constants (enum)::
-
- PPNONE
- PPNULL
- PPBOOL
- PPINT
- PPNUM
- PPNAME
- PPSTRING
- PPARRAY
- PPDICT
- PPSTREAM
- PPREF
-
-The type determines the structure member you're allowed to access::
-
- ppobj *obj;
- ...
- switch (obj->type)
- {
- case PPNONE: // shouldn't actually happen, indicates some failure
- break;
- case PPNULL: // valid PDF null object, no value
- break;
- case PPBOOL: // do something with obj->integer (ppint), value 0 or 1
- break;
- case PPINT: // do something with obj->integer (ppint)
- break;
- case PPNUM: // do something with obj->number (ppnum)
- break;
- case PPNAME: // do something with obj->name (ppname *)
- break;
- case PPSTRING: // do something with obj->string (ppstring *)
- break;
- case PPARRAY: // do something with obj->array (pparray *)
- break;
- case PPDICT: // do something with obj->dict (ppdict *)
- break;
- case PPSTREAM: // do something with obj->stream (ppstream *)
- break;
- case PPREF: // do something with obj->ref (ppref *)
- break;
- }
-
-More often then not you know exactly what type of object value is expected, in which case
-you may use one of the following macros::
-
- // returns 1 if o->type is PPNULL
- int ppobj_get_null(o) \
-
- // if o->type is PPBOOL, sets int v to 0 or 1 and returns 1, 0 otherwise
- int ppobj_get_bool(o, v)
-
- // if o->type is PPINT, sets ppint v and returns 1, 0 otherwise
- int ppobj_get_int(o, v)
-
- // if o->type is PPINT and >= 0, sets ppuint v and returns 1, 0 otherwise
- int ppobj_get_uint(o, v)
-
- // if o->type is PPNUM or PPINT, sets ppnum v and returns 1, 0 otherwise
- int ppobj_get_num(o, v)
-
- // if o->type is PPNAME returns the name, NULL otherwise
- ppname * ppobj_get_name(o)
-
- // if o->type is PPSTRING returns the string, NULL otherwise
- ppstring * ppobj_get_string(o)
-
- // if o->type is PPARRAY returns the array, NULL otherwise
- pparray * ppobj_get_array(o)
-
- // if o->type is PPDICT returns the dict, NULL otherwise
- ppdict * ppobj_get_dict(o)
-
- // if o->type is PPSTREAM returns the stream, NULL otherwise
- ppstream * ppobj_get_stream(o)
-
- // if o->type is PPREF returns the reference, NULL otherwise
- ppref * ppobj_get_ref(o)
-
-Note the coercion from integer to real number, but not reverse. In practise, whenever you expect a real number,
-you should also handle integer (eg. '1' used instead of '1.0' is pretty common in PDF).
-
-It is a common case that the object is given as an indirect reference, but what you actually
-want is not the reference, but the object referred by it. Here is a helper for it::
-
- // if o->type is PPREF, returns what the reference points, otherwise returns o
- ppobj * ppobj_rget_obj(o)
-
-Also every ``ppobj_get_*`` macro has ``ppobj_rget_*`` counterpart that makes a check
-for the expected type, but if the object is PPREF, it jumps to the target object.
-So for example ``ppobj_rget_dict(obj)`` will return dict if ``obj`` is of type PPDICT
-or if it is of type PPREF and ``obj->ref`` hosts an object of type PPDICT.
-
-Names
------
-
-PDF names are represented as ``ppname`` pointer (``ppname`` used to be an alias to ``char *``, now it is a structure).
-To access the name data::
-
- ppbyte * ppname_data(name) // name->data, bytes array
-
-For convenient use in C, names are ``'\0'`` terminated. But to get the length of name better always use
-``ppname_size()`` macro. ``ppname`` object knows its size, don't use ``strlen()``::
-
- size_t ppname_size(ppname name); // name->size, the length of name in bytes
-
-In current implementation names are not hashed anyhow, so name-to-name comparison is not smarter than ``memcmp()``.
-Use macros::
-
- int ppname_is(ppname name, "literal"); // to compare ppname with C-literal string
- int ppname_eq(ppname name, ppname other); // to compare ppname with a different name
-
-If you use ``pplib`` to parse contents streams, you may need to distinguish names from operators
-(more precisely executable names). Names in PDF are preceeded by '/', executable names aren't. In both
-cases PDF parser will produce ``ppname`` but the result can be distingushed with::
-
- int ppname_exec(ppname name); // macro, returns non-zero if the name is executable
-
-Names are kept in their raw form, with possible PDF specific escapes (in text below we call it **encoded** form).
-Leading '/' is omitted. One may need a decoded name, with no PDF escapes.
-A pair of functions provides a simple interface to switch between those two forms::
-
- // these helpers rely on name->alterego member
- ppname * ppname_decoded (ppname *name); // returns decoded (unescaped) form of the name
- ppname * ppname_encoded (ppname *name); // returns encoded (escaped) form of the name
- ppbyte * ppname_decoded_data (ppname *name);
- ppbyte * ppname_encoded_data (ppname *name);
-
-In pretty most cases a PDF name contains only letters (no special characters, no escapes), so decoded and encoded forms are identical.
-In that case both functions simply return the argument. It is ok to call ``ppname_decoded()`` on already decoded form
-and ``ppname_encoded()`` on already encoded form. Both forms are produced by PDF objects parser, so accessing ``ppname`` alter ego
-in whatever direction needs no extra decoding or allocation costs (the cost is paid by parser).
-
-String
-------
-
-PDF strings have the same internal construction as names, so most of names description above applies to strings as well.
-``ppstring`` is a structure (used to be an alias to ``char *``). ``string->data`` is ``\0``-terminated c-array of ``ppbytes``.
-To get the data::
-
- ppbyte * ppstring_data(ppstring *string); // string->data, macro
-
-To get the size of the string::
-
- size_t ppstring_size(ppstring *string); // macro, returns the length of the string in bytes
-
-Strings are provided in their raw form, preserving PDF specific escapes, but with no
-``()`` or ``<>`` delims. To distinguish plain strings from hex strings::
-
- int ppstring_hex(ppstring string); // macro, returns non zero if hex string
-
-Or if you prefer::
-
- switch (ppstring_type(string))
- {
- case PPSTRING_PLAIN: // literal string, surrounded by ``(`` and ``)`` in PDF
- break;
- case PPSTRING_BASE16: // hex string, surrounded by ``<`` and ``>`` in PDF
- break;
- case PPSTRING_BASE85: // base85 string surrounded by ``<~`` and ``~>`` in PDF
- break;
- }
-
-The last is actually Postscript specific, not used in PDF, but I think it might appear in contents streams...
-No matter how the string is given in PDF (plain or hex), here are two functions to
-switch between encoded and decoded strings forms::
-
- ppstring * ppstring_decoded (ppstring *string); // returns decoded string possibly with PDF escapes
- ppstring * ppstring_encoded (ppstring *string); // returns encoded string with no PDF escapes
- ppbyte * ppstring_decoded_data (ppstring *string);
- ppbyte * ppstring_encoded_data (ppstring *string);
-
-For hex strings, encoded form contains hex digits, while decoded form contains arbitrary bytes (the result of hex decoding).
-Plain strings usually contains printable ASCII characters, but they might contain any binary data.
-As with names, objects parser produces both forms. The raw form with PDF escapes (or raw hex form) the main one.
-Eg. when you access ``obj->string`` you always get the encoded form. At any moment you can switch to its alter ego.
-
-No matter if the string is plain or hex, if its first two bytes (decoded) are UTF16 BOM, the string is unicode.
-``ppstring`` object *knows* it is unicode or not::
-
- switch (ppstring_utf(string))
- {
- case PPSTRING_UTF16LE: // unicode string, utf16le
- break;
- case PPSTRING_UTF16BE: // unicode string, utf16be
- break;
- default: // no unicode
- }
-
-Or simply::
-
- if (ppstring_utf(string) != 0) {
- // handle unicode string
- }
-
-If the string is unicode, BOM remains the part of the string -- ``pplib`` parser does not strip it.
-Unicode or not, encoded or decoded, strings are always C-arrays of bytes and ``ppstring_size()``
-always returns the size in bytes.
-
-Array
------
-
-PDF arrays are represented as ``pparray`` type, which is C-array of ``ppobj`` structures.
-To get the size::
-
- size_t pparray_size(pparray *array) // macro, returns the number of array items
-
-To get ``ppobj *`` at a given index::
-
- ppobj * pparray_at(array, index) // macro, returns ppobj * (no index check)
- ppobj * pparray_get(array, index) // macro, returns ppobj * or NULL (with index check)
- ppobj * pparray_get_obj (pparray *array, size_t index); // function equiv to pparray_get()
-
-Iterating over array elements::
-
- pparray *array;
- size_t index, size;
- ppobj *obj;
- for (size = pparray_size(array), pparray_first(array, index, obj); index < size; pparray_next(index, obj))
- {
- // do something with index and obj
- }
-
-There is no magic first/next macros, just iteration over pointers. One could also use something like::
-
- for (index = 0, size = array->size; index < size; ++index)
- {
- obj = pparray_at(array, index);
- // do something with index and obj
- }
-
-When getting values from array and expecting a result of known type, use one of the following::
-
- int pparray_get_bool (pparray *array, size_t index, int *v); // get boolean value
- int pparray_get_int (pparray *array, size_t index, ppint *v); // get ppint value
- int pparray_get_uint (pparray *array, size_t index, ppuint *v); // get ppuint value
- int pparray_get_num (pparray *array, size_t index, ppnum *v); // get ppnum value
- ppname * pparray_get_name (pparray *array, size_t index); // get ppname * value
- ppstring * pparray_get_string (pparray *array, size_t index); // get ppstring * value
- pparray * pparray_get_array (pparray *array, size_t index); // get pparray * value
- ppdict * pparray_get_dict (pparray *array, size_t index); // get ppdict * value
- ppref * pparray_get_ref (pparray *array, size_t index); // get ppref * value
-
-As with ``ppobj_get_*`` suite, numeric types getters set the value of a given type and returns 1, if the type matches.
-Otherwise sets nothing and returns 0. Other getters return the value if the type matches, or NULL.
-
-Every function from ``pparray_get_*`` suite have its ``pparray_rget_*`` counterpart
-that dereferences indirect objects (as explained for ``ppobj_rget_*`` getters). Note that
-there is no ``pparray_get_stream()`` function, as streams in PDF are always indirect
-(may only reside in ``ref->object.stream``). To get the stream from array use::
-
- ppstream * pparray_rget_stream (pparray *array, size_t index);
-
-Dict
-----
-
-PDF dicts are represented as ``ppdict`` structure, which is C-array of ``ppobj`` with parallel
-C-array of ``ppname`` pointers. To get the size of a dict::
-
- size_t ppdict_size(ppdict *dict) // macro, returns the number of key-val pairs
-
-To get the value at a given index (integer)::
-
- ppobj * ppdict_at(ppdict *dict, index) // macro, no index bounds check
-
-To get the name (key) at a given index::
-
- ppname * ppdict_key(ppdict *dict, index) // macro, no index bounds check
-
-To iterate over dict key-val pairs::
-
- ppdict *dict;
- ppname **pkey;
- ppobj *obj;
-
- for (ppdict_first(dict, pkey, obj); *pkey != NULL; ppdict_next(pkey, obj))
- {
- // do something with *pkey and obj
- }
-
-There is no magic in first/next macros, just iteration through keys and values lists pointers.
-For convenient iteration, a list of keys is terminated with NULL, so in the code above ``*pkey != NULL``
-is used as the loop condition. One may also iterate via indices::
-
- ppdict *dict;
- size_t index, size;
- ppname *key;
- ppobj *obj;
- for (index = 0, size = ppdict_size(dict); index < size; ++index)
- {
- key = ppdict_key(dict, index);
- obj = ppdict_at(dict, index);
- // do something with key and obj
- }
-
-To get the object associated with a given name, use one of the following::
-
- ppobj * ppdict_get_obj (ppdict *dict, const char *name);
- int ppdict_get_bool (ppdict *dict, const char *name, int *v);
- int ppdict_get_int (ppdict *dict, const char *name, ppint *v);
- int ppdict_get_uint (ppdict *dict, const char *name, ppuint *v);
- int ppdict_get_num (ppdict *dict, const char *name, ppnum *v);
- ppname ppdict_get_name (ppdict *dict, const char *name);
- ppstring ppdict_get_string (ppdict *dict, const char *name);
- pparray * ppdict_get_array (ppdict *dict, const char *name);
- ppdict * ppdict_get_dict (ppdict *dict, const char *name);
- ppref * ppdict_get_ref (ppdict *dict, const char *name);
-
-Note that all getters accepts ``const char *`` as key, so it is ok to say::
-
- ppdict_rget_dict(dict, "Resources");
-
-(the most common use I guess). But to use ``ppname`` object as a key, one have to
-use data member::
-
- ppdic_rget_dict(dict, name->data); // ppname *name
-
-Every ``ppdict_get_*`` getter has ``ppdict_rget_*`` counterpart that dereferences
-indirect objects if necessary. Note that there is no ``ppdict_get_stream()`` function,
-but there is::
-
- ppstream * ppdict_rget_stream (ppdict *dict, const char *name);
-
-So far dicts comes with no names mapping, so by-name dict accessors perform a linear search
-through the keys list. PDF dicts are usually small.
-
-Stream
-------
-
-PDF streams are represented as ``ppstream`` objects. To get the stream dict::
-
- ppdict * ppstream_dict(ppstream *stream) // macro
-
-To read the stream data::
-
- uint8_t * ppstream_first (ppstream *stream, size_t *size, int decode);
- uint8_t * ppstream_next (ppstream *stream, size_t *size);
- void ppstream_done (ppstream *stream);
-
-Both ``first` and ``next`` functions return a chunk of stream data and sets the ``size`` of the chunk.
-``decode`` parameter tell the reader to decompress the stream (1) or return raw (0). A call to ``ppstream_next()``
-must be preceeded by ``ppstream_first()``. Once you're done with the stream, you have to call ``ppstream_done()``,
-no matter if the stream has been read to the end or not. The stream data iterator in use::
-
- uint8_t *data;
- size_t size;
- ppstream *stream;
- int decode = 1; // 1 - get decompressed, 0 - get raw
-
- for (data = ppstream_first(stream, &size, decode); data != NULL; data = ppstream_next(stream, &size))
- {
- // do something with data and its size
- }
- ppstream_done(stream);
-
-Every subsequent iterator call invalidates the previous reader output, so you have to utilize the returned chunk
-of data just after you ot that. So the following is wrong::
-
- data1 = ppstream_first(stream, &size, 1);
- data2 = ppstream_next(stream, &size);
- data3 = ppstream_next(stream, &size);
- some_output(data1, size);
- some_output(data2, size);
-
-The reader calls usually return the same pointer to internal buffer, just filled with a different data.
-``pplib`` allocates reasonably large buffer and fills that buffer on subsequent calls to the reader.
-
-If the source stream has no compression, using both ``decode == 1`` and ``decode == 0`` should give the same result.
-You can check if the stream is actually compressed with::
-
- ppstream_compressed(stream) // macro, returns non zero if /Filter is present
-
-It might be necessary to load the entire stream data at once::
-
- uint8_t * ppstream_all (ppstream *stream, size_t *size, int decode);
-
-If the initial buffer size is insufficient, it grows until the entire stream data is loaded. You must call
-``ppstream_done(stream)`` after using returned data.
-
-``ppstream_done()`` doesn't invalidate the stream object, it just closes its internal reader.
-The stream itself remains a valid object (eg. one can read it again if necessary),
-but the reader buffer is released. It is actually not freed but kept for future the reuse with that on some other stream,
-but you still need to mark it ready for reuse to avoid allocating a separate buffer for every stream you're going to read.
-
-Stream data readers will return ``NULL`` if you haven't close the previous reader process with ``ppstream_done()``. All below is wrong::
-
- data1 = ppstream_all(stream, &size, 1);
- data2 = ppstream_all(stream, &size, 1); // data2 == NULL
- // or
- data1 = ppstream_first(stream, &size, 1);
- data2 = ppstream_first(stream, &size, 1); // data2 == NULL
- // or
- data1 = ppstream_first(stream, &size, 1);
- data2 = ppstream_all(stream, &size, 1); // data2 == NULL
-
-To avoid unnecessary dependencies, ``pplib`` does not support image filters (``/DCT``, ``/JPX``, ``/JBIG``, ``/CCITT``).
-But it is ok to read the stream with ``decode`` set to 1 on such streams. ``pplib`` assumes that the image is the
-final/target stream form and just returns it as-is. Eg. in the case of JPEG (``/DCT`` filtered) image both calls should
-give the same results::
-
- ppstream_all(jpegstream, &jpegsize, 0); // don't decode, return what's there
- ppstream_all(jpegstream, &jpegsize, 1); // decode but found image filter, effectively the same
-
-A bit more about streams memory. As mentioned, ``pplib`` allocates buffers for stream readers. After ``ppstream_done()``,
-the stream no longer *owns* the buffer space. But the buffer may remain allocated, to be reused with future readers.
-``pplib`` keeps a pool of several buffers. This means, that when you use stream readers, ``pplib`` eats
-some memory (1MB or so) that is not freed, even if no streams are used. And even if you free all objects.
-If you suffer from this, you can optionally use a pair of functions::
-
- void ppstream_init_buffers (void);
- void ppstream_free_buffers (void);
-
-The first initializes buffers pool, unless done so far. Currently ``pplib`` cares of it before opening every stream reader,
-so it is not obligatory. The second frees a pool of buffers. The intended use is to call ``ppstream_init_buffers()`` once
-as kind of library initializer and to call ``ppstream_free_buffers()`` once, as the library finalizer.
-
-Filters
--------
-
-``ppstream`` knows its filter(s) and keps it as ``stream->filter``::
-
- // ppstream *stream;
- ppstream_filter *info = &stream->filter;
-
-``ppstream_filter`` is the following structure::
-
- typedef struct {
- ppstreamtp *filters; // c-array of filter identifiers (enum integers)
- ppdict **params; // c-array of ppdict pointers
- size_t count; // number of filters, length of the arrays (typically 1)
- } ppstream_filter;
-
-If ``count > 0`` then ``filters`` member is not NULL. Filters array keeps integer constants::
-
- PPSTREAM_BASE16 /* /ASCIIHexDecode */
- PPSTREAM_BASE85 /* /ASCII85Decode */
- PPSTREAM_RUNLENGTH /* /RunLengthDecode */
- PPSTREAM_FLATE /* /FlateDecode */
- PPSTREAM_LZW /* /LZWDecode */
- PPSTREAM_CCITT /* /CCITTFaxDecode */
- PPSTREAM_DCT /* /DCTDecode */
- PPSTREAM_JBIG2 /* /JBIG2Decode */
- PPSTREAM_JPX /* /JPXDecode */
- PPSTREAM_CRYPT /* /Crypt */
-
-Params array keeps corresponding filter parameters (``/DecodeParms``) if present. ``params`` member is not NULL
-if ``count > 0`` and the stream dict has ``/DecodeParms`` entry. Even if ``params`` is there,
-for every N-th filter, ``params[N]`` may be NULL (corresponding to PDF ``null``).
-
-``stream->filter`` keeps the source stream filter information, which may not correspond to the result of stream readers
-(``ppstream_first()``, ``ppstream_next()``, ``ppstream_all()``). The get the filters info relevant to the result from readers::
-
- void ppstream_filter_info (ppstream *stream, ppstream_filter *info, int decode);
-
-The function fills ``ppstream_filter`` structure according to the expected result from stream readers (example 3 shows
-how to use it to reconstruct ``/Filter`` and ``/DecodeParms`` when copying the stream to some other PDF).
-
-To convert filter identifier (``ppstreamtp``) to a corresponding PDF filter name::
-
- const char * ppstream_filter_name[];
-
-To covert ``ppname`` to filter identifier::
-
- int ppstream_filter_type (ppname filtername, ppstreamtp *filtertype);
- // returns 1 and sets filtertype if filtername is the proper filter name
-
-Additional information about the stream can be fetched from macros::
-
- ppstream_compressed(stream) /* stream->flags & (PPSTREAM_FILTER|PPSTREAM_IMAGE) */
- ppstream_filtered(stream) /* stream->flags & PPSTREAM_FILTER */
- ppstream_image(stream) /* stream->flags * PPSTREAM_IMAGE */
-
-``stream->flags`` is a binary sum of the following::
-
- PPSTREAM_FILTER /* set iff the stream filters list has one of: BASE16, BASE85, RUNLENGTH, FLATE, LZW */
- PPSTREAM_IMAGE /* set iff the stream filters list has one of: CCITT, DCT, JBIG2, JPX */
- PPSTREAM_ENCRYPTED /* set iff the stream is encrypted */
- PPSTREAM_ENCRYPTED_OWN /* set iff the stream has own CRYPT filter */
-
-Note that ``PPSTREAM_COMPRESSED`` is not there any longer, use ``ppstream_compressed()`` instead.
-And there is some more, see ``ppapi.h``.
-
-Ref
----
-
-Indirect objects are represented as ``ppref`` structure. To get the object that the
-reference refers to::
-
- ppobj * ppref_obj(ppref *ref) // macro
-
-``ppref`` structure also keeps the reference number and version, a pointer to cross reference table it belongs
-to and others, but I guess you won't need anything but the referenced object. ``pplib`` parser resolves references
-on-fly. So if there is a dict with indirect objects::
-
- <<
- /Type /Page
- /Resources 123 0 R
- ...
- >>
-
-the parser will produce ``ppdict`` with ``Resources`` key pointing the proper ``ppref *`` value.
-If you need more, access ``ppref`` members::
-
- struct ppref {
- ppobj object; // target object
- ppuint number, version; // identifiers
- size_t offset; // file offset (useless for you, may be zero for compressed objects)
- ppuint length; // the length of the original object data
- ppxref *xref; // cross reference table it belongs to
- };
-
-
-XRef
-----
-
-Cross reference table is exposed as ``ppxref`` (incomplete type, you can only oprate on its pointer).
-To get top document xref::
-
- ppxref * ppdoc_xref (ppdoc *pdf);
-
-To get previous (older) xref::
-
- ppxref * ppxref_prev (ppxref *xref);
-
-To find an object of a given refnumber::
-
- ppref * ppxref_find (ppxref *xref, ppuint refnumber);
-
-[Note: since pplib v0.98 in case of documents with incremental update, ``ppxref_find()`` returns
-the newest available version of a given object rather than the object in a given body.]
-
-PDF
----
-
-PDF document is represented as ``ppdoc`` structure (incomplete type, you can only operate on its pointer).
-To load a document from file::
-
- ppdoc * ppdoc_load (const char *filename);
-
-To load a document from file handle::
-
- ppdoc * ppdoc_filehandle (FILE *file, int closefile); // closefile 1 to fclose() on end
-
-To load a document from memory data::
-
- ppdoc * ppdoc_mem (const void *data, size_t size);
-
-The data is assumed to be a buffer allocated with ``malloc`` - it is freed when destroying ``ppdoc``.
-
-Both loaders returns ``NULL`` on failure.
-
-To free ``ppdoc`` and all objects it refers to::
-
- void ppdoc_free (ppdoc *pdf);
-
-So far we haven't mention about any explicit object reclaimers. There are no dedicated ``free`` functions
-for other objects. You don't allocate or free objects yourself. ``ppdoc`` object is an owner of all
-beings it refers to. It also means that every object described so far is alive as long as the containing
-``ppdoc`` is alive.
-
-To access main PDF dicts::
-
- ppdict * ppdoc_trailer(ppdoc *pdf); // returns top xref trailer dict
- ppdict * ppdoc_catalog(ppdoc *pdf); // returns catalog referred from the trailer
- ppdict * ppdoc_info(ppdoc *pdf); // returns info dict referred from the trailer
-
-To get the PDF version::
-
- const char * ppdoc_version_string (ppdoc *pdf); // version string
- int ppdoc_version_number (ppdoc *pdf, int *minor); // minor and major numbers
-
-To get the file size of the source PDF document::
-
- size_t ppdoc_file_size (ppdoc *pdf);
-
-To get the number of objects in all xrefs::
-
- ppuint ppdoc_objects (ppdoc *pdf);
-
-To get the approx usage of memory::
-
- size_t ppdoc_memory (ppdoc *pdf, size_t *waste);
-
-Encryption
-----------
-
-``pplib`` handles encrypted (password protected) documents. If a document is encrypted, most of strings and streams are ciphered.
-In that form they are unreadable and rather useless, you can't even rewrite such strings/streams as-is to a different PDF output.
-It is a common practise to *protect* documents with an empty password. Such documents remain readable in Acrobat (just opens them without prompting
-for a password), but some features (eg. printing) may restricted by the application.
-
-When ``pplib`` detects encryption, it follows Acrobat approach and first tries an empty password. If it succeeds, ``pplib`` proceeeds normally, providing
-an access to decrypted strings and streams, as if they weren't ciphered. If the document is protected with non-empty password, ``pplib`` gives
-a way to provide a password and proceed. Until you provide a password, ``ppdoc`` object returned by ``ppdoc_load()`` function has all object wntries
-set to ``null``.
-
-After loading a document you should check encryption status with::
-
- ppcrypt_status ppdoc_crypt_status (ppdoc *pdf);
-
-``ppcrypt_status`` (integer) may have the following values:
-
- ``PPCRYPT_NONE`` - no encryption, go ahead
- ``PPCRYPT_DONE`` - encryption present but password succeeded, go ahead
- ``PPCRYPT_PASS`` - encryption present, need non-empty password
- ``PPCRYPT_FAIL`` - invalid or unsupported encryption (eg. undocumented in pdf spec)
-
-If a password is needed, you can provide one with::
-
- ppcrypt_status ppdoc_crypt_pass (ppdoc *pdf, const void *userpass, size_t userpasslength,
- const void *ownerpass, size_t ownerpasslength);
-
-Well, yes, there are actually two passwords in encrypted documents. Relation between them is obscure to me, but enough
-to know that having one of them is enough to decrypt the document. If you know the password, you probably mean
-``userpass``, in which case you should put ``NULL`` as ``ownerpass``. The function returns ``PPCRYPT_DONE`` if the password
-succeeds and the previous status otherwise. Your custom loader function may look like that::
-
- ppdoc *pdf;
- pdf = ppdoc_load("file.pdf");
- if (pdf == NULL)
- return NULL;
- switch (ppdoc_crypt_status(pdf))
- {
- case PPCRYPT_NONE:
- case PPCRYPT_DONE:
- return pdf;
- case PPCRYPT_PASS:
- if (ppdoc_crypt_pass(pdf, "dummy", 5, NULL, 0) == PPCRYPT_DONE ||
- ppdoc_crypt_pass(pdf, NULL, 0, "dummy", 5) == PPCRYPT_DONE)
- return pdf;
- printf("sorry, password needed\n");
- ppdoc_free(pdf);
- return NULL;
- case PPCRYPT_FAIL:
- printf("sorry, encryption failed\n");
- ppdoc_free(pdf);
- return NULL;
- }
-
-[If you get ``PPCRYPT_FAIL`` it might mean *I failed*, so treat as a bug.]
-
-If you'd like to know what permissions are given/restricted to encrypted document::
-
- ppint ppdoc_permissions (ppdoc *pdf);
-
-Returned value can be queried with the following binary flags (you can verify with Acrobat *File -> Properties -> Security* tab)::
-
- PPDOC_ALLOW_PRINT // printing
- PPDOC_ALLOW_MODIFY // filling form fields, signing, creating template pages
- PPDOC_ALLOW_COPY // copying, copying for accessibility
- PPDOC_ALLOW_ANNOTS // filling form fields, copying, signing
- PPDOC_ALLOW_EXTRACT // contents copying for accessibility
- PPDOC_ALLOW_ASSEMBLY // (no effect)
- PPDOC_ALLOW_PRINT_HIRES // (no effect)
-
-``pplib`` does absolutelly nothing with permissions, it cares only to decrypt the document. As mentioned, encryption applies to strings
-and streams. ``pplib`` decrypt strings when parsing document objects, so the result you get is *normal* (not ciphered).
-Streams are decrypted whenever you access them. Even if you ask for a raw stream data, you'll get a raw (compressed) stream, but decrypted.
-So except the check to ``ppdoc_crypt_status()``, you shouldn't bother about encryption.
-
-In encrypted documents most of streams are encrypted. To check if a given stream is encrypted::
-
- ppstream_encrypted(stream) // macro, returns non-zero if encrypted
-
-Encryption is independent from compression, don't confuse with ``ppstream_compressed()``
-
-Pages
------
-
-Several helpers to deal with pages. To get the number of pages::
-
- ppuint ppdoc_page_count (ppdoc *pdf);
-
-To access the root pages tree node::
-
- ppref * ppdoc_pages(ppdoc *pdf);
-
-To get the page reference at a given index::
-
- ppref * ppdoc_page (ppdoc *pdf, ppuint index);
-
-``index`` is a page number. First page has number 1. For index out of bounds ``ppdoc_page()`` returns NULL.
-Iterating over pages using index from 1 to ``ppdoc_page_count()`` and calling ``ppdoc_page()`` on each iteration
-would be suboptimal. Here is a dedicted iterator for this::
-
- ppref * ppdoc_first_page (ppdoc *pdf);
- ppref * ppdoc_next_page (ppdoc *pdf);
-
-The iterator in use::
-
- ppdoc *pdf;
- ppref *ref;
- ppdict *dict;
- int pageno;
-
- pdf = ppdoc_load("file.pdf");
- for (ref = ppdoc_first_page(pdf), pageno = 1; ref != NULL; ref = ppdoc_next_page(pdf), ++pageno)
- {
- dict = ppref_obj(obj)->dict; // take for granted it is a dict
- // do something with the page dict
- }
-
-Functions related to pages return ``ppref *`` ensured to contain dict object, so you don't need sanity
-type checks here.
-
-Contents
---------
-
-PDF page contents can be given as a stream or array of streams. Here is a convenience iterator over page
-contents streams::
-
- ppstream * ppcontents_first (ppdict *dict);
- ppstream * ppcontents_next (ppdict *dict, ppstream *stream);
-
-A complete example of contents stream parser use is given below (example 2).
-But before we get there, we need to introduce ``ppcontext`` object. Conceptually,
-``ppcontext`` is an owner (memory handler) of objects created on demand (beyond the ``ppdoc``).
-So far used only with contents stream parser, which might produce quite some data that we want
-to release just after used. To create a new context::
-
- pcontext * ppcontext_new (void);
-
-It initializes a new context and its internal memory heap, taking about 64kB on start. After that,
-the context is ready to produce objects (contents parsing functions below). Once objects produced
-from a given context are no longer needed::
-
- void ppcontext_done (ppcontext *context);
-
-It restores the context to its initial state, as after ``ppcontext_new()``. It means that the context
-is ready to produce another bunch of beings (in the example below, all objects from the next page contents).
-Once the context is not needed anymore::
-
- void ppcontext_free (ppcontext *context);
-
-Now, contents stream parser functions take the context as an argument. Iterator form of contents stream parser
-that allows to process the contents operator by operator::
-
- ppobj * ppcontents_first_op (ppcontext *context, ppstream *stream, size_t *psize, ppname *pname);
- ppobj * ppcontents_next_op (ppcontext *context, ppstream *stream, size_t *psize, ppname *pname);
-
-Returned ``ppobj *`` is a pointer to operands list. ``*psize`` is the number of operands on stack.
-The operator itself is stored as ``*pname``.
-
-To parse the entire contents stream at once with no stop at every operator::
-
- ppobj * ppcontents_parse (ppcontext *context, ppstream *stream, size_t *psize);
-
-Returns probably quite long list of all parsed objects (operands and operatos) in one piece.
-The number of objects is stored to ``*psize``.
-
-[Contents may contain so called inline images, that breaks a simple scheme of operands / operator syntax::
-
- BI <keyval pairs> ID <binary image data> EI
-
-Contents parser treats this genuine triplet as a single piece, producing two operands (dict and string)
-followed by ``EI`` operator name.]
-
-Boxes
------
-
-Boxes (rectangles) in PDF are roughly 4-number arrays, but with a special intent.
-``pplib`` provides a basic interface for these special arrays::
-
- typedef struct {
- ppnum lx, ly, rx, ry;
- } pprect;
-
-This type is used only by helper functions - PDF parser is not aware of the rectangle type.
-To convert ``pparray`` to ``pprect``::
-
- pprect * pparray_to_rect (pparray *array, pprect *rect); // returns rect or NULL
-
-In example::
-
- pprect rect;
- if (pparray_to_rect(array, &rect) != NULL)
- ; // do something with rect
-
-To get some image bounding box::
-
- pprect * ppdict_get_rect (ppdict *dict, const char *name, pprect *rect);
- // eg. ppdict_get_rect(imagedict, "BBox", &rect)
-
-To get some page box::
-
- pprect * ppdict_get_box (ppdict *dict, const char *name, pprect *rect);
- // eg. ppdict_get_box(pagedict, "MediaBox", &rect)
-
-The later not only checks the pagedict, but also goes through parent page nodes.
-
-Transforms
-----------
-
-Transformations are given as 6-number arrays, but with a special intent.
-``pplib`` provides a basic interface for these special arrays::
-
- typedef struct {
- ppnum xx, xy, yx, yy, x, y;
- } ppmatrix;
-
-This type is used only by helper functions - PDF parser is not aware of the matrix type.
-To convert ``pparray`` to ``ppmatrix``::
-
- ppmatrix * pparray_to_matrix (pparray *array, ppmatrix *matrix);
-
-In example::
-
- ppmatrix matrix;
- if (pparray_to_matrix(array, &matrix) != NULL)
- ; // do something with matrix
-
-To get the matrix from dict::
-
- ppmatrix * ppdict_get_matrix (ppdict *dict, const char *name, ppmatrix *matrix);
- // eg. ppdict_get_matrix(imagedict, "Matrix", &matrix)
-
-Errors handling
----------------
-
-``pplib`` is not verbose, but might happen that it needs to log some error message, eg. when parsing
-of some PDF boject fails due to invalid offsets. By default, ``pplib`` prints the message to stdout, eg.::
-
- invalid 123 0 R object at offset 123123
-
-To replace the default logger, you can provide your own::
-
- void pplog_callback (pplogger_callback logger, void *alien);
-
-``pplogger_callback`` is a function::
-
- void your_callback (const char *message, void *alien);
-
-In example, to redirect messages to stderr you may define a function::
-
- void your_callback (const char *message, void *alien)
- {
- fprintf((FILE *)alien, "\nooops: %s\n", message);
- }
-
-Then set the callback somewhere before loading documents::
-
- pplog_callback(your_callback, stderr);
-
-(example 2 uses that).
-
-To set the default log messages prefix, eg. ``pplib:``, use::
-
- int pplog_prefix (const char *prefix)
-
-Default is empty. The function succeeds if provided prefix is reasonably short (less then 32 bytes).
diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_sources/ppapi.rst.txt b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_sources/ppapi.rst.txt deleted file mode 100644 index 5d1d2883e57..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_sources/ppapi.rst.txt +++ /dev/null @@ -1,937 +0,0 @@ - -``pplib`` -========= - -``pplib`` is a library for raw PDF access. It parses PDF documents and provides an interface to access document structures in C. - -C-API -===== - -Types ------ - -``pplib`` defines several C-types to represent PDF types: - -- ``ppint`` - signed integer (``int64_t``) -- ``ppnum`` - real number (double) -- ``ppname`` - PDF name -- ``ppstring`` - PDF string -- ``pparray`` - PDF array -- ``ppdict`` - PDF dict -- ``ppstream`` - PDF stream -- ``ppref`` - PDF indirect reference -- ``ppobj`` - a container of all above - -Among ``ppint`` and ``ppnum``, we also use ``ppuint`` - unsigned integer (machine word, alias to ``size_t``). - -Other API types: - -- ``ppdoc`` - PDF document -- ``ppxref`` - cross-references table -- ``ppcontext`` - ... later -- ``pprect`` - rectangle -- ``ppmatrix`` - matrix - -Integer, number, name and string are treated as simple types. -Names and strings are actually C-structures, but exposed to API as typedefs to ``const char *``. -Other types (array, dict, stream, reference, object container, xref, PDF) are C-structures, -and you operate it their pointers. So when you declare a simple type variable you say:: - - ppuint u; - ppnum n; - ppname name; - ppstring string; - ... - -And when you declare a compound type you operate on pointers:: - - ppobj *obj; - pparray *array; - ppdict *dict; - ppstream *stream; - ppref *ref; - ppdoc *pdf; - -Some of those C-types are defined in library header ``ppapi.h`` (complete types). Some others are incomplete -(eg. you can't say ``sizeof(ppdoc)`` or ``sizeof(ppxref)``). This is to avoid unnecesary dependencies in -the header. [At some points it's not clear to me what to hide and what to expose, will see.] The library itself -uses ``pplib.h`` but for auxilary applications including a standalone ``ppapi.h`` header should be enough. - -``pplib`` was designed having **read-only** PDF access in mind. Even if some structure is completelly exposed, -so that you can directly access its members, you should treat them as read-only. I don't make them ``const`` because -then all variable declarations would need to be ``const``, which is annoying, and I'd need some trickery in the library -internals to unconst. Besides, nothing is really const for C type casts. - -Object ------- - -A common container for all elementary PDF object types is ``ppobj`` structure. ``ppobj`` has a type identifier -(integer) and union of values:: - - struct ppobj { - ppobjtp type; - union { - ppint integer; - ppnum number; - ppname name; - ppstring string; - pparray *array; - ppdict *dict; - ppstream *stream; - ppref *ref; - void *any; - }; - }; - -Object type is one of constants (enum):: - - PPNONE - PPNULL - PPBOOL - PPINT - PPNUM - PPNAME - PPSTRING - PPARRAY - PPDICT - PPSTREAM - PPREF - -The type determines the structure member you're allowed to access:: - - ppobj *obj; - ... - switch (obj->type) - { - case PPNONE: // shouldn't actually happen, indicates some failure - break; - case PPNULL: // valid PDF null object, no value - break; - case PPBOOL: // do something with obj->integer (ppint), value 0 or 1 - break; - case PPINT: // do something with obj->integer (ppint) - break; - case PPNUM: // do something with obj->number (ppnum) - break; - case PPNAME: // do something with obj->name (ppname) - break; - case PPSTRING: // do something with obj->string (ppstring) - break; - case PPARRAY: // do something with obj->array (pparray *) - break; - case PPDICT: // do something with obj->dict (ppdict *) - break; - case PPSTREAM: // do something with obj->stream (ppstream *) - break; - case PPREF: // do something with obj->ref (ppref *) - break; - } - -More often then not you know exactly what type of object value is expected, in which case -you may use one of the following macros:: - - // returns 1 if o->type is PPNULL - int ppobj_get_null(o) \ - - // if o->type is PPBOOL, sets int v to 0 or 1 and returns 1, 0 otherwise - int ppobj_get_bool(o, v) - - // if o->type is PPINT, sets ppint v and returns 1, 0 otherwise - int ppobj_get_int(o, v) - - // if o->type is PPINT and >= 0, sets ppuint v and returns 1, 0 otherwise - int ppobj_get_uint(o, v) - - // if o->type is PPNUM or PPINT, sets ppnum v and returns 1, 0 otherwise - int ppobj_get_num(o, v) - - // if o->type is PPNAME returns the name, NULL otherwise - ppname ppobj_get_name(o) - - // if o->type is PPSTRING returns the string, NULL otherwise - ppstring ppobj_get_string(o) - - // if o->type is PPARRAY returns the array, NULL otherwise - pparray * ppobj_get_array(o) - - // if o->type is PPDICT returns the dict, NULL otherwise - ppdict * ppobj_get_dict(o) - - // if o->type is PPSTREAM returns the stream, NULL otherwise - ppstream * ppobj_get_stream(o) - - // if o->type is PPREF returns the reference, NULL otherwise - ppref * ppobj_get_ref(o) - -Note the coercion from integer to real number, but not reverse. In practise, whenever you expect a real number, -you should also handle integer (eg. '1' used instead of '1.0'). - -It is a common case that the object is given as an indirect reference, but what you actually -want is not the reference, but the object referred by it. Here is a helper for it:: - - // if o->type is PPREF, returns what the reference points, otherwise returns o - ppobj * ppobj_rget_obj(o) - -Also every ``ppobj_get_*`` macro has ``ppobj_rget_*`` counterpart that makes a check -for the expected type, but if the object is PPREF, it jumps to the target object. -So for example ``ppobj_rget_dict(obj)`` will return dict if ``obj`` is of type PPDICT -or if it is of type PPREF and ``obj->ref`` hosts an object of type PPDICT. - -Names ------ - -PDF names are represented as ``ppname``. -I find it convenient to have ``ppname`` type pretending ``const char *``. This allows to use ``ppname`` -in all C-style string functions like ``printf("%s", name)``. - -Be aware, however, that ``ppname`` is actually a C-structure. It is perfectly ok to cast ``ppname`` to ``const char *``:: - - ppname name; - ... - (const char *)name; - -But reverse is forbidden:: - - const char *cstr = "cstring"; - ... - (ppname)cstr; // expect segmentation fault soon - -For convenient use in C, names are ``'\0'`` terminated. But to get the length of name better always use -``ppname_size()`` macro. ``ppname`` object knows its size, don't use ``strlen()``:: - - size_t ppname_size(ppname name); // macro, returns length of name in bytes - -In current implementation names are not hashed anyhow, so name-to-name comparison is not smarter than ``memcmp()``. -Use macros:: - - int ppname_is(ppname name, "literal"); // to compare ppname with C-literal string - int ppname_eq(ppname name, ppname other); // to compare ppname with a different name - -If you'll use ``pplib`` to parse contents streams, you may need to distinguish names from operators -(more precisely executable names). Names in PDF are preceeded by '/', executable names aren't. In both -cases PDF parser will produce ``ppname`` but can be distingushed with:: - - int ppname_exec(ppname name); // returns non-zero if name is executable - -Names are kept in their raw form, with possible PDF specific escapes (in text below we call it **encoded** form). -Leading '/' is omitted, though. One may need a decoded name, with no PDF escapes. -A pair of functions provides a simple interface to switch between those two forms:: - - ppname ppname_decoded (ppname name); // returns decoded (unescaped) form of the name - ppname ppname_encoded (ppname name); // returns encoded (escaped) form of the name - -In pretty most cases PDF names contains only letters (no special characters, no escapes), so decoded and encoded forms are identical. -In that case both functions simply return the argument. It is ok to call ``ppname_decoded()`` on already decoded form -and ``ppname_encoded()`` on already encoded form. Both forms are produced by PDF objects parser, so accessing ``ppname`` alter ego -in whatever direction needs no extra decoding or allocation costs. - -String ------- - -PDF strings have the same internal construction as names, so most of names description above applies to strings as well. -``ppstring`` is a typedef of ``const char *``, roughly ``'\0'`` terminiated C-string. To get the size of the string:: - - size_t ppstring_size(ppstring string); // macro, returns the length of the string in bytes - -Strings are provided in their raw form, preserving PDF specific escapes, but with no -``()`` or ``<>`` delims. To distinguish plain strings from hex strings:: - - int ppstring_hex(ppstring string); // macro, returns non zero if hex string - -Or if you prefer:: - - switch (ppstring_type(string)) - { - case PPSTRING_PLAIN: // literal string, surrounded by ``(`` and ``)`` in PDF - break; - case PPSTRING_BASE16: // hex string, surrounded by ``<`` and ``>`` in PDF - break; - case PPSTRING_BASE85: // base85 string surrounded by ``<~`` and ``~>`` in PDF - break; - } - -The last is actually Postscript specific, not used in PDF, but I think it might appear in contents streams... -No matter how the string is given in PDF (plain or hex), here are two functions to -switch between encoded and decoded strings forms:: - - ppstring ppstring_decoded (ppstring string); // returns decoded string possibly with PDF escapes - ppstring ppstring_encoded (ppstring string); // returns encoded string with no PDF escapes - -For hex strings, encoded form contains hex digits, while decoded form contains arbitrary bytes (the result of hex decoding). -Plain strings usually contains printable ASCII characters, but they might contain any binary data. -As with names, objects parser produces both forms. The raw form with PDF escapes (or raw hex form) is considered the main one. -Eg. when you access ``obj->string`` you always get the encoded form. At any moment you can switch to its alter ego. - -No matter if the string is plain or hex, if its first two bytes (decoded) are UTF16 BOM, the string -is considered unicode. ``ppstring`` object *knows* it is unicode or not:: - - switch (ppstring_utf(string)) - { - case PPSTRING_UTF16LE: // unicode string, utf16le - break; - case PPSTRING_UTF16BE: // unicode string, utf16be - break; - default: // no unicode - } - -Or simply:: - - if (ppstring_utf(string) != 0) { - // handle unicode string - } - -If the string is unicode, BOM remains the part of the string -- ``pplib`` parser does not strip it. -Unicode or not, encoded or decoded, strings are always C-arrays of bytes and ``ppstring_size()`` -always returns the size in bytes. - -Array ------ - -PDF arrays are represented as ``pparray`` type, which is C-array of ``ppobj`` structures. -To get the size:: - - size_t pparray_size(pparray *array) // macro, returns the number of array items - -To get ``ppobj *`` at a given index:: - - ppobj * pparray_at(array, index) // macro, returns ppobj * (no index check) - ppobj * pparray_get(array, index) // macro, returns ppobj * or NULL (with index check) - ppobj * pparray_get_obj (pparray *array, size_t index); // function equiv to pparray_get() - -Iterating over array elements:: - - pparray *array; - size_t index, size; - ppobj *obj; - for (size = pparray_size(array), pparray_first(array, index, obj); index < size; pparray_next(index, obj)) - { - // do something with index and obj - } - -There is no magic first/next macros, just iteration over pointers. One could also use something like:: - - for (index = 0, size = array->size; index < size; ++index) - { - obj = pparray_at(array, index); - // do something with index and obj - } - -When getting values from array and expecting a result of known type, use one of the following:: - - int pparray_get_bool (pparray *array, size_t index, int *v); // get boolean value - int pparray_get_int (pparray *array, size_t index, ppint *v); // get ppint value - int pparray_get_uint (pparray *array, size_t index, ppuint *v); // get ppuint value - int pparray_get_num (pparray *array, size_t index, ppnum *v); // get ppnum value - ppname pparray_get_name (pparray *array, size_t index); // get ppname value - ppstring pparray_get_string (pparray *array, size_t index); // get ppstring value - pparray * pparray_get_array (pparray *array, size_t index); // get pparray * value - ppdict * pparray_get_dict (pparray *array, size_t index); // get ppdict * value - ppref * pparray_get_ref (pparray *array, size_t index); // get ppref * value - -As with ``ppobj_get_*`` suite, numeric types getters set the value of a given type and returns 1, if the type matches. -Otherwise sets nothing and returns 0. Other getters return the value if the type matches, or NULL. - -Every function from ``pparray_get_*`` suite have its ``pparray_rget_*`` counterpart that -that dereferences indirect objects (as explained for ``ppobj_rget_*`` getters). Note that -there is no ``pparray_get_stream()`` function, as streams in PDF are always indirect. -To get the stream from array use:: - - ppstream * pparray_rget_stream (pparray *array, size_t index); - -Dict ----- - -PDF dicts are represented as ``ppdict`` structure, which is C-array of ``ppobj`` with parallel -C-array of ``ppname`` pointers. To get the size of a dict:: - - size_t ppdict_size(ppdict *dict) // macro, returns the number of key-val pairs - -To get the value at a given index (integer):: - - ppobj * ppdict_at(ppdict *dict, index) // macro, no index check - -To get the name (key) at a given index:: - - ppname ppdict_key(ppdict *dict, index) // macro, no index check - -To iterate over dict key-val pairs:: - - ppdict *dict; - ppname *pkey; - ppobj *obj; - - for (ppdict_first(dict, pkey, obj); *pkey != NULL; ppdict_next(pkey, obj)) - { - // do something with *pkey and obj - } - -There is no magic in first/next macros, just iteration through keys and values lists pointers. -For convenient iteration, a list of keys is terminated with NULL, so in the code above ``*pkey != NULL`` -is used as the loop condition. One may also iterate via indices:: - - ppdict *dict; - size_t index, size; - ppname key; - ppobj *obj; - for (index = 0, size = ppdict_size(dict); index < size; ++index) - { - key = ppdict_key(dict, index); - obj = ppdict_at(dict, index); - // do something with key and obj - } - -To get the object associated with a given name, use one of the following:: - - ppobj * ppdict_get_obj (ppdict *dict, const char *name); - int ppdict_get_bool (ppdict *dict, const char *name, int *v); - int ppdict_get_int (ppdict *dict, const char *name, ppint *v); - int ppdict_get_uint (ppdict *dict, const char *name, ppuint *v); - int ppdict_get_num (ppdict *dict, const char *name, ppnum *v); - ppname ppdict_get_name (ppdict *dict, const char *name); - ppstring ppdict_get_string (ppdict *dict, const char *name); - pparray * ppdict_get_array (ppdict *dict, const char *name); - ppdict * ppdict_get_dict (ppdict *dict, const char *name); - ppref * ppdict_get_ref (ppdict *dict, const char *name); - -Note that all getters accepts ``const char *`` as key, so it is ok to say:: - - ppdict_rget_dict(dict, "Resources"); - -as well as:: - - ppdic_rget_dict(dict, name); // ppname name - -Every ``ppdict_get_*`` getter has ``ppdict_rget_*`` counterpart that dereferences -indirect objects if necessary. Note that there is no ``ppdict_get_stream()`` function, -but there is:: - - ppstream * ppdict_rget_stream (ppdict *dict, const char *name); - -So far dicts comes with no names mapping, so by-name dict accessors perform a linear search -through the keys list. PDF dicts are usually small, so it is fast enough. -Building names lookup for every dict in PDF makes no sense I think, as ``pplib`` applications -will query just several dicts I guess.. However, some apps may extensively query -resources, which may refer to hundreds of objects (eg. images). So some mapping for dicts -is still considered. - -Stream ------- - -PDF streams are represented as ``ppstream`` objects. To get the stream dict:: - - ppdict * ppstream_dict(ppstream *stream) // macro - -To read the stream data:: - - uint8_t * ppstream_first (ppstream *stream, size_t *size, int decode); - uint8_t * ppstream_next (ppstream *stream, size_t *size); - void ppstream_done (ppstream *stream); - -Both ``first` and ``next`` functions return a chunk of stream data and sets the ``size`` of the chunk. -``decode`` parameter tell the reader to decompress the stream (1) or return raw (0). A call to ``ppstream_next()`` -must be preceeded by ``ppstream_first()``. Once you're done with the stream, you have to call ``ppstream_done()``, -no matter if the stream has been read to the end or not. The stream data iterator in use:: - - uint8_t *data; - size_t size; - ppstream *stream; - int decode = 1; // 1 - get decompressed, 0 - get raw - - for (data = ppstream_first(stream, &size, decode); data != NULL; data = ppstream_next(stream, &size)) - { - // do something with data and its size - } - ppstream_done(stream); - -Every subsequent iterator call invalidates the previous reader output, so you have to utilize the returned chunk -of data just after you ot that. So the following is wrong:: - - data1 = ppstream_first(stream, &size, 1); - data2 = ppstream_next(stream, &size); - data3 = ppstream_next(stream, &size); - some_output(data1, size); - some_output(data2, size); - -The reader calls usually return the same pointer to internal buffer, just filled with a different data. -``pplib`` allocates reasonably large buffer and fills that buffer on subsequent calls to the reader. - -If the source stream has no compression, using both ``decode == 1`` and ``decode == 0`` should give the same result. -You can check if the stream is actually compressed with:: - - ppstream_compressed(stream) // macro, returns non zero if /Filter is present - -It might be necessary to load the entire stream data at once:: - - uint8_t * ppstream_all (ppstream *stream, size_t *size, int decode); - -If the initial buffer size is insufficient, it grows until the entire stream data is loaded. You must call -``ppstream_done(stream)`` after using returned data. - -``ppstream_done()`` doesn't invalidate the stream object, it just closes its internal reader. -The stream itself remains a valid object (eg. one can read it again if necessary), -but the reader buffer is released. It is actually not freed but kept for future the reuse with that on some other stream, -but you still need to mark it ready for reuse to avoid allocating a separate buffer for every stream you're going to read. - -Stream data readers will return ``NULL`` if you haven't close the previous reader process with ``ppstream_done()``. All below is wrong:: - - data1 = ppstream_all(stream, &size, 1); - data2 = ppstream_all(stream, &size, 1); // data2 == NULL - // or - data1 = ppstream_first(stream, &size, 1); - data2 = ppstream_first(stream, &size, 1); // data2 == NULL - // or - data1 = ppstream_first(stream, &size, 1); - data2 = ppstream_all(stream, &size, 1); // data2 == NULL - -To avoid unnecessary dependencies, ``pplib`` does not support image filters (``/DCT``, ``/JPX``, ``/JBIG``, ``/CCITT``). -But it is ok to read the stream with ``decode`` set to 1 on such streams. ``pplib`` assumes that the image is the -final/target stream form and just returns it as-is. Eg. in the case of JPEG (``/DCT`` filtered) image both calls should -give the same results:: - - ppstream_all(jpegstream, &jpegsize, 0); // don't decode, return what's there - ppstream_all(jpegstream, &jpegsize, 1); // decode but found image filter, effectively the same - -A bit more about streams memory. As mentioned, ``pplib`` allocates buffers for stream readers. After ``ppstream_done()``, -the stream no longer *owns* the buffer space. But the buffer may remain allocated, to be reused with future readers. -``pplib`` keeps a pool of several buffers. This means, that when you use stream readers, ``pplib`` eats -some memory (1MB or so) that is not freed, even if no streams are used. And even if you free all objects. -If you suffer from this, you can optionally use a pair of functions:: - - void ppstream_init_buffers (void); - void ppstream_free_buffers (void); - -The first initializes buffers pool, unless done so far. Currently ``pplib`` cares of it before opening every stream reader, -so it is not obligatory. The second frees a pool of buffers. The intended use is to call ``ppstream_init_buffers()`` once -as kind of library initializer and to call ``ppstream_free_buffers()`` once, as the library finalizer. - -Filters -------- - -In version v1.00 (20190916) ``ppstream`` API has been extended with filters information. -``ppstream`` knows its filter(s) and keps it as ``stream->filter``:: - - // ppstream *stream; - ppstream_filter *info = &stream->filter; - -``ppstream_filter`` is the following structure:: - - typedef struct { - ppstreamtp *filters; // c-array of filter identifiers (enum integers) - ppdict **params; // c-array of ppdict pointers - size_t count; // number of filters, length of the arrays (typically 1) - } ppstream_filter; - -If ``count > 0`` then ``filters`` member is not NULL. Filters array keeps integer constants:: - - PPSTREAM_BASE16 /* /ASCIIHexDecode */ - PPSTREAM_BASE85 /* /ASCII85Decode */ - PPSTREAM_RUNLENGTH /* /RunLengthDecode */ - PPSTREAM_FLATE /* /FlateDecode */ - PPSTREAM_LZW /* /LZWDecode */ - PPSTREAM_CCITT /* /CCITTFaxDecode */ - PPSTREAM_DCT /* /DCTDecode */ - PPSTREAM_JBIG2 /* /JBIG2Decode */ - PPSTREAM_JPX /* /JPXDecode */ - PPSTREAM_CRYPT /* /Crypt */ - -Params array keeps corresponding filter parameters (``/DecodeParms``) if present. ``params`` member is not NULL -if ``count > 0`` and the stream dict has ``/DecodeParms`` entry. Even if ``params`` is there, -for every N-th filter, ``params[N]`` may be NULL (corresponding to PDF ``null``). - -``stream->filter`` keeps the source stream filter information, which may not correspond to the result of stream readers -(``ppstream_first()``, ``ppstream_next()``, ``ppstream_all()``). The get the filters info relevant to the result from readers:: - - void ppstream_filter_info (ppstream *stream, ppstream_filter *info, int decode); - -The function fills ``ppstream_filter`` structure according to the expected result from stream readers (example 3 shows -how to use it to reconstruct ``/Filter`` and ``/DecodeParms`` when copying the stream to some other PDF). - -To convert filter identifier (``ppstreamtp``) to a corresponding PDF filter name:: - - const char * ppstream_filter_name[]; - -To covert ``ppname`` to filter identifier:: - - int ppstream_filter_type (ppname filtername, ppstreamtp *filtertype); - // returns 1 and sets filtertype if filtername is the proper filter name - -Additional information about the stream can be fetched from macros:: - - ppstream_compressed(stream) /* stream->flags & (PPSTREAM_FILTER|PPSTREAM_IMAGE) */ - ppstream_filtered(stream) /* stream->flags & PPSTREAM_FILTER */ - ppstream_image(stream) /* stream->flags * PPSTREAM_IMAGE */ - -``stream->flags`` is a binary sum of the following:: - - PPSTREAM_FILTER /* set iff the stream filters list has one of: BASE16, BASE85, RUNLENGTH, FLATE, LZW */ - PPSTREAM_IMAGE /* set iff the stream filters list has one of: CCITT, DCT, JBIG2, JPX */ - PPSTREAM_ENCRYPTED /* set iff the stream is encrypted */ - PPSTREAM_ENCRYPTED_OWN /* set iff the stream has own CRYPT filter */ - -Note that ``PPSTREAM_COMPRESSED`` is not there any longer, use ``ppstream_compressed()`` instead. -And there is some more, see ``ppapi.h``. - -Ref ---- - -Indirect objects are represented as ``ppref`` structure. To get the object that the -reference refers to:: - - ppobj * ppref_obj(ppref *ref) // macro - -``ppref`` structure also keeps the reference number and version, a pointer to cross reference table it belongs -to and others, but I guess you won't need anything but the referenced object. ``pplib`` parser resolves references -on-fly. So if there is a dict with indirect objects:: - - << - /Type /Page - /Resources 123 0 R - ... - >> - -the parser will produce ``ppdict`` with ``Resources`` key pointing the proper ``ppref *`` value. -If you need more, access ``ppref`` members:: - - struct ppref { - ppobj object; // target object - ppuint number, version; // identifiers - size_t offset; // file offset (useless for you, may be zero for compressed objects) - ppuint length; // the length of the original object data - ppxref *xref; // cross reference table it belongs to - }; - - -XRef ----- - -Cross reference table is exposed as ``ppxref`` (incomplete type, you can only oprate on its pointer). -To get top document xref:: - - ppxref * ppdoc_xref (ppdoc *pdf); - -To get previous (older) xref:: - - ppxref * ppxref_prev (ppxref *xref); - -To find an object of a given refnumber:: - - ppref * ppxref_find (ppxref *xref, ppuint refnumber); - -[Note: since pplib v0.98 in case of documents with incremental update, ``ppxref_find()`` returns -the newest available version of a given object rather than the object in a given body.] - -PDF ---- - -PDF document is represented as ``ppdoc`` structure (incomplete type, you can only operate on its pointer). -To load a document from file:: - - ppdoc * ppdoc_load (const char *filename); - -To load a document from memory data:: - - ppdoc * ppdoc_mem (const void *data, size_t size); - -The data is assumed to be a buffer allocated with ``malloc`` - it is freed when destroying ``ppdoc``. - -Both loaders returns ``NULL`` on failure. - -To free ``ppdoc`` and all objects it refers to:: - - void ppdoc_free (ppdoc *pdf); - -So far we haven't mention about any explicit object reclaimers. There are no dedicated ``free`` functions -for other objects. You don't allocate or free objects yourself. ``ppdoc`` object is an owner of all -beings it refers to. It also means that every object described so far is alive as long as the containing -``ppdoc`` is alive. - -To access main PDF dicts:: - - ppdict * ppdoc_trailer(ppdoc *pdf); // returns top xref trailer dict - ppdict * ppdoc_catalog(ppdoc *pdf); // returns catalog referred from the trailer - ppdict * ppdoc_info(ppdoc *pdf); // returns info dict referred from the trailer - -To get the PDF version:: - - const char * ppdoc_version_string (ppdoc *pdf); // version string - int ppdoc_version_number (ppdoc *pdf, int *minor); // minor and major numbers - -To get the file size of the source PDF document:: - - size_t ppdoc_file_size (ppdoc *pdf); - -To get the number of objects in all xrefs:: - - ppuint ppdoc_objects (ppdoc *pdf); - -To get the approx usage of memory:: - - size_t ppdoc_memory (ppdoc *pdf, size_t *waste); - -Encryption ----------- - -``pplib`` handles encrypted (password protected) documents. If a document is encrypted, most of strings and streams are ciphered. -In that form they are unreadable and rather useless, you can't even rewrite such strings/streams as-is to a different PDF output. -It is a common practise to *protect* documents with an empty password. Such documents remain readable in Acrobat (just opens them without prompting -for a password), but some features (eg. printing) may restricted by the application. - -When ``pplib`` detects encryption, it follows Acrobat approach and first tries an empty password. If it succeeds, ``pplib`` proceeeds normally, providing -an access to decrypted strings and streams, as if they weren't ciphered. If the document is protected with non-empty password, ``pplib`` gives -a way to provide a password and proceed. Until you provide a password, ``ppdoc`` object returned by ``ppdoc_load()`` function has all object wntries -set to ``null``. - -After loading a document you should check encryption status with:: - - ppcrypt_status ppdoc_crypt_status (ppdoc *pdf); - -``ppcrypt_status`` (integer) may have the following values: - - ``PPCRYPT_NONE`` - no encryption, go ahead - ``PPCRYPT_DONE`` - encryption present but password succeeded, go ahead - ``PPCRYPT_PASS`` - encryption present, need non-empty password - ``PPCRYPT_FAIL`` - invalid or unsupported encryption (eg. undocumented in pdf spec) - -If a password is needed, you can provide one with:: - - ppcrypt_status ppdoc_crypt_pass (ppdoc *pdf, const void *userpass, size_t userpasslength, - const void *ownerpass, size_t ownerpasslength); - -Well, yes, there are actually two passwords in encrypted documents. Relation between them is obscure to me, but enough -to know that having one of them is enough to decrypt the document. If you know the password, you probably mean -``userpass``, in which case you should put ``NULL`` as ``ownerpass``. The function returns ``PPCRYPT_DONE`` if the password -succeeds and the previous status otherwise. Your custom loader function may look like that:: - - ppdoc *pdf; - pdf = ppdoc_load("file.pdf"); - if (pdf == NULL) - return NULL; - switch (ppdoc_crypt_status(pdf)) - { - case PPCRYPT_NONE: - case PPCRYPT_DONE: - return pdf; - case PPCRYPT_PASS: - if (ppdoc_crypt_pass(pdf, "dummy", 5, NULL, 0) == PPCRYPT_DONE || - ppdoc_crypt_pass(pdf, NULL, 0, "dummy", 5) == PPCRYPT_DONE) - return pdf; - printf("sorry, password needed\n"); - ppdoc_free(pdf); - return NULL; - case PPCRYPT_FAIL: - printf("sorry, encryption failed\n"); - ppdoc_free(pdf); - return NULL; - } - -[If you get ``PPCRYPT_FAIL`` it might mean *I failed*, so treat as a bug.] - -If you'd like to know what permissions are given/restricted to encrypted document:: - - ppint ppdoc_permissions (ppdoc *pdf); - -Returned value can be queried with the following binary flags (you can verify with Acrobat *File -> Properties -> Security* tab):: - - PPDOC_ALLOW_PRINT // printing - PPDOC_ALLOW_MODIFY // filling form fields, signing, creating template pages - PPDOC_ALLOW_COPY // copying, copying for accessibility - PPDOC_ALLOW_ANNOTS // filling form fields, copying, signing - PPDOC_ALLOW_EXTRACT // contents copying for accessibility - PPDOC_ALLOW_ASSEMBLY // (no effect) - PPDOC_ALLOW_PRINT_HIRES // (no effect) - -``pplib`` does absolutelly nothing with permissions, it cares only to decrypt the document. As mentioned, encryption applies to strings -and streams. ``pplib`` decrypt strings when parsing document objects, so the result you get is *normal* (not ciphered). -Streams are decrypted whenever you access them. Even if you ask for a raw stream data, you'll get a raw (compressed) stream, but decrypted. -So except the check to ``ppdoc_crypt_status()``, you shouldn't bother about encryption. - -In encrypted documents most of streams are encrypted. To check if a given stream is encrypted:: - - ppstream_encrypted(stream) // macro, returns non-zero if encrypted - -Encryption is independent from compression, don't confuse with ``ppstream_compressed()`` - -Pages ------ - -Several helpers to deal with pages. To get the number of pages:: - - ppuint ppdoc_page_count (ppdoc *pdf); - -To access the root pages tree node:: - - ppref * ppdoc_pages(ppdoc *pdf); - -To get the page reference at a given index:: - - ppref * ppdoc_page (ppdoc *pdf, ppuint index); - -``index`` is a page number. First page has number 1. For index out of bounds ``ppdoc_page()`` returns NULL. -Iterating over pages using index from 1 to ``ppdoc_page_count()`` and calling ``ppdoc_page()`` on each iteration -would be suboptimal. Here is a dedicted iterator for this:: - - ppref * ppdoc_first_page (ppdoc *pdf); - ppref * ppdoc_next_page (ppdoc *pdf); - -The iterator in use:: - - ppdoc *pdf; - ppref *ref; - ppdict *dict; - int pageno; - - pdf = ppdoc_load("file.pdf"); - for (ref = ppdoc_first_page(pdf), pageno = 1; ref != NULL; ref = ppdoc_next_page(pdf), ++pageno) - { - dict = ppref_obj(obj)->dict; // take for granted it is a dict - // do something with the page dict - } - -Functions related to pages return ``ppref *`` ensured to contain dict object, so you don't need sanity -type checks here. - -Contents --------- - -PDF page contents can be given as a stream or array of streams. Here is a convenience iterator over page -contents streams:: - - ppstream * ppcontents_first (ppdict *dict); - ppstream * ppcontents_next (ppdict *dict, ppstream *stream); - -A complete example of contents stream parser use is given below (example 2). -But before we get there, we need to introduce ``ppcontext`` object. Conceptually, -``ppcontext`` is an owner (memory handler) of objects created on demand (beyond the ``ppdoc``). -So far used only with contents stream parser, which might produce quite some data that we want -to release just after used. To create a new context:: - - pcontext * ppcontext_new (void); - -It initializes a new context and its internal memory heap, taking about 64kB on start. After that, -the context is ready to produce objects (contents parsing functions below). Once objects produced -from a given context are no longer needed:: - - void ppcontext_done (ppcontext *context); - -It restores the context to its initial state, as after ``ppcontext_new()``. It means that the context -is ready to produce another bunch of beings (in the example below, all objects from the next page contents). -Once the context is not needed anymore:: - - void ppcontext_free (ppcontext *context); - -Now, contents stream parser functions take the context as an argument. Iterator form of contents stream parser -that allows to process the contents operator by operator:: - - ppobj * ppcontents_first_op (ppcontext *context, ppstream *stream, size_t *psize, ppname *pname); - ppobj * ppcontents_next_op (ppcontext *context, ppstream *stream, size_t *psize, ppname *pname); - -Returned ``ppobj *`` is a pointer to operands list. ``*psize`` is the number of operands on stack. -The operator itself is stored as ``*pname``. - -To parse the entire contents stream at once with no stop at every operator:: - - ppobj * ppcontents_parse (ppcontext *context, ppstream *stream, size_t *psize); - -Returns probably quite long list of all parsed objects (operands and operatos) in one piece. -The number of objects is stored to ``*psize``. - -[Contents may contain so called inline images, that breaks a simple scheme of operands / operator syntax:: - - BI <keyval pairs> ID <binary image data> EI - -Contents parser treats this genuine triplet as a single piece, producing two operands (dict and string) -followed by ``EI`` operator name.] - -Boxes ------ - -Boxes (rectangles) in PDF are roughly 4-number arrays, but with a special intent. -``pplib`` provides a basic interface for these special arrays:: - - typedef struct { - ppnum lx, ly, rx, ry; - } pprect; - -This type is used only by helper functions - PDF parser is not aware of the rectangle type. -To convert ``pparray`` to ``pprect``:: - - pprect * pparray_to_rect (pparray *array, pprect *rect); // returns rect or NULL - -In example:: - - pprect rect; - if (pparray_to_rect(array, &rect) != NULL) - ; // do something with rect - -To get some image bounding box:: - - pprect * ppdict_get_rect (ppdict *dict, const char *name, pprect *rect); - // eg. ppdict_get_rect(imagedict, "BBox", &rect) - -To get some page box:: - - pprect * ppdict_get_box (ppdict *dict, const char *name, pprect *rect); - // eg. ppdict_get_box(pagedict, "MediaBox", &rect) - -The later not only checks the pagedict, but also goes through parent page nodes. - -Transforms ----------- - -Transformations are given as 6-number arrays, but with a special intent. -``pplib`` provides a basic interface for these special arrays:: - - typedef struct { - ppnum xx, xy, yx, yy, x, y; - } ppmatrix; - -This type is used only by helper functions - PDF parser is not aware of the matrix type. -To convert ``pparray`` to ``ppmatrix``:: - - ppmatrix * pparray_to_matrix (pparray *array, ppmatrix *matrix); - -In example:: - - ppmatrix matrix; - if (pparray_to_matrix(array, &matrix) != NULL) - ; // do something with matrix - -To get the matrix from dict:: - - ppmatrix * ppdict_get_matrix (ppdict *dict, const char *name, ppmatrix *matrix); - // eg. ppdict_get_matrix(imagedict, "Matrix", &matrix) - -Errors handling ---------------- - -``pplib`` is not verbose, but might happen that it needs to log some error message, eg. when parsing -of some PDF boject fails due to invalid offsets. By default, ``pplib`` prints the message to stdout, eg.:: - - invalid 123 0 R object at offset 123123 - -To replace the default logger, you can provide your own:: - - void pplog_callback (pplogger_callback logger, void *alien); - -``pplogger_callback`` is a function:: - - void your_callback (const char *message, void *alien); - -In example, to redirect messages to stderr you may define a function:: - - void your_callback (const char *message, void *alien) - { - fprintf((FILE *)alien, "\nooops: %s\n", message); - } - -Then set the callback somewhere before loading documents:: - - pplog_callback(your_callback, stderr); - -(example 2 uses that). - -To set the default log messages prefix, eg. ``pplib:``, use:: - - int pplog_prefix (const char *prefix) - -Default is empty. The function succeeds if provided prefix is reasonably short (less then 32 bytes). diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_sources/ppcode.rst.txt b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_sources/ppcode.rst.txt deleted file mode 100644 index ebe92465d80..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_sources/ppcode.rst.txt +++ /dev/null @@ -1,101 +0,0 @@ -Examples
-========
-
-Example 1
----------
-
-.. literalinclude:: ../src/pptest1.c
-
-Example 2
----------
-
-.. literalinclude:: ../src/pptest2.c
-
-Example 3
----------
-
-.. literalinclude:: ../src/pptest3.c
-
-ppapi.h
--------
-
-.. literalinclude:: ../src/ppapi.h
-
-
-Changes
-=======
-
-v0.97
------
-First release integrated with luatex sources, plus portability changes from Luigi.
-
-v0.98
------
-Changed references resolving in case of incremental updates; tech notes ppxref_find() in ppxref.c.
-
-v0.99
------
-Fixed streams handling; null characters should NOT be gobbled after "stream" keyword
-
-v1.00
------
-Fixed streams handling (Luigi); object streams updated before other streams
-Revised streams handling, ppstream API extended
-
-v1.01
------
-Fixed names handling (thanks Hans); digits after '#' weren't skipped
-
-v1.02
------
-Fixed page finder (thanks Luigi)
-
-v1.03
------
-Fixed TIFF predictor (thanks folks)
-
-v1.04
------
-Fixed TIFF predictor for ARM
-
-v1.05
------
-Attempt to fix parsing inline images crap
-
-v2.00
------
-Deep rework on allocators.
-Deep rework on strings and names.
-
-v2.01
------
-Fixed invalid stream buffer handling; ``iof_discard()`` no longer reclaims the source (``filter->next``) filter.
-Sanity alignment adjustments in ``iof_heap``.
-
-v2.02
------
-Fixed incorrect encoding of strings alterego with octal escaping, thanks Luigi.
-On Hans request added ``ppdoc_filehandle()`` function and ``ppdoc_file()`` macro for loading ppdoc from ``FILE *``.
-
-v2.03
------
-Fixed alloc/free of ``ppdoc`` heap; ``ppdoc`` is now mallocated, no longer taken from its own heap. Again, thanks Luigi.
-Fixed warnings about dereferencing type-puned pointers, and some others.
-
-v2.04
------
-Byte lookups for names/strings loaders are now int8_t, as char might be signed.
-ppdoc_first_page() / ppdoc_next_page() iterator now handles a case when /Kids array is empty.
-Fixed generating keys for encrypted streams; ppstring_internal() returns the string of the proper size.
-More stream tests in pptest3.c.
-Some rework on md5 and sha2.
-
-v2.05
------
-uint8_t instead of ppbyte in internals; ppbyte intent is "the most natural 8-bit integer", so it is 'char',
-but internally we almost always need uint8_t (char may be signed or not..)
-
-TODO
-====
-- external streams (egzotic)
-
diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_sources/pplib.rst.txt b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_sources/pplib.rst.txt deleted file mode 100644 index 763dc79cf62..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_sources/pplib.rst.txt +++ /dev/null @@ -1,15 +0,0 @@ -.. pplib documentation master file, created by
- sphinx-quickstart on Thu Jun 07 14:23:51 2018.
- You can adapt this file completely to your liking, but it should at least
- contain the root `toctree` directive.
-
-pplib
-=====
-
-.. toctree::
- :maxdepth: 2
-
- ppnew
- ppapi-2.x
- ppapi-1.x
- ppcode
diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_sources/ppnew.rst.txt b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_sources/ppnew.rst.txt deleted file mode 100644 index 4a0a3b42887..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_sources/ppnew.rst.txt +++ /dev/null @@ -1,103 +0,0 @@ -
-1.x vs 2.x
-==========
-
-Allocation
-----------
-
-Allocation mechanisms has been revised. All objects are still allocated from a private storage (called heap),
-but now the heap serves properly aligned memory chunks. Implementation of the heap is (hopefully) platform
-independent, so all ``ARM_COMPLIANT`` checks has been removed. Some details work differently on 32/64-bit
-machines, this distinction seems inevitable. Allocation related code has been moved to ``util/utilmem*.c`` files.
-
-[There are actually 3 different allocators - **heap**, **stock**, and **pool** - each of which has 4 variants
-for 1, 2, 4 and 8 bytes alignment. So far ``pplib`` uses only the **heap**, but I want to have this part
-in a single place for a while. More notes about allocators in ``utilmemallc.h``.]
-
-``pplib`` uses two heaps:
-
-* bytes heap - providing 2-bytes aligned memory chunks for byte data
-* structures heap - providing 8-bytes aligned chunks for all structures
-
-2-bytes alignment of byte data is caused by implementation details / limits, ``pplib`` doesn't make a use of it
-(could be unaligned as well). All the structures are stored in 8-bytes aligned chunks on both 32 and 64-bit machines
-(in some structures we use ``double`` and ``int64_t``, which generally needs 8-bytes).
-
-Strings And Names
------------------
-
-So far, both ``ppname`` and ``ppstring`` were aliases to ``char *`` with an extra structure hidden just below
-the data address. The idea was to make a string or name usable whenever chars array can, at the cost of some
-pointers trickery. Both names and strings keep an information about pdf-encoded data, as well as plain bytes data.
-I implemented this feature once ``pplib 1.0`` was almost done, and to avoid a revolution, I made that with yet
-another trick. This all was dirty and caused lots of alignment issues.
-
-Now ``ppstring`` and ``ppname`` are **structures**, keeping data and size members, pretty much like ``pparray``::
-
- struct ppname {
- ppbyte *data;
- size_t size;
- ppname *alterego;
- int flags;
- };
-
- struct ppstring {
- ppbyte *data;
- size_t size;
- ppstring *alterego;
- int flags;
- };
-
-Data member is a pointer to (2-bytes aligned) bytes array -- ``ppbyte *``. ``ppbyte`` is an alias to ``char``.
-``pplib`` makes no assumptions about ``ppbyte`` signedness. [I'd prefer to have ``uint8_t``, but better
-keep that in sync with ``ppdict_get_*`` suite, which accepts ``char *``. Using ``"string literals"``
-with ``ppdict_get`` function is the most common case, I guess.]
-
-``ppname_size()`` and ``ppstring_size() `` now have
-trivial ``ppname_data()`` and ``ppstring_data()`` counterparts::
-
- #define ppname_size(name) ((name)->size)
- #define ppname_data(name) ((name)->data)
-
- #define ppstring_size(string) ((string)->size)
- #define ppstring_data(string) ((string)->data)
-
-Switching between encoded / decoded variants is made via explicit ``alterego`` member. If encoded and decoded forms
-are identical, then ``self->alfterego == self`` (never NULL). Helper functions for that::
-
- PPAPI ppname * ppname_decoded (ppname *name);
- PPAPI ppname * ppname_encoded (ppname *name);
-
- PPAPI ppbyte * ppname_decoded_data (ppname *name);
- PPAPI ppbyte * ppname_encoded_data (ppname *name);
-
- PPAPI ppstring * ppstring_decoded (ppstring *string);
- PPAPI ppstring * ppstring_encoded (ppstring *string);
-
- PPAPI ppbyte * ppstring_decoded_data (ppstring *string);
- PPAPI ppbyte * ppstring_encoded_data (ppstring *string);
-
-Since ``ppname`` and ``ppstring`` are now structures, all API functions returning name/string or taking name/string
-as an argument, now take **a pointer to name/string**. Watch out for ``ppdict_get_*`` functions suite. They still accept
-``const char *`` key as an argument, but ``ppname`` type can no longer be used there::
-
- ppname key;
- ppdict_get_something(dict, key); // wrong
- ppdict_get_something(dict, key.data); // ok
-
- ppname *pkey;
- ppdict_get_something(dict, (const char *)pkey); // wrong
- ppdict_get_something(dict, pkey->data); // ok
-
-Consequently, functions / macros that used pointer to ``ppname`` (``ppdict_first()`` / ``ppdict_next()``),
-now needs ``ppname **pname``.
-
-Cleanups
---------
-
-Some of unused utils were removed. There is still some code in utils part that is not used by the library,
-but I need this tollbox in many other places and don't want to maintain two versions.
-
-Some unification in integer types; ``size_t`` seems to be the best choice for and integer representing machine
-word (``unsigned long`` is not long enough on windows), less utils dependencies, less compiler warnings.
-
diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/ajax-loader.gif b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/ajax-loader.gif Binary files differdeleted file mode 100644 index 61faf8cab23..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/ajax-loader.gif +++ /dev/null diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/background_b01.png b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/background_b01.png Binary files differdeleted file mode 100644 index 353f26dde08..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/background_b01.png +++ /dev/null diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/basic.css b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/basic.css deleted file mode 100644 index 0807176ec0c..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/basic.css +++ /dev/null @@ -1,676 +0,0 @@ -/* - * basic.css - * ~~~~~~~~~ - * - * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/* -- main layout ----------------------------------------------------------- */ - -div.clearer { - clear: both; -} - -/* -- relbar ---------------------------------------------------------------- */ - -div.related { - width: 100%; - font-size: 90%; -} - -div.related h3 { - display: none; -} - -div.related ul { - margin: 0; - padding: 0 0 0 10px; - list-style: none; -} - -div.related li { - display: inline; -} - -div.related li.right { - float: right; - margin-right: 5px; -} - -/* -- sidebar --------------------------------------------------------------- */ - -div.sphinxsidebarwrapper { - padding: 10px 5px 0 10px; -} - -div.sphinxsidebar { - float: left; - width: 230px; - margin-left: -100%; - font-size: 90%; - word-wrap: break-word; - overflow-wrap : break-word; -} - -div.sphinxsidebar ul { - list-style: none; -} - -div.sphinxsidebar ul ul, -div.sphinxsidebar ul.want-points { - margin-left: 20px; - list-style: square; -} - -div.sphinxsidebar ul ul { - margin-top: 0; - margin-bottom: 0; -} - -div.sphinxsidebar form { - margin-top: 10px; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - -div.sphinxsidebar #searchbox form.search { - overflow: hidden; -} - -div.sphinxsidebar #searchbox input[type="text"] { - float: left; - width: 80%; - padding: 0.25em; - box-sizing: border-box; -} - -div.sphinxsidebar #searchbox input[type="submit"] { - float: left; - width: 20%; - border-left: none; - padding: 0.25em; - box-sizing: border-box; -} - - -img { - border: 0; - max-width: 100%; -} - -/* -- search page ----------------------------------------------------------- */ - -ul.search { - margin: 10px 0 0 20px; - padding: 0; -} - -ul.search li { - padding: 5px 0 5px 20px; - background-image: url(file.png); - background-repeat: no-repeat; - background-position: 0 7px; -} - -ul.search li a { - font-weight: bold; -} - -ul.search li div.context { - color: #888; - margin: 2px 0 0 30px; - text-align: left; -} - -ul.keywordmatches li.goodmatch a { - font-weight: bold; -} - -/* -- index page ------------------------------------------------------------ */ - -table.contentstable { - width: 90%; - margin-left: auto; - margin-right: auto; -} - -table.contentstable p.biglink { - line-height: 150%; -} - -a.biglink { - font-size: 1.3em; -} - -span.linkdescr { - font-style: italic; - padding-top: 5px; - font-size: 90%; -} - -/* -- general index --------------------------------------------------------- */ - -table.indextable { - width: 100%; -} - -table.indextable td { - text-align: left; - vertical-align: top; -} - -table.indextable ul { - margin-top: 0; - margin-bottom: 0; - list-style-type: none; -} - -table.indextable > tbody > tr > td > ul { - padding-left: 0em; -} - -table.indextable tr.pcap { - height: 10px; -} - -table.indextable tr.cap { - margin-top: 10px; - background-color: #f2f2f2; -} - -img.toggler { - margin-right: 3px; - margin-top: 3px; - cursor: pointer; -} - -div.modindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -div.genindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -/* -- domain module index --------------------------------------------------- */ - -table.modindextable td { - padding: 2px; - border-collapse: collapse; -} - -/* -- general body styles --------------------------------------------------- */ - -div.body { - min-width: 450px; - max-width: 800px; -} - -div.body p, div.body dd, div.body li, div.body blockquote { - -moz-hyphens: auto; - -ms-hyphens: auto; - -webkit-hyphens: auto; - hyphens: auto; -} - -a.headerlink { - visibility: hidden; -} - -h1:hover > a.headerlink, -h2:hover > a.headerlink, -h3:hover > a.headerlink, -h4:hover > a.headerlink, -h5:hover > a.headerlink, -h6:hover > a.headerlink, -dt:hover > a.headerlink, -caption:hover > a.headerlink, -p.caption:hover > a.headerlink, -div.code-block-caption:hover > a.headerlink { - visibility: visible; -} - -div.body p.caption { - text-align: inherit; -} - -div.body td { - text-align: left; -} - -.first { - margin-top: 0 !important; -} - -p.rubric { - margin-top: 30px; - font-weight: bold; -} - -img.align-left, .figure.align-left, object.align-left { - clear: left; - float: left; - margin-right: 1em; -} - -img.align-right, .figure.align-right, object.align-right { - clear: right; - float: right; - margin-left: 1em; -} - -img.align-center, .figure.align-center, object.align-center { - display: block; - margin-left: auto; - margin-right: auto; -} - -.align-left { - text-align: left; -} - -.align-center { - text-align: center; -} - -.align-right { - text-align: right; -} - -/* -- sidebars -------------------------------------------------------------- */ - -div.sidebar { - margin: 0 0 0.5em 1em; - border: 1px solid #ddb; - padding: 7px 7px 0 7px; - background-color: #ffe; - width: 40%; - float: right; -} - -p.sidebar-title { - font-weight: bold; -} - -/* -- topics ---------------------------------------------------------------- */ - -div.topic { - border: 1px solid #ccc; - padding: 7px 7px 0 7px; - margin: 10px 0 10px 0; -} - -p.topic-title { - font-size: 1.1em; - font-weight: bold; - margin-top: 10px; -} - -/* -- admonitions ----------------------------------------------------------- */ - -div.admonition { - margin-top: 10px; - margin-bottom: 10px; - padding: 7px; -} - -div.admonition dt { - font-weight: bold; -} - -div.admonition dl { - margin-bottom: 0; -} - -p.admonition-title { - margin: 0px 10px 5px 0px; - font-weight: bold; -} - -div.body p.centered { - text-align: center; - margin-top: 25px; -} - -/* -- tables ---------------------------------------------------------------- */ - -table.docutils { - border: 0; - border-collapse: collapse; -} - -table.align-center { - margin-left: auto; - margin-right: auto; -} - -table caption span.caption-number { - font-style: italic; -} - -table caption span.caption-text { -} - -table.docutils td, table.docutils th { - padding: 1px 8px 1px 5px; - border-top: 0; - border-left: 0; - border-right: 0; - border-bottom: 1px solid #aaa; -} - -table.footnote td, table.footnote th { - border: 0 !important; -} - -th { - text-align: left; - padding-right: 5px; -} - -table.citation { - border-left: solid 1px gray; - margin-left: 1px; -} - -table.citation td { - border-bottom: none; -} - -/* -- figures --------------------------------------------------------------- */ - -div.figure { - margin: 0.5em; - padding: 0.5em; -} - -div.figure p.caption { - padding: 0.3em; -} - -div.figure p.caption span.caption-number { - font-style: italic; -} - -div.figure p.caption span.caption-text { -} - -/* -- field list styles ----------------------------------------------------- */ - -table.field-list td, table.field-list th { - border: 0 !important; -} - -.field-list ul { - margin: 0; - padding-left: 1em; -} - -.field-list p { - margin: 0; -} - -.field-name { - -moz-hyphens: manual; - -ms-hyphens: manual; - -webkit-hyphens: manual; - hyphens: manual; -} - -/* -- hlist styles ---------------------------------------------------------- */ - -table.hlist td { - vertical-align: top; -} - - -/* -- other body styles ----------------------------------------------------- */ - -ol.arabic { - list-style: decimal; -} - -ol.loweralpha { - list-style: lower-alpha; -} - -ol.upperalpha { - list-style: upper-alpha; -} - -ol.lowerroman { - list-style: lower-roman; -} - -ol.upperroman { - list-style: upper-roman; -} - -dl { - margin-bottom: 15px; -} - -dd p { - margin-top: 0px; -} - -dd ul, dd table { - margin-bottom: 10px; -} - -dd { - margin-top: 3px; - margin-bottom: 10px; - margin-left: 30px; -} - -dt:target, span.highlighted { - background-color: #fbe54e; -} - -rect.highlighted { - fill: #fbe54e; -} - -dl.glossary dt { - font-weight: bold; - font-size: 1.1em; -} - -.optional { - font-size: 1.3em; -} - -.sig-paren { - font-size: larger; -} - -.versionmodified { - font-style: italic; -} - -.system-message { - background-color: #fda; - padding: 5px; - border: 3px solid red; -} - -.footnote:target { - background-color: #ffa; -} - -.line-block { - display: block; - margin-top: 1em; - margin-bottom: 1em; -} - -.line-block .line-block { - margin-top: 0; - margin-bottom: 0; - margin-left: 1.5em; -} - -.guilabel, .menuselection { - font-family: sans-serif; -} - -.accelerator { - text-decoration: underline; -} - -.classifier { - font-style: oblique; -} - -abbr, acronym { - border-bottom: dotted 1px; - cursor: help; -} - -/* -- code displays --------------------------------------------------------- */ - -pre { - overflow: auto; - overflow-y: hidden; /* fixes display issues on Chrome browsers */ -} - -span.pre { - -moz-hyphens: none; - -ms-hyphens: none; - -webkit-hyphens: none; - hyphens: none; -} - -td.linenos pre { - padding: 5px 0px; - border: 0; - background-color: transparent; - color: #aaa; -} - -table.highlighttable { - margin-left: 0.5em; -} - -table.highlighttable td { - padding: 0 0.5em 0 0.5em; -} - -div.code-block-caption { - padding: 2px 5px; - font-size: small; -} - -div.code-block-caption code { - background-color: transparent; -} - -div.code-block-caption + div > div.highlight > pre { - margin-top: 0; -} - -div.code-block-caption span.caption-number { - padding: 0.1em 0.3em; - font-style: italic; -} - -div.code-block-caption span.caption-text { -} - -div.literal-block-wrapper { - padding: 1em 1em 0; -} - -div.literal-block-wrapper div.highlight { - margin: 0; -} - -code.descname { - background-color: transparent; - font-weight: bold; - font-size: 1.2em; -} - -code.descclassname { - background-color: transparent; -} - -code.xref, a code { - background-color: transparent; - font-weight: bold; -} - -h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { - background-color: transparent; -} - -.viewcode-link { - float: right; -} - -.viewcode-back { - float: right; - font-family: sans-serif; -} - -div.viewcode-block:target { - margin: -1px -10px; - padding: 0 10px; -} - -/* -- math display ---------------------------------------------------------- */ - -img.math { - vertical-align: middle; -} - -div.body div.math p { - text-align: center; -} - -span.eqno { - float: right; -} - -span.eqno a.headerlink { - position: relative; - left: 0px; - z-index: 1; -} - -div.math:hover a.headerlink { - visibility: visible; -} - -/* -- printout stylesheet --------------------------------------------------- */ - -@media print { - div.document, - div.documentwrapper, - div.bodywrapper { - margin: 0 !important; - width: 100%; - } - - div.sphinxsidebar, - div.related, - div.footer, - #top-link { - display: none; - } -}
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/bizstyle.css b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/bizstyle.css deleted file mode 100644 index 0464a74e637..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/bizstyle.css +++ /dev/null @@ -1,490 +0,0 @@ -/* - * bizstyle.css_t - * ~~~~~~~~~~~~~~ - * - * Sphinx stylesheet -- business style theme. - * - * :copyright: Copyright 2011-2014 by Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -@import url("basic.css"); - -/* -- page layout ----------------------------------------------------------- */ - -body { - font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', - 'Verdana', sans-serif; - font-size: 14px; - letter-spacing: -0.01em; - line-height: 150%; - text-align: center; - background-color: white; - background-image: url(background_b01.png); - color: black; - padding: 0; - border-right: 1px solid #336699; - border-left: 1px solid #336699; - - margin: 0px 40px 0px 40px; -} - -div.document { - background-color: white; - text-align: left; - background-repeat: repeat-x; - - -moz-box-shadow: 2px 2px 5px #000; - -webkit-box-shadow: 2px 2px 5px #000; -} - -div.bodywrapper { - margin: 0 0 0 240px; - border-left: 1px solid #ccc; -} - -div.body { - margin: 0; - padding: 0.5em 20px 20px 20px; -} - -div.related { - font-size: 1em; - - -moz-box-shadow: 2px 2px 5px #000; - -webkit-box-shadow: 2px 2px 5px #000; -} - -div.related ul { - background-color: #336699; - height: 100%; - overflow: hidden; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; -} - -div.related ul li { - color: white; - margin: 0; - padding: 0; - height: 2em; - float: left; -} - -div.related ul li.right { - float: right; - margin-right: 5px; -} - -div.related ul li a { - margin: 0; - padding: 0 5px 0 5px; - line-height: 1.75em; - color: #fff; -} - -div.related ul li a:hover { - color: #fff; - text-decoration: underline; -} - -div.sphinxsidebarwrapper { - padding: 0; -} - -div.sphinxsidebar { - margin: 0; - padding: 0.5em 12px 12px 12px; - width: 210px; - font-size: 1em; - text-align: left; -} - -div.sphinxsidebar h3, div.sphinxsidebar h4 { - margin: 1em 0 0.5em 0; - font-size: 1em; - padding: 0.1em 0 0.1em 0.5em; - color: white; - border: 1px solid #336699; - background-color: #336699; -} - -div.sphinxsidebar h3 a { - color: white; -} - -div.sphinxsidebar ul { - padding-left: 1.5em; - margin-top: 7px; - padding: 0; - line-height: 130%; -} - -div.sphinxsidebar ul ul { - margin-left: 20px; -} - -div.sphinxsidebar input { - border: 1px solid #336699; -} - -div.footer { - background-color: white; - color: #336699; - padding: 3px 8px 3px 0; - clear: both; - font-size: 0.8em; - text-align: right; - border-bottom: 1px solid #336699; - - -moz-box-shadow: 2px 2px 5px #000; - -webkit-box-shadow: 2px 2px 5px #000; -} - -div.footer a { - color: #336699; - text-decoration: underline; -} - -/* -- body styles ----------------------------------------------------------- */ - -p { - margin: 0.8em 0 0.5em 0; -} - -a { - color: #336699; - text-decoration: none; -} - -a:hover { - color: #336699; - text-decoration: underline; -} - -div.body a { - text-decoration: underline; -} - -h1, h2, h3 { - color: #336699; -} - -h1 { - margin: 0; - padding: 0.7em 0 0.3em 0; - font-size: 1.5em; -} - -h2 { - margin: 1.3em 0 0.2em 0; - font-size: 1.35em; - padding-bottom: .5em; - border-bottom: 1px solid #336699; -} - -h3 { - margin: 1em 0 -0.3em 0; - font-size: 1.2em; - padding-bottom: .3em; - border-bottom: 1px solid #CCCCCC; -} - -div.body h1 a, div.body h2 a, div.body h3 a, -div.body h4 a, div.body h5 a, div.body h6 a { - color: black!important; -} - -h1 a.anchor, h2 a.anchor, h3 a.anchor, -h4 a.anchor, h5 a.anchor, h6 a.anchor { - display: none; - margin: 0 0 0 0.3em; - padding: 0 0.2em 0 0.2em; - color: #aaa!important; -} - -h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, -h5:hover a.anchor, h6:hover a.anchor { - display: inline; -} - -h1 a.anchor:hover, h2 a.anchor:hover, h3 a.anchor:hover, h4 a.anchor:hover, -h5 a.anchor:hover, h6 a.anchor:hover { - color: #777; - background-color: #eee; -} - -a.headerlink { - color: #c60f0f!important; - font-size: 1em; - margin-left: 6px; - padding: 0 4px 0 4px; - text-decoration: none!important; -} - -a.headerlink:hover { - background-color: #ccc; - color: white!important; -} - -cite, code, tt { - font-family: 'Consolas', 'Deja Vu Sans Mono', - 'Bitstream Vera Sans Mono', monospace; - font-size: 0.95em; - letter-spacing: 0.01em; -} - -code { - background-color: #F2F2F2; - border-bottom: 1px solid #ddd; - color: #333; -} - -code.descname, code.descclassname, code.xref { - border: 0; -} - -hr { - border: 1px solid #abc; - margin: 2em; -} - -a code { - border: 0; - color: #CA7900; -} - -a code:hover { - color: #2491CF; -} - -pre { - background-color: transparent !important; - font-family: 'Consolas', 'Deja Vu Sans Mono', - 'Bitstream Vera Sans Mono', monospace; - font-size: 0.95em; - letter-spacing: 0.015em; - line-height: 120%; - padding: 0.5em; - border-right: 5px solid #ccc; - border-left: 5px solid #ccc; -} - -pre a { - color: inherit; - text-decoration: underline; -} - -td.linenos pre { - padding: 0.5em 0; -} - -div.quotebar { - background-color: #f8f8f8; - max-width: 250px; - float: right; - padding: 2px 7px; - border: 1px solid #ccc; -} - -div.topic { - background-color: #f8f8f8; -} - -table { - border-collapse: collapse; - margin: 0 -0.5em 0 -0.5em; -} - -table td, table th { - padding: 0.2em 0.5em 0.2em 0.5em; -} - -div.admonition { - font-size: 0.9em; - margin: 1em 0 1em 0; - border: 3px solid #cccccc; - background-color: #f7f7f7; - padding: 0; -} - -div.admonition p { - margin: 0.5em 1em 0.5em 1em; - padding: 0; -} - -div.admonition li p { - margin-left: 0; -} - -div.admonition pre, div.warning pre { - margin: 0; -} - -div.highlight { - margin: 0.4em 1em; -} - -div.admonition p.admonition-title { - margin: 0; - padding: 0.1em 0 0.1em 0.5em; - color: white; - border-bottom: 3px solid #cccccc; - font-weight: bold; - background-color: #165e83; -} - -div.danger { border: 3px solid #f0908d; background-color: #f0cfa0; } -div.error { border: 3px solid #f0908d; background-color: #ede4cd; } -div.warning { border: 3px solid #f8b862; background-color: #f0cfa0; } -div.caution { border: 3px solid #f8b862; background-color: #ede4cd; } -div.attention { border: 3px solid #f8b862; background-color: #f3f3f3; } -div.important { border: 3px solid #f0cfa0; background-color: #ede4cd; } -div.note { border: 3px solid #f0cfa0; background-color: #f3f3f3; } -div.hint { border: 3px solid #bed2c3; background-color: #f3f3f3; } -div.tip { border: 3px solid #bed2c3; background-color: #f3f3f3; } - -div.danger p.admonition-title, div.error p.admonition-title { - background-color: #b7282e; - border-bottom: 3px solid #f0908d; -} - -div.caution p.admonition-title, -div.warning p.admonition-title, -div.attention p.admonition-title { - background-color: #f19072; - border-bottom: 3px solid #f8b862; -} - -div.note p.admonition-title, div.important p.admonition-title { - background-color: #f8b862; - border-bottom: 3px solid #f0cfa0; -} - -div.hint p.admonition-title, div.tip p.admonition-title { - background-color: #7ebea5; - border-bottom: 3px solid #bed2c3; -} - -div.admonition ul, div.admonition ol, -div.warning ul, div.warning ol { - margin: 0.1em 0.5em 0.5em 3em; - padding: 0; -} - -div.versioninfo { - margin: 1em 0 0 0; - border: 1px solid #ccc; - background-color: #DDEAF0; - padding: 8px; - line-height: 1.3em; - font-size: 0.9em; -} - -.viewcode-back { - font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', - 'Verdana', sans-serif; -} - -div.viewcode-block:target { - background-color: #f4debf; - border-top: 1px solid #ac9; - border-bottom: 1px solid #ac9; -} - -p.versionchanged span.versionmodified { - font-size: 0.9em; - margin-right: 0.2em; - padding: 0.1em; - background-color: #DCE6A0; -} - -/* -- table styles ---------------------------------------------------------- */ - -table.docutils { - margin: 1em 0; - padding: 0; - border: 1px solid white; - background-color: #f7f7f7; -} - -table.docutils td, table.docutils th { - padding: 1px 8px 1px 5px; - border-top: 0; - border-left: 0; - border-right: 1px solid white; - border-bottom: 1px solid white; -} - -table.docutils td p { - margin-top: 0; - margin-bottom: 0.3em; -} - -table.field-list td, table.field-list th { - border: 0 !important; - word-break: break-word; -} - -table.footnote td, table.footnote th { - border: 0 !important; -} - -th { - color: white; - text-align: left; - padding-right: 5px; - background-color: #82A0BE; -} - -div.literal-block-wrapper div.code-block-caption { - background-color: #EEE; - border-style: solid; - border-color: #CCC; - border-width: 1px 5px; -} - -/* WIDE DESKTOP STYLE */ -@media only screen and (min-width: 1176px) { -body { - margin: 0 40px 0 40px; -} -} - -/* TABLET STYLE */ -@media only screen and (min-width: 768px) and (max-width: 991px) { -body { - margin: 0 40px 0 40px; -} -} - -/* MOBILE LAYOUT (PORTRAIT/320px) */ -@media only screen and (max-width: 767px) { -body { - margin: 0; -} -div.bodywrapper { - margin: 0; - width: 100%; - border: none; -} -div.sphinxsidebar { - display: none; -} -} - -/* MOBILE LAYOUT (LANDSCAPE/480px) */ -@media only screen and (min-width: 480px) and (max-width: 767px) { -body { - margin: 0 20px 0 20px; -} -} - -/* RETINA OVERRIDES */ -@media -only screen and (-webkit-min-device-pixel-ratio: 2), -only screen and (min-device-pixel-ratio: 2) { -} - -/* -- end ------------------------------------------------------------------- */
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/bizstyle.js b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/bizstyle.js deleted file mode 100644 index 6614fe388d1..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/bizstyle.js +++ /dev/null @@ -1,41 +0,0 @@ -// -// bizstyle.js -// ~~~~~~~~~~~ -// -// Sphinx javascript -- for bizstyle theme. -// -// This theme was created by referring to 'sphinxdoc' -// -// :copyright: Copyright 2012-2014 by Sphinx team, see AUTHORS. -// :license: BSD, see LICENSE for details. -// -$(document).ready(function(){ - if (navigator.userAgent.indexOf('iPhone') > 0 || - navigator.userAgent.indexOf('Android') > 0) { - $("li.nav-item-0 a").text("Top"); - } - - $("div.related:first ul li:not(.right) a").slice(1).each(function(i, item){ - if (item.text.length > 20) { - var tmpstr = item.text - $(item).attr("title", tmpstr); - $(item).text(tmpstr.substr(0, 17) + "..."); - } - }); - $("div.related:last ul li:not(.right) a").slice(1).each(function(i, item){ - if (item.text.length > 20) { - var tmpstr = item.text - $(item).attr("title", tmpstr); - $(item).text(tmpstr.substr(0, 17) + "..."); - } - }); -}); - -$(window).resize(function(){ - if ($(window).width() <= 776) { - $("li.nav-item-0 a").text("Top"); - } - else { - $("li.nav-item-0 a").text("pplib 0.1 documentation"); - } -});
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/comment-bright.png b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/comment-bright.png Binary files differdeleted file mode 100644 index 15e27edb12a..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/comment-bright.png +++ /dev/null diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/comment-close.png b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/comment-close.png Binary files differdeleted file mode 100644 index 4d91bcf57de..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/comment-close.png +++ /dev/null diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/comment.png b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/comment.png Binary files differdeleted file mode 100644 index dfbc0cbd512..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/comment.png +++ /dev/null diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/css3-mediaqueries.js b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/css3-mediaqueries.js deleted file mode 100644 index 59735f59dcb..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/css3-mediaqueries.js +++ /dev/null @@ -1 +0,0 @@ -if(typeof Object.create!=="function"){Object.create=function(e){function t(){}t.prototype=e;return new t}}var ua={toString:function(){return navigator.userAgent},test:function(e){return this.toString().toLowerCase().indexOf(e.toLowerCase())>-1}};ua.version=(ua.toString().toLowerCase().match(/[\s\S]+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1];ua.webkit=ua.test("webkit");ua.gecko=ua.test("gecko")&&!ua.webkit;ua.opera=ua.test("opera");ua.ie=ua.test("msie")&&!ua.opera;ua.ie6=ua.ie&&document.compatMode&&typeof document.documentElement.style.maxHeight==="undefined";ua.ie7=ua.ie&&document.documentElement&&typeof document.documentElement.style.maxHeight!=="undefined"&&typeof XDomainRequest==="undefined";ua.ie8=ua.ie&&typeof XDomainRequest!=="undefined";var domReady=function(){var e=[];var t=function(){if(!arguments.callee.done){arguments.callee.done=true;for(var t=0;t<e.length;t++){e[t]()}}};if(document.addEventListener){document.addEventListener("DOMContentLoaded",t,false)}if(ua.ie){(function(){try{document.documentElement.doScroll("left")}catch(e){setTimeout(arguments.callee,50);return}t()})();document.onreadystatechange=function(){if(document.readyState==="complete"){document.onreadystatechange=null;t()}}}if(ua.webkit&&document.readyState){(function(){if(document.readyState!=="loading"){t()}else{setTimeout(arguments.callee,10)}})()}window.onload=t;return function(t){if(typeof t==="function"){e[e.length]=t}return t}}();var cssHelper=function(){var e={BLOCKS:/[^\s{;][^{;]*\{(?:[^{}]*\{[^{}]*\}[^{}]*|[^{}]*)*\}/g,BLOCKS_INSIDE:/[^\s{][^{]*\{[^{}]*\}/g,DECLARATIONS:/[a-zA-Z\-]+[^;]*:[^;]+;/g,RELATIVE_URLS:/url\(['"]?([^\/\)'"][^:\)'"]+)['"]?\)/g,REDUNDANT_COMPONENTS:/(?:\/\*([^*\\\\]|\*(?!\/))+\*\/|@import[^;]+;)/g,REDUNDANT_WHITESPACE:/\s*(,|:|;|\{|\})\s*/g,WHITESPACE_IN_PARENTHESES:/\(\s*(\S*)\s*\)/g,MORE_WHITESPACE:/\s{2,}/g,FINAL_SEMICOLONS:/;\}/g,NOT_WHITESPACE:/\S+/g};var t,n=false;var r=[];var s=function(e){if(typeof e==="function"){r[r.length]=e}};var o=function(){for(var e=0;e<r.length;e++){r[e](t)}};var u={};var a=function(e,t){if(u[e]){var n=u[e].listeners;if(n){for(var r=0;r<n.length;r++){n[r](t)}}}};var f=function(e,t,n){if(ua.ie&&!window.XMLHttpRequest){window.XMLHttpRequest=function(){return new ActiveXObject("Microsoft.XMLHTTP")}}if(!XMLHttpRequest){return""}var r=new XMLHttpRequest;try{r.open("get",e,true);r.setRequestHeader("X_REQUESTED_WITH","XMLHttpRequest")}catch(i){n();return}var s=false;setTimeout(function(){s=true},5e3);document.documentElement.style.cursor="progress";r.onreadystatechange=function(){if(r.readyState===4&&!s){if(!r.status&&location.protocol==="file:"||r.status>=200&&r.status<300||r.status===304||navigator.userAgent.indexOf("Safari")>-1&&typeof r.status==="undefined"){t(r.responseText)}else{n()}document.documentElement.style.cursor="";r=null}};r.send("")};var l=function(t){t=t.replace(e.REDUNDANT_COMPONENTS,"");t=t.replace(e.REDUNDANT_WHITESPACE,"$1");t=t.replace(e.WHITESPACE_IN_PARENTHESES,"($1)");t=t.replace(e.MORE_WHITESPACE," ");t=t.replace(e.FINAL_SEMICOLONS,"}");return t};var c={stylesheet:function(t){var n={};var r=[],i=[],s=[],o=[];var u=t.cssHelperText;var a=t.getAttribute("media");if(a){var f=a.toLowerCase().split(",")}else{var f=["all"]}for(var l=0;l<f.length;l++){r[r.length]=c.mediaQuery(f[l],n)}var h=u.match(e.BLOCKS);if(h!==null){for(var l=0;l<h.length;l++){if(h[l].substring(0,7)==="@media "){var p=c.mediaQueryList(h[l],n);s=s.concat(p.getRules());i[i.length]=p}else{s[s.length]=o[o.length]=c.rule(h[l],n,null)}}}n.element=t;n.getCssText=function(){return u};n.getAttrMediaQueries=function(){return r};n.getMediaQueryLists=function(){return i};n.getRules=function(){return s};n.getRulesWithoutMQ=function(){return o};return n},mediaQueryList:function(t,n){var r={};var i=t.indexOf("{");var s=t.substring(0,i);t=t.substring(i+1,t.length-1);var o=[],u=[];var a=s.toLowerCase().substring(7).split(",");for(var f=0;f<a.length;f++){o[o.length]=c.mediaQuery(a[f],r)}var l=t.match(e.BLOCKS_INSIDE);if(l!==null){for(f=0;f<l.length;f++){u[u.length]=c.rule(l[f],n,r)}}r.type="mediaQueryList";r.getMediaQueries=function(){return o};r.getRules=function(){return u};r.getListText=function(){return s};r.getCssText=function(){return t};return r},mediaQuery:function(t,n){t=t||"";var r,i;if(n.type==="mediaQueryList"){r=n}else{i=n}var s=false,o;var u=[];var a=true;var f=t.match(e.NOT_WHITESPACE);for(var l=0;l<f.length;l++){var c=f[l];if(!o&&(c==="not"||c==="only")){if(c==="not"){s=true}}else if(!o){o=c}else if(c.charAt(0)==="("){var h=c.substring(1,c.length-1).split(":");u[u.length]={mediaFeature:h[0],value:h[1]||null}}}return{getQueryText:function(){return t},getAttrStyleSheet:function(){return i||null},getList:function(){return r||null},getValid:function(){return a},getNot:function(){return s},getMediaType:function(){return o},getExpressions:function(){return u}}},rule:function(e,t,n){var r={};var i=e.indexOf("{");var s=e.substring(0,i);var o=s.split(",");var u=[];var a=e.substring(i+1,e.length-1).split(";");for(var f=0;f<a.length;f++){u[u.length]=c.declaration(a[f],r)}r.getStylesheet=function(){return t||null};r.getMediaQueryList=function(){return n||null};r.getSelectors=function(){return o};r.getSelectorText=function(){return s};r.getDeclarations=function(){return u};r.getPropertyValue=function(e){for(var t=0;t<u.length;t++){if(u[t].getProperty()===e){return u[t].getValue()}}return null};return r},declaration:function(e,t){var n=e.indexOf(":");var r=e.substring(0,n);var i=e.substring(n+1);return{getRule:function(){return t||null},getProperty:function(){return r},getValue:function(){return i}}}};var h=function(e){if(typeof e.cssHelperText!=="string"){return}var n={stylesheet:null,mediaQueryLists:[],rules:[],selectors:{},declarations:[],properties:{}};var r=n.stylesheet=c.stylesheet(e);var s=n.mediaQueryLists=r.getMediaQueryLists();var o=n.rules=r.getRules();var u=n.selectors;var a=function(e){var t=e.getSelectors();for(var n=0;n<t.length;n++){var r=t[n];if(!u[r]){u[r]=[]}u[r][u[r].length]=e}};for(i=0;i<o.length;i++){a(o[i])}var f=n.declarations;for(i=0;i<o.length;i++){f=n.declarations=f.concat(o[i].getDeclarations())}var l=n.properties;for(i=0;i<f.length;i++){var h=f[i].getProperty();if(!l[h]){l[h]=[]}l[h][l[h].length]=f[i]}e.cssHelperParsed=n;t[t.length]=e;return n};var p=function(e,t){return;e.cssHelperText=l(t||e.innerHTML);return h(e)};var d=function(){n=true;t=[];var r=[];var i=function(){for(var e=0;e<r.length;e++){h(r[e])}var t=document.getElementsByTagName("style");for(e=0;e<t.length;e++){p(t[e])}n=false;o()};var s=document.getElementsByTagName("link");for(var u=0;u<s.length;u++){var a=s[u];if(a.getAttribute("rel").indexOf("style")>-1&&a.href&&a.href.length!==0&&!a.disabled){r[r.length]=a}}if(r.length>0){var c=0;var d=function(){c++;if(c===r.length){i()}};var v=function(t){var n=t.href;f(n,function(r){r=l(r).replace(e.RELATIVE_URLS,"url("+n.substring(0,n.lastIndexOf("/"))+"/$1)");t.cssHelperText=r;d()},d)};for(u=0;u<r.length;u++){v(r[u])}}else{i()}};var v={stylesheets:"array",mediaQueryLists:"array",rules:"array",selectors:"object",declarations:"array",properties:"object"};var m={stylesheets:null,mediaQueryLists:null,rules:null,selectors:null,declarations:null,properties:null};var g=function(e,t){if(m[e]!==null){if(v[e]==="array"){return m[e]=m[e].concat(t)}else{var n=m[e];for(var r in t){if(t.hasOwnProperty(r)){if(!n[r]){n[r]=t[r]}else{n[r]=n[r].concat(t[r])}}}return n}}};var y=function(e){m[e]=v[e]==="array"?[]:{};for(var n=0;n<t.length;n++){var r=e==="stylesheets"?"stylesheet":e;g(e,t[n].cssHelperParsed[r])}return m[e]};var b=function(e){if(typeof window.innerWidth!="undefined"){return window["inner"+e]}else if(typeof document.documentElement!=="undefined"&&typeof document.documentElement.clientWidth!=="undefined"&&document.documentElement.clientWidth!=0){return document.documentElement["client"+e]}};return{addStyle:function(e,t,n){var r=document.createElement("style");r.setAttribute("type","text/css");if(t&&t.length>0){r.setAttribute("media",t.join(","))}document.getElementsByTagName("head")[0].appendChild(r);if(r.styleSheet){r.styleSheet.cssText=e}else{r.appendChild(document.createTextNode(e))}r.addedWithCssHelper=true;if(typeof n==="undefined"||n===true){cssHelper.parsed(function(t){var n=p(r,e);for(var i in n){if(n.hasOwnProperty(i)){g(i,n[i])}}a("newStyleParsed",r)})}else{r.parsingDisallowed=true}return r},removeStyle:function(e){return e.parentNode.removeChild(e)},parsed:function(e){if(n){s(e)}else{if(typeof t!=="undefined"){if(typeof e==="function"){e(t)}}else{s(e);d()}}},stylesheets:function(e){cssHelper.parsed(function(t){e(m.stylesheets||y("stylesheets"))})},mediaQueryLists:function(e){cssHelper.parsed(function(t){e(m.mediaQueryLists||y("mediaQueryLists"))})},rules:function(e){cssHelper.parsed(function(t){e(m.rules||y("rules"))})},selectors:function(e){cssHelper.parsed(function(t){e(m.selectors||y("selectors"))})},declarations:function(e){cssHelper.parsed(function(t){e(m.declarations||y("declarations"))})},properties:function(e){cssHelper.parsed(function(t){e(m.properties||y("properties"))})},broadcast:a,addListener:function(e,t){if(typeof t==="function"){if(!u[e]){u[e]={listeners:[]}}u[e].listeners[u[e].listeners.length]=t}},removeListener:function(e,t){if(typeof t==="function"&&u[e]){var n=u[e].listeners;for(var r=0;r<n.length;r++){if(n[r]===t){n.splice(r,1);r-=1}}}},getViewportWidth:function(){return b("Width")},getViewportHeight:function(){return b("Height")}}}();domReady(function(){var t;var n={LENGTH_UNIT:/[0-9]+(em|ex|px|in|cm|mm|pt|pc)$/,RESOLUTION_UNIT:/[0-9]+(dpi|dpcm)$/,ASPECT_RATIO:/^[0-9]+\/[0-9]+$/,ABSOLUTE_VALUE:/^[0-9]*(\.[0-9]+)*$/};var r=[];var i=function(){var e="css3-mediaqueries-test";var t=document.createElement("div");t.id=e;var n=cssHelper.addStyle("@media all and (width) { #"+e+" { width: 1px !important; } }",[],false);document.body.appendChild(t);var r=t.offsetWidth===1;n.parentNode.removeChild(n);t.parentNode.removeChild(t);i=function(){return r};return r};var s=function(){t=document.createElement("div");t.style.cssText="position:absolute;top:-9999em;left:-9999em;"+"margin:0;border:none;padding:0;width:1em;font-size:1em;";document.body.appendChild(t);if(t.offsetWidth!==16){t.style.fontSize=16/t.offsetWidth+"em"}t.style.width=""};var o=function(e){t.style.width=e;var n=t.offsetWidth;t.style.width="";return n};var u=function(e,t){var r=e.length;var i=e.substring(0,4)==="min-";var s=!i&&e.substring(0,4)==="max-";if(t!==null){var u;var a;if(n.LENGTH_UNIT.exec(t)){u="length";a=o(t)}else if(n.RESOLUTION_UNIT.exec(t)){u="resolution";a=parseInt(t,10);var f=t.substring((a+"").length)}else if(n.ASPECT_RATIO.exec(t)){u="aspect-ratio";a=t.split("/")}else if(n.ABSOLUTE_VALUE){u="absolute";a=t}else{u="unknown"}}var l,c;if("device-width"===e.substring(r-12,r)){l=screen.width;if(t!==null){if(u==="length"){return i&&l>=a||s&&l<a||!i&&!s&&l===a}else{return false}}else{return l>0}}else if("device-height"===e.substring(r-13,r)){c=screen.height;if(t!==null){if(u==="length"){return i&&c>=a||s&&c<a||!i&&!s&&c===a}else{return false}}else{return c>0}}else if("width"===e.substring(r-5,r)){l=document.documentElement.clientWidth||document.body.clientWidth;if(t!==null){if(u==="length"){return i&&l>=a||s&&l<a||!i&&!s&&l===a}else{return false}}else{return l>0}}else if("height"===e.substring(r-6,r)){c=document.documentElement.clientHeight||document.body.clientHeight;if(t!==null){if(u==="length"){return i&&c>=a||s&&c<a||!i&&!s&&c===a}else{return false}}else{return c>0}}else if("device-aspect-ratio"===e.substring(r-19,r)){return u==="aspect-ratio"&&screen.width*a[1]===screen.height*a[0]}else if("color-index"===e.substring(r-11,r)){var h=Math.pow(2,screen.colorDepth);if(t!==null){if(u==="absolute"){return i&&h>=a||s&&h<a||!i&&!s&&h===a}else{return false}}else{return h>0}}else if("color"===e.substring(r-5,r)){var p=screen.colorDepth;if(t!==null){if(u==="absolute"){return i&&p>=a||s&&p<a||!i&&!s&&p===a}else{return false}}else{return p>0}}else if("resolution"===e.substring(r-10,r)){var d;if(f==="dpcm"){d=o("1cm")}else{d=o("1in")}if(t!==null){if(u==="resolution"){return i&&d>=a||s&&d<a||!i&&!s&&d===a}else{return false}}else{return d>0}}else{return false}};var a=function(e){var t=e.getValid();var n=e.getExpressions();var r=n.length;if(r>0){for(var i=0;i<r&&t;i++){t=u(n[i].mediaFeature,n[i].value)}var s=e.getNot();return t&&!s||s&&!t}return t};var f=function(e,t){var n=e.getMediaQueries();var i={};for(var s=0;s<n.length;s++){var o=n[s].getMediaType();if(n[s].getExpressions().length===0){continue}var u=true;if(o!=="all"&&t&&t.length>0){u=false;for(var f=0;f<t.length;f++){if(t[f]===o){u=true}}}if(u&&a(n[s])){i[o]=true}}var l=[],c=0;for(var h in i){if(i.hasOwnProperty(h)){if(c>0){l[c++]=","}l[c++]=h}}if(l.length>0){r[r.length]=cssHelper.addStyle("@media "+l.join("")+"{"+e.getCssText()+"}",t,false)}};var l=function(e,t){for(var n=0;n<e.length;n++){f(e[n],t)}};var c=function(e){var t=e.getAttrMediaQueries();var n=false;var i={};for(var s=0;s<t.length;s++){if(a(t[s])){i[t[s].getMediaType()]=t[s].getExpressions().length>0}}var o=[],u=[];for(var f in i){if(i.hasOwnProperty(f)){o[o.length]=f;if(i[f]){u[u.length]=f}if(f==="all"){n=true}}}if(u.length>0){r[r.length]=cssHelper.addStyle(e.getCssText(),u,false)}var c=e.getMediaQueryLists();if(n){l(c)}else{l(c,o)}};var h=function(e){for(var t=0;t<e.length;t++){c(e[t])}if(ua.ie){document.documentElement.style.display="block";setTimeout(function(){document.documentElement.style.display=""},0);setTimeout(function(){cssHelper.broadcast("cssMediaQueriesTested")},100)}else{cssHelper.broadcast("cssMediaQueriesTested")}};var p=function(){for(var e=0;e<r.length;e++){cssHelper.removeStyle(r[e])}r=[];cssHelper.stylesheets(h)};var d=0;var v=function(){var e=cssHelper.getViewportWidth();var t=cssHelper.getViewportHeight();if(ua.ie){var n=document.createElement("div");n.style.position="absolute";n.style.top="-9999em";n.style.overflow="scroll";document.body.appendChild(n);d=n.offsetWidth-n.clientWidth;document.body.removeChild(n)}var r;var s=function(){var n=cssHelper.getViewportWidth();var s=cssHelper.getViewportHeight();if(Math.abs(n-e)>d||Math.abs(s-t)>d){e=n;t=s;clearTimeout(r);r=setTimeout(function(){if(!i()){p()}else{cssHelper.broadcast("cssMediaQueriesTested")}},500)}};window.onresize=function(){var e=window.onresize||function(){};return function(){e();s()}}()};var m=document.documentElement;m.style.marginLeft="-32767px";setTimeout(function(){m.style.marginLeft=""},5e3);return function(){if(!i()){cssHelper.addListener("newStyleParsed",function(e){c(e.cssHelperParsed.stylesheet)});cssHelper.addListener("cssMediaQueriesTested",function(){if(ua.ie){m.style.width="1px"}setTimeout(function(){m.style.width="";m.style.marginLeft=""},0);cssHelper.removeListener("cssMediaQueriesTested",arguments.callee)});s();p()}else{m.style.marginLeft=""}v()}}());try{document.execCommand("BackgroundImageCache",false,true)}catch(e){} diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/css3-mediaqueries_src.js b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/css3-mediaqueries_src.js deleted file mode 100644 index f21dd4949aa..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/css3-mediaqueries_src.js +++ /dev/null @@ -1,1104 +0,0 @@ -/* -css3-mediaqueries.js - CSS Helper and CSS3 Media Queries Enabler - -author: Wouter van der Graaf <wouter at dynora nl> -version: 1.0 (20110330) -license: MIT -website: http://code.google.com/p/css3-mediaqueries-js/ - -W3C spec: http://www.w3.org/TR/css3-mediaqueries/ - -Note: use of embedded <style> is not recommended when using media queries, because IE has no way of returning the raw literal css text from a <style> element. -*/ - - -// true prototypal inheritance (http://javascript.crockford.com/prototypal.html) -if (typeof Object.create !== 'function') { - Object.create = function (o) { - function F() {} - F.prototype = o; - return new F(); - }; -} - - -// user agent sniffing shortcuts -var ua = { - toString: function () { - return navigator.userAgent; - }, - test: function (s) { - return this.toString().toLowerCase().indexOf(s.toLowerCase()) > -1; - } -}; -ua.version = (ua.toString().toLowerCase().match(/[\s\S]+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1]; -ua.webkit = ua.test('webkit'); -ua.gecko = ua.test('gecko') && !ua.webkit; -ua.opera = ua.test('opera'); -ua.ie = ua.test('msie') && !ua.opera; -ua.ie6 = ua.ie && document.compatMode && typeof document.documentElement.style.maxHeight === 'undefined'; -ua.ie7 = ua.ie && document.documentElement && typeof document.documentElement.style.maxHeight !== 'undefined' && typeof XDomainRequest === 'undefined'; -ua.ie8 = ua.ie && typeof XDomainRequest !== 'undefined'; - - - -// initialize when DOM content is loaded -var domReady = function () { - var fns = []; - var init = function () { - if (!arguments.callee.done) { // run init functions once - arguments.callee.done = true; - for (var i = 0; i < fns.length; i++) { - fns[i](); - } - } - }; - - // listeners for different browsers - if (document.addEventListener) { - document.addEventListener('DOMContentLoaded', init, false); - } - if (ua.ie) { - (function () { - try { - // throws errors until after ondocumentready - document.documentElement.doScroll('left'); - } - catch (e) { - setTimeout(arguments.callee, 50); - return; - } - // no errors, fire - init(); - })(); - // trying to always fire before onload - document.onreadystatechange = function () { - if (document.readyState === 'complete') { - document.onreadystatechange = null; - init(); - } - }; - } - if (ua.webkit && document.readyState) { - (function () { - if (document.readyState !== 'loading') { - init(); - } - else { - setTimeout(arguments.callee, 10); - } - })(); - } - window.onload = init; // fallback - - return function (fn) { // add fn to init functions - if (typeof fn === 'function') { - fns[fns.length] = fn; - } - return fn; - }; -}(); - - - -// helper library for parsing css to objects -var cssHelper = function () { - - var regExp = { - BLOCKS: /[^\s{;][^{;]*\{(?:[^{}]*\{[^{}]*\}[^{}]*|[^{}]*)*\}/g, - BLOCKS_INSIDE: /[^\s{][^{]*\{[^{}]*\}/g, - DECLARATIONS: /[a-zA-Z\-]+[^;]*:[^;]+;/g, - RELATIVE_URLS: /url\(['"]?([^\/\)'"][^:\)'"]+)['"]?\)/g, - // strip whitespace and comments, @import is evil - REDUNDANT_COMPONENTS: /(?:\/\*([^*\\\\]|\*(?!\/))+\*\/|@import[^;]+;)/g, - REDUNDANT_WHITESPACE: /\s*(,|:|;|\{|\})\s*/g, - WHITESPACE_IN_PARENTHESES: /\(\s*(\S*)\s*\)/g, - MORE_WHITESPACE: /\s{2,}/g, - FINAL_SEMICOLONS: /;\}/g, - NOT_WHITESPACE: /\S+/g - }; - - var parsed, parsing = false; - - var waiting = []; - var wait = function (fn) { - if (typeof fn === 'function') { - waiting[waiting.length] = fn; - } - }; - var ready = function () { - for (var i = 0; i < waiting.length; i++) { - waiting[i](parsed); - } - }; - var events = {}; - var broadcast = function (n, v) { - if (events[n]) { - var listeners = events[n].listeners; - if (listeners) { - for (var i = 0; i < listeners.length; i++) { - listeners[i](v); - } - } - } - }; - - var requestText = function (url, fnSuccess, fnFailure) { - if (ua.ie && !window.XMLHttpRequest) { - window.XMLHttpRequest = function () { - return new ActiveXObject('Microsoft.XMLHTTP'); - }; - } - if (!XMLHttpRequest) { - return ''; - } - var r = new XMLHttpRequest(); - try { - r.open('get', url, true); - r.setRequestHeader('X_REQUESTED_WITH', 'XMLHttpRequest'); - } - catch (e) { - fnFailure(); - return; - } - var done = false; - setTimeout(function () { - done = true; - }, 5000); - document.documentElement.style.cursor = 'progress'; - r.onreadystatechange = function () { - if (r.readyState === 4 && !done) { - if (!r.status && location.protocol === 'file:' || - (r.status >= 200 && r.status < 300) || - r.status === 304 || - navigator.userAgent.indexOf('Safari') > -1 && typeof r.status === 'undefined') { - fnSuccess(r.responseText); - } - else { - fnFailure(); - } - document.documentElement.style.cursor = ''; - r = null; // avoid memory leaks - } - }; - r.send(''); - }; - - var sanitize = function (text) { - text = text.replace(regExp.REDUNDANT_COMPONENTS, ''); - text = text.replace(regExp.REDUNDANT_WHITESPACE, '$1'); - text = text.replace(regExp.WHITESPACE_IN_PARENTHESES, '($1)'); - text = text.replace(regExp.MORE_WHITESPACE, ' '); - text = text.replace(regExp.FINAL_SEMICOLONS, '}'); // optional final semicolons - return text; - }; - - var objects = { - stylesheet: function (el) { - var o = {}; - var amqs = [], mqls = [], rs = [], rsw = []; - var s = el.cssHelperText; - - // add attribute media queries - var attr = el.getAttribute('media'); - if (attr) { - var qts = attr.toLowerCase().split(',') - } - else { - var qts = ['all'] // imply 'all' - } - for (var i = 0; i < qts.length; i++) { - amqs[amqs.length] = objects.mediaQuery(qts[i], o); - } - - // add media query lists and rules (top down order) - var blocks = s.match(regExp.BLOCKS); // @charset is not a block - if (blocks !== null) { - for (var i = 0; i < blocks.length; i++) { - if (blocks[i].substring(0, 7) === '@media ') { // media query (list) - var mql = objects.mediaQueryList(blocks[i], o); - rs = rs.concat(mql.getRules()); - mqls[mqls.length] = mql; - } - else { // regular rule set, page context (@page) or font description (@font-face) - rs[rs.length] = rsw[rsw.length] = objects.rule(blocks[i], o, null); - } - } - } - - o.element = el; - o.getCssText = function () { - return s; - }; - o.getAttrMediaQueries = function () { - return amqs; - }; - o.getMediaQueryLists = function () { - return mqls; - }; - o.getRules = function () { - return rs; - }; - o.getRulesWithoutMQ = function () { - return rsw; - }; - return o; - }, - - mediaQueryList: function (s, stsh) { - var o = {}; - var idx = s.indexOf('{'); - var lt = s.substring(0, idx); - s = s.substring(idx + 1, s.length - 1); - var mqs = [], rs = []; - - // add media queries - var qts = lt.toLowerCase().substring(7).split(','); - for (var i = 0; i < qts.length; i++) { // parse each media query - mqs[mqs.length] = objects.mediaQuery(qts[i], o); - } - - // add rule sets - var rts = s.match(regExp.BLOCKS_INSIDE); - if (rts !== null) { - for (i = 0; i < rts.length; i++) { - rs[rs.length] = objects.rule(rts[i], stsh, o); - } - } - - o.type = 'mediaQueryList'; - o.getMediaQueries = function () { - return mqs; - }; - o.getRules = function () { - return rs; - }; - o.getListText = function () { - return lt; - }; - o.getCssText = function () { - return s; - }; - return o; - }, - - mediaQuery: function (s, listOrSheet) { - s = s || ''; - var mql, stsh; - if (listOrSheet.type === 'mediaQueryList') { - mql = listOrSheet; - } - else { - stsh = listOrSheet; - } - var not = false, type; - var expr = []; - var valid = true; - var tokens = s.match(regExp.NOT_WHITESPACE); - - - - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - if (!type && (token === 'not' || token === 'only')) { // 'not' and 'only' keywords - // keyword 'only' does nothing, as if it was not present - if (token === 'not') { - not = true; - } - } - else if (!type) { // media type - type = token; - } - else if (token.charAt(0) === '(') { // media feature expression - var pair = token.substring(1, token.length - 1).split(':'); - expr[expr.length] = { - mediaFeature: pair[0], - value: pair[1] || null - }; - } - } - - return { - getQueryText: function () { - return s; - }, - getAttrStyleSheet: function () { - return stsh || null; - }, - getList: function () { - return mql || null; - }, - getValid: function () { - return valid; - }, - getNot: function () { - return not; - }, - getMediaType: function () { - return type; - }, - getExpressions: function () { - return expr; - } - }; - }, - - rule: function (s, stsh, mql) { - var o = {}; - var idx = s.indexOf('{'); - var st = s.substring(0, idx); - var ss = st.split(','); - var ds = []; - var dts = s.substring(idx + 1, s.length - 1).split(';'); - for (var i = 0; i < dts.length; i++) { - ds[ds.length] = objects.declaration(dts[i], o); - } - - o.getStylesheet = function () { - return stsh || null; - }; - o.getMediaQueryList = function () { - return mql || null; - }; - o.getSelectors = function () { - return ss; - }; - o.getSelectorText = function () { - return st; - }; - o.getDeclarations = function () { - return ds; - }; - o.getPropertyValue = function (n) { - for (var i = 0; i < ds.length; i++) { - if (ds[i].getProperty() === n) { - return ds[i].getValue(); - } - } - return null; - }; - return o; - }, - - declaration: function (s, r) { - var idx = s.indexOf(':'); - var p = s.substring(0, idx); - var v = s.substring(idx + 1); - return { - getRule: function () { - return r || null; - }, - getProperty: function () { - return p; - }, - getValue: function () { - return v; - } - }; - } - }; - - var parseText = function (el) { - if (typeof el.cssHelperText !== 'string') { - return; - } - var o = { - stylesheet: null, - mediaQueryLists: [], - rules: [], - selectors: {}, - declarations: [], - properties: {} - }; - - // build stylesheet object - var stsh = o.stylesheet = objects.stylesheet(el); - - // collect media query lists - var mqls = o.mediaQueryLists = stsh.getMediaQueryLists(); - - // collect all rules - var ors = o.rules = stsh.getRules(); - - // collect all selectors - var oss = o.selectors; - var collectSelectors = function (r) { - var ss = r.getSelectors(); - for (var i = 0; i < ss.length; i++) { - var n = ss[i]; - if (!oss[n]) { - oss[n] = []; - } - oss[n][oss[n].length] = r; - } - }; - for (var i = 0; i < ors.length; i++) { - collectSelectors(ors[i]); - } - - // collect all declarations - var ods = o.declarations; - for (i = 0; i < ors.length; i++) { - ods = o.declarations = ods.concat(ors[i].getDeclarations()); - } - - // collect all properties - var ops = o.properties; - for (i = 0; i < ods.length; i++) { - var n = ods[i].getProperty(); - if (!ops[n]) { - ops[n] = []; - } - ops[n][ops[n].length] = ods[i]; - } - - el.cssHelperParsed = o; - parsed[parsed.length] = el; - return o; - }; - - var parseEmbedded = function (el, s) { - return; - // This function doesn't work because of a bug in IE, where innerHTML gives us parsed css instead of raw literal. - el.cssHelperText = sanitize(s || el.innerHTML); - return parseText(el); - }; - - var parse = function () { - parsing = true; - parsed = []; - var linked = []; - var finish = function () { - for (var i = 0; i < linked.length; i++) { - parseText(linked[i]); - } - var styles = document.getElementsByTagName('style'); - for (i = 0; i < styles.length; i++) { - parseEmbedded(styles[i]); - } - parsing = false; - ready(); - }; - var links = document.getElementsByTagName('link'); - for (var i = 0; i < links.length; i++) { - var link = links[i]; - if (link.getAttribute('rel').indexOf('style') > -1 && link.href && link.href.length !== 0 && !link.disabled) { - linked[linked.length] = link; - } - } - if (linked.length > 0) { - var c = 0; - var checkForFinish = function () { - c++; - if (c === linked.length) { // parse in right order, so after last link is read - finish(); - } - }; - var processLink = function (link) { - var href = link.href; - requestText(href, function (text) { - // fix url's - text = sanitize(text).replace(regExp.RELATIVE_URLS, 'url(' + href.substring(0, href.lastIndexOf('/')) + '/$1)'); - link.cssHelperText = text; - checkForFinish(); - }, checkForFinish); - }; - for (i = 0; i < linked.length; i++) { - processLink(linked[i]); - } - } - else { - finish(); - } - }; - - var types = { - stylesheets: 'array', - mediaQueryLists: 'array', - rules: 'array', - selectors: 'object', - declarations: 'array', - properties: 'object' - }; - - var collections = { - stylesheets: null, - mediaQueryLists: null, - rules: null, - selectors: null, - declarations: null, - properties: null - }; - - var addToCollection = function (name, v) { - if (collections[name] !== null) { - if (types[name] === 'array') { - return (collections[name] = collections[name].concat(v)); - } - else { - var c = collections[name]; - for (var n in v) { - if (v.hasOwnProperty(n)) { - if (!c[n]) { - c[n] = v[n]; - } - else { - c[n] = c[n].concat(v[n]); - } - } - } - return c; - } - } - }; - - var collect = function (name) { - collections[name] = (types[name] === 'array') ? [] : {}; - for (var i = 0; i < parsed.length; i++) { - var pname = name === 'stylesheets' ? 'stylesheet' : name; // the exception - addToCollection(name, parsed[i].cssHelperParsed[pname]); - } - return collections[name]; - }; - - // viewport size - var getViewportSize = function (d) { - if (typeof window.innerWidth != 'undefined') { - return window['inner' + d]; - } - else if (typeof document.documentElement !== 'undefined' - && typeof document.documentElement.clientWidth !== 'undefined' - && document.documentElement.clientWidth != 0) { - return document.documentElement['client' + d]; - } - }; - - // public static functions - return { - addStyle: function (s, mediaTypes, process) { - var el = document.createElement('style'); - el.setAttribute('type', 'text/css'); - if (mediaTypes && mediaTypes.length > 0) { - el.setAttribute('media', mediaTypes.join(',')); - } - document.getElementsByTagName('head')[0].appendChild(el); - if (el.styleSheet) { // IE - el.styleSheet.cssText = s; - } - else { - el.appendChild(document.createTextNode(s)); - } - el.addedWithCssHelper = true; - if (typeof process === 'undefined' || process === true) { - cssHelper.parsed(function (parsed) { - var o = parseEmbedded(el, s); - for (var n in o) { - if (o.hasOwnProperty(n)) { - addToCollection(n, o[n]); - } - } - broadcast('newStyleParsed', el); - }); - } - else { - el.parsingDisallowed = true; - } - return el; - }, - - removeStyle: function (el) { - return el.parentNode.removeChild(el); - }, - - parsed: function (fn) { - if (parsing) { - wait(fn); - } - else { - if (typeof parsed !== 'undefined') { - if (typeof fn === 'function') { - fn(parsed); - } - } - else { - wait(fn); - parse(); - } - } - }, - - stylesheets: function (fn) { - cssHelper.parsed(function (parsed) { - fn(collections.stylesheets || collect('stylesheets')); - }); - }, - - mediaQueryLists: function (fn) { - cssHelper.parsed(function (parsed) { - fn(collections.mediaQueryLists || collect('mediaQueryLists')); - }); - }, - - rules: function (fn) { - cssHelper.parsed(function (parsed) { - fn(collections.rules || collect('rules')); - }); - }, - - selectors: function (fn) { - cssHelper.parsed(function (parsed) { - fn(collections.selectors || collect('selectors')); - }); - }, - - declarations: function (fn) { - cssHelper.parsed(function (parsed) { - fn(collections.declarations || collect('declarations')); - }); - }, - - properties: function (fn) { - cssHelper.parsed(function (parsed) { - fn(collections.properties || collect('properties')); - }); - }, - - broadcast: broadcast, - - addListener: function (n, fn) { // in case n is 'styleadd': added function is called everytime style is added and parsed - if (typeof fn === 'function') { - if (!events[n]) { - events[n] = { - listeners: [] - }; - } - events[n].listeners[events[n].listeners.length] = fn; - } - }, - - removeListener: function (n, fn) { - if (typeof fn === 'function' && events[n]) { - var ls = events[n].listeners; - for (var i = 0; i < ls.length; i++) { - if (ls[i] === fn) { - ls.splice(i, 1); - i -= 1; - } - } - } - }, - - getViewportWidth: function () { - return getViewportSize('Width'); - }, - - getViewportHeight: function () { - return getViewportSize('Height'); - } - }; -}(); - - - -// function to test and apply parsed media queries against browser capabilities -domReady(function enableCssMediaQueries() { - var meter; - - var regExp = { - LENGTH_UNIT: /[0-9]+(em|ex|px|in|cm|mm|pt|pc)$/, - RESOLUTION_UNIT: /[0-9]+(dpi|dpcm)$/, - ASPECT_RATIO: /^[0-9]+\/[0-9]+$/, - ABSOLUTE_VALUE: /^[0-9]*(\.[0-9]+)*$/ - }; - - var styles = []; - - var nativeSupport = function () { - // check support for media queries - var id = 'css3-mediaqueries-test'; - var el = document.createElement('div'); - el.id = id; - var style = cssHelper.addStyle('@media all and (width) { #' + id + - ' { width: 1px !important; } }', [], false); // false means don't parse this temp style - document.body.appendChild(el); - var ret = el.offsetWidth === 1; - style.parentNode.removeChild(style); - el.parentNode.removeChild(el); - nativeSupport = function () { - return ret; - }; - return ret; - }; - - var createMeter = function () { // create measuring element - meter = document.createElement('div'); - meter.style.cssText = 'position:absolute;top:-9999em;left:-9999em;' + - 'margin:0;border:none;padding:0;width:1em;font-size:1em;'; // cssText is needed for IE, works for the others - document.body.appendChild(meter); - // meter must have browser default font size of 16px - if (meter.offsetWidth !== 16) { - meter.style.fontSize = 16 / meter.offsetWidth + 'em'; - } - meter.style.width = ''; - }; - - var measure = function (value) { - meter.style.width = value; - var amount = meter.offsetWidth; - meter.style.width = ''; - return amount; - }; - - var testMediaFeature = function (feature, value) { - // non-testable features: monochrome|min-monochrome|max-monochrome|scan|grid - var l = feature.length; - var min = (feature.substring(0, 4) === 'min-'); - var max = (!min && feature.substring(0, 4) === 'max-'); - - if (value !== null) { // determine value type and parse to usable amount - var valueType; - var amount; - if (regExp.LENGTH_UNIT.exec(value)) { - valueType = 'length'; - amount = measure(value); - } - else if (regExp.RESOLUTION_UNIT.exec(value)) { - valueType = 'resolution'; - amount = parseInt(value, 10); - var unit = value.substring((amount + '').length); - } - else if (regExp.ASPECT_RATIO.exec(value)) { - valueType = 'aspect-ratio'; - amount = value.split('/'); - } - else if (regExp.ABSOLUTE_VALUE) { - valueType = 'absolute'; - amount = value; - } - else { - valueType = 'unknown'; - } - } - - var width, height; - if ('device-width' === feature.substring(l - 12, l)) { // screen width - width = screen.width; - if (value !== null) { - if (valueType === 'length') { - return ((min && width >= amount) || (max && width < amount) || (!min && !max && width === amount)); - } - else { - return false; - } - } - else { // test width without value - return width > 0; - } - } - else if ('device-height' === feature.substring(l - 13, l)) { // screen height - height = screen.height; - if (value !== null) { - if (valueType === 'length') { - return ((min && height >= amount) || (max && height < amount) || (!min && !max && height === amount)); - } - else { - return false; - } - } - else { // test height without value - return height > 0; - } - } - else if ('width' === feature.substring(l - 5, l)) { // viewport width - width = document.documentElement.clientWidth || document.body.clientWidth; // the latter for IE quirks mode - if (value !== null) { - if (valueType === 'length') { - return ((min && width >= amount) || (max && width < amount) || (!min && !max && width === amount)); - } - else { - return false; - } - } - else { // test width without value - return width > 0; - } - } - else if ('height' === feature.substring(l - 6, l)) { // viewport height - height = document.documentElement.clientHeight || document.body.clientHeight; // the latter for IE quirks mode - if (value !== null) { - if (valueType === 'length') { - return ((min && height >= amount) || (max && height < amount) || (!min && !max && height === amount)); - } - else { - return false; - } - } - else { // test height without value - return height > 0; - } - } - else if ('device-aspect-ratio' === feature.substring(l - 19, l)) { // screen aspect ratio - return valueType === 'aspect-ratio' && screen.width * amount[1] === screen.height * amount[0]; - } - else if ('color-index' === feature.substring(l - 11, l)) { // number of colors - var colors = Math.pow(2, screen.colorDepth); - if (value !== null) { - if (valueType === 'absolute') { - return ((min && colors >= amount) || (max && colors < amount) || (!min && !max && colors === amount)); - } - else { - return false; - } - } - else { // test height without value - return colors > 0; - } - } - else if ('color' === feature.substring(l - 5, l)) { // bits per color component - var color = screen.colorDepth; - if (value !== null) { - if (valueType === 'absolute') { - return ((min && color >= amount) || (max && color < amount) || (!min && !max && color === amount)); - } - else { - return false; - } - } - else { // test height without value - return color > 0; - } - } - else if ('resolution' === feature.substring(l - 10, l)) { - var res; - if (unit === 'dpcm') { - res = measure('1cm'); - } - else { - res = measure('1in'); - } - if (value !== null) { - if (valueType === 'resolution') { - return ((min && res >= amount) || (max && res < amount) || (!min && !max && res === amount)); - } - else { - return false; - } - } - else { // test height without value - return res > 0; - } - } - else { - return false; - } - }; - - var testMediaQuery = function (mq) { - var test = mq.getValid(); - var expressions = mq.getExpressions(); - var l = expressions.length; - if (l > 0) { - for (var i = 0; i < l && test; i++) { - test = testMediaFeature(expressions[i].mediaFeature, expressions[i].value); - } - var not = mq.getNot(); - return (test && !not || not && !test); - } - return test; - }; - - var testMediaQueryList = function (mql, ts) { - // ts is null or an array with any media type but 'all'. - var mqs = mql.getMediaQueries(); - var t = {}; - for (var i = 0; i < mqs.length; i++) { - var type = mqs[i].getMediaType(); - if (mqs[i].getExpressions().length === 0) { - continue; - // TODO: Browser check! Assuming old browsers do apply the bare media types, even in a list with media queries. - } - var typeAllowed = true; - if (type !== 'all' && ts && ts.length > 0) { - typeAllowed = false; - for (var j = 0; j < ts.length; j++) { - if (ts[j] === type) { - typeAllowed = true; - } - } - } - if (typeAllowed && testMediaQuery(mqs[i])) { - t[type] = true; - } - } - var s = [], c = 0; - for (var n in t) { - if (t.hasOwnProperty(n)) { - if (c > 0) { - s[c++] = ','; - } - s[c++] = n; - } - } - if (s.length > 0) { - styles[styles.length] = cssHelper.addStyle('@media ' + s.join('') + '{' + mql.getCssText() + '}', ts, false); - } - }; - - var testMediaQueryLists = function (mqls, ts) { - for (var i = 0; i < mqls.length; i++) { - testMediaQueryList(mqls[i], ts); - } - }; - - var testStylesheet = function (stsh) { - var amqs = stsh.getAttrMediaQueries(); - var allPassed = false; - var t = {}; - for (var i = 0; i < amqs.length; i++) { - if (testMediaQuery(amqs[i])) { - t[amqs[i].getMediaType()] = amqs[i].getExpressions().length > 0; - } - } - var ts = [], tswe = []; - for (var n in t) { - if (t.hasOwnProperty(n)) { - ts[ts.length] = n; - if (t[n]) { - tswe[tswe.length] = n - } - if (n === 'all') { - allPassed = true; - } - } - } - if (tswe.length > 0) { // types with query expressions that passed the test - styles[styles.length] = cssHelper.addStyle(stsh.getCssText(), tswe, false); - } - var mqls = stsh.getMediaQueryLists(); - if (allPassed) { - // If 'all' in media attribute passed the test, then test all @media types in linked CSS and create style with those types. - testMediaQueryLists(mqls); - } - else { - // Or else, test only media attribute types that passed the test and also 'all'. - // For positive '@media all', create style with attribute types that passed their test. - testMediaQueryLists(mqls, ts); - } - }; - - var testStylesheets = function (stshs) { - for (var i = 0; i < stshs.length; i++) { - testStylesheet(stshs[i]); - } - if (ua.ie) { - // force repaint in IE - document.documentElement.style.display = 'block'; - setTimeout(function () { - document.documentElement.style.display = ''; - }, 0); - // delay broadcast somewhat for IE - setTimeout(function () { - cssHelper.broadcast('cssMediaQueriesTested'); - }, 100); - } - else { - cssHelper.broadcast('cssMediaQueriesTested'); - } - }; - - var test = function () { - for (var i = 0; i < styles.length; i++) { - cssHelper.removeStyle(styles[i]); - } - styles = []; - cssHelper.stylesheets(testStylesheets); - }; - - var scrollbarWidth = 0; - var checkForResize = function () { - var cvpw = cssHelper.getViewportWidth(); - var cvph = cssHelper.getViewportHeight(); - - // determine scrollbar width in IE, see resizeHandler - if (ua.ie) { - var el = document.createElement('div'); - el.style.position = 'absolute'; - el.style.top = '-9999em'; - el.style.overflow = 'scroll'; - document.body.appendChild(el); - scrollbarWidth = el.offsetWidth - el.clientWidth; - document.body.removeChild(el); - } - - var timer; - var resizeHandler = function () { - var vpw = cssHelper.getViewportWidth(); - var vph = cssHelper.getViewportHeight(); - // check whether vp size has really changed, because IE also triggers resize event when body size changes - // 20px allowance to accomodate short appearance of scrollbars in IE in some cases - if (Math.abs(vpw - cvpw) > scrollbarWidth || Math.abs(vph - cvph) > scrollbarWidth) { - cvpw = vpw; - cvph = vph; - clearTimeout(timer); - timer = setTimeout(function () { - if (!nativeSupport()) { - test(); - } - else { - cssHelper.broadcast('cssMediaQueriesTested'); - } - }, 500); - } - }; - - window.onresize = function () { - var x = window.onresize || function () {}; // save original - return function () { - x(); - resizeHandler(); - }; - }(); - }; - - // prevent jumping of layout by hiding everything before painting <body> - var docEl = document.documentElement; - docEl.style.marginLeft = '-32767px'; - - // make sure it comes back after a while - setTimeout(function () { - docEl.style.marginLeft = ''; - }, 5000); - - return function () { - if (!nativeSupport()) { // if browser doesn't support media queries - cssHelper.addListener('newStyleParsed', function (el) { - testStylesheet(el.cssHelperParsed.stylesheet); - }); - // return visibility after media queries are tested - cssHelper.addListener('cssMediaQueriesTested', function () { - // force repaint in IE by changing width - if (ua.ie) { - docEl.style.width = '1px'; - } - setTimeout(function () { - docEl.style.width = ''; // undo width - docEl.style.marginLeft = ''; // undo hide - }, 0); - // remove this listener to prevent following execution - cssHelper.removeListener('cssMediaQueriesTested', arguments.callee); - }); - createMeter(); - test(); - } - else { - docEl.style.marginLeft = ''; // undo visibility hidden - } - checkForResize(); - }; -}()); - - -// bonus: hotfix for IE6 SP1 (bug KB823727) -try { - document.execCommand('BackgroundImageCache', false, true); -} catch (e) {} diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/doctools.js b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/doctools.js deleted file mode 100644 index 344db17ddbb..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/doctools.js +++ /dev/null @@ -1,315 +0,0 @@ -/* - * doctools.js - * ~~~~~~~~~~~ - * - * Sphinx JavaScript utilities for all documentation. - * - * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/** - * select a different prefix for underscore - */ -$u = _.noConflict(); - -/** - * make the code below compatible with browsers without - * an installed firebug like debugger -if (!window.console || !console.firebug) { - var names = ["log", "debug", "info", "warn", "error", "assert", "dir", - "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", - "profile", "profileEnd"]; - window.console = {}; - for (var i = 0; i < names.length; ++i) - window.console[names[i]] = function() {}; -} - */ - -/** - * small helper function to urldecode strings - */ -jQuery.urldecode = function(x) { - return decodeURIComponent(x).replace(/\+/g, ' '); -}; - -/** - * small helper function to urlencode strings - */ -jQuery.urlencode = encodeURIComponent; - -/** - * This function returns the parsed url parameters of the - * current request. Multiple values per key are supported, - * it will always return arrays of strings for the value parts. - */ -jQuery.getQueryParameters = function(s) { - if (typeof s === 'undefined') - s = document.location.search; - var parts = s.substr(s.indexOf('?') + 1).split('&'); - var result = {}; - for (var i = 0; i < parts.length; i++) { - var tmp = parts[i].split('=', 2); - var key = jQuery.urldecode(tmp[0]); - var value = jQuery.urldecode(tmp[1]); - if (key in result) - result[key].push(value); - else - result[key] = [value]; - } - return result; -}; - -/** - * highlight a given string on a jquery object by wrapping it in - * span elements with the given class name. - */ -jQuery.fn.highlightText = function(text, className) { - function highlight(node, addItems) { - if (node.nodeType === 3) { - var val = node.nodeValue; - var pos = val.toLowerCase().indexOf(text); - if (pos >= 0 && - !jQuery(node.parentNode).hasClass(className) && - !jQuery(node.parentNode).hasClass("nohighlight")) { - var span; - var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.className = className; - } - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - node.parentNode.insertBefore(span, node.parentNode.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling)); - node.nodeValue = val.substr(0, pos); - if (isInSVG) { - var bbox = span.getBBox(); - var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); - rect.x.baseVal.value = bbox.x; - rect.y.baseVal.value = bbox.y; - rect.width.baseVal.value = bbox.width; - rect.height.baseVal.value = bbox.height; - rect.setAttribute('class', className); - var parentOfText = node.parentNode.parentNode; - addItems.push({ - "parent": node.parentNode, - "target": rect}); - } - } - } - else if (!jQuery(node).is("button, select, textarea")) { - jQuery.each(node.childNodes, function() { - highlight(this, addItems); - }); - } - } - var addItems = []; - var result = this.each(function() { - highlight(this, addItems); - }); - for (var i = 0; i < addItems.length; ++i) { - jQuery(addItems[i].parent).before(addItems[i].target); - } - return result; -}; - -/* - * backward compatibility for jQuery.browser - * This will be supported until firefox bug is fixed. - */ -if (!jQuery.browser) { - jQuery.uaMatch = function(ua) { - ua = ua.toLowerCase(); - - var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || - /(webkit)[ \/]([\w.]+)/.exec(ua) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || - /(msie) ([\w.]+)/.exec(ua) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || - []; - - return { - browser: match[ 1 ] || "", - version: match[ 2 ] || "0" - }; - }; - jQuery.browser = {}; - jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; -} - -/** - * Small JavaScript module for the documentation. - */ -var Documentation = { - - init : function() { - this.fixFirefoxAnchorBug(); - this.highlightSearchWords(); - this.initIndexTable(); - if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { - this.initOnKeyListeners(); - } - }, - - /** - * i18n support - */ - TRANSLATIONS : {}, - PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, - LOCALE : 'unknown', - - // gettext and ngettext don't access this so that the functions - // can safely bound to a different name (_ = Documentation.gettext) - gettext : function(string) { - var translated = Documentation.TRANSLATIONS[string]; - if (typeof translated === 'undefined') - return string; - return (typeof translated === 'string') ? translated : translated[0]; - }, - - ngettext : function(singular, plural, n) { - var translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated === 'undefined') - return (n == 1) ? singular : plural; - return translated[Documentation.PLURALEXPR(n)]; - }, - - addTranslations : function(catalog) { - for (var key in catalog.messages) - this.TRANSLATIONS[key] = catalog.messages[key]; - this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); - this.LOCALE = catalog.locale; - }, - - /** - * add context elements like header anchor links - */ - addContextElements : function() { - $('div[id] > :header:first').each(function() { - $('<a class="headerlink">\u00B6</a>'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this headline')). - appendTo(this); - }); - $('dt[id]').each(function() { - $('<a class="headerlink">\u00B6</a>'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this definition')). - appendTo(this); - }); - }, - - /** - * workaround a firefox stupidity - * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 - */ - fixFirefoxAnchorBug : function() { - if (document.location.hash && $.browser.mozilla) - window.setTimeout(function() { - document.location.href += ''; - }, 10); - }, - - /** - * highlight the search words provided in the url in the text - */ - highlightSearchWords : function() { - var params = $.getQueryParameters(); - var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; - if (terms.length) { - var body = $('div.body'); - if (!body.length) { - body = $('body'); - } - window.setTimeout(function() { - $.each(terms, function() { - body.highlightText(this.toLowerCase(), 'highlighted'); - }); - }, 10); - $('<p class="highlight-link"><a href="javascript:Documentation.' + - 'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>') - .appendTo($('#searchbox')); - } - }, - - /** - * init the domain index toggle buttons - */ - initIndexTable : function() { - var togglers = $('img.toggler').click(function() { - var src = $(this).attr('src'); - var idnum = $(this).attr('id').substr(7); - $('tr.cg-' + idnum).toggle(); - if (src.substr(-9) === 'minus.png') - $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); - else - $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); - }).css('display', ''); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { - togglers.click(); - } - }, - - /** - * helper function to hide the search marks again - */ - hideSearchWords : function() { - $('#searchbox .highlight-link').fadeOut(300); - $('span.highlighted').removeClass('highlighted'); - }, - - /** - * make the url absolute - */ - makeURL : function(relativeURL) { - return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; - }, - - /** - * get the current relative url - */ - getCurrentURL : function() { - var path = document.location.pathname; - var parts = path.split(/\//); - $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { - if (this === '..') - parts.pop(); - }); - var url = parts.join('/'); - return path.substring(url.lastIndexOf('/') + 1, path.length - 1); - }, - - initOnKeyListeners: function() { - $(document).keyup(function(event) { - var activeElementType = document.activeElement.tagName; - // don't navigate when in search box or textarea - if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') { - switch (event.keyCode) { - case 37: // left - var prevHref = $('link[rel="prev"]').prop('href'); - if (prevHref) { - window.location.href = prevHref; - return false; - } - case 39: // right - var nextHref = $('link[rel="next"]').prop('href'); - if (nextHref) { - window.location.href = nextHref; - return false; - } - } - } - }); - } -}; - -// quick alias for translations -_ = Documentation.gettext; - -$(document).ready(function() { - Documentation.init(); -}); diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/documentation_options.js b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/documentation_options.js deleted file mode 100644 index bee34fe6e64..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/documentation_options.js +++ /dev/null @@ -1,10 +0,0 @@ -var DOCUMENTATION_OPTIONS = { - URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '0.1', - LANGUAGE: 'None', - COLLAPSE_INDEX: false, - FILE_SUFFIX: '.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt', - NAVIGATION_WITH_KEYS: false, -};
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/down-pressed.png b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/down-pressed.png Binary files differdeleted file mode 100644 index 5756c8cad88..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/down-pressed.png +++ /dev/null diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/down.png b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/down.png Binary files differdeleted file mode 100644 index 1b3bdad2cef..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/down.png +++ /dev/null diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/file.png b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/file.png Binary files differdeleted file mode 100644 index a858a410e4f..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/file.png +++ /dev/null diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/jquery-3.2.1.js b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/jquery-3.2.1.js deleted file mode 100644 index d2d8ca4790e..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/jquery-3.2.1.js +++ /dev/null @@ -1,10253 +0,0 @@ -/*! - * jQuery JavaScript Library v3.2.1 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2017-03-20T18:59Z - */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var document = window.document; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var concat = arr.concat; - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -var support = {}; - - - - function DOMEval( code, doc ) { - doc = doc || document; - - var script = doc.createElement( "script" ); - - script.text = code; - doc.head.appendChild( script ).parentNode.removeChild( script ); - } -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.2.1", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }, - - // Support: Android <=4.0 only - // Make sure we trim BOM and NBSP - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, - - // Matches dashed string for camelizing - rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g, - - // Used by jQuery.camelCase as callback to replace() - fcamelCase = function( all, letter ) { - return letter.toUpperCase(); - }; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - - // Return all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - - if ( copyIsArray ) { - copyIsArray = false; - clone = src && Array.isArray( src ) ? src : []; - - } else { - clone = src && jQuery.isPlainObject( src ) ? src : {}; - } - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isFunction: function( obj ) { - return jQuery.type( obj ) === "function"; - }, - - isWindow: function( obj ) { - return obj != null && obj === obj.window; - }, - - isNumeric: function( obj ) { - - // As of jQuery 3.0, isNumeric is limited to - // strings and numbers (primitives or objects) - // that can be coerced to finite numbers (gh-2662) - var type = jQuery.type( obj ); - return ( type === "number" || type === "string" ) && - - // parseFloat NaNs numeric-cast false positives ("") - // ...but misinterprets leading-number strings, particularly hex literals ("0x...") - // subtraction forces infinities to NaN - !isNaN( obj - parseFloat( obj ) ); - }, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - - /* eslint-disable no-unused-vars */ - // See https://github.com/eslint/eslint/issues/6125 - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - type: function( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; - }, - - // Evaluates a script in a global context - globalEval: function( code ) { - DOMEval( code ); - }, - - // Convert dashed to camelCase; used by the css and data modules - // Support: IE <=9 - 11, Edge 12 - 13 - // Microsoft forgot to hump their vendor prefix (#9572) - camelCase: function( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // Support: Android <=4.0 only - trim: function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // Bind a function to a context, optionally partially applying any - // arguments. - proxy: function( fn, context ) { - var tmp, args, proxy; - - if ( typeof context === "string" ) { - tmp = fn[ context ]; - context = fn; - fn = tmp; - } - - // Quick check to determine if target is callable, in the spec - // this throws a TypeError, but we will just return undefined. - if ( !jQuery.isFunction( fn ) ) { - return undefined; - } - - // Simulated bind - args = slice.call( arguments, 2 ); - proxy = function() { - return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); - }; - - // Set the guid of unique handler to the same of original handler, so it can be removed - proxy.guid = fn.guid = fn.guid || jQuery.guid++; - - return proxy; - }, - - now: Date.now, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = jQuery.type( obj ); - - if ( type === "function" || jQuery.isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.3 - * https://sizzlejs.com/ - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2016-08-08 - */ -(function( window ) { - -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ({}).hasOwnProperty, - arr = [], - pop = arr.pop, - push_native = arr.push, - push = arr.push, - slice = arr.slice, - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[i] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier - identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + - "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), - - rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + - "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + - "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + - whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), - funescape = function( _, escaped, escapedWhitespace ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - // Support: Firefox<24 - // Workaround erroneous numeric interpretation of +"0x" - return high !== high || escapedWhitespace ? - escaped : - high < 0 ? - // BMP codepoint - String.fromCharCode( high + 0x10000 ) : - // Supplemental Plane codepoint (surrogate pair) - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - disabledAncestor = addCombinator( - function( elem ) { - return elem.disabled === true && ("form" in elem || "label" in elem); - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - (arr = slice.call( preferredDoc.childNodes )), - preferredDoc.childNodes - ); - // Support: Android<4.0 - // Detect silently failing push.apply - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - push_native.apply( target, slice.call(els) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - // Can't trust NodeList.length - while ( (target[j++] = els[i++]) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - - if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { - setDocument( context ); - } - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { - - // ID selector - if ( (m = match[1]) ) { - - // Document context - if ( nodeType === 9 ) { - if ( (elem = context.getElementById( m )) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && (elem = newContext.getElementById( m )) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[2] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( (m = match[3]) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !compilerCache[ selector + " " ] && - (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { - - if ( nodeType !== 1 ) { - newContext = context; - newSelector = selector; - - // qSA looks outside Element context, which is not what we want - // Thanks to Andrew Dupont for this workaround technique - // Support: IE <=8 - // Exclude object elements - } else if ( context.nodeName.toLowerCase() !== "object" ) { - - // Capture the context ID, setting it first if necessary - if ( (nid = context.getAttribute( "id" )) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", (nid = expando) ); - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[i] = "#" + nid + " " + toSelector( groups[i] ); - } - newSelector = groups.join( "," ); - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - } - - if ( newSelector ) { - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return (cache[ key + " " ] = value); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement("fieldset"); - - try { - return !!fn( el ); - } catch (e) { - return false; - } finally { - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split("|"), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[i] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( (cur = cur.nextSibling) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11 - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - /* jshint -W018 */ - elem.isDisabled !== !disabled && - disabledAncestor( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction(function( argument ) { - argument = +argument; - return markFunction(function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ (j = matchIndexes[i]) ] ) { - seed[j] = !(matches[j] = seed[j]); - } - } - }); - }); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - // documentElement is verified for cases where it doesn't yet exist - // (such as loading iframes in IE - #4833) - var documentElement = elem && (elem.ownerDocument || elem).documentElement; - return documentElement ? documentElement.nodeName !== "HTML" : false; -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); - - // Support: IE 9-11, Edge - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - if ( preferredDoc !== document && - (subWindow = document.defaultView) && subWindow.top !== subWindow ) { - - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); - - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } - } - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert(function( el ) { - el.className = "i"; - return !el.getAttribute("className"); - }); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert(function( el ) { - el.appendChild( document.createComment("") ); - return !el.getElementsByTagName("*").length; - }); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert(function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - }); - - // ID filter and find - if ( support.getById ) { - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute("id") === attrId; - }; - }; - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode("id"); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode("id"); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( (elem = elems[i++]) ) { - node = elem.getAttributeNode("id"); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find["TAG"] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( (elem = results[i++]) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert(function( el ) { - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" + - "<select id='" + expando + "-\r\\' msallowcapture=''>" + - "<option selected=''></option></select>"; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll("[msallowcapture^='']").length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll("[selected]").length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push("~="); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll(":checked").length ) { - rbuggyQSA.push(":checked"); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push(".#.+[+~]"); - } - }); - - assert(function( el ) { - el.innerHTML = "<a href='' disabled='disabled'></a>" + - "<select disabled='disabled'><option/></select>"; - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement("input"); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll("[name=d]").length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll(":enabled").length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll(":disabled").length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll("*,:x"); - rbuggyQSA.push(",.*:"); - }); - } - - if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector) )) ) { - - assert(function( el ) { - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - }); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - )); - } : - function( a, b ) { - if ( b ) { - while ( (b = b.parentNode) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { - - // Choose the first element that is related to our preferred document - if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { - return -1; - } - if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - return a === document ? -1 : - b === document ? 1 : - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( (cur = cur.parentNode) ) { - ap.unshift( cur ); - } - cur = b; - while ( (cur = cur.parentNode) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[i] === bp[i] ) { - i++; - } - - return i ? - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[i], bp[i] ) : - - // Otherwise nodes in our document sort first - ap[i] === preferredDoc ? -1 : - bp[i] === preferredDoc ? 1 : - 0; - }; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - // Make sure that attribute selectors are quoted - expr = expr.replace( rattributeQuotes, "='$1']" ); - - if ( support.matchesSelector && documentIsHTML && - !compilerCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch (e) {} - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - // Set document vars if needed - if ( ( context.ownerDocument || context ) !== document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - (val = elem.getAttributeNode(name)) && val.specified ? - val.value : - null; -}; - -Sizzle.escape = function( sel ) { - return (sel + "").replace( rcssescape, fcssescape ); -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( (elem = results[i++]) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - // If no nodeType, this is expected to be an array - while ( (node = elem[i++]) ) { - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[1] = match[1].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); - - if ( match[2] === "~=" ) { - match[3] = " " + match[3] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[1] = match[1].toLowerCase(); - - if ( match[1].slice( 0, 3 ) === "nth" ) { - // nth-* requires argument - if ( !match[3] ) { - Sizzle.error( match[0] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); - match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); - - // other types prohibit arguments - } else if ( match[3] ) { - Sizzle.error( match[0] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[6] && match[2]; - - if ( matchExpr["CHILD"].test( match[0] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[3] ) { - match[2] = match[4] || match[5] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - // Get excess from tokenize (recursively) - (excess = tokenize( unquoted, true )) && - // advance to the next closing parenthesis - (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { - - // excess is a negative index - match[0] = match[0].slice( 0, excess ); - match[2] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { return true; } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && - classCache( className, function( elem ) { - return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); - }); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - }; - }, - - "CHILD": function( type, what, argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( (node = node[ dir ]) ) { - if ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) { - - return false; - } - } - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( (node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - (diff = nodeIndex = 0) || start.pop()) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - // Use previously-cached element index if available - if ( useCache ) { - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - // Use the same loop as above to seek `elem` from the start - while ( (node = ++nodeIndex && node && node[ dir ] || - (diff = nodeIndex = 0) || start.pop()) ) { - - if ( ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - uniqueCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction(function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf( seed, matched[i] ); - seed[ idx ] = !( matches[ idx ] = matched[i] ); - } - }) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - // Potentially complex pseudos - "not": markFunction(function( selector ) { - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction(function( seed, matches, context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( (elem = unmatched[i]) ) { - seed[i] = !(matches[i] = elem); - } - } - }) : - function( elem, context, xml ) { - input[0] = elem; - matcher( input, null, xml, results ); - // Don't keep the element (issue #299) - input[0] = null; - return !results.pop(); - }; - }), - - "has": markFunction(function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - }), - - "contains": markFunction(function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; - }; - }), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - // lang value must be a valid identifier - if ( !ridentifier.test(lang || "") ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( (elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); - return false; - }; - }), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); - }, - - // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), - - "checked": function( elem ) { - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); - }, - - "selected": function( elem ) { - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos["empty"]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo(function() { - return [ 0 ]; - }), - - "last": createPositionalPseudo(function( matchIndexes, length ) { - return [ length - 1 ]; - }), - - "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - }), - - "even": createPositionalPseudo(function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "odd": createPositionalPseudo(function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }) - } -}; - -Expr.pseudos["nth"] = Expr.pseudos["eq"]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || (match = rcomma.exec( soFar )) ) { - if ( match ) { - // Don't consume trailing commas as valid - soFar = soFar.slice( match[0].length ) || soFar; - } - groups.push( (tokens = []) ); - } - - matched = false; - - // Combinators - if ( (match = rcombinators.exec( soFar )) ) { - matched = match.shift(); - tokens.push({ - value: matched, - // Cast descendant combinators to space - type: match[0].replace( rtrim, " " ) - }); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || - (match = preFilters[ type ]( match ))) ) { - matched = match.shift(); - tokens.push({ - value: matched, - type: type, - matches: match - }); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[i].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || (elem[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { - elem = elem[ dir ] || elem; - } else if ( (oldCache = uniqueCache[ key ]) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return (newCache[ 2 ] = oldCache[ 2 ]); - } else { - // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[i]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[0]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[i], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( (elem = unmatched[i]) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction(function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( (elem = temp[i]) ) { - matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) ) { - // Restore matcherIn since elem is not yet a final match - temp.push( (matcherIn[i] = elem) ); - } - } - postFinder( null, (matcherOut = []), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) && - (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { - - seed[temp] = !(results[temp] = elem); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - }); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[0].type ], - implicitRelative = leadingRelative || Expr.relative[" "], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - (checkContext = context).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( (matcher = Expr.relative[ tokens[i].type ]) ) { - matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; - } else { - matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[j].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), - len = elems.length; - - if ( outermost ) { - outermostContext = context === document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id - for ( ; i !== len && (elem = elems[i]) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - if ( !context && elem.ownerDocument !== document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( (matcher = elementMatchers[j++]) ) { - if ( matcher( elem, context || document, xml) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - // They will have gone through all possible matchers - if ( (elem = !matcher && elem) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( (matcher = setMatchers[j++]) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !(unmatched[i] || setMatched[i]) ) { - setMatched[i] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[i] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( (selector = compiled.selector || selector) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[0] = match[0].slice( 0 ); - if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { - - context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[i]; - - // Abort if we hit a combinator - if ( Expr.relative[ (type = token.type) ] ) { - break; - } - if ( (find = Expr.find[ type ]) ) { - // Search, expanding context for leading sibling combinators - if ( (seed = find( - token.matches[0].replace( runescape, funescape ), - rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context - )) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert(function( el ) { - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; -}); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert(function( el ) { - el.innerHTML = "<a href='#'></a>"; - return el.firstChild.getAttribute("href") === "#" ; -}) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - }); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert(function( el ) { - el.innerHTML = "<input/>"; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -}) ) { - addHandle( "value", function( elem, name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - }); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert(function( el ) { - return el.getAttribute("disabled") == null; -}) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - (val = elem.getAttributeNode( name )) && val.specified ? - val.value : - null; - } - }); -} - -return Sizzle; - -})( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; - - - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -}; -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -var risSimple = /^.[^:#\[\.,]*$/; - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Simple selector that can be filtered directly, removing non-Elements - if ( risSimple.test( qualifier ) ) { - return jQuery.filter( qualifier, elements, not ); - } - - // Complex selector, compare the two sets, removing non-Elements - qualifier = jQuery.filter( qualifier, elements ); - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1; - } ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( jQuery.isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( nodeName( elem, "iframe" ) ) { - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( jQuery.isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && jQuery.isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && jQuery.isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( jQuery.isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.stackTrace ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the stack, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - jQuery.isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - jQuery.isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - jQuery.isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the master Deferred - master = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - master.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( master.state() === "pending" || - jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return master.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); - } - - return master.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -jQuery.Deferred.exceptionHook = function( error, stack ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( jQuery.type( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !jQuery.isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ jQuery.camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ jQuery.camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( jQuery.camelCase ); - } else { - key = jQuery.camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = jQuery.camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - jQuery.contains( elem.ownerDocument, elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - -var swap = function( elem, options, callback, args ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.apply( elem, args || [] ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, - scale = 1, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - do { - - // If previous iteration zeroed out, double until we get *something*. - // Use string for doubling so we don't accidentally see scale as unchanged below - scale = scale || ".5"; - - // Adjust and apply - initialInUnit = initialInUnit / scale; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Update scale, tolerating zero or NaN from tween.cur() - // Break the loop if scale is unchanged or perfect, or if we've just had enough. - } while ( - scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations - ); - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); - -var rscriptType = ( /^$|\/(?:java|ecma)script/i ); - - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - - // Support: IE <=9 only - option: [ 1, "<select multiple='multiple'>", "</select>" ], - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting <tbody> or other required elements. - thead: [ 1, "<table>", "</table>" ], - col: [ 2, "<table><colgroup>", "</colgroup></table>" ], - tr: [ 2, "<table><tbody>", "</tbody></table>" ], - td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], - - _default: [ 0, "", "" ] -}; - -// Support: IE <=9 only -wrapMap.optgroup = wrapMap.option; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, contains, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( jQuery.type( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - contains = jQuery.contains( elem.ownerDocument, elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( contains ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = "<textarea>x</textarea>"; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; -} )(); -var documentElement = document.documentElement; - - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 only -// See #13393 for more info -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = {}; - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - // Make a writable jQuery.Event from the native event object - var event = jQuery.event.fix( nativeEvent ); - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // Triggered event must either 1) have no namespace, or 2) have namespace(s) - // a subset or equal to those in the bound event (both can have no namespace). - if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG <use> instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: jQuery.isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - focus: { - - // Fire native event if possible so blur/focus sequence is correct - trigger: function() { - if ( this !== safeActiveElement() && this.focus ) { - this.focus(); - return false; - } - }, - delegateType: "focusin" - }, - blur: { - trigger: function() { - if ( this === safeActiveElement() && this.blur ) { - this.blur(); - return false; - } - }, - delegateType: "focusout" - }, - click: { - - // For checkbox, fire native event so checked state will be right - trigger: function() { - if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) { - this.click(); - return false; - } - }, - - // For cross-browser consistency, don't fire native .click() on links - _default: function( event ) { - return nodeName( event.target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || jQuery.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - - which: function( event ) { - var button = event.button; - - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } - - if ( button & 2 ) { - return 3; - } - - if ( button & 4 ) { - return 2; - } - - return 0; - } - - return event.which; - } -}, jQuery.event.addProp ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - /* eslint-disable max-len */ - - // See https://github.com/eslint/eslint/issues/3229 - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, - - /* eslint-enable */ - - // Support: IE <=10 - 11, Edge 12 - 13 - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /<script|<style|<link/i, - - // checked="checked" or checked - rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, - rscriptTypeMasked = /^true\/(.*)/, - rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( ">tbody", elem )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - var match = rscriptTypeMasked.exec( elem.type ); - - if ( match ) { - elem.type = match[ 1 ]; - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.access( src ); - pdataCur = dataPriv.set( dest, pdataOld ); - events = pdataOld.events; - - if ( events ) { - delete pdataCur.handle; - pdataCur.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = concat.apply( [], args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - isFunction = jQuery.isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( isFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( isFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl ) { - jQuery._evalUrl( node.src ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html.replace( rxhtmlTag, "<$1></$2>" ); - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = jQuery.contains( elem.ownerDocument, elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rmargin = ( /^margin/ ); - -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - div.style.cssText = - "box-sizing:border-box;" + - "position:relative;display:block;" + - "margin:auto;border:1px;padding:1px;" + - "top:1%;width:50%"; - div.innerHTML = ""; - documentElement.appendChild( container ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = divStyle.marginLeft === "2px"; - boxSizingReliableVal = divStyle.width === "4px"; - - // Support: Android 4.0 - 4.3 only - // Some styles come back with percentage values, even though they shouldn't - div.style.marginRight = "50%"; - pixelMarginRightVal = divStyle.marginRight === "4px"; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + - "padding:0;margin-top:1px;position:absolute"; - container.appendChild( div ); - - jQuery.extend( support, { - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelMarginRight: function() { - computeStyleTests(); - return pixelMarginRightVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }, - - cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style; - -// Return a css property mapped to a potentially vendor prefixed property -function vendorPropName( name ) { - - // Shortcut for names that are not vendor prefixed - if ( name in emptyStyle ) { - return name; - } - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a property mapped along what jQuery.cssProps suggests or to -// a vendor prefixed property. -function finalPropName( name ) { - var ret = jQuery.cssProps[ name ]; - if ( !ret ) { - ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; - } - return ret; -} - -function setPositiveNumber( elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { - var i, - val = 0; - - // If we already have the right measurement, avoid augmentation - if ( extra === ( isBorderBox ? "border" : "content" ) ) { - i = 4; - - // Otherwise initialize for horizontal or vertical properties - } else { - i = name === "width" ? 1 : 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin, so add it if we want it - if ( extra === "margin" ) { - val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); - } - - if ( isBorderBox ) { - - // border-box includes padding, so remove it if we want content - if ( extra === "content" ) { - val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // At this point, extra isn't border nor margin, so remove border - if ( extra !== "margin" ) { - val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } else { - - // At this point, extra isn't content, so add padding - val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // At this point, extra isn't content nor padding, so add border - if ( extra !== "padding" ) { - val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - return val; -} - -function getWidthOrHeight( elem, name, extra ) { - - // Start with computed style - var valueIsBorderBox, - styles = getStyles( elem ), - val = curCSS( elem, name, styles ), - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Computed unit is not pixels. Stop here and return. - if ( rnumnonpx.test( val ) ) { - return val; - } - - // Check for style in case a browser which returns unreliable values - // for getComputedStyle silently falls back to the reliable elem.style - valueIsBorderBox = isBorderBox && - ( support.boxSizingReliable() || val === elem.style[ name ] ); - - // Fall back to offsetWidth/Height when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - if ( val === "auto" ) { - val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ]; - } - - // Normalize "", auto, and prepare for extra - val = parseFloat( val ) || 0; - - // Use the active box-sizing model to add/subtract irrelevant styles - return ( val + - augmentWidthOrHeight( - elem, - name, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: { - "float": "cssFloat" - }, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = jQuery.camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - if ( type === "number" ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = jQuery.camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( i, name ) { - jQuery.cssHooks[ name ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, name, extra ); - } ) : - getWidthOrHeight( elem, name, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = extra && getStyles( elem ), - subtract = extra && augmentWidthOrHeight( - elem, - name, - extra, - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - styles - ); - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ name ] = value; - value = jQuery.css( elem, name ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( !rmargin.test( prefix ) ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && - ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || - jQuery.cssHooks[ tween.prop ] ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = jQuery.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 13 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = jQuery.camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( jQuery.isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - jQuery.proxy( result.stop, result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( jQuery.isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( jQuery.isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - jQuery.isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( jQuery.isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue && type !== false ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = jQuery.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( jQuery.isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( typeof value === "string" && value ) { - classes = value.match( rnothtmlwhite ) || []; - - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( jQuery.isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - if ( typeof value === "string" && value ) { - classes = value.match( rnothtmlwhite ) || []; - - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value; - - if ( typeof stateVal === "boolean" && type === "string" ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( jQuery.isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( type === "string" ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = value.match( rnothtmlwhite ) || []; - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, isFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - isFunction = jQuery.isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( isFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - elem[ type ](); - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + - "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + - "change select submit keydown keypress keyup contextmenu" ).split( " " ), - function( i, name ) { - - // Handle event binding - jQuery.fn[ name ] = function( data, fn ) { - return arguments.length > 0 ? - this.on( name, null, data, fn ) : - this.trigger( name ); - }; -} ); - -jQuery.fn.extend( { - hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - } -} ); - - - - -support.focusin = "onfocusin" in window; - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - var doc = this.ownerDocument || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = jQuery.now(); - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && jQuery.type( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = jQuery.isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( jQuery.isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; - } - } - match = responseHeaders[ key.toLowerCase() ]; - } - return match == null ? null : match; - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 13 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available, append data to url - if ( s.data ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( jQuery.isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - - -jQuery._evalUrl = function( url ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - "throws": true - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( jQuery.isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( jQuery.isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var isFunction = jQuery.isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain requests - if ( s.crossDomain ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( "<script>" ).prop( { - charset: s.scriptCharset, - src: s.url - } ).on( - "load error", - callback = function( evt ) { - script.remove(); - callback = null; - if ( evt ) { - complete( evt.type === "error" ? 404 : 200, evt.type ); - } - } - ); - - // Use native DOM manipulation to avoid our domManip AJAX trickery - document.head.appendChild( script[ 0 ] ); - }, - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -var oldCallbacks = [], - rjsonp = /(=)\?(?=&|$)|\?\?/; - -// Default jsonp settings -jQuery.ajaxSetup( { - jsonp: "callback", - jsonpCallback: function() { - var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); - this[ callback ] = true; - return callback; - } -} ); - -// Detect, normalize options and install callbacks for jsonp requests -jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { - - var callbackName, overwritten, responseContainer, - jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? - "url" : - typeof s.data === "string" && - ( s.contentType || "" ) - .indexOf( "application/x-www-form-urlencoded" ) === 0 && - rjsonp.test( s.data ) && "data" - ); - - // Handle iff the expected data type is "jsonp" or we have a parameter to set - if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { - - // Get callback name, remembering preexisting value associated with it - callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? - s.jsonpCallback() : - s.jsonpCallback; - - // Insert callback into url or form data - if ( jsonProp ) { - s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); - } else if ( s.jsonp !== false ) { - s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; - } - - // Use data converter to retrieve json after script execution - s.converters[ "script json" ] = function() { - if ( !responseContainer ) { - jQuery.error( callbackName + " was not called" ); - } - return responseContainer[ 0 ]; - }; - - // Force json dataType - s.dataTypes[ 0 ] = "json"; - - // Install callback - overwritten = window[ callbackName ]; - window[ callbackName ] = function() { - responseContainer = arguments; - }; - - // Clean-up function (fires after converters) - jqXHR.always( function() { - - // If previous value didn't exist - remove it - if ( overwritten === undefined ) { - jQuery( window ).removeProp( callbackName ); - - // Otherwise restore preexisting value - } else { - window[ callbackName ] = overwritten; - } - - // Save back as free - if ( s[ callbackName ] ) { - - // Make sure that re-using the options doesn't screw things around - s.jsonpCallback = originalSettings.jsonpCallback; - - // Save the callback name for future use - oldCallbacks.push( callbackName ); - } - - // Call if it was a function and we have a response - if ( responseContainer && jQuery.isFunction( overwritten ) ) { - overwritten( responseContainer[ 0 ] ); - } - - responseContainer = overwritten = undefined; - } ); - - // Delegate to script - return "script"; - } -} ); - - - - -// Support: Safari 8 only -// In Safari 8 documents created via document.implementation.createHTMLDocument -// collapse sibling forms: the second one becomes a child of the first one. -// Because of that, this security measure has to be disabled in Safari 8. -// https://bugs.webkit.org/show_bug.cgi?id=137337 -support.createHTMLDocument = ( function() { - var body = document.implementation.createHTMLDocument( "" ).body; - body.innerHTML = "<form></form><form></form>"; - return body.childNodes.length === 2; -} )(); - - -// Argument "data" should be string of html -// context (optional): If specified, the fragment will be created in this context, -// defaults to document -// keepScripts (optional): If true, will include scripts passed in the html string -jQuery.parseHTML = function( data, context, keepScripts ) { - if ( typeof data !== "string" ) { - return []; - } - if ( typeof context === "boolean" ) { - keepScripts = context; - context = false; - } - - var base, parsed, scripts; - - if ( !context ) { - - // Stop scripts or inline event handlers from being executed immediately - // by using document.implementation - if ( support.createHTMLDocument ) { - context = document.implementation.createHTMLDocument( "" ); - - // Set the base href for the created document - // so any parsed elements with URLs - // are based on the document's URL (gh-2965) - base = context.createElement( "base" ); - base.href = document.location.href; - context.head.appendChild( base ); - } else { - context = document; - } - } - - parsed = rsingleTag.exec( data ); - scripts = !keepScripts && []; - - // Single tag - if ( parsed ) { - return [ context.createElement( parsed[ 1 ] ) ]; - } - - parsed = buildFragment( [ data ], context, scripts ); - - if ( scripts && scripts.length ) { - jQuery( scripts ).remove(); - } - - return jQuery.merge( [], parsed.childNodes ); -}; - - -/** - * Load a url into a page - */ -jQuery.fn.load = function( url, params, callback ) { - var selector, type, response, - self = this, - off = url.indexOf( " " ); - - if ( off > -1 ) { - selector = stripAndCollapse( url.slice( off ) ); - url = url.slice( 0, off ); - } - - // If it's a function - if ( jQuery.isFunction( params ) ) { - - // We assume that it's the callback - callback = params; - params = undefined; - - // Otherwise, build a param string - } else if ( params && typeof params === "object" ) { - type = "POST"; - } - - // If we have elements to modify, make the request - if ( self.length > 0 ) { - jQuery.ajax( { - url: url, - - // If "type" variable is undefined, then "GET" method will be used. - // Make value of this field explicit since - // user can override it through ajaxSetup method - type: type || "GET", - dataType: "html", - data: params - } ).done( function( responseText ) { - - // Save response for use in complete callback - response = arguments; - - self.html( selector ? - - // If a selector was specified, locate the right elements in a dummy div - // Exclude scripts to avoid IE 'Permission Denied' errors - jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : - - // Otherwise use the full result - responseText ); - - // If the request succeeds, this function gets "data", "status", "jqXHR" - // but they are ignored because response was set above. - // If it fails, this function gets "jqXHR", "status", "error" - } ).always( callback && function( jqXHR, status ) { - self.each( function() { - callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); - } ); - } ); - } - - return this; -}; - - - - -// Attach a bunch of functions for handling common AJAX events -jQuery.each( [ - "ajaxStart", - "ajaxStop", - "ajaxComplete", - "ajaxError", - "ajaxSuccess", - "ajaxSend" -], function( i, type ) { - jQuery.fn[ type ] = function( fn ) { - return this.on( type, fn ); - }; -} ); - - - - -jQuery.expr.pseudos.animated = function( elem ) { - return jQuery.grep( jQuery.timers, function( fn ) { - return elem === fn.elem; - } ).length; -}; - - - - -jQuery.offset = { - setOffset: function( elem, options, i ) { - var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, - position = jQuery.css( elem, "position" ), - curElem = jQuery( elem ), - props = {}; - - // Set position first, in-case top/left are set even on static elem - if ( position === "static" ) { - elem.style.position = "relative"; - } - - curOffset = curElem.offset(); - curCSSTop = jQuery.css( elem, "top" ); - curCSSLeft = jQuery.css( elem, "left" ); - calculatePosition = ( position === "absolute" || position === "fixed" ) && - ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; - - // Need to be able to calculate position if either - // top or left is auto and position is either absolute or fixed - if ( calculatePosition ) { - curPosition = curElem.position(); - curTop = curPosition.top; - curLeft = curPosition.left; - - } else { - curTop = parseFloat( curCSSTop ) || 0; - curLeft = parseFloat( curCSSLeft ) || 0; - } - - if ( jQuery.isFunction( options ) ) { - - // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) - options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); - } - - if ( options.top != null ) { - props.top = ( options.top - curOffset.top ) + curTop; - } - if ( options.left != null ) { - props.left = ( options.left - curOffset.left ) + curLeft; - } - - if ( "using" in options ) { - options.using.call( elem, props ); - - } else { - curElem.css( props ); - } - } -}; - -jQuery.fn.extend( { - offset: function( options ) { - - // Preserve chaining for setter - if ( arguments.length ) { - return options === undefined ? - this : - this.each( function( i ) { - jQuery.offset.setOffset( this, options, i ); - } ); - } - - var doc, docElem, rect, win, - elem = this[ 0 ]; - - if ( !elem ) { - return; - } - - // Return zeros for disconnected and hidden (display: none) elements (gh-2310) - // Support: IE <=11 only - // Running getBoundingClientRect on a - // disconnected node in IE throws an error - if ( !elem.getClientRects().length ) { - return { top: 0, left: 0 }; - } - - rect = elem.getBoundingClientRect(); - - doc = elem.ownerDocument; - docElem = doc.documentElement; - win = doc.defaultView; - - return { - top: rect.top + win.pageYOffset - docElem.clientTop, - left: rect.left + win.pageXOffset - docElem.clientLeft - }; - }, - - position: function() { - if ( !this[ 0 ] ) { - return; - } - - var offsetParent, offset, - elem = this[ 0 ], - parentOffset = { top: 0, left: 0 }; - - // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, - // because it is its only offset parent - if ( jQuery.css( elem, "position" ) === "fixed" ) { - - // Assume getBoundingClientRect is there when computed position is fixed - offset = elem.getBoundingClientRect(); - - } else { - - // Get *real* offsetParent - offsetParent = this.offsetParent(); - - // Get correct offsets - offset = this.offset(); - if ( !nodeName( offsetParent[ 0 ], "html" ) ) { - parentOffset = offsetParent.offset(); - } - - // Add offsetParent borders - parentOffset = { - top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ), - left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ) - }; - } - - // Subtract parent offsets and element margins - return { - top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), - left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) - }; - }, - - // This method will return documentElement in the following cases: - // 1) For the element inside the iframe without offsetParent, this method will return - // documentElement of the parent window - // 2) For the hidden or detached element - // 3) For body or html element, i.e. in case of the html node - it will return itself - // - // but those exceptions were never presented as a real life use-cases - // and might be considered as more preferable results. - // - // This logic, however, is not guaranteed and can change at any point in the future - offsetParent: function() { - return this.map( function() { - var offsetParent = this.offsetParent; - - while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { - offsetParent = offsetParent.offsetParent; - } - - return offsetParent || documentElement; - } ); - } -} ); - -// Create scrollLeft and scrollTop methods -jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { - var top = "pageYOffset" === prop; - - jQuery.fn[ method ] = function( val ) { - return access( this, function( elem, method, val ) { - - // Coalesce documents and windows - var win; - if ( jQuery.isWindow( elem ) ) { - win = elem; - } else if ( elem.nodeType === 9 ) { - win = elem.defaultView; - } - - if ( val === undefined ) { - return win ? win[ prop ] : elem[ method ]; - } - - if ( win ) { - win.scrollTo( - !top ? val : win.pageXOffset, - top ? val : win.pageYOffset - ); - - } else { - elem[ method ] = val; - } - }, method, val, arguments.length ); - }; -} ); - -// Support: Safari <=7 - 9.1, Chrome <=37 - 49 -// Add the top/left cssHooks using jQuery.fn.position -// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 -// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347 -// getComputedStyle returns percent when specified for top/left/bottom/right; -// rather than make the css module depend on the offset module, just check for it here -jQuery.each( [ "top", "left" ], function( i, prop ) { - jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, - function( elem, computed ) { - if ( computed ) { - computed = curCSS( elem, prop ); - - // If curCSS returns percentage, fallback to offset - return rnumnonpx.test( computed ) ? - jQuery( elem ).position()[ prop ] + "px" : - computed; - } - } - ); -} ); - - -// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods -jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { - jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, - function( defaultExtra, funcName ) { - - // Margin is only for outerHeight, outerWidth - jQuery.fn[ funcName ] = function( margin, value ) { - var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), - extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); - - return access( this, function( elem, type, value ) { - var doc; - - if ( jQuery.isWindow( elem ) ) { - - // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729) - return funcName.indexOf( "outer" ) === 0 ? - elem[ "inner" + name ] : - elem.document.documentElement[ "client" + name ]; - } - - // Get document width or height - if ( elem.nodeType === 9 ) { - doc = elem.documentElement; - - // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], - // whichever is greatest - return Math.max( - elem.body[ "scroll" + name ], doc[ "scroll" + name ], - elem.body[ "offset" + name ], doc[ "offset" + name ], - doc[ "client" + name ] - ); - } - - return value === undefined ? - - // Get width or height on the element, requesting but not forcing parseFloat - jQuery.css( elem, type, extra ) : - - // Set width or height on the element - jQuery.style( elem, type, value, extra ); - }, type, chainable ? margin : undefined, chainable ); - }; - } ); -} ); - - -jQuery.fn.extend( { - - bind: function( types, data, fn ) { - return this.on( types, null, data, fn ); - }, - unbind: function( types, fn ) { - return this.off( types, null, fn ); - }, - - delegate: function( selector, types, data, fn ) { - return this.on( types, selector, data, fn ); - }, - undelegate: function( selector, types, fn ) { - - // ( namespace ) or ( selector, types [, fn] ) - return arguments.length === 1 ? - this.off( selector, "**" ) : - this.off( types, selector || "**", fn ); - } -} ); - -jQuery.holdReady = function( hold ) { - if ( hold ) { - jQuery.readyWait++; - } else { - jQuery.ready( true ); - } -}; -jQuery.isArray = Array.isArray; -jQuery.parseJSON = JSON.parse; -jQuery.nodeName = nodeName; - - - - -// Register as a named AMD module, since jQuery can be concatenated with other -// files that may use define, but not via a proper concatenation script that -// understands anonymous AMD modules. A named AMD is safest and most robust -// way to register. Lowercase jquery is used because AMD module names are -// derived from file names, and jQuery is normally delivered in a lowercase -// file name. Do this after creating the global so that if an AMD module wants -// to call noConflict to hide this version of jQuery, it will work. - -// Note that for maximum portability, libraries that are not jQuery should -// declare themselves as anonymous modules, and avoid setting a global if an -// AMD loader is present. jQuery is a special case. For more information, see -// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon - -if ( typeof define === "function" && define.amd ) { - define( "jquery", [], function() { - return jQuery; - } ); -} - - - - -var - - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - - // Map over the $ in case of overwrite - _$ = window.$; - -jQuery.noConflict = function( deep ) { - if ( window.$ === jQuery ) { - window.$ = _$; - } - - if ( deep && window.jQuery === jQuery ) { - window.jQuery = _jQuery; - } - - return jQuery; -}; - -// Expose jQuery and $ identifiers, even in AMD -// (#7102#comment:10, https://github.com/jquery/jquery/pull/557) -// and CommonJS for browser emulators (#13566) -if ( !noGlobal ) { - window.jQuery = window.$ = jQuery; -} - - - - -return jQuery; -} ); diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/jquery.js b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/jquery.js deleted file mode 100644 index 644d35e274f..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/jquery.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=Array.isArray(d)))?(e?(e=!1,f=c&&Array.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,N,e),g(f,c,O,e)):(f++,j.call(a,g(f,c,N,e),g(f,c,O,e),g(f,c,N,c.notifyWith))):(d!==N&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S), -a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},U=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function V(){this.expando=r.expando+V.uid++}V.uid=1,V.prototype={cache:function(a){var b=a[this.expando];return b||(b={},U(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){Array.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(L)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var W=new V,X=new V,Y=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function $(a){return"true"===a||"false"!==a&&("null"===a?null:a===+a+""?+a:Y.test(a)?JSON.parse(a):a)}function _(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Z,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c=$(c)}catch(e){}X.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return X.hasData(a)||W.hasData(a)},data:function(a,b,c){return X.access(a,b,c)},removeData:function(a,b){X.remove(a,b)},_data:function(a,b,c){return W.access(a,b,c)},_removeData:function(a,b){W.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=X.get(f),1===f.nodeType&&!W.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),_(f,d,e[d])));W.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){X.set(this,a)}):T(this,function(b){var c;if(f&&void 0===b){if(c=X.get(f,a),void 0!==c)return c;if(c=_(f,a),void 0!==c)return c}else this.each(function(){X.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=W.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var aa=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ba=new RegExp("^(?:([+-])=|)("+aa+")([a-z%]*)$","i"),ca=["Top","Right","Bottom","Left"],da=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ea=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function fa(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&ba.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var ga={};function ha(a){var b,c=a.ownerDocument,d=a.nodeName,e=ga[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ga[d]=e,e)}function ia(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=W.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&da(d)&&(e[f]=ha(d))):"none"!==c&&(e[f]="none",W.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ia(this,!0)},hide:function(){return ia(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){da(this)?r(this).show():r(this).hide()})}});var ja=/^(?:checkbox|radio)$/i,ka=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c<d;c++)W.set(a[c],"globalEval",!b||W.get(b[c],"globalEval"))}var pa=/<|&#?\w+;/;function qa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(pa.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ka.exec(f)||["",""])[1].toLowerCase(),i=ma[h]||ma._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g,h=[],i=b.delegateCount,j=a.target;if(i&&j.nodeType&&!("click"===a.type&&a.button>=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c<i;c++)d=b[c],e=d.selector+" ",void 0===g[e]&&(g[e]=d.needsContext?r(e,this).index(j)>-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i<b.length&&h.push({elem:j,handlers:b.slice(i)}),h},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==xa()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===xa()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&B(this,"input"))return this.click(),!1},_default:function(a){return B(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?va:wa,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:wa,isPropagationStopped:wa,isImmediatePropagationStopped:wa,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=va,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=va,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=va,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&sa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ta.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return ya(this,a,b,c,d)},one:function(a,b,c,d){return ya(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=wa),this.each(function(){r.event.remove(this,a,c,b)})}});var za=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/<script|<style|<link/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,Ca=/^true\/(.*)/,Da=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}X.hasData(a)&&(h=X.access(a),i=r.extend({},h),X.set(b,i))}}function Ia(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ja.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ja(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,na(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ga),l=0;l<i;l++)j=h[l],la.test(j.type||"")&&!W.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Da,""),k))}return a}function Ka(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(na(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&oa(na(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(za,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d<e;d++)Ia(f[d],g[d]);if(b)if(c)for(f=f||na(a),g=g||na(h),d=0,e=f.length;d<e;d++)Ha(f[d],g[d]);else Ha(a,h);return g=na(h,"script"),g.length>0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(na(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ja(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(na(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var La=/^margin/,Ma=new RegExp("^("+aa+")(?!px)[a-z%]+$","i"),Na=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",ra.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,ra.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Oa(a,b,c){var d,e,f,g,h=a.style;return c=c||Na(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ma.test(g)&&La.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function Pa(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Qa=/^(none|table(?!-c[ea]).+)/,Ra=/^--/,Sa={position:"absolute",visibility:"hidden",display:"block"},Ta={letterSpacing:"0",fontWeight:"400"},Ua=["Webkit","Moz","ms"],Va=d.createElement("div").style;function Wa(a){if(a in Va)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ua.length;while(c--)if(a=Ua[c]+b,a in Va)return a}function Xa(a){var b=r.cssProps[a];return b||(b=r.cssProps[a]=Wa(a)||a),b}function Ya(a,b,c){var d=ba.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Za(a,b,c,d,e){var f,g=0;for(f=c===(d?"border":"content")?4:"width"===b?1:0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+ca[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+ca[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+ca[f]+"Width",!0,e))):(g+=r.css(a,"padding"+ca[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+ca[f]+"Width",!0,e)));return g}function $a(a,b,c){var d,e=Na(a),f=Oa(a,b,e),g="border-box"===r.css(a,"boxSizing",!1,e);return Ma.test(f)?f:(d=g&&(o.boxSizingReliable()||f===a.style[b]),"auto"===f&&(f=a["offset"+b[0].toUpperCase()+b.slice(1)]),f=parseFloat(f)||0,f+Za(a,b,c||(g?"border":"content"),d,e)+"px")}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Oa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=Ra.test(b),j=a.style;return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:j[b]:(f=typeof c,"string"===f&&(e=ba.exec(c))&&e[1]&&(c=fa(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(j[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i?j.setProperty(b,c):j[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b),i=Ra.test(b);return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Oa(a,b,d)),"normal"===e&&b in Ta&&(e=Ta[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Qa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?$a(a,b,d):ea(a,Sa,function(){return $a(a,b,d)})},set:function(a,c,d){var e,f=d&&Na(a),g=d&&Za(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=ba.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ya(a,c,g)}}}),r.cssHooks.marginLeft=Pa(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Oa(a,"marginLeft"))||a.getBoundingClientRect().left-ea(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+ca[d]+b]=f[d]||f[d-2]||f[0];return e}},La.test(a)||(r.cssHooks[a+b].set=Ya)}),r.fn.extend({css:function(a,b){return T(this,function(a,b,c){var d,e,f={},g=0;if(Array.isArray(b)){for(d=Na(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&da(a),q=W.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],cb.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=W.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ia([a],!0),j=a.style.display||j,k=r.css(a,"display"),ia([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=W.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ia([a],!0),m.done(function(){p||ia([a]),W.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=hb(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],Array.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=kb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=ab||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;g<i;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),f<1&&i?c:(i||h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:ab||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;c<d;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);f<g;f++)if(d=kb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,hb,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j}r.Animation=r.extend(kb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return fa(c.elem,a,ba.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(L);for(var c,d=0,e=a.length;d<e;d++)c=a[d],kb.tweeners[c]=kb.tweeners[c]||[],kb.tweeners[c].unshift(b)},prefilters:[ib],prefilter:function(a,b){b?kb.prefilters.unshift(a):kb.prefilters.push(a)}}),r.speed=function(a,b,c){var d=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off?d.duration=0:"number"!=typeof d.duration&&(d.duration in r.fx.speeds?d.duration=r.fx.speeds[d.duration]:d.duration=r.fx.speeds._default),null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){r.isFunction(d.old)&&d.old.call(this),d.queue&&r.dequeue(this,d.queue)},d},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(da).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=kb(this,r.extend({},a),f);(e||W.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=r.timers,g=W.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&db.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=W.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;b<g;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),r.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(ab=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),ab=void 0},r.fx.timer=function(a){r.timers.push(a),r.fx.start()},r.fx.interval=13,r.fx.start=function(){bb||(bb=!0,eb())},r.fx.stop=function(){bb=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var lb,mb=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return T(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b), -null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d<i;d++)if(c=e[d],(c.selected||d===f)&&!c.disabled&&(!c.parentNode.disabled||!B(c.parentNode,"optgroup"))){if(b=r(c).val(),g)return b;h.push(b)}return h},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Tb=[],Ub=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Tb.pop()||r.expando+"_"+ub++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Ub.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ub.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Ub,"$1"+e):b.jsonp!==!1&&(b.url+=(vb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Tb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=C.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=qa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=pb(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length},r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),b=f.ownerDocument,c=b.documentElement,e=b.defaultView,{top:d.top+e.pageYOffset-c.clientTop,left:d.left+e.pageXOffset-c.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),B(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||ra})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return T(this,function(a,d,e){var f;return r.isWindow(a)?f=a:9===a.nodeType&&(f=a.defaultView),void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Pa(o.pixelPosition,function(a,c){if(c)return c=Oa(a,b),Ma.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return T(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),r.holdReady=function(a){a?r.readyWait++:r.ready(!0)},r.isArray=Array.isArray,r.parseJSON=JSON.parse,r.nodeName=B,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Vb=a.jQuery,Wb=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Wb),b&&a.jQuery===r&&(a.jQuery=Vb),r},b||(a.jQuery=a.$=r),r}); diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/language_data.js b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/language_data.js deleted file mode 100644 index 5266fb19ecb..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/language_data.js +++ /dev/null @@ -1,297 +0,0 @@ -/* - * language_data.js - * ~~~~~~~~~~~~~~~~ - * - * This script contains the language-specific data used by searchtools.js, - * namely the list of stopwords, stemmer, scorer and splitter. - * - * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"]; - - -/* Non-minified version JS is _stemmer.js if file is provided */ -/** - * Porter Stemmer - */ -var Stemmer = function() { - - var step2list = { - ational: 'ate', - tional: 'tion', - enci: 'ence', - anci: 'ance', - izer: 'ize', - bli: 'ble', - alli: 'al', - entli: 'ent', - eli: 'e', - ousli: 'ous', - ization: 'ize', - ation: 'ate', - ator: 'ate', - alism: 'al', - iveness: 'ive', - fulness: 'ful', - ousness: 'ous', - aliti: 'al', - iviti: 'ive', - biliti: 'ble', - logi: 'log' - }; - - var step3list = { - icate: 'ic', - ative: '', - alize: 'al', - iciti: 'ic', - ical: 'ic', - ful: '', - ness: '' - }; - - var c = "[^aeiou]"; // consonant - var v = "[aeiouy]"; // vowel - var C = c + "[^aeiouy]*"; // consonant sequence - var V = v + "[aeiou]*"; // vowel sequence - - var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 - var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 - var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 - var s_v = "^(" + C + ")?" + v; // vowel in stem - - this.stemWord = function (w) { - var stem; - var suffix; - var firstch; - var origword = w; - - if (w.length < 3) - return w; - - var re; - var re2; - var re3; - var re4; - - firstch = w.substr(0,1); - if (firstch == "y") - w = firstch.toUpperCase() + w.substr(1); - - // Step 1a - re = /^(.+?)(ss|i)es$/; - re2 = /^(.+?)([^s])s$/; - - if (re.test(w)) - w = w.replace(re,"$1$2"); - else if (re2.test(w)) - w = w.replace(re2,"$1$2"); - - // Step 1b - re = /^(.+?)eed$/; - re2 = /^(.+?)(ed|ing)$/; - if (re.test(w)) { - var fp = re.exec(w); - re = new RegExp(mgr0); - if (re.test(fp[1])) { - re = /.$/; - w = w.replace(re,""); - } - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1]; - re2 = new RegExp(s_v); - if (re2.test(stem)) { - w = stem; - re2 = /(at|bl|iz)$/; - re3 = new RegExp("([^aeiouylsz])\\1$"); - re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re2.test(w)) - w = w + "e"; - else if (re3.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - else if (re4.test(w)) - w = w + "e"; - } - } - - // Step 1c - re = /^(.+?)y$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(s_v); - if (re.test(stem)) - w = stem + "i"; - } - - // Step 2 - re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step2list[suffix]; - } - - // Step 3 - re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step3list[suffix]; - } - - // Step 4 - re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; - re2 = /^(.+?)(s|t)(ion)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - if (re.test(stem)) - w = stem; - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1] + fp[2]; - re2 = new RegExp(mgr1); - if (re2.test(stem)) - w = stem; - } - - // Step 5 - re = /^(.+?)e$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - re2 = new RegExp(meq1); - re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) - w = stem; - } - re = /ll$/; - re2 = new RegExp(mgr1); - if (re.test(w) && re2.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - - // and turn initial Y back to y - if (firstch == "y") - w = firstch.toLowerCase() + w.substr(1); - return w; - } -} - - - - - -var splitChars = (function() { - var result = {}; - var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648, - 1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702, - 2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971, - 2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345, - 3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761, - 3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823, - 4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125, - 8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695, - 11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587, - 43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141]; - var i, j, start, end; - for (i = 0; i < singles.length; i++) { - result[singles[i]] = true; - } - var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709], - [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161], - [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568], - [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807], - [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047], - [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383], - [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450], - [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547], - [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673], - [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820], - [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946], - [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023], - [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173], - [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332], - [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481], - [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718], - [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791], - [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095], - [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205], - [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687], - [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968], - [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869], - [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102], - [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271], - [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592], - [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822], - [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167], - [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959], - [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143], - [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318], - [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483], - [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101], - [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567], - [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292], - [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444], - [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783], - [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311], - [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511], - [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774], - [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071], - [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263], - [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519], - [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647], - [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967], - [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295], - [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274], - [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007], - [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381], - [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]]; - for (i = 0; i < ranges.length; i++) { - start = ranges[i][0]; - end = ranges[i][1]; - for (j = start; j <= end; j++) { - result[j] = true; - } - } - return result; -})(); - -function splitQuery(query) { - var result = []; - var start = -1; - for (var i = 0; i < query.length; i++) { - if (splitChars[query.charCodeAt(i)]) { - if (start !== -1) { - result.push(query.slice(start, i)); - start = -1; - } - } else if (start === -1) { - start = i; - } - } - if (start !== -1) { - result.push(query.slice(start)); - } - return result; -} - - diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/minus.png b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/minus.png Binary files differdeleted file mode 100644 index d96755fdaf8..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/minus.png +++ /dev/null diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/plus.png b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/plus.png Binary files differdeleted file mode 100644 index 7107cec93a9..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/plus.png +++ /dev/null diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/pygments.css b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/pygments.css deleted file mode 100644 index a5e279dcaea..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/pygments.css +++ /dev/null @@ -1,69 +0,0 @@ -.highlight .hll { background-color: #ffffcc }
-.highlight { background: #eeffcc; }
-.highlight .c { color: #408090; font-style: italic } /* Comment */
-.highlight .err { border: 1px solid #FF0000 } /* Error */
-.highlight .k { color: #007020; font-weight: bold } /* Keyword */
-.highlight .o { color: #666666 } /* Operator */
-.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */
-.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */
-.highlight .cp { color: #007020 } /* Comment.Preproc */
-.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */
-.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */
-.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */
-.highlight .gd { color: #A00000 } /* Generic.Deleted */
-.highlight .ge { font-style: italic } /* Generic.Emph */
-.highlight .gr { color: #FF0000 } /* Generic.Error */
-.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
-.highlight .gi { color: #00A000 } /* Generic.Inserted */
-.highlight .go { color: #333333 } /* Generic.Output */
-.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
-.highlight .gs { font-weight: bold } /* Generic.Strong */
-.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
-.highlight .gt { color: #0044DD } /* Generic.Traceback */
-.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
-.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
-.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
-.highlight .kp { color: #007020 } /* Keyword.Pseudo */
-.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
-.highlight .kt { color: #902000 } /* Keyword.Type */
-.highlight .m { color: #208050 } /* Literal.Number */
-.highlight .s { color: #4070a0 } /* Literal.String */
-.highlight .na { color: #4070a0 } /* Name.Attribute */
-.highlight .nb { color: #007020 } /* Name.Builtin */
-.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
-.highlight .no { color: #60add5 } /* Name.Constant */
-.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */
-.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */
-.highlight .ne { color: #007020 } /* Name.Exception */
-.highlight .nf { color: #06287e } /* Name.Function */
-.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
-.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
-.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
-.highlight .nv { color: #bb60d5 } /* Name.Variable */
-.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
-.highlight .w { color: #bbbbbb } /* Text.Whitespace */
-.highlight .mb { color: #208050 } /* Literal.Number.Bin */
-.highlight .mf { color: #208050 } /* Literal.Number.Float */
-.highlight .mh { color: #208050 } /* Literal.Number.Hex */
-.highlight .mi { color: #208050 } /* Literal.Number.Integer */
-.highlight .mo { color: #208050 } /* Literal.Number.Oct */
-.highlight .sa { color: #4070a0 } /* Literal.String.Affix */
-.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
-.highlight .sc { color: #4070a0 } /* Literal.String.Char */
-.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */
-.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
-.highlight .s2 { color: #4070a0 } /* Literal.String.Double */
-.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
-.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */
-.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
-.highlight .sx { color: #c65d09 } /* Literal.String.Other */
-.highlight .sr { color: #235388 } /* Literal.String.Regex */
-.highlight .s1 { color: #4070a0 } /* Literal.String.Single */
-.highlight .ss { color: #517918 } /* Literal.String.Symbol */
-.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
-.highlight .fm { color: #06287e } /* Name.Function.Magic */
-.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
-.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
-.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
-.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */
-.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/searchtools.js b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/searchtools.js deleted file mode 100644 index 5ff318066d8..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/searchtools.js +++ /dev/null @@ -1,481 +0,0 @@ -/* - * searchtools.js - * ~~~~~~~~~~~~~~~~ - * - * Sphinx JavaScript utilities for the full-text search. - * - * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -if (!Scorer) { - /** - * Simple result scoring code. - */ - var Scorer = { - // Implement the following function to further tweak the score for each result - // The function takes a result array [filename, title, anchor, descr, score] - // and returns the new score. - /* - score: function(result) { - return result[4]; - }, - */ - - // query matches the full name of an object - objNameMatch: 11, - // or matches in the last dotted part of the object name - objPartialMatch: 6, - // Additive scores depending on the priority of the object - objPrio: {0: 15, // used to be importantResults - 1: 5, // used to be objectResults - 2: -5}, // used to be unimportantResults - // Used when the priority is not in the mapping. - objPrioDefault: 0, - - // query found in title - title: 15, - // query found in terms - term: 5 - }; -} - -if (!splitQuery) { - function splitQuery(query) { - return query.split(/\s+/); - } -} - -/** - * Search Module - */ -var Search = { - - _index : null, - _queued_query : null, - _pulse_status : -1, - - init : function() { - var params = $.getQueryParameters(); - if (params.q) { - var query = params.q[0]; - $('input[name="q"]')[0].value = query; - this.performSearch(query); - } - }, - - loadIndex : function(url) { - $.ajax({type: "GET", url: url, data: null, - dataType: "script", cache: true, - complete: function(jqxhr, textstatus) { - if (textstatus != "success") { - document.getElementById("searchindexloader").src = url; - } - }}); - }, - - setIndex : function(index) { - var q; - this._index = index; - if ((q = this._queued_query) !== null) { - this._queued_query = null; - Search.query(q); - } - }, - - hasIndex : function() { - return this._index !== null; - }, - - deferQuery : function(query) { - this._queued_query = query; - }, - - stopPulse : function() { - this._pulse_status = 0; - }, - - startPulse : function() { - if (this._pulse_status >= 0) - return; - function pulse() { - var i; - Search._pulse_status = (Search._pulse_status + 1) % 4; - var dotString = ''; - for (i = 0; i < Search._pulse_status; i++) - dotString += '.'; - Search.dots.text(dotString); - if (Search._pulse_status > -1) - window.setTimeout(pulse, 500); - } - pulse(); - }, - - /** - * perform a search for something (or wait until index is loaded) - */ - performSearch : function(query) { - // create the required interface elements - this.out = $('#search-results'); - this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out); - this.dots = $('<span></span>').appendTo(this.title); - this.status = $('<p style="display: none"></p>').appendTo(this.out); - this.output = $('<ul class="search"/>').appendTo(this.out); - - $('#search-progress').text(_('Preparing search...')); - this.startPulse(); - - // index already loaded, the browser was quick! - if (this.hasIndex()) - this.query(query); - else - this.deferQuery(query); - }, - - /** - * execute search (requires search index to be loaded) - */ - query : function(query) { - var i; - - // stem the searchterms and add them to the correct list - var stemmer = new Stemmer(); - var searchterms = []; - var excluded = []; - var hlterms = []; - var tmp = splitQuery(query); - var objectterms = []; - for (i = 0; i < tmp.length; i++) { - if (tmp[i] !== "") { - objectterms.push(tmp[i].toLowerCase()); - } - - if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i].match(/^\d+$/) || - tmp[i] === "") { - // skip this "word" - continue; - } - // stem the word - var word = stemmer.stemWord(tmp[i].toLowerCase()); - // prevent stemmer from cutting word smaller than two chars - if(word.length < 3 && tmp[i].length >= 3) { - word = tmp[i]; - } - var toAppend; - // select the correct list - if (word[0] == '-') { - toAppend = excluded; - word = word.substr(1); - } - else { - toAppend = searchterms; - hlterms.push(tmp[i].toLowerCase()); - } - // only add if not already in the list - if (!$u.contains(toAppend, word)) - toAppend.push(word); - } - var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" ")); - - // console.debug('SEARCH: searching for:'); - // console.info('required: ', searchterms); - // console.info('excluded: ', excluded); - - // prepare search - var terms = this._index.terms; - var titleterms = this._index.titleterms; - - // array of [filename, title, anchor, descr, score] - var results = []; - $('#search-progress').empty(); - - // lookup as object - for (i = 0; i < objectterms.length; i++) { - var others = [].concat(objectterms.slice(0, i), - objectterms.slice(i+1, objectterms.length)); - results = results.concat(this.performObjectSearch(objectterms[i], others)); - } - - // lookup as search terms in fulltext - results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms)); - - // let the scorer override scores with a custom scoring function - if (Scorer.score) { - for (i = 0; i < results.length; i++) - results[i][4] = Scorer.score(results[i]); - } - - // now sort the results by score (in opposite order of appearance, since the - // display function below uses pop() to retrieve items) and then - // alphabetically - results.sort(function(a, b) { - var left = a[4]; - var right = b[4]; - if (left > right) { - return 1; - } else if (left < right) { - return -1; - } else { - // same score: sort alphabetically - left = a[1].toLowerCase(); - right = b[1].toLowerCase(); - return (left > right) ? -1 : ((left < right) ? 1 : 0); - } - }); - - // for debugging - //Search.lastresults = results.slice(); // a copy - //console.info('search results:', Search.lastresults); - - // print the results - var resultCount = results.length; - function displayNextItem() { - // results left, load the summary and display it - if (results.length) { - var item = results.pop(); - var listItem = $('<li style="display:none"></li>'); - if (DOCUMENTATION_OPTIONS.FILE_SUFFIX === '') { - // dirhtml builder - var dirname = item[0] + '/'; - if (dirname.match(/\/index\/$/)) { - dirname = dirname.substring(0, dirname.length-6); - } else if (dirname == 'index/') { - dirname = ''; - } - listItem.append($('<a/>').attr('href', - DOCUMENTATION_OPTIONS.URL_ROOT + dirname + - highlightstring + item[2]).html(item[1])); - } else { - // normal html builders - listItem.append($('<a/>').attr('href', - item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX + - highlightstring + item[2]).html(item[1])); - } - if (item[3]) { - listItem.append($('<span> (' + item[3] + ')</span>')); - Search.output.append(listItem); - listItem.slideDown(5, function() { - displayNextItem(); - }); - } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) { - var suffix = DOCUMENTATION_OPTIONS.SOURCELINK_SUFFIX; - if (suffix === undefined) { - suffix = '.txt'; - } - $.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[5] + (item[5].slice(-suffix.length) === suffix ? '' : suffix), - dataType: "text", - complete: function(jqxhr, textstatus) { - var data = jqxhr.responseText; - if (data !== '' && data !== undefined) { - listItem.append(Search.makeSearchSummary(data, searchterms, hlterms)); - } - Search.output.append(listItem); - listItem.slideDown(5, function() { - displayNextItem(); - }); - }}); - } else { - // no source available, just display title - Search.output.append(listItem); - listItem.slideDown(5, function() { - displayNextItem(); - }); - } - } - // search finished, update title and status message - else { - Search.stopPulse(); - Search.title.text(_('Search Results')); - if (!resultCount) - Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.')); - else - Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount)); - Search.status.fadeIn(500); - } - } - displayNextItem(); - }, - - /** - * search for object names - */ - performObjectSearch : function(object, otherterms) { - var filenames = this._index.filenames; - var docnames = this._index.docnames; - var objects = this._index.objects; - var objnames = this._index.objnames; - var titles = this._index.titles; - - var i; - var results = []; - - for (var prefix in objects) { - for (var name in objects[prefix]) { - var fullname = (prefix ? prefix + '.' : '') + name; - if (fullname.toLowerCase().indexOf(object) > -1) { - var score = 0; - var parts = fullname.split('.'); - // check for different match types: exact matches of full name or - // "last name" (i.e. last dotted part) - if (fullname == object || parts[parts.length - 1] == object) { - score += Scorer.objNameMatch; - // matches in last name - } else if (parts[parts.length - 1].indexOf(object) > -1) { - score += Scorer.objPartialMatch; - } - var match = objects[prefix][name]; - var objname = objnames[match[1]][2]; - var title = titles[match[0]]; - // If more than one term searched for, we require other words to be - // found in the name/title/description - if (otherterms.length > 0) { - var haystack = (prefix + ' ' + name + ' ' + - objname + ' ' + title).toLowerCase(); - var allfound = true; - for (i = 0; i < otherterms.length; i++) { - if (haystack.indexOf(otherterms[i]) == -1) { - allfound = false; - break; - } - } - if (!allfound) { - continue; - } - } - var descr = objname + _(', in ') + title; - - var anchor = match[3]; - if (anchor === '') - anchor = fullname; - else if (anchor == '-') - anchor = objnames[match[1]][1] + '-' + fullname; - // add custom score for some objects according to scorer - if (Scorer.objPrio.hasOwnProperty(match[2])) { - score += Scorer.objPrio[match[2]]; - } else { - score += Scorer.objPrioDefault; - } - results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]); - } - } - } - - return results; - }, - - /** - * search for full-text terms in the index - */ - performTermsSearch : function(searchterms, excluded, terms, titleterms) { - var docnames = this._index.docnames; - var filenames = this._index.filenames; - var titles = this._index.titles; - - var i, j, file; - var fileMap = {}; - var scoreMap = {}; - var results = []; - - // perform the search on the required terms - for (i = 0; i < searchterms.length; i++) { - var word = searchterms[i]; - var files = []; - var _o = [ - {files: terms[word], score: Scorer.term}, - {files: titleterms[word], score: Scorer.title} - ]; - - // no match but word was a required one - if ($u.every(_o, function(o){return o.files === undefined;})) { - break; - } - // found search word in contents - $u.each(_o, function(o) { - var _files = o.files; - if (_files === undefined) - return - - if (_files.length === undefined) - _files = [_files]; - files = files.concat(_files); - - // set score for the word in each file to Scorer.term - for (j = 0; j < _files.length; j++) { - file = _files[j]; - if (!(file in scoreMap)) - scoreMap[file] = {} - scoreMap[file][word] = o.score; - } - }); - - // create the mapping - for (j = 0; j < files.length; j++) { - file = files[j]; - if (file in fileMap) - fileMap[file].push(word); - else - fileMap[file] = [word]; - } - } - - // now check if the files don't contain excluded terms - for (file in fileMap) { - var valid = true; - - // check if all requirements are matched - if (fileMap[file].length != searchterms.length) - continue; - - // ensure that none of the excluded terms is in the search result - for (i = 0; i < excluded.length; i++) { - if (terms[excluded[i]] == file || - titleterms[excluded[i]] == file || - $u.contains(terms[excluded[i]] || [], file) || - $u.contains(titleterms[excluded[i]] || [], file)) { - valid = false; - break; - } - } - - // if we have still a valid result we can add it to the result list - if (valid) { - // select one (max) score for the file. - // for better ranking, we should calculate ranking by using words statistics like basic tf-idf... - var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]})); - results.push([docnames[file], titles[file], '', null, score, filenames[file]]); - } - } - return results; - }, - - /** - * helper function to return a node containing the - * search summary for a given text. keywords is a list - * of stemmed words, hlwords is the list of normal, unstemmed - * words. the first one is used to find the occurrence, the - * latter for highlighting it. - */ - makeSearchSummary : function(text, keywords, hlwords) { - var textLower = text.toLowerCase(); - var start = 0; - $.each(keywords, function() { - var i = textLower.indexOf(this.toLowerCase()); - if (i > -1) - start = i; - }); - start = Math.max(start - 120, 0); - var excerpt = ((start > 0) ? '...' : '') + - $.trim(text.substr(start, 240)) + - ((start + 240 - text.length) ? '...' : ''); - var rv = $('<div class="context"></div>').text(excerpt); - $.each(hlwords, function() { - rv = rv.highlightText(this, 'highlighted'); - }); - return rv; - } -}; - -$(document).ready(function() { - Search.init(); -}); diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/underscore-1.3.1.js b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/underscore-1.3.1.js deleted file mode 100644 index 208d4cd890c..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/underscore-1.3.1.js +++ /dev/null @@ -1,999 +0,0 @@ -// Underscore.js 1.3.1 -// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc. -// Underscore is freely distributable under the MIT license. -// Portions of Underscore are inspired or borrowed from Prototype, -// Oliver Steele's Functional, and John Resig's Micro-Templating. -// For all details and documentation: -// http://documentcloud.github.com/underscore - -(function() { - - // Baseline setup - // -------------- - - // Establish the root object, `window` in the browser, or `global` on the server. - var root = this; - - // Save the previous value of the `_` variable. - var previousUnderscore = root._; - - // Establish the object that gets returned to break out of a loop iteration. - var breaker = {}; - - // Save bytes in the minified (but not gzipped) version: - var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; - - // Create quick reference variables for speed access to core prototypes. - var slice = ArrayProto.slice, - unshift = ArrayProto.unshift, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; - - // All **ECMAScript 5** native function implementations that we hope to use - // are declared here. - var - nativeForEach = ArrayProto.forEach, - nativeMap = ArrayProto.map, - nativeReduce = ArrayProto.reduce, - nativeReduceRight = ArrayProto.reduceRight, - nativeFilter = ArrayProto.filter, - nativeEvery = ArrayProto.every, - nativeSome = ArrayProto.some, - nativeIndexOf = ArrayProto.indexOf, - nativeLastIndexOf = ArrayProto.lastIndexOf, - nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeBind = FuncProto.bind; - - // Create a safe reference to the Underscore object for use below. - var _ = function(obj) { return new wrapper(obj); }; - - // Export the Underscore object for **Node.js**, with - // backwards-compatibility for the old `require()` API. If we're in - // the browser, add `_` as a global object via a string identifier, - // for Closure Compiler "advanced" mode. - if (typeof exports !== 'undefined') { - if (typeof module !== 'undefined' && module.exports) { - exports = module.exports = _; - } - exports._ = _; - } else { - root['_'] = _; - } - - // Current version. - _.VERSION = '1.3.1'; - - // Collection Functions - // -------------------- - - // The cornerstone, an `each` implementation, aka `forEach`. - // Handles objects with the built-in `forEach`, arrays, and raw objects. - // Delegates to **ECMAScript 5**'s native `forEach` if available. - var each = _.each = _.forEach = function(obj, iterator, context) { - if (obj == null) return; - if (nativeForEach && obj.forEach === nativeForEach) { - obj.forEach(iterator, context); - } else if (obj.length === +obj.length) { - for (var i = 0, l = obj.length; i < l; i++) { - if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) return; - } - } else { - for (var key in obj) { - if (_.has(obj, key)) { - if (iterator.call(context, obj[key], key, obj) === breaker) return; - } - } - } - }; - - // Return the results of applying the iterator to each element. - // Delegates to **ECMAScript 5**'s native `map` if available. - _.map = _.collect = function(obj, iterator, context) { - var results = []; - if (obj == null) return results; - if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context); - each(obj, function(value, index, list) { - results[results.length] = iterator.call(context, value, index, list); - }); - if (obj.length === +obj.length) results.length = obj.length; - return results; - }; - - // **Reduce** builds up a single result from a list of values, aka `inject`, - // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available. - _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) { - var initial = arguments.length > 2; - if (obj == null) obj = []; - if (nativeReduce && obj.reduce === nativeReduce) { - if (context) iterator = _.bind(iterator, context); - return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator); - } - each(obj, function(value, index, list) { - if (!initial) { - memo = value; - initial = true; - } else { - memo = iterator.call(context, memo, value, index, list); - } - }); - if (!initial) throw new TypeError('Reduce of empty array with no initial value'); - return memo; - }; - - // The right-associative version of reduce, also known as `foldr`. - // Delegates to **ECMAScript 5**'s native `reduceRight` if available. - _.reduceRight = _.foldr = function(obj, iterator, memo, context) { - var initial = arguments.length > 2; - if (obj == null) obj = []; - if (nativeReduceRight && obj.reduceRight === nativeReduceRight) { - if (context) iterator = _.bind(iterator, context); - return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator); - } - var reversed = _.toArray(obj).reverse(); - if (context && !initial) iterator = _.bind(iterator, context); - return initial ? _.reduce(reversed, iterator, memo, context) : _.reduce(reversed, iterator); - }; - - // Return the first value which passes a truth test. Aliased as `detect`. - _.find = _.detect = function(obj, iterator, context) { - var result; - any(obj, function(value, index, list) { - if (iterator.call(context, value, index, list)) { - result = value; - return true; - } - }); - return result; - }; - - // Return all the elements that pass a truth test. - // Delegates to **ECMAScript 5**'s native `filter` if available. - // Aliased as `select`. - _.filter = _.select = function(obj, iterator, context) { - var results = []; - if (obj == null) return results; - if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context); - each(obj, function(value, index, list) { - if (iterator.call(context, value, index, list)) results[results.length] = value; - }); - return results; - }; - - // Return all the elements for which a truth test fails. - _.reject = function(obj, iterator, context) { - var results = []; - if (obj == null) return results; - each(obj, function(value, index, list) { - if (!iterator.call(context, value, index, list)) results[results.length] = value; - }); - return results; - }; - - // Determine whether all of the elements match a truth test. - // Delegates to **ECMAScript 5**'s native `every` if available. - // Aliased as `all`. - _.every = _.all = function(obj, iterator, context) { - var result = true; - if (obj == null) return result; - if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context); - each(obj, function(value, index, list) { - if (!(result = result && iterator.call(context, value, index, list))) return breaker; - }); - return result; - }; - - // Determine if at least one element in the object matches a truth test. - // Delegates to **ECMAScript 5**'s native `some` if available. - // Aliased as `any`. - var any = _.some = _.any = function(obj, iterator, context) { - iterator || (iterator = _.identity); - var result = false; - if (obj == null) return result; - if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context); - each(obj, function(value, index, list) { - if (result || (result = iterator.call(context, value, index, list))) return breaker; - }); - return !!result; - }; - - // Determine if a given value is included in the array or object using `===`. - // Aliased as `contains`. - _.include = _.contains = function(obj, target) { - var found = false; - if (obj == null) return found; - if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1; - found = any(obj, function(value) { - return value === target; - }); - return found; - }; - - // Invoke a method (with arguments) on every item in a collection. - _.invoke = function(obj, method) { - var args = slice.call(arguments, 2); - return _.map(obj, function(value) { - return (_.isFunction(method) ? method || value : value[method]).apply(value, args); - }); - }; - - // Convenience version of a common use case of `map`: fetching a property. - _.pluck = function(obj, key) { - return _.map(obj, function(value){ return value[key]; }); - }; - - // Return the maximum element or (element-based computation). - _.max = function(obj, iterator, context) { - if (!iterator && _.isArray(obj)) return Math.max.apply(Math, obj); - if (!iterator && _.isEmpty(obj)) return -Infinity; - var result = {computed : -Infinity}; - each(obj, function(value, index, list) { - var computed = iterator ? iterator.call(context, value, index, list) : value; - computed >= result.computed && (result = {value : value, computed : computed}); - }); - return result.value; - }; - - // Return the minimum element (or element-based computation). - _.min = function(obj, iterator, context) { - if (!iterator && _.isArray(obj)) return Math.min.apply(Math, obj); - if (!iterator && _.isEmpty(obj)) return Infinity; - var result = {computed : Infinity}; - each(obj, function(value, index, list) { - var computed = iterator ? iterator.call(context, value, index, list) : value; - computed < result.computed && (result = {value : value, computed : computed}); - }); - return result.value; - }; - - // Shuffle an array. - _.shuffle = function(obj) { - var shuffled = [], rand; - each(obj, function(value, index, list) { - if (index == 0) { - shuffled[0] = value; - } else { - rand = Math.floor(Math.random() * (index + 1)); - shuffled[index] = shuffled[rand]; - shuffled[rand] = value; - } - }); - return shuffled; - }; - - // Sort the object's values by a criterion produced by an iterator. - _.sortBy = function(obj, iterator, context) { - return _.pluck(_.map(obj, function(value, index, list) { - return { - value : value, - criteria : iterator.call(context, value, index, list) - }; - }).sort(function(left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - }), 'value'); - }; - - // Groups the object's values by a criterion. Pass either a string attribute - // to group by, or a function that returns the criterion. - _.groupBy = function(obj, val) { - var result = {}; - var iterator = _.isFunction(val) ? val : function(obj) { return obj[val]; }; - each(obj, function(value, index) { - var key = iterator(value, index); - (result[key] || (result[key] = [])).push(value); - }); - return result; - }; - - // Use a comparator function to figure out at what index an object should - // be inserted so as to maintain order. Uses binary search. - _.sortedIndex = function(array, obj, iterator) { - iterator || (iterator = _.identity); - var low = 0, high = array.length; - while (low < high) { - var mid = (low + high) >> 1; - iterator(array[mid]) < iterator(obj) ? low = mid + 1 : high = mid; - } - return low; - }; - - // Safely convert anything iterable into a real, live array. - _.toArray = function(iterable) { - if (!iterable) return []; - if (iterable.toArray) return iterable.toArray(); - if (_.isArray(iterable)) return slice.call(iterable); - if (_.isArguments(iterable)) return slice.call(iterable); - return _.values(iterable); - }; - - // Return the number of elements in an object. - _.size = function(obj) { - return _.toArray(obj).length; - }; - - // Array Functions - // --------------- - - // Get the first element of an array. Passing **n** will return the first N - // values in the array. Aliased as `head`. The **guard** check allows it to work - // with `_.map`. - _.first = _.head = function(array, n, guard) { - return (n != null) && !guard ? slice.call(array, 0, n) : array[0]; - }; - - // Returns everything but the last entry of the array. Especcialy useful on - // the arguments object. Passing **n** will return all the values in - // the array, excluding the last N. The **guard** check allows it to work with - // `_.map`. - _.initial = function(array, n, guard) { - return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n)); - }; - - // Get the last element of an array. Passing **n** will return the last N - // values in the array. The **guard** check allows it to work with `_.map`. - _.last = function(array, n, guard) { - if ((n != null) && !guard) { - return slice.call(array, Math.max(array.length - n, 0)); - } else { - return array[array.length - 1]; - } - }; - - // Returns everything but the first entry of the array. Aliased as `tail`. - // Especially useful on the arguments object. Passing an **index** will return - // the rest of the values in the array from that index onward. The **guard** - // check allows it to work with `_.map`. - _.rest = _.tail = function(array, index, guard) { - return slice.call(array, (index == null) || guard ? 1 : index); - }; - - // Trim out all falsy values from an array. - _.compact = function(array) { - return _.filter(array, function(value){ return !!value; }); - }; - - // Return a completely flattened version of an array. - _.flatten = function(array, shallow) { - return _.reduce(array, function(memo, value) { - if (_.isArray(value)) return memo.concat(shallow ? value : _.flatten(value)); - memo[memo.length] = value; - return memo; - }, []); - }; - - // Return a version of the array that does not contain the specified value(s). - _.without = function(array) { - return _.difference(array, slice.call(arguments, 1)); - }; - - // Produce a duplicate-free version of the array. If the array has already - // been sorted, you have the option of using a faster algorithm. - // Aliased as `unique`. - _.uniq = _.unique = function(array, isSorted, iterator) { - var initial = iterator ? _.map(array, iterator) : array; - var result = []; - _.reduce(initial, function(memo, el, i) { - if (0 == i || (isSorted === true ? _.last(memo) != el : !_.include(memo, el))) { - memo[memo.length] = el; - result[result.length] = array[i]; - } - return memo; - }, []); - return result; - }; - - // Produce an array that contains the union: each distinct element from all of - // the passed-in arrays. - _.union = function() { - return _.uniq(_.flatten(arguments, true)); - }; - - // Produce an array that contains every item shared between all the - // passed-in arrays. (Aliased as "intersect" for back-compat.) - _.intersection = _.intersect = function(array) { - var rest = slice.call(arguments, 1); - return _.filter(_.uniq(array), function(item) { - return _.every(rest, function(other) { - return _.indexOf(other, item) >= 0; - }); - }); - }; - - // Take the difference between one array and a number of other arrays. - // Only the elements present in just the first array will remain. - _.difference = function(array) { - var rest = _.flatten(slice.call(arguments, 1)); - return _.filter(array, function(value){ return !_.include(rest, value); }); - }; - - // Zip together multiple lists into a single array -- elements that share - // an index go together. - _.zip = function() { - var args = slice.call(arguments); - var length = _.max(_.pluck(args, 'length')); - var results = new Array(length); - for (var i = 0; i < length; i++) results[i] = _.pluck(args, "" + i); - return results; - }; - - // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**), - // we need this function. Return the position of the first occurrence of an - // item in an array, or -1 if the item is not included in the array. - // Delegates to **ECMAScript 5**'s native `indexOf` if available. - // If the array is large and already in sort order, pass `true` - // for **isSorted** to use binary search. - _.indexOf = function(array, item, isSorted) { - if (array == null) return -1; - var i, l; - if (isSorted) { - i = _.sortedIndex(array, item); - return array[i] === item ? i : -1; - } - if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item); - for (i = 0, l = array.length; i < l; i++) if (i in array && array[i] === item) return i; - return -1; - }; - - // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available. - _.lastIndexOf = function(array, item) { - if (array == null) return -1; - if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) return array.lastIndexOf(item); - var i = array.length; - while (i--) if (i in array && array[i] === item) return i; - return -1; - }; - - // Generate an integer Array containing an arithmetic progression. A port of - // the native Python `range()` function. See - // [the Python documentation](http://docs.python.org/library/functions.html#range). - _.range = function(start, stop, step) { - if (arguments.length <= 1) { - stop = start || 0; - start = 0; - } - step = arguments[2] || 1; - - var len = Math.max(Math.ceil((stop - start) / step), 0); - var idx = 0; - var range = new Array(len); - - while(idx < len) { - range[idx++] = start; - start += step; - } - - return range; - }; - - // Function (ahem) Functions - // ------------------ - - // Reusable constructor function for prototype setting. - var ctor = function(){}; - - // Create a function bound to a given object (assigning `this`, and arguments, - // optionally). Binding with arguments is also known as `curry`. - // Delegates to **ECMAScript 5**'s native `Function.bind` if available. - // We check for `func.bind` first, to fail fast when `func` is undefined. - _.bind = function bind(func, context) { - var bound, args; - if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1)); - if (!_.isFunction(func)) throw new TypeError; - args = slice.call(arguments, 2); - return bound = function() { - if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments))); - ctor.prototype = func.prototype; - var self = new ctor; - var result = func.apply(self, args.concat(slice.call(arguments))); - if (Object(result) === result) return result; - return self; - }; - }; - - // Bind all of an object's methods to that object. Useful for ensuring that - // all callbacks defined on an object belong to it. - _.bindAll = function(obj) { - var funcs = slice.call(arguments, 1); - if (funcs.length == 0) funcs = _.functions(obj); - each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); }); - return obj; - }; - - // Memoize an expensive function by storing its results. - _.memoize = function(func, hasher) { - var memo = {}; - hasher || (hasher = _.identity); - return function() { - var key = hasher.apply(this, arguments); - return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments)); - }; - }; - - // Delays a function for the given number of milliseconds, and then calls - // it with the arguments supplied. - _.delay = function(func, wait) { - var args = slice.call(arguments, 2); - return setTimeout(function(){ return func.apply(func, args); }, wait); - }; - - // Defers a function, scheduling it to run after the current call stack has - // cleared. - _.defer = function(func) { - return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1))); - }; - - // Returns a function, that, when invoked, will only be triggered at most once - // during a given window of time. - _.throttle = function(func, wait) { - var context, args, timeout, throttling, more; - var whenDone = _.debounce(function(){ more = throttling = false; }, wait); - return function() { - context = this; args = arguments; - var later = function() { - timeout = null; - if (more) func.apply(context, args); - whenDone(); - }; - if (!timeout) timeout = setTimeout(later, wait); - if (throttling) { - more = true; - } else { - func.apply(context, args); - } - whenDone(); - throttling = true; - }; - }; - - // Returns a function, that, as long as it continues to be invoked, will not - // be triggered. The function will be called after it stops being called for - // N milliseconds. - _.debounce = function(func, wait) { - var timeout; - return function() { - var context = this, args = arguments; - var later = function() { - timeout = null; - func.apply(context, args); - }; - clearTimeout(timeout); - timeout = setTimeout(later, wait); - }; - }; - - // Returns a function that will be executed at most one time, no matter how - // often you call it. Useful for lazy initialization. - _.once = function(func) { - var ran = false, memo; - return function() { - if (ran) return memo; - ran = true; - return memo = func.apply(this, arguments); - }; - }; - - // Returns the first function passed as an argument to the second, - // allowing you to adjust arguments, run code before and after, and - // conditionally execute the original function. - _.wrap = function(func, wrapper) { - return function() { - var args = [func].concat(slice.call(arguments, 0)); - return wrapper.apply(this, args); - }; - }; - - // Returns a function that is the composition of a list of functions, each - // consuming the return value of the function that follows. - _.compose = function() { - var funcs = arguments; - return function() { - var args = arguments; - for (var i = funcs.length - 1; i >= 0; i--) { - args = [funcs[i].apply(this, args)]; - } - return args[0]; - }; - }; - - // Returns a function that will only be executed after being called N times. - _.after = function(times, func) { - if (times <= 0) return func(); - return function() { - if (--times < 1) { return func.apply(this, arguments); } - }; - }; - - // Object Functions - // ---------------- - - // Retrieve the names of an object's properties. - // Delegates to **ECMAScript 5**'s native `Object.keys` - _.keys = nativeKeys || function(obj) { - if (obj !== Object(obj)) throw new TypeError('Invalid object'); - var keys = []; - for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key; - return keys; - }; - - // Retrieve the values of an object's properties. - _.values = function(obj) { - return _.map(obj, _.identity); - }; - - // Return a sorted list of the function names available on the object. - // Aliased as `methods` - _.functions = _.methods = function(obj) { - var names = []; - for (var key in obj) { - if (_.isFunction(obj[key])) names.push(key); - } - return names.sort(); - }; - - // Extend a given object with all the properties in passed-in object(s). - _.extend = function(obj) { - each(slice.call(arguments, 1), function(source) { - for (var prop in source) { - obj[prop] = source[prop]; - } - }); - return obj; - }; - - // Fill in a given object with default properties. - _.defaults = function(obj) { - each(slice.call(arguments, 1), function(source) { - for (var prop in source) { - if (obj[prop] == null) obj[prop] = source[prop]; - } - }); - return obj; - }; - - // Create a (shallow-cloned) duplicate of an object. - _.clone = function(obj) { - if (!_.isObject(obj)) return obj; - return _.isArray(obj) ? obj.slice() : _.extend({}, obj); - }; - - // Invokes interceptor with the obj, and then returns obj. - // The primary purpose of this method is to "tap into" a method chain, in - // order to perform operations on intermediate results within the chain. - _.tap = function(obj, interceptor) { - interceptor(obj); - return obj; - }; - - // Internal recursive comparison function. - function eq(a, b, stack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal. - if (a === b) return a !== 0 || 1 / a == 1 / b; - // A strict comparison is necessary because `null == undefined`. - if (a == null || b == null) return a === b; - // Unwrap any wrapped objects. - if (a._chain) a = a._wrapped; - if (b._chain) b = b._wrapped; - // Invoke a custom `isEqual` method if one is provided. - if (a.isEqual && _.isFunction(a.isEqual)) return a.isEqual(b); - if (b.isEqual && _.isFunction(b.isEqual)) return b.isEqual(a); - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className != toString.call(b)) return false; - switch (className) { - // Strings, numbers, dates, and booleans are compared by value. - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return a == String(b); - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for - // other numeric values. - return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b); - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a == +b; - // RegExps are compared by their source patterns and flags. - case '[object RegExp]': - return a.source == b.source && - a.global == b.global && - a.multiline == b.multiline && - a.ignoreCase == b.ignoreCase; - } - if (typeof a != 'object' || typeof b != 'object') return false; - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - var length = stack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (stack[length] == a) return true; - } - // Add the first object to the stack of traversed objects. - stack.push(a); - var size = 0, result = true; - // Recursively compare objects and arrays. - if (className == '[object Array]') { - // Compare array lengths to determine if a deep comparison is necessary. - size = a.length; - result = size == b.length; - if (result) { - // Deep compare the contents, ignoring non-numeric properties. - while (size--) { - // Ensure commutative equality for sparse arrays. - if (!(result = size in a == size in b && eq(a[size], b[size], stack))) break; - } - } - } else { - // Objects with different constructors are not equivalent. - if ('constructor' in a != 'constructor' in b || a.constructor != b.constructor) return false; - // Deep compare objects. - for (var key in a) { - if (_.has(a, key)) { - // Count the expected number of properties. - size++; - // Deep compare each member. - if (!(result = _.has(b, key) && eq(a[key], b[key], stack))) break; - } - } - // Ensure that both objects contain the same number of properties. - if (result) { - for (key in b) { - if (_.has(b, key) && !(size--)) break; - } - result = !size; - } - } - // Remove the first object from the stack of traversed objects. - stack.pop(); - return result; - } - - // Perform a deep comparison to check if two objects are equal. - _.isEqual = function(a, b) { - return eq(a, b, []); - }; - - // Is a given array, string, or object empty? - // An "empty" object has no enumerable own-properties. - _.isEmpty = function(obj) { - if (_.isArray(obj) || _.isString(obj)) return obj.length === 0; - for (var key in obj) if (_.has(obj, key)) return false; - return true; - }; - - // Is a given value a DOM element? - _.isElement = function(obj) { - return !!(obj && obj.nodeType == 1); - }; - - // Is a given value an array? - // Delegates to ECMA5's native Array.isArray - _.isArray = nativeIsArray || function(obj) { - return toString.call(obj) == '[object Array]'; - }; - - // Is a given variable an object? - _.isObject = function(obj) { - return obj === Object(obj); - }; - - // Is a given variable an arguments object? - _.isArguments = function(obj) { - return toString.call(obj) == '[object Arguments]'; - }; - if (!_.isArguments(arguments)) { - _.isArguments = function(obj) { - return !!(obj && _.has(obj, 'callee')); - }; - } - - // Is a given value a function? - _.isFunction = function(obj) { - return toString.call(obj) == '[object Function]'; - }; - - // Is a given value a string? - _.isString = function(obj) { - return toString.call(obj) == '[object String]'; - }; - - // Is a given value a number? - _.isNumber = function(obj) { - return toString.call(obj) == '[object Number]'; - }; - - // Is the given value `NaN`? - _.isNaN = function(obj) { - // `NaN` is the only value for which `===` is not reflexive. - return obj !== obj; - }; - - // Is a given value a boolean? - _.isBoolean = function(obj) { - return obj === true || obj === false || toString.call(obj) == '[object Boolean]'; - }; - - // Is a given value a date? - _.isDate = function(obj) { - return toString.call(obj) == '[object Date]'; - }; - - // Is the given value a regular expression? - _.isRegExp = function(obj) { - return toString.call(obj) == '[object RegExp]'; - }; - - // Is a given value equal to null? - _.isNull = function(obj) { - return obj === null; - }; - - // Is a given variable undefined? - _.isUndefined = function(obj) { - return obj === void 0; - }; - - // Has own property? - _.has = function(obj, key) { - return hasOwnProperty.call(obj, key); - }; - - // Utility Functions - // ----------------- - - // Run Underscore.js in *noConflict* mode, returning the `_` variable to its - // previous owner. Returns a reference to the Underscore object. - _.noConflict = function() { - root._ = previousUnderscore; - return this; - }; - - // Keep the identity function around for default iterators. - _.identity = function(value) { - return value; - }; - - // Run a function **n** times. - _.times = function (n, iterator, context) { - for (var i = 0; i < n; i++) iterator.call(context, i); - }; - - // Escape a string for HTML interpolation. - _.escape = function(string) { - return (''+string).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''').replace(/\//g,'/'); - }; - - // Add your own custom functions to the Underscore object, ensuring that - // they're correctly added to the OOP wrapper as well. - _.mixin = function(obj) { - each(_.functions(obj), function(name){ - addToWrapper(name, _[name] = obj[name]); - }); - }; - - // Generate a unique integer id (unique within the entire client session). - // Useful for temporary DOM ids. - var idCounter = 0; - _.uniqueId = function(prefix) { - var id = idCounter++; - return prefix ? prefix + id : id; - }; - - // By default, Underscore uses ERB-style template delimiters, change the - // following template settings to use alternative delimiters. - _.templateSettings = { - evaluate : /<%([\s\S]+?)%>/g, - interpolate : /<%=([\s\S]+?)%>/g, - escape : /<%-([\s\S]+?)%>/g - }; - - // When customizing `templateSettings`, if you don't want to define an - // interpolation, evaluation or escaping regex, we need one that is - // guaranteed not to match. - var noMatch = /.^/; - - // Within an interpolation, evaluation, or escaping, remove HTML escaping - // that had been previously added. - var unescape = function(code) { - return code.replace(/\\\\/g, '\\').replace(/\\'/g, "'"); - }; - - // JavaScript micro-templating, similar to John Resig's implementation. - // Underscore templating handles arbitrary delimiters, preserves whitespace, - // and correctly escapes quotes within interpolated code. - _.template = function(str, data) { - var c = _.templateSettings; - var tmpl = 'var __p=[],print=function(){__p.push.apply(__p,arguments);};' + - 'with(obj||{}){__p.push(\'' + - str.replace(/\\/g, '\\\\') - .replace(/'/g, "\\'") - .replace(c.escape || noMatch, function(match, code) { - return "',_.escape(" + unescape(code) + "),'"; - }) - .replace(c.interpolate || noMatch, function(match, code) { - return "'," + unescape(code) + ",'"; - }) - .replace(c.evaluate || noMatch, function(match, code) { - return "');" + unescape(code).replace(/[\r\n\t]/g, ' ') + ";__p.push('"; - }) - .replace(/\r/g, '\\r') - .replace(/\n/g, '\\n') - .replace(/\t/g, '\\t') - + "');}return __p.join('');"; - var func = new Function('obj', '_', tmpl); - if (data) return func(data, _); - return function(data) { - return func.call(this, data, _); - }; - }; - - // Add a "chain" function, which will delegate to the wrapper. - _.chain = function(obj) { - return _(obj).chain(); - }; - - // The OOP Wrapper - // --------------- - - // If Underscore is called as a function, it returns a wrapped object that - // can be used OO-style. This wrapper holds altered versions of all the - // underscore functions. Wrapped objects may be chained. - var wrapper = function(obj) { this._wrapped = obj; }; - - // Expose `wrapper.prototype` as `_.prototype` - _.prototype = wrapper.prototype; - - // Helper function to continue chaining intermediate results. - var result = function(obj, chain) { - return chain ? _(obj).chain() : obj; - }; - - // A method to easily add functions to the OOP wrapper. - var addToWrapper = function(name, func) { - wrapper.prototype[name] = function() { - var args = slice.call(arguments); - unshift.call(args, this._wrapped); - return result(func.apply(_, args), this._chain); - }; - }; - - // Add all of the Underscore functions to the wrapper object. - _.mixin(_); - - // Add all mutator Array functions to the wrapper. - each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - wrapper.prototype[name] = function() { - var wrapped = this._wrapped; - method.apply(wrapped, arguments); - var length = wrapped.length; - if ((name == 'shift' || name == 'splice') && length === 0) delete wrapped[0]; - return result(wrapped, this._chain); - }; - }); - - // Add all accessor Array functions to the wrapper. - each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - wrapper.prototype[name] = function() { - return result(method.apply(this._wrapped, arguments), this._chain); - }; - }); - - // Start chaining a wrapped Underscore object. - wrapper.prototype.chain = function() { - this._chain = true; - return this; - }; - - // Extracts the result from a wrapped and chained object. - wrapper.prototype.value = function() { - return this._wrapped; - }; - -}).call(this); diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/underscore.js b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/underscore.js deleted file mode 100644 index 5b55f32beac..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/underscore.js +++ /dev/null @@ -1,31 +0,0 @@ -// Underscore.js 1.3.1 -// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc. -// Underscore is freely distributable under the MIT license. -// Portions of Underscore are inspired or borrowed from Prototype, -// Oliver Steele's Functional, and John Resig's Micro-Templating. -// For all details and documentation: -// http://documentcloud.github.com/underscore -(function(){function q(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return a==String(c);case "[object Number]":return a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source== -c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&q(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&q(a[h],c[h],d))))break;if(g){for(h in c)if(b.has(c, -h)&&!f--)break;g=!f}}d.pop();return g}var r=this,G=r._,n={},k=Array.prototype,o=Object.prototype,i=k.slice,H=k.unshift,l=o.toString,I=o.hasOwnProperty,w=k.forEach,x=k.map,y=k.reduce,z=k.reduceRight,A=k.filter,B=k.every,C=k.some,p=k.indexOf,D=k.lastIndexOf,o=Array.isArray,J=Object.keys,s=Function.prototype.bind,b=function(a){return new m(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else r._=b;b.VERSION="1.3.1";var j=b.each= -b.forEach=function(a,c,d){if(a!=null)if(w&&a.forEach===w)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(d,a[e],e,a)===n)break}else for(e in a)if(b.has(a,e)&&c.call(d,a[e],e,a)===n)break};b.map=b.collect=function(a,c,b){var e=[];if(a==null)return e;if(x&&a.map===x)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});if(a.length===+a.length)e.length=a.length;return e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var f=arguments.length>2;a== -null&&(a=[]);if(y&&a.reduce===y)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(z&&a.reduceRight===z)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect= -function(a,c,b){var e;E(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(A&&a.filter===A)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(B&&a.every===B)return a.every(c,b);j(a,function(a,g,h){if(!(e= -e&&c.call(b,a,g,h)))return n});return e};var E=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(C&&a.some===C)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return n});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return p&&a.indexOf===p?a.indexOf(c)!=-1:b=E(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck= -function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&(e={value:a,computed:b})}); -return e.value};b.shuffle=function(a){var b=[],d;j(a,function(a,f){f==0?b[0]=a:(d=Math.floor(Math.random()*(f+1)),b[f]=b[d],b[d]=a)});return b};b.sortBy=function(a,c,d){return b.pluck(b.map(a,function(a,b,g){return{value:a,criteria:c.call(d,a,b,g)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;return c<d?-1:c>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a, -c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:a.toArray?a.toArray():b.isArray(a)?i.call(a):b.isArguments(a)?i.call(a):b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=b.head=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-1]};b.rest= -b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,e=[];b.reduce(d,function(d,g,h){if(0==h||(c===true?b.last(d)!=g:!b.include(d,g)))d[d.length]=g,e[e.length]=a[h];return d},[]); -return e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,c, -d){if(a==null)return-1;var e;if(d)return d=b.sortedIndex(a,c),a[d]===c?d:-1;if(p&&a.indexOf===p)return a.indexOf(c);for(d=0,e=a.length;d<e;d++)if(d in a&&a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(D&&a.lastIndexOf===D)return a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return d;return-1};b.range=function(a,b,d){arguments.length<=1&&(b=a||0,a=0);for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;)g[f++]=a,a+=d;return g}; -var F=function(){};b.bind=function(a,c){var d,e;if(a.bind===s&&s)return s.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));F.prototype=a.prototype;var b=new F,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a, -c){var d={};c||(c=b.identity);return function(){var e=c.apply(this,arguments);return b.has(d,e)?d[e]:d[e]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(a,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i=b.debounce(function(){h=g=false},c);return function(){d=this;e=arguments;var b;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);i()},c));g?h=true: -a.apply(d,e);i();g=true}};b.debounce=function(a,b){var d;return function(){var e=this,f=arguments;clearTimeout(d);d=setTimeout(function(){d=null;a.apply(e,f)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=[a].concat(i.call(arguments,0));return b.apply(this,d)}};b.compose=function(){var a=arguments;return function(){for(var b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}}; -b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=J||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.defaults=function(a){j(i.call(arguments, -1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return q(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=o||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)}; -b.isArguments=function(a){return l.call(a)=="[object Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!b.has(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"}; -b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,b){return I.call(a,b)};b.noConflict=function(){r._=G;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")};b.mixin=function(a){j(b.functions(a), -function(c){K(c,b[c]=a[c])})};var L=0;b.uniqueId=function(a){var b=L++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var t=/.^/,u=function(a){return a.replace(/\\\\/g,"\\").replace(/\\'/g,"'")};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape||t,function(a,b){return"',_.escape("+ -u(b)+"),'"}).replace(d.interpolate||t,function(a,b){return"',"+u(b)+",'"}).replace(d.evaluate||t,function(a,b){return"');"+u(b).replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e.call(this,a,b)}};b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var v=function(a,c){return c?b(a).chain():a},K=function(a,c){m.prototype[a]= -function(){var a=i.call(arguments);H.call(a,this._wrapped);return v(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return v(d,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return v(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain= -true;return this};m.prototype.value=function(){return this._wrapped}}).call(this); diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/up-pressed.png b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/up-pressed.png Binary files differdeleted file mode 100644 index acee3b68efb..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/up-pressed.png +++ /dev/null diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/up.png b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/up.png Binary files differdeleted file mode 100644 index 2a940a7da7c..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/up.png +++ /dev/null diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/websupport.js b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/websupport.js deleted file mode 100644 index 3b4999ebf2e..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/_static/websupport.js +++ /dev/null @@ -1,808 +0,0 @@ -/* - * websupport.js - * ~~~~~~~~~~~~~ - * - * sphinx.websupport utilities for all documentation. - * - * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -(function($) { - $.fn.autogrow = function() { - return this.each(function() { - var textarea = this; - - $.fn.autogrow.resize(textarea); - - $(textarea) - .focus(function() { - textarea.interval = setInterval(function() { - $.fn.autogrow.resize(textarea); - }, 500); - }) - .blur(function() { - clearInterval(textarea.interval); - }); - }); - }; - - $.fn.autogrow.resize = function(textarea) { - var lineHeight = parseInt($(textarea).css('line-height'), 10); - var lines = textarea.value.split('\n'); - var columns = textarea.cols; - var lineCount = 0; - $.each(lines, function() { - lineCount += Math.ceil(this.length / columns) || 1; - }); - var height = lineHeight * (lineCount + 1); - $(textarea).css('height', height); - }; -})(jQuery); - -(function($) { - var comp, by; - - function init() { - initEvents(); - initComparator(); - } - - function initEvents() { - $(document).on("click", 'a.comment-close', function(event) { - event.preventDefault(); - hide($(this).attr('id').substring(2)); - }); - $(document).on("click", 'a.vote', function(event) { - event.preventDefault(); - handleVote($(this)); - }); - $(document).on("click", 'a.reply', function(event) { - event.preventDefault(); - openReply($(this).attr('id').substring(2)); - }); - $(document).on("click", 'a.close-reply', function(event) { - event.preventDefault(); - closeReply($(this).attr('id').substring(2)); - }); - $(document).on("click", 'a.sort-option', function(event) { - event.preventDefault(); - handleReSort($(this)); - }); - $(document).on("click", 'a.show-proposal', function(event) { - event.preventDefault(); - showProposal($(this).attr('id').substring(2)); - }); - $(document).on("click", 'a.hide-proposal', function(event) { - event.preventDefault(); - hideProposal($(this).attr('id').substring(2)); - }); - $(document).on("click", 'a.show-propose-change', function(event) { - event.preventDefault(); - showProposeChange($(this).attr('id').substring(2)); - }); - $(document).on("click", 'a.hide-propose-change', function(event) { - event.preventDefault(); - hideProposeChange($(this).attr('id').substring(2)); - }); - $(document).on("click", 'a.accept-comment', function(event) { - event.preventDefault(); - acceptComment($(this).attr('id').substring(2)); - }); - $(document).on("click", 'a.delete-comment', function(event) { - event.preventDefault(); - deleteComment($(this).attr('id').substring(2)); - }); - $(document).on("click", 'a.comment-markup', function(event) { - event.preventDefault(); - toggleCommentMarkupBox($(this).attr('id').substring(2)); - }); - } - - /** - * Set comp, which is a comparator function used for sorting and - * inserting comments into the list. - */ - function setComparator() { - // If the first three letters are "asc", sort in ascending order - // and remove the prefix. - if (by.substring(0,3) == 'asc') { - var i = by.substring(3); - comp = function(a, b) { return a[i] - b[i]; }; - } else { - // Otherwise sort in descending order. - comp = function(a, b) { return b[by] - a[by]; }; - } - - // Reset link styles and format the selected sort option. - $('a.sel').attr('href', '#').removeClass('sel'); - $('a.by' + by).removeAttr('href').addClass('sel'); - } - - /** - * Create a comp function. If the user has preferences stored in - * the sortBy cookie, use those, otherwise use the default. - */ - function initComparator() { - by = 'rating'; // Default to sort by rating. - // If the sortBy cookie is set, use that instead. - if (document.cookie.length > 0) { - var start = document.cookie.indexOf('sortBy='); - if (start != -1) { - start = start + 7; - var end = document.cookie.indexOf(";", start); - if (end == -1) { - end = document.cookie.length; - by = unescape(document.cookie.substring(start, end)); - } - } - } - setComparator(); - } - - /** - * Show a comment div. - */ - function show(id) { - $('#ao' + id).hide(); - $('#ah' + id).show(); - var context = $.extend({id: id}, opts); - var popup = $(renderTemplate(popupTemplate, context)).hide(); - popup.find('textarea[name="proposal"]').hide(); - popup.find('a.by' + by).addClass('sel'); - var form = popup.find('#cf' + id); - form.submit(function(event) { - event.preventDefault(); - addComment(form); - }); - $('#s' + id).after(popup); - popup.slideDown('fast', function() { - getComments(id); - }); - } - - /** - * Hide a comment div. - */ - function hide(id) { - $('#ah' + id).hide(); - $('#ao' + id).show(); - var div = $('#sc' + id); - div.slideUp('fast', function() { - div.remove(); - }); - } - - /** - * Perform an ajax request to get comments for a node - * and insert the comments into the comments tree. - */ - function getComments(id) { - $.ajax({ - type: 'GET', - url: opts.getCommentsURL, - data: {node: id}, - success: function(data, textStatus, request) { - var ul = $('#cl' + id); - var speed = 100; - $('#cf' + id) - .find('textarea[name="proposal"]') - .data('source', data.source); - - if (data.comments.length === 0) { - ul.html('<li>No comments yet.</li>'); - ul.data('empty', true); - } else { - // If there are comments, sort them and put them in the list. - var comments = sortComments(data.comments); - speed = data.comments.length * 100; - appendComments(comments, ul); - ul.data('empty', false); - } - $('#cn' + id).slideUp(speed + 200); - ul.slideDown(speed); - }, - error: function(request, textStatus, error) { - showError('Oops, there was a problem retrieving the comments.'); - }, - dataType: 'json' - }); - } - - /** - * Add a comment via ajax and insert the comment into the comment tree. - */ - function addComment(form) { - var node_id = form.find('input[name="node"]').val(); - var parent_id = form.find('input[name="parent"]').val(); - var text = form.find('textarea[name="comment"]').val(); - var proposal = form.find('textarea[name="proposal"]').val(); - - if (text == '') { - showError('Please enter a comment.'); - return; - } - - // Disable the form that is being submitted. - form.find('textarea,input').attr('disabled', 'disabled'); - - // Send the comment to the server. - $.ajax({ - type: "POST", - url: opts.addCommentURL, - dataType: 'json', - data: { - node: node_id, - parent: parent_id, - text: text, - proposal: proposal - }, - success: function(data, textStatus, error) { - // Reset the form. - if (node_id) { - hideProposeChange(node_id); - } - form.find('textarea') - .val('') - .add(form.find('input')) - .removeAttr('disabled'); - var ul = $('#cl' + (node_id || parent_id)); - if (ul.data('empty')) { - $(ul).empty(); - ul.data('empty', false); - } - insertComment(data.comment); - var ao = $('#ao' + node_id); - ao.find('img').attr({'src': opts.commentBrightImage}); - if (node_id) { - // if this was a "root" comment, remove the commenting box - // (the user can get it back by reopening the comment popup) - $('#ca' + node_id).slideUp(); - } - }, - error: function(request, textStatus, error) { - form.find('textarea,input').removeAttr('disabled'); - showError('Oops, there was a problem adding the comment.'); - } - }); - } - - /** - * Recursively append comments to the main comment list and children - * lists, creating the comment tree. - */ - function appendComments(comments, ul) { - $.each(comments, function() { - var div = createCommentDiv(this); - ul.append($(document.createElement('li')).html(div)); - appendComments(this.children, div.find('ul.comment-children')); - // To avoid stagnating data, don't store the comments children in data. - this.children = null; - div.data('comment', this); - }); - } - - /** - * After adding a new comment, it must be inserted in the correct - * location in the comment tree. - */ - function insertComment(comment) { - var div = createCommentDiv(comment); - - // To avoid stagnating data, don't store the comments children in data. - comment.children = null; - div.data('comment', comment); - - var ul = $('#cl' + (comment.node || comment.parent)); - var siblings = getChildren(ul); - - var li = $(document.createElement('li')); - li.hide(); - - // Determine where in the parents children list to insert this comment. - for(var i=0; i < siblings.length; i++) { - if (comp(comment, siblings[i]) <= 0) { - $('#cd' + siblings[i].id) - .parent() - .before(li.html(div)); - li.slideDown('fast'); - return; - } - } - - // If we get here, this comment rates lower than all the others, - // or it is the only comment in the list. - ul.append(li.html(div)); - li.slideDown('fast'); - } - - function acceptComment(id) { - $.ajax({ - type: 'POST', - url: opts.acceptCommentURL, - data: {id: id}, - success: function(data, textStatus, request) { - $('#cm' + id).fadeOut('fast'); - $('#cd' + id).removeClass('moderate'); - }, - error: function(request, textStatus, error) { - showError('Oops, there was a problem accepting the comment.'); - } - }); - } - - function deleteComment(id) { - $.ajax({ - type: 'POST', - url: opts.deleteCommentURL, - data: {id: id}, - success: function(data, textStatus, request) { - var div = $('#cd' + id); - if (data == 'delete') { - // Moderator mode: remove the comment and all children immediately - div.slideUp('fast', function() { - div.remove(); - }); - return; - } - // User mode: only mark the comment as deleted - div - .find('span.user-id:first') - .text('[deleted]').end() - .find('div.comment-text:first') - .text('[deleted]').end() - .find('#cm' + id + ', #dc' + id + ', #ac' + id + ', #rc' + id + - ', #sp' + id + ', #hp' + id + ', #cr' + id + ', #rl' + id) - .remove(); - var comment = div.data('comment'); - comment.username = '[deleted]'; - comment.text = '[deleted]'; - div.data('comment', comment); - }, - error: function(request, textStatus, error) { - showError('Oops, there was a problem deleting the comment.'); - } - }); - } - - function showProposal(id) { - $('#sp' + id).hide(); - $('#hp' + id).show(); - $('#pr' + id).slideDown('fast'); - } - - function hideProposal(id) { - $('#hp' + id).hide(); - $('#sp' + id).show(); - $('#pr' + id).slideUp('fast'); - } - - function showProposeChange(id) { - $('#pc' + id).hide(); - $('#hc' + id).show(); - var textarea = $('#pt' + id); - textarea.val(textarea.data('source')); - $.fn.autogrow.resize(textarea[0]); - textarea.slideDown('fast'); - } - - function hideProposeChange(id) { - $('#hc' + id).hide(); - $('#pc' + id).show(); - var textarea = $('#pt' + id); - textarea.val('').removeAttr('disabled'); - textarea.slideUp('fast'); - } - - function toggleCommentMarkupBox(id) { - $('#mb' + id).toggle(); - } - - /** Handle when the user clicks on a sort by link. */ - function handleReSort(link) { - var classes = link.attr('class').split(/\s+/); - for (var i=0; i<classes.length; i++) { - if (classes[i] != 'sort-option') { - by = classes[i].substring(2); - } - } - setComparator(); - // Save/update the sortBy cookie. - var expiration = new Date(); - expiration.setDate(expiration.getDate() + 365); - document.cookie= 'sortBy=' + escape(by) + - ';expires=' + expiration.toUTCString(); - $('ul.comment-ul').each(function(index, ul) { - var comments = getChildren($(ul), true); - comments = sortComments(comments); - appendComments(comments, $(ul).empty()); - }); - } - - /** - * Function to process a vote when a user clicks an arrow. - */ - function handleVote(link) { - if (!opts.voting) { - showError("You'll need to login to vote."); - return; - } - - var id = link.attr('id'); - if (!id) { - // Didn't click on one of the voting arrows. - return; - } - // If it is an unvote, the new vote value is 0, - // Otherwise it's 1 for an upvote, or -1 for a downvote. - var value = 0; - if (id.charAt(1) != 'u') { - value = id.charAt(0) == 'u' ? 1 : -1; - } - // The data to be sent to the server. - var d = { - comment_id: id.substring(2), - value: value - }; - - // Swap the vote and unvote links. - link.hide(); - $('#' + id.charAt(0) + (id.charAt(1) == 'u' ? 'v' : 'u') + d.comment_id) - .show(); - - // The div the comment is displayed in. - var div = $('div#cd' + d.comment_id); - var data = div.data('comment'); - - // If this is not an unvote, and the other vote arrow has - // already been pressed, unpress it. - if ((d.value !== 0) && (data.vote === d.value * -1)) { - $('#' + (d.value == 1 ? 'd' : 'u') + 'u' + d.comment_id).hide(); - $('#' + (d.value == 1 ? 'd' : 'u') + 'v' + d.comment_id).show(); - } - - // Update the comments rating in the local data. - data.rating += (data.vote === 0) ? d.value : (d.value - data.vote); - data.vote = d.value; - div.data('comment', data); - - // Change the rating text. - div.find('.rating:first') - .text(data.rating + ' point' + (data.rating == 1 ? '' : 's')); - - // Send the vote information to the server. - $.ajax({ - type: "POST", - url: opts.processVoteURL, - data: d, - error: function(request, textStatus, error) { - showError('Oops, there was a problem casting that vote.'); - } - }); - } - - /** - * Open a reply form used to reply to an existing comment. - */ - function openReply(id) { - // Swap out the reply link for the hide link - $('#rl' + id).hide(); - $('#cr' + id).show(); - - // Add the reply li to the children ul. - var div = $(renderTemplate(replyTemplate, {id: id})).hide(); - $('#cl' + id) - .prepend(div) - // Setup the submit handler for the reply form. - .find('#rf' + id) - .submit(function(event) { - event.preventDefault(); - addComment($('#rf' + id)); - closeReply(id); - }) - .find('input[type=button]') - .click(function() { - closeReply(id); - }); - div.slideDown('fast', function() { - $('#rf' + id).find('textarea').focus(); - }); - } - - /** - * Close the reply form opened with openReply. - */ - function closeReply(id) { - // Remove the reply div from the DOM. - $('#rd' + id).slideUp('fast', function() { - $(this).remove(); - }); - - // Swap out the hide link for the reply link - $('#cr' + id).hide(); - $('#rl' + id).show(); - } - - /** - * Recursively sort a tree of comments using the comp comparator. - */ - function sortComments(comments) { - comments.sort(comp); - $.each(comments, function() { - this.children = sortComments(this.children); - }); - return comments; - } - - /** - * Get the children comments from a ul. If recursive is true, - * recursively include childrens' children. - */ - function getChildren(ul, recursive) { - var children = []; - ul.children().children("[id^='cd']") - .each(function() { - var comment = $(this).data('comment'); - if (recursive) - comment.children = getChildren($(this).find('#cl' + comment.id), true); - children.push(comment); - }); - return children; - } - - /** Create a div to display a comment in. */ - function createCommentDiv(comment) { - if (!comment.displayed && !opts.moderator) { - return $('<div class="moderate">Thank you! Your comment will show up ' - + 'once it is has been approved by a moderator.</div>'); - } - // Prettify the comment rating. - comment.pretty_rating = comment.rating + ' point' + - (comment.rating == 1 ? '' : 's'); - // Make a class (for displaying not yet moderated comments differently) - comment.css_class = comment.displayed ? '' : ' moderate'; - // Create a div for this comment. - var context = $.extend({}, opts, comment); - var div = $(renderTemplate(commentTemplate, context)); - - // If the user has voted on this comment, highlight the correct arrow. - if (comment.vote) { - var direction = (comment.vote == 1) ? 'u' : 'd'; - div.find('#' + direction + 'v' + comment.id).hide(); - div.find('#' + direction + 'u' + comment.id).show(); - } - - if (opts.moderator || comment.text != '[deleted]') { - div.find('a.reply').show(); - if (comment.proposal_diff) - div.find('#sp' + comment.id).show(); - if (opts.moderator && !comment.displayed) - div.find('#cm' + comment.id).show(); - if (opts.moderator || (opts.username == comment.username)) - div.find('#dc' + comment.id).show(); - } - return div; - } - - /** - * A simple template renderer. Placeholders such as <%id%> are replaced - * by context['id'] with items being escaped. Placeholders such as <#id#> - * are not escaped. - */ - function renderTemplate(template, context) { - var esc = $(document.createElement('div')); - - function handle(ph, escape) { - var cur = context; - $.each(ph.split('.'), function() { - cur = cur[this]; - }); - return escape ? esc.text(cur || "").html() : cur; - } - - return template.replace(/<([%#])([\w\.]*)\1>/g, function() { - return handle(arguments[2], arguments[1] == '%' ? true : false); - }); - } - - /** Flash an error message briefly. */ - function showError(message) { - $(document.createElement('div')).attr({'class': 'popup-error'}) - .append($(document.createElement('div')) - .attr({'class': 'error-message'}).text(message)) - .appendTo('body') - .fadeIn("slow") - .delay(2000) - .fadeOut("slow"); - } - - /** Add a link the user uses to open the comments popup. */ - $.fn.comment = function() { - return this.each(function() { - var id = $(this).attr('id').substring(1); - var count = COMMENT_METADATA[id]; - var title = count + ' comment' + (count == 1 ? '' : 's'); - var image = count > 0 ? opts.commentBrightImage : opts.commentImage; - var addcls = count == 0 ? ' nocomment' : ''; - $(this) - .append( - $(document.createElement('a')).attr({ - href: '#', - 'class': 'sphinx-comment-open' + addcls, - id: 'ao' + id - }) - .append($(document.createElement('img')).attr({ - src: image, - alt: 'comment', - title: title - })) - .click(function(event) { - event.preventDefault(); - show($(this).attr('id').substring(2)); - }) - ) - .append( - $(document.createElement('a')).attr({ - href: '#', - 'class': 'sphinx-comment-close hidden', - id: 'ah' + id - }) - .append($(document.createElement('img')).attr({ - src: opts.closeCommentImage, - alt: 'close', - title: 'close' - })) - .click(function(event) { - event.preventDefault(); - hide($(this).attr('id').substring(2)); - }) - ); - }); - }; - - var opts = { - processVoteURL: '/_process_vote', - addCommentURL: '/_add_comment', - getCommentsURL: '/_get_comments', - acceptCommentURL: '/_accept_comment', - deleteCommentURL: '/_delete_comment', - commentImage: '/static/_static/comment.png', - closeCommentImage: '/static/_static/comment-close.png', - loadingImage: '/static/_static/ajax-loader.gif', - commentBrightImage: '/static/_static/comment-bright.png', - upArrow: '/static/_static/up.png', - downArrow: '/static/_static/down.png', - upArrowPressed: '/static/_static/up-pressed.png', - downArrowPressed: '/static/_static/down-pressed.png', - voting: false, - moderator: false - }; - - if (typeof COMMENT_OPTIONS != "undefined") { - opts = jQuery.extend(opts, COMMENT_OPTIONS); - } - - var popupTemplate = '\ - <div class="sphinx-comments" id="sc<%id%>">\ - <p class="sort-options">\ - Sort by:\ - <a href="#" class="sort-option byrating">best rated</a>\ - <a href="#" class="sort-option byascage">newest</a>\ - <a href="#" class="sort-option byage">oldest</a>\ - </p>\ - <div class="comment-header">Comments</div>\ - <div class="comment-loading" id="cn<%id%>">\ - loading comments... <img src="<%loadingImage%>" alt="" /></div>\ - <ul id="cl<%id%>" class="comment-ul"></ul>\ - <div id="ca<%id%>">\ - <p class="add-a-comment">Add a comment\ - (<a href="#" class="comment-markup" id="ab<%id%>">markup</a>):</p>\ - <div class="comment-markup-box" id="mb<%id%>">\ - reStructured text markup: <i>*emph*</i>, <b>**strong**</b>, \ - <code>``code``</code>, \ - code blocks: <code>::</code> and an indented block after blank line</div>\ - <form method="post" id="cf<%id%>" class="comment-form" action="">\ - <textarea name="comment" cols="80"></textarea>\ - <p class="propose-button">\ - <a href="#" id="pc<%id%>" class="show-propose-change">\ - Propose a change ▹\ - </a>\ - <a href="#" id="hc<%id%>" class="hide-propose-change">\ - Propose a change ▿\ - </a>\ - </p>\ - <textarea name="proposal" id="pt<%id%>" cols="80"\ - spellcheck="false"></textarea>\ - <input type="submit" value="Add comment" />\ - <input type="hidden" name="node" value="<%id%>" />\ - <input type="hidden" name="parent" value="" />\ - </form>\ - </div>\ - </div>'; - - var commentTemplate = '\ - <div id="cd<%id%>" class="sphinx-comment<%css_class%>">\ - <div class="vote">\ - <div class="arrow">\ - <a href="#" id="uv<%id%>" class="vote" title="vote up">\ - <img src="<%upArrow%>" />\ - </a>\ - <a href="#" id="uu<%id%>" class="un vote" title="vote up">\ - <img src="<%upArrowPressed%>" />\ - </a>\ - </div>\ - <div class="arrow">\ - <a href="#" id="dv<%id%>" class="vote" title="vote down">\ - <img src="<%downArrow%>" id="da<%id%>" />\ - </a>\ - <a href="#" id="du<%id%>" class="un vote" title="vote down">\ - <img src="<%downArrowPressed%>" />\ - </a>\ - </div>\ - </div>\ - <div class="comment-content">\ - <p class="tagline comment">\ - <span class="user-id"><%username%></span>\ - <span class="rating"><%pretty_rating%></span>\ - <span class="delta"><%time.delta%></span>\ - </p>\ - <div class="comment-text comment"><#text#></div>\ - <p class="comment-opts comment">\ - <a href="#" class="reply hidden" id="rl<%id%>">reply ▹</a>\ - <a href="#" class="close-reply" id="cr<%id%>">reply ▿</a>\ - <a href="#" id="sp<%id%>" class="show-proposal">proposal ▹</a>\ - <a href="#" id="hp<%id%>" class="hide-proposal">proposal ▿</a>\ - <a href="#" id="dc<%id%>" class="delete-comment hidden">delete</a>\ - <span id="cm<%id%>" class="moderation hidden">\ - <a href="#" id="ac<%id%>" class="accept-comment">accept</a>\ - </span>\ - </p>\ - <pre class="proposal" id="pr<%id%>">\ -<#proposal_diff#>\ - </pre>\ - <ul class="comment-children" id="cl<%id%>"></ul>\ - </div>\ - <div class="clearleft"></div>\ - </div>\ - </div>'; - - var replyTemplate = '\ - <li>\ - <div class="reply-div" id="rd<%id%>">\ - <form id="rf<%id%>">\ - <textarea name="comment" cols="80"></textarea>\ - <input type="submit" value="Add reply" />\ - <input type="button" value="Cancel" />\ - <input type="hidden" name="parent" value="<%id%>" />\ - <input type="hidden" name="node" value="" />\ - </form>\ - </div>\ - </li>'; - - $(document).ready(function() { - init(); - }); -})(jQuery); - -$(document).ready(function() { - // add comment anchors for all paragraphs that are commentable - $('.sphinx-has-comment').comment(); - - // highlight search words in search results - $("div.context").each(function() { - var params = $.getQueryParameters(); - var terms = (params.q) ? params.q[0].split(/\s+/) : []; - var result = $(this); - $.each(terms, function() { - result.highlightText(this.toLowerCase(), 'highlighted'); - }); - }); - - // directly open comment window if requested - var anchor = document.location.hash; - if (anchor.substring(0, 9) == '#comment-') { - $('#ao' + anchor.substring(9)).click(); - document.location.hash = '#s' + anchor.substring(9); - } -}); diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/genindex.html b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/genindex.html deleted file mode 100644 index 24eed9d3c25..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/genindex.html +++ /dev/null @@ -1,85 +0,0 @@ - - - -<!doctype html> - -<html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Index — pplib 0.1 documentation</title> - <link rel="stylesheet" href="_static/bizstyle.css" type="text/css" /> - <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> - - <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="_static/language_data.js"></script> - <script type="text/javascript" src="_static/bizstyle.js"></script> - <link rel="index" title="Index" href="#" /> - <link rel="search" title="Search" href="search.html" /> - <meta name="viewport" content="width=device-width,initial-scale=1.0"> - <!--[if lt IE 9]> - <script type="text/javascript" src="_static/css3-mediaqueries.js"></script> - <![endif]--> - </head><body> - <div class="related" role="navigation" aria-label="related navigation"> - <h3>Navigation</h3> - <ul> - <li class="right" style="margin-right: 10px"> - <a href="#" title="General Index" - accesskey="I">index</a></li> - <li class="nav-item nav-item-0"><a href="pplib.html">pplib 0.1 documentation</a> »</li> - </ul> - </div> - <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> - <div class="sphinxsidebarwrapper"> -<div id="searchbox" style="display: none" role="search"> - <h3>Quick search</h3> - <div class="searchformwrapper"> - <form class="search" action="search.html" method="get"> - <input type="text" name="q" /> - <input type="submit" value="Go" /> - <input type="hidden" name="check_keywords" value="yes" /> - <input type="hidden" name="area" value="default" /> - </form> - </div> -</div> -<script type="text/javascript">$('#searchbox').show(0);</script> - </div> - </div> - - <div class="document"> - <div class="documentwrapper"> - <div class="bodywrapper"> - <div class="body" role="main"> - - -<h1 id="index">Index</h1> - -<div class="genindex-jumpbox"> - -</div> - - - </div> - </div> - </div> - <div class="clearer"></div> - </div> - <div class="related" role="navigation" aria-label="related navigation"> - <h3>Navigation</h3> - <ul> - <li class="right" style="margin-right: 10px"> - <a href="#" title="General Index" - >index</a></li> - <li class="nav-item nav-item-0"><a href="pplib.html">pplib 0.1 documentation</a> »</li> - </ul> - </div> - <div class="footer" role="contentinfo"> - © Copyright 2019, p.jackowski@gust.org.pl. - Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5. - </div> - </body> -</html>
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/objects.inv b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/objects.inv deleted file mode 100644 index 96b6c59e0d3..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/objects.inv +++ /dev/null @@ -1,6 +0,0 @@ -# Sphinx inventory version 2 -# Project: pplib -# Version: -# The remainder of this file is compressed using zlib. -xÚm=à FwNÁˆÆî:TªÔ°?VIÛôöL¤læ}ï“…è¢çÍ\¼ZÀs1sÛé´nÁó[YHæÄÄŸ8’ïɼ=ô¢B'æ‰J&éV9 ½[xyv[žÙr´e³u20ª•wÝU@™Qa° - I”4ÂwL ´žýÉmWõÒëøsb¤>)(ìä^r¡
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/ppapi-1.x.html b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/ppapi-1.x.html deleted file mode 100644 index 838aee52175..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/ppapi-1.x.html +++ /dev/null @@ -1,1030 +0,0 @@ - - -<!doctype html> - -<html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>pplib 1.x — pplib 0.1 documentation</title> - <link rel="stylesheet" href="_static/bizstyle.css" type="text/css" /> - <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> - - <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="_static/language_data.js"></script> - <script type="text/javascript" src="_static/bizstyle.js"></script> - <link rel="index" title="Index" href="genindex.html" /> - <link rel="search" title="Search" href="search.html" /> - <link rel="next" title="Examples" href="ppcode.html" /> - <link rel="prev" title="pplib 2.x" href="ppapi-2.x.html" /> - <meta name="viewport" content="width=device-width,initial-scale=1.0"> - <!--[if lt IE 9]> - <script type="text/javascript" src="_static/css3-mediaqueries.js"></script> - <![endif]--> - </head><body> - <div class="related" role="navigation" aria-label="related navigation"> - <h3>Navigation</h3> - <ul> - <li class="right" style="margin-right: 10px"> - <a href="genindex.html" title="General Index" - accesskey="I">index</a></li> - <li class="right" > - <a href="ppcode.html" title="Examples" - accesskey="N">next</a> |</li> - <li class="right" > - <a href="ppapi-2.x.html" title="pplib 2.x" - accesskey="P">previous</a> |</li> - <li class="nav-item nav-item-0"><a href="pplib.html">pplib 0.1 documentation</a> »</li> - </ul> - </div> - <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> - <div class="sphinxsidebarwrapper"> - <h3><a href="pplib.html">Table of Contents</a></h3> - <ul> -<li><a class="reference internal" href="#"><code class="docutils literal notranslate"><span class="pre">pplib</span></code> 1.x</a></li> -<li><a class="reference internal" href="#c-api">C-API</a><ul> -<li><a class="reference internal" href="#types">Types</a></li> -<li><a class="reference internal" href="#object">Object</a></li> -<li><a class="reference internal" href="#names">Names</a></li> -<li><a class="reference internal" href="#string">String</a></li> -<li><a class="reference internal" href="#array">Array</a></li> -<li><a class="reference internal" href="#dict">Dict</a></li> -<li><a class="reference internal" href="#stream">Stream</a></li> -<li><a class="reference internal" href="#filters">Filters</a></li> -<li><a class="reference internal" href="#ref">Ref</a></li> -<li><a class="reference internal" href="#xref">XRef</a></li> -<li><a class="reference internal" href="#pdf">PDF</a></li> -<li><a class="reference internal" href="#encryption">Encryption</a></li> -<li><a class="reference internal" href="#pages">Pages</a></li> -<li><a class="reference internal" href="#contents">Contents</a></li> -<li><a class="reference internal" href="#boxes">Boxes</a></li> -<li><a class="reference internal" href="#transforms">Transforms</a></li> -<li><a class="reference internal" href="#errors-handling">Errors handling</a></li> -</ul> -</li> -</ul> - - <h4>Previous topic</h4> - <p class="topless"><a href="ppapi-2.x.html" - title="previous chapter"><code class="docutils literal notranslate"><span class="pre">pplib</span></code> 2.x</a></p> - <h4>Next topic</h4> - <p class="topless"><a href="ppcode.html" - title="next chapter">Examples</a></p> - <div role="note" aria-label="source link"> - <h3>This Page</h3> - <ul class="this-page-menu"> - <li><a href="_sources/ppapi-1.x.rst.txt" - rel="nofollow">Show Source</a></li> - </ul> - </div> -<div id="searchbox" style="display: none" role="search"> - <h3>Quick search</h3> - <div class="searchformwrapper"> - <form class="search" action="search.html" method="get"> - <input type="text" name="q" /> - <input type="submit" value="Go" /> - <input type="hidden" name="check_keywords" value="yes" /> - <input type="hidden" name="area" value="default" /> - </form> - </div> -</div> -<script type="text/javascript">$('#searchbox').show(0);</script> - </div> - </div> - - <div class="document"> - <div class="documentwrapper"> - <div class="bodywrapper"> - <div class="body" role="main"> - - <div class="section" id="pplib-1-x"> -<h1><code class="docutils literal notranslate"><span class="pre">pplib</span></code> 1.x<a class="headerlink" href="#pplib-1-x" title="Permalink to this headline">¶</a></h1> -<p><code class="docutils literal notranslate"><span class="pre">pplib</span></code> is a library for raw PDF access. It parses PDF documents and provides an interface to access document structures in C.</p> -</div> -<div class="section" id="c-api"> -<h1>C-API<a class="headerlink" href="#c-api" title="Permalink to this headline">¶</a></h1> -<div class="section" id="types"> -<h2>Types<a class="headerlink" href="#types" title="Permalink to this headline">¶</a></h2> -<p><code class="docutils literal notranslate"><span class="pre">pplib</span></code> defines several C-types to represent PDF types:</p> -<ul class="simple"> -<li><code class="docutils literal notranslate"><span class="pre">ppint</span></code> - signed integer (<code class="docutils literal notranslate"><span class="pre">int64_t</span></code>)</li> -<li><code class="docutils literal notranslate"><span class="pre">ppnum</span></code> - real number (double)</li> -<li><code class="docutils literal notranslate"><span class="pre">ppname</span></code> - PDF name</li> -<li><code class="docutils literal notranslate"><span class="pre">ppstring</span></code> - PDF string</li> -<li><code class="docutils literal notranslate"><span class="pre">pparray</span></code> - PDF array</li> -<li><code class="docutils literal notranslate"><span class="pre">ppdict</span></code> - PDF dict</li> -<li><code class="docutils literal notranslate"><span class="pre">ppstream</span></code> - PDF stream</li> -<li><code class="docutils literal notranslate"><span class="pre">ppref</span></code> - PDF indirect reference</li> -<li><code class="docutils literal notranslate"><span class="pre">ppobj</span></code> - a container of all above</li> -</ul> -<p>Among <code class="docutils literal notranslate"><span class="pre">ppint</span></code> and <code class="docutils literal notranslate"><span class="pre">ppnum</span></code>, we also use <code class="docutils literal notranslate"><span class="pre">ppuint</span></code> - unsigned integer (machine word, alias to <code class="docutils literal notranslate"><span class="pre">size_t</span></code>).</p> -<p>Other API types:</p> -<ul class="simple"> -<li><code class="docutils literal notranslate"><span class="pre">ppdoc</span></code> - PDF document</li> -<li><code class="docutils literal notranslate"><span class="pre">ppxref</span></code> - cross-references table</li> -<li><code class="docutils literal notranslate"><span class="pre">ppcontext</span></code> - … later</li> -<li><code class="docutils literal notranslate"><span class="pre">pprect</span></code> - rectangle</li> -<li><code class="docutils literal notranslate"><span class="pre">ppmatrix</span></code> - matrix</li> -</ul> -<p>Integer, number, name and string are treated as simple types. -Names and strings are actually C-structures, but exposed to API as typedefs to <code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">char</span> <span class="pre">*</span></code>. -Other types (array, dict, stream, reference, object container, xref, PDF) are C-structures, -and you operate it their pointers. So when you declare a simple type variable you say:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppuint</span> <span class="n">u</span><span class="p">;</span> -<span class="n">ppnum</span> <span class="n">n</span><span class="p">;</span> -<span class="n">ppname</span> <span class="n">name</span><span class="p">;</span> -<span class="n">ppstring</span> <span class="n">string</span><span class="p">;</span> -<span class="o">...</span> -</pre></div> -</div> -<p>And when you declare a compound type you operate on pointers:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppobj</span> <span class="o">*</span><span class="n">obj</span><span class="p">;</span> -<span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">;</span> -<span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">;</span> -<span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">;</span> -<span class="n">ppref</span> <span class="o">*</span><span class="n">ref</span><span class="p">;</span> -<span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">;</span> -</pre></div> -</div> -<p>Some of those C-types are defined in library header <code class="docutils literal notranslate"><span class="pre">ppapi.h</span></code> (complete types). Some others are incomplete -(eg. you can’t say <code class="docutils literal notranslate"><span class="pre">sizeof(ppdoc)</span></code> or <code class="docutils literal notranslate"><span class="pre">sizeof(ppxref)</span></code>). This is to avoid unnecesary dependencies in -the header. [At some points it’s not clear to me what to hide and what to expose, will see.] The library itself -uses <code class="docutils literal notranslate"><span class="pre">pplib.h</span></code> but for auxilary applications including a standalone <code class="docutils literal notranslate"><span class="pre">ppapi.h</span></code> header should be enough.</p> -<p><code class="docutils literal notranslate"><span class="pre">pplib</span></code> was designed having <strong>read-only</strong> PDF access in mind. Even if some structure is completelly exposed, -so that you can directly access its members, you should treat them as read-only. I don’t make them <code class="docutils literal notranslate"><span class="pre">const</span></code> because -then all variable declarations would need to be <code class="docutils literal notranslate"><span class="pre">const</span></code>, which is annoying, and I’d need some trickery in the library -internals to unconst. Besides, nothing is really const for C type casts.</p> -</div> -<div class="section" id="object"> -<h2>Object<a class="headerlink" href="#object" title="Permalink to this headline">¶</a></h2> -<p>A common container for all elementary PDF object types is <code class="docutils literal notranslate"><span class="pre">ppobj</span></code> structure. <code class="docutils literal notranslate"><span class="pre">ppobj</span></code> has a type identifier -(integer) and union of values:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">struct</span> <span class="n">ppobj</span> <span class="p">{</span> - <span class="n">ppobjtp</span> <span class="nb">type</span><span class="p">;</span> - <span class="n">union</span> <span class="p">{</span> - <span class="n">ppint</span> <span class="n">integer</span><span class="p">;</span> - <span class="n">ppnum</span> <span class="n">number</span><span class="p">;</span> - <span class="n">ppname</span> <span class="n">name</span><span class="p">;</span> - <span class="n">ppstring</span> <span class="n">string</span><span class="p">;</span> - <span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">;</span> - <span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">;</span> - <span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">;</span> - <span class="n">ppref</span> <span class="o">*</span><span class="n">ref</span><span class="p">;</span> - <span class="n">void</span> <span class="o">*</span><span class="nb">any</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> -</pre></div> -</div> -<p>Object type is one of constants (enum):</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">PPNONE</span> -<span class="n">PPNULL</span> -<span class="n">PPBOOL</span> -<span class="n">PPINT</span> -<span class="n">PPNUM</span> -<span class="n">PPNAME</span> -<span class="n">PPSTRING</span> -<span class="n">PPARRAY</span> -<span class="n">PPDICT</span> -<span class="n">PPSTREAM</span> -<span class="n">PPREF</span> -</pre></div> -</div> -<p>The type determines the structure member you’re allowed to access:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppobj</span> <span class="o">*</span><span class="n">obj</span><span class="p">;</span> -<span class="o">...</span> -<span class="n">switch</span> <span class="p">(</span><span class="n">obj</span><span class="o">-></span><span class="nb">type</span><span class="p">)</span> -<span class="p">{</span> - <span class="n">case</span> <span class="n">PPNONE</span><span class="p">:</span> <span class="o">//</span> <span class="n">shouldn</span><span class="s1">'t actually happen, indicates some failure</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPNULL</span><span class="p">:</span> <span class="o">//</span> <span class="n">valid</span> <span class="n">PDF</span> <span class="n">null</span> <span class="nb">object</span><span class="p">,</span> <span class="n">no</span> <span class="n">value</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPBOOL</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="n">integer</span> <span class="p">(</span><span class="n">ppint</span><span class="p">),</span> <span class="n">value</span> <span class="mi">0</span> <span class="ow">or</span> <span class="mi">1</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPINT</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="n">integer</span> <span class="p">(</span><span class="n">ppint</span><span class="p">)</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPNUM</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="n">number</span> <span class="p">(</span><span class="n">ppnum</span><span class="p">)</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPNAME</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="n">name</span> <span class="p">(</span><span class="n">ppname</span><span class="p">)</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPSTRING</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="n">string</span> <span class="p">(</span><span class="n">ppstring</span><span class="p">)</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPARRAY</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="n">array</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="p">)</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPDICT</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="nb">dict</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="p">)</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPSTREAM</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="n">stream</span> <span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="p">)</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPREF</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="n">ref</span> <span class="p">(</span><span class="n">ppref</span> <span class="o">*</span><span class="p">)</span> - <span class="k">break</span><span class="p">;</span> -<span class="p">}</span> -</pre></div> -</div> -<p>More often then not you know exactly what type of object value is expected, in which case -you may use one of the following macros:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">//</span> <span class="n">returns</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPNULL</span> -<span class="nb">int</span> <span class="n">ppobj_get_null</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> \ - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPBOOL</span><span class="p">,</span> <span class="n">sets</span> <span class="nb">int</span> <span class="n">v</span> <span class="n">to</span> <span class="mi">0</span> <span class="ow">or</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">returns</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span> <span class="n">otherwise</span> -<span class="nb">int</span> <span class="n">ppobj_get_bool</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPINT</span><span class="p">,</span> <span class="n">sets</span> <span class="n">ppint</span> <span class="n">v</span> <span class="ow">and</span> <span class="n">returns</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span> <span class="n">otherwise</span> -<span class="nb">int</span> <span class="n">ppobj_get_int</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPINT</span> <span class="ow">and</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">sets</span> <span class="n">ppuint</span> <span class="n">v</span> <span class="ow">and</span> <span class="n">returns</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span> <span class="n">otherwise</span> -<span class="nb">int</span> <span class="n">ppobj_get_uint</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPNUM</span> <span class="ow">or</span> <span class="n">PPINT</span><span class="p">,</span> <span class="n">sets</span> <span class="n">ppnum</span> <span class="n">v</span> <span class="ow">and</span> <span class="n">returns</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span> <span class="n">otherwise</span> -<span class="nb">int</span> <span class="n">ppobj_get_num</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPNAME</span> <span class="n">returns</span> <span class="n">the</span> <span class="n">name</span><span class="p">,</span> <span class="n">NULL</span> <span class="n">otherwise</span> -<span class="n">ppname</span> <span class="n">ppobj_get_name</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPSTRING</span> <span class="n">returns</span> <span class="n">the</span> <span class="n">string</span><span class="p">,</span> <span class="n">NULL</span> <span class="n">otherwise</span> -<span class="n">ppstring</span> <span class="n">ppobj_get_string</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPARRAY</span> <span class="n">returns</span> <span class="n">the</span> <span class="n">array</span><span class="p">,</span> <span class="n">NULL</span> <span class="n">otherwise</span> -<span class="n">pparray</span> <span class="o">*</span> <span class="n">ppobj_get_array</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPDICT</span> <span class="n">returns</span> <span class="n">the</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">NULL</span> <span class="n">otherwise</span> -<span class="n">ppdict</span> <span class="o">*</span> <span class="n">ppobj_get_dict</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPSTREAM</span> <span class="n">returns</span> <span class="n">the</span> <span class="n">stream</span><span class="p">,</span> <span class="n">NULL</span> <span class="n">otherwise</span> -<span class="n">ppstream</span> <span class="o">*</span> <span class="n">ppobj_get_stream</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPREF</span> <span class="n">returns</span> <span class="n">the</span> <span class="n">reference</span><span class="p">,</span> <span class="n">NULL</span> <span class="n">otherwise</span> -<span class="n">ppref</span> <span class="o">*</span> <span class="n">ppobj_get_ref</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> -</pre></div> -</div> -<p>Note the coercion from integer to real number, but not reverse. In practise, whenever you expect a real number, -you should also handle integer (eg. ‘1’ used instead of ‘1.0’).</p> -<p>It is a common case that the object is given as an indirect reference, but what you actually -want is not the reference, but the object referred by it. Here is a helper for it:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPREF</span><span class="p">,</span> <span class="n">returns</span> <span class="n">what</span> <span class="n">the</span> <span class="n">reference</span> <span class="n">points</span><span class="p">,</span> <span class="n">otherwise</span> <span class="n">returns</span> <span class="n">o</span> -<span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppobj_rget_obj</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> -</pre></div> -</div> -<p>Also every <code class="docutils literal notranslate"><span class="pre">ppobj_get_*</span></code> macro has <code class="docutils literal notranslate"><span class="pre">ppobj_rget_*</span></code> counterpart that makes a check -for the expected type, but if the object is PPREF, it jumps to the target object. -So for example <code class="docutils literal notranslate"><span class="pre">ppobj_rget_dict(obj)</span></code> will return dict if <code class="docutils literal notranslate"><span class="pre">obj</span></code> is of type PPDICT -or if it is of type PPREF and <code class="docutils literal notranslate"><span class="pre">obj->ref</span></code> hosts an object of type PPDICT.</p> -</div> -<div class="section" id="names"> -<h2>Names<a class="headerlink" href="#names" title="Permalink to this headline">¶</a></h2> -<p>PDF names are represented as <code class="docutils literal notranslate"><span class="pre">ppname</span></code>. -I find it convenient to have <code class="docutils literal notranslate"><span class="pre">ppname</span></code> type pretending <code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">char</span> <span class="pre">*</span></code>. This allows to use <code class="docutils literal notranslate"><span class="pre">ppname</span></code> -in all C-style string functions like <code class="docutils literal notranslate"><span class="pre">printf("%s",</span> <span class="pre">name)</span></code>.</p> -<p>Be aware, however, that <code class="docutils literal notranslate"><span class="pre">ppname</span></code> is actually a C-structure. It is perfectly ok to cast <code class="docutils literal notranslate"><span class="pre">ppname</span></code> to <code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">char</span> <span class="pre">*</span></code>:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppname</span> <span class="n">name</span><span class="p">;</span> -<span class="o">...</span> -<span class="p">(</span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="p">)</span><span class="n">name</span><span class="p">;</span> -</pre></div> -</div> -<p>But reverse is forbidden:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">cstr</span> <span class="o">=</span> <span class="s2">"cstring"</span><span class="p">;</span> -<span class="o">...</span> -<span class="p">(</span><span class="n">ppname</span><span class="p">)</span><span class="n">cstr</span><span class="p">;</span> <span class="o">//</span> <span class="n">expect</span> <span class="n">segmentation</span> <span class="n">fault</span> <span class="n">soon</span> -</pre></div> -</div> -<p>For convenient use in C, names are <code class="docutils literal notranslate"><span class="pre">'\0'</span></code> terminated. But to get the length of name better always use -<code class="docutils literal notranslate"><span class="pre">ppname_size()</span></code> macro. <code class="docutils literal notranslate"><span class="pre">ppname</span></code> object knows its size, don’t use <code class="docutils literal notranslate"><span class="pre">strlen()</span></code>:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">size_t</span> <span class="n">ppname_size</span><span class="p">(</span><span class="n">ppname</span> <span class="n">name</span><span class="p">);</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">length</span> <span class="n">of</span> <span class="n">name</span> <span class="ow">in</span> <span class="nb">bytes</span> -</pre></div> -</div> -<p>In current implementation names are not hashed anyhow, so name-to-name comparison is not smarter than <code class="docutils literal notranslate"><span class="pre">memcmp()</span></code>. -Use macros:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">int</span> <span class="n">ppname_is</span><span class="p">(</span><span class="n">ppname</span> <span class="n">name</span><span class="p">,</span> <span class="s2">"literal"</span><span class="p">);</span> <span class="o">//</span> <span class="n">to</span> <span class="n">compare</span> <span class="n">ppname</span> <span class="k">with</span> <span class="n">C</span><span class="o">-</span><span class="n">literal</span> <span class="n">string</span> -<span class="nb">int</span> <span class="n">ppname_eq</span><span class="p">(</span><span class="n">ppname</span> <span class="n">name</span><span class="p">,</span> <span class="n">ppname</span> <span class="n">other</span><span class="p">);</span> <span class="o">//</span> <span class="n">to</span> <span class="n">compare</span> <span class="n">ppname</span> <span class="k">with</span> <span class="n">a</span> <span class="n">different</span> <span class="n">name</span> -</pre></div> -</div> -<p>If you’ll use <code class="docutils literal notranslate"><span class="pre">pplib</span></code> to parse contents streams, you may need to distinguish names from operators -(more precisely executable names). Names in PDF are preceeded by ‘/’, executable names aren’t. In both -cases PDF parser will produce <code class="docutils literal notranslate"><span class="pre">ppname</span></code> but can be distingushed with:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">int</span> <span class="n">ppname_exec</span><span class="p">(</span><span class="n">ppname</span> <span class="n">name</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">non</span><span class="o">-</span><span class="n">zero</span> <span class="k">if</span> <span class="n">name</span> <span class="ow">is</span> <span class="n">executable</span> -</pre></div> -</div> -<p>Names are kept in their raw form, with possible PDF specific escapes (in text below we call it <strong>encoded</strong> form). -Leading ‘/’ is omitted, though. One may need a decoded name, with no PDF escapes. -A pair of functions provides a simple interface to switch between those two forms:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppname</span> <span class="n">ppname_decoded</span> <span class="p">(</span><span class="n">ppname</span> <span class="n">name</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">decoded</span> <span class="p">(</span><span class="n">unescaped</span><span class="p">)</span> <span class="n">form</span> <span class="n">of</span> <span class="n">the</span> <span class="n">name</span> -<span class="n">ppname</span> <span class="n">ppname_encoded</span> <span class="p">(</span><span class="n">ppname</span> <span class="n">name</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">encoded</span> <span class="p">(</span><span class="n">escaped</span><span class="p">)</span> <span class="n">form</span> <span class="n">of</span> <span class="n">the</span> <span class="n">name</span> -</pre></div> -</div> -<p>In pretty most cases PDF names contains only letters (no special characters, no escapes), so decoded and encoded forms are identical. -In that case both functions simply return the argument. It is ok to call <code class="docutils literal notranslate"><span class="pre">ppname_decoded()</span></code> on already decoded form -and <code class="docutils literal notranslate"><span class="pre">ppname_encoded()</span></code> on already encoded form. Both forms are produced by PDF objects parser, so accessing <code class="docutils literal notranslate"><span class="pre">ppname</span></code> alter ego -in whatever direction needs no extra decoding or allocation costs.</p> -</div> -<div class="section" id="string"> -<h2>String<a class="headerlink" href="#string" title="Permalink to this headline">¶</a></h2> -<p>PDF strings have the same internal construction as names, so most of names description above applies to strings as well. -<code class="docutils literal notranslate"><span class="pre">ppstring</span></code> is a typedef of <code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">char</span> <span class="pre">*</span></code>, roughly <code class="docutils literal notranslate"><span class="pre">'\0'</span></code> terminiated C-string. To get the size of the string:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">size_t</span> <span class="n">ppstring_size</span><span class="p">(</span><span class="n">ppstring</span> <span class="n">string</span><span class="p">);</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">the</span> <span class="n">length</span> <span class="n">of</span> <span class="n">the</span> <span class="n">string</span> <span class="ow">in</span> <span class="nb">bytes</span> -</pre></div> -</div> -<p>Strings are provided in their raw form, preserving PDF specific escapes, but with no -<code class="docutils literal notranslate"><span class="pre">()</span></code> or <code class="docutils literal notranslate"><span class="pre"><></span></code> delims. To distinguish plain strings from hex strings:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">int</span> <span class="n">ppstring_hex</span><span class="p">(</span><span class="n">ppstring</span> <span class="n">string</span><span class="p">);</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">non</span> <span class="n">zero</span> <span class="k">if</span> <span class="nb">hex</span> <span class="n">string</span> -</pre></div> -</div> -<p>Or if you prefer:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>switch (ppstring_type(string)) -{ - case PPSTRING_PLAIN: // literal string, surrounded by ``(`` and ``)`` in PDF - break; - case PPSTRING_BASE16: // hex string, surrounded by ``<`` and ``>`` in PDF - break; - case PPSTRING_BASE85: // base85 string surrounded by ``<~`` and ``~>`` in PDF - break; -} -</pre></div> -</div> -<p>The last is actually Postscript specific, not used in PDF, but I think it might appear in contents streams… -No matter how the string is given in PDF (plain or hex), here are two functions to -switch between encoded and decoded strings forms:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppstring</span> <span class="n">ppstring_decoded</span> <span class="p">(</span><span class="n">ppstring</span> <span class="n">string</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">decoded</span> <span class="n">string</span> <span class="n">possibly</span> <span class="k">with</span> <span class="n">PDF</span> <span class="n">escapes</span> -<span class="n">ppstring</span> <span class="n">ppstring_encoded</span> <span class="p">(</span><span class="n">ppstring</span> <span class="n">string</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">encoded</span> <span class="n">string</span> <span class="k">with</span> <span class="n">no</span> <span class="n">PDF</span> <span class="n">escapes</span> -</pre></div> -</div> -<p>For hex strings, encoded form contains hex digits, while decoded form contains arbitrary bytes (the result of hex decoding). -Plain strings usually contains printable ASCII characters, but they might contain any binary data. -As with names, objects parser produces both forms. The raw form with PDF escapes (or raw hex form) is considered the main one. -Eg. when you access <code class="docutils literal notranslate"><span class="pre">obj->string</span></code> you always get the encoded form. At any moment you can switch to its alter ego.</p> -<p>No matter if the string is plain or hex, if its first two bytes (decoded) are UTF16 BOM, the string -is considered unicode. <code class="docutils literal notranslate"><span class="pre">ppstring</span></code> object <em>knows</em> it is unicode or not:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">switch</span> <span class="p">(</span><span class="n">ppstring_utf</span><span class="p">(</span><span class="n">string</span><span class="p">))</span> -<span class="p">{</span> - <span class="n">case</span> <span class="n">PPSTRING_UTF16LE</span><span class="p">:</span> <span class="o">//</span> <span class="n">unicode</span> <span class="n">string</span><span class="p">,</span> <span class="n">utf16le</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPSTRING_UTF16BE</span><span class="p">:</span> <span class="o">//</span> <span class="n">unicode</span> <span class="n">string</span><span class="p">,</span> <span class="n">utf16be</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">default</span><span class="p">:</span> <span class="o">//</span> <span class="n">no</span> <span class="n">unicode</span> -<span class="p">}</span> -</pre></div> -</div> -<p>Or simply:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">if</span> <span class="p">(</span><span class="n">ppstring_utf</span><span class="p">(</span><span class="n">string</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> - <span class="o">//</span> <span class="n">handle</span> <span class="n">unicode</span> <span class="n">string</span> -<span class="p">}</span> -</pre></div> -</div> -<p>If the string is unicode, BOM remains the part of the string – <code class="docutils literal notranslate"><span class="pre">pplib</span></code> parser does not strip it. -Unicode or not, encoded or decoded, strings are always C-arrays of bytes and <code class="docutils literal notranslate"><span class="pre">ppstring_size()</span></code> -always returns the size in bytes.</p> -</div> -<div class="section" id="array"> -<h2>Array<a class="headerlink" href="#array" title="Permalink to this headline">¶</a></h2> -<p>PDF arrays are represented as <code class="docutils literal notranslate"><span class="pre">pparray</span></code> type, which is C-array of <code class="docutils literal notranslate"><span class="pre">ppobj</span></code> structures. -To get the size:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">size_t</span> <span class="n">pparray_size</span><span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">the</span> <span class="n">number</span> <span class="n">of</span> <span class="n">array</span> <span class="n">items</span> -</pre></div> -</div> -<p>To get <code class="docutils literal notranslate"><span class="pre">ppobj</span> <span class="pre">*</span></code> at a given index:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppobj</span> <span class="o">*</span> <span class="n">pparray_at</span><span class="p">(</span><span class="n">array</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">ppobj</span> <span class="o">*</span> <span class="p">(</span><span class="n">no</span> <span class="n">index</span> <span class="n">check</span><span class="p">)</span> -<span class="n">ppobj</span> <span class="o">*</span> <span class="n">pparray_get</span><span class="p">(</span><span class="n">array</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">ppobj</span> <span class="o">*</span> <span class="ow">or</span> <span class="n">NULL</span> <span class="p">(</span><span class="k">with</span> <span class="n">index</span> <span class="n">check</span><span class="p">)</span> -<span class="n">ppobj</span> <span class="o">*</span> <span class="n">pparray_get_obj</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> <span class="o">//</span> <span class="n">function</span> <span class="n">equiv</span> <span class="n">to</span> <span class="n">pparray_get</span><span class="p">()</span> -</pre></div> -</div> -<p>Iterating over array elements:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">;</span> -<span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="n">size</span><span class="p">;</span> -<span class="n">ppobj</span> <span class="o">*</span><span class="n">obj</span><span class="p">;</span> -<span class="k">for</span> <span class="p">(</span><span class="n">size</span> <span class="o">=</span> <span class="n">pparray_size</span><span class="p">(</span><span class="n">array</span><span class="p">),</span> <span class="n">pparray_first</span><span class="p">(</span><span class="n">array</span><span class="p">,</span> <span class="n">index</span><span class="p">,</span> <span class="n">obj</span><span class="p">);</span> <span class="n">index</span> <span class="o"><</span> <span class="n">size</span><span class="p">;</span> <span class="n">pparray_next</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="n">obj</span><span class="p">))</span> -<span class="p">{</span> - <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">index</span> <span class="ow">and</span> <span class="n">obj</span> -<span class="p">}</span> -</pre></div> -</div> -<p>There is no magic first/next macros, just iteration over pointers. One could also use something like:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">for</span> <span class="p">(</span><span class="n">index</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">size</span> <span class="o">=</span> <span class="n">array</span><span class="o">-></span><span class="n">size</span><span class="p">;</span> <span class="n">index</span> <span class="o"><</span> <span class="n">size</span><span class="p">;</span> <span class="o">++</span><span class="n">index</span><span class="p">)</span> -<span class="p">{</span> - <span class="n">obj</span> <span class="o">=</span> <span class="n">pparray_at</span><span class="p">(</span><span class="n">array</span><span class="p">,</span> <span class="n">index</span><span class="p">);</span> - <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">index</span> <span class="ow">and</span> <span class="n">obj</span> -<span class="p">}</span> -</pre></div> -</div> -<p>When getting values from array and expecting a result of known type, use one of the following:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">int</span> <span class="n">pparray_get_bool</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="nb">int</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">boolean</span> <span class="n">value</span> -<span class="nb">int</span> <span class="n">pparray_get_int</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="n">ppint</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">ppint</span> <span class="n">value</span> -<span class="nb">int</span> <span class="n">pparray_get_uint</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="n">ppuint</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">ppuint</span> <span class="n">value</span> -<span class="nb">int</span> <span class="n">pparray_get_num</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="n">ppnum</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">ppnum</span> <span class="n">value</span> -<span class="n">ppname</span> <span class="n">pparray_get_name</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">ppname</span> <span class="n">value</span> -<span class="n">ppstring</span> <span class="n">pparray_get_string</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">ppstring</span> <span class="n">value</span> -<span class="n">pparray</span> <span class="o">*</span> <span class="n">pparray_get_array</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">pparray</span> <span class="o">*</span> <span class="n">value</span> -<span class="n">ppdict</span> <span class="o">*</span> <span class="n">pparray_get_dict</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">ppdict</span> <span class="o">*</span> <span class="n">value</span> -<span class="n">ppref</span> <span class="o">*</span> <span class="n">pparray_get_ref</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">ppref</span> <span class="o">*</span> <span class="n">value</span> -</pre></div> -</div> -<p>As with <code class="docutils literal notranslate"><span class="pre">ppobj_get_*</span></code> suite, numeric types getters set the value of a given type and returns 1, if the type matches. -Otherwise sets nothing and returns 0. Other getters return the value if the type matches, or NULL.</p> -<p>Every function from <code class="docutils literal notranslate"><span class="pre">pparray_get_*</span></code> suite have its <code class="docutils literal notranslate"><span class="pre">pparray_rget_*</span></code> counterpart that -that dereferences indirect objects (as explained for <code class="docutils literal notranslate"><span class="pre">ppobj_rget_*</span></code> getters). Note that -there is no <code class="docutils literal notranslate"><span class="pre">pparray_get_stream()</span></code> function, as streams in PDF are always indirect. -To get the stream from array use:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppstream</span> <span class="o">*</span> <span class="n">pparray_rget_stream</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> -</pre></div> -</div> -</div> -<div class="section" id="dict"> -<h2>Dict<a class="headerlink" href="#dict" title="Permalink to this headline">¶</a></h2> -<p>PDF dicts are represented as <code class="docutils literal notranslate"><span class="pre">ppdict</span></code> structure, which is C-array of <code class="docutils literal notranslate"><span class="pre">ppobj</span></code> with parallel -C-array of <code class="docutils literal notranslate"><span class="pre">ppname</span></code> pointers. To get the size of a dict:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">size_t</span> <span class="n">ppdict_size</span><span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">the</span> <span class="n">number</span> <span class="n">of</span> <span class="n">key</span><span class="o">-</span><span class="n">val</span> <span class="n">pairs</span> -</pre></div> -</div> -<p>To get the value at a given index (integer):</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppdict_at</span><span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">no</span> <span class="n">index</span> <span class="n">check</span> -</pre></div> -</div> -<p>To get the name (key) at a given index:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppname</span> <span class="n">ppdict_key</span><span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">no</span> <span class="n">index</span> <span class="n">check</span> -</pre></div> -</div> -<p>To iterate over dict key-val pairs:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">;</span> -<span class="n">ppname</span> <span class="o">*</span><span class="n">pkey</span><span class="p">;</span> -<span class="n">ppobj</span> <span class="o">*</span><span class="n">obj</span><span class="p">;</span> - -<span class="k">for</span> <span class="p">(</span><span class="n">ppdict_first</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">pkey</span><span class="p">,</span> <span class="n">obj</span><span class="p">);</span> <span class="o">*</span><span class="n">pkey</span> <span class="o">!=</span> <span class="n">NULL</span><span class="p">;</span> <span class="n">ppdict_next</span><span class="p">(</span><span class="n">pkey</span><span class="p">,</span> <span class="n">obj</span><span class="p">))</span> -<span class="p">{</span> - <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="o">*</span><span class="n">pkey</span> <span class="ow">and</span> <span class="n">obj</span> -<span class="p">}</span> -</pre></div> -</div> -<p>There is no magic in first/next macros, just iteration through keys and values lists pointers. -For convenient iteration, a list of keys is terminated with NULL, so in the code above <code class="docutils literal notranslate"><span class="pre">*pkey</span> <span class="pre">!=</span> <span class="pre">NULL</span></code> -is used as the loop condition. One may also iterate via indices:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">;</span> -<span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="n">size</span><span class="p">;</span> -<span class="n">ppname</span> <span class="n">key</span><span class="p">;</span> -<span class="n">ppobj</span> <span class="o">*</span><span class="n">obj</span><span class="p">;</span> -<span class="k">for</span> <span class="p">(</span><span class="n">index</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">size</span> <span class="o">=</span> <span class="n">ppdict_size</span><span class="p">(</span><span class="nb">dict</span><span class="p">);</span> <span class="n">index</span> <span class="o"><</span> <span class="n">size</span><span class="p">;</span> <span class="o">++</span><span class="n">index</span><span class="p">)</span> -<span class="p">{</span> - <span class="n">key</span> <span class="o">=</span> <span class="n">ppdict_key</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">index</span><span class="p">);</span> - <span class="n">obj</span> <span class="o">=</span> <span class="n">ppdict_at</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">index</span><span class="p">);</span> - <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">key</span> <span class="ow">and</span> <span class="n">obj</span> -<span class="p">}</span> -</pre></div> -</div> -<p>To get the object associated with a given name, use one of the following:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppdict_get_obj</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="nb">int</span> <span class="n">ppdict_get_bool</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="nb">int</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="nb">int</span> <span class="n">ppdict_get_int</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">ppint</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="nb">int</span> <span class="n">ppdict_get_uint</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">ppuint</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="nb">int</span> <span class="n">ppdict_get_num</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">ppnum</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="n">ppname</span> <span class="n">ppdict_get_name</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">ppstring</span> <span class="n">ppdict_get_string</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">pparray</span> <span class="o">*</span> <span class="n">ppdict_get_array</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">ppdict</span> <span class="o">*</span> <span class="n">ppdict_get_dict</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">ppref</span> <span class="o">*</span> <span class="n">ppdict_get_ref</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -</pre></div> -</div> -<p>Note that all getters accepts <code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">char</span> <span class="pre">*</span></code> as key, so it is ok to say:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdict_rget_dict</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="s2">"Resources"</span><span class="p">);</span> -</pre></div> -</div> -<p>as well as:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdic_rget_dict</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">name</span><span class="p">);</span> <span class="o">//</span> <span class="n">ppname</span> <span class="n">name</span> -</pre></div> -</div> -<p>Every <code class="docutils literal notranslate"><span class="pre">ppdict_get_*</span></code> getter has <code class="docutils literal notranslate"><span class="pre">ppdict_rget_*</span></code> counterpart that dereferences -indirect objects if necessary. Note that there is no <code class="docutils literal notranslate"><span class="pre">ppdict_get_stream()</span></code> function, -but there is:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppstream</span> <span class="o">*</span> <span class="n">ppdict_rget_stream</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -</pre></div> -</div> -<p>So far dicts comes with no names mapping, so by-name dict accessors perform a linear search -through the keys list. PDF dicts are usually small, so it is fast enough. -Building names lookup for every dict in PDF makes no sense I think, as <code class="docutils literal notranslate"><span class="pre">pplib</span></code> applications -will query just several dicts I guess.. However, some apps may extensively query -resources, which may refer to hundreds of objects (eg. images). So some mapping for dicts -is still considered.</p> -</div> -<div class="section" id="stream"> -<h2>Stream<a class="headerlink" href="#stream" title="Permalink to this headline">¶</a></h2> -<p>PDF streams are represented as <code class="docutils literal notranslate"><span class="pre">ppstream</span></code> objects. To get the stream dict:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdict</span> <span class="o">*</span> <span class="n">ppstream_dict</span><span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span> -</pre></div> -</div> -<p>To read the stream data:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">uint8_t</span> <span class="o">*</span> <span class="n">ppstream_first</span> <span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">size</span><span class="p">,</span> <span class="nb">int</span> <span class="n">decode</span><span class="p">);</span> -<span class="n">uint8_t</span> <span class="o">*</span> <span class="n">ppstream_next</span> <span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">size</span><span class="p">);</span> -<span class="n">void</span> <span class="n">ppstream_done</span> <span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">);</span> -</pre></div> -</div> -<p>Both <code class="docutils literal notranslate"><span class="pre">first`</span> <span class="pre">and</span> <span class="pre">``next</span></code> functions return a chunk of stream data and sets the <code class="docutils literal notranslate"><span class="pre">size</span></code> of the chunk. -<code class="docutils literal notranslate"><span class="pre">decode</span></code> parameter tell the reader to decompress the stream (1) or return raw (0). A call to <code class="docutils literal notranslate"><span class="pre">ppstream_next()</span></code> -must be preceeded by <code class="docutils literal notranslate"><span class="pre">ppstream_first()</span></code>. Once you’re done with the stream, you have to call <code class="docutils literal notranslate"><span class="pre">ppstream_done()</span></code>, -no matter if the stream has been read to the end or not. The stream data iterator in use:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">uint8_t</span> <span class="o">*</span><span class="n">data</span><span class="p">;</span> -<span class="n">size_t</span> <span class="n">size</span><span class="p">;</span> -<span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">;</span> -<span class="nb">int</span> <span class="n">decode</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> <span class="o">//</span> <span class="mi">1</span> <span class="o">-</span> <span class="n">get</span> <span class="n">decompressed</span><span class="p">,</span> <span class="mi">0</span> <span class="o">-</span> <span class="n">get</span> <span class="n">raw</span> - -<span class="k">for</span> <span class="p">(</span><span class="n">data</span> <span class="o">=</span> <span class="n">ppstream_first</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="n">decode</span><span class="p">);</span> <span class="n">data</span> <span class="o">!=</span> <span class="n">NULL</span><span class="p">;</span> <span class="n">data</span> <span class="o">=</span> <span class="n">ppstream_next</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">))</span> -<span class="p">{</span> - <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">data</span> <span class="ow">and</span> <span class="n">its</span> <span class="n">size</span> -<span class="p">}</span> -<span class="n">ppstream_done</span><span class="p">(</span><span class="n">stream</span><span class="p">);</span> -</pre></div> -</div> -<p>Every subsequent iterator call invalidates the previous reader output, so you have to utilize the returned chunk -of data just after you ot that. So the following is wrong:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">data1</span> <span class="o">=</span> <span class="n">ppstream_first</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> -<span class="n">data2</span> <span class="o">=</span> <span class="n">ppstream_next</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">);</span> -<span class="n">data3</span> <span class="o">=</span> <span class="n">ppstream_next</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">);</span> -<span class="n">some_output</span><span class="p">(</span><span class="n">data1</span><span class="p">,</span> <span class="n">size</span><span class="p">);</span> -<span class="n">some_output</span><span class="p">(</span><span class="n">data2</span><span class="p">,</span> <span class="n">size</span><span class="p">);</span> -</pre></div> -</div> -<p>The reader calls usually return the same pointer to internal buffer, just filled with a different data. -<code class="docutils literal notranslate"><span class="pre">pplib</span></code> allocates reasonably large buffer and fills that buffer on subsequent calls to the reader.</p> -<p>If the source stream has no compression, using both <code class="docutils literal notranslate"><span class="pre">decode</span> <span class="pre">==</span> <span class="pre">1</span></code> and <code class="docutils literal notranslate"><span class="pre">decode</span> <span class="pre">==</span> <span class="pre">0</span></code> should give the same result. -You can check if the stream is actually compressed with:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppstream_compressed</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">non</span> <span class="n">zero</span> <span class="k">if</span> <span class="o">/</span><span class="n">Filter</span> <span class="ow">is</span> <span class="n">present</span> -</pre></div> -</div> -<p>It might be necessary to load the entire stream data at once:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">uint8_t</span> <span class="o">*</span> <span class="n">ppstream_all</span> <span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">size</span><span class="p">,</span> <span class="nb">int</span> <span class="n">decode</span><span class="p">);</span> -</pre></div> -</div> -<p>If the initial buffer size is insufficient, it grows until the entire stream data is loaded. You must call -<code class="docutils literal notranslate"><span class="pre">ppstream_done(stream)</span></code> after using returned data.</p> -<p><code class="docutils literal notranslate"><span class="pre">ppstream_done()</span></code> doesn’t invalidate the stream object, it just closes its internal reader. -The stream itself remains a valid object (eg. one can read it again if necessary), -but the reader buffer is released. It is actually not freed but kept for future the reuse with that on some other stream, -but you still need to mark it ready for reuse to avoid allocating a separate buffer for every stream you’re going to read.</p> -<p>Stream data readers will return <code class="docutils literal notranslate"><span class="pre">NULL</span></code> if you haven’t close the previous reader process with <code class="docutils literal notranslate"><span class="pre">ppstream_done()</span></code>. All below is wrong:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">data1</span> <span class="o">=</span> <span class="n">ppstream_all</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> -<span class="n">data2</span> <span class="o">=</span> <span class="n">ppstream_all</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> <span class="o">//</span> <span class="n">data2</span> <span class="o">==</span> <span class="n">NULL</span> -<span class="o">//</span> <span class="ow">or</span> -<span class="n">data1</span> <span class="o">=</span> <span class="n">ppstream_first</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> -<span class="n">data2</span> <span class="o">=</span> <span class="n">ppstream_first</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> <span class="o">//</span> <span class="n">data2</span> <span class="o">==</span> <span class="n">NULL</span> -<span class="o">//</span> <span class="ow">or</span> -<span class="n">data1</span> <span class="o">=</span> <span class="n">ppstream_first</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> -<span class="n">data2</span> <span class="o">=</span> <span class="n">ppstream_all</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> <span class="o">//</span> <span class="n">data2</span> <span class="o">==</span> <span class="n">NULL</span> -</pre></div> -</div> -<p>To avoid unnecessary dependencies, <code class="docutils literal notranslate"><span class="pre">pplib</span></code> does not support image filters (<code class="docutils literal notranslate"><span class="pre">/DCT</span></code>, <code class="docutils literal notranslate"><span class="pre">/JPX</span></code>, <code class="docutils literal notranslate"><span class="pre">/JBIG</span></code>, <code class="docutils literal notranslate"><span class="pre">/CCITT</span></code>). -But it is ok to read the stream with <code class="docutils literal notranslate"><span class="pre">decode</span></code> set to 1 on such streams. <code class="docutils literal notranslate"><span class="pre">pplib</span></code> assumes that the image is the -final/target stream form and just returns it as-is. Eg. in the case of JPEG (<code class="docutils literal notranslate"><span class="pre">/DCT</span></code> filtered) image both calls should -give the same results:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppstream_all</span><span class="p">(</span><span class="n">jpegstream</span><span class="p">,</span> <span class="o">&</span><span class="n">jpegsize</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> <span class="o">//</span> <span class="n">don</span><span class="s1">'t decode, return what'</span><span class="n">s</span> <span class="n">there</span> -<span class="n">ppstream_all</span><span class="p">(</span><span class="n">jpegstream</span><span class="p">,</span> <span class="o">&</span><span class="n">jpegsize</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> <span class="o">//</span> <span class="n">decode</span> <span class="n">but</span> <span class="n">found</span> <span class="n">image</span> <span class="nb">filter</span><span class="p">,</span> <span class="n">effectively</span> <span class="n">the</span> <span class="n">same</span> -</pre></div> -</div> -<p>A bit more about streams memory. As mentioned, <code class="docutils literal notranslate"><span class="pre">pplib</span></code> allocates buffers for stream readers. After <code class="docutils literal notranslate"><span class="pre">ppstream_done()</span></code>, -the stream no longer <em>owns</em> the buffer space. But the buffer may remain allocated, to be reused with future readers. -<code class="docutils literal notranslate"><span class="pre">pplib</span></code> keeps a pool of several buffers. This means, that when you use stream readers, <code class="docutils literal notranslate"><span class="pre">pplib</span></code> eats -some memory (1MB or so) that is not freed, even if no streams are used. And even if you free all objects. -If you suffer from this, you can optionally use a pair of functions:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">ppstream_init_buffers</span> <span class="p">(</span><span class="n">void</span><span class="p">);</span> -<span class="n">void</span> <span class="n">ppstream_free_buffers</span> <span class="p">(</span><span class="n">void</span><span class="p">);</span> -</pre></div> -</div> -<p>The first initializes buffers pool, unless done so far. Currently <code class="docutils literal notranslate"><span class="pre">pplib</span></code> cares of it before opening every stream reader, -so it is not obligatory. The second frees a pool of buffers. The intended use is to call <code class="docutils literal notranslate"><span class="pre">ppstream_init_buffers()</span></code> once -as kind of library initializer and to call <code class="docutils literal notranslate"><span class="pre">ppstream_free_buffers()</span></code> once, as the library finalizer.</p> -</div> -<div class="section" id="filters"> -<h2>Filters<a class="headerlink" href="#filters" title="Permalink to this headline">¶</a></h2> -<p>In version v1.00 (20190916) <code class="docutils literal notranslate"><span class="pre">ppstream</span></code> API has been extended with filters information. -<code class="docutils literal notranslate"><span class="pre">ppstream</span></code> knows its filter(s) and keps it as <code class="docutils literal notranslate"><span class="pre">stream->filter</span></code>:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">//</span> <span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">;</span> -<span class="n">ppstream_filter</span> <span class="o">*</span><span class="n">info</span> <span class="o">=</span> <span class="o">&</span><span class="n">stream</span><span class="o">-></span><span class="nb">filter</span><span class="p">;</span> -</pre></div> -</div> -<p><code class="docutils literal notranslate"><span class="pre">ppstream_filter</span></code> is the following structure:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">typedef</span> <span class="n">struct</span> <span class="p">{</span> - <span class="n">ppstreamtp</span> <span class="o">*</span><span class="n">filters</span><span class="p">;</span> <span class="o">//</span> <span class="n">c</span><span class="o">-</span><span class="n">array</span> <span class="n">of</span> <span class="nb">filter</span> <span class="n">identifiers</span> <span class="p">(</span><span class="n">enum</span> <span class="n">integers</span><span class="p">)</span> - <span class="n">ppdict</span> <span class="o">**</span><span class="n">params</span><span class="p">;</span> <span class="o">//</span> <span class="n">c</span><span class="o">-</span><span class="n">array</span> <span class="n">of</span> <span class="n">ppdict</span> <span class="n">pointers</span> - <span class="n">size_t</span> <span class="n">count</span><span class="p">;</span> <span class="o">//</span> <span class="n">number</span> <span class="n">of</span> <span class="n">filters</span><span class="p">,</span> <span class="n">length</span> <span class="n">of</span> <span class="n">the</span> <span class="n">arrays</span> <span class="p">(</span><span class="n">typically</span> <span class="mi">1</span><span class="p">)</span> -<span class="p">}</span> <span class="n">ppstream_filter</span><span class="p">;</span> -</pre></div> -</div> -<p>If <code class="docutils literal notranslate"><span class="pre">count</span> <span class="pre">></span> <span class="pre">0</span></code> then <code class="docutils literal notranslate"><span class="pre">filters</span></code> member is not NULL. Filters array keeps integer constants:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">PPSTREAM_BASE16</span> <span class="o">/*</span> <span class="o">/</span><span class="n">ASCIIHexDecode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_BASE85</span> <span class="o">/*</span> <span class="o">/</span><span class="n">ASCII85Decode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_RUNLENGTH</span> <span class="o">/*</span> <span class="o">/</span><span class="n">RunLengthDecode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_FLATE</span> <span class="o">/*</span> <span class="o">/</span><span class="n">FlateDecode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_LZW</span> <span class="o">/*</span> <span class="o">/</span><span class="n">LZWDecode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_CCITT</span> <span class="o">/*</span> <span class="o">/</span><span class="n">CCITTFaxDecode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_DCT</span> <span class="o">/*</span> <span class="o">/</span><span class="n">DCTDecode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_JBIG2</span> <span class="o">/*</span> <span class="o">/</span><span class="n">JBIG2Decode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_JPX</span> <span class="o">/*</span> <span class="o">/</span><span class="n">JPXDecode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_CRYPT</span> <span class="o">/*</span> <span class="o">/</span><span class="n">Crypt</span> <span class="o">*/</span> -</pre></div> -</div> -<p>Params array keeps corresponding filter parameters (<code class="docutils literal notranslate"><span class="pre">/DecodeParms</span></code>) if present. <code class="docutils literal notranslate"><span class="pre">params</span></code> member is not NULL -if <code class="docutils literal notranslate"><span class="pre">count</span> <span class="pre">></span> <span class="pre">0</span></code> and the stream dict has <code class="docutils literal notranslate"><span class="pre">/DecodeParms</span></code> entry. Even if <code class="docutils literal notranslate"><span class="pre">params</span></code> is there, -for every N-th filter, <code class="docutils literal notranslate"><span class="pre">params[N]</span></code> may be NULL (corresponding to PDF <code class="docutils literal notranslate"><span class="pre">null</span></code>).</p> -<p><code class="docutils literal notranslate"><span class="pre">stream->filter</span></code> keeps the source stream filter information, which may not correspond to the result of stream readers -(<code class="docutils literal notranslate"><span class="pre">ppstream_first()</span></code>, <code class="docutils literal notranslate"><span class="pre">ppstream_next()</span></code>, <code class="docutils literal notranslate"><span class="pre">ppstream_all()</span></code>). The get the filters info relevant to the result from readers:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">ppstream_filter_info</span> <span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">ppstream_filter</span> <span class="o">*</span><span class="n">info</span><span class="p">,</span> <span class="nb">int</span> <span class="n">decode</span><span class="p">);</span> -</pre></div> -</div> -<p>The function fills <code class="docutils literal notranslate"><span class="pre">ppstream_filter</span></code> structure according to the expected result from stream readers (example 3 shows -how to use it to reconstruct <code class="docutils literal notranslate"><span class="pre">/Filter</span></code> and <code class="docutils literal notranslate"><span class="pre">/DecodeParms</span></code> when copying the stream to some other PDF).</p> -<p>To convert filter identifier (<code class="docutils literal notranslate"><span class="pre">ppstreamtp</span></code>) to a corresponding PDF filter name:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span> <span class="n">ppstream_filter_name</span><span class="p">[];</span> -</pre></div> -</div> -<p>To covert <code class="docutils literal notranslate"><span class="pre">ppname</span></code> to filter identifier:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">int</span> <span class="n">ppstream_filter_type</span> <span class="p">(</span><span class="n">ppname</span> <span class="n">filtername</span><span class="p">,</span> <span class="n">ppstreamtp</span> <span class="o">*</span><span class="n">filtertype</span><span class="p">);</span> -<span class="o">//</span> <span class="n">returns</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">sets</span> <span class="n">filtertype</span> <span class="k">if</span> <span class="n">filtername</span> <span class="ow">is</span> <span class="n">the</span> <span class="n">proper</span> <span class="nb">filter</span> <span class="n">name</span> -</pre></div> -</div> -<p>Additional information about the stream can be fetched from macros:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppstream_compressed</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span> <span class="o">/*</span> <span class="n">stream</span><span class="o">-></span><span class="n">flags</span> <span class="o">&</span> <span class="p">(</span><span class="n">PPSTREAM_FILTER</span><span class="o">|</span><span class="n">PPSTREAM_IMAGE</span><span class="p">)</span> <span class="o">*/</span> -<span class="n">ppstream_filtered</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span> <span class="o">/*</span> <span class="n">stream</span><span class="o">-></span><span class="n">flags</span> <span class="o">&</span> <span class="n">PPSTREAM_FILTER</span> <span class="o">*/</span> -<span class="n">ppstream_image</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span> <span class="o">/*</span> <span class="n">stream</span><span class="o">-></span><span class="n">flags</span> <span class="o">*</span> <span class="n">PPSTREAM_IMAGE</span> <span class="o">*/</span> -</pre></div> -</div> -<p><code class="docutils literal notranslate"><span class="pre">stream->flags</span></code> is a binary sum of the following:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">PPSTREAM_FILTER</span> <span class="o">/*</span> <span class="nb">set</span> <span class="n">iff</span> <span class="n">the</span> <span class="n">stream</span> <span class="n">filters</span> <span class="nb">list</span> <span class="n">has</span> <span class="n">one</span> <span class="n">of</span><span class="p">:</span> <span class="n">BASE16</span><span class="p">,</span> <span class="n">BASE85</span><span class="p">,</span> <span class="n">RUNLENGTH</span><span class="p">,</span> <span class="n">FLATE</span><span class="p">,</span> <span class="n">LZW</span> <span class="o">*/</span> -<span class="n">PPSTREAM_IMAGE</span> <span class="o">/*</span> <span class="nb">set</span> <span class="n">iff</span> <span class="n">the</span> <span class="n">stream</span> <span class="n">filters</span> <span class="nb">list</span> <span class="n">has</span> <span class="n">one</span> <span class="n">of</span><span class="p">:</span> <span class="n">CCITT</span><span class="p">,</span> <span class="n">DCT</span><span class="p">,</span> <span class="n">JBIG2</span><span class="p">,</span> <span class="n">JPX</span> <span class="o">*/</span> -<span class="n">PPSTREAM_ENCRYPTED</span> <span class="o">/*</span> <span class="nb">set</span> <span class="n">iff</span> <span class="n">the</span> <span class="n">stream</span> <span class="ow">is</span> <span class="n">encrypted</span> <span class="o">*/</span> -<span class="n">PPSTREAM_ENCRYPTED_OWN</span> <span class="o">/*</span> <span class="nb">set</span> <span class="n">iff</span> <span class="n">the</span> <span class="n">stream</span> <span class="n">has</span> <span class="n">own</span> <span class="n">CRYPT</span> <span class="nb">filter</span> <span class="o">*/</span> -</pre></div> -</div> -<p>Note that <code class="docutils literal notranslate"><span class="pre">PPSTREAM_COMPRESSED</span></code> is not there any longer, use <code class="docutils literal notranslate"><span class="pre">ppstream_compressed()</span></code> instead. -And there is some more, see <code class="docutils literal notranslate"><span class="pre">ppapi.h</span></code>.</p> -</div> -<div class="section" id="ref"> -<h2>Ref<a class="headerlink" href="#ref" title="Permalink to this headline">¶</a></h2> -<p>Indirect objects are represented as <code class="docutils literal notranslate"><span class="pre">ppref</span></code> structure. To get the object that the -reference refers to:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppref_obj</span><span class="p">(</span><span class="n">ppref</span> <span class="o">*</span><span class="n">ref</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span> -</pre></div> -</div> -<p><code class="docutils literal notranslate"><span class="pre">ppref</span></code> structure also keeps the reference number and version, a pointer to cross reference table it belongs -to and others, but I guess you won’t need anything but the referenced object. <code class="docutils literal notranslate"><span class="pre">pplib</span></code> parser resolves references -on-fly. So if there is a dict with indirect objects:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o"><<</span> - <span class="o">/</span><span class="n">Type</span> <span class="o">/</span><span class="n">Page</span> - <span class="o">/</span><span class="n">Resources</span> <span class="mi">123</span> <span class="mi">0</span> <span class="n">R</span> - <span class="o">...</span> -<span class="o">>></span> -</pre></div> -</div> -<p>the parser will produce <code class="docutils literal notranslate"><span class="pre">ppdict</span></code> with <code class="docutils literal notranslate"><span class="pre">Resources</span></code> key pointing the proper <code class="docutils literal notranslate"><span class="pre">ppref</span> <span class="pre">*</span></code> value. -If you need more, access <code class="docutils literal notranslate"><span class="pre">ppref</span></code> members:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">struct</span> <span class="n">ppref</span> <span class="p">{</span> - <span class="n">ppobj</span> <span class="nb">object</span><span class="p">;</span> <span class="o">//</span> <span class="n">target</span> <span class="nb">object</span> - <span class="n">ppuint</span> <span class="n">number</span><span class="p">,</span> <span class="n">version</span><span class="p">;</span> <span class="o">//</span> <span class="n">identifiers</span> - <span class="n">size_t</span> <span class="n">offset</span><span class="p">;</span> <span class="o">//</span> <span class="n">file</span> <span class="n">offset</span> <span class="p">(</span><span class="n">useless</span> <span class="k">for</span> <span class="n">you</span><span class="p">,</span> <span class="n">may</span> <span class="n">be</span> <span class="n">zero</span> <span class="k">for</span> <span class="n">compressed</span> <span class="n">objects</span><span class="p">)</span> - <span class="n">ppuint</span> <span class="n">length</span><span class="p">;</span> <span class="o">//</span> <span class="n">the</span> <span class="n">length</span> <span class="n">of</span> <span class="n">the</span> <span class="n">original</span> <span class="nb">object</span> <span class="n">data</span> - <span class="n">ppxref</span> <span class="o">*</span><span class="n">xref</span><span class="p">;</span> <span class="o">//</span> <span class="n">cross</span> <span class="n">reference</span> <span class="n">table</span> <span class="n">it</span> <span class="n">belongs</span> <span class="n">to</span> -<span class="p">};</span> -</pre></div> -</div> -</div> -<div class="section" id="xref"> -<h2>XRef<a class="headerlink" href="#xref" title="Permalink to this headline">¶</a></h2> -<p>Cross reference table is exposed as <code class="docutils literal notranslate"><span class="pre">ppxref</span></code> (incomplete type, you can only oprate on its pointer). -To get top document xref:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppxref</span> <span class="o">*</span> <span class="n">ppdoc_xref</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p>To get previous (older) xref:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppxref</span> <span class="o">*</span> <span class="n">ppxref_prev</span> <span class="p">(</span><span class="n">ppxref</span> <span class="o">*</span><span class="n">xref</span><span class="p">);</span> -</pre></div> -</div> -<p>To find an object of a given refnumber:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppref</span> <span class="o">*</span> <span class="n">ppxref_find</span> <span class="p">(</span><span class="n">ppxref</span> <span class="o">*</span><span class="n">xref</span><span class="p">,</span> <span class="n">ppuint</span> <span class="n">refnumber</span><span class="p">);</span> -</pre></div> -</div> -<p>[Note: since pplib v0.98 in case of documents with incremental update, <code class="docutils literal notranslate"><span class="pre">ppxref_find()</span></code> returns -the newest available version of a given object rather than the object in a given body.]</p> -</div> -<div class="section" id="pdf"> -<h2>PDF<a class="headerlink" href="#pdf" title="Permalink to this headline">¶</a></h2> -<p>PDF document is represented as <code class="docutils literal notranslate"><span class="pre">ppdoc</span></code> structure (incomplete type, you can only operate on its pointer). -To load a document from file:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdoc</span> <span class="o">*</span> <span class="n">ppdoc_load</span> <span class="p">(</span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">filename</span><span class="p">);</span> -</pre></div> -</div> -<p>To load a document from memory data:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdoc</span> <span class="o">*</span> <span class="n">ppdoc_mem</span> <span class="p">(</span><span class="n">const</span> <span class="n">void</span> <span class="o">*</span><span class="n">data</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">size</span><span class="p">);</span> -</pre></div> -</div> -<p>The data is assumed to be a buffer allocated with <code class="docutils literal notranslate"><span class="pre">malloc</span></code> - it is freed when destroying <code class="docutils literal notranslate"><span class="pre">ppdoc</span></code>.</p> -<p>Both loaders returns <code class="docutils literal notranslate"><span class="pre">NULL</span></code> on failure.</p> -<p>To free <code class="docutils literal notranslate"><span class="pre">ppdoc</span></code> and all objects it refers to:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">ppdoc_free</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p>So far we haven’t mention about any explicit object reclaimers. There are no dedicated <code class="docutils literal notranslate"><span class="pre">free</span></code> functions -for other objects. You don’t allocate or free objects yourself. <code class="docutils literal notranslate"><span class="pre">ppdoc</span></code> object is an owner of all -beings it refers to. It also means that every object described so far is alive as long as the containing -<code class="docutils literal notranslate"><span class="pre">ppdoc</span></code> is alive.</p> -<p>To access main PDF dicts:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdict</span> <span class="o">*</span> <span class="n">ppdoc_trailer</span><span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">top</span> <span class="n">xref</span> <span class="n">trailer</span> <span class="nb">dict</span> -<span class="n">ppdict</span> <span class="o">*</span> <span class="n">ppdoc_catalog</span><span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">catalog</span> <span class="n">referred</span> <span class="kn">from</span> <span class="nn">the</span> <span class="n">trailer</span> -<span class="n">ppdict</span> <span class="o">*</span> <span class="n">ppdoc_info</span><span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">info</span> <span class="nb">dict</span> <span class="n">referred</span> <span class="kn">from</span> <span class="nn">the</span> <span class="n">trailer</span> -</pre></div> -</div> -<p>To get the PDF version:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span> <span class="n">ppdoc_version_string</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> <span class="o">//</span> <span class="n">version</span> <span class="n">string</span> -<span class="nb">int</span> <span class="n">ppdoc_version_number</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">,</span> <span class="nb">int</span> <span class="o">*</span><span class="n">minor</span><span class="p">);</span> <span class="o">//</span> <span class="n">minor</span> <span class="ow">and</span> <span class="n">major</span> <span class="n">numbers</span> -</pre></div> -</div> -<p>To get the file size of the source PDF document:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">size_t</span> <span class="n">ppdoc_file_size</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p>To get the number of objects in all xrefs:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppuint</span> <span class="n">ppdoc_objects</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p>To get the approx usage of memory:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">size_t</span> <span class="n">ppdoc_memory</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">waste</span><span class="p">);</span> -</pre></div> -</div> -</div> -<div class="section" id="encryption"> -<h2>Encryption<a class="headerlink" href="#encryption" title="Permalink to this headline">¶</a></h2> -<p><code class="docutils literal notranslate"><span class="pre">pplib</span></code> handles encrypted (password protected) documents. If a document is encrypted, most of strings and streams are ciphered. -In that form they are unreadable and rather useless, you can’t even rewrite such strings/streams as-is to a different PDF output. -It is a common practise to <em>protect</em> documents with an empty password. Such documents remain readable in Acrobat (just opens them without prompting -for a password), but some features (eg. printing) may restricted by the application.</p> -<p>When <code class="docutils literal notranslate"><span class="pre">pplib</span></code> detects encryption, it follows Acrobat approach and first tries an empty password. If it succeeds, <code class="docutils literal notranslate"><span class="pre">pplib</span></code> proceeeds normally, providing -an access to decrypted strings and streams, as if they weren’t ciphered. If the document is protected with non-empty password, <code class="docutils literal notranslate"><span class="pre">pplib</span></code> gives -a way to provide a password and proceed. Until you provide a password, <code class="docutils literal notranslate"><span class="pre">ppdoc</span></code> object returned by <code class="docutils literal notranslate"><span class="pre">ppdoc_load()</span></code> function has all object wntries -set to <code class="docutils literal notranslate"><span class="pre">null</span></code>.</p> -<p>After loading a document you should check encryption status with:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppcrypt_status</span> <span class="n">ppdoc_crypt_status</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p><code class="docutils literal notranslate"><span class="pre">ppcrypt_status</span></code> (integer) may have the following values:</p> -<blockquote> -<div><code class="docutils literal notranslate"><span class="pre">PPCRYPT_NONE</span></code> - no encryption, go ahead -<code class="docutils literal notranslate"><span class="pre">PPCRYPT_DONE</span></code> - encryption present but password succeeded, go ahead -<code class="docutils literal notranslate"><span class="pre">PPCRYPT_PASS</span></code> - encryption present, need non-empty password -<code class="docutils literal notranslate"><span class="pre">PPCRYPT_FAIL</span></code> - invalid or unsupported encryption (eg. undocumented in pdf spec)</div></blockquote> -<p>If a password is needed, you can provide one with:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppcrypt_status</span> <span class="n">ppdoc_crypt_pass</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">,</span> <span class="n">const</span> <span class="n">void</span> <span class="o">*</span><span class="n">userpass</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">userpasslength</span><span class="p">,</span> - <span class="n">const</span> <span class="n">void</span> <span class="o">*</span><span class="n">ownerpass</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">ownerpasslength</span><span class="p">);</span> -</pre></div> -</div> -<p>Well, yes, there are actually two passwords in encrypted documents. Relation between them is obscure to me, but enough -to know that having one of them is enough to decrypt the document. If you know the password, you probably mean -<code class="docutils literal notranslate"><span class="pre">userpass</span></code>, in which case you should put <code class="docutils literal notranslate"><span class="pre">NULL</span></code> as <code class="docutils literal notranslate"><span class="pre">ownerpass</span></code>. The function returns <code class="docutils literal notranslate"><span class="pre">PPCRYPT_DONE</span></code> if the password -succeeds and the previous status otherwise. Your custom loader function may look like that:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">;</span> -<span class="n">pdf</span> <span class="o">=</span> <span class="n">ppdoc_load</span><span class="p">(</span><span class="s2">"file.pdf"</span><span class="p">);</span> -<span class="k">if</span> <span class="p">(</span><span class="n">pdf</span> <span class="o">==</span> <span class="n">NULL</span><span class="p">)</span> - <span class="k">return</span> <span class="n">NULL</span><span class="p">;</span> -<span class="n">switch</span> <span class="p">(</span><span class="n">ppdoc_crypt_status</span><span class="p">(</span><span class="n">pdf</span><span class="p">))</span> -<span class="p">{</span> - <span class="n">case</span> <span class="n">PPCRYPT_NONE</span><span class="p">:</span> - <span class="n">case</span> <span class="n">PPCRYPT_DONE</span><span class="p">:</span> - <span class="k">return</span> <span class="n">pdf</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPCRYPT_PASS</span><span class="p">:</span> - <span class="k">if</span> <span class="p">(</span><span class="n">ppdoc_crypt_pass</span><span class="p">(</span><span class="n">pdf</span><span class="p">,</span> <span class="s2">"dummy"</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="n">NULL</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">==</span> <span class="n">PPCRYPT_DONE</span> <span class="o">||</span> - <span class="n">ppdoc_crypt_pass</span><span class="p">(</span><span class="n">pdf</span><span class="p">,</span> <span class="n">NULL</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">"dummy"</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span> <span class="o">==</span> <span class="n">PPCRYPT_DONE</span><span class="p">)</span> - <span class="k">return</span> <span class="n">pdf</span><span class="p">;</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">"sorry, password needed</span><span class="se">\n</span><span class="s2">"</span><span class="p">);</span> - <span class="n">ppdoc_free</span><span class="p">(</span><span class="n">pdf</span><span class="p">);</span> - <span class="k">return</span> <span class="n">NULL</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPCRYPT_FAIL</span><span class="p">:</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">"sorry, encryption failed</span><span class="se">\n</span><span class="s2">"</span><span class="p">);</span> - <span class="n">ppdoc_free</span><span class="p">(</span><span class="n">pdf</span><span class="p">);</span> - <span class="k">return</span> <span class="n">NULL</span><span class="p">;</span> -<span class="p">}</span> -</pre></div> -</div> -<p>[If you get <code class="docutils literal notranslate"><span class="pre">PPCRYPT_FAIL</span></code> it might mean <em>I failed</em>, so treat as a bug.]</p> -<p>If you’d like to know what permissions are given/restricted to encrypted document:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppint</span> <span class="n">ppdoc_permissions</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p>Returned value can be queried with the following binary flags (you can verify with Acrobat <em>File -> Properties -> Security</em> tab):</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">PPDOC_ALLOW_PRINT</span> <span class="o">//</span> <span class="n">printing</span> -<span class="n">PPDOC_ALLOW_MODIFY</span> <span class="o">//</span> <span class="n">filling</span> <span class="n">form</span> <span class="n">fields</span><span class="p">,</span> <span class="n">signing</span><span class="p">,</span> <span class="n">creating</span> <span class="n">template</span> <span class="n">pages</span> -<span class="n">PPDOC_ALLOW_COPY</span> <span class="o">//</span> <span class="n">copying</span><span class="p">,</span> <span class="n">copying</span> <span class="k">for</span> <span class="n">accessibility</span> -<span class="n">PPDOC_ALLOW_ANNOTS</span> <span class="o">//</span> <span class="n">filling</span> <span class="n">form</span> <span class="n">fields</span><span class="p">,</span> <span class="n">copying</span><span class="p">,</span> <span class="n">signing</span> -<span class="n">PPDOC_ALLOW_EXTRACT</span> <span class="o">//</span> <span class="n">contents</span> <span class="n">copying</span> <span class="k">for</span> <span class="n">accessibility</span> -<span class="n">PPDOC_ALLOW_ASSEMBLY</span> <span class="o">//</span> <span class="p">(</span><span class="n">no</span> <span class="n">effect</span><span class="p">)</span> -<span class="n">PPDOC_ALLOW_PRINT_HIRES</span> <span class="o">//</span> <span class="p">(</span><span class="n">no</span> <span class="n">effect</span><span class="p">)</span> -</pre></div> -</div> -<p><code class="docutils literal notranslate"><span class="pre">pplib</span></code> does absolutelly nothing with permissions, it cares only to decrypt the document. As mentioned, encryption applies to strings -and streams. <code class="docutils literal notranslate"><span class="pre">pplib</span></code> decrypt strings when parsing document objects, so the result you get is <em>normal</em> (not ciphered). -Streams are decrypted whenever you access them. Even if you ask for a raw stream data, you’ll get a raw (compressed) stream, but decrypted. -So except the check to <code class="docutils literal notranslate"><span class="pre">ppdoc_crypt_status()</span></code>, you shouldn’t bother about encryption.</p> -<p>In encrypted documents most of streams are encrypted. To check if a given stream is encrypted:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppstream_encrypted</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">non</span><span class="o">-</span><span class="n">zero</span> <span class="k">if</span> <span class="n">encrypted</span> -</pre></div> -</div> -<p>Encryption is independent from compression, don’t confuse with <code class="docutils literal notranslate"><span class="pre">ppstream_compressed()</span></code></p> -</div> -<div class="section" id="pages"> -<h2>Pages<a class="headerlink" href="#pages" title="Permalink to this headline">¶</a></h2> -<p>Several helpers to deal with pages. To get the number of pages:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppuint</span> <span class="n">ppdoc_page_count</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p>To access the root pages tree node:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppref</span> <span class="o">*</span> <span class="n">ppdoc_pages</span><span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p>To get the page reference at a given index:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppref</span> <span class="o">*</span> <span class="n">ppdoc_page</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">,</span> <span class="n">ppuint</span> <span class="n">index</span><span class="p">);</span> -</pre></div> -</div> -<p><code class="docutils literal notranslate"><span class="pre">index</span></code> is a page number. First page has number 1. For index out of bounds <code class="docutils literal notranslate"><span class="pre">ppdoc_page()</span></code> returns NULL. -Iterating over pages using index from 1 to <code class="docutils literal notranslate"><span class="pre">ppdoc_page_count()</span></code> and calling <code class="docutils literal notranslate"><span class="pre">ppdoc_page()</span></code> on each iteration -would be suboptimal. Here is a dedicted iterator for this:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppref</span> <span class="o">*</span> <span class="n">ppdoc_first_page</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -<span class="n">ppref</span> <span class="o">*</span> <span class="n">ppdoc_next_page</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p>The iterator in use:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">;</span> -<span class="n">ppref</span> <span class="o">*</span><span class="n">ref</span><span class="p">;</span> -<span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">;</span> -<span class="nb">int</span> <span class="n">pageno</span><span class="p">;</span> - -<span class="n">pdf</span> <span class="o">=</span> <span class="n">ppdoc_load</span><span class="p">(</span><span class="s2">"file.pdf"</span><span class="p">);</span> -<span class="k">for</span> <span class="p">(</span><span class="n">ref</span> <span class="o">=</span> <span class="n">ppdoc_first_page</span><span class="p">(</span><span class="n">pdf</span><span class="p">),</span> <span class="n">pageno</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> <span class="n">ref</span> <span class="o">!=</span> <span class="n">NULL</span><span class="p">;</span> <span class="n">ref</span> <span class="o">=</span> <span class="n">ppdoc_next_page</span><span class="p">(</span><span class="n">pdf</span><span class="p">),</span> <span class="o">++</span><span class="n">pageno</span><span class="p">)</span> -<span class="p">{</span> - <span class="nb">dict</span> <span class="o">=</span> <span class="n">ppref_obj</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span><span class="o">-></span><span class="nb">dict</span><span class="p">;</span> <span class="o">//</span> <span class="n">take</span> <span class="k">for</span> <span class="n">granted</span> <span class="n">it</span> <span class="ow">is</span> <span class="n">a</span> <span class="nb">dict</span> - <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">the</span> <span class="n">page</span> <span class="nb">dict</span> -<span class="p">}</span> -</pre></div> -</div> -<p>Functions related to pages return <code class="docutils literal notranslate"><span class="pre">ppref</span> <span class="pre">*</span></code> ensured to contain dict object, so you don’t need sanity -type checks here.</p> -</div> -<div class="section" id="contents"> -<h2>Contents<a class="headerlink" href="#contents" title="Permalink to this headline">¶</a></h2> -<p>PDF page contents can be given as a stream or array of streams. Here is a convenience iterator over page -contents streams:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppstream</span> <span class="o">*</span> <span class="n">ppcontents_first</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">);</span> -<span class="n">ppstream</span> <span class="o">*</span> <span class="n">ppcontents_next</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">);</span> -</pre></div> -</div> -<p>A complete example of contents stream parser use is given below (example 2). -But before we get there, we need to introduce <code class="docutils literal notranslate"><span class="pre">ppcontext</span></code> object. Conceptually, -<code class="docutils literal notranslate"><span class="pre">ppcontext</span></code> is an owner (memory handler) of objects created on demand (beyond the <code class="docutils literal notranslate"><span class="pre">ppdoc</span></code>). -So far used only with contents stream parser, which might produce quite some data that we want -to release just after used. To create a new context:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pcontext</span> <span class="o">*</span> <span class="n">ppcontext_new</span> <span class="p">(</span><span class="n">void</span><span class="p">);</span> -</pre></div> -</div> -<p>It initializes a new context and its internal memory heap, taking about 64kB on start. After that, -the context is ready to produce objects (contents parsing functions below). Once objects produced -from a given context are no longer needed:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">ppcontext_done</span> <span class="p">(</span><span class="n">ppcontext</span> <span class="o">*</span><span class="n">context</span><span class="p">);</span> -</pre></div> -</div> -<p>It restores the context to its initial state, as after <code class="docutils literal notranslate"><span class="pre">ppcontext_new()</span></code>. It means that the context -is ready to produce another bunch of beings (in the example below, all objects from the next page contents). -Once the context is not needed anymore:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">ppcontext_free</span> <span class="p">(</span><span class="n">ppcontext</span> <span class="o">*</span><span class="n">context</span><span class="p">);</span> -</pre></div> -</div> -<p>Now, contents stream parser functions take the context as an argument. Iterator form of contents stream parser -that allows to process the contents operator by operator:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppcontents_first_op</span> <span class="p">(</span><span class="n">ppcontext</span> <span class="o">*</span><span class="n">context</span><span class="p">,</span> <span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">psize</span><span class="p">,</span> <span class="n">ppname</span> <span class="o">*</span><span class="n">pname</span><span class="p">);</span> -<span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppcontents_next_op</span> <span class="p">(</span><span class="n">ppcontext</span> <span class="o">*</span><span class="n">context</span><span class="p">,</span> <span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">psize</span><span class="p">,</span> <span class="n">ppname</span> <span class="o">*</span><span class="n">pname</span><span class="p">);</span> -</pre></div> -</div> -<p>Returned <code class="docutils literal notranslate"><span class="pre">ppobj</span> <span class="pre">*</span></code> is a pointer to operands list. <code class="docutils literal notranslate"><span class="pre">*psize</span></code> is the number of operands on stack. -The operator itself is stored as <code class="docutils literal notranslate"><span class="pre">*pname</span></code>.</p> -<p>To parse the entire contents stream at once with no stop at every operator:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppcontents_parse</span> <span class="p">(</span><span class="n">ppcontext</span> <span class="o">*</span><span class="n">context</span><span class="p">,</span> <span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">psize</span><span class="p">);</span> -</pre></div> -</div> -<p>Returns probably quite long list of all parsed objects (operands and operatos) in one piece. -The number of objects is stored to <code class="docutils literal notranslate"><span class="pre">*psize</span></code>.</p> -<p>[Contents may contain so called inline images, that breaks a simple scheme of operands / operator syntax:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">BI</span> <span class="o"><</span><span class="n">keyval</span> <span class="n">pairs</span><span class="o">></span> <span class="n">ID</span> <span class="o"><</span><span class="n">binary</span> <span class="n">image</span> <span class="n">data</span><span class="o">></span> <span class="n">EI</span> -</pre></div> -</div> -<p>Contents parser treats this genuine triplet as a single piece, producing two operands (dict and string) -followed by <code class="docutils literal notranslate"><span class="pre">EI</span></code> operator name.]</p> -</div> -<div class="section" id="boxes"> -<h2>Boxes<a class="headerlink" href="#boxes" title="Permalink to this headline">¶</a></h2> -<p>Boxes (rectangles) in PDF are roughly 4-number arrays, but with a special intent. -<code class="docutils literal notranslate"><span class="pre">pplib</span></code> provides a basic interface for these special arrays:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">typedef</span> <span class="n">struct</span> <span class="p">{</span> - <span class="n">ppnum</span> <span class="n">lx</span><span class="p">,</span> <span class="n">ly</span><span class="p">,</span> <span class="n">rx</span><span class="p">,</span> <span class="n">ry</span><span class="p">;</span> -<span class="p">}</span> <span class="n">pprect</span><span class="p">;</span> -</pre></div> -</div> -<p>This type is used only by helper functions - PDF parser is not aware of the rectangle type. -To convert <code class="docutils literal notranslate"><span class="pre">pparray</span></code> to <code class="docutils literal notranslate"><span class="pre">pprect</span></code>:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pprect</span> <span class="o">*</span> <span class="n">pparray_to_rect</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">pprect</span> <span class="o">*</span><span class="n">rect</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">rect</span> <span class="ow">or</span> <span class="n">NULL</span> -</pre></div> -</div> -<p>In example:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pprect</span> <span class="n">rect</span><span class="p">;</span> -<span class="k">if</span> <span class="p">(</span><span class="n">pparray_to_rect</span><span class="p">(</span><span class="n">array</span><span class="p">,</span> <span class="o">&</span><span class="n">rect</span><span class="p">)</span> <span class="o">!=</span> <span class="n">NULL</span><span class="p">)</span> - <span class="p">;</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">rect</span> -</pre></div> -</div> -<p>To get some image bounding box:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pprect</span> <span class="o">*</span> <span class="n">ppdict_get_rect</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">pprect</span> <span class="o">*</span><span class="n">rect</span><span class="p">);</span> -<span class="o">//</span> <span class="n">eg</span><span class="o">.</span> <span class="n">ppdict_get_rect</span><span class="p">(</span><span class="n">imagedict</span><span class="p">,</span> <span class="s2">"BBox"</span><span class="p">,</span> <span class="o">&</span><span class="n">rect</span><span class="p">)</span> -</pre></div> -</div> -<p>To get some page box:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pprect</span> <span class="o">*</span> <span class="n">ppdict_get_box</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">pprect</span> <span class="o">*</span><span class="n">rect</span><span class="p">);</span> -<span class="o">//</span> <span class="n">eg</span><span class="o">.</span> <span class="n">ppdict_get_box</span><span class="p">(</span><span class="n">pagedict</span><span class="p">,</span> <span class="s2">"MediaBox"</span><span class="p">,</span> <span class="o">&</span><span class="n">rect</span><span class="p">)</span> -</pre></div> -</div> -<p>The later not only checks the pagedict, but also goes through parent page nodes.</p> -</div> -<div class="section" id="transforms"> -<h2>Transforms<a class="headerlink" href="#transforms" title="Permalink to this headline">¶</a></h2> -<p>Transformations are given as 6-number arrays, but with a special intent. -<code class="docutils literal notranslate"><span class="pre">pplib</span></code> provides a basic interface for these special arrays:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">typedef</span> <span class="n">struct</span> <span class="p">{</span> - <span class="n">ppnum</span> <span class="n">xx</span><span class="p">,</span> <span class="n">xy</span><span class="p">,</span> <span class="n">yx</span><span class="p">,</span> <span class="n">yy</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">;</span> -<span class="p">}</span> <span class="n">ppmatrix</span><span class="p">;</span> -</pre></div> -</div> -<p>This type is used only by helper functions - PDF parser is not aware of the matrix type. -To convert <code class="docutils literal notranslate"><span class="pre">pparray</span></code> to <code class="docutils literal notranslate"><span class="pre">ppmatrix</span></code>:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppmatrix</span> <span class="o">*</span> <span class="n">pparray_to_matrix</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">ppmatrix</span> <span class="o">*</span><span class="n">matrix</span><span class="p">);</span> -</pre></div> -</div> -<p>In example:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppmatrix</span> <span class="n">matrix</span><span class="p">;</span> -<span class="k">if</span> <span class="p">(</span><span class="n">pparray_to_matrix</span><span class="p">(</span><span class="n">array</span><span class="p">,</span> <span class="o">&</span><span class="n">matrix</span><span class="p">)</span> <span class="o">!=</span> <span class="n">NULL</span><span class="p">)</span> - <span class="p">;</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">matrix</span> -</pre></div> -</div> -<p>To get the matrix from dict:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppmatrix</span> <span class="o">*</span> <span class="n">ppdict_get_matrix</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">ppmatrix</span> <span class="o">*</span><span class="n">matrix</span><span class="p">);</span> -<span class="o">//</span> <span class="n">eg</span><span class="o">.</span> <span class="n">ppdict_get_matrix</span><span class="p">(</span><span class="n">imagedict</span><span class="p">,</span> <span class="s2">"Matrix"</span><span class="p">,</span> <span class="o">&</span><span class="n">matrix</span><span class="p">)</span> -</pre></div> -</div> -</div> -<div class="section" id="errors-handling"> -<h2>Errors handling<a class="headerlink" href="#errors-handling" title="Permalink to this headline">¶</a></h2> -<p><code class="docutils literal notranslate"><span class="pre">pplib</span></code> is not verbose, but might happen that it needs to log some error message, eg. when parsing -of some PDF boject fails due to invalid offsets. By default, <code class="docutils literal notranslate"><span class="pre">pplib</span></code> prints the message to stdout, eg.:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">invalid</span> <span class="mi">123</span> <span class="mi">0</span> <span class="n">R</span> <span class="nb">object</span> <span class="n">at</span> <span class="n">offset</span> <span class="mi">123123</span> -</pre></div> -</div> -<p>To replace the default logger, you can provide your own:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">pplog_callback</span> <span class="p">(</span><span class="n">pplogger_callback</span> <span class="n">logger</span><span class="p">,</span> <span class="n">void</span> <span class="o">*</span><span class="n">alien</span><span class="p">);</span> -</pre></div> -</div> -<p><code class="docutils literal notranslate"><span class="pre">pplogger_callback</span></code> is a function:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">your_callback</span> <span class="p">(</span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">message</span><span class="p">,</span> <span class="n">void</span> <span class="o">*</span><span class="n">alien</span><span class="p">);</span> -</pre></div> -</div> -<p>In example, to redirect messages to stderr you may define a function:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">your_callback</span> <span class="p">(</span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">message</span><span class="p">,</span> <span class="n">void</span> <span class="o">*</span><span class="n">alien</span><span class="p">)</span> -<span class="p">{</span> - <span class="n">fprintf</span><span class="p">((</span><span class="n">FILE</span> <span class="o">*</span><span class="p">)</span><span class="n">alien</span><span class="p">,</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">ooops: </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="n">message</span><span class="p">);</span> -<span class="p">}</span> -</pre></div> -</div> -<p>Then set the callback somewhere before loading documents:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pplog_callback</span><span class="p">(</span><span class="n">your_callback</span><span class="p">,</span> <span class="n">stderr</span><span class="p">);</span> -</pre></div> -</div> -<p>(example 2 uses that).</p> -<p>To set the default log messages prefix, eg. <code class="docutils literal notranslate"><span class="pre">pplib:</span></code>, use:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">int</span> <span class="n">pplog_prefix</span> <span class="p">(</span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">prefix</span><span class="p">)</span> -</pre></div> -</div> -<p>Default is empty. The function succeeds if provided prefix is reasonably short (less then 32 bytes).</p> -</div> -</div> - - - </div> - </div> - </div> - <div class="clearer"></div> - </div> - <div class="related" role="navigation" aria-label="related navigation"> - <h3>Navigation</h3> - <ul> - <li class="right" style="margin-right: 10px"> - <a href="genindex.html" title="General Index" - >index</a></li> - <li class="right" > - <a href="ppcode.html" title="Examples" - >next</a> |</li> - <li class="right" > - <a href="ppapi-2.x.html" title="pplib 2.x" - >previous</a> |</li> - <li class="nav-item nav-item-0"><a href="pplib.html">pplib 0.1 documentation</a> »</li> - </ul> - </div> - <div class="footer" role="contentinfo"> - © Copyright 2019, p.jackowski@gust.org.pl. - Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5. - </div> - </body> -</html>
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/ppapi-2.x.html b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/ppapi-2.x.html deleted file mode 100644 index cac0fcec997..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/ppapi-2.x.html +++ /dev/null @@ -1,1031 +0,0 @@ - - -<!doctype html> - -<html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>pplib 2.x — pplib 0.1 documentation</title> - <link rel="stylesheet" href="_static/bizstyle.css" type="text/css" /> - <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> - - <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="_static/language_data.js"></script> - <script type="text/javascript" src="_static/bizstyle.js"></script> - <link rel="index" title="Index" href="genindex.html" /> - <link rel="search" title="Search" href="search.html" /> - <link rel="next" title="pplib 1.x" href="ppapi-1.x.html" /> - <link rel="prev" title="1.x vs 2.x" href="ppnew.html" /> - <meta name="viewport" content="width=device-width,initial-scale=1.0"> - <!--[if lt IE 9]> - <script type="text/javascript" src="_static/css3-mediaqueries.js"></script> - <![endif]--> - </head><body> - <div class="related" role="navigation" aria-label="related navigation"> - <h3>Navigation</h3> - <ul> - <li class="right" style="margin-right: 10px"> - <a href="genindex.html" title="General Index" - accesskey="I">index</a></li> - <li class="right" > - <a href="ppapi-1.x.html" title="pplib 1.x" - accesskey="N">next</a> |</li> - <li class="right" > - <a href="ppnew.html" title="1.x vs 2.x" - accesskey="P">previous</a> |</li> - <li class="nav-item nav-item-0"><a href="pplib.html">pplib 0.1 documentation</a> »</li> - </ul> - </div> - <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> - <div class="sphinxsidebarwrapper"> - <h3><a href="pplib.html">Table of Contents</a></h3> - <ul> -<li><a class="reference internal" href="#"><code class="docutils literal notranslate"><span class="pre">pplib</span></code> 2.x</a></li> -<li><a class="reference internal" href="#c-api">C-API</a><ul> -<li><a class="reference internal" href="#types">Types</a></li> -<li><a class="reference internal" href="#object">Object</a></li> -<li><a class="reference internal" href="#names">Names</a></li> -<li><a class="reference internal" href="#string">String</a></li> -<li><a class="reference internal" href="#array">Array</a></li> -<li><a class="reference internal" href="#dict">Dict</a></li> -<li><a class="reference internal" href="#stream">Stream</a></li> -<li><a class="reference internal" href="#filters">Filters</a></li> -<li><a class="reference internal" href="#ref">Ref</a></li> -<li><a class="reference internal" href="#xref">XRef</a></li> -<li><a class="reference internal" href="#pdf">PDF</a></li> -<li><a class="reference internal" href="#encryption">Encryption</a></li> -<li><a class="reference internal" href="#pages">Pages</a></li> -<li><a class="reference internal" href="#contents">Contents</a></li> -<li><a class="reference internal" href="#boxes">Boxes</a></li> -<li><a class="reference internal" href="#transforms">Transforms</a></li> -<li><a class="reference internal" href="#errors-handling">Errors handling</a></li> -</ul> -</li> -</ul> - - <h4>Previous topic</h4> - <p class="topless"><a href="ppnew.html" - title="previous chapter">1.x vs 2.x</a></p> - <h4>Next topic</h4> - <p class="topless"><a href="ppapi-1.x.html" - title="next chapter"><code class="docutils literal notranslate"><span class="pre">pplib</span></code> 1.x</a></p> - <div role="note" aria-label="source link"> - <h3>This Page</h3> - <ul class="this-page-menu"> - <li><a href="_sources/ppapi-2.x.rst.txt" - rel="nofollow">Show Source</a></li> - </ul> - </div> -<div id="searchbox" style="display: none" role="search"> - <h3>Quick search</h3> - <div class="searchformwrapper"> - <form class="search" action="search.html" method="get"> - <input type="text" name="q" /> - <input type="submit" value="Go" /> - <input type="hidden" name="check_keywords" value="yes" /> - <input type="hidden" name="area" value="default" /> - </form> - </div> -</div> -<script type="text/javascript">$('#searchbox').show(0);</script> - </div> - </div> - - <div class="document"> - <div class="documentwrapper"> - <div class="bodywrapper"> - <div class="body" role="main"> - - <div class="section" id="pplib-2-x"> -<h1><code class="docutils literal notranslate"><span class="pre">pplib</span></code> 2.x<a class="headerlink" href="#pplib-2-x" title="Permalink to this headline">¶</a></h1> -<p><code class="docutils literal notranslate"><span class="pre">pplib</span></code> is a library for raw PDF access. It parses PDF documents and provides an interface to access document structures in C.</p> -</div> -<div class="section" id="c-api"> -<h1>C-API<a class="headerlink" href="#c-api" title="Permalink to this headline">¶</a></h1> -<div class="section" id="types"> -<h2>Types<a class="headerlink" href="#types" title="Permalink to this headline">¶</a></h2> -<p><code class="docutils literal notranslate"><span class="pre">pplib</span></code> defines several C-types to represent PDF types:</p> -<ul class="simple"> -<li><code class="docutils literal notranslate"><span class="pre">ppbyte</span></code> - char</li> -<li><code class="docutils literal notranslate"><span class="pre">ppint</span></code> - signed integer (<code class="docutils literal notranslate"><span class="pre">int64_t</span></code>)</li> -<li><code class="docutils literal notranslate"><span class="pre">ppnum</span></code> - real number (double)</li> -<li><code class="docutils literal notranslate"><span class="pre">ppname</span></code> - PDF name</li> -<li><code class="docutils literal notranslate"><span class="pre">ppstring</span></code> - PDF string</li> -<li><code class="docutils literal notranslate"><span class="pre">pparray</span></code> - PDF array</li> -<li><code class="docutils literal notranslate"><span class="pre">ppdict</span></code> - PDF dict</li> -<li><code class="docutils literal notranslate"><span class="pre">ppstream</span></code> - PDF stream</li> -<li><code class="docutils literal notranslate"><span class="pre">ppref</span></code> - PDF indirect reference</li> -<li><code class="docutils literal notranslate"><span class="pre">ppobj</span></code> - a container of all above</li> -</ul> -<p>Among <code class="docutils literal notranslate"><span class="pre">ppint</span></code> and <code class="docutils literal notranslate"><span class="pre">ppnum</span></code>, we also use <code class="docutils literal notranslate"><span class="pre">ppuint</span></code> - unsigned integer (machine word, alias to <code class="docutils literal notranslate"><span class="pre">size_t</span></code>).</p> -<p>Other API types:</p> -<ul class="simple"> -<li><code class="docutils literal notranslate"><span class="pre">ppdoc</span></code> - PDF document</li> -<li><code class="docutils literal notranslate"><span class="pre">ppxref</span></code> - cross-references table</li> -<li><code class="docutils literal notranslate"><span class="pre">ppcontext</span></code> - … later</li> -<li><code class="docutils literal notranslate"><span class="pre">pprect</span></code> - rectangle</li> -<li><code class="docutils literal notranslate"><span class="pre">ppmatrix</span></code> - matrix</li> -</ul> -<p>Integer and number are as simple types. Names and strings used to be aliases to <code class="docutils literal notranslate"><span class="pre">char</span> <span class="pre">*</span></code> -in <code class="docutils literal notranslate"><span class="pre">pplib</span> <span class="pre">1.x</span></code>, now they are structures; all related API functions operate on pointers. -Other types (array, dict, stream, reference, object container, xref, doc) are C-structures, -and you operate it their pointers. So when you declare a simple type variable you say:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppuint</span> <span class="n">u</span><span class="p">;</span> -<span class="n">ppnum</span> <span class="n">n</span><span class="p">;</span> -<span class="o">...</span> -</pre></div> -</div> -<p>And when you declare a compound type you operate on pointers:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppobj</span> <span class="o">*</span><span class="n">obj</span><span class="p">;</span> -<span class="n">ppname</span> <span class="o">*</span><span class="n">name</span><span class="p">;</span> -<span class="n">ppstring</span> <span class="o">*</span><span class="n">string</span><span class="p">;</span> -<span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">;</span> -<span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">;</span> -<span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">;</span> -<span class="n">ppref</span> <span class="o">*</span><span class="n">ref</span><span class="p">;</span> -<span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">;</span> -</pre></div> -</div> -<p>Most of those C-types are defined in library header <code class="docutils literal notranslate"><span class="pre">ppapi.h</span></code> (complete types). Some others are incomplete -(eg. you can’t say <code class="docutils literal notranslate"><span class="pre">sizeof(ppdoc)</span></code> or <code class="docutils literal notranslate"><span class="pre">sizeof(ppxref)</span></code>). This is to avoid unnecesary dependencies in -the header. The library itself uses <code class="docutils literal notranslate"><span class="pre">pplib.h</span></code> header but for auxilary applications including a standalone -<code class="docutils literal notranslate"><span class="pre">ppapi.h</span></code> header should be enough.</p> -<p><code class="docutils literal notranslate"><span class="pre">pplib</span></code> was designed having <strong>read-only</strong> PDF access in mind. Even if some structure is completelly exposed, -so that you can directly access its members, you should treat them as read-only. I don’t make them <code class="docutils literal notranslate"><span class="pre">const</span></code> because -then all variable declarations would need to be <code class="docutils literal notranslate"><span class="pre">const</span></code>, which is annoying, and I’d need some trickery in the library -internals to unconst. Besides, nothing is really const for C type casts.</p> -</div> -<div class="section" id="object"> -<h2>Object<a class="headerlink" href="#object" title="Permalink to this headline">¶</a></h2> -<p>A common container for all elementary PDF object types is <code class="docutils literal notranslate"><span class="pre">ppobj</span></code> structure. <code class="docutils literal notranslate"><span class="pre">ppobj</span></code> has a type identifier -(integer) and union of values:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">struct</span> <span class="n">ppobj</span> <span class="p">{</span> - <span class="n">ppobjtp</span> <span class="nb">type</span><span class="p">;</span> - <span class="n">union</span> <span class="p">{</span> - <span class="n">ppint</span> <span class="n">integer</span><span class="p">;</span> - <span class="n">ppnum</span> <span class="n">number</span><span class="p">;</span> - <span class="n">ppname</span> <span class="o">*</span><span class="n">name</span><span class="p">;</span> - <span class="n">ppstring</span> <span class="o">*</span><span class="n">string</span><span class="p">;</span> - <span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">;</span> - <span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">;</span> - <span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">;</span> - <span class="n">ppref</span> <span class="o">*</span><span class="n">ref</span><span class="p">;</span> - <span class="n">void</span> <span class="o">*</span><span class="nb">any</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> -</pre></div> -</div> -<p>Object type is one of constants (enum):</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">PPNONE</span> -<span class="n">PPNULL</span> -<span class="n">PPBOOL</span> -<span class="n">PPINT</span> -<span class="n">PPNUM</span> -<span class="n">PPNAME</span> -<span class="n">PPSTRING</span> -<span class="n">PPARRAY</span> -<span class="n">PPDICT</span> -<span class="n">PPSTREAM</span> -<span class="n">PPREF</span> -</pre></div> -</div> -<p>The type determines the structure member you’re allowed to access:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppobj</span> <span class="o">*</span><span class="n">obj</span><span class="p">;</span> -<span class="o">...</span> -<span class="n">switch</span> <span class="p">(</span><span class="n">obj</span><span class="o">-></span><span class="nb">type</span><span class="p">)</span> -<span class="p">{</span> - <span class="n">case</span> <span class="n">PPNONE</span><span class="p">:</span> <span class="o">//</span> <span class="n">shouldn</span><span class="s1">'t actually happen, indicates some failure</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPNULL</span><span class="p">:</span> <span class="o">//</span> <span class="n">valid</span> <span class="n">PDF</span> <span class="n">null</span> <span class="nb">object</span><span class="p">,</span> <span class="n">no</span> <span class="n">value</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPBOOL</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="n">integer</span> <span class="p">(</span><span class="n">ppint</span><span class="p">),</span> <span class="n">value</span> <span class="mi">0</span> <span class="ow">or</span> <span class="mi">1</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPINT</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="n">integer</span> <span class="p">(</span><span class="n">ppint</span><span class="p">)</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPNUM</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="n">number</span> <span class="p">(</span><span class="n">ppnum</span><span class="p">)</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPNAME</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="n">name</span> <span class="p">(</span><span class="n">ppname</span> <span class="o">*</span><span class="p">)</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPSTRING</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="n">string</span> <span class="p">(</span><span class="n">ppstring</span> <span class="o">*</span><span class="p">)</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPARRAY</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="n">array</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="p">)</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPDICT</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="nb">dict</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="p">)</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPSTREAM</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="n">stream</span> <span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="p">)</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPREF</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="n">ref</span> <span class="p">(</span><span class="n">ppref</span> <span class="o">*</span><span class="p">)</span> - <span class="k">break</span><span class="p">;</span> -<span class="p">}</span> -</pre></div> -</div> -<p>More often then not you know exactly what type of object value is expected, in which case -you may use one of the following macros:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">//</span> <span class="n">returns</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPNULL</span> -<span class="nb">int</span> <span class="n">ppobj_get_null</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> \ - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPBOOL</span><span class="p">,</span> <span class="n">sets</span> <span class="nb">int</span> <span class="n">v</span> <span class="n">to</span> <span class="mi">0</span> <span class="ow">or</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">returns</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span> <span class="n">otherwise</span> -<span class="nb">int</span> <span class="n">ppobj_get_bool</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPINT</span><span class="p">,</span> <span class="n">sets</span> <span class="n">ppint</span> <span class="n">v</span> <span class="ow">and</span> <span class="n">returns</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span> <span class="n">otherwise</span> -<span class="nb">int</span> <span class="n">ppobj_get_int</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPINT</span> <span class="ow">and</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">sets</span> <span class="n">ppuint</span> <span class="n">v</span> <span class="ow">and</span> <span class="n">returns</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span> <span class="n">otherwise</span> -<span class="nb">int</span> <span class="n">ppobj_get_uint</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPNUM</span> <span class="ow">or</span> <span class="n">PPINT</span><span class="p">,</span> <span class="n">sets</span> <span class="n">ppnum</span> <span class="n">v</span> <span class="ow">and</span> <span class="n">returns</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span> <span class="n">otherwise</span> -<span class="nb">int</span> <span class="n">ppobj_get_num</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPNAME</span> <span class="n">returns</span> <span class="n">the</span> <span class="n">name</span><span class="p">,</span> <span class="n">NULL</span> <span class="n">otherwise</span> -<span class="n">ppname</span> <span class="o">*</span> <span class="n">ppobj_get_name</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPSTRING</span> <span class="n">returns</span> <span class="n">the</span> <span class="n">string</span><span class="p">,</span> <span class="n">NULL</span> <span class="n">otherwise</span> -<span class="n">ppstring</span> <span class="o">*</span> <span class="n">ppobj_get_string</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPARRAY</span> <span class="n">returns</span> <span class="n">the</span> <span class="n">array</span><span class="p">,</span> <span class="n">NULL</span> <span class="n">otherwise</span> -<span class="n">pparray</span> <span class="o">*</span> <span class="n">ppobj_get_array</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPDICT</span> <span class="n">returns</span> <span class="n">the</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">NULL</span> <span class="n">otherwise</span> -<span class="n">ppdict</span> <span class="o">*</span> <span class="n">ppobj_get_dict</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPSTREAM</span> <span class="n">returns</span> <span class="n">the</span> <span class="n">stream</span><span class="p">,</span> <span class="n">NULL</span> <span class="n">otherwise</span> -<span class="n">ppstream</span> <span class="o">*</span> <span class="n">ppobj_get_stream</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPREF</span> <span class="n">returns</span> <span class="n">the</span> <span class="n">reference</span><span class="p">,</span> <span class="n">NULL</span> <span class="n">otherwise</span> -<span class="n">ppref</span> <span class="o">*</span> <span class="n">ppobj_get_ref</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> -</pre></div> -</div> -<p>Note the coercion from integer to real number, but not reverse. In practise, whenever you expect a real number, -you should also handle integer (eg. ‘1’ used instead of ‘1.0’ is pretty common in PDF).</p> -<p>It is a common case that the object is given as an indirect reference, but what you actually -want is not the reference, but the object referred by it. Here is a helper for it:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPREF</span><span class="p">,</span> <span class="n">returns</span> <span class="n">what</span> <span class="n">the</span> <span class="n">reference</span> <span class="n">points</span><span class="p">,</span> <span class="n">otherwise</span> <span class="n">returns</span> <span class="n">o</span> -<span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppobj_rget_obj</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> -</pre></div> -</div> -<p>Also every <code class="docutils literal notranslate"><span class="pre">ppobj_get_*</span></code> macro has <code class="docutils literal notranslate"><span class="pre">ppobj_rget_*</span></code> counterpart that makes a check -for the expected type, but if the object is PPREF, it jumps to the target object. -So for example <code class="docutils literal notranslate"><span class="pre">ppobj_rget_dict(obj)</span></code> will return dict if <code class="docutils literal notranslate"><span class="pre">obj</span></code> is of type PPDICT -or if it is of type PPREF and <code class="docutils literal notranslate"><span class="pre">obj->ref</span></code> hosts an object of type PPDICT.</p> -</div> -<div class="section" id="names"> -<h2>Names<a class="headerlink" href="#names" title="Permalink to this headline">¶</a></h2> -<p>PDF names are represented as <code class="docutils literal notranslate"><span class="pre">ppname</span></code> pointer (<code class="docutils literal notranslate"><span class="pre">ppname</span></code> used to be an alias to <code class="docutils literal notranslate"><span class="pre">char</span> <span class="pre">*</span></code>, now it is a structure). -To access the name data:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppbyte</span> <span class="o">*</span> <span class="n">ppname_data</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="o">//</span> <span class="n">name</span><span class="o">-></span><span class="n">data</span><span class="p">,</span> <span class="nb">bytes</span> <span class="n">array</span> -</pre></div> -</div> -<p>For convenient use in C, names are <code class="docutils literal notranslate"><span class="pre">'\0'</span></code> terminated. But to get the length of name better always use -<code class="docutils literal notranslate"><span class="pre">ppname_size()</span></code> macro. <code class="docutils literal notranslate"><span class="pre">ppname</span></code> object knows its size, don’t use <code class="docutils literal notranslate"><span class="pre">strlen()</span></code>:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">size_t</span> <span class="n">ppname_size</span><span class="p">(</span><span class="n">ppname</span> <span class="n">name</span><span class="p">);</span> <span class="o">//</span> <span class="n">name</span><span class="o">-></span><span class="n">size</span><span class="p">,</span> <span class="n">the</span> <span class="n">length</span> <span class="n">of</span> <span class="n">name</span> <span class="ow">in</span> <span class="nb">bytes</span> -</pre></div> -</div> -<p>In current implementation names are not hashed anyhow, so name-to-name comparison is not smarter than <code class="docutils literal notranslate"><span class="pre">memcmp()</span></code>. -Use macros:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">int</span> <span class="n">ppname_is</span><span class="p">(</span><span class="n">ppname</span> <span class="n">name</span><span class="p">,</span> <span class="s2">"literal"</span><span class="p">);</span> <span class="o">//</span> <span class="n">to</span> <span class="n">compare</span> <span class="n">ppname</span> <span class="k">with</span> <span class="n">C</span><span class="o">-</span><span class="n">literal</span> <span class="n">string</span> -<span class="nb">int</span> <span class="n">ppname_eq</span><span class="p">(</span><span class="n">ppname</span> <span class="n">name</span><span class="p">,</span> <span class="n">ppname</span> <span class="n">other</span><span class="p">);</span> <span class="o">//</span> <span class="n">to</span> <span class="n">compare</span> <span class="n">ppname</span> <span class="k">with</span> <span class="n">a</span> <span class="n">different</span> <span class="n">name</span> -</pre></div> -</div> -<p>If you use <code class="docutils literal notranslate"><span class="pre">pplib</span></code> to parse contents streams, you may need to distinguish names from operators -(more precisely executable names). Names in PDF are preceeded by ‘/’, executable names aren’t. In both -cases PDF parser will produce <code class="docutils literal notranslate"><span class="pre">ppname</span></code> but the result can be distingushed with:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">int</span> <span class="n">ppname_exec</span><span class="p">(</span><span class="n">ppname</span> <span class="n">name</span><span class="p">);</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">non</span><span class="o">-</span><span class="n">zero</span> <span class="k">if</span> <span class="n">the</span> <span class="n">name</span> <span class="ow">is</span> <span class="n">executable</span> -</pre></div> -</div> -<p>Names are kept in their raw form, with possible PDF specific escapes (in text below we call it <strong>encoded</strong> form). -Leading ‘/’ is omitted. One may need a decoded name, with no PDF escapes. -A pair of functions provides a simple interface to switch between those two forms:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">//</span> <span class="n">these</span> <span class="n">helpers</span> <span class="n">rely</span> <span class="n">on</span> <span class="n">name</span><span class="o">-></span><span class="n">alterego</span> <span class="n">member</span> -<span class="n">ppname</span> <span class="o">*</span> <span class="n">ppname_decoded</span> <span class="p">(</span><span class="n">ppname</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">decoded</span> <span class="p">(</span><span class="n">unescaped</span><span class="p">)</span> <span class="n">form</span> <span class="n">of</span> <span class="n">the</span> <span class="n">name</span> -<span class="n">ppname</span> <span class="o">*</span> <span class="n">ppname_encoded</span> <span class="p">(</span><span class="n">ppname</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">encoded</span> <span class="p">(</span><span class="n">escaped</span><span class="p">)</span> <span class="n">form</span> <span class="n">of</span> <span class="n">the</span> <span class="n">name</span> -<span class="n">ppbyte</span> <span class="o">*</span> <span class="n">ppname_decoded_data</span> <span class="p">(</span><span class="n">ppname</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">ppbyte</span> <span class="o">*</span> <span class="n">ppname_encoded_data</span> <span class="p">(</span><span class="n">ppname</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -</pre></div> -</div> -<p>In pretty most cases a PDF name contains only letters (no special characters, no escapes), so decoded and encoded forms are identical. -In that case both functions simply return the argument. It is ok to call <code class="docutils literal notranslate"><span class="pre">ppname_decoded()</span></code> on already decoded form -and <code class="docutils literal notranslate"><span class="pre">ppname_encoded()</span></code> on already encoded form. Both forms are produced by PDF objects parser, so accessing <code class="docutils literal notranslate"><span class="pre">ppname</span></code> alter ego -in whatever direction needs no extra decoding or allocation costs (the cost is paid by parser).</p> -</div> -<div class="section" id="string"> -<h2>String<a class="headerlink" href="#string" title="Permalink to this headline">¶</a></h2> -<p>PDF strings have the same internal construction as names, so most of names description above applies to strings as well. -<code class="docutils literal notranslate"><span class="pre">ppstring</span></code> is a structure (used to be an alias to <code class="docutils literal notranslate"><span class="pre">char</span> <span class="pre">*</span></code>). <code class="docutils literal notranslate"><span class="pre">string->data</span></code> is <code class="docutils literal notranslate"><span class="pre">\0</span></code>-terminated c-array of <code class="docutils literal notranslate"><span class="pre">ppbytes</span></code>. -To get the data:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppbyte</span> <span class="o">*</span> <span class="n">ppstring_data</span><span class="p">(</span><span class="n">ppstring</span> <span class="o">*</span><span class="n">string</span><span class="p">);</span> <span class="o">//</span> <span class="n">string</span><span class="o">-></span><span class="n">data</span><span class="p">,</span> <span class="n">macro</span> -</pre></div> -</div> -<p>To get the size of the string:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">size_t</span> <span class="n">ppstring_size</span><span class="p">(</span><span class="n">ppstring</span> <span class="o">*</span><span class="n">string</span><span class="p">);</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">the</span> <span class="n">length</span> <span class="n">of</span> <span class="n">the</span> <span class="n">string</span> <span class="ow">in</span> <span class="nb">bytes</span> -</pre></div> -</div> -<p>Strings are provided in their raw form, preserving PDF specific escapes, but with no -<code class="docutils literal notranslate"><span class="pre">()</span></code> or <code class="docutils literal notranslate"><span class="pre"><></span></code> delims. To distinguish plain strings from hex strings:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">int</span> <span class="n">ppstring_hex</span><span class="p">(</span><span class="n">ppstring</span> <span class="n">string</span><span class="p">);</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">non</span> <span class="n">zero</span> <span class="k">if</span> <span class="nb">hex</span> <span class="n">string</span> -</pre></div> -</div> -<p>Or if you prefer:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>switch (ppstring_type(string)) -{ - case PPSTRING_PLAIN: // literal string, surrounded by ``(`` and ``)`` in PDF - break; - case PPSTRING_BASE16: // hex string, surrounded by ``<`` and ``>`` in PDF - break; - case PPSTRING_BASE85: // base85 string surrounded by ``<~`` and ``~>`` in PDF - break; -} -</pre></div> -</div> -<p>The last is actually Postscript specific, not used in PDF, but I think it might appear in contents streams… -No matter how the string is given in PDF (plain or hex), here are two functions to -switch between encoded and decoded strings forms:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppstring</span> <span class="o">*</span> <span class="n">ppstring_decoded</span> <span class="p">(</span><span class="n">ppstring</span> <span class="o">*</span><span class="n">string</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">decoded</span> <span class="n">string</span> <span class="n">possibly</span> <span class="k">with</span> <span class="n">PDF</span> <span class="n">escapes</span> -<span class="n">ppstring</span> <span class="o">*</span> <span class="n">ppstring_encoded</span> <span class="p">(</span><span class="n">ppstring</span> <span class="o">*</span><span class="n">string</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">encoded</span> <span class="n">string</span> <span class="k">with</span> <span class="n">no</span> <span class="n">PDF</span> <span class="n">escapes</span> -<span class="n">ppbyte</span> <span class="o">*</span> <span class="n">ppstring_decoded_data</span> <span class="p">(</span><span class="n">ppstring</span> <span class="o">*</span><span class="n">string</span><span class="p">);</span> -<span class="n">ppbyte</span> <span class="o">*</span> <span class="n">ppstring_encoded_data</span> <span class="p">(</span><span class="n">ppstring</span> <span class="o">*</span><span class="n">string</span><span class="p">);</span> -</pre></div> -</div> -<p>For hex strings, encoded form contains hex digits, while decoded form contains arbitrary bytes (the result of hex decoding). -Plain strings usually contains printable ASCII characters, but they might contain any binary data. -As with names, objects parser produces both forms. The raw form with PDF escapes (or raw hex form) the main one. -Eg. when you access <code class="docutils literal notranslate"><span class="pre">obj->string</span></code> you always get the encoded form. At any moment you can switch to its alter ego.</p> -<p>No matter if the string is plain or hex, if its first two bytes (decoded) are UTF16 BOM, the string is unicode. -<code class="docutils literal notranslate"><span class="pre">ppstring</span></code> object <em>knows</em> it is unicode or not:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">switch</span> <span class="p">(</span><span class="n">ppstring_utf</span><span class="p">(</span><span class="n">string</span><span class="p">))</span> -<span class="p">{</span> - <span class="n">case</span> <span class="n">PPSTRING_UTF16LE</span><span class="p">:</span> <span class="o">//</span> <span class="n">unicode</span> <span class="n">string</span><span class="p">,</span> <span class="n">utf16le</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPSTRING_UTF16BE</span><span class="p">:</span> <span class="o">//</span> <span class="n">unicode</span> <span class="n">string</span><span class="p">,</span> <span class="n">utf16be</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">default</span><span class="p">:</span> <span class="o">//</span> <span class="n">no</span> <span class="n">unicode</span> -<span class="p">}</span> -</pre></div> -</div> -<p>Or simply:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">if</span> <span class="p">(</span><span class="n">ppstring_utf</span><span class="p">(</span><span class="n">string</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> - <span class="o">//</span> <span class="n">handle</span> <span class="n">unicode</span> <span class="n">string</span> -<span class="p">}</span> -</pre></div> -</div> -<p>If the string is unicode, BOM remains the part of the string – <code class="docutils literal notranslate"><span class="pre">pplib</span></code> parser does not strip it. -Unicode or not, encoded or decoded, strings are always C-arrays of bytes and <code class="docutils literal notranslate"><span class="pre">ppstring_size()</span></code> -always returns the size in bytes.</p> -</div> -<div class="section" id="array"> -<h2>Array<a class="headerlink" href="#array" title="Permalink to this headline">¶</a></h2> -<p>PDF arrays are represented as <code class="docutils literal notranslate"><span class="pre">pparray</span></code> type, which is C-array of <code class="docutils literal notranslate"><span class="pre">ppobj</span></code> structures. -To get the size:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">size_t</span> <span class="n">pparray_size</span><span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">the</span> <span class="n">number</span> <span class="n">of</span> <span class="n">array</span> <span class="n">items</span> -</pre></div> -</div> -<p>To get <code class="docutils literal notranslate"><span class="pre">ppobj</span> <span class="pre">*</span></code> at a given index:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppobj</span> <span class="o">*</span> <span class="n">pparray_at</span><span class="p">(</span><span class="n">array</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">ppobj</span> <span class="o">*</span> <span class="p">(</span><span class="n">no</span> <span class="n">index</span> <span class="n">check</span><span class="p">)</span> -<span class="n">ppobj</span> <span class="o">*</span> <span class="n">pparray_get</span><span class="p">(</span><span class="n">array</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">ppobj</span> <span class="o">*</span> <span class="ow">or</span> <span class="n">NULL</span> <span class="p">(</span><span class="k">with</span> <span class="n">index</span> <span class="n">check</span><span class="p">)</span> -<span class="n">ppobj</span> <span class="o">*</span> <span class="n">pparray_get_obj</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> <span class="o">//</span> <span class="n">function</span> <span class="n">equiv</span> <span class="n">to</span> <span class="n">pparray_get</span><span class="p">()</span> -</pre></div> -</div> -<p>Iterating over array elements:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">;</span> -<span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="n">size</span><span class="p">;</span> -<span class="n">ppobj</span> <span class="o">*</span><span class="n">obj</span><span class="p">;</span> -<span class="k">for</span> <span class="p">(</span><span class="n">size</span> <span class="o">=</span> <span class="n">pparray_size</span><span class="p">(</span><span class="n">array</span><span class="p">),</span> <span class="n">pparray_first</span><span class="p">(</span><span class="n">array</span><span class="p">,</span> <span class="n">index</span><span class="p">,</span> <span class="n">obj</span><span class="p">);</span> <span class="n">index</span> <span class="o"><</span> <span class="n">size</span><span class="p">;</span> <span class="n">pparray_next</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="n">obj</span><span class="p">))</span> -<span class="p">{</span> - <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">index</span> <span class="ow">and</span> <span class="n">obj</span> -<span class="p">}</span> -</pre></div> -</div> -<p>There is no magic first/next macros, just iteration over pointers. One could also use something like:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">for</span> <span class="p">(</span><span class="n">index</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">size</span> <span class="o">=</span> <span class="n">array</span><span class="o">-></span><span class="n">size</span><span class="p">;</span> <span class="n">index</span> <span class="o"><</span> <span class="n">size</span><span class="p">;</span> <span class="o">++</span><span class="n">index</span><span class="p">)</span> -<span class="p">{</span> - <span class="n">obj</span> <span class="o">=</span> <span class="n">pparray_at</span><span class="p">(</span><span class="n">array</span><span class="p">,</span> <span class="n">index</span><span class="p">);</span> - <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">index</span> <span class="ow">and</span> <span class="n">obj</span> -<span class="p">}</span> -</pre></div> -</div> -<p>When getting values from array and expecting a result of known type, use one of the following:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">int</span> <span class="n">pparray_get_bool</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="nb">int</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">boolean</span> <span class="n">value</span> -<span class="nb">int</span> <span class="n">pparray_get_int</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="n">ppint</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">ppint</span> <span class="n">value</span> -<span class="nb">int</span> <span class="n">pparray_get_uint</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="n">ppuint</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">ppuint</span> <span class="n">value</span> -<span class="nb">int</span> <span class="n">pparray_get_num</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="n">ppnum</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">ppnum</span> <span class="n">value</span> -<span class="n">ppname</span> <span class="o">*</span> <span class="n">pparray_get_name</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">ppname</span> <span class="o">*</span> <span class="n">value</span> -<span class="n">ppstring</span> <span class="o">*</span> <span class="n">pparray_get_string</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">ppstring</span> <span class="o">*</span> <span class="n">value</span> -<span class="n">pparray</span> <span class="o">*</span> <span class="n">pparray_get_array</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">pparray</span> <span class="o">*</span> <span class="n">value</span> -<span class="n">ppdict</span> <span class="o">*</span> <span class="n">pparray_get_dict</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">ppdict</span> <span class="o">*</span> <span class="n">value</span> -<span class="n">ppref</span> <span class="o">*</span> <span class="n">pparray_get_ref</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">ppref</span> <span class="o">*</span> <span class="n">value</span> -</pre></div> -</div> -<p>As with <code class="docutils literal notranslate"><span class="pre">ppobj_get_*</span></code> suite, numeric types getters set the value of a given type and returns 1, if the type matches. -Otherwise sets nothing and returns 0. Other getters return the value if the type matches, or NULL.</p> -<p>Every function from <code class="docutils literal notranslate"><span class="pre">pparray_get_*</span></code> suite have its <code class="docutils literal notranslate"><span class="pre">pparray_rget_*</span></code> counterpart -that dereferences indirect objects (as explained for <code class="docutils literal notranslate"><span class="pre">ppobj_rget_*</span></code> getters). Note that -there is no <code class="docutils literal notranslate"><span class="pre">pparray_get_stream()</span></code> function, as streams in PDF are always indirect -(may only reside in <code class="docutils literal notranslate"><span class="pre">ref->object.stream</span></code>). To get the stream from array use:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppstream</span> <span class="o">*</span> <span class="n">pparray_rget_stream</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> -</pre></div> -</div> -</div> -<div class="section" id="dict"> -<h2>Dict<a class="headerlink" href="#dict" title="Permalink to this headline">¶</a></h2> -<p>PDF dicts are represented as <code class="docutils literal notranslate"><span class="pre">ppdict</span></code> structure, which is C-array of <code class="docutils literal notranslate"><span class="pre">ppobj</span></code> with parallel -C-array of <code class="docutils literal notranslate"><span class="pre">ppname</span></code> pointers. To get the size of a dict:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">size_t</span> <span class="n">ppdict_size</span><span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">the</span> <span class="n">number</span> <span class="n">of</span> <span class="n">key</span><span class="o">-</span><span class="n">val</span> <span class="n">pairs</span> -</pre></div> -</div> -<p>To get the value at a given index (integer):</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppdict_at</span><span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">no</span> <span class="n">index</span> <span class="n">bounds</span> <span class="n">check</span> -</pre></div> -</div> -<p>To get the name (key) at a given index:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppname</span> <span class="o">*</span> <span class="n">ppdict_key</span><span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">no</span> <span class="n">index</span> <span class="n">bounds</span> <span class="n">check</span> -</pre></div> -</div> -<p>To iterate over dict key-val pairs:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">;</span> -<span class="n">ppname</span> <span class="o">**</span><span class="n">pkey</span><span class="p">;</span> -<span class="n">ppobj</span> <span class="o">*</span><span class="n">obj</span><span class="p">;</span> - -<span class="k">for</span> <span class="p">(</span><span class="n">ppdict_first</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">pkey</span><span class="p">,</span> <span class="n">obj</span><span class="p">);</span> <span class="o">*</span><span class="n">pkey</span> <span class="o">!=</span> <span class="n">NULL</span><span class="p">;</span> <span class="n">ppdict_next</span><span class="p">(</span><span class="n">pkey</span><span class="p">,</span> <span class="n">obj</span><span class="p">))</span> -<span class="p">{</span> - <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="o">*</span><span class="n">pkey</span> <span class="ow">and</span> <span class="n">obj</span> -<span class="p">}</span> -</pre></div> -</div> -<p>There is no magic in first/next macros, just iteration through keys and values lists pointers. -For convenient iteration, a list of keys is terminated with NULL, so in the code above <code class="docutils literal notranslate"><span class="pre">*pkey</span> <span class="pre">!=</span> <span class="pre">NULL</span></code> -is used as the loop condition. One may also iterate via indices:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">;</span> -<span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="n">size</span><span class="p">;</span> -<span class="n">ppname</span> <span class="o">*</span><span class="n">key</span><span class="p">;</span> -<span class="n">ppobj</span> <span class="o">*</span><span class="n">obj</span><span class="p">;</span> -<span class="k">for</span> <span class="p">(</span><span class="n">index</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">size</span> <span class="o">=</span> <span class="n">ppdict_size</span><span class="p">(</span><span class="nb">dict</span><span class="p">);</span> <span class="n">index</span> <span class="o"><</span> <span class="n">size</span><span class="p">;</span> <span class="o">++</span><span class="n">index</span><span class="p">)</span> -<span class="p">{</span> - <span class="n">key</span> <span class="o">=</span> <span class="n">ppdict_key</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">index</span><span class="p">);</span> - <span class="n">obj</span> <span class="o">=</span> <span class="n">ppdict_at</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">index</span><span class="p">);</span> - <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">key</span> <span class="ow">and</span> <span class="n">obj</span> -<span class="p">}</span> -</pre></div> -</div> -<p>To get the object associated with a given name, use one of the following:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppdict_get_obj</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="nb">int</span> <span class="n">ppdict_get_bool</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="nb">int</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="nb">int</span> <span class="n">ppdict_get_int</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">ppint</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="nb">int</span> <span class="n">ppdict_get_uint</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">ppuint</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="nb">int</span> <span class="n">ppdict_get_num</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">ppnum</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="n">ppname</span> <span class="n">ppdict_get_name</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">ppstring</span> <span class="n">ppdict_get_string</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">pparray</span> <span class="o">*</span> <span class="n">ppdict_get_array</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">ppdict</span> <span class="o">*</span> <span class="n">ppdict_get_dict</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">ppref</span> <span class="o">*</span> <span class="n">ppdict_get_ref</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -</pre></div> -</div> -<p>Note that all getters accepts <code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">char</span> <span class="pre">*</span></code> as key, so it is ok to say:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdict_rget_dict</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="s2">"Resources"</span><span class="p">);</span> -</pre></div> -</div> -<p>(the most common use I guess). But to use <code class="docutils literal notranslate"><span class="pre">ppname</span></code> object as a key, one have to -use data member:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdic_rget_dict</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">name</span><span class="o">-></span><span class="n">data</span><span class="p">);</span> <span class="o">//</span> <span class="n">ppname</span> <span class="o">*</span><span class="n">name</span> -</pre></div> -</div> -<p>Every <code class="docutils literal notranslate"><span class="pre">ppdict_get_*</span></code> getter has <code class="docutils literal notranslate"><span class="pre">ppdict_rget_*</span></code> counterpart that dereferences -indirect objects if necessary. Note that there is no <code class="docutils literal notranslate"><span class="pre">ppdict_get_stream()</span></code> function, -but there is:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppstream</span> <span class="o">*</span> <span class="n">ppdict_rget_stream</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -</pre></div> -</div> -<p>So far dicts comes with no names mapping, so by-name dict accessors perform a linear search -through the keys list. PDF dicts are usually small.</p> -</div> -<div class="section" id="stream"> -<h2>Stream<a class="headerlink" href="#stream" title="Permalink to this headline">¶</a></h2> -<p>PDF streams are represented as <code class="docutils literal notranslate"><span class="pre">ppstream</span></code> objects. To get the stream dict:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdict</span> <span class="o">*</span> <span class="n">ppstream_dict</span><span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span> -</pre></div> -</div> -<p>To read the stream data:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">uint8_t</span> <span class="o">*</span> <span class="n">ppstream_first</span> <span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">size</span><span class="p">,</span> <span class="nb">int</span> <span class="n">decode</span><span class="p">);</span> -<span class="n">uint8_t</span> <span class="o">*</span> <span class="n">ppstream_next</span> <span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">size</span><span class="p">);</span> -<span class="n">void</span> <span class="n">ppstream_done</span> <span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">);</span> -</pre></div> -</div> -<p>Both <code class="docutils literal notranslate"><span class="pre">first`</span> <span class="pre">and</span> <span class="pre">``next</span></code> functions return a chunk of stream data and sets the <code class="docutils literal notranslate"><span class="pre">size</span></code> of the chunk. -<code class="docutils literal notranslate"><span class="pre">decode</span></code> parameter tell the reader to decompress the stream (1) or return raw (0). A call to <code class="docutils literal notranslate"><span class="pre">ppstream_next()</span></code> -must be preceeded by <code class="docutils literal notranslate"><span class="pre">ppstream_first()</span></code>. Once you’re done with the stream, you have to call <code class="docutils literal notranslate"><span class="pre">ppstream_done()</span></code>, -no matter if the stream has been read to the end or not. The stream data iterator in use:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">uint8_t</span> <span class="o">*</span><span class="n">data</span><span class="p">;</span> -<span class="n">size_t</span> <span class="n">size</span><span class="p">;</span> -<span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">;</span> -<span class="nb">int</span> <span class="n">decode</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> <span class="o">//</span> <span class="mi">1</span> <span class="o">-</span> <span class="n">get</span> <span class="n">decompressed</span><span class="p">,</span> <span class="mi">0</span> <span class="o">-</span> <span class="n">get</span> <span class="n">raw</span> - -<span class="k">for</span> <span class="p">(</span><span class="n">data</span> <span class="o">=</span> <span class="n">ppstream_first</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="n">decode</span><span class="p">);</span> <span class="n">data</span> <span class="o">!=</span> <span class="n">NULL</span><span class="p">;</span> <span class="n">data</span> <span class="o">=</span> <span class="n">ppstream_next</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">))</span> -<span class="p">{</span> - <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">data</span> <span class="ow">and</span> <span class="n">its</span> <span class="n">size</span> -<span class="p">}</span> -<span class="n">ppstream_done</span><span class="p">(</span><span class="n">stream</span><span class="p">);</span> -</pre></div> -</div> -<p>Every subsequent iterator call invalidates the previous reader output, so you have to utilize the returned chunk -of data just after you ot that. So the following is wrong:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">data1</span> <span class="o">=</span> <span class="n">ppstream_first</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> -<span class="n">data2</span> <span class="o">=</span> <span class="n">ppstream_next</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">);</span> -<span class="n">data3</span> <span class="o">=</span> <span class="n">ppstream_next</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">);</span> -<span class="n">some_output</span><span class="p">(</span><span class="n">data1</span><span class="p">,</span> <span class="n">size</span><span class="p">);</span> -<span class="n">some_output</span><span class="p">(</span><span class="n">data2</span><span class="p">,</span> <span class="n">size</span><span class="p">);</span> -</pre></div> -</div> -<p>The reader calls usually return the same pointer to internal buffer, just filled with a different data. -<code class="docutils literal notranslate"><span class="pre">pplib</span></code> allocates reasonably large buffer and fills that buffer on subsequent calls to the reader.</p> -<p>If the source stream has no compression, using both <code class="docutils literal notranslate"><span class="pre">decode</span> <span class="pre">==</span> <span class="pre">1</span></code> and <code class="docutils literal notranslate"><span class="pre">decode</span> <span class="pre">==</span> <span class="pre">0</span></code> should give the same result. -You can check if the stream is actually compressed with:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppstream_compressed</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">non</span> <span class="n">zero</span> <span class="k">if</span> <span class="o">/</span><span class="n">Filter</span> <span class="ow">is</span> <span class="n">present</span> -</pre></div> -</div> -<p>It might be necessary to load the entire stream data at once:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">uint8_t</span> <span class="o">*</span> <span class="n">ppstream_all</span> <span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">size</span><span class="p">,</span> <span class="nb">int</span> <span class="n">decode</span><span class="p">);</span> -</pre></div> -</div> -<p>If the initial buffer size is insufficient, it grows until the entire stream data is loaded. You must call -<code class="docutils literal notranslate"><span class="pre">ppstream_done(stream)</span></code> after using returned data.</p> -<p><code class="docutils literal notranslate"><span class="pre">ppstream_done()</span></code> doesn’t invalidate the stream object, it just closes its internal reader. -The stream itself remains a valid object (eg. one can read it again if necessary), -but the reader buffer is released. It is actually not freed but kept for future the reuse with that on some other stream, -but you still need to mark it ready for reuse to avoid allocating a separate buffer for every stream you’re going to read.</p> -<p>Stream data readers will return <code class="docutils literal notranslate"><span class="pre">NULL</span></code> if you haven’t close the previous reader process with <code class="docutils literal notranslate"><span class="pre">ppstream_done()</span></code>. All below is wrong:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">data1</span> <span class="o">=</span> <span class="n">ppstream_all</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> -<span class="n">data2</span> <span class="o">=</span> <span class="n">ppstream_all</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> <span class="o">//</span> <span class="n">data2</span> <span class="o">==</span> <span class="n">NULL</span> -<span class="o">//</span> <span class="ow">or</span> -<span class="n">data1</span> <span class="o">=</span> <span class="n">ppstream_first</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> -<span class="n">data2</span> <span class="o">=</span> <span class="n">ppstream_first</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> <span class="o">//</span> <span class="n">data2</span> <span class="o">==</span> <span class="n">NULL</span> -<span class="o">//</span> <span class="ow">or</span> -<span class="n">data1</span> <span class="o">=</span> <span class="n">ppstream_first</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> -<span class="n">data2</span> <span class="o">=</span> <span class="n">ppstream_all</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> <span class="o">//</span> <span class="n">data2</span> <span class="o">==</span> <span class="n">NULL</span> -</pre></div> -</div> -<p>To avoid unnecessary dependencies, <code class="docutils literal notranslate"><span class="pre">pplib</span></code> does not support image filters (<code class="docutils literal notranslate"><span class="pre">/DCT</span></code>, <code class="docutils literal notranslate"><span class="pre">/JPX</span></code>, <code class="docutils literal notranslate"><span class="pre">/JBIG</span></code>, <code class="docutils literal notranslate"><span class="pre">/CCITT</span></code>). -But it is ok to read the stream with <code class="docutils literal notranslate"><span class="pre">decode</span></code> set to 1 on such streams. <code class="docutils literal notranslate"><span class="pre">pplib</span></code> assumes that the image is the -final/target stream form and just returns it as-is. Eg. in the case of JPEG (<code class="docutils literal notranslate"><span class="pre">/DCT</span></code> filtered) image both calls should -give the same results:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppstream_all</span><span class="p">(</span><span class="n">jpegstream</span><span class="p">,</span> <span class="o">&</span><span class="n">jpegsize</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> <span class="o">//</span> <span class="n">don</span><span class="s1">'t decode, return what'</span><span class="n">s</span> <span class="n">there</span> -<span class="n">ppstream_all</span><span class="p">(</span><span class="n">jpegstream</span><span class="p">,</span> <span class="o">&</span><span class="n">jpegsize</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> <span class="o">//</span> <span class="n">decode</span> <span class="n">but</span> <span class="n">found</span> <span class="n">image</span> <span class="nb">filter</span><span class="p">,</span> <span class="n">effectively</span> <span class="n">the</span> <span class="n">same</span> -</pre></div> -</div> -<p>A bit more about streams memory. As mentioned, <code class="docutils literal notranslate"><span class="pre">pplib</span></code> allocates buffers for stream readers. After <code class="docutils literal notranslate"><span class="pre">ppstream_done()</span></code>, -the stream no longer <em>owns</em> the buffer space. But the buffer may remain allocated, to be reused with future readers. -<code class="docutils literal notranslate"><span class="pre">pplib</span></code> keeps a pool of several buffers. This means, that when you use stream readers, <code class="docutils literal notranslate"><span class="pre">pplib</span></code> eats -some memory (1MB or so) that is not freed, even if no streams are used. And even if you free all objects. -If you suffer from this, you can optionally use a pair of functions:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">ppstream_init_buffers</span> <span class="p">(</span><span class="n">void</span><span class="p">);</span> -<span class="n">void</span> <span class="n">ppstream_free_buffers</span> <span class="p">(</span><span class="n">void</span><span class="p">);</span> -</pre></div> -</div> -<p>The first initializes buffers pool, unless done so far. Currently <code class="docutils literal notranslate"><span class="pre">pplib</span></code> cares of it before opening every stream reader, -so it is not obligatory. The second frees a pool of buffers. The intended use is to call <code class="docutils literal notranslate"><span class="pre">ppstream_init_buffers()</span></code> once -as kind of library initializer and to call <code class="docutils literal notranslate"><span class="pre">ppstream_free_buffers()</span></code> once, as the library finalizer.</p> -</div> -<div class="section" id="filters"> -<h2>Filters<a class="headerlink" href="#filters" title="Permalink to this headline">¶</a></h2> -<p><code class="docutils literal notranslate"><span class="pre">ppstream</span></code> knows its filter(s) and keps it as <code class="docutils literal notranslate"><span class="pre">stream->filter</span></code>:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">//</span> <span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">;</span> -<span class="n">ppstream_filter</span> <span class="o">*</span><span class="n">info</span> <span class="o">=</span> <span class="o">&</span><span class="n">stream</span><span class="o">-></span><span class="nb">filter</span><span class="p">;</span> -</pre></div> -</div> -<p><code class="docutils literal notranslate"><span class="pre">ppstream_filter</span></code> is the following structure:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">typedef</span> <span class="n">struct</span> <span class="p">{</span> - <span class="n">ppstreamtp</span> <span class="o">*</span><span class="n">filters</span><span class="p">;</span> <span class="o">//</span> <span class="n">c</span><span class="o">-</span><span class="n">array</span> <span class="n">of</span> <span class="nb">filter</span> <span class="n">identifiers</span> <span class="p">(</span><span class="n">enum</span> <span class="n">integers</span><span class="p">)</span> - <span class="n">ppdict</span> <span class="o">**</span><span class="n">params</span><span class="p">;</span> <span class="o">//</span> <span class="n">c</span><span class="o">-</span><span class="n">array</span> <span class="n">of</span> <span class="n">ppdict</span> <span class="n">pointers</span> - <span class="n">size_t</span> <span class="n">count</span><span class="p">;</span> <span class="o">//</span> <span class="n">number</span> <span class="n">of</span> <span class="n">filters</span><span class="p">,</span> <span class="n">length</span> <span class="n">of</span> <span class="n">the</span> <span class="n">arrays</span> <span class="p">(</span><span class="n">typically</span> <span class="mi">1</span><span class="p">)</span> -<span class="p">}</span> <span class="n">ppstream_filter</span><span class="p">;</span> -</pre></div> -</div> -<p>If <code class="docutils literal notranslate"><span class="pre">count</span> <span class="pre">></span> <span class="pre">0</span></code> then <code class="docutils literal notranslate"><span class="pre">filters</span></code> member is not NULL. Filters array keeps integer constants:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">PPSTREAM_BASE16</span> <span class="o">/*</span> <span class="o">/</span><span class="n">ASCIIHexDecode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_BASE85</span> <span class="o">/*</span> <span class="o">/</span><span class="n">ASCII85Decode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_RUNLENGTH</span> <span class="o">/*</span> <span class="o">/</span><span class="n">RunLengthDecode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_FLATE</span> <span class="o">/*</span> <span class="o">/</span><span class="n">FlateDecode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_LZW</span> <span class="o">/*</span> <span class="o">/</span><span class="n">LZWDecode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_CCITT</span> <span class="o">/*</span> <span class="o">/</span><span class="n">CCITTFaxDecode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_DCT</span> <span class="o">/*</span> <span class="o">/</span><span class="n">DCTDecode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_JBIG2</span> <span class="o">/*</span> <span class="o">/</span><span class="n">JBIG2Decode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_JPX</span> <span class="o">/*</span> <span class="o">/</span><span class="n">JPXDecode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_CRYPT</span> <span class="o">/*</span> <span class="o">/</span><span class="n">Crypt</span> <span class="o">*/</span> -</pre></div> -</div> -<p>Params array keeps corresponding filter parameters (<code class="docutils literal notranslate"><span class="pre">/DecodeParms</span></code>) if present. <code class="docutils literal notranslate"><span class="pre">params</span></code> member is not NULL -if <code class="docutils literal notranslate"><span class="pre">count</span> <span class="pre">></span> <span class="pre">0</span></code> and the stream dict has <code class="docutils literal notranslate"><span class="pre">/DecodeParms</span></code> entry. Even if <code class="docutils literal notranslate"><span class="pre">params</span></code> is there, -for every N-th filter, <code class="docutils literal notranslate"><span class="pre">params[N]</span></code> may be NULL (corresponding to PDF <code class="docutils literal notranslate"><span class="pre">null</span></code>).</p> -<p><code class="docutils literal notranslate"><span class="pre">stream->filter</span></code> keeps the source stream filter information, which may not correspond to the result of stream readers -(<code class="docutils literal notranslate"><span class="pre">ppstream_first()</span></code>, <code class="docutils literal notranslate"><span class="pre">ppstream_next()</span></code>, <code class="docutils literal notranslate"><span class="pre">ppstream_all()</span></code>). The get the filters info relevant to the result from readers:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">ppstream_filter_info</span> <span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">ppstream_filter</span> <span class="o">*</span><span class="n">info</span><span class="p">,</span> <span class="nb">int</span> <span class="n">decode</span><span class="p">);</span> -</pre></div> -</div> -<p>The function fills <code class="docutils literal notranslate"><span class="pre">ppstream_filter</span></code> structure according to the expected result from stream readers (example 3 shows -how to use it to reconstruct <code class="docutils literal notranslate"><span class="pre">/Filter</span></code> and <code class="docutils literal notranslate"><span class="pre">/DecodeParms</span></code> when copying the stream to some other PDF).</p> -<p>To convert filter identifier (<code class="docutils literal notranslate"><span class="pre">ppstreamtp</span></code>) to a corresponding PDF filter name:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span> <span class="n">ppstream_filter_name</span><span class="p">[];</span> -</pre></div> -</div> -<p>To covert <code class="docutils literal notranslate"><span class="pre">ppname</span></code> to filter identifier:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">int</span> <span class="n">ppstream_filter_type</span> <span class="p">(</span><span class="n">ppname</span> <span class="n">filtername</span><span class="p">,</span> <span class="n">ppstreamtp</span> <span class="o">*</span><span class="n">filtertype</span><span class="p">);</span> -<span class="o">//</span> <span class="n">returns</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">sets</span> <span class="n">filtertype</span> <span class="k">if</span> <span class="n">filtername</span> <span class="ow">is</span> <span class="n">the</span> <span class="n">proper</span> <span class="nb">filter</span> <span class="n">name</span> -</pre></div> -</div> -<p>Additional information about the stream can be fetched from macros:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppstream_compressed</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span> <span class="o">/*</span> <span class="n">stream</span><span class="o">-></span><span class="n">flags</span> <span class="o">&</span> <span class="p">(</span><span class="n">PPSTREAM_FILTER</span><span class="o">|</span><span class="n">PPSTREAM_IMAGE</span><span class="p">)</span> <span class="o">*/</span> -<span class="n">ppstream_filtered</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span> <span class="o">/*</span> <span class="n">stream</span><span class="o">-></span><span class="n">flags</span> <span class="o">&</span> <span class="n">PPSTREAM_FILTER</span> <span class="o">*/</span> -<span class="n">ppstream_image</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span> <span class="o">/*</span> <span class="n">stream</span><span class="o">-></span><span class="n">flags</span> <span class="o">*</span> <span class="n">PPSTREAM_IMAGE</span> <span class="o">*/</span> -</pre></div> -</div> -<p><code class="docutils literal notranslate"><span class="pre">stream->flags</span></code> is a binary sum of the following:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">PPSTREAM_FILTER</span> <span class="o">/*</span> <span class="nb">set</span> <span class="n">iff</span> <span class="n">the</span> <span class="n">stream</span> <span class="n">filters</span> <span class="nb">list</span> <span class="n">has</span> <span class="n">one</span> <span class="n">of</span><span class="p">:</span> <span class="n">BASE16</span><span class="p">,</span> <span class="n">BASE85</span><span class="p">,</span> <span class="n">RUNLENGTH</span><span class="p">,</span> <span class="n">FLATE</span><span class="p">,</span> <span class="n">LZW</span> <span class="o">*/</span> -<span class="n">PPSTREAM_IMAGE</span> <span class="o">/*</span> <span class="nb">set</span> <span class="n">iff</span> <span class="n">the</span> <span class="n">stream</span> <span class="n">filters</span> <span class="nb">list</span> <span class="n">has</span> <span class="n">one</span> <span class="n">of</span><span class="p">:</span> <span class="n">CCITT</span><span class="p">,</span> <span class="n">DCT</span><span class="p">,</span> <span class="n">JBIG2</span><span class="p">,</span> <span class="n">JPX</span> <span class="o">*/</span> -<span class="n">PPSTREAM_ENCRYPTED</span> <span class="o">/*</span> <span class="nb">set</span> <span class="n">iff</span> <span class="n">the</span> <span class="n">stream</span> <span class="ow">is</span> <span class="n">encrypted</span> <span class="o">*/</span> -<span class="n">PPSTREAM_ENCRYPTED_OWN</span> <span class="o">/*</span> <span class="nb">set</span> <span class="n">iff</span> <span class="n">the</span> <span class="n">stream</span> <span class="n">has</span> <span class="n">own</span> <span class="n">CRYPT</span> <span class="nb">filter</span> <span class="o">*/</span> -</pre></div> -</div> -<p>Note that <code class="docutils literal notranslate"><span class="pre">PPSTREAM_COMPRESSED</span></code> is not there any longer, use <code class="docutils literal notranslate"><span class="pre">ppstream_compressed()</span></code> instead. -And there is some more, see <code class="docutils literal notranslate"><span class="pre">ppapi.h</span></code>.</p> -</div> -<div class="section" id="ref"> -<h2>Ref<a class="headerlink" href="#ref" title="Permalink to this headline">¶</a></h2> -<p>Indirect objects are represented as <code class="docutils literal notranslate"><span class="pre">ppref</span></code> structure. To get the object that the -reference refers to:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppref_obj</span><span class="p">(</span><span class="n">ppref</span> <span class="o">*</span><span class="n">ref</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span> -</pre></div> -</div> -<p><code class="docutils literal notranslate"><span class="pre">ppref</span></code> structure also keeps the reference number and version, a pointer to cross reference table it belongs -to and others, but I guess you won’t need anything but the referenced object. <code class="docutils literal notranslate"><span class="pre">pplib</span></code> parser resolves references -on-fly. So if there is a dict with indirect objects:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o"><<</span> - <span class="o">/</span><span class="n">Type</span> <span class="o">/</span><span class="n">Page</span> - <span class="o">/</span><span class="n">Resources</span> <span class="mi">123</span> <span class="mi">0</span> <span class="n">R</span> - <span class="o">...</span> -<span class="o">>></span> -</pre></div> -</div> -<p>the parser will produce <code class="docutils literal notranslate"><span class="pre">ppdict</span></code> with <code class="docutils literal notranslate"><span class="pre">Resources</span></code> key pointing the proper <code class="docutils literal notranslate"><span class="pre">ppref</span> <span class="pre">*</span></code> value. -If you need more, access <code class="docutils literal notranslate"><span class="pre">ppref</span></code> members:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">struct</span> <span class="n">ppref</span> <span class="p">{</span> - <span class="n">ppobj</span> <span class="nb">object</span><span class="p">;</span> <span class="o">//</span> <span class="n">target</span> <span class="nb">object</span> - <span class="n">ppuint</span> <span class="n">number</span><span class="p">,</span> <span class="n">version</span><span class="p">;</span> <span class="o">//</span> <span class="n">identifiers</span> - <span class="n">size_t</span> <span class="n">offset</span><span class="p">;</span> <span class="o">//</span> <span class="n">file</span> <span class="n">offset</span> <span class="p">(</span><span class="n">useless</span> <span class="k">for</span> <span class="n">you</span><span class="p">,</span> <span class="n">may</span> <span class="n">be</span> <span class="n">zero</span> <span class="k">for</span> <span class="n">compressed</span> <span class="n">objects</span><span class="p">)</span> - <span class="n">ppuint</span> <span class="n">length</span><span class="p">;</span> <span class="o">//</span> <span class="n">the</span> <span class="n">length</span> <span class="n">of</span> <span class="n">the</span> <span class="n">original</span> <span class="nb">object</span> <span class="n">data</span> - <span class="n">ppxref</span> <span class="o">*</span><span class="n">xref</span><span class="p">;</span> <span class="o">//</span> <span class="n">cross</span> <span class="n">reference</span> <span class="n">table</span> <span class="n">it</span> <span class="n">belongs</span> <span class="n">to</span> -<span class="p">};</span> -</pre></div> -</div> -</div> -<div class="section" id="xref"> -<h2>XRef<a class="headerlink" href="#xref" title="Permalink to this headline">¶</a></h2> -<p>Cross reference table is exposed as <code class="docutils literal notranslate"><span class="pre">ppxref</span></code> (incomplete type, you can only oprate on its pointer). -To get top document xref:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppxref</span> <span class="o">*</span> <span class="n">ppdoc_xref</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p>To get previous (older) xref:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppxref</span> <span class="o">*</span> <span class="n">ppxref_prev</span> <span class="p">(</span><span class="n">ppxref</span> <span class="o">*</span><span class="n">xref</span><span class="p">);</span> -</pre></div> -</div> -<p>To find an object of a given refnumber:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppref</span> <span class="o">*</span> <span class="n">ppxref_find</span> <span class="p">(</span><span class="n">ppxref</span> <span class="o">*</span><span class="n">xref</span><span class="p">,</span> <span class="n">ppuint</span> <span class="n">refnumber</span><span class="p">);</span> -</pre></div> -</div> -<p>[Note: since pplib v0.98 in case of documents with incremental update, <code class="docutils literal notranslate"><span class="pre">ppxref_find()</span></code> returns -the newest available version of a given object rather than the object in a given body.]</p> -</div> -<div class="section" id="pdf"> -<h2>PDF<a class="headerlink" href="#pdf" title="Permalink to this headline">¶</a></h2> -<p>PDF document is represented as <code class="docutils literal notranslate"><span class="pre">ppdoc</span></code> structure (incomplete type, you can only operate on its pointer). -To load a document from file:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdoc</span> <span class="o">*</span> <span class="n">ppdoc_load</span> <span class="p">(</span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">filename</span><span class="p">);</span> -</pre></div> -</div> -<p>To load a document from file handle:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdoc</span> <span class="o">*</span> <span class="n">ppdoc_filehandle</span> <span class="p">(</span><span class="n">FILE</span> <span class="o">*</span><span class="n">file</span><span class="p">,</span> <span class="nb">int</span> <span class="n">closefile</span><span class="p">);</span> <span class="o">//</span> <span class="n">closefile</span> <span class="mi">1</span> <span class="n">to</span> <span class="n">fclose</span><span class="p">()</span> <span class="n">on</span> <span class="n">end</span> -</pre></div> -</div> -<p>To load a document from memory data:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdoc</span> <span class="o">*</span> <span class="n">ppdoc_mem</span> <span class="p">(</span><span class="n">const</span> <span class="n">void</span> <span class="o">*</span><span class="n">data</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">size</span><span class="p">);</span> -</pre></div> -</div> -<p>The data is assumed to be a buffer allocated with <code class="docutils literal notranslate"><span class="pre">malloc</span></code> - it is freed when destroying <code class="docutils literal notranslate"><span class="pre">ppdoc</span></code>.</p> -<p>Both loaders returns <code class="docutils literal notranslate"><span class="pre">NULL</span></code> on failure.</p> -<p>To free <code class="docutils literal notranslate"><span class="pre">ppdoc</span></code> and all objects it refers to:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">ppdoc_free</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p>So far we haven’t mention about any explicit object reclaimers. There are no dedicated <code class="docutils literal notranslate"><span class="pre">free</span></code> functions -for other objects. You don’t allocate or free objects yourself. <code class="docutils literal notranslate"><span class="pre">ppdoc</span></code> object is an owner of all -beings it refers to. It also means that every object described so far is alive as long as the containing -<code class="docutils literal notranslate"><span class="pre">ppdoc</span></code> is alive.</p> -<p>To access main PDF dicts:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdict</span> <span class="o">*</span> <span class="n">ppdoc_trailer</span><span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">top</span> <span class="n">xref</span> <span class="n">trailer</span> <span class="nb">dict</span> -<span class="n">ppdict</span> <span class="o">*</span> <span class="n">ppdoc_catalog</span><span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">catalog</span> <span class="n">referred</span> <span class="kn">from</span> <span class="nn">the</span> <span class="n">trailer</span> -<span class="n">ppdict</span> <span class="o">*</span> <span class="n">ppdoc_info</span><span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">info</span> <span class="nb">dict</span> <span class="n">referred</span> <span class="kn">from</span> <span class="nn">the</span> <span class="n">trailer</span> -</pre></div> -</div> -<p>To get the PDF version:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span> <span class="n">ppdoc_version_string</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> <span class="o">//</span> <span class="n">version</span> <span class="n">string</span> -<span class="nb">int</span> <span class="n">ppdoc_version_number</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">,</span> <span class="nb">int</span> <span class="o">*</span><span class="n">minor</span><span class="p">);</span> <span class="o">//</span> <span class="n">minor</span> <span class="ow">and</span> <span class="n">major</span> <span class="n">numbers</span> -</pre></div> -</div> -<p>To get the file size of the source PDF document:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">size_t</span> <span class="n">ppdoc_file_size</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p>To get the number of objects in all xrefs:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppuint</span> <span class="n">ppdoc_objects</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p>To get the approx usage of memory:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">size_t</span> <span class="n">ppdoc_memory</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">waste</span><span class="p">);</span> -</pre></div> -</div> -</div> -<div class="section" id="encryption"> -<h2>Encryption<a class="headerlink" href="#encryption" title="Permalink to this headline">¶</a></h2> -<p><code class="docutils literal notranslate"><span class="pre">pplib</span></code> handles encrypted (password protected) documents. If a document is encrypted, most of strings and streams are ciphered. -In that form they are unreadable and rather useless, you can’t even rewrite such strings/streams as-is to a different PDF output. -It is a common practise to <em>protect</em> documents with an empty password. Such documents remain readable in Acrobat (just opens them without prompting -for a password), but some features (eg. printing) may restricted by the application.</p> -<p>When <code class="docutils literal notranslate"><span class="pre">pplib</span></code> detects encryption, it follows Acrobat approach and first tries an empty password. If it succeeds, <code class="docutils literal notranslate"><span class="pre">pplib</span></code> proceeeds normally, providing -an access to decrypted strings and streams, as if they weren’t ciphered. If the document is protected with non-empty password, <code class="docutils literal notranslate"><span class="pre">pplib</span></code> gives -a way to provide a password and proceed. Until you provide a password, <code class="docutils literal notranslate"><span class="pre">ppdoc</span></code> object returned by <code class="docutils literal notranslate"><span class="pre">ppdoc_load()</span></code> function has all object wntries -set to <code class="docutils literal notranslate"><span class="pre">null</span></code>.</p> -<p>After loading a document you should check encryption status with:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppcrypt_status</span> <span class="n">ppdoc_crypt_status</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p><code class="docutils literal notranslate"><span class="pre">ppcrypt_status</span></code> (integer) may have the following values:</p> -<blockquote> -<div><code class="docutils literal notranslate"><span class="pre">PPCRYPT_NONE</span></code> - no encryption, go ahead -<code class="docutils literal notranslate"><span class="pre">PPCRYPT_DONE</span></code> - encryption present but password succeeded, go ahead -<code class="docutils literal notranslate"><span class="pre">PPCRYPT_PASS</span></code> - encryption present, need non-empty password -<code class="docutils literal notranslate"><span class="pre">PPCRYPT_FAIL</span></code> - invalid or unsupported encryption (eg. undocumented in pdf spec)</div></blockquote> -<p>If a password is needed, you can provide one with:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppcrypt_status</span> <span class="n">ppdoc_crypt_pass</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">,</span> <span class="n">const</span> <span class="n">void</span> <span class="o">*</span><span class="n">userpass</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">userpasslength</span><span class="p">,</span> - <span class="n">const</span> <span class="n">void</span> <span class="o">*</span><span class="n">ownerpass</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">ownerpasslength</span><span class="p">);</span> -</pre></div> -</div> -<p>Well, yes, there are actually two passwords in encrypted documents. Relation between them is obscure to me, but enough -to know that having one of them is enough to decrypt the document. If you know the password, you probably mean -<code class="docutils literal notranslate"><span class="pre">userpass</span></code>, in which case you should put <code class="docutils literal notranslate"><span class="pre">NULL</span></code> as <code class="docutils literal notranslate"><span class="pre">ownerpass</span></code>. The function returns <code class="docutils literal notranslate"><span class="pre">PPCRYPT_DONE</span></code> if the password -succeeds and the previous status otherwise. Your custom loader function may look like that:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">;</span> -<span class="n">pdf</span> <span class="o">=</span> <span class="n">ppdoc_load</span><span class="p">(</span><span class="s2">"file.pdf"</span><span class="p">);</span> -<span class="k">if</span> <span class="p">(</span><span class="n">pdf</span> <span class="o">==</span> <span class="n">NULL</span><span class="p">)</span> - <span class="k">return</span> <span class="n">NULL</span><span class="p">;</span> -<span class="n">switch</span> <span class="p">(</span><span class="n">ppdoc_crypt_status</span><span class="p">(</span><span class="n">pdf</span><span class="p">))</span> -<span class="p">{</span> - <span class="n">case</span> <span class="n">PPCRYPT_NONE</span><span class="p">:</span> - <span class="n">case</span> <span class="n">PPCRYPT_DONE</span><span class="p">:</span> - <span class="k">return</span> <span class="n">pdf</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPCRYPT_PASS</span><span class="p">:</span> - <span class="k">if</span> <span class="p">(</span><span class="n">ppdoc_crypt_pass</span><span class="p">(</span><span class="n">pdf</span><span class="p">,</span> <span class="s2">"dummy"</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="n">NULL</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">==</span> <span class="n">PPCRYPT_DONE</span> <span class="o">||</span> - <span class="n">ppdoc_crypt_pass</span><span class="p">(</span><span class="n">pdf</span><span class="p">,</span> <span class="n">NULL</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">"dummy"</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span> <span class="o">==</span> <span class="n">PPCRYPT_DONE</span><span class="p">)</span> - <span class="k">return</span> <span class="n">pdf</span><span class="p">;</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">"sorry, password needed</span><span class="se">\n</span><span class="s2">"</span><span class="p">);</span> - <span class="n">ppdoc_free</span><span class="p">(</span><span class="n">pdf</span><span class="p">);</span> - <span class="k">return</span> <span class="n">NULL</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPCRYPT_FAIL</span><span class="p">:</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">"sorry, encryption failed</span><span class="se">\n</span><span class="s2">"</span><span class="p">);</span> - <span class="n">ppdoc_free</span><span class="p">(</span><span class="n">pdf</span><span class="p">);</span> - <span class="k">return</span> <span class="n">NULL</span><span class="p">;</span> -<span class="p">}</span> -</pre></div> -</div> -<p>[If you get <code class="docutils literal notranslate"><span class="pre">PPCRYPT_FAIL</span></code> it might mean <em>I failed</em>, so treat as a bug.]</p> -<p>If you’d like to know what permissions are given/restricted to encrypted document:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppint</span> <span class="n">ppdoc_permissions</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p>Returned value can be queried with the following binary flags (you can verify with Acrobat <em>File -> Properties -> Security</em> tab):</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">PPDOC_ALLOW_PRINT</span> <span class="o">//</span> <span class="n">printing</span> -<span class="n">PPDOC_ALLOW_MODIFY</span> <span class="o">//</span> <span class="n">filling</span> <span class="n">form</span> <span class="n">fields</span><span class="p">,</span> <span class="n">signing</span><span class="p">,</span> <span class="n">creating</span> <span class="n">template</span> <span class="n">pages</span> -<span class="n">PPDOC_ALLOW_COPY</span> <span class="o">//</span> <span class="n">copying</span><span class="p">,</span> <span class="n">copying</span> <span class="k">for</span> <span class="n">accessibility</span> -<span class="n">PPDOC_ALLOW_ANNOTS</span> <span class="o">//</span> <span class="n">filling</span> <span class="n">form</span> <span class="n">fields</span><span class="p">,</span> <span class="n">copying</span><span class="p">,</span> <span class="n">signing</span> -<span class="n">PPDOC_ALLOW_EXTRACT</span> <span class="o">//</span> <span class="n">contents</span> <span class="n">copying</span> <span class="k">for</span> <span class="n">accessibility</span> -<span class="n">PPDOC_ALLOW_ASSEMBLY</span> <span class="o">//</span> <span class="p">(</span><span class="n">no</span> <span class="n">effect</span><span class="p">)</span> -<span class="n">PPDOC_ALLOW_PRINT_HIRES</span> <span class="o">//</span> <span class="p">(</span><span class="n">no</span> <span class="n">effect</span><span class="p">)</span> -</pre></div> -</div> -<p><code class="docutils literal notranslate"><span class="pre">pplib</span></code> does absolutelly nothing with permissions, it cares only to decrypt the document. As mentioned, encryption applies to strings -and streams. <code class="docutils literal notranslate"><span class="pre">pplib</span></code> decrypt strings when parsing document objects, so the result you get is <em>normal</em> (not ciphered). -Streams are decrypted whenever you access them. Even if you ask for a raw stream data, you’ll get a raw (compressed) stream, but decrypted. -So except the check to <code class="docutils literal notranslate"><span class="pre">ppdoc_crypt_status()</span></code>, you shouldn’t bother about encryption.</p> -<p>In encrypted documents most of streams are encrypted. To check if a given stream is encrypted:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppstream_encrypted</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">non</span><span class="o">-</span><span class="n">zero</span> <span class="k">if</span> <span class="n">encrypted</span> -</pre></div> -</div> -<p>Encryption is independent from compression, don’t confuse with <code class="docutils literal notranslate"><span class="pre">ppstream_compressed()</span></code></p> -</div> -<div class="section" id="pages"> -<h2>Pages<a class="headerlink" href="#pages" title="Permalink to this headline">¶</a></h2> -<p>Several helpers to deal with pages. To get the number of pages:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppuint</span> <span class="n">ppdoc_page_count</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p>To access the root pages tree node:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppref</span> <span class="o">*</span> <span class="n">ppdoc_pages</span><span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p>To get the page reference at a given index:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppref</span> <span class="o">*</span> <span class="n">ppdoc_page</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">,</span> <span class="n">ppuint</span> <span class="n">index</span><span class="p">);</span> -</pre></div> -</div> -<p><code class="docutils literal notranslate"><span class="pre">index</span></code> is a page number. First page has number 1. For index out of bounds <code class="docutils literal notranslate"><span class="pre">ppdoc_page()</span></code> returns NULL. -Iterating over pages using index from 1 to <code class="docutils literal notranslate"><span class="pre">ppdoc_page_count()</span></code> and calling <code class="docutils literal notranslate"><span class="pre">ppdoc_page()</span></code> on each iteration -would be suboptimal. Here is a dedicted iterator for this:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppref</span> <span class="o">*</span> <span class="n">ppdoc_first_page</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -<span class="n">ppref</span> <span class="o">*</span> <span class="n">ppdoc_next_page</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p>The iterator in use:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">;</span> -<span class="n">ppref</span> <span class="o">*</span><span class="n">ref</span><span class="p">;</span> -<span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">;</span> -<span class="nb">int</span> <span class="n">pageno</span><span class="p">;</span> - -<span class="n">pdf</span> <span class="o">=</span> <span class="n">ppdoc_load</span><span class="p">(</span><span class="s2">"file.pdf"</span><span class="p">);</span> -<span class="k">for</span> <span class="p">(</span><span class="n">ref</span> <span class="o">=</span> <span class="n">ppdoc_first_page</span><span class="p">(</span><span class="n">pdf</span><span class="p">),</span> <span class="n">pageno</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> <span class="n">ref</span> <span class="o">!=</span> <span class="n">NULL</span><span class="p">;</span> <span class="n">ref</span> <span class="o">=</span> <span class="n">ppdoc_next_page</span><span class="p">(</span><span class="n">pdf</span><span class="p">),</span> <span class="o">++</span><span class="n">pageno</span><span class="p">)</span> -<span class="p">{</span> - <span class="nb">dict</span> <span class="o">=</span> <span class="n">ppref_obj</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span><span class="o">-></span><span class="nb">dict</span><span class="p">;</span> <span class="o">//</span> <span class="n">take</span> <span class="k">for</span> <span class="n">granted</span> <span class="n">it</span> <span class="ow">is</span> <span class="n">a</span> <span class="nb">dict</span> - <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">the</span> <span class="n">page</span> <span class="nb">dict</span> -<span class="p">}</span> -</pre></div> -</div> -<p>Functions related to pages return <code class="docutils literal notranslate"><span class="pre">ppref</span> <span class="pre">*</span></code> ensured to contain dict object, so you don’t need sanity -type checks here.</p> -</div> -<div class="section" id="contents"> -<h2>Contents<a class="headerlink" href="#contents" title="Permalink to this headline">¶</a></h2> -<p>PDF page contents can be given as a stream or array of streams. Here is a convenience iterator over page -contents streams:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppstream</span> <span class="o">*</span> <span class="n">ppcontents_first</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">);</span> -<span class="n">ppstream</span> <span class="o">*</span> <span class="n">ppcontents_next</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">);</span> -</pre></div> -</div> -<p>A complete example of contents stream parser use is given below (example 2). -But before we get there, we need to introduce <code class="docutils literal notranslate"><span class="pre">ppcontext</span></code> object. Conceptually, -<code class="docutils literal notranslate"><span class="pre">ppcontext</span></code> is an owner (memory handler) of objects created on demand (beyond the <code class="docutils literal notranslate"><span class="pre">ppdoc</span></code>). -So far used only with contents stream parser, which might produce quite some data that we want -to release just after used. To create a new context:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pcontext</span> <span class="o">*</span> <span class="n">ppcontext_new</span> <span class="p">(</span><span class="n">void</span><span class="p">);</span> -</pre></div> -</div> -<p>It initializes a new context and its internal memory heap, taking about 64kB on start. After that, -the context is ready to produce objects (contents parsing functions below). Once objects produced -from a given context are no longer needed:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">ppcontext_done</span> <span class="p">(</span><span class="n">ppcontext</span> <span class="o">*</span><span class="n">context</span><span class="p">);</span> -</pre></div> -</div> -<p>It restores the context to its initial state, as after <code class="docutils literal notranslate"><span class="pre">ppcontext_new()</span></code>. It means that the context -is ready to produce another bunch of beings (in the example below, all objects from the next page contents). -Once the context is not needed anymore:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">ppcontext_free</span> <span class="p">(</span><span class="n">ppcontext</span> <span class="o">*</span><span class="n">context</span><span class="p">);</span> -</pre></div> -</div> -<p>Now, contents stream parser functions take the context as an argument. Iterator form of contents stream parser -that allows to process the contents operator by operator:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppcontents_first_op</span> <span class="p">(</span><span class="n">ppcontext</span> <span class="o">*</span><span class="n">context</span><span class="p">,</span> <span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">psize</span><span class="p">,</span> <span class="n">ppname</span> <span class="o">*</span><span class="n">pname</span><span class="p">);</span> -<span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppcontents_next_op</span> <span class="p">(</span><span class="n">ppcontext</span> <span class="o">*</span><span class="n">context</span><span class="p">,</span> <span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">psize</span><span class="p">,</span> <span class="n">ppname</span> <span class="o">*</span><span class="n">pname</span><span class="p">);</span> -</pre></div> -</div> -<p>Returned <code class="docutils literal notranslate"><span class="pre">ppobj</span> <span class="pre">*</span></code> is a pointer to operands list. <code class="docutils literal notranslate"><span class="pre">*psize</span></code> is the number of operands on stack. -The operator itself is stored as <code class="docutils literal notranslate"><span class="pre">*pname</span></code>.</p> -<p>To parse the entire contents stream at once with no stop at every operator:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppcontents_parse</span> <span class="p">(</span><span class="n">ppcontext</span> <span class="o">*</span><span class="n">context</span><span class="p">,</span> <span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">psize</span><span class="p">);</span> -</pre></div> -</div> -<p>Returns probably quite long list of all parsed objects (operands and operatos) in one piece. -The number of objects is stored to <code class="docutils literal notranslate"><span class="pre">*psize</span></code>.</p> -<p>[Contents may contain so called inline images, that breaks a simple scheme of operands / operator syntax:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">BI</span> <span class="o"><</span><span class="n">keyval</span> <span class="n">pairs</span><span class="o">></span> <span class="n">ID</span> <span class="o"><</span><span class="n">binary</span> <span class="n">image</span> <span class="n">data</span><span class="o">></span> <span class="n">EI</span> -</pre></div> -</div> -<p>Contents parser treats this genuine triplet as a single piece, producing two operands (dict and string) -followed by <code class="docutils literal notranslate"><span class="pre">EI</span></code> operator name.]</p> -</div> -<div class="section" id="boxes"> -<h2>Boxes<a class="headerlink" href="#boxes" title="Permalink to this headline">¶</a></h2> -<p>Boxes (rectangles) in PDF are roughly 4-number arrays, but with a special intent. -<code class="docutils literal notranslate"><span class="pre">pplib</span></code> provides a basic interface for these special arrays:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">typedef</span> <span class="n">struct</span> <span class="p">{</span> - <span class="n">ppnum</span> <span class="n">lx</span><span class="p">,</span> <span class="n">ly</span><span class="p">,</span> <span class="n">rx</span><span class="p">,</span> <span class="n">ry</span><span class="p">;</span> -<span class="p">}</span> <span class="n">pprect</span><span class="p">;</span> -</pre></div> -</div> -<p>This type is used only by helper functions - PDF parser is not aware of the rectangle type. -To convert <code class="docutils literal notranslate"><span class="pre">pparray</span></code> to <code class="docutils literal notranslate"><span class="pre">pprect</span></code>:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pprect</span> <span class="o">*</span> <span class="n">pparray_to_rect</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">pprect</span> <span class="o">*</span><span class="n">rect</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">rect</span> <span class="ow">or</span> <span class="n">NULL</span> -</pre></div> -</div> -<p>In example:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pprect</span> <span class="n">rect</span><span class="p">;</span> -<span class="k">if</span> <span class="p">(</span><span class="n">pparray_to_rect</span><span class="p">(</span><span class="n">array</span><span class="p">,</span> <span class="o">&</span><span class="n">rect</span><span class="p">)</span> <span class="o">!=</span> <span class="n">NULL</span><span class="p">)</span> - <span class="p">;</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">rect</span> -</pre></div> -</div> -<p>To get some image bounding box:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pprect</span> <span class="o">*</span> <span class="n">ppdict_get_rect</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">pprect</span> <span class="o">*</span><span class="n">rect</span><span class="p">);</span> -<span class="o">//</span> <span class="n">eg</span><span class="o">.</span> <span class="n">ppdict_get_rect</span><span class="p">(</span><span class="n">imagedict</span><span class="p">,</span> <span class="s2">"BBox"</span><span class="p">,</span> <span class="o">&</span><span class="n">rect</span><span class="p">)</span> -</pre></div> -</div> -<p>To get some page box:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pprect</span> <span class="o">*</span> <span class="n">ppdict_get_box</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">pprect</span> <span class="o">*</span><span class="n">rect</span><span class="p">);</span> -<span class="o">//</span> <span class="n">eg</span><span class="o">.</span> <span class="n">ppdict_get_box</span><span class="p">(</span><span class="n">pagedict</span><span class="p">,</span> <span class="s2">"MediaBox"</span><span class="p">,</span> <span class="o">&</span><span class="n">rect</span><span class="p">)</span> -</pre></div> -</div> -<p>The later not only checks the pagedict, but also goes through parent page nodes.</p> -</div> -<div class="section" id="transforms"> -<h2>Transforms<a class="headerlink" href="#transforms" title="Permalink to this headline">¶</a></h2> -<p>Transformations are given as 6-number arrays, but with a special intent. -<code class="docutils literal notranslate"><span class="pre">pplib</span></code> provides a basic interface for these special arrays:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">typedef</span> <span class="n">struct</span> <span class="p">{</span> - <span class="n">ppnum</span> <span class="n">xx</span><span class="p">,</span> <span class="n">xy</span><span class="p">,</span> <span class="n">yx</span><span class="p">,</span> <span class="n">yy</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">;</span> -<span class="p">}</span> <span class="n">ppmatrix</span><span class="p">;</span> -</pre></div> -</div> -<p>This type is used only by helper functions - PDF parser is not aware of the matrix type. -To convert <code class="docutils literal notranslate"><span class="pre">pparray</span></code> to <code class="docutils literal notranslate"><span class="pre">ppmatrix</span></code>:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppmatrix</span> <span class="o">*</span> <span class="n">pparray_to_matrix</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">ppmatrix</span> <span class="o">*</span><span class="n">matrix</span><span class="p">);</span> -</pre></div> -</div> -<p>In example:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppmatrix</span> <span class="n">matrix</span><span class="p">;</span> -<span class="k">if</span> <span class="p">(</span><span class="n">pparray_to_matrix</span><span class="p">(</span><span class="n">array</span><span class="p">,</span> <span class="o">&</span><span class="n">matrix</span><span class="p">)</span> <span class="o">!=</span> <span class="n">NULL</span><span class="p">)</span> - <span class="p">;</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">matrix</span> -</pre></div> -</div> -<p>To get the matrix from dict:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppmatrix</span> <span class="o">*</span> <span class="n">ppdict_get_matrix</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">ppmatrix</span> <span class="o">*</span><span class="n">matrix</span><span class="p">);</span> -<span class="o">//</span> <span class="n">eg</span><span class="o">.</span> <span class="n">ppdict_get_matrix</span><span class="p">(</span><span class="n">imagedict</span><span class="p">,</span> <span class="s2">"Matrix"</span><span class="p">,</span> <span class="o">&</span><span class="n">matrix</span><span class="p">)</span> -</pre></div> -</div> -</div> -<div class="section" id="errors-handling"> -<h2>Errors handling<a class="headerlink" href="#errors-handling" title="Permalink to this headline">¶</a></h2> -<p><code class="docutils literal notranslate"><span class="pre">pplib</span></code> is not verbose, but might happen that it needs to log some error message, eg. when parsing -of some PDF boject fails due to invalid offsets. By default, <code class="docutils literal notranslate"><span class="pre">pplib</span></code> prints the message to stdout, eg.:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">invalid</span> <span class="mi">123</span> <span class="mi">0</span> <span class="n">R</span> <span class="nb">object</span> <span class="n">at</span> <span class="n">offset</span> <span class="mi">123123</span> -</pre></div> -</div> -<p>To replace the default logger, you can provide your own:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">pplog_callback</span> <span class="p">(</span><span class="n">pplogger_callback</span> <span class="n">logger</span><span class="p">,</span> <span class="n">void</span> <span class="o">*</span><span class="n">alien</span><span class="p">);</span> -</pre></div> -</div> -<p><code class="docutils literal notranslate"><span class="pre">pplogger_callback</span></code> is a function:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">your_callback</span> <span class="p">(</span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">message</span><span class="p">,</span> <span class="n">void</span> <span class="o">*</span><span class="n">alien</span><span class="p">);</span> -</pre></div> -</div> -<p>In example, to redirect messages to stderr you may define a function:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">your_callback</span> <span class="p">(</span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">message</span><span class="p">,</span> <span class="n">void</span> <span class="o">*</span><span class="n">alien</span><span class="p">)</span> -<span class="p">{</span> - <span class="n">fprintf</span><span class="p">((</span><span class="n">FILE</span> <span class="o">*</span><span class="p">)</span><span class="n">alien</span><span class="p">,</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">ooops: </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="n">message</span><span class="p">);</span> -<span class="p">}</span> -</pre></div> -</div> -<p>Then set the callback somewhere before loading documents:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pplog_callback</span><span class="p">(</span><span class="n">your_callback</span><span class="p">,</span> <span class="n">stderr</span><span class="p">);</span> -</pre></div> -</div> -<p>(example 2 uses that).</p> -<p>To set the default log messages prefix, eg. <code class="docutils literal notranslate"><span class="pre">pplib:</span></code>, use:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">int</span> <span class="n">pplog_prefix</span> <span class="p">(</span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">prefix</span><span class="p">)</span> -</pre></div> -</div> -<p>Default is empty. The function succeeds if provided prefix is reasonably short (less then 32 bytes).</p> -</div> -</div> - - - </div> - </div> - </div> - <div class="clearer"></div> - </div> - <div class="related" role="navigation" aria-label="related navigation"> - <h3>Navigation</h3> - <ul> - <li class="right" style="margin-right: 10px"> - <a href="genindex.html" title="General Index" - >index</a></li> - <li class="right" > - <a href="ppapi-1.x.html" title="pplib 1.x" - >next</a> |</li> - <li class="right" > - <a href="ppnew.html" title="1.x vs 2.x" - >previous</a> |</li> - <li class="nav-item nav-item-0"><a href="pplib.html">pplib 0.1 documentation</a> »</li> - </ul> - </div> - <div class="footer" role="contentinfo"> - © Copyright 2019, p.jackowski@gust.org.pl. - Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5. - </div> - </body> -</html>
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/ppapi.html b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/ppapi.html deleted file mode 100644 index 2a5de7a6b1c..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/ppapi.html +++ /dev/null @@ -1,1030 +0,0 @@ - - -<!doctype html> - -<html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>pplib — pplib 0.1 documentation</title> - <link rel="stylesheet" href="_static/bizstyle.css" type="text/css" /> - <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> - - <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> - <script type="text/javascript" src="_static/bizstyle.js"></script> - <link rel="index" title="Index" href="genindex.html" /> - <link rel="search" title="Search" href="search.html" /> - <link rel="next" title="Examples" href="ppcode.html" /> - <link rel="prev" title="pplib" href="pplib.html" /> - <meta name="viewport" content="width=device-width,initial-scale=1.0"> - <!--[if lt IE 9]> - <script type="text/javascript" src="_static/css3-mediaqueries.js"></script> - <![endif]--> - </head><body> - <div class="related" role="navigation" aria-label="related navigation"> - <h3>Navigation</h3> - <ul> - <li class="right" style="margin-right: 10px"> - <a href="genindex.html" title="General Index" - accesskey="I">index</a></li> - <li class="right" > - <a href="ppcode.html" title="Examples" - accesskey="N">next</a> |</li> - <li class="right" > - <a href="pplib.html" title="pplib" - accesskey="P">previous</a> |</li> - <li class="nav-item nav-item-0"><a href="pplib.html">pplib 0.1 documentation</a> »</li> - </ul> - </div> - <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> - <div class="sphinxsidebarwrapper"> - <h3><a href="pplib.html">Table of Contents</a></h3> - <ul> -<li><a class="reference internal" href="#"><code class="docutils literal notranslate"><span class="pre">pplib</span></code></a></li> -<li><a class="reference internal" href="#c-api">C-API</a><ul> -<li><a class="reference internal" href="#types">Types</a></li> -<li><a class="reference internal" href="#object">Object</a></li> -<li><a class="reference internal" href="#names">Names</a></li> -<li><a class="reference internal" href="#string">String</a></li> -<li><a class="reference internal" href="#array">Array</a></li> -<li><a class="reference internal" href="#dict">Dict</a></li> -<li><a class="reference internal" href="#stream">Stream</a></li> -<li><a class="reference internal" href="#filters">Filters</a></li> -<li><a class="reference internal" href="#ref">Ref</a></li> -<li><a class="reference internal" href="#xref">XRef</a></li> -<li><a class="reference internal" href="#pdf">PDF</a></li> -<li><a class="reference internal" href="#encryption">Encryption</a></li> -<li><a class="reference internal" href="#pages">Pages</a></li> -<li><a class="reference internal" href="#contents">Contents</a></li> -<li><a class="reference internal" href="#boxes">Boxes</a></li> -<li><a class="reference internal" href="#transforms">Transforms</a></li> -<li><a class="reference internal" href="#errors-handling">Errors handling</a></li> -</ul> -</li> -</ul> - - <h4>Previous topic</h4> - <p class="topless"><a href="pplib.html" - title="previous chapter">pplib</a></p> - <h4>Next topic</h4> - <p class="topless"><a href="ppcode.html" - title="next chapter">Examples</a></p> - <div role="note" aria-label="source link"> - <h3>This Page</h3> - <ul class="this-page-menu"> - <li><a href="_sources/ppapi.rst.txt" - rel="nofollow">Show Source</a></li> - </ul> - </div> -<div id="searchbox" style="display: none" role="search"> - <h3>Quick search</h3> - <div class="searchformwrapper"> - <form class="search" action="search.html" method="get"> - <input type="text" name="q" /> - <input type="submit" value="Go" /> - <input type="hidden" name="check_keywords" value="yes" /> - <input type="hidden" name="area" value="default" /> - </form> - </div> -</div> -<script type="text/javascript">$('#searchbox').show(0);</script> - </div> - </div> - - <div class="document"> - <div class="documentwrapper"> - <div class="bodywrapper"> - <div class="body" role="main"> - - <div class="section" id="pplib"> -<h1><code class="docutils literal notranslate"><span class="pre">pplib</span></code><a class="headerlink" href="#pplib" title="Permalink to this headline">¶</a></h1> -<p><code class="docutils literal notranslate"><span class="pre">pplib</span></code> is a library for raw PDF access. It parses PDF documents and provides an interface to access document structures in C.</p> -</div> -<div class="section" id="c-api"> -<h1>C-API<a class="headerlink" href="#c-api" title="Permalink to this headline">¶</a></h1> -<div class="section" id="types"> -<h2>Types<a class="headerlink" href="#types" title="Permalink to this headline">¶</a></h2> -<p><code class="docutils literal notranslate"><span class="pre">pplib</span></code> defines several C-types to represent PDF types:</p> -<ul class="simple"> -<li><code class="docutils literal notranslate"><span class="pre">ppint</span></code> - signed integer (<code class="docutils literal notranslate"><span class="pre">int64_t</span></code>)</li> -<li><code class="docutils literal notranslate"><span class="pre">ppnum</span></code> - real number (double)</li> -<li><code class="docutils literal notranslate"><span class="pre">ppname</span></code> - PDF name</li> -<li><code class="docutils literal notranslate"><span class="pre">ppstring</span></code> - PDF string</li> -<li><code class="docutils literal notranslate"><span class="pre">pparray</span></code> - PDF array</li> -<li><code class="docutils literal notranslate"><span class="pre">ppdict</span></code> - PDF dict</li> -<li><code class="docutils literal notranslate"><span class="pre">ppstream</span></code> - PDF stream</li> -<li><code class="docutils literal notranslate"><span class="pre">ppref</span></code> - PDF indirect reference</li> -<li><code class="docutils literal notranslate"><span class="pre">ppobj</span></code> - a container of all above</li> -</ul> -<p>Among <code class="docutils literal notranslate"><span class="pre">ppint</span></code> and <code class="docutils literal notranslate"><span class="pre">ppnum</span></code>, we also use <code class="docutils literal notranslate"><span class="pre">ppuint</span></code> - unsigned integer (machine word, alias to <code class="docutils literal notranslate"><span class="pre">size_t</span></code>).</p> -<p>Other API types:</p> -<ul class="simple"> -<li><code class="docutils literal notranslate"><span class="pre">ppdoc</span></code> - PDF document</li> -<li><code class="docutils literal notranslate"><span class="pre">ppxref</span></code> - cross-references table</li> -<li><code class="docutils literal notranslate"><span class="pre">ppcontext</span></code> - … later</li> -<li><code class="docutils literal notranslate"><span class="pre">pprect</span></code> - rectangle</li> -<li><code class="docutils literal notranslate"><span class="pre">ppmatrix</span></code> - matrix</li> -</ul> -<p>Integer, number, name and string are treated as simple types. -Names and strings are actually C-structures, but exposed to API as typedefs to <code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">char</span> <span class="pre">*</span></code>. -Other types (array, dict, stream, reference, object container, xref, PDF) are C-structures, -and you operate it their pointers. So when you declare a simple type variable you say:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppuint</span> <span class="n">u</span><span class="p">;</span> -<span class="n">ppnum</span> <span class="n">n</span><span class="p">;</span> -<span class="n">ppname</span> <span class="n">name</span><span class="p">;</span> -<span class="n">ppstring</span> <span class="n">string</span><span class="p">;</span> -<span class="o">...</span> -</pre></div> -</div> -<p>And when you declare a compound type you operate on pointers:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppobj</span> <span class="o">*</span><span class="n">obj</span><span class="p">;</span> -<span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">;</span> -<span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">;</span> -<span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">;</span> -<span class="n">ppref</span> <span class="o">*</span><span class="n">ref</span><span class="p">;</span> -<span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">;</span> -</pre></div> -</div> -<p>Some of those C-types are defined in library header <code class="docutils literal notranslate"><span class="pre">ppapi.h</span></code> (complete types). Some others are incomplete -(eg. you can’t say <code class="docutils literal notranslate"><span class="pre">sizeof(ppdoc)</span></code> or <code class="docutils literal notranslate"><span class="pre">sizeof(ppxref)</span></code>). This is to avoid unnecesary dependencies in -the header. [At some points it’s not clear to me what to hide and what to expose, will see.] The library itself -uses <code class="docutils literal notranslate"><span class="pre">pplib.h</span></code> but for auxilary applications including a standalone <code class="docutils literal notranslate"><span class="pre">ppapi.h</span></code> header should be enough.</p> -<p><code class="docutils literal notranslate"><span class="pre">pplib</span></code> was designed having <strong>read-only</strong> PDF access in mind. Even if some structure is completelly exposed, -so that you can directly access its members, you should treat them as read-only. I don’t make them <code class="docutils literal notranslate"><span class="pre">const</span></code> because -then all variable declarations would need to be <code class="docutils literal notranslate"><span class="pre">const</span></code>, which is annoying, and I’d need some trickery in the library -internals to unconst. Besides, nothing is really const for C type casts.</p> -</div> -<div class="section" id="object"> -<h2>Object<a class="headerlink" href="#object" title="Permalink to this headline">¶</a></h2> -<p>A common container for all elementary PDF object types is <code class="docutils literal notranslate"><span class="pre">ppobj</span></code> structure. <code class="docutils literal notranslate"><span class="pre">ppobj</span></code> has a type identifier -(integer) and union of values:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">struct</span> <span class="n">ppobj</span> <span class="p">{</span> - <span class="n">ppobjtp</span> <span class="nb">type</span><span class="p">;</span> - <span class="n">union</span> <span class="p">{</span> - <span class="n">ppint</span> <span class="n">integer</span><span class="p">;</span> - <span class="n">ppnum</span> <span class="n">number</span><span class="p">;</span> - <span class="n">ppname</span> <span class="n">name</span><span class="p">;</span> - <span class="n">ppstring</span> <span class="n">string</span><span class="p">;</span> - <span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">;</span> - <span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">;</span> - <span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">;</span> - <span class="n">ppref</span> <span class="o">*</span><span class="n">ref</span><span class="p">;</span> - <span class="n">void</span> <span class="o">*</span><span class="nb">any</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> -</pre></div> -</div> -<p>Object type is one of constants (enum):</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">PPNONE</span> -<span class="n">PPNULL</span> -<span class="n">PPBOOL</span> -<span class="n">PPINT</span> -<span class="n">PPNUM</span> -<span class="n">PPNAME</span> -<span class="n">PPSTRING</span> -<span class="n">PPARRAY</span> -<span class="n">PPDICT</span> -<span class="n">PPSTREAM</span> -<span class="n">PPREF</span> -</pre></div> -</div> -<p>The type determines the structure member you’re allowed to access:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppobj</span> <span class="o">*</span><span class="n">obj</span><span class="p">;</span> -<span class="o">...</span> -<span class="n">switch</span> <span class="p">(</span><span class="n">obj</span><span class="o">-></span><span class="nb">type</span><span class="p">)</span> -<span class="p">{</span> - <span class="n">case</span> <span class="n">PPNONE</span><span class="p">:</span> <span class="o">//</span> <span class="n">shouldn</span><span class="s1">'t actually happen, indicates some failure</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPNULL</span><span class="p">:</span> <span class="o">//</span> <span class="n">valid</span> <span class="n">PDF</span> <span class="n">null</span> <span class="nb">object</span><span class="p">,</span> <span class="n">no</span> <span class="n">value</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPBOOL</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="n">integer</span> <span class="p">(</span><span class="n">ppint</span><span class="p">),</span> <span class="n">value</span> <span class="mi">0</span> <span class="ow">or</span> <span class="mi">1</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPINT</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="n">integer</span> <span class="p">(</span><span class="n">ppint</span><span class="p">)</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPNUM</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="n">number</span> <span class="p">(</span><span class="n">ppnum</span><span class="p">)</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPNAME</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="n">name</span> <span class="p">(</span><span class="n">ppname</span><span class="p">)</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPSTRING</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="n">string</span> <span class="p">(</span><span class="n">ppstring</span><span class="p">)</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPARRAY</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="n">array</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="p">)</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPDICT</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="nb">dict</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="p">)</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPSTREAM</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="n">stream</span> <span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="p">)</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPREF</span><span class="p">:</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">obj</span><span class="o">-></span><span class="n">ref</span> <span class="p">(</span><span class="n">ppref</span> <span class="o">*</span><span class="p">)</span> - <span class="k">break</span><span class="p">;</span> -<span class="p">}</span> -</pre></div> -</div> -<p>More often then not you know exactly what type of object value is expected, in which case -you may use one of the following macros:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">//</span> <span class="n">returns</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPNULL</span> -<span class="nb">int</span> <span class="n">ppobj_get_null</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> \ - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPBOOL</span><span class="p">,</span> <span class="n">sets</span> <span class="nb">int</span> <span class="n">v</span> <span class="n">to</span> <span class="mi">0</span> <span class="ow">or</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">returns</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span> <span class="n">otherwise</span> -<span class="nb">int</span> <span class="n">ppobj_get_bool</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPINT</span><span class="p">,</span> <span class="n">sets</span> <span class="n">ppint</span> <span class="n">v</span> <span class="ow">and</span> <span class="n">returns</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span> <span class="n">otherwise</span> -<span class="nb">int</span> <span class="n">ppobj_get_int</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPINT</span> <span class="ow">and</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">sets</span> <span class="n">ppuint</span> <span class="n">v</span> <span class="ow">and</span> <span class="n">returns</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span> <span class="n">otherwise</span> -<span class="nb">int</span> <span class="n">ppobj_get_uint</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPNUM</span> <span class="ow">or</span> <span class="n">PPINT</span><span class="p">,</span> <span class="n">sets</span> <span class="n">ppnum</span> <span class="n">v</span> <span class="ow">and</span> <span class="n">returns</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span> <span class="n">otherwise</span> -<span class="nb">int</span> <span class="n">ppobj_get_num</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPNAME</span> <span class="n">returns</span> <span class="n">the</span> <span class="n">name</span><span class="p">,</span> <span class="n">NULL</span> <span class="n">otherwise</span> -<span class="n">ppname</span> <span class="n">ppobj_get_name</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPSTRING</span> <span class="n">returns</span> <span class="n">the</span> <span class="n">string</span><span class="p">,</span> <span class="n">NULL</span> <span class="n">otherwise</span> -<span class="n">ppstring</span> <span class="n">ppobj_get_string</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPARRAY</span> <span class="n">returns</span> <span class="n">the</span> <span class="n">array</span><span class="p">,</span> <span class="n">NULL</span> <span class="n">otherwise</span> -<span class="n">pparray</span> <span class="o">*</span> <span class="n">ppobj_get_array</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPDICT</span> <span class="n">returns</span> <span class="n">the</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">NULL</span> <span class="n">otherwise</span> -<span class="n">ppdict</span> <span class="o">*</span> <span class="n">ppobj_get_dict</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPSTREAM</span> <span class="n">returns</span> <span class="n">the</span> <span class="n">stream</span><span class="p">,</span> <span class="n">NULL</span> <span class="n">otherwise</span> -<span class="n">ppstream</span> <span class="o">*</span> <span class="n">ppobj_get_stream</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> - -<span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPREF</span> <span class="n">returns</span> <span class="n">the</span> <span class="n">reference</span><span class="p">,</span> <span class="n">NULL</span> <span class="n">otherwise</span> -<span class="n">ppref</span> <span class="o">*</span> <span class="n">ppobj_get_ref</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> -</pre></div> -</div> -<p>Note the coercion from integer to real number, but not reverse. In practise, whenever you expect a real number, -you should also handle integer (eg. ‘1’ used instead of ‘1.0’).</p> -<p>It is a common case that the object is given as an indirect reference, but what you actually -want is not the reference, but the object referred by it. Here is a helper for it:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">//</span> <span class="k">if</span> <span class="n">o</span><span class="o">-></span><span class="nb">type</span> <span class="ow">is</span> <span class="n">PPREF</span><span class="p">,</span> <span class="n">returns</span> <span class="n">what</span> <span class="n">the</span> <span class="n">reference</span> <span class="n">points</span><span class="p">,</span> <span class="n">otherwise</span> <span class="n">returns</span> <span class="n">o</span> -<span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppobj_rget_obj</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> -</pre></div> -</div> -<p>Also every <code class="docutils literal notranslate"><span class="pre">ppobj_get_*</span></code> macro has <code class="docutils literal notranslate"><span class="pre">ppobj_rget_*</span></code> counterpart that makes a check -for the expected type, but if the object is PPREF, it jumps to the target object. -So for example <code class="docutils literal notranslate"><span class="pre">ppobj_rget_dict(obj)</span></code> will return dict if <code class="docutils literal notranslate"><span class="pre">obj</span></code> is of type PPDICT -or if it is of type PPREF and <code class="docutils literal notranslate"><span class="pre">obj->ref</span></code> hosts an object of type PPDICT.</p> -</div> -<div class="section" id="names"> -<h2>Names<a class="headerlink" href="#names" title="Permalink to this headline">¶</a></h2> -<p>PDF names are represented as <code class="docutils literal notranslate"><span class="pre">ppname</span></code>. -I find it convenient to have <code class="docutils literal notranslate"><span class="pre">ppname</span></code> type pretending <code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">char</span> <span class="pre">*</span></code>. This allows to use <code class="docutils literal notranslate"><span class="pre">ppname</span></code> -in all C-style string functions like <code class="docutils literal notranslate"><span class="pre">printf("%s",</span> <span class="pre">name)</span></code>.</p> -<p>Be aware, however, that <code class="docutils literal notranslate"><span class="pre">ppname</span></code> is actually a C-structure. It is perfectly ok to cast <code class="docutils literal notranslate"><span class="pre">ppname</span></code> to <code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">char</span> <span class="pre">*</span></code>:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppname</span> <span class="n">name</span><span class="p">;</span> -<span class="o">...</span> -<span class="p">(</span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="p">)</span><span class="n">name</span><span class="p">;</span> -</pre></div> -</div> -<p>But reverse is forbidden:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">cstr</span> <span class="o">=</span> <span class="s2">"cstring"</span><span class="p">;</span> -<span class="o">...</span> -<span class="p">(</span><span class="n">ppname</span><span class="p">)</span><span class="n">cstr</span><span class="p">;</span> <span class="o">//</span> <span class="n">expect</span> <span class="n">segmentation</span> <span class="n">fault</span> <span class="n">soon</span> -</pre></div> -</div> -<p>For convenient use in C, names are <code class="docutils literal notranslate"><span class="pre">'\0'</span></code> terminated. But to get the length of name better always use -<code class="docutils literal notranslate"><span class="pre">ppname_size()</span></code> macro. <code class="docutils literal notranslate"><span class="pre">ppname</span></code> object knows its size, don’t use <code class="docutils literal notranslate"><span class="pre">strlen()</span></code>:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">size_t</span> <span class="n">ppname_size</span><span class="p">(</span><span class="n">ppname</span> <span class="n">name</span><span class="p">);</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">length</span> <span class="n">of</span> <span class="n">name</span> <span class="ow">in</span> <span class="nb">bytes</span> -</pre></div> -</div> -<p>In current implementation names are not hashed anyhow, so name-to-name comparison is not smarter than <code class="docutils literal notranslate"><span class="pre">memcmp()</span></code>. -Use macros:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">int</span> <span class="n">ppname_is</span><span class="p">(</span><span class="n">ppname</span> <span class="n">name</span><span class="p">,</span> <span class="s2">"literal"</span><span class="p">);</span> <span class="o">//</span> <span class="n">to</span> <span class="n">compare</span> <span class="n">ppname</span> <span class="k">with</span> <span class="n">C</span><span class="o">-</span><span class="n">literal</span> <span class="n">string</span> -<span class="nb">int</span> <span class="n">ppname_eq</span><span class="p">(</span><span class="n">ppname</span> <span class="n">name</span><span class="p">,</span> <span class="n">ppname</span> <span class="n">other</span><span class="p">);</span> <span class="o">//</span> <span class="n">to</span> <span class="n">compare</span> <span class="n">ppname</span> <span class="k">with</span> <span class="n">a</span> <span class="n">different</span> <span class="n">name</span> -</pre></div> -</div> -<p>If you’ll use <code class="docutils literal notranslate"><span class="pre">pplib</span></code> to parse contents streams, you may need to distinguish names from operators -(more precisely executable names). Names in PDF are preceeded by ‘/’, executable names aren’t. In both -cases PDF parser will produce <code class="docutils literal notranslate"><span class="pre">ppname</span></code> but can be distingushed with:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">int</span> <span class="n">ppname_exec</span><span class="p">(</span><span class="n">ppname</span> <span class="n">name</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">non</span><span class="o">-</span><span class="n">zero</span> <span class="k">if</span> <span class="n">name</span> <span class="ow">is</span> <span class="n">executable</span> -</pre></div> -</div> -<p>Names are kept in their raw form, with possible PDF specific escapes (in text below we call it <strong>encoded</strong> form). -Leading ‘/’ is omitted, though. One may need a decoded name, with no PDF escapes. -A pair of functions provides a simple interface to switch between those two forms:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppname</span> <span class="n">ppname_decoded</span> <span class="p">(</span><span class="n">ppname</span> <span class="n">name</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">decoded</span> <span class="p">(</span><span class="n">unescaped</span><span class="p">)</span> <span class="n">form</span> <span class="n">of</span> <span class="n">the</span> <span class="n">name</span> -<span class="n">ppname</span> <span class="n">ppname_encoded</span> <span class="p">(</span><span class="n">ppname</span> <span class="n">name</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">encoded</span> <span class="p">(</span><span class="n">escaped</span><span class="p">)</span> <span class="n">form</span> <span class="n">of</span> <span class="n">the</span> <span class="n">name</span> -</pre></div> -</div> -<p>In pretty most cases PDF names contains only letters (no special characters, no escapes), so decoded and encoded forms are identical. -In that case both functions simply return the argument. It is ok to call <code class="docutils literal notranslate"><span class="pre">ppname_decoded()</span></code> on already decoded form -and <code class="docutils literal notranslate"><span class="pre">ppname_encoded()</span></code> on already encoded form. Both forms are produced by PDF objects parser, so accessing <code class="docutils literal notranslate"><span class="pre">ppname</span></code> alter ego -in whatever direction needs no extra decoding or allocation costs.</p> -</div> -<div class="section" id="string"> -<h2>String<a class="headerlink" href="#string" title="Permalink to this headline">¶</a></h2> -<p>PDF strings have the same internal construction as names, so most of names description above applies to strings as well. -<code class="docutils literal notranslate"><span class="pre">ppstring</span></code> is a typedef of <code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">char</span> <span class="pre">*</span></code>, roughly <code class="docutils literal notranslate"><span class="pre">'\0'</span></code> terminiated C-string. To get the size of the string:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">size_t</span> <span class="n">ppstring_size</span><span class="p">(</span><span class="n">ppstring</span> <span class="n">string</span><span class="p">);</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">the</span> <span class="n">length</span> <span class="n">of</span> <span class="n">the</span> <span class="n">string</span> <span class="ow">in</span> <span class="nb">bytes</span> -</pre></div> -</div> -<p>Strings are provided in their raw form, preserving PDF specific escapes, but with no -<code class="docutils literal notranslate"><span class="pre">()</span></code> or <code class="docutils literal notranslate"><span class="pre"><></span></code> delims. To distinguish plain strings from hex strings:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">int</span> <span class="n">ppstring_hex</span><span class="p">(</span><span class="n">ppstring</span> <span class="n">string</span><span class="p">);</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">non</span> <span class="n">zero</span> <span class="k">if</span> <span class="nb">hex</span> <span class="n">string</span> -</pre></div> -</div> -<p>Or if you prefer:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>switch (ppstring_type(string)) -{ - case PPSTRING_PLAIN: // literal string, surrounded by ``(`` and ``)`` in PDF - break; - case PPSTRING_BASE16: // hex string, surrounded by ``<`` and ``>`` in PDF - break; - case PPSTRING_BASE85: // base85 string surrounded by ``<~`` and ``~>`` in PDF - break; -} -</pre></div> -</div> -<p>The last is actually Postscript specific, not used in PDF, but I think it might appear in contents streams… -No matter how the string is given in PDF (plain or hex), here are two functions to -switch between encoded and decoded strings forms:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppstring</span> <span class="n">ppstring_decoded</span> <span class="p">(</span><span class="n">ppstring</span> <span class="n">string</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">decoded</span> <span class="n">string</span> <span class="n">possibly</span> <span class="k">with</span> <span class="n">PDF</span> <span class="n">escapes</span> -<span class="n">ppstring</span> <span class="n">ppstring_encoded</span> <span class="p">(</span><span class="n">ppstring</span> <span class="n">string</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">encoded</span> <span class="n">string</span> <span class="k">with</span> <span class="n">no</span> <span class="n">PDF</span> <span class="n">escapes</span> -</pre></div> -</div> -<p>For hex strings, encoded form contains hex digits, while decoded form contains arbitrary bytes (the result of hex decoding). -Plain strings usually contains printable ASCII characters, but they might contain any binary data. -As with names, objects parser produces both forms. The raw form with PDF escapes (or raw hex form) is considered the main one. -Eg. when you access <code class="docutils literal notranslate"><span class="pre">obj->string</span></code> you always get the encoded form. At any moment you can switch to its alter ego.</p> -<p>No matter if the string is plain or hex, if its first two bytes (decoded) are UTF16 BOM, the string -is considered unicode. <code class="docutils literal notranslate"><span class="pre">ppstring</span></code> object <em>knows</em> it is unicode or not:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">switch</span> <span class="p">(</span><span class="n">ppstring_utf</span><span class="p">(</span><span class="n">string</span><span class="p">))</span> -<span class="p">{</span> - <span class="n">case</span> <span class="n">PPSTRING_UTF16LE</span><span class="p">:</span> <span class="o">//</span> <span class="n">unicode</span> <span class="n">string</span><span class="p">,</span> <span class="n">utf16le</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPSTRING_UTF16BE</span><span class="p">:</span> <span class="o">//</span> <span class="n">unicode</span> <span class="n">string</span><span class="p">,</span> <span class="n">utf16be</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">default</span><span class="p">:</span> <span class="o">//</span> <span class="n">no</span> <span class="n">unicode</span> -<span class="p">}</span> -</pre></div> -</div> -<p>Or simply:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">if</span> <span class="p">(</span><span class="n">ppstring_utf</span><span class="p">(</span><span class="n">string</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> - <span class="o">//</span> <span class="n">handle</span> <span class="n">unicode</span> <span class="n">string</span> -<span class="p">}</span> -</pre></div> -</div> -<p>If the string is unicode, BOM remains the part of the string – <code class="docutils literal notranslate"><span class="pre">pplib</span></code> parser does not strip it. -Unicode or not, encoded or decoded, strings are always C-arrays of bytes and <code class="docutils literal notranslate"><span class="pre">ppstring_size()</span></code> -always returns the size in bytes.</p> -</div> -<div class="section" id="array"> -<h2>Array<a class="headerlink" href="#array" title="Permalink to this headline">¶</a></h2> -<p>PDF arrays are represented as <code class="docutils literal notranslate"><span class="pre">pparray</span></code> type, which is C-array of <code class="docutils literal notranslate"><span class="pre">ppobj</span></code> structures. -To get the size:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">size_t</span> <span class="n">pparray_size</span><span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">the</span> <span class="n">number</span> <span class="n">of</span> <span class="n">array</span> <span class="n">items</span> -</pre></div> -</div> -<p>To get <code class="docutils literal notranslate"><span class="pre">ppobj</span> <span class="pre">*</span></code> at a given index:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppobj</span> <span class="o">*</span> <span class="n">pparray_at</span><span class="p">(</span><span class="n">array</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">ppobj</span> <span class="o">*</span> <span class="p">(</span><span class="n">no</span> <span class="n">index</span> <span class="n">check</span><span class="p">)</span> -<span class="n">ppobj</span> <span class="o">*</span> <span class="n">pparray_get</span><span class="p">(</span><span class="n">array</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">ppobj</span> <span class="o">*</span> <span class="ow">or</span> <span class="n">NULL</span> <span class="p">(</span><span class="k">with</span> <span class="n">index</span> <span class="n">check</span><span class="p">)</span> -<span class="n">ppobj</span> <span class="o">*</span> <span class="n">pparray_get_obj</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> <span class="o">//</span> <span class="n">function</span> <span class="n">equiv</span> <span class="n">to</span> <span class="n">pparray_get</span><span class="p">()</span> -</pre></div> -</div> -<p>Iterating over array elements:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">;</span> -<span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="n">size</span><span class="p">;</span> -<span class="n">ppobj</span> <span class="o">*</span><span class="n">obj</span><span class="p">;</span> -<span class="k">for</span> <span class="p">(</span><span class="n">size</span> <span class="o">=</span> <span class="n">pparray_size</span><span class="p">(</span><span class="n">array</span><span class="p">),</span> <span class="n">pparray_first</span><span class="p">(</span><span class="n">array</span><span class="p">,</span> <span class="n">index</span><span class="p">,</span> <span class="n">obj</span><span class="p">);</span> <span class="n">index</span> <span class="o"><</span> <span class="n">size</span><span class="p">;</span> <span class="n">pparray_next</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="n">obj</span><span class="p">))</span> -<span class="p">{</span> - <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">index</span> <span class="ow">and</span> <span class="n">obj</span> -<span class="p">}</span> -</pre></div> -</div> -<p>There is no magic first/next macros, just iteration over pointers. One could also use something like:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">for</span> <span class="p">(</span><span class="n">index</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">size</span> <span class="o">=</span> <span class="n">array</span><span class="o">-></span><span class="n">size</span><span class="p">;</span> <span class="n">index</span> <span class="o"><</span> <span class="n">size</span><span class="p">;</span> <span class="o">++</span><span class="n">index</span><span class="p">)</span> -<span class="p">{</span> - <span class="n">obj</span> <span class="o">=</span> <span class="n">pparray_at</span><span class="p">(</span><span class="n">array</span><span class="p">,</span> <span class="n">index</span><span class="p">);</span> - <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">index</span> <span class="ow">and</span> <span class="n">obj</span> -<span class="p">}</span> -</pre></div> -</div> -<p>When getting values from array and expecting a result of known type, use one of the following:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">int</span> <span class="n">pparray_get_bool</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="nb">int</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">boolean</span> <span class="n">value</span> -<span class="nb">int</span> <span class="n">pparray_get_int</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="n">ppint</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">ppint</span> <span class="n">value</span> -<span class="nb">int</span> <span class="n">pparray_get_uint</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="n">ppuint</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">ppuint</span> <span class="n">value</span> -<span class="nb">int</span> <span class="n">pparray_get_num</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="n">ppnum</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">ppnum</span> <span class="n">value</span> -<span class="n">ppname</span> <span class="n">pparray_get_name</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">ppname</span> <span class="n">value</span> -<span class="n">ppstring</span> <span class="n">pparray_get_string</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">ppstring</span> <span class="n">value</span> -<span class="n">pparray</span> <span class="o">*</span> <span class="n">pparray_get_array</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">pparray</span> <span class="o">*</span> <span class="n">value</span> -<span class="n">ppdict</span> <span class="o">*</span> <span class="n">pparray_get_dict</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">ppdict</span> <span class="o">*</span> <span class="n">value</span> -<span class="n">ppref</span> <span class="o">*</span> <span class="n">pparray_get_ref</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">ppref</span> <span class="o">*</span> <span class="n">value</span> -</pre></div> -</div> -<p>As with <code class="docutils literal notranslate"><span class="pre">ppobj_get_*</span></code> suite, numeric types getters set the value of a given type and returns 1, if the type matches. -Otherwise sets nothing and returns 0. Other getters return the value if the type matches, or NULL.</p> -<p>Every function from <code class="docutils literal notranslate"><span class="pre">pparray_get_*</span></code> suite have its <code class="docutils literal notranslate"><span class="pre">pparray_rget_*</span></code> counterpart that -that dereferences indirect objects (as explained for <code class="docutils literal notranslate"><span class="pre">ppobj_rget_*</span></code> getters). Note that -there is no <code class="docutils literal notranslate"><span class="pre">pparray_get_stream()</span></code> function, as streams in PDF are always indirect. -To get the stream from array use:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppstream</span> <span class="o">*</span> <span class="n">pparray_rget_stream</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> -</pre></div> -</div> -</div> -<div class="section" id="dict"> -<h2>Dict<a class="headerlink" href="#dict" title="Permalink to this headline">¶</a></h2> -<p>PDF dicts are represented as <code class="docutils literal notranslate"><span class="pre">ppdict</span></code> structure, which is C-array of <code class="docutils literal notranslate"><span class="pre">ppobj</span></code> with parallel -C-array of <code class="docutils literal notranslate"><span class="pre">ppname</span></code> pointers. To get the size of a dict:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">size_t</span> <span class="n">ppdict_size</span><span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">the</span> <span class="n">number</span> <span class="n">of</span> <span class="n">key</span><span class="o">-</span><span class="n">val</span> <span class="n">pairs</span> -</pre></div> -</div> -<p>To get the value at a given index (integer):</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppdict_at</span><span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">no</span> <span class="n">index</span> <span class="n">check</span> -</pre></div> -</div> -<p>To get the name (key) at a given index:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppname</span> <span class="n">ppdict_key</span><span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">no</span> <span class="n">index</span> <span class="n">check</span> -</pre></div> -</div> -<p>To iterate over dict key-val pairs:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">;</span> -<span class="n">ppname</span> <span class="o">*</span><span class="n">pkey</span><span class="p">;</span> -<span class="n">ppobj</span> <span class="o">*</span><span class="n">obj</span><span class="p">;</span> - -<span class="k">for</span> <span class="p">(</span><span class="n">ppdict_first</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">pkey</span><span class="p">,</span> <span class="n">obj</span><span class="p">);</span> <span class="o">*</span><span class="n">pkey</span> <span class="o">!=</span> <span class="n">NULL</span><span class="p">;</span> <span class="n">ppdict_next</span><span class="p">(</span><span class="n">pkey</span><span class="p">,</span> <span class="n">obj</span><span class="p">))</span> -<span class="p">{</span> - <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="o">*</span><span class="n">pkey</span> <span class="ow">and</span> <span class="n">obj</span> -<span class="p">}</span> -</pre></div> -</div> -<p>There is no magic in first/next macros, just iteration through keys and values lists pointers. -For convenient iteration, a list of keys is terminated with NULL, so in the code above <code class="docutils literal notranslate"><span class="pre">*pkey</span> <span class="pre">!=</span> <span class="pre">NULL</span></code> -is used as the loop condition. One may also iterate via indices:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">;</span> -<span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="n">size</span><span class="p">;</span> -<span class="n">ppname</span> <span class="n">key</span><span class="p">;</span> -<span class="n">ppobj</span> <span class="o">*</span><span class="n">obj</span><span class="p">;</span> -<span class="k">for</span> <span class="p">(</span><span class="n">index</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">size</span> <span class="o">=</span> <span class="n">ppdict_size</span><span class="p">(</span><span class="nb">dict</span><span class="p">);</span> <span class="n">index</span> <span class="o"><</span> <span class="n">size</span><span class="p">;</span> <span class="o">++</span><span class="n">index</span><span class="p">)</span> -<span class="p">{</span> - <span class="n">key</span> <span class="o">=</span> <span class="n">ppdict_key</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">index</span><span class="p">);</span> - <span class="n">obj</span> <span class="o">=</span> <span class="n">ppdict_at</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">index</span><span class="p">);</span> - <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">key</span> <span class="ow">and</span> <span class="n">obj</span> -<span class="p">}</span> -</pre></div> -</div> -<p>To get the object associated with a given name, use one of the following:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppdict_get_obj</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="nb">int</span> <span class="n">ppdict_get_bool</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="nb">int</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="nb">int</span> <span class="n">ppdict_get_int</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">ppint</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="nb">int</span> <span class="n">ppdict_get_uint</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">ppuint</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="nb">int</span> <span class="n">ppdict_get_num</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">ppnum</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="n">ppname</span> <span class="n">ppdict_get_name</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">ppstring</span> <span class="n">ppdict_get_string</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">pparray</span> <span class="o">*</span> <span class="n">ppdict_get_array</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">ppdict</span> <span class="o">*</span> <span class="n">ppdict_get_dict</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">ppref</span> <span class="o">*</span> <span class="n">ppdict_get_ref</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -</pre></div> -</div> -<p>Note that all getters accepts <code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">char</span> <span class="pre">*</span></code> as key, so it is ok to say:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdict_rget_dict</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="s2">"Resources"</span><span class="p">);</span> -</pre></div> -</div> -<p>as well as:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdic_rget_dict</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">name</span><span class="p">);</span> <span class="o">//</span> <span class="n">ppname</span> <span class="n">name</span> -</pre></div> -</div> -<p>Every <code class="docutils literal notranslate"><span class="pre">ppdict_get_*</span></code> getter has <code class="docutils literal notranslate"><span class="pre">ppdict_rget_*</span></code> counterpart that dereferences -indirect objects if necessary. Note that there is no <code class="docutils literal notranslate"><span class="pre">ppdict_get_stream()</span></code> function, -but there is:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppstream</span> <span class="o">*</span> <span class="n">ppdict_rget_stream</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -</pre></div> -</div> -<p>So far dicts comes with no names mapping, so by-name dict accessors perform a linear search -through the keys list. PDF dicts are usually small, so it is fast enough. -Building names lookup for every dict in PDF makes no sense I think, as <code class="docutils literal notranslate"><span class="pre">pplib</span></code> applications -will query just several dicts I guess.. However, some apps may extensively query -resources, which may refer to hundreds of objects (eg. images). So some mapping for dicts -is still considered.</p> -</div> -<div class="section" id="stream"> -<h2>Stream<a class="headerlink" href="#stream" title="Permalink to this headline">¶</a></h2> -<p>PDF streams are represented as <code class="docutils literal notranslate"><span class="pre">ppstream</span></code> objects. To get the stream dict:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdict</span> <span class="o">*</span> <span class="n">ppstream_dict</span><span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span> -</pre></div> -</div> -<p>To read the stream data:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">uint8_t</span> <span class="o">*</span> <span class="n">ppstream_first</span> <span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">size</span><span class="p">,</span> <span class="nb">int</span> <span class="n">decode</span><span class="p">);</span> -<span class="n">uint8_t</span> <span class="o">*</span> <span class="n">ppstream_next</span> <span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">size</span><span class="p">);</span> -<span class="n">void</span> <span class="n">ppstream_done</span> <span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">);</span> -</pre></div> -</div> -<p>Both <code class="docutils literal notranslate"><span class="pre">first`</span> <span class="pre">and</span> <span class="pre">``next</span></code> functions return a chunk of stream data and sets the <code class="docutils literal notranslate"><span class="pre">size</span></code> of the chunk. -<code class="docutils literal notranslate"><span class="pre">decode</span></code> parameter tell the reader to decompress the stream (1) or return raw (0). A call to <code class="docutils literal notranslate"><span class="pre">ppstream_next()</span></code> -must be preceeded by <code class="docutils literal notranslate"><span class="pre">ppstream_first()</span></code>. Once you’re done with the stream, you have to call <code class="docutils literal notranslate"><span class="pre">ppstream_done()</span></code>, -no matter if the stream has been read to the end or not. The stream data iterator in use:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">uint8_t</span> <span class="o">*</span><span class="n">data</span><span class="p">;</span> -<span class="n">size_t</span> <span class="n">size</span><span class="p">;</span> -<span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">;</span> -<span class="nb">int</span> <span class="n">decode</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> <span class="o">//</span> <span class="mi">1</span> <span class="o">-</span> <span class="n">get</span> <span class="n">decompressed</span><span class="p">,</span> <span class="mi">0</span> <span class="o">-</span> <span class="n">get</span> <span class="n">raw</span> - -<span class="k">for</span> <span class="p">(</span><span class="n">data</span> <span class="o">=</span> <span class="n">ppstream_first</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="n">decode</span><span class="p">);</span> <span class="n">data</span> <span class="o">!=</span> <span class="n">NULL</span><span class="p">;</span> <span class="n">data</span> <span class="o">=</span> <span class="n">ppstream_next</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">))</span> -<span class="p">{</span> - <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">data</span> <span class="ow">and</span> <span class="n">its</span> <span class="n">size</span> -<span class="p">}</span> -<span class="n">ppstream_done</span><span class="p">(</span><span class="n">stream</span><span class="p">);</span> -</pre></div> -</div> -<p>Every subsequent iterator call invalidates the previous reader output, so you have to utilize the returned chunk -of data just after you ot that. So the following is wrong:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">data1</span> <span class="o">=</span> <span class="n">ppstream_first</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> -<span class="n">data2</span> <span class="o">=</span> <span class="n">ppstream_next</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">);</span> -<span class="n">data3</span> <span class="o">=</span> <span class="n">ppstream_next</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">);</span> -<span class="n">some_output</span><span class="p">(</span><span class="n">data1</span><span class="p">,</span> <span class="n">size</span><span class="p">);</span> -<span class="n">some_output</span><span class="p">(</span><span class="n">data2</span><span class="p">,</span> <span class="n">size</span><span class="p">);</span> -</pre></div> -</div> -<p>The reader calls usually return the same pointer to internal buffer, just filled with a different data. -<code class="docutils literal notranslate"><span class="pre">pplib</span></code> allocates reasonably large buffer and fills that buffer on subsequent calls to the reader.</p> -<p>If the source stream has no compression, using both <code class="docutils literal notranslate"><span class="pre">decode</span> <span class="pre">==</span> <span class="pre">1</span></code> and <code class="docutils literal notranslate"><span class="pre">decode</span> <span class="pre">==</span> <span class="pre">0</span></code> should give the same result. -You can check if the stream is actually compressed with:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppstream_compressed</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">non</span> <span class="n">zero</span> <span class="k">if</span> <span class="o">/</span><span class="n">Filter</span> <span class="ow">is</span> <span class="n">present</span> -</pre></div> -</div> -<p>It might be necessary to load the entire stream data at once:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">uint8_t</span> <span class="o">*</span> <span class="n">ppstream_all</span> <span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">size</span><span class="p">,</span> <span class="nb">int</span> <span class="n">decode</span><span class="p">);</span> -</pre></div> -</div> -<p>If the initial buffer size is insufficient, it grows until the entire stream data is loaded. You must call -<code class="docutils literal notranslate"><span class="pre">ppstream_done(stream)</span></code> after using returned data.</p> -<p><code class="docutils literal notranslate"><span class="pre">ppstream_done()</span></code> doesn’t invalidate the stream object, it just closes its internal reader. -The stream itself remains a valid object (eg. one can read it again if necessary), -but the reader buffer is released. It is actually not freed but kept for future the reuse with that on some other stream, -but you still need to mark it ready for reuse to avoid allocating a separate buffer for every stream you’re going to read.</p> -<p>Stream data readers will return <code class="docutils literal notranslate"><span class="pre">NULL</span></code> if you haven’t close the previous reader process with <code class="docutils literal notranslate"><span class="pre">ppstream_done()</span></code>. All below is wrong:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">data1</span> <span class="o">=</span> <span class="n">ppstream_all</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> -<span class="n">data2</span> <span class="o">=</span> <span class="n">ppstream_all</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> <span class="o">//</span> <span class="n">data2</span> <span class="o">==</span> <span class="n">NULL</span> -<span class="o">//</span> <span class="ow">or</span> -<span class="n">data1</span> <span class="o">=</span> <span class="n">ppstream_first</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> -<span class="n">data2</span> <span class="o">=</span> <span class="n">ppstream_first</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> <span class="o">//</span> <span class="n">data2</span> <span class="o">==</span> <span class="n">NULL</span> -<span class="o">//</span> <span class="ow">or</span> -<span class="n">data1</span> <span class="o">=</span> <span class="n">ppstream_first</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> -<span class="n">data2</span> <span class="o">=</span> <span class="n">ppstream_all</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> <span class="o">//</span> <span class="n">data2</span> <span class="o">==</span> <span class="n">NULL</span> -</pre></div> -</div> -<p>To avoid unnecessary dependencies, <code class="docutils literal notranslate"><span class="pre">pplib</span></code> does not support image filters (<code class="docutils literal notranslate"><span class="pre">/DCT</span></code>, <code class="docutils literal notranslate"><span class="pre">/JPX</span></code>, <code class="docutils literal notranslate"><span class="pre">/JBIG</span></code>, <code class="docutils literal notranslate"><span class="pre">/CCITT</span></code>). -But it is ok to read the stream with <code class="docutils literal notranslate"><span class="pre">decode</span></code> set to 1 on such streams. <code class="docutils literal notranslate"><span class="pre">pplib</span></code> assumes that the image is the -final/target stream form and just returns it as-is. Eg. in the case of JPEG (<code class="docutils literal notranslate"><span class="pre">/DCT</span></code> filtered) image both calls should -give the same results:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppstream_all</span><span class="p">(</span><span class="n">jpegstream</span><span class="p">,</span> <span class="o">&</span><span class="n">jpegsize</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> <span class="o">//</span> <span class="n">don</span><span class="s1">'t decode, return what'</span><span class="n">s</span> <span class="n">there</span> -<span class="n">ppstream_all</span><span class="p">(</span><span class="n">jpegstream</span><span class="p">,</span> <span class="o">&</span><span class="n">jpegsize</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> <span class="o">//</span> <span class="n">decode</span> <span class="n">but</span> <span class="n">found</span> <span class="n">image</span> <span class="nb">filter</span><span class="p">,</span> <span class="n">effectively</span> <span class="n">the</span> <span class="n">same</span> -</pre></div> -</div> -<p>A bit more about streams memory. As mentioned, <code class="docutils literal notranslate"><span class="pre">pplib</span></code> allocates buffers for stream readers. After <code class="docutils literal notranslate"><span class="pre">ppstream_done()</span></code>, -the stream no longer <em>owns</em> the buffer space. But the buffer may remain allocated, to be reused with future readers. -<code class="docutils literal notranslate"><span class="pre">pplib</span></code> keeps a pool of several buffers. This means, that when you use stream readers, <code class="docutils literal notranslate"><span class="pre">pplib</span></code> eats -some memory (1MB or so) that is not freed, even if no streams are used. And even if you free all objects. -If you suffer from this, you can optionally use a pair of functions:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">ppstream_init_buffers</span> <span class="p">(</span><span class="n">void</span><span class="p">);</span> -<span class="n">void</span> <span class="n">ppstream_free_buffers</span> <span class="p">(</span><span class="n">void</span><span class="p">);</span> -</pre></div> -</div> -<p>The first initializes buffers pool, unless done so far. Currently <code class="docutils literal notranslate"><span class="pre">pplib</span></code> cares of it before opening every stream reader, -so it is not obligatory. The second frees a pool of buffers. The intended use is to call <code class="docutils literal notranslate"><span class="pre">ppstream_init_buffers()</span></code> once -as kind of library initializer and to call <code class="docutils literal notranslate"><span class="pre">ppstream_free_buffers()</span></code> once, as the library finalizer.</p> -</div> -<div class="section" id="filters"> -<h2>Filters<a class="headerlink" href="#filters" title="Permalink to this headline">¶</a></h2> -<p>In version v1.00 (20190916) <code class="docutils literal notranslate"><span class="pre">ppstream</span></code> API has been extended with filters information. -<code class="docutils literal notranslate"><span class="pre">ppstream</span></code> knows its filter(s) and keps it as <code class="docutils literal notranslate"><span class="pre">stream->filter</span></code>:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">//</span> <span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">;</span> -<span class="n">ppstream_filter</span> <span class="o">*</span><span class="n">info</span> <span class="o">=</span> <span class="o">&</span><span class="n">stream</span><span class="o">-></span><span class="nb">filter</span><span class="p">;</span> -</pre></div> -</div> -<p><code class="docutils literal notranslate"><span class="pre">ppstream_filter</span></code> is the following structure:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">typedef</span> <span class="n">struct</span> <span class="p">{</span> - <span class="n">ppstreamtp</span> <span class="o">*</span><span class="n">filters</span><span class="p">;</span> <span class="o">//</span> <span class="n">c</span><span class="o">-</span><span class="n">array</span> <span class="n">of</span> <span class="nb">filter</span> <span class="n">identifiers</span> <span class="p">(</span><span class="n">enum</span> <span class="n">integers</span><span class="p">)</span> - <span class="n">ppdict</span> <span class="o">**</span><span class="n">params</span><span class="p">;</span> <span class="o">//</span> <span class="n">c</span><span class="o">-</span><span class="n">array</span> <span class="n">of</span> <span class="n">ppdict</span> <span class="n">pointers</span> - <span class="n">size_t</span> <span class="n">count</span><span class="p">;</span> <span class="o">//</span> <span class="n">number</span> <span class="n">of</span> <span class="n">filters</span><span class="p">,</span> <span class="n">length</span> <span class="n">of</span> <span class="n">the</span> <span class="n">arrays</span> <span class="p">(</span><span class="n">typically</span> <span class="mi">1</span><span class="p">)</span> -<span class="p">}</span> <span class="n">ppstream_filter</span><span class="p">;</span> -</pre></div> -</div> -<p>If <code class="docutils literal notranslate"><span class="pre">count</span> <span class="pre">></span> <span class="pre">0</span></code> then <code class="docutils literal notranslate"><span class="pre">filters</span></code> member is not NULL. Filters array keeps integer constants:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">PPSTREAM_BASE16</span> <span class="o">/*</span> <span class="o">/</span><span class="n">ASCIIHexDecode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_BASE85</span> <span class="o">/*</span> <span class="o">/</span><span class="n">ASCII85Decode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_RUNLENGTH</span> <span class="o">/*</span> <span class="o">/</span><span class="n">RunLengthDecode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_FLATE</span> <span class="o">/*</span> <span class="o">/</span><span class="n">FlateDecode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_LZW</span> <span class="o">/*</span> <span class="o">/</span><span class="n">LZWDecode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_CCITT</span> <span class="o">/*</span> <span class="o">/</span><span class="n">CCITTFaxDecode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_DCT</span> <span class="o">/*</span> <span class="o">/</span><span class="n">DCTDecode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_JBIG2</span> <span class="o">/*</span> <span class="o">/</span><span class="n">JBIG2Decode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_JPX</span> <span class="o">/*</span> <span class="o">/</span><span class="n">JPXDecode</span> <span class="o">*/</span> -<span class="n">PPSTREAM_CRYPT</span> <span class="o">/*</span> <span class="o">/</span><span class="n">Crypt</span> <span class="o">*/</span> -</pre></div> -</div> -<p>Params array keeps corresponding filter parameters (<code class="docutils literal notranslate"><span class="pre">/DecodeParms</span></code>) if present. <code class="docutils literal notranslate"><span class="pre">params</span></code> member is not NULL -if <code class="docutils literal notranslate"><span class="pre">count</span> <span class="pre">></span> <span class="pre">0</span></code> and the stream dict has <code class="docutils literal notranslate"><span class="pre">/DecodeParms</span></code> entry. Even if <code class="docutils literal notranslate"><span class="pre">params</span></code> is there, -for every N-th filter, <code class="docutils literal notranslate"><span class="pre">params[N]</span></code> may be NULL (corresponding to PDF <code class="docutils literal notranslate"><span class="pre">null</span></code>).</p> -<p><code class="docutils literal notranslate"><span class="pre">stream->filter</span></code> keeps the source stream filter information, which may not correspond to the result of stream readers -(<code class="docutils literal notranslate"><span class="pre">ppstream_first()</span></code>, <code class="docutils literal notranslate"><span class="pre">ppstream_next()</span></code>, <code class="docutils literal notranslate"><span class="pre">ppstream_all()</span></code>). The get the filters info relevant to the result from readers:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">ppstream_filter_info</span> <span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">ppstream_filter</span> <span class="o">*</span><span class="n">info</span><span class="p">,</span> <span class="nb">int</span> <span class="n">decode</span><span class="p">);</span> -</pre></div> -</div> -<p>The function fills <code class="docutils literal notranslate"><span class="pre">ppstream_filter</span></code> structure according to the expected result from stream readers (example 3 shows -how to use it to reconstruct <code class="docutils literal notranslate"><span class="pre">/Filter</span></code> and <code class="docutils literal notranslate"><span class="pre">/DecodeParms</span></code> when copying the stream to some other PDF).</p> -<p>To convert filter identifier (<code class="docutils literal notranslate"><span class="pre">ppstreamtp</span></code>) to a corresponding PDF filter name:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span> <span class="n">ppstream_filter_name</span><span class="p">[];</span> -</pre></div> -</div> -<p>To covert <code class="docutils literal notranslate"><span class="pre">ppname</span></code> to filter identifier:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">int</span> <span class="n">ppstream_filter_type</span> <span class="p">(</span><span class="n">ppname</span> <span class="n">filtername</span><span class="p">,</span> <span class="n">ppstreamtp</span> <span class="o">*</span><span class="n">filtertype</span><span class="p">);</span> -<span class="o">//</span> <span class="n">returns</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">sets</span> <span class="n">filtertype</span> <span class="k">if</span> <span class="n">filtername</span> <span class="ow">is</span> <span class="n">the</span> <span class="n">proper</span> <span class="nb">filter</span> <span class="n">name</span> -</pre></div> -</div> -<p>Additional information about the stream can be fetched from macros:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppstream_compressed</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span> <span class="o">/*</span> <span class="n">stream</span><span class="o">-></span><span class="n">flags</span> <span class="o">&</span> <span class="p">(</span><span class="n">PPSTREAM_FILTER</span><span class="o">|</span><span class="n">PPSTREAM_IMAGE</span><span class="p">)</span> <span class="o">*/</span> -<span class="n">ppstream_filtered</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span> <span class="o">/*</span> <span class="n">stream</span><span class="o">-></span><span class="n">flags</span> <span class="o">&</span> <span class="n">PPSTREAM_FILTER</span> <span class="o">*/</span> -<span class="n">ppstream_image</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span> <span class="o">/*</span> <span class="n">stream</span><span class="o">-></span><span class="n">flags</span> <span class="o">*</span> <span class="n">PPSTREAM_IMAGE</span> <span class="o">*/</span> -</pre></div> -</div> -<p><code class="docutils literal notranslate"><span class="pre">stream->flags</span></code> is a binary sum of the following:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">PPSTREAM_FILTER</span> <span class="o">/*</span> <span class="nb">set</span> <span class="n">iff</span> <span class="n">the</span> <span class="n">stream</span> <span class="n">filters</span> <span class="nb">list</span> <span class="n">has</span> <span class="n">one</span> <span class="n">of</span><span class="p">:</span> <span class="n">BASE16</span><span class="p">,</span> <span class="n">BASE85</span><span class="p">,</span> <span class="n">RUNLENGTH</span><span class="p">,</span> <span class="n">FLATE</span><span class="p">,</span> <span class="n">LZW</span> <span class="o">*/</span> -<span class="n">PPSTREAM_IMAGE</span> <span class="o">/*</span> <span class="nb">set</span> <span class="n">iff</span> <span class="n">the</span> <span class="n">stream</span> <span class="n">filters</span> <span class="nb">list</span> <span class="n">has</span> <span class="n">one</span> <span class="n">of</span><span class="p">:</span> <span class="n">CCITT</span><span class="p">,</span> <span class="n">DCT</span><span class="p">,</span> <span class="n">JBIG2</span><span class="p">,</span> <span class="n">JPX</span> <span class="o">*/</span> -<span class="n">PPSTREAM_ENCRYPTED</span> <span class="o">/*</span> <span class="nb">set</span> <span class="n">iff</span> <span class="n">the</span> <span class="n">stream</span> <span class="ow">is</span> <span class="n">encrypted</span> <span class="o">*/</span> -<span class="n">PPSTREAM_ENCRYPTED_OWN</span> <span class="o">/*</span> <span class="nb">set</span> <span class="n">iff</span> <span class="n">the</span> <span class="n">stream</span> <span class="n">has</span> <span class="n">own</span> <span class="n">CRYPT</span> <span class="nb">filter</span> <span class="o">*/</span> -</pre></div> -</div> -<p>Note that <code class="docutils literal notranslate"><span class="pre">PPSTREAM_COMPRESSED</span></code> is not there any longer, use <code class="docutils literal notranslate"><span class="pre">ppstream_compressed()</span></code> instead. -And there is some more, see <code class="docutils literal notranslate"><span class="pre">ppapi.h</span></code>.</p> -</div> -<div class="section" id="ref"> -<h2>Ref<a class="headerlink" href="#ref" title="Permalink to this headline">¶</a></h2> -<p>Indirect objects are represented as <code class="docutils literal notranslate"><span class="pre">ppref</span></code> structure. To get the object that the -reference refers to:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppref_obj</span><span class="p">(</span><span class="n">ppref</span> <span class="o">*</span><span class="n">ref</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span> -</pre></div> -</div> -<p><code class="docutils literal notranslate"><span class="pre">ppref</span></code> structure also keeps the reference number and version, a pointer to cross reference table it belongs -to and others, but I guess you won’t need anything but the referenced object. <code class="docutils literal notranslate"><span class="pre">pplib</span></code> parser resolves references -on-fly. So if there is a dict with indirect objects:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o"><<</span> - <span class="o">/</span><span class="n">Type</span> <span class="o">/</span><span class="n">Page</span> - <span class="o">/</span><span class="n">Resources</span> <span class="mi">123</span> <span class="mi">0</span> <span class="n">R</span> - <span class="o">...</span> -<span class="o">>></span> -</pre></div> -</div> -<p>the parser will produce <code class="docutils literal notranslate"><span class="pre">ppdict</span></code> with <code class="docutils literal notranslate"><span class="pre">Resources</span></code> key pointing the proper <code class="docutils literal notranslate"><span class="pre">ppref</span> <span class="pre">*</span></code> value. -If you need more, access <code class="docutils literal notranslate"><span class="pre">ppref</span></code> members:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">struct</span> <span class="n">ppref</span> <span class="p">{</span> - <span class="n">ppobj</span> <span class="nb">object</span><span class="p">;</span> <span class="o">//</span> <span class="n">target</span> <span class="nb">object</span> - <span class="n">ppuint</span> <span class="n">number</span><span class="p">,</span> <span class="n">version</span><span class="p">;</span> <span class="o">//</span> <span class="n">identifiers</span> - <span class="n">size_t</span> <span class="n">offset</span><span class="p">;</span> <span class="o">//</span> <span class="n">file</span> <span class="n">offset</span> <span class="p">(</span><span class="n">useless</span> <span class="k">for</span> <span class="n">you</span><span class="p">,</span> <span class="n">may</span> <span class="n">be</span> <span class="n">zero</span> <span class="k">for</span> <span class="n">compressed</span> <span class="n">objects</span><span class="p">)</span> - <span class="n">ppuint</span> <span class="n">length</span><span class="p">;</span> <span class="o">//</span> <span class="n">the</span> <span class="n">length</span> <span class="n">of</span> <span class="n">the</span> <span class="n">original</span> <span class="nb">object</span> <span class="n">data</span> - <span class="n">ppxref</span> <span class="o">*</span><span class="n">xref</span><span class="p">;</span> <span class="o">//</span> <span class="n">cross</span> <span class="n">reference</span> <span class="n">table</span> <span class="n">it</span> <span class="n">belongs</span> <span class="n">to</span> -<span class="p">};</span> -</pre></div> -</div> -</div> -<div class="section" id="xref"> -<h2>XRef<a class="headerlink" href="#xref" title="Permalink to this headline">¶</a></h2> -<p>Cross reference table is exposed as <code class="docutils literal notranslate"><span class="pre">ppxref</span></code> (incomplete type, you can only oprate on its pointer). -To get top document xref:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppxref</span> <span class="o">*</span> <span class="n">ppdoc_xref</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p>To get previous (older) xref:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppxref</span> <span class="o">*</span> <span class="n">ppxref_prev</span> <span class="p">(</span><span class="n">ppxref</span> <span class="o">*</span><span class="n">xref</span><span class="p">);</span> -</pre></div> -</div> -<p>To find an object of a given refnumber:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppref</span> <span class="o">*</span> <span class="n">ppxref_find</span> <span class="p">(</span><span class="n">ppxref</span> <span class="o">*</span><span class="n">xref</span><span class="p">,</span> <span class="n">ppuint</span> <span class="n">refnumber</span><span class="p">);</span> -</pre></div> -</div> -<p>[Note: since pplib v0.98 in case of documents with incremental update, <code class="docutils literal notranslate"><span class="pre">ppxref_find()</span></code> returns -the newest available version of a given object rather than the object in a given body.]</p> -</div> -<div class="section" id="pdf"> -<h2>PDF<a class="headerlink" href="#pdf" title="Permalink to this headline">¶</a></h2> -<p>PDF document is represented as <code class="docutils literal notranslate"><span class="pre">ppdoc</span></code> structure (incomplete type, you can only operate on its pointer). -To load a document from file:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdoc</span> <span class="o">*</span> <span class="n">ppdoc_load</span> <span class="p">(</span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">filename</span><span class="p">);</span> -</pre></div> -</div> -<p>To load a document from memory data:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdoc</span> <span class="o">*</span> <span class="n">ppdoc_mem</span> <span class="p">(</span><span class="n">const</span> <span class="n">void</span> <span class="o">*</span><span class="n">data</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">size</span><span class="p">);</span> -</pre></div> -</div> -<p>The data is assumed to be a buffer allocated with <code class="docutils literal notranslate"><span class="pre">malloc</span></code> - it is freed when destroying <code class="docutils literal notranslate"><span class="pre">ppdoc</span></code>.</p> -<p>Both loaders returns <code class="docutils literal notranslate"><span class="pre">NULL</span></code> on failure.</p> -<p>To free <code class="docutils literal notranslate"><span class="pre">ppdoc</span></code> and all objects it refers to:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">ppdoc_free</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p>So far we haven’t mention about any explicit object reclaimers. There are no dedicated <code class="docutils literal notranslate"><span class="pre">free</span></code> functions -for other objects. You don’t allocate or free objects yourself. <code class="docutils literal notranslate"><span class="pre">ppdoc</span></code> object is an owner of all -beings it refers to. It also means that every object described so far is alive as long as the containing -<code class="docutils literal notranslate"><span class="pre">ppdoc</span></code> is alive.</p> -<p>To access main PDF dicts:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdict</span> <span class="o">*</span> <span class="n">ppdoc_trailer</span><span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">top</span> <span class="n">xref</span> <span class="n">trailer</span> <span class="nb">dict</span> -<span class="n">ppdict</span> <span class="o">*</span> <span class="n">ppdoc_catalog</span><span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">catalog</span> <span class="n">referred</span> <span class="kn">from</span> <span class="nn">the</span> <span class="n">trailer</span> -<span class="n">ppdict</span> <span class="o">*</span> <span class="n">ppdoc_info</span><span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">info</span> <span class="nb">dict</span> <span class="n">referred</span> <span class="kn">from</span> <span class="nn">the</span> <span class="n">trailer</span> -</pre></div> -</div> -<p>To get the PDF version:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span> <span class="n">ppdoc_version_string</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> <span class="o">//</span> <span class="n">version</span> <span class="n">string</span> -<span class="nb">int</span> <span class="n">ppdoc_version_number</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">,</span> <span class="nb">int</span> <span class="o">*</span><span class="n">minor</span><span class="p">);</span> <span class="o">//</span> <span class="n">minor</span> <span class="ow">and</span> <span class="n">major</span> <span class="n">numbers</span> -</pre></div> -</div> -<p>To get the file size of the source PDF document:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">size_t</span> <span class="n">ppdoc_file_size</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p>To get the number of objects in all xrefs:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppuint</span> <span class="n">ppdoc_objects</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p>To get the approx usage of memory:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">size_t</span> <span class="n">ppdoc_memory</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">waste</span><span class="p">);</span> -</pre></div> -</div> -</div> -<div class="section" id="encryption"> -<h2>Encryption<a class="headerlink" href="#encryption" title="Permalink to this headline">¶</a></h2> -<p><code class="docutils literal notranslate"><span class="pre">pplib</span></code> handles encrypted (password protected) documents. If a document is encrypted, most of strings and streams are ciphered. -In that form they are unreadable and rather useless, you can’t even rewrite such strings/streams as-is to a different PDF output. -It is a common practise to <em>protect</em> documents with an empty password. Such documents remain readable in Acrobat (just opens them without prompting -for a password), but some features (eg. printing) may restricted by the application.</p> -<p>When <code class="docutils literal notranslate"><span class="pre">pplib</span></code> detects encryption, it follows Acrobat approach and first tries an empty password. If it succeeds, <code class="docutils literal notranslate"><span class="pre">pplib</span></code> proceeeds normally, providing -an access to decrypted strings and streams, as if they weren’t ciphered. If the document is protected with non-empty password, <code class="docutils literal notranslate"><span class="pre">pplib</span></code> gives -a way to provide a password and proceed. Until you provide a password, <code class="docutils literal notranslate"><span class="pre">ppdoc</span></code> object returned by <code class="docutils literal notranslate"><span class="pre">ppdoc_load()</span></code> function has all object wntries -set to <code class="docutils literal notranslate"><span class="pre">null</span></code>.</p> -<p>After loading a document you should check encryption status with:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppcrypt_status</span> <span class="n">ppdoc_crypt_status</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p><code class="docutils literal notranslate"><span class="pre">ppcrypt_status</span></code> (integer) may have the following values:</p> -<blockquote> -<div><code class="docutils literal notranslate"><span class="pre">PPCRYPT_NONE</span></code> - no encryption, go ahead -<code class="docutils literal notranslate"><span class="pre">PPCRYPT_DONE</span></code> - encryption present but password succeeded, go ahead -<code class="docutils literal notranslate"><span class="pre">PPCRYPT_PASS</span></code> - encryption present, need non-empty password -<code class="docutils literal notranslate"><span class="pre">PPCRYPT_FAIL</span></code> - invalid or unsupported encryption (eg. undocumented in pdf spec)</div></blockquote> -<p>If a password is needed, you can provide one with:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppcrypt_status</span> <span class="n">ppdoc_crypt_pass</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">,</span> <span class="n">const</span> <span class="n">void</span> <span class="o">*</span><span class="n">userpass</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">userpasslength</span><span class="p">,</span> - <span class="n">const</span> <span class="n">void</span> <span class="o">*</span><span class="n">ownerpass</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">ownerpasslength</span><span class="p">);</span> -</pre></div> -</div> -<p>Well, yes, there are actually two passwords in encrypted documents. Relation between them is obscure to me, but enough -to know that having one of them is enough to decrypt the document. If you know the password, you probably mean -<code class="docutils literal notranslate"><span class="pre">userpass</span></code>, in which case you should put <code class="docutils literal notranslate"><span class="pre">NULL</span></code> as <code class="docutils literal notranslate"><span class="pre">ownerpass</span></code>. The function returns <code class="docutils literal notranslate"><span class="pre">PPCRYPT_DONE</span></code> if the password -succeeds and the previous status otherwise. Your custom loader function may look like that:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">;</span> -<span class="n">pdf</span> <span class="o">=</span> <span class="n">ppdoc_load</span><span class="p">(</span><span class="s2">"file.pdf"</span><span class="p">);</span> -<span class="k">if</span> <span class="p">(</span><span class="n">pdf</span> <span class="o">==</span> <span class="n">NULL</span><span class="p">)</span> - <span class="k">return</span> <span class="n">NULL</span><span class="p">;</span> -<span class="n">switch</span> <span class="p">(</span><span class="n">ppdoc_crypt_status</span><span class="p">(</span><span class="n">pdf</span><span class="p">))</span> -<span class="p">{</span> - <span class="n">case</span> <span class="n">PPCRYPT_NONE</span><span class="p">:</span> - <span class="n">case</span> <span class="n">PPCRYPT_DONE</span><span class="p">:</span> - <span class="k">return</span> <span class="n">pdf</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPCRYPT_PASS</span><span class="p">:</span> - <span class="k">if</span> <span class="p">(</span><span class="n">ppdoc_crypt_pass</span><span class="p">(</span><span class="n">pdf</span><span class="p">,</span> <span class="s2">"dummy"</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="n">NULL</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">==</span> <span class="n">PPCRYPT_DONE</span> <span class="o">||</span> - <span class="n">ppdoc_crypt_pass</span><span class="p">(</span><span class="n">pdf</span><span class="p">,</span> <span class="n">NULL</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">"dummy"</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span> <span class="o">==</span> <span class="n">PPCRYPT_DONE</span><span class="p">)</span> - <span class="k">return</span> <span class="n">pdf</span><span class="p">;</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">"sorry, password needed</span><span class="se">\n</span><span class="s2">"</span><span class="p">);</span> - <span class="n">ppdoc_free</span><span class="p">(</span><span class="n">pdf</span><span class="p">);</span> - <span class="k">return</span> <span class="n">NULL</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPCRYPT_FAIL</span><span class="p">:</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">"sorry, encryption failed</span><span class="se">\n</span><span class="s2">"</span><span class="p">);</span> - <span class="n">ppdoc_free</span><span class="p">(</span><span class="n">pdf</span><span class="p">);</span> - <span class="k">return</span> <span class="n">NULL</span><span class="p">;</span> -<span class="p">}</span> -</pre></div> -</div> -<p>[If you get <code class="docutils literal notranslate"><span class="pre">PPCRYPT_FAIL</span></code> it might mean <em>I failed</em>, so treat as a bug.]</p> -<p>If you’d like to know what permissions are given/restricted to encrypted document:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppint</span> <span class="n">ppdoc_permissions</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p>Returned value can be queried with the following binary flags (you can verify with Acrobat <em>File -> Properties -> Security</em> tab):</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">PPDOC_ALLOW_PRINT</span> <span class="o">//</span> <span class="n">printing</span> -<span class="n">PPDOC_ALLOW_MODIFY</span> <span class="o">//</span> <span class="n">filling</span> <span class="n">form</span> <span class="n">fields</span><span class="p">,</span> <span class="n">signing</span><span class="p">,</span> <span class="n">creating</span> <span class="n">template</span> <span class="n">pages</span> -<span class="n">PPDOC_ALLOW_COPY</span> <span class="o">//</span> <span class="n">copying</span><span class="p">,</span> <span class="n">copying</span> <span class="k">for</span> <span class="n">accessibility</span> -<span class="n">PPDOC_ALLOW_ANNOTS</span> <span class="o">//</span> <span class="n">filling</span> <span class="n">form</span> <span class="n">fields</span><span class="p">,</span> <span class="n">copying</span><span class="p">,</span> <span class="n">signing</span> -<span class="n">PPDOC_ALLOW_EXTRACT</span> <span class="o">//</span> <span class="n">contents</span> <span class="n">copying</span> <span class="k">for</span> <span class="n">accessibility</span> -<span class="n">PPDOC_ALLOW_ASSEMBLY</span> <span class="o">//</span> <span class="p">(</span><span class="n">no</span> <span class="n">effect</span><span class="p">)</span> -<span class="n">PPDOC_ALLOW_PRINT_HIRES</span> <span class="o">//</span> <span class="p">(</span><span class="n">no</span> <span class="n">effect</span><span class="p">)</span> -</pre></div> -</div> -<p><code class="docutils literal notranslate"><span class="pre">pplib</span></code> does absolutelly nothing with permissions, it cares only to decrypt the document. As mentioned, encryption applies to strings -and streams. <code class="docutils literal notranslate"><span class="pre">pplib</span></code> decrypt strings when parsing document objects, so the result you get is <em>normal</em> (not ciphered). -Streams are decrypted whenever you access them. Even if you ask for a raw stream data, you’ll get a raw (compressed) stream, but decrypted. -So except the check to <code class="docutils literal notranslate"><span class="pre">ppdoc_crypt_status()</span></code>, you shouldn’t bother about encryption.</p> -<p>In encrypted documents most of streams are encrypted. To check if a given stream is encrypted:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppstream_encrypted</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span> <span class="o">//</span> <span class="n">macro</span><span class="p">,</span> <span class="n">returns</span> <span class="n">non</span><span class="o">-</span><span class="n">zero</span> <span class="k">if</span> <span class="n">encrypted</span> -</pre></div> -</div> -<p>Encryption is independent from compression, don’t confuse with <code class="docutils literal notranslate"><span class="pre">ppstream_compressed()</span></code></p> -</div> -<div class="section" id="pages"> -<h2>Pages<a class="headerlink" href="#pages" title="Permalink to this headline">¶</a></h2> -<p>Several helpers to deal with pages. To get the number of pages:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppuint</span> <span class="n">ppdoc_page_count</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p>To access the root pages tree node:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppref</span> <span class="o">*</span> <span class="n">ppdoc_pages</span><span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p>To get the page reference at a given index:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppref</span> <span class="o">*</span> <span class="n">ppdoc_page</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">,</span> <span class="n">ppuint</span> <span class="n">index</span><span class="p">);</span> -</pre></div> -</div> -<p><code class="docutils literal notranslate"><span class="pre">index</span></code> is a page number. First page has number 1. For index out of bounds <code class="docutils literal notranslate"><span class="pre">ppdoc_page()</span></code> returns NULL. -Iterating over pages using index from 1 to <code class="docutils literal notranslate"><span class="pre">ppdoc_page_count()</span></code> and calling <code class="docutils literal notranslate"><span class="pre">ppdoc_page()</span></code> on each iteration -would be suboptimal. Here is a dedicted iterator for this:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppref</span> <span class="o">*</span> <span class="n">ppdoc_first_page</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -<span class="n">ppref</span> <span class="o">*</span> <span class="n">ppdoc_next_page</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -</pre></div> -</div> -<p>The iterator in use:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">;</span> -<span class="n">ppref</span> <span class="o">*</span><span class="n">ref</span><span class="p">;</span> -<span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">;</span> -<span class="nb">int</span> <span class="n">pageno</span><span class="p">;</span> - -<span class="n">pdf</span> <span class="o">=</span> <span class="n">ppdoc_load</span><span class="p">(</span><span class="s2">"file.pdf"</span><span class="p">);</span> -<span class="k">for</span> <span class="p">(</span><span class="n">ref</span> <span class="o">=</span> <span class="n">ppdoc_first_page</span><span class="p">(</span><span class="n">pdf</span><span class="p">),</span> <span class="n">pageno</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> <span class="n">ref</span> <span class="o">!=</span> <span class="n">NULL</span><span class="p">;</span> <span class="n">ref</span> <span class="o">=</span> <span class="n">ppdoc_next_page</span><span class="p">(</span><span class="n">pdf</span><span class="p">),</span> <span class="o">++</span><span class="n">pageno</span><span class="p">)</span> -<span class="p">{</span> - <span class="nb">dict</span> <span class="o">=</span> <span class="n">ppref_obj</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span><span class="o">-></span><span class="nb">dict</span><span class="p">;</span> <span class="o">//</span> <span class="n">take</span> <span class="k">for</span> <span class="n">granted</span> <span class="n">it</span> <span class="ow">is</span> <span class="n">a</span> <span class="nb">dict</span> - <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">the</span> <span class="n">page</span> <span class="nb">dict</span> -<span class="p">}</span> -</pre></div> -</div> -<p>Functions related to pages return <code class="docutils literal notranslate"><span class="pre">ppref</span> <span class="pre">*</span></code> ensured to contain dict object, so you don’t need sanity -type checks here.</p> -</div> -<div class="section" id="contents"> -<h2>Contents<a class="headerlink" href="#contents" title="Permalink to this headline">¶</a></h2> -<p>PDF page contents can be given as a stream or array of streams. Here is a convenience iterator over page -contents streams:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppstream</span> <span class="o">*</span> <span class="n">ppcontents_first</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">);</span> -<span class="n">ppstream</span> <span class="o">*</span> <span class="n">ppcontents_next</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">);</span> -</pre></div> -</div> -<p>A complete example of contents stream parser use is given below (example 2). -But before we get there, we need to introduce <code class="docutils literal notranslate"><span class="pre">ppcontext</span></code> object. Conceptually, -<code class="docutils literal notranslate"><span class="pre">ppcontext</span></code> is an owner (memory handler) of objects created on demand (beyond the <code class="docutils literal notranslate"><span class="pre">ppdoc</span></code>). -So far used only with contents stream parser, which might produce quite some data that we want -to release just after used. To create a new context:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pcontext</span> <span class="o">*</span> <span class="n">ppcontext_new</span> <span class="p">(</span><span class="n">void</span><span class="p">);</span> -</pre></div> -</div> -<p>It initializes a new context and its internal memory heap, taking about 64kB on start. After that, -the context is ready to produce objects (contents parsing functions below). Once objects produced -from a given context are no longer needed:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">ppcontext_done</span> <span class="p">(</span><span class="n">ppcontext</span> <span class="o">*</span><span class="n">context</span><span class="p">);</span> -</pre></div> -</div> -<p>It restores the context to its initial state, as after <code class="docutils literal notranslate"><span class="pre">ppcontext_new()</span></code>. It means that the context -is ready to produce another bunch of beings (in the example below, all objects from the next page contents). -Once the context is not needed anymore:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">ppcontext_free</span> <span class="p">(</span><span class="n">ppcontext</span> <span class="o">*</span><span class="n">context</span><span class="p">);</span> -</pre></div> -</div> -<p>Now, contents stream parser functions take the context as an argument. Iterator form of contents stream parser -that allows to process the contents operator by operator:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppcontents_first_op</span> <span class="p">(</span><span class="n">ppcontext</span> <span class="o">*</span><span class="n">context</span><span class="p">,</span> <span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">psize</span><span class="p">,</span> <span class="n">ppname</span> <span class="o">*</span><span class="n">pname</span><span class="p">);</span> -<span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppcontents_next_op</span> <span class="p">(</span><span class="n">ppcontext</span> <span class="o">*</span><span class="n">context</span><span class="p">,</span> <span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">psize</span><span class="p">,</span> <span class="n">ppname</span> <span class="o">*</span><span class="n">pname</span><span class="p">);</span> -</pre></div> -</div> -<p>Returned <code class="docutils literal notranslate"><span class="pre">ppobj</span> <span class="pre">*</span></code> is a pointer to operands list. <code class="docutils literal notranslate"><span class="pre">*psize</span></code> is the number of operands on stack. -The operator itself is stored as <code class="docutils literal notranslate"><span class="pre">*pname</span></code>.</p> -<p>To parse the entire contents stream at once with no stop at every operator:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppcontents_parse</span> <span class="p">(</span><span class="n">ppcontext</span> <span class="o">*</span><span class="n">context</span><span class="p">,</span> <span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">psize</span><span class="p">);</span> -</pre></div> -</div> -<p>Returns probably quite long list of all parsed objects (operands and operatos) in one piece. -The number of objects is stored to <code class="docutils literal notranslate"><span class="pre">*psize</span></code>.</p> -<p>[Contents may contain so called inline images, that breaks a simple scheme of operands / operator syntax:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">BI</span> <span class="o"><</span><span class="n">keyval</span> <span class="n">pairs</span><span class="o">></span> <span class="n">ID</span> <span class="o"><</span><span class="n">binary</span> <span class="n">image</span> <span class="n">data</span><span class="o">></span> <span class="n">EI</span> -</pre></div> -</div> -<p>Contents parser treats this genuine triplet as a single piece, producing two operands (dict and string) -followed by <code class="docutils literal notranslate"><span class="pre">EI</span></code> operator name.]</p> -</div> -<div class="section" id="boxes"> -<h2>Boxes<a class="headerlink" href="#boxes" title="Permalink to this headline">¶</a></h2> -<p>Boxes (rectangles) in PDF are roughly 4-number arrays, but with a special intent. -<code class="docutils literal notranslate"><span class="pre">pplib</span></code> provides a basic interface for these special arrays:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">typedef</span> <span class="n">struct</span> <span class="p">{</span> - <span class="n">ppnum</span> <span class="n">lx</span><span class="p">,</span> <span class="n">ly</span><span class="p">,</span> <span class="n">rx</span><span class="p">,</span> <span class="n">ry</span><span class="p">;</span> -<span class="p">}</span> <span class="n">pprect</span><span class="p">;</span> -</pre></div> -</div> -<p>This type is used only by helper functions - PDF parser is not aware of the rectangle type. -To convert <code class="docutils literal notranslate"><span class="pre">pparray</span></code> to <code class="docutils literal notranslate"><span class="pre">pprect</span></code>:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pprect</span> <span class="o">*</span> <span class="n">pparray_to_rect</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">pprect</span> <span class="o">*</span><span class="n">rect</span><span class="p">);</span> <span class="o">//</span> <span class="n">returns</span> <span class="n">rect</span> <span class="ow">or</span> <span class="n">NULL</span> -</pre></div> -</div> -<p>In example:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pprect</span> <span class="n">rect</span><span class="p">;</span> -<span class="k">if</span> <span class="p">(</span><span class="n">pparray_to_rect</span><span class="p">(</span><span class="n">array</span><span class="p">,</span> <span class="o">&</span><span class="n">rect</span><span class="p">)</span> <span class="o">!=</span> <span class="n">NULL</span><span class="p">)</span> - <span class="p">;</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">rect</span> -</pre></div> -</div> -<p>To get some image bounding box:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pprect</span> <span class="o">*</span> <span class="n">ppdict_get_rect</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">pprect</span> <span class="o">*</span><span class="n">rect</span><span class="p">);</span> -<span class="o">//</span> <span class="n">eg</span><span class="o">.</span> <span class="n">ppdict_get_rect</span><span class="p">(</span><span class="n">imagedict</span><span class="p">,</span> <span class="s2">"BBox"</span><span class="p">,</span> <span class="o">&</span><span class="n">rect</span><span class="p">)</span> -</pre></div> -</div> -<p>To get some page box:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pprect</span> <span class="o">*</span> <span class="n">ppdict_get_box</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">pprect</span> <span class="o">*</span><span class="n">rect</span><span class="p">);</span> -<span class="o">//</span> <span class="n">eg</span><span class="o">.</span> <span class="n">ppdict_get_box</span><span class="p">(</span><span class="n">pagedict</span><span class="p">,</span> <span class="s2">"MediaBox"</span><span class="p">,</span> <span class="o">&</span><span class="n">rect</span><span class="p">)</span> -</pre></div> -</div> -<p>The later not only checks the pagedict, but also goes through parent page nodes.</p> -</div> -<div class="section" id="transforms"> -<h2>Transforms<a class="headerlink" href="#transforms" title="Permalink to this headline">¶</a></h2> -<p>Transformations are given as 6-number arrays, but with a special intent. -<code class="docutils literal notranslate"><span class="pre">pplib</span></code> provides a basic interface for these special arrays:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">typedef</span> <span class="n">struct</span> <span class="p">{</span> - <span class="n">ppnum</span> <span class="n">xx</span><span class="p">,</span> <span class="n">xy</span><span class="p">,</span> <span class="n">yx</span><span class="p">,</span> <span class="n">yy</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">;</span> -<span class="p">}</span> <span class="n">ppmatrix</span><span class="p">;</span> -</pre></div> -</div> -<p>This type is used only by helper functions - PDF parser is not aware of the matrix type. -To convert <code class="docutils literal notranslate"><span class="pre">pparray</span></code> to <code class="docutils literal notranslate"><span class="pre">ppmatrix</span></code>:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppmatrix</span> <span class="o">*</span> <span class="n">pparray_to_matrix</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">ppmatrix</span> <span class="o">*</span><span class="n">matrix</span><span class="p">);</span> -</pre></div> -</div> -<p>In example:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppmatrix</span> <span class="n">matrix</span><span class="p">;</span> -<span class="k">if</span> <span class="p">(</span><span class="n">pparray_to_matrix</span><span class="p">(</span><span class="n">array</span><span class="p">,</span> <span class="o">&</span><span class="n">matrix</span><span class="p">)</span> <span class="o">!=</span> <span class="n">NULL</span><span class="p">)</span> - <span class="p">;</span> <span class="o">//</span> <span class="n">do</span> <span class="n">something</span> <span class="k">with</span> <span class="n">matrix</span> -</pre></div> -</div> -<p>To get the matrix from dict:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppmatrix</span> <span class="o">*</span> <span class="n">ppdict_get_matrix</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">ppmatrix</span> <span class="o">*</span><span class="n">matrix</span><span class="p">);</span> -<span class="o">//</span> <span class="n">eg</span><span class="o">.</span> <span class="n">ppdict_get_matrix</span><span class="p">(</span><span class="n">imagedict</span><span class="p">,</span> <span class="s2">"Matrix"</span><span class="p">,</span> <span class="o">&</span><span class="n">matrix</span><span class="p">)</span> -</pre></div> -</div> -</div> -<div class="section" id="errors-handling"> -<h2>Errors handling<a class="headerlink" href="#errors-handling" title="Permalink to this headline">¶</a></h2> -<p><code class="docutils literal notranslate"><span class="pre">pplib</span></code> is not verbose, but might happen that it needs to log some error message, eg. when parsing -of some PDF boject fails due to invalid offsets. By default, <code class="docutils literal notranslate"><span class="pre">pplib</span></code> prints the message to stdout, eg.:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">invalid</span> <span class="mi">123</span> <span class="mi">0</span> <span class="n">R</span> <span class="nb">object</span> <span class="n">at</span> <span class="n">offset</span> <span class="mi">123123</span> -</pre></div> -</div> -<p>To replace the default logger, you can provide your own:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">pplog_callback</span> <span class="p">(</span><span class="n">pplogger_callback</span> <span class="n">logger</span><span class="p">,</span> <span class="n">void</span> <span class="o">*</span><span class="n">alien</span><span class="p">);</span> -</pre></div> -</div> -<p><code class="docutils literal notranslate"><span class="pre">pplogger_callback</span></code> is a function:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">your_callback</span> <span class="p">(</span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">message</span><span class="p">,</span> <span class="n">void</span> <span class="o">*</span><span class="n">alien</span><span class="p">);</span> -</pre></div> -</div> -<p>In example, to redirect messages to stderr you may define a function:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">your_callback</span> <span class="p">(</span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">message</span><span class="p">,</span> <span class="n">void</span> <span class="o">*</span><span class="n">alien</span><span class="p">)</span> -<span class="p">{</span> - <span class="n">fprintf</span><span class="p">((</span><span class="n">FILE</span> <span class="o">*</span><span class="p">)</span><span class="n">alien</span><span class="p">,</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">ooops: </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="n">message</span><span class="p">);</span> -<span class="p">}</span> -</pre></div> -</div> -<p>Then set the callback somewhere before loading documents:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pplog_callback</span><span class="p">(</span><span class="n">your_callback</span><span class="p">,</span> <span class="n">stderr</span><span class="p">);</span> -</pre></div> -</div> -<p>(example 2 uses that).</p> -<p>To set the default log messages prefix, eg. <code class="docutils literal notranslate"><span class="pre">pplib:</span></code>, use:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">int</span> <span class="n">pplog_prefix</span> <span class="p">(</span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">prefix</span><span class="p">)</span> -</pre></div> -</div> -<p>Default is empty. The function succeeds if provided prefix is reasonably short (less then 32 bytes).</p> -</div> -</div> - - - </div> - </div> - </div> - <div class="clearer"></div> - </div> - <div class="related" role="navigation" aria-label="related navigation"> - <h3>Navigation</h3> - <ul> - <li class="right" style="margin-right: 10px"> - <a href="genindex.html" title="General Index" - >index</a></li> - <li class="right" > - <a href="ppcode.html" title="Examples" - >next</a> |</li> - <li class="right" > - <a href="pplib.html" title="pplib" - >previous</a> |</li> - <li class="nav-item nav-item-0"><a href="pplib.html">pplib 0.1 documentation</a> »</li> - </ul> - </div> - <div class="footer" role="contentinfo"> - © Copyright 2018, p.jackowski@gust.org.pl. - Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.1. - </div> - </body> -</html>
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/ppcode.html b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/ppcode.html deleted file mode 100644 index 8645450d8ec..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/ppcode.html +++ /dev/null @@ -1,996 +0,0 @@ - - -<!doctype html> - -<html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Examples — pplib 0.1 documentation</title> - <link rel="stylesheet" href="_static/bizstyle.css" type="text/css" /> - <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> - - <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="_static/language_data.js"></script> - <script type="text/javascript" src="_static/bizstyle.js"></script> - <link rel="index" title="Index" href="genindex.html" /> - <link rel="search" title="Search" href="search.html" /> - <link rel="prev" title="pplib 1.x" href="ppapi-1.x.html" /> - <meta name="viewport" content="width=device-width,initial-scale=1.0"> - <!--[if lt IE 9]> - <script type="text/javascript" src="_static/css3-mediaqueries.js"></script> - <![endif]--> - </head><body> - <div class="related" role="navigation" aria-label="related navigation"> - <h3>Navigation</h3> - <ul> - <li class="right" style="margin-right: 10px"> - <a href="genindex.html" title="General Index" - accesskey="I">index</a></li> - <li class="right" > - <a href="ppapi-1.x.html" title="pplib 1.x" - accesskey="P">previous</a> |</li> - <li class="nav-item nav-item-0"><a href="pplib.html">pplib 0.1 documentation</a> »</li> - </ul> - </div> - <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> - <div class="sphinxsidebarwrapper"> - <h3><a href="pplib.html">Table of Contents</a></h3> - <ul> -<li><a class="reference internal" href="#">Examples</a><ul> -<li><a class="reference internal" href="#example-1">Example 1</a></li> -<li><a class="reference internal" href="#example-2">Example 2</a></li> -<li><a class="reference internal" href="#example-3">Example 3</a></li> -<li><a class="reference internal" href="#ppapi-h">ppapi.h</a></li> -</ul> -</li> -<li><a class="reference internal" href="#changes">Changes</a><ul> -<li><a class="reference internal" href="#v0-97">v0.97</a></li> -<li><a class="reference internal" href="#v0-98">v0.98</a></li> -<li><a class="reference internal" href="#v0-99">v0.99</a></li> -<li><a class="reference internal" href="#v1-00">v1.00</a></li> -<li><a class="reference internal" href="#v1-01">v1.01</a></li> -<li><a class="reference internal" href="#v1-02">v1.02</a></li> -<li><a class="reference internal" href="#v1-03">v1.03</a></li> -<li><a class="reference internal" href="#v1-04">v1.04</a></li> -<li><a class="reference internal" href="#v1-05">v1.05</a></li> -<li><a class="reference internal" href="#v2-00">v2.00</a></li> -<li><a class="reference internal" href="#v2-01">v2.01</a></li> -<li><a class="reference internal" href="#v2-02">v2.02</a></li> -<li><a class="reference internal" href="#v2-03">v2.03</a></li> -<li><a class="reference internal" href="#v2-04">v2.04</a></li> -<li><a class="reference internal" href="#v2-05">v2.05</a></li> -</ul> -</li> -<li><a class="reference internal" href="#todo">TODO</a></li> -</ul> - - <h4>Previous topic</h4> - <p class="topless"><a href="ppapi-1.x.html" - title="previous chapter"><code class="docutils literal notranslate"><span class="pre">pplib</span></code> 1.x</a></p> - <div role="note" aria-label="source link"> - <h3>This Page</h3> - <ul class="this-page-menu"> - <li><a href="_sources/ppcode.rst.txt" - rel="nofollow">Show Source</a></li> - </ul> - </div> -<div id="searchbox" style="display: none" role="search"> - <h3>Quick search</h3> - <div class="searchformwrapper"> - <form class="search" action="search.html" method="get"> - <input type="text" name="q" /> - <input type="submit" value="Go" /> - <input type="hidden" name="check_keywords" value="yes" /> - <input type="hidden" name="area" value="default" /> - </form> - </div> -</div> -<script type="text/javascript">$('#searchbox').show(0);</script> - </div> - </div> - - <div class="document"> - <div class="documentwrapper"> - <div class="bodywrapper"> - <div class="body" role="main"> - - <div class="section" id="examples"> -<h1>Examples<a class="headerlink" href="#examples" title="Permalink to this headline">¶</a></h1> -<div class="section" id="example-1"> -<h2>Example 1<a class="headerlink" href="#example-1" title="Permalink to this headline">¶</a></h2> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> -<span class="c1">#include <stdio.h></span> -<span class="c1">#include "ppapi.h"</span> -<span class="c1">#include "util/utiliof.h"</span> - -<span class="n">static</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span> <span class="n">sizenum</span> <span class="p">(</span><span class="n">size_t</span> <span class="n">s</span><span class="p">)</span> -<span class="p">{</span> - <span class="n">static</span> <span class="n">char</span> <span class="n">buffer</span><span class="p">[</span><span class="mi">32</span><span class="p">];</span> - <span class="k">if</span> <span class="p">(</span><span class="n">s</span> <span class="o"><</span> <span class="mi">1000</span><span class="p">)</span> - <span class="n">sprintf</span><span class="p">(</span><span class="n">buffer</span><span class="p">,</span> <span class="s2">"</span><span class="si">%u</span><span class="s2">B"</span><span class="p">,</span> <span class="p">(</span><span class="n">unsigned</span><span class="p">)</span><span class="n">s</span><span class="p">);</span> - <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">s</span> <span class="o"><</span> <span class="mi">1000000</span><span class="p">)</span> - <span class="n">sprintf</span><span class="p">(</span><span class="n">buffer</span><span class="p">,</span> <span class="s2">"</span><span class="si">%.2f</span><span class="s2">kB"</span><span class="p">,</span> <span class="p">(</span><span class="n">double</span><span class="p">)(</span><span class="n">s</span><span class="p">)</span> <span class="o">/</span> <span class="mi">1000</span><span class="p">);</span> - <span class="k">else</span> - <span class="n">sprintf</span><span class="p">(</span><span class="n">buffer</span><span class="p">,</span> <span class="s2">"</span><span class="si">%.2f</span><span class="s2">MB"</span><span class="p">,</span> <span class="p">(</span><span class="n">double</span><span class="p">)(</span><span class="n">s</span><span class="p">)</span> <span class="o">/</span> <span class="mi">1000000</span><span class="p">);</span> - <span class="k">return</span> <span class="n">buffer</span><span class="p">;</span> -<span class="p">}</span> - -<span class="n">static</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span> <span class="n">crypt_info</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">)</span> -<span class="p">{</span> - <span class="n">switch</span> <span class="p">(</span><span class="n">ppdoc_crypt_status</span><span class="p">(</span><span class="n">pdf</span><span class="p">))</span> - <span class="p">{</span> - <span class="n">case</span> <span class="n">PPCRYPT_NONE</span><span class="p">:</span> - <span class="k">return</span> <span class="s2">"none"</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPCRYPT_DONE</span><span class="p">:</span> - <span class="k">return</span> <span class="s2">"empty password"</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPCRYPT_PASS</span><span class="p">:</span> - <span class="k">return</span> <span class="s2">"nonempty password"</span><span class="p">;</span> - <span class="n">default</span><span class="p">:</span> - <span class="k">break</span><span class="p">;</span> - <span class="p">}</span> - <span class="k">return</span> <span class="s2">"this shouldn't happen"</span><span class="p">;</span> -<span class="p">}</span> - -<span class="n">static</span> <span class="n">void</span> <span class="n">print_info</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">)</span> -<span class="p">{</span> - <span class="n">ppdict</span> <span class="o">*</span><span class="n">info</span><span class="p">;</span> - <span class="n">ppstring</span> <span class="o">*</span><span class="n">creator</span><span class="p">,</span> <span class="o">*</span><span class="n">producer</span><span class="p">;</span> - <span class="n">size_t</span> <span class="n">memused</span><span class="p">,</span> <span class="n">memwaste</span><span class="p">;</span> - - <span class="k">if</span> <span class="p">((</span><span class="n">info</span> <span class="o">=</span> <span class="n">ppdoc_info</span><span class="p">(</span><span class="n">pdf</span><span class="p">))</span> <span class="o">!=</span> <span class="n">NULL</span><span class="p">)</span> - <span class="p">{</span> - <span class="k">if</span> <span class="p">((</span><span class="n">creator</span> <span class="o">=</span> <span class="n">ppdict_rget_string</span><span class="p">(</span><span class="n">info</span><span class="p">,</span> <span class="s2">"Creator"</span><span class="p">))</span> <span class="o">!=</span> <span class="n">NULL</span><span class="p">)</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">" creator: </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="n">ppstring_decoded_data</span><span class="p">(</span><span class="n">creator</span><span class="p">));</span> - <span class="k">if</span> <span class="p">((</span><span class="n">producer</span> <span class="o">=</span> <span class="n">ppdict_rget_string</span><span class="p">(</span><span class="n">info</span><span class="p">,</span> <span class="s2">"Producer"</span><span class="p">))</span> <span class="o">!=</span> <span class="n">NULL</span><span class="p">)</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">" producer: </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="n">ppstring_decoded_data</span><span class="p">(</span><span class="n">producer</span><span class="p">));</span> - <span class="p">}</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">" version: </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="n">ppdoc_version_string</span><span class="p">(</span><span class="n">pdf</span><span class="p">));</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">" protection: </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="n">crypt_info</span><span class="p">(</span><span class="n">pdf</span><span class="p">));</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">" filesize: </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="n">sizenum</span><span class="p">(</span><span class="n">ppdoc_file_size</span><span class="p">(</span><span class="n">pdf</span><span class="p">)));</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">" objects: </span><span class="si">%lu</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="p">(</span><span class="n">unsigned</span> <span class="n">long</span><span class="p">)</span><span class="n">ppdoc_objects</span><span class="p">(</span><span class="n">pdf</span><span class="p">));</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">" pagecount: </span><span class="si">%lu</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="p">(</span><span class="n">unsigned</span> <span class="n">long</span><span class="p">)</span><span class="n">ppdoc_page_count</span><span class="p">(</span><span class="n">pdf</span><span class="p">));</span> - <span class="n">memused</span> <span class="o">=</span> <span class="n">ppdoc_memory</span><span class="p">(</span><span class="n">pdf</span><span class="p">,</span> <span class="o">&</span><span class="n">memwaste</span><span class="p">);</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">" memused: </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="n">sizenum</span><span class="p">(</span><span class="n">memused</span><span class="p">));</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">" memwaste: </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="n">sizenum</span><span class="p">(</span><span class="n">memwaste</span><span class="p">));</span> -<span class="p">}</span> - -<span class="n">static</span> <span class="nb">int</span> <span class="n">usage</span> <span class="p">(</span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">argv0</span><span class="p">)</span> -<span class="p">{</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">"pplib "</span> <span class="n">pplib_version</span> <span class="s2">", "</span> <span class="n">pplib_author</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">);</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">"usage: </span><span class="si">%s</span><span class="s2"> file1.pdf file2.pdf ...</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="n">argv0</span><span class="p">);</span> - <span class="k">return</span> <span class="mi">0</span><span class="p">;</span> -<span class="p">}</span> - -<span class="nb">int</span> <span class="n">main</span> <span class="p">(</span><span class="nb">int</span> <span class="n">argc</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> -<span class="p">{</span> - <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">filepath</span><span class="p">;</span> - <span class="nb">int</span> <span class="n">a</span><span class="p">;</span> - <span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">;</span> - <span class="n">const</span> <span class="n">void</span> <span class="o">*</span><span class="n">data</span><span class="p">;</span> - <span class="n">size_t</span> <span class="n">size</span><span class="p">;</span> - - <span class="k">if</span> <span class="p">(</span><span class="n">argc</span> <span class="o"><</span> <span class="mi">2</span><span class="p">)</span> - <span class="k">return</span> <span class="n">usage</span><span class="p">(</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span> - <span class="k">for</span> <span class="p">(</span><span class="n">a</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> <span class="n">a</span> <span class="o"><</span> <span class="n">argc</span><span class="p">;</span> <span class="o">++</span><span class="n">a</span><span class="p">)</span> - <span class="p">{</span> - <span class="n">filepath</span> <span class="o">=</span> <span class="n">argv</span><span class="p">[</span><span class="n">a</span><span class="p">];</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">"loading </span><span class="si">%s</span><span class="s2">... "</span><span class="p">,</span> <span class="n">filepath</span><span class="p">);</span> - <span class="n">pdf</span> <span class="o">=</span> <span class="n">ppdoc_load</span><span class="p">(</span><span class="n">filepath</span><span class="p">);</span> - <span class="k">if</span> <span class="p">(</span><span class="n">pdf</span> <span class="o">==</span> <span class="n">NULL</span><span class="p">)</span> - <span class="p">{</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">"failed</span><span class="se">\n</span><span class="s2">"</span><span class="p">);</span> - <span class="k">continue</span><span class="p">;</span> - <span class="p">}</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">"done.</span><span class="se">\n</span><span class="s2">"</span><span class="p">);</span> - <span class="n">print_info</span><span class="p">(</span><span class="n">pdf</span><span class="p">);</span> - <span class="n">ppdoc_free</span><span class="p">(</span><span class="n">pdf</span><span class="p">);</span> - <span class="o">/*</span> <span class="n">now</span> <span class="n">loading</span> <span class="kn">from</span> <span class="nn">memory</span> <span class="n">buffer</span> <span class="o">*/</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">"loading </span><span class="si">%s</span><span class="s2"> from mem buffer... "</span><span class="p">,</span> <span class="n">filepath</span><span class="p">);</span> - <span class="n">data</span> <span class="o">=</span> <span class="n">iof_copy_file_data</span><span class="p">(</span><span class="n">filepath</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">);</span> - <span class="k">if</span> <span class="p">(</span><span class="n">data</span> <span class="o">!=</span> <span class="n">NULL</span><span class="p">)</span> - <span class="p">{</span> - <span class="n">pdf</span> <span class="o">=</span> <span class="n">ppdoc_mem</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">size</span><span class="p">);</span> - <span class="k">if</span> <span class="p">(</span><span class="n">pdf</span> <span class="o">==</span> <span class="n">NULL</span><span class="p">)</span> - <span class="p">{</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">"failed</span><span class="se">\n</span><span class="s2">"</span><span class="p">);</span> - <span class="k">continue</span><span class="p">;</span> - <span class="p">}</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">"done.</span><span class="se">\n</span><span class="s2">"</span><span class="p">);</span> - <span class="o">//</span><span class="n">print_info</span><span class="p">(</span><span class="n">pdf</span><span class="p">);</span> - <span class="n">ppdoc_free</span><span class="p">(</span><span class="n">pdf</span><span class="p">);</span> - <span class="p">}</span> - <span class="p">}</span> - <span class="k">return</span> <span class="mi">0</span><span class="p">;</span> -<span class="p">}</span> -</pre></div> -</div> -</div> -<div class="section" id="example-2"> -<h2>Example 2<a class="headerlink" href="#example-2" title="Permalink to this headline">¶</a></h2> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> -<span class="c1">#include <stdio.h></span> -<span class="c1">#include <assert.h></span> -<span class="c1">#include "ppapi.h"</span> - -<span class="o">/*</span> -<span class="n">static</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span> <span class="n">get_file_name</span> <span class="p">(</span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">path</span><span class="p">)</span> -<span class="p">{</span> - <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">fn</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">;</span> - <span class="k">for</span> <span class="p">(</span><span class="n">fn</span> <span class="o">=</span> <span class="n">p</span> <span class="o">=</span> <span class="n">path</span><span class="p">;</span> <span class="o">*</span><span class="n">p</span> <span class="o">!=</span> <span class="s1">'</span><span class="se">\0</span><span class="s1">'</span><span class="p">;</span> <span class="o">++</span><span class="n">p</span><span class="p">)</span> - <span class="k">if</span> <span class="p">(</span><span class="o">*</span><span class="n">p</span> <span class="o">==</span> <span class="s1">'</span><span class="se">\\</span><span class="s1">'</span> <span class="o">||</span> <span class="o">*</span><span class="n">p</span> <span class="o">==</span> <span class="s1">'/'</span><span class="p">)</span> - <span class="n">fn</span> <span class="o">=</span> <span class="n">p</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span> - <span class="k">return</span> <span class="n">fn</span><span class="p">;</span> -<span class="p">}</span> -<span class="o">*/</span> - -<span class="n">static</span> <span class="n">void</span> <span class="n">box_info</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="n">pagedict</span><span class="p">,</span> <span class="n">FILE</span> <span class="o">*</span><span class="n">fh</span><span class="p">)</span> -<span class="p">{</span> - <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">boxes</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"MediaBox"</span><span class="p">,</span> <span class="s2">"CropBox"</span><span class="p">,</span> <span class="s2">"BleedBox"</span><span class="p">,</span> <span class="s2">"TrimBox"</span><span class="p">,</span> <span class="s2">"ArtBox"</span><span class="p">};</span> - <span class="n">pprect</span> <span class="n">rect</span><span class="p">;</span> - <span class="n">size_t</span> <span class="n">i</span><span class="p">;</span> - <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">sizeof</span><span class="p">(</span><span class="n">boxes</span><span class="p">)</span> <span class="o">/</span> <span class="n">sizeof</span><span class="p">(</span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="p">);</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> - <span class="k">if</span> <span class="p">(</span><span class="n">ppdict_get_box</span><span class="p">(</span><span class="n">pagedict</span><span class="p">,</span> <span class="n">boxes</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="o">&</span><span class="n">rect</span><span class="p">))</span> - <span class="n">fprintf</span><span class="p">(</span><span class="n">fh</span><span class="p">,</span> <span class="s2">"</span><span class="si">%%%%</span><span class="s2"> </span><span class="si">%s</span><span class="s2"> [</span><span class="si">%f</span><span class="s2"> </span><span class="si">%f</span><span class="s2"> </span><span class="si">%f</span><span class="s2"> </span><span class="si">%f</span><span class="s2">]</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="n">boxes</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">rect</span><span class="o">.</span><span class="n">lx</span><span class="p">,</span> <span class="n">rect</span><span class="o">.</span><span class="n">ly</span><span class="p">,</span> <span class="n">rect</span><span class="o">.</span><span class="n">rx</span><span class="p">,</span> <span class="n">rect</span><span class="o">.</span><span class="n">ry</span><span class="p">);</span> -<span class="p">}</span> - -<span class="n">static</span> <span class="nb">int</span> <span class="n">usage</span> <span class="p">(</span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">argv0</span><span class="p">)</span> -<span class="p">{</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">"pplib "</span> <span class="n">pplib_version</span> <span class="s2">", "</span> <span class="n">pplib_author</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">);</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">"usage: </span><span class="si">%s</span><span class="s2"> file1.pdf file2.pdf ...</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="n">argv0</span><span class="p">);</span> - <span class="k">return</span> <span class="mi">0</span><span class="p">;</span> -<span class="p">}</span> - -<span class="n">static</span> <span class="n">void</span> <span class="n">log_callback</span> <span class="p">(</span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">message</span><span class="p">,</span> <span class="n">void</span> <span class="o">*</span><span class="n">alien</span><span class="p">)</span> -<span class="p">{</span> - <span class="n">fprintf</span><span class="p">((</span><span class="n">FILE</span> <span class="o">*</span><span class="p">)</span><span class="n">alien</span><span class="p">,</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">ooops: </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="n">message</span><span class="p">);</span> -<span class="p">}</span> - -<span class="nb">int</span> <span class="n">main</span> <span class="p">(</span><span class="nb">int</span> <span class="n">argc</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> -<span class="p">{</span> - <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">filepath</span><span class="p">;</span> - <span class="nb">int</span> <span class="n">a</span><span class="p">;</span> - <span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">;</span> - <span class="n">ppref</span> <span class="o">*</span><span class="n">pageref</span><span class="p">;</span> - <span class="n">ppdict</span> <span class="o">*</span><span class="n">pagedict</span><span class="p">;</span> - <span class="nb">int</span> <span class="n">pageno</span><span class="p">;</span> - <span class="n">char</span> <span class="n">outname</span><span class="p">[</span><span class="mi">1024</span><span class="p">];</span> - <span class="n">FILE</span> <span class="o">*</span><span class="n">fh</span><span class="p">;</span> - <span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">;</span> - <span class="n">uint8_t</span> <span class="o">*</span><span class="n">data</span><span class="p">;</span> - <span class="n">size_t</span> <span class="n">size</span><span class="p">;</span> - <span class="n">ppcontext</span> <span class="o">*</span><span class="n">context</span><span class="p">;</span> - <span class="n">ppobj</span> <span class="o">*</span><span class="n">obj</span><span class="p">;</span> - <span class="n">ppname</span> <span class="o">*</span><span class="n">op</span><span class="p">;</span> - <span class="n">size_t</span> <span class="n">operators</span><span class="p">;</span> - - <span class="k">if</span> <span class="p">(</span><span class="n">argc</span> <span class="o"><</span> <span class="mi">2</span><span class="p">)</span> - <span class="k">return</span> <span class="n">usage</span><span class="p">(</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span> - <span class="n">ppstream_init_buffers</span><span class="p">();</span> - <span class="n">pplog_callback</span><span class="p">(</span><span class="n">log_callback</span><span class="p">,</span> <span class="n">stderr</span><span class="p">);</span> - <span class="n">context</span> <span class="o">=</span> <span class="n">ppcontext_new</span><span class="p">();</span> - <span class="k">for</span> <span class="p">(</span><span class="n">a</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> <span class="n">a</span> <span class="o"><</span> <span class="n">argc</span><span class="p">;</span> <span class="o">++</span><span class="n">a</span><span class="p">)</span> - <span class="p">{</span> - <span class="n">filepath</span> <span class="o">=</span> <span class="n">argv</span><span class="p">[</span><span class="n">a</span><span class="p">];</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">"loading </span><span class="si">%s</span><span class="s2">... "</span><span class="p">,</span> <span class="n">filepath</span><span class="p">);</span> - <span class="n">pdf</span> <span class="o">=</span> <span class="n">ppdoc_load</span><span class="p">(</span><span class="n">filepath</span><span class="p">);</span> - <span class="k">if</span> <span class="p">(</span><span class="n">pdf</span> <span class="o">==</span> <span class="n">NULL</span><span class="p">)</span> - <span class="p">{</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">"failed</span><span class="se">\n</span><span class="s2">"</span><span class="p">);</span> - <span class="k">continue</span><span class="p">;</span> - <span class="p">}</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">"done.</span><span class="se">\n</span><span class="s2">"</span><span class="p">);</span> - <span class="n">switch</span> <span class="p">(</span><span class="n">ppdoc_crypt_status</span><span class="p">(</span><span class="n">pdf</span><span class="p">))</span> - <span class="p">{</span> - <span class="n">case</span> <span class="n">PPCRYPT_NONE</span><span class="p">:</span> - <span class="n">case</span> <span class="n">PPCRYPT_DONE</span><span class="p">:</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPCRYPT_PASS</span><span class="p">:</span> - <span class="k">if</span> <span class="p">(</span><span class="n">ppdoc_crypt_pass</span><span class="p">(</span><span class="n">pdf</span><span class="p">,</span> <span class="s2">"dummy"</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="n">NULL</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">==</span> <span class="n">PPCRYPT_DONE</span> <span class="o">||</span> <span class="n">ppdoc_crypt_pass</span><span class="p">(</span><span class="n">pdf</span><span class="p">,</span> <span class="n">NULL</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">"dummy"</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span> <span class="o">==</span> <span class="n">PPCRYPT_DONE</span><span class="p">)</span> - <span class="k">break</span><span class="p">;</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">"sorry, password needed</span><span class="se">\n</span><span class="s2">"</span><span class="p">);</span> - <span class="n">ppdoc_free</span><span class="p">(</span><span class="n">pdf</span><span class="p">);</span> - <span class="k">continue</span><span class="p">;</span> - <span class="n">case</span> <span class="n">PPCRYPT_FAIL</span><span class="p">:</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">"sorry, encryption failed</span><span class="se">\n</span><span class="s2">"</span><span class="p">);</span> - <span class="n">ppdoc_free</span><span class="p">(</span><span class="n">pdf</span><span class="p">);</span> - <span class="k">continue</span><span class="p">;</span> - <span class="p">}</span> - <span class="n">sprintf</span><span class="p">(</span><span class="n">outname</span><span class="p">,</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">.out"</span><span class="p">,</span> <span class="n">filepath</span><span class="p">);</span> - <span class="n">fh</span> <span class="o">=</span> <span class="n">fopen</span><span class="p">(</span><span class="n">outname</span><span class="p">,</span> <span class="s2">"wb"</span><span class="p">);</span> - <span class="k">if</span> <span class="p">(</span><span class="n">fh</span> <span class="o">==</span> <span class="n">NULL</span><span class="p">)</span> - <span class="p">{</span> - <span class="n">printf</span><span class="p">(</span><span class="s2">"can't open </span><span class="si">%s</span><span class="s2"> for writing</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="n">outname</span><span class="p">);</span> - <span class="k">continue</span><span class="p">;</span> - <span class="p">}</span> - <span class="k">for</span> <span class="p">(</span><span class="n">pageref</span> <span class="o">=</span> <span class="n">ppdoc_first_page</span><span class="p">(</span><span class="n">pdf</span><span class="p">),</span> <span class="n">pageno</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> - <span class="n">pageref</span> <span class="o">!=</span> <span class="n">NULL</span><span class="p">;</span> - <span class="n">pageref</span> <span class="o">=</span> <span class="n">ppdoc_next_page</span><span class="p">(</span><span class="n">pdf</span><span class="p">),</span> <span class="o">++</span><span class="n">pageno</span><span class="p">)</span> - <span class="p">{</span> - <span class="n">pagedict</span> <span class="o">=</span> <span class="n">pageref</span><span class="o">-></span><span class="nb">object</span><span class="o">.</span><span class="n">dict</span><span class="p">;</span> - <span class="o">/*</span> <span class="n">decompress</span> <span class="n">contents</span> <span class="n">data</span> <span class="o">*/</span> - <span class="n">fprintf</span><span class="p">(</span><span class="n">fh</span><span class="p">,</span> <span class="s2">"</span><span class="si">%%%%</span><span class="s2"> PAGE </span><span class="si">%d</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="n">pageno</span><span class="p">);</span> - <span class="n">box_info</span><span class="p">(</span><span class="n">pagedict</span><span class="p">,</span> <span class="n">fh</span><span class="p">);</span> - <span class="k">for</span> <span class="p">(</span><span class="n">stream</span> <span class="o">=</span> <span class="n">ppcontents_first</span><span class="p">(</span><span class="n">pagedict</span><span class="p">);</span> - <span class="n">stream</span> <span class="o">!=</span> <span class="n">NULL</span><span class="p">;</span> - <span class="n">stream</span> <span class="o">=</span> <span class="n">ppcontents_next</span><span class="p">(</span><span class="n">pagedict</span><span class="p">,</span> <span class="n">stream</span><span class="p">))</span> - <span class="p">{</span> - <span class="k">for</span> <span class="p">(</span><span class="n">data</span> <span class="o">=</span> <span class="n">ppstream_first</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> - <span class="n">data</span> <span class="o">!=</span> <span class="n">NULL</span><span class="p">;</span> - <span class="n">data</span> <span class="o">=</span> <span class="n">ppstream_next</span><span class="p">(</span><span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">))</span> - <span class="n">fwrite</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">fh</span><span class="p">);</span> - <span class="n">ppstream_done</span><span class="p">(</span><span class="n">stream</span><span class="p">);</span> - <span class="p">}</span> - <span class="o">/*</span> <span class="n">now</span> <span class="n">parse</span> <span class="n">contents</span> <span class="o">*/</span> - <span class="k">for</span> <span class="p">(</span><span class="n">stream</span> <span class="o">=</span> <span class="n">ppcontents_first</span><span class="p">(</span><span class="n">pagedict</span><span class="p">);</span> - <span class="n">stream</span> <span class="o">!=</span> <span class="n">NULL</span><span class="p">;</span> - <span class="n">stream</span> <span class="o">=</span> <span class="n">ppcontents_next</span><span class="p">(</span><span class="n">pagedict</span><span class="p">,</span> <span class="n">stream</span><span class="p">))</span> - <span class="p">{</span> - <span class="n">operators</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> - <span class="k">for</span> <span class="p">(</span><span class="n">obj</span> <span class="o">=</span> <span class="n">ppcontents_first_op</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="o">&</span><span class="n">op</span><span class="p">);</span> - <span class="n">obj</span> <span class="o">!=</span> <span class="n">NULL</span><span class="p">;</span> - <span class="n">obj</span> <span class="o">=</span> <span class="n">ppcontents_next_op</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">,</span> <span class="o">&</span><span class="n">op</span><span class="p">))</span> - <span class="o">++</span><span class="n">operators</span><span class="p">;</span> - <span class="n">fprintf</span><span class="p">(</span><span class="n">fh</span><span class="p">,</span> <span class="s2">"</span><span class="si">%%%%</span><span class="s2"> OPERATORS count </span><span class="si">%lu</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="p">(</span><span class="n">unsigned</span> <span class="n">long</span><span class="p">)</span><span class="n">operators</span><span class="p">);</span> - <span class="n">ppstream_done</span><span class="p">(</span><span class="n">stream</span><span class="p">);</span> - <span class="o">//</span><span class="n">obj</span> <span class="o">=</span> <span class="n">ppcontents_parse</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="n">stream</span><span class="p">,</span> <span class="o">&</span><span class="n">size</span><span class="p">);</span> - <span class="o">//</span><span class="n">fprintf</span><span class="p">(</span><span class="n">fh</span><span class="p">,</span> <span class="s2">"</span><span class="si">%%%%</span><span class="s2"> items count </span><span class="si">%lu</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="p">(</span><span class="n">unsigned</span> <span class="n">long</span><span class="p">)</span><span class="n">size</span><span class="p">);</span> - <span class="n">fprintf</span><span class="p">(</span><span class="n">fh</span><span class="p">,</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">);</span> - <span class="p">}</span> - <span class="n">ppcontext_done</span><span class="p">(</span><span class="n">context</span><span class="p">);</span> - <span class="p">}</span> - <span class="n">fclose</span><span class="p">(</span><span class="n">fh</span><span class="p">);</span> - <span class="n">ppdoc_free</span><span class="p">(</span><span class="n">pdf</span><span class="p">);</span> - <span class="p">}</span> - <span class="n">ppcontext_free</span><span class="p">(</span><span class="n">context</span><span class="p">);</span> - <span class="n">ppstream_free_buffers</span><span class="p">();</span> - <span class="k">return</span> <span class="mi">0</span><span class="p">;</span> -<span class="p">}</span> -</pre></div> -</div> -</div> -<div class="section" id="example-3"> -<h2>Example 3<a class="headerlink" href="#example-3" title="Permalink to this headline">¶</a></h2> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> -#include <stdio.h> -//#include "ppapi.h" -#include "pplib.h" -#include "assert.h" - -static int usage (const char *argv0) -{ - printf("pplib " pplib_version ", " pplib_author "\n"); - printf("usage: %s file1.pdf file2.pdf ...\n", argv0); - return 0; -} - -static void print_result_filter (ppstream *stream, int decode) -{ - ppstream_filter info; - size_t i; - - ppstream_filter_info(stream, &info, decode); - printf(" when %s: /Filter [", decode ? "uncompressed" : "compressed"); - for (i = 0; i < info.count; ++i) - printf(" /%s", ppstream_filter_name[info.filters[i]]); - printf(" ]"); - if (info.params != NULL) - { - printf(" /DecodeParms ["); - for (i = 0; i < info.count; ++i) - printf(" %s", info.params[i] != NULL ? "<<...>>" : "null"); - printf(" ]"); - } - printf("\n"); -} - -static void print_stream_info (ppref *ref, ppstream *stream) -{ - size_t length; - printf("object %lu %lu R\n", (unsigned long)ref->number, (unsigned long)ref->version); - if (stream->flags & PPSTREAM_FILTER) - printf(" filtered "); - else - printf(" plain "); - if (stream->flags & PPSTREAM_IMAGE) - printf("image "); - else - printf("stream "); - if (stream->flags & PPSTREAM_ENCRYPTED) - printf("encrypted "); - if (stream->flags & PPSTREAM_NOT_SUPPORTED) - printf("invalid "); - if (!ppdict_rget_uint(stream->dict, "Length", &length)) - length = 0; - assert(stream->length == length); - printf("length %lu (/Length %lu)\n", (unsigned long)stream->length, (unsigned long)length); - print_result_filter(stream, 0); - print_result_filter(stream, 1); -} - -static void check_stream_chunks (ppstream *stream) -{ - size_t sum, size; - uint8_t *data; - const int decode[2] = {0, 1}; - int d; - - for (d = 0; d < 2; ++d) - { - for (sum = 0, data = ppstream_first(stream, &size, decode[d]); data != NULL; data = ppstream_next(stream, &size)) - sum += size; - ppstream_done(stream); - ppstream_all(stream, &size, decode[d]); - ppstream_done(stream); - assert(sum == size); - printf(" %s chunks size [%lu]\n", (decode[d] ? "decoded" : "raw"), (unsigned long)size); - } -} - -#define USE_BUFFERS_POOL 1 - -int main (int argc, const char **argv) -{ - const char *filepath; - int a; - ppdoc *pdf; - ppxref *xref; - ppxsec *xsec; - size_t xi; - ppuint refnum; - ppref *ref; - - if (argc < 2) - return usage(argv[0]); - if (USE_BUFFERS_POOL) - ppstream_init_buffers(); - for (a = 1; a < argc; ++a) - { - filepath = argv[a]; - printf("loading %s... ", filepath); - pdf = ppdoc_load(filepath); - if (pdf == NULL) - { - printf("failed\n"); - continue; - } - printf("done.\n"); - for (xref = ppdoc_xref(pdf); xref != NULL; xref = ppxref_prev(xref)) - { - for (xi = 0, xsec = xref->sects; xi < xref->size; ++xi, ++xsec) - { - for (refnum = xsec->first, ref = xsec->refs; refnum <= xsec->last; ++refnum, ++ref) - { - if (ref->object.type != PPSTREAM) - continue; - print_stream_info(ref, ref->object.stream); - check_stream_chunks(ref->object.stream); - } - } - } - ppdoc_free(pdf); - } - if (USE_BUFFERS_POOL) - ppstream_free_buffers(); - return 0; -} -</pre></div> -</div> -</div> -<div class="section" id="ppapi-h"> -<h2>ppapi.h<a class="headerlink" href="#ppapi-h" title="Permalink to this headline">¶</a></h2> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> -<span class="c1">#ifndef PP_API_H</span> -<span class="c1">#define PP_API_H</span> - -<span class="c1">#include <stdint.h></span> -<span class="c1">#include <stddef.h></span> -<span class="c1">#include <string.h></span> - -<span class="c1">#include "ppconf.h"</span> - -<span class="c1">#define pplib_version "v2.05 less toxic i hope"</span> -<span class="c1">#define pplib_author "p.jackowski@gust.org.pl"</span> - -<span class="o">/*</span> <span class="n">types</span> <span class="o">*/</span> - -<span class="n">typedef</span> <span class="n">int64_t</span> <span class="n">ppint</span><span class="p">;</span> -<span class="n">typedef</span> <span class="n">size_t</span> <span class="n">ppuint</span><span class="p">;</span> <span class="o">//</span> <span class="n">machine</span> <span class="n">word</span> - -<span class="n">typedef</span> <span class="n">char</span> <span class="n">ppbyte</span><span class="p">;</span> - -<span class="n">typedef</span> <span class="n">double</span> <span class="n">ppnum</span><span class="p">;</span> - -<span class="n">typedef</span> <span class="n">struct</span> <span class="n">ppname</span> <span class="n">ppname</span><span class="p">;</span> -<span class="n">typedef</span> <span class="n">struct</span> <span class="n">ppstring</span> <span class="n">ppstring</span><span class="p">;</span> - -<span class="n">struct</span> <span class="n">ppname</span> <span class="p">{</span> - <span class="n">ppbyte</span> <span class="o">*</span><span class="n">data</span><span class="p">;</span> - <span class="n">size_t</span> <span class="n">size</span><span class="p">;</span> - <span class="n">ppname</span> <span class="o">*</span><span class="n">alterego</span><span class="p">;</span> - <span class="nb">int</span> <span class="n">flags</span><span class="p">;</span> -<span class="p">};</span> - -<span class="n">struct</span> <span class="n">ppstring</span> <span class="p">{</span> - <span class="n">ppbyte</span> <span class="o">*</span><span class="n">data</span><span class="p">;</span> - <span class="n">size_t</span> <span class="n">size</span><span class="p">;</span> - <span class="n">ppstring</span> <span class="o">*</span><span class="n">alterego</span><span class="p">;</span> - <span class="nb">int</span> <span class="n">flags</span><span class="p">;</span> -<span class="p">};</span> - -<span class="n">typedef</span> <span class="n">struct</span> <span class="n">ppobj</span> <span class="n">ppobj</span><span class="p">;</span> -<span class="n">typedef</span> <span class="n">struct</span> <span class="n">ppref</span> <span class="n">ppref</span><span class="p">;</span> - -<span class="n">typedef</span> <span class="n">struct</span> <span class="p">{</span> - <span class="n">ppobj</span> <span class="o">*</span><span class="n">data</span><span class="p">;</span> - <span class="n">size_t</span> <span class="n">size</span><span class="p">;</span> -<span class="p">}</span> <span class="n">pparray</span><span class="p">;</span> - -<span class="n">typedef</span> <span class="n">struct</span> <span class="p">{</span> - <span class="n">ppobj</span> <span class="o">*</span><span class="n">data</span><span class="p">;</span> - <span class="n">ppname</span> <span class="o">**</span><span class="n">keys</span><span class="p">;</span> - <span class="n">size_t</span> <span class="n">size</span><span class="p">;</span> -<span class="p">}</span> <span class="n">ppdict</span><span class="p">;</span> - -<span class="n">typedef</span> <span class="n">enum</span> <span class="p">{</span> - <span class="n">PPSTREAM_BASE16</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> - <span class="n">PPSTREAM_BASE85</span><span class="p">,</span> - <span class="n">PPSTREAM_RUNLENGTH</span><span class="p">,</span> - <span class="n">PPSTREAM_FLATE</span><span class="p">,</span> - <span class="n">PPSTREAM_LZW</span><span class="p">,</span> - <span class="n">PPSTREAM_CCITT</span><span class="p">,</span> - <span class="n">PPSTREAM_DCT</span><span class="p">,</span> - <span class="n">PPSTREAM_JBIG2</span><span class="p">,</span> - <span class="n">PPSTREAM_JPX</span><span class="p">,</span> - <span class="n">PPSTREAM_CRYPT</span> -<span class="p">}</span> <span class="n">ppstreamtp</span><span class="p">;</span> - -<span class="n">typedef</span> <span class="n">struct</span> <span class="p">{</span> - <span class="n">ppstreamtp</span> <span class="o">*</span><span class="n">filters</span><span class="p">;</span> - <span class="n">ppdict</span> <span class="o">**</span><span class="n">params</span><span class="p">;</span> - <span class="n">size_t</span> <span class="n">count</span><span class="p">;</span> -<span class="p">}</span> <span class="n">ppstream_filter</span><span class="p">;</span> - -<span class="n">typedef</span> <span class="n">struct</span> <span class="p">{</span> - <span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">;</span> - <span class="n">void</span> <span class="o">*</span><span class="nb">input</span><span class="p">,</span> <span class="o">*</span><span class="n">I</span><span class="p">;</span> - <span class="n">size_t</span> <span class="n">offset</span><span class="p">;</span> - <span class="n">size_t</span> <span class="n">length</span><span class="p">;</span> - <span class="n">ppstream_filter</span> <span class="nb">filter</span><span class="p">;</span> - <span class="n">ppobj</span> <span class="o">*</span><span class="n">filespec</span><span class="p">;</span> - <span class="n">ppstring</span> <span class="o">*</span><span class="n">cryptkey</span><span class="p">;</span> - <span class="nb">int</span> <span class="n">flags</span><span class="p">;</span> -<span class="p">}</span> <span class="n">ppstream</span><span class="p">;</span> - -<span class="n">PPDEF</span> <span class="n">extern</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span> <span class="n">ppstream_filter_name</span><span class="p">[];</span> -<span class="n">PPAPI</span> <span class="nb">int</span> <span class="n">ppstream_filter_type</span> <span class="p">(</span><span class="n">ppname</span> <span class="o">*</span><span class="n">filtername</span><span class="p">,</span> <span class="n">ppstreamtp</span> <span class="o">*</span><span class="n">filtertype</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">void</span> <span class="n">ppstream_filter_info</span> <span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">ppstream_filter</span> <span class="o">*</span><span class="n">info</span><span class="p">,</span> <span class="nb">int</span> <span class="n">decode</span><span class="p">);</span> - -<span class="c1">#define PPSTREAM_FILTER (1<<0)</span> -<span class="c1">#define PPSTREAM_IMAGE (1<<1)</span> -<span class="c1">#define PPSTREAM_ENCRYPTED_AES (1<<2)</span> -<span class="c1">#define PPSTREAM_ENCRYPTED_RC4 (1<<3)</span> -<span class="c1">#define PPSTREAM_ENCRYPTED (PPSTREAM_ENCRYPTED_AES|PPSTREAM_ENCRYPTED_RC4)</span> -<span class="c1">#define PPSTREAM_ENCRYPTED_OWN (1<<4)</span> -<span class="c1">#define PPSTREAM_NOT_SUPPORTED (1<<6)</span> - -<span class="c1">#define ppstream_compressed(stream) ((stream)->flags & (PPSTREAM_FILTER|PPSTREAM_IMAGE))</span> -<span class="c1">#define ppstream_filtered(stream) ((stream)->flags & PPSTREAM_FILTER)</span> -<span class="c1">#define ppstream_image(stream) ((stream)->flags & PPSTREAM_IMAGE)</span> -<span class="c1">#define ppstream_encrypted(stream) ((stream)->flags & PPSTREAM_ENCRYPTED)</span> - -<span class="n">typedef</span> <span class="n">enum</span> <span class="p">{</span> - <span class="n">PPNONE</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> - <span class="n">PPNULL</span><span class="p">,</span> - <span class="n">PPBOOL</span><span class="p">,</span> - <span class="n">PPINT</span><span class="p">,</span> - <span class="n">PPNUM</span><span class="p">,</span> - <span class="n">PPNAME</span><span class="p">,</span> - <span class="n">PPSTRING</span><span class="p">,</span> - <span class="n">PPARRAY</span><span class="p">,</span> - <span class="n">PPDICT</span><span class="p">,</span> - <span class="n">PPSTREAM</span><span class="p">,</span> - <span class="n">PPREF</span> -<span class="p">}</span> <span class="n">ppobjtp</span><span class="p">;</span> - -<span class="n">PPDEF</span> <span class="n">extern</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span> <span class="n">ppobj_kind</span><span class="p">[];</span> - -<span class="n">struct</span> <span class="n">ppobj</span> <span class="p">{</span> - <span class="n">union</span> <span class="p">{</span> - <span class="n">ppint</span> <span class="n">integer</span><span class="p">;</span> - <span class="n">ppnum</span> <span class="n">number</span><span class="p">;</span> - <span class="n">ppname</span> <span class="o">*</span><span class="n">name</span><span class="p">;</span> - <span class="n">ppstring</span> <span class="o">*</span><span class="n">string</span><span class="p">;</span> - <span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">;</span> - <span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">;</span> - <span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">;</span> - <span class="n">ppref</span> <span class="o">*</span><span class="n">ref</span><span class="p">;</span> - <span class="n">void</span> <span class="o">*</span><span class="nb">any</span><span class="p">;</span> - <span class="p">};</span> - <span class="n">ppobjtp</span> <span class="nb">type</span><span class="p">;</span> -<span class="p">};</span> - -<span class="n">typedef</span> <span class="n">struct</span> <span class="n">ppxref</span> <span class="n">ppxref</span><span class="p">;</span> - -<span class="n">struct</span> <span class="n">ppref</span> <span class="p">{</span> - <span class="n">ppobj</span> <span class="nb">object</span><span class="p">;</span> - <span class="n">ppuint</span> <span class="n">number</span><span class="p">,</span> <span class="n">version</span><span class="p">;</span> - <span class="n">size_t</span> <span class="n">offset</span><span class="p">;</span> - <span class="n">size_t</span> <span class="n">length</span><span class="p">;</span> - <span class="n">ppxref</span> <span class="o">*</span><span class="n">xref</span><span class="p">;</span> -<span class="p">};</span> - -<span class="n">typedef</span> <span class="n">struct</span> <span class="n">ppdoc</span> <span class="n">ppdoc</span><span class="p">;</span> - -<span class="o">/*</span> <span class="nb">object</span> <span class="o">*/</span> - -<span class="c1">#define ppobj_get_null(o) ((o)->type == PPNULL ? 1 : 0)</span> -<span class="c1">#define ppobj_get_bool(o, v) ((o)->type == PPBOOL ? ((v = ((o)->integer != 0)), 1) : 0)</span> -<span class="c1">#define ppobj_get_int(o, v) ((o)->type == PPINT ? ((v = (o)->integer), 1) : 0)</span> -<span class="c1">#define ppobj_get_uint(o, v) ((o)->type == PPINT && (o)->integer >= 0 ? ((v = (ppuint)((o)->integer)), 1) : 0)</span> -<span class="c1">#define ppobj_get_num(o, v) ((o)->type == PPNUM ? ((v = (o)->number), 1) : (((o)->type == PPINT ? ((v = (ppnum)((o)->integer)), 1) : 0)))</span> -<span class="c1">#define ppobj_get_name(o) ((o)->type == PPNAME ? (o)->name : NULL)</span> -<span class="c1">#define ppobj_get_string(o) ((o)->type == PPSTRING ? (o)->string : NULL)</span> -<span class="c1">#define ppobj_get_array(o) ((o)->type == PPARRAY ? (o)->array : NULL)</span> -<span class="c1">#define ppobj_get_dict(o) ((o)->type == PPDICT ? (o)->dict : NULL)</span> -<span class="c1">#define ppobj_get_stream(o) ((o)->type == PPSTREAM ? (o)->stream : NULL)</span> -<span class="c1">#define ppobj_get_ref(o) ((o)->type == PPREF ? (o)->ref : NULL)</span> - -<span class="c1">#define ppobj_rget_obj(o) ((o)->type == PPREF ? ppref_obj((o)->ref) : o)</span> -<span class="c1">#define ppobj_rget_null(o) ((o)->type == PPNULL ? 1 : ((o)->type == PPREF ? ppobj_get_null(ppref_obj((o)->ref)) : 0))</span> -<span class="c1">#define ppobj_rget_bool(o, v) ((o)->type == PPBOOL ? ((v = ((o)->integer != 0)), 1) : ((o)->type == PPREF ? ppobj_get_bool(ppref_obj((o)->ref), v) : 0))</span> -<span class="c1">#define ppobj_rget_int(o, v) ((o)->type == PPINT ? ((v = (o)->integer), 1) : ((o)->type == PPREF ? ppobj_get_int(ppref_obj((o)->ref), v) : 0))</span> -<span class="c1">#define ppobj_rget_uint(o, v) ((o)->type == PPINT && (o)->integer >= 0 ? ((v = (ppuint)((o)->integer)), 1) : ((o)->type == PPREF ? ppobj_get_uint(ppref_obj((o)->ref), v) : 0))</span> -<span class="c1">#define ppobj_rget_num(o, v) ((o)->type == PPNUM ? ((v = (o)->number), 1) : (((o)->type == PPINT ? ((v = (ppnum)((o)->integer)), 1) : ((o)->type == PPREF ? ppobj_get_num(ppref_obj((o)->ref), v) : 0))))</span> -<span class="c1">#define ppobj_rget_name(o) ((o)->type == PPNAME ? (o)->name : ((o)->type == PPREF ? ppobj_get_name(ppref_obj((o)->ref)) : NULL))</span> -<span class="c1">#define ppobj_rget_string(o) ((o)->type == PPSTRING ? (o)->string : ((o)->type == PPREF ? ppobj_get_string(ppref_obj((o)->ref)) : NULL))</span> -<span class="c1">#define ppobj_rget_array(o) ((o)->type == PPARRAY ? (o)->array : ((o)->type == PPREF ? ppobj_get_array(ppref_obj((o)->ref)) : NULL))</span> -<span class="c1">#define ppobj_rget_dict(o) ((o)->type == PPDICT ? (o)->dict : ((o)->type == PPREF ? ppobj_get_dict(ppref_obj((o)->ref)) : NULL))</span> -<span class="c1">#define ppobj_rget_stream(o) ((o)->type == PPSTREAM ? (o)->stream : ((o)->type == PPREF ? ppobj_get_stream(ppref_obj((o)->ref)) : NULL))</span> -<span class="c1">#define ppobj_rget_ref(o) ((o)->type == PPREF ? (o)->ref : ((o)->type == PPREF ? ppobj_get_ref(ppref_obj((o)->ref)) : NULL))</span> - -<span class="c1">#define ppobj_get_bool_value(o) ((o)->type == PPBOOL ? ((o)->integer != 0) : 0)</span> -<span class="c1">#define ppobj_get_int_value(o) ((o)->type == PPINT ? (o)->integer : 0)</span> -<span class="c1">#define ppobj_get_num_value(o) ((o)->type == PPNUM ? (o)->number : ((o)->type == PPINT ? (ppnum)((o)->integer) : 0.0))</span> - -<span class="o">/*</span> <span class="n">name</span> <span class="o">*/</span> - -<span class="c1">#define ppname_is(name, s) (memcmp((name)->data, s, sizeof("" s) - 1) == 0)</span> -<span class="c1">#define ppname_eq(name, n) (memcmp((name)->data, s, (name)->size) == 0)</span> - -<span class="c1">#define ppname_size(name) ((name)->size)</span> -<span class="c1">#define ppname_exec(name) ((name)->flags & PPNAME_EXEC)</span> -<span class="c1">#define ppname_data(name) ((name)->data)</span> - -<span class="c1">#define PPNAME_ENCODED (1 << 0)</span> -<span class="c1">#define PPNAME_DECODED (1 << 1)</span> -<span class="c1">#define PPNAME_EXEC (1 << 1)</span> - -<span class="n">PPAPI</span> <span class="n">ppname</span> <span class="o">*</span> <span class="n">ppname_decoded</span> <span class="p">(</span><span class="n">ppname</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppname</span> <span class="o">*</span> <span class="n">ppname_encoded</span> <span class="p">(</span><span class="n">ppname</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> - -<span class="n">PPAPI</span> <span class="n">ppbyte</span> <span class="o">*</span> <span class="n">ppname_decoded_data</span> <span class="p">(</span><span class="n">ppname</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppbyte</span> <span class="o">*</span> <span class="n">ppname_encoded_data</span> <span class="p">(</span><span class="n">ppname</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> - -<span class="o">/*</span> <span class="n">string</span> <span class="o">*/</span> - -<span class="c1">#define ppstring_size(string) ((string)->size)</span> -<span class="c1">#define ppstring_data(string) ((string)->data)</span> - -<span class="c1">#define PPSTRING_ENCODED (1 << 0)</span> -<span class="c1">#define PPSTRING_DECODED (1 << 1)</span> -<span class="o">//</span><span class="c1">#define PPSTRING_EXEC (1 << 2) // postscript only</span> -<span class="c1">#define PPSTRING_PLAIN 0</span> -<span class="c1">#define PPSTRING_BASE16 (1 << 3)</span> -<span class="c1">#define PPSTRING_BASE85 (1 << 4)</span> -<span class="c1">#define PPSTRING_UTF16BE (1 << 5)</span> -<span class="c1">#define PPSTRING_UTF16LE (1 << 6)</span> - -<span class="c1">#define ppstring_type(string) ((string)->flags & (PPSTRING_BASE16|PPSTRING_BASE85))</span> -<span class="c1">#define ppstring_hex(string) ((string)->flags & PPSTRING_BASE16)</span> -<span class="c1">#define ppstring_utf(string) ((string)->flags & (PPSTRING_UTF16BE|PPSTRING_UTF16LE))</span> - -<span class="n">PPAPI</span> <span class="n">ppstring</span> <span class="o">*</span> <span class="n">ppstring_decoded</span> <span class="p">(</span><span class="n">ppstring</span> <span class="o">*</span><span class="n">string</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppstring</span> <span class="o">*</span> <span class="n">ppstring_encoded</span> <span class="p">(</span><span class="n">ppstring</span> <span class="o">*</span><span class="n">string</span><span class="p">);</span> - -<span class="n">PPAPI</span> <span class="n">ppbyte</span> <span class="o">*</span> <span class="n">ppstring_decoded_data</span> <span class="p">(</span><span class="n">ppstring</span> <span class="o">*</span><span class="n">string</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppbyte</span> <span class="o">*</span> <span class="n">ppstring_encoded_data</span> <span class="p">(</span><span class="n">ppstring</span> <span class="o">*</span><span class="n">string</span><span class="p">);</span> - -<span class="o">/*</span> <span class="n">array</span> <span class="o">*/</span> - -<span class="c1">#define pparray_size(array) ((array)->size)</span> -<span class="c1">#define pparray_at(array, index) ((array)->data + index)</span> - -<span class="c1">#define pparray_first(array, index, obj) ((index) = 0, (obj) = pparray_at(array, 0))</span> -<span class="c1">#define pparray_next(index, obj) (++(index), ++(obj))</span> - -<span class="c1">#define pparray_get(array, index) (index < (array)->size ? pparray_at(array, index) : NULL)</span> - -<span class="n">PPAPI</span> <span class="n">ppobj</span> <span class="o">*</span> <span class="n">pparray_get_obj</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="nb">int</span> <span class="n">pparray_get_bool</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="nb">int</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="nb">int</span> <span class="n">pparray_get_int</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="n">ppint</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="nb">int</span> <span class="n">pparray_get_uint</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="n">ppuint</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="nb">int</span> <span class="n">pparray_get_num</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="n">ppnum</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppname</span> <span class="o">*</span> <span class="n">pparray_get_name</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppstring</span> <span class="o">*</span> <span class="n">pparray_get_string</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">pparray</span> <span class="o">*</span> <span class="n">pparray_get_array</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppdict</span> <span class="o">*</span> <span class="n">pparray_get_dict</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> -<span class="o">//</span><span class="n">PPAPI</span> <span class="n">ppstream</span> <span class="o">*</span> <span class="n">pparray_get_stream</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppref</span> <span class="o">*</span> <span class="n">pparray_get_ref</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> - -<span class="n">PPAPI</span> <span class="n">ppobj</span> <span class="o">*</span> <span class="n">pparray_rget_obj</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="nb">int</span> <span class="n">pparray_rget_bool</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="nb">int</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="nb">int</span> <span class="n">pparray_rget_int</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="n">ppint</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="nb">int</span> <span class="n">pparray_rget_uint</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="n">ppuint</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="nb">int</span> <span class="n">pparray_rget_num</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">,</span> <span class="n">ppnum</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppname</span> <span class="o">*</span> <span class="n">pparray_rget_name</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppstring</span> <span class="o">*</span> <span class="n">pparray_rget_string</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">pparray</span> <span class="o">*</span> <span class="n">pparray_rget_array</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppdict</span> <span class="o">*</span> <span class="n">pparray_rget_dict</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppstream</span> <span class="o">*</span> <span class="n">pparray_rget_stream</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppref</span> <span class="o">*</span> <span class="n">pparray_rget_ref</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">index</span><span class="p">);</span> - -<span class="o">/*</span> <span class="nb">dict</span> <span class="o">*/</span> - -<span class="c1">#define ppdict_size(dict) ((dict)->size)</span> -<span class="c1">#define ppdict_at(dict, index) ((dict)->data + index)</span> -<span class="c1">#define ppdict_key(dict, index) ((dict)->keys[index])</span> - -<span class="n">PPAPI</span> <span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppdict_get_obj</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="nb">int</span> <span class="n">ppdict_get_bool</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="nb">int</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="nb">int</span> <span class="n">ppdict_get_int</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">ppint</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="nb">int</span> <span class="n">ppdict_get_uint</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">ppuint</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="nb">int</span> <span class="n">ppdict_get_num</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">ppnum</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppname</span> <span class="o">*</span> <span class="n">ppdict_get_name</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppstring</span> <span class="o">*</span> <span class="n">ppdict_get_string</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">pparray</span> <span class="o">*</span> <span class="n">ppdict_get_array</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppdict</span> <span class="o">*</span> <span class="n">ppdict_get_dict</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="o">//</span><span class="n">PPAPI</span> <span class="n">ppstream</span> <span class="o">*</span> <span class="n">ppdict_get_stream</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppref</span> <span class="o">*</span> <span class="n">ppdict_get_ref</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> - -<span class="n">PPAPI</span> <span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppdict_rget_obj</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="nb">int</span> <span class="n">ppdict_rget_bool</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="nb">int</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="nb">int</span> <span class="n">ppdict_rget_int</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">ppint</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="nb">int</span> <span class="n">ppdict_rget_uint</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">ppuint</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="nb">int</span> <span class="n">ppdict_rget_num</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">ppnum</span> <span class="o">*</span><span class="n">v</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppname</span> <span class="o">*</span> <span class="n">ppdict_rget_name</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppstring</span> <span class="o">*</span> <span class="n">ppdict_rget_string</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">pparray</span> <span class="o">*</span> <span class="n">ppdict_rget_array</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppdict</span> <span class="o">*</span> <span class="n">ppdict_rget_dict</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppstream</span> <span class="o">*</span> <span class="n">ppdict_rget_stream</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppref</span> <span class="o">*</span> <span class="n">ppdict_rget_ref</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> - -<span class="c1">#define ppdict_first(dict, pkey, obj) (pkey = (dict)->keys, obj = (dict)->data)</span> -<span class="c1">#define ppdict_next(pkey, obj) (++(pkey), ++(obj))</span> - -<span class="o">/*</span> <span class="n">stream</span> <span class="o">*/</span> - -<span class="c1">#define ppstream_dict(stream) ((stream)->dict)</span> - -<span class="n">PPAPI</span> <span class="n">uint8_t</span> <span class="o">*</span> <span class="n">ppstream_first</span> <span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">size</span><span class="p">,</span> <span class="nb">int</span> <span class="n">decode</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">uint8_t</span> <span class="o">*</span> <span class="n">ppstream_next</span> <span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">size</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">uint8_t</span> <span class="o">*</span> <span class="n">ppstream_all</span> <span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">size</span><span class="p">,</span> <span class="nb">int</span> <span class="n">decode</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">void</span> <span class="n">ppstream_done</span> <span class="p">(</span><span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">);</span> - -<span class="n">PPAPI</span> <span class="n">void</span> <span class="n">ppstream_init_buffers</span> <span class="p">(</span><span class="n">void</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">void</span> <span class="n">ppstream_free_buffers</span> <span class="p">(</span><span class="n">void</span><span class="p">);</span> - -<span class="o">/*</span> <span class="n">ref</span> <span class="o">*/</span> - -<span class="c1">#define ppref_obj(ref) (&(ref)->object)</span> - -<span class="o">/*</span> <span class="n">xref</span> <span class="o">*/</span> - -<span class="n">PPAPI</span> <span class="n">ppxref</span> <span class="o">*</span> <span class="n">ppdoc_xref</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppxref</span> <span class="o">*</span> <span class="n">ppxref_prev</span> <span class="p">(</span><span class="n">ppxref</span> <span class="o">*</span><span class="n">xref</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppdict</span> <span class="o">*</span> <span class="n">ppxref_trailer</span> <span class="p">(</span><span class="n">ppxref</span> <span class="o">*</span><span class="n">xref</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppdict</span> <span class="o">*</span> <span class="n">ppxref_catalog</span> <span class="p">(</span><span class="n">ppxref</span> <span class="o">*</span><span class="n">xref</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppdict</span> <span class="o">*</span> <span class="n">ppxref_info</span> <span class="p">(</span><span class="n">ppxref</span> <span class="o">*</span><span class="n">xref</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppref</span> <span class="o">*</span> <span class="n">ppxref_pages</span> <span class="p">(</span><span class="n">ppxref</span> <span class="o">*</span><span class="n">xref</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppref</span> <span class="o">*</span> <span class="n">ppxref_find</span> <span class="p">(</span><span class="n">ppxref</span> <span class="o">*</span><span class="n">xref</span><span class="p">,</span> <span class="n">ppuint</span> <span class="n">refnumber</span><span class="p">);</span> - -<span class="o">/*</span> <span class="n">doc</span> <span class="o">*/</span> - -<span class="n">PPAPI</span> <span class="n">ppdoc</span> <span class="o">*</span> <span class="n">ppdoc_load</span> <span class="p">(</span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">filename</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppdoc</span> <span class="o">*</span> <span class="n">ppdoc_filehandle</span> <span class="p">(</span><span class="n">FILE</span> <span class="o">*</span><span class="n">file</span><span class="p">,</span> <span class="nb">int</span> <span class="n">closefile</span><span class="p">);</span> -<span class="c1">#define ppdoc_file(file) ppdoc_filehandle(file, 1)</span> -<span class="n">PPAPI</span> <span class="n">ppdoc</span> <span class="o">*</span> <span class="n">ppdoc_mem</span> <span class="p">(</span><span class="n">const</span> <span class="n">void</span> <span class="o">*</span><span class="n">data</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">size</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">void</span> <span class="n">ppdoc_free</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> - -<span class="c1">#define ppdoc_trailer(pdf) ppxref_trailer(ppdoc_xref(pdf))</span> -<span class="c1">#define ppdoc_catalog(pdf) ppxref_catalog(ppdoc_xref(pdf))</span> -<span class="c1">#define ppdoc_info(pdf) ppxref_info(ppdoc_xref(pdf))</span> -<span class="c1">#define ppdoc_pages(pdf) ppxref_pages(ppdoc_xref(pdf))</span> - -<span class="n">PPAPI</span> <span class="n">ppuint</span> <span class="n">ppdoc_page_count</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppref</span> <span class="o">*</span> <span class="n">ppdoc_page</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">,</span> <span class="n">ppuint</span> <span class="n">index</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppref</span> <span class="o">*</span> <span class="n">ppdoc_first_page</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppref</span> <span class="o">*</span> <span class="n">ppdoc_next_page</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> - -<span class="n">PPAPI</span> <span class="n">ppstream</span> <span class="o">*</span> <span class="n">ppcontents_first</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppstream</span> <span class="o">*</span> <span class="n">ppcontents_next</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">);</span> - -<span class="o">/*</span> <span class="n">crypt</span> <span class="o">*/</span> - -<span class="n">typedef</span> <span class="n">enum</span> <span class="p">{</span> - <span class="n">PPCRYPT_NONE</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> - <span class="n">PPCRYPT_DONE</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">PPCRYPT_FAIL</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> - <span class="n">PPCRYPT_PASS</span> <span class="o">=</span> <span class="o">-</span><span class="mi">2</span> -<span class="p">}</span> <span class="n">ppcrypt_status</span><span class="p">;</span> - -<span class="n">PPAPI</span> <span class="n">ppcrypt_status</span> <span class="n">ppdoc_crypt_status</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppcrypt_status</span> <span class="n">ppdoc_crypt_pass</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">,</span> <span class="n">const</span> <span class="n">void</span> <span class="o">*</span><span class="n">userpass</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">userpasslength</span><span class="p">,</span> <span class="n">const</span> <span class="n">void</span> <span class="o">*</span><span class="n">ownerpass</span><span class="p">,</span> <span class="n">size_t</span> <span class="n">ownerpasslength</span><span class="p">);</span> - -<span class="o">/*</span> <span class="n">permission</span> <span class="n">flags</span><span class="p">,</span> <span class="n">effect</span> <span class="ow">in</span> <span class="n">Acrobat</span> <span class="n">File</span> <span class="o">-></span> <span class="n">Properties</span> <span class="o">-></span> <span class="n">Security</span> <span class="n">tab</span> <span class="o">*/</span> - -<span class="n">PPAPI</span> <span class="n">ppint</span> <span class="n">ppdoc_permissions</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> - -<span class="c1">#define PPDOC_ALLOW_PRINT (1<<2) // printing</span> -<span class="c1">#define PPDOC_ALLOW_MODIFY (1<<3) // filling form fields, signing, creating template pages</span> -<span class="c1">#define PPDOC_ALLOW_COPY (1<<4) // copying, copying for accessibility</span> -<span class="c1">#define PPDOC_ALLOW_ANNOTS (1<<5) // filling form fields, copying, signing</span> -<span class="c1">#define PPDOC_ALLOW_EXTRACT (1<<9) // contents copying for accessibility</span> -<span class="c1">#define PPDOC_ALLOW_ASSEMBLY (1<<10) // (no effect)</span> -<span class="c1">#define PPDOC_ALLOW_PRINT_HIRES (1<<11) // (no effect)</span> - -<span class="o">/*</span> <span class="n">context</span> <span class="o">*/</span> - -<span class="n">typedef</span> <span class="n">struct</span> <span class="n">ppcontext</span> <span class="n">ppcontext</span><span class="p">;</span> - -<span class="n">PPAPI</span> <span class="n">ppcontext</span> <span class="o">*</span> <span class="n">ppcontext_new</span> <span class="p">(</span><span class="n">void</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">void</span> <span class="n">ppcontext_done</span> <span class="p">(</span><span class="n">ppcontext</span> <span class="o">*</span><span class="n">context</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">void</span> <span class="n">ppcontext_free</span> <span class="p">(</span><span class="n">ppcontext</span> <span class="o">*</span><span class="n">context</span><span class="p">);</span> - -<span class="o">/*</span> <span class="n">contents</span> <span class="n">parser</span> <span class="o">*/</span> - -<span class="n">PPAPI</span> <span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppcontents_first_op</span> <span class="p">(</span><span class="n">ppcontext</span> <span class="o">*</span><span class="n">context</span><span class="p">,</span> <span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">psize</span><span class="p">,</span> <span class="n">ppname</span> <span class="o">**</span><span class="n">pname</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppcontents_next_op</span> <span class="p">(</span><span class="n">ppcontext</span> <span class="o">*</span><span class="n">context</span><span class="p">,</span> <span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">psize</span><span class="p">,</span> <span class="n">ppname</span> <span class="o">**</span><span class="n">pname</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppobj</span> <span class="o">*</span> <span class="n">ppcontents_parse</span> <span class="p">(</span><span class="n">ppcontext</span> <span class="o">*</span><span class="n">context</span><span class="p">,</span> <span class="n">ppstream</span> <span class="o">*</span><span class="n">stream</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">psize</span><span class="p">);</span> - -<span class="o">/*</span> <span class="n">boxes</span> <span class="ow">and</span> <span class="n">transforms</span> <span class="o">*/</span> - -<span class="n">typedef</span> <span class="n">struct</span> <span class="p">{</span> - <span class="n">ppnum</span> <span class="n">lx</span><span class="p">,</span> <span class="n">ly</span><span class="p">,</span> <span class="n">rx</span><span class="p">,</span> <span class="n">ry</span><span class="p">;</span> -<span class="p">}</span> <span class="n">pprect</span><span class="p">;</span> - -<span class="n">PPAPI</span> <span class="n">pprect</span> <span class="o">*</span> <span class="n">pparray_to_rect</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">pprect</span> <span class="o">*</span><span class="n">rect</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">pprect</span> <span class="o">*</span> <span class="n">ppdict_get_rect</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">pprect</span> <span class="o">*</span><span class="n">rect</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">pprect</span> <span class="o">*</span> <span class="n">ppdict_get_box</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">pprect</span> <span class="o">*</span><span class="n">rect</span><span class="p">);</span> - -<span class="n">typedef</span> <span class="n">struct</span> <span class="p">{</span> - <span class="n">ppnum</span> <span class="n">xx</span><span class="p">,</span> <span class="n">xy</span><span class="p">,</span> <span class="n">yx</span><span class="p">,</span> <span class="n">yy</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">;</span> -<span class="p">}</span> <span class="n">ppmatrix</span><span class="p">;</span> - -<span class="n">PPAPI</span> <span class="n">ppmatrix</span> <span class="o">*</span> <span class="n">pparray_to_matrix</span> <span class="p">(</span><span class="n">pparray</span> <span class="o">*</span><span class="n">array</span><span class="p">,</span> <span class="n">ppmatrix</span> <span class="o">*</span><span class="n">matrix</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppmatrix</span> <span class="o">*</span> <span class="n">ppdict_get_matrix</span> <span class="p">(</span><span class="n">ppdict</span> <span class="o">*</span><span class="nb">dict</span><span class="p">,</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">ppmatrix</span> <span class="o">*</span><span class="n">matrix</span><span class="p">);</span> - -<span class="o">/*</span> <span class="n">logger</span> <span class="o">*/</span> - -<span class="n">typedef</span> <span class="n">void</span> <span class="p">(</span><span class="o">*</span><span class="n">pplogger_callback</span><span class="p">)</span> <span class="p">(</span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">message</span><span class="p">,</span> <span class="n">void</span> <span class="o">*</span><span class="n">alien</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">void</span> <span class="n">pplog_callback</span> <span class="p">(</span><span class="n">pplogger_callback</span> <span class="n">logger</span><span class="p">,</span> <span class="n">void</span> <span class="o">*</span><span class="n">alien</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="nb">int</span> <span class="n">pplog_prefix</span> <span class="p">(</span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="n">prefix</span><span class="p">);</span> - -<span class="o">/*</span> <span class="n">version</span> <span class="o">*/</span> - -<span class="n">PPAPI</span> <span class="n">const</span> <span class="n">char</span> <span class="o">*</span> <span class="n">ppdoc_version_string</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="nb">int</span> <span class="n">ppdoc_version_number</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">,</span> <span class="nb">int</span> <span class="o">*</span><span class="n">minor</span><span class="p">);</span> - -<span class="o">/*</span> <span class="n">doc</span> <span class="n">info</span> <span class="o">*/</span> - -<span class="n">PPAPI</span> <span class="n">size_t</span> <span class="n">ppdoc_file_size</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppuint</span> <span class="n">ppdoc_objects</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">size_t</span> <span class="n">ppdoc_memory</span> <span class="p">(</span><span class="n">ppdoc</span> <span class="o">*</span><span class="n">pdf</span><span class="p">,</span> <span class="n">size_t</span> <span class="o">*</span><span class="n">waste</span><span class="p">);</span> - -<span class="c1">#endif</span> -</pre></div> -</div> -</div> -</div> -<div class="section" id="changes"> -<h1>Changes<a class="headerlink" href="#changes" title="Permalink to this headline">¶</a></h1> -<div class="section" id="v0-97"> -<h2>v0.97<a class="headerlink" href="#v0-97" title="Permalink to this headline">¶</a></h2> -<p>First release integrated with luatex sources, plus portability changes from Luigi.</p> -</div> -<div class="section" id="v0-98"> -<h2>v0.98<a class="headerlink" href="#v0-98" title="Permalink to this headline">¶</a></h2> -<p>Changed references resolving in case of incremental updates; tech notes ppxref_find() in ppxref.c.</p> -</div> -<div class="section" id="v0-99"> -<h2>v0.99<a class="headerlink" href="#v0-99" title="Permalink to this headline">¶</a></h2> -<p>Fixed streams handling; null characters should NOT be gobbled after “stream†keyword</p> -</div> -<div class="section" id="v1-00"> -<h2>v1.00<a class="headerlink" href="#v1-00" title="Permalink to this headline">¶</a></h2> -<p>Fixed streams handling (Luigi); object streams updated before other streams -Revised streams handling, ppstream API extended</p> -</div> -<div class="section" id="v1-01"> -<h2>v1.01<a class="headerlink" href="#v1-01" title="Permalink to this headline">¶</a></h2> -<p>Fixed names handling (thanks Hans); digits after ‘#’ weren’t skipped</p> -</div> -<div class="section" id="v1-02"> -<h2>v1.02<a class="headerlink" href="#v1-02" title="Permalink to this headline">¶</a></h2> -<p>Fixed page finder (thanks Luigi)</p> -</div> -<div class="section" id="v1-03"> -<h2>v1.03<a class="headerlink" href="#v1-03" title="Permalink to this headline">¶</a></h2> -<p>Fixed TIFF predictor (thanks folks)</p> -</div> -<div class="section" id="v1-04"> -<h2>v1.04<a class="headerlink" href="#v1-04" title="Permalink to this headline">¶</a></h2> -<p>Fixed TIFF predictor for ARM</p> -</div> -<div class="section" id="v1-05"> -<h2>v1.05<a class="headerlink" href="#v1-05" title="Permalink to this headline">¶</a></h2> -<p>Attempt to fix parsing inline images crap</p> -</div> -<div class="section" id="v2-00"> -<h2>v2.00<a class="headerlink" href="#v2-00" title="Permalink to this headline">¶</a></h2> -<p>Deep rework on allocators. -Deep rework on strings and names.</p> -</div> -<div class="section" id="v2-01"> -<h2>v2.01<a class="headerlink" href="#v2-01" title="Permalink to this headline">¶</a></h2> -<p>Fixed invalid stream buffer handling; <code class="docutils literal notranslate"><span class="pre">iof_discard()</span></code> no longer reclaims the source (<code class="docutils literal notranslate"><span class="pre">filter->next</span></code>) filter. -Sanity alignment adjustments in <code class="docutils literal notranslate"><span class="pre">iof_heap</span></code>.</p> -</div> -<div class="section" id="v2-02"> -<h2>v2.02<a class="headerlink" href="#v2-02" title="Permalink to this headline">¶</a></h2> -<p>Fixed incorrect encoding of strings alterego with octal escaping, thanks Luigi. -On Hans request added <code class="docutils literal notranslate"><span class="pre">ppdoc_filehandle()</span></code> function and <code class="docutils literal notranslate"><span class="pre">ppdoc_file()</span></code> macro for loading ppdoc from <code class="docutils literal notranslate"><span class="pre">FILE</span> <span class="pre">*</span></code>.</p> -</div> -<div class="section" id="v2-03"> -<h2>v2.03<a class="headerlink" href="#v2-03" title="Permalink to this headline">¶</a></h2> -<p>Fixed alloc/free of <code class="docutils literal notranslate"><span class="pre">ppdoc</span></code> heap; <code class="docutils literal notranslate"><span class="pre">ppdoc</span></code> is now mallocated, no longer taken from its own heap. Again, thanks Luigi. -Fixed warnings about dereferencing type-puned pointers, and some others.</p> -</div> -<div class="section" id="v2-04"> -<h2>v2.04<a class="headerlink" href="#v2-04" title="Permalink to this headline">¶</a></h2> -<p>Byte lookups for names/strings loaders are now int8_t, as char might be signed. -ppdoc_first_page() / ppdoc_next_page() iterator now handles a case when /Kids array is empty. -Fixed generating keys for encrypted streams; ppstring_internal() returns the string of the proper size. -More stream tests in pptest3.c. -Some rework on md5 and sha2.</p> -</div> -<div class="section" id="v2-05"> -<h2>v2.05<a class="headerlink" href="#v2-05" title="Permalink to this headline">¶</a></h2> -<p>uint8_t instead of ppbyte in internals; ppbyte intent is “the most natural 8-bit integerâ€, so it is ‘char’, -but internally we almost always need uint8_t (char may be signed or not..)</p> -</div> -</div> -<div class="section" id="todo"> -<h1>TODO<a class="headerlink" href="#todo" title="Permalink to this headline">¶</a></h1> -<ul class="simple"> -<li>external streams (egzotic)</li> -</ul> -</div> - - - </div> - </div> - </div> - <div class="clearer"></div> - </div> - <div class="related" role="navigation" aria-label="related navigation"> - <h3>Navigation</h3> - <ul> - <li class="right" style="margin-right: 10px"> - <a href="genindex.html" title="General Index" - >index</a></li> - <li class="right" > - <a href="ppapi-1.x.html" title="pplib 1.x" - >previous</a> |</li> - <li class="nav-item nav-item-0"><a href="pplib.html">pplib 0.1 documentation</a> »</li> - </ul> - </div> - <div class="footer" role="contentinfo"> - © Copyright 2019, p.jackowski@gust.org.pl. - Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5. - </div> - </body> -</html>
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/pplib.html b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/pplib.html deleted file mode 100644 index 3066c7ab6c8..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/pplib.html +++ /dev/null @@ -1,176 +0,0 @@ - - -<!doctype html> - -<html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>pplib — pplib 0.1 documentation</title> - <link rel="stylesheet" href="_static/bizstyle.css" type="text/css" /> - <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> - - <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="_static/language_data.js"></script> - <script type="text/javascript" src="_static/bizstyle.js"></script> - <link rel="index" title="Index" href="genindex.html" /> - <link rel="search" title="Search" href="search.html" /> - <link rel="next" title="1.x vs 2.x" href="ppnew.html" /> - <meta name="viewport" content="width=device-width,initial-scale=1.0"> - <!--[if lt IE 9]> - <script type="text/javascript" src="_static/css3-mediaqueries.js"></script> - <![endif]--> - </head><body> - <div class="related" role="navigation" aria-label="related navigation"> - <h3>Navigation</h3> - <ul> - <li class="right" style="margin-right: 10px"> - <a href="genindex.html" title="General Index" - accesskey="I">index</a></li> - <li class="right" > - <a href="ppnew.html" title="1.x vs 2.x" - accesskey="N">next</a> |</li> - <li class="nav-item nav-item-0"><a href="#">pplib 0.1 documentation</a> »</li> - </ul> - </div> - <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> - <div class="sphinxsidebarwrapper"> - <h4>Next topic</h4> - <p class="topless"><a href="ppnew.html" - title="next chapter">1.x vs 2.x</a></p> - <div role="note" aria-label="source link"> - <h3>This Page</h3> - <ul class="this-page-menu"> - <li><a href="_sources/pplib.rst.txt" - rel="nofollow">Show Source</a></li> - </ul> - </div> -<div id="searchbox" style="display: none" role="search"> - <h3>Quick search</h3> - <div class="searchformwrapper"> - <form class="search" action="search.html" method="get"> - <input type="text" name="q" /> - <input type="submit" value="Go" /> - <input type="hidden" name="check_keywords" value="yes" /> - <input type="hidden" name="area" value="default" /> - </form> - </div> -</div> -<script type="text/javascript">$('#searchbox').show(0);</script> - </div> - </div> - - <div class="document"> - <div class="documentwrapper"> - <div class="bodywrapper"> - <div class="body" role="main"> - - <div class="section" id="pplib"> -<h1>pplib<a class="headerlink" href="#pplib" title="Permalink to this headline">¶</a></h1> -<div class="toctree-wrapper compound"> -<ul> -<li class="toctree-l1"><a class="reference internal" href="ppnew.html">1.x vs 2.x</a><ul> -<li class="toctree-l2"><a class="reference internal" href="ppnew.html#allocation">Allocation</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppnew.html#strings-and-names">Strings And Names</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppnew.html#cleanups">Cleanups</a></li> -</ul> -</li> -<li class="toctree-l1"><a class="reference internal" href="ppapi-2.x.html"><code class="docutils literal notranslate"><span class="pre">pplib</span></code> 2.x</a></li> -<li class="toctree-l1"><a class="reference internal" href="ppapi-2.x.html#c-api">C-API</a><ul> -<li class="toctree-l2"><a class="reference internal" href="ppapi-2.x.html#types">Types</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-2.x.html#object">Object</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-2.x.html#names">Names</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-2.x.html#string">String</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-2.x.html#array">Array</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-2.x.html#dict">Dict</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-2.x.html#stream">Stream</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-2.x.html#filters">Filters</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-2.x.html#ref">Ref</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-2.x.html#xref">XRef</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-2.x.html#pdf">PDF</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-2.x.html#encryption">Encryption</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-2.x.html#pages">Pages</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-2.x.html#contents">Contents</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-2.x.html#boxes">Boxes</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-2.x.html#transforms">Transforms</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-2.x.html#errors-handling">Errors handling</a></li> -</ul> -</li> -<li class="toctree-l1"><a class="reference internal" href="ppapi-1.x.html"><code class="docutils literal notranslate"><span class="pre">pplib</span></code> 1.x</a></li> -<li class="toctree-l1"><a class="reference internal" href="ppapi-1.x.html#c-api">C-API</a><ul> -<li class="toctree-l2"><a class="reference internal" href="ppapi-1.x.html#types">Types</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-1.x.html#object">Object</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-1.x.html#names">Names</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-1.x.html#string">String</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-1.x.html#array">Array</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-1.x.html#dict">Dict</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-1.x.html#stream">Stream</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-1.x.html#filters">Filters</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-1.x.html#ref">Ref</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-1.x.html#xref">XRef</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-1.x.html#pdf">PDF</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-1.x.html#encryption">Encryption</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-1.x.html#pages">Pages</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-1.x.html#contents">Contents</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-1.x.html#boxes">Boxes</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-1.x.html#transforms">Transforms</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppapi-1.x.html#errors-handling">Errors handling</a></li> -</ul> -</li> -<li class="toctree-l1"><a class="reference internal" href="ppcode.html">Examples</a><ul> -<li class="toctree-l2"><a class="reference internal" href="ppcode.html#example-1">Example 1</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppcode.html#example-2">Example 2</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppcode.html#example-3">Example 3</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppcode.html#ppapi-h">ppapi.h</a></li> -</ul> -</li> -<li class="toctree-l1"><a class="reference internal" href="ppcode.html#changes">Changes</a><ul> -<li class="toctree-l2"><a class="reference internal" href="ppcode.html#v0-97">v0.97</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppcode.html#v0-98">v0.98</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppcode.html#v0-99">v0.99</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppcode.html#v1-00">v1.00</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppcode.html#v1-01">v1.01</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppcode.html#v1-02">v1.02</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppcode.html#v1-03">v1.03</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppcode.html#v1-04">v1.04</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppcode.html#v1-05">v1.05</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppcode.html#v2-00">v2.00</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppcode.html#v2-01">v2.01</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppcode.html#v2-02">v2.02</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppcode.html#v2-03">v2.03</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppcode.html#v2-04">v2.04</a></li> -<li class="toctree-l2"><a class="reference internal" href="ppcode.html#v2-05">v2.05</a></li> -</ul> -</li> -<li class="toctree-l1"><a class="reference internal" href="ppcode.html#todo">TODO</a></li> -</ul> -</div> -</div> - - - </div> - </div> - </div> - <div class="clearer"></div> - </div> - <div class="related" role="navigation" aria-label="related navigation"> - <h3>Navigation</h3> - <ul> - <li class="right" style="margin-right: 10px"> - <a href="genindex.html" title="General Index" - >index</a></li> - <li class="right" > - <a href="ppnew.html" title="1.x vs 2.x" - >next</a> |</li> - <li class="nav-item nav-item-0"><a href="#">pplib 0.1 documentation</a> »</li> - </ul> - </div> - <div class="footer" role="contentinfo"> - © Copyright 2019, p.jackowski@gust.org.pl. - Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5. - </div> - </body> -</html>
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/ppnew.html b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/ppnew.html deleted file mode 100644 index 734d81da1f3..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/ppnew.html +++ /dev/null @@ -1,209 +0,0 @@ - - -<!doctype html> - -<html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>1.x vs 2.x — pplib 0.1 documentation</title> - <link rel="stylesheet" href="_static/bizstyle.css" type="text/css" /> - <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> - - <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="_static/language_data.js"></script> - <script type="text/javascript" src="_static/bizstyle.js"></script> - <link rel="index" title="Index" href="genindex.html" /> - <link rel="search" title="Search" href="search.html" /> - <link rel="next" title="pplib 2.x" href="ppapi-2.x.html" /> - <link rel="prev" title="pplib" href="pplib.html" /> - <meta name="viewport" content="width=device-width,initial-scale=1.0"> - <!--[if lt IE 9]> - <script type="text/javascript" src="_static/css3-mediaqueries.js"></script> - <![endif]--> - </head><body> - <div class="related" role="navigation" aria-label="related navigation"> - <h3>Navigation</h3> - <ul> - <li class="right" style="margin-right: 10px"> - <a href="genindex.html" title="General Index" - accesskey="I">index</a></li> - <li class="right" > - <a href="ppapi-2.x.html" title="pplib 2.x" - accesskey="N">next</a> |</li> - <li class="right" > - <a href="pplib.html" title="pplib" - accesskey="P">previous</a> |</li> - <li class="nav-item nav-item-0"><a href="pplib.html">pplib 0.1 documentation</a> »</li> - </ul> - </div> - <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> - <div class="sphinxsidebarwrapper"> - <h3><a href="pplib.html">Table of Contents</a></h3> - <ul> -<li><a class="reference internal" href="#">1.x vs 2.x</a><ul> -<li><a class="reference internal" href="#allocation">Allocation</a></li> -<li><a class="reference internal" href="#strings-and-names">Strings And Names</a></li> -<li><a class="reference internal" href="#cleanups">Cleanups</a></li> -</ul> -</li> -</ul> - - <h4>Previous topic</h4> - <p class="topless"><a href="pplib.html" - title="previous chapter">pplib</a></p> - <h4>Next topic</h4> - <p class="topless"><a href="ppapi-2.x.html" - title="next chapter"><code class="docutils literal notranslate"><span class="pre">pplib</span></code> 2.x</a></p> - <div role="note" aria-label="source link"> - <h3>This Page</h3> - <ul class="this-page-menu"> - <li><a href="_sources/ppnew.rst.txt" - rel="nofollow">Show Source</a></li> - </ul> - </div> -<div id="searchbox" style="display: none" role="search"> - <h3>Quick search</h3> - <div class="searchformwrapper"> - <form class="search" action="search.html" method="get"> - <input type="text" name="q" /> - <input type="submit" value="Go" /> - <input type="hidden" name="check_keywords" value="yes" /> - <input type="hidden" name="area" value="default" /> - </form> - </div> -</div> -<script type="text/javascript">$('#searchbox').show(0);</script> - </div> - </div> - - <div class="document"> - <div class="documentwrapper"> - <div class="bodywrapper"> - <div class="body" role="main"> - - <div class="section" id="x-vs-2-x"> -<h1>1.x vs 2.x<a class="headerlink" href="#x-vs-2-x" title="Permalink to this headline">¶</a></h1> -<div class="section" id="allocation"> -<h2>Allocation<a class="headerlink" href="#allocation" title="Permalink to this headline">¶</a></h2> -<p>Allocation mechanisms has been revised. All objects are still allocated from a private storage (called heap), -but now the heap serves properly aligned memory chunks. Implementation of the heap is (hopefully) platform -independent, so all <code class="docutils literal notranslate"><span class="pre">ARM_COMPLIANT</span></code> checks has been removed. Some details work differently on 32/64-bit -machines, this distinction seems inevitable. Allocation related code has been moved to <code class="docutils literal notranslate"><span class="pre">util/utilmem*.c</span></code> files.</p> -<p>[There are actually 3 different allocators - <strong>heap</strong>, <strong>stock</strong>, and <strong>pool</strong> - each of which has 4 variants -for 1, 2, 4 and 8 bytes alignment. So far <code class="docutils literal notranslate"><span class="pre">pplib</span></code> uses only the <strong>heap</strong>, but I want to have this part -in a single place for a while. More notes about allocators in <code class="docutils literal notranslate"><span class="pre">utilmemallc.h</span></code>.]</p> -<p><code class="docutils literal notranslate"><span class="pre">pplib</span></code> uses two heaps:</p> -<ul class="simple"> -<li>bytes heap - providing 2-bytes aligned memory chunks for byte data</li> -<li>structures heap - providing 8-bytes aligned chunks for all structures</li> -</ul> -<p>2-bytes alignment of byte data is caused by implementation details / limits, <code class="docutils literal notranslate"><span class="pre">pplib</span></code> doesn’t make a use of it -(could be unaligned as well). All the structures are stored in 8-bytes aligned chunks on both 32 and 64-bit machines -(in some structures we use <code class="docutils literal notranslate"><span class="pre">double</span></code> and <code class="docutils literal notranslate"><span class="pre">int64_t</span></code>, which generally needs 8-bytes).</p> -</div> -<div class="section" id="strings-and-names"> -<h2>Strings And Names<a class="headerlink" href="#strings-and-names" title="Permalink to this headline">¶</a></h2> -<p>So far, both <code class="docutils literal notranslate"><span class="pre">ppname</span></code> and <code class="docutils literal notranslate"><span class="pre">ppstring</span></code> were aliases to <code class="docutils literal notranslate"><span class="pre">char</span> <span class="pre">*</span></code> with an extra structure hidden just below -the data address. The idea was to make a string or name usable whenever chars array can, at the cost of some -pointers trickery. Both names and strings keep an information about pdf-encoded data, as well as plain bytes data. -I implemented this feature once <code class="docutils literal notranslate"><span class="pre">pplib</span> <span class="pre">1.0</span></code> was almost done, and to avoid a revolution, I made that with yet -another trick. This all was dirty and caused lots of alignment issues.</p> -<p>Now <code class="docutils literal notranslate"><span class="pre">ppstring</span></code> and <code class="docutils literal notranslate"><span class="pre">ppname</span></code> are <strong>structures</strong>, keeping data and size members, pretty much like <code class="docutils literal notranslate"><span class="pre">pparray</span></code>:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">struct</span> <span class="n">ppname</span> <span class="p">{</span> - <span class="n">ppbyte</span> <span class="o">*</span><span class="n">data</span><span class="p">;</span> - <span class="n">size_t</span> <span class="n">size</span><span class="p">;</span> - <span class="n">ppname</span> <span class="o">*</span><span class="n">alterego</span><span class="p">;</span> - <span class="nb">int</span> <span class="n">flags</span><span class="p">;</span> -<span class="p">};</span> - -<span class="n">struct</span> <span class="n">ppstring</span> <span class="p">{</span> - <span class="n">ppbyte</span> <span class="o">*</span><span class="n">data</span><span class="p">;</span> - <span class="n">size_t</span> <span class="n">size</span><span class="p">;</span> - <span class="n">ppstring</span> <span class="o">*</span><span class="n">alterego</span><span class="p">;</span> - <span class="nb">int</span> <span class="n">flags</span><span class="p">;</span> -<span class="p">};</span> -</pre></div> -</div> -<p>Data member is a pointer to (2-bytes aligned) bytes array – <code class="docutils literal notranslate"><span class="pre">ppbyte</span> <span class="pre">*</span></code>. <code class="docutils literal notranslate"><span class="pre">ppbyte</span></code> is an alias to <code class="docutils literal notranslate"><span class="pre">char</span></code>. -<code class="docutils literal notranslate"><span class="pre">pplib</span></code> makes no assumptions about <code class="docutils literal notranslate"><span class="pre">ppbyte</span></code> signedness. [I’d prefer to have <code class="docutils literal notranslate"><span class="pre">uint8_t</span></code>, but better -keep that in sync with <code class="docutils literal notranslate"><span class="pre">ppdict_get_*</span></code> suite, which accepts <code class="docutils literal notranslate"><span class="pre">char</span> <span class="pre">*</span></code>. Using <code class="docutils literal notranslate"><span class="pre">"string</span> <span class="pre">literals"</span></code> -with <code class="docutils literal notranslate"><span class="pre">ppdict_get</span></code> function is the most common case, I guess.]</p> -<p><code class="docutils literal notranslate"><span class="pre">ppname_size()</span></code> and <code class="docutils literal notranslate"><span class="pre">ppstring_size()</span> <span class="pre">``</span> <span class="pre">now</span> <span class="pre">have</span> -<span class="pre">trivial</span> <span class="pre">``ppname_data()</span></code> and <code class="docutils literal notranslate"><span class="pre">ppstring_data()</span></code> counterparts:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1">#define ppname_size(name) ((name)->size)</span> -<span class="c1">#define ppname_data(name) ((name)->data)</span> - -<span class="c1">#define ppstring_size(string) ((string)->size)</span> -<span class="c1">#define ppstring_data(string) ((string)->data)</span> -</pre></div> -</div> -<p>Switching between encoded / decoded variants is made via explicit <code class="docutils literal notranslate"><span class="pre">alterego</span></code> member. If encoded and decoded forms -are identical, then <code class="docutils literal notranslate"><span class="pre">self->alfterego</span> <span class="pre">==</span> <span class="pre">self</span></code> (never NULL). Helper functions for that:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">PPAPI</span> <span class="n">ppname</span> <span class="o">*</span> <span class="n">ppname_decoded</span> <span class="p">(</span><span class="n">ppname</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppname</span> <span class="o">*</span> <span class="n">ppname_encoded</span> <span class="p">(</span><span class="n">ppname</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> - -<span class="n">PPAPI</span> <span class="n">ppbyte</span> <span class="o">*</span> <span class="n">ppname_decoded_data</span> <span class="p">(</span><span class="n">ppname</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppbyte</span> <span class="o">*</span> <span class="n">ppname_encoded_data</span> <span class="p">(</span><span class="n">ppname</span> <span class="o">*</span><span class="n">name</span><span class="p">);</span> - -<span class="n">PPAPI</span> <span class="n">ppstring</span> <span class="o">*</span> <span class="n">ppstring_decoded</span> <span class="p">(</span><span class="n">ppstring</span> <span class="o">*</span><span class="n">string</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppstring</span> <span class="o">*</span> <span class="n">ppstring_encoded</span> <span class="p">(</span><span class="n">ppstring</span> <span class="o">*</span><span class="n">string</span><span class="p">);</span> - -<span class="n">PPAPI</span> <span class="n">ppbyte</span> <span class="o">*</span> <span class="n">ppstring_decoded_data</span> <span class="p">(</span><span class="n">ppstring</span> <span class="o">*</span><span class="n">string</span><span class="p">);</span> -<span class="n">PPAPI</span> <span class="n">ppbyte</span> <span class="o">*</span> <span class="n">ppstring_encoded_data</span> <span class="p">(</span><span class="n">ppstring</span> <span class="o">*</span><span class="n">string</span><span class="p">);</span> -</pre></div> -</div> -<p>Since <code class="docutils literal notranslate"><span class="pre">ppname</span></code> and <code class="docutils literal notranslate"><span class="pre">ppstring</span></code> are now structures, all API functions returning name/string or taking name/string -as an argument, now take <strong>a pointer to name/string</strong>. Watch out for <code class="docutils literal notranslate"><span class="pre">ppdict_get_*</span></code> functions suite. They still accept -<code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">char</span> <span class="pre">*</span></code> key as an argument, but <code class="docutils literal notranslate"><span class="pre">ppname</span></code> type can no longer be used there:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ppname</span> <span class="n">key</span><span class="p">;</span> -<span class="n">ppdict_get_something</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">key</span><span class="p">);</span> <span class="o">//</span> <span class="n">wrong</span> -<span class="n">ppdict_get_something</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">key</span><span class="o">.</span><span class="n">data</span><span class="p">);</span> <span class="o">//</span> <span class="n">ok</span> - -<span class="n">ppname</span> <span class="o">*</span><span class="n">pkey</span><span class="p">;</span> -<span class="n">ppdict_get_something</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="p">(</span><span class="n">const</span> <span class="n">char</span> <span class="o">*</span><span class="p">)</span><span class="n">pkey</span><span class="p">);</span> <span class="o">//</span> <span class="n">wrong</span> -<span class="n">ppdict_get_something</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">pkey</span><span class="o">-></span><span class="n">data</span><span class="p">);</span> <span class="o">//</span> <span class="n">ok</span> -</pre></div> -</div> -<p>Consequently, functions / macros that used pointer to <code class="docutils literal notranslate"><span class="pre">ppname</span></code> (<code class="docutils literal notranslate"><span class="pre">ppdict_first()</span></code> / <code class="docutils literal notranslate"><span class="pre">ppdict_next()</span></code>), -now needs <code class="docutils literal notranslate"><span class="pre">ppname</span> <span class="pre">**pname</span></code>.</p> -</div> -<div class="section" id="cleanups"> -<h2>Cleanups<a class="headerlink" href="#cleanups" title="Permalink to this headline">¶</a></h2> -<p>Some of unused utils were removed. There is still some code in utils part that is not used by the library, -but I need this tollbox in many other places and don’t want to maintain two versions.</p> -<p>Some unification in integer types; <code class="docutils literal notranslate"><span class="pre">size_t</span></code> seems to be the best choice for and integer representing machine -word (<code class="docutils literal notranslate"><span class="pre">unsigned</span> <span class="pre">long</span></code> is not long enough on windows), less utils dependencies, less compiler warnings.</p> -</div> -</div> - - - </div> - </div> - </div> - <div class="clearer"></div> - </div> - <div class="related" role="navigation" aria-label="related navigation"> - <h3>Navigation</h3> - <ul> - <li class="right" style="margin-right: 10px"> - <a href="genindex.html" title="General Index" - >index</a></li> - <li class="right" > - <a href="ppapi-2.x.html" title="pplib 2.x" - >next</a> |</li> - <li class="right" > - <a href="pplib.html" title="pplib" - >previous</a> |</li> - <li class="nav-item nav-item-0"><a href="pplib.html">pplib 0.1 documentation</a> »</li> - </ul> - </div> - <div class="footer" role="contentinfo"> - © Copyright 2019, p.jackowski@gust.org.pl. - Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5. - </div> - </body> -</html>
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/search.html b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/search.html deleted file mode 100644 index 1f1c6ce65f5..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/search.html +++ /dev/null @@ -1,97 +0,0 @@ - - -<!doctype html> - -<html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Search — pplib 0.1 documentation</title> - <link rel="stylesheet" href="_static/bizstyle.css" type="text/css" /> - <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> - - - <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="_static/language_data.js"></script> - <script type="text/javascript" src="_static/bizstyle.js"></script> - <script type="text/javascript" src="_static/searchtools.js"></script> - <link rel="index" title="Index" href="genindex.html" /> - <link rel="search" title="Search" href="#" /> - <script type="text/javascript"> - jQuery(function() { Search.loadIndex("searchindex.js"); }); - </script> - - <script type="text/javascript" id="searchindexloader"></script> - - <meta name="viewport" content="width=device-width,initial-scale=1.0"> - <!--[if lt IE 9]> - <script type="text/javascript" src="_static/css3-mediaqueries.js"></script> - <![endif]--> - - </head><body> - <div class="related" role="navigation" aria-label="related navigation"> - <h3>Navigation</h3> - <ul> - <li class="right" style="margin-right: 10px"> - <a href="genindex.html" title="General Index" - accesskey="I">index</a></li> - <li class="nav-item nav-item-0"><a href="pplib.html">pplib 0.1 documentation</a> »</li> - </ul> - </div> - <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> - <div class="sphinxsidebarwrapper"> - </div> - </div> - - <div class="document"> - <div class="documentwrapper"> - <div class="bodywrapper"> - <div class="body" role="main"> - - <h1 id="search-documentation">Search</h1> - <div id="fallback" class="admonition warning"> - <script type="text/javascript">$('#fallback').hide();</script> - <p> - Please activate JavaScript to enable the search - functionality. - </p> - </div> - <p> - From here you can search these documents. Enter your search - words into the box below and click "search". Note that the search - function will automatically search for all of the words. Pages - containing fewer words won't appear in the result list. - </p> - <form action="" method="get"> - <input type="text" name="q" value="" /> - <input type="submit" value="search" /> - <span id="search-progress" style="padding-left: 10px"></span> - </form> - - <div id="search-results"> - - </div> - - </div> - </div> - </div> - <div class="clearer"></div> - </div> - <div class="related" role="navigation" aria-label="related navigation"> - <h3>Navigation</h3> - <ul> - <li class="right" style="margin-right: 10px"> - <a href="genindex.html" title="General Index" - >index</a></li> - <li class="nav-item nav-item-0"><a href="pplib.html">pplib 0.1 documentation</a> »</li> - </ul> - </div> - <div class="footer" role="contentinfo"> - © Copyright 2019, p.jackowski@gust.org.pl. - Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5. - </div> - </body> -</html>
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/searchindex.js b/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/searchindex.js deleted file mode 100644 index b59ee11455a..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/_build/html/searchindex.js +++ /dev/null @@ -1 +0,0 @@ -Search.setIndex({docnames:["ppapi-1.x","ppapi-2.x","ppcode","pplib","ppnew"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,sphinx:54},filenames:["ppapi-1.x.rst","ppapi-2.x.rst","ppcode.rst","pplib.rst","ppnew.rst"],objects:{},objnames:{},objtypes:{},terms:{"1mb":[0,1],"2fkb":2,"2fmb":2,"64kb":[0,1],"boolean":[0,1],"break":[0,1,2],"byte":[0,1,2,4],"case":[0,1,2,4],"char":[0,1,2,4],"const":[0,1,2,4],"default":[0,1,2],"enum":[0,1,2],"final":[0,1],"function":[0,1,2,4],"int":[0,1,2,4],"long":[0,1,2,4],"new":[0,1],"null":[0,1,2,4],"return":[0,1,2,4],"short":[0,1],"static":2,"switch":[0,1,2,4],"void":[0,1,2],"while":[0,1,4],And:[0,1,3],But:[0,1],For:[0,1],NOT:2,One:[0,1],Such:[0,1],The:[0,1,4],Then:[0,1],There:[0,1,4],Use:[0,1],Using:4,about:[0,1,2,4],abov:[0,1],absolutelli:[0,1],accept:[0,1,4],access:[0,1,2],accessor:[0,1],accord:[0,1],acrobat:[0,1,2],actual:[0,1,4],added:2,addit:[0,1],address:4,adjust:2,after:[0,1,2],again:[0,1,2],ahead:[0,1],alfterego:4,alia:[0,1,4],alias:[1,4],alien:[0,1,2],align:[2,4],aliv:[0,1],all:[0,1,4],alloc:[0,1,2,3],allow:[0,1],almost:[2,4],alreadi:[0,1],also:[0,1],alter:[0,1],alterego:[1,2,4],alwai:[0,1,2],among:[0,1],ani:[0,1,2],annoi:[0,1],anoth:[0,1,4],anyhow:[0,1],anymor:[0,1],anyth:[0,1],api:[2,3,4],app:0,appear:[0,1],appli:[0,1],applic:[0,1],approach:[0,1],approx:[0,1],arbitrari:[0,1],aren:[0,1],argc:2,argument:[0,1,4],argv0:2,argv:2,arm:2,arm_compli:4,arrai:[2,3,4],artbox:2,ascii85decod:[0,1],ascii:[0,1],asciihexdecod:[0,1],ask:[0,1],assert:2,associ:[0,1],assum:[0,1],assumpt:4,attempt:2,auxilari:[0,1],avail:[0,1],avoid:[0,1,4],awar:[0,1],base16:[0,1],base85:[0,1],basic:[0,1],bbox:[0,1],becaus:[0,1],been:[0,1,4],befor:[0,1,2],beings:[0,1],belong:[0,1],below:[0,1,4],besid:[0,1],best:4,better:[0,1,4],between:[0,1,4],beyond:[0,1],binari:[0,1],bit:[0,1,2,4],bleedbox:2,bodi:[0,1],boject:[0,1],bom:[0,1],both:[0,1,4],bother:[0,1],bound:[0,1],box:[2,3],box_info:2,buffer:[0,1,2],bug:[0,1],build:0,bunch:[0,1],call:[0,1,4],callback:[0,1],can:[0,1,2,4],care:[0,1],cast:[0,1],catalog:[0,1],caus:4,ccitt:[0,1],ccittfaxdecod:[0,1],chang:3,charact:[0,1,2],check:[0,1,4],check_stream_chunk:2,choic:4,chunk:[0,1,2,4],cipher:[0,1],cleanup:3,clear:0,close:[0,1],closefil:[1,2],code:[0,1,4],coercion:[0,1],come:[0,1],common:[0,1,4],compar:[0,1],comparison:[0,1],compil:4,complet:[0,1],completelli:[0,1],compound:[0,1],compress:[0,1,2],conceptu:[0,1],condit:[0,1],confus:[0,1],consequ:4,consid:0,constant:[0,1],construct:[0,1],contain:[0,1],content:[2,3],context:[0,1,2],continu:2,conveni:[0,1],convert:[0,1],copi:[0,1,2],correspond:[0,1],cost:[0,1,4],could:[0,1,4],count:[0,1,2],counterpart:[0,1,4],covert:[0,1],crap:2,creat:[0,1,2],creator:2,cropbox:2,cross:[0,1],crypt:[0,1,2],crypt_info:2,cryptkei:2,cstr:0,cstring:0,current:[0,1],custom:[0,1],data1:[0,1],data2:[0,1],data3:[0,1],data:[0,1,2,4],dct:[0,1],dctdecod:[0,1],deal:[0,1],declar:[0,1],decod:[0,1,2,4],decodeparm:[0,1,2],decompress:[0,1,2],decrypt:[0,1],dedic:[0,1],dedict:[0,1],deep:2,defin:[0,1,2,4],delim:[0,1],demand:[0,1],depend:[0,1,4],derefer:[0,1],dereferenc:2,describ:[0,1],descript:[0,1],design:[0,1],destroi:[0,1],detail:4,detect:[0,1],determin:[0,1],dict:[2,3,4],differ:[0,1,4],digit:[0,1,2],direct:[0,1],directli:[0,1],dirti:4,distinct:4,distinguish:[0,1],distingush:[0,1],doc:[1,2],document:[0,1],doe:[0,1],doesn:[0,1,4],don:[0,1,4],done:[0,1,2,4],doubl:[0,1,2,4],due:[0,1],dummi:[0,1,2],each:[0,1,4],eat:[0,1],effect:[0,1,2],ego:[0,1],egzot:2,element:[0,1],elementari:[0,1],els:2,empti:[0,1,2],encod:[0,1,2,4],encrypt:[2,3],end:[0,1],endif:2,enough:[0,1,4],ensur:[0,1],entir:[0,1],entri:[0,1],equiv:[0,1],error:3,escap:[0,1,2],even:[0,1],everi:[0,1],exactli:[0,1],exampl:[0,1,3],except:[0,1],execut:[0,1],expect:[0,1],explain:[0,1],explicit:[0,1,4],expos:[0,1],extend:[0,2],extens:0,extern:2,extra:[0,1,4],fail:[0,1,2],failur:[0,1],far:[0,1,4],fast:0,fault:0,fclose:[1,2],featur:[0,1,4],fetch:[0,1],field:[0,1,2],file1:2,file2:2,file:[0,1,2,4],filenam:[0,1,2],filepath:2,files:2,filespec:2,fill:[0,1,2],filter:[2,3],filternam:[0,1,2],filtertyp:[0,1,2],find:[0,1],finder:2,first:[0,1,2],fix:2,flag:[0,1,2,4],flate:[0,1],flatedecod:[0,1],fly:[0,1],folk:2,follow:[0,1],fopen:2,forbidden:0,form:[0,1,2,4],found:[0,1],fprintf:[0,1,2],free:[0,1,2],freed:[0,1],from:[0,1,2,4],futur:[0,1],fwrite:2,gener:[2,4],genuin:[0,1],get:[0,1],get_file_nam:2,getter:[0,1],give:[0,1],given:[0,1],gobbl:2,goe:[0,1],going:[0,1],grant:[0,1],grow:[0,1],guess:[0,1,4],gust:2,han:2,handl:[2,3],handler:[0,1],happen:[0,1,2],has:[0,1,4],hash:[0,1],have:[0,1,4],haven:[0,1],header:[0,1],heap:[0,1,2,4],helper:[0,1,4],here:[0,1],hex:[0,1],hidden:4,hide:0,hope:2,hopefulli:4,host:[0,1],how:[0,1],howev:0,hundr:0,idea:4,ident:[0,1,4],identifi:[0,1],iff:[0,1],ifndef:2,imag:[0,1,2],imagedict:[0,1],implement:[0,1,4],includ:[0,1,2],incomplet:[0,1],incorrect:2,increment:[0,1,2],independ:[0,1,4],index:[0,1,2],indic:[0,1],indirect:[0,1],inevit:4,info:[0,1,2],inform:[0,1,4],initi:[0,1],inlin:[0,1,2],input:2,instead:[0,1,2],insuffici:[0,1],int64_t:[0,1,2,4],int8_t:2,integ:[0,1,2,4],integr:2,intend:[0,1],intent:[0,1,2],interfac:[0,1],intern:[0,1,2],introduc:[0,1],invalid:[0,1,2],iof_copy_file_data:2,iof_discard:2,iof_heap:2,issu:4,item:[0,1,2],iter:[0,1,2],its:[0,1,2],itself:[0,1],jackowski:2,jbig2:[0,1],jbig2decod:[0,1],jbig:[0,1],jpeg:[0,1],jpegsiz:[0,1],jpegstream:[0,1],jpx:[0,1],jpxdecod:[0,1],jump:[0,1],just:[0,1,4],keep:[0,1,4],kei:[0,1,2,4],kep:[0,1],kept:[0,1],keyval:[0,1],keyword:2,kid:2,kind:[0,1],know:[0,1],known:[0,1],larg:[0,1],last:[0,1,2],later:[0,1],lead:[0,1],length:[0,1,2],less:[0,1,2,4],letter:[0,1],librari:[0,1,4],like:[0,1,4],limit:4,linear:[0,1],list:[0,1],liter:[0,1,4],load:[0,1,2],loader:[0,1,2],log:[0,1],log_callback:2,logger:[0,1,2],longer:[0,1,2,4],look:[0,1],lookup:[0,2],loop:[0,1],lot:4,luatex:2,luigi:2,lzw:[0,1],lzwdecod:[0,1],machin:[0,1,2,4],macro:[0,1,2,4],made:4,magic:[0,1],mai:[0,1,2],main:[0,1,2],maintain:4,major:[0,1],make:[0,1,4],malloc:[0,1,2],mani:4,map:[0,1],mark:[0,1],match:[0,1],matrix:[0,1,2],matter:[0,1],md5:2,mean:[0,1],mechan:4,mediabox:[0,1,2],mem:2,member:[0,1,4],memcmp:[0,1,2],memori:[0,1,2,4],memus:2,memwast:2,mention:[0,1],messag:[0,1,2],might:[0,1,2],mind:[0,1],minor:[0,1,2],moment:[0,1],more:[0,1,2,4],most:[0,1,2,4],move:4,much:4,must:[0,1],name:[2,3],natur:2,necessari:[0,1],need:[0,1,2,4],never:4,newest:[0,1],next:[0,1,2],node:[0,1],non:[0,1],none:2,nonempti:2,nooop:[0,1,2],normal:[0,1],note:[0,1,2,4],noth:[0,1],now:[0,1,2,4],number:[0,1,2],numer:[0,1],obj:[0,1,2],object:[2,3,4],obligatori:[0,1],obscur:[0,1],octal:2,offset:[0,1,2],often:[0,1],older:[0,1],omit:[0,1],onc:[0,1,4],one:[0,1],onli:[0,1,2,4],open:[0,1,2],openbsd:[],oper:[0,1,2],operand:[0,1],operato:[0,1],oprat:[0,1],option:[0,1],org:2,origin:[0,1],other:[0,1,2,4],otherwis:[0,1],out:[0,1,2,4],outnam:2,output:[0,1],over:[0,1],own:[0,1,2],owner:[0,1],ownerpass:[0,1,2],ownerpasslength:[0,1,2],page:[2,3],pagecount:2,pagedict:[0,1,2],pageno:[0,1,2],pageref:2,paid:1,pair:[0,1],parallel:[0,1],param:[0,1,2],paramet:[0,1],parent:[0,1],pars:[0,1,2],parser:[0,1,2],part:[0,1,4],password:[0,1,2],path:2,pcontext:[0,1],pdf:[2,3,4],perfectli:0,perform:[0,1],permiss:[0,1,2],piec:[0,1],pkei:[0,1,2,4],place:4,plain:[0,1,2,4],platform:4,plu:2,pname:[0,1,2,4],point:[0,1],pointer:[0,1,2,4],pool:[0,1,4],portabl:2,possibl:[0,1],postscript:[0,1,2],pp_api_h:2,ppapi:[0,1,3,4],pparrai:[0,1,2,4],pparray_at:[0,1,2],pparray_first:[0,1,2],pparray_get:[0,1,2],pparray_get_:[0,1],pparray_get_arrai:[0,1,2],pparray_get_bool:[0,1,2],pparray_get_dict:[0,1,2],pparray_get_int:[0,1,2],pparray_get_nam:[0,1,2],pparray_get_num:[0,1,2],pparray_get_obj:[0,1,2],pparray_get_ref:[0,1,2],pparray_get_str:[0,1,2],pparray_get_stream:[0,1,2],pparray_get_uint:[0,1,2],pparray_next:[0,1,2],pparray_rget_:[0,1],pparray_rget_arrai:2,pparray_rget_bool:2,pparray_rget_dict:2,pparray_rget_int:2,pparray_rget_nam:2,pparray_rget_num:2,pparray_rget_obj:2,pparray_rget_ref:2,pparray_rget_str:2,pparray_rget_stream:[0,1,2],pparray_rget_uint:2,pparray_s:[0,1,2],pparray_to_matrix:[0,1,2],pparray_to_rect:[0,1,2],ppbool:[0,1,2],ppbyte:[1,2,4],ppconf:2,ppcontents_first:[0,1,2],ppcontents_first_op:[0,1,2],ppcontents_next:[0,1,2],ppcontents_next_op:[0,1,2],ppcontents_pars:[0,1,2],ppcontext:[0,1,2],ppcontext_don:[0,1,2],ppcontext_fre:[0,1,2],ppcontext_new:[0,1,2],ppcrypt_don:[0,1,2],ppcrypt_fail:[0,1,2],ppcrypt_non:[0,1,2],ppcrypt_pass:[0,1,2],ppcrypt_statu:[0,1,2],ppdef:2,ppdic_rget_dict:[0,1],ppdict:[0,1,2],ppdict_at:[0,1,2],ppdict_first:[0,1,2,4],ppdict_get:4,ppdict_get_:[0,1,4],ppdict_get_arrai:[0,1,2],ppdict_get_bool:[0,1,2],ppdict_get_box:[0,1,2],ppdict_get_dict:[0,1,2],ppdict_get_int:[0,1,2],ppdict_get_matrix:[0,1,2],ppdict_get_nam:[0,1,2],ppdict_get_num:[0,1,2],ppdict_get_obj:[0,1,2],ppdict_get_rect:[0,1,2],ppdict_get_ref:[0,1,2],ppdict_get_someth:4,ppdict_get_str:[0,1,2],ppdict_get_stream:[0,1,2],ppdict_get_uint:[0,1,2],ppdict_kei:[0,1,2],ppdict_next:[0,1,2,4],ppdict_rget_:[0,1],ppdict_rget_arrai:2,ppdict_rget_bool:2,ppdict_rget_dict:[0,1,2],ppdict_rget_int:2,ppdict_rget_nam:2,ppdict_rget_num:2,ppdict_rget_obj:2,ppdict_rget_ref:2,ppdict_rget_str:2,ppdict_rget_stream:[0,1,2],ppdict_rget_uint:2,ppdict_siz:[0,1,2],ppdoc:[0,1,2],ppdoc_allow_annot:[0,1,2],ppdoc_allow_assembl:[0,1,2],ppdoc_allow_copi:[0,1,2],ppdoc_allow_extract:[0,1,2],ppdoc_allow_modifi:[0,1,2],ppdoc_allow_print:[0,1,2],ppdoc_allow_print_hir:[0,1,2],ppdoc_catalog:[0,1,2],ppdoc_crypt_pass:[0,1,2],ppdoc_crypt_statu:[0,1,2],ppdoc_fil:2,ppdoc_file_s:[0,1,2],ppdoc_filehandl:[1,2],ppdoc_first_pag:[0,1,2],ppdoc_fre:[0,1,2],ppdoc_info:[0,1,2],ppdoc_load:[0,1,2],ppdoc_mem:[0,1,2],ppdoc_memori:[0,1,2],ppdoc_next_pag:[0,1,2],ppdoc_object:[0,1,2],ppdoc_pag:[0,1,2],ppdoc_page_count:[0,1,2],ppdoc_permiss:[0,1,2],ppdoc_trail:[0,1,2],ppdoc_version_numb:[0,1,2],ppdoc_version_str:[0,1,2],ppdoc_xref:[0,1,2],ppint:[0,1,2],pplib:[2,4],pplib_author:2,pplib_vers:2,pplog_callback:[0,1,2],pplog_prefix:[0,1,2],pplogger_callback:[0,1,2],ppmatrix:[0,1,2],ppname:[0,1,2,4],ppname_data:[1,2,4],ppname_decod:[0,1,2,4],ppname_decoded_data:[1,2,4],ppname_encod:[0,1,2,4],ppname_encoded_data:[1,2,4],ppname_eq:[0,1,2],ppname_exec:[0,1,2],ppname_i:[0,1,2],ppname_s:[0,1,2,4],ppnone:[0,1,2],ppnull:[0,1,2],ppnum:[0,1,2],ppobj:[0,1,2],ppobj_get_:[0,1],ppobj_get_arrai:[0,1,2],ppobj_get_bool:[0,1,2],ppobj_get_bool_valu:2,ppobj_get_dict:[0,1,2],ppobj_get_int:[0,1,2],ppobj_get_int_valu:2,ppobj_get_nam:[0,1,2],ppobj_get_nul:[0,1,2],ppobj_get_num:[0,1,2],ppobj_get_num_valu:2,ppobj_get_ref:[0,1,2],ppobj_get_str:[0,1,2],ppobj_get_stream:[0,1,2],ppobj_get_uint:[0,1,2],ppobj_kind:2,ppobj_rget_:[0,1],ppobj_rget_arrai:2,ppobj_rget_bool:2,ppobj_rget_dict:[0,1,2],ppobj_rget_int:2,ppobj_rget_nam:2,ppobj_rget_nul:2,ppobj_rget_num:2,ppobj_rget_obj:[0,1,2],ppobj_rget_ref:2,ppobj_rget_str:2,ppobj_rget_stream:2,ppobj_rget_uint:2,ppobjtp:[0,1,2],pprect:[0,1,2],ppref:[0,1,2],ppref_obj:[0,1,2],ppstream:[0,1,2],ppstream_al:[0,1,2],ppstream_base16:[0,1,2],ppstream_base85:[0,1,2],ppstream_ccitt:[0,1,2],ppstream_compress:[0,1,2],ppstream_crypt:[0,1,2],ppstream_dct:[0,1,2],ppstream_dict:[0,1,2],ppstream_don:[0,1,2],ppstream_encrypt:[0,1,2],ppstream_encrypted_a:2,ppstream_encrypted_own:[0,1,2],ppstream_encrypted_rc4:2,ppstream_filt:[0,1,2],ppstream_filter_info:[0,1,2],ppstream_filter_nam:[0,1,2],ppstream_filter_typ:[0,1,2],ppstream_first:[0,1,2],ppstream_flat:[0,1,2],ppstream_free_buff:[0,1,2],ppstream_imag:[0,1,2],ppstream_init_buff:[0,1,2],ppstream_jbig2:[0,1,2],ppstream_jpx:[0,1,2],ppstream_lzw:[0,1,2],ppstream_next:[0,1,2],ppstream_not_support:2,ppstream_runlength:[0,1,2],ppstreamtp:[0,1,2],ppstring:[0,1,2,4],ppstring_base16:[0,1,2],ppstring_base85:[0,1,2],ppstring_data:[1,2,4],ppstring_decod:[0,1,2,4],ppstring_decoded_data:[1,2,4],ppstring_encod:[0,1,2,4],ppstring_encoded_data:[1,2,4],ppstring_exec:2,ppstring_hex:[0,1,2],ppstring_intern:2,ppstring_plain:[0,1,2],ppstring_siz:[0,1,2,4],ppstring_typ:[0,1,2],ppstring_utf16b:[0,1,2],ppstring_utf16l:[0,1,2],ppstring_utf:[0,1,2],pptest3:2,ppuint:[0,1,2],ppxref:[0,1,2],ppxref_catalog:2,ppxref_find:[0,1,2],ppxref_info:2,ppxref_pag:2,ppxref_prev:[0,1,2],ppxref_trail:2,ppxsec:2,practis:[0,1],preceed:[0,1],precis:[0,1],predictor:2,prefer:[0,1,4],prefix:[0,1,2],present:[0,1],preserv:[0,1],pretend:0,pretti:[0,1,4],previou:[0,1],print:[0,1,2],print_info:2,print_result_filt:2,print_stream_info:2,printabl:[0,1],printf:[0,1,2],privat:4,probabl:[0,1],proce:[0,1],procee:[0,1],process:[0,1],produc:[0,1,2],prompt:[0,1],proper:[0,1,2],properli:4,properti:[0,1,2],protect:[0,1,2],provid:[0,1,4],psize:[0,1,2],pune:2,put:[0,1],queri:[0,1],quit:[0,1],rather:[0,1],raw:[0,1,2],read:[0,1],readabl:[0,1],reader:[0,1],readi:[0,1],real:[0,1],realli:[0,1],reason:[0,1],reclaim:[0,1,2],reconstruct:[0,1],rect:[0,1,2],rectangl:[0,1],redirect:[0,1],ref:[2,3],refer:[0,1,2],referenc:[0,1],refnum:2,refnumb:[0,1,2],relat:[0,1,4],releas:[0,1,2],relev:[0,1],reli:1,remain:[0,1],remov:4,replac:[0,1],repres:[0,1,4],request:2,resid:1,resolv:[0,1,2],resourc:[0,1],restor:[0,1],restrict:[0,1],result:[0,1],reus:[0,1],revers:[0,1],revis:[2,4],revolut:4,rework:2,rewrit:[0,1],root:[0,1],roughli:[0,1],runlength:[0,1],runlengthdecod:[0,1],sai:[0,1],same:[0,1],saniti:[0,1,2],scheme:[0,1],search:[0,1],second:[0,1],sect:2,secur:[0,1,2],see:[0,1],seem:4,segfault:[],segment:0,self:4,sens:0,separ:[0,1],serv:4,set:[0,1],sever:[0,1],sha2:2,should:[0,1,2],shouldn:[0,1,2],show:[0,1],sign:[0,1,2],signed:4,simpl:[0,1],simpli:[0,1],sinc:[0,1,4],singl:[0,1,4],size:[0,1,2,4],size_t:[0,1,2,4],sizenum:2,sizeof:[0,1,2],skip:2,small:[0,1],smarter:[0,1],some:[0,1,2,4],some_output:[0,1],someth:[0,1],somewher:[0,1],soon:0,sorri:[0,1,2],sourc:[0,1,2],space:[0,1],spec:[0,1],special:[0,1],specif:[0,1],sprintf:2,stack:[0,1],standalon:[0,1],start:[0,1],state:[0,1],statu:[0,1],stddef:2,stderr:[0,1,2],stdint:2,stdio:2,stdout:[0,1],still:[0,1,4],stock:4,stop:[0,1],storag:4,store:[0,1,4],stream:[2,3],string:[2,3],strip:[0,1],strlen:[0,1],struct:[0,1,2,4],structur:[0,1,4],style:0,suboptim:[0,1],subsequ:[0,1],succe:[0,1],succeed:[0,1],suffer:[0,1],suit:[0,1,4],sum:[0,1,2],support:[0,1],surround:[0,1],sync:4,syntax:[0,1],tab:[0,1,2],tabl:[0,1],take:[0,1,4],taken:2,target:[0,1],tech:2,tell:[0,1],templat:[0,1,2],termin:[0,1],termini:0,test:2,text:[0,1],than:[0,1],thank:2,thei:[0,1,4],them:[0,1],thi:[0,1,2,4],think:[0,1],those:[0,1],though:0,through:[0,1],tiff:2,todo:3,tollbox:4,top:[0,1],toxic:2,trailer:[0,1],transform:[2,3],treat:[0,1],tree:[0,1],tri:[0,1],trick:4,trickeri:[0,1,4],trimbox:2,triplet:[0,1],trivial:4,two:[0,1,4],type:[2,3,4],typedef:[0,1,2],typic:[0,1],uint8_t:[0,1,2,4],unalign:4,uncompress:2,unconst:[0,1],undocu:[0,1],unescap:[0,1],unicod:[0,1],unif:4,union:[0,1,2],unless:[0,1],unnecesari:[0,1],unnecessari:[0,1],unread:[0,1],unsign:[0,1,2,4],unsupport:[0,1],until:[0,1],unus:4,updat:[0,1,2],usabl:4,usag:[0,1,2],use:[0,1,4],use_buffers_pool:2,used:[0,1,4],useless:[0,1],userpass:[0,1,2],userpasslength:[0,1,2],uses:[0,1,4],using:[0,1],usual:[0,1],utf16:[0,1],utf16b:[0,1],utf16l:[0,1],util:[0,1,2,4],utiliof:2,utilmem:4,utilmemallc:4,val:[0,1],valid:[0,1],valu:[0,1],variabl:[0,1],variant:4,verbos:[0,1],verifi:[0,1],version:[0,1,2,4],via:[0,1,4],wai:[0,1],want:[0,1,4],warn:[2,4],wast:[0,1,2],watch:4,well:[0,1,4],were:4,weren:[0,1,2],what:[0,1],whatev:[0,1],when:[0,1,2],whenev:[0,1,4],which:[0,1,4],window:4,without:[0,1],wntri:[0,1],won:[0,1],word:[0,1,2,4],work:4,would:[0,1],write:2,wrong:[0,1,4],xref:[2,3],xsec:2,yes:[0,1],yet:4,you:[0,1],your:[0,1],your_callback:[0,1],yourself:[0,1],zero:[0,1]},titles:["<code class=\"docutils literal notranslate\"><span class=\"pre\">pplib</span></code> 1.x","<code class=\"docutils literal notranslate\"><span class=\"pre\">pplib</span></code> 2.x","Examples","pplib","1.x vs 2.x"],titleterms:{And:4,alloc:4,api:[0,1],arrai:[0,1],box:[0,1],chang:2,cleanup:4,content:[0,1],dict:[0,1],encrypt:[0,1],error:[0,1],exampl:2,filter:[0,1],handl:[0,1],name:[0,1,4],object:[0,1],page:[0,1],pdf:[0,1],ppapi:2,pplib:[0,1,3],ref:[0,1],stream:[0,1],string:[0,1,4],todo:2,transform:[0,1],type:[0,1],xref:[0,1]}})
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/conf.py b/Build/source/texk/web2c/luatexdir/luapplib/doc/conf.py deleted file mode 100644 index cc74378cb1e..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/conf.py +++ /dev/null @@ -1,156 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Configuration file for the Sphinx documentation builder. -# -# This file does only contain a selection of the most common options. For a -# full list see the documentation: -# http://www.sphinx-doc.org/en/master/config - -# -- Path setup -------------------------------------------------------------- - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# -# import os -# import sys -# sys.path.insert(0, os.path.abspath('.')) - - -# -- Project information ----------------------------------------------------- - -project = u'pplib' -copyright = u'2019, p.jackowski@gust.org.pl' -author = u'p.jackowski@gust.org.pl' - -# The short X.Y version -version = u'' -# The full version, including alpha/beta/rc tags -release = u'0.1' - - -# -- General configuration --------------------------------------------------- - -# If your documentation needs a minimal Sphinx version, state it here. -# -# needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ -] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# -# source_suffix = ['.rst', '.md'] -source_suffix = '.rst' - -# The master toctree document. -master_doc = 'pplib' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = None - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This pattern also affects html_static_path and html_extra_path . -exclude_patterns = [u'_build', 'Thumbs.db', '.DS_Store'] - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - - -# -- Options for HTML output ------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -#html_theme = 'alabaster' -html_theme = 'bizstyle' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -# -# html_theme_options = {} - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# Custom sidebar templates, must be a dictionary that maps document names -# to template names. -# -# The default sidebars (for documents that don't match any pattern) are -# defined by theme itself. Builtin themes are using these templates by -# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', -# 'searchbox.html']``. -# -# html_sidebars = {} - - -# -- Options for HTMLHelp output --------------------------------------------- - -# Output file base name for HTML help builder. -htmlhelp_basename = 'pplibdoc' - - -# -- Options for LaTeX output ------------------------------------------------ - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # - # 'papersize': 'letterpaper', - - # The font size ('10pt', '11pt' or '12pt'). - # - # 'pointsize': '10pt', - - # Additional stuff for the LaTeX preamble. - # - # 'preamble': '', - - # Latex figure (float) alignment - # - # 'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - (master_doc, 'pplib.tex', u'pplib Documentation', - u'p.jackowski@gust.org.pl', 'manual'), -] - - -# -- Options for manual page output ------------------------------------------ - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, 'pplib', u'pplib Documentation', - [author], 1) -] - - -# -- Options for Texinfo output ---------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - (master_doc, 'pplib', u'pplib Documentation', - author, 'pplib', 'One line description of project.', - 'Miscellaneous'), -]
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/make.bat b/Build/source/texk/web2c/luatexdir/luapplib/doc/make.bat deleted file mode 100644 index b1e0e54b1c0..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/make.bat +++ /dev/null @@ -1,36 +0,0 @@ -@ECHO OFF - -pushd %~dp0 - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set SOURCEDIR=. -set BUILDDIR=_build -set SPHINXPROJ=pplib - -if "%1" == "" goto help - -%SPHINXBUILD% >NUL 2>NUL -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% -goto end - -:help -%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% - -:end -popd diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/ppapi-1.x.rst b/Build/source/texk/web2c/luatexdir/luapplib/doc/ppapi-1.x.rst deleted file mode 100644 index df661a7b82d..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/ppapi-1.x.rst +++ /dev/null @@ -1,937 +0,0 @@ -
-``pplib`` 1.x
-=============
-
-``pplib`` is a library for raw PDF access. It parses PDF documents and provides an interface to access document structures in C.
-
-C-API
-=====
-
-Types
------
-
-``pplib`` defines several C-types to represent PDF types:
-
-- ``ppint`` - signed integer (``int64_t``)
-- ``ppnum`` - real number (double)
-- ``ppname`` - PDF name
-- ``ppstring`` - PDF string
-- ``pparray`` - PDF array
-- ``ppdict`` - PDF dict
-- ``ppstream`` - PDF stream
-- ``ppref`` - PDF indirect reference
-- ``ppobj`` - a container of all above
-
-Among ``ppint`` and ``ppnum``, we also use ``ppuint`` - unsigned integer (machine word, alias to ``size_t``).
-
-Other API types:
-
-- ``ppdoc`` - PDF document
-- ``ppxref`` - cross-references table
-- ``ppcontext`` - ... later
-- ``pprect`` - rectangle
-- ``ppmatrix`` - matrix
-
-Integer, number, name and string are treated as simple types.
-Names and strings are actually C-structures, but exposed to API as typedefs to ``const char *``.
-Other types (array, dict, stream, reference, object container, xref, PDF) are C-structures,
-and you operate it their pointers. So when you declare a simple type variable you say::
-
- ppuint u;
- ppnum n;
- ppname name;
- ppstring string;
- ...
-
-And when you declare a compound type you operate on pointers::
-
- ppobj *obj;
- pparray *array;
- ppdict *dict;
- ppstream *stream;
- ppref *ref;
- ppdoc *pdf;
-
-Some of those C-types are defined in library header ``ppapi.h`` (complete types). Some others are incomplete
-(eg. you can't say ``sizeof(ppdoc)`` or ``sizeof(ppxref)``). This is to avoid unnecesary dependencies in
-the header. [At some points it's not clear to me what to hide and what to expose, will see.] The library itself
-uses ``pplib.h`` but for auxilary applications including a standalone ``ppapi.h`` header should be enough.
-
-``pplib`` was designed having **read-only** PDF access in mind. Even if some structure is completelly exposed,
-so that you can directly access its members, you should treat them as read-only. I don't make them ``const`` because
-then all variable declarations would need to be ``const``, which is annoying, and I'd need some trickery in the library
-internals to unconst. Besides, nothing is really const for C type casts.
-
-Object
-------
-
-A common container for all elementary PDF object types is ``ppobj`` structure. ``ppobj`` has a type identifier
-(integer) and union of values::
-
- struct ppobj {
- ppobjtp type;
- union {
- ppint integer;
- ppnum number;
- ppname name;
- ppstring string;
- pparray *array;
- ppdict *dict;
- ppstream *stream;
- ppref *ref;
- void *any;
- };
- };
-
-Object type is one of constants (enum)::
-
- PPNONE
- PPNULL
- PPBOOL
- PPINT
- PPNUM
- PPNAME
- PPSTRING
- PPARRAY
- PPDICT
- PPSTREAM
- PPREF
-
-The type determines the structure member you're allowed to access::
-
- ppobj *obj;
- ...
- switch (obj->type)
- {
- case PPNONE: // shouldn't actually happen, indicates some failure
- break;
- case PPNULL: // valid PDF null object, no value
- break;
- case PPBOOL: // do something with obj->integer (ppint), value 0 or 1
- break;
- case PPINT: // do something with obj->integer (ppint)
- break;
- case PPNUM: // do something with obj->number (ppnum)
- break;
- case PPNAME: // do something with obj->name (ppname)
- break;
- case PPSTRING: // do something with obj->string (ppstring)
- break;
- case PPARRAY: // do something with obj->array (pparray *)
- break;
- case PPDICT: // do something with obj->dict (ppdict *)
- break;
- case PPSTREAM: // do something with obj->stream (ppstream *)
- break;
- case PPREF: // do something with obj->ref (ppref *)
- break;
- }
-
-More often then not you know exactly what type of object value is expected, in which case
-you may use one of the following macros::
-
- // returns 1 if o->type is PPNULL
- int ppobj_get_null(o) \
-
- // if o->type is PPBOOL, sets int v to 0 or 1 and returns 1, 0 otherwise
- int ppobj_get_bool(o, v)
-
- // if o->type is PPINT, sets ppint v and returns 1, 0 otherwise
- int ppobj_get_int(o, v)
-
- // if o->type is PPINT and >= 0, sets ppuint v and returns 1, 0 otherwise
- int ppobj_get_uint(o, v)
-
- // if o->type is PPNUM or PPINT, sets ppnum v and returns 1, 0 otherwise
- int ppobj_get_num(o, v)
-
- // if o->type is PPNAME returns the name, NULL otherwise
- ppname ppobj_get_name(o)
-
- // if o->type is PPSTRING returns the string, NULL otherwise
- ppstring ppobj_get_string(o)
-
- // if o->type is PPARRAY returns the array, NULL otherwise
- pparray * ppobj_get_array(o)
-
- // if o->type is PPDICT returns the dict, NULL otherwise
- ppdict * ppobj_get_dict(o)
-
- // if o->type is PPSTREAM returns the stream, NULL otherwise
- ppstream * ppobj_get_stream(o)
-
- // if o->type is PPREF returns the reference, NULL otherwise
- ppref * ppobj_get_ref(o)
-
-Note the coercion from integer to real number, but not reverse. In practise, whenever you expect a real number,
-you should also handle integer (eg. '1' used instead of '1.0').
-
-It is a common case that the object is given as an indirect reference, but what you actually
-want is not the reference, but the object referred by it. Here is a helper for it::
-
- // if o->type is PPREF, returns what the reference points, otherwise returns o
- ppobj * ppobj_rget_obj(o)
-
-Also every ``ppobj_get_*`` macro has ``ppobj_rget_*`` counterpart that makes a check
-for the expected type, but if the object is PPREF, it jumps to the target object.
-So for example ``ppobj_rget_dict(obj)`` will return dict if ``obj`` is of type PPDICT
-or if it is of type PPREF and ``obj->ref`` hosts an object of type PPDICT.
-
-Names
------
-
-PDF names are represented as ``ppname``.
-I find it convenient to have ``ppname`` type pretending ``const char *``. This allows to use ``ppname``
-in all C-style string functions like ``printf("%s", name)``.
-
-Be aware, however, that ``ppname`` is actually a C-structure. It is perfectly ok to cast ``ppname`` to ``const char *``::
-
- ppname name;
- ...
- (const char *)name;
-
-But reverse is forbidden::
-
- const char *cstr = "cstring";
- ...
- (ppname)cstr; // expect segmentation fault soon
-
-For convenient use in C, names are ``'\0'`` terminated. But to get the length of name better always use
-``ppname_size()`` macro. ``ppname`` object knows its size, don't use ``strlen()``::
-
- size_t ppname_size(ppname name); // macro, returns length of name in bytes
-
-In current implementation names are not hashed anyhow, so name-to-name comparison is not smarter than ``memcmp()``.
-Use macros::
-
- int ppname_is(ppname name, "literal"); // to compare ppname with C-literal string
- int ppname_eq(ppname name, ppname other); // to compare ppname with a different name
-
-If you'll use ``pplib`` to parse contents streams, you may need to distinguish names from operators
-(more precisely executable names). Names in PDF are preceeded by '/', executable names aren't. In both
-cases PDF parser will produce ``ppname`` but can be distingushed with::
-
- int ppname_exec(ppname name); // returns non-zero if name is executable
-
-Names are kept in their raw form, with possible PDF specific escapes (in text below we call it **encoded** form).
-Leading '/' is omitted, though. One may need a decoded name, with no PDF escapes.
-A pair of functions provides a simple interface to switch between those two forms::
-
- ppname ppname_decoded (ppname name); // returns decoded (unescaped) form of the name
- ppname ppname_encoded (ppname name); // returns encoded (escaped) form of the name
-
-In pretty most cases PDF names contains only letters (no special characters, no escapes), so decoded and encoded forms are identical.
-In that case both functions simply return the argument. It is ok to call ``ppname_decoded()`` on already decoded form
-and ``ppname_encoded()`` on already encoded form. Both forms are produced by PDF objects parser, so accessing ``ppname`` alter ego
-in whatever direction needs no extra decoding or allocation costs.
-
-String
-------
-
-PDF strings have the same internal construction as names, so most of names description above applies to strings as well.
-``ppstring`` is a typedef of ``const char *``, roughly ``'\0'`` terminiated C-string. To get the size of the string::
-
- size_t ppstring_size(ppstring string); // macro, returns the length of the string in bytes
-
-Strings are provided in their raw form, preserving PDF specific escapes, but with no
-``()`` or ``<>`` delims. To distinguish plain strings from hex strings::
-
- int ppstring_hex(ppstring string); // macro, returns non zero if hex string
-
-Or if you prefer::
-
- switch (ppstring_type(string))
- {
- case PPSTRING_PLAIN: // literal string, surrounded by ``(`` and ``)`` in PDF
- break;
- case PPSTRING_BASE16: // hex string, surrounded by ``<`` and ``>`` in PDF
- break;
- case PPSTRING_BASE85: // base85 string surrounded by ``<~`` and ``~>`` in PDF
- break;
- }
-
-The last is actually Postscript specific, not used in PDF, but I think it might appear in contents streams...
-No matter how the string is given in PDF (plain or hex), here are two functions to
-switch between encoded and decoded strings forms::
-
- ppstring ppstring_decoded (ppstring string); // returns decoded string possibly with PDF escapes
- ppstring ppstring_encoded (ppstring string); // returns encoded string with no PDF escapes
-
-For hex strings, encoded form contains hex digits, while decoded form contains arbitrary bytes (the result of hex decoding).
-Plain strings usually contains printable ASCII characters, but they might contain any binary data.
-As with names, objects parser produces both forms. The raw form with PDF escapes (or raw hex form) is considered the main one.
-Eg. when you access ``obj->string`` you always get the encoded form. At any moment you can switch to its alter ego.
-
-No matter if the string is plain or hex, if its first two bytes (decoded) are UTF16 BOM, the string
-is considered unicode. ``ppstring`` object *knows* it is unicode or not::
-
- switch (ppstring_utf(string))
- {
- case PPSTRING_UTF16LE: // unicode string, utf16le
- break;
- case PPSTRING_UTF16BE: // unicode string, utf16be
- break;
- default: // no unicode
- }
-
-Or simply::
-
- if (ppstring_utf(string) != 0) {
- // handle unicode string
- }
-
-If the string is unicode, BOM remains the part of the string -- ``pplib`` parser does not strip it.
-Unicode or not, encoded or decoded, strings are always C-arrays of bytes and ``ppstring_size()``
-always returns the size in bytes.
-
-Array
------
-
-PDF arrays are represented as ``pparray`` type, which is C-array of ``ppobj`` structures.
-To get the size::
-
- size_t pparray_size(pparray *array) // macro, returns the number of array items
-
-To get ``ppobj *`` at a given index::
-
- ppobj * pparray_at(array, index) // macro, returns ppobj * (no index check)
- ppobj * pparray_get(array, index) // macro, returns ppobj * or NULL (with index check)
- ppobj * pparray_get_obj (pparray *array, size_t index); // function equiv to pparray_get()
-
-Iterating over array elements::
-
- pparray *array;
- size_t index, size;
- ppobj *obj;
- for (size = pparray_size(array), pparray_first(array, index, obj); index < size; pparray_next(index, obj))
- {
- // do something with index and obj
- }
-
-There is no magic first/next macros, just iteration over pointers. One could also use something like::
-
- for (index = 0, size = array->size; index < size; ++index)
- {
- obj = pparray_at(array, index);
- // do something with index and obj
- }
-
-When getting values from array and expecting a result of known type, use one of the following::
-
- int pparray_get_bool (pparray *array, size_t index, int *v); // get boolean value
- int pparray_get_int (pparray *array, size_t index, ppint *v); // get ppint value
- int pparray_get_uint (pparray *array, size_t index, ppuint *v); // get ppuint value
- int pparray_get_num (pparray *array, size_t index, ppnum *v); // get ppnum value
- ppname pparray_get_name (pparray *array, size_t index); // get ppname value
- ppstring pparray_get_string (pparray *array, size_t index); // get ppstring value
- pparray * pparray_get_array (pparray *array, size_t index); // get pparray * value
- ppdict * pparray_get_dict (pparray *array, size_t index); // get ppdict * value
- ppref * pparray_get_ref (pparray *array, size_t index); // get ppref * value
-
-As with ``ppobj_get_*`` suite, numeric types getters set the value of a given type and returns 1, if the type matches.
-Otherwise sets nothing and returns 0. Other getters return the value if the type matches, or NULL.
-
-Every function from ``pparray_get_*`` suite have its ``pparray_rget_*`` counterpart that
-that dereferences indirect objects (as explained for ``ppobj_rget_*`` getters). Note that
-there is no ``pparray_get_stream()`` function, as streams in PDF are always indirect.
-To get the stream from array use::
-
- ppstream * pparray_rget_stream (pparray *array, size_t index);
-
-Dict
-----
-
-PDF dicts are represented as ``ppdict`` structure, which is C-array of ``ppobj`` with parallel
-C-array of ``ppname`` pointers. To get the size of a dict::
-
- size_t ppdict_size(ppdict *dict) // macro, returns the number of key-val pairs
-
-To get the value at a given index (integer)::
-
- ppobj * ppdict_at(ppdict *dict, index) // macro, no index check
-
-To get the name (key) at a given index::
-
- ppname ppdict_key(ppdict *dict, index) // macro, no index check
-
-To iterate over dict key-val pairs::
-
- ppdict *dict;
- ppname *pkey;
- ppobj *obj;
-
- for (ppdict_first(dict, pkey, obj); *pkey != NULL; ppdict_next(pkey, obj))
- {
- // do something with *pkey and obj
- }
-
-There is no magic in first/next macros, just iteration through keys and values lists pointers.
-For convenient iteration, a list of keys is terminated with NULL, so in the code above ``*pkey != NULL``
-is used as the loop condition. One may also iterate via indices::
-
- ppdict *dict;
- size_t index, size;
- ppname key;
- ppobj *obj;
- for (index = 0, size = ppdict_size(dict); index < size; ++index)
- {
- key = ppdict_key(dict, index);
- obj = ppdict_at(dict, index);
- // do something with key and obj
- }
-
-To get the object associated with a given name, use one of the following::
-
- ppobj * ppdict_get_obj (ppdict *dict, const char *name);
- int ppdict_get_bool (ppdict *dict, const char *name, int *v);
- int ppdict_get_int (ppdict *dict, const char *name, ppint *v);
- int ppdict_get_uint (ppdict *dict, const char *name, ppuint *v);
- int ppdict_get_num (ppdict *dict, const char *name, ppnum *v);
- ppname ppdict_get_name (ppdict *dict, const char *name);
- ppstring ppdict_get_string (ppdict *dict, const char *name);
- pparray * ppdict_get_array (ppdict *dict, const char *name);
- ppdict * ppdict_get_dict (ppdict *dict, const char *name);
- ppref * ppdict_get_ref (ppdict *dict, const char *name);
-
-Note that all getters accepts ``const char *`` as key, so it is ok to say::
-
- ppdict_rget_dict(dict, "Resources");
-
-as well as::
-
- ppdic_rget_dict(dict, name); // ppname name
-
-Every ``ppdict_get_*`` getter has ``ppdict_rget_*`` counterpart that dereferences
-indirect objects if necessary. Note that there is no ``ppdict_get_stream()`` function,
-but there is::
-
- ppstream * ppdict_rget_stream (ppdict *dict, const char *name);
-
-So far dicts comes with no names mapping, so by-name dict accessors perform a linear search
-through the keys list. PDF dicts are usually small, so it is fast enough.
-Building names lookup for every dict in PDF makes no sense I think, as ``pplib`` applications
-will query just several dicts I guess.. However, some apps may extensively query
-resources, which may refer to hundreds of objects (eg. images). So some mapping for dicts
-is still considered.
-
-Stream
-------
-
-PDF streams are represented as ``ppstream`` objects. To get the stream dict::
-
- ppdict * ppstream_dict(ppstream *stream) // macro
-
-To read the stream data::
-
- uint8_t * ppstream_first (ppstream *stream, size_t *size, int decode);
- uint8_t * ppstream_next (ppstream *stream, size_t *size);
- void ppstream_done (ppstream *stream);
-
-Both ``first` and ``next`` functions return a chunk of stream data and sets the ``size`` of the chunk.
-``decode`` parameter tell the reader to decompress the stream (1) or return raw (0). A call to ``ppstream_next()``
-must be preceeded by ``ppstream_first()``. Once you're done with the stream, you have to call ``ppstream_done()``,
-no matter if the stream has been read to the end or not. The stream data iterator in use::
-
- uint8_t *data;
- size_t size;
- ppstream *stream;
- int decode = 1; // 1 - get decompressed, 0 - get raw
-
- for (data = ppstream_first(stream, &size, decode); data != NULL; data = ppstream_next(stream, &size))
- {
- // do something with data and its size
- }
- ppstream_done(stream);
-
-Every subsequent iterator call invalidates the previous reader output, so you have to utilize the returned chunk
-of data just after you ot that. So the following is wrong::
-
- data1 = ppstream_first(stream, &size, 1);
- data2 = ppstream_next(stream, &size);
- data3 = ppstream_next(stream, &size);
- some_output(data1, size);
- some_output(data2, size);
-
-The reader calls usually return the same pointer to internal buffer, just filled with a different data.
-``pplib`` allocates reasonably large buffer and fills that buffer on subsequent calls to the reader.
-
-If the source stream has no compression, using both ``decode == 1`` and ``decode == 0`` should give the same result.
-You can check if the stream is actually compressed with::
-
- ppstream_compressed(stream) // macro, returns non zero if /Filter is present
-
-It might be necessary to load the entire stream data at once::
-
- uint8_t * ppstream_all (ppstream *stream, size_t *size, int decode);
-
-If the initial buffer size is insufficient, it grows until the entire stream data is loaded. You must call
-``ppstream_done(stream)`` after using returned data.
-
-``ppstream_done()`` doesn't invalidate the stream object, it just closes its internal reader.
-The stream itself remains a valid object (eg. one can read it again if necessary),
-but the reader buffer is released. It is actually not freed but kept for future the reuse with that on some other stream,
-but you still need to mark it ready for reuse to avoid allocating a separate buffer for every stream you're going to read.
-
-Stream data readers will return ``NULL`` if you haven't close the previous reader process with ``ppstream_done()``. All below is wrong::
-
- data1 = ppstream_all(stream, &size, 1);
- data2 = ppstream_all(stream, &size, 1); // data2 == NULL
- // or
- data1 = ppstream_first(stream, &size, 1);
- data2 = ppstream_first(stream, &size, 1); // data2 == NULL
- // or
- data1 = ppstream_first(stream, &size, 1);
- data2 = ppstream_all(stream, &size, 1); // data2 == NULL
-
-To avoid unnecessary dependencies, ``pplib`` does not support image filters (``/DCT``, ``/JPX``, ``/JBIG``, ``/CCITT``).
-But it is ok to read the stream with ``decode`` set to 1 on such streams. ``pplib`` assumes that the image is the
-final/target stream form and just returns it as-is. Eg. in the case of JPEG (``/DCT`` filtered) image both calls should
-give the same results::
-
- ppstream_all(jpegstream, &jpegsize, 0); // don't decode, return what's there
- ppstream_all(jpegstream, &jpegsize, 1); // decode but found image filter, effectively the same
-
-A bit more about streams memory. As mentioned, ``pplib`` allocates buffers for stream readers. After ``ppstream_done()``,
-the stream no longer *owns* the buffer space. But the buffer may remain allocated, to be reused with future readers.
-``pplib`` keeps a pool of several buffers. This means, that when you use stream readers, ``pplib`` eats
-some memory (1MB or so) that is not freed, even if no streams are used. And even if you free all objects.
-If you suffer from this, you can optionally use a pair of functions::
-
- void ppstream_init_buffers (void);
- void ppstream_free_buffers (void);
-
-The first initializes buffers pool, unless done so far. Currently ``pplib`` cares of it before opening every stream reader,
-so it is not obligatory. The second frees a pool of buffers. The intended use is to call ``ppstream_init_buffers()`` once
-as kind of library initializer and to call ``ppstream_free_buffers()`` once, as the library finalizer.
-
-Filters
--------
-
-In version v1.00 (20190916) ``ppstream`` API has been extended with filters information.
-``ppstream`` knows its filter(s) and keps it as ``stream->filter``::
-
- // ppstream *stream;
- ppstream_filter *info = &stream->filter;
-
-``ppstream_filter`` is the following structure::
-
- typedef struct {
- ppstreamtp *filters; // c-array of filter identifiers (enum integers)
- ppdict **params; // c-array of ppdict pointers
- size_t count; // number of filters, length of the arrays (typically 1)
- } ppstream_filter;
-
-If ``count > 0`` then ``filters`` member is not NULL. Filters array keeps integer constants::
-
- PPSTREAM_BASE16 /* /ASCIIHexDecode */
- PPSTREAM_BASE85 /* /ASCII85Decode */
- PPSTREAM_RUNLENGTH /* /RunLengthDecode */
- PPSTREAM_FLATE /* /FlateDecode */
- PPSTREAM_LZW /* /LZWDecode */
- PPSTREAM_CCITT /* /CCITTFaxDecode */
- PPSTREAM_DCT /* /DCTDecode */
- PPSTREAM_JBIG2 /* /JBIG2Decode */
- PPSTREAM_JPX /* /JPXDecode */
- PPSTREAM_CRYPT /* /Crypt */
-
-Params array keeps corresponding filter parameters (``/DecodeParms``) if present. ``params`` member is not NULL
-if ``count > 0`` and the stream dict has ``/DecodeParms`` entry. Even if ``params`` is there,
-for every N-th filter, ``params[N]`` may be NULL (corresponding to PDF ``null``).
-
-``stream->filter`` keeps the source stream filter information, which may not correspond to the result of stream readers
-(``ppstream_first()``, ``ppstream_next()``, ``ppstream_all()``). The get the filters info relevant to the result from readers::
-
- void ppstream_filter_info (ppstream *stream, ppstream_filter *info, int decode);
-
-The function fills ``ppstream_filter`` structure according to the expected result from stream readers (example 3 shows
-how to use it to reconstruct ``/Filter`` and ``/DecodeParms`` when copying the stream to some other PDF).
-
-To convert filter identifier (``ppstreamtp``) to a corresponding PDF filter name::
-
- const char * ppstream_filter_name[];
-
-To covert ``ppname`` to filter identifier::
-
- int ppstream_filter_type (ppname filtername, ppstreamtp *filtertype);
- // returns 1 and sets filtertype if filtername is the proper filter name
-
-Additional information about the stream can be fetched from macros::
-
- ppstream_compressed(stream) /* stream->flags & (PPSTREAM_FILTER|PPSTREAM_IMAGE) */
- ppstream_filtered(stream) /* stream->flags & PPSTREAM_FILTER */
- ppstream_image(stream) /* stream->flags * PPSTREAM_IMAGE */
-
-``stream->flags`` is a binary sum of the following::
-
- PPSTREAM_FILTER /* set iff the stream filters list has one of: BASE16, BASE85, RUNLENGTH, FLATE, LZW */
- PPSTREAM_IMAGE /* set iff the stream filters list has one of: CCITT, DCT, JBIG2, JPX */
- PPSTREAM_ENCRYPTED /* set iff the stream is encrypted */
- PPSTREAM_ENCRYPTED_OWN /* set iff the stream has own CRYPT filter */
-
-Note that ``PPSTREAM_COMPRESSED`` is not there any longer, use ``ppstream_compressed()`` instead.
-And there is some more, see ``ppapi.h``.
-
-Ref
----
-
-Indirect objects are represented as ``ppref`` structure. To get the object that the
-reference refers to::
-
- ppobj * ppref_obj(ppref *ref) // macro
-
-``ppref`` structure also keeps the reference number and version, a pointer to cross reference table it belongs
-to and others, but I guess you won't need anything but the referenced object. ``pplib`` parser resolves references
-on-fly. So if there is a dict with indirect objects::
-
- <<
- /Type /Page
- /Resources 123 0 R
- ...
- >>
-
-the parser will produce ``ppdict`` with ``Resources`` key pointing the proper ``ppref *`` value.
-If you need more, access ``ppref`` members::
-
- struct ppref {
- ppobj object; // target object
- ppuint number, version; // identifiers
- size_t offset; // file offset (useless for you, may be zero for compressed objects)
- ppuint length; // the length of the original object data
- ppxref *xref; // cross reference table it belongs to
- };
-
-
-XRef
-----
-
-Cross reference table is exposed as ``ppxref`` (incomplete type, you can only oprate on its pointer).
-To get top document xref::
-
- ppxref * ppdoc_xref (ppdoc *pdf);
-
-To get previous (older) xref::
-
- ppxref * ppxref_prev (ppxref *xref);
-
-To find an object of a given refnumber::
-
- ppref * ppxref_find (ppxref *xref, ppuint refnumber);
-
-[Note: since pplib v0.98 in case of documents with incremental update, ``ppxref_find()`` returns
-the newest available version of a given object rather than the object in a given body.]
-
-PDF
----
-
-PDF document is represented as ``ppdoc`` structure (incomplete type, you can only operate on its pointer).
-To load a document from file::
-
- ppdoc * ppdoc_load (const char *filename);
-
-To load a document from memory data::
-
- ppdoc * ppdoc_mem (const void *data, size_t size);
-
-The data is assumed to be a buffer allocated with ``malloc`` - it is freed when destroying ``ppdoc``.
-
-Both loaders returns ``NULL`` on failure.
-
-To free ``ppdoc`` and all objects it refers to::
-
- void ppdoc_free (ppdoc *pdf);
-
-So far we haven't mention about any explicit object reclaimers. There are no dedicated ``free`` functions
-for other objects. You don't allocate or free objects yourself. ``ppdoc`` object is an owner of all
-beings it refers to. It also means that every object described so far is alive as long as the containing
-``ppdoc`` is alive.
-
-To access main PDF dicts::
-
- ppdict * ppdoc_trailer(ppdoc *pdf); // returns top xref trailer dict
- ppdict * ppdoc_catalog(ppdoc *pdf); // returns catalog referred from the trailer
- ppdict * ppdoc_info(ppdoc *pdf); // returns info dict referred from the trailer
-
-To get the PDF version::
-
- const char * ppdoc_version_string (ppdoc *pdf); // version string
- int ppdoc_version_number (ppdoc *pdf, int *minor); // minor and major numbers
-
-To get the file size of the source PDF document::
-
- size_t ppdoc_file_size (ppdoc *pdf);
-
-To get the number of objects in all xrefs::
-
- ppuint ppdoc_objects (ppdoc *pdf);
-
-To get the approx usage of memory::
-
- size_t ppdoc_memory (ppdoc *pdf, size_t *waste);
-
-Encryption
-----------
-
-``pplib`` handles encrypted (password protected) documents. If a document is encrypted, most of strings and streams are ciphered.
-In that form they are unreadable and rather useless, you can't even rewrite such strings/streams as-is to a different PDF output.
-It is a common practise to *protect* documents with an empty password. Such documents remain readable in Acrobat (just opens them without prompting
-for a password), but some features (eg. printing) may restricted by the application.
-
-When ``pplib`` detects encryption, it follows Acrobat approach and first tries an empty password. If it succeeds, ``pplib`` proceeeds normally, providing
-an access to decrypted strings and streams, as if they weren't ciphered. If the document is protected with non-empty password, ``pplib`` gives
-a way to provide a password and proceed. Until you provide a password, ``ppdoc`` object returned by ``ppdoc_load()`` function has all object wntries
-set to ``null``.
-
-After loading a document you should check encryption status with::
-
- ppcrypt_status ppdoc_crypt_status (ppdoc *pdf);
-
-``ppcrypt_status`` (integer) may have the following values:
-
- ``PPCRYPT_NONE`` - no encryption, go ahead
- ``PPCRYPT_DONE`` - encryption present but password succeeded, go ahead
- ``PPCRYPT_PASS`` - encryption present, need non-empty password
- ``PPCRYPT_FAIL`` - invalid or unsupported encryption (eg. undocumented in pdf spec)
-
-If a password is needed, you can provide one with::
-
- ppcrypt_status ppdoc_crypt_pass (ppdoc *pdf, const void *userpass, size_t userpasslength,
- const void *ownerpass, size_t ownerpasslength);
-
-Well, yes, there are actually two passwords in encrypted documents. Relation between them is obscure to me, but enough
-to know that having one of them is enough to decrypt the document. If you know the password, you probably mean
-``userpass``, in which case you should put ``NULL`` as ``ownerpass``. The function returns ``PPCRYPT_DONE`` if the password
-succeeds and the previous status otherwise. Your custom loader function may look like that::
-
- ppdoc *pdf;
- pdf = ppdoc_load("file.pdf");
- if (pdf == NULL)
- return NULL;
- switch (ppdoc_crypt_status(pdf))
- {
- case PPCRYPT_NONE:
- case PPCRYPT_DONE:
- return pdf;
- case PPCRYPT_PASS:
- if (ppdoc_crypt_pass(pdf, "dummy", 5, NULL, 0) == PPCRYPT_DONE ||
- ppdoc_crypt_pass(pdf, NULL, 0, "dummy", 5) == PPCRYPT_DONE)
- return pdf;
- printf("sorry, password needed\n");
- ppdoc_free(pdf);
- return NULL;
- case PPCRYPT_FAIL:
- printf("sorry, encryption failed\n");
- ppdoc_free(pdf);
- return NULL;
- }
-
-[If you get ``PPCRYPT_FAIL`` it might mean *I failed*, so treat as a bug.]
-
-If you'd like to know what permissions are given/restricted to encrypted document::
-
- ppint ppdoc_permissions (ppdoc *pdf);
-
-Returned value can be queried with the following binary flags (you can verify with Acrobat *File -> Properties -> Security* tab)::
-
- PPDOC_ALLOW_PRINT // printing
- PPDOC_ALLOW_MODIFY // filling form fields, signing, creating template pages
- PPDOC_ALLOW_COPY // copying, copying for accessibility
- PPDOC_ALLOW_ANNOTS // filling form fields, copying, signing
- PPDOC_ALLOW_EXTRACT // contents copying for accessibility
- PPDOC_ALLOW_ASSEMBLY // (no effect)
- PPDOC_ALLOW_PRINT_HIRES // (no effect)
-
-``pplib`` does absolutelly nothing with permissions, it cares only to decrypt the document. As mentioned, encryption applies to strings
-and streams. ``pplib`` decrypt strings when parsing document objects, so the result you get is *normal* (not ciphered).
-Streams are decrypted whenever you access them. Even if you ask for a raw stream data, you'll get a raw (compressed) stream, but decrypted.
-So except the check to ``ppdoc_crypt_status()``, you shouldn't bother about encryption.
-
-In encrypted documents most of streams are encrypted. To check if a given stream is encrypted::
-
- ppstream_encrypted(stream) // macro, returns non-zero if encrypted
-
-Encryption is independent from compression, don't confuse with ``ppstream_compressed()``
-
-Pages
------
-
-Several helpers to deal with pages. To get the number of pages::
-
- ppuint ppdoc_page_count (ppdoc *pdf);
-
-To access the root pages tree node::
-
- ppref * ppdoc_pages(ppdoc *pdf);
-
-To get the page reference at a given index::
-
- ppref * ppdoc_page (ppdoc *pdf, ppuint index);
-
-``index`` is a page number. First page has number 1. For index out of bounds ``ppdoc_page()`` returns NULL.
-Iterating over pages using index from 1 to ``ppdoc_page_count()`` and calling ``ppdoc_page()`` on each iteration
-would be suboptimal. Here is a dedicted iterator for this::
-
- ppref * ppdoc_first_page (ppdoc *pdf);
- ppref * ppdoc_next_page (ppdoc *pdf);
-
-The iterator in use::
-
- ppdoc *pdf;
- ppref *ref;
- ppdict *dict;
- int pageno;
-
- pdf = ppdoc_load("file.pdf");
- for (ref = ppdoc_first_page(pdf), pageno = 1; ref != NULL; ref = ppdoc_next_page(pdf), ++pageno)
- {
- dict = ppref_obj(obj)->dict; // take for granted it is a dict
- // do something with the page dict
- }
-
-Functions related to pages return ``ppref *`` ensured to contain dict object, so you don't need sanity
-type checks here.
-
-Contents
---------
-
-PDF page contents can be given as a stream or array of streams. Here is a convenience iterator over page
-contents streams::
-
- ppstream * ppcontents_first (ppdict *dict);
- ppstream * ppcontents_next (ppdict *dict, ppstream *stream);
-
-A complete example of contents stream parser use is given below (example 2).
-But before we get there, we need to introduce ``ppcontext`` object. Conceptually,
-``ppcontext`` is an owner (memory handler) of objects created on demand (beyond the ``ppdoc``).
-So far used only with contents stream parser, which might produce quite some data that we want
-to release just after used. To create a new context::
-
- pcontext * ppcontext_new (void);
-
-It initializes a new context and its internal memory heap, taking about 64kB on start. After that,
-the context is ready to produce objects (contents parsing functions below). Once objects produced
-from a given context are no longer needed::
-
- void ppcontext_done (ppcontext *context);
-
-It restores the context to its initial state, as after ``ppcontext_new()``. It means that the context
-is ready to produce another bunch of beings (in the example below, all objects from the next page contents).
-Once the context is not needed anymore::
-
- void ppcontext_free (ppcontext *context);
-
-Now, contents stream parser functions take the context as an argument. Iterator form of contents stream parser
-that allows to process the contents operator by operator::
-
- ppobj * ppcontents_first_op (ppcontext *context, ppstream *stream, size_t *psize, ppname *pname);
- ppobj * ppcontents_next_op (ppcontext *context, ppstream *stream, size_t *psize, ppname *pname);
-
-Returned ``ppobj *`` is a pointer to operands list. ``*psize`` is the number of operands on stack.
-The operator itself is stored as ``*pname``.
-
-To parse the entire contents stream at once with no stop at every operator::
-
- ppobj * ppcontents_parse (ppcontext *context, ppstream *stream, size_t *psize);
-
-Returns probably quite long list of all parsed objects (operands and operatos) in one piece.
-The number of objects is stored to ``*psize``.
-
-[Contents may contain so called inline images, that breaks a simple scheme of operands / operator syntax::
-
- BI <keyval pairs> ID <binary image data> EI
-
-Contents parser treats this genuine triplet as a single piece, producing two operands (dict and string)
-followed by ``EI`` operator name.]
-
-Boxes
------
-
-Boxes (rectangles) in PDF are roughly 4-number arrays, but with a special intent.
-``pplib`` provides a basic interface for these special arrays::
-
- typedef struct {
- ppnum lx, ly, rx, ry;
- } pprect;
-
-This type is used only by helper functions - PDF parser is not aware of the rectangle type.
-To convert ``pparray`` to ``pprect``::
-
- pprect * pparray_to_rect (pparray *array, pprect *rect); // returns rect or NULL
-
-In example::
-
- pprect rect;
- if (pparray_to_rect(array, &rect) != NULL)
- ; // do something with rect
-
-To get some image bounding box::
-
- pprect * ppdict_get_rect (ppdict *dict, const char *name, pprect *rect);
- // eg. ppdict_get_rect(imagedict, "BBox", &rect)
-
-To get some page box::
-
- pprect * ppdict_get_box (ppdict *dict, const char *name, pprect *rect);
- // eg. ppdict_get_box(pagedict, "MediaBox", &rect)
-
-The later not only checks the pagedict, but also goes through parent page nodes.
-
-Transforms
-----------
-
-Transformations are given as 6-number arrays, but with a special intent.
-``pplib`` provides a basic interface for these special arrays::
-
- typedef struct {
- ppnum xx, xy, yx, yy, x, y;
- } ppmatrix;
-
-This type is used only by helper functions - PDF parser is not aware of the matrix type.
-To convert ``pparray`` to ``ppmatrix``::
-
- ppmatrix * pparray_to_matrix (pparray *array, ppmatrix *matrix);
-
-In example::
-
- ppmatrix matrix;
- if (pparray_to_matrix(array, &matrix) != NULL)
- ; // do something with matrix
-
-To get the matrix from dict::
-
- ppmatrix * ppdict_get_matrix (ppdict *dict, const char *name, ppmatrix *matrix);
- // eg. ppdict_get_matrix(imagedict, "Matrix", &matrix)
-
-Errors handling
----------------
-
-``pplib`` is not verbose, but might happen that it needs to log some error message, eg. when parsing
-of some PDF boject fails due to invalid offsets. By default, ``pplib`` prints the message to stdout, eg.::
-
- invalid 123 0 R object at offset 123123
-
-To replace the default logger, you can provide your own::
-
- void pplog_callback (pplogger_callback logger, void *alien);
-
-``pplogger_callback`` is a function::
-
- void your_callback (const char *message, void *alien);
-
-In example, to redirect messages to stderr you may define a function::
-
- void your_callback (const char *message, void *alien)
- {
- fprintf((FILE *)alien, "\nooops: %s\n", message);
- }
-
-Then set the callback somewhere before loading documents::
-
- pplog_callback(your_callback, stderr);
-
-(example 2 uses that).
-
-To set the default log messages prefix, eg. ``pplib:``, use::
-
- int pplog_prefix (const char *prefix)
-
-Default is empty. The function succeeds if provided prefix is reasonably short (less then 32 bytes).
diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/ppapi-2.x.rst b/Build/source/texk/web2c/luatexdir/luapplib/doc/ppapi-2.x.rst deleted file mode 100644 index 250cd8fcd35..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/ppapi-2.x.rst +++ /dev/null @@ -1,937 +0,0 @@ -
-``pplib`` 2.x
-=============
-
-``pplib`` is a library for raw PDF access. It parses PDF documents and provides an interface to access document structures in C.
-
-C-API
-=====
-
-Types
------
-
-``pplib`` defines several C-types to represent PDF types:
-
-- ``ppbyte`` - char
-- ``ppint`` - signed integer (``int64_t``)
-- ``ppnum`` - real number (double)
-- ``ppname`` - PDF name
-- ``ppstring`` - PDF string
-- ``pparray`` - PDF array
-- ``ppdict`` - PDF dict
-- ``ppstream`` - PDF stream
-- ``ppref`` - PDF indirect reference
-- ``ppobj`` - a container of all above
-
-Among ``ppint`` and ``ppnum``, we also use ``ppuint`` - unsigned integer (machine word, alias to ``size_t``).
-
-Other API types:
-
-- ``ppdoc`` - PDF document
-- ``ppxref`` - cross-references table
-- ``ppcontext`` - ... later
-- ``pprect`` - rectangle
-- ``ppmatrix`` - matrix
-
-Integer and number are as simple types. Names and strings used to be aliases to ``char *``
-in ``pplib 1.x``, now they are structures; all related API functions operate on pointers.
-Other types (array, dict, stream, reference, object container, xref, doc) are C-structures,
-and you operate it their pointers. So when you declare a simple type variable you say::
-
- ppuint u;
- ppnum n;
- ...
-
-And when you declare a compound type you operate on pointers::
-
- ppobj *obj;
- ppname *name;
- ppstring *string;
- pparray *array;
- ppdict *dict;
- ppstream *stream;
- ppref *ref;
- ppdoc *pdf;
-
-Most of those C-types are defined in library header ``ppapi.h`` (complete types). Some others are incomplete
-(eg. you can't say ``sizeof(ppdoc)`` or ``sizeof(ppxref)``). This is to avoid unnecesary dependencies in
-the header. The library itself uses ``pplib.h`` header but for auxilary applications including a standalone
-``ppapi.h`` header should be enough.
-
-``pplib`` was designed having **read-only** PDF access in mind. Even if some structure is completelly exposed,
-so that you can directly access its members, you should treat them as read-only. I don't make them ``const`` because
-then all variable declarations would need to be ``const``, which is annoying, and I'd need some trickery in the library
-internals to unconst. Besides, nothing is really const for C type casts.
-
-Object
-------
-
-A common container for all elementary PDF object types is ``ppobj`` structure. ``ppobj`` has a type identifier
-(integer) and union of values::
-
- struct ppobj {
- ppobjtp type;
- union {
- ppint integer;
- ppnum number;
- ppname *name;
- ppstring *string;
- pparray *array;
- ppdict *dict;
- ppstream *stream;
- ppref *ref;
- void *any;
- };
- };
-
-Object type is one of constants (enum)::
-
- PPNONE
- PPNULL
- PPBOOL
- PPINT
- PPNUM
- PPNAME
- PPSTRING
- PPARRAY
- PPDICT
- PPSTREAM
- PPREF
-
-The type determines the structure member you're allowed to access::
-
- ppobj *obj;
- ...
- switch (obj->type)
- {
- case PPNONE: // shouldn't actually happen, indicates some failure
- break;
- case PPNULL: // valid PDF null object, no value
- break;
- case PPBOOL: // do something with obj->integer (ppint), value 0 or 1
- break;
- case PPINT: // do something with obj->integer (ppint)
- break;
- case PPNUM: // do something with obj->number (ppnum)
- break;
- case PPNAME: // do something with obj->name (ppname *)
- break;
- case PPSTRING: // do something with obj->string (ppstring *)
- break;
- case PPARRAY: // do something with obj->array (pparray *)
- break;
- case PPDICT: // do something with obj->dict (ppdict *)
- break;
- case PPSTREAM: // do something with obj->stream (ppstream *)
- break;
- case PPREF: // do something with obj->ref (ppref *)
- break;
- }
-
-More often then not you know exactly what type of object value is expected, in which case
-you may use one of the following macros::
-
- // returns 1 if o->type is PPNULL
- int ppobj_get_null(o) \
-
- // if o->type is PPBOOL, sets int v to 0 or 1 and returns 1, 0 otherwise
- int ppobj_get_bool(o, v)
-
- // if o->type is PPINT, sets ppint v and returns 1, 0 otherwise
- int ppobj_get_int(o, v)
-
- // if o->type is PPINT and >= 0, sets ppuint v and returns 1, 0 otherwise
- int ppobj_get_uint(o, v)
-
- // if o->type is PPNUM or PPINT, sets ppnum v and returns 1, 0 otherwise
- int ppobj_get_num(o, v)
-
- // if o->type is PPNAME returns the name, NULL otherwise
- ppname * ppobj_get_name(o)
-
- // if o->type is PPSTRING returns the string, NULL otherwise
- ppstring * ppobj_get_string(o)
-
- // if o->type is PPARRAY returns the array, NULL otherwise
- pparray * ppobj_get_array(o)
-
- // if o->type is PPDICT returns the dict, NULL otherwise
- ppdict * ppobj_get_dict(o)
-
- // if o->type is PPSTREAM returns the stream, NULL otherwise
- ppstream * ppobj_get_stream(o)
-
- // if o->type is PPREF returns the reference, NULL otherwise
- ppref * ppobj_get_ref(o)
-
-Note the coercion from integer to real number, but not reverse. In practise, whenever you expect a real number,
-you should also handle integer (eg. '1' used instead of '1.0' is pretty common in PDF).
-
-It is a common case that the object is given as an indirect reference, but what you actually
-want is not the reference, but the object referred by it. Here is a helper for it::
-
- // if o->type is PPREF, returns what the reference points, otherwise returns o
- ppobj * ppobj_rget_obj(o)
-
-Also every ``ppobj_get_*`` macro has ``ppobj_rget_*`` counterpart that makes a check
-for the expected type, but if the object is PPREF, it jumps to the target object.
-So for example ``ppobj_rget_dict(obj)`` will return dict if ``obj`` is of type PPDICT
-or if it is of type PPREF and ``obj->ref`` hosts an object of type PPDICT.
-
-Names
------
-
-PDF names are represented as ``ppname`` pointer (``ppname`` used to be an alias to ``char *``, now it is a structure).
-To access the name data::
-
- ppbyte * ppname_data(name) // name->data, bytes array
-
-For convenient use in C, names are ``'\0'`` terminated. But to get the length of name better always use
-``ppname_size()`` macro. ``ppname`` object knows its size, don't use ``strlen()``::
-
- size_t ppname_size(ppname name); // name->size, the length of name in bytes
-
-In current implementation names are not hashed anyhow, so name-to-name comparison is not smarter than ``memcmp()``.
-Use macros::
-
- int ppname_is(ppname name, "literal"); // to compare ppname with C-literal string
- int ppname_eq(ppname name, ppname other); // to compare ppname with a different name
-
-If you use ``pplib`` to parse contents streams, you may need to distinguish names from operators
-(more precisely executable names). Names in PDF are preceeded by '/', executable names aren't. In both
-cases PDF parser will produce ``ppname`` but the result can be distingushed with::
-
- int ppname_exec(ppname name); // macro, returns non-zero if the name is executable
-
-Names are kept in their raw form, with possible PDF specific escapes (in text below we call it **encoded** form).
-Leading '/' is omitted. One may need a decoded name, with no PDF escapes.
-A pair of functions provides a simple interface to switch between those two forms::
-
- // these helpers rely on name->alterego member
- ppname * ppname_decoded (ppname *name); // returns decoded (unescaped) form of the name
- ppname * ppname_encoded (ppname *name); // returns encoded (escaped) form of the name
- ppbyte * ppname_decoded_data (ppname *name);
- ppbyte * ppname_encoded_data (ppname *name);
-
-In pretty most cases a PDF name contains only letters (no special characters, no escapes), so decoded and encoded forms are identical.
-In that case both functions simply return the argument. It is ok to call ``ppname_decoded()`` on already decoded form
-and ``ppname_encoded()`` on already encoded form. Both forms are produced by PDF objects parser, so accessing ``ppname`` alter ego
-in whatever direction needs no extra decoding or allocation costs (the cost is paid by parser).
-
-String
-------
-
-PDF strings have the same internal construction as names, so most of names description above applies to strings as well.
-``ppstring`` is a structure (used to be an alias to ``char *``). ``string->data`` is ``\0``-terminated c-array of ``ppbytes``.
-To get the data::
-
- ppbyte * ppstring_data(ppstring *string); // string->data, macro
-
-To get the size of the string::
-
- size_t ppstring_size(ppstring *string); // macro, returns the length of the string in bytes
-
-Strings are provided in their raw form, preserving PDF specific escapes, but with no
-``()`` or ``<>`` delims. To distinguish plain strings from hex strings::
-
- int ppstring_hex(ppstring string); // macro, returns non zero if hex string
-
-Or if you prefer::
-
- switch (ppstring_type(string))
- {
- case PPSTRING_PLAIN: // literal string, surrounded by ``(`` and ``)`` in PDF
- break;
- case PPSTRING_BASE16: // hex string, surrounded by ``<`` and ``>`` in PDF
- break;
- case PPSTRING_BASE85: // base85 string surrounded by ``<~`` and ``~>`` in PDF
- break;
- }
-
-The last is actually Postscript specific, not used in PDF, but I think it might appear in contents streams...
-No matter how the string is given in PDF (plain or hex), here are two functions to
-switch between encoded and decoded strings forms::
-
- ppstring * ppstring_decoded (ppstring *string); // returns decoded string possibly with PDF escapes
- ppstring * ppstring_encoded (ppstring *string); // returns encoded string with no PDF escapes
- ppbyte * ppstring_decoded_data (ppstring *string);
- ppbyte * ppstring_encoded_data (ppstring *string);
-
-For hex strings, encoded form contains hex digits, while decoded form contains arbitrary bytes (the result of hex decoding).
-Plain strings usually contains printable ASCII characters, but they might contain any binary data.
-As with names, objects parser produces both forms. The raw form with PDF escapes (or raw hex form) the main one.
-Eg. when you access ``obj->string`` you always get the encoded form. At any moment you can switch to its alter ego.
-
-No matter if the string is plain or hex, if its first two bytes (decoded) are UTF16 BOM, the string is unicode.
-``ppstring`` object *knows* it is unicode or not::
-
- switch (ppstring_utf(string))
- {
- case PPSTRING_UTF16LE: // unicode string, utf16le
- break;
- case PPSTRING_UTF16BE: // unicode string, utf16be
- break;
- default: // no unicode
- }
-
-Or simply::
-
- if (ppstring_utf(string) != 0) {
- // handle unicode string
- }
-
-If the string is unicode, BOM remains the part of the string -- ``pplib`` parser does not strip it.
-Unicode or not, encoded or decoded, strings are always C-arrays of bytes and ``ppstring_size()``
-always returns the size in bytes.
-
-Array
------
-
-PDF arrays are represented as ``pparray`` type, which is C-array of ``ppobj`` structures.
-To get the size::
-
- size_t pparray_size(pparray *array) // macro, returns the number of array items
-
-To get ``ppobj *`` at a given index::
-
- ppobj * pparray_at(array, index) // macro, returns ppobj * (no index check)
- ppobj * pparray_get(array, index) // macro, returns ppobj * or NULL (with index check)
- ppobj * pparray_get_obj (pparray *array, size_t index); // function equiv to pparray_get()
-
-Iterating over array elements::
-
- pparray *array;
- size_t index, size;
- ppobj *obj;
- for (size = pparray_size(array), pparray_first(array, index, obj); index < size; pparray_next(index, obj))
- {
- // do something with index and obj
- }
-
-There is no magic first/next macros, just iteration over pointers. One could also use something like::
-
- for (index = 0, size = array->size; index < size; ++index)
- {
- obj = pparray_at(array, index);
- // do something with index and obj
- }
-
-When getting values from array and expecting a result of known type, use one of the following::
-
- int pparray_get_bool (pparray *array, size_t index, int *v); // get boolean value
- int pparray_get_int (pparray *array, size_t index, ppint *v); // get ppint value
- int pparray_get_uint (pparray *array, size_t index, ppuint *v); // get ppuint value
- int pparray_get_num (pparray *array, size_t index, ppnum *v); // get ppnum value
- ppname * pparray_get_name (pparray *array, size_t index); // get ppname * value
- ppstring * pparray_get_string (pparray *array, size_t index); // get ppstring * value
- pparray * pparray_get_array (pparray *array, size_t index); // get pparray * value
- ppdict * pparray_get_dict (pparray *array, size_t index); // get ppdict * value
- ppref * pparray_get_ref (pparray *array, size_t index); // get ppref * value
-
-As with ``ppobj_get_*`` suite, numeric types getters set the value of a given type and returns 1, if the type matches.
-Otherwise sets nothing and returns 0. Other getters return the value if the type matches, or NULL.
-
-Every function from ``pparray_get_*`` suite have its ``pparray_rget_*`` counterpart
-that dereferences indirect objects (as explained for ``ppobj_rget_*`` getters). Note that
-there is no ``pparray_get_stream()`` function, as streams in PDF are always indirect
-(may only reside in ``ref->object.stream``). To get the stream from array use::
-
- ppstream * pparray_rget_stream (pparray *array, size_t index);
-
-Dict
-----
-
-PDF dicts are represented as ``ppdict`` structure, which is C-array of ``ppobj`` with parallel
-C-array of ``ppname`` pointers. To get the size of a dict::
-
- size_t ppdict_size(ppdict *dict) // macro, returns the number of key-val pairs
-
-To get the value at a given index (integer)::
-
- ppobj * ppdict_at(ppdict *dict, index) // macro, no index bounds check
-
-To get the name (key) at a given index::
-
- ppname * ppdict_key(ppdict *dict, index) // macro, no index bounds check
-
-To iterate over dict key-val pairs::
-
- ppdict *dict;
- ppname **pkey;
- ppobj *obj;
-
- for (ppdict_first(dict, pkey, obj); *pkey != NULL; ppdict_next(pkey, obj))
- {
- // do something with *pkey and obj
- }
-
-There is no magic in first/next macros, just iteration through keys and values lists pointers.
-For convenient iteration, a list of keys is terminated with NULL, so in the code above ``*pkey != NULL``
-is used as the loop condition. One may also iterate via indices::
-
- ppdict *dict;
- size_t index, size;
- ppname *key;
- ppobj *obj;
- for (index = 0, size = ppdict_size(dict); index < size; ++index)
- {
- key = ppdict_key(dict, index);
- obj = ppdict_at(dict, index);
- // do something with key and obj
- }
-
-To get the object associated with a given name, use one of the following::
-
- ppobj * ppdict_get_obj (ppdict *dict, const char *name);
- int ppdict_get_bool (ppdict *dict, const char *name, int *v);
- int ppdict_get_int (ppdict *dict, const char *name, ppint *v);
- int ppdict_get_uint (ppdict *dict, const char *name, ppuint *v);
- int ppdict_get_num (ppdict *dict, const char *name, ppnum *v);
- ppname ppdict_get_name (ppdict *dict, const char *name);
- ppstring ppdict_get_string (ppdict *dict, const char *name);
- pparray * ppdict_get_array (ppdict *dict, const char *name);
- ppdict * ppdict_get_dict (ppdict *dict, const char *name);
- ppref * ppdict_get_ref (ppdict *dict, const char *name);
-
-Note that all getters accepts ``const char *`` as key, so it is ok to say::
-
- ppdict_rget_dict(dict, "Resources");
-
-(the most common use I guess). But to use ``ppname`` object as a key, one have to
-use data member::
-
- ppdic_rget_dict(dict, name->data); // ppname *name
-
-Every ``ppdict_get_*`` getter has ``ppdict_rget_*`` counterpart that dereferences
-indirect objects if necessary. Note that there is no ``ppdict_get_stream()`` function,
-but there is::
-
- ppstream * ppdict_rget_stream (ppdict *dict, const char *name);
-
-So far dicts comes with no names mapping, so by-name dict accessors perform a linear search
-through the keys list. PDF dicts are usually small.
-
-Stream
-------
-
-PDF streams are represented as ``ppstream`` objects. To get the stream dict::
-
- ppdict * ppstream_dict(ppstream *stream) // macro
-
-To read the stream data::
-
- uint8_t * ppstream_first (ppstream *stream, size_t *size, int decode);
- uint8_t * ppstream_next (ppstream *stream, size_t *size);
- void ppstream_done (ppstream *stream);
-
-Both ``first` and ``next`` functions return a chunk of stream data and sets the ``size`` of the chunk.
-``decode`` parameter tell the reader to decompress the stream (1) or return raw (0). A call to ``ppstream_next()``
-must be preceeded by ``ppstream_first()``. Once you're done with the stream, you have to call ``ppstream_done()``,
-no matter if the stream has been read to the end or not. The stream data iterator in use::
-
- uint8_t *data;
- size_t size;
- ppstream *stream;
- int decode = 1; // 1 - get decompressed, 0 - get raw
-
- for (data = ppstream_first(stream, &size, decode); data != NULL; data = ppstream_next(stream, &size))
- {
- // do something with data and its size
- }
- ppstream_done(stream);
-
-Every subsequent iterator call invalidates the previous reader output, so you have to utilize the returned chunk
-of data just after you ot that. So the following is wrong::
-
- data1 = ppstream_first(stream, &size, 1);
- data2 = ppstream_next(stream, &size);
- data3 = ppstream_next(stream, &size);
- some_output(data1, size);
- some_output(data2, size);
-
-The reader calls usually return the same pointer to internal buffer, just filled with a different data.
-``pplib`` allocates reasonably large buffer and fills that buffer on subsequent calls to the reader.
-
-If the source stream has no compression, using both ``decode == 1`` and ``decode == 0`` should give the same result.
-You can check if the stream is actually compressed with::
-
- ppstream_compressed(stream) // macro, returns non zero if /Filter is present
-
-It might be necessary to load the entire stream data at once::
-
- uint8_t * ppstream_all (ppstream *stream, size_t *size, int decode);
-
-If the initial buffer size is insufficient, it grows until the entire stream data is loaded. You must call
-``ppstream_done(stream)`` after using returned data.
-
-``ppstream_done()`` doesn't invalidate the stream object, it just closes its internal reader.
-The stream itself remains a valid object (eg. one can read it again if necessary),
-but the reader buffer is released. It is actually not freed but kept for future the reuse with that on some other stream,
-but you still need to mark it ready for reuse to avoid allocating a separate buffer for every stream you're going to read.
-
-Stream data readers will return ``NULL`` if you haven't close the previous reader process with ``ppstream_done()``. All below is wrong::
-
- data1 = ppstream_all(stream, &size, 1);
- data2 = ppstream_all(stream, &size, 1); // data2 == NULL
- // or
- data1 = ppstream_first(stream, &size, 1);
- data2 = ppstream_first(stream, &size, 1); // data2 == NULL
- // or
- data1 = ppstream_first(stream, &size, 1);
- data2 = ppstream_all(stream, &size, 1); // data2 == NULL
-
-To avoid unnecessary dependencies, ``pplib`` does not support image filters (``/DCT``, ``/JPX``, ``/JBIG``, ``/CCITT``).
-But it is ok to read the stream with ``decode`` set to 1 on such streams. ``pplib`` assumes that the image is the
-final/target stream form and just returns it as-is. Eg. in the case of JPEG (``/DCT`` filtered) image both calls should
-give the same results::
-
- ppstream_all(jpegstream, &jpegsize, 0); // don't decode, return what's there
- ppstream_all(jpegstream, &jpegsize, 1); // decode but found image filter, effectively the same
-
-A bit more about streams memory. As mentioned, ``pplib`` allocates buffers for stream readers. After ``ppstream_done()``,
-the stream no longer *owns* the buffer space. But the buffer may remain allocated, to be reused with future readers.
-``pplib`` keeps a pool of several buffers. This means, that when you use stream readers, ``pplib`` eats
-some memory (1MB or so) that is not freed, even if no streams are used. And even if you free all objects.
-If you suffer from this, you can optionally use a pair of functions::
-
- void ppstream_init_buffers (void);
- void ppstream_free_buffers (void);
-
-The first initializes buffers pool, unless done so far. Currently ``pplib`` cares of it before opening every stream reader,
-so it is not obligatory. The second frees a pool of buffers. The intended use is to call ``ppstream_init_buffers()`` once
-as kind of library initializer and to call ``ppstream_free_buffers()`` once, as the library finalizer.
-
-Filters
--------
-
-``ppstream`` knows its filter(s) and keps it as ``stream->filter``::
-
- // ppstream *stream;
- ppstream_filter *info = &stream->filter;
-
-``ppstream_filter`` is the following structure::
-
- typedef struct {
- ppstreamtp *filters; // c-array of filter identifiers (enum integers)
- ppdict **params; // c-array of ppdict pointers
- size_t count; // number of filters, length of the arrays (typically 1)
- } ppstream_filter;
-
-If ``count > 0`` then ``filters`` member is not NULL. Filters array keeps integer constants::
-
- PPSTREAM_BASE16 /* /ASCIIHexDecode */
- PPSTREAM_BASE85 /* /ASCII85Decode */
- PPSTREAM_RUNLENGTH /* /RunLengthDecode */
- PPSTREAM_FLATE /* /FlateDecode */
- PPSTREAM_LZW /* /LZWDecode */
- PPSTREAM_CCITT /* /CCITTFaxDecode */
- PPSTREAM_DCT /* /DCTDecode */
- PPSTREAM_JBIG2 /* /JBIG2Decode */
- PPSTREAM_JPX /* /JPXDecode */
- PPSTREAM_CRYPT /* /Crypt */
-
-Params array keeps corresponding filter parameters (``/DecodeParms``) if present. ``params`` member is not NULL
-if ``count > 0`` and the stream dict has ``/DecodeParms`` entry. Even if ``params`` is there,
-for every N-th filter, ``params[N]`` may be NULL (corresponding to PDF ``null``).
-
-``stream->filter`` keeps the source stream filter information, which may not correspond to the result of stream readers
-(``ppstream_first()``, ``ppstream_next()``, ``ppstream_all()``). The get the filters info relevant to the result from readers::
-
- void ppstream_filter_info (ppstream *stream, ppstream_filter *info, int decode);
-
-The function fills ``ppstream_filter`` structure according to the expected result from stream readers (example 3 shows
-how to use it to reconstruct ``/Filter`` and ``/DecodeParms`` when copying the stream to some other PDF).
-
-To convert filter identifier (``ppstreamtp``) to a corresponding PDF filter name::
-
- const char * ppstream_filter_name[];
-
-To covert ``ppname`` to filter identifier::
-
- int ppstream_filter_type (ppname filtername, ppstreamtp *filtertype);
- // returns 1 and sets filtertype if filtername is the proper filter name
-
-Additional information about the stream can be fetched from macros::
-
- ppstream_compressed(stream) /* stream->flags & (PPSTREAM_FILTER|PPSTREAM_IMAGE) */
- ppstream_filtered(stream) /* stream->flags & PPSTREAM_FILTER */
- ppstream_image(stream) /* stream->flags * PPSTREAM_IMAGE */
-
-``stream->flags`` is a binary sum of the following::
-
- PPSTREAM_FILTER /* set iff the stream filters list has one of: BASE16, BASE85, RUNLENGTH, FLATE, LZW */
- PPSTREAM_IMAGE /* set iff the stream filters list has one of: CCITT, DCT, JBIG2, JPX */
- PPSTREAM_ENCRYPTED /* set iff the stream is encrypted */
- PPSTREAM_ENCRYPTED_OWN /* set iff the stream has own CRYPT filter */
-
-Note that ``PPSTREAM_COMPRESSED`` is not there any longer, use ``ppstream_compressed()`` instead.
-And there is some more, see ``ppapi.h``.
-
-Ref
----
-
-Indirect objects are represented as ``ppref`` structure. To get the object that the
-reference refers to::
-
- ppobj * ppref_obj(ppref *ref) // macro
-
-``ppref`` structure also keeps the reference number and version, a pointer to cross reference table it belongs
-to and others, but I guess you won't need anything but the referenced object. ``pplib`` parser resolves references
-on-fly. So if there is a dict with indirect objects::
-
- <<
- /Type /Page
- /Resources 123 0 R
- ...
- >>
-
-the parser will produce ``ppdict`` with ``Resources`` key pointing the proper ``ppref *`` value.
-If you need more, access ``ppref`` members::
-
- struct ppref {
- ppobj object; // target object
- ppuint number, version; // identifiers
- size_t offset; // file offset (useless for you, may be zero for compressed objects)
- ppuint length; // the length of the original object data
- ppxref *xref; // cross reference table it belongs to
- };
-
-
-XRef
-----
-
-Cross reference table is exposed as ``ppxref`` (incomplete type, you can only oprate on its pointer).
-To get top document xref::
-
- ppxref * ppdoc_xref (ppdoc *pdf);
-
-To get previous (older) xref::
-
- ppxref * ppxref_prev (ppxref *xref);
-
-To find an object of a given refnumber::
-
- ppref * ppxref_find (ppxref *xref, ppuint refnumber);
-
-[Note: since pplib v0.98 in case of documents with incremental update, ``ppxref_find()`` returns
-the newest available version of a given object rather than the object in a given body.]
-
-PDF
----
-
-PDF document is represented as ``ppdoc`` structure (incomplete type, you can only operate on its pointer).
-To load a document from file::
-
- ppdoc * ppdoc_load (const char *filename);
-
-To load a document from file handle::
-
- ppdoc * ppdoc_filehandle (FILE *file, int closefile); // closefile 1 to fclose() on end
-
-To load a document from memory data::
-
- ppdoc * ppdoc_mem (const void *data, size_t size);
-
-The data is assumed to be a buffer allocated with ``malloc`` - it is freed when destroying ``ppdoc``.
-
-Both loaders returns ``NULL`` on failure.
-
-To free ``ppdoc`` and all objects it refers to::
-
- void ppdoc_free (ppdoc *pdf);
-
-So far we haven't mention about any explicit object reclaimers. There are no dedicated ``free`` functions
-for other objects. You don't allocate or free objects yourself. ``ppdoc`` object is an owner of all
-beings it refers to. It also means that every object described so far is alive as long as the containing
-``ppdoc`` is alive.
-
-To access main PDF dicts::
-
- ppdict * ppdoc_trailer(ppdoc *pdf); // returns top xref trailer dict
- ppdict * ppdoc_catalog(ppdoc *pdf); // returns catalog referred from the trailer
- ppdict * ppdoc_info(ppdoc *pdf); // returns info dict referred from the trailer
-
-To get the PDF version::
-
- const char * ppdoc_version_string (ppdoc *pdf); // version string
- int ppdoc_version_number (ppdoc *pdf, int *minor); // minor and major numbers
-
-To get the file size of the source PDF document::
-
- size_t ppdoc_file_size (ppdoc *pdf);
-
-To get the number of objects in all xrefs::
-
- ppuint ppdoc_objects (ppdoc *pdf);
-
-To get the approx usage of memory::
-
- size_t ppdoc_memory (ppdoc *pdf, size_t *waste);
-
-Encryption
-----------
-
-``pplib`` handles encrypted (password protected) documents. If a document is encrypted, most of strings and streams are ciphered.
-In that form they are unreadable and rather useless, you can't even rewrite such strings/streams as-is to a different PDF output.
-It is a common practise to *protect* documents with an empty password. Such documents remain readable in Acrobat (just opens them without prompting
-for a password), but some features (eg. printing) may restricted by the application.
-
-When ``pplib`` detects encryption, it follows Acrobat approach and first tries an empty password. If it succeeds, ``pplib`` proceeeds normally, providing
-an access to decrypted strings and streams, as if they weren't ciphered. If the document is protected with non-empty password, ``pplib`` gives
-a way to provide a password and proceed. Until you provide a password, ``ppdoc`` object returned by ``ppdoc_load()`` function has all object wntries
-set to ``null``.
-
-After loading a document you should check encryption status with::
-
- ppcrypt_status ppdoc_crypt_status (ppdoc *pdf);
-
-``ppcrypt_status`` (integer) may have the following values:
-
- ``PPCRYPT_NONE`` - no encryption, go ahead
- ``PPCRYPT_DONE`` - encryption present but password succeeded, go ahead
- ``PPCRYPT_PASS`` - encryption present, need non-empty password
- ``PPCRYPT_FAIL`` - invalid or unsupported encryption (eg. undocumented in pdf spec)
-
-If a password is needed, you can provide one with::
-
- ppcrypt_status ppdoc_crypt_pass (ppdoc *pdf, const void *userpass, size_t userpasslength,
- const void *ownerpass, size_t ownerpasslength);
-
-Well, yes, there are actually two passwords in encrypted documents. Relation between them is obscure to me, but enough
-to know that having one of them is enough to decrypt the document. If you know the password, you probably mean
-``userpass``, in which case you should put ``NULL`` as ``ownerpass``. The function returns ``PPCRYPT_DONE`` if the password
-succeeds and the previous status otherwise. Your custom loader function may look like that::
-
- ppdoc *pdf;
- pdf = ppdoc_load("file.pdf");
- if (pdf == NULL)
- return NULL;
- switch (ppdoc_crypt_status(pdf))
- {
- case PPCRYPT_NONE:
- case PPCRYPT_DONE:
- return pdf;
- case PPCRYPT_PASS:
- if (ppdoc_crypt_pass(pdf, "dummy", 5, NULL, 0) == PPCRYPT_DONE ||
- ppdoc_crypt_pass(pdf, NULL, 0, "dummy", 5) == PPCRYPT_DONE)
- return pdf;
- printf("sorry, password needed\n");
- ppdoc_free(pdf);
- return NULL;
- case PPCRYPT_FAIL:
- printf("sorry, encryption failed\n");
- ppdoc_free(pdf);
- return NULL;
- }
-
-[If you get ``PPCRYPT_FAIL`` it might mean *I failed*, so treat as a bug.]
-
-If you'd like to know what permissions are given/restricted to encrypted document::
-
- ppint ppdoc_permissions (ppdoc *pdf);
-
-Returned value can be queried with the following binary flags (you can verify with Acrobat *File -> Properties -> Security* tab)::
-
- PPDOC_ALLOW_PRINT // printing
- PPDOC_ALLOW_MODIFY // filling form fields, signing, creating template pages
- PPDOC_ALLOW_COPY // copying, copying for accessibility
- PPDOC_ALLOW_ANNOTS // filling form fields, copying, signing
- PPDOC_ALLOW_EXTRACT // contents copying for accessibility
- PPDOC_ALLOW_ASSEMBLY // (no effect)
- PPDOC_ALLOW_PRINT_HIRES // (no effect)
-
-``pplib`` does absolutelly nothing with permissions, it cares only to decrypt the document. As mentioned, encryption applies to strings
-and streams. ``pplib`` decrypt strings when parsing document objects, so the result you get is *normal* (not ciphered).
-Streams are decrypted whenever you access them. Even if you ask for a raw stream data, you'll get a raw (compressed) stream, but decrypted.
-So except the check to ``ppdoc_crypt_status()``, you shouldn't bother about encryption.
-
-In encrypted documents most of streams are encrypted. To check if a given stream is encrypted::
-
- ppstream_encrypted(stream) // macro, returns non-zero if encrypted
-
-Encryption is independent from compression, don't confuse with ``ppstream_compressed()``
-
-Pages
------
-
-Several helpers to deal with pages. To get the number of pages::
-
- ppuint ppdoc_page_count (ppdoc *pdf);
-
-To access the root pages tree node::
-
- ppref * ppdoc_pages(ppdoc *pdf);
-
-To get the page reference at a given index::
-
- ppref * ppdoc_page (ppdoc *pdf, ppuint index);
-
-``index`` is a page number. First page has number 1. For index out of bounds ``ppdoc_page()`` returns NULL.
-Iterating over pages using index from 1 to ``ppdoc_page_count()`` and calling ``ppdoc_page()`` on each iteration
-would be suboptimal. Here is a dedicted iterator for this::
-
- ppref * ppdoc_first_page (ppdoc *pdf);
- ppref * ppdoc_next_page (ppdoc *pdf);
-
-The iterator in use::
-
- ppdoc *pdf;
- ppref *ref;
- ppdict *dict;
- int pageno;
-
- pdf = ppdoc_load("file.pdf");
- for (ref = ppdoc_first_page(pdf), pageno = 1; ref != NULL; ref = ppdoc_next_page(pdf), ++pageno)
- {
- dict = ppref_obj(obj)->dict; // take for granted it is a dict
- // do something with the page dict
- }
-
-Functions related to pages return ``ppref *`` ensured to contain dict object, so you don't need sanity
-type checks here.
-
-Contents
---------
-
-PDF page contents can be given as a stream or array of streams. Here is a convenience iterator over page
-contents streams::
-
- ppstream * ppcontents_first (ppdict *dict);
- ppstream * ppcontents_next (ppdict *dict, ppstream *stream);
-
-A complete example of contents stream parser use is given below (example 2).
-But before we get there, we need to introduce ``ppcontext`` object. Conceptually,
-``ppcontext`` is an owner (memory handler) of objects created on demand (beyond the ``ppdoc``).
-So far used only with contents stream parser, which might produce quite some data that we want
-to release just after used. To create a new context::
-
- pcontext * ppcontext_new (void);
-
-It initializes a new context and its internal memory heap, taking about 64kB on start. After that,
-the context is ready to produce objects (contents parsing functions below). Once objects produced
-from a given context are no longer needed::
-
- void ppcontext_done (ppcontext *context);
-
-It restores the context to its initial state, as after ``ppcontext_new()``. It means that the context
-is ready to produce another bunch of beings (in the example below, all objects from the next page contents).
-Once the context is not needed anymore::
-
- void ppcontext_free (ppcontext *context);
-
-Now, contents stream parser functions take the context as an argument. Iterator form of contents stream parser
-that allows to process the contents operator by operator::
-
- ppobj * ppcontents_first_op (ppcontext *context, ppstream *stream, size_t *psize, ppname *pname);
- ppobj * ppcontents_next_op (ppcontext *context, ppstream *stream, size_t *psize, ppname *pname);
-
-Returned ``ppobj *`` is a pointer to operands list. ``*psize`` is the number of operands on stack.
-The operator itself is stored as ``*pname``.
-
-To parse the entire contents stream at once with no stop at every operator::
-
- ppobj * ppcontents_parse (ppcontext *context, ppstream *stream, size_t *psize);
-
-Returns probably quite long list of all parsed objects (operands and operatos) in one piece.
-The number of objects is stored to ``*psize``.
-
-[Contents may contain so called inline images, that breaks a simple scheme of operands / operator syntax::
-
- BI <keyval pairs> ID <binary image data> EI
-
-Contents parser treats this genuine triplet as a single piece, producing two operands (dict and string)
-followed by ``EI`` operator name.]
-
-Boxes
------
-
-Boxes (rectangles) in PDF are roughly 4-number arrays, but with a special intent.
-``pplib`` provides a basic interface for these special arrays::
-
- typedef struct {
- ppnum lx, ly, rx, ry;
- } pprect;
-
-This type is used only by helper functions - PDF parser is not aware of the rectangle type.
-To convert ``pparray`` to ``pprect``::
-
- pprect * pparray_to_rect (pparray *array, pprect *rect); // returns rect or NULL
-
-In example::
-
- pprect rect;
- if (pparray_to_rect(array, &rect) != NULL)
- ; // do something with rect
-
-To get some image bounding box::
-
- pprect * ppdict_get_rect (ppdict *dict, const char *name, pprect *rect);
- // eg. ppdict_get_rect(imagedict, "BBox", &rect)
-
-To get some page box::
-
- pprect * ppdict_get_box (ppdict *dict, const char *name, pprect *rect);
- // eg. ppdict_get_box(pagedict, "MediaBox", &rect)
-
-The later not only checks the pagedict, but also goes through parent page nodes.
-
-Transforms
-----------
-
-Transformations are given as 6-number arrays, but with a special intent.
-``pplib`` provides a basic interface for these special arrays::
-
- typedef struct {
- ppnum xx, xy, yx, yy, x, y;
- } ppmatrix;
-
-This type is used only by helper functions - PDF parser is not aware of the matrix type.
-To convert ``pparray`` to ``ppmatrix``::
-
- ppmatrix * pparray_to_matrix (pparray *array, ppmatrix *matrix);
-
-In example::
-
- ppmatrix matrix;
- if (pparray_to_matrix(array, &matrix) != NULL)
- ; // do something with matrix
-
-To get the matrix from dict::
-
- ppmatrix * ppdict_get_matrix (ppdict *dict, const char *name, ppmatrix *matrix);
- // eg. ppdict_get_matrix(imagedict, "Matrix", &matrix)
-
-Errors handling
----------------
-
-``pplib`` is not verbose, but might happen that it needs to log some error message, eg. when parsing
-of some PDF boject fails due to invalid offsets. By default, ``pplib`` prints the message to stdout, eg.::
-
- invalid 123 0 R object at offset 123123
-
-To replace the default logger, you can provide your own::
-
- void pplog_callback (pplogger_callback logger, void *alien);
-
-``pplogger_callback`` is a function::
-
- void your_callback (const char *message, void *alien);
-
-In example, to redirect messages to stderr you may define a function::
-
- void your_callback (const char *message, void *alien)
- {
- fprintf((FILE *)alien, "\nooops: %s\n", message);
- }
-
-Then set the callback somewhere before loading documents::
-
- pplog_callback(your_callback, stderr);
-
-(example 2 uses that).
-
-To set the default log messages prefix, eg. ``pplib:``, use::
-
- int pplog_prefix (const char *prefix)
-
-Default is empty. The function succeeds if provided prefix is reasonably short (less then 32 bytes).
diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/ppcode.rst b/Build/source/texk/web2c/luatexdir/luapplib/doc/ppcode.rst deleted file mode 100644 index ebe92465d80..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/ppcode.rst +++ /dev/null @@ -1,101 +0,0 @@ -Examples
-========
-
-Example 1
----------
-
-.. literalinclude:: ../src/pptest1.c
-
-Example 2
----------
-
-.. literalinclude:: ../src/pptest2.c
-
-Example 3
----------
-
-.. literalinclude:: ../src/pptest3.c
-
-ppapi.h
--------
-
-.. literalinclude:: ../src/ppapi.h
-
-
-Changes
-=======
-
-v0.97
------
-First release integrated with luatex sources, plus portability changes from Luigi.
-
-v0.98
------
-Changed references resolving in case of incremental updates; tech notes ppxref_find() in ppxref.c.
-
-v0.99
------
-Fixed streams handling; null characters should NOT be gobbled after "stream" keyword
-
-v1.00
------
-Fixed streams handling (Luigi); object streams updated before other streams
-Revised streams handling, ppstream API extended
-
-v1.01
------
-Fixed names handling (thanks Hans); digits after '#' weren't skipped
-
-v1.02
------
-Fixed page finder (thanks Luigi)
-
-v1.03
------
-Fixed TIFF predictor (thanks folks)
-
-v1.04
------
-Fixed TIFF predictor for ARM
-
-v1.05
------
-Attempt to fix parsing inline images crap
-
-v2.00
------
-Deep rework on allocators.
-Deep rework on strings and names.
-
-v2.01
------
-Fixed invalid stream buffer handling; ``iof_discard()`` no longer reclaims the source (``filter->next``) filter.
-Sanity alignment adjustments in ``iof_heap``.
-
-v2.02
------
-Fixed incorrect encoding of strings alterego with octal escaping, thanks Luigi.
-On Hans request added ``ppdoc_filehandle()`` function and ``ppdoc_file()`` macro for loading ppdoc from ``FILE *``.
-
-v2.03
------
-Fixed alloc/free of ``ppdoc`` heap; ``ppdoc`` is now mallocated, no longer taken from its own heap. Again, thanks Luigi.
-Fixed warnings about dereferencing type-puned pointers, and some others.
-
-v2.04
------
-Byte lookups for names/strings loaders are now int8_t, as char might be signed.
-ppdoc_first_page() / ppdoc_next_page() iterator now handles a case when /Kids array is empty.
-Fixed generating keys for encrypted streams; ppstring_internal() returns the string of the proper size.
-More stream tests in pptest3.c.
-Some rework on md5 and sha2.
-
-v2.05
------
-uint8_t instead of ppbyte in internals; ppbyte intent is "the most natural 8-bit integer", so it is 'char',
-but internally we almost always need uint8_t (char may be signed or not..)
-
-TODO
-====
-- external streams (egzotic)
-
diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/pplib.rst b/Build/source/texk/web2c/luatexdir/luapplib/doc/pplib.rst deleted file mode 100644 index 763dc79cf62..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/pplib.rst +++ /dev/null @@ -1,15 +0,0 @@ -.. pplib documentation master file, created by
- sphinx-quickstart on Thu Jun 07 14:23:51 2018.
- You can adapt this file completely to your liking, but it should at least
- contain the root `toctree` directive.
-
-pplib
-=====
-
-.. toctree::
- :maxdepth: 2
-
- ppnew
- ppapi-2.x
- ppapi-1.x
- ppcode
diff --git a/Build/source/texk/web2c/luatexdir/luapplib/doc/ppnew.rst b/Build/source/texk/web2c/luatexdir/luapplib/doc/ppnew.rst deleted file mode 100644 index 4a0a3b42887..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/doc/ppnew.rst +++ /dev/null @@ -1,103 +0,0 @@ -
-1.x vs 2.x
-==========
-
-Allocation
-----------
-
-Allocation mechanisms has been revised. All objects are still allocated from a private storage (called heap),
-but now the heap serves properly aligned memory chunks. Implementation of the heap is (hopefully) platform
-independent, so all ``ARM_COMPLIANT`` checks has been removed. Some details work differently on 32/64-bit
-machines, this distinction seems inevitable. Allocation related code has been moved to ``util/utilmem*.c`` files.
-
-[There are actually 3 different allocators - **heap**, **stock**, and **pool** - each of which has 4 variants
-for 1, 2, 4 and 8 bytes alignment. So far ``pplib`` uses only the **heap**, but I want to have this part
-in a single place for a while. More notes about allocators in ``utilmemallc.h``.]
-
-``pplib`` uses two heaps:
-
-* bytes heap - providing 2-bytes aligned memory chunks for byte data
-* structures heap - providing 8-bytes aligned chunks for all structures
-
-2-bytes alignment of byte data is caused by implementation details / limits, ``pplib`` doesn't make a use of it
-(could be unaligned as well). All the structures are stored in 8-bytes aligned chunks on both 32 and 64-bit machines
-(in some structures we use ``double`` and ``int64_t``, which generally needs 8-bytes).
-
-Strings And Names
------------------
-
-So far, both ``ppname`` and ``ppstring`` were aliases to ``char *`` with an extra structure hidden just below
-the data address. The idea was to make a string or name usable whenever chars array can, at the cost of some
-pointers trickery. Both names and strings keep an information about pdf-encoded data, as well as plain bytes data.
-I implemented this feature once ``pplib 1.0`` was almost done, and to avoid a revolution, I made that with yet
-another trick. This all was dirty and caused lots of alignment issues.
-
-Now ``ppstring`` and ``ppname`` are **structures**, keeping data and size members, pretty much like ``pparray``::
-
- struct ppname {
- ppbyte *data;
- size_t size;
- ppname *alterego;
- int flags;
- };
-
- struct ppstring {
- ppbyte *data;
- size_t size;
- ppstring *alterego;
- int flags;
- };
-
-Data member is a pointer to (2-bytes aligned) bytes array -- ``ppbyte *``. ``ppbyte`` is an alias to ``char``.
-``pplib`` makes no assumptions about ``ppbyte`` signedness. [I'd prefer to have ``uint8_t``, but better
-keep that in sync with ``ppdict_get_*`` suite, which accepts ``char *``. Using ``"string literals"``
-with ``ppdict_get`` function is the most common case, I guess.]
-
-``ppname_size()`` and ``ppstring_size() `` now have
-trivial ``ppname_data()`` and ``ppstring_data()`` counterparts::
-
- #define ppname_size(name) ((name)->size)
- #define ppname_data(name) ((name)->data)
-
- #define ppstring_size(string) ((string)->size)
- #define ppstring_data(string) ((string)->data)
-
-Switching between encoded / decoded variants is made via explicit ``alterego`` member. If encoded and decoded forms
-are identical, then ``self->alfterego == self`` (never NULL). Helper functions for that::
-
- PPAPI ppname * ppname_decoded (ppname *name);
- PPAPI ppname * ppname_encoded (ppname *name);
-
- PPAPI ppbyte * ppname_decoded_data (ppname *name);
- PPAPI ppbyte * ppname_encoded_data (ppname *name);
-
- PPAPI ppstring * ppstring_decoded (ppstring *string);
- PPAPI ppstring * ppstring_encoded (ppstring *string);
-
- PPAPI ppbyte * ppstring_decoded_data (ppstring *string);
- PPAPI ppbyte * ppstring_encoded_data (ppstring *string);
-
-Since ``ppname`` and ``ppstring`` are now structures, all API functions returning name/string or taking name/string
-as an argument, now take **a pointer to name/string**. Watch out for ``ppdict_get_*`` functions suite. They still accept
-``const char *`` key as an argument, but ``ppname`` type can no longer be used there::
-
- ppname key;
- ppdict_get_something(dict, key); // wrong
- ppdict_get_something(dict, key.data); // ok
-
- ppname *pkey;
- ppdict_get_something(dict, (const char *)pkey); // wrong
- ppdict_get_something(dict, pkey->data); // ok
-
-Consequently, functions / macros that used pointer to ``ppname`` (``ppdict_first()`` / ``ppdict_next()``),
-now needs ``ppname **pname``.
-
-Cleanups
---------
-
-Some of unused utils were removed. There is still some code in utils part that is not used by the library,
-but I need this tollbox in many other places and don't want to maintain two versions.
-
-Some unification in integer types; ``size_t`` seems to be the best choice for and integer representing machine
-word (``unsigned long`` is not long enough on windows), less utils dependencies, less compiler warnings.
-
diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/CMakeLists.txt b/Build/source/texk/web2c/luatexdir/luapplib/src/CMakeLists.txt deleted file mode 100644 index 36cc42135c2..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/CMakeLists.txt +++ /dev/null @@ -1,151 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -project(pplib - LANGUAGES C) -set(VERSION 1.0.5) - -set(CMAKE_C_STANDARD 99) - -add_library(pplib_utils STATIC - util/utilplat.h - util/utilcryptdef.h - util/utildecl.h - # - util/utilcrypt.c - util/utilcrypt.h - util/utiliof.c - util/utiliof.h - util/utillog.c - util/utillog.h - util/utilmd5.c - util/utilmd5.h - util/utilmem.c - util/utilmem.h - # - util/utilmemheap.c - util/utilmemheap.h - util/utilmemheapiof.c - util/utilmemheapiof.h - util/utilmeminfo.c - util/utilmeminfo.h - # - util/utilnumber.c - util/utilnumber.h - util/utilsha.c - util/utilsha.h -) - -target_include_directories(pplib_utils PUBLIC - $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/util> -) - -target_link_libraries(pplib_utils - PUBLIC - m - zlib -) - -add_library(pplib_filters STATIC - util/utilbasexx.c - util/utilbasexx.h - util/utilflate.c - util/utilflate.h - util/utilfpred.c - util/utilfpred.h - util/utillzw.c - util/utillzw.h -) - -target_include_directories(pplib_filters PUBLIC - $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/util> -) - -target_link_libraries(pplib_filters - PUBLIC - m - zlib -) - -add_library(pplib - ppapi.h - ppconf.h - pplib.h - # - pparray.c - pparray.h - ppcrypt.c - ppcrypt.h - ppdict.c - ppdict.h - ppfilter.h - ppheap.c - ppheap.h - ppload.c - ppload.h - ppstream.c - ppstream.h - ppxref.c - ppxref.h -) - -target_include_directories(pplib PUBLIC - $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/util> - $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> -) - -target_link_libraries(pplib - PRIVATE - pplib_filters - pplib_utils -) - -target_include_directories(pplib - PRIVATE - util -) - -if (MSVC) - #set(warning_flags '') # /W4 /WX -else (MSVC) - set(warning_flags - -Wall - -Wextra - -Wcast-align - -Wcast-qual - -Wdeclaration-after-statement - -Wnested-externs - -Wno-unknown-pragmas - -Wpointer-arith - -Wwrite-strings - ) - - foreach(target pplib_utils pplib_filters pplib) - target_compile_options(${target} PRIVATE ${warning_flags}) - endforeach() -endif (MSVC) - -set_target_properties(pplib - PROPERTIES - PUBLIC_HEADER "ppapi.h;ppconf.h;pplib.h" -) - -add_library(pplib::pplib ALIAS pplib) - -install(TARGETS pplib - EXPORT pplib - DESTINATION lib -) - -enable_testing() - -list(APPEND tests pptest1 pptest2 pptest3) - -foreach(_test IN LISTS tests) - add_executable(${_test} ${_test}.c) - target_link_libraries(${_test} PRIVATE pplib) - - add_test( - NAME pplib.${_test} - COMMAND $<TARGET_FILE:${_test}> - ) -endforeach() diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/Makefile b/Build/source/texk/web2c/luatexdir/luapplib/src/Makefile deleted file mode 100644 index de67505649a..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/Makefile +++ /dev/null @@ -1,99 +0,0 @@ - -ifeq ($(ARCH),) - ARCH=x64 -endif - -UNAME:=$(shell uname) -ifeq ($(UNAME),Linux) - BUILDSUFFIX=_ux_$(ARCH) - SOEXT=.so - EXEEXT= -# SHAREDCOPTS=-fPIC - LFLAGS= - LIBS=-lm -else - BUILDSUFFIX=_win_$(ARCH) - SOEXT=.dll - EXEEXT=.exe -# SHAREDCOPTS=-DPPDLL - LFLAGS = -Wl,--output-def,$@.def,--out-implib,$@.a - LIBS= -endif - -CC=gcc -WLUIGI=-Wall -Wextra -Wunused -Wimplicit -Wreturn-type -Wdeclaration-after-statement -Wno-unknown-pragmas -Wmissing-prototypes -Wmissing-declarations -Wparentheses -Wswitch -Wtrigraphs -Wcast-qual -Wcast-align -Wwrite-strings -Wold-style-definition -Wpointer-arith -WHANS=-Wall -Wextra -Wcast-align -Wcast-qual -Wnested-externs -Wwrite-strings -Wdeclaration-after-statement -Wno-unknown-pragmas -Wpointer-arith -W=$(WLUIGI) - -CFLAGS=$(W) -O3 - -OBJEXT=$(BUILDSUFFIX).o - -PPALLOC=utilmem utilmemheap utilmemheapiof utilmeminfo -PPUTILS=utillog utilnumber utiliof utilmd5 utilsha utilcrypt -PPFILTERS=utilbasexx utilflate utillzw utilfpred -PPMODULES=ppheap pparray ppdict ppstream ppcrypt ppxref ppload - -OUTDIR=build -UTILSDIR=util - -PPSTATICALLOCOBJ=$(patsubst %, $(OUTDIR)/%$(OBJEXT), $(PPALLOC)) -PPSTATICUTILSOBJ=$(patsubst %, $(OUTDIR)/%$(OBJEXT), $(PPUTILS)) -PPSTATICFILTERSOBJ=$(patsubst %, $(OUTDIR)/%$(OBJEXT), $(PPFILTERS)) -PPSTATICOBJ=$(patsubst %, $(OUTDIR)/%$(OBJEXT), $(PPMODULES)) -PPSTATICLIB=$(OUTDIR)/libpp.static$(BUILDSUFFIX).a - -# dependencies -FLATEDIR=../zlib -FLATELIB=$(FLATEDIR)/libz.static$(BUILDSUFFIX).a -PPSTATICDEPS=$(FLATELIB) - -# tests -TESTDIR=../../pplib-tests -PPTEST1=$(OUTDIR)/pptest1$(EXEEXT) -PPTEST2=$(OUTDIR)/pptest2$(EXEEXT) -PPTEST3=$(OUTDIR)/pptest3$(EXEEXT) - -# includes -INC=-I $(UTILSDIR) -AUX=-I $(FLATEDIR) - -default: md $(PPSTATICLIB) $(PPTEST1) $(PPTEST2) $(PPTEST3) $(PPTEST4) - -md: - @[ -d $(OUTDIR) ] || mkdir -p $(OUTDIR) - -$(PPSTATICOBJ): $(OUTDIR)/%$(OBJEXT): %.c %.h - $(CC) $(CFLAGS) $(INC) -o $@ -c $< - -$(PPSTATICALLOCOBJ): $(OUTDIR)/%$(OBJEXT): $(UTILSDIR)/%.c $(UTILSDIR)/%.h - $(CC) $(CFLAGS) $(INC) -o $@ -c $< - -$(PPSTATICUTILSOBJ): $(OUTDIR)/%$(OBJEXT): $(UTILSDIR)/%.c $(UTILSDIR)/%.h - $(CC) $(CFLAGS) $(INC) -o $@ -c $< - -$(PPSTATICFILTERSOBJ): $(OUTDIR)/%$(OBJEXT): $(UTILSDIR)/%.c $(UTILSDIR)/%.h - $(CC) $(CFLAGS) $(INC) $(AUX) -o $@ -c $< - -$(PPSTATICLIB): $(PPSTATICOBJ) $(PPSTATICALLOCOBJ) $(PPSTATICUTILSOBJ) $(PPSTATICFILTERSOBJ) - ar rcs $@ $^ - -$(PPTEST1): $(PPSTATICLIB) pptest1.c - $(CC) $(CFLAGS) -o $(OUTDIR)/pptest1$(OBJEXT) -c pptest1.c - $(CC) -static-libgcc $(CFLAGS) -o $(PPTEST1) $(OUTDIR)/pptest1$(OBJEXT) $(PPSTATICLIB) $(PPSTATICDEPS) $(LIBS) - -$(PPTEST2): $(PPSTATICLIB) pptest2.c - $(CC) $(CFLAGS) -o $(OUTDIR)/pptest2$(OBJEXT) -c pptest2.c - $(CC) -static-libgcc $(CFLAGS) -o $(PPTEST2) $(OUTDIR)/pptest2$(OBJEXT) $(PPSTATICLIB) $(PPSTATICDEPS) $(LIBS) - -$(PPTEST3): $(PPSTATICLIB) pptest3.c - $(CC) $(CFLAGS) -I util -o $(OUTDIR)/pptest3$(OBJEXT) -c pptest3.c - $(CC) -static-libgcc $(CFLAGS) -o $(PPTEST3) $(OUTDIR)/pptest3$(OBJEXT) $(PPSTATICLIB) $(PPSTATICDEPS) $(LIBS) - -clean: - rm -f $(OUTDIR)/*$(OBJEXT) $(OUTDIR)/*.a $(OUTDIR)/*$(EXEEXT) - -test: $(PPTEST1) $(PPTEST2) $(PPTEST3) - build/pptest1 $(TESTDIR)/*.pdf $(TESTDIR)/crypt/*.pdf >pptest1.log - build/pptest2 $(TESTDIR)/*.pdf $(TESTDIR)/crypt/*.pdf >pptest2.log - build/pptest3 $(TESTDIR)/*.pdf $(TESTDIR)/crypt/*.pdf >pptest3.log diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/Makefile.vc b/Build/source/texk/web2c/luatexdir/luapplib/src/Makefile.vc deleted file mode 100644 index 481d9b20ab7..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/Makefile.vc +++ /dev/null @@ -1,98 +0,0 @@ - -CC=cl /nologo -LN=link /nologo -AR=lib /nologo # LIB variable has a special meaning for msvc - -CFLAGS=/W3 /D_CRT_SECURE_NO_DEPRECATE /O2 - -# hans -# 5045: spectre -# 4820: local vars with same name as outer variable -# 4456: local vars with same name as outer variable -# 4457: local vars with same function parameter -# 4668: missing defines -# 4244: assignment in conditional expression -# 4127: constant conditional expression -# 4131: old style declarator -# 4464: relative include path -# 4201: nonstandard extension used: nameless struct/union -# 4710: no inlined -# 4711: inline expansion -# 4706: assignment in conditionals - -#WFLAGS= /W3 /D_CRT_SECURE_NO_DEPRECATE -WFLAGS= /Wall /D_CRT_SECURE_NO_DEPRECATE /wd5045 /wd4820 /wd4456 /wd4457 /wd4668 /wd4244 /wd4127 /wd4131 /wd4464 /wd4201 /wd4710 /wd4711 -CFLAGS= $(WFLAGS) /O2 - -#LFLAGS = /NODEFAULTLIB:LIBCMT # produces binary dependent from redistributable -LFLAGS = /NOIMPLIB - -PPALLOC=utilmem.c utilmemheap.c utilmemheapiof.c utilmeminfo.c -PPUTILS=utillog.c utilnumber.c utiliof.c utilmd5.c utilsha.c utilcrypt.c -PPFILTERS=utilbasexx.c utilflate.c utillzw.c utilfpred.c -PPMODULES=ppheap.c pparray.c ppdict.c ppstream.c ppcrypt.c ppxref.c ppload.c - -OUTDIR=build -UTILSDIR=util - -PPSTATICALLOCOBJ=$(PPALLOC:.c=.obj) -PPSTATICALLOCOBJ=$(PPSTATICALLOCOBJ:util=build\util) -PPSTATICUTILSOBJ=$(PPUTILS:.c=.obj) -PPSTATICUTILSOBJ=$(PPSTATICUTILSOBJ:util=build\util) -PPSTATICFILTERSOBJ=$(PPFILTERS:.c=.obj) -PPSTATICFILTERSOBJ=$(PPSTATICFILTERSOBJ:util=build\util) -PPSTATICOBJ=$(PPMODULES:.c=.obj) -PPSTATICOBJ=$(PPSTATICOBJ:pp=build\pp) -PPSTATICLIB=build\pp.lib - -# dependencies -FLATEDIR=..\zlib -FLATELIB=$(FLATEDIR)\zlib.static.lib -PPSTATICDEPS=$(FLATELIB) - -# tests -TESTDIR=..\..\pplib-tests -PPTEST1=build\pptest1.exe -PPTEST2=build\pptest2.exe -PPTEST3=build\pptest3.exe - -# includes -INC=/I $(UTILSDIR) -AUX=/I $(FLATEDIR) - -default: $(PPSTATICLIB) $(PPTEST1) $(PPTEST2) $(PPTEST3) $(PPTEST4) - -$(PPSTATICOBJ): $(*B).c - $(CC) $(CFLAGS) $(INC) /Fo:$@ /c $** - -$(PPSTATICALLOCOBJ): $(UTILSDIR)\$(*B).c - $(CC) $(CFLAGS) $(INC) /Fo:$@ /c $** - -$(PPSTATICUTILSOBJ): $(UTILSDIR)\$(*B).c - $(CC) $(CFLAGS) $(INC) /Fo:$@ /c $** - -$(PPSTATICFILTERSOBJ): $(UTILSDIR)\$(*B).c - $(CC) $(CFLAGS) $(INC) $(AUX) /Fo:$@ /c $** - -$(PPSTATICLIB): $(PPSTATICOBJ) $(PPSTATICALLOCOBJ) $(PPSTATICUTILSOBJ) $(PPSTATICFILTERSOBJ) - $(AR) /OUT:$@ $** - -$(PPTEST1): $(PPSTATICLIB) pptest1.c - $(CC) $(CFLAGS) /Fo:build\pptest1.obj /c pptest1.c - $(LN) $(LFLAGS) /OUT:$(PPTEST1) build\pptest1.obj $(PPSTATICLIB) $(PPSTATICDEPS) $(LIBS) - -$(PPTEST2): $(PPSTATICLIB) pptest2.c - $(CC) $(CFLAGS) /Fo:build\pptest2.obj /c pptest2.c - $(LN) $(LFLAGS) /OUT:$(PPTEST2) build\pptest2.obj $(PPSTATICLIB) $(PPSTATICDEPS) $(LIBS) - -$(PPTEST3): $(PPSTATICLIB) pptest3.c - $(CC) $(CFLAGS) /I util /Fo:build\pptest3.obj /c pptest3.c - $(LN) $(LFLAGS) /OUT:$(PPTEST3) build\pptest3.obj $(PPSTATICLIB) $(PPSTATICDEPS) $(LIBS) - -clean: - del /q build\*.obj build\*.lib build\*.exe - -test: $(PPTEST1) $(PPTEST2) $(PPTEST3) - build\pptest1 $(TESTDIR)\*.pdf $(TESTDIR)/crypt\*.pdf >pptest1.log - build\pptest2 $(TESTDIR)\*.pdf $(TESTDIR)/crypt\*.pdf >pptest2.log - build\pptest3 $(TESTDIR)\*.pdf $(TESTDIR)/crypt\*.pdf >pptest3.log diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/ppapi.h b/Build/source/texk/web2c/luatexdir/luapplib/src/ppapi.h deleted file mode 100644 index 94956f8cb56..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/ppapi.h +++ /dev/null @@ -1,404 +0,0 @@ - -#ifndef PP_API_H -#define PP_API_H - -#include <stdint.h> -#include <stddef.h> -#include <string.h> - -#include "ppconf.h" - -#define pplib_version "v2.05 less toxic i hope" -#define pplib_author "p.jackowski@gust.org.pl" - -/* types */ - -typedef int64_t ppint; -typedef size_t ppuint; // machine word - -typedef char ppbyte; - -typedef double ppnum; - -typedef struct ppname ppname; -typedef struct ppstring ppstring; - -struct ppname { - ppbyte *data; - size_t size; - ppname *alterego; - int flags; -}; - -struct ppstring { - ppbyte *data; - size_t size; - ppstring *alterego; - int flags; -}; - -typedef struct ppobj ppobj; -typedef struct ppref ppref; - -typedef struct { - ppobj *data; - size_t size; -} pparray; - -typedef struct { - ppobj *data; - ppname **keys; - size_t size; -} ppdict; - -typedef enum { - PPSTREAM_BASE16 = 0, - PPSTREAM_BASE85, - PPSTREAM_RUNLENGTH, - PPSTREAM_FLATE, - PPSTREAM_LZW, - PPSTREAM_CCITT, - PPSTREAM_DCT, - PPSTREAM_JBIG2, - PPSTREAM_JPX, - PPSTREAM_CRYPT -} ppstreamtp; - -typedef struct { - ppstreamtp *filters; - ppdict **params; - size_t count; -} ppstream_filter; - -typedef struct { - ppdict *dict; - void *input, *I; - size_t offset; - size_t length; - ppstream_filter filter; - ppobj *filespec; - ppstring *cryptkey; - int flags; -} ppstream; - -PPDEF extern const char * ppstream_filter_name[]; -PPAPI int ppstream_filter_type (ppname *filtername, ppstreamtp *filtertype); -PPAPI void ppstream_filter_info (ppstream *stream, ppstream_filter *info, int decode); - -#define PPSTREAM_FILTER (1<<0) -#define PPSTREAM_IMAGE (1<<1) -#define PPSTREAM_ENCRYPTED_AES (1<<2) -#define PPSTREAM_ENCRYPTED_RC4 (1<<3) -#define PPSTREAM_ENCRYPTED (PPSTREAM_ENCRYPTED_AES|PPSTREAM_ENCRYPTED_RC4) -#define PPSTREAM_ENCRYPTED_OWN (1<<4) -#define PPSTREAM_NOT_SUPPORTED (1<<6) - -#define ppstream_compressed(stream) ((stream)->flags & (PPSTREAM_FILTER|PPSTREAM_IMAGE)) -#define ppstream_filtered(stream) ((stream)->flags & PPSTREAM_FILTER) -#define ppstream_image(stream) ((stream)->flags & PPSTREAM_IMAGE) -#define ppstream_encrypted(stream) ((stream)->flags & PPSTREAM_ENCRYPTED) - -typedef enum { - PPNONE = 0, - PPNULL, - PPBOOL, - PPINT, - PPNUM, - PPNAME, - PPSTRING, - PPARRAY, - PPDICT, - PPSTREAM, - PPREF -} ppobjtp; - -PPDEF extern const char * ppobj_kind[]; - -struct ppobj { - union { - ppint integer; - ppnum number; - ppname *name; - ppstring *string; - pparray *array; - ppdict *dict; - ppstream *stream; - ppref *ref; - void *any; - }; - ppobjtp type; -}; - -typedef struct ppxref ppxref; - -struct ppref { - ppobj object; - ppuint number, version; - size_t offset; - size_t length; - ppxref *xref; -}; - -typedef struct ppdoc ppdoc; - -/* object */ - -#define ppobj_get_null(o) ((o)->type == PPNULL ? 1 : 0) -#define ppobj_get_bool(o, v) ((o)->type == PPBOOL ? ((v = ((o)->integer != 0)), 1) : 0) -#define ppobj_get_int(o, v) ((o)->type == PPINT ? ((v = (o)->integer), 1) : 0) -#define ppobj_get_uint(o, v) ((o)->type == PPINT && (o)->integer >= 0 ? ((v = (ppuint)((o)->integer)), 1) : 0) -#define ppobj_get_num(o, v) ((o)->type == PPNUM ? ((v = (o)->number), 1) : (((o)->type == PPINT ? ((v = (ppnum)((o)->integer)), 1) : 0))) -#define ppobj_get_name(o) ((o)->type == PPNAME ? (o)->name : NULL) -#define ppobj_get_string(o) ((o)->type == PPSTRING ? (o)->string : NULL) -#define ppobj_get_array(o) ((o)->type == PPARRAY ? (o)->array : NULL) -#define ppobj_get_dict(o) ((o)->type == PPDICT ? (o)->dict : NULL) -#define ppobj_get_stream(o) ((o)->type == PPSTREAM ? (o)->stream : NULL) -#define ppobj_get_ref(o) ((o)->type == PPREF ? (o)->ref : NULL) - -#define ppobj_rget_obj(o) ((o)->type == PPREF ? ppref_obj((o)->ref) : o) -#define ppobj_rget_null(o) ((o)->type == PPNULL ? 1 : ((o)->type == PPREF ? ppobj_get_null(ppref_obj((o)->ref)) : 0)) -#define ppobj_rget_bool(o, v) ((o)->type == PPBOOL ? ((v = ((o)->integer != 0)), 1) : ((o)->type == PPREF ? ppobj_get_bool(ppref_obj((o)->ref), v) : 0)) -#define ppobj_rget_int(o, v) ((o)->type == PPINT ? ((v = (o)->integer), 1) : ((o)->type == PPREF ? ppobj_get_int(ppref_obj((o)->ref), v) : 0)) -#define ppobj_rget_uint(o, v) ((o)->type == PPINT && (o)->integer >= 0 ? ((v = (ppuint)((o)->integer)), 1) : ((o)->type == PPREF ? ppobj_get_uint(ppref_obj((o)->ref), v) : 0)) -#define ppobj_rget_num(o, v) ((o)->type == PPNUM ? ((v = (o)->number), 1) : (((o)->type == PPINT ? ((v = (ppnum)((o)->integer)), 1) : ((o)->type == PPREF ? ppobj_get_num(ppref_obj((o)->ref), v) : 0)))) -#define ppobj_rget_name(o) ((o)->type == PPNAME ? (o)->name : ((o)->type == PPREF ? ppobj_get_name(ppref_obj((o)->ref)) : NULL)) -#define ppobj_rget_string(o) ((o)->type == PPSTRING ? (o)->string : ((o)->type == PPREF ? ppobj_get_string(ppref_obj((o)->ref)) : NULL)) -#define ppobj_rget_array(o) ((o)->type == PPARRAY ? (o)->array : ((o)->type == PPREF ? ppobj_get_array(ppref_obj((o)->ref)) : NULL)) -#define ppobj_rget_dict(o) ((o)->type == PPDICT ? (o)->dict : ((o)->type == PPREF ? ppobj_get_dict(ppref_obj((o)->ref)) : NULL)) -#define ppobj_rget_stream(o) ((o)->type == PPSTREAM ? (o)->stream : ((o)->type == PPREF ? ppobj_get_stream(ppref_obj((o)->ref)) : NULL)) -#define ppobj_rget_ref(o) ((o)->type == PPREF ? (o)->ref : ((o)->type == PPREF ? ppobj_get_ref(ppref_obj((o)->ref)) : NULL)) - -#define ppobj_get_bool_value(o) ((o)->type == PPBOOL ? ((o)->integer != 0) : 0) -#define ppobj_get_int_value(o) ((o)->type == PPINT ? (o)->integer : 0) -#define ppobj_get_num_value(o) ((o)->type == PPNUM ? (o)->number : ((o)->type == PPINT ? (ppnum)((o)->integer) : 0.0)) - -/* name */ - -#define ppname_is(name, s) (memcmp((name)->data, s, sizeof("" s) - 1) == 0) -#define ppname_eq(name, n) (memcmp((name)->data, s, (name)->size) == 0) - -#define ppname_size(name) ((name)->size) -#define ppname_exec(name) ((name)->flags & PPNAME_EXEC) -#define ppname_data(name) ((name)->data) - -#define PPNAME_ENCODED (1 << 0) -#define PPNAME_DECODED (1 << 1) -#define PPNAME_EXEC (1 << 1) - -PPAPI ppname * ppname_decoded (ppname *name); -PPAPI ppname * ppname_encoded (ppname *name); - -PPAPI ppbyte * ppname_decoded_data (ppname *name); -PPAPI ppbyte * ppname_encoded_data (ppname *name); - -/* string */ - -#define ppstring_size(string) ((string)->size) -#define ppstring_data(string) ((string)->data) - -#define PPSTRING_ENCODED (1 << 0) -#define PPSTRING_DECODED (1 << 1) -//#define PPSTRING_EXEC (1 << 2) // postscript only -#define PPSTRING_PLAIN 0 -#define PPSTRING_BASE16 (1 << 3) -#define PPSTRING_BASE85 (1 << 4) -#define PPSTRING_UTF16BE (1 << 5) -#define PPSTRING_UTF16LE (1 << 6) - -#define ppstring_type(string) ((string)->flags & (PPSTRING_BASE16|PPSTRING_BASE85)) -#define ppstring_hex(string) ((string)->flags & PPSTRING_BASE16) -#define ppstring_utf(string) ((string)->flags & (PPSTRING_UTF16BE|PPSTRING_UTF16LE)) - -PPAPI ppstring * ppstring_decoded (ppstring *string); -PPAPI ppstring * ppstring_encoded (ppstring *string); - -PPAPI ppbyte * ppstring_decoded_data (ppstring *string); -PPAPI ppbyte * ppstring_encoded_data (ppstring *string); - -/* array */ - -#define pparray_size(array) ((array)->size) -#define pparray_at(array, index) ((array)->data + index) - -#define pparray_first(array, index, obj) ((index) = 0, (obj) = pparray_at(array, 0)) -#define pparray_next(index, obj) (++(index), ++(obj)) - -#define pparray_get(array, index) (index < (array)->size ? pparray_at(array, index) : NULL) - -PPAPI ppobj * pparray_get_obj (pparray *array, size_t index); -PPAPI int pparray_get_bool (pparray *array, size_t index, int *v); -PPAPI int pparray_get_int (pparray *array, size_t index, ppint *v); -PPAPI int pparray_get_uint (pparray *array, size_t index, ppuint *v); -PPAPI int pparray_get_num (pparray *array, size_t index, ppnum *v); -PPAPI ppname * pparray_get_name (pparray *array, size_t index); -PPAPI ppstring * pparray_get_string (pparray *array, size_t index); -PPAPI pparray * pparray_get_array (pparray *array, size_t index); -PPAPI ppdict * pparray_get_dict (pparray *array, size_t index); -//PPAPI ppstream * pparray_get_stream (pparray *array, size_t index); -PPAPI ppref * pparray_get_ref (pparray *array, size_t index); - -PPAPI ppobj * pparray_rget_obj (pparray *array, size_t index); -PPAPI int pparray_rget_bool (pparray *array, size_t index, int *v); -PPAPI int pparray_rget_int (pparray *array, size_t index, ppint *v); -PPAPI int pparray_rget_uint (pparray *array, size_t index, ppuint *v); -PPAPI int pparray_rget_num (pparray *array, size_t index, ppnum *v); -PPAPI ppname * pparray_rget_name (pparray *array, size_t index); -PPAPI ppstring * pparray_rget_string (pparray *array, size_t index); -PPAPI pparray * pparray_rget_array (pparray *array, size_t index); -PPAPI ppdict * pparray_rget_dict (pparray *array, size_t index); -PPAPI ppstream * pparray_rget_stream (pparray *array, size_t index); -PPAPI ppref * pparray_rget_ref (pparray *array, size_t index); - -/* dict */ - -#define ppdict_size(dict) ((dict)->size) -#define ppdict_at(dict, index) ((dict)->data + index) -#define ppdict_key(dict, index) ((dict)->keys[index]) - -PPAPI ppobj * ppdict_get_obj (ppdict *dict, const char *name); -PPAPI int ppdict_get_bool (ppdict *dict, const char *name, int *v); -PPAPI int ppdict_get_int (ppdict *dict, const char *name, ppint *v); -PPAPI int ppdict_get_uint (ppdict *dict, const char *name, ppuint *v); -PPAPI int ppdict_get_num (ppdict *dict, const char *name, ppnum *v); -PPAPI ppname * ppdict_get_name (ppdict *dict, const char *name); -PPAPI ppstring * ppdict_get_string (ppdict *dict, const char *name); -PPAPI pparray * ppdict_get_array (ppdict *dict, const char *name); -PPAPI ppdict * ppdict_get_dict (ppdict *dict, const char *name); -//PPAPI ppstream * ppdict_get_stream (ppdict *dict, const char *name); -PPAPI ppref * ppdict_get_ref (ppdict *dict, const char *name); - -PPAPI ppobj * ppdict_rget_obj (ppdict *dict, const char *name); -PPAPI int ppdict_rget_bool (ppdict *dict, const char *name, int *v); -PPAPI int ppdict_rget_int (ppdict *dict, const char *name, ppint *v); -PPAPI int ppdict_rget_uint (ppdict *dict, const char *name, ppuint *v); -PPAPI int ppdict_rget_num (ppdict *dict, const char *name, ppnum *v); -PPAPI ppname * ppdict_rget_name (ppdict *dict, const char *name); -PPAPI ppstring * ppdict_rget_string (ppdict *dict, const char *name); -PPAPI pparray * ppdict_rget_array (ppdict *dict, const char *name); -PPAPI ppdict * ppdict_rget_dict (ppdict *dict, const char *name); -PPAPI ppstream * ppdict_rget_stream (ppdict *dict, const char *name); -PPAPI ppref * ppdict_rget_ref (ppdict *dict, const char *name); - -#define ppdict_first(dict, pkey, obj) (pkey = (dict)->keys, obj = (dict)->data) -#define ppdict_next(pkey, obj) (++(pkey), ++(obj)) - -/* stream */ - -#define ppstream_dict(stream) ((stream)->dict) - -PPAPI uint8_t * ppstream_first (ppstream *stream, size_t *size, int decode); -PPAPI uint8_t * ppstream_next (ppstream *stream, size_t *size); -PPAPI uint8_t * ppstream_all (ppstream *stream, size_t *size, int decode); -PPAPI void ppstream_done (ppstream *stream); - -PPAPI void ppstream_init_buffers (void); -PPAPI void ppstream_free_buffers (void); - -/* ref */ - -#define ppref_obj(ref) (&(ref)->object) - -/* xref */ - -PPAPI ppxref * ppdoc_xref (ppdoc *pdf); -PPAPI ppxref * ppxref_prev (ppxref *xref); -PPAPI ppdict * ppxref_trailer (ppxref *xref); -PPAPI ppdict * ppxref_catalog (ppxref *xref); -PPAPI ppdict * ppxref_info (ppxref *xref); -PPAPI ppref * ppxref_pages (ppxref *xref); -PPAPI ppref * ppxref_find (ppxref *xref, ppuint refnumber); - -/* doc */ - -PPAPI ppdoc * ppdoc_load (const char *filename); -PPAPI ppdoc * ppdoc_filehandle (FILE *file, int closefile); -#define ppdoc_file(file) ppdoc_filehandle(file, 1) -PPAPI ppdoc * ppdoc_mem (const void *data, size_t size); -PPAPI void ppdoc_free (ppdoc *pdf); - -#define ppdoc_trailer(pdf) ppxref_trailer(ppdoc_xref(pdf)) -#define ppdoc_catalog(pdf) ppxref_catalog(ppdoc_xref(pdf)) -#define ppdoc_info(pdf) ppxref_info(ppdoc_xref(pdf)) -#define ppdoc_pages(pdf) ppxref_pages(ppdoc_xref(pdf)) - -PPAPI ppuint ppdoc_page_count (ppdoc *pdf); -PPAPI ppref * ppdoc_page (ppdoc *pdf, ppuint index); -PPAPI ppref * ppdoc_first_page (ppdoc *pdf); -PPAPI ppref * ppdoc_next_page (ppdoc *pdf); - -PPAPI ppstream * ppcontents_first (ppdict *dict); -PPAPI ppstream * ppcontents_next (ppdict *dict, ppstream *stream); - -/* crypt */ - -typedef enum { - PPCRYPT_NONE = 0, - PPCRYPT_DONE = 1, - PPCRYPT_FAIL = -1, - PPCRYPT_PASS = -2 -} ppcrypt_status; - -PPAPI ppcrypt_status ppdoc_crypt_status (ppdoc *pdf); -PPAPI ppcrypt_status ppdoc_crypt_pass (ppdoc *pdf, const void *userpass, size_t userpasslength, const void *ownerpass, size_t ownerpasslength); - -/* permission flags, effect in Acrobat File -> Properties -> Security tab */ - -PPAPI ppint ppdoc_permissions (ppdoc *pdf); - -#define PPDOC_ALLOW_PRINT (1<<2) // printing -#define PPDOC_ALLOW_MODIFY (1<<3) // filling form fields, signing, creating template pages -#define PPDOC_ALLOW_COPY (1<<4) // copying, copying for accessibility -#define PPDOC_ALLOW_ANNOTS (1<<5) // filling form fields, copying, signing -#define PPDOC_ALLOW_EXTRACT (1<<9) // contents copying for accessibility -#define PPDOC_ALLOW_ASSEMBLY (1<<10) // (no effect) -#define PPDOC_ALLOW_PRINT_HIRES (1<<11) // (no effect) - -/* context */ - -typedef struct ppcontext ppcontext; - -PPAPI ppcontext * ppcontext_new (void); -PPAPI void ppcontext_done (ppcontext *context); -PPAPI void ppcontext_free (ppcontext *context); - -/* contents parser */ - -PPAPI ppobj * ppcontents_first_op (ppcontext *context, ppstream *stream, size_t *psize, ppname **pname); -PPAPI ppobj * ppcontents_next_op (ppcontext *context, ppstream *stream, size_t *psize, ppname **pname); -PPAPI ppobj * ppcontents_parse (ppcontext *context, ppstream *stream, size_t *psize); - -/* boxes and transforms */ - -typedef struct { - ppnum lx, ly, rx, ry; -} pprect; - -PPAPI pprect * pparray_to_rect (pparray *array, pprect *rect); -PPAPI pprect * ppdict_get_rect (ppdict *dict, const char *name, pprect *rect); -PPAPI pprect * ppdict_get_box (ppdict *dict, const char *name, pprect *rect); - -typedef struct { - ppnum xx, xy, yx, yy, x, y; -} ppmatrix; - -PPAPI ppmatrix * pparray_to_matrix (pparray *array, ppmatrix *matrix); -PPAPI ppmatrix * ppdict_get_matrix (ppdict *dict, const char *name, ppmatrix *matrix); - -/* logger */ - -typedef void (*pplogger_callback) (const char *message, void *alien); -PPAPI void pplog_callback (pplogger_callback logger, void *alien); -PPAPI int pplog_prefix (const char *prefix); - -/* version */ - -PPAPI const char * ppdoc_version_string (ppdoc *pdf); -PPAPI int ppdoc_version_number (ppdoc *pdf, int *minor); - -/* doc info */ - -PPAPI size_t ppdoc_file_size (ppdoc *pdf); -PPAPI ppuint ppdoc_objects (ppdoc *pdf); -PPAPI size_t ppdoc_memory (ppdoc *pdf, size_t *waste); - -#endif diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/pparray.c b/Build/source/texk/web2c/luatexdir/luapplib/src/pparray.c deleted file mode 100644 index 944596bdc1f..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/pparray.c +++ /dev/null @@ -1,145 +0,0 @@ - -#include "pplib.h" - -pparray * pparray_create (const ppobj *stackpos, size_t size, ppheap *heap) -{ - pparray *array; - array = (pparray *)ppstruct_take(heap, sizeof(pparray)); - array->data = (ppobj *)ppstruct_take(heap, size * sizeof(ppobj)); // separate chunk, alignment requirements warning otherwise - array->size = size; - memcpy(array->data, stackpos, size * sizeof(ppobj)); - return array; -} - -ppobj * pparray_get_obj (pparray *array, size_t index) -{ - return pparray_get(array, index); -} - -ppobj * pparray_rget_obj (pparray *array, size_t index) -{ - ppobj *obj; - return (obj = pparray_get(array, index)) != NULL ? ppobj_rget_obj(obj) : NULL; -} - -int pparray_get_bool (pparray *array, size_t index, int *v) -{ - ppobj *obj; - return (obj = pparray_get(array, index)) != NULL ? ppobj_get_bool(obj, *v) : 0; -} - -int pparray_rget_bool (pparray *array, size_t index, int *v) -{ - ppobj *obj; - return (obj = pparray_get(array, index)) != NULL ? ppobj_rget_bool(obj, *v) : 0; -} - -int pparray_get_int (pparray *array, size_t index, ppint *v) -{ - ppobj *obj; - return (obj = pparray_get(array, index)) != NULL ? ppobj_get_int(obj, *v) : 0; -} - -int pparray_rget_int (pparray *array, size_t index, ppint *v) -{ - ppobj *obj; - return (obj = pparray_get(array, index)) != NULL ? ppobj_rget_int(obj, *v) : 0; -} - -int pparray_get_uint (pparray *array, size_t index, ppuint *v) -{ - ppobj *obj; - return (obj = pparray_get(array, index)) != NULL ? ppobj_get_uint(obj, *v) : 0; -} - -int pparray_rget_uint (pparray *array, size_t index, ppuint *v) -{ - ppobj *obj; - return (obj = pparray_get(array, index)) != NULL ? ppobj_rget_uint(obj, *v) : 0; -} - -int pparray_get_num (pparray *array, size_t index, ppnum *v) -{ - ppobj *obj; - return (obj = pparray_get(array, index)) != NULL ? ppobj_get_num(obj, *v) : 0; -} - -int pparray_rget_num (pparray *array, size_t index, ppnum *v) -{ - ppobj *obj; - return (obj = pparray_get(array, index)) != NULL ? ppobj_rget_num(obj, *v) : 0; -} - -ppname * pparray_get_name (pparray *array, size_t index) -{ - ppobj *obj; - return (obj = pparray_get(array, index)) != NULL ? ppobj_get_name(obj) : NULL; -} - -ppname * pparray_rget_name (pparray *array, size_t index) -{ - ppobj *obj; - return (obj = pparray_get(array, index)) != NULL ? ppobj_rget_name(obj) : NULL; -} - -ppstring * pparray_get_string (pparray *array, size_t index) -{ - ppobj *obj; - return (obj = pparray_get(array, index)) != NULL ? ppobj_get_string(obj) : NULL; -} - -ppstring * pparray_rget_string (pparray *array, size_t index) -{ - ppobj *obj; - return (obj = pparray_get(array, index)) != NULL ? ppobj_rget_string(obj) : NULL; -} - -pparray * pparray_get_array (pparray *array, size_t index) -{ - ppobj *obj; - return (obj = pparray_get(array, index)) != NULL ? ppobj_get_array(obj) : NULL; -} - -pparray * pparray_rget_array (pparray *array, size_t index) -{ - ppobj *obj; - return (obj = pparray_get(array, index)) != NULL ? ppobj_rget_array(obj) : NULL; -} - -ppdict * pparray_get_dict (pparray *array, size_t index) -{ - ppobj *obj; - return (obj = pparray_get(array, index)) != NULL ? ppobj_get_dict(obj) : NULL; -} - -ppdict * pparray_rget_dict (pparray *array, size_t index) -{ - ppobj *obj; - return (obj = pparray_get(array, index)) != NULL ? ppobj_rget_dict(obj) : NULL; -} - -/* -ppstream * pparray_get_stream (pparray *array, size_t index) -{ - ppobj *obj; - return (obj = pparray_get(array, index)) != NULL ? ppobj_get_stream(obj) : NULL; -} -*/ - -ppstream * pparray_rget_stream (pparray *array, size_t index) -{ - ppobj *obj; - return (obj = pparray_get(array, index)) != NULL ? ppobj_rget_stream(obj) : NULL; -} - -ppref * pparray_get_ref (pparray *array, size_t index) -{ - ppobj *obj; - return (obj = pparray_get(array, index)) != NULL ? ppobj_get_ref(obj) : NULL; -} - -ppref * pparray_rget_ref (pparray *array, size_t index) -{ - ppobj *obj; - return (obj = pparray_get(array, index)) != NULL ? ppobj_rget_ref(obj) : NULL; -} diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/pparray.h b/Build/source/texk/web2c/luatexdir/luapplib/src/pparray.h deleted file mode 100644 index df0d8e8b2c2..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/pparray.h +++ /dev/null @@ -1,7 +0,0 @@ - -#ifndef PP_ARRAY_H -#define PP_ARRAY_H - -pparray * pparray_create (const ppobj *stack, size_t size, ppheap *heap); - -#endif
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/ppconf.h b/Build/source/texk/web2c/luatexdir/luapplib/src/ppconf.h deleted file mode 100644 index 0211eb51e90..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/ppconf.h +++ /dev/null @@ -1,76 +0,0 @@ - -#ifndef PP_CONF_H -#define PP_CONF_H - -/* -Aux flags: - PPDLL -- indicates a part of a shared library - PPEXE -- indicates a host program using shared library functions -*/ - -#if defined(_WIN32) || defined(_WIN64) -# ifdef PPDLL -# define PPAPI __declspec(dllexport) -# define PPDEF __declspec(dllexport) -# else -# ifdef PPEXE -# define PPAPI __declspec(dllimport) -# define PPDEF -# else -# define PPAPI -# define PPDEF -# endif -# endif -#else -# define PPAPI -# define PPDEF -#endif - -/* platform vs integers */ - -#if defined(_WIN32) || defined(WIN32) -# ifdef _MSC_VER -# if defined(_M_64) || defined(_WIN64) -# define MSVC64 -# else -# define MSVC32 -# endif -# else -# if defined(__MINGW64__) -# define MINGW64 -# else -# if defined(__MINGW32__) -# define MINGW32 -# endif -# endif -# endif -#endif - -#if defined(_WIN64) || defined(__MINGW32__) -# define PPINT64F "%I64d" -# define PPUINT64F "%I64u" -#else -# define PPINT64F "%lld" -# define PPUINT64F "%llu" -#endif - -#if defined(MSVC64) -# define PPINT(N) N##I64 -# define PPUINT(N) N##UI64 -# define PPINTF PPINT64F -# define PPUINTF PPUINT64F -#elif defined(MINGW64) -# define PPINT(N) N##LL -# define PPUINT(N) N##ULL -# define PPINTF PPINT64F -# define PPUINTF PPUINT64F -#else // 32bit or sane 64bit (LP64, where long is long indeed) -# define PPINT(N) N##L -# define PPUINT(N) N##UL -# define PPINTF "%ld" -# define PPUINTF "%lu" -#endif - -#define PPSIZEF PPUINTF - -#endif diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/ppcrypt.c b/Build/source/texk/web2c/luatexdir/luapplib/src/ppcrypt.c deleted file mode 100644 index 266bacc29b2..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/ppcrypt.c +++ /dev/null @@ -1,525 +0,0 @@ - -#include "utilmd5.h" -#include "utilsha.h" - -#include "pplib.h" - -/* crypt struct */ - -static ppcrypt * ppcrypt_create (ppheap *heap) -{ - ppcrypt *crypt; - crypt = (ppcrypt *)ppstruct_take(heap, sizeof(ppcrypt)); - memset(crypt, 0, sizeof(ppcrypt)); - return crypt; -} - -int ppcrypt_type (ppcrypt *crypt, ppname *cryptname, ppuint *length, int *cryptflags) -{ - ppdict *filterdict; - ppname *filtertype; - int cryptmd = 0, default256 = 0; - - if (crypt->map == NULL || (filterdict = ppdict_rget_dict(crypt->map, cryptname->data)) == NULL) - return 0; - if ((filtertype = ppdict_get_name(filterdict, "CFM")) == NULL) - return 0; - *cryptflags = 0; - if (ppname_is(filtertype, "V2")) - *cryptflags |= PPCRYPT_INFO_RC4; - else if (ppname_is(filtertype, "AESV2")) - *cryptflags |= PPCRYPT_INFO_AES; - else if (ppname_is(filtertype, "AESV3")) - *cryptflags |= PPCRYPT_INFO_AES, default256 = 1; - else - return 0; - /* pdf spec page. 134: /Length is said to be optional bit-length of the key, but it seems to be a mistake, as Acrobat - produces /Length key with bytes lengths, opposite to /Length key of the main encrypt dict. */ - if (length != NULL) - if (!ppdict_get_uint(filterdict, "Length", length)) - *length = (*cryptflags & PPCRYPT_INFO_RC4) ? 5 : (default256 ? 32 : 16); - /* one of metadata flags is set iff there is an explicit EncryptMetadata key */ - if (ppdict_get_bool(filterdict, "EncryptMetadata", &cryptmd)) - *cryptflags |= (cryptmd ? PPCRYPT_INFO_MD : PPCRYPT_INFO_NOMD); - return 1; -} - -static const uint8_t padding_string[] = { - 0x28, 0xBF, 0x4E, 0x5E, 0x4E, 0x75, 0x8A, 0x41, 0x64, 0x00, 0x4E, 0x56, 0xFF, 0xFA, 0x01, 0x08, - 0x2E, 0x2E, 0x00, 0xB6, 0xD0, 0x68, 0x3E, 0x80, 0x2F, 0x0C, 0xA9, 0xFE, 0x64, 0x53, 0x69, 0x7A -}; - -static void ppcrypt_set_userpass (ppcrypt *crypt, const void *userpass, size_t userpasslength) -{ - crypt->userpasslength = userpasslength > 32 ? 32 : userpasslength; - memcpy(crypt->userpass, userpass, crypt->userpasslength); - memcpy(crypt->userpass + crypt->userpasslength, padding_string, 32 - crypt->userpasslength); - crypt->flags |= PPCRYPT_USER_PASSWORD; -} - -static void ppcrypt_set_ownerpass (ppcrypt *crypt, const void *ownerpass, size_t ownerpasslength) -{ - crypt->ownerpasslength = ownerpasslength > 32 ? 32 : ownerpasslength; - memcpy(crypt->ownerpass, ownerpass, crypt->ownerpasslength); - memcpy(crypt->ownerpass + crypt->ownerpasslength, padding_string, 32 - crypt->ownerpasslength); - crypt->flags |= PPCRYPT_OWNER_PASSWORD; -} - -/* retrieving user password from owner password and owner key (variant < 5) */ - -static void ppcrypt_retrieve_userpass (ppcrypt *crypt, const void *ownerkey, size_t ownerkeysize) -{ - uint8_t temp[16], rc4key[32], rc4key2[32]; - uint8_t i; - ppuint k; - md5_state md5; - - md5_digest_init(&md5); - md5_digest_add(&md5, crypt->ownerpass, 32); - md5_digest_get(&md5, rc4key, MD5_BYTES); - if (crypt->algorithm_revision >= 3) - { - for (i = 0; i < 50; ++i) - { - md5_digest(rc4key, 16, temp, MD5_BYTES); - memcpy(rc4key, temp, 16); - } - } - rc4_decode_data(ownerkey, ownerkeysize, crypt->userpass, rc4key, crypt->filekeylength); - if (crypt->algorithm_revision >= 3) - { - for (i = 1; i <= 19; ++i) - { - for (k = 0; k < crypt->filekeylength; ++k) - rc4key2[k] = rc4key[k] ^ i; - rc4_decode_data(crypt->userpass, 32, crypt->userpass, rc4key2, crypt->filekeylength); - } - } - //crypt->userpasslength = 32; - for (crypt->userpasslength = 0; crypt->userpasslength < 32; ++crypt->userpasslength) - if (memcmp(&crypt->userpass[crypt->userpasslength], padding_string, 32 - crypt->userpasslength) == 0) - break; - crypt->flags |= PPCRYPT_USER_PASSWORD; -} - -/* generating file key; pdf spec p. 125 */ - -static void ppcrypt_filekey (ppcrypt *crypt, const void *ownerkey, size_t ownerkeysize, const void *id, size_t idsize) -{ - uint32_t p; - uint8_t permissions[4], temp[16]; - int i; - md5_state md5; - - md5_digest_init(&md5); - md5_digest_add(&md5, crypt->userpass, 32); - md5_digest_add(&md5, ownerkey, ownerkeysize); - p = (uint32_t)crypt->permissions; - permissions[0] = get_number_byte1(p); - permissions[1] = get_number_byte2(p); - permissions[2] = get_number_byte3(p); - permissions[3] = get_number_byte4(p); - md5_digest_add(&md5, permissions, 4); - md5_digest_add(&md5, id, idsize); - if (crypt->algorithm_revision >= 4 && (crypt->flags & PPCRYPT_NO_METADATA)) - md5_digest_add(&md5, "\xFF\xFF\xFF\xFF", 4); - md5_digest_get(&md5, crypt->filekey, MD5_BYTES); - if (crypt->algorithm_revision >= 3) - { - for (i = 0; i < 50; ++i) - { - md5_digest(crypt->filekey, (size_t)crypt->filekeylength, temp, MD5_BYTES); - memcpy(crypt->filekey, temp, 16); - } - } -} - -/* generating userkey for comparison with /U; requires a general file key and id; pdf spec page 126-127 */ - -static void ppcrypt_userkey (ppcrypt *crypt, const void *id, size_t idsize, uint8_t *password_hash) -{ - uint8_t rc4key2[32]; - uint8_t i; - ppuint k; - - if (crypt->algorithm_revision <= 2) - { - rc4_encode_data(padding_string, 32, password_hash, crypt->filekey, crypt->filekeylength); - } - else - { - md5_state md5; - md5_digest_init(&md5); - md5_digest_add(&md5, padding_string, 32); - md5_digest_add(&md5, id, idsize); - md5_digest_get(&md5, password_hash, MD5_BYTES); - rc4_encode_data(password_hash, 16, password_hash, crypt->filekey, crypt->filekeylength); - for (i = 1; i <= 19; ++i) - { - for (k = 0; k < crypt->filekeylength; ++k) - rc4key2[k] = crypt->filekey[k] ^ i; - rc4_encode_data(password_hash, 16, password_hash, rc4key2, crypt->filekeylength); - } - for (i = 16; i < 32; ++i) - password_hash[i] = password_hash[i - 16] ^ i; /* arbitrary 16-bytes padding */ - } -} - -/* validating /Perms key (pdf 1.7, /V 5 /R 5 crypt) */ - -static const uint8_t nulliv[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* AES-256 initialization vector */ - -static ppcrypt_status ppcrypt_authenticate_perms (ppcrypt *crypt, ppstring *perms) -{ /* decode /Perms string overriding crypt setup (should match anyway) */ - uint8_t permsdata[16]; - //int64_t p; - //int i; - - aes_decode_data(perms->data, perms->size, permsdata, crypt->filekey, crypt->filekeylength, nulliv, AES_NULL_PADDING); - - if (permsdata[9] != 'a' || permsdata[10] != 'd' || permsdata[11] != 'b') - return PPCRYPT_FAIL; - - // do not update permissions flags; they seem to be different inside crypt string - //for (p = 0, i = 0; i < 8; ++i) - // p = p + (permsdata[i] << (i << 3)); /* low order bytes first */ - //crypt->permissions = (ppint)(int32_t)(p & 0x00000000FFFFFFFFLL); /* unset bits 33..64, treat as 32-bit signed int */ - - if (permsdata[8] == 'T') - crypt->flags &= ~PPCRYPT_NO_METADATA; - else if (permsdata[8] == 'F') - crypt->flags |= PPCRYPT_NO_METADATA; - - return PPCRYPT_DONE; -} - -ppcrypt_status ppdoc_crypt_init (ppdoc *pdf, const void *userpass, size_t userpasslength, const void *ownerpass, size_t ownerpasslength) -{ - ppcrypt *crypt; - ppdict *trailer, *encrypt; - ppobj *obj; - ppname *name, **pkey; - ppstring *userkey, *ownerkey, *userkey_e = NULL, *ownerkey_e = NULL; - size_t hashlength; - pparray *idarray; - ppstring *id = NULL, *perms = NULL; - int cryptflags, encryptmd; - size_t strkeylength, stmkeylength; - - uint8_t password_hash[32]; /* /U and /O are 48 bytes strings for AES-256, but here we use only 32 */ - uint8_t *validation_salt, *key_salt; - - /* Every xref could theoretically have a separate encryption info. Not clarified in pdf spec but it seems that the top - level xref encryption info is the one to be applied to all objects in all xrefs, including older. */ - trailer = ppxref_trailer(pdf->xref); - if ((obj = ppdict_get_obj(trailer, "Encrypt")) == NULL) - return PPCRYPT_NONE; - /* Typically this is all done early, before loading body, so if /Encrypt is indirect reference, it points nothing. We have to load it here. */ - obj = ppobj_preloaded(pdf, obj); - if (obj->type != PPDICT) - return PPCRYPT_FAIL; - encrypt = obj->dict; - for (ppdict_first(encrypt, pkey, obj); *pkey != NULL; ppdict_next(pkey, obj)) - (void)ppobj_preloaded(pdf, obj); - - if ((name = ppdict_get_name(encrypt, "Filter")) != NULL && !ppname_is(name, "Standard")) - return PPCRYPT_FAIL; - - if ((crypt = pdf->crypt) == NULL) - crypt = pdf->crypt = ppcrypt_create(&pdf->heap); - if (!ppdict_get_uint(encrypt, "V", &crypt->algorithm_variant)) - crypt->algorithm_variant = 0; - if (crypt->algorithm_variant < 1 || crypt->algorithm_variant > 5) - return PPCRYPT_FAIL; - if (!ppdict_get_uint(encrypt, "R", &crypt->algorithm_revision)) - return PPCRYPT_FAIL; - if (crypt->algorithm_revision >= 3) - crypt->flags |= PPCRYPT_OBSCURITY; - if (!ppdict_get_int(encrypt, "P", &crypt->permissions)) - return PPCRYPT_FAIL; - if ((userkey = ppdict_get_string(encrypt, "U")) == NULL || (ownerkey = ppdict_get_string(encrypt, "O")) == NULL) - return PPCRYPT_FAIL; - userkey = ppstring_decoded(userkey); - ownerkey = ppstring_decoded(ownerkey); - /* for some reason acrobat pads /O and /U to 127 bytes with NULL, so we don't check the exact length but ensure the minimal */ - hashlength = crypt->algorithm_variant < 5 ? 32 : 48; - if (userkey->size < hashlength || ownerkey->size < hashlength) - return PPCRYPT_FAIL; - if (crypt->algorithm_variant < 5) - { // get first string from /ID (must not be ref) - if ((idarray = ppdict_get_array(trailer, "ID")) == NULL || (id = pparray_get_string(idarray, 0)) == NULL) - return PPCRYPT_FAIL; - id = ppstring_decoded(id); - } - else - { - if ((userkey_e = ppdict_get_string(encrypt, "UE")) == NULL || (ownerkey_e = ppdict_get_string(encrypt, "OE")) == NULL) - return PPCRYPT_FAIL; - userkey_e = ppstring_decoded(userkey_e); - ownerkey_e = ppstring_decoded(ownerkey_e); - if (userkey_e->size < 32 || ownerkey_e->size < 32) - return PPCRYPT_FAIL; - if ((perms = ppdict_get_string(encrypt, "Perms")) == NULL) - return PPCRYPT_FAIL; - perms = ppstring_decoded(perms); - if (perms->size != 16) - return PPCRYPT_FAIL; - } - - switch (crypt->algorithm_revision) - { - case 1: - crypt->filekeylength = 5; - crypt->flags |= PPCRYPT_RC4; - break; - case 2: case 3: - if (ppdict_get_uint(encrypt, "Length", &crypt->filekeylength)) - crypt->filekeylength >>= 3; /* 40..256 bits, 5..32 bytes*/ - else - crypt->filekeylength = 5; /* 40 bits, 5 bytes */ - crypt->flags |= PPCRYPT_RC4; - break; - case 4: case 5: - if ((crypt->map = ppdict_rget_dict(encrypt, "CF")) == NULL) - return PPCRYPT_FAIL; - for (ppdict_first(crypt->map, pkey, obj); *pkey != NULL; ppdict_next(pkey, obj)) - (void)ppobj_preloaded(pdf, obj); - /* /EncryptMetadata relevant only for version >=4, may be also provided in crypt filter dictionary; which takes a precedence then? - we assume that if there is an explicit EncryptMetadata key, it overrides main encrypt dict flag or default flag (the default is true, - meaning that Metadata stream is encrypted as others) */ - if (ppdict_get_bool(encrypt, "EncryptMetadata", &encryptmd) && !encryptmd) - crypt->flags |= PPCRYPT_NO_METADATA; - - strkeylength = stmkeylength = 0; - /* streams filter */ - if ((name = ppdict_get_name(encrypt, "StmF")) != NULL && ppcrypt_type(crypt, name, &stmkeylength, &cryptflags)) - { - if (cryptflags & PPCRYPT_INFO_AES) - crypt->flags |= PPCRYPT_STREAM_AES; - else if (cryptflags & PPCRYPT_INFO_RC4) - crypt->flags |= PPCRYPT_STREAM_RC4; - if (cryptflags & PPCRYPT_INFO_NOMD) - crypt->flags |= PPCRYPT_NO_METADATA; - else if (cryptflags & PPCRYPT_INFO_MD) - crypt->flags &= ~PPCRYPT_NO_METADATA; - } /* else identity */ - /* strings filter */ - if ((name = ppdict_get_name(encrypt, "StrF")) != NULL && ppcrypt_type(crypt, name, &strkeylength, &cryptflags)) - { - if (cryptflags & PPCRYPT_INFO_AES) - crypt->flags |= PPCRYPT_STRING_AES; - else if (cryptflags & PPCRYPT_INFO_RC4) - crypt->flags |= PPCRYPT_STRING_RC4; - } /* else identity */ - - /* /Length of encrypt dict is irrelevant here, theoretically every crypt filter may have own length... It means that we should - actually keep a different file key for streams and strings. But it leads to nonsense, as /U and /O entries refers to a single - keylength, without a distinction for strings/streams. So we have to assume /Length is consistent. To expose the limitation: */ - if ((crypt->flags & PPCRYPT_STREAM) && (crypt->flags & PPCRYPT_STRING)) - if (strkeylength != stmkeylength) - return PPCRYPT_FAIL; - crypt->filekeylength = stmkeylength ? stmkeylength : strkeylength; - if ((crypt->flags & PPCRYPT_STREAM) || (crypt->flags & PPCRYPT_STRING)) - if (crypt->filekeylength == 0) - return PPCRYPT_FAIL; - break; - default: - return PPCRYPT_FAIL; - } - - /* password */ - - if (userpass != NULL) - { - ppcrypt_set_userpass(crypt, userpass, userpasslength); - } - else if (ownerpass != NULL) - { - if (crypt->algorithm_variant < 5) // fetch user password from owner password - ppcrypt_retrieve_userpass(crypt, ownerkey, ppstring_size(ownerkey)); - else // open the document using owner password - ppcrypt_set_ownerpass(crypt, ownerpass, ownerpasslength); - } - else - { - return PPCRYPT_FAIL; - } - - if (crypt->algorithm_variant < 5) - { /* authenticate by comparing a generated vs present /U entry; depending on variant 16 or 32 bytes to compare */ - ppcrypt_filekey(crypt, ownerkey->data, ownerkey->size, id->data, id->size); - ppcrypt_userkey(crypt, id->data, id->size, password_hash); /* needs file key so comes after key generation */ - if (memcmp(userkey->data, password_hash, (crypt->algorithm_revision >= 3 ? 16 : 32)) == 0) - return PPCRYPT_DONE; - return PPCRYPT_PASS; - } - if (crypt->flags & PPCRYPT_USER_PASSWORD) - { - sha256_state sha; - validation_salt = (uint8_t *)userkey + 32; - key_salt = validation_salt + 8; - sha256_digest_init(&sha); - sha256_digest_add(&sha, crypt->userpass, crypt->userpasslength); - sha256_digest_add(&sha, validation_salt, 8); - sha256_digest_get(&sha, password_hash, SHA_BYTES); - if (memcmp(userkey->data, password_hash, 32) != 0) - return PPCRYPT_PASS; - sha256_digest_init(&sha); - sha256_digest_add(&sha, crypt->userpass, crypt->userpasslength); - sha256_digest_add(&sha, key_salt, 8); - sha256_digest_get(&sha, password_hash, SHA_BYTES); - aes_decode_data(userkey_e->data, 32, crypt->filekey, password_hash, 32, nulliv, AES_NULL_PADDING); - return ppcrypt_authenticate_perms(crypt, perms); - } - if (crypt->flags & PPCRYPT_OWNER_PASSWORD) - { - sha256_state sha; - validation_salt = (uint8_t *)ownerkey + 32; - key_salt = validation_salt + 8; - - sha256_digest_init(&sha); - sha256_digest_add(&sha, crypt->ownerpass, crypt->ownerpasslength); - sha256_digest_add(&sha, validation_salt, 8); - sha256_digest_add(&sha, userkey, 48); - sha256_digest_get(&sha, password_hash, SHA_BYTES); - if (memcmp(ownerkey->data, password_hash, 32) != 0) - return PPCRYPT_PASS; - sha256_digest_init(&sha); - sha256_digest_add(&sha, crypt->ownerpass, crypt->ownerpasslength); - sha256_digest_add(&sha, key_salt, 8); - sha256_digest_add(&sha, userkey, 48); - sha256_digest_get(&sha, password_hash, SHA_BYTES); - aes_decode_data(ownerkey_e->data, 32, crypt->filekey, password_hash, 32, nulliv, AES_NULL_PADDING); - return ppcrypt_authenticate_perms(crypt, perms); - } - return PPCRYPT_FAIL; // should never get here -} - -/* decrypting strings */ - -/* -Since strings are generally rare, but might occur in mass (name trees). We generate decryption key when needed. -All strings within the same reference are crypted with the same key. Both RC4 and AES algorithms expands -the crypt key in some way and the result of expansion is the same for the same crypt key. Instead of recreating -the ky for every string, we backup the initial decryption state. -*/ - -static void ppcrypt_strkey (ppcrypt *crypt, ppref *ref, int aes) -{ - if (crypt->cryptkeylength > 0) - { /* crypt key already generated, just reinitialize crypt states */ - if (aes) - { /* aes codecs that works on c-strings do not modify aes_state flags at all, so we actually don't need to revitalize the state, - we only rewrite an initialization vector, which is modified during crypt procedure */ - } - else - { /* rc4 crypt map is modified during crypt procedure, so here we reinitialize rc4 bytes map */ - rc4_map_restore(&crypt->rc4state, &crypt->rc4copy); - } - return; - } - - if (crypt->algorithm_variant < 5) - { - crypt->filekey[crypt->filekeylength + 0] = get_number_byte1(ref->number); - crypt->filekey[crypt->filekeylength + 1] = get_number_byte2(ref->number); - crypt->filekey[crypt->filekeylength + 2] = get_number_byte3(ref->number); - crypt->filekey[crypt->filekeylength + 3] = get_number_byte1(ref->version); - crypt->filekey[crypt->filekeylength + 4] = get_number_byte2(ref->version); - - if (aes) - { - crypt->filekey[crypt->filekeylength + 5] = 0x73; - crypt->filekey[crypt->filekeylength + 6] = 0x41; - crypt->filekey[crypt->filekeylength + 7] = 0x6C; - crypt->filekey[crypt->filekeylength + 8] = 0x54; - } - - md5_digest(crypt->filekey, crypt->filekeylength + (aes ? 9 : 5), crypt->cryptkey, MD5_BYTES); - crypt->cryptkeylength = crypt->filekeylength + 5 >= 16 ? 16 : crypt->filekeylength + 5; - } - else - { - memcpy(crypt->cryptkey, crypt->filekey, 32); - crypt->cryptkeylength = 32; - } - - if (aes) - { - aes_decode_initialize(&crypt->aesstate, &crypt->aeskeyblock, crypt->cryptkey, crypt->cryptkeylength, NULL); - aes_pdf_mode(&crypt->aesstate); - } - else - { - rc4_state_initialize(&crypt->rc4state, &crypt->rc4map, crypt->cryptkey, crypt->cryptkeylength); - rc4_map_save(&crypt->rc4state, &crypt->rc4copy); - } -} - -int ppstring_decrypt (ppcrypt *crypt, const void *input, size_t size, void *output, size_t *newsize) -{ - int aes, rc4; - aes = crypt->flags & PPCRYPT_STRING_AES; - rc4 = crypt->flags & PPCRYPT_STRING_RC4; - if (aes || rc4) - { - ppcrypt_strkey(crypt, crypt->ref, aes); - if (aes) - *newsize = aes_decode_state_data(&crypt->aesstate, input, size, output); - else // if (rc4) - *newsize = rc4_decode_state_data(&crypt->rc4state, input, size, output); - return 1; - } - return 0; // identity crypt -} - -/* decrypting streams */ - -/* -Streams are decrypted everytime when accessing the stream data. We need to be able to get or make -the key for decryption as long as the stream is alive. And to get the key we need the reference -number and version, plus document crypt info. First thought was to keep the reference to which -the stream belongs; stream->ref and accessing the crypt info stream->ref->xref->pdf->crypt. -It would be ok as long as absolutelly nothing happens with ref and crypt. At some point pplib -may drift into rewriting support, which would imply ref/xref/crypt/pdf structures modifications. -So I feel better with generating a crypt key for every stream in encrypted document, paying a cost -of md5 for all streams, not necessarily those actually read. - -Key generation is the same as for strings, but different for distinct encryption methods (rc4 vs aes). -Since streams and strings might theoretically be encrypted with different filters. No reason to cacche -decryption state here. -*/ - -ppstring * ppcrypt_stmkey (ppcrypt *crypt, ppref *ref, int aes, ppheap *heap) -{ - ppstring *cryptkeystring; - //if (crypt->cryptkeylength > 0) - // return; - - if (crypt->algorithm_variant < 5) - { - crypt->filekey[crypt->filekeylength + 0] = get_number_byte1(ref->number); - crypt->filekey[crypt->filekeylength + 1] = get_number_byte2(ref->number); - crypt->filekey[crypt->filekeylength + 2] = get_number_byte3(ref->number); - crypt->filekey[crypt->filekeylength + 3] = get_number_byte1(ref->version); - crypt->filekey[crypt->filekeylength + 4] = get_number_byte2(ref->version); - - if (aes) - { - crypt->filekey[crypt->filekeylength + 5] = 0x73; - crypt->filekey[crypt->filekeylength + 6] = 0x41; - crypt->filekey[crypt->filekeylength + 7] = 0x6C; - crypt->filekey[crypt->filekeylength + 8] = 0x54; - } - - md5_digest(crypt->filekey, crypt->filekeylength + (aes ? 9 : 5), crypt->cryptkey, MD5_BYTES); - crypt->cryptkeylength = crypt->filekeylength + 5 >= 16 ? 16 : crypt->filekeylength + 5; // how about 256bits AES?? - } - else - { // we could actually generate this string once, but.. aes itself is way more expensive that we can earn here - memcpy(crypt->cryptkey, crypt->filekey, 32); // just for the record - crypt->cryptkeylength = 32; - } - cryptkeystring = ppstring_internal(crypt->cryptkey, crypt->cryptkeylength, heap); - return ppstring_decoded(cryptkeystring); -} diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/ppcrypt.h b/Build/source/texk/web2c/luatexdir/luapplib/src/ppcrypt.h deleted file mode 100644 index 98864f860c7..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/ppcrypt.h +++ /dev/null @@ -1,67 +0,0 @@ - -#ifndef PP_CRYPT_H -#define PP_CRYPT_H - -#include "ppfilter.h" -#include "utilcrypt.h" -#include "utilcryptdef.h" - -typedef struct { - ppuint algorithm_variant; /* /V entry of encrypt dict */ - ppuint algorithm_revision; /* /R entry of encrypt dict */ - ppint permissions; /* /P entry of encrypt dict */ - ppdict *map; /* /CF filters map of encrypt dict */ - uint8_t userpass[32]; /* padded user password */ - size_t userpasslength; /* the length of unpadded user password */ - uint8_t ownerpass[32]; /* padded owner password */ - size_t ownerpasslength; /* the length of unpadded owner password */ - uint8_t filekey[32+5+4]; /* generated file key with extra space of 5..9 bytes for salt */ - size_t filekeylength; /* key length; usually 5, 16 or 32 bytes */ - uint8_t cryptkey[32]; /* final crypt key for a given reference */ - size_t cryptkeylength; /* final crypt key length; usually keylength + 5 */ - ppref *ref; /* currently loaded ref (each ref may have a different key) */ - union { /* cached crypt states for strings encrypted/decrypted with the same key */ - struct { - rc4_state rc4state; - rc4_map rc4map; - rc4_map rc4copy; - }; - struct { - aes_state aesstate; - aes_keyblock aeskeyblock; - uint8_t ivcopy[16]; - }; - }; - int flags; -} ppcrypt; - -#define PPCRYPT_NO_METADATA (1<<0) -#define PPCRYPT_USER_PASSWORD (1<<1) -#define PPCRYPT_OWNER_PASSWORD (1<<2) -#define PPCRYPT_STREAM_RC4 (1<<3) -#define PPCRYPT_STRING_RC4 (1<<4) -#define PPCRYPT_STREAM_AES (1<<5) -#define PPCRYPT_STRING_AES (1<<6) -#define PPCRYPT_OBSCURITY (1<<7) - -#define PPCRYPT_STREAM (PPCRYPT_STREAM_AES|PPCRYPT_STREAM_RC4) -#define PPCRYPT_STRING (PPCRYPT_STRING_AES|PPCRYPT_STRING_RC4) -#define PPCRYPT_RC4 (PPCRYPT_STREAM_RC4|PPCRYPT_STRING_RC4) -#define PPCRYPT_AES (PPCRYPT_STREAM_AES|PPCRYPT_STRING_AES) - -#define PPCRYPT_INFO_AES (1<<0) -#define PPCRYPT_INFO_RC4 (1<<1) -#define PPCRYPT_INFO_MD (1<<2) -#define PPCRYPT_INFO_NOMD (1<<3) - -ppcrypt_status ppdoc_crypt_init (ppdoc *pdf, const void *userpass, size_t userpasslength, const void *ownerpass, size_t ownerpasslength); -int ppstring_decrypt (ppcrypt *crypt, const void *input, size_t size, void *output, size_t *newsize); - -#define ppcrypt_start_ref(crypt, r) ((crypt)->ref = r, (crypt)->cryptkeylength = 0) -#define ppcrypt_end_ref(crypt) ((crypt)->ref = NULL, (crypt)->cryptkeylength = 0) -#define ppcrypt_ref(pdf, crypt) ((crypt = (pdf)->crypt) != NULL && crypt->ref != NULL) - -int ppcrypt_type (ppcrypt *crypt, ppname *cryptname, ppuint *length, int *cryptflags); -ppstring * ppcrypt_stmkey (ppcrypt *crypt, ppref *ref, int aes, ppheap *heap); - -#endif diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/ppdict.c b/Build/source/texk/web2c/luatexdir/luapplib/src/ppdict.c deleted file mode 100644 index 95ea96b9f33..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/ppdict.c +++ /dev/null @@ -1,166 +0,0 @@ - -#include "pplib.h" - -ppdict * ppdict_create (const ppobj *stackpos, size_t size, ppheap *heap) -{ - ppdict *dict; - ppobj *data; - ppname **pkey; - size_t i; - - size >>= 1; // num of key-value pairs - dict = (ppdict *)ppstruct_take(heap, sizeof(ppdict)); - dict->data = data = (ppobj *)ppstruct_take(heap, size * sizeof(ppobj)); - dict->keys = pkey = (ppname **)ppstruct_take(heap, (size + 1) * sizeof(ppname **)); - dict->size = 0; - - for (i = 0; i < size; ++i, stackpos += 2) - { - if (stackpos->type != PPNAME) // we need this check at lest for trailer hack - continue; - *pkey = stackpos->name; - *data = *(stackpos + 1); - ++pkey, ++data, ++dict->size; - } - *pkey = NULL; // sentinel for convinient iteration - return dict; -} - -ppobj * ppdict_get_obj (ppdict *dict, const char *name) -{ - ppname **pkey; - ppobj *obj; - - for (ppdict_first(dict, pkey, obj); *pkey != NULL; ppdict_next(pkey, obj)) - if (strcmp((*pkey)->data, name) == 0) // not ppname_eq() or ppname_is()!! - return obj; - return NULL; -} - -ppobj * ppdict_rget_obj (ppdict *dict, const char *name) -{ - ppobj *obj; - return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_rget_obj(obj) : NULL; -} - -int ppdict_get_bool (ppdict *dict, const char *name, int *v) -{ - ppobj *obj; - return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_get_bool(obj, *v) : 0; -} - -int ppdict_rget_bool (ppdict *dict, const char *name, int *v) -{ - ppobj *obj; - return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_rget_bool(obj, *v) : 0; -} - -int ppdict_get_int (ppdict *dict, const char *name, ppint *v) -{ - ppobj *obj; - return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_get_int(obj, *v) : 0; -} - -int ppdict_rget_int (ppdict *dict, const char *name, ppint *v) -{ - ppobj *obj; - return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_rget_int(obj, *v) : 0; -} - -int ppdict_get_uint (ppdict *dict, const char *name, ppuint *v) -{ - ppobj *obj; - return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_get_uint(obj, *v) : 0; -} - -int ppdict_rget_uint (ppdict *dict, const char *name, ppuint *v) -{ - ppobj *obj; - return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_rget_uint(obj, *v) : 0; -} - -int ppdict_get_num (ppdict *dict, const char *name, ppnum *v) -{ - ppobj *obj; - return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_get_num(obj, *v) : 0; -} - -int ppdict_rget_num (ppdict *dict, const char *name, ppnum *v) -{ - ppobj *obj; - return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_rget_num(obj, *v) : 0; -} - -ppname * ppdict_get_name (ppdict *dict, const char *name) -{ - ppobj *obj; - return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_get_name(obj) : NULL; -} - -ppname * ppdict_rget_name (ppdict *dict, const char *name) -{ - ppobj *obj; - return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_rget_name(obj) : NULL; -} - -ppstring * ppdict_get_string (ppdict *dict, const char *name) -{ - ppobj *obj; - return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_get_string(obj) : NULL; -} - -ppstring * ppdict_rget_string (ppdict *dict, const char *name) -{ - ppobj *obj; - return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_rget_string(obj) : NULL; -} - -pparray * ppdict_get_array (ppdict *dict, const char *name) -{ - ppobj *obj; - return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_get_array(obj) : NULL; -} - -pparray * ppdict_rget_array (ppdict *dict, const char *name) -{ - ppobj *obj; - return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_rget_array(obj) : NULL; -} - -ppdict * ppdict_get_dict (ppdict *dict, const char *name) -{ - ppobj *obj; - return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_get_dict(obj) : NULL; -} - -ppdict * ppdict_rget_dict (ppdict *dict, const char *name) -{ - ppobj *obj; - return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_rget_dict(obj) : NULL; -} - -/* -ppstream * ppdict_get_stream (ppdict *dict, const char *name) -{ - ppobj *obj; - return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_get_stream(obj) : NULL; -} -*/ - -ppstream * ppdict_rget_stream (ppdict *dict, const char *name) -{ - ppobj *obj; - return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_rget_stream(obj) : NULL; -} - -ppref * ppdict_get_ref (ppdict *dict, const char *name) -{ - ppobj *obj; - return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_get_ref(obj) : NULL; -} - -ppref * ppdict_rget_ref (ppdict *dict, const char *name) -{ - ppobj *obj; - return (obj = ppdict_get_obj(dict, name)) != NULL ? ppobj_rget_ref(obj) : NULL; -} diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/ppdict.h b/Build/source/texk/web2c/luatexdir/luapplib/src/ppdict.h deleted file mode 100644 index b13ff8eb29d..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/ppdict.h +++ /dev/null @@ -1,7 +0,0 @@ - -#ifndef PP_DICT_H -#define PP_DICT_H - -ppdict * ppdict_create (const ppobj *stack, size_t size, ppheap *heap); - -#endif
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/ppfilter.h b/Build/source/texk/web2c/luatexdir/luapplib/src/ppfilter.h deleted file mode 100644 index 583aa8cf48f..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/ppfilter.h +++ /dev/null @@ -1,10 +0,0 @@ - -#ifndef PP_FILTER_H -#define PP_FILTER_H - -#include "utilbasexx.h" -#include "utilflate.h" -#include "utillzw.h" -#include "utilfpred.h" - -#endif
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/ppheap.c b/Build/source/texk/web2c/luatexdir/luapplib/src/ppheap.c deleted file mode 100644 index f2fbc2b7e4f..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/ppheap.c +++ /dev/null @@ -1,40 +0,0 @@ - -#include "pplib.h" - -#define PPBYTES_HEAP_BLOCK 0xFFF -#define PPBYTES_HEAP_LARGE (PPBYTES_HEAP_BLOCK >> 2) -#define PPSTRUCT_HEAP_BLOCK 0xFFF -#define PPSTRUCT_HEAP_LARGE (PPSTRUCT_HEAP_BLOCK >> 2) - -void ppheap_init (ppheap *heap) -{ - ppstruct_heap_init(heap, PPSTRUCT_HEAP_BLOCK, PPSTRUCT_HEAP_LARGE, 0); - ppbytes_heap_init(heap, PPBYTES_HEAP_BLOCK, PPBYTES_HEAP_LARGE, 0); -} - -void ppheap_free (ppheap *heap) -{ - ppstruct_heap_free(heap); - ppbytes_heap_free(heap); -} - -void ppheap_renew (ppheap *heap) -{ - ppstruct_heap_clear(heap); - ppbytes_heap_clear(heap); - ppbytes_buffer_init(heap); -} - -ppbyte * ppbytes_flush (ppheap *heap, iof *O, size_t *psize) -{ - ppbyte *data; - size_t size; - - //ASSERT(&heap->bytesheap == O->link); - iof_put(O, '\0'); - data = (ppbyte *)O->buf; - size = (size_t)iof_size(O); - ppbytes_heap_done(heap, data, size); - *psize = size - 1; - return data; -}
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/ppheap.h b/Build/source/texk/web2c/luatexdir/luapplib/src/ppheap.h deleted file mode 100644 index 85a59ee0ab8..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/ppheap.h +++ /dev/null @@ -1,46 +0,0 @@ - -#ifndef PP_HEAP_H -#define PP_HEAP_H - -#include "utilmem.h" - -#define pp_malloc util_malloc -//#define pp_callic util_calloc -//#define pp_realloc util_realloc -#define pp_free util_free - -#include "utilmemheapiof.h" -//#include "utilmeminfo.h" - -#define ppbytes_heap heap16 -#define ppbytes_heap_init(heap, space, large, flags) (heap16_init(&(heap)->bytesheap, space, large, flags), heap16_head(&(heap)->bytesheap)) -//#define ppbytes_heap_some(heap, size, pspace) _heap16_some(&(heap)->bytesheap, size, pspace) -#define ppbytes_heap_done(heap, data, written) heap16_done(&(heap)->bytesheap, data, written) -#define ppbytes_heap_clear(heap) heap16_clear(&(heap)->bytesheap) -#define ppbytes_heap_free(heap) heap16_free(&(heap)->bytesheap) -#define ppbytes_heap_info(heap, info, append) heap16_stats(&(heap)->bytesheap, info, append) - -#define ppbytes_take(heap, size) _heap16_take(&(heap)->bytesheap, size) -#define ppbytes_buffer_init(heap) heap16_buffer_init(&(heap)->bytesheap, &(heap)->bytesbuffer) -#define ppbytes_buffer(heap, atleast) _heap16_buffer_some(&(heap)->bytesheap, &(heap)->bytesbuffer, atleast) - -#define ppstruct_heap heap64 -#define ppstruct_heap_init(heap, space, large, flags) (heap64_init(&(heap)->structheap, space, large, flags), heap64_head(&(heap)->structheap)) -#define ppstruct_heap_clear(heap) heap64_clear(&(heap)->structheap) -#define ppstruct_heap_free(heap) heap64_free(&(heap)->structheap) -#define ppstruct_heap_info(heap, info, append) heap64_stats(&(heap)->structheap, info, append) -#define ppstruct_take(heap, size) _heap64_take(&(heap)->structheap, size) - -typedef struct { - ppbytes_heap bytesheap; - ppstruct_heap structheap; - iof bytesbuffer; -} ppheap; - -ppbyte * ppbytes_flush (ppheap *heap, iof *O, size_t *psize); - -void ppheap_init (ppheap *heap); -void ppheap_free (ppheap *heap); -void ppheap_renew (ppheap *heap); - -#endif
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/pplib.h b/Build/source/texk/web2c/luatexdir/luapplib/src/pplib.h deleted file mode 100644 index e753cfa0514..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/pplib.h +++ /dev/null @@ -1,22 +0,0 @@ - -#ifndef PP_LIB_H -#define PP_LIB_H - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <assert.h> - -#include "utiliof.h" -#include "utillog.h" - -#include "ppapi.h" -#include "ppheap.h" -#include "ppdict.h" -#include "ppstream.h" -#include "pparray.h" -#include "ppcrypt.h" -#include "ppxref.h" -#include "ppload.h" - -#endif
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/ppload.c b/Build/source/texk/web2c/luatexdir/luapplib/src/ppload.c deleted file mode 100644 index 0e72039d84f..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/ppload.c +++ /dev/null @@ -1,2769 +0,0 @@ - -#include "pplib.h" - -const char * ppobj_kind[] = { "none", "null", "bool", "integer", "number", "name", "string", "array", "dict", "stream", "ref" }; - -#define ignored_char(c) (c == 0x20 || c == 0x0A || c == 0x0D || c == 0x09 || c == 0x00) -#define newline_char(c) (c == 0x0A || c == 0x0D) -#define IGNORED_CHAR_CASE 0x20: case 0x0A: case 0x0D: case 0x09: case 0x00 -#define NEWLINE_CHAR_CASE 0x0A: case 0x0D -#define DIGIT_CHAR_CASE '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9' -#define OCTAL_CHAR_CASE '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7' - -#define MAX_INT_DIGITS 32 - -#define PP_LENGTH_UNKNOWN ((size_t)-1) - -static const char * ppref_str (ppuint refnumber, ppuint refversion) -{ - static char buffer[MAX_INT_DIGITS + 1 + MAX_INT_DIGITS + 1 + 1 + 1]; - sprintf(buffer, "%lu %lu R", (unsigned long)(refnumber), (unsigned long)(refversion)); - return buffer; -} - -/* name */ - -/* -pdf spec page 57: -"The name may include any regular characters, but not delimiter or white-space characters (see Section 3.1, “Lexical Conventions”)." -"The token / (a slash followed by no regular characters) is a valid name" -"Beginning with PDF 1.2, any character except null (character code 0) may be included in a name by writing its 2-digit hexadecimal code, -preceded by the number sign character (#); see implementation notes 3 and 4 in Appendix H. This syntax is required to represent any of the -delimiter or white-space characters or the number sign character itself; it is recommended but not required for characters whose codes -are outside the range 33 (!) to 126 (~)." - -This suggests we should accept bytes 128..255 as a part of the name. -*/ - -// pdf name delimiters: 0..32, ()<>[]{}/% -// # treated specially -// .+- are valid part of name; keep in mind names such as -| | |- .notdef ABCDEF+Font etc. -static const int8_t ppname_byte_lookup[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, '#', 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 -}; - -/* -20190827: The end of the name is any byte with 0 lookup value. When reading a ref object or objstm stream containing -a single name, we may get input byte IOFEOF (-1), which must not be treated as 255. So a check for (c >= 0) is needed, -otherwise we keep writing byte 255 to the output buffer until not enough memory. -*/ - -#define ppnamebyte(c) (c >= 0 && ppname_byte_lookup[(uint8_t)(c)]) - -static const int8_t pphex_byte_lookup[] = { - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1, - -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -}; - -/* no need for (c >= 0) check here */ - -#define pphex(c) pphex_byte_lookup[(uint8_t)(c)] - -#define PPNAME_INIT (7 + 1) - -static ppname * ppscan_name (iof *I, ppheap *heap) -{ - ppname *encoded, *decoded; - iof *O; - int decode, c; - uint8_t *p, *e; - int8_t h1, h2; - - O = ppbytes_buffer(heap, PPNAME_INIT); - for (decode = 0, c = iof_char(I); ppnamebyte(c); c = iof_next(I)) - { - if (c == '#') decode = 1; - iof_put(O, c); - } - encoded = (ppname *)ppstruct_take(heap, sizeof(ppname)); - encoded->data = ppbytes_flush(heap, O, &encoded->size); - if (decode) - { - O = ppbytes_buffer(heap, encoded->size); // decoded always a bit smaller - for (p = (uint8_t *)encoded->data, e = p + encoded->size; p < e; ++p) - { - if (*p == '#' && p + 2 < e && (h1 = pphex(p[1])) >= 0 && (h2 = pphex(p[2])) >= 0) - { - iof_set(O, ((h1 << 4)|h2)); - p += 2; - } - else - iof_set(O, *p); - } - decoded = (ppname *)ppstruct_take(heap, sizeof(ppname)); - decoded->data = ppbytes_flush(heap, O, &decoded->size); - encoded->flags = PPNAME_ENCODED; - decoded->flags = PPNAME_DECODED; - encoded->alterego = decoded, decoded->alterego = encoded; - } - else - { - encoded->flags = 0; - encoded->alterego = encoded; - } - return encoded; -} - -static ppname * ppscan_exec (iof *I, ppheap *heap, uint8_t firstbyte) -{ - ppname *encoded, *decoded; - iof *O; - int decode, c; - uint8_t *p, *e; - int8_t h1, h2; - - O = ppbytes_buffer(heap, PPNAME_INIT); - iof_put(O, firstbyte); - for (decode = 0, c = iof_char(I); ppnamebyte(c); c = iof_next(I)) - { - if (c == '#') decode = 1; - iof_put(O, c); - } - encoded = (ppname *)ppstruct_take(heap, sizeof(ppname)); - encoded->data = ppbytes_flush(heap, O, &encoded->size); - if (decode) - { - O = ppbytes_buffer(heap, encoded->size); - for (p = (uint8_t *)encoded->data, e = p + encoded->size; p < e; ++p) - { - if (*p == '#' && p + 2 < e && (h1 = pphex(p[1])) >= 0 && (h2 = pphex(p[2])) >= 0) - { - iof_set(O, ((h1 << 4)|h2)); - p += 2; - } - else - iof_set(O, *p); - } - decoded = (ppname *)ppstruct_take(heap, sizeof(ppname)); - decoded->data = ppbytes_flush(heap, O, &decoded->size); - encoded->flags = PPNAME_EXEC|PPNAME_ENCODED; - decoded->flags = PPNAME_EXEC|PPNAME_DECODED; - encoded->alterego = decoded, decoded->alterego = encoded; - } - else - { - encoded->flags = PPNAME_EXEC; - encoded->alterego = encoded; - } - return encoded; -} - -static ppname * ppname_internal (const void *data, size_t size, int flags, ppheap *heap) -{ // so far needed only for 'EI' operator - ppname *encoded; - encoded = (ppname *)ppstruct_take(heap, sizeof(ppname)); - encoded->data = (ppbyte *)ppbytes_take(heap, size + 1); - memcpy(encoded->data, data, size); - encoded->data[size] = '\0'; - encoded->size = size; - encoded->alterego = encoded; - encoded->flags = flags; - return encoded; -} - -#define ppexec_internal(data, size, heap) ppname_internal(data, size, PPNAME_EXEC, heap) - -ppname * ppname_decoded (ppname *name) -{ - return (name->flags & PPNAME_ENCODED) ? name->alterego : name; -} - -ppname * ppname_encoded (ppname *name) -{ - return (name->flags & PPNAME_DECODED) ? name->alterego : name; -} - -ppbyte * ppname_decoded_data (ppname *name) -{ - return (name->flags & PPNAME_ENCODED) ? name->alterego->data : name->data; -} - -ppbyte * ppname_encoded_data (ppname *name) -{ - return (name->flags & PPNAME_DECODED) ? name->alterego->data : name->data; -} - -/* string */ - -static const int8_t ppstring_byte_escape[] = { /* -1 escaped with octal, >0 escaped with \\, 0 left intact*/ - -1,-1,-1,-1,-1,-1,-1,-1,'b','t','n',-1,'f','r',-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - 0, 0, 0, 0, 0, 0, 0, 0,'(',')', 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,'\\', 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -}; - -//// pp string - -#define PPSTRING_INIT (7 + 1) - -#define ppstring_check_bom(decoded) ((void)\ - (decoded->size >= 2 ? (ppstring_utf16be_bom(decoded->data) ? (decoded->flags |= PPSTRING_UTF16BE) : \ - (ppstring_utf16le_bom(decoded->data) ? (decoded->flags |= PPSTRING_UTF16LE) : 0)) : 0)) - -#define ppstring_check_bom2(decoded, encoded) ((void)\ - (decoded->size >= 2 ? (ppstring_utf16be_bom(decoded->data) ? ((decoded->flags |= PPSTRING_UTF16BE), (encoded->flags |= PPSTRING_UTF16BE)) : \ - (ppstring_utf16le_bom(decoded->data) ? ((decoded->flags |= PPSTRING_UTF16LE), (encoded->flags |= PPSTRING_UTF16LE)) : 0)) : 0)) - -#define ppstring_utf16be_bom(data) (data[0] == '\xFE' && data[1] == '\xFF') -#define ppstring_utf16le_bom(data) (data[0] == '\xFF' && data[1] == '\xFE') - -#define ppstringesc(c) ppstring_byte_escape[(uint8_t)(c)] - -static ppstring * ppscan_string (iof *I, ppheap *heap) -{ - ppstring *encoded, *decoded; - iof *O; - int c, decode, balance; - uint8_t *p, *e; - - O = ppbytes_buffer(heap, PPSTRING_INIT); - for (decode = 0, balance = 0, c = iof_char(I); c >= 0; ) - { - switch (c) - { - case '\\': - decode = 1; - iof_put(O, '\\'); - if ((c = iof_next(I)) >= 0) - { - iof_put(O, c); - c = iof_next(I); - } - break; - case '(': // may be unescaped if balanced - ++balance; - iof_put(O, '('); - c = iof_next(I); - break; - case ')': - if (balance == 0) - { - c = IOFEOF; - ++I->pos; - break; - } - --balance; - iof_put(O, ')'); - c = iof_next(I); - break; - default: - iof_put(O, c); - c = iof_next(I); - } - } - encoded = (ppstring *)ppstruct_take(heap, sizeof(ppstring)); - encoded->data = ppbytes_flush(heap, O, &encoded->size); - if (decode) - { - O = ppbytes_buffer(heap, encoded->size); // decoded can only be smaller - for (p = (uint8_t *)encoded->data, e = p + encoded->size; p < e; ++p) - { - if (*p == '\\') - { - if (++p >= e) - break; - switch (*p) - { - case OCTAL_CHAR_CASE: - c = *p - '0'; - if (++p < e && *p >= '0' && *p <= '7') - { - c = (c << 3) + *p - '0'; - if (++p < e && *p >= '0' && *p <= '7') - c = (c << 3) + *p - '0'; - } - iof_set(O, c); - break; - case 'n': - iof_set(O, '\n'); - break; - case 'r': - iof_set(O, '\r'); - break; - case 't': - iof_set(O, '\t'); - break; - case 'b': - iof_set(O, '\b'); - break; - case 'f': - iof_set(O, '\f'); - break; - case NEWLINE_CHAR_CASE: // not a part of the string, ignore (pdf spec page 55) - break; - case '(': case ')': case '\\': - default: // for anything else backslash is ignored (pdf spec page 54) - iof_set(O, *p); - break; - } - } - else - iof_set(O, *p); - } - decoded = (ppstring *)ppstruct_take(heap, sizeof(ppstring)); - decoded->data = ppbytes_flush(heap, O, &decoded->size); - encoded->flags = PPSTRING_ENCODED; - decoded->flags = PPSTRING_DECODED; - encoded->alterego = decoded, decoded->alterego = encoded; - ppstring_check_bom2(decoded, encoded); - } - else - { - encoded->flags = 0; - encoded->alterego = encoded; - ppstring_check_bom(encoded); - } - return encoded; -} - -static ppstring * ppscan_base16 (iof *I, ppheap *heap) -{ - ppstring *encoded, *decoded; - iof *O; - int c; - uint8_t *p, *e; - int8_t h1, h2; - - O = ppbytes_buffer(heap, PPSTRING_INIT); - for (c = iof_char(I); (pphex(c) >= 0 || ignored_char(c)); c = iof_next(I)) - iof_put(O, c); - if (c == '>') - ++I->pos; - encoded = (ppstring *)ppstruct_take(heap, sizeof(ppstring)); - encoded->data = ppbytes_flush(heap, O, &encoded->size); - - O = ppbytes_buffer(heap, ((encoded->size + 1) >> 1) + 1); // decoded can only be smaller - for (p = (uint8_t *)encoded->data, e = p + encoded->size; p < e; ++p) - { - if ((h1 = pphex(*p)) < 0) // ignored - continue; - for (h2 = 0, ++p; p < e && (h2 = pphex(*p)) < 0; ++p); - iof_set(O, (h1 << 4)|h2); - } - decoded = (ppstring *)ppstruct_take(heap, sizeof(ppstring)); - decoded->data = ppbytes_flush(heap, O, &decoded->size); - - encoded->flags = PPSTRING_BASE16|PPSTRING_ENCODED; - decoded->flags = PPSTRING_BASE16|PPSTRING_DECODED; - encoded->alterego = decoded, decoded->alterego = encoded; - - ppstring_check_bom2(decoded, encoded); - return encoded; -} - -static ppstring * ppstring_buffer (iof *O, ppheap *heap) -{ - ppstring *encoded, *decoded; - uint8_t *p, *e; - - decoded = (ppstring *)ppstruct_take(heap, sizeof(ppstring)); - decoded->data = ppbytes_flush(heap, O, &decoded->size); - - O = ppbytes_buffer(heap, (decoded->size << 1) + 1); // the exact size known - for (p = (uint8_t *)decoded->data, e = p + decoded->size; p < e; ++p) - iof_set2(O, base16_uc_alphabet[(*p) >> 4], base16_uc_alphabet[(*p) & 0xF]); - encoded = ppstruct_take(heap, sizeof(ppstring)); - encoded->data = ppbytes_flush(heap, O, &encoded->size); - encoded->flags = PPSTRING_BASE16|PPSTRING_ENCODED; - decoded->flags = PPSTRING_BASE16|PPSTRING_DECODED; - encoded->alterego = decoded, decoded->alterego = encoded; - // ppstring_check_bom2(decoded, encoded); // ? - return encoded; -} - -ppstring * ppstring_internal (const void *data, size_t size, ppheap *heap) -{ // so far used only for crypt key - iof *O; - O = ppbytes_buffer(heap, size); - memcpy(O->buf, data, size); - O->pos = O->buf + size; - return ppstring_buffer(O, heap); -} - -/* base85; local function for that to make that part independent from utilbasexx */ - -static const int8_t ppstring_base85_lookup[] = { - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14, - 15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30, - 31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46, - 47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62, - 63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78, - 79,80,81,82,83,84,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -}; - -#define base85_value(c) ppstring_base85_lookup[(uint8_t)(c)] - -#define base85_code(c1, c2, c3, c4, c5) ((((c1 * 85 + c2) * 85 + c3) * 85 + c4) * 85 + c5) -#define base85_eof(c) (c == '~' || c < 0) - -static iof_status ppscan_base85_decode (iof *I, iof *O) -{ - int c1, c2, c3, c4, c5; - uint32_t code; - while (iof_ensure(O, 4)) - { - do { c1 = iof_get(I); } while (ignored_char(c1)); - if (base85_eof(c1)) - return IOFEOF; - switch (c1) - { - case 'z': - iof_set4(O, '\0', '\0', '\0', '\0'); - continue; - case 'y': - iof_set4(O, ' ', ' ', ' ', ' '); - continue; - } - do { c2 = iof_get(I); } while (ignored_char(c2)); - if (base85_eof(c2)) - return IOFERR; - do { c3 = iof_get(I); } while (ignored_char(c3)); - if (base85_eof(c3)) - { - if ((c1 = base85_value(c1)) < 0 || (c2 = base85_value(c2)) < 0) - return IOFERR; - code = base85_code(c1, c2, 84, 84, 84); /* padding with 'u' (117); 117-33 = 84 */ - iof_set(O, (code >> 24)); - return IOFEOF; - } - do { c4 = iof_get(I); } while (ignored_char(c4)); - if (base85_eof(c4)) - { - if ((c1 = base85_value(c1)) < 0 || (c2 = base85_value(c2)) < 0 || (c3 = base85_value(c3)) < 0) - return IOFERR; - code = base85_code(c1, c2, c3, 84, 84); - iof_set2(O, code>>24, ((code>>16) & 0xff)); - return IOFEOF; - } - do { c5 = iof_get(I); } while (ignored_char(c5)); - if (base85_eof(c5)) - { - if ((c1 = base85_value(c1)) < 0 || (c2 = base85_value(c2)) < 0 || - (c3 = base85_value(c3)) < 0 || (c4 = base85_value(c4)) < 0) - return IOFERR; - code = base85_code(c1, c2, c3, c4, 84); - iof_set3(O, (code >> 24), ((code >> 16) & 0xff), ((code >> 8) & 0xff)); - return IOFEOF; - } - if ((c1 = base85_value(c1)) < 0 || (c2 = base85_value(c2)) < 0 || (c3 = base85_value(c3)) < 0 || - (c4 = base85_value(c4)) < 0 || (c5 = base85_value(c5)) < 0) - return IOFERR; - code = base85_code(c1, c2, c3, c4, c5); - iof_set4(O, (code >> 24), ((code >> 16) & 0xff), ((code >> 8) & 0xff), (code & 0xff)); - } - return IOFFULL; -} - -static ppstring * ppscan_base85 (iof *I, ppheap *heap) -{ // base85 alphabet is 33..117, adobe also hires 'z' and 'y' for compression - ppstring *encoded, *decoded; - iof *O, B; - int c; - - O = ppbytes_buffer(heap, PPSTRING_INIT); - for (c = iof_char(I); (c >= '!' && c <= 'u') || c == 'z' || c == 'y'; c = iof_next(I)) - iof_put(O, c); - if (c == '~') - if ((c = iof_next(I)) == '>') - ++I->pos; - encoded = (ppstring *)ppstruct_take(heap, sizeof(ppstring)); - encoded->data = ppbytes_flush(heap, O, &encoded->size); - - iof_string_reader(&B, encoded->data, encoded->size); - O = ppbytes_buffer(heap, (encoded->size * 5 / 4) + 1); // may be larger that that because of 'z' and 'y' - ppscan_base85_decode(&B, O); - decoded = (ppstring *)ppstruct_take(heap, sizeof(ppstring)); - decoded->data = ppbytes_flush(heap, O, &decoded->size); - - encoded->flags = PPSTRING_BASE85|PPSTRING_ENCODED; - decoded->flags = PPSTRING_BASE85|PPSTRING_DECODED; - encoded->alterego = decoded, decoded->alterego = encoded; - - ppstring_check_bom2(decoded, encoded); - return encoded; -} - -ppstring * ppstring_decoded (ppstring *string) -{ - return (string->flags & PPSTRING_ENCODED) ? string->alterego : string; -} - -ppstring * ppstring_encoded (ppstring *string) -{ - return (string->flags & PPSTRING_DECODED) ? string->alterego : string; -} - -ppbyte * ppstring_decoded_data (ppstring *string) -{ - return (string->flags & PPSTRING_ENCODED) ? string->alterego->data : string->data; -} - -ppbyte * ppstring_encoded_data (ppstring *string) -{ - return (string->flags & PPSTRING_DECODED) ? string->alterego->data : string->data; -} - - -/* encrypted string */ - -static ppstring * ppscan_crypt_string (iof *I, ppcrypt *crypt, ppheap *heap) -{ - ppstring *encoded, *decoded; - iof *O; - int c, b, balance, encode; - uint8_t *p, *e; - size_t size; - - O = ppbytes_buffer(heap, PPSTRING_INIT); - for (balance = 0, encode = 0, c = iof_char(I); c >= 0; ) - { - switch (c) - { - case '\\': - if ((c = iof_next(I)) < 0) - break; - encode = 1; - switch (c) - { - case OCTAL_CHAR_CASE: - b = c - '0'; - if ((c = iof_next(I)) >= 0 && c >= '0' && c <= '7') - { - b = (b << 3) + c - '0'; - if ((c = iof_next(I)) >= 0 && c >= '0' && c <= '7') - { - b = (b << 3) + c - '0'; - c = iof_next(I); - } - } - iof_put(O, b); - // c is set to the next char - break; - case 'n': - iof_put(O, '\n'); - c = iof_next(I); - break; - case 'r': - iof_put(O, '\r'); - c = iof_next(I); - break; - case 't': - iof_put(O, '\t'); - c = iof_next(I); - break; - case 'b': - iof_put(O, '\b'); - c = iof_next(I); - break; - case 'f': - iof_put(O, '\f'); - c = iof_next(I); - break; - case NEWLINE_CHAR_CASE: // not a part of the string, ignore (pdf spec page 55) - c = iof_next(I); - break; - case '(': case ')': case '\\': - default: // for enything else backslash is ignored (pdf spec page 54) - iof_put(O, c); - c = iof_next(I); - break; - } - break; - case '(': - ++balance; - encode = 1; - iof_put(O, '('); - c = iof_next(I); - break; - case ')': - if (balance == 0) - { - c = IOFEOF; - ++I->pos; - } - else - { - --balance; - //encode = 1; - iof_put(O, ')'); - c = iof_next(I); - } - break; - default: - if (ppstringesc(c) != 0) - encode = 1; - iof_put(O, c); - c = iof_next(I); - } - } - /* decrypt the buffer in place, update size */ - if (ppstring_decrypt(crypt, O->buf, iof_size(O), O->buf, &size)) - O->pos = O->buf + size; - decoded = (ppstring *)ppstruct_take(heap, sizeof(ppstring)); - decoded->data = ppbytes_flush(heap, O, &decoded->size); - /* make encoded counterpart */ - if (encode) - { - O = ppbytes_buffer(heap, decoded->size + 1); // we don't know - for (p = (uint8_t *)decoded->data, e = p + decoded->size; p < e; ++p) - { - b = ppstringesc(*p); - switch (b) - { - case 0: - iof_put(O, *p); - break; - case -1: - iof_put4(O, '\\', ((*p) >> 6) + '0', (((*p) >> 3) & 7) + '0', ((*p) & 7) + '0'); - break; - default: - iof_put2(O, '\\', b); - break; - } - } - encoded = (ppstring *)ppstruct_take(heap, sizeof(ppstring)); - encoded->data = ppbytes_flush(heap, O, &encoded->size); - encoded->flags = PPSTRING_ENCODED; - decoded->flags = PPSTRING_DECODED; - encoded->alterego = decoded, decoded->alterego = encoded; - ppstring_check_bom2(decoded, encoded); - } - else - { - decoded->flags = 0; - decoded->alterego = decoded; - ppstring_check_bom(decoded); - encoded = decoded; - } - return encoded; -} - -static ppstring * ppscan_crypt_base16 (iof *I, ppcrypt *crypt, ppheap *heap) -{ - ppstring *encoded, *decoded; - iof *O; - int c; - uint8_t *p, *e; - int8_t h1, h2; - size_t size; - - O = ppbytes_buffer(heap, PPSTRING_INIT); - for (c = iof_char(I); c != '>'; ) - { - if ((h1 = pphex(c)) < 0) - { - if (ignored_char(c)) - { - c = iof_next(I); - continue; - } - break; - } - do { - c = iof_next(I); - if ((h2 = pphex(c)) >= 0) - { - c = iof_next(I); - break; - } - if (!ignored_char(c)) // c == '>' || c < 0 or some crap - { - h2 = 0; - break; - } - } while (1); - iof_put(O, (h1 << 4)|h2); - } - if (c == '>') - ++I->pos; - /* decrypt the buffer in place, update size */ - if (ppstring_decrypt(crypt, O->buf, iof_size(O), O->buf, &size)) - O->pos = O->buf + size; - decoded = (ppstring *)ppstruct_take(heap, sizeof(ppstring)); - decoded->data = ppbytes_flush(heap, O, &decoded->size); - - O = ppbytes_buffer(heap, (decoded->size << 1) + 1); - for (p = (uint8_t *)decoded->data, e = p + decoded->size; p < e; ++p) - iof_set2(O, base16_uc_alphabet[(*p) >> 4], base16_uc_alphabet[(*p) & 0xF]); - encoded = (ppstring *)ppstruct_take(heap, sizeof(ppstring)); - encoded->data = ppbytes_flush(heap, O, &encoded->size); - - encoded->flags = PPSTRING_BASE16|PPSTRING_ENCODED; - decoded->flags = PPSTRING_BASE16|PPSTRING_DECODED; - encoded->alterego = decoded, decoded->alterego = encoded; - - ppstring_check_bom2(decoded, encoded); - return encoded; -} - -/* scanner stack */ - -#define PPSTACK_BUFFER 512 - -static void ppstack_init (ppstack *stack, ppheap *heap) -{ - stack->buf = stack->pos = (ppobj *)pp_malloc(PPSTACK_BUFFER * sizeof(ppobj)); - stack->size = 0; - stack->space = PPSTACK_BUFFER; - stack->heap = heap; -} - -#define ppstack_free_buffer(stack) (pp_free((stack)->buf)) - -static void ppstack_resize (ppstack *stack) -{ - ppobj *newbuffer; - stack->space <<= 1; - newbuffer = (ppobj *)pp_malloc(stack->space * sizeof(ppobj)); - memcpy(newbuffer, stack->buf, stack->size * sizeof(ppobj)); - ppstack_free_buffer(stack); - stack->buf = newbuffer; - stack->pos = newbuffer + stack->size; -} - -#define ppstack_push(stack) ((void)((stack)->size < (stack)->space || (ppstack_resize(stack), 0)), ++(stack)->size, (stack)->pos++) -#define ppstack_pop(stack, n) ((stack)->size -= (n), (stack)->pos -= (n)) -#define ppstack_at(stack, i) ((stack)->buf + i) -#define ppstack_clear(stack) ((stack)->pos = (stack)->buf, (stack)->size = 0) - -/* scanner commons */ - -#define ppscan_uint(I, u) iof_get_usize(I, u) -#define ppread_uint(s, u) string_to_usize((const char *)(s), u) - -static ppobj * ppscan_numobj (iof *I, ppobj *obj, int negative) -{ - ppint integer; - ppnum number; - int exponent; - int c; - c = iof_char(I); - iof_scan_integer(I, c, integer); - switch(c) - { - case '.': - { - number = (ppnum)integer; - c = iof_next(I); - iof_scan_fraction(I, c, number, exponent); - double_negative_exp10(number, exponent); - obj->type = PPNUM, obj->number = negative ? -number : number; - break; - } - default: - obj->type = PPINT, obj->integer = negative ? -integer : integer; - break; - } - return obj; -} - -static ppobj * ppscan_numobj_frac (iof *I, ppobj *obj, int negative) -{ - ppnum number; - int c, exponent; - - number = 0.0; - c = iof_next(I); - iof_scan_fraction(I, c, number, exponent); - double_negative_exp10(number, exponent); - obj->type = PPNUM, obj->number = negative ? -number : number; - return obj; -} - -static int ppscan_find (iof *I) -{ // skips whitechars and comments - int c; - for (c = iof_char(I); ; c = iof_next(I)) - { - switch (c) - { - case IGNORED_CHAR_CASE: - break; - case '%': { - do { - if ((c = iof_next(I)) < 0) - return c; - } while (!newline_char(c)); - break; - } - default: - return c; - } - } - return c; // never reached -} - -static int ppscan_keyword (iof *I, const char *keyword, size_t size) -{ - size_t i; - int c; - if ((size_t)iof_left(I) >= size) - { - if (memcmp(I->pos, keyword, size) != 0) - return 0; - I->pos += size; - return 1; - } - // sticky case, we can't go back - for (i = 0, c = iof_char(I); i < size; ++i, ++keyword, c = iof_next(I)) - if (c < 0 || *keyword != c) /* PJ20190503 bugfix: there was (i!=c), we actually never get here anyway */ - return 0; - return 1; -} - -#define ppscan_key(I, literal) ppscan_keyword(I, "" literal, sizeof(literal) - 1) - -/* objects parser */ - -static ppref * ppref_unresolved (ppheap *heap, ppuint refnumber, ppuint refversion) -{ - ppref *ref = (ppref *)ppstruct_take(heap, sizeof(ppref)); - memset(ref, 0, sizeof(ppref)); - ref->object.type = PPNONE; - ref->number = refnumber; - ref->version = refversion; - return ref; -} - -#define PPMARK PPNONE - -static ppobj * ppscan_obj (iof *I, ppdoc *pdf, ppxref *xref) -{ - int c; - ppobj *obj; - size_t mark, size; - ppuint refnumber, refversion; - ppref *ref; - ppstack *stack; - ppcrypt *crypt; - - stack = &pdf->stack; - c = iof_char(I); - switch (c) - { - case DIGIT_CHAR_CASE: - return ppscan_numobj(I, ppstack_push(stack), 0); - case '.': - return ppscan_numobj_frac(I, ppstack_push(stack), 0); - case '+': - ++I->pos; - return ppscan_numobj(I, ppstack_push(stack), 0); - case '-': - ++I->pos; - return ppscan_numobj(I, ppstack_push(stack), 1); - case '/': - ++I->pos; - obj = ppstack_push(stack); - obj->type = PPNAME; - obj->name = ppscan_name(I, &pdf->heap); - return obj; - case '(': - ++I->pos; - obj = ppstack_push(stack); - obj->type = PPSTRING; - if (ppcrypt_ref(pdf, crypt)) - obj->string = ppscan_crypt_string(I, crypt, &pdf->heap); - else - obj->string = ppscan_string(I, &pdf->heap); - return obj; - case '[': - mark = stack->size; - obj = ppstack_push(stack); - obj->type = PPMARK; // ppscan_obj() checks types backward for 'R', so set the type immediatelly (reserved for PPARRAY) - obj->any = NULL; - ++I->pos; - for (c = ppscan_find(I); c != ']'; c = ppscan_find(I)) - { - if (ppscan_obj(I, pdf, xref) == NULL) - { // callers assume that NULL returns means nothing pushed - size = stack->size - mark; // pop items AND the obj reserved for array - ppstack_pop(stack, size); - return NULL; - } - } - ++I->pos; - size = stack->size - mark - 1; - obj = ppstack_at(stack, mark); // stack might have been realocated - obj->type = PPARRAY; - obj->array = pparray_create(ppstack_at(stack, mark + 1), size, &pdf->heap); - ppstack_pop(stack, size); // pop array items, leave the array on top - return obj; - case '<': - if ((c = iof_next(I)) == '<') - { - mark = stack->size; - obj = ppstack_push(stack); - obj->type = PPMARK; - obj->any = NULL; - ++I->pos; - for (c = ppscan_find(I); c != '>'; c = ppscan_find(I)) - { - if (ppscan_obj(I, pdf, xref) == NULL) - { - size = stack->size - mark; - ppstack_pop(stack, size); - return NULL; - } - } - if (iof_next(I) == '>') - ++I->pos; - size = stack->size - mark - 1; - obj = ppstack_at(stack, mark); - obj->type = PPDICT; - obj->dict = ppdict_create(ppstack_at(stack, mark + 1), size, &pdf->heap); - ppstack_pop(stack, size); - return obj; - } - obj = ppstack_push(stack); - obj->type = PPSTRING; - if (ppcrypt_ref(pdf, crypt)) - obj->string = ppscan_crypt_base16(I, crypt, &pdf->heap); - else - obj->string = ppscan_base16(I, &pdf->heap); - return obj; - case 'R': - if (stack->size >= 2 && stack->pos[-1].type == PPINT && stack->pos[-2].type == PPINT) - { - ++I->pos; - obj = &stack->pos[-2]; - refnumber = (ppuint)obj->integer; - ppstack_pop(stack, 1); // pop version number, retype obj to a reference - if (xref == NULL || (ref = ppxref_find(xref, refnumber)) == NULL) - { /* pdf spec page 64: unresolvable reference is not an error, should just be treated as a reference to null. - we also need this to read trailer, where refs can't be resolved yet */ - refversion = (obj + 1)->integer; - //if (xref != NULL) - // loggerf("unresolved reference %s", ppref_str(refnumber, refversion)); - ref = ppref_unresolved(stack->heap, refnumber, refversion); - } - obj->type = PPREF; - obj->ref = ref; - return obj; - } - break; - case 't': - if (iof_next(I) == 'r' && iof_next(I) == 'u' && iof_next(I) == 'e') - { - ++I->pos; - obj = ppstack_push(stack); - obj->type = PPBOOL; - obj->integer = 1; - return obj; - } - break; - case 'f': - if (iof_next(I) == 'a' && iof_next(I) == 'l' && iof_next(I) == 's' && iof_next(I) == 'e') - { - ++I->pos; - obj = ppstack_push(stack); - obj->type = PPBOOL; - obj->integer = 0; - return obj; - } - break; - case 'n': - if (iof_next(I) == 'u' && iof_next(I) == 'l' && iof_next(I) == 'l') - { - ++I->pos; - obj = ppstack_push(stack); - obj->type = PPNULL; - obj->any = NULL; - return obj; - } - break; - } - return NULL; -} - -/* -A variant for contents streams (aka postscript); wise of operators, blind to references. -We are still PDF, so we don't care about postscript specific stuff such as radix numbers -and scientific numbers notation. It takes ppstack * as context (no ppdoc *) to be able -to run contents parser beyond the scope of ppdoc heap. -*/ - -static ppstring * ppstring_inline (iof *I, ppdict *imagedict, ppheap *heap); - -static ppobj * ppscan_psobj (iof *I, ppstack *stack) -{ - int c; - ppobj *obj, *op; - size_t size, mark; - ppname *exec; - ppbyte *data; - - c = iof_char(I); - switch (c) - { - case DIGIT_CHAR_CASE: - return ppscan_numobj(I, ppstack_push(stack), 0); - case '.': - return ppscan_numobj_frac(I, ppstack_push(stack), 0); - case '+': - c = iof_next(I); - if (base10_digit(c)) // '+.abc' is probably an executable name, but we are not in postscript - return ppscan_numobj(I, ppstack_push(stack), 0); - else if (c == '.') - return ppscan_numobj_frac(I, ppstack_push(stack), 0); - obj = ppstack_push(stack); - obj->type = PPNAME; - obj->name = ppscan_exec(I, stack->heap, '+'); - return obj; - case '-': - c = iof_next(I); - if (base10_digit(c)) // ditto, we would handle type1 '-|' '|-' operators though - return ppscan_numobj(I, ppstack_push(stack), 1); - else if (c == '.') - return ppscan_numobj_frac(I, ppstack_push(stack), 1); - obj = ppstack_push(stack); - obj->type = PPNAME; - obj->name = ppscan_exec(I, stack->heap, '-'); - return obj; - case '/': - ++I->pos; - obj = ppstack_push(stack); - obj->type = PPNAME; - obj->name = ppscan_name(I, stack->heap); - return obj; - case '(': - ++I->pos; - obj = ppstack_push(stack); - obj->type = PPSTRING; - obj->string = ppscan_string(I, stack->heap); - return obj; - case '[': - mark = stack->size; - obj = ppstack_push(stack); - obj->type = PPMARK; - obj->any = NULL; - ++I->pos; - for (c = ppscan_find(I); c != ']'; c = ppscan_find(I)) - { - if (ppscan_psobj(I, stack) == NULL) - { - size = stack->size - mark; - ppstack_pop(stack, size); - return NULL; - } - } - ++I->pos; - size = stack->size - mark - 1; - obj = ppstack_at(stack, mark); - obj->type = PPARRAY; - obj->array = pparray_create(ppstack_at(stack, mark + 1), size, stack->heap); - ppstack_pop(stack, size); - return obj; - case '<': - if ((c = iof_next(I)) == '<') - { - mark = stack->size; - obj = ppstack_push(stack); - obj->type = PPMARK; - obj->any = NULL; - ++I->pos; - for (c = ppscan_find(I); c != '>'; c = ppscan_find(I)) - { - if (ppscan_psobj(I, stack) == NULL) - { - size = stack->size - mark; - ppstack_pop(stack, size); - return NULL; - } - } - if (iof_next(I) == '>') - ++I->pos; - size = stack->size - mark - 1; - obj = ppstack_at(stack, mark); - obj->type = PPDICT; - obj->dict = ppdict_create(ppstack_at(stack, mark + 1), size, stack->heap); - ppstack_pop(stack, size); - return obj; - } - obj = ppstack_push(stack); - obj->type = PPSTRING; - if (c == '~') - ++I->pos, obj->string = ppscan_base85(I, stack->heap); - else - obj->string = ppscan_base16(I, stack->heap); - return obj; - default: - if (!ppnamebyte(c)) - break; // forbid empty names; dead loop otherwise - ++I->pos; - /* true false null practically don't occur in streams so it makes sense to assume that we get an operator name here. - If it happen to be a keyword we could give back those several bytes to the heap but.. heap buffer is tricky enough. */ - exec = ppscan_exec(I, stack->heap, (uint8_t)c); - data = exec->data; - obj = ppstack_push(stack); - switch (data[0]) - { - case 't': - if (data[1] == 'r' && data[2] == 'u' && data[3] == 'e' && data[4] == '\0') - { - obj->type = PPBOOL; - obj->integer = 1; - return obj; - } - break; - case 'f': - if (data[1] == 'a' && data[2] == 'l' && data[3] == 's' && data[4] == 'e' && data[5] == '\0') - { - obj->type = PPBOOL; - obj->integer = 0; - return obj; - } - break; - case 'n': - if (data[1] == 'u' && data[2] == 'l' && data[3] == 'l' && data[4] == '\0') - { - obj->type = PPNULL; - obj->any = NULL; - return obj; - } - break; - case 'B': - /* - Inline images break rules of operand/operator syntax, so 'BI/ID' operators need to be treated as special syntactic keywords. - - BI <keyval pairs> ID<whitechar?><imagedata><whitechar?>EI - - We treat the image as a single syntactic token; BI starts collecting a dict, ID is the beginning of the data. Effectively EI - operator obtains two operands - dict and string. It is ok to put three items onto the stack, callers dont't assume there is just one. - */ - if (data[1] == 'I' && data[2] == '\0') - { - ppdict *imagedict; - ppname *name; - /* key val pairs -> dict */ - mark = stack->size - 1; - obj->type = PPMARK; - obj->any = NULL; - for (c = ppscan_find(I); ; c = ppscan_find(I)) - { - if ((op = ppscan_psobj(I, stack)) == NULL) - { - size = stack->size - mark; - ppstack_pop(stack, size); - return NULL; - } - if (op->type == PPNAME) - { - name = op->name; - if (name->flags & PPNAME_EXEC) - { - if (name->size != 2 || name->data[0] != 'I' || name->data[1] != 'D') - { // weird - size = stack->size - mark; - ppstack_pop(stack, size); - return NULL; - } - break; - } - } - } - size = stack->size - mark - 1; - obj = ppstack_at(stack, mark); - obj->type = PPDICT; - obj->dict = imagedict = ppdict_create(ppstack_at(stack, mark + 1), size, stack->heap); - ppstack_pop(stack, size); - /* put image data string */ - obj = ppstack_push(stack); - obj->type = PPSTRING; - obj->string = ppstring_inline(I, imagedict, stack->heap);; - /* put EI operator name */ - obj = ppstack_push(stack); - obj->type = PPNAME; - obj->name = ppexec_internal("EI", 2, stack->heap); - return obj; - } - break; - } - obj->type = PPNAME; - obj->name = exec; - return obj; - } - return NULL; -} - -/* -We try to get the exact inline image length from its dict params. If cannot predict the length, we have to scan the input until 'EI'. -I've checked on may examples that it gives the same results but one can never be sure, as 'EI' might happen to be a part of the data. -Stripping white char is also very heuristic; \0 is a white char in PDF and very likely to be a data byte.. weak method (pdf spec page 352). - -Revision 20190327: inline images may be compressed, in which case we can't predict the length. -*/ - -static size_t inline_image_length (ppdict *dict) -{ - ppuint w, h, bpc, colors; - ppname *cs; - - if (ppdict_get_name(dict, "F") == NULL) - { - if (ppdict_get_uint(dict, "W", &w) && ppdict_get_uint(dict, "H", &h) && ppdict_get_uint(dict, "BPC", &bpc) && (cs = ppdict_get_name(dict, "CS")) != NULL) - { - if (ppname_is(cs, "DeviceGray")) - colors = 1; - else if (ppname_is(cs, "DeviceRGB")) - colors = 3; - else if (ppname_is(cs, "DeviceCMYK")) - colors = 4; - else - return PP_LENGTH_UNKNOWN; - return (w * h * bpc * colors + 7) >> 3; - } - } - return PP_LENGTH_UNKNOWN; -} - -static ppstring * ppstring_inline (iof *I, ppdict *imagedict, ppheap *heap) -{ - iof *O; - int c, d, e; - size_t length, leftin, leftout, bytes; - - c = iof_char(I); - if (ignored_char(c)) - c = iof_next(I); - - length = inline_image_length(imagedict); - if (length != PP_LENGTH_UNKNOWN) - { - O = ppbytes_buffer(heap, length); - while (length > 0 && iof_readable(I) && iof_writable(O)) - { - leftin = iof_left(I); - leftout = iof_left(O); - bytes = length; - if (bytes > leftin) bytes = leftin; - if (bytes > leftout) bytes = leftout; - memcpy(O->pos, I->pos, bytes); - I->pos += bytes; - O->pos += bytes; - length -= bytes; - } - // gobble EI - if (ppscan_find(I) == 'E') - if (iof_next(I) == 'I') - ++I->pos; - } - else - { - O = ppbytes_buffer(heap, PPSTRING_INIT); // ? - while (c >= 0) - { - if (c == 'E') - { - d = iof_next(I); - if (d == 'I') - { - e = iof_next(I); - if (!ppnamebyte(e)) - { /* strip one newline from the end and stop */ - if (O->pos - 2 >= O->buf) // sanity - { - c = *(O->pos - 1); - if (ignored_char(c)) - { - if (c == 0x0A && *(O->pos - 2) == 0x0D) - O->pos -= 2; - else - O->pos -= 1; - } - } - break; - } - iof_put2(O, c, d); - c = e; - } - else - { - iof_put(O, c); - c = d; - } - } - else - { - iof_put(O, c); - c = iof_next(I); - } - } - } - return ppstring_buffer(O, heap); -} - -/* input reader */ - -/* -PDF input is a pseudo file that either keeps FILE * or data. Reader iof * is a proxy to input -that provides byte-by-byte interface. Our iof structure is capable to link iof_file *input, -but t avoid redundant checks on IOF_DATA flag, here we link iof *I directly to FILE * or mem buffer. -When reading from file we need an internal buffer, which should be kept rather small, as it is -only used to parse xrefs and objects (no streams). We allocate the buffer from a private heap -(not static) to avoid conflicts when processing >1 pdfs at once. Besides, the input buffer may be -needed after loading the document, eg. to access references raw data. -*/ - -#define PPDOC_BUFFER 0xFFF // keep that small, it is only used to parse body objects - -static void ppdoc_reader_init (ppdoc *pdf, iof_file *input) -{ - iof *I; - pdf->input = *input; - input = &pdf->input; - input->refcount = 1; - I = &pdf->reader; - if (input->flags & IOF_DATA) - { - pdf->buffer = NULL; // input iof_file is the buffer - iof_string_reader(I, NULL, 0); - } - else - { - pdf->buffer = (uint8_t *)ppbytes_take(&pdf->heap, PPDOC_BUFFER); - iof_setup_file_handle_reader(I, NULL, 0, iof_file_get_fh(input)); // gets IOF_FILE_HANDLE flag and FILE * - I->space = PPDOC_BUFFER; // used on refill - } -} - -/* -Whenever we need to read the input file, we fseek the to the given offset and fread to the private buffer. -The length we need is not always predictable, in which case PPDOC_BUFFER bytes are read (keep it small). -I->buf = I->pos is set to the beginning, I->end set to the end (end is the first byte one shouldn't read). -*/ - -static iof * ppdoc_reader (ppdoc *pdf, size_t offset, size_t length) -{ - iof_file *input; - iof *I; - input = &pdf->input; - I = &pdf->reader; - if (iof_file_seek(input, (long)offset, SEEK_SET) != 0) - return NULL; - I->flags &= ~IOF_STOPPED; - if (input->flags & IOF_DATA) - { - I->buf = I->pos = input->pos; - I->end = (length == PP_LENGTH_UNKNOWN || I->pos + length >= input->end) ? input->end : (I->pos + length); - } - else - { - I->buf = I->pos = pdf->buffer; // ->buf is actually permanently equal pdf->buffer but we might need some tricks - if (length == PP_LENGTH_UNKNOWN || length > PPDOC_BUFFER) - length = PPDOC_BUFFER; - length = fread(I->buf, 1, length, I->file); - I->end = I->buf + length; - } - return I; -} - -/* The position from the beginning of input -- for data buffer: (pdf->input.pos - pdf->input.buf) + (I->pos - I->buf) - I->buf == pdf->input.pos, so this resolves to (I->pos - pdf->input.buf), independent from I->buf -- for file buffer: ftell(pdf->input.file) - (I->end - I->pos) -*/ - -#define ppdoc_reader_tell(pdf, I) ((size_t)(((pdf)->input.flags & IOF_DATA) ? ((I)->pos - (pdf)->input.buf) : (ftell(iof_file_get_fh(&(pdf)->input)) - ((I)->end - (I)->pos)))) - -/* pdf */ - -#define PPDOC_HEADER 10 // "%PDF-?.??\n" - -static int ppdoc_header (ppdoc *pdf, uint8_t header[PPDOC_HEADER]) -{ - size_t i; - if (memcmp(header, "%PDF-", 5) != 0) - return 0; - for (i = 5; i < PPDOC_HEADER - 1 && !ignored_char(header[i]); ++i) - pdf->version[i - 5] = header[i]; - pdf->version[i - 5] = '\0'; - return 1; -} - -static int ppdoc_tail (ppdoc *pdf, iof_file *input, size_t *pxrefoffset) -{ - int c; - uint8_t tail[4*10], *p, back, tailbytes; - - if (iof_file_seek(input, 0, SEEK_END) != 0) - return 0; - pdf->filesize = (size_t)iof_file_tell(input); - // simple heuristic to avoid fgetc() / fseek(-2) hiccup: keep seeking back by len(startxref) + 1 == 10 - // until a letter found (assuming liberal white characters and tail length) - for (back = 1, tailbytes = 0; ; ++back) - { - if (iof_file_seek(input, -10, SEEK_CUR) != 0) - return 0; - tailbytes += 10; - c = iof_file_getc(input); - tailbytes -= 1; - switch (c) - { - case IGNORED_CHAR_CASE: - case DIGIT_CHAR_CASE: - case '%': case 'E': case 'O': case 'F': - if (back > 4) // 2 should be enough - return 0; - continue; - case 's': case 't': case 'a': case 'r': case 'x': case 'e': case 'f': - if (iof_file_read(tail, 1, tailbytes, input) != tailbytes) - return 0; - tail[tailbytes] = '\0'; - for (p = &tail[0]; ; ++p) - { - if (*p == '\0') - return 0; - if ((c = base10_value(*p)) >= 0) - break; - } - ppread_uint(p, pxrefoffset); - return 1; - default: - return 0; - } - } - return 0; // never reached -} - -/* xref/body */ - -static int ppscan_start_entry (iof *I, ppref *ref) -{ - ppuint u; - ppscan_find(I); if (!ppscan_uint(I, &u) || u != ref->number) return 0; - ppscan_find(I); if (!ppscan_uint(I, &u) || u != ref->version) return 0; - ppscan_find(I); if (!ppscan_key(I, "obj")) return 0; - ppscan_find(I); - return 1; -} - -static int ppscan_skip_entry (iof *I) -{ - ppuint u; - ppscan_find(I); if (!ppscan_uint(I, &u)) return 0; - ppscan_find(I); if (!ppscan_uint(I, &u)) return 0; - ppscan_find(I); if (!ppscan_key(I, "obj")) return 0; - ppscan_find(I); - return 1; -} - -static int ppscan_start_stream (iof *I, ppdoc *pdf, size_t *streamoffset) -{ - int c; - ppscan_find(I); - if (ppscan_key(I, "stream")) - { // PJ20180912 bugfix: we were gobbling white characters (also null byte), while "stream" may be followed by EOL - // pdf spec page 60: "CARRIAGE RETURN and a LINE FEED or just a LINE FEED, and not by a CARRIAGE RETURN alone" - c = iof_char(I); - if (c == 0x0D) - { - if (iof_next(I) == 0x0A) // should be - ++I->pos; - } - else if (c == 0x0A) - { - ++I->pos; - } - *streamoffset = ppdoc_reader_tell(pdf, I); - return 1; - } - return 0; -} - -static ppxref * ppxref_load (ppdoc *pdf, size_t xrefoffset); -static ppxref * ppxref_load_chain (ppdoc *pdf, ppxref *xref); - -/* Parsing xref table - - 1 10 // first ref number and refs count - 0000000000 00000 n // 10-digits offset, 5 digits version, type identifier - 0000000000 00000 n // n states for normal I guess - 0000000000 00000 f // f states for free (not used) - ... - -Free entries seem to be a relic of ancient times, completelly useless for us. To avoid parsing xref table twice, -we waste some space on free entries by allocating one plane of refs for each section. Later on we slice sections, -so that effectively free entries are not involved in map. - -Subsequent refs gets number, version and offset. Other fields initialized when parsing PDF body. - -Having xref table loaded, we sort sections for future binary search (xref with objects count == 0 is considered invalid). - -Then we have to deal with the trailer dict. In general, to load objects and resolve references we need a complete chain -of xrefs (not only the top). To load the previous xref, we need its offset, which is given in trailer. So we have to -parse the trailer ignoring references, which might be unresolvable at this point (objects parser makes a dummy check -for xref != NULL on refs resolving ppscan_obj(), which irritates me but I don't want a separate parser for trailer..). -The same applies to xref streams, in which we have parse the trailer not having xref map at all. So the procedure is: - - - load xref map, initialize references, make it ready to search - - parse trailer ignoring references - - get /Prev xref offset and load older xref (linked list via ->prev) - - sort all refs in all xrefs by offset - - parse refs in order resolving references in contained objects - - fix trailer references - -First created xref becomes a pdf->xref (top xref). We link that early to control offsets already read (insane loops?). -*/ - -// Every xref table item "0000000000 00000 n" is said to be terminated with 2-byte EOL but we don't like relying on whites. -#define xref_item_length (10 + 1 + 5 + 1 + 1) - -static ppxref * ppxref_load_table (iof *I, ppdoc *pdf, size_t xrefoffset) -{ - ppxref *xref; - ppxsec *xrefsection; - ppref *ref; - ppuint first, count, refindex; - uint8_t buffer[xref_item_length + 1]; - const char *p; - const ppobj *obj; - - buffer[xref_item_length] = '\0'; - xref = ppxref_create(pdf, 0, xrefoffset); - if (pdf->xref == NULL) pdf->xref = xref; - - for (ppscan_find(I); ppscan_uint(I, &first); ppscan_find(I)) - { - ppscan_find(I); - if (!ppscan_uint(I, &count)) - return NULL; - if (count == 0) // weird - continue; - xref->count += count; - xrefsection = NULL; - ref = (ppref *)ppstruct_take(&pdf->heap, count * sizeof(ppref)); - for (refindex = 0; refindex < count; ++refindex, ++ref) - { - ref->xref = xref; - ref->number = first + refindex; - ppscan_find(I); - iof_read(I, buffer, xref_item_length); - switch (buffer[xref_item_length - 1]) - { - case 'n': - if (xrefsection == NULL) - { - xrefsection = ppxref_push_section(xref, &pdf->heap); - xrefsection->first = ref->number; - xrefsection->refs = ref; - } - xrefsection->last = ref->number; - for (p = (const char *)buffer; *p == '0'; ++p); - p = ppread_uint(p, &ref->offset); - for ( ; *p == ' ' || *p == '0'; ++p); - p = ppread_uint(p, &ref->version); - ref->object.type = PPNONE; // init for sanity - ref->object.any = NULL; - ref->length = 0; - break; - case 'f': - default: - --ref; - xrefsection = NULL; - --xref->count; - } - } - } - /* sort section */ - ppxref_sort(xref); // case of xref->size == 0 handled by ppxref_load_chain() - /* get trailer ignoring refs */ - if (!ppscan_key(I, "trailer")) - return NULL; - ppscan_find(I); - if ((obj = ppscan_obj(I, pdf, NULL)) == NULL) - return NULL; - ppstack_pop(&pdf->stack, 1); - if (obj->type != PPDICT) - return NULL; - xref->trailer = *obj; - return ppxref_load_chain(pdf, xref); -} - -/* Parsing xref stream -First we load the trailer, ignoring references. Dict defines sections and fields lengths: - - /Size % max ref number plus 1 - /Index [ first count first count ... ] % a pair of numbers for every section, defaults to [0 Size] - /W [w1 w2 w3] % fields lengths, 0 states for omitted field - -xref stream data is a continuous stream of binary number triplets. First number is a type: - - 0 - free entry (as 'f' in xref table) - 1 - normal entry, followed by offset an version (as 'n' in xref table) - 2 - compressed entry, followed by parent object stream number and entry index - -0 and 1 are handled as 'n' and 'f' entries in xref table. For type 2 we normally initialize -ref->number and ref->version (the later is implicitly 0). ref->offset is set to 0 (invalid offset), -which is recognized by objects loader. -*/ - -#define XREF_STREAM_MAX_FIELD 4 - -static ppxref * ppxref_load_stream (iof *I, ppdoc *pdf, size_t xrefoffset) -{ - ppxref *xref; - ppxsec *xrefsection; - ppref *ref; - ppobj *obj; - ppstream *xrefstream; - size_t streamoffset; - ppuint w1, w2, w3, w, bufferbytes; - uint8_t buffer[3 * XREF_STREAM_MAX_FIELD], *b; - ppuint first, count, f1, f2, f3; - pparray *fieldwidths, *sectionindices; - ppobj sectionmock[2], *sectionfirst, *sectioncount; - size_t sections, sectionindex, refindex; - - if (!ppscan_skip_entry(I)) - return NULL; - if ((obj = ppscan_obj(I, pdf, NULL)) == NULL) - return NULL; - ppstack_pop(&pdf->stack, 1); - if (obj->type != PPDICT || !ppscan_start_stream(I, pdf, &streamoffset)) - return NULL; - xrefstream = ppstream_create(pdf, obj->dict, streamoffset); - ppstream_info(xrefstream, pdf); - if ((fieldwidths = ppdict_get_array(xrefstream->dict, "W")) != NULL) - { - if (!pparray_get_uint(fieldwidths, 0, &w1)) w1 = 0; - if (!pparray_get_uint(fieldwidths, 1, &w2)) w2 = 0; - if (!pparray_get_uint(fieldwidths, 2, &w3)) w3 = 0; - } - else - w1 = w2 = w3 = 0; - if (w1 > XREF_STREAM_MAX_FIELD || w2 > XREF_STREAM_MAX_FIELD || w3 > XREF_STREAM_MAX_FIELD) - return NULL; - bufferbytes = w1 + w2 + w3; - if ((sectionindices = ppdict_get_array(xrefstream->dict, "Index")) != NULL) - { - sections = sectionindices->size >> 1; - sectionfirst = sectionindices->data; - } - else - { - sections = 1; - sectionmock[0].type = PPINT; - sectionmock[0].integer = 0; - sectionmock[1].type = PPINT; - if (!ppdict_get_int(xrefstream->dict, "Size", §ionmock[1].integer)) - sectionmock[1].integer = 0; - sectionfirst = §ionmock[0]; - } - if ((I = ppstream_read(xrefstream, 1, 0)) == NULL) - return NULL; // we fseek() so original I is useless anyway - xref = ppxref_create(pdf, sections, xrefoffset); - if (pdf->xref == NULL) pdf->xref = xref; - xref->trailer.type = PPSTREAM; - xref->trailer.stream = xrefstream; - for (sectionindex = 0; sectionindex < sections; ++sectionindex, sectionfirst += 2) - { - sectioncount = sectionfirst + 1; - first = 0, count = 0; // warnings - if (!ppobj_get_uint(sectionfirst, first) || !ppobj_get_uint(sectioncount, count)) - goto xref_stream_error; - if (count == 0) - continue; - xref->count += count; - xrefsection = NULL; - ref = (ppref *)ppstruct_take(&pdf->heap, count * sizeof(ppref)); - for (refindex = 0; refindex < count; ++refindex, ++ref) - { - ref->xref = xref; - ref->number = first + refindex; - if (iof_read(I, buffer, bufferbytes) != bufferbytes) - goto xref_stream_error; - b = buffer; - if (w1 == 0) - f1 = 1; // default type is 1 - else - for (f1 = 0, w = 0; w < w1; f1 = (f1 << 8)|(*b), ++w, ++b); - for (f2 = 0, w = 0; w < w2; f2 = (f2 << 8)|(*b), ++w, ++b); - for (f3 = 0, w = 0; w < w3; f3 = (f3 << 8)|(*b), ++w, ++b); - switch (f1) - { - case 0: - //--ref; - xrefsection = NULL; - --xref->count; - break; - case 1: - if (xrefsection == NULL) - { - xrefsection = ppxref_push_section(xref, &pdf->heap); - xrefsection->first = ref->number; - xrefsection->refs = ref; - } - xrefsection->last = ref->number; - ref->offset = f2; - ref->version = f3; - ref->object.type = PPNONE; - ref->object.any = NULL; - ref->length = 0; - break; - case 2: - if (xrefsection == NULL) - { - xrefsection = ppxref_push_section(xref, &pdf->heap); - xrefsection->first = ref->number; - xrefsection->refs = ref; - } - xrefsection->last = ref->number; - ref->offset = 0; // f2 is parent objstm, f3 is index in parent, both useless - ref->version = 0; // compressed objects has implicit version == 0 - ref->object.type = PPNONE; - ref->object.any = NULL; - ref->length = 0; - break; - default: - goto xref_stream_error; - } - } - } - /* sort sections */ - ppxref_sort(xref); // case of xref->size == 0 handled by ppxref_load_chain() - /* close the stream _before_ loading prev xref */ - ppstream_done(xrefstream); - /* load prev and return */ - return ppxref_load_chain(pdf, xref); -xref_stream_error: - ppstream_done(xrefstream); - return NULL; -} - -/* -The following procedure loads xref /Prev, links xref->prev and typically returns xref. -Some docs contain empty xref (one section with zero objects) that is actually a proxy -to xref stream referred as /XRefStm (genuine concept of xrefs old/new style xrefs in -the same doc). In case of 0-length xref we ignore the proxy and return the target xref -(otherwise we would need annoying sanity check for xref->size > 0 on every ref search). -*/ - -static ppxref * ppxref_load_chain (ppdoc *pdf, ppxref *xref) -{ - ppdict *trailer; - ppuint xrefoffset; - ppxref *prevxref, *nextxref; - - trailer = ppxref_trailer(xref); - if (!ppdict_get_uint(trailer, "Prev", &xrefoffset)) // XRefStm is useless - return xref; - for (nextxref = pdf->xref; nextxref != NULL; nextxref = nextxref->prev) - if (nextxref->offset == xrefoffset) // insane - return NULL; - if ((prevxref = ppxref_load(pdf, (size_t)xrefoffset)) == NULL) - return NULL; - if (xref->size > 0) - { - xref->prev = prevxref; - return xref; - } - if (pdf->xref == xref) - pdf->xref = prevxref; - return prevxref; -} - -static ppxref * ppxref_load (ppdoc *pdf, size_t xrefoffset) -{ - iof *I; - - if ((I = ppdoc_reader(pdf, xrefoffset, PP_LENGTH_UNKNOWN)) == NULL) - return NULL; - ppscan_find(I); - if (ppscan_key(I, "xref")) - return ppxref_load_table(I, pdf, xrefoffset); - return ppxref_load_stream(I, pdf, xrefoffset); - // iof_close(I) does nothing here -} - -static void ppoffmap_sort (ppref **left, ppref **right) -{ - ppref **l, **r, *t; - ppuint pivot; - l = left, r = right; - pivot = (*(l + ((r - l) / 2)))->offset; - do - { // don't read from pointer! - while ((*l)->offset < pivot) ++l; - while ((*r)->offset > pivot) --r; - if (l <= r) - { - t = *l; - *l = *r; - *r = t; - ++l, --r; - } - } while (l <= r); - if (left < r) - ppoffmap_sort(left, r); - if (l < right) - ppoffmap_sort(l, right); -} - - -static void fix_trailer_references (ppdoc *pdf) -{ - ppxref *xref; - ppdict *trailer; - ppname **pkey; - ppobj *obj; - ppref *ref; - for (xref = pdf->xref; xref != NULL; xref = xref->prev) - { - if ((trailer = ppxref_trailer(xref)) == NULL) - continue; - for (ppdict_first(trailer, pkey, obj); *pkey != NULL; ppdict_next(pkey, obj)) - { // no need to go deeper in structs, all items in trailer except info and root must be direct refs - if (obj->type != PPREF) - continue; - ref = obj->ref; - if (ref->offset == 0) // unresolved? - if ((ref = ppxref_find(xref, ref->number)) != NULL) - obj->ref = ref; // at this moment the reference still points nothing, but should be the one with the proper offset - } - } -} - -/* -Here comes a procedure that loads all entries from all document bodies. We resolve references while -parsing objects and to make resolving correct, we need a complete chain of xref maps, and a knowledge -about possible linearized dict (first offset). So loading refs sorted by offsets makes sense (not sure -if it matters nowadays but we also avoid fseek() by large offsets). - -Here is the proc: - - - create a list of all refs in all bodies - - sort the list by offsets - - for every ref from the sorted list: - - estimate object length to avoid fread-ing more than necessary (not perfect but enough) - - fseek() to the proper offset, fread() entry data or its part - - parse the object with ppscan_obj(I, pdf, xref), where xref is not necessarily top pdf->xref - (since v0.98 xref actually no longer matters, see xref_find() notes) - - save the actual ref->length (not used so far, but we keep that so..) - - make a stream if a dict is followed by "stream" keyword, also save the stream offset - - free the list - -PJ2080916: Luigi and Hans fixeed a bug (rev 6491); a document having a stream with /Length being -a reference, that was stored in /ObjStm, and therefore not yet resolved when caching /Length key -value as stream->offset (ppstream_info()). At the end, references were resolved propertly, but -the stream was no readable; stream->offset == 0. In rev6491 ObjStm streams are loaded before -others streams. -*/ - -static int ppdoc_load_objstm (ppstream *stream, ppdoc *pdf, ppxref *xref); - -#define ppref_is_objstm(ref, stream, type) \ - ((ref)->xref->trailer.type == PPSTREAM && (type = ppdict_get_name((stream)->dict, "Type")) != NULL && ppname_is(type, "ObjStm")) - - -static void ppdoc_load_entries (ppdoc *pdf) -{ - size_t objects, sectionindex, refnumber, offindex; - size_t streams = 0, object_streams = 0, redundant_indirections = 0; - ppnum linearized; - ppref **offmap, **pref, *ref; - ppxref *xref; - ppxsec *xsec; - ppobj *obj; - ppname *type; - ppcrypt *crypt; - ppstream *stream; - - if ((objects = (size_t)ppdoc_objects(pdf)) == 0) // can't happen - return; - pref = offmap = (ppref **)pp_malloc(objects * sizeof(ppref *)); - objects = 0; // recount refs with offset > 0 - for (xref = pdf->xref; xref != NULL; xref = xref->prev) - for (sectionindex = 0, xsec = xref->sects; sectionindex < xref->size; ++sectionindex, ++xsec) - for (refnumber = xsec->first, ref = xsec->refs; refnumber <= xsec->last; ++refnumber, ++ref) - if (ref->offset > 0) // 0 means compressed or insane - *pref++ = ref, ++objects; - ppoffmap_sort(offmap, offmap + objects - 1); - - crypt = pdf->crypt; - for (offindex = 0, pref = offmap; offindex < objects; ) - { - ref = *pref; - ++pref; - ++offindex; - if (ref->object.type != PPNONE) // might be preloaded already (/Encrypt dict, stream filter dicts, stream /Length..) - continue; - if (offindex < objects) - ref->length = (*pref)->offset - ref->offset; - else - ref->length = pdf->filesize > ref->offset ? pdf->filesize - ref->offset : 0; - if (crypt != NULL) - { - ppcrypt_start_ref(crypt, ref); - obj = ppdoc_load_entry(pdf, ref); - ppcrypt_end_ref(crypt); - } - else - { - obj = ppdoc_load_entry(pdf, ref); - } - switch (obj->type) - { - case PPDICT: /* Check if the object at first offset is linearized dict. We need that to resolve all references properly. */ - if (offindex == 1 && ppdict_get_num(obj->dict, "Linearized", &linearized)) // /Linearized value is a version number, default 1.0 - pdf->flags |= PPDOC_LINEARIZED; - break; - case PPSTREAM: - ++streams; - if (ppref_is_objstm(ref, obj->stream, type)) - ++object_streams; - break; - case PPREF: - ++redundant_indirections; - break; - default: - break; - } - } - - /* cut references pointing to references (rare). doing for all effectively cuts all insane chains */ - for (pref = offmap; redundant_indirections > 0; ) - { - ref = *pref++; - if (ref->object.type == PPREF) - { - --redundant_indirections; - ref->object = ref->object.ref->object; - } - } - - /* load pdf 1.5 object streams _before_ other streams */ - for (pref = offmap; object_streams > 0; ) - { - ref = *pref++; - obj = &ref->object; - if (obj->type != PPSTREAM) - continue; - stream = obj->stream; - if (ppref_is_objstm(ref, stream, type)) - { - --object_streams; - if (crypt != NULL) - { - ppcrypt_start_ref(crypt, ref); - ppstream_info(stream, pdf); - ppcrypt_end_ref(crypt); - } - else - { - ppstream_info(stream, pdf); - } - if (!ppdoc_load_objstm(stream, pdf, ref->xref)) - loggerf("invalid objects stream %s at offset " PPSIZEF, ppref_str(ref->number, ref->version), ref->offset); - - } - } - - /* now handle other streams */ - for (pref = offmap; streams > 0; ) - { - ref = *pref++; - obj = &ref->object; - if (obj->type != PPSTREAM) - continue; - --streams; - stream = obj->stream; - if (crypt != NULL) - { - ppcrypt_start_ref(crypt, ref); - ppstream_info(stream, pdf); - ppcrypt_end_ref(crypt); - } - else - { - ppstream_info(stream, pdf); - } - } - pp_free(offmap); -} - -ppobj * ppdoc_load_entry (ppdoc *pdf, ppref *ref) -{ - iof *I; - size_t length; - ppxref *xref; - ppobj *obj; - ppstack *stack; - size_t streamoffset; - ppref *refref; - ppuint refnumber, refversion; - - length = ref->length > 0 ? ref->length : PP_LENGTH_UNKNOWN; // estimated or unknown - if ((I = ppdoc_reader(pdf, ref->offset, length)) == NULL || !ppscan_start_entry(I, ref)) - { - loggerf("invalid %s offset " PPSIZEF, ppref_str(ref->number, ref->version), ref->offset); - return &ref->object; // PPNONE - } - stack = &pdf->stack; - xref = ref->xref; - if ((obj = ppscan_obj(I, pdf, xref)) == NULL) - { - loggerf("invalid %s object at offset " PPSIZEF, ppref_str(ref->number, ref->version), ref->offset); - return &ref->object; // PPNONE - } - ref->object = *obj; - ppstack_pop(stack, 1); - obj = &ref->object; - ref->length = ppdoc_reader_tell(pdf, I) - ref->offset; - if (obj->type == PPDICT) - { - if (ppscan_start_stream(I, pdf, &streamoffset)) - { - obj->type = PPSTREAM; - obj->stream = ppstream_create(pdf, obj->dict, streamoffset); - } - } - else if (obj->type == PPINT) - { - ppscan_find(I); - if (ppscan_uint(I, &refversion) && ppscan_find(I) == 'R') - { - refnumber = (ppuint)obj->integer; - if ((refref = ppxref_find(xref, refnumber)) != NULL) - { - obj->type = PPREF; - obj->ref = refref; - } - else - { - obj->type = PPNONE; // as ppref_unresolved() - obj->any = NULL; - } - } - } - return obj; -} - -/* Loading entries from object stream - - /N is the number of contained entries - /First is the offset of the first item - -The stream consists of N pairs of numbers <objnum> <offset> <objnum> <offset> ... -Offsets are ascending (relative to the first), but ref numbers order is arbitrary. -PDF spec says there might be some additional data between objects, so we should obey offsets. -Which means we should basically load the stream at once (may be needed anyway to grab the stream [...]). -*/ - -static int ppdoc_load_objstm (ppstream *stream, ppdoc *pdf, ppxref *xref) -{ - ppdict *dict; // stream dict, actually still on stack - ppref *ref; - ppobj *obj; - ppuint items, firstoffset, offset, objnum, i, invalid = 0; - iof *I; - uint8_t *firstdata, *indexdata; - ppstack *stack; - - dict = stream->dict; - if (!ppdict_rget_uint(dict, "N", &items) || !ppdict_rget_uint(dict, "First", &firstoffset)) - return 0; - if ((I = ppstream_read(stream, 1, 1)) == NULL) - return 0; - firstdata = I->pos + firstoffset; - if (firstdata >= I->end) - goto invalid_objstm; - stack = &pdf->stack; - //if (pdf->crypt != NULL) - // ppcrypt_end_ref(pdf->crypt); // objects are not encrypted, pdf->crypt->ref ensured NULL - for (i = 0; i < items; ++i) - { - ppscan_find(I); - if (!ppscan_uint(I, &objnum)) - goto invalid_objstm; - ppscan_find(I); - if (!ppscan_uint(I, &offset)) - goto invalid_objstm; - if ((ref = ppxref_find_local(xref, objnum)) == NULL || ref->object.type != PPNONE) - { - loggerf("invalid compressed object number " PPUINTF " at position " PPUINTF, objnum, i); - ++invalid; - continue; - } - if (firstdata + offset >= I->end) - { - loggerf("invalid compressed object offset " PPUINTF " at position " PPUINTF, offset, i); - ++invalid; - continue; - } - indexdata = I->pos; // save position - I->pos = firstdata + offset; // go to the object - ppscan_find(I); - if ((obj = ppscan_obj(I, pdf, xref)) != NULL) - { - ref->object = *obj; - ppstack_pop(stack, 1); - // nothing more needed, as obj can never be indirect ref or stream - } - else - { - ++invalid; - loggerf("invalid compressed object %s at stream offset " PPUINTF, ppref_str(objnum, 0), offset); - } - I->pos = indexdata; // restore position and read next from index - } - ppstream_done(stream); - return invalid == 0; -invalid_objstm: - ppstream_done(stream); - return 0; -} - -/* main PDF loader proc */ - -ppcrypt_status ppdoc_crypt_pass (ppdoc *pdf, const void *userpass, size_t userpasslength, const void *ownerpass, size_t ownerpasslength) -{ - switch (pdf->cryptstatus) - { - case PPCRYPT_NONE: - case PPCRYPT_DONE: - case PPCRYPT_FAIL: - break; - case PPCRYPT_PASS: // initial status or really needs password - pdf->cryptstatus = ppdoc_crypt_init(pdf, userpass, userpasslength, ownerpass, ownerpasslength); - switch (pdf->cryptstatus) - { - case PPCRYPT_NONE: - case PPCRYPT_DONE: - ppdoc_load_entries(pdf); - break; - case PPCRYPT_PASS: // user needs to check ppdoc_crypt_status() and recall ppdoc_crypt_pass() with the proper password - case PPCRYPT_FAIL: // hopeless.. - break; - } - break; - } - return pdf->cryptstatus; -} - -static ppdoc * ppdoc_read (ppdoc *pdf, iof_file *input) -{ - uint8_t header[PPDOC_HEADER]; - size_t xrefoffset; - - input = &pdf->input; - if (iof_file_read(header, 1, PPDOC_HEADER, input) != PPDOC_HEADER || !ppdoc_header(pdf, header)) - return NULL; - if (!ppdoc_tail(pdf, input, &xrefoffset)) - return NULL; - if (ppxref_load(pdf, xrefoffset) == NULL) - return NULL; - fix_trailer_references(pdf); // after loading xrefs but before accessing trailer refs (/Encrypt might be a reference) - // check encryption, if any, try empty password - switch (ppdoc_crypt_pass(pdf, "", 0, NULL, 0)) - { - case PPCRYPT_NONE: // no encryption - case PPCRYPT_DONE: // encryption with an empty password - case PPCRYPT_PASS: // the user needs to check ppdoc_crypt_status() and call ppdoc_crypt_pass() - break; - case PPCRYPT_FAIL: // hopeless - //loggerf("decryption failed"); - //return NULL; - break; - } - return pdf; -} - -static void ppdoc_pages_init (ppdoc *pdf); - -/* -20191214: We used to allocate ppdoc, as all other structs, from the internal heap: - - ppheap heap; - ppheap_init(&heap); - pdf = (ppdoc *)ppstruct_take(&heap, sizeof(ppdoc)); - pdf->heap = heap; - ppbytes_buffer_init(&pdf->heap); - ... - -So ppdoc pdf was allocated from the heap owned by the pdf itself. Somewhat tricky, but should work fine, -as from that point nothing refered to a local heap variable addres. For some reason that causes a crash -on openbsd. -*/ - -static ppdoc * ppdoc_create (iof_file *input) -{ - ppdoc *pdf; - - pdf = (ppdoc *)pp_malloc(sizeof(ppdoc)); - ppheap_init(&pdf->heap); - ppbytes_buffer_init(&pdf->heap); - ppstack_init(&pdf->stack, &pdf->heap); - ppdoc_reader_init(pdf, input); - ppdoc_pages_init(pdf); - pdf->xref = NULL; - pdf->crypt = NULL; - pdf->cryptstatus = PPCRYPT_PASS; // check on ppdoc_read() -> ppdoc_crypt_pass() - pdf->flags = 0; - pdf->version[0] = '\0'; - if (ppdoc_read(pdf, &pdf->input) != NULL) - return pdf; - ppdoc_free(pdf); - return NULL; -} - -ppdoc * ppdoc_load (const char *filename) -{ - FILE *file; - iof_file input; - if ((file = fopen(filename, "rb")) == NULL) - return NULL; - iof_file_init(&input, file); - input.flags |= IOF_CLOSE_FILE; - return ppdoc_create(&input); -} - -ppdoc * ppdoc_filehandle (FILE *file, int closefile) -{ - iof_file input; - if (file == NULL) - return NULL; - iof_file_init(&input, file); - if (closefile) - input.flags |= IOF_CLOSE_FILE; - return ppdoc_create(&input); -} - -ppdoc * ppdoc_mem (const void *data, size_t size) -{ - iof_file input; - iof_file_rdata_init(&input, data, size); - input.flags |= IOF_BUFFER_ALLOC; - return ppdoc_create(&input); -} - -void ppdoc_free (ppdoc *pdf) -{ - iof_file_decref(&pdf->input); - ppstack_free_buffer(&pdf->stack); - ppheap_free(&pdf->heap); - pp_free(pdf); -} - -ppcrypt_status ppdoc_crypt_status (ppdoc *pdf) -{ - return pdf->cryptstatus; -} - -ppint ppdoc_permissions (ppdoc *pdf) -{ - return pdf->crypt != NULL ? pdf->crypt->permissions : (ppint)0xFFFFFFFFFFFFFFFF; -} - -/* pages access */ - -static pparray * pppage_node (ppdict *dict, ppuint *count, ppname **type) -{ - ppname **pkey, *key; - ppobj *obj; - pparray *kids = NULL; - *count = 0; - *type = NULL; - for (ppdict_first(dict, pkey, obj); (key = *pkey) != NULL; ppdict_next(pkey, obj)) - { - switch (key->data[0]) - { - case 'T': - if (ppname_is(key, "Type")) - *type = ppobj_get_name(obj); - break; - case 'C': - if (ppname_is(key, "Count")) - ppobj_rget_uint(obj, *count); - break; - case 'K': - if (ppname_is(key, "Kids")) - kids = ppobj_rget_array(obj); - break; - } - } - return kids; -} - -#define ppname_is_page(type) (type != NULL && ppname_is(type, "Page")) - -ppuint ppdoc_page_count (ppdoc *pdf) -{ - ppref *ref; - ppname *type; - ppuint count; - if ((ref = ppxref_pages(pdf->xref)) == NULL) - return 0; - if (pppage_node(ref->object.dict, &count, &type) == NULL) - return ppname_is_page(type) ? 1 : 0; // acrobat and ghostscript accept documents with root /Pages entry being a reference to a sole /Page object - return count; -} - -ppref * ppdoc_page (ppdoc *pdf, ppuint index) -{ - ppdict *dict; - ppuint count; - pparray *kids; - size_t size, i; - ppobj *r, *o; - ppref *ref; - ppname *type; - - if ((ref = ppxref_pages(pdf->xref)) == NULL) - return NULL; - dict = ref->object.dict; - if ((kids = pppage_node(dict, &count, &type)) != NULL) - { - if (index < 1 || index > count) - return NULL; - } - else - { - return index == 1 && ppname_is_page(type) ? ref : NULL; - } -scan_array: - if (index <= count / 2) - { // probably shorter way from the beginning - for (i = 0, size = kids->size, r = pparray_at(kids, 0); i < size; ++i, ++r) - { - if (r->type != PPREF) - return NULL; - o = &r->ref->object; - if (o->type != PPDICT) - return NULL; - dict = o->dict; - if ((kids = pppage_node(dict, &count, &type)) != NULL) - { - if (index <= count) - goto scan_array; - index -= count; - continue; - } - if (index == 1 && ppname_is_page(type)) - return r->ref; - --index; - } - } - else if ((size = kids->size) > 0) // for safe (size-1) - { // probably shorter way from the end - index = count - index + 1; - for (i = 0, r = pparray_at(kids, size - 1); i < size; ++i, --r) - { - if (r->type != PPREF) - return NULL; - o = &r->ref->object; - if (o->type != PPDICT) - return NULL; - dict = o->dict; - if ((kids = pppage_node(dict, &count, &type)) != NULL) - { - if (index <= count) { - index = count - index + 1; - goto scan_array; - } - index -= count; - continue; - } - if (index == 1 && ppname_is_page(type)) - return r->ref; - --index; - } - } - return NULL; -} - -/* -Through pages iterator. Iterating over pages tree just on the base of /Kids and /Parent keys -is ineffective, as to get next pageref we need to take parent, find the pageref in /Kids, -take next (or go upper).. Annoying. We use a dedicated stack for pages iterator. This could -actually be done with pdf->stack, but some operations may clear it, so safer to keep it independent -Besides, its depth is constant (set on first use), so no need for allocs. -*/ - -static void ppdoc_pages_init (ppdoc *pdf) -{ - pppages *pages; - pages = &pdf->pages; - pages->root = pages->parent = &pages->buffer[0]; - pages->depth = 0; - pages->space = PPPAGES_STACK_DEPTH; -} - -static ppkids * pppages_push (ppdoc *pdf, pparray *kids) -{ - ppkids *newroot, *bounds; - pppages *pages; - pages = &pdf->pages; - if (pages->depth == pages->space) - { - pages->space <<= 1; - newroot = (ppkids *)ppstruct_take(&pdf->heap, pages->space * sizeof(ppkids)); - memcpy(newroot, pages->root, pages->depth * sizeof(ppkids)); - pages->root = newroot; - } - bounds = pages->parent = &pages->root[pages->depth++]; - bounds->current = pparray_at(kids, 0); - bounds->sentinel = pparray_at(kids, kids->size); - return bounds; -} - -#define pppages_pop(pages) (--((pages)->parent), --((pages)->depth)) - -static ppref * ppdoc_pages_group_first (ppdoc *pdf, ppref *ref) -{ - ppdict *dict; - pparray *kids; - ppuint count; - ppname *type; - ppobj *o; - - dict = ref->object.dict; // typecheck made by callers - while ((kids = pppage_node(dict, &count, &type)) != NULL) - { - if ((o = pparray_get_obj(kids, 0)) == NULL) // empty /Kids - return ppdoc_next_page(pdf); - if ((ref = ppobj_get_ref(o)) == NULL || ref->object.type != PPDICT) - return NULL; - pppages_push(pdf, kids); - dict = ref->object.dict; - } - return ppname_is_page(type) ? ref : NULL; -} - -ppref * ppdoc_first_page (ppdoc *pdf) -{ - ppref *ref; - pppages *pages; - if ((ref = ppdoc_pages(pdf)) == NULL) - return NULL; - pages = &pdf->pages; - pages->parent = pages->root; - pages->depth = 0; - return ppdoc_pages_group_first(pdf, ref); -} - -ppref * ppdoc_next_page (ppdoc *pdf) -{ - pppages *pages; - ppkids *bounds; - ppref *ref; - ppobj *obj; - pages = &pdf->pages; - while (pages->depth > 0) - { - bounds = pages->parent; - obj = ++bounds->current; - if (obj < bounds->sentinel) - { - if (obj->type != PPREF) - return NULL; - ref = obj->ref; - if (ref->object.type != PPDICT) - return NULL; - return ppdoc_pages_group_first(pdf, ref); - } - else - { // no next node, go upper - pppages_pop(pages); - } - } - return NULL; -} - -/* context */ - -ppcontext * ppcontext_new (void) -{ - ppcontext *context; - context = (ppcontext *)pp_malloc(sizeof(ppcontext)); - ppheap_init(&context->heap); - ppbytes_buffer_init(&context->heap); - ppstack_init(&context->stack, &context->heap); - return context; -} - -void ppcontext_done (ppcontext *context) -{ - ppheap_renew(&context->heap); - ppstack_clear(&context->stack); -} - -void ppcontext_free (ppcontext *context) -{ - ppstack_free_buffer(&context->stack); - ppheap_free(&context->heap); - pp_free(context); -} - -/* page contents streams */ - -//#define ppcontents_first_stream(array) pparray_rget_stream(array, 0) - -static ppstream * ppcontents_first_stream (pparray *array) -{ - size_t i; - ppobj *obj; - ppref *ref; - for (pparray_first(array, i, obj); i < array->size; pparray_next(i, obj)) - if ((ref = ppobj_get_ref(obj)) != NULL && ref->object.type == PPSTREAM) - return ref->object.stream; - return NULL; -} - -static ppstream * ppcontents_next_stream (pparray *array, ppstream *stream) -{ - size_t i; - ppobj *obj; - ppref *ref; - for (pparray_first(array, i, obj); i < array->size; pparray_next(i, obj)) - if ((ref = ppobj_get_ref(obj)) != NULL && ref->object.type == PPSTREAM && ref->object.stream == stream) - if (++i < array->size && (ref = ppobj_get_ref(obj + 1)) != NULL && ref->object.type == PPSTREAM) - return ref->object.stream; - return NULL; -} - -ppstream * ppcontents_first (ppdict *dict) -{ - ppobj *contentsobj; - if ((contentsobj = ppdict_rget_obj(dict, "Contents")) == NULL) - return NULL; - switch (contentsobj->type) - { - case PPARRAY: - return ppcontents_first_stream(contentsobj->array); - case PPSTREAM: - return contentsobj->stream; - default: - break; - } - return NULL; -} - -ppstream * ppcontents_next (ppdict *dict, ppstream *stream) -{ - ppobj *contentsobj; - if ((contentsobj = ppdict_rget_obj(dict, "Contents")) == NULL) - return NULL; - switch (contentsobj->type) - { - case PPARRAY: - return ppcontents_next_stream(contentsobj->array, stream); - case PPSTREAM: - break; - default: - break; - } - return NULL; -} - -static ppobj * ppcontents_op (iof *I, ppstack *stack, size_t *psize, ppname **pname) -{ - ppobj *obj; - ppstack_clear(stack); - do { - if (ppscan_find(I) < 0) - return NULL; - if ((obj = ppscan_psobj(I, stack)) == NULL) - return NULL; - } while (obj->type != PPNAME || !ppname_exec(obj->name)); - *pname = obj->name; - *psize = stack->size - 1; - return stack->buf; -} - -ppobj * ppcontents_first_op (ppcontext *context, ppstream *stream, size_t *psize, ppname **pname) -{ - iof *I; - if ((I = ppstream_read(stream, 1, 0)) == NULL) - return NULL; - return ppcontents_op(I, &context->stack, psize, pname); -} - -ppobj * ppcontents_next_op (ppcontext *context, ppstream *stream, size_t *psize, ppname **pname) -{ - return ppcontents_op(ppstream_iof(stream), &context->stack, psize, pname); -} - -ppobj * ppcontents_parse (ppcontext *context, ppstream *stream, size_t *psize) -{ - iof *I; - ppstack *stack; - ppobj *obj; - stack = &context->stack; - ppstack_clear(stack); - if ((I = ppstream_read(stream, 1, 0)) == NULL) - return NULL; - while (ppscan_find(I) >= 0) - if ((obj = ppscan_psobj(I, stack)) == NULL) - goto error; - *psize = stack->size; - ppstream_done(stream); - return stack->buf; -error: - ppstream_done(stream); - return NULL; -} - -/* boxes */ - -pprect * pparray_to_rect (pparray *array, pprect *rect) -{ - ppobj *obj; - if (array->size != 4) - return NULL; - obj = pparray_at(array, 0); - if (!ppobj_get_num(obj, rect->lx)) return NULL; - obj = pparray_at(array, 1); - if (!ppobj_get_num(obj, rect->ly)) return NULL; - obj = pparray_at(array, 2); - if (!ppobj_get_num(obj, rect->rx)) return NULL; - obj = pparray_at(array, 3); - if (!ppobj_get_num(obj, rect->ry)) return NULL; - return rect; -} - -pprect * ppdict_get_rect (ppdict *dict, const char *name, pprect *rect) -{ - pparray *array; - return (array = ppdict_rget_array(dict, name)) != NULL ? pparray_to_rect(array, rect) : NULL; -} - -pprect * ppdict_get_box (ppdict *dict, const char *name, pprect *rect) -{ - do { - if (ppdict_get_rect(dict, name, rect) != NULL) - return rect; - dict = ppdict_rget_dict(dict, "Parent"); - } while (dict != NULL); - return NULL; -} - -ppmatrix * pparray_to_matrix (pparray *array, ppmatrix *matrix) -{ - ppobj *obj; - if (array->size != 6) - return NULL; - obj = pparray_at(array, 0); - if (!ppobj_get_num(obj, matrix->xx)) return NULL; - obj = pparray_at(array, 1); - if (!ppobj_get_num(obj, matrix->xy)) return NULL; - obj = pparray_at(array, 2); - if (!ppobj_get_num(obj, matrix->yx)) return NULL; - obj = pparray_at(array, 3); - if (!ppobj_get_num(obj, matrix->yy)) return NULL; - obj = pparray_at(array, 4); - if (!ppobj_get_num(obj, matrix->x)) return NULL; - obj = pparray_at(array, 5); - if (!ppobj_get_num(obj, matrix->y)) return NULL; - return matrix; -} - -ppmatrix * ppdict_get_matrix (ppdict *dict, const char *name, ppmatrix *matrix) -{ - pparray *array; - return (array = ppdict_rget_array(dict, name)) != NULL ? pparray_to_matrix(array, matrix) : NULL; -} - -/* logger */ - -void pplog_callback (pplogger_callback logger, void *alien) -{ - logger_callback((logger_function)logger, alien); -} - -int pplog_prefix (const char *prefix) -{ - return logger_prefix(prefix); -} - -/* version */ - -const char * ppdoc_version_string (ppdoc *pdf) -{ - return pdf->version; -} - -int ppdoc_version_number (ppdoc *pdf, int *minor) -{ - *minor = pdf->version[2] - '0'; - return pdf->version[0] - '0'; -} - -/* doc info */ - -size_t ppdoc_file_size (ppdoc *pdf) -{ - return pdf->filesize; -} - -ppuint ppdoc_objects (ppdoc *pdf) -{ - ppuint count; - ppxref *xref; - for (count = 0, xref = pdf->xref; xref != NULL; xref = xref->prev) - count += xref->count; - return count; -} - -size_t ppdoc_memory (ppdoc *pdf, size_t *waste) -{ - mem_info info; - size_t used; - ppbytes_heap_info(&pdf->heap, &info, 0); - ppstruct_heap_info(&pdf->heap, &info, 1); - - *waste = info.ghosts + info.blockghosts + info.left; // info.ghosts == 0 - used = info.used + *waste; - used += pdf->stack.space * sizeof(ppobj); - return used; -} diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/ppload.h b/Build/source/texk/web2c/luatexdir/luapplib/src/ppload.h deleted file mode 100644 index f9ecca3b9a0..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/ppload.h +++ /dev/null @@ -1,58 +0,0 @@ - -#ifndef PP_LOAD_H -#define PP_LOAD_H - -typedef struct { - ppobj *buf; // ppobjects buffer (allocated, not from our heap) - ppobj *pos; // current ppobj * - size_t size; // stack size - size_t space; // available space - ppheap *heap; // allocator (parent pdf->stack->heap or parent context) -} ppstack; - -typedef struct { - ppobj *current; - ppobj *sentinel; -} ppkids; - -#define PPPAGES_STACK_DEPTH 4 - -typedef struct { - ppkids buffer[PPPAGES_STACK_DEPTH]; - ppkids *root; - ppkids *parent; - ppuint depth; - ppuint space; -} pppages; - -struct ppdoc { - /* input */ - iof_file input; - iof reader; - uint8_t *buffer; - size_t filesize; - /* heap */ - ppheap heap; - ppstack stack; - /* output struct */ - ppxref *xref; - pppages pages; - ppcrypt *crypt; - ppcrypt_status cryptstatus; - int flags; - char version[5]; -}; - -#define PPDOC_LINEARIZED (1 << 0) - -ppobj * ppdoc_load_entry (ppdoc *pdf, ppref *ref); -#define ppobj_preloaded(pdf, obj) ((obj)->type != PPREF ? (obj) : ((obj)->ref->object.type == PPNONE ? ppdoc_load_entry(pdf, (obj)->ref) : &(obj)->ref->object)) - -ppstring * ppstring_internal (const void *data, size_t size, ppheap *heap); - -struct ppcontext { - ppheap heap; - ppstack stack; -}; - -#endif
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/ppstream.c b/Build/source/texk/web2c/luatexdir/luapplib/src/ppstream.c deleted file mode 100644 index c88d7e7fc33..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/ppstream.c +++ /dev/null @@ -1,491 +0,0 @@ - -#include "ppfilter.h" -#include "pplib.h" - -ppstream * ppstream_create (ppdoc *pdf, ppdict *dict, size_t offset) -{ - ppstream *stream; - stream = (ppstream *)ppstruct_take(&pdf->heap, sizeof(ppstream)); - stream->dict = dict; - stream->offset = offset; - //if (!ppdict_rget_uint(dict, "Length", &stream->length)) // may be indirect pointing PPNONE at this moment - // stream->length = 0; - stream->length = 0; - stream->filespec = NULL; - stream->filter.filters = NULL; - stream->filter.params = NULL; - stream->filter.count = 0; - stream->input = &pdf->input; - stream->I = NULL; - stream->cryptkey = NULL; - stream->flags = 0; - return stream; -} - -static iof * ppstream_predictor (ppdict *params, iof *N) -{ - ppint predictor, rowsamples, components, samplebits; - - if (!ppdict_get_int(params, "Predictor", &predictor) || predictor <= 1) - return N; - if (!ppdict_get_int(params, "Columns", &rowsamples) || rowsamples == 0) // sanity, filter probably expects >0 - rowsamples = 1;; - if (!ppdict_get_int(params, "Colors", &components) || components == 0) // ditto - components = 1; - if (!ppdict_get_int(params, "BitsPerComponent", &samplebits) || samplebits == 0) - samplebits = 8; - return iof_filter_predictor_decoder(N, (int)predictor, (int)rowsamples, (int)components, (int)samplebits); -} - -static iof * ppstream_decoder (ppstream *stream, ppstreamtp filtertype, ppdict *params, iof *N) -{ - int flags; - iof *F, *P; - ppint earlychange; - ppstring *cryptkey; - - switch (filtertype) - { - case PPSTREAM_BASE16: - return iof_filter_base16_decoder(N); - case PPSTREAM_BASE85: - return iof_filter_base85_decoder(N); - case PPSTREAM_RUNLENGTH: - return iof_filter_runlength_decoder(N); - case PPSTREAM_FLATE: - if ((F = iof_filter_flate_decoder(N)) != NULL) - { - if (params != NULL) - { - if ((P = ppstream_predictor(params, F)) != NULL) - return P; - iof_close(F); - break; - } - return F; - } - break; - case PPSTREAM_LZW: - flags = LZW_DECODER_DEFAULTS; - if (params != NULL && ppdict_get_int(params, "EarlyChange", &earlychange) && earlychange == 0) // integer, not boolean - flags &= ~LZW_EARLY_INDEX; - if ((F = iof_filter_lzw_decoder(N, flags)) != NULL) - { - if (params != NULL) - { - if ((P = ppstream_predictor(params, F)) != NULL) - return P; - iof_close(F); - break; - } - return F; - } - break; - case PPSTREAM_CRYPT: - if ((cryptkey = stream->cryptkey) == NULL) - return N; // /Identity crypt - if (stream->flags & PPSTREAM_ENCRYPTED_AES) - return iof_filter_aes_decoder(N, cryptkey->data, cryptkey->size); - if (stream->flags & PPSTREAM_ENCRYPTED_RC4) - return iof_filter_rc4_decoder(N, cryptkey->data, cryptkey->size); - return NULL; // if neither AES or RC4 but cryptkey present, something went wrong; see ppstream_info() - case PPSTREAM_CCITT: - case PPSTREAM_DCT: - case PPSTREAM_JBIG2: - case PPSTREAM_JPX: - break; - } - return NULL; -} - -#define ppstream_source(stream) iof_filter_stream_coreader((iof_file *)((stream)->input), (size_t)((stream)->offset), (size_t)((stream)->length)) -#define ppstream_auxsource(filename) iof_filter_file_reader(filename) - -static ppname * ppstream_get_filter_name (ppobj *filterobj, size_t index) -{ - if (filterobj->type == PPNAME) - return index == 0 ? filterobj->name : NULL; - if (filterobj->type == PPARRAY) - return pparray_get_name(filterobj->array, index); - return NULL; -} - -static ppdict * ppstream_get_filter_params (ppobj *paramsobj, size_t index) -{ - if (paramsobj->type == PPDICT) - return index == 0 ? paramsobj->dict : NULL; - if (paramsobj->type == PPARRAY) - return pparray_rget_dict(paramsobj->array, index); - return NULL; -} - -static const char * ppstream_aux_filename (ppobj *filespec) -{ // mockup, here we should decode the string - if (filespec->type == PPSTRING) - { - return (const char *)(filespec->string); - } - // else might be a dict - todo - return NULL; -} - -#define ppstream_image_filter(fcode) (fcode == PPSTREAM_DCT || fcode == PPSTREAM_CCITT || fcode == PPSTREAM_JBIG2 || fcode == PPSTREAM_JPX) - -iof * ppstream_read (ppstream *stream, int decode, int all) -{ - iof *I, *F; - ppstreamtp *filtertypes, filtertype; - int owncrypt; - ppdict **filterparams, *fparams; - size_t index, filtercount; - const char *filename; - - if (ppstream_iof(stream) != NULL) - return NULL; // usage error - - if (stream->filespec != NULL) - { - filename = ppstream_aux_filename(stream->filespec); // mockup, basic support - I = filename != NULL ? ppstream_auxsource(filename) : NULL; - } - else - { - I = ppstream_source(stream); - } - if (I == NULL) - return NULL; - - /* If the stream is encrypted, decipher is the first to be applied */ - owncrypt = (stream->flags & PPSTREAM_ENCRYPTED_OWN) != 0; - if (!owncrypt) - { - if (stream->cryptkey != NULL && stream->filespec == NULL) - { /* implied global crypt; does not apply to external files (pdf psec page 115), except for embedded file streams (not supported so far) */ - if ((F = ppstream_decoder(stream, PPSTREAM_CRYPT, NULL, I)) == NULL) - goto stream_error; - I = F; - } /* otherwise no crypt at all or /Identity */ - } - - if (decode || owncrypt) - { - if ((filtercount = stream->filter.count) > 0) - { - filtertypes = stream->filter.filters; - filterparams = stream->filter.params; - for (index = 0; index < filtercount; ++index) - { - fparams = filterparams != NULL ? filterparams[index] : NULL; - filtertype = filtertypes[index]; - if ((F = ppstream_decoder(stream, filtertype, fparams, I)) != NULL) - { - I = F; - if (owncrypt && !decode && filtertype == PPSTREAM_CRYPT) - break; // /Crypt filter should always be first, so in practise we return decrypted but compressed - continue; - } - if (!ppstream_image_filter(filtertype)) - goto stream_error; // failed to create non-image filter, something unexpected - break; - } - } - } - if (all) - iof_load(I); - else - iof_input(I); - stream->I = I; - return I; -stream_error: - iof_close(I); - return NULL; -} - -uint8_t * ppstream_first (ppstream *stream, size_t *size, int decode) -{ - iof *I; - if ((I = ppstream_read(stream, decode, 0)) != NULL) - { - *size = (size_t)iof_left(I); - return I->pos; - } - *size = 0; - return NULL; -} - -uint8_t * ppstream_next (ppstream *stream, size_t *size) -{ - iof *I; - if ((I = ppstream_iof(stream)) != NULL) - { - I->pos = I->end; - if ((*size = iof_input(I)) > 0) - return I->pos; - } - *size = 0; - return NULL; -} - -uint8_t * ppstream_all (ppstream *stream, size_t *size, int decode) -{ - iof *I; - if ((I = ppstream_read(stream, decode, 1)) != NULL) - { - *size = (size_t)iof_left(I); - return I->pos; - } - *size = 0; - return NULL; -} - -void ppstream_done (ppstream *stream) -{ - iof *I; - if ((I = ppstream_iof(stream)) != NULL) - { - iof_close(I); - stream->I = NULL; - } -} - -/* fetching stream info -PJ20180916: revealed it makes sense to do a lilbit more just after parsing stream entry to simplify stream operations -and extend ppstream api -*/ - -/* stream filters */ - -const char * ppstream_filter_name[] = { - "ASCIIHexDecode", - "ASCII85Decode", - "RunLengthDecode", - "FlateDecode", - "LZWDecode", - "CCITTFaxDecode", - "DCTDecode", - "JBIG2Decode", - "JPXDecode", - "Crypt" -}; - -int ppstream_filter_type (ppname *name, ppstreamtp *filtertype) -{ - switch (name->data[0]) - { - case 'A': - if (ppname_is(name, "ASCIIHexDecode")) { *filtertype = PPSTREAM_BASE16; return 1; } - if (ppname_is(name, "ASCII85Decode")) { *filtertype = PPSTREAM_BASE85; return 1; } - break; - case 'R': - if (ppname_is(name, "RunLengthDecode")) { *filtertype = PPSTREAM_RUNLENGTH; return 1; } - break; - case 'F': - if (ppname_is(name, "FlateDecode")) { *filtertype = PPSTREAM_FLATE; return 1; } - break; - case 'L': - if (ppname_is(name, "LZWDecode")) { *filtertype = PPSTREAM_LZW; return 1; } - break; - case 'D': - if (ppname_is(name, "DCTDecode")) { *filtertype = PPSTREAM_DCT; return 1; } - break; - case 'C': - if (ppname_is(name, "CCITTFaxDecode")) { *filtertype = PPSTREAM_CCITT; return 1; } - if (ppname_is(name, "Crypt")) { *filtertype = PPSTREAM_CRYPT; return 1; } - break; - case 'J': - if (ppname_is(name, "JPXDecode")) { *filtertype = PPSTREAM_JPX; return 1; } - if (ppname_is(name, "JBIG2Decode")) { *filtertype = PPSTREAM_JBIG2; return 1; } - break; - } - return 0; -} - -void ppstream_info (ppstream *stream, ppdoc *pdf) -{ // called in ppdoc_load_entries() for every stream, but after loading non-stream objects (eg. /Length..) - ppdict *dict, *fparams; - ppobj *fobj, *pobj; - ppname *fname, *tname, *owncryptfilter = NULL; - ppcrypt *crypt; - ppref *ref; - size_t i; - int cflags; - - ppstreamtp *filtertypes = NULL, filtertype; - ppdict **filterparams = NULL; - size_t filtercount = 0, farraysize = 0; - - const char *filterkey, *paramskey; - - dict = stream->dict; - ppdict_rget_uint(dict, "Length", &stream->length); - - if ((stream->filespec = ppdict_get_obj(dict, "F")) != NULL) - { - stream->flags |= PPSTREAM_NOT_SUPPORTED; - filterkey = "FFilter", paramskey = "FDecodeParms"; - } - else - filterkey = "Filter", paramskey = "DecodeParms"; - - if ((fobj = ppdict_rget_obj(dict, filterkey)) != NULL) - { - switch (fobj->type) - { - case PPNAME: - farraysize = 1; - break; - case PPARRAY: - farraysize = fobj->array->size; - break; - default: - break; - } - if (farraysize > 0) - { - filtertypes = (ppstreamtp *)ppstruct_take(&pdf->heap, farraysize * sizeof(ppstreamtp)); - if ((pobj = ppdict_rget_obj(dict, paramskey)) != NULL) - { - filterparams = (ppdict **)ppstruct_take(&pdf->heap, farraysize * sizeof(ppdict *)); - } - for (i = 0; i < farraysize; ++i) - { - if ((fname = ppstream_get_filter_name(fobj, i)) != NULL && ppstream_filter_type(fname, &filtertype)) - { - filtertypes[filtercount] = filtertype; - if (pobj != NULL) - { - fparams = ppstream_get_filter_params(pobj, i); - filterparams[filtercount] = fparams; - } - else - fparams = NULL; - switch (filtertype) - { - case PPSTREAM_BASE16: - case PPSTREAM_BASE85: - case PPSTREAM_RUNLENGTH: - case PPSTREAM_FLATE: - case PPSTREAM_LZW: - stream->flags |= PPSTREAM_FILTER; - break; - case PPSTREAM_CCITT: - case PPSTREAM_DCT: - case PPSTREAM_JBIG2: - case PPSTREAM_JPX: - stream->flags |= PPSTREAM_IMAGE; - break; - case PPSTREAM_CRYPT: - stream->flags |= PPSTREAM_ENCRYPTED_OWN; - owncryptfilter = fparams != NULL ? ppdict_get_name(fparams, "Name") : NULL; // /Type /CryptFilterDecodeParms /Name ... - if (i != 0) // we assume it is first - stream->flags |= PPSTREAM_NOT_SUPPORTED; - break; - } - ++filtercount; - } - else - { - stream->flags |= PPSTREAM_NOT_SUPPORTED; - } - } - } - } - stream->filter.filters = filtertypes; - stream->filter.params = filterparams; - stream->filter.count = filtercount; - - if ((crypt = pdf->crypt) == NULL || (ref = crypt->ref) == NULL) - return; - if (stream->flags & PPSTREAM_ENCRYPTED_OWN) - { - /* Seems a common habit to use just /Crypt filter name with no params, which defaults to /Identity. - A real example with uncompressed metadata: <</Filter[/Crypt]/Length 4217/Subtype/XML/Type/Metadata>> */ - if (owncryptfilter != NULL && !ppname_is(owncryptfilter, "Identity") && stream->filespec == NULL) // ? - { - if (crypt->map != NULL && ppcrypt_type(crypt, owncryptfilter, NULL, &cflags)) - { - if (cflags & PPCRYPT_INFO_AES) - stream->flags |= PPSTREAM_ENCRYPTED_AES; - else if (cflags & PPCRYPT_INFO_RC4) - stream->flags |= PPSTREAM_ENCRYPTED_RC4; - } - } - } - else - { - if ((crypt->flags & PPCRYPT_NO_METADATA) && (tname = ppdict_get_name(dict, "Type")) != NULL && ppname_is(tname, "Metadata")) - ; /* special treatment of metadata stream; we assume that explicit /Filter /Crypt setup overrides document level setup of EncryptMetadata. */ - else if (stream->filespec == NULL) /* external files are not encrypted, expect embedded files (not supported yet) */ - { - if (crypt->flags & PPCRYPT_STREAM_RC4) - stream->flags |= PPSTREAM_ENCRYPTED_RC4; - else if (crypt->flags & PPCRYPT_STREAM_AES) - stream->flags |= PPSTREAM_ENCRYPTED_AES; - } - } - - /* finally, if the stream is encrypted with non-identity crypt (implicit or explicit), make and save the crypt key */ - if (stream->flags & PPSTREAM_ENCRYPTED) - stream->cryptkey = ppcrypt_stmkey(crypt, ref, ((stream->flags & PPSTREAM_ENCRYPTED_AES) != 0), &pdf->heap); -} - -void ppstream_filter_info (ppstream *stream, ppstream_filter *info, int decode) -{ - size_t from, index; - ppstreamtp filtertype; - ppdict *params; - - *info = stream->filter; - if (info->count > 0) - { - from = (stream->flags & PPSTREAM_ENCRYPTED_OWN) && info->filters[0] == PPSTREAM_CRYPT ? 1 : 0; - if (decode) - { - for (index = from; index < info->count; ++index) - { - filtertype = info->filters[index]; - if (ppstream_image_filter(filtertype)) - { - break; - } - } - } - else - { - index = from; - } - if (index > 0) { - info->count -= index; - if (info->count > 0) - { - info->filters += index; - if (info->params != NULL) - { - info->params += index; - for (index = 0, params = NULL; index < info->count; ++index) - if ((params = info->params[index]) != NULL) - break; - if (params == NULL) - info->params = NULL; - } - } - else - { - info->filters = NULL; - info->params = NULL; - } - } - } -} - -/* */ - -void ppstream_init_buffers (void) -{ - iof_filters_init(); -} - -void ppstream_free_buffers (void) -{ - iof_filters_free(); -} diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/ppstream.h b/Build/source/texk/web2c/luatexdir/luapplib/src/ppstream.h deleted file mode 100644 index 37e34c56ade..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/ppstream.h +++ /dev/null @@ -1,10 +0,0 @@ - -#ifndef PP_STREAM_H -#define PP_STREAM_H - -ppstream * ppstream_create (ppdoc *pdf, ppdict *dict, size_t offset); -iof * ppstream_read (ppstream *stream, int decode, int all); -#define ppstream_iof(stream) ((iof *)((stream)->I)) -void ppstream_info (ppstream *stream, ppdoc *pdf); - -#endif
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/pptest1.c b/Build/source/texk/web2c/luatexdir/luapplib/src/pptest1.c deleted file mode 100644 index eabb0eae9cc..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/pptest1.c +++ /dev/null @@ -1,104 +0,0 @@ - -#include <stdio.h> -#include "ppapi.h" -#include "util/utiliof.h" - -static const char * sizenum (size_t s) -{ - static char buffer[32]; - if (s < 1000) - sprintf(buffer, "%uB", (unsigned)s); - else if (s < 1000000) - sprintf(buffer, "%.2fkB", (double)(s) / 1000); - else - sprintf(buffer, "%.2fMB", (double)(s) / 1000000); - return buffer; -} - -static const char * crypt_info (ppdoc *pdf) -{ - switch (ppdoc_crypt_status(pdf)) - { - case PPCRYPT_NONE: - return "none"; - case PPCRYPT_DONE: - return "empty password"; - case PPCRYPT_PASS: - return "nonempty password"; - default: - break; - } - return "this shouldn't happen"; -} - -static void print_info (ppdoc *pdf) -{ - ppdict *info; - ppstring *creator, *producer; - size_t memused, memwaste; - - if ((info = ppdoc_info(pdf)) != NULL) - { - if ((creator = ppdict_rget_string(info, "Creator")) != NULL) - printf(" creator: %s\n", ppstring_decoded_data(creator)); - if ((producer = ppdict_rget_string(info, "Producer")) != NULL) - printf(" producer: %s\n", ppstring_decoded_data(producer)); - } - printf(" version: %s\n", ppdoc_version_string(pdf)); - printf(" protection: %s\n", crypt_info(pdf)); - printf(" filesize: %s\n", sizenum(ppdoc_file_size(pdf))); - printf(" objects: %lu\n", (unsigned long)ppdoc_objects(pdf)); - printf(" pagecount: %lu\n", (unsigned long)ppdoc_page_count(pdf)); - memused = ppdoc_memory(pdf, &memwaste); - printf(" memused: %s\n", sizenum(memused)); - printf(" memwaste: %s\n", sizenum(memwaste)); -} - -static int usage (const char *argv0) -{ - printf("pplib " pplib_version ", " pplib_author "\n"); - printf("usage: %s file1.pdf file2.pdf ...\n", argv0); - return 0; -} - -int main (int argc, const char **argv) -{ - const char *filepath; - int a; - ppdoc *pdf; - const void *data; - size_t size; - - if (argc < 2) - return usage(argv[0]); - for (a = 1; a < argc; ++a) - { - filepath = argv[a]; - printf("loading %s... ", filepath); - pdf = ppdoc_load(filepath); - if (pdf == NULL) - { - printf("failed\n"); - continue; - } - printf("done.\n"); - print_info(pdf); - ppdoc_free(pdf); - /* now loading from memory buffer */ - printf("loading %s from mem buffer... ", filepath); - data = iof_copy_file_data(filepath, &size); - if (data != NULL) - { - pdf = ppdoc_mem(data, size); - if (pdf == NULL) - { - printf("failed\n"); - continue; - } - printf("done.\n"); - //print_info(pdf); - ppdoc_free(pdf); - } - } - return 0; -} diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/pptest2.c b/Build/source/texk/web2c/luatexdir/luapplib/src/pptest2.c deleted file mode 100644 index 766110da4cd..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/pptest2.c +++ /dev/null @@ -1,138 +0,0 @@ - -#include <stdio.h> -#include <assert.h> -#include "ppapi.h" - -/* -static const char * get_file_name (const char *path) -{ - const char *fn, *p; - for (fn = p = path; *p != '\0'; ++p) - if (*p == '\\' || *p == '/') - fn = p + 1; - return fn; -} -*/ - -static void box_info (ppdict *pagedict, FILE *fh) -{ - const char *boxes[] = {"MediaBox", "CropBox", "BleedBox", "TrimBox", "ArtBox"}; - pprect rect; - size_t i; - for (i = 0; i < sizeof(boxes) / sizeof(const char *); ++i) - if (ppdict_get_box(pagedict, boxes[i], &rect)) - fprintf(fh, "%%%% %s [%f %f %f %f]\n", boxes[i], rect.lx, rect.ly, rect.rx, rect.ry); -} - -static int usage (const char *argv0) -{ - printf("pplib " pplib_version ", " pplib_author "\n"); - printf("usage: %s file1.pdf file2.pdf ...\n", argv0); - return 0; -} - -static void log_callback (const char *message, void *alien) -{ - fprintf((FILE *)alien, "\nooops: %s\n", message); -} - -int main (int argc, const char **argv) -{ - const char *filepath; - int a; - ppdoc *pdf; - ppref *pageref; - ppdict *pagedict; - int pageno; - char outname[1024]; - FILE *fh; - ppstream *stream; - uint8_t *data; - size_t size; - ppcontext *context; - ppobj *obj; - ppname *op; - size_t operators; - - if (argc < 2) - return usage(argv[0]); - ppstream_init_buffers(); - pplog_callback(log_callback, stderr); - context = ppcontext_new(); - for (a = 1; a < argc; ++a) - { - filepath = argv[a]; - printf("loading %s... ", filepath); - pdf = ppdoc_load(filepath); - if (pdf == NULL) - { - printf("failed\n"); - continue; - } - printf("done.\n"); - switch (ppdoc_crypt_status(pdf)) - { - case PPCRYPT_NONE: - case PPCRYPT_DONE: - break; - case PPCRYPT_PASS: - if (ppdoc_crypt_pass(pdf, "dummy", 5, NULL, 0) == PPCRYPT_DONE || ppdoc_crypt_pass(pdf, NULL, 0, "dummy", 5) == PPCRYPT_DONE) - break; - printf("sorry, password needed\n"); - ppdoc_free(pdf); - continue; - case PPCRYPT_FAIL: - printf("sorry, encryption failed\n"); - ppdoc_free(pdf); - continue; - } - sprintf(outname, "%s.out", filepath); - fh = fopen(outname, "wb"); - if (fh == NULL) - { - printf("can't open %s for writing\n", outname); - continue; - } - for (pageref = ppdoc_first_page(pdf), pageno = 1; - pageref != NULL; - pageref = ppdoc_next_page(pdf), ++pageno) - { - pagedict = pageref->object.dict; - /* decompress contents data */ - fprintf(fh, "%%%% PAGE %d\n", pageno); - box_info(pagedict, fh); - for (stream = ppcontents_first(pagedict); - stream != NULL; - stream = ppcontents_next(pagedict, stream)) - { - for (data = ppstream_first(stream, &size, 1); - data != NULL; - data = ppstream_next(stream, &size)) - fwrite(data, size, 1, fh); - ppstream_done(stream); - } - /* now parse contents */ - for (stream = ppcontents_first(pagedict); - stream != NULL; - stream = ppcontents_next(pagedict, stream)) - { - operators = 0; - for (obj = ppcontents_first_op(context, stream, &size, &op); - obj != NULL; - obj = ppcontents_next_op(context, stream, &size, &op)) - ++operators; - fprintf(fh, "%%%% OPERATORS count %lu\n", (unsigned long)operators); - ppstream_done(stream); - //obj = ppcontents_parse(context, stream, &size); - //fprintf(fh, "%%%% items count %lu\n", (unsigned long)size); - fprintf(fh, "\n"); - } - ppcontext_done(context); - } - fclose(fh); - ppdoc_free(pdf); - } - ppcontext_free(context); - ppstream_free_buffers(); - return 0; -} diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/pptest3.c b/Build/source/texk/web2c/luatexdir/luapplib/src/pptest3.c deleted file mode 100644 index 815ed51b6b6..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/pptest3.c +++ /dev/null @@ -1,123 +0,0 @@ - -#include <stdio.h> -//#include "ppapi.h" -#include "pplib.h" -#include "assert.h" - -static int usage (const char *argv0) -{ - printf("pplib " pplib_version ", " pplib_author "\n"); - printf("usage: %s file1.pdf file2.pdf ...\n", argv0); - return 0; -} - -static void print_result_filter (ppstream *stream, int decode) -{ - ppstream_filter info; - size_t i; - - ppstream_filter_info(stream, &info, decode); - printf(" when %s: /Filter [", decode ? "uncompressed" : "compressed"); - for (i = 0; i < info.count; ++i) - printf(" /%s", ppstream_filter_name[info.filters[i]]); - printf(" ]"); - if (info.params != NULL) - { - printf(" /DecodeParms ["); - for (i = 0; i < info.count; ++i) - printf(" %s", info.params[i] != NULL ? "<<...>>" : "null"); - printf(" ]"); - } - printf("\n"); -} - -static void print_stream_info (ppref *ref, ppstream *stream) -{ - size_t length; - printf("object %lu %lu R\n", (unsigned long)ref->number, (unsigned long)ref->version); - if (stream->flags & PPSTREAM_FILTER) - printf(" filtered "); - else - printf(" plain "); - if (stream->flags & PPSTREAM_IMAGE) - printf("image "); - else - printf("stream "); - if (stream->flags & PPSTREAM_ENCRYPTED) - printf("encrypted "); - if (stream->flags & PPSTREAM_NOT_SUPPORTED) - printf("invalid "); - if (!ppdict_rget_uint(stream->dict, "Length", &length)) - length = 0; - assert(stream->length == length); - printf("length %lu (/Length %lu)\n", (unsigned long)stream->length, (unsigned long)length); - print_result_filter(stream, 0); - print_result_filter(stream, 1); -} - -static void check_stream_chunks (ppstream *stream) -{ - size_t sum, size; - uint8_t *data; - const int decode[2] = {0, 1}; - int d; - - for (d = 0; d < 2; ++d) - { - for (sum = 0, data = ppstream_first(stream, &size, decode[d]); data != NULL; data = ppstream_next(stream, &size)) - sum += size; - ppstream_done(stream); - ppstream_all(stream, &size, decode[d]); - ppstream_done(stream); - assert(sum == size); - printf(" %s chunks size [%lu]\n", (decode[d] ? "decoded" : "raw"), (unsigned long)size); - } -} - -#define USE_BUFFERS_POOL 1 - -int main (int argc, const char **argv) -{ - const char *filepath; - int a; - ppdoc *pdf; - ppxref *xref; - ppxsec *xsec; - size_t xi; - ppuint refnum; - ppref *ref; - - if (argc < 2) - return usage(argv[0]); - if (USE_BUFFERS_POOL) - ppstream_init_buffers(); - for (a = 1; a < argc; ++a) - { - filepath = argv[a]; - printf("loading %s... ", filepath); - pdf = ppdoc_load(filepath); - if (pdf == NULL) - { - printf("failed\n"); - continue; - } - printf("done.\n"); - for (xref = ppdoc_xref(pdf); xref != NULL; xref = ppxref_prev(xref)) - { - for (xi = 0, xsec = xref->sects; xi < xref->size; ++xi, ++xsec) - { - for (refnum = xsec->first, ref = xsec->refs; refnum <= xsec->last; ++refnum, ++ref) - { - if (ref->object.type != PPSTREAM) - continue; - print_stream_info(ref, ref->object.stream); - check_stream_chunks(ref->object.stream); - } - } - } - ppdoc_free(pdf); - } - if (USE_BUFFERS_POOL) - ppstream_free_buffers(); - return 0; -} diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/ppxref.c b/Build/source/texk/web2c/luatexdir/luapplib/src/ppxref.c deleted file mode 100644 index fa03fd6c9d2..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/ppxref.c +++ /dev/null @@ -1,215 +0,0 @@ - -#include "pplib.h" - -#define PPXREF_MAP_INIT 16 // number of xref sections - -ppxref * ppxref_create (ppdoc *pdf, size_t initsize, size_t xrefoffset) -{ - ppxref *xref; - - if (initsize == 0) // unknown - initsize = PPXREF_MAP_INIT; - xref = (ppxref *)ppstruct_take(&pdf->heap, sizeof(ppxref)); - xref->sects = (ppxsec *)ppstruct_take(&pdf->heap, initsize * sizeof(ppxsec)); - xref->size = 0; - xref->space = initsize; - xref->count = 0; - xref->trailer.type = PPNONE; - xref->trailer.dict = NULL; - xref->prev = NULL; - xref->pdf = pdf; - xref->offset = xrefoffset; - return xref; -} - -ppxsec * ppxref_push_section (ppxref *xref, ppheap *heap) -{ - ppxsec *sects; - if (xref->size < xref->space) - return &xref->sects[xref->size++]; - xref->space <<= 1; - sects = xref->sects; - xref->sects = (ppxsec *)ppstruct_take(heap, xref->space * sizeof(ppxsec)); // waste but rare - memcpy(xref->sects, sects, xref->size * sizeof(ppxsec)); - return &xref->sects[xref->size++]; -} - -/* When loading xref table, we don't know how many sections is there. We assume 16, which is - more than usual (waste). But if there is more, we double the size, wasting again. This - could be made better with a dedicated allocator for xref sections (heap or generic malloc). - Or an ephemeric malloced c-array stored in heap once ready (analogical to stack used for dicts/arrays). - For xref streams we have explicit num of sections. */ - -/* -void ppxref_done_sections (ppxref *xref, ppheap *heap) -{ // if xref->sects was initialized with mallocted array we could do - ppxsec *sects; - size_t size; - sects = xref->sects; - size = xref->size * sizeof(ppxsec); - xref->sects = (ppxsec *)ppstruct_take(heap, size); - memcpy(xref->sects, sects, size); - pp_free(sects); - xref->space = xref->size; -} -*/ - -static void ppxref_sort_sects (ppxsec *left, ppxsec *right) -{ - ppxsec *l, *r, *m, t; - ppuint first, last; - l = left, r = right, m = l + ((r - l) / 2); - first = m->first, last = m->last; - do - { // don't take first/last from pointer - while (l->first < first) ++l; - while (r->first > last) --r; - if (l <= r) - { - t = *l; - *l = *r; - *r = t; - ++l, --r; - } - } while (l <= r); - if (l < right) - ppxref_sort_sects(l, right); - if (r > left) - ppxref_sort_sects(left, r); -} - -int ppxref_sort (ppxref *xref) -{ - if (xref->size == 0) - return 0; - ppxref_sort_sects(xref->sects, xref->sects + xref->size - 1); - return 1; -} - -ppref * ppxref_find_local (ppxref *xref, ppuint refnumber) -{ - ppxsec *left, *right, *mid; - //if (xref->size == 0) // we don't allow that - // return NULL; - left = xref->sects; - right = xref->sects + xref->size - 1; - do - { - mid = left + ((right - left) / 2); - if (refnumber > mid->last) - left = mid + 1; - else if (refnumber < mid->first) - right = mid - 1; - else - return &mid->refs[refnumber - mid->first]; - } while (left <= right); - return NULL; -} - -/* -PJ 20180910 - -So far we were resolving references in the context of the current xref: - -- if a given object is found in this xref, than this is the object -- otherwise older xrefs are queried in order -- only in linearized documents older body may refer to object from newer xref - -Hans sent a document where an incremental update (newer body) has only an updated page object -(plus /Metadata and /Info), but /Root (catalog) and /Pages dict refs are defined only in the older body. -If we resolve references using the approach so far, we actually drop the update; newer objects are parsed -and linked to the newest xref, but never linked to objects tree. Assuming we will never need to interpret -older versions, makes sense to assume, that the newest object version is always the correct version. - -*/ - -#if 0 - -ppref * ppxref_find (ppxref *xref, ppuint refnumber) -{ - ppref *ref; - ppxref *other; - - if ((ref = ppxref_find_local(xref, refnumber)) != NULL) - return ref; - if (xref->pdf->flags & PPDOC_LINEARIZED) - { - for (other = xref->pdf->xref; other != NULL; other = other->prev) - if (other != xref && (ref = ppxref_find_local(other, refnumber)) != NULL) - return ref; - } - else - { - for (other = xref->prev; other != NULL; other = other->prev) - if ((ref = ppxref_find_local(other, refnumber)) != NULL) - return ref; - /* This shouldn't happen, but I've met documents that have no linearized dict, - but their xrefs are prepared as for linearized; with "older" xrefs referring - to "newer". */ - for (other = xref->pdf->xref; other != NULL && other != xref; other = other->prev) - if ((ref = ppxref_find_local(other, refnumber)) != NULL) - return ref; - } - return NULL; -} - -#else - -ppref * ppxref_find (ppxref *xref, ppuint refnumber) -{ - ppref *ref; - ppxref *other; - - for (other = xref->pdf->xref; other != NULL; other = other->prev) - if ((ref = ppxref_find_local(other, refnumber)) != NULL) - return ref; - return NULL; -} - -#endif - -ppdict * ppxref_trailer (ppxref *xref) -{ - switch (xref->trailer.type) - { - case PPDICT: - return xref->trailer.dict; - case PPSTREAM: - return xref->trailer.stream->dict; - default: - break; - } - return NULL; -} - -ppxref * ppdoc_xref (ppdoc *pdf) -{ - return pdf->xref; -} - -ppxref * ppxref_prev (ppxref *xref) -{ - return xref->prev; -} - -ppdict * ppxref_catalog (ppxref *xref) -{ - ppdict *trailer; - return (trailer = ppxref_trailer(xref)) != NULL ? ppdict_rget_dict(trailer, "Root") : NULL; -} - -ppdict * ppxref_info (ppxref *xref) -{ - ppdict *trailer; - return (trailer = ppxref_trailer(xref)) != NULL ? ppdict_rget_dict(trailer, "Info") : NULL; -} - -ppref * ppxref_pages (ppxref *xref) -{ - ppdict *dict; - ppref *ref; - - if ((dict = ppxref_catalog(xref)) == NULL || (ref = ppdict_get_ref(dict, "Pages")) == NULL) - return NULL; - return ref->object.type == PPDICT ? ref : NULL; -} diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/ppxref.h b/Build/source/texk/web2c/luatexdir/luapplib/src/ppxref.h deleted file mode 100644 index fbb83beced6..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/ppxref.h +++ /dev/null @@ -1,35 +0,0 @@ - -#ifndef PP_XREF_H -#define PP_XREF_H - -/* -What we call xref is actually "xref section" in PDF spec and what we call section is "xref subsection". -Our ppxref is a list of sections, sorted by xrefsection->first and xrefsection->last bounds. Every section -keeps a list of ppref *refs, enumerated from xrefsection->first to xrefsection->last. To find a reference -by number we make a binary search over sections bounds, then jump to the proper ppref *ref. -*/ - -typedef struct { - ppuint first; // first reference number in section - ppuint last; // last reference number in section - ppref *refs; // references list -} ppxsec; - -struct ppxref { - ppxsec *sects; // subsections list - size_t size; // actual sections size - size_t space; // available sections space - ppobj trailer; // trailer dict or stream - ppuint count; // count of references in all sections - ppxref *prev; // previous xref - ppdoc *pdf; // parent pdf to access entries in linearized docs - size_t offset; // file offset of xref - //ppcrypt *crypt; // per xref encryption state? -}; - -ppxref * ppxref_create (ppdoc *pdf, size_t initsize, size_t xrefoffset); -ppxsec * ppxref_push_section (ppxref *xref, ppheap *heap); -int ppxref_sort (ppxref *xref); -ppref * ppxref_find_local (ppxref *xref, ppuint refnumber); - -#endif
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/README.md b/Build/source/texk/web2c/luatexdir/luapplib/src/util/README.md deleted file mode 100644 index 209bced0082..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# pplib util
-
-This part is a toolbox. Contains utilities that are used by `pplib`
-but aren't tightly related to `PDF`. I use the toolbox in different
-projects and repos. It is important to me to keep this part in a perfect
-sync, at the cost of some redundant code (not used in `pplib`).
-`pplib` is hopefully not a subject for eternal development, so once
-it become final, we will make some cleanups here.
diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilbasexx.c b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilbasexx.c deleted file mode 100644 index cfe14884071..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilbasexx.c +++ /dev/null @@ -1,1742 +0,0 @@ - -#include "utilnumber.h" -#include "utilmem.h" -#include "utilbasexx.h" - -/* filters state structs */ - -struct basexx_state { - size_t line, maxline; - size_t left; - int tail[5]; - int flush; -}; - -struct runlength_state { - int run; - int flush; - int c1, c2; - uint8_t *pos; -}; - -typedef union { basexx_state *basexxstate; runlength_state *runlengthstate; void *voidstate; } basexx_state_pointer; // to avoid 'dereferencing type-puned ...' warnings - -/* config */ - -#if defined(BASEXX_PDF) -# define ignored(c) (c == 0x20 || c == 0x0A || c == 0x0C || c == 0x0D || c == 0x09 || c == 0x00) -# define base16_eof(c) (c == '>' || c < 0) -# define base85_eof(c) (c == '~' || c < 0) -#else -# define ignored(c) (c == 0x20 || c == 0x0A || c == 0x0D || c == 0x09) -# define base16_eof(c) (c < 0) -# define base85_eof(c) (c < 0) -#endif - -#define base64_eof(c) (c == '=' || c < 0) - -#define basexx_nl '\x0A' -//#define put_nl(O, line, maxline, n) ((void)((line += n) > maxline && ((line = n), iof_set(O, basexx_nl)))) // assignment in conditional warning -#define put_nl(O, line, maxline, n) do { line += n; if (line > maxline) { line = n; iof_set(O, basexx_nl); }} while (0) - -/* tail macros */ - -#define set_tail1(state, c1) (state->left = 1, state->tail[0] = c1) -#define set_tail2(state, c1, c2) (state->left = 2, state->tail[0] = c1, state->tail[1] = c2) -#define set_tail3(state, c1, c2, c3) (state->left = 3, state->tail[0] = c1, state->tail[1] = c2, state->tail[2] = c3) -#define set_tail4(state, c1, c2, c3, c4) (state->left = 4, state->tail[0] = c1, state->tail[1] = c2, state->tail[2] = c3, state->tail[3] = c4) -#define set_tail5(state, c1, c2, c3, c4, c5) \ - (state->left = 5, state->tail[0] = c1, state->tail[1] = c2, state->tail[2] = c3, state->tail[3] = c4, state->tail[4] = c5) - -#define get_tail1(state, c1) (state->left = 0, c1 = state->tail[0]) -#define get_tail2(state, c1, c2) (state->left = 0, c1 = state->tail[0], c2 = state->tail[1]) -#define get_tail3(state, c1, c2, c3) (state->left = 0, c1 = state->tail[0], c2 = state->tail[1], c3 = state->tail[2]) -#define get_tail4(state, c1, c2, c3, c4) (state->left = 0, c1 = state->tail[0], c2 = state->tail[1], c3 = state->tail[2], c4 = state->tail[3]) - -/* basexx state initialization */ - -void basexx_state_init_ln (basexx_state *state, size_t line, size_t maxline) -{ - state->line = line; - state->maxline = maxline; - state->left = 0; - state->flush = 0; -} - -/* base 16; xxxx|xxxx */ - -iof_status base16_encoded_uc (const void *data, size_t size, iof *O) -{ - const uint8_t *s, *e; - for (s = (const uint8_t *)data, e = s + size; s < e; ++s) - { - if (!iof_ensure(O, 2)) - return IOFFULL; - iof_set_uc_hex(O, *s); - } - return IOFEOF; -} - -iof_status base16_encoded_lc (const void *data, size_t size, iof *O) -{ - const uint8_t *s, *e; - for (s = (const uint8_t *)data, e = s + size; s < e; ++s) - { - if (!iof_ensure(O, 2)) - return IOFFULL; - iof_set_lc_hex(O, *s); - } - return IOFEOF; -} - -iof_status base16_encoded_uc_ln (const void *data, size_t size, iof *O, size_t line, size_t maxline) -{ - const uint8_t *s, *e; - for (s = (const uint8_t *)data, e = s + size; s < e; ++s) - { - if (!iof_ensure(O, 3)) - return IOFFULL; - put_nl(O, line, maxline, 2); - iof_set_uc_hex(O, *s); - } - return IOFFULL; -} - -iof_status base16_encoded_lc_ln (const void *data, size_t size, iof *O, size_t line, size_t maxline) -{ - const uint8_t *s, *e; - for (s = (const uint8_t *)data, e = s + size; s < e; ++s) - { - if (!iof_ensure(O, 3)) - return IOFFULL; - put_nl(O, line, maxline, 2); - iof_set_lc_hex(O, *s); - } - return IOFFULL; -} - -iof_status base16_encode_uc (iof *I, iof *O) -{ - register int c; - while (iof_ensure(O, 2)) - { - if ((c = iof_get(I)) < 0) - return IOFEOF; - iof_set_uc_hex(O, c); - } - return IOFFULL; -} - -iof_status base16_encode_state_uc (iof *I, iof *O, basexx_state *state) -{ - register int c; - while (iof_ensure(O, 2)) - { - if ((c = iof_get(I)) < 0) - return (state->flush ? IOFEOF : IOFEMPTY); - iof_set_uc_hex(O, c); - } - return IOFFULL; -} - -iof_status base16_encode_lc (iof *I, iof *O) -{ - register int c; - while (iof_ensure(O, 2)) - { - if ((c = iof_get(I)) < 0) - return IOFEOF; - iof_set_lc_hex(O, c); - } - return IOFFULL; -} - -iof_status base16_encode_state_lc (iof *I, iof *O, basexx_state *state) -{ - register int c; - while (iof_ensure(O, 2)) - { - if ((c = iof_get(I)) < 0) - return (state->flush ? IOFEOF : IOFEMPTY); - iof_set_lc_hex(O, c); - } - return IOFFULL; -} - -iof_status base16_encode_uc_ln (iof *I, iof *O, size_t line, size_t maxline) -{ - register int c; - while (iof_ensure(O, 3)) - { - if ((c = iof_get(I)) < 0) - return IOFEOF; - put_nl(O, line, maxline, 2); - iof_set_uc_hex(O, c); - } - return IOFFULL; -} - -iof_status base16_encode_state_uc_ln (iof *I, iof *O, basexx_state *state) -{ - register int c; - while (iof_ensure(O, 3)) - { - if ((c = iof_get(I)) < 0) - return (state->flush ? IOFEOF : IOFEMPTY); - put_nl(O, state->line, state->maxline, 2); - iof_set_uc_hex(O, c); - } - return IOFFULL; -} - -iof_status base16_encode_lc_ln (iof *I, iof *O, size_t line, size_t maxline) -{ - register int c; - while (iof_ensure(O, 3)) - { - if ((c = iof_get(I)) < 0) - return IOFEOF; - put_nl(O, line, maxline, 2); - iof_set_lc_hex(O, c); - } - return IOFFULL; -} - -iof_status base16_encode_state_lc_ln (iof *I, iof *O, basexx_state *state) -{ - register int c; - while (iof_ensure(O, 3)) - { - if ((c = iof_get(I)) < 0) - return (state->flush ? IOFEOF : IOFEMPTY); - put_nl(O, state->line, state->maxline, 2); - iof_set_lc_hex(O, c); - } - return IOFFULL; -} - -int base16_getc (iof *I) -{ - register int c1, c2; - do { c1 = iof_get(I); } while (ignored(c1)); - if (base16_eof(c1)) - return IOFEOF; - do { c2 = iof_get(I); } while (ignored(c2)); - if (base16_eof(c2)) - { - if ((c1 = base16_value(c1)) < 0) - return IOFERR; - return c1<<4; - } - if ((c1 = base16_value(c1)) < 0 || (c2 = base16_value(c2)) < 0) - return IOFERR; - return (c1<<4)|c2; -} - -int base16_lc_putc (iof *O, int c) -{ - if (iof_ensure(O, 2)) - iof_set_lc_hex(O, c); - return IOFFULL; -} - -int base16_uc_putc (iof *O, int c) -{ - if (iof_ensure(O, 2)) - iof_set_uc_hex(O, c); - return IOFFULL; -} - - -iof_status base16_decode (iof *I, iof *O) -{ - register int c1, c2; - while (iof_ensure(O, 1)) - { - do { c1 = iof_get(I); } while (ignored(c1)); - if (base16_eof(c1)) - return IOFEOF; - do { c2 = iof_get(I); } while (ignored(c2)); - if (base16_eof(c2)) - { - if ((c1 = base16_value(c1)) < 0) - return IOFERR; - iof_set(O, c1<<4); // c2 := '0' - return IOFEOF; - } - if ((c1 = base16_value(c1)) < 0 || (c2 = base16_value(c2)) < 0) - return IOFERR; - iof_set(O, (c1<<4)|c2); - } - return IOFFULL; -} - -iof_status base16_decode_state (iof *I, iof *O, basexx_state *state) -{ - register int c1, c2, d1, d2; - if (!(iof_ensure(O, 1))) - return IOFFULL; - switch(state->left) - { - case 0: goto byte0; - case 1: get_tail1(state, c1); goto byte1; - } - while (iof_ensure(O, 1)) - { - byte0: - do { c1 = iof_get(I); } while (ignored(c1)); - if (base16_eof(c1)) - return (state->flush ? IOFEOF : IOFEMPTY); - byte1: - do { c2 = iof_get(I); } while (ignored(c2)); - if (base16_eof(c2)) - { - set_tail1(state, c1); /* set tail to let the caller display invalid chars */ - if (state->flush) - { - if ((c1 = base16_value(c1)) < 0) - return IOFERR; - iof_set(O, c1<<4); // c2 := '0' - return IOFEOF; - } - return IOFEMPTY; - } - if ((d1 = base16_value(c1)) < 0 || (d2 = base16_value(c2)) < 0) - { - set_tail2(state, c1, c2); - return IOFERR; - } - iof_set(O, (d1<<4)|d2); - } - return IOFFULL; -} - -/* base 64; xxxxxx|xx xxxx|xxxx xx|xxxxxx */ - -const char base64_alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - -const int base64_lookup[] = { - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63, - 52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1, - -1, 0, 1, 2, 3, 4, 5, 6, 7, 8,9 ,10,11,12,13,14, - 15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1, - -1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40, - 41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -}; - -#define base64_value(c) base64_lookup[(uint8_t)(c)] - -#define base64_digit1(c1) base64_alphabet[c1>>2] -#define base64_digit2(c1, c2) base64_alphabet[((c1&3)<<4)|(c2>>4)] -#define base64_digit3(c2, c3) base64_alphabet[((c2&15)<<2)|(c3>>6)] -#define base64_digit4(c3) base64_alphabet[c3&63] - -#define base64_encode_word(O, c1, c2, c3) \ - iof_set4(O, base64_digit1(c1), base64_digit2(c1, c2), base64_digit3(c2, c3), base64_digit4(c3)) - -#define base64_encode_tail2(O, c1, c2) \ - iof_set3(O, base64_digit1(c1), base64_digit2(c1, c2), base64_digit3(c2, 0)) - -#define base64_encode_tail1(O, c1) \ - iof_set2(O, base64_digit1(c1), base64_digit2(c1, 0)) - -iof_status base64_encoded (const void *data, size_t size, iof *O) -{ - const uint8_t *s, *e; - uint8_t c1, c2, c3; - for (s = (const uint8_t *)data, e = s + size; s + 2 < e; ) - { - if (!iof_ensure(O, 4)) - return IOFFULL; - c1 = *s++; - c2 = *s++; - c3 = *s++; - base64_encode_word(O, c1, c2, c3); - } - switch (e - s) - { - case 0: - break; - case 1: - if (!iof_ensure(O, 2)) - return IOFFULL; - c1 = *s; - base64_encode_tail1(O, c1); - break; - case 2: - if (!iof_ensure(O, 3)) - return IOFFULL; - c1 = *s++; - c2 = *s; - base64_encode_tail2(O, c1, c2); - break; - } - return IOFEOF; -} - -iof_status base64_encoded_ln (const void *data, size_t size, iof *O, size_t line, size_t maxline) -{ - const uint8_t *s, *e; - uint8_t c1, c2, c3; - for (s = (const uint8_t *)data, e = s + size; s + 2 < e; ) - { - if (!iof_ensure(O, 5)) - return IOFFULL; - c1 = *s++; - c2 = *s++; - c3 = *s++; - put_nl(O, line, maxline, 4); - base64_encode_word(O, c1, c2, c3); - } - switch (e - s) - { - case 0: - break; - case 1: - if (!iof_ensure(O, 3)) - return IOFFULL; - c1 = *s; - put_nl(O, line, maxline, 2); - base64_encode_tail1(O, c1); - break; - case 2: - if (!iof_ensure(O, 4)) - return IOFFULL; - c1 = *s++; - c2 = *s; - put_nl(O, line, maxline, 3); - base64_encode_tail2(O, c1, c2); - break; - } - return IOFEOF; -} - -iof_status base64_encode (iof *I, iof *O) -{ - register int c1, c2, c3; - while(iof_ensure(O, 4)) - { - if ((c1 = iof_get(I)) < 0) - return IOFEOF; - if ((c2 = iof_get(I)) < 0) - { - base64_encode_tail1(O, c1); - return IOFEOF; - } - if ((c3 = iof_get(I)) < 0) - { - base64_encode_tail2(O, c1, c2); - return IOFEOF; - } - base64_encode_word(O, c1, c2, c3); - } - return IOFFULL; -} - -iof_status base64_encode_state (iof *I, iof *O, basexx_state *state) -{ - register int c1, c2, c3; - if (!(iof_ensure(O, 4))) - return IOFFULL; - switch(state->left) - { - case 0: goto byte0; - case 1: get_tail1(state, c1); goto byte1; - case 2: get_tail2(state, c1, c2); goto byte2; - } - while(iof_ensure(O, 4)) - { - byte0: - if ((c1 = iof_get(I)) < 0) - return (state->flush ? IOFEOF : IOFEMPTY); - byte1: - if ((c2 = iof_get(I)) < 0) - return (state->flush ? (base64_encode_tail1(O, c1), IOFEOF) : (set_tail1(state, c1), IOFEMPTY)); - byte2: - if ((c3 = iof_get(I)) < 0) - return (state->flush ? (base64_encode_tail2(O, c1, c2), IOFEOF) : (set_tail2(state, c1, c2), IOFEMPTY)); - base64_encode_word(O, c1, c2, c3); - } - return IOFFULL; -} - -iof_status base64_encode_ln (iof *I, iof *O, size_t line, size_t maxline) -{ - register int c1, c2, c3; - while(iof_ensure(O, 5)) - { - if ((c1 = iof_get(I)) < 0) - return IOFEOF; - if ((c2 = iof_get(I)) < 0) - { - put_nl(O, line, maxline, 2); - base64_encode_tail1(O, c1); - return IOFEOF; - } - if ((c3 = iof_get(I)) < 0) - { - put_nl(O, line, maxline, 3); - base64_encode_tail2(O, c1, c2); - return IOFEOF; - } - put_nl(O, line, maxline, 4); - base64_encode_word(O, c1, c2, c3); - } - return IOFFULL; -} - -iof_status base64_encode_state_ln (iof *I, iof *O, basexx_state *state) -{ - register int c1, c2, c3; - if (!(iof_ensure(O, 5))) - return IOFFULL; - switch(state->left) - { - case 0: goto byte0; - case 1: get_tail1(state, c1); goto byte1; - case 2: get_tail2(state, c1, c2); goto byte2; - } - while(iof_ensure(O, 5)) - { - byte0: - if ((c1 = iof_get(I)) < 0) - return (state->flush ? IOFEOF : IOFEMPTY); - byte1: - if ((c2 = iof_get(I)) < 0) - { - if (state->flush) - { - put_nl(O, state->line, state->maxline, 2); - base64_encode_tail1(O, c1); - return IOFEOF; - } - set_tail1(state, c1); - return IOFEMPTY; - } - byte2: - if ((c3 = iof_get(I)) < 0) - { - if (state->flush) - { - put_nl(O, state->line, state->maxline, 3); - base64_encode_tail2(O, c1, c2); - return IOFEOF; - } - set_tail2(state, c1, c2); - return IOFEMPTY; - } - put_nl(O, state->line, state->maxline, 4); - base64_encode_word(O, c1, c2, c3); - } - return IOFFULL; -} - -// #define base64_code(c1, c2, c3, c4) ((c1<<18)|(c2<<12)|(c3<<6)|c4) - -#define base64_decode_word(O, c1, c2, c3, c4) \ - iof_set3(O, (c1<<2)|(c2>>4), ((c2&15)<<4)|(c3>>2), ((c3&3)<<6)|c4) - -#define base64_decode_tail3(O, c1, c2, c3) \ - iof_set2(O, (c1<<2)|(c2>>4), ((c2&15)<<4)|(c3>>2)) - -#define base64_decode_tail2(O, c1, c2) \ - iof_set(O, (c1<<2)|(c2>>4)) - -iof_status base64_decode (iof *I, iof *O) -{ - register int c1, c2, c3, c4; - while(iof_ensure(O, 3)) - { - do { c1 = iof_get(I); } while (ignored(c1)); - if (base64_eof(c1)) - return IOFEOF; - do { c2 = iof_get(I); } while (ignored(c2)); - if (base64_eof(c2)) - return IOFERR; - do { c3 = iof_get(I); } while (ignored(c3)); - if (base64_eof(c3)) - { - if ((c1 = base64_value(c1)) < 0 || (c2 = base64_value(c2)) < 0) - return IOFERR; - base64_decode_tail2(O, c1, c2); - return IOFEOF; - } - do { c4 = iof_get(I); } while (ignored(c4)); - if (base64_eof(c4)) - { - if ((c1 = base64_value(c1)) < 0 || (c2 = base64_value(c2)) < 0 || (c3 = base64_value(c3)) < 0) - return IOFERR; - base64_decode_tail3(O, c1, c2, c3); - return IOFEOF; - } - if ((c1 = base64_value(c1)) < 0 || (c2 = base64_value(c2)) < 0 || - (c3 = base64_value(c3)) < 0 || (c4 = base64_value(c4)) < 0) - return IOFERR; - base64_decode_word(O, c1, c2, c3, c4); - } - return IOFFULL; -} - -iof_status base64_decode_state (iof *I, iof *O, basexx_state *state) -{ - register int c1, c2, c3, c4; - register int d1, d2, d3, d4; - switch(state->left) - { - case 0: goto byte0; - case 1: get_tail1(state, c1); goto byte1; - case 2: get_tail2(state, c1, c2); goto byte2; - case 3: get_tail3(state, c1, c2, c3); goto byte3; - } - while(iof_ensure(O, 3)) - { - byte0: - do { c1 = iof_get(I); } while (ignored(c1)); - if (base64_eof(c1)) - return (state->flush ? IOFEOF : IOFEMPTY); - byte1: - do { c2 = iof_get(I); } while (ignored(c2)); - if (base64_eof(c2)) - { - set_tail1(state, c1); /* set tail to let the caller make padding or display invalid char in case of error */ - return (state->flush ? IOFERR : IOFEMPTY); /* if state->flush then error; tail must have at least two bytes */ - } - byte2: - do { c3 = iof_get(I); } while (ignored(c3)); - if (base64_eof(c3)) - { - set_tail2(state, c1, c2); - if (state->flush) - { - if ((c1 = base64_value(c1)) < 0 || (c2 = base64_value(c2)) < 0) - return IOFERR; - base64_decode_tail2(O, c1, c2); - return IOFEOF; - } - else - return IOFEMPTY; - } - byte3: - do { c4 = iof_get(I); } while (ignored(c4)); - if (base64_eof(c4)) - { - set_tail3(state, c1, c2, c3); - if (state->flush) - { - if ((c1 = base64_value(c1)) < 0 || (c2 = base64_value(c2)) < 0 || (c3 = base64_value(c3)) < 0) - return IOFERR; - base64_decode_tail3(O, c1, c2, c3); - return IOFEOF; - } - else - return IOFEMPTY; - } - if ((d1 = base64_value(c1)) < 0 || (d2 = base64_value(c2)) < 0 || - (d3 = base64_value(c3)) < 0 || (d4 = base64_value(c4)) < 0) - { - set_tail4(state, c1, c2, c3, c4); - return IOFERR; - } - base64_decode_word(O, d1, d2, d3, d4); - } - return IOFFULL; -} - -/* base85 */ - -const char base85_alphabet[] = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstu"; /* for completness, not used below */ - -const int base85_lookup[] = { - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14, - 15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30, - 31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46, - 47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62, - 63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78, - 79,80,81,82,83,84,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -}; - -#define base85_value(c) base85_lookup[(uint8_t)(c)] - -#define base85_encode_word(O, code) \ - (*(O->pos+4) = '!' + code%85, code /= 85, *(O->pos+3) = '!' + code%85, code /= 85, \ - *(O->pos+2) = '!' + code%85, code /= 85, *(O->pos+1) = '!' + code%85, code /= 85, \ - *(O->pos) = '!' + code, \ - O->pos += 5) - -#define base85_encode_tail3(O, code) \ - (*(O->pos+3) = '!' + code%85, code /= 85, *(O->pos+2) = '!' + code%85, code /= 85, \ - *(O->pos+1) = '!' + code%85, code /= 85, *(O->pos) = '!' + code, \ - O->pos += 4) - -#define base85_encode_tail2(O, code) \ - (*(O->pos+2) = '!' + code%85, code /= 85, *(O->pos+1) = '!' + code%85, code /= 85, \ - *(O->pos) = '!' + code, \ - O->pos += 3) - -#define base85_encode_tail1(O, code) \ - (*(O->pos+1) = '!' + code%85, code /= 85, *(O->pos) = '!' + code, \ - O->pos += 2) - -iof_status base85_encoded (const void *data, size_t size, iof *O) -{ - unsigned int code; - const uint8_t *s, *e; - uint8_t c1, c2, c3, c4; - for (s = (const uint8_t *)data, e = s + size; s + 3 < e; ) - { - if (!iof_ensure(O, 5)) - return IOFFULL; - c1 = *s++; - c2 = *s++; - c3 = *s++; - c4 = *s++; - code = (c1<<24)|(c2<<16)|(c3<<8)|c4; - if (code == 0) - { - iof_set(O, 'z'); - continue; - } - base85_encode_word(O, code); - } - switch (e - s) - { - case 0: - break; - case 1: - if (!iof_ensure(O, 2)) - return IOFFULL; - c1 = *s; - code = (c1<<24)/85/85/85; - base85_encode_tail1(O, code); - break; - case 2: - if (!iof_ensure(O, 3)) - return IOFFULL; - c1 = *s++; - c2 = *s; - code = ((c1<<24)|(c2<<16))/85/85; - base85_encode_tail2(O, code); - break; - case 3: - if (!iof_ensure(O, 4)) - return IOFFULL; - c1 = *s++; - c2 = *s++; - c3 = *s; - code = ((c1<<24)|(c2<<16)|(c3<<8))/85; - base85_encode_tail3(O, code); - break; - } - return IOFEOF; -} - -iof_status base85_encoded_ln (const void *data, size_t size, iof *O, size_t line, size_t maxline) -{ - unsigned int code; - const uint8_t *s, *e; - uint8_t c1, c2, c3, c4; - for (s = (const uint8_t *)data, e = s + size; s + 3 < e; ) - { - if (!iof_ensure(O, 6)) - return IOFFULL; - c1 = *s++; - c2 = *s++; - c3 = *s++; - c4 = *s++; - code = (c1<<24)|(c2<<16)|(c3<<8)|c4; - if (code == 0) - { - put_nl(O, line, maxline, 1); - iof_set(O, 'z'); - continue; - } - put_nl(O, line, maxline, 5); - base85_encode_word(O, code); - } - switch (e - s) - { - case 0: - break; - case 1: - if (!iof_ensure(O, 3)) - return IOFFULL; - c1 = *s; - code = (c1<<24)/85/85/85; - put_nl(O, line, maxline, 2); - base85_encode_tail1(O, code); - break; - case 2: - if (!iof_ensure(O, 4)) - return IOFFULL; - c1 = *s++; - c2 = *s; - code = ((c1<<24)|(c2<<16))/85/85; - put_nl(O, line, maxline, 3); - base85_encode_tail2(O, code); - break; - case 3: - if (!iof_ensure(O, 5)) - return IOFFULL; - c1 = *s++; - c2 = *s++; - c3 = *s; - code = ((c1<<24)|(c2<<16)|(c3<<8))/85; - put_nl(O, line, maxline, 4); - base85_encode_tail3(O, code); - break; - } - return IOFEOF; -} - -iof_status base85_encode (iof *I, iof *O) -{ - register int c1, c2, c3, c4; - register unsigned int code; - while(iof_ensure(O, 5)) - { - if ((c1 = iof_get(I)) < 0) - return IOFEOF; - if ((c2 = iof_get(I)) < 0) - { - code = (c1<<24)/85/85/85; - base85_encode_tail1(O, code); - return IOFEOF; - } - if ((c3 = iof_get(I)) < 0) - { - code = ((c1<<24)|(c2<<16))/85/85; - base85_encode_tail2(O, code); - return IOFEOF; - } - if ((c4 = iof_get(I)) < 0) - { - code = ((c1<<24)|(c2<<16)|(c3<<8))/85; - base85_encode_tail3(O, code); - return IOFEOF; - } - code = (c1<<24)|(c2<<16)|(c3<<8)|c4; - if (code == 0) - { - iof_set(O, 'z'); - continue; - } - /* in btoa 'y' character stays for 0x20202020, but pdf does not support this */ - /* if (code == 0x20202020) - { - iof_set(O, 'y'); - continue; - } */ - base85_encode_word(O, code); - } - return IOFFULL; -} - -iof_status base85_encode_state (iof *I, iof *O, basexx_state *state) -{ - register int c1, c2, c3, c4; - register unsigned int code; - if (!(iof_ensure(O, 5))) - return IOFFULL; - switch(state->left) - { - case 0: goto byte0; - case 1: get_tail1(state, c1); goto byte1; - case 2: get_tail2(state, c1, c2); goto byte2; - case 3: get_tail3(state, c1, c2, c3); goto byte3; - } - while(iof_ensure(O, 5)) - { - byte0: - if ((c1 = iof_get(I)) < 0) - return (state->flush ? IOFEOF : IOFEMPTY); - byte1: - if ((c2 = iof_get(I)) < 0) - { - set_tail1(state, c1); - if (state->flush) - { - code = (c1<<24)/85/85/85; - base85_encode_tail1(O, code); - return IOFEOF; - } - return IOFEMPTY; - } - byte2: - if ((c3 = iof_get(I)) < 0) - { - set_tail2(state, c1, c2); - if (state->flush) - { - code = ((c1<<24)|(c2<<16))/85/85; - base85_encode_tail2(O, code); - return IOFEOF; - } - return IOFEMPTY; - } - byte3: - if ((c4 = iof_get(I)) < 0) - { - set_tail3(state, c1, c2, c3); - if (state->flush) - { - code = ((c1<<24)|(c2<<16)|(c3<<8))/85; - base85_encode_tail3(O, code); - return IOFEOF; - } - return IOFEMPTY; - } - code = (c1<<24)|(c2<<16)|(c3<<8)|c4; - if (code == 0) - { - iof_set(O, 'z'); - continue; - } - base85_encode_word(O, code); - } - return IOFFULL; -} - -iof_status base85_encode_ln (iof *I, iof *O, size_t line, size_t maxline) -{ - register int c1, c2, c3, c4; - register unsigned int code; - while(iof_ensure(O, 6)) - { - if ((c1 = iof_get(I)) < 0) - return IOFEOF; - if ((c2 = iof_get(I)) < 0) - { - code = (c1<<24)/85/85/85; - put_nl(O, line, maxline, 2); - base85_encode_tail1(O, code); - return IOFEOF; - } - if ((c3 = iof_get(I)) < 0) - { - code = ((c1<<24)|(c2<<16))/85/85; - put_nl(O, line, maxline, 3); - base85_encode_tail2(O, code); - return IOFEOF; - } - if ((c4 = iof_get(I)) < 0) - { - code = ((c1<<24)|(c2<<16)|(c3<<8))/85; - put_nl(O, line, maxline, 4); - base85_encode_tail3(O, code); - return IOFEOF; - } - code = (c1<<24)|(c2<<16)|(c3<<8)|c4; - if (code == 0) - { - put_nl(O, line, maxline, 1); - iof_set(O, 'z'); - continue; - } - put_nl(O, line, maxline, 5); - base85_encode_word(O, code); - } - return IOFFULL; -} - -iof_status base85_encode_state_ln (iof *I, iof *O, basexx_state *state) -{ - register int c1, c2, c3, c4; - register unsigned int code; - if (!(iof_ensure(O, 6))) - return IOFFULL; - switch(state->left) - { - case 0: goto byte0; - case 1: get_tail1(state, c1); goto byte1; - case 2: get_tail2(state, c1, c2); goto byte2; - case 3: get_tail3(state, c1, c2, c3); goto byte3; - } - while(iof_ensure(O, 6)) - { - byte0: - if ((c1 = iof_get(I)) < 0) - return (state->flush ? IOFEOF : IOFEMPTY); - byte1: - if ((c2 = iof_get(I)) < 0) - { - set_tail1(state, c1); - if (state->flush) - { - code = (c1<<24)/85/85/85; - put_nl(O, state->line, state->maxline, 2); - base85_encode_tail1(O, code); - return IOFEOF; - } - return IOFEMPTY; - } - byte2: - if ((c3 = iof_get(I)) < 0) - { - set_tail2(state, c1, c2); - if (state->flush) - { - code = ((c1<<24)|(c2<<16))/85/85; - put_nl(O, state->line, state->maxline, 3); - base85_encode_tail2(O, code); - return IOFEOF; - } - return IOFEMPTY; - } - byte3: - if ((c4 = iof_get(I)) < 0) - { - set_tail3(state, c1, c2, c3); - if (state->flush) - { - code = ((c1<<24)|(c2<<16)|(c3<<8))/85; - put_nl(O, state->line, state->maxline, 4); - base85_encode_tail3(O, code); - return IOFEOF; - } - return IOFEMPTY; - } - code = (c1<<24)|(c2<<16)|(c3<<8)|c4; - if (code == 0) - { - put_nl(O, state->line, state->maxline, 1); - iof_set(O, 'z'); - continue; - } - put_nl(O, state->line, state->maxline, 5); - base85_encode_word(O, code); - } - return IOFFULL; -} - -#define base85_code(c1, c2, c3, c4, c5) ((((c1*85+c2)*85+c3)*85+c4)*85+c5) - -iof_status base85_decode (iof *I, iof *O) -{ - register int c1, c2, c3, c4, c5; - register unsigned int code; - while (iof_ensure(O, 4)) - { - do { c1 = iof_get(I); } while (ignored(c1)); - if (base85_eof(c1)) - return IOFEOF; - switch (c1) - { - case 'z': - iof_set4(O, '\0', '\0', '\0', '\0'); - continue; - case 'y': - iof_set4(O, ' ', ' ', ' ', ' '); - continue; - } - do { c2 = iof_get(I); } while (ignored(c2)); - if (base85_eof(c2)) - return IOFERR; - do { c3 = iof_get(I); } while (ignored(c3)); - if (base85_eof(c3)) - { - if ((c1 = base85_value(c1)) < 0 || (c2 = base85_value(c2)) < 0) - return IOFERR; - code = base85_code(c1, c2, 84, 84, 84); /* padding with 'u' (117); 117-33 = 84 */ - iof_set(O, code>>24); - return IOFEOF; - } - do { c4 = iof_get(I); } while (ignored(c4)); - if (base85_eof(c4)) - { - if ((c1 = base85_value(c1)) < 0 || (c2 = base85_value(c2)) < 0 || (c3 = base85_value(c3)) < 0) - return IOFERR; - code = base85_code(c1, c2, c3, 84, 84); - iof_set2(O, code>>24, (code>>16)&255); - return IOFEOF; - } - do { c5 = iof_get(I); } while (ignored(c5)); - if (base85_eof(c5)) - { - if ((c1 = base85_value(c1)) < 0 || (c2 = base85_value(c2)) < 0 || - (c3 = base85_value(c3)) < 0 || (c4 = base85_value(c4)) < 0) - return IOFERR; - code = base85_code(c1, c2, c3, c4, 84); - iof_set3(O, code>>24, (code>>16)&255, (code>>8)&255); - return IOFEOF; - } - if ((c1 = base85_value(c1)) < 0 || (c2 = base85_value(c2)) < 0 || (c3 = base85_value(c3)) < 0 || - (c4 = base85_value(c4)) < 0 || (c5 = base85_value(c5)) < 0) - return IOFERR; - code = base85_code(c1, c2, c3, c4, c5); - iof_set4(O, code>>24, (code>>16)&255, (code>>8)&255, code&255); - } - return IOFFULL; -} - -iof_status base85_decode_state (iof *I, iof *O, basexx_state *state) -{ - register int c1, c2, c3, c4, c5; - register int d1, d2, d3, d4, d5; - register unsigned int code; - if (!(iof_ensure(O, 4))) - return IOFFULL; - switch(state->left) - { - case 0: goto byte0; - case 1: get_tail1(state, c1); goto byte1; - case 2: get_tail2(state, c1, c2); goto byte2; - case 3: get_tail3(state, c1, c2, c3); goto byte3; - case 4: get_tail4(state, c1, c2, c3, c4); goto byte4; - } - while (iof_ensure(O, 4)) - { - byte0: - do { c1 = iof_get(I); } while (ignored(c1)); - if (base85_eof(c1)) - return (state->flush ? IOFEOF : IOFEMPTY); - switch (c1) - { - case 'z': - iof_set4(O, '\0', '\0', '\0', '\0'); - continue; - case 'y': - iof_set4(O, ' ', ' ', ' ', ' '); - continue; - } - byte1: - do { c2 = iof_get(I); } while (ignored(c2)); - if (base85_eof(c2)) - { - set_tail1(state, c1); - return (state->flush ? IOFERR : IOFEMPTY); /* if state->flush then error; tail must have at least two bytes */ - } - byte2: - do { c3 = iof_get(I); } while (ignored(c3)); - if (base85_eof(c3)) - { - set_tail2(state, c1, c2); - if (state->flush) - { - if ((c1 = base85_value(c1)) < 0 || (c2 = base85_value(c2)) < 0) - return IOFERR; - code = base85_code(c1, c2, 84, 84, 84); - iof_set(O, code>>24); - return IOFEOF; - } - return IOFEMPTY; - } - byte3: - do { c4 = iof_get(I); } while (ignored(c4)); - if (base85_eof(c4)) - { - set_tail3(state, c1, c2, c3); - if (state->flush) - { - if ((c1 = base85_value(c1)) < 0 || (c2 = base85_value(c2)) < 0 || (c3 = base85_value(c3)) < 0) - return IOFERR; - code = base85_code(c1, c2, c3, 84, 84); - iof_set2(O, code>>24, (code>>16)&255); - return IOFEOF; - } - return IOFEMPTY; - } - byte4: - do { c5 = iof_get(I); } while (ignored(c5)); - if (base85_eof(c5)) - { - set_tail4(state, c1, c2, c3, c4); - if (state->flush) - { - if ((c1 = base85_value(c1)) < 0 || (c2 = base85_value(c2)) < 0 || - (c3 = base85_value(c3)) < 0 || (c4 = base85_value(c4)) < 0) - return IOFERR; - code = base85_code(c1, c2, c3, c4, 84); - iof_set3(O, code>>24, (code>>16)&255, (code>>8)&255); - return IOFEOF; - } - return IOFEMPTY; - } - if ((d1 = base85_value(c1)) < 0 || (d2 = base85_value(c2)) < 0 || (d3 = base85_value(c3)) < 0 || - (d4 = base85_value(c4)) < 0 || (d5 = base85_value(c5)) < 0) - { - set_tail5(state, c1, c2, c3, c4, c5); - return IOFERR; - } - code = base85_code(d1, d2, d3, d4, d5); - iof_set4(O, code>>24, (code>>16)&255, (code>>8)&255, code&255); - } - return IOFFULL; -} - -/* postscript run length */ - -void runlength_state_init (runlength_state *state) -{ - state->run = -1; - state->flush = 0; - state->c1 = 0; - state->c2 = 0; - state->pos = NULL; -} - -iof_status runlength_encode (iof *I, iof *O) -{ - register int c1, c2, run = -1; - uint8_t *pos; - c1 = 0, c2 = 0; /* avoid warning */ - while (iof_ensure(O, 1+128+1)) - { /* ensured space for single length byte, up to 128 bytes to be copied, possible eod marker */ - pos = O->pos++; - switch (run) - { - case -1: /* initial state; get first byte */ - if ((c1 = iof_get(I)) < 0) - return (*pos = 128, IOFEOF); - run = 0; - FALLTHRU // fall through - case 0: /* `repeat' state; get another byte and compare */ - if ((c2 = iof_get(I)) < 0) - return (*pos = 0, iof_set2(O, c1, 128), IOFEOF); - run = (c1 == c2 ? 257-2 : 0); - break; - } - if (run < 128) - { /* single length byte, up to 128 bytes to be copied, possible eod marker */ - iof_set(O, c1); - for (c1 = c2, c2 = iof_char(I); c1 != c2 && run < 127; c1 = c2, c2 = iof_next(I)) - { - if (c2 < 0) /* O->pos must not change until next call to calling encoder!!! */ - return (*pos = (uint8_t)run+1, iof_set2(O, c1, 128), IOFEOF); - iof_set(O, c1); - ++run; - } - } - else // if run > 128 - { - for (c2 = iof_get(I); c1 == c2 && run > 129; c2 = iof_get(I)) - --run; - if (c2 < 0) - return (*pos = (uint8_t)run, iof_set2(O, c1, 128), IOFEOF); - iof_set(O, c1); - } - *pos = (uint8_t)run; - c1 = c2; - run = 0; - } - return IOFFULL; -} - -iof_status runlength_encode_state (iof *I, iof *O, runlength_state *state) -{ - while (iof_ensure(O, 3)) /* single length byte, the byte to be repeated and eod */ - { - state->pos = O->pos++; - switch (state->run) - { - case -1: /* initial state; get first byte */ - if ((state->c1 = iof_get(I)) < 0) - return (state->flush ? (*state->pos = 128, IOFEOF) : IOFEMPTY); - state->run = 0; - FALLTHRU // fall through - case 0: /* `repeat' state; get another byte and compare */ - if ((state->c2 = iof_get(I)) < 0) - return (state->flush ? (*state->pos = 0, iof_set2(O, state->c1, 128), IOFEOF) : IOFEMPTY); - state->run = (state->c1 == state->c2 ? 257-2 : 0); - break; - } - if (state->run < 128) - { /* ensure space for single length byte, up to 128 bytes to be copied, plus possible eod marker, minus those already copied */ - if (!iof_ensure(O, 1+128+1-state->run)) - return IOFFULL; - iof_set(O, state->c1); - for (state->c1 = state->c2, state->c2 = iof_char(I); - state->c1 != state->c2 && state->run < 127; - state->c1 = state->c2, state->c2 = iof_next(I)) - { - if (state->c2 < 0) /* O->pos must not change until next call to calling encoder!!! */ - return (state->flush ? (*state->pos = (uint8_t)state->run+1, iof_set2(O, state->c1, 128), IOFEOF) : IOFEMPTY); - iof_set(O, state->c1); - ++state->run; - } - } - else // if run > 128 - { - for (state->c2 = iof_get(I); state->c1 == state->c2 && state->run > 129; state->c2 = iof_get(I)) - --state->run; - if (state->c2 < 0) - return (state->flush ? (*state->pos = (uint8_t)state->run, iof_set2(O, state->c1, 128), IOFEOF) : IOFEMPTY); - iof_set(O, state->c1); - } - *state->pos = (uint8_t)state->run; - state->c1 = state->c2; - state->run = 0; - } - return IOFFULL; -} - -iof_status runlength_decode (iof *I, iof *O) -{ - register int c, run = -1; - while (1) - { - if (run == -1) /* initial state */ - { - if ((run = iof_get(I)) < 0) - { - run = -1; /* don't assume IOFEOF == -1 */ - return IOFEOF; - } - } - if (run < 128) - { /* copy (run + 1) following bytes */ - while (run > -1) - { - if (iof_ensure(O, 1)) - { - if ((c = iof_get(I)) < 0) - return IOFERR; - iof_set(O, c); - --run; - continue; - } - return IOFFULL; - } - } - else if (run > 128) - { /* replicate the following byte (257 - run) times */ - if ((c = iof_get(I)) < 0) /* cf. state-wise version; don't change input position until we got this byte */ - return IOFERR; - while (run < 257) - { - if (iof_ensure(O, 1)) - { - iof_set(O, c); - ++run; - continue; - } - return IOFFULL; - } - run = -1; - } - else // c == 128 - return IOFEOF; - } - // return IOFFULL; -} - -iof_status runlength_decode_state (iof *I, iof *O, runlength_state *state) -{ - register int c; - while (1) - { - if (state->run == -1) /* initial state */ - { - if ((state->run = iof_char(I)) < 0) - { - state->run = -1; /* don't assume IOFEOF == -1 */ - return (state->flush ? IOFEOF : IOFEMPTY); - } - ++I->pos; - } - if (state->run < 128) - { /* copy (state->run + 1) following bytes */ - while (state->run > -1) - { - if (iof_ensure(O, 1)) - { - if ((c = iof_char(I)) < 0) - return (state->flush ? IOFERR : IOFEMPTY); - ++I->pos; - iof_set(O, c); - --state->run; - continue; - } - return IOFFULL; - } - } - else if (state->run > 128) - { /* replicate the following byte (257 - state->run) times */ - if ((c = iof_char(I)) < 0) - return (state->flush ? IOFERR : IOFEMPTY); - ++I->pos; - while (state->run < 257) - { - if (iof_ensure(O, 1)) - { - iof_set(O, c); - ++state->run; - continue; - } - return IOFFULL; - } - state->run = -1; - } - else // c == 128 - return IOFEOF; - } - // return IOFFULL; -} - -/* filters */ - -// base16 decoder function - -static size_t base16_decoder (iof *F, iof_mode mode) -{ - basexx_state *state; - iof_status status; - size_t tail; - - switch(mode) - { - case IOFLOAD: - case IOFREAD: - if (F->flags & IOF_STOPPED) - return 0; - tail = iof_tail(F); - F->pos = F->buf + tail; - F->end = F->buf + F->space; - state = iof_filter_state(basexx_state *, F); - do { - status = base16_decode_state(F->next, F, state); - } while (mode == IOFLOAD && status == IOFFULL && iof_resize_buffer(F)); - return iof_decoder_retval(F, "base16", status); - case IOFCLOSE: - iof_free(F); - return 0; - default: - break; - } - return 0; -} - -// base16 encoder function - -static size_t base16_encoder (iof *F, iof_mode mode) -{ - basexx_state *state; - iof_status status; - - state = iof_filter_state(basexx_state *, F); - switch (mode) - { - case IOFFLUSH: - state->flush = 1; - FALLTHRU // fall through - case IOFWRITE: - F->end = F->pos; - F->pos = F->buf; - status = base16_encode_state_ln(F, F->next, state); - return iof_encoder_retval(F, "base16", status); - case IOFCLOSE: - if (!state->flush) - base16_encoder(F, IOFFLUSH); - iof_free(F); - return 0; - default: - break; - } - return 0; -} - -// base64 decoder function - -static size_t base64_decoder (iof *F, iof_mode mode) -{ - basexx_state *state; - iof_status status; - size_t tail; - - switch(mode) - { - case IOFLOAD: - case IOFREAD: - if (F->flags & IOF_STOPPED) - return 0; - tail = iof_tail(F); - F->pos = F->buf + tail; - F->end = F->buf + F->space; - state = iof_filter_state(basexx_state *, F); - do { - status = base64_decode_state(F->next, F, state); - } while (mode == IOFLOAD && status == IOFFULL && iof_resize_buffer(F)); - return iof_decoder_retval(F, "base64", status); - case IOFCLOSE: - iof_free(F); - return 0; - default: - break; - } - return 0; -} - -// base64 encoder function - -static size_t base64_encoder (iof *F, iof_mode mode) -{ - basexx_state *state; - iof_status status; - - state = iof_filter_state(basexx_state *, F); - switch (mode) - { - case IOFFLUSH: - state->flush = 1; - FALLTHRU // fall through - case IOFWRITE: - F->end = F->pos; - F->pos = F->buf; - status = base64_encode_state_ln(F, F->next, state); - return iof_encoder_retval(F, "base64", status); - case IOFCLOSE: - if (!state->flush) - base64_encoder(F, IOFFLUSH); - iof_free(F); - return 0; - default: - break; - } - return 0; -} - -// base85 decoder function - -static size_t base85_decoder (iof *F, iof_mode mode) -{ - basexx_state *state; - iof_status status; - size_t tail; - - switch(mode) - { - case IOFLOAD: - case IOFREAD: - if (F->flags & IOF_STOPPED) - return 0; - tail = iof_tail(F); - F->pos = F->buf + tail; - F->end = F->buf + F->space; - state = iof_filter_state(basexx_state *, F); - do { - status = base85_decode_state(F->next, F, state); - } while (mode == IOFLOAD && status == IOFFULL && iof_resize_buffer(F)); - return iof_decoder_retval(F, "base85", status); - case IOFCLOSE: - iof_free(F); - return 0; - default: - break; - } - return 0; -} - -// base85 encoder function - -static size_t base85_encoder (iof *F, iof_mode mode) -{ - basexx_state *state; - iof_status status; - - state = iof_filter_state(basexx_state *, F); - switch (mode) - { - case IOFFLUSH: - state->flush = 1; - FALLTHRU // fall through - case IOFWRITE: - F->end = F->pos; - F->pos = F->buf; - status = base85_encode_state_ln(F, F->next, state); - return iof_encoder_retval(F, "base85", status); - case IOFCLOSE: - if (!state->flush) - base85_encoder(F, IOFFLUSH); - iof_free(F); - return 0; - default: - break; - } - return 0; -} - -// runlength decoder function - -static size_t runlength_decoder (iof *F, iof_mode mode) -{ - runlength_state *state; - iof_status status; - size_t tail; - - switch(mode) - { - case IOFLOAD: - case IOFREAD: - if (F->flags & IOF_STOPPED) - return 0; - tail = iof_tail(F); - F->pos = F->buf + tail; - F->end = F->buf + F->space; - state = iof_filter_state(runlength_state *, F); - do { - status = runlength_decode_state(F->next, F, state); - } while (mode == IOFLOAD && status == IOFFULL && iof_resize_buffer(F)); - return iof_decoder_retval(F, "runlength", status); - case IOFCLOSE: - iof_free(F); - return 0; - default: - break; - } - return 0; -} - -// runlength encoder function - -static size_t runlength_encoder (iof *F, iof_mode mode) -{ - runlength_state *state; - iof_status status; - - state = iof_filter_state(runlength_state *, F); - switch (mode) - { - case IOFFLUSH: - state->flush = 1; - FALLTHRU // fall through - case IOFWRITE: - F->end = F->pos; - F->pos = F->buf; - status = runlength_encode_state(F, F->next, state); - return iof_encoder_retval(F, "runlength", status); - case IOFCLOSE: - if (!state->flush) - runlength_encoder(F, IOFFLUSH); - iof_free(F); - return 0; - default: - break; - } - return 0; -} - -// - -int iof_filter_basexx_encoder_ln (iof *F, size_t line, size_t maxline) -{ - basexx_state *state; - if (maxline > 8 && line < maxline) - { - state = iof_filter_state(basexx_state *, F); - state->line = line; - state->maxline = maxline; - return 1; - } - return 0; -} - -/* base 16 */ - -iof * iof_filter_base16_decoder (iof *N) -{ - iof *I; - basexx_state_pointer P; - I = iof_filter_reader(base16_decoder, sizeof(basexx_state), &P.voidstate); - iof_setup_next(I, N); - basexx_state_init(P.basexxstate); - P.basexxstate->flush = 1; // means N is supposed to be continuous input - return I; -} - -iof * iof_filter_base16_encoder (iof *N) -{ - iof *O; - basexx_state_pointer P; - O = iof_filter_writer(base16_encoder, sizeof(basexx_state), &P.voidstate); - iof_setup_next(O, N); - basexx_state_init(P.basexxstate); - return O; -} - -/* base 64 */ - -iof * iof_filter_base64_decoder (iof *N) -{ - iof *I; - basexx_state_pointer P; - I = iof_filter_reader(base64_decoder, sizeof(basexx_state), &P.voidstate); - iof_setup_next(I, N); - basexx_state_init(P.basexxstate); - P.basexxstate->flush = 1; - return I; -} - -iof * iof_filter_base64_encoder (iof *N) -{ - iof *O; - basexx_state_pointer P; - O = iof_filter_writer(base64_encoder, sizeof(basexx_state), &P.voidstate); - iof_setup_next(O, N); - basexx_state_init(P.basexxstate); - return O; -} - -/* base 85 */ - -iof * iof_filter_base85_decoder (iof *N) -{ - iof *I; - basexx_state_pointer P; - I = iof_filter_reader(base85_decoder, sizeof(basexx_state), &P.voidstate); - iof_setup_next(I, N); - basexx_state_init(P.basexxstate); - P.basexxstate->flush = 1; - return I; -} - -iof * iof_filter_base85_encoder (iof *N) -{ - iof *O; - basexx_state_pointer P; - O = iof_filter_writer(base85_encoder, sizeof(basexx_state), &P.voidstate); - iof_setup_next(O, N); - basexx_state_init(P.basexxstate); - return O; -} - -/* runlength stream filter */ - -iof * iof_filter_runlength_decoder (iof *N) -{ - iof *I; - basexx_state_pointer P; - I = iof_filter_reader(runlength_decoder, sizeof(runlength_state), &P.voidstate); - iof_setup_next(I, N); - runlength_state_init(P.runlengthstate); - P.runlengthstate->flush = 1; - return I; -} - -iof * iof_filter_runlength_encoder (iof *N) -{ - iof *O; - basexx_state_pointer P; - O = iof_filter_writer(runlength_encoder, sizeof(runlength_state), &P.voidstate); - iof_setup_next(O, N); - runlength_state_init(P.runlengthstate); - return O; -} diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilbasexx.h b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilbasexx.h deleted file mode 100644 index 81891b549fb..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilbasexx.h +++ /dev/null @@ -1,111 +0,0 @@ - -/* base encodings */ - -#ifndef UTIL_BASEXX_H -#define UTIL_BASEXX_H - -#include "utiliof.h" - -/* base codecs state */ - -typedef struct basexx_state basexx_state; - -#define BASEXX_MAXLINE 80 -#define BASEXX_PDF - -void basexx_state_init_ln (basexx_state *state, size_t line, size_t maxline); -#define basexx_state_init(state) basexx_state_init_ln(state, 0, BASEXX_MAXLINE) - -/* base16 */ - -int base16_getc (iof *I); -int base16_uc_putc (iof *I, int c); -int base16_lc_putc (iof *I, int c); -#define base16_putc base16_uc_putc - -iof_status base16_encoded_uc (const void *data, size_t size, iof *O); -iof_status base16_encoded_lc (const void *data, size_t size, iof *O); -iof_status base16_encoded_uc_ln (const void *data, size_t size, iof *O, size_t line, size_t maxline); -iof_status base16_encoded_lc_ln (const void *data, size_t size, iof *O, size_t line, size_t maxline); - -iof_status base16_encode_uc (iof *I, iof *O); -iof_status base16_encode_lc (iof *I, iof *O); -iof_status base16_encode_uc_ln (iof *I, iof *O, size_t line, size_t maxline); -iof_status base16_encode_lc_ln (iof *I, iof *O, size_t line, size_t maxline); -iof_status base16_decode (iof *I, iof *O); - -#define base16_encoded base16_encoded_uc -#define base16_encoded_ln base16_encoded_uc_ln -#define base16_encode base16_encode_uc -#define base16_encode_ln base16_encode_uc_ln - -iof_status base16_encode_state_uc (iof *I, iof *O, basexx_state *state); -iof_status base16_encode_state_lc (iof *I, iof *O, basexx_state *state); -iof_status base16_encode_state_uc_ln (iof *I, iof *O, basexx_state *state); -iof_status base16_encode_state_lc_ln (iof *I, iof *O, basexx_state *state); -iof_status base16_decode_state (iof *I, iof *O, basexx_state *state); - -#define base16_encode_state base16_encode_state_uc -#define base16_encode_state_ln base16_encode_state_uc_ln - -/* base64 */ - -extern const char base64_alphabet[]; -extern const int base64_lookup[]; - -iof_status base64_encoded (const void *data, size_t size, iof *O); -iof_status base64_encoded_ln (const void *data, size_t size, iof *O, size_t line, size_t maxline); - -iof_status base64_encode (iof *I, iof *O); -iof_status base64_encode_ln (iof *I, iof *O, size_t line, size_t maxline); -iof_status base64_decode (iof *I, iof *O); - -iof_status base64_encode_state (iof *I, iof *O, basexx_state *state); -iof_status base64_encode_state_ln (iof *I, iof *O, basexx_state *state); -iof_status base64_decode_state (iof *I, iof *O, basexx_state *state); - -/* base85 */ - -extern const char base85_alphabet[]; -extern const int base85_lookup[]; - -iof_status base85_encoded (const void *data, size_t size, iof *O); -iof_status base85_encoded_ln (const void *data, size_t size, iof *O, size_t line, size_t maxline); - -iof_status base85_encode (iof *I, iof *O); -iof_status base85_encode_ln (iof *I, iof *O, size_t line, size_t maxline); -iof_status base85_decode (iof *I, iof *O); - -iof_status base85_encode_state (iof *I, iof *O, basexx_state *state); -iof_status base85_encode_state_ln (iof *I, iof *O, basexx_state *state); -iof_status base85_decode_state (iof *I, iof *O, basexx_state *state); - -/* run length */ - -typedef struct runlength_state runlength_state; - -void runlength_state_init (runlength_state *state); - -iof_status runlength_encode (iof *I, iof *O); -iof_status runlength_encode_state (iof *I, iof *O, runlength_state *state); - -iof_status runlength_decode (iof *I, iof *O); -iof_status runlength_decode_state (iof *I, iof *O, runlength_state *state); - -/* filters */ - -int iof_filter_basexx_encoder_ln (iof *N, size_t line, size_t maxline); - -iof * iof_filter_base16_decoder (iof *N); -iof * iof_filter_base16_encoder (iof *N); - -iof * iof_filter_base64_decoder (iof *N); -iof * iof_filter_base64_encoder (iof *N); - -iof * iof_filter_base85_decoder (iof *N); -iof * iof_filter_base85_encoder (iof *N); - -iof * iof_filter_runlength_decoder (iof *N); -iof * iof_filter_runlength_encoder (iof *N); - -#endif diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilcrypt.c b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilcrypt.c deleted file mode 100644 index 2c77e42a4c7..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilcrypt.c +++ /dev/null @@ -1,1190 +0,0 @@ - -#include "utilmem.h" -#include "utilcrypt.h" -#include "utilcryptdef.h" -#include "utilmd5.h" - -/* rc4 */ - -/* -Initializer arguments: -- state - crypt state -- map - a space for rc4 bytes map; may be left NULL in which case will be allocated -- vkey - crypt key; may be left NULL iff map is provided and properly initialized -- keylength - the length of crypt key (from 5 to 16 bytes) -*/ - -rc4_state * rc4_state_initialize (rc4_state *state, rc4_map *map, const void *vkey, size_t keylength) -{ - int i, j; - uint8_t tmp; - const uint8_t *key; - key = (const uint8_t *)vkey; - if (keylength == 0 || keylength > 256) - return NULL; - state->flags = 0; - if (map != NULL) - { - state->map = map; - } - else - { - state->map = (rc4_map *)util_malloc(sizeof(rc4_map)); - state->flags |= RC4_STATE_ALLOC; - } - - if (key != NULL) - { - for (i = 0; i < 256; ++i) - state->smap[i] = (uint8_t)i; - for (i = 0, j = 0; i < 256; ++i) - { - j = (j + state->smap[i] + key[i % keylength]) & 255; - tmp = state->smap[i]; - state->smap[i] = state->smap[j]; - state->smap[j] = tmp; - } - } - state->i = 0; - state->j = 0; - state->flush = 0; /* caller is responsible to override if necessary */ - return state; -} - -void rc4_map_save (rc4_state *state, rc4_map *map) -{ - memcpy(map, state->map, sizeof(rc4_map)); -} - -void rc4_map_restore (rc4_state *state, rc4_map *map) -{ - memcpy(state->map, map, sizeof(rc4_map)); - //state->flags = 0; - //state->flush = 0; - state->i = 0; - state->j = 0; -} - -static uint8_t rc4_next_random_byte (rc4_state *state) -{ - uint8_t tmp; - state->i = (state->i + 1) & 255; - state->j = (state->j + state->smap[state->i]) & 255; - tmp = state->smap[state->i]; - state->smap[state->i] = state->smap[state->j]; - state->smap[state->j] = tmp; - return state->smap[(state->smap[state->i] + state->smap[state->j]) & 255]; -} - -iof_status rc4_crypt_state (iof *I, iof *O, rc4_state *state) -{ - uint8_t r; - int c; - while (iof_ensure(O, 1)) - { - if ((c = iof_get(I)) < 0) - return c == IOFERR ? IOFERR : (state->flush ? IOFEOF : IOFEMPTY); - r = rc4_next_random_byte(state); - //r = r ^ ((uint8_t)c); - //iof_set(O, r); - iof_set(O, r ^ ((uint8_t)c)); - } - return IOFFULL; -} - -iof_status rc4_crypt (iof *I, iof *O, const void *key, size_t keylength) -{ - int ret; - rc4_state state; - rc4_map map; - if (rc4_state_initialize(&state, &map, key, keylength) == NULL) - return IOFERR; - state.flush = 1; - ret = rc4_crypt_state(I, O, &state); - rc4_state_close(&state); - return ret; -} - -/* -Variants that operates on c-strings can worn inplace, so output and input can be the same address. -Variant that takes rc4_state pointer expects the state properly initialized. Keep in mind -the crypt procedure modifies rc4 bytes map. All returns the size of encrypted/decrypted -data, which is the same as input data length for rc4. -*/ - -size_t rc4_crypt_data (const void *input, size_t length, void *output, const void *key, size_t keylength) -{ - rc4_state state; - rc4_map map; - if (rc4_state_initialize(&state, &map, key, keylength) == NULL) - return 0; - return rc4_crypt_state_data(&state, input, length, output); - // no need to call rc4_state_close() -} - -size_t rc4_crypt_state_data (rc4_state *state, const void *input, size_t length, void *output) -{ /* state assumed to be initialized and with the proper state of smap */ - const uint8_t *inp; - uint8_t r, *out; - size_t size; - inp = (const uint8_t *)input; - out = (uint8_t *)output; - for (size = 0; size < length; ++size, ++inp, ++out) - { - r = rc4_next_random_byte(state); - *out = r ^ *inp; - } - return length; -} - -void rc4_state_close (rc4_state *state) -{ - if (state->smap != NULL && (state->flags & RC4_STATE_ALLOC)) - { - util_free(state->smap); - state->smap = NULL; - } -} - -/* aes; parts of code excerpted from https://github.com/kokke/tiny-AES128-C */ - -static const uint8_t sbox[256] = { - 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, - 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, - 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, - 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, - 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, - 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, - 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, - 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, - 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, - 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, - 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, - 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, - 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, - 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, - 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, - 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 }; - -static const uint8_t rsbox[256] = -{ 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, - 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, - 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, - 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, - 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, - 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, - 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, - 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, - 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, - 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, - 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, - 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, - 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, - 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, - 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, - 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d }; - -/* -The round constant word array, rcon[i], contains the values given by -x to th e power (i-1) being powers of x (x is denoted as {02}) in the field GF(2^8) -Note that i starts at 1, not 0). -*/ - -static const uint8_t rcon[255] = { - 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, - 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, - 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, - 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, - 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, - 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, - 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, - 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, - 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, - 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, - 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, - 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, - 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, - 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, - 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, - 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb }; - -/* block copying */ - -#define aes_copy_block(output, input) memcpy(output, input, 16) - -static void aes_copy_cbc (uint8_t *data, const uint8_t *input) -{ - uint8_t i; - for (i = 0; i < 16; ++i) - data[i] ^= input[i]; -} - -static void aes_copy_xor (uint8_t *data, const uint8_t *input, const uint8_t *iv) -{ - uint8_t i; - for (i = 0; i < 16; ++i) - data[i] = input[i] ^ iv[i]; -} - -/* key expansion */ - -#define AES_COLUMNS 4 // constant in aes - -static void key_expansion (aes_state *state, const uint8_t *key) -{ - uint32_t i, j; - uint8_t t[4], temp; - uint8_t *keydata, keywords, columns; - - keywords = (uint8_t)(state->keylength >> 2); - keydata = (uint8_t *)state->keyblock; - - /* the first round key is the key itself */ - for(i = 0; i < keywords; ++i) - { - keydata[(i * 4) + 0] = key[(i * 4) + 0]; - keydata[(i * 4) + 1] = key[(i * 4) + 1]; - keydata[(i * 4) + 2] = key[(i * 4) + 2]; - keydata[(i * 4) + 3] = key[(i * 4) + 3]; - } - - /* others derived from the first */ - for(columns = AES_COLUMNS * (state->rounds + 1); i < columns; ++i) - { - for(j = 0; j < 4; ++j) - t[j] = keydata[(i - 1) * 4 + j]; - if (i % keywords == 0) - { - /* rotate the 4 bytes in a word to the left once; [a0,a1,a2,a3] becomes [a1,a2,a3,a0] */ - temp = t[0]; - t[0] = t[1]; - t[1] = t[2]; - t[2] = t[3]; - t[3] = temp; - - /* take a four-byte input word and apply the S-box to each of the four bytes to produce an output word */ - t[0] = sbox[t[0]]; - t[1] = sbox[t[1]]; - t[2] = sbox[t[2]]; - t[3] = sbox[t[3]]; - - t[0] = t[0] ^ rcon[i / keywords]; - } - else if (keywords > 6 && i % keywords == 4) - { - t[0] = sbox[t[0]]; - t[1] = sbox[t[1]]; - t[2] = sbox[t[2]]; - t[3] = sbox[t[3]]; - } - keydata[i * 4 + 0] = keydata[(i - keywords) * 4 + 0] ^ t[0]; - keydata[i * 4 + 1] = keydata[(i - keywords) * 4 + 1] ^ t[1]; - keydata[i * 4 + 2] = keydata[(i - keywords) * 4 + 2] ^ t[2]; - keydata[i * 4 + 3] = keydata[(i - keywords) * 4 + 3] ^ t[3]; - } - -} - -/* -An original implementation uses no private buffers except a keyblock. We need private buffers to -keep a CBC vector between calls and to be able to read input data not necessarily in 16-bytes blocks. -Encrypter would actually require only one such buffer, as CBC vector is applied on input data before -the actual cipher procedure. And CBC for the next chunk is simply the output from the previous. -Decrypter, however, applies the cipher first, then applies CBC to the output with a buffered init -vector, and the vector for the next call is the row input before cipher. Hence we need two 16-bytes -buffers for decrypter. -*/ - -/* -aes_state * aes_state_initialize_ecb (aes_state *State, uint8_t *keyblock, const uint8_t *key) -{ - state->flags = 0; - - state->flags |= AES_ECB_MODE; - - if (keyblock == NULL) - { - keyblock = util_malloc(sizeof(aes_keyblock)); - state->flags |= AES_STATE_ALLOC; - } - state->keyblock = keyblock; - key_expansion(state, key); - state->flush = 0; - return state; -} -*/ - -void aes_pdf_mode (aes_state *state) -{ - state->flags |= AES_INLINE_IV; - state->flags &= ~AES_NULL_PADDING; -} - -/* -Initialize arguments: -- state - crypt state -- keyblock - a space for aes key expansion; can be left NULL in which case will be allocated -- key - crypt key; can be left NULL iff keyblock is given and properly initialized -- keylength - the length of the key (16 or 32 bytes) -- iv - 16-bytes CBC initialization vector; - - if left NULL for encoder, one is generated and stored as state->iv - - can also be left NULL for decorer, but then AES_INLINE_IV must be set, as this informs decoder to take - an initialization vector from the beginning of the encrypted stream - -At the first approach, an initialization vector was copied to state block during initialization and encoders -assumed that the state block is the current initialization vector. This simplifies encrypting procedure, -as the output from every 16-bytes chunk encryption is an initialization vector for the next chunk. However, -it makes api usage cumbersome, as the user has to know that iv may need to be copied to state block -before each call. -*/ - -static int aes_key_length (aes_state *state, size_t keylength) -{ - state->keylength = keylength; - switch (keylength) - { - case 16: - state->rounds = 10; - break; - case 24: - state->rounds = 12; - break; - case 32: - state->rounds = 14; - break; - default: - return 0; - } - return 1; -} - -aes_state * aes_encode_initialize (aes_state *state, aes_keyblock *keyblock, const void *key, size_t keylength, const void *iv) -{ - state->flags = 0; - if (!aes_key_length(state, keylength)) - return NULL; - if (iv != NULL) - aes_copy_block(state->iv, iv); - else - aes_generate_iv(state->iv); - state->flags |= AES_HAS_IV; - - if (keyblock == NULL) - { - keyblock = (aes_keyblock *)util_malloc(sizeof(aes_keyblock)); - state->flags |= AES_STATE_ALLOC; - } - state->keyblock = keyblock; - if (key != NULL) /* if NULL we assume keyblock is given and already expanded */ - key_expansion(state, (const uint8_t *)key); - state->flush = 0; - return state; -} - -aes_state * aes_decode_initialize (aes_state *state, aes_keyblock *keyblock, const void *key, size_t keylength, const void *iv) -{ - state->flags = 0; - if (!aes_key_length(state, keylength)) - return NULL; - if (iv != NULL) - { - aes_copy_block(state->iv, iv); - state->flags |= AES_HAS_IV; - } - /* else if AES_INLINE_IV flag is set will be read from input */ - - if (keyblock == NULL) - { - keyblock = (aes_keyblock *)util_malloc(sizeof(aes_keyblock)); - state->flags |= AES_STATE_ALLOC; - } - state->keyblock = keyblock; - if (key != NULL) /* otherwise keyblock is assumed present and properly initialized */ - key_expansion(state, (const uint8_t *)key); - state->flush = 0; - return state; -} - -void aes_state_close (aes_state *state) -{ - if (state->keyblock != NULL && (state->flags & AES_STATE_ALLOC)) - util_free(state->keyblock); -} - -/* add round key */ - -static void aes_round_key (aes_block block, aes_block keyblock) -{ - uint8_t i, j; - for(i = 0; i < 4; ++i) - for(j = 0; j < 4; ++j) - block[i][j] ^= keyblock[i][j]; -} - -#define aes_add_key(block, keyblock, round) aes_round_key(block, (*keyblock)[round]) - -/* substitution */ - -static void aes_encode_sub (aes_block block) -{ - uint8_t i, j, v; - for(i = 0; i < 4; ++i) - for(j = 0; j < 4; ++j) - v = block[i][j], block[i][j] = sbox[v]; -} - -/* rows shift; the row index is the shift offset, the first order is not shifted */ - -static void aes_encode_shift (aes_block block) -{ - uint8_t tmp; - - /* 1st row rotated once */ - tmp = block[0][1]; - block[0][1] = block[1][1]; - block[1][1] = block[2][1]; - block[2][1] = block[3][1]; - block[3][1] = tmp; - - /* 2nd row rotated twice */ - tmp = block[0][2]; - block[0][2] = block[2][2]; - block[2][2] = tmp; - tmp = block[1][2]; - block[1][2] = block[3][2]; - block[3][2] = tmp; - - /* 3rd row rotated 3 times */ - tmp = block[0][3]; - block[0][3] = block[3][3]; - block[3][3] = block[2][3]; - block[2][3] = block[1][3]; - block[1][3] = tmp; -} - -static uint8_t xtime (uint8_t x) -{ - return ((x << 1) ^ (((x >> 7) & 1) * 0x1b)); -} - -/* mix columns */ - -static void aes_encode_mix (aes_block block) -{ - uint8_t i, tmp, tm, t; - - for(i = 0; i < 4; ++i) - { - t = block[i][0]; - tmp = block[i][0] ^ block[i][1] ^ block[i][2] ^ block[i][3] ; - tm = block[i][0] ^ block[i][1]; tm = xtime(tm); block[i][0] ^= tm ^ tmp; - tm = block[i][1] ^ block[i][2]; tm = xtime(tm); block[i][1] ^= tm ^ tmp; - tm = block[i][2] ^ block[i][3]; tm = xtime(tm); block[i][2] ^= tm ^ tmp; - tm = block[i][3] ^ t ; tm = xtime(tm); block[i][3] ^= tm ^ tmp; - } -} - -/* multiply is used to multiply numbers in the field GF(2^8) */ - -#define multiply(x, y) \ - ( ((y & 1) * x) ^ \ - ((y>>1 & 1) * xtime(x)) ^ \ - ((y>>2 & 1) * xtime(xtime(x))) ^ \ - ((y>>3 & 1) * xtime(xtime(xtime(x)))) ^ \ - ((y>>4 & 1) * xtime(xtime(xtime(xtime(x)))))) \ - -/* mix columns */ - -static void aes_decode_mix (aes_block block) -{ - int i; - uint8_t a, b, c, d; - - for(i = 0; i < 4; ++i) - { - a = block[i][0]; - b = block[i][1]; - c = block[i][2]; - d = block[i][3]; - block[i][0] = multiply(a, 0x0e) ^ multiply(b, 0x0b) ^ multiply(c, 0x0d) ^ multiply(d, 0x09); - block[i][1] = multiply(a, 0x09) ^ multiply(b, 0x0e) ^ multiply(c, 0x0b) ^ multiply(d, 0x0d); - block[i][2] = multiply(a, 0x0d) ^ multiply(b, 0x09) ^ multiply(c, 0x0e) ^ multiply(d, 0x0b); - block[i][3] = multiply(a, 0x0b) ^ multiply(b, 0x0d) ^ multiply(c, 0x09) ^ multiply(d, 0x0e); - } -} - -/* inverse substitution */ - -static void aes_decode_sub (aes_block block) -{ - uint8_t i, j, v; - for(i = 0; i < 4; ++i) - for(j = 0; j < 4; ++j) - v = block[i][j], block[i][j] = rsbox[v]; -} - -/* inverse shift rows */ - -static void aes_decode_shift (aes_block block) -{ - uint8_t tmp; - - /* 1st row rotated once right */ - tmp = block[3][1]; - block[3][1] = block[2][1]; - block[2][1] = block[1][1]; - block[1][1] = block[0][1]; - block[0][1] = tmp; - - /* 2st row rotated twice right */ - tmp = block[0][2]; - block[0][2] = block[2][2]; - block[2][2] = tmp; - tmp = block[1][2]; - block[1][2] = block[3][2]; - block[3][2] = tmp; - - /* 3rd row rotated 3 times right */ - tmp = block[0][3]; - block[0][3] = block[1][3]; - block[1][3] = block[2][3]; - block[2][3] = block[3][3]; - block[3][3] = tmp; -} - -/* aes block encoder */ - -static void aes_encode_cipher (aes_state *state) -{ - uint8_t round; - aes_add_key(state->block, state->keyblock, 0); - for (round = 1; round < state->rounds; ++round) - { - aes_encode_sub(state->block); - aes_encode_shift(state->block); - aes_encode_mix(state->block); - aes_add_key(state->block, state->keyblock, round); - } - aes_encode_sub(state->block); - aes_encode_shift(state->block); - aes_add_key(state->block, state->keyblock, state->rounds); -} - -/* aes block decoder */ - -static void aes_decode_cipher (aes_state *state) -{ - uint8_t round; - aes_add_key(state->block, state->keyblock, state->rounds); - for(round = state->rounds - 1; round > 0; --round) - { - aes_decode_shift(state->block); - aes_decode_sub(state->block); - aes_add_key(state->block, state->keyblock, round); - aes_decode_mix(state->block); - } - aes_decode_shift(state->block); - aes_decode_sub(state->block); - aes_add_key(state->block, state->keyblock, 0); -} - -/* tail block padding; RFC 2898, PKCS #5: Password-Based Cryptography Specification Version 2.0; pdf spec p. 119 */ - -#define aes_padding(state) ((state->flags & AES_NULL_PADDING) == 0) - -static void aes_put_padding (aes_state *state, uint8_t length) -{ - uint8_t pad; - pad = (aes_padding(state)) ? 16 - length : 0; - for (; length < 16; ++length) - state->data[length] = state->iv[length] ^ pad; -} - -static int aes_remove_padding (aes_state *state, uint8_t *data, uint8_t *length) -{ - uint8_t pad; - *length = 16; /* block length 16 means leave intact */ - if (aes_padding(state)) - { - pad = data[16 - 1]; - if (pad > 16) - return IOFERR; - for ( ; *length > 16 - pad; --(*length)) - if (data[*length - 1] != pad) - return IOFERR; - } - else - { - for ( ; *length > 0; --(*length)) - if (data[*length - 1] != '\0') - break; - } - return IOFEOF; -} - -/* aes codec */ - -/* make the cipher on input xor-ed with iv, save the output as a new iv, write the output */ -#define aes_encode_output(state, output) \ - (aes_encode_cipher(state), aes_copy_block(state->iv, state->data), aes_copy_block(output, state->data), output += 16) - -iof_status aes_encode_state (iof *I, iof *O, aes_state *state) -{ - int c; - - if (!(state->flags & AES_HAS_IV)) // weird - return IOFERR; - if ((state->flags & AES_INLINE_IV) && !(state->flags & AES_CONTINUE)) - { /* write iv at the beginning of encrypted data */ - if (!iof_ensure(O, 16)) - return IOFFULL; - aes_copy_block(O->pos, state->iv); - O->pos += 16; - state->flags |= AES_CONTINUE; - } - while (iof_ensure(O, 16)) - { - while (state->buffered < 16) - { - if ((c = iof_get(I)) != IOFEOF) - { /* get input byte XORed with iv */ - state->data[state->buffered] = state->iv[state->buffered] ^ ((uint8_t)c); - ++state->buffered; - } - else - { - if (state->flush) - { - if (state->buffered > 0 || aes_padding(state)) - { /* pad the last input chunk; for input divisable by 16, add 16 bytes 0x0f */ - aes_put_padding(state, state->buffered); - state->buffered = 16; - aes_encode_output(state, O->pos); - } - return IOFEOF; - } - else - return IOFEMPTY; - } - } - aes_encode_output(state, O->pos); - state->buffered = 0; - } - return IOFFULL; -} - -/* write iv to the output, save the raw input just buffered as iv for the next chunk, make the cipher, write out xoring with iv */ -#define aes_decode_output(state, output) \ - (aes_copy_block(output, state->iv), aes_copy_block(state->iv, state->data), aes_decode_cipher(state), aes_copy_cbc(output, state->data), output += 16) - -iof_status aes_decode_state (iof *I, iof *O, aes_state *state) -{ - int c, ret; - uint8_t lastlength; - - if ((state->flags & AES_INLINE_IV) && !(state->flags & AES_CONTINUE)) - { - while (state->buffered < 16) - { - if ((c = iof_get(I)) != IOFEOF) - state->iv[state->buffered++] = (uint8_t)c; - else - return state->flush ? IOFERR : IOFEMPTY; - } - state->flags |= AES_CONTINUE|AES_HAS_IV; - state->buffered = 0; - } - while (iof_ensure(O, 16)) - { - while (state->buffered < 16) - { - if ((c = iof_get(I)) != IOFEOF) - state->data[state->buffered++] = (uint8_t)c; - else - return state->flush ? IOFERR : IOFEMPTY; - } - aes_decode_output(state, O->pos); - if (state->flush) - { /* we have to check for EOF here, to remove eventual padding */ - if ((c = iof_get(I)) < 0) - { /* end of input at 16-bytes boundary; remove padding and quit */ - ret = aes_remove_padding(state, O->pos - 16, &lastlength); - O->pos -= 16 - lastlength; - return ret; - } - else - { /* beginning of the next block */ - state->buffered = 1; - state->data[0] = (uint8_t)c; - } - } - else - state->buffered = 0; - } - return IOFFULL; -} - -/* variants that works on c-strings; can work inplace (output==input) except encoder in pdf flavour */ - -/* -Codecs operating on c-string can generally work inplace (output==input), except encoder with AES_INLINE_IV flag set, -which outputs 16 bytes of initialization vector at the beginning of encrypted data. All return the size of encrypted/decrypted -data. Encoders output is the original length padded to a complete 16 bytes (plus eventual 16 bytes of initialization -vector, if AES_INLINE_IV is used). Default padding is unambiguously removed during decryption. AES_NULL_PADDING flag -forces using (ambiguous) NULL-byte padding, only if input length module 16 is greater then zero. - -An input data is supposed to be a complete data to be encrypted or decrypted. It is possible, however, to use those -codecs for scaterred data chunks by manipulating AES_INLINE_IV, AES_NULL_PADDING, AES_CONTINUE flags and data length. -Caller may assume that c-string codecs do not modify state flags. - -Encoder could actually be optimized by writing an initialization vector to a state block once. After every chunk encryption, -the output is the initialization vector for the next chunk. Since we use c-string codec variants on short strings, -the gain is neglectable in comparison with the weight of the aes crypt procedure. -*/ - -size_t aes_encode_data (const void *input, size_t length, void *output, const void *key, size_t keylength, const void *iv, int flags) -{ - aes_state state; - aes_keyblock keyblock; - - if (aes_encode_initialize(&state, &keyblock, key, keylength, iv) == NULL) - return 0; - state.flags |= flags; - return aes_encode_state_data(&state, input, length, output); - // aes_state_close(&state); -} - -size_t aes_encode_state_data (aes_state *state, const void *input, size_t length, void *output) -{ - const uint8_t *inp; - uint8_t *out, tail, t; - size_t size; - - inp = (const uint8_t *)input; - out = (uint8_t *)output; - - if (!(state->flags & AES_HAS_IV)) - return 0; - if ((state->flags & AES_INLINE_IV) && !(state->flags & AES_CONTINUE)) - { - aes_copy_block(out, state->iv); - out += 16; - } - // state->flags |= AES_CONTINUE; // do not modify state flags - - for (size = 0; size + 16 <= length; size += 16) - { - aes_copy_xor(state->data, inp, state->iv); - aes_encode_output(state, out); - inp += 16; - } - - if ((tail = (length % 16)) > 0 || aes_padding(state)) - { - for (t = 0; t < tail; ++t) - state->data[t] = inp[t] ^ state->iv[t]; - aes_put_padding(state, tail); - aes_encode_output(state, out); - size += 16; - } - if (state->flags & AES_INLINE_IV) - size += 16; /* iv written at the beginning of encoded data */ - - return size; -} - -size_t aes_decode_data (const void *input, size_t length, void *output, const void *key, size_t keylength, const void *iv, int flags) -{ - aes_state state; - aes_keyblock keyblock; - - if (aes_decode_initialize(&state, &keyblock, key, keylength, iv) == NULL) - return 0; - state.flags |= flags; - return aes_decode_state_data(&state, input, length, output); - // aes_state_close(&state); -} - -size_t aes_decode_state_data (aes_state *state, const void *input, size_t length, void *output) -{ - const uint8_t *inp; - uint8_t *out, lastlength; - size_t size; - - inp = (const uint8_t *)input; - out = (uint8_t *)output; - - if ((state->flags & AES_INLINE_IV) && !(state->flags & AES_CONTINUE)) - { - aes_copy_block(state->iv, inp); - // state->flags |= AES_HAS_IV; // do not modify state flags - inp += 16; - length = length >= 16 ? length - 16 : 0; - } - else if (!(state->flags & AES_HAS_IV)) - return 0; - // state->flags |= AES_CONTINUE; // do not modify state flags - for (size = 0; size + 16 <= length; size += 16) - { - aes_copy_block(state->data, inp); - aes_decode_output(state, out); - inp += 16; - } - - if (size >= 16) - { - aes_remove_padding(state, out - 16, &lastlength); - size = size - 16 + lastlength; - } - - return size; -} - -/* -pseudo-random bytes chain exceprted from eexec; not expected to have strong cryptographic properties -we only expect that it is (reasonably) unique and different for each call (not only function call, but also -a program call). A current trick with mangling pointer value gives satisfactory results, generally different -for every function call and a programm call. Note that the pseudo-input bytes starts from some inner address -bits, as they vary better; without that, the first byte tends to be "lazy". -*/ - -void random_bytes (uint8_t *output, size_t size) -{ - size_t i; - uint8_t p; - static uint16_t k = 55665; - for (i = 0; i < size; ++i) - { - p = ((uint8_t *)(&output))[(i + 2) % sizeof(uint8_t *)] ^ (uint8_t)size; // pseudo input byte ;) - k = (((p + k) * 52845 + 22719) & 65535); // xor-ed with pseudo-random sequence (kept between calls) - output[i] = p ^ (k >> 8); - } -} - -void aes_generate_iv (uint8_t output[16]) -{ - random_bytes(output, 16); -} - -/* filters */ - -// rc4 decoder function - -static size_t rc4_decoder (iof *F, iof_mode mode) -{ - rc4_state *state; - iof_status status; - size_t tail; - - state = iof_filter_state(rc4_state *, F); - switch(mode) - { - case IOFLOAD: - case IOFREAD: - if (F->flags & IOF_STOPPED) - return 0; - tail = iof_tail(F); - F->pos = F->buf + tail; - F->end = F->buf + F->space; - do { - status = rc4_decode_state(F->next, F, state); - } while (mode == IOFLOAD && status == IOFFULL && iof_resize_buffer(F)); - return iof_decoder_retval(F, "rc4", status); - case IOFCLOSE: - rc4_state_close(state); - iof_free(F); - return 0; - default: - break; - } - return 0; -} - -// rc4 encoder function - -static size_t rc4_encoder (iof *F, iof_mode mode) -{ - rc4_state *state; - iof_status status; - - state = iof_filter_state(rc4_state *, F); - switch (mode) - { - case IOFFLUSH: - state->flush = 1; - FALLTHRU // fall through - case IOFWRITE: - F->end = F->pos; - F->pos = F->buf; - status = rc4_encode_state(F, F->next, state); - return iof_encoder_retval(F, "rc4", status); - case IOFCLOSE: - if (!state->flush) - rc4_encoder(F, IOFFLUSH); - rc4_state_close(state); - iof_free(F); - return 0; - default: - break; - } - return 0; -} - -// aes decoder function - -static size_t aes_decoder (iof *F, iof_mode mode) -{ - aes_state *state; - iof_status status; - size_t tail; - - state = iof_filter_state(aes_state *, F); - switch(mode) - { - case IOFLOAD: - case IOFREAD: - if (F->flags & IOF_STOPPED) - return 0; - tail = iof_tail(F); - F->pos = F->buf + tail; - F->end = F->buf + F->space; - do { - status = aes_decode_state(F->next, F, state); - } while (mode == IOFLOAD && status == IOFFULL && iof_resize_buffer(F)); - return iof_decoder_retval(F, "aes", status); - case IOFCLOSE: - aes_state_close(state); - iof_free(F); - return 0; - default: - break; - } - return 0; -} - -// aes encoder function - -static size_t aes_encoder (iof *F, iof_mode mode) -{ - aes_state *state; - iof_status status; - - state = iof_filter_state(aes_state *, F); - switch (mode) - { - case IOFFLUSH: - state->flush = 1; - FALLTHRU // fall through - case IOFWRITE: - F->end = F->pos; - F->pos = F->buf; - status = aes_encode_state(F, F->next, state); - return iof_encoder_retval(F, "aes", status); - case IOFCLOSE: - if (!state->flush) - aes_encoder(F, IOFFLUSH); - aes_state_close(state); - iof_free(F); - return 0; - default: - break; - } - return 0; -} - -iof * iof_filter_rc4_decoder (iof *N, const void *key, size_t keylength) -{ - iof *I; - crypt_state_pointer P; - - I = iof_filter_reader(rc4_decoder, sizeof(rc4_state), &P.voidstate); - iof_setup_next(I, N); - if (rc4_state_init(P.rc4state, key, keylength) == NULL) - { - iof_discard(I); - return NULL; - } - P.rc4state->flush = 1; - return I; -} - -iof * iof_filter_rc4_encoder (iof *N, const void *key, size_t keylength) -{ - iof *O; - crypt_state_pointer P; - - O = iof_filter_writer(rc4_encoder, sizeof(rc4_state), &P.voidstate); - iof_setup_next(O, N); - if (rc4_state_init(P.rc4state, key, keylength) == NULL) - { - iof_discard(O); - return NULL; - } - // P.rc4state->flush = 1; - return O; -} - -/* aes crypt filters */ - -iof * iof_filter_aes_decoder (iof *N, const void *key, size_t keylength) -{ - iof *I; - crypt_state_pointer P; - - I = iof_filter_reader(aes_decoder, sizeof(aes_state), &P.voidstate); - iof_setup_next(I, N); - if (aes_decode_init(P.aesstate, key, keylength) == NULL) - { - iof_discard(I); - return NULL; - } - aes_pdf_mode(P.aesstate); - P.aesstate->flush = 1; - return I; -} - -iof * iof_filter_aes_encoder (iof *N, const void *key, size_t keylength) -{ - iof *O; - crypt_state_pointer P; - - O = iof_filter_writer(aes_encoder, sizeof(aes_state), &P.voidstate); - iof_setup_next(O, N); - if (aes_encode_init(P.aesstate, key, keylength) == NULL) - { - iof_discard(O); - return NULL; - } - aes_pdf_mode(P.aesstate); - // P.aesstate->flush = 1; - return O; -} - -/* test */ - -/* -static void show (void *p, size_t size, uint8_t round, uint8_t sym) -{ - uint8_t i; - printf("%c%c:", round, sym); - for (i = 0; i < size; ++i) - printf("%02x", ((uint8_t *)p)[i]); - printf("\n"); -} - -void aes_test (void) -{ - const uint8_t key[] = { 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c }; - const uint8_t iv[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; - const uint8_t inp[] = { - 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, - 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, - 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, - 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 }; - const uint8_t out[] = { - 0x76, 0x49, 0xab, 0xac, 0x81, 0x19, 0xb2, 0x46, 0xce, 0xe9, 0x8e, 0x9b, 0x12, 0xe9, 0x19, 0x7d, - 0x50, 0x86, 0xcb, 0x9b, 0x50, 0x72, 0x19, 0xee, 0x95, 0xdb, 0x11, 0x3a, 0x91, 0x76, 0x78, 0xb2, - 0x73, 0xbe, 0xd6, 0xb8, 0xe3, 0xc1, 0x74, 0x3b, 0x71, 0x16, 0xe6, 0x9e, 0x22, 0x22, 0x95, 0x16, - 0x3f, 0xf1, 0xca, 0xa1, 0x68, 0x1f, 0xac, 0x09, 0x12, 0x0e, 0xca, 0x30, 0x75, 0x86, 0xe1, 0xa7 }; - - uint8_t input[64], output[64]; - size_t inpsize, outsize; - int flags = AES_NULL_PADDING; - - //////////////////////////////////////////////////////////////////////////// - -//#define ENCODETO output -#define ENCODETO input // inplace - - inpsize = 64; - memcpy(input, inp, inpsize); - show(input, inpsize, '>', '>'); - outsize = aes_encode_data(input, inpsize, ENCODETO, key, 16, iv, flags); - show(ENCODETO, outsize, '<', '<'); - if (outsize == inpsize && memcmp(ENCODETO, out, outsize) == 0) - printf("ENCODER SUCCESS\n"); - else - printf("ENCODER FAILURE\n"); - - //////////////////////////////////////////////////////////////////////////// - -//#define DECODETO input -#define DECODETO output // in place - - outsize = 64; - memcpy(output, out, outsize); - show(output, outsize, '<', '<'); - inpsize = aes_decode_data(output, outsize, DECODETO, key, 16, iv, flags); - show(DECODETO, inpsize, '>', '>'); - if (inpsize == outsize && memcmp(DECODETO, inp, inpsize) == 0) - printf("DECODER SUCCESS\n"); - else - printf("DECODER FAILURE\n"); -} -*/ - -/* -Some example vectors - -================================ AES ECB 128-bit encryption mode ================================ - -Encryption key: 2b7e151628aed2a6abf7158809cf4f3c - -Test vector Cipher text -6bc1bee22e409f96e93d7e117393172a 3ad77bb40d7a3660a89ecaf32466ef97 -ae2d8a571e03ac9c9eb76fac45af8e51 f5d3d58503b9699de785895a96fdbaaf -30c81c46a35ce411e5fbc1191a0a52ef 43b1cd7f598ece23881b00e3ed030688 -f69f2445df4f9b17ad2b417be66c3710 7b0c785e27e8ad3f8223207104725dd4 - - -================================ AES ECB 192-bit encryption mode ================================ - -Encryption key: 8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b - -Test vector Cipher text -6bc1bee22e409f96e93d7e117393172a bd334f1d6e45f25ff712a214571fa5cc -ae2d8a571e03ac9c9eb76fac45af8e51 974104846d0ad3ad7734ecb3ecee4eef -30c81c46a35ce411e5fbc1191a0a52ef ef7afd2270e2e60adce0ba2face6444e -f69f2445df4f9b17ad2b417be66c3710 9a4b41ba738d6c72fb16691603c18e0e - - -================================ AES ECB 256-bit encryption mode ================================ - -Encryption key: 603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4 - -Test vector Cipher text -6bc1bee22e409f96e93d7e117393172a f3eed1bdb5d2a03c064b5a7e3db181f8 -ae2d8a571e03ac9c9eb76fac45af8e51 591ccb10d410ed26dc5ba74a31362870 -30c81c46a35ce411e5fbc1191a0a52ef b6ed21b99ca6f4f9f153e7b1beafed1d -f69f2445df4f9b17ad2b417be66c3710 23304b7a39f9f3ff067d8d8f9e24ecc7 - -================================ AES CBC 128-bit encryption mode ================================ - -Encryption key: 2b7e151628aed2a6abf7158809cf4f3c - -Initialization vector Test vector Cipher text -000102030405060708090A0B0C0D0E0F 6bc1bee22e409f96e93d7e117393172a 7649abac8119b246cee98e9b12e9197d -7649ABAC8119B246CEE98E9B12E9197D ae2d8a571e03ac9c9eb76fac45af8e51 5086cb9b507219ee95db113a917678b2 -5086CB9B507219EE95DB113A917678B2 30c81c46a35ce411e5fbc1191a0a52ef 73bed6b8e3c1743b7116e69e22229516 -73BED6B8E3C1743B7116E69E22229516 f69f2445df4f9b17ad2b417be66c3710 3ff1caa1681fac09120eca307586e1a7 - -================================ AES CBC 192-bit encryption mode ================================ - -Encryption key: 8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b - -Initialization vector Test vector Cipher text -000102030405060708090A0B0C0D0E0F 6bc1bee22e409f96e93d7e117393172a 4f021db243bc633d7178183a9fa071e8 -4F021DB243BC633D7178183A9FA071E8 ae2d8a571e03ac9c9eb76fac45af8e51 b4d9ada9ad7dedf4e5e738763f69145a -B4D9ADA9AD7DEDF4E5E738763F69145A 30c81c46a35ce411e5fbc1191a0a52ef 571b242012fb7ae07fa9baac3df102e0 -571B242012FB7AE07FA9BAAC3DF102E0 f69f2445df4f9b17ad2b417be66c3710 08b0e27988598881d920a9e64f5615cd - -================================ AES CBC 256-bit encryption mode ================================ - -Encryption key: 603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4 - -Initialization vector Test vector Cipher text -000102030405060708090A0B0C0D0E0F 6bc1bee22e409f96e93d7e117393172a f58c4c04d6e5f1ba779eabfb5f7bfbd6 -F58C4C04D6E5F1BA779EABFB5F7BFBD6 ae2d8a571e03ac9c9eb76fac45af8e51 9cfc4e967edb808d679f777bc6702c7d -9CFC4E967EDB808D679F777BC6702C7D 30c81c46a35ce411e5fbc1191a0a52ef 39f23369a9d9bacfa530e26304231461 -39F23369A9D9BACFA530E26304231461 f69f2445df4f9b17ad2b417be66c3710 b2eb05e2c39be9fcda6c19078c6a9d1b -*/
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilcrypt.h b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilcrypt.h deleted file mode 100644 index e5bf53cc5ce..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilcrypt.h +++ /dev/null @@ -1,90 +0,0 @@ -#ifndef UTIL_CRYPT_H -#define UTIL_CRYPT_H - -#include <stdint.h> -#include <stddef.h> -#include "utiliof.h" - -#ifndef UTIL_CRYPT_TIME -# define UTIL_CRYPT_TIME 0 -#endif - -/* RC4 */ - -typedef uint8_t rc4_map[256]; - -typedef struct rc4_state rc4_state; - -#define RC4_STATE_ALLOC (1<<0) - -UTILAPI rc4_state * rc4_state_initialize (rc4_state *state, rc4_map *map, const void *vkey, size_t keylength); -#define rc4_state_init(state, vkey, keylength) rc4_state_initialize(state, NULL, vkey, keylength) -UTILAPI void rc4_map_save (rc4_state *state, rc4_map *map); -UTILAPI void rc4_map_restore (rc4_state *state, rc4_map *map); - -/* Codecs operating on iof */ - -UTILAPI iof_status rc4_crypt_state (iof *I, iof *O, rc4_state *state); -#define rc4_encode_state(I, O, state) rc4_crypt_state(I, O, state) -#define rc4_decode_state(I, O, state) rc4_crypt_state(I, O, state) - -UTILAPI iof_status rc4_crypt (iof *I, iof *O, const void *key, size_t length); -#define rc4_encode(I, O) rc4_crypt(I, O, key, length) -#define rc4_decode(I, O) rc4_crypt(I, O, key, length) - -UTILAPI size_t rc4_crypt_data (const void *input, size_t length, void *output, const void *key, size_t keylength); -UTILAPI size_t rc4_crypt_state_data (rc4_state *state, const void *input, size_t length, void *output); -#define rc4_encode_data(input, length, output, key, keylength) rc4_crypt_data(input, length, output, key, keylength) -#define rc4_decode_data(input, length, output, key, keylength) rc4_crypt_data(input, length, output, key, keylength) -#define rc4_encode_state_data(state, input, length, output) rc4_crypt_state_data(state, input, length, output) -#define rc4_decode_state_data(state, input, length, output) rc4_crypt_state_data(state, input, length, output) - -UTILAPI void rc4_state_close (rc4_state *state); - -/* AES */ - -typedef uint8_t aes_block[4][4]; -typedef aes_block aes_keyblock[15]; // aes128 - 10+1, aes192 - 12+1, aes256 - 14+1 - -typedef struct aes_state aes_state; - -#define AES_STATE_ALLOC (1<<0) -//#define AES_ECB_MODE (1<<2) -#define AES_HAS_IV (1<<3) -#define AES_INLINE_IV (1<<4) -#define AES_CONTINUE (1<<5) -#define AES_NULL_PADDING (1<<6) - -UTILAPI void aes_pdf_mode (aes_state *state); -//UTILAPI aes_state * aes_state_initialize_ecb (aes_state *State, uint8_t *roundkey, const uint8_t *key); -UTILAPI aes_state * aes_encode_initialize (aes_state *state, aes_keyblock *keyblock, const void *key, size_t keylength, const void *iv); -UTILAPI aes_state * aes_decode_initialize (aes_state *state, aes_keyblock *keyblock, const void *key, size_t keylength, const void *iv); -#define aes_encode_init(state, key, keylength) aes_encode_initialize(state, NULL, key, keylength, NULL) -#define aes_decode_init(state, key, keylength) aes_decode_initialize(state, NULL, key, keylength, NULL) - -UTILAPI void aes_state_close (aes_state *state); - -/* Codecs operating on iof */ - -UTILAPI iof_status aes_encode_state (iof *I, iof *O, aes_state *state); -UTILAPI iof_status aes_decode_state (iof *I, iof *O, aes_state *state); - -UTILAPI size_t aes_encode_data (const void *input, size_t length, void *output, const void *key, size_t keylength, const void *iv, int flags); -UTILAPI size_t aes_encode_state_data (aes_state *state, const void *input, size_t length, void *output); -UTILAPI size_t aes_decode_data (const void *input, size_t length, void *output, const void *key, size_t keylength, const void *iv, int flags); -UTILAPI size_t aes_decode_state_data (aes_state *state, const void *input, size_t length, void *output); - -/* random bytes generator */ - -UTILAPI void random_bytes (uint8_t *output, size_t size); -UTILAPI void aes_generate_iv (uint8_t output[16]); - -/* filters */ - -iof * iof_filter_rc4_decoder (iof *N, const void *key, size_t keylength); -iof * iof_filter_rc4_encoder (iof *N, const void *key, size_t keylength); - -iof * iof_filter_aes_decoder (iof *N, const void *key, size_t keylength); -iof * iof_filter_aes_encoder (iof *N, const void *key, size_t keylength); - -#endif
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilcryptdef.h b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilcryptdef.h deleted file mode 100644 index d43ea2e5b53..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilcryptdef.h +++ /dev/null @@ -1,32 +0,0 @@ - -#ifndef UTIL_CRYPTDEF_H -#define UTIL_CRYPTDEF_H - -struct rc4_state { - union { - rc4_map *map; - uint8_t *smap; - }; - int i, j; - int flush; - int flags; -}; - -struct aes_state { - size_t keylength; - int rounds; - //int keywords; - union { - aes_block block; - uint8_t data[16]; - }; - aes_keyblock *keyblock; - uint8_t iv[16]; - uint8_t buffered; - int flush; - int flags; -}; - -typedef union { rc4_state *rc4state; aes_state *aesstate; void *voidstate; } crypt_state_pointer; // to avoid 'dereferencing type-puned ...' warnings - -#endif
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utildecl.h b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utildecl.h deleted file mode 100644 index b11e5b88432..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utildecl.h +++ /dev/null @@ -1,28 +0,0 @@ - -#ifndef UTIL_DECL_H -#define UTIL_DECL_H - -/* -UTILDLL - when building .dll -UTILEXE - when building .exe to import symbols from .dll -*/ - -#if defined (_WIN32) || defined(_WIN64) -# ifdef UTILDLL -# define UTILAPI __declspec(dllexport) -# define UTILDEF __declspec(dllexport) -# else -# ifdef UTILEXE -# define UTILAPI __declspec(dllimport) -# define UTILDEF -# else -# define UTILAPI -# define UTILDEF -# endif -# endif -#else -# define UTILAPI -# define UTILDEF -#endif - -#endif
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilflate.c b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilflate.c deleted file mode 100644 index 27e44d409a1..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilflate.c +++ /dev/null @@ -1,322 +0,0 @@ - -#include <zlib.h> - -#include "utilmem.h" -#include "utillog.h" -#include "utilflate.h" - -/* flate codec */ - -/* -Flate codec example provided at http://www.zlib.net/zpipe.c (http://www.zlib.net/zlib_how.html) uses the following scheme: -- provide input data buffer -- keep providing output until codec function uses it - -For encoder: - - z->zalloc = z->zfree = z->zopaque = NULL; - deflateInit(z, compression_level); - do { - z->next_in = <input buffer> - z->avail_in = <input buffer bytes> - do { - z->next_out = <output buffer> - z->avail_out = <output buffer bytes> - deflate(z, flush); - // write obtained output from deflate - } while (z->avail_out == 0); - assert(z->avail_in == 0); - } while (flush != Z_FINISH); - deflateEnd(z); - -'z' is an internal codec state of type z_stream, 'flush' is either Z_NO_FLUSH or Z_FINISH at the end of data. -deflate() ensures to consume the entire input if there are no obstackles to write an output. The inner loop -provides an output space as long as it is used by deflate(). When deflate() wrote everything it could, -it leaves z->avail_out > 0, which breaks the inner loop. At this point z->avail_in should also be zero. -The example documentation claims that the return codes from deflate() doesn't really need to be checked, -as checking z->avail_out for zero is enough. - -The scheme for decoder is pretty similar, but with substantial differences: -- the end of stream is automatically found by decoder, so using Z_FINISH flag to indicate an end of stream - is not necessary, but if provided, it MUST be given only if the EOF marker actually occurs in the input chunk, - and subsequent calls to inflate() must consequently use Z_FINISH -- calling inflate() as long as it uses the output buffer provided still works for decoder, but inflate() - does not ensure to consume the entire input, as it will read until end of stream marker -- the return code from inflate() must be checked to ensure the proper reaction on invalid data stream and - end of stream signals -- initialization must set an input buffer to NULL or to some existing chunk (the later helps zlib to perform - better on inflate(), but inflate() does the research on the first call anyway) - - z->zalloc = z->zfree = z->zopaque = NULL; - z->next_in = NULL, z->avail_in = 0; - inflateInit(z); - do { - z->next_in = <input buffer> - z->avail_in = <input buffer bytes> - do { - z->next_out = <output buffer> - z->avail_out = <output buffer bytes> - status = inflate(z, flush); - // check return status - // write obtained output from inflate - } while (z->avail_out == 0); - } while (status != Z_STREAM_END); - inflateEnd(z); - -Our wrapper generally follows "prepare input, keep pomping output" scheme, but we need to support handler function -breaks on IOFEMPTY and IOFFULL. For a consistent come back from those on subsequent calls to the handler function, -we use 3 states: -- FLATE_IN - get input, when got something then goto FALTE_OUT -- FLATE_OUT - set z_stream buffers and keep writing output until enything to write, then goto FLATE_IN or FLATE_DONE -- FLATE_DONE - we are done, no return from that state -Distinction of FLATE_IN and FLATE_OUT states guarantees that we will not get more input until zlib consumes the stuff -from the previous feed, possibly interrupted by IOFFULL return on filling the output buffer. This distinction is not -critical, but makes the filter running according to the scheme described above. Note that we set zlib input buffer -(z->next_in, z->avail_in) at the beginning of FLATE_OUT state. Also note that we always update our buffers according -to updated avail_in / avail_out values, just after a call to inflate() / deflate(). So no matter what have happens -between handler calls, zlib input buffer is in sync with ours. -*/ - -struct flate_state { - z_stream z; - int flush; - int status; - int level; /* encoder compression level -1..9 */ -}; - -typedef union { flate_state *flatestate; void *voidstate; } flate_state_pointer; // to avoid 'dereferencing type-puned ...' warnings - -enum { - FLATE_IN, - FLATE_OUT, - FLATE_DONE -}; - -flate_state * flate_decoder_init (flate_state *state) -{ /* initialize zlib */ - z_stream *z = &state->z; - z->zalloc = Z_NULL; - z->zfree = Z_NULL; - z->opaque = Z_NULL; - z->avail_in = 0; /* must be initialized before inflateInit() */ - z->next_in = Z_NULL; /* ditto */ - if (inflateInit(z) != Z_OK) - return NULL; - state->status = FLATE_IN; - return state; -} - -flate_state * flate_encoder_init (flate_state *state) -{ - z_stream *z = &state->z; - z->zalloc = Z_NULL; - z->zfree = Z_NULL; - z->opaque = Z_NULL; - z->avail_in = 0; - z->next_in = Z_NULL; - state->level = Z_DEFAULT_COMPRESSION; // will probably be moved upward - if (deflateInit(z, state->level) != Z_OK) - return NULL; - state->status = FLATE_IN; - return state; -} - -static const char * zmess (int zstatus) -{ - switch (zstatus) - { - case Z_OK: return "ok"; - case Z_STREAM_END: return "end of stream"; - case Z_BUF_ERROR: return "buffer error"; - case Z_STREAM_ERROR: return "stream error"; - case Z_NEED_DICT: return "need dict"; - case Z_DATA_ERROR: return "data error"; - case Z_MEM_ERROR: return "memory error"; - case Z_VERSION_ERROR: return "version error"; - case Z_ERRNO: return "io error"; - default: - break; - } - return "unknown error"; -} - -iof_status flate_decode_state (iof *I, iof *O, flate_state *state) -{ - z_stream *z; - int zstatus = Z_OK; - z = &state->z; - while (state->status != FLATE_DONE) - { - if (state->status == FLATE_IN) - { - if (!iof_readable(I)) - return state->flush ? IOFERR : IOFEMPTY; - state->status = FLATE_OUT; - } - z->next_in = (Bytef *)I->pos; - z->avail_in = (uInt)iof_left(I); - do { - if (!iof_writable(O)) - return IOFFULL; - z->next_out = (Bytef *)O->pos; - z->avail_out = (uInt)iof_left(O); - zstatus = inflate(z, Z_NO_FLUSH); - I->pos += iof_left(I) - z->avail_in; - O->pos += iof_left(O) - z->avail_out; - switch (zstatus) - { - case Z_OK: - case Z_STREAM_END: - break; - default: - loggerf("flate decoder %s (%d)", zmess(zstatus), zstatus); - return IOFERR; - } - } while (z->avail_out == 0); - state->status = zstatus == Z_STREAM_END ? FLATE_DONE : FLATE_IN; - } - return IOFEOF; -} - -iof_status flate_encode_state (iof *I, iof *O, flate_state *state) -{ - z_stream *z; - int zstatus; - z = &state->z; - while (state->status != FLATE_DONE) - { - if (state->status == FLATE_IN) - { - if (!iof_readable(I)) - if (!state->flush) - return IOFEMPTY; - state->status = FLATE_OUT; - } - z->next_in = (Bytef *)I->pos; - z->avail_in = (uInt)iof_left(I); - do { - if (!iof_writable(O)) - return IOFFULL; - z->next_out = (Bytef *)O->pos; - z->avail_out = (uInt)iof_left(O); - zstatus = deflate(z, state->flush ? Z_FINISH : Z_NO_FLUSH); - I->pos += iof_left(I) - z->avail_in; - O->pos += iof_left(O) - z->avail_out; - switch (zstatus) - { - case Z_OK: - case Z_STREAM_END: - break; - default: - loggerf("flate encoder %s (%d)", zmess(zstatus), zstatus); - return IOFERR; - } - } while (z->avail_out == 0); - state->status = state->flush ? FLATE_DONE : FLATE_IN; - } - return IOFEOF; -} - - -void flate_decoder_close (flate_state *state) -{ - inflateEnd(&state->z); -} - -void flate_encoder_close (flate_state *state) -{ - deflateEnd(&state->z); -} - -/* filter */ - -// flate decoder function - -static size_t flate_decoder (iof *F, iof_mode mode) -{ - flate_state *state; - iof_status status; - size_t tail; - - state = iof_filter_state(flate_state *, F); - switch(mode) - { - case IOFLOAD: - case IOFREAD: - if (F->flags & IOF_STOPPED) - return 0; - tail = iof_tail(F); - F->pos = F->buf + tail; - F->end = F->buf + F->space; - do { - status = flate_decode_state(F->next, F, state); - } while (mode == IOFLOAD && status == IOFFULL && iof_resize_buffer(F)); - return iof_decoder_retval(F, "flate", status); - case IOFCLOSE: - flate_decoder_close(state); - iof_free(F); - return 0; - default: - break; - } - return 0; -} - -// flate encoder function - -static size_t flate_encoder (iof *F, iof_mode mode) -{ - flate_state *state; - iof_status status; - - state = iof_filter_state(flate_state *, F); - switch (mode) - { - case IOFFLUSH: - state->flush = 1; - FALLTHRU // fall through - case IOFWRITE: - F->end = F->pos; - F->pos = F->buf; - status = flate_encode_state(F, F->next, state); - return iof_encoder_retval(F, "flate", status); - case IOFCLOSE: - if (!state->flush) - flate_encoder(F, IOFFLUSH); - flate_encoder_close(state); - iof_free(F); - return 0; - default: - break; - } - return 0; -} - -iof * iof_filter_flate_decoder (iof *N) -{ - iof *I; - flate_state_pointer P; - I = iof_filter_reader(flate_decoder, sizeof(flate_state), &P.voidstate); - iof_setup_next(I, N); - if (flate_decoder_init(P.flatestate) == NULL) - { - iof_discard(I); - return NULL; - } - P.flatestate->flush = 1; - return I; -} - -iof * iof_filter_flate_encoder (iof *N) -{ - iof *O; - flate_state_pointer P; - O = iof_filter_writer(flate_encoder, sizeof(flate_state), &P.voidstate); - iof_setup_next(O, N); - if (flate_encoder_init(P.flatestate) == NULL) - { - iof_discard(O); - return NULL; - } - return O; -} diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilflate.h b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilflate.h deleted file mode 100644 index 09bdd666112..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilflate.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef UTIL_FLATE_H -#define UTIL_FLATE_H - -#include "utiliof.h" - -typedef struct flate_state flate_state; - -flate_state * flate_decoder_init (flate_state *state); -flate_state * flate_encoder_init (flate_state *state); - -iof_status flate_decode_state (iof *I, iof *O, flate_state *state); -iof_status flate_encode_state (iof *I, iof *O, flate_state *state); - -void flate_decoder_close (flate_state *state); -void flate_encoder_close (flate_state *state); - -iof * iof_filter_flate_decoder (iof *N); -iof * iof_filter_flate_encoder (iof *N); - - -#endif
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilfpred.c b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilfpred.c deleted file mode 100644 index 9203c5e0742..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilfpred.c +++ /dev/null @@ -1,778 +0,0 @@ -/* predictor filters; common for flate and lzw */ - -#include "utilmem.h" -#include "utillog.h" -#include "utilfpred.h" - -/* -Here we implement predictor filters used with flate and lzw compressions in PDF streams. The main idea of data prediction -is to compute and output the differences between data records instead of those records. Adjacent pixels in images are usually -similar, so differences between pixel values tends to be zero. And both Flate and LZW performs better when the input -is rather smooth. Although a preliminary use of predictors is related to bitmap data, The actual need for predictor filter -came from the fact that xref streams may also be predicted (usually with PNG up-predictor). - -PDF specification allows to use several predictor algorithms, specified by /Predictor key in /DecodeParms dictionary: - - 1 - no predictor (default) - 2 - TIFF horizontal predictor - 10 - PNG none predictor - 11 - PNG sub predictor - 12 - PNG up predictor - 13 - PNG average predictor - 14 - PNG paeth predictor - -All PNG predictors works on bytes, regardless the image color-depth. While encoding, every input data byte is decreased -by the appropriate byte of the previous pixel. Even if the pixel does not fit a full byte, PNG predictors use an artificial -pixel size rounded up to a full byte. PNG predictors utilizes previous (left) pixel, pixel above and previous to above -pixel. In case of PNG, the type of the predictor is written on a dedicated byte at the beginning of every scanline. It -means all predictor functions must maintain and information about left, above and left-above pixels. - -Despite the same differencing idea, TIFF predictors are different. The prediction process bases on pixel components, -which are not necessarily bytes (component of a pixel is added/substracted from a relevant component of a previous -pixel). In TIFF predictor 2, only the previous (the left) pixel is taken into account, there is no need to keep -an information about other surrounding pixels. Also there is no expicit algorithm marker in data; the same prediction -method is applied to all input rows. - -Not surprisingly, predictor encoders and decoders are pretty similar. Encoders take some input value and the previous -input value (or 0 at the beginning of the scanline) and output a difference between them. Decoders takes an input value, -previously decoded value (or zero) and outputs their sum. When encoding, the result is cast to the proper unsigned integer, -when decoding, modulo 256 (or appropriate) is used, which makes encoding and decoding looseless. - -Some extra bits trickery is involved in TIFF predictor function, when components don't fit bytes boundary. In that case, -an input is treated as a bits stream. Every input byte is "buffered" in a larger integer, as its lower bits (from right). -Every output value is taken from its higher (left) bits. In a special case of bits-per-component equal 1, we buffer all -pixel bits and use XOR to compute bits difference between pixels. I've excerpted that trick from poppler, but I'm not -really sure if it works any better, especially when the number of components per pixel is 1. In that case we do a hard -bit-by-bit work anyway. - -In PNG prediction, we record every pixel byte (in decoded form) in state->rowsave. At the end of a scanline -we copy state->rowsave to state->rowup, so that in the next scanline we can access up-pixel byte. -Left pixel byte is accessed as state->rowsave (the byte recently stored or virtual left edge byte \0). -Up-left pixel byte is accessed via state->rowup, but with state->pixelsize offset (same as left byte, possibly \0 -at the left edge of the row). Both state->rowup and state->rowsave has a safe span of pixelsize bytes on the left, -that are permanently \0. -*/ - -#define predictor_component_t uint16_t -#define predictor_pixel1b_t uint32_t - -#define MAX_COMPONENTS 8 - -struct predictor_state { - int default_predictor; /* default predictor indicator */ - int current_predictor; /* current predictor, possibly taken from algorithm marker in PNG data */ - int rowsamples; /* number of pixels in a scanline (/DecodeParms << /Columns ... >>) */ - int compbits; /* number of bits per component (/DecodeParms << /BitsPerComponent ... >>) */ - int components; /* number of components (/DecodeParms << /Colors ... >>) */ - uint8_t *buffer; /* temporary private buffer area */ - uint8_t *rowin; /* an input row buffer position */ - int rowsize; /* size of a current scanline in bytes (rounded up) */ - int rowend; /* an input buffer end position */ - int rowindex; /* an output buffer position */ - union { - struct { /* used by PNG predictor codecs */ - uint8_t *rowup, *rowsave; /* previous scanline buffers */ - int predictorbyte; /* flag indicating that algorithm byte is read/written */ - int pixelsize; /* number of bytes per pixel (rounded up) */ - }; - struct { /* used by TIFF predictor codecs */ - predictor_component_t compbuffer[MAX_COMPONENTS]; - union { - predictor_component_t *prevcomp; /* an array of left pixel components, typically eq ->compbuffer */ - predictor_pixel1b_t *prevpixel; /* left pixel value stored on a single integer (for 1bit color-depth) */ - }; - int compin, compout; /* bit stream buffers */ - int bitsin, bitsout; /* bit stream counters */ - int sampleindex; /* pixel counter */ - int compindex; /* component counter */ - int pixbufsize; /* size of pixel buffer in bytes */ - }; - }; - int flush; - int status; -}; - -typedef union { predictor_state *predictorstate; void *voidstate; } predictor_state_pointer; // to avoid 'dereferencing type-puned ...' warnings - -enum { - STATUS_LAST = 0, - STATUS_CONTINUE = 1 // any value different then IOFEOF, IOFERR, ... which are < 0 -}; - -/* -Predictor type identifiers (pdf spec 76). lpdf doesn't hire the codec if predictor is 1. Predictor 15 indicates -that the type of PNG prediction algorithm may change in subsequent lines. We always check algorithm marker anyway. -*/ - -enum predictor_code { - NONE_PREDICTOR = 1, - TIFF_PREDICTOR = 2, - PNG_NONE_PREDICTOR = 10, - PNG_SUB_PREDICTOR = 11, - PNG_UP_PREDICTOR = 12, - PNG_AVERAGE_PREDICTOR = 13, - PNG_PAETH_PREDICTOR = 14, - PNG_OPTIMUM_PREDICTOR = 15 -}; - -predictor_state * predictor_decoder_init (predictor_state *state, int predictor, int rowsamples, int components, int compbits) -{ - int rowsize, pixelsize; -#define storage_pos(b, p, size) ((b = p), (p += size)) - uint8_t *buffer, *p; - size_t buffersize; - - pixelsize = (components * compbits + 7) >> 3; // to bytes, rounded up - rowsize = (rowsamples * components * compbits + 7) >> 3; - - state->default_predictor = state->current_predictor = predictor; - state->rowsamples = rowsamples; - state->components = components; - state->compbits = compbits; - - if (predictor == TIFF_PREDICTOR) - { /* tiff predictor */ - size_t compbuf, pixbuf; - compbuf = components * sizeof(predictor_component_t); - pixbuf = 1 * sizeof(predictor_pixel1b_t); - state->pixbufsize = (int)(compbuf > pixbuf ? compbuf : pixbuf); - buffersize = rowsize * sizeof(uint8_t); - buffer = (uint8_t *)util_calloc(buffersize, 1); - if ((size_t)state->pixbufsize > sizeof(state->compbuffer)) // components > MAX_COMPONENTS - state->prevcomp = (predictor_component_t *)util_calloc(state->pixbufsize, 1); - else - state->prevcomp = state->compbuffer; - // &state->prevcomp == &state->prevpixel - state->sampleindex = state->compindex = 0; - state->bitsin = state->bitsout = 0; - state->compin = state->compout = 0; - } - else - { /* png predictors */ - buffersize = (3 * rowsize + 2 * pixelsize + 1) * sizeof(uint8_t); - p = buffer = (uint8_t *)util_calloc(buffersize, 1); - storage_pos(state->rowin, p, 1 + rowsize); // one extra byte for prediction algorithm tag - p += pixelsize; // pixelsize extra bytes for virtual left pixel at the edge, eg. rowup[-1] (permanently \0) - storage_pos(state->rowup, p, rowsize); // actual row byte - p += pixelsize; // ditto - storage_pos(state->rowsave, p, rowsize); - state->pixelsize = pixelsize; - state->predictorbyte = 0; - } - state->buffer = buffer; - state->rowsize = rowsize; - state->rowindex = 0; - state->rowend = 0; - state->status = STATUS_CONTINUE; - return state; -} - -predictor_state * predictor_encoder_init (predictor_state *state, int predictor, int rowsamples, int components, int compbits) -{ - return predictor_decoder_init(state, predictor, rowsamples, components, compbits); -} - -void predictor_decoder_close (predictor_state *state) -{ - util_free(state->buffer); - if (state->default_predictor == TIFF_PREDICTOR && state->prevcomp != NULL && state->prevcomp != state->compbuffer) - util_free(state->prevcomp); -} - -void predictor_encoder_close (predictor_state *state) -{ - predictor_decoder_close(state); -} - -/* -All predoctor codecs first read the entire data row into a buffer. This is not crucial for the process, -but allows to separate read/write states. In particular, there is one place in which codec functions -may return on EOD. -*/ - -#define start_row(state) (state->rowindex = 0, state->rowin = state->buffer) - -static int read_scanline (predictor_state *state, iof *I, int size) -{ - int rowtail, left; - while ((rowtail = size - state->rowend) > 0) - { - left = (int)iof_left(I); - if (left >= rowtail) - { - memcpy(state->buffer + state->rowend, I->pos, (size_t)rowtail); - state->rowend += rowtail; - I->pos += rowtail; - start_row(state); - break; - } - else - { - if ((rowtail = left) > 0) - { - memcpy(state->buffer + state->rowend, I->pos, (size_t)rowtail); - state->rowend += rowtail; - I->pos += rowtail; - } - if (iof_input(I) == 0) - { - if (state->rowend == 0) // no scanline to process, no more input - return state->flush ? IOFEOF : IOFEMPTY; - /* If we are here, there is an incomplete scanline in buffer: - - if there is a chance for more (state->flush == 0), than wait for more - - otherwise encode/decode the last incomplete line? - pdf spec p. 76 says that "A row occupies a whole number of bytes", - so this situation should be considered abnormal (not found so far). - */ - if (!state->flush) - return IOFEMPTY; - loggerf("incomplete scanline in predictor filter"); - //return IOFERR; - state->status = STATUS_LAST; - state->rowsize -= size - state->rowend; - start_row(state); - break; - } - } - } - return STATUS_CONTINUE; -} - -#define read_row(state, I, size, status) if ((status = read_scanline(state, I, size)) != STATUS_CONTINUE) return status - -#define ensure_output_bytes(O, n) if (!iof_ensure(O, n)) return IOFFULL - -#define tobyte(c) ((uint8_t)(c)) -#define tocomp(c) ((uint16_t)(c)) - -#define row_byte(state) (state->rowin[state->rowindex]) - -/* png predictor macros; on bytes */ - -#define up_pixel_byte(state) (state->rowup[state->rowindex]) -#define upleft_pixel_byte(state) (state->rowup[state->rowindex - state->pixelsize]) -#define left_pixel_byte(state) (state->rowsave[state->rowindex - state->pixelsize]) -#define save_pixel_byte(state, c) (state->rowsave[state->rowindex] = (uint8_t)(c)) - -/* tiff predictor macros; on components */ - -#define left_pixel_component(state) (state->prevcomp[state->compindex]) // tiff predictor with 2, 4, 8, 16 components -#define left_pixel_value(state) (state->prevpixel[0]) // tiff predictor with 1bit components - -/* assignment in conditional -#define save_pixel_component(state, c) ((void)\ - ((state->prevcomp[state->compindex] = (predictor_component_t)(c)), \ - ++state->compindex, (state->compindex < state->components || (state->compindex = 0)))) -*/ -#define save_pixel_component(state, c) \ - do { state->prevcomp[state->compindex] = (predictor_component_t)(c); if (++state->compindex >= state->components) state->compindex = 0; } while (0) - -#define save_pixel_value(state, c) (state->prevpixel[0] = (predictor_pixel1b_t)(c)) - -/* Once the codec function is done with the scanline, we set imaginary left pixel data to zero, and reset row counters to -zero in order to allow buffering another input scanline. */ - -#define reset_row(state) state->rowend = 0 - -#define reset_png_row(state) (memcpy(state->rowup, state->rowsave, state->rowsize), state->predictorbyte = 0, reset_row(state)) - -#define reset_tiff_row(state) \ - memset(state->prevcomp, 0, state->pixbufsize), \ - state->bitsin = state->bitsout = 0, \ - state->compin = state->compout = 0, \ - reset_row(state), \ - state->sampleindex = state->compindex = 0 - -/* PNG paeth predictor function; http://www.libpng.org/pub/png/book/chapter09.html -Compute the base value p := left + up - upleft, then choose that byte the closest -(of the smallest absolute difference) to the base value. Left byte has a precedence. */ - - -static int paeth (predictor_state *state) -{ - int p, p1, p2, p3; - p = left_pixel_byte(state) + up_pixel_byte(state) - upleft_pixel_byte(state); - p1 = p >= left_pixel_byte(state) ? (p - left_pixel_byte(state)) : (left_pixel_byte(state) - p); - p2 = p >= up_pixel_byte(state) ? (p - up_pixel_byte(state)) : (up_pixel_byte(state) - p); - p3 = p >= upleft_pixel_byte(state) ? (p - upleft_pixel_byte(state)) : (upleft_pixel_byte(state) - p); - return (p1 <= p2 && p1 <= p3) ? left_pixel_byte(state) : (p2 <= p3 ? up_pixel_byte(state) : upleft_pixel_byte(state)); -} - -/* predictor decoder */ - -iof_status predictor_decode_state (iof *I, iof *O, predictor_state *state) -{ - int status, c, d, outbytes; - while (state->status == STATUS_CONTINUE) - { - if (state->default_predictor >= 10) // PNG predictor? - { - read_row(state, I, state->rowsize + 1, status); - if (state->predictorbyte == 0) - { // we could actually check state->rowin <> state->buffer, but we need this flag for encoder anyway - state->current_predictor = row_byte(state) + 10; - state->predictorbyte = 1; - ++state->rowin; - } - } - else - { - read_row(state, I, state->rowsize, status); - } - switch (state->current_predictor) - { - case NONE_PREDICTOR: - for ( ; state->rowindex < state->rowsize; ++state->rowindex) - { - ensure_output_bytes(O, 1); - c = row_byte(state); - iof_set(O, c); - } - reset_row(state); - break; - case TIFF_PREDICTOR: - switch (state->compbits) - { - case 1: - outbytes = (state->components + 7) >> 3; - for ( ; state->sampleindex < state->rowsamples; ++state->sampleindex) - { - ensure_output_bytes(O, outbytes); - while (state->bitsin < state->components) - { - state->compin = (state->compin << 8) | row_byte(state); - state->bitsin += 8; - ++state->rowindex; - } - state->bitsin -= state->components; - d = state->compin >> state->bitsin; - state->compin &= (1 << state->bitsin) - 1; - c = d ^ left_pixel_value(state); - save_pixel_value(state, c); - state->compout = (state->compout << state->components) | c; - state->bitsout += state->components; - while (state->bitsout >= 8) - { - state->bitsout -= 8; - iof_set(O, state->compout >> state->bitsout); - state->compout &= (1 << state->bitsout) - 1; - } - } - if (state->bitsout > 0) - { - ensure_output_bytes(O, 1); - iof_set(O, state->compin << (8 - state->bitsout)); - } - break; - case 2: case 4: - for ( ; state->sampleindex < state->rowsamples; ++state->sampleindex) - { - for ( ; state->compindex < state->components; ) // state->compindex is ++ed by save_pixel_component() - { - ensure_output_bytes(O, 1); - if (state->bitsin < state->compbits) - { - state->compin = (state->compin << 8) | row_byte(state); - state->bitsin += 8; - ++state->rowindex; - } - state->bitsin -= state->compbits; - d = state->compin >> state->bitsin; - state->compin &= (1 << state->bitsin) - 1; - c = (d + left_pixel_component(state)) & 0xff; - save_pixel_component(state, c); - state->compout = (state->compout << state->compbits) | c; - state->bitsout += state->compbits; - if (state->bitsout >= 8) - { - state->bitsout -= 8; - iof_set(O, state->compout >> state->bitsout); - state->compout &= (1 << state->bitsout) - 1; - } - } - } - if (state->bitsout > 0) - { - ensure_output_bytes(O, 1); - iof_set(O, state->compin << (8 - state->bitsout)); - } - break; - case 8: - for ( ; state->rowindex < state->rowsize; ++state->rowindex) - { - ensure_output_bytes(O, 1); - c = (row_byte(state) + left_pixel_component(state)) & 0xff; - save_pixel_component(state, c); - iof_set(O, c); - } - break; - case 16: - for ( ; state->rowindex < state->rowsize - 1; ++state->rowindex) - { - ensure_output_bytes(O, 2); - d = row_byte(state) << 8; - ++state->rowindex; - d |= row_byte(state); - c = (d + left_pixel_component(state)) & 0xffff; - save_pixel_component(state, c); - iof_set2(O, c >> 8, c & 0xff); - } - break; - default: - return IOFERR; - } - reset_tiff_row(state); - break; - case PNG_NONE_PREDICTOR: - for ( ; state->rowindex < state->rowsize; ++state->rowindex) - { - ensure_output_bytes(O, 1); - c = row_byte(state); - save_pixel_byte(state, c); // next row may need it - iof_set(O, c); - } - reset_png_row(state); - break; - case PNG_SUB_PREDICTOR: - for ( ; state->rowindex < state->rowsize; ++state->rowindex) - { - ensure_output_bytes(O, 1); - c = (row_byte(state) + left_pixel_byte(state)) & 0xff; - save_pixel_byte(state, c); - iof_set(O, c); - } - reset_png_row(state); - break; - case PNG_UP_PREDICTOR: - for ( ; state->rowindex < state->rowsize; ++state->rowindex) - { - ensure_output_bytes(O, 1); - c = (row_byte(state) + up_pixel_byte(state)) & 0xff; - save_pixel_byte(state, c); - iof_set(O, c); - } - reset_png_row(state); - break; - case PNG_AVERAGE_PREDICTOR: - for ( ; state->rowindex < state->rowsize; ++state->rowindex) - { - ensure_output_bytes(O, 1); - c = (row_byte(state) + ((up_pixel_byte(state) + left_pixel_byte(state)) / 2)) & 0xff; - save_pixel_byte(state, c); - iof_set(O, c); - } - reset_png_row(state); - break; - case PNG_PAETH_PREDICTOR: - for ( ; state->rowindex < state->rowsize; ++state->rowindex) - { - ensure_output_bytes(O, 1); - c = (row_byte(state) + paeth(state)) & 0xff; - save_pixel_byte(state, c); - iof_set(O, c); - } - reset_png_row(state); - break; - //case PNG_OPTIMUM_PREDICTOR: // valid as default_redictor, but not as algorithm identifier byte - default: - return IOFERR; - } - } - return state->status == STATUS_LAST ? IOFERR : IOFEOF; -} - -/* predictor encoder */ - -iof_status predictor_encode_state (iof *I, iof *O, predictor_state *state) -{ - int status, c, d, outbytes; - while (state->status == STATUS_CONTINUE) - { - read_row(state, I, state->rowsize, status); - if (state->current_predictor >= 10 && state->predictorbyte == 0) - { - ensure_output_bytes(O, 1); - iof_set(O, state->current_predictor - 10); - state->predictorbyte = 1; - } - switch (state->current_predictor) - { - case NONE_PREDICTOR: - for ( ; state->rowindex < state->rowsize; ++state->rowindex) - { - ensure_output_bytes(O, 1); - c = row_byte(state); - iof_set(O, c); - } - reset_row(state); - break; - case TIFF_PREDICTOR: - switch (state->compbits) - { - case 1: - outbytes = (state->components + 7) >> 3; - for ( ; state->sampleindex < state->rowsamples; ++state->sampleindex) - { - ensure_output_bytes(O, outbytes); - while (state->bitsin < state->components) - { - state->compin = (state->compin << 8) | row_byte(state); - state->bitsin += 8; - ++state->rowindex; - } - state->bitsin -= state->components; - c = state->compin >> state->bitsin; - state->compin &= (1 << state->bitsin) - 1; - d = c ^ left_pixel_value(state); - save_pixel_value(state, c); - state->compout = (state->compout << state->components) | d; - state->bitsout += state->components; - while (state->bitsout >= 8) - { - state->bitsout -= 8; - iof_set(O, state->compout >> state->bitsout); - state->compout &= (1 << state->bitsout) - 1; - } - } - if (state->bitsout > 0) - { - ensure_output_bytes(O, 1); - iof_set(O, state->compin << (8 - state->bitsout)); - } - break; - case 2: case 4: - for ( ; state->sampleindex < state->rowsamples; ++state->sampleindex) - { - for ( ; state->compindex < state->components; ) - { - ensure_output_bytes(O, 1); - if (state->bitsin < state->compbits) - { - state->compin = (state->compin << 8) | row_byte(state); - state->bitsin += 8; - ++state->rowindex; - } - state->bitsin -= state->compbits; - c = state->compin >> state->bitsin; - state->compin &= (1 << state->bitsin) - 1; - d = tocomp(c - left_pixel_component(state)); - save_pixel_component(state, c); - state->compout = (state->compout << state->compbits) | d; - state->bitsout += state->compbits; - if (state->bitsout >= 8) - { - state->bitsout -= 8; - iof_set(O, state->compout >> state->bitsout); - state->compout &= (1 << state->bitsout) - 1; - } - } - } - if (state->bitsout > 0) - { - ensure_output_bytes(O, 1); - iof_set(O, state->compin << (8 - state->bitsout)); - } - break; - case 8: - for ( ; state->rowindex < state->rowsize; ++state->rowindex) - { - ensure_output_bytes(O, 1); - c = row_byte(state); - d = tobyte(c - left_pixel_component(state)); - save_pixel_component(state, c); - iof_set(O, d); - } - break; - case 16: - for ( ; state->rowindex < state->rowsize - 1; ++state->rowindex) - { - ensure_output_bytes(O, 2); - c = row_byte(state) << 8; - ++state->rowindex; - c |= row_byte(state); - d = tocomp(c - left_pixel_component(state)); - save_pixel_component(state, c); - iof_set2(O, d >> 8, d & 0xff); - } - break; - default: - return IOFERR; - } - reset_tiff_row(state); - break; - case PNG_NONE_PREDICTOR: - for ( ; state->rowindex < state->rowsize; ++state->rowindex) - { - ensure_output_bytes(O, 1); - c = row_byte(state); - save_pixel_byte(state, c); // next row may need it - iof_set(O, c); - } - reset_png_row(state); - break; - case PNG_SUB_PREDICTOR: - for ( ; state->rowindex < state->rowsize; ++state->rowindex) - { - ensure_output_bytes(O, 1); - c = row_byte(state); - d = tobyte(c - left_pixel_byte(state)); - save_pixel_byte(state, c); - iof_set(O, d); - } - reset_png_row(state); - break; - case PNG_OPTIMUM_PREDICTOR: // not worthy to perform optimization - case PNG_UP_PREDICTOR: - for ( ; state->rowindex < state->rowsize; ++state->rowindex) - { - ensure_output_bytes(O, 1); - c = row_byte(state); - d = tobyte(c - up_pixel_byte(state)); - save_pixel_byte(state, c); - iof_set(O, d); - } - reset_png_row(state); - break; - case PNG_AVERAGE_PREDICTOR: - for ( ; state->rowindex < state->rowsize; ++state->rowindex) - { - ensure_output_bytes(O, 1); - c = row_byte(state); - d = tobyte(c - ((up_pixel_byte(state) + left_pixel_byte(state)) >> 1)); - save_pixel_byte(state, c); - iof_set(O, d); - } - reset_png_row(state); - break; - case PNG_PAETH_PREDICTOR: - for ( ; state->rowindex < state->rowsize; ++state->rowindex) - { - ensure_output_bytes(O, 1); - c = row_byte(state); - d = tobyte(c - paeth(state)); - save_pixel_byte(state, c); - iof_set(O, d); - } - reset_png_row(state); - break; - default: - return IOFERR; - } - } - return state->status == STATUS_LAST ? IOFERR : IOFEOF; -} - -iof_status predictor_decode (iof *I, iof *O, int predictor, int rowsamples, int components, int compbits) -{ - predictor_state state; - int ret; - predictor_decoder_init(&state, predictor, rowsamples, components, compbits); - state.flush = 1; - ret = predictor_decode_state(I, O, &state); - predictor_decoder_close(&state); - return ret; -} - -iof_status predictor_encode (iof *I, iof *O, int predictor, int rowsamples, int components, int compbits) -{ - predictor_state state; - int ret; - predictor_encoder_init(&state, predictor, rowsamples, components, compbits); - state.flush = 1; - ret = predictor_encode_state(I, O, &state); - predictor_encoder_close(&state); - return ret; -} - -/* filters */ - -// predictor decoder function - -static size_t predictor_decoder (iof *F, iof_mode mode) -{ - predictor_state *state; - iof_status status; - size_t tail; - - state = iof_filter_state(predictor_state *, F); - switch(mode) - { - case IOFLOAD: - case IOFREAD: - if (F->flags & IOF_STOPPED) - return 0; - tail = iof_tail(F); - F->pos = F->buf + tail; - F->end = F->buf + F->space; - do { - status = predictor_decode_state(F->next, F, state); - } while (mode == IOFLOAD && status == IOFFULL && iof_resize_buffer(F)); - return iof_decoder_retval(F, "predictor", status); - case IOFCLOSE: - predictor_decoder_close(state); - iof_free(F); - return 0; - default: - break; - } - return 0; -} - -// predictor encoder function - -static size_t predictor_encoder (iof *F, iof_mode mode) -{ - predictor_state *state; - iof_status status; - - state = iof_filter_state(predictor_state *, F); - switch (mode) - { - case IOFFLUSH: - state->flush = 1; - FALLTHRU // fall through - case IOFWRITE: - F->end = F->pos; - F->pos = F->buf; - status = predictor_encode_state(F, F->next, state); - return iof_encoder_retval(F, "predictor", status); - case IOFCLOSE: - if (!state->flush) - predictor_encoder(F, IOFFLUSH); - predictor_encoder_close(state); - iof_free(F); - return 0; - default: - break; - } - return 0; -} - -iof * iof_filter_predictor_decoder (iof *N, int predictor, int rowsamples, int components, int compbits) -{ - iof *I; - predictor_state_pointer P; - I = iof_filter_reader(predictor_decoder, sizeof(predictor_state), &P.voidstate); - iof_setup_next(I, N); - if (predictor_decoder_init(P.predictorstate, predictor, rowsamples, components, compbits) == NULL) - { - iof_discard(I); - return NULL; - } - P.predictorstate->flush = 1; - return I; -} - -iof * iof_filter_predictor_encoder (iof *N, int predictor, int rowsamples, int components, int compbits) -{ - iof *O; - predictor_state_pointer P; - O = iof_filter_writer(predictor_encoder, sizeof(predictor_state), &P.voidstate); - iof_setup_next(O, N); - if (predictor_encoder_init(P.predictorstate, predictor, rowsamples, components, compbits) == NULL) - { - iof_discard(O); - return NULL; - } - return O; -} diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilfpred.h b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilfpred.h deleted file mode 100644 index 6ae2f893586..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilfpred.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef UTIL_FILTER_PREDICTOR_H -#define UTIL_FILTER_PREDICTOR_H - -#include "utiliof.h" - -typedef struct predictor_state predictor_state; - -predictor_state * predictor_decoder_init (predictor_state *state, int predictor, int rowsamples, int components, int compbits); -predictor_state * predictor_encoder_init (predictor_state *state, int predictor, int rowsamples, int components, int compbits); - -void predictor_decoder_close (predictor_state *state); -void predictor_encoder_close (predictor_state *state); - -iof_status predictor_decode_state (iof *I, iof *O, predictor_state *state); -iof_status predictor_encode_state (iof *I, iof *O, predictor_state *state); - -iof_status predictor_decode (iof *I, iof *O, int predictor, int rowsamples, int components, int compbits); -iof_status predictor_encode (iof *I, iof *O, int predictor, int rowsamples, int components, int compbits); - -iof * iof_filter_predictor_decoder (iof *N, int predictor, int rowsamples, int components, int compbits); -iof * iof_filter_predictor_encoder (iof *N, int predictor, int rowsamples, int components, int compbits); - -#endif
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utiliof.c b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utiliof.c deleted file mode 100644 index 41d6fba38f1..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utiliof.c +++ /dev/null @@ -1,2993 +0,0 @@ -/* input/output stream */ - -#include <stdlib.h> -#include <string.h> -#include <stdarg.h> - -#include "utilmem.h" -#include "utillog.h" -#include "utiliof.h" - -/* commons */ - -void * iof_copy_data (const void *data, size_t size) -{ - return memcpy(util_malloc(size), data, size); -} - -uint8_t * iof_copy_file_data (const char *filename, size_t *psize) -{ - FILE *file; - size_t size; - uint8_t *data; - if ((file = fopen(filename, "rb")) == NULL) - return NULL; - fseek(file, 0, SEEK_END); - size = (size_t)ftell(file); - data = (uint8_t *)util_malloc(size); - fseek(file, 0, SEEK_SET); - if ((*psize = fread(data, 1, size, file)) != size) - { - util_free(data); - data = NULL; - } - fclose(file); - return data; -} - -uint8_t * iof_copy_file_handle_data (FILE *file, size_t *psize) -{ - size_t size; - uint8_t *data; - //long offset = ftell(file); // keep offset intact? - fseek(file, 0, SEEK_END); - size = (size_t)ftell(file); - data = (uint8_t *)util_malloc(size); - fseek(file, 0, SEEK_SET); - if ((*psize = fread(data, 1, size, file)) != size) - { - util_free(data); - data = NULL; - } - //fseek(file, offset, SEEK_SET) - return data; -} - -FILE * iof_get_file (iof *F) -{ - if (F->flags & IOF_FILE) - return iof_file_get_file(F->iofile); - if (F->flags & IOF_FILE_HANDLE) - return F->file; - return NULL; -} - -const char * iof_status_kind (iof_status status) -{ - switch (status) - { - case IOFEOF: - return "IOFEOF"; - case IOFERR: - return "IOFERR"; - case IOFEMPTY: - return "IOFEMPTY"; - case IOFFULL: - return "IOFFULL"; - default: - break; - } - return "(unknown)"; -} - -/* shared pseudofile */ - -#define IOF_FILE_DEFAULTS 0 - -iof_file * iof_file_new (FILE *file) -{ - iof_file *iofile = (iof_file *)util_malloc(sizeof(iof_file)); - iof_file_set_fh(iofile, file); - iofile->offset = NULL; - iofile->size = 0; - iofile->name = NULL; - iofile->refcount = 0; - iofile->flags = IOF_FILE_DEFAULTS|IOF_ALLOC; - return iofile; -} - -iof_file * iof_file_init (iof_file *iofile, FILE *file) -{ - iof_file_set_fh(iofile, file); - iofile->offset = NULL; - iofile->size = 0; - iofile->name = NULL; - iofile->refcount = 0; - iofile->flags = IOF_FILE_DEFAULTS; - return iofile; -} - -iof_file * iof_file_rdata (const void *data, size_t size) -{ - iof_file *iofile = (iof_file *)util_malloc(sizeof(iof_file)); - iofile->rbuf = iofile->rpos = (const uint8_t *)data; - iofile->rend = iofile->rbuf + size; - iofile->offset = NULL; - iofile->size = 0; - iofile->name = NULL; - iofile->refcount = 0; - iofile->flags = IOF_FILE_DEFAULTS|IOF_ALLOC|IOF_DATA; - return iofile; -} - -iof_file * iof_file_rdata_init (iof_file *iofile, const void *data, size_t size) -{ - iofile->rbuf = iofile->rpos = (const uint8_t *)data; - iofile->rend = iofile->rbuf + size; - iofile->offset = NULL; - iofile->size = 0; // lets keep it consequently set to zero (only for user disposition) - iofile->name = NULL; - iofile->refcount = 0; - iofile->flags = IOF_FILE_DEFAULTS|IOF_DATA; - return iofile; -} - -iof_file * iof_file_wdata (void *data, size_t size) -{ - return iof_file_rdata((const void *)data, size); -} - -iof_file * iof_file_wdata_init (iof_file *iofile, void *data, size_t size) -{ - return iof_file_rdata_init(iofile, (const void *)data, size); -} - -/* typical uses so far */ - -iof_file * iof_file_reader_from_file_handle (iof_file *iofile, const char *filename, FILE *file, int preload, int closefile) -{ - uint8_t *data; - size_t size; - - if (preload) - { - if ((data = iof_copy_file_handle_data(file, &size)) == NULL) - { - if (closefile) // callers expect close also on failure - fclose(file); - return NULL; - } - if (iofile == NULL) - iofile = iof_file_rdata(data, size); - else - iof_file_rdata_init(iofile, data, size); - iofile->flags |= IOF_BUFFER_ALLOC; - if (closefile) - fclose(file); - } - else - { - if (iofile == NULL) - iofile = iof_file_new(file); - else - iof_file_init(iofile, file); - if (closefile) - iofile->flags |= IOF_CLOSE_FILE; - } - if (filename != NULL) - iof_file_set_name(iofile, filename); - return iofile; -} - -iof_file * iof_file_reader_from_file (iof_file *iofile, const char *filename, int preload) -{ - FILE *file; - if ((file = fopen(filename, "rb")) == NULL) - return NULL; - return iof_file_reader_from_file_handle(iofile, filename, file, preload, 1); // takes care to fclose() on failure -} - -iof_file * iof_file_reader_from_data (iof_file *iofile, const void *data, size_t size, int preload, int freedata) -{ - void *newdata; - if (data == NULL) - return NULL; - if (preload) - { - newdata = iof_copy_data(data, size); - if (iofile == NULL) - iofile = iof_file_rdata(newdata, size); - else - iof_file_rdata_init(iofile, newdata, size); - iofile->flags |= IOF_BUFFER_ALLOC; - //if (freedata) // hardly makes sense... we can't free const void * - // util_free((void *)data); - } - else - { - if (iofile == NULL) - iofile = iof_file_rdata(data, size); - else - iof_file_rdata_init(iofile, data, size); - if (freedata) - iofile->flags |= IOF_BUFFER_ALLOC; - } - return iofile; -} - -/* -iof_file * iof_file_writer_from_file (iof_file *iofile, const char *filename) -{ - FILE *file; - if ((file = fopen(filename, "wb")) == NULL) - return NULL; - if (iofile == NULL) - iofile = iof_file_new(file); - else - iof_file_init(iofile, file); - iofile->flags |= IOF_CLOSE_FILE; - iof_file_set_name(iofile, filename); - return iofile; -} -*/ - -/* -Because of limited number of FILE* handles available, we may need to close/reopen a file handle -when accessing it. In applications so far (fonts, images) we typically need the entire source -to parse the file on object creation and to rewrite or reload the data on dump. All iof_file API -functions assume that iofile has FILE* opened. Reopening it on every access (ftell, fseek, read/write) -makes no sense. So if the caller invalidates iofile by closing and NULLing its file handle, -it is also responsible to reopen when necessary. -*/ - -int iof_file_reclose_input (iof_file *iofile) -{ - FILE *file; - if (iofile->flags & IOF_DATA) - return 0; - if ((file = iof_file_get_fh(iofile)) == NULL) - return 0; - fclose(file); - iof_file_set_fh(iofile, NULL); - iofile->flags &= ~IOF_RECLOSE_FILE; - iofile->flags |= IOF_REOPEN_FILE; - return 1; -} - -int iof_file_reopen_input (iof_file *iofile) -{ // returns true if iofile readable - FILE *file; - const char *filename; - if (iofile->flags & IOF_DATA) - return 1; - if ((file = iof_file_get_fh(iofile)) != NULL) - return 1; // if present, assumed readable - if ((filename = iofile->name) == NULL || (file = fopen(filename, "rb")) == NULL) - return 0; - iof_file_set_fh(iofile, file); - iofile->flags &= ~IOF_REOPEN_FILE; - iofile->flags |= IOF_RECLOSE_FILE; - return 1; -} - -/* freeing iof_file */ - -void iof_file_free (iof_file *iofile) -{ - FILE *file; - if (iofile->flags & IOF_DATA) - { - if (iofile->flags & IOF_BUFFER_ALLOC) - { - iofile->flags &= ~IOF_BUFFER_ALLOC; - if (iofile->buf != NULL) - { - util_free(iofile->buf); - iofile->buf = iofile->pos = iofile->end = NULL; - } - } - } - else if ((file = iof_file_get_fh(iofile)) != NULL) - { - if (iofile->flags & IOF_CLOSE_FILE) - fclose(file); - iof_file_set_fh(iofile, NULL); - } - iof_file_set_name(iofile, NULL); - if (iofile->flags & IOF_ALLOC) - util_free(iofile); -} - -/* -An attempt to close iofile input keeping things safe. In bindings we sometimes we need to force -closing the file handle, otherwise it is closed when garbage collector graciously calls destroyer. -Eg. we are done with an object representing pdf/image/font, but we can't move/replace it, as the -host language keeps the garbage that keeps a file handle. When we call fclose(), we also have to -set the handle to NULL. In many places we assume, that if the iofile wraps FILE *, than the handle -is operable (no NULL checks). To close the handle keeping iofile alive safe, we can silently convert -it dummy IOF_DATA buffer. -*/ - -void iof_file_close_input (iof_file *iofile) -{ - FILE *file; - if (iofile->flags & IOF_DATA) - { - if (iofile->flags & IOF_BUFFER_ALLOC) - { - iofile->flags &= ~IOF_BUFFER_ALLOC; - if (iofile->buf != NULL) - { - util_free(iofile->buf); - //iofile->buf = iofile->pos = iofile->end = NULL; - } - } - } - else if ((file = iof_file_get_fh(iofile)) != NULL) - { - iof_file_set_fh(iofile, NULL); - fclose(file); - } - iof_file_set_name(iofile, NULL); - /* now make it a dummy string iofile */ - iofile->buf = iofile->pos = iofile->end = NULL; - iofile->flags |= IOF_DATA; -} - -/* set filename for reopen */ - -void iof_file_set_name (iof_file *iofile, const char *name) -{ - if (iofile->name != NULL) - util_free(iofile->name); - if (name != NULL) - iofile->name = iof_copy_data(name, strlen(name) + 1); - else - iofile->name = NULL; -} - -/* seek */ - -int iof_file_seek (iof_file *iofile, long offset, int whence) -{ - if (iofile->flags & IOF_DATA) - { - switch (whence) - { - case SEEK_SET: - if (offset >= 0 && iofile->buf + offset <= iofile->end) - { - iofile->pos = iofile->buf + offset; - return 0; - } - return -1; - case SEEK_CUR: - if ((offset >= 0 && iofile->pos + offset <= iofile->end) || (offset < 0 && iofile->pos + offset >= iofile->buf)) - { - iofile->pos += offset; - return 0; - } - return -1; - case SEEK_END: - if (offset <= 0 && iofile->end + offset >= iofile->buf) - { - iofile->pos = iofile->end + offset; - return 0; - } - return -1; - } - return -1; - } - return fseek(iof_file_get_fh(iofile), offset, whence); -} - -/* */ - -long iof_file_tell (iof_file *iofile) -{ - return (iofile->flags & IOF_DATA) ? (long)(iofile->pos - iofile->buf) : ftell(iof_file_get_fh(iofile)); -} - -size_t iof_file_size (iof_file *iofile) -{ - long pos, size; - FILE *file; - if (iofile->flags & IOF_DATA) - return (size_t)iof_space(iofile); - file = iof_file_get_fh(iofile); - pos = ftell(file); - fseek(file, 0, SEEK_END); - size = ftell(file); - fseek(file, pos, SEEK_SET); - return size; -} - -int iof_file_eof (iof_file *iofile) -{ - if (iofile->flags & IOF_DATA) - return iofile->pos == iofile->end ? -1 : 0; - return feof(iof_file_get_fh(iofile)); -} - -int iof_file_flush (iof_file *iofile) -{ - if (iofile->flags & IOF_DATA) - return 0; - return fflush(iof_file_get_fh(iofile)); -} - -size_t iof_file_read (void *ptr, size_t size, size_t items, iof_file *iofile) -{ - if (iofile->flags & IOF_DATA) - { - size_t bytes = size * items; - if (bytes > (size_t)iof_left(iofile)) - bytes = (size_t)iof_left(iofile); - memcpy(ptr, iofile->pos, bytes); - iofile->pos += bytes; - return bytes / size; // number of elements read - } - return fread(ptr, size, items, iof_file_get_fh(iofile)); -} - -static size_t iof_file_data_resizeto (iof_file *iofile, size_t space) -{ - uint8_t *newbuf; - size_t size; - size = iof_size(iofile); - if (iofile->flags & IOF_BUFFER_ALLOC) - { - newbuf = (uint8_t *)util_realloc(iofile->buf, space); - } - else - { - newbuf = (uint8_t *)util_malloc(space); - if (size > 0) - memcpy(newbuf, iofile->buf, size); - iofile->flags |= IOF_BUFFER_ALLOC; - } - iofile->buf = newbuf; - iofile->pos = newbuf + size; - iofile->end = newbuf + space; - return space - size; -} - -#define iof_file_data_resize(iofile) iof_file_data_resizeto(iofile, iof_space(iofile) << 1) - -size_t iof_file_write (const void *ptr, size_t size, size_t items, iof_file *iofile) -{ - if (iofile->flags & IOF_DATA) - { - size_t space, sizesofar, bytes; - bytes = size * items; - if (bytes > (size_t)iof_left(iofile)) - { - if ((space = iof_space(iofile)) == 0) // allow iofile->buf/end initially NULL - space = BUFSIZ; - for (sizesofar = iof_size(iofile), space <<= 1; sizesofar + bytes > space; space <<= 1) - ; - if (iof_file_data_resizeto(iofile, space) == 0) - return 0; - } - memcpy(iofile->pos, ptr, bytes); - iofile->pos += bytes; - return bytes / size; - } - return fwrite(ptr, size, items, iof_file_get_fh(iofile)); -} - -size_t iof_file_ensure (iof_file *iofile, size_t bytes) -{ - if (iofile->flags & IOF_DATA) - { - size_t space, sizesofar, left; - left = (size_t)iof_left(iofile); - if (bytes > left) - { - if ((space = iof_space(iofile)) == 0) // allow iofile->buf/end initially NULL - space = BUFSIZ; - for (sizesofar = iof_size(iofile), space <<= 1; sizesofar + bytes > space; space <<= 1); - return iof_file_data_resizeto(iofile, space); - } - return left; - } - return 0; -} - -int iof_file_getc (iof_file *iofile) -{ - if (iofile->flags & IOF_DATA) - return iofile->pos < iofile->end ? *iofile->pos++ : IOFEOF; - return fgetc(iof_file_get_fh(iofile)); -} - -int iof_file_putc (iof_file *iofile, int c) -{ - if (iofile->flags & IOF_DATA) - { - if (iofile->pos >= iofile->end) - if (iof_file_data_resize(iofile) == 0) - return IOFEOF; - *iofile->pos++ = (uint8_t)c; - return c; - } - return fputc(c, iof_file_get_fh(iofile)); -} - -static int iof_file_sync (iof_file *iofile, size_t *offset) -{ - if (iofile->offset != offset) - { - if (iofile->offset != NULL) - *iofile->offset = iof_file_tell(iofile); - iofile->offset = offset; - if (offset) // let offset be NULL - return iof_file_seek(iofile, (long)*offset, SEEK_SET); - } - return 0; -} - -//#define iof_file_unsync(iofile, poffset) (void)((iofile)->offset == poffset && (((iofile)->offset = NULL), 0)) -#define iof_file_unsync(iofile, poffset) ((void)poffset, (iofile)->offset = NULL) - -/* iof seek */ - -#define iof_reader_reset(I) ((I)->pos = (I)->end = (I)->buf) -#define iof_reader_reseek_file(I, offset, whence) (fseek((I)->file, offset, whence) == 0 ? (iof_reader_reset(I), 0) : -1) -#define iof_reader_reseek_iofile(I, offset, whence) (iof_file_seek((I)->iofile, offset, whence) == 0 ? (iof_reader_reset(I), 0) : -1) - -#define iof_writer_reset(O) ((O)->pos = (O)->buf) -#define iof_writer_reseek_file(O, offset, whence) (iof_flush(O), (fseek((O)->file, offset, whence) == 0 ? (iof_writer_reset(O), 0) : -1)) -#define iof_writer_reseek_iofile(O, offset, whence) (iof_flush(O), (iof_file_seek((O)->iofile, offset, whence) == 0 ? (iof_writer_reset(O), 0) : -1)) - -static int iof_reader_seek_data (iof *I, long offset, int whence) -{ - switch (whence) - { - case SEEK_SET: - if (offset >= 0 && I->buf + offset <= I->end) - { - I->pos = I->buf + offset; - return 0; - } - return -1; - case SEEK_CUR: - if ((offset >= 0 && I->pos + offset <= I->end) || (offset < 0 && I->pos + offset >= I->buf)) - { - I->pos += offset; - return 0; - } - return -1; - case SEEK_END: - if (offset <= 0 && I->end + offset >= I->buf) - { - I->pos = I->end + offset; - return 0; - } - return -1; - } - return -1; -} - -static int iof_reader_seek_iofile (iof *I, long offset, int whence) -{ - long fileoffset; - switch (whence) - { - case SEEK_SET: - fileoffset = iof_file_tell(I->iofile); - if (offset <= fileoffset && offset >= fileoffset - iof_space(I)) - { - I->pos = I->end - (fileoffset - offset); - return 0; - } - return iof_reader_reseek_iofile(I, offset, SEEK_SET); - case SEEK_CUR: - if ((offset >= 0 && I->pos + offset <= I->end) || (offset < 0 && I->pos + offset >= I->buf)) - { - I->pos += offset; - return 0; - } - return iof_reader_reseek_iofile(I, offset, SEEK_CUR); - case SEEK_END: - return iof_reader_reseek_iofile(I, offset, SEEK_END); // can we do better? - } - return -1; -} - -static int iof_reader_seek_file (iof *I, long offset, int whence) -{ - long fileoffset; - switch (whence) - { - case SEEK_SET: - fileoffset = ftell(I->file); - if (offset <= fileoffset && offset >= fileoffset - iof_space(I)) - { - I->pos = I->end - (fileoffset - offset); - return 0; - } - return iof_reader_reseek_file(I, offset, SEEK_SET); - case SEEK_CUR: - if ((offset >= 0 && I->pos + offset <= I->end) || (offset < 0 && I->pos + offset >= I->buf)) - { - I->pos += offset; - return 0; - } - return iof_reader_reseek_file(I, offset, SEEK_CUR); - case SEEK_END: - return iof_reader_reseek_file(I, offset, SEEK_END); // can we do better? - } - return -1; -} - -int iof_reader_seek (iof *I, long offset, int whence) -{ - I->flags &= ~IOF_STOPPED; - if (I->flags & IOF_FILE) - return iof_reader_seek_iofile(I, offset, whence); - if (I->flags & IOF_FILE_HANDLE) - return iof_reader_seek_file(I, offset, whence); - if (I->flags & IOF_DATA) - return iof_reader_seek_data(I, offset, whence); - return -1; -} - -int iof_reader_reseek (iof *I, long offset, int whence) -{ - I->flags &= ~IOF_STOPPED; - if (I->flags & IOF_FILE) - return iof_reader_reseek_iofile(I, offset, whence); - if (I->flags & IOF_FILE_HANDLE) - return iof_reader_reseek_file(I, offset, whence); - if (I->flags & IOF_DATA) - return iof_reader_seek_data(I, offset, whence); - return -1; -} - -static int iof_writer_seek_data (iof *O, long offset, int whence) -{ - /* - fseek() allows to seek after the end of file. Seeking does not increase the output file. - No byte is written before fwirte(). It seems to fill the gap with zeros. Until we really need that, - no seeking out of bounds for writers. - */ - O->flags &= ~IOF_STOPPED; - return iof_reader_seek_data(O, offset, whence); -} - -static int iof_writer_seek_iofile (iof *O, long offset, int whence) -{ - long fileoffset; - switch (whence) - { - case SEEK_SET: - fileoffset = iof_file_tell(O->iofile); - if (offset >= fileoffset && offset <= fileoffset + iof_space(O)) - { - O->pos = O->buf + (offset - fileoffset); - return 0; - } - return iof_writer_reseek_iofile(O, offset, SEEK_SET); - case SEEK_CUR: - if ((offset >=0 && O->pos + offset <= O->end) || (offset < 0 && O->pos + offset >= O->buf)) - { - O->pos += offset; - return 0; - } - return iof_writer_reseek_iofile(O, offset, SEEK_CUR); - case SEEK_END: - return iof_writer_reseek_iofile(O, offset, SEEK_END); - } - return -1; -} - -static int iof_writer_seek_file (iof *O, long offset, int whence) -{ - long fileoffset; - switch (whence) - { - case SEEK_SET: - fileoffset = ftell(O->file); - if (offset >= fileoffset && offset <= fileoffset + iof_space(O)) - { - O->pos = O->buf + (offset - fileoffset); - return 0; - } - return iof_writer_reseek_file(O, offset, SEEK_SET); - case SEEK_CUR: - if ((offset >=0 && O->pos + offset <= O->end) || (offset < 0 && O->pos + offset >= O->buf)) - { - O->pos += offset; - return 0; - } - return iof_writer_reseek_file(O, offset, SEEK_CUR); - case SEEK_END: - return iof_writer_reseek_file(O, offset, SEEK_END); - } - return -1; -} - -int iof_writer_seek (iof *I, long offset, int whence) -{ - I->flags &= ~IOF_STOPPED; - if (I->flags & IOF_FILE) - return iof_writer_seek_iofile(I, offset, whence); - if (I->flags & IOF_FILE_HANDLE) - return iof_writer_seek_file(I, offset, whence); - if (I->flags & IOF_DATA) - return iof_writer_seek_data(I, offset, whence); - return -1; -} - -int iof_writer_reseek (iof *I, long offset, int whence) -{ - I->flags &= ~IOF_STOPPED; - if (I->flags & IOF_FILE) - return iof_writer_reseek_iofile(I, offset, whence); - if (I->flags & IOF_FILE_HANDLE) - return iof_writer_reseek_file(I, offset, whence); - if (I->flags & IOF_DATA) - return iof_writer_seek_data(I, offset, whence); - return -1; -} - -int iof_seek (iof *F, long offset, int whence) -{ - return (F->flags & IOF_WRITER) ? iof_writer_seek(F, offset, whence) : iof_reader_seek(F, offset, whence); -} - -int iof_reseek (iof *F, long offset, int whence) -{ - return (F->flags & IOF_WRITER) ? iof_writer_reseek(F, offset, whence) : iof_reader_reseek(F, offset, whence); -} - -/* tell */ - -long iof_reader_tell (iof *I) -{ - if (I->flags & IOF_FILE) - return iof_file_tell(I->iofile) - (long)iof_left(I); - if (I->flags & IOF_FILE_HANDLE) - return ftell(I->file) - (long)iof_left(I); - //if (I->flags & IOF_DATA) - return (long)iof_size(I); -} - -long iof_writer_tell (iof *O) -{ - if (O->flags & IOF_FILE) - return iof_file_tell(O->iofile) + (long)iof_size(O); - if (O->flags & IOF_FILE_HANDLE) - return ftell(O->file) + (long)iof_size(O); - //if (I->flags & IOF_DATA) - return (long)iof_size(O); -} - -long iof_tell (iof *I) -{ - return (I->flags & IOF_WRITER) ? iof_writer_tell(I) : iof_reader_tell(I); -} - -size_t iof_fsize (iof *I) -{ - size_t pos, size; - if (I->flags & IOF_FILE) - return iof_file_size(I->iofile); - if (I->flags & IOF_FILE_HANDLE) - { - pos = (size_t)ftell(I->file); - fseek(I->file, 0, SEEK_END); - size = (size_t)ftell(I->file); - fseek(I->file, (long)pos, SEEK_SET); - return size; - } - //if (I->flags & IOF_DATA) - return (size_t)iof_space(I); -} - -/* save reader tail */ - -size_t iof_save_tail (iof *I) -{ - size_t size, left; - size = iof_size(I); - left = iof_left(I); - if (size >= left) - memcpy(I->buf, I->pos, left); - else - memmove(I->buf, I->pos, left); - return left; -} - -size_t iof_input_save_tail (iof *I, size_t back) -{ - size_t size; - I->flags |= IOF_TAIL; - I->pos -= back; - size = iof_input(I); - I->pos += back; - I->flags &= ~IOF_TAIL; - return size; // + back - back -} - -/* read from file */ - -/* iof free*/ - -static size_t file_read (iof *I); -static size_t file_load (iof *I); - -static size_t file_reader (iof *I, iof_mode mode) -{ - switch (mode) - { - case IOFREAD: - return file_read(I); - case IOFLOAD: - return file_load(I); - case IOFCLOSE: - iof_free(I); - return 0; - default: - return 0; - } -} - -iof * iof_setup_file_handle_reader (iof *I, void *buffer, size_t space, FILE *f) -{ - iof_setup_reader(I, buffer, space); - iof_setup_file(I, f); - I->more = file_reader; - return I; -} - -iof * iof_setup_file_reader (iof *I, void *buffer, size_t space, const char *filename) -{ - FILE *f; - if ((f = fopen(filename, "rb")) == NULL) - return NULL; - iof_setup_reader(I, buffer, space); - iof_setup_file(I, f); - I->flags |= IOF_CLOSE_FILE; - I->more = file_reader; - return I; -} - -/* write to file */ - -static size_t file_write (iof *O, int flush); - -static size_t file_writer (iof *O, iof_mode mode) -{ - switch (mode) - { - case IOFWRITE: - return file_write(O, 0); - case IOFFLUSH: - return file_write(O, 1); - case IOFCLOSE: - file_write(O, 1); - iof_free(O); - return 0; - default: - return 0; - } -} - -iof * iof_setup_file_handle_writer (iof *O, void *buffer, size_t space, FILE *f) -{ - iof_setup_writer(O, buffer, space); - iof_setup_file(O, f); - O->more = file_writer; - return O; -} - -iof * iof_setup_file_writer (iof *O, void *buffer, size_t space, const char *filename) -{ - FILE *f; - if ((f = fopen(filename, "wb")) == NULL) - return NULL; - iof_setup_writer(O, buffer, space); - iof_setup_file(O, f); - O->flags |= IOF_CLOSE_FILE; - O->more = file_writer; - return O; -} - -/* a dedicated handler for stdout/stderr */ - -static size_t stdout_writer (iof *O, iof_mode mode) -{ - switch(mode) - { - case IOFWRITE: - { - fwrite(O->buf, sizeof(uint8_t), iof_size(O), stdout); - O->pos = O->buf; - return O->space; - } - case IOFCLOSE: - case IOFFLUSH: - { - fwrite(O->buf, sizeof(uint8_t), iof_size(O), stdout); - fflush(stdout); - O->pos = O->buf; - return 0; - } - default: - break; - } - return 0; -} - -static size_t stderr_writer (iof *O, iof_mode mode) -{ - switch(mode) - { - case IOFWRITE: - { - fwrite(O->buf, sizeof(uint8_t), iof_size(O), stderr); - O->pos = O->buf; - return O->space; - } - case IOFCLOSE: - case IOFFLUSH: - { - fwrite(O->buf, sizeof(uint8_t), iof_size(O), stderr); - fflush(stderr); - O->pos = O->buf; - return 0; - } - default: - break; - } - return 0; -} - -static uint8_t iof_stdout_buffer[BUFSIZ]; -iof iof_stdout = IOF_WRITER_INIT(stdout_writer, NULL, iof_stdout_buffer, BUFSIZ, 0); - -static uint8_t iof_stderr_buffer[BUFSIZ]; -iof iof_stderr = IOF_WRITER_INIT(stderr_writer, NULL, iof_stderr_buffer, BUFSIZ, 0); - -/* read from somewhere */ - -iof * iof_reader (iof *I, void *link, iof_handler reader, const void *m, size_t bytes) -{ - I->space = 0; - I->link = link; - I->more = reader; - I->flags = 0; - I->refcount = 0; - if (m != NULL) - { - I->rbuf = I->rpos = (const uint8_t *)m; - I->rend = (const uint8_t *)m + bytes; - return I; - } - return NULL; -} - -iof * iof_string_reader (iof *I, const void *s, size_t bytes) -{ - I->space = 0; - I->link = NULL; - I->more = NULL; - I->flags = 0; // iof_string() sets IOF_DATA - I->refcount = 0; - if (s != NULL) - return iof_string(I, s, bytes); - return NULL; -} - -/* write somewhere */ - -iof * iof_writer (iof *O, void *link, iof_handler writer, void *m, size_t bytes) -{ - O->space = 0; - O->link = link; - O->more = writer; - O->flags = 0; - O->refcount = 0; - if (m != NULL && bytes > 0) - { - O->buf = O->pos = (uint8_t *)m; - O->end = (uint8_t *)m + bytes; - return O; - } - // return iof_null(O); - return NULL; -} - -/* write to growing bytes buffer */ - -static size_t iof_mem_handler (iof *O, iof_mode mode) -{ - switch(mode) - { - case IOFWRITE: - return iof_resize_buffer(O); - case IOFCLOSE: - iof_free(O); - return 0; - default: - return 0; - } -} - -iof * iof_setup_buffer (iof *O, void *buffer, size_t space) -{ - iof_setup_writer(O, buffer, space); - O->link = NULL; - O->flags |= IOF_DATA; - O->more = iof_mem_handler; - return O; -} - -iof * iof_setup_buffermin (iof *O, void *buffer, size_t space, size_t min) -{ - iof_setup_buffer(O, buffer, space); - if (space < min) // allocate min to avoid further rewriting - { - O->buf = O->pos = (uint8_t *)util_malloc(min); - O->flags |= IOF_BUFFER_ALLOC; - O->end = O->buf + min; - } - return O; -} - -iof * iof_buffer_create (size_t space) -{ - uint8_t *buffer; - iof *O; - O = (iof *)util_malloc(space); - buffer = (uint8_t *)(O + 1); - iof_setup_buffer(O, buffer, space); - O->flags |= IOF_ALLOC; - return O; -} - -/* set/get */ - -int iof_getc (iof *I) -{ - if (iof_readable(I)) - return *I->pos++; - return IOFEOF; -} - -int iof_putc (iof *O, int u) -{ - if (iof_writable(O)) - { - iof_set(O, u); - return (uint8_t)u; - } - return IOFFULL; -} - -size_t iof_skip (iof *I, size_t bytes) -{ - while (bytes) - { - if (iof_readable(I)) - ++I->pos; - else - break; - --bytes; - } - return bytes; -} - -/* from iof to iof */ - -iof_status iof_pass (iof *I, iof *O) -{ - size_t leftin, leftout; - if ((leftin = iof_left(I)) == 0) - leftin = iof_input(I); - while (leftin) - { - if ((leftout = iof_left(O)) == 0) - if ((leftout = iof_output(O)) == 0) - return IOFFULL; - while (leftin > leftout) - { - memcpy(O->pos, I->pos, leftout); - I->pos += leftout; - O->pos = O->end; /* eq. += leftout */ - leftin -= leftout; - if ((leftout = iof_output(O)) == 0) - return IOFFULL; - } - if (leftin) - { - memcpy(O->pos, I->pos, leftin); - I->pos = I->end; /* eq. += leftin */ - O->pos += leftin; - } - leftin = iof_input(I); - } - return IOFEOF; -} - -/* read n-bytes */ - -size_t iof_read (iof *I, void *to, size_t size) -{ - size_t leftin, done = 0; - char *s = (char *)to; - - if ((leftin = iof_left(I)) == 0) - if ((leftin = iof_input(I)) == 0) - return done; - while (size > leftin) - { - memcpy(s, I->pos, leftin * sizeof(uint8_t)); - size -= leftin; - done += leftin; - s += leftin; - I->pos = I->end; - if ((leftin = iof_input(I)) == 0) - return done; - } - if (size) - { - memcpy(s, I->pos, size * sizeof(uint8_t)); - I->pos += size; - done += size; - } - return done; -} - -/* rewrite FILE content (use fseek if needed) */ - -size_t iof_write_file_handle (iof *O, FILE *file) -{ - size_t leftout, size, readout; - if ((leftout = iof_left(O)) == 0) - if ((leftout = iof_output(O)) == 0) - return 0; - size = 0; - do { - readout = fread(O->pos, 1, leftout, file); - O->pos += readout; - size += readout; - } while(readout == leftout && (leftout = iof_output(O)) > 0); - return size; -} - -size_t iof_write_file (iof *O, const char *filename) -{ - FILE *file; - size_t size; - if ((file = fopen(filename, "rb")) == NULL) - return 0; - size = iof_write_file_handle(O, file); - fclose(file); - return size; -} - -size_t iof_write_iofile (iof *O, iof_file *iofile, int savepos) -{ - long offset; - size_t size; - FILE *file; - if (iofile->flags & IOF_DATA) - return iof_write(O, iofile->pos, (size_t)(iofile->end - iofile->pos)); - file = iof_file_get_fh(iofile); - if (savepos) - { - offset = ftell(file); - size = iof_write_file_handle(O, file); - fseek(file, offset, SEEK_SET); - return size; - } - return iof_write_file_handle(O, file); -} - -/* write n-bytes */ - -size_t iof_write (iof *O, const void *data, size_t size) -{ - size_t leftout, done = 0; - const char *s = (const char *)data; - if ((leftout = iof_left(O)) == 0) - if ((leftout = iof_output(O)) == 0) - return done; - while (size > leftout) - { - memcpy(O->pos, s, leftout * sizeof(uint8_t)); - size -= leftout; - done += leftout; - s += leftout; - O->pos = O->end; - if ((leftout = iof_output(O)) == 0) - return done; - } - if (size) - { - memcpy(O->pos, s, size * sizeof(uint8_t)); - O->pos += size; - done += size; - } - return done; -} - -/* write '\0'-terminated string */ - -iof_status iof_puts (iof *O, const void *data) -{ - const char *s = (const char *)data; - while (*s) - { - if (iof_writable(O)) - iof_set(O, *s++); - else - return IOFFULL; - } - return IOFEOF; // ? -} - -size_t iof_put_string (iof *O, const void *data) -{ - const char *p, *s = (const char *)data; - for (p = s; *p != '\0' && iof_writable(O); iof_set(O, *p++)); - return p - s; -} - -/* write byte n-times */ - -/* -iof_status iof_repc (iof *O, char c, size_t bytes) -{ - while (bytes) - { - if (iof_writable(O)) - iof_set(O, c); - else - return IOFFULL; - --bytes; - } - return IOFEOF; // ? -} -*/ - -size_t iof_repc (iof *O, char c, size_t bytes) -{ - size_t leftout, todo = bytes; - if ((leftout = iof_left(O)) == 0) - if ((leftout = iof_output(O)) == 0) - return 0; - while (bytes > leftout) - { - memset(O->pos, c, leftout); - bytes -= leftout; - O->pos = O->end; - if ((leftout = iof_output(O)) == 0) - return todo - bytes; - } - if (bytes) - { - memset(O->pos, c, bytes); - O->pos += bytes; - } - return todo; -} - -/* putfs */ - -#define IOF_FMT_SIZE 1024 - -size_t iof_putfs (iof *O, const char *format, ...) -{ - static char buffer[IOF_FMT_SIZE]; - va_list args; - va_start(args, format); - if (vsnprintf(buffer, IOF_FMT_SIZE, format, args) > 0) - { - va_end(args); - return iof_put_string(O, buffer); - } - else - { - va_end(args); - return iof_write(O, buffer, IOF_FMT_SIZE); - } -} - -/* integer from iof; return 1 on success, 0 otherwise */ - -int iof_get_int32 (iof *I, int32_t *number) -{ - int sign, c = iof_char(I); - iof_scan_sign(I, c, sign); - if (!base10_digit(c)) return 0; - iof_read_integer(I, c, *number); - if (sign) *number = -*number; - return 1; -} - -int iof_get_slong (iof *I, long *number) -{ - int sign, c = iof_char(I); - iof_scan_sign(I, c, sign); - if (!base10_digit(c)) return 0; - iof_read_integer(I, c, *number); - if (sign) *number = -*number; - return 1; -} - -int iof_get_int64 (iof *I, int64_t *number) -{ - int sign, c = iof_char(I); - iof_scan_sign(I, c, sign); - if (!base10_digit(c)) return 0; - iof_read_integer(I, c, *number); - if (sign) *number = -*number; - return 1; -} - -int iof_get_uint32 (iof *I, uint32_t *number) -{ - int c = iof_char(I); - if (!base10_digit(c)) return 0; - iof_read_integer(I, c, *number); - return 1; -} - -int iof_get_ulong (iof *I, unsigned long *number) -{ - int c = iof_char(I); - if (!base10_digit(c)) return 0; - iof_read_integer(I, c, *number); - return 1; -} - -int iof_get_usize (iof *I, size_t *number) -{ - int c = iof_char(I); - if (!base10_digit(c)) return 0; - iof_read_integer(I, c, *number); - return 1; -} - -int iof_get_uint64 (iof *I, uint64_t *number) -{ - int c = iof_char(I); - if (!base10_digit(c)) return 0; - iof_read_integer(I, c, *number); - return 1; -} - -int iof_get_int32_radix (iof *I, int32_t *number, int radix) -{ - int sign, c = iof_char(I); - iof_scan_sign(I, c, sign); - if (!base10_digit(c)) return 0; - iof_read_radix(I, c, *number, radix); - if (sign) *number = -*number; - return 1; - -} - -int iof_get_slong_radix (iof *I, long *number, int radix) -{ - int sign, c = iof_char(I); - iof_scan_sign(I, c, sign); - if (!base10_digit(c)) return 0; - iof_read_radix(I, c, *number, radix); - if (sign) *number = -*number; - return 1; -} - -int iof_get_int64_radix (iof *I, int64_t *number, int radix) -{ - int sign, c = iof_char(I); - iof_scan_sign(I, c, sign); - if (!base10_digit(c)) return 0; - iof_read_radix(I, c, *number, radix); - if (sign) *number = -*number; - return 1; -} - -int iof_get_uint32_radix (iof *I, uint32_t *number, int radix) -{ - int c = iof_char(I); - if (!base10_digit(c)) return 0; - iof_read_radix(I, c, *number, radix); - return 1; -} - -int iof_get_ulong_radix (iof *I, unsigned long *number, int radix) -{ - int c = iof_char(I); - if (!base10_digit(c)) return 0; - iof_read_radix(I, c, *number, radix); - return 1; -} - -int iof_get_usize_radix (iof *I, size_t *number, int radix) -{ - int c = iof_char(I); - if (!base10_digit(c)) return 0; - iof_read_radix(I, c, *number, radix); - return 1; -} - -int iof_get_uint64_radix (iof *I, uint64_t *number, int radix) -{ - int c = iof_char(I); - if (!base10_digit(c)) return 0; - iof_read_radix(I, c, *number, radix); - return 1; -} - -/* get roman to uint16_t, cf. roman_to_uint16() from utilnumber.c*/ - -/* todo: some trick in place of this macro horror? */ - -#define roman1000(c) (c == 'M' || c == 'm') -#define roman500(c) (c == 'D' || c == 'd') -#define roman100(c) (c == 'C' || c == 'c') -#define roman50(c) (c == 'L' || c == 'l') -#define roman10(c) (c == 'X' || c == 'x') -#define roman5(c) (c == 'V' || c == 'v') -#define roman1(c) (c == 'I' || c == 'i') - -#define roman100s(I, c) \ - (roman100(c) ? (100 + ((c = iof_next(I), roman100(c)) ? (100 + ((c = iof_next(I), roman100(c)) ? (c = iof_next(I), 100) : 0)) : 0)) : 0) -#define roman10s(I, c) \ - (roman10(c) ? (10 + ((c = iof_next(I), roman10(c)) ? (10 + ((c = iof_next(I), roman10(c)) ? (c = iof_next(I), 10) : 0)) : 0)) : 0) -#define roman1s(I, c) \ - (roman1(c) ? (1 + ((c = iof_next(I), roman1(c)) ? (1 + ((c = iof_next(I), roman1(c)) ? (c = iof_next(I), 1) : 0)) : 0)) : 0) - -int iof_get_roman (iof *I, uint16_t *number) -{ - int c; - /* M */ - for (*number = 0, c = iof_char(I); roman1000(c); *number += 1000, c = iof_next(I)); - /* D C */ - if (roman500(c)) - { - c = iof_next(I); - *number += 500 + roman100s(I, c); - } - else if (roman100(c)) - { - c = iof_next(I); - if (roman1000(c)) - { - c = iof_next(I); - *number += 900; - } - else if (roman500(c)) - { - c = iof_next(I); - *number += 400; - } - else - *number += 100 + roman100s(I, c); - } - /* L X */ - if (roman50(c)) - { - c = iof_next(I); - *number += 50 + roman10s(I, c); - } - else if (roman10(c)) - { - c = iof_next(I); - if (roman100(c)) - { - c = iof_next(I); - *number += 90; - } - else if (roman50(c)) - { - c = iof_next(I); - *number += 40; - } - else - *number += 10 + roman10s(I, c); - } - /* V I */ - if (roman5(c)) - { - c = iof_next(I); - *number += 5 + roman1s(I, c); - } - else if (roman1(c)) - { - c = iof_next(I); - if (roman10(c)) - { - c = iof_next(I); - *number += 9; - } - else if (roman5(c)) - { - c = iof_next(I); - *number += 4; - } - else - *number += 1 + roman1s(I, c); - } - return 1; -} - -/* double from iof; return 1 on success */ - -int iof_get_double (iof *I, double *number) // cf. string_to_double() -{ - int sign, exponent10, c = iof_char(I); - iof_scan_sign(I, c, sign); - iof_scan_decimal(I, c, *number); - if (c == '.') - { - c = iof_next(I); - iof_scan_fraction(I, c, *number, exponent10); - } - else - exponent10 = 0; - if (c == 'e' || c == 'E') - { - c = iof_next(I); - iof_scan_exponent10(I, c, exponent10); - } - double_exp10(*number, exponent10); - if (sign) *number = -*number; - return 1; -} - -int iof_get_float (iof *I, float *number) // cf. string_to_float() -{ - int sign, exponent10, c = iof_char(I); - iof_scan_sign(I, c, sign); - iof_scan_decimal(I, c, *number); - if (c == '.') - { - c = iof_next(I); - iof_scan_fraction(I, c, *number, exponent10); - } - else - exponent10 = 0; - if (c == 'e' || c == 'E') - { - c = iof_next(I); - iof_scan_exponent10(I, c, exponent10); - } - float_exp10(*number, exponent10); - if (sign) *number = -*number; - return 1; -} - -int iof_conv_double (iof *I, double *number) // cf. convert_to_double() -{ - int sign, exponent10, c = iof_char(I); - iof_scan_sign(I, c, sign); - iof_scan_decimal(I, c, *number); - if (c == '.' || c == ',') - { - c = iof_next(I); - iof_scan_fraction(I, c, *number, exponent10); - if (exponent10 < 0) - double_negative_exp10(*number, exponent10); - } - if (sign) *number = -*number; - return 1; -} - -int iof_conv_float (iof *I, float *number) // cf. convert_to_float() -{ - int sign, exponent10, c = iof_char(I); - iof_scan_sign(I, c, sign); - iof_scan_decimal(I, c, *number); - if (c == '.' || c == ',') - { - c = iof_next(I); - iof_scan_fraction(I, c, *number, exponent10); - if (exponent10 < 0) - float_negative_exp10(*number, exponent10); - } - if (sign) *number = -*number; - return 1; -} - -/* integer to iof; return a number of written bytes */ - -size_t iof_put_int32 (iof *O, int32_t number) -{ - const char *s; - size_t size; - s = int32_to_string(number, &size); - return iof_write(O, s, size); -} - -size_t iof_put_slong (iof *O, long number) -{ - const char *s; - size_t size; - s = slong_to_string(number, &size); - return iof_write(O, s, size); -} - -size_t iof_put_int64 (iof *O, int64_t number) -{ - const char *s; - size_t size; - s = int64_to_string(number, &size); - return iof_write(O, s, size); -} - -size_t iof_put_uint32 (iof *O, uint32_t number) -{ - const char *s; - size_t size; - s = uint32_to_string(number, &size); - return iof_write(O, s, size); -} - -size_t iof_put_ulong (iof *O, unsigned long number) -{ - const char *s; - size_t size; - s = ulong_to_string(number, &size); - return iof_write(O, s, size); -} - -size_t iof_put_usize (iof *O, size_t number) -{ - const char *s; - size_t size; - s = usize_to_string(number, &size); - return iof_write(O, s, size); -} - -size_t iof_put_uint64 (iof *O, uint64_t number) -{ - const char *s; - size_t size; - s = uint64_to_string(number, &size); - return iof_write(O, s, size); -} - -size_t iof_put_int32_radix (iof *O, int32_t number, int radix, int uc) -{ - const char *s; - size_t size; - s = int32_to_radix(number, radix, uc, &size); - return iof_write(O, s, size); -} - -size_t iof_put_slong_radix (iof *O, long number, int radix, int uc) -{ - const char *s; - size_t size; - s = slong_to_radix(number, radix, uc, &size); - return iof_write(O, s, size); -} - -size_t iof_put_int64_radix (iof *O, int64_t number, int radix, int uc) -{ - const char *s; - size_t size; - s = int64_to_radix(number, radix, uc, &size); - return iof_write(O, s, size); -} - -size_t iof_put_uint32_radix (iof *O, uint32_t number, int radix, int uc) -{ - const char *s; - size_t size; - s = uint32_to_radix(number, radix, uc, &size); - return iof_write(O, s, size); -} - -size_t iof_put_ulong_radix (iof *O, unsigned long number, int radix, int uc) -{ - const char *s; - size_t size; - s = ulong_to_radix(number, radix, uc, &size); - return iof_write(O, s, size); -} - -size_t iof_put_usize_radix (iof *O, size_t number, int radix, int uc) -{ - const char *s; - size_t size; - s = usize_to_radix(number, radix, uc, &size); - return iof_write(O, s, size); -} - -size_t iof_put_uint64_radix (iof *O, uint64_t number, int radix, int uc) -{ - const char *s; - size_t size; - s = uint64_to_radix(number, radix, uc, &size); - return iof_write(O, s, size); -} - -/* roman numerals */ - -size_t iof_put_roman (iof *O, uint16_t number, int uc) -{ - const char *s; - size_t size; - s = uint16_to_roman(number, uc, &size); - return iof_write(O, s, size); -} - -/* double/float to iof; return the number of written bytes */ - -size_t iof_put_double (iof *O, double number, int digits) -{ - const char *s; - size_t size; - s = double_to_string(number, digits, &size); - return iof_write(O, s, size); -} - -size_t iof_put_float (iof *O, float number, int digits) -{ - const char *s; - size_t size; - s = float_to_string(number, digits, &size); - return iof_write(O, s, size); -} - -/* iof to binary integer; pretty common */ - -int iof_get_be_uint2 (iof *I, uint32_t *pnumber) -{ - int c1, c2; - if ((c1 = iof_get(I)) < 0 || (c2 = iof_get(I)) < 0) - return 0; - *pnumber = (c1<<8)|c2; - return 1; -} - -int iof_get_be_uint3 (iof *I, uint32_t *pnumber) -{ - int c1, c2, c3; - if ((c1 = iof_get(I)) < 0 || (c2 = iof_get(I)) < 0 || (c3 = iof_get(I)) < 0) - return 0; - *pnumber = (c1<<16)|(c2<<8)|c3; - return 1; -} - -int iof_get_be_uint4 (iof *I, uint32_t *pnumber) -{ - int c1, c2, c3, c4; - if ((c1 = iof_get(I)) < 0 || (c2 = iof_get(I)) < 0 || (c3 = iof_get(I)) < 0 || (c4 = iof_get(I)) < 0) - return 0; - *pnumber = (c1<<24)|(c2<<16)|(c3<<8)|c4; - return 1; -} - -int iof_get_le_uint2 (iof *I, uint32_t *pnumber) -{ - int c1, c2; - if ((c1 = iof_get(I)) < 0 || (c2 = iof_get(I)) < 0) - return 0; - *pnumber = (c2<<8)|c1; - return 1; -} - -int iof_get_le_uint3 (iof *I, uint32_t *pnumber) -{ - int c1, c2, c3; - if ((c1 = iof_get(I)) < 0 || (c2 = iof_get(I)) < 0 || (c3 = iof_get(I)) < 0) - return 0; - *pnumber = (c3<<16)|(c2<<8)|c1; - return 1; -} - -int iof_get_le_uint4 (iof *I, uint32_t *pnumber) -{ - int c1, c2, c3, c4; - if ((c1 = iof_get(I)) < 0 || (c2 = iof_get(I)) < 0 || (c3 = iof_get(I)) < 0 || (c4 = iof_get(I)) < 0) - return 0; - *pnumber = (c4<<24)|(c3<<16)|(c2<<8)|c1; - return 1; -} - -/* iof input data */ - -uint8_t * iof_file_input_data (iof_file *iofile, size_t *psize, int *isnew) -{ - uint8_t *data; - if (iofile->flags & IOF_DATA) - { - data = iofile->buf; - *psize = iofile->end - iofile->buf; - *isnew = 0; - return data; - } - if (iof_file_reopen(iofile)) - { - data = iof_copy_file_handle_data(iof_file_get_fh(iofile), psize); - *isnew = 1; - iof_file_reclose(iofile); - return data; - } - return NULL; -} - -/* -uint8_t * iof_file_reader_data (iof_file *iofile, size_t *size) -{ - uint8_t *data; - if (!(iofile->flags & IOF_DATA) || iofile->pos == NULL || (*size = (size_t)iof_left(iofile)) == 0) - return NULL; - if (iofile->flags & IOF_BUFFER_ALLOC) - { - data = iofile->buf; // iofile->pos; // returned must be freeable, makes sense when ->buf == ->pos - iofile->flags &= ~IOF_BUFFER_ALLOC; - iofile->buf = iofile->pos = iofile->end = NULL; - return data; - } - data = (uint8_t *)util_malloc(*size); - memcpy(data, iofile->buf, *size); - return data; -} - -uint8_t * iof_file_writer_data (iof_file *iofile, size_t *size) -{ - uint8_t *data; - if (!(iofile->flags & IOF_DATA) || iofile->buf == NULL || (*size = (size_t)iof_size(iofile)) == 0) - return NULL; - if (iofile->flags & IOF_BUFFER_ALLOC) - { - iofile->flags &= ~IOF_BUFFER_ALLOC; - data = iofile->buf; - iofile->buf = iofile->pos = iofile->end = NULL; - return data; - } - data = (uint8_t *)util_malloc(*size); - memcpy(data, iofile->buf, *size); - return data; -} -*/ - -uint8_t * iof_reader_data (iof *I, size_t *psize) -{ - uint8_t *data; - *psize = (size_t)iof_left(I); - if (I->flags & IOF_BUFFER_ALLOC) - { - data = I->buf; // actually I->pos, but we have to return something freeable - I->flags &= ~IOF_BUFFER_ALLOC; - I->buf = NULL; - } - else - { - data = util_malloc(*psize); - memcpy(data, I->pos, *psize); - } - iof_close(I); - return data; -} - - -uint8_t * iof_writer_data (iof *O, size_t *psize) -{ - uint8_t *data; - *psize = (size_t)iof_size(O); - if (O->flags & IOF_BUFFER_ALLOC) - { - data = O->buf; - O->flags &= ~IOF_BUFFER_ALLOC; - O->buf = NULL; - } - else - { - data = util_malloc(*psize); - memcpy(data, O->buf, *psize); - } - iof_close(O); - return data; -} - -size_t iof_reader_to_file_handle (iof *I, FILE *file) -{ - size_t size; - for (size = 0; iof_readable(I); I->pos = I->end) - size += fwrite(I->buf, sizeof(uint8_t), iof_left(I), file); - return size; -} - -size_t iof_reader_to_file (iof *I, const char *filename) -{ - FILE *file; - size_t size; - if ((file = fopen(filename, "wb")) == NULL) - return 0; - for (size = 0; iof_readable(I); I->pos = I->end) - size += fwrite(I->buf, sizeof(uint8_t), iof_left(I), file); - fclose(file); - return size; -} - -/* debug */ - -size_t iof_data_to_file (const void *data, size_t size, const char *filename) -{ - FILE *fh; - if ((fh = fopen(filename, "wb")) == NULL) - return 0; - // size = fwrite(data, size, sizeof(uint8_t), fh); // WRONG, this always returns 1, as fwrite returns the number of elements successfully written out - size = fwrite(data, sizeof(uint8_t), size, fh); - fclose(fh); - return size; -} - -size_t iof_result_to_file_handle (iof *F, FILE *file) -{ - const void *data; - size_t size; - data = iof_result(F, size); - return iof_data_to_file_handle(data, size, file); -} - -size_t iof_result_to_file (iof *F, const char *filename) -{ - const void *data; - size_t size; - data = iof_result(F, size); - return iof_data_to_file(data, size, filename); -} - -void iof_debug (iof *I, const char *filename) -{ - FILE *file = fopen(filename, "wb"); - if (file != NULL) - { - fprintf(file, ">>> buf %p <<<\n", I->buf); - fwrite(I->buf, sizeof(uint8_t), iof_size(I), file); - fprintf(file, "\n>>> pos %p (%ld) <<<\n", I->pos, (long)iof_size(I)); - fwrite(I->pos, sizeof(uint8_t), iof_left(I), file); - fprintf(file, "\n>>> end %p (%ld) <<<\n", I->end, (long)iof_left(I)); - fwrite(I->end, sizeof(uint8_t), I->space - iof_space(I), file); - fprintf(file, "\n>>> end of buffer %p (%ld) <<<\n", I->buf + I->space, (long)(I->buf + I->space - I->end)); - fclose(file); - } -} - -/* common filters api */ - -/* sizes of filter states on x64 -size of iof_filter: 640 (no longer used; sizeof(iof) + sizeof larger state) -size of file_state: 16 -size of stream_state: 16 -size of flate_state: 104 -size of lzw_state: 56 -size of predictor_state: 104 -size of basexx_state: 48 -size of basexx_state: 48 -size of basexx_state: 48 -size of eexec_state: 40 -size of runlength_state: 24 -size of rc4_state: 24 -size of aes_state: 72 -size of img_state: 576 -size of img: 496 -*/ - -typedef struct iof_heap iof_heap; - -typedef struct { - iof_heap *heap; -} iof_heap_ghost; - - -struct iof_heap { - union { uint8_t *data; iof_heap_ghost *gdata; }; // union instead of casts (ARM) - union { uint8_t *pos; iof_heap_ghost *gpos; }; - size_t size, space; - iof_heap *next, *prev; - int refcount; - uint8_t dummy[4]; // pad to 8N bytes -}; - -/* -We use hidden heap pointer for every allocated buffer, so heap->data should be kept properly aligned. -Dummy 4-bytes pad doesn't really matter (the pad is there anyway), but iof_heap_take() must pad the -requested size. -*/ - -static iof_heap * iof_buffers_heap = NULL; -static iof_heap * iof_filters_heap = NULL; - -#define IOF_HEAP_FILTERS_COUNT 4 -#define IOF_BUFFER_SIZE 262144 // (1<<18) -#define IOF_FILTER_SIZE 1024 -// sizeof(iof_filter) on x64 is now 640, img_state 576, img 496, others 16-104 -#define IOF_BUFFER_HEAP_SIZE (IOF_HEAP_FILTERS_COUNT * (IOF_BUFFER_SIZE + sizeof(iof_heap_ghost))) -#define IOF_FILTER_HEAP_SIZE (IOF_HEAP_FILTERS_COUNT * (IOF_FILTER_SIZE + sizeof(iof_heap_ghost))) - -static iof_heap * iof_heap_new (size_t space) -{ - iof_heap *iofheap; - iofheap = (iof_heap *)util_malloc(sizeof(iof_heap) + space); - iofheap->gdata = iofheap->gpos = (iof_heap_ghost *)(iofheap + 1); - iofheap->size = iofheap->space = space; - iofheap->next = NULL; - iofheap->prev = NULL; - iofheap->refcount = 0; - return iofheap; -} - -#define iof_heap_free(iofheap) util_free(iofheap) - -void iof_filters_init (void) -{ - if (iof_buffers_heap == NULL) - iof_buffers_heap = iof_heap_new(IOF_BUFFER_HEAP_SIZE); - if (iof_filters_heap == NULL) - iof_filters_heap = iof_heap_new(IOF_FILTER_HEAP_SIZE); -} - -void iof_filters_free (void) -{ - iof_heap *heap, *next; - for (heap = iof_buffers_heap; heap != NULL; heap = next) - { - next = heap->next; - if (heap->refcount != 0) - loggerf("not closed iof filters left (%d)", heap->refcount); - if (next != NULL) - loggerf("iof filters heap left"); - iof_heap_free(heap); - } - iof_buffers_heap = NULL; - for (heap = iof_filters_heap; heap != NULL; heap = next) - { - next = heap->next; - if (heap->refcount != 0) - loggerf("not closed iof buffers left (%d)", heap->refcount); - if (next != NULL) - loggerf("iof buffers heap left"); - iof_heap_free(heap); - } - iof_filters_heap = NULL; -} - -#define iof_heap_get(hp, ghost, data, siz) \ - (ghost = (hp)->gpos, ghost->heap = (hp), data = (uint8_t *)(ghost + 1), (hp)->pos += siz, (hp)->size -= siz, ++(hp)->refcount) - -static void * iof_heap_take (iof_heap **pheap, size_t size) -{ - uint8_t *data; - iof_heap_ghost *ghost; - iof_heap *heap, *newheap, *next; - - heap = *pheap; - if (size & 7) - size += 8 - (size & 7); // pad to 8N bytes so that (heap->pos + size) remains properly aligned - size += sizeof(iof_heap_ghost); - if (heap->size >= size) - { /* take cheap mem from main heap */ - iof_heap_get(heap, ghost, data, size); - return data; - } - if (size <= (heap->space >> 1)) - { /* make new cheap heap, make it front */ - *pheap = newheap = iof_heap_new(heap->space); - newheap->next = heap; - heap->prev = newheap; - iof_heap_get(newheap, ghost, data, size); - return data; - } - /* size much larger than expected? should not happen. - make a single-item heap, keep the front heap intact. */ - newheap = iof_heap_new(size); - if ((next = heap->next) != NULL) - { - newheap->next = next; - next->prev = newheap; - } - heap->next = newheap; - newheap->prev = heap; - iof_heap_get(newheap, ghost, data, size); - return data; -} - -static void iof_heap_back (void *data) -{ - iof_heap_ghost *ghost; - iof_heap *heap, *next, *prev; - - ghost = ((iof_heap_ghost *)data) - 1; - heap = ghost->heap; - if (heap->refcount == 0) - loggerf("invalid use of iof heap, refcount < 0"); - if (--heap->refcount <= 0) - { - if ((prev = heap->prev) != NULL) - { /* free the heap */ - if ((next = heap->next) != NULL) - prev->next = next, next->prev = prev; - else - prev->next = NULL; - iof_heap_free(heap); - } - else - { /* this is the front heap, just reset */ - heap->pos = heap->data; - heap->size = heap->space; - } - } -} - -/**/ - -/* -void * iof_filter_new (size_t size) -{ - void *data; - iof_filters_init(); - data = iof_heap_take(&iof_filters_heap, size); - return memset(data, 0, size); -} -*/ - -iof * iof_filter_reader_new (iof_handler handler, size_t statesize, void **pstate) -{ - iof *F; - void *filter; - uint8_t *buffer; - size_t buffersize; - - iof_filters_init(); - filter = iof_heap_take(&iof_filters_heap, sizeof(iof) + statesize); - F = (iof *)memset(filter, 0, sizeof(iof) + statesize); - buffer = iof_heap_take(&iof_buffers_heap, IOF_BUFFER_SIZE); - buffersize = IOF_BUFFER_SIZE; - iof_setup_reader(F, buffer, buffersize); - F->flags |= IOF_HEAP|IOF_BUFFER_HEAP; - F->more = handler; - *pstate = (F + 1); - return F; -} - -iof * iof_filter_reader_with_buffer_new (iof_handler handler, size_t statesize, void **pstate, void *buffer, size_t buffersize) -{ // for filters that has own buffer (string, some image filters) - iof *F; - void *filter; - - iof_filters_init(); - filter = iof_heap_take(&iof_filters_heap, sizeof(iof) + statesize); - F = (iof *)memset(filter, 0, sizeof(iof) + statesize); - iof_setup_reader(F, buffer, buffersize); - F->flags |= IOF_HEAP; - F->more = handler; - *pstate = (F + 1); - return F; -} - -iof * iof_filter_writer_new (iof_handler handler, size_t statesize, void **pstate) -{ - iof *F; - void *filter; - uint8_t *buffer; - size_t buffersize; - - iof_filters_init(); - filter = iof_heap_take(&iof_filters_heap, sizeof(iof) + statesize); - F = (iof *)memset(filter, 0, sizeof(iof) + statesize); - buffer = iof_heap_take(&iof_buffers_heap, IOF_BUFFER_SIZE); - buffersize = IOF_BUFFER_SIZE; - iof_setup_writer(F, buffer, buffersize); - F->flags |= IOF_HEAP|IOF_BUFFER_HEAP; - F->more = handler; - *pstate = (F + 1); - return F; -} - -iof * iof_filter_writer_with_buffer_new (iof_handler handler, size_t statesize, void **pstate, void *buffer, size_t buffersize) -{ - iof *F; - void *filter; - - iof_filters_init(); - filter = iof_heap_take(&iof_filters_heap, sizeof(iof) + statesize); - F = (iof *)memset(filter, 0, sizeof(iof) + statesize); - iof_setup_writer(F, buffer, buffersize); - F->flags |= IOF_HEAP; - F->more = handler; - *pstate = (F + 1); - return F; -} - -/**/ - -#define iof_filter_free(F) iof_heap_back(F) -#define iof_filter_buffer_free(data) iof_heap_back(data) - -/* close */ - -#define iof_close_next(F) ((void)(iof_decref((F)->next), (F)->next = NULL, 0)) -/* when filter creation fails, we should take care to destroy the filter but leave ->next intact */ -#define iof_clear_next(F) ((void)(iof_unref((F)->next), (F)->next = NULL, 0)) - -#define iof_close_buffer(F) ((void)\ - ((F)->buf != NULL ? \ - ((F->flags & IOF_BUFFER_ALLOC) ? (util_free((F)->buf), (F)->buf = NULL, 0) : \ - ((F->flags & IOF_BUFFER_HEAP) ? (iof_filter_buffer_free((F)->buf), (F)->buf = NULL, 0) : ((F)->buf = NULL, 0))) : 0)) - -/* closing underlying file handle */ - -static void iof_close_file (iof *F) -{ - FILE *file; - //if (F->flags & IOF_FILE_HANDLE) - //{ - if ((file = F->file) != NULL) - { - if (F->flags & IOF_CLOSE_FILE) - fclose(F->file); - F->file = NULL; - } - //} -} - -/* a very special variant for reader filters initiated with iof_file_reopen(). It also calls - iof_file_reclose(), which takes an effect only if previously reopened, but better to keep - all this thin ice separated. Used in filters: iofile_reader, iofile_stream_reader, image - decoders. */ - -static void iof_close_iofile (iof *F) -{ - iof_file *iofile; - //if (F->flags & IOF_FILE) - //{ - if ((iofile = F->iofile) != NULL) - { - iof_file_unsync(iofile, NULL); - iof_file_reclose(iofile); // takes an effect iff prevoiusly reopened - iof_file_decref(iofile); - F->iofile = NULL; - } - //} -} - -void iof_free (iof *F) -{ - if (F->flags & IOF_FILE_HANDLE) - iof_close_file(F); - else if (F->flags & IOF_FILE) - iof_close_iofile(F); - else if (F->flags & IOF_NEXT) - iof_close_next(F); - iof_close_buffer(F); - if (F->flags & IOF_HEAP) - iof_filter_free(F); - else if (F->flags & IOF_ALLOC) - util_free(F); -} - -void iof_discard (iof *F) -{ // so far used only on failed filters creation; as iof_free() but don't dare to release ->next - if (F->flags & IOF_FILE_HANDLE) - iof_close_file(F); - else if (F->flags & IOF_FILE) - iof_close_iofile(F); - //else if (F->flags & IOF_NEXT) - // iof_close_next(F); - iof_close_buffer(F); - if (F->flags & IOF_HEAP) - iof_filter_free(F); - else if (F->flags & IOF_ALLOC) - util_free(F); -} - -/* resizing buffer */ - -size_t iof_resize_buffer_to (iof *O, size_t space) -{ - uint8_t *buf; - - if (O->flags & IOF_BUFFER_ALLOC) - { - buf = (uint8_t *)util_realloc(O->buf, space); - } - else - { - buf = (uint8_t *)util_malloc(space); - memcpy(buf, O->buf, iof_size(O)); - if (O->flags & IOF_BUFFER_HEAP) - { - iof_filter_buffer_free(O->buf); - O->flags &= ~IOF_BUFFER_HEAP; - } - O->flags |= IOF_BUFFER_ALLOC; - - } - O->pos = buf + iof_size(O); - O->end = buf + space; - O->buf = buf; - O->space = space; - return iof_left(O); -} - -/* */ - -size_t iof_decoder_retval (iof *I, const char *type, iof_status status) -{ - switch (status) - { - case IOFERR: - case IOFEMPTY: // should never happen as we set state.flush = 1 on decoders init - loggerf("%s decoder error (%d, %s)", type, status, iof_status_kind(status)); - I->flags |= IOF_STOPPED; - return 0; - case IOFEOF: // this is the last chunk, - I->flags |= IOF_STOPPED; // so stop it and fall - FALLTHRU // fall through - case IOFFULL: // prepare pointers to read from I->buf - I->end = I->pos; - I->pos = I->buf; - return I->end - I->buf; - } - loggerf("%s decoder bug, invalid retval %d", type, status); - return 0; -} - -size_t iof_encoder_retval (iof *O, const char *type, iof_status status) -{ - switch (status) - { - case IOFERR: - case IOFFULL: - loggerf("%s encoder error (%d, %s)", type, status, iof_status_kind(status)); - return 0; - case IOFEMPTY: - O->pos = O->buf; - O->end = O->buf + O->space; - return O->space; - case IOFEOF: - return 0; - } - loggerf("%s encoder bug, invalid retval %d", type, status); - return 0; -} - -/* file/stream state */ - -typedef struct { - size_t length; - size_t offset; -} file_state; - -#define file_state_init(state, off, len) ((state)->offset = off, (state)->length = len) - -typedef struct { - size_t length; - size_t offset; -} stream_state; - -#define stream_state_init(state, off, len) ((state)->offset = off, (state)->length = len) - -/* union type to avoid 'dereferencing type-punned .. ' warnings on (void **) case */ - -typedef union { file_state *filestate; stream_state *streamstate; void *voidstate; } fs_state_pointer; - -/**/ - -static size_t file_read (iof *I) -{ - size_t bytes, tail; - if (I->flags & IOF_STOPPED) - return 0; - tail = iof_tail(I); - if ((bytes = tail + fread(I->buf + tail, sizeof(uint8_t), I->space - tail, I->file)) < I->space) - I->flags |= IOF_STOPPED; - I->pos = I->buf; - I->end = I->buf + bytes; - return bytes; -} - -static size_t iofile_read (iof *I, size_t *poffset) -{ - size_t bytes, tail; - if (I->flags & IOF_STOPPED) - return 0; - iof_file_sync(I->iofile, poffset); - tail = iof_tail(I); - if ((bytes = tail + iof_file_read(I->buf + tail, sizeof(uint8_t), I->space - tail, I->iofile)) < I->space) - { - I->flags |= IOF_STOPPED; - iof_file_unsync(I->iofile, poffset); - } - I->pos = I->buf; - I->end = I->buf + bytes; - return bytes; -} - -static size_t file_load (iof *I) -{ - size_t bytes, left, tail; - if (I->flags & IOF_STOPPED) - return 0; - tail = iof_tail(I); - I->pos = I->buf + tail; - I->end = I->buf + I->space; /* don't assume its done when initializing the filter */ - left = I->space - tail; - do { - bytes = fread(I->pos, sizeof(uint8_t), left, I->file); - I->pos += bytes; - } while (bytes == left && (left = iof_resize_buffer(I)) > 0); - I->flags |= IOF_STOPPED; - return iof_loaded(I); -} - -static size_t iofile_load (iof *I, size_t *poffset) -{ - size_t bytes, left, tail; - if (I->flags & IOF_STOPPED) - return 0; - tail = iof_tail(I); - I->pos = I->buf + tail; - I->end = I->buf + I->space; /* don't assume its done when initializing the filter */ - left = I->space - tail; - iof_file_sync(I->iofile, poffset); - do { - bytes = iof_file_read(I->pos, sizeof(uint8_t), left, I->iofile); - I->pos += bytes; - } while (bytes == left && (left = iof_resize_buffer(I)) > 0); - I->flags |= IOF_STOPPED; - iof_file_unsync(I->iofile, poffset); - return iof_loaded(I); -} - -static size_t filter_file_reader (iof *I, iof_mode mode) -{ - switch (mode) - { - case IOFREAD: - return file_read(I); - case IOFLOAD: - return file_load(I); - case IOFCLOSE: - iof_free(I); - return 0; - default: - return 0; - } -} - -static size_t filter_iofile_reader (iof *I, iof_mode mode) -{ - file_state *state; - state = iof_filter_state(file_state *, I); - switch (mode) - { - case IOFREAD: - return iofile_read(I, &state->offset); - case IOFLOAD: - return iofile_load(I, &state->offset); - case IOFCLOSE: - iof_free(I); - return 0; - default: - return 0; - } -} - -static size_t file_write (iof *O, int flush) -{ - size_t bytes; - if ((bytes = iof_size(O)) > 0) - if (bytes != fwrite(O->buf, sizeof(uint8_t), bytes, O->file)) - return 0; - if (flush) - fflush(O->file); - O->end = O->buf + O->space; // remains intact actually - O->pos = O->buf; - return O->space; -} - -static size_t iofile_write (iof *O, size_t *poffset, int flush) -{ - size_t bytes; - iof_file_sync(O->iofile, poffset); - if ((bytes = iof_size(O)) > 0) - { - if (bytes != iof_file_write(O->buf, sizeof(uint8_t), bytes, O->iofile)) - { - iof_file_unsync(O->iofile, poffset); - return 0; - } - } - if (flush) - iof_file_flush(O->iofile); - O->end = O->buf + O->space; // remains intact actually - O->pos = O->buf; - return O->space; -} - -static size_t filter_file_writer (iof *O, iof_mode mode) -{ - switch (mode) - { - case IOFWRITE: - return file_write(O, 0); - case IOFFLUSH: - return file_write(O, 1); - case IOFCLOSE: - file_write(O, 1); - iof_free(O); - return 0; - default: - return 0; - } -} - -static size_t filter_iofile_writer (iof *O, iof_mode mode) -{ - file_state *state; - state = iof_filter_state(file_state *, O); - switch (mode) - { - case IOFWRITE: - return iofile_write(O, &state->offset, 0); - case IOFFLUSH: - return iofile_write(O, &state->offset, 1); - case IOFCLOSE: - iofile_write(O, &state->offset, 1); - iof_free(O); - return 0; - default: - return 0; - } -} - -/* filter from FILE* */ - -iof * iof_filter_file_handle_reader (FILE *file) -{ - iof *I; - fs_state_pointer P; - if (file == NULL) - return NULL; - I = iof_filter_reader(filter_file_reader, sizeof(file_state), &P.voidstate); - iof_setup_file(I, file); - file_state_init(P.filestate, 0, 0); - return I; -} - -iof * iof_filter_file_handle_writer (FILE *file) -{ - iof *O; - fs_state_pointer P; - if (file == NULL) - return NULL; - O = iof_filter_writer(filter_file_writer, sizeof(file_state), &P.voidstate); - iof_setup_file(O, file); - file_state_init(P.filestate, 0, 0); - return O; -} - -/* filter from iof_file * */ - -iof * iof_filter_iofile_reader (iof_file *iofile, size_t offset) -{ - iof *I; - fs_state_pointer P; - if (!iof_file_reopen(iofile)) - return NULL; - I = iof_filter_reader(filter_iofile_reader, sizeof(file_state), &P.voidstate); - iof_setup_iofile(I, iofile); - file_state_init(P.filestate, offset, 0); - return I; -} - -iof * iof_filter_iofile_writer (iof_file *iofile, size_t offset) -{ - iof *O; - fs_state_pointer P; - O = iof_filter_writer(filter_iofile_writer, sizeof(file_state), &P.voidstate); - iof_setup_iofile(O, iofile); - file_state_init(P.filestate, offset, 0); - return O; -} - -/* filter from filename */ - -iof * iof_filter_file_reader (const char *filename) -{ - iof *I; - fs_state_pointer P; - FILE *file; - if ((file = fopen(filename, "rb")) == NULL) - return NULL; - I = iof_filter_reader(filter_file_reader, sizeof(file_state), &P.voidstate); - iof_setup_file(I, file); - file_state_init(P.filestate, 0, 0); - I->flags |= IOF_CLOSE_FILE; - return I; -} - -iof * iof_filter_file_writer (const char *filename) -{ - iof *O; - fs_state_pointer P; - FILE *file; - if ((file = fopen(filename, "wb")) == NULL) - return NULL; - O = iof_filter_writer(filter_file_writer, sizeof(file_state), &P.voidstate); - iof_setup_file(O, file); - file_state_init(P.filestate, 0, 0); - O->flags |= IOF_CLOSE_FILE; - return O; -} - -/* from string */ - -static size_t dummy_handler (iof *I, iof_mode mode) -{ - switch (mode) - { - case IOFCLOSE: - iof_free(I); - return 0; - default: - return 0; - } -} - -iof * iof_filter_string_reader (const void *s, size_t length) -{ - iof *I; - void *dummy; - I = iof_filter_reader_with_buffer(dummy_handler, 0, &dummy, NULL, 0); - I->rbuf = I->rpos = (const uint8_t *)s; - I->rend = (const uint8_t *)s + length; - // I->space = length; - return I; -} - -iof * iof_filter_string_writer (const void *s, size_t length) -{ - iof *O; - void *dummy; - O = iof_filter_reader_with_buffer(dummy_handler, 0, &dummy, NULL, 0); - O->rbuf = O->rpos = (const uint8_t *)s; - O->rend = (const uint8_t *)s + length; - // O->space = length; - return O; -} - -iof * iof_filter_buffer_writer (size_t size) -{ // cmp iof_buffer_create() - iof *O; - fs_state_pointer dummy; - uint8_t *buffer; - if (size > IOF_BUFFER_SIZE) - { - buffer = (uint8_t *)util_malloc(size); - O = iof_filter_writer_with_buffer(iof_mem_handler, 0, &dummy.voidstate, buffer, size); - O->flags |= IOF_BUFFER_ALLOC; - return O; - } - return iof_filter_writer(iof_mem_handler, 0, &dummy.voidstate); -} - -/* stream */ - -static size_t file_stream_read (iof *I, size_t *plength) -{ - size_t bytes, tail; - if (I->flags & IOF_STOPPED || *plength == 0) - return 0; - tail = iof_tail(I); - if (I->space - tail >= *plength) - { - bytes = tail + fread(I->buf + tail, sizeof(uint8_t), *plength, I->file); - I->flags |= IOF_STOPPED; - *plength = 0; - } - else - { - bytes = tail + fread(I->buf + tail, sizeof(uint8_t), I->space - tail, I->file); - *plength -= bytes - tail; - } - I->pos = I->buf; - I->end = I->buf + bytes; - return bytes; -} - -static size_t iofile_stream_read (iof *I, size_t *plength, size_t *poffset) -{ - size_t bytes, tail; - if (I->flags & IOF_STOPPED || *plength == 0) - return 0; - tail = iof_tail(I); - iof_file_sync(I->iofile, poffset); - if (I->space - tail >= *plength) - { - bytes = tail + iof_file_read(I->buf + tail, sizeof(uint8_t), *plength, I->iofile); - iof_file_unsync(I->iofile, poffset); - I->flags |= IOF_STOPPED; - *plength = 0; - } - else - { - bytes = tail + iof_file_read(I->buf + tail, sizeof(uint8_t), I->space - tail, I->iofile); - *plength -= bytes - tail; - } - I->pos = I->buf; - I->end = I->buf + bytes; - return bytes; -} - -static size_t file_stream_load (iof *I, size_t *plength) -{ - size_t bytes, tail; - if (I->flags & IOF_STOPPED || *plength == 0) - return 0; - tail = iof_tail(I); - if (I->space - tail < *plength) - if (iof_resize_buffer_to(I, tail + *plength) == 0) - return 0; - bytes = tail + fread(I->buf + tail, sizeof(uint8_t), *plength, I->file); - I->flags |= IOF_STOPPED; - *plength = 0; - I->pos = I->buf; - I->end = I->buf + bytes; - return bytes; -} - -static size_t iofile_stream_load (iof *I, size_t *plength, size_t *poffset) -{ - size_t bytes, tail; - if (I->flags & IOF_STOPPED || *plength == 0) - return 0; - iof_file_sync(I->iofile, poffset); - tail = iof_tail(I); - if (I->space - tail < *plength) - if (iof_resize_buffer_to(I, tail + *plength) == 0) - return 0; - bytes = tail + iof_file_read(I->buf + tail, sizeof(uint8_t), *plength, I->iofile); - iof_file_unsync(I->iofile, poffset); - I->flags |= IOF_STOPPED; - *plength = 0; - I->pos = I->buf; - I->end = I->buf + bytes; - return bytes; -} - -static size_t filter_file_stream_reader (iof *I, iof_mode mode) -{ - stream_state *state; - state = iof_filter_state(stream_state *, I); - switch(mode) - { - case IOFREAD: - return file_stream_read(I, &state->length); - case IOFLOAD: - return file_stream_load(I, &state->length); - case IOFCLOSE: - iof_free(I); - return 0; - default: - return 0; - } -} - -static size_t filter_iofile_stream_reader (iof *I, iof_mode mode) -{ - stream_state *state; - state = iof_filter_state(stream_state *, I); - switch(mode) - { - case IOFREAD: - return iofile_stream_read(I, &state->length, &state->offset); - case IOFLOAD: - return iofile_stream_load(I, &state->length, &state->offset); - case IOFCLOSE: - iof_free(I); - return 0; - default: - return 0; - } -} - -iof * iof_filter_stream_reader (FILE *file, size_t offset, size_t length) -{ - iof *I; - fs_state_pointer P; - I = iof_filter_reader(filter_file_stream_reader, sizeof(stream_state), &P.voidstate); - iof_setup_file(I, file); - stream_state_init(P.streamstate, offset, length); - fseek(file, (long)offset, SEEK_SET); // or perhaps it should be call in file_stream_read(), like iof_file_sync()? - return I; -} - -iof * iof_filter_stream_coreader (iof_file *iofile, size_t offset, size_t length) -{ - iof *I; - fs_state_pointer P; - if (!iof_file_reopen(iofile)) - return NULL; - I = iof_filter_reader(filter_iofile_stream_reader, sizeof(stream_state), &P.voidstate); - iof_setup_iofile(I, iofile); - stream_state_init(P.streamstate, offset, length); - return I; -} - -static size_t file_stream_write (iof *O, size_t *plength, int flush) -{ - size_t bytes; - if ((bytes = iof_size(O)) > 0) - { - if (bytes != fwrite(O->buf, sizeof(uint8_t), bytes, O->file)) - { - *plength += bytes; - return 0; - } - } - if (flush) - fflush(O->file); - *plength += bytes; - O->end = O->buf + O->space; // remains intact - O->pos = O->buf; - return O->space; -} - -static size_t iofile_stream_write (iof *O, size_t *plength, size_t *poffset, int flush) -{ - size_t bytes; - if ((bytes = iof_size(O)) > 0) - { - iof_file_sync(O->iofile, poffset); - if (bytes != iof_file_write(O->buf, sizeof(uint8_t), bytes, O->iofile)) - { - *plength += bytes; - iof_file_unsync(O->iofile, poffset); - return 0; - } - } - if (flush) - iof_file_flush(O->iofile); - *plength += bytes; - O->end = O->buf + O->space; // remains intact - O->pos = O->buf; - return O->space; -} - -static size_t filter_file_stream_writer (iof *O, iof_mode mode) -{ - stream_state *state; - state = iof_filter_state(stream_state *, O); - switch (mode) - { - case IOFWRITE: - return file_stream_write(O, &state->length, 0); - case IOFFLUSH: - return file_stream_write(O, &state->length, 1); - case IOFCLOSE: - file_stream_write(O, &state->length, 1); - iof_free(O); - return 0; - default: - return 0; - } -} - -static size_t filter_iofile_stream_writer (iof *O, iof_mode mode) -{ - stream_state *state; - state = iof_filter_state(stream_state *, O); - switch (mode) - { - case IOFWRITE: - return iofile_stream_write(O, &state->length, &state->offset, 0); - case IOFFLUSH: - return iofile_stream_write(O, &state->length, &state->offset, 1); - case IOFCLOSE: - iofile_stream_write(O, &state->length, &state->offset, 1); - iof_free(O); - return 0; - default: - return 0; - } -} - -iof * iof_filter_stream_writer (FILE *file) -{ - iof *O; - fs_state_pointer P; - O = iof_filter_writer(filter_file_stream_writer, sizeof(stream_state), &P.voidstate); - iof_setup_file(O, file); - stream_state_init(P.streamstate, 0, 0); - return O; -} - -iof * iof_filter_stream_cowriter (iof_file *iofile, size_t offset) -{ - iof *O; - fs_state_pointer P; - O = iof_filter_writer(filter_iofile_stream_writer, sizeof(stream_state), &P.voidstate); - iof_setup_iofile(O, iofile); - stream_state_init(P.streamstate, offset, 0); - return O; -} - -/* very specific for images; get input from already created strem filter, exchange the filter but keep the buffer */ - -FILE * iof_filter_file_reader_source (iof *I, size_t *poffset, size_t *plength) -{ - fs_state_pointer P; - if (I->more == filter_file_stream_reader) // I is the result of iof_filter_stream_reader() - { - P.streamstate = iof_filter_state(stream_state *, I); - *poffset = P.streamstate->offset; - *plength = P.streamstate->length; // might be 0 but it is ok for file readers - return I->file; - } - if (I->more == filter_file_reader) - { - P.filestate = iof_filter_state(file_state *, I); - *poffset = P.filestate->offset; - *plength = P.filestate->length; // might be 0 but it is ok for file readers - return I->file; - } - return NULL; -} - -iof_file * iof_filter_file_coreader_source (iof *I, size_t *poffset, size_t *plength) -{ - fs_state_pointer P; - if (I->more == filter_iofile_stream_reader) // I is the result of iof_filter_stream_coreader() - { - P.streamstate = iof_filter_state(stream_state *, I); - *poffset = P.streamstate->offset; - *plength = P.streamstate->length; - return I->iofile; - } - if (I->more == filter_iofile_reader) - { - P.filestate = iof_filter_state(file_state *, I); - *poffset = P.filestate->offset; - *plength = P.filestate->length; - return I->iofile; - } - return NULL; -} - -iof * iof_filter_reader_replacement (iof *P, iof_handler handler, size_t statesize, void **pstate) -{ // called after iof_filter_file_reader_source(), no need to check if F is filter from iof heap and if has buffer from iof heap - iof *F; - F = iof_filter_reader_with_buffer(handler, statesize, pstate, P->buf, P->space); - F->flags |= IOF_BUFFER_HEAP; - //iof_setup_reader(P, NULL, 0); - //P->flags &= ~IOF_BUFFER_HEAP; - iof_filter_free(P); - return F; -} - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utiliof.h b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utiliof.h deleted file mode 100644 index bad43a77374..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utiliof.h +++ /dev/null @@ -1,673 +0,0 @@ - -#ifndef UTIL_IOF_H -#define UTIL_IOF_H - -#include <stdio.h> // for FILE * -#include <errno.h> // for errno -#include <string.h> // for strerror() -#include <stdint.h> // for uintN_t - -#include "utildecl.h" -#include "utilnumber.h" - -/* handler call modes */ - -typedef enum { - IOFREAD = 0, /* read to buffer */ - IOFLOAD = 1, /* read all to buffer */ - IOFWRITE = 2, /* write buffer to the output */ - IOFFLUSH = 3, /* flush buffer to the output */ - IOFCLOSE = 4 /* (flush and) close */ -} iof_mode; - -/* return statuses */ - -typedef enum { - IOFEOF = -1, /* end of input */ - IOFEMPTY = -2, /* end of input buffer*/ - IOFFULL = -3, /* end of output buffer */ - IOFERR = -4 /* error */ -} iof_status; - -const char * iof_status_kind (iof_status status); - -/* iof_file */ - -typedef struct iof_file { - union { - FILE *iofh; // access via iof_file_get_fh / iof_file_set_fh (below) - union { - struct { uint8_t *buf, *pos, *end; }; - struct { const uint8_t *rbuf, *rpos, *rend; }; // to trick compiler warnings about cast discarding const - }; - }; - size_t *offset; - char *name; - size_t size; - int refcount; - int flags; -} iof_file; - -/* iof handler function */ - -typedef struct iof iof; -typedef size_t (*iof_handler) (iof *I, iof_mode mode); - -/* iof structure; keep 8N bytes */ - -#define IOF_MEMBERS \ - union { \ - struct { uint8_t *buf, *pos, *end; }; \ - struct { uint16_t *hbuf, *hpos, *hend; }; \ - struct { uint32_t *ibuf, *ipos, *iend; }; \ - struct { const uint8_t *rbuf, *rpos, *rend; }; \ - }; \ - size_t space; \ - iof_handler more; \ - union { void *link; iof *next; FILE *file; iof_file *iofile; }; \ - int flags; \ - int refcount - -/* - buf -- the beginning of buffer - pos -- the current position - end -- the end of buffer - space -- private space size, not always eq. (end - buf) - more -- handler function - next/file/iofile/link -- reader source or writer target - source -- source filter - flags -- private filter info - refcount -- refcount -*/ - -struct iof { - IOF_MEMBERS; -}; - -typedef void (*iof_dump_function) (const void *value, iof *O); - -/* flags */ - -#define IOF_ALLOC (1<<0) // iof is allocated -#define IOF_HEAP (1<<1) // iof taken from iof heap -#define IOF_BUFFER_ALLOC (1<<2) // buffer allocated -#define IOF_BUFFER_HEAP (1<<3) // buffer taken from iof heap - -#define IOF_SHORT (1<<4) // buffer uses 16bit integers -#define IOF_LONG (1<<5) // buffer uses 32bit integers - -#define IOF_TAIL (1<<6) // preserve reader tail -#define IOF_READER (1<<7) // is reader -#define IOF_WRITER (1<<8) // is writer - -#define IOF_DATA (1<<9) // binds some memory -#define IOF_FILE_HANDLE (1<<10) // links FILE * -#define IOF_FILE (1<<11) // links iof_file * -#define IOF_NEXT (1<<12) // links next iof * -#define IOF_CLOSE_FILE (1<<13) // close FILE * on free -#define IOF_REOPEN_FILE (1<<14) // close/reopen mode for iof_file -#define IOF_RECLOSE_FILE (1<<15) // ditto - -#define IOF_STOPPED (1<<16) // stopped - -// #define IOF_CUSTOM (1<<17) // first custom flag - -#define IOF_BUFSIZ (sizeof(iof) + BUFSIZ*sizeof(uint8_t)) - -/* -reading buffer -- all of buf, pos, end pointers are initialized to the beginning of the private buffer, - next call to a handler function moves the end pointer to bufer+space -writer -- buf and pos pointers initialized to the beginning of the buffer, end initialized to bufer+space - -Every call to handler returns size_t number of bytes -available (to write/read) or 0 if there is no more space. - -We usually align the data buffer just after the iof structure. -This is convenient, especially when a memory for the structure -and its buffer is to be allocated. In the case of growing output -buffers we used to check if the memory of the buffer is allocated -by the handler function using test (O->buf != (O+1)). We don't use -it any longer not to rely on little secrets. Now there is an explicit -IOF_BUFFER_ALLOC flag for that. IOF_ALLOC tells if the structure -itself is taken from malloc (not used so far). Assuming the buffer size -is way larger the sizeof(iof) -*/ - -/* initializers */ - -#define IOF_READER_INIT(handler, file, buffer, size, flags) \ - { {{ (uint8_t *)(buffer), (uint8_t *)(buffer), (uint8_t *)(buffer) }}, size, handler, { file }, (flags)|IOF_READER, 0 } - -#define IOF_WRITER_INIT(handler, file, buffer, size, flags) \ - { {{ (uint8_t *)(buffer), (uint8_t *)(buffer), (uint8_t *)(buffer) + size }}, size, handler, { file }, (flags)|IOF_WRITER, 0 } - -#define IOF_STRING_INIT(buffer, size) \ - { {{ (uint8_t *)(buffer), (uint8_t *)(buffer), (uint8_t *)(buffer) + size }}, size, NULL, { NULL }, 0|IOF_READER|IOF_DATA, 0 } - -#define IOF_STRING() IOF_STRING_INIT(0, 0) - -/* refcount */ - -#define iof_incref(I) (++(I)->refcount) -#define iof_decref(I) ((void)(--(I)->refcount <= 0 && iof_close(I))) -#define iof_unref(I) (--(I)->refcount) - -/* binding buffer of a given size */ - -#define iof_setup_reader(I, buffer, size) \ - ((I)->buf = (I)->pos = (I)->end = (uint8_t *)(buffer), \ - (I)->space = size, (I)->flags = 0|IOF_READER, (I)->refcount = 0) - -#define iof_setup_writer(O, buffer, size) \ - ((O)->buf = (O)->pos = (uint8_t *)(buffer), \ - (O)->end = (uint8_t *)(buffer) + size, \ - (O)->space = size, (O)->flags = 0|IOF_WRITER, (O)->refcount = 0) - -/* basics */ - -#define iof_space(I) ((I)->end - (I)->buf) -#define iof_left(I) ((I)->end - (I)->pos) -#define iof_size(I) ((I)->pos - (I)->buf) - -#define iof_input(I) ((I)->more ? (I)->more((I), IOFREAD) : 0lu) -#define iof_load(I) ((I)->more ? (I)->more((I), IOFLOAD) : 0lu) - -#define iof_output(O) ((O)->more ? (O)->more((O), IOFWRITE) : 0lu) -//#define iof_flush(O) ((O)->pos > (O)->buf && (O)->more ? (O)->more(O, IOFFLUSH) : 0lu) -// flush should be unconditional, because encoders emits EOD markers only on flush -#define iof_flush(O) ((O)->more ? (O)->more(O, IOFFLUSH) : 0lu) -#define iof_close(O) ((O)->more ? (O)->more(O, IOFCLOSE) : 0lu) - -#define iof_stop(F) ((void)(F->pos = F->end = F->buf, F->flags |= IOF_STOPPED)) - -/* -Rewriting reader tail to the beginning of new data portion; readers reacting on IOFREAD -mode must be aware of some not yet read data, but treat it necessary only if IOF_TAIL flag is set. -Parsers using iof input may protect not yet read data when there may be a need to put bytes -back to the stream. This is trivial when I->pos > I->buf, as we can make a move by --I->pos. -But when there is a need to put back more then one byte, we can protect the data tail, so that -realoder will rewrite it to the beginning of new data chunk. - - iof_tail(I) - internal, used by iof handlers at IOFREAD mode - iof_protect_tail(I) - used by parsers to ensure some bytes chunk in one piece - -*/ - -size_t iof_save_tail (iof *I); -#define iof_tail(I) (((I)->flags & IOF_TAIL) && (I)->pos < (I)->end ? iof_save_tail(I) : 0) - -size_t iof_input_save_tail (iof *I, size_t back); -#define iof_protect_tail(I, back, length) ((iof_left(I) >= (length) - (back)) ? 1 : (iof_input_save_tail(I, back) >= length - back)) - -//uint8_t * iof_tail_data (iof *I, size_t *ptail); -//#define iof_tail_free(data) util_free(data) - -/* panic */ - -// #define iof_panic(mess) return 0 -#ifndef iof_panic - #define iof_panic(mess) (fputs(mess, stderr), abort()) -#endif -//#define iof_memory_error() iof_panic(strerror(errno)) -#define iof_fwrite_error() iof_panic(strerror(errno)) - -/* generic helpers */ - -UTILAPI uint8_t * iof_copy_file_data (const char *filename, size_t *psize); -UTILAPI uint8_t * iof_copy_file_handle_data (FILE *file, size_t *psize); - -/* In the future we may need releasing file handle and restoring it from iofile->name, so access file handle via macros */ - -#define iof_file_get_fh(iofile) ((iofile)->iofh) -#define iof_file_set_fh(iofile, fh) ((iofile)->iofh = fh) -#define iof_file_get_file(iofile) (((iofile)->flags & IOF_DATA) ? NULL : iof_file_get_fh(iofile)) -FILE * iof_get_file (iof *F); - -/* basic iof_file interface */ - -iof_file * iof_file_new (FILE *file); -iof_file * iof_file_init (iof_file *iofile, FILE *file); - -iof_file * iof_file_rdata (const void *data, size_t size); -iof_file * iof_file_wdata (void *data, size_t size); - -iof_file * iof_file_rdata_init (iof_file *iofile, const void *data, size_t size); -iof_file * iof_file_wdata_init (iof_file *iofile, void *data, size_t size); - -iof_file * iof_file_reader_from_file_handle (iof_file *iofile, const char *filename, FILE *file, int preload, int closefile); -iof_file * iof_file_reader_from_file (iof_file *iofile, const char *filename, int preload); -iof_file * iof_file_reader_from_data (iof_file *iofile, const void *data, size_t size, int preload, int freedata); -//iof_file * iof_file_writer_from_file (iof_file *iofile, const char *filename); - -void * iof_copy_data (const void *data, size_t size); -#define iof_data_free(data) util_free(data) -#define iof_file_wdata_copy(data, size) iof_file_wdata(iof_copy_data(data, size), size) -#define iof_file_rdata_copy(data, size) iof_file_rdata(iof_copy_data(data, size), size) - -void iof_file_free (iof_file *iofile); - -#define iof_file_get_name(iofile) ((iofile)->name) -void iof_file_set_name (iof_file *iofile, const char *name); - -#define iof_file_incref(iofile) (++(iofile)->refcount) -#define iof_file_decref(iofile) ((void)(--(iofile)->refcount <= 0 && (iof_file_free(iofile), 0))) - -int iof_file_seek (iof_file *iofile, long offset, int whence); -long iof_file_tell (iof_file *iofile); -size_t iof_file_size (iof_file *iofile); -int iof_file_eof (iof_file *iofile); - -size_t iof_file_read (void *ptr, size_t size, size_t items, iof_file *iofile); -size_t iof_file_write (const void *ptr, size_t size, size_t items, iof_file *iofile); -size_t iof_file_ensure (iof_file *iofile, size_t bytes); -int iof_file_flush (iof_file *iofile); - -int iof_file_getc (iof_file *iofile); -int iof_file_putc (iof_file *iofile, int c); - -int iof_file_reclose_input (iof_file *iofile); -int iof_file_reopen_input (iof_file *iofile); - -#define iof_file_reopen(iofile) (((iofile)->flags & IOF_REOPEN_FILE) ? iof_file_reopen_input(iofile) : 1) -#define iof_file_reclose(iofile) (void)(((iofile)->flags & IOF_RECLOSE_FILE) ? iof_file_reclose_input(iofile) : 0) - -void iof_file_close_input (iof_file *iofile); - -/* wrappers of basic operations for iof */ - -int iof_reader_seek (iof *I, long offset, int whence); -int iof_reader_reseek (iof *I, long offset, int whence); -int iof_writer_seek (iof *I, long offset, int whence); -int iof_writer_reseek (iof *I, long offset, int whence); - -int iof_seek (iof *I, long offset, int whence); -int iof_reseek (iof *I, long offset, int whence); - -long iof_reader_tell (iof *I); -long iof_writer_tell (iof *I); -long iof_tell (iof *I); -size_t iof_fsize (iof *I); - -#define iof_setup_iofile(I, f) (iof_file_incref(f), (I)->iofile = f, (I)->flags |= IOF_FILE) -#define iof_setup_file(I, fh) ((I)->file = fh, (I)->flags |= IOF_FILE_HANDLE) -#define iof_setup_next(I, N) ((I)->next = N, iof_incref(N), (I)->flags |= IOF_NEXT) - -/* file handler reader and writer */ - -UTILAPI iof * iof_setup_file_handle_reader (iof *I, void *buffer, size_t space, FILE *f); -UTILAPI iof * iof_setup_file_handle_writer (iof *O, void *buffer, size_t space, FILE *f); - -/* file reader and writer */ - -UTILAPI iof * iof_setup_file_reader (iof *I, void *buffer, size_t space, const char *filename); -UTILAPI iof * iof_setup_file_writer (iof *O, void *buffer, size_t space, const char *filename); - -/* mem writer */ - -UTILAPI iof * iof_setup_buffer (iof *O, void *buffer, size_t space); -UTILAPI iof * iof_setup_buffermin (iof *O, void *buffer, size_t space, size_t min); - -UTILAPI iof * iof_buffer_create (size_t space); -#define iof_buffer_new() iof_buffer_create(BUFSIZ) - -/* custom handler */ - -UTILAPI iof * iof_reader (iof *I, void *link, iof_handler reader, const void *s, size_t bytes); -UTILAPI iof * iof_writer (iof *O, void *link, iof_handler writer, void *s, size_t bytes); - -/* stdout wrapper */ - -extern UTILAPI iof iof_stdout; -extern UTILAPI iof iof_stderr; - -/* simple string reader */ - -UTILAPI iof * iof_string_reader (iof *I, const void *s, size_t bytes); - -#define iof_string(I, s, bytes) \ - (((I)->rbuf = (I)->rpos = (const uint8_t *)s), ((I)->rend = (I)->rbuf + (bytes)), ((I)->flags |= IOF_DATA), (I)) - -/* dummies */ - -UTILAPI iof * iof_dummy (void *buffer, size_t space); -UTILAPI iof * iof_null (void *buffer, size_t space); - -/* checking available space */ - -#define iof_loadable(I) ((I)->pos < (I)->end || iof_load(I)) -#define iof_readable(I) ((I)->pos < (I)->end || iof_input(I)) -#define iof_writable(O) ((O)->pos < (O)->end || iof_output(O)) - -#define iof_hloadable iof_loadable -#define iof_iloadable iof_loadable - -#define iof_hreadable iof_readable -#define iof_ireadable iof_readable - -#define iof_hwritable iof_writable -#define iof_iwritable iof_writable - -/* ensure space to write several bytes (several means less then I->space) */ - -#define iof_ensure(O, n) ((O)->pos+(n)-1 < (O)->end || iof_output(O)) // iof_ensure(O, 1) eq iof_writable(O) -#define iof_hensure(O, n) ((O)->hpos+(n)-1 < (O)->hend || iof_output(O)) -#define iof_iensure(O, n) ((O)->ipos+(n)-1 < (O)->iend || iof_output(O)) - -/* reading */ - -UTILAPI int iof_getc (iof *I); -UTILAPI int iof_hgetc (iof *I); -UTILAPI int iof_igetc (iof *I); - -// UTILAPI int iof_cmp (iof *I, const char *s); -// UTILAPI int iof_cmpn (iof *I, const char *s, size_t bytes); - -UTILAPI iof_status iof_pass (iof *I, iof *O); -#define iof_hpass iof_pass -#define iof_ipass iof_pass - -/* readers helpers */ - -UTILAPI size_t iof_read (iof *I, void *s, size_t bytes); -UTILAPI size_t iof_hread (iof *I, void *s, size_t bytes); -UTILAPI size_t iof_iread (iof *I, void *s, size_t bytes); - -UTILAPI size_t iof_skip (iof *I, size_t bytes); -UTILAPI size_t iof_hskip (iof *I, size_t bytes); -UTILAPI size_t iof_iskip (iof *I, size_t bytes); - -/* get */ - -#define iof_pos(I) (*(I)->pos++) -#define iof_hpos(I) (*(I)->hpos++) -#define iof_ipos(I) (*(I)->ipos++) - -#define iof_get(I) (iof_readable(I) ? (int)(*(I)->pos++) : IOFEOF) -#define iof_hget(I) (iof_hreadable(I) ? (int)(*(I)->hpos++) : IOFEOF) -#define iof_iget(I) (iof_ireadable(I) ? (int)(*(I)->ipos++) : IOFEOF) - -#define iof_char(I) (iof_readable(I) ? (int)(*(I)->pos) : IOFEOF) -#define iof_hcurr(I) (iof_hreadable(I) ? (int)(*(I)->hpos) : IOFEOF) -#define iof_icurr(I) (iof_ireadable(I) ? (int)(*(I)->ipos) : IOFEOF) - -#define iof_next(I) (++(I)->pos, iof_char(I)) -#define iof_hnext(I) (++(I)->hpos, iof_hcurr(I)) -#define iof_inext(I) (++(I)->ipos, iof_icurr(I)) - -/* unget */ - -/* -If possible, we just move the position backward. If it is not possible to -move backward, we call iof_backup(I, c) that sets all pointers to the end of -a private backup space, then moves buf AND pos pointers backward and set c at -pos (==buf). We can backup characters as long as there is a private space. If -several calls to iof_backup() are followed by iof_get(), pos pointer -increases in normal way and so the use of another iof_unget() works just fine -by moving the position. Once we swallow all backup characters (when -pos==end), backup handler restores the previous pointers. - -Obviously we assume that the character provided to iof_unget() is always the -character just obtained from iof_get(). We CAN'T just overwrite the character -at a given position as the space we read may not be writable. - -When backup is in use, we can only get bytes until automatically restored. -*/ - -/* backup */ - -/* -#define iof_uses_backup(I) ((I)->more == iof_unget_handler) - -#define iof_save(I, B) \ - ((B)->buf = (I)->buf, (B)->pos = (I)->pos, (B)->end = (I)->end, (B)->space = (I)->space, \ - (B)->link = I->link, (B)->more = (I)->more, (B)->flags = (I)->flags) -#define iof_restore(B, I) iof_save(I, B) - -#define iof_unget(I, c) \ - ((void)(c == (uint8_t)c ? ((I)->pos > (I)->buf ? --(I)->pos : iof_backup(I, c)) : 0) -int iof_backup (iof *I, int c); -*/ - -/* writing */ - -UTILAPI size_t iof_write_file_handle (iof *O, FILE *file); -UTILAPI size_t iof_write_file (iof *O, const char *filename); -UTILAPI size_t iof_write_iofile (iof *O, iof_file *iofile, int savepos); - -UTILAPI int iof_putc (iof *O, int u); -UTILAPI int iof_hputc (iof *O, int u); -UTILAPI int iof_iputc (iof *O, int u); - -UTILAPI size_t iof_write (iof *O, const void *data, size_t size); -UTILAPI size_t iof_hwrite (iof *O, const void *data, size_t size); -UTILAPI size_t iof_iwrite (iof *O, const void *data, size_t size); - -UTILAPI iof_status iof_puts (iof *O, const void *data); -UTILAPI size_t iof_put_string (iof *O, const void *data); -UTILAPI size_t iof_putfs (iof *O, const char *format, ...); -UTILAPI size_t iof_repc (iof *O, char c, size_t bytes); - -#define iof_putl(O, s) iof_write(O, "" s, sizeof(s)-1) -//#define iof_putl iof_puts - -#define iof_set(O, c) (*(O)->pos++ = (uint8_t)(c)) -#define iof_set2(O, c1, c2) (iof_set(O, c1), iof_set(O, c2)) -#define iof_set3(O, c1, c2, c3) (iof_set(O, c1), iof_set(O, c2), iof_set(O, c3)) -#define iof_set4(O, c1, c2, c3, c4) (iof_set(O, c1), iof_set(O, c2), iof_set(O, c3), iof_set(O, c4)) -#define iof_set5(O, c1, c2, c3, c4, c5) (iof_set(O, c1), iof_set(O, c2), iof_set(O, c3), iof_set(O, c4), iof_set(O, c5)) - -#define iof_hset(O, c) (*(O)->hpos++ = (uint16_t)(c)) -#define iof_iset(O, c) (*(O)->ipos++ = (uint32_t)(c)) - -#define iof_put(O, c) ((void)iof_ensure(O, 1), iof_set(O, c)) -#define iof_put2(O, c1, c2) ((void)iof_ensure(O, 2), iof_set2(O, c1, c2)) -#define iof_put3(O, c1, c2, c3) ((void)iof_ensure(O, 3), iof_set3(O, c1, c2, c3)) -#define iof_put4(O, c1, c2, c3, c4) ((void)iof_ensure(O, 4), iof_set4(O, c1, c2, c3, c4)) -#define iof_put5(O, c1, c2, c3, c4, c5) ((void)iof_ensure(O, 5), iof_set5(O, c1, c2, c3, c4, c5)) - -#define iof_hput(O, c) ((void)iof_hensure(O, 1), iof_hset(O, c)) -#define iof_iput(O, c) ((void)iof_iensure(O, 1), iof_iset(O, c)) - -#define iof_put_uc_hex(O, c) iof_put2(O, base16_uc_digit1(c), base16_uc_digit2(c)) -#define iof_put_lc_hex(O, c) iof_put2(O, base16_lc_digit1(c), base16_lc_digit2(c)) -#define iof_set_uc_hex(O, c) iof_set2(O, base16_uc_digit1(c), base16_uc_digit2(c)) -#define iof_set_lc_hex(O, c) iof_set2(O, base16_lc_digit1(c), base16_lc_digit2(c)) -#define iof_put_hex iof_put_uc_hex -#define iof_set_hex iof_set_uc_hex - -/* number from iof; return 1 on success, 0 otherwise */ - -#define iof_scan_sign(I, c, sign) _scan_sign(c, sign, iof_next(I)) -#define iof_scan_integer(I, c, number) _scan_integer(c, number, iof_next(I)) -#define iof_scan_radix(I, c, number, radix) _scan_radix(c, number, radix, iof_next(I)) -#define iof_read_integer(I, c, number) _read_integer(c, number, iof_next(I)) -#define iof_read_radix(I, c, number, radix) _read_radix(c, number, radix, iof_next(I)) - -#define iof_scan_decimal(I, c, number) _scan_decimal(c, number, iof_next(I)) -#define iof_scan_fraction(I, c, number, exponent10) _scan_fraction(c, number, exponent10, iof_next(I)) -#define iof_scan_exponent10(I, c, exponent10) _scan_exponent10(c, exponent10, iof_next(I)) - -UTILAPI int iof_get_int32 (iof *I, int32_t *number); -UTILAPI int iof_get_slong (iof *I, long *number); -UTILAPI int iof_get_int64 (iof *I, int64_t *number); - -UTILAPI int iof_get_uint32 (iof *I, uint32_t *number); -UTILAPI int iof_get_ulong (iof *I, unsigned long *number); -UTILAPI int iof_get_usize (iof *I, size_t *number); -UTILAPI int iof_get_uint64 (iof *I, uint64_t *number); - -UTILAPI int iof_get_int32_radix (iof *I, int32_t *number, int radix); -UTILAPI int iof_get_slong_radix (iof *I, long *number, int radix); -UTILAPI int iof_get_int64_radix (iof *I, int64_t *number, int radix); - -UTILAPI int iof_get_uint32_radix (iof *I, uint32_t *number, int radix); -UTILAPI int iof_get_ulong_radix (iof *I, unsigned long *number, int radix); -UTILAPI int iof_get_usize_radix (iof *I, size_t *number, int radix); -UTILAPI int iof_get_uint64_radix (iof *I, uint64_t *number, int radix); - -#if defined(INTLW_IS_INT64) -# define iof_get_intlw(I, number) iof_get_int64(I, number) -# define iof_get_uintlw(I, number) iof_get_uint64(I, number) -# define iof_get_intlw_radix(I, number, radix) iof_get_int64_radix(I, number, radix) -# define iof_get_uintlw_radix(I, number, radix) iof_get_uint64_radix(I, number, radix) -#elif defined(INTLW_IS_LONG) -# define iof_get_intlw(I, number) iof_get_slong(I, number) -# define iof_get_uintlw(I, number) iof_get_ulong(I, number) -# define iof_get_intlw_radix(I, number, radix) iof_get_slong_radix(I, number, radix) -# define iof_get_uintlw_radix(I, number, radix) iof_get_ulong_radix(I, number, radix) -#endif - -UTILAPI int iof_get_roman (iof *I, uint16_t *number); - -UTILAPI int iof_get_double (iof *I, double *number); -UTILAPI int iof_get_float (iof *I, float *number); - -UTILAPI int iof_conv_double (iof *I, double *number); -UTILAPI int iof_conv_float (iof *I, float *number); - -/* number to iof; return a number of written bytes */ - -UTILAPI size_t iof_put_int32 (iof *O, int32_t number); -UTILAPI size_t iof_put_slong (iof *O, long number); -UTILAPI size_t iof_put_int64 (iof *O, int64_t number); - -UTILAPI size_t iof_put_uint32 (iof *O, uint32_t number); -UTILAPI size_t iof_put_ulong (iof *O, unsigned long number); -UTILAPI size_t iof_put_usize (iof *O, size_t number); -UTILAPI size_t iof_put_uint64 (iof *O, uint64_t number); - -UTILAPI size_t iof_put_int32_radix (iof *O, int32_t number, int radix, int uc); -UTILAPI size_t iof_put_slong_radix (iof *O, long number, int radix, int uc); -UTILAPI size_t iof_put_int64_radix (iof *O, int64_t number, int radix, int uc); - -UTILAPI size_t iof_put_uint32_radix (iof *O, uint32_t number, int radix, int uc); -UTILAPI size_t iof_put_ulong_radix (iof *O, unsigned long number, int radix, int uc); -UTILAPI size_t iof_put_usize_radix (iof *O, size_t number, int radix, int uc); -UTILAPI size_t iof_put_uint64_radix (iof *O, uint64_t number, int radix, int uc); - -#if defined(INTLW_IS_INT64) -# define iof_put_intlw(O, number) iof_put_int64(O, number) -# define iof_put_uintlw(O, number) iof_put_uint64(O, number) -# define iof_put_intlw_radix(O, number, radix, uc) iof_put_int64_radix(O, number, radix, uc) -# define iof_put_uintlw_radix(O, number, radix, uc) iof_put_uint64_radix(O, number, radix, uc) -#elif defined(INTLW_IS_LONG) -# define iof_put_intlw(O, number) iof_put_slong(O, number) -# define iof_put_uintlw(O, number) iof_put_ulong(O, number) -# define iof_put_intlw_radix(O, number, radix, uc) iof_put_slong_radix(O, number, radix, uc) -# define iof_put_uintlw_radix(O, number, radix, uc) iof_put_ulong_radix(O, number, radix, uc) -#endif - -UTILAPI size_t iof_put_roman (iof *O, uint16_t number, int uc); - -UTILAPI size_t iof_put_double(iof *O, double number, int digits); -UTILAPI size_t iof_put_float(iof *O, float number, int digits); - -/* common helpers for binary parsers */ - -UTILAPI int iof_get_be_uint2 (iof *I, uint32_t *pnumber); -UTILAPI int iof_get_be_uint3 (iof *I, uint32_t *pnumber); -UTILAPI int iof_get_be_uint4 (iof *I, uint32_t *pnumber); - -UTILAPI int iof_get_le_uint2 (iof *I, uint32_t *pnumber); -UTILAPI int iof_get_le_uint3 (iof *I, uint32_t *pnumber); -UTILAPI int iof_get_le_uint4 (iof *I, uint32_t *pnumber); - -// iof_set() and iof_put() suite casts arguments to uint8_t, so we don't need &0xff mask - -#define iof_set_be_uint1(O, u) iof_set(O, u) -#define iof_set_be_uint2(O, u) iof_set2(O, (u)>>8, u) -#define iof_set_be_uint3(O, u) iof_set3(O, (u)>>16, (u)>>8, u) -#define iof_set_be_uint4(O, u) iof_set4(O, (u)>>24, (u)>>16, (u)>>8, u) - -#define iof_set_le_uint1(O, u) iof_set(O, u) -#define iof_set_le_uint2(O, u) iof_set2(O, u, (u)>>8) -#define iof_set_le_uint3(O, u) iof_set3(O, u, (u)>>8, (u)>>16) -#define iof_set_le_uint4(O, u) iof_set4(O, u, (u)>>8, (u)>>16, (u)>>24) - -#define iof_put_be_uint1(O, u) iof_put(O, u) -#define iof_put_be_uint2(O, u) iof_put2(O, (u)>>8, u) -#define iof_put_be_uint3(O, u) iof_put3(O, (u)>>16, (u)>>8, u) -#define iof_put_be_uint4(O, u) iof_put4(O, (u)>>24, (u)>>16, (u)>>8, u) - -#define iof_put_le_uint1(O, u) iof_put(O, u) -#define iof_put_le_uint2(O, u) iof_put2(O, u, (u)>>8) -#define iof_put_le_uint3(O, u) iof_put3(O, u, (u)>>8, (u)>>16) -#define iof_put_le_uint4(O, u) iof_put4(O, u, (u)>>8, (u)>>16, (u)>>24) - -/* buffer results */ - -#define iof_reader_result(I, size) ((size = (size_t)iof_left(I)), (I)->pos) -#define iof_writer_result(I, size) ((size = (size_t)iof_size(I)), (I)->buf) -#define iof_result(I, size) (((I)->flags & IOF_READER) ? iof_reader_result(I, size) : iof_writer_result(I, size)) - -uint8_t * iof_file_input_data (iof_file *iofile, size_t *psize, int *isnew); -//uint8_t * iof_file_reader_data (iof_file *iofile, size_t *size); -//uint8_t * iof_file_writer_data (iof_file *iofile, size_t *size); - -uint8_t * iof_reader_data (iof *I, size_t *psize); -uint8_t * iof_writer_data (iof *O, size_t *psize); -size_t iof_reader_to_file_handle (iof *I, FILE *file); -size_t iof_reader_to_file (iof *I, const char *filename); - -#define iof_loaded(I) ((I)->end = (I)->pos, (I)->pos = (I)->buf, iof_left(I)) - -#define iof_data_to_file_handle(data, size, file) fwrite(data, sizeof(uint8_t), size, file) -UTILAPI size_t iof_data_to_file (const void *data, size_t size, const char *filename); - -UTILAPI size_t iof_result_to_file_handle (iof *F, FILE *file); -UTILAPI size_t iof_result_to_file (iof *F, const char *filename); -UTILAPI void iof_debug (iof *I, const char *filename); - -/* common filters allocator */ - -void iof_filters_init (void); -void iof_filters_free (void); - -iof * iof_filter_reader_new (iof_handler handler, size_t statesize, void **pstate); -#define iof_filter_reader(handler, statesize, pstate) iof_filter_reader_new(handler, statesize, (void **)(pstate)) -iof * iof_filter_reader_with_buffer_new (iof_handler handler, size_t statesize, void **pstate, void *buffer, size_t buffersize); -#define iof_filter_reader_with_buffer(handler, statesize, pstate, buffer, buffersize) iof_filter_reader_with_buffer_new(handler, statesize, (void **)(pstate), buffer, buffersize) -iof * iof_filter_writer_new (iof_handler handler, size_t statesize, void **pstate); -#define iof_filter_writer(handler, statesize, pstate) iof_filter_writer_new(handler, statesize, (void **)(pstate)) -iof * iof_filter_writer_with_buffer_new (iof_handler handler, size_t statesize, void **pstate, void *buffer, size_t buffersize); -#define iof_filter_writer_with_buffer(handler, statesize, pstate, buffer, buffersize) iof_filter_writer_with_buffer_new(handler, statesize, (void **)(pstate), buffer, buffersize) - -#define iof_filter_state(statetype, F) (statetype)((void *)((F) + 1)) - -void iof_free (iof *F); -void iof_discard (iof *F); - -size_t iof_resize_buffer_to (iof *O, size_t space); -#define iof_resize_buffer(O) iof_resize_buffer_to(O, (O)->space << 1) - -size_t iof_decoder_retval (iof *I, const char *type, iof_status status); -size_t iof_encoder_retval (iof *O, const char *type, iof_status status); - -/* filters */ - -iof * iof_filter_file_handle_reader (FILE *file); -iof * iof_filter_file_handle_writer (FILE *file); - -iof * iof_filter_iofile_reader (iof_file *iofile, size_t offset); -iof * iof_filter_iofile_writer (iof_file *iofile, size_t offset); - -iof * iof_filter_file_reader (const char *filename); -iof * iof_filter_file_writer (const char *filename); - -iof * iof_filter_string_reader (const void *s, size_t length); -iof * iof_filter_string_writer (const void *s, size_t length); - -iof * iof_filter_buffer_writer (size_t size); - -iof * iof_filter_stream_reader (FILE *file, size_t offset, size_t length); -iof * iof_filter_stream_coreader (iof_file *iofile, size_t offset, size_t length); - -iof * iof_filter_stream_writer (FILE *file); -iof * iof_filter_stream_cowriter (iof_file *iofile, size_t offset); - -FILE * iof_filter_file_reader_source (iof *I, size_t *poffset, size_t *plength); -iof_file * iof_filter_file_coreader_source (iof *I, size_t *poffset, size_t *plength); -iof * iof_filter_reader_replacement (iof *P, iof_handler handler, size_t statesize, void **pstate); -#define iof_filter_reader_replace(P, handler, statesize, pstate) iof_filter_reader_replacement(P, handler, statesize, (void **)(pstate)) - -#endif
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utillog.c b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utillog.c deleted file mode 100644 index 6d32514a7a7..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utillog.c +++ /dev/null @@ -1,60 +0,0 @@ - -#include <stdio.h> -#include <string.h> // strlen -#include <stdarg.h> -#include "utillog.h" - -#define LOGGER_BUFFER_SIZE 256 -#define LOGGER_PREFIX_SIZE 32 - -typedef struct { - logger_function callback; - void *context; - size_t pfxlen; -} logger_struct; - -static logger_struct logger = { 0, NULL, 0 }; - -static char logger_buffer[LOGGER_BUFFER_SIZE+LOGGER_PREFIX_SIZE]; - -void loggerf (const char *format, ...) -{ - va_list args; - int length; - - va_start(args, format); - length = vsnprintf(logger_buffer + logger.pfxlen, LOGGER_BUFFER_SIZE, format, args); - if (length > 0) - { - if (length > LOGGER_BUFFER_SIZE) - length = LOGGER_BUFFER_SIZE; - } - else - { - loggerf("logger encoding error '%s'", format); - length = (int)strlen(logger_buffer); - } - length += (int)logger.pfxlen; - if (logger.callback) - logger.callback(logger_buffer, logger.context); - else - printf("\n%s\n", logger_buffer); - va_end(args); -} - -void logger_callback (logger_function callback, void *context) -{ - logger.callback = callback; - logger.context = context; -} - -int logger_prefix (const char *prefix) -{ - size_t pfxlen; - pfxlen = strlen(prefix); - if (pfxlen > LOGGER_PREFIX_SIZE) - return 0; - memcpy(logger_buffer, prefix, pfxlen); - logger.pfxlen = pfxlen; - return 1; -} diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utillog.h b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utillog.h deleted file mode 100644 index c30e0ff0f57..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utillog.h +++ /dev/null @@ -1,10 +0,0 @@ - -#ifndef UTIL_LOG_H -#define UTIL_LOG_H - -typedef void (*logger_function) (const char *message, void *alien); -void loggerf (const char *format, ...); -void logger_callback (logger_function callback, void *context); -int logger_prefix (const char *prefix); - -#endif
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utillzw.c b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utillzw.c deleted file mode 100644 index e5134e79473..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utillzw.c +++ /dev/null @@ -1,705 +0,0 @@ -/* lzw implementation for postscript/pdf filters -# Notes on LZW - -# Encoder - -Initially the table contains 256 entires for single bytes. Encoder consumes -input bytes trying to find the longest sequence stored so far in the table. -Once it finds a sequence that is not present in the table, it outputs the table -index of the longest sequence found (accumulated bytes except the last -consumed) and pushes the new sequence (accumulated bytes including the last -one) on the top of the table. The last taken byte is not yet written to the -output, it becomes the beginning of the new sequence to accumulate. Initially, -encoder outputs 9-bit codes. While the table grows, the number of bits for each -code increases up to 12. In example, after adding a table entry of index 511 it -is high time to switch to 10-bit bytes. /EarlyChange=true parameter in stream -dictionary (both postscript and pdf) informs to increase the number of bits one -code earlier then necessary. Looks pretty much like an early days bug that -became a specification :) I have never found a PDF having /EarlyChange key -specified anyway. - -Once the table becomes full (or when encoder decides it is worthy), -a clear-table marker (code 256) purges the table and restores codes length to -9. End-of-data marker (code 257) ends the stream. Conventionally, the beginning -of the stream starts with clear-table marker. - -Postscript allows to provide a /UnitLength which determines the bit length of -codes. The above description assumes UnitLength=8 (default). Allowed values are -from 3 to 8. Different UnitLength also affects markers; clear-table is then -2^UnitLength and end-of-data marker is 2^UnitLenth+1. - -Encoder outputs 9-12bit codes that are packed into bytes using high-bits-first -scheme (default) or low-bits-scheme. - -PDF spec p. 73 (PS spec p. 135 gives an mistaken output sequence and so -mistaken output bytes) - -Input character sequence (decimal) -45 45 45 45 45 65 45 45 45 66 - -Output 9bit codes (decimal) -256 45 258 258 65 259 66 257 - -Output 9bit codes (binary) -100000000 000101101 100000010 100000010 001000001 100000011 001000010 100000001 - -Output bytes (LowBitsFirst=false); eight high-order bits of code becomes -the first byte, remaining low-order bit of code becomes the high-order bit of the -next byte; -10000000 00001011 01100000 01010000 00100010 00001100 00001100 10000101 00000001 --> 80 0B 60 50 22 0C 0C 85 01 - -Output bytes (binary, LowBitsFirst=true); eight low-order bits of code becomes -the first byte, remaining high-order bit of code becomes low-order bit of the -next byte; -00000000 01011011 00001000 00010100 00011000 01100100 10100000 10000000 10010000 --> 00 5B 08 14 18 64 A0 80 90 - -# Decoder - -Decoder consumes input bytes transforming them to 9 to 12 bit codes. Initially -it starts with 9bit codes and the table of 258 fixed codes (same as encoder). -Basically, it interprets incoming codes as table indices (except 256 and 257 -markers) and it outputs byte sequences stored at given indices. It also -upbuilds the table and changes the number of bits of codes when necessary. The -key point on lzw is that both encoder and decoder builds the table -synchronously. - -However, decoder needs some "knowledge" about how encoder works to be able to -interpret a table index that it doesn't have so far. Look that the output from -encoder in the example above. The first output code is conventional clear-table -(256). Then comes a code 45. So far so good, decoder interprets code 45 as -a (fixed) entry of the table, emitting byte 45. The next code is 258, which is -should be interpreted as an index in the table. Oops, encoder doesn't have one -yet. If that occurs, it means that encoder was able to output the new entry -code just after adding it to a table. It means that - - sequence_before + next_byte == next_byte + sequence_after - -This may happen not only for sequences like 45 45 45, but also symmetric series -such as abcbabcba; abcb + a == a + bcba. Decoder must be aware of that and if -it gets a code one larger than the top table index, it should create one on-fly -by appending last entry sequence by the first by of the last entry. - -# UnitLength - -Postscript specification mentions about UnitLength parameter that can be used -in LZW decoder (not allowed in encoder), with possible values from 3 to 8. This -parameter determines the number of bits per code; form UnitLength + 1 to 12. It -also determines which codes are used for clear-table marker (2^UnitLength) and -end-of-data marker ((2^UnitLength)+1). Postscript specification says (page 134): - -"Initially, the code length is (UnitLength + 1) bits and the table contains only -entries for the (2^UnitLength + 2) fixed codes. As encoding proceeds, entries are -appended to the table, associating new codes with longer and longer input character -sequences. The encoding and decoding filters maintain identical copies of -this table." - -Later on page 136 Postscript specification says: - -"Data that has been LZW-encoded with a UnitLength less than 8 consists only of -codes in the range 0 to 2^UnitLength - 1; consequently, the LZWDecode filter produces -only codes in that range when read. UnitLength also affects the encoded -representation, as described above." - -UnitLength (Postscript only) and LowBitsFirst are used only by decoder. -EarlyChange should obviously be respected by both encoder and decoder. When -table index reaches current bit length boundary (511, 1023, ...) it must react -by increasing the number of bits of input code. But if the index reaches it -maximum value (when the table is full), decoder is NOT supposed to clear the -table. When the table is full, encoder must emit clear-table marker and it -emits this code using 12 bits and reinitialize code bits after that. It means -that, when the table is full, decoder should get one more 12-bit code (which -should be clear-table marker) and actually clear the table and reinitialize -code bits after that. - -# Clear-table vs last entry track (after tries and checks) - -It is also not quite clear what should actually happen when encoder gets a full -table and it is supposed to emit clear-table marker. When it gets full, it -means that it has just appended another entry to the table. And that happens -only the input sequence collected so far plus the last byte is not present in -the table. Encoder is supposed to output the table index of the present -sequence and set the recent byte as a starting index of the new sequence to be -collected. Even if it is time to clear the table, encoder is still supposed to -keep the track of the last table entry. Decoder, however, must drop the track of the -last code on clear-table. - -# Decoder table vs encoder table - -While decoding we need query lzw table by (subsequent) numeric codes and output -character sequences stored in the table. While encoding we need to query the -table on every input byte and fetch indices pointing to character sequences. -Note that we never need to query the entire table for the longest sequence -found so far. The encoder table do not need to access the longest character -sequence at one piece. It is enough to keep the track of the current table -index and the very next byte. We organize an encoder table into a search tree, -where every node contains its table index (value) and last byte (key). Except -initial tree content, every node is created on the base of the previous node -and it conceptually point the sequence represented by that nodo consists of the -previous node sequence plus the next byte. - -Every new node is a descendant of the node it has been derived from. Every node -has a map (a search subtree) indexed by suffix byte value, pointing to -descendants nodes. Every node also has binary tentackles (left/right fields) -necessary to search the map (except initials, every node lives in a map of some -ancestor node). The key point is that on every input byte we don't search the -entire tree, but only the map of the current node children. The map tree is -a simple binary tree with no balancing mechanism (not worthy to optimize an -ephemeric structure that may be upbuilt more often then queried). - -In our implementation, decoder table requires 4069 entries (topmost index 4095). -Encoder table, however, needs 4097 entries to handle the case when EarlyIndex -parameter is 0 (I have never a chance to test that in practise). The node of index -4096 might be added to a search tree, but its code is never emitted; the lookup -is purged just after adding that node. - -todo: -- support for LowBitsFirst encoding -*/ - -#include "utilmem.h" -#include "utillzw.h" - -/* filter state struct */ - -typedef struct lzw_entry { - union { - const char *rdata; // to be able to init with string literal - char *data; - }; - int size; -} lzw_entry; - -#define lzw_index short - -typedef struct lzw_node lzw_node; - -struct lzw_node { - lzw_index index; - unsigned char suffix; - lzw_node *left; - lzw_node *right; - lzw_node *map; -}; - -struct lzw_state { - union { - lzw_node *lookup; /* encoder table */ - lzw_entry *table; /* decoder table */ - }; - lzw_index index; /* table index */ - union { - lzw_node *lastnode; /* previous encoder table node */ - struct { - lzw_entry *lastentry; /* previous decoder table entry */ - int tailbytes; /* num of bytes of lastentry not yet written out */ - }; - }; - int basebits; /* /UnitLength parameter (8) */ - int codebits; /* current code bits */ - int lastbyte; /* previosly read byte */ - int tailbits; /* lastbyte bits not yet consumed */ - int flush; /* encoder */ - int flags; /* options */ -}; - -typedef union { lzw_state *lzwstate; void *voidstate; } lzw_state_pointer; // to avoid 'dereferencing type-puned ...' warnings - -#define LZW_INIT_STATE { { 0 }, 0, { 0 }, 0, 0, 0, 0, 0, 0 } - -/* macros */ - -#define LZW_MIN_BITS 3 -#define LZW_MAX_BITS 12 -#define LZW_TABLE_SIZE (1 << LZW_MAX_BITS) -#define LZW_LOOKUP_SIZE (LZW_TABLE_SIZE + 1) - -#define lzw_bit_range(bits) (bits >= LZW_MIN_BITS && bits <= LZW_BASE_BITS) -#define lzw_base_bits(flags) (flags & ((1 << 4) - 1)) // 4 low bits of flags is basebits (UnitLength) - -#define lzw_initial_codes(state) (1 << state->basebits) -#define lzw_clear_code(state) lzw_initial_codes(state) -#define lzw_eod_code(state) (lzw_initial_codes(state) + 1) -#define lzw_initial_index(state) (lzw_initial_codes(state) + 2) - -#define lzw_max_index(state) ((1 << state->codebits) - ((state->flags & LZW_EARLY_INDEX) ? 1 : 0)) -#define lzw_check_bits(state) ((void)(state->index == lzw_max_index(state) && state->codebits < LZW_MAX_BITS && ++state->codebits)) - -#define lzw_malloc util_malloc -#define lzw_free util_free - -/* decoder */ - -static struct lzw_entry lzw_initial_table[] = { - {{"\x00"}, 1}, {{"\x01"}, 1}, {{"\x02"}, 1}, {{"\x03"}, 1}, {{"\x04"}, 1}, {{"\x05"}, 1}, {{"\x06"}, 1}, {{"\x07"}, 1}, {{"\x08"}, 1}, {{"\x09"}, 1}, {{"\x0A"}, 1}, {{"\x0B"}, 1}, {{"\x0C"}, 1}, {{"\x0D"}, 1}, {{"\x0E"}, 1}, {{"\x0F"}, 1}, - {{"\x10"}, 1}, {{"\x11"}, 1}, {{"\x12"}, 1}, {{"\x13"}, 1}, {{"\x14"}, 1}, {{"\x15"}, 1}, {{"\x16"}, 1}, {{"\x17"}, 1}, {{"\x18"}, 1}, {{"\x19"}, 1}, {{"\x1A"}, 1}, {{"\x1B"}, 1}, {{"\x1C"}, 1}, {{"\x1D"}, 1}, {{"\x1E"}, 1}, {{"\x1F"}, 1}, - {{"\x20"}, 1}, {{"\x21"}, 1}, {{"\x22"}, 1}, {{"\x23"}, 1}, {{"\x24"}, 1}, {{"\x25"}, 1}, {{"\x26"}, 1}, {{"\x27"}, 1}, {{"\x28"}, 1}, {{"\x29"}, 1}, {{"\x2A"}, 1}, {{"\x2B"}, 1}, {{"\x2C"}, 1}, {{"\x2D"}, 1}, {{"\x2E"}, 1}, {{"\x2F"}, 1}, - {{"\x30"}, 1}, {{"\x31"}, 1}, {{"\x32"}, 1}, {{"\x33"}, 1}, {{"\x34"}, 1}, {{"\x35"}, 1}, {{"\x36"}, 1}, {{"\x37"}, 1}, {{"\x38"}, 1}, {{"\x39"}, 1}, {{"\x3A"}, 1}, {{"\x3B"}, 1}, {{"\x3C"}, 1}, {{"\x3D"}, 1}, {{"\x3E"}, 1}, {{"\x3F"}, 1}, - {{"\x40"}, 1}, {{"\x41"}, 1}, {{"\x42"}, 1}, {{"\x43"}, 1}, {{"\x44"}, 1}, {{"\x45"}, 1}, {{"\x46"}, 1}, {{"\x47"}, 1}, {{"\x48"}, 1}, {{"\x49"}, 1}, {{"\x4A"}, 1}, {{"\x4B"}, 1}, {{"\x4C"}, 1}, {{"\x4D"}, 1}, {{"\x4E"}, 1}, {{"\x4F"}, 1}, - {{"\x50"}, 1}, {{"\x51"}, 1}, {{"\x52"}, 1}, {{"\x53"}, 1}, {{"\x54"}, 1}, {{"\x55"}, 1}, {{"\x56"}, 1}, {{"\x57"}, 1}, {{"\x58"}, 1}, {{"\x59"}, 1}, {{"\x5A"}, 1}, {{"\x5B"}, 1}, {{"\x5C"}, 1}, {{"\x5D"}, 1}, {{"\x5E"}, 1}, {{"\x5F"}, 1}, - {{"\x60"}, 1}, {{"\x61"}, 1}, {{"\x62"}, 1}, {{"\x63"}, 1}, {{"\x64"}, 1}, {{"\x65"}, 1}, {{"\x66"}, 1}, {{"\x67"}, 1}, {{"\x68"}, 1}, {{"\x69"}, 1}, {{"\x6A"}, 1}, {{"\x6B"}, 1}, {{"\x6C"}, 1}, {{"\x6D"}, 1}, {{"\x6E"}, 1}, {{"\x6F"}, 1}, - {{"\x70"}, 1}, {{"\x71"}, 1}, {{"\x72"}, 1}, {{"\x73"}, 1}, {{"\x74"}, 1}, {{"\x75"}, 1}, {{"\x76"}, 1}, {{"\x77"}, 1}, {{"\x78"}, 1}, {{"\x79"}, 1}, {{"\x7A"}, 1}, {{"\x7B"}, 1}, {{"\x7C"}, 1}, {{"\x7D"}, 1}, {{"\x7E"}, 1}, {{"\x7F"}, 1}, - {{"\x80"}, 1}, {{"\x81"}, 1}, {{"\x82"}, 1}, {{"\x83"}, 1}, {{"\x84"}, 1}, {{"\x85"}, 1}, {{"\x86"}, 1}, {{"\x87"}, 1}, {{"\x88"}, 1}, {{"\x89"}, 1}, {{"\x8A"}, 1}, {{"\x8B"}, 1}, {{"\x8C"}, 1}, {{"\x8D"}, 1}, {{"\x8E"}, 1}, {{"\x8F"}, 1}, - {{"\x90"}, 1}, {{"\x91"}, 1}, {{"\x92"}, 1}, {{"\x93"}, 1}, {{"\x94"}, 1}, {{"\x95"}, 1}, {{"\x96"}, 1}, {{"\x97"}, 1}, {{"\x98"}, 1}, {{"\x99"}, 1}, {{"\x9A"}, 1}, {{"\x9B"}, 1}, {{"\x9C"}, 1}, {{"\x9D"}, 1}, {{"\x9E"}, 1}, {{"\x9F"}, 1}, - {{"\xA0"}, 1}, {{"\xA1"}, 1}, {{"\xA2"}, 1}, {{"\xA3"}, 1}, {{"\xA4"}, 1}, {{"\xA5"}, 1}, {{"\xA6"}, 1}, {{"\xA7"}, 1}, {{"\xA8"}, 1}, {{"\xA9"}, 1}, {{"\xAA"}, 1}, {{"\xAB"}, 1}, {{"\xAC"}, 1}, {{"\xAD"}, 1}, {{"\xAE"}, 1}, {{"\xAF"}, 1}, - {{"\xB0"}, 1}, {{"\xB1"}, 1}, {{"\xB2"}, 1}, {{"\xB3"}, 1}, {{"\xB4"}, 1}, {{"\xB5"}, 1}, {{"\xB6"}, 1}, {{"\xB7"}, 1}, {{"\xB8"}, 1}, {{"\xB9"}, 1}, {{"\xBA"}, 1}, {{"\xBB"}, 1}, {{"\xBC"}, 1}, {{"\xBD"}, 1}, {{"\xBE"}, 1}, {{"\xBF"}, 1}, - {{"\xC0"}, 1}, {{"\xC1"}, 1}, {{"\xC2"}, 1}, {{"\xC3"}, 1}, {{"\xC4"}, 1}, {{"\xC5"}, 1}, {{"\xC6"}, 1}, {{"\xC7"}, 1}, {{"\xC8"}, 1}, {{"\xC9"}, 1}, {{"\xCA"}, 1}, {{"\xCB"}, 1}, {{"\xCC"}, 1}, {{"\xCD"}, 1}, {{"\xCE"}, 1}, {{"\xCF"}, 1}, - {{"\xD0"}, 1}, {{"\xD1"}, 1}, {{"\xD2"}, 1}, {{"\xD3"}, 1}, {{"\xD4"}, 1}, {{"\xD5"}, 1}, {{"\xD6"}, 1}, {{"\xD7"}, 1}, {{"\xD8"}, 1}, {{"\xD9"}, 1}, {{"\xDA"}, 1}, {{"\xDB"}, 1}, {{"\xDC"}, 1}, {{"\xDD"}, 1}, {{"\xDE"}, 1}, {{"\xDF"}, 1}, - {{"\xE0"}, 1}, {{"\xE1"}, 1}, {{"\xE2"}, 1}, {{"\xE3"}, 1}, {{"\xE4"}, 1}, {{"\xE5"}, 1}, {{"\xE6"}, 1}, {{"\xE7"}, 1}, {{"\xE8"}, 1}, {{"\xE9"}, 1}, {{"\xEA"}, 1}, {{"\xEB"}, 1}, {{"\xEC"}, 1}, {{"\xED"}, 1}, {{"\xEE"}, 1}, {{"\xEF"}, 1}, - {{"\xF0"}, 1}, {{"\xF1"}, 1}, {{"\xF2"}, 1}, {{"\xF3"}, 1}, {{"\xF4"}, 1}, {{"\xF5"}, 1}, {{"\xF6"}, 1}, {{"\xF7"}, 1}, {{"\xF8"}, 1}, {{"\xF9"}, 1}, {{"\xFA"}, 1}, {{"\xFB"}, 1}, {{"\xFC"}, 1}, {{"\xFD"}, 1}, {{"\xFE"}, 1}, {{"\xFF"}, 1} -}; - -#define lzw_entry_at(state, index) (&state->table[index]) - -static lzw_state * lzw_decoder_init_table (lzw_state *state, lzw_entry *table, int flags) -{ - state->basebits = lzw_base_bits(flags); // first four bits or flags - if (!lzw_bit_range(state->basebits)) - return NULL; - state->flags = flags; - if ((state->table = table) == NULL) - { - state->table = (lzw_entry *)lzw_malloc(LZW_TABLE_SIZE * sizeof(lzw_entry)); - state->flags |= LZW_TABLE_ALLOC; - } - memcpy(state->table, lzw_initial_table, (size_t)lzw_initial_codes(state)*sizeof(lzw_entry)); - // memset(&state->table[lzw_initial_codes(state)], 0, 2*sizeof(lzw_entry)); // eod and clear entries never accessed - state->codebits = state->basebits + 1; - state->index = lzw_initial_index(state); - state->lastentry = NULL; - state->tailbytes = 0; - state->lastbyte = 0; - state->tailbits = 0; - return state; -} - -lzw_state * lzw_decoder_init (lzw_state *state, int flags) -{ - return lzw_decoder_init_table(state, NULL, flags); -} - -static void lzw_decoder_clear (lzw_state *state) -{ - lzw_entry *entry; - lzw_index initindex = lzw_initial_index(state); - while (state->index > initindex) - { - entry = lzw_entry_at(state, --state->index); - lzw_free(entry->data); - // entry->data = NULL; - // entry->size = 0; - } - state->lastentry = NULL; - state->tailbytes = 0; - state->codebits = state->basebits + 1; -} - -void lzw_decoder_close (lzw_state *state) -{ - lzw_decoder_clear(state); - if (state->flags & LZW_TABLE_ALLOC) - lzw_free(state->table); -} - -static int lzw_next_entry (lzw_state *state, lzw_entry *nextentry) -{ - lzw_entry *lastentry, *newentry; - if ((lastentry = state->lastentry) == NULL) - return 1; /* its ok */ - if (state->index == LZW_TABLE_SIZE) - return 0; /* invalid input; eod marker expected earlier */ - /* put the new entry on the top of the table */ - newentry = lzw_entry_at(state, state->index++); - /* its size is the last entrtyy size plus 1 */ - newentry->size = lastentry->size + 1; - /* its content is the content of the last entry, */ - newentry->data = (char *)lzw_malloc((size_t)newentry->size); - memcpy(newentry->data, lastentry->data, lastentry->size); - /* plus the first byte of the new entry (usually fixed code entry) */ - newentry->data[newentry->size - 1] = nextentry->data[0]; - return 1; -} - -#define lzw_write_bytes(O, state) ((state->tailbytes -= (int)iof_write(O, state->lastentry->data, (size_t)state->tailbytes)) == 0) - -iof_status lzw_decode_state (iof *I, iof *O, lzw_state *state) -{ - const lzw_index clear = lzw_clear_code(state), eod = lzw_eod_code(state); - lzw_index code; - lzw_entry *entry; - if (state->lastentry != NULL) - { /* write out the tail from the last call */ - if (state->tailbytes > 0 && !lzw_write_bytes(O, state)) - return IOFFULL; - /* do what we normally do at the end of the loop body below */ - lzw_check_bits(state); - } - // if (state->flags & LZW_LOW_BITS_FIRST) - // return IOFERR; - while (1) - { - /* get input code of length state->codebits */ - code = (state->lastbyte & ((1 << state->tailbits) - 1)) << (state->codebits - state->tailbits); - for (state->tailbits -= state->codebits; state->tailbits < 0; ) - { - get_code: - if ((state->lastbyte = iof_get(I)) < 0) - return state->flush ? IOFEOF : state->lastbyte; - state->tailbits += 8; - if (state->tailbits < 0) - { - code |= (state->lastbyte << (-state->tailbits)); - goto get_code; - } - else - { - code |= (state->lastbyte >> state->tailbits); - break; - } - } - /* interpret the code */ - if (code < state->index) - { /* single byte code or special marker */ - if (code == clear) - { - lzw_decoder_clear(state); - continue; - } - if (code == eod) - return IOFEOF; - entry = lzw_entry_at(state, code); - if (!lzw_next_entry(state, entry)) - return IOFERR; - } - else if (code == state->index) - { /* apparently encoder has emitted the code of the key just created (see notes) */ - if (!lzw_next_entry(state, state->lastentry)) - return IOFERR; - entry = lzw_entry_at(state, state->index - 1); - } - else - { /* invalid input code */ - return IOFERR; - } - /* record the entry found */ - state->lastentry = entry; - /* emit the sequence pointed by that entry */ - state->tailbytes = entry->size; - if (!lzw_write_bytes(O, state)) - return IOFFULL; - /* check and update code bits */ - lzw_check_bits(state); - } - return state->lastbyte; // never reached -} - -/* encoder */ - -#define lzw_node_at(state, index) (&state->lookup[index]) - -#define lzw_node_init(node, i, c) (node->index = i, node->suffix = c, node->left = NULL, node->right = NULL, node->map = NULL) - -static lzw_state * lzw_encoder_init_table (lzw_state *state, lzw_node *lookup, int flags) -{ - lzw_index index; - lzw_node *node; - state->basebits = lzw_base_bits(flags); // first four bits of flags is base bits of code (default 8) - if (!lzw_bit_range(state->basebits)) - return NULL; - state->flags = flags; - if ((state->lookup = lookup) == NULL) - { - state->lookup = lzw_malloc(LZW_LOOKUP_SIZE*sizeof(lzw_node)); - state->flags |= LZW_TABLE_ALLOC; - } - state->index = lzw_initial_index(state); - for (index = 0; index < lzw_initial_codes(state); ++index) - { - node = lzw_node_at(state, index); - lzw_node_init(node, index, (unsigned char)index); - } - state->codebits = state->basebits + 1; - state->lastnode = NULL; - state->lastbyte = 0; - state->tailbits = 0; - return state; -} - -lzw_state * lzw_encoder_init (lzw_state *state, int flags) -{ - return lzw_encoder_init_table(state, NULL, flags); -} - -void lzw_encoder_close (lzw_state *state) -{ - if (state->flags & LZW_TABLE_ALLOC) - lzw_free(state->lookup); -} - -static void lzw_encoder_clear (lzw_state *state) -{ - lzw_node *node; - lzw_index index; - /* clear fixed nodes */ - for (index = 0; index < lzw_initial_codes(state); ++index) - { - node = lzw_node_at(state, index); - lzw_node_init(node, index, (unsigned char)index); - } - /* reset table index */ - state->index = lzw_initial_index(state); - /* reset code bits */ - state->codebits = state->basebits + 1; -} - -static void lzw_put_code (iof *O, lzw_state *state, lzw_index code, int todobits) -{ - int leftbits, rightbits; - do - { - leftbits = 8 - state->tailbits; - rightbits = todobits - leftbits; - if (rightbits >= 0) - { - state->lastbyte |= (code >> rightbits); - iof_put(O, state->lastbyte); - code = code & ((1 << rightbits) - 1); - todobits -= leftbits; - state->lastbyte = 0; - state->tailbits = 0; - } - else - { - state->lastbyte |= (code << (-rightbits)); - state->tailbits += todobits; - return; - } - } while (1); -} - -static iof_status lzw_encode_last (iof *O, lzw_state *state) -{ - if (state->flush) - { - /* put the last code if any */ - if (state->lastnode != NULL) - lzw_put_code(O, state, state->lastnode->index, state->codebits); - /* put eod marker, */ - lzw_put_code(O, state, lzw_eod_code(state), state->codebits); - /* with tail bits set to 0 */ - if (state->tailbits > 0) - lzw_put_code(O, state, 0, 8 - state->tailbits); - return IOFEOF; - } - return IOFEMPTY; -} - -static lzw_node * lzw_node_push (lzw_state *state, unsigned char suffix) -{ - lzw_node *node; - node = lzw_node_at(state, state->index); - lzw_node_init(node, state->index, suffix); - ++state->index; - return node; -} - -static int lzw_next_node (lzw_state *state, unsigned char suffix) -{ - lzw_node *node; - if ((node = state->lastnode->map) == NULL) - { - state->lastnode->map = lzw_node_push(state, suffix); - return 0; - } - while (1) - { - if (suffix < node->suffix) - { - if (node->left == NULL) - { - node->left = lzw_node_push(state, suffix); - return 0; - } - node = node->left; - } - else if (suffix > node->suffix) - { - if (node->right == NULL) - { - node->right = lzw_node_push(state, suffix); - return 0; - } - node = node->right; - } - else - { - state->lastnode = node; - return 1; - } - } - return 0; // never reached -} - -iof_status lzw_encode_state (iof *I, iof *O, lzw_state *state) -{ - int byte; - if (state->lastnode == NULL) - { /* first call only; following convention, put clear-table marker */ - if (!iof_ensure(O, 2)) - return IOFFULL; - lzw_put_code(O, state, lzw_clear_code(state), state->codebits); - /* get the first input byte and initialize the current table entry */ - if ((byte = iof_get(I)) < 0) - return lzw_encode_last(O, state); - state->lastnode = lzw_node_at(state, byte); - } - while (iof_ensure(O, 2)) - { /* we need to write at most 2 bytes on each iteration */ - if ((byte = iof_get(I)) < 0) - return lzw_encode_last(O, state); - if (lzw_next_node(state, (unsigned char)byte) == 0) - { /* means that the key hasn't been found and the new entry has just been created */ - /* output the code pointing the longest sequence so far */ - lzw_put_code(O, state, state->lastnode->index, state->codebits); - /* update code bits */ - if (state->index == lzw_max_index(state) + 1) - { - if (state->codebits < LZW_MAX_BITS) - ++state->codebits; - else - { - /* put clear-table marker */ - lzw_put_code(O, state, lzw_clear_code(state), state->codebits); - /* reset the table */ - lzw_encoder_clear(state); - } - } - /* in any case, recent byte becomes the current table code */ - state->lastnode = lzw_node_at(state, byte); - } - /* otherwise no new entry is appended and state->lastnode points the longer sequence just found */ - } - return IOFFULL; -} - -/* single call codecs */ - -iof_status lzw_decode (iof *I, iof *O, int flags) -{ - lzw_state state = LZW_INIT_STATE; - lzw_entry table[LZW_TABLE_SIZE]; - int ret; - lzw_decoder_init_table(&state, table, flags); - state.flush = 1; - ret = lzw_decode_state(I, O, &state); - // iof_flush(O); // ? - lzw_decoder_close(&state); - return ret; -} - -iof_status lzw_encode (iof *I, iof *O, int flags) -{ - lzw_state state = LZW_INIT_STATE; - lzw_node lookup[LZW_LOOKUP_SIZE]; - int ret; - lzw_encoder_init_table(&state, lookup, flags); - state.flush = 1; - ret = lzw_encode_state(I, O, &state); - // iof_flush(O); // ? - lzw_encoder_close(&state); - return ret; -} - -/* filters */ - -// lzw decoder function - -static size_t lzw_decoder (iof *F, iof_mode mode) -{ - lzw_state *state; - iof_status status; - size_t tail; - - state = iof_filter_state(lzw_state *, F); - switch(mode) - { - case IOFLOAD: - case IOFREAD: - if (F->flags & IOF_STOPPED) - return 0; - tail = iof_tail(F); - F->pos = F->buf + tail; - F->end = F->buf + F->space; - do { - status = lzw_decode_state(F->next, F, state); - } while (mode == IOFLOAD && status == IOFFULL && iof_resize_buffer(F)); - return iof_decoder_retval(F, "lzw", status); - case IOFCLOSE: - lzw_decoder_close(state); - iof_free(F); - return 0; - default: - break; - } - return 0; -} - -// lzw encoder function - -static size_t lzw_encoder (iof *F, iof_mode mode) -{ - lzw_state *state; - iof_status status; - - state = iof_filter_state(lzw_state *, F); - switch (mode) - { - case IOFFLUSH: - state->flush = 1; - FALLTHRU // fall through - case IOFWRITE: - F->end = F->pos; - F->pos = F->buf; - status = lzw_encode_state(F, F->next, state); - return iof_encoder_retval(F, "lzw", status); - case IOFCLOSE: - if (!state->flush) - lzw_encoder(F, IOFFLUSH); - lzw_encoder_close(state); - iof_free(F); - return 0; - default: - break; - } - return 0; -} - -iof * iof_filter_lzw_decoder (iof *N, int flags) -{ - iof *I; - lzw_state_pointer P; - I = iof_filter_reader(lzw_decoder, sizeof(lzw_state), &P.voidstate); - iof_setup_next(I, N); - if (lzw_decoder_init(P.lzwstate, flags) == NULL) - { - iof_discard(I); - return NULL; - } - P.lzwstate->flush = 1; - return I; -} - -iof * iof_filter_lzw_encoder (iof *N, int flags) -{ - iof *O; - lzw_state_pointer P; - O = iof_filter_writer(lzw_encoder, sizeof(lzw_state), &P.voidstate); - iof_setup_next(O, N); - if (lzw_encoder_init(P.lzwstate, flags) == NULL) - { - iof_discard(O); - return NULL; - } - return O; -} diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utillzw.h b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utillzw.h deleted file mode 100644 index 9e3a085d43c..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utillzw.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef UTIL_LZW_H -#define UTIL_LZW_H - -#include "utiliof.h" - -typedef struct lzw_state lzw_state; - -#define LZW_BASE_BITS 8 -#define LZW_TABLE_ALLOC (1<<4) -#define LZW_EARLY_INDEX (1<<5) -//#define LZW_LOW_BITS_FIRST (1<<6) -#define LZW_DECODER_DEFAULTS (LZW_BASE_BITS|LZW_EARLY_INDEX|0) -#define LZW_ENCODER_DEFAULTS (LZW_BASE_BITS|LZW_EARLY_INDEX|0) - -lzw_state * lzw_decoder_init (lzw_state *state, int flags); -lzw_state * lzw_encoder_init (lzw_state *state, int flags); - -void lzw_decoder_close (lzw_state *state); -void lzw_encoder_close (lzw_state *state); - -iof_status lzw_encode_state (iof *I, iof *O, lzw_state *state); -iof_status lzw_decode_state (iof *I, iof *O, lzw_state *state); - -iof_status lzw_encode (iof *I, iof *O, int flags); -iof_status lzw_decode (iof *I, iof *O, int flags); - -iof * iof_filter_lzw_decoder (iof *N, int flags); -iof * iof_filter_lzw_encoder (iof *N, int flags); - -#endif
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmd5.c b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmd5.c deleted file mode 100644 index 871984229c2..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmd5.c +++ /dev/null @@ -1,447 +0,0 @@ - -/* md5 implementation excerpted from code by Peter Deutsch */ - -/* begin of md5.c */ - -/* - Copyright (C) 1999, 2000, 2002 Aladdin Enterprises. All rights reserved. - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - L. Peter Deutsch - ghost@aladdin.com - - */ -/* $Id: md5.c,v 1.6 2002/04/13 19:20:28 lpd Exp $ */ -/* - Independent implementation of MD5 (RFC 1321). - - This code implements the MD5 Algorithm defined in RFC 1321, whose - text is available at - http://www.ietf.org/rfc/rfc1321.txt - The code is derived from the text of the RFC, including the test suite - (section A.5) but excluding the rest of Appendix A. It does not include - any code or documentation that is identified in the RFC as being - copyrighted. - - The original and principal author of md5.c is L. Peter Deutsch - <ghost@aladdin.com>. Other authors are noted in the change history - that follows (in reverse chronological order): - - 2002-04-13 lpd Clarified derivation from RFC 1321; now handles byte order - either statically or dynamically; added missing #include <string.h> - in library. - 2002-03-11 lpd Corrected argument list for main(), and added int return - type, in test program and T value program. - 2002-02-21 lpd Added missing #include <stdio.h> in test program. - 2000-07-03 lpd Patched to eliminate warnings about "constant is - unsigned in ANSI C, signed in traditional"; made test program - self-checking. - 1999-11-04 lpd Edited comments slightly for automatic TOC extraction. - 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5). - 1999-05-03 lpd Original version. - */ - -#include <string.h> // memcpy -#include <stdio.h> // FILE - -#include "utilmd5.h" - -#undef BYTE_ORDER /* 1 = big-endian, -1 = little-endian, 0 = unknown */ -#ifdef ARCH_IS_BIG_ENDIAN -# define BYTE_ORDER (ARCH_IS_BIG_ENDIAN ? 1 : -1) -#else -# define BYTE_ORDER 0 -#endif - -#define T_MASK ((uint32_t)~0) -#define T1 /* 0xd76aa478 */ (T_MASK ^ 0x28955b87) -#define T2 /* 0xe8c7b756 */ (T_MASK ^ 0x173848a9) -#define T3 0x242070db -#define T4 /* 0xc1bdceee */ (T_MASK ^ 0x3e423111) -#define T5 /* 0xf57c0faf */ (T_MASK ^ 0x0a83f050) -#define T6 0x4787c62a -#define T7 /* 0xa8304613 */ (T_MASK ^ 0x57cfb9ec) -#define T8 /* 0xfd469501 */ (T_MASK ^ 0x02b96afe) -#define T9 0x698098d8 -#define T10 /* 0x8b44f7af */ (T_MASK ^ 0x74bb0850) -#define T11 /* 0xffff5bb1 */ (T_MASK ^ 0x0000a44e) -#define T12 /* 0x895cd7be */ (T_MASK ^ 0x76a32841) -#define T13 0x6b901122 -#define T14 /* 0xfd987193 */ (T_MASK ^ 0x02678e6c) -#define T15 /* 0xa679438e */ (T_MASK ^ 0x5986bc71) -#define T16 0x49b40821 -#define T17 /* 0xf61e2562 */ (T_MASK ^ 0x09e1da9d) -#define T18 /* 0xc040b340 */ (T_MASK ^ 0x3fbf4cbf) -#define T19 0x265e5a51 -#define T20 /* 0xe9b6c7aa */ (T_MASK ^ 0x16493855) -#define T21 /* 0xd62f105d */ (T_MASK ^ 0x29d0efa2) -#define T22 0x02441453 -#define T23 /* 0xd8a1e681 */ (T_MASK ^ 0x275e197e) -#define T24 /* 0xe7d3fbc8 */ (T_MASK ^ 0x182c0437) -#define T25 0x21e1cde6 -#define T26 /* 0xc33707d6 */ (T_MASK ^ 0x3cc8f829) -#define T27 /* 0xf4d50d87 */ (T_MASK ^ 0x0b2af278) -#define T28 0x455a14ed -#define T29 /* 0xa9e3e905 */ (T_MASK ^ 0x561c16fa) -#define T30 /* 0xfcefa3f8 */ (T_MASK ^ 0x03105c07) -#define T31 0x676f02d9 -#define T32 /* 0x8d2a4c8a */ (T_MASK ^ 0x72d5b375) -#define T33 /* 0xfffa3942 */ (T_MASK ^ 0x0005c6bd) -#define T34 /* 0x8771f681 */ (T_MASK ^ 0x788e097e) -#define T35 0x6d9d6122 -#define T36 /* 0xfde5380c */ (T_MASK ^ 0x021ac7f3) -#define T37 /* 0xa4beea44 */ (T_MASK ^ 0x5b4115bb) -#define T38 0x4bdecfa9 -#define T39 /* 0xf6bb4b60 */ (T_MASK ^ 0x0944b49f) -#define T40 /* 0xbebfbc70 */ (T_MASK ^ 0x4140438f) -#define T41 0x289b7ec6 -#define T42 /* 0xeaa127fa */ (T_MASK ^ 0x155ed805) -#define T43 /* 0xd4ef3085 */ (T_MASK ^ 0x2b10cf7a) -#define T44 0x04881d05 -#define T45 /* 0xd9d4d039 */ (T_MASK ^ 0x262b2fc6) -#define T46 /* 0xe6db99e5 */ (T_MASK ^ 0x1924661a) -#define T47 0x1fa27cf8 -#define T48 /* 0xc4ac5665 */ (T_MASK ^ 0x3b53a99a) -#define T49 /* 0xf4292244 */ (T_MASK ^ 0x0bd6ddbb) -#define T50 0x432aff97 -#define T51 /* 0xab9423a7 */ (T_MASK ^ 0x546bdc58) -#define T52 /* 0xfc93a039 */ (T_MASK ^ 0x036c5fc6) -#define T53 0x655b59c3 -#define T54 /* 0x8f0ccc92 */ (T_MASK ^ 0x70f3336d) -#define T55 /* 0xffeff47d */ (T_MASK ^ 0x00100b82) -#define T56 /* 0x85845dd1 */ (T_MASK ^ 0x7a7ba22e) -#define T57 0x6fa87e4f -#define T58 /* 0xfe2ce6e0 */ (T_MASK ^ 0x01d3191f) -#define T59 /* 0xa3014314 */ (T_MASK ^ 0x5cfebceb) -#define T60 0x4e0811a1 -#define T61 /* 0xf7537e82 */ (T_MASK ^ 0x08ac817d) -#define T62 /* 0xbd3af235 */ (T_MASK ^ 0x42c50dca) -#define T63 0x2ad7d2bb -#define T64 /* 0xeb86d391 */ (T_MASK ^ 0x14792c6e) - -static void md5_process (md5_state *state, const uint8_t *data /*[64]*/) -{ - uint32_t - a = state->words[0], b = state->words[1], - c = state->words[2], d = state->words[3]; - uint32_t t; -#if BYTE_ORDER > 0 - /* Define storage only for big-endian CPUs. */ - uint32_t X[16]; -#else - /* Define storage for little-endian or both types of CPUs. */ - uint32_t xbuf[16]; - const uint32_t *X; -#endif - - { -#if BYTE_ORDER == 0 - /* - * Determine dynamically whether this is a big-endian or - * little-endian machine, since we can use a more efficient - * algorithm on the latter. - */ - static const int w = 1; - - if (*((const uint8_t *)&w)) /* dynamic little-endian */ -#endif -#if BYTE_ORDER <= 0 /* little-endian */ - { - /* - * On little-endian machines, we can process properly aligned - * data without copying it. - */ - if (!((data - (const uint8_t *)0) & 3)) { - /* data are properly aligned */ - X = (const uint32_t *)((const void *)data); // avoid compiler warning - } else { - /* not aligned */ - memcpy(xbuf, data, 64); - X = xbuf; - } - } -#endif -#if BYTE_ORDER == 0 - else /* dynamic big-endian */ -#endif -#if BYTE_ORDER >= 0 /* big-endian */ - { - /* - * On big-endian machines, we must arrange the bytes in the - * right order. - */ - const uint8_t *xp = data; - int i; -# if BYTE_ORDER == 0 - X = xbuf; /* (dynamic only) */ -# else -# define xbuf X /* (static only) */ -# endif - for (i = 0; i < 16; ++i, xp += 4) - xbuf[i] = xp[0] + (xp[1] << 8) + (xp[2] << 16) + (xp[3] << 24); - } -#endif - } - -#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n)))) - - /* Round 1. */ - /* Let [abcd k s i] denote the operation - a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */ -#define F(x, y, z) (((x) & (y)) | (~(x) & (z))) -#define SET(a, b, c, d, k, s, Ti)\ - t = a + F(b,c,d) + X[k] + Ti;\ - a = ROTATE_LEFT(t, s) + b - /* Do the following 16 operations. */ - SET(a, b, c, d, 0, 7, T1); - SET(d, a, b, c, 1, 12, T2); - SET(c, d, a, b, 2, 17, T3); - SET(b, c, d, a, 3, 22, T4); - SET(a, b, c, d, 4, 7, T5); - SET(d, a, b, c, 5, 12, T6); - SET(c, d, a, b, 6, 17, T7); - SET(b, c, d, a, 7, 22, T8); - SET(a, b, c, d, 8, 7, T9); - SET(d, a, b, c, 9, 12, T10); - SET(c, d, a, b, 10, 17, T11); - SET(b, c, d, a, 11, 22, T12); - SET(a, b, c, d, 12, 7, T13); - SET(d, a, b, c, 13, 12, T14); - SET(c, d, a, b, 14, 17, T15); - SET(b, c, d, a, 15, 22, T16); -#undef SET - - /* Round 2. */ - /* Let [abcd k s i] denote the operation - a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */ -#define G(x, y, z) (((x) & (z)) | ((y) & ~(z))) -#define SET(a, b, c, d, k, s, Ti)\ - t = a + G(b,c,d) + X[k] + Ti;\ - a = ROTATE_LEFT(t, s) + b - /* Do the following 16 operations. */ - SET(a, b, c, d, 1, 5, T17); - SET(d, a, b, c, 6, 9, T18); - SET(c, d, a, b, 11, 14, T19); - SET(b, c, d, a, 0, 20, T20); - SET(a, b, c, d, 5, 5, T21); - SET(d, a, b, c, 10, 9, T22); - SET(c, d, a, b, 15, 14, T23); - SET(b, c, d, a, 4, 20, T24); - SET(a, b, c, d, 9, 5, T25); - SET(d, a, b, c, 14, 9, T26); - SET(c, d, a, b, 3, 14, T27); - SET(b, c, d, a, 8, 20, T28); - SET(a, b, c, d, 13, 5, T29); - SET(d, a, b, c, 2, 9, T30); - SET(c, d, a, b, 7, 14, T31); - SET(b, c, d, a, 12, 20, T32); -#undef SET - - /* Round 3. */ - /* Let [abcd k s t] denote the operation - a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */ -#define H(x, y, z) ((x) ^ (y) ^ (z)) -#define SET(a, b, c, d, k, s, Ti)\ - t = a + H(b,c,d) + X[k] + Ti;\ - a = ROTATE_LEFT(t, s) + b - /* Do the following 16 operations. */ - SET(a, b, c, d, 5, 4, T33); - SET(d, a, b, c, 8, 11, T34); - SET(c, d, a, b, 11, 16, T35); - SET(b, c, d, a, 14, 23, T36); - SET(a, b, c, d, 1, 4, T37); - SET(d, a, b, c, 4, 11, T38); - SET(c, d, a, b, 7, 16, T39); - SET(b, c, d, a, 10, 23, T40); - SET(a, b, c, d, 13, 4, T41); - SET(d, a, b, c, 0, 11, T42); - SET(c, d, a, b, 3, 16, T43); - SET(b, c, d, a, 6, 23, T44); - SET(a, b, c, d, 9, 4, T45); - SET(d, a, b, c, 12, 11, T46); - SET(c, d, a, b, 15, 16, T47); - SET(b, c, d, a, 2, 23, T48); -#undef SET - - /* Round 4. */ - /* Let [abcd k s t] denote the operation - a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */ -#define I(x, y, z) ((y) ^ ((x) | ~(z))) -#define SET(a, b, c, d, k, s, Ti)\ - t = a + I(b,c,d) + X[k] + Ti;\ - a = ROTATE_LEFT(t, s) + b - /* Do the following 16 operations. */ - SET(a, b, c, d, 0, 6, T49); - SET(d, a, b, c, 7, 10, T50); - SET(c, d, a, b, 14, 15, T51); - SET(b, c, d, a, 5, 21, T52); - SET(a, b, c, d, 12, 6, T53); - SET(d, a, b, c, 3, 10, T54); - SET(c, d, a, b, 10, 15, T55); - SET(b, c, d, a, 1, 21, T56); - SET(a, b, c, d, 8, 6, T57); - SET(d, a, b, c, 15, 10, T58); - SET(c, d, a, b, 6, 15, T59); - SET(b, c, d, a, 13, 21, T60); - SET(a, b, c, d, 4, 6, T61); - SET(d, a, b, c, 11, 10, T62); - SET(c, d, a, b, 2, 15, T63); - SET(b, c, d, a, 9, 21, T64); -#undef SET - - /* Then perform the following additions. (That is increment each - of the four registers by the value it had before this block - was started.) */ - state->words[0] += a; - state->words[1] += b; - state->words[2] += c; - state->words[3] += d; -} - -/* api */ - -md5_state * md5_digest_init (md5_state *state) -{ - state->bitcount[0] = state->bitcount[1] = 0; - state->words[0] = 0x67452301; - state->words[1] = /*0xefcdab89*/ T_MASK ^ 0x10325476; - state->words[2] = /*0x98badcfe*/ T_MASK ^ 0x67452301; - state->words[3] = 0x10325476; - return state; -} - -void md5_digest_add (md5_state *state, const void *input, size_t size) -{ - const uint8_t *p = (const uint8_t *)input; - int nbytes = (int)size; // PJ - int left = nbytes; - int offset = (state->bitcount[0] >> 3) & 63; - uint32_t nbits = (uint32_t)(nbytes << 3); - - if (nbytes <= 0) - return; - - /* Update the message length. */ - state->bitcount[1] += nbytes >> 29; - state->bitcount[0] += nbits; - if (state->bitcount[0] < nbits) - state->bitcount[1]++; - - /* Process an initial partial block. */ - if (offset) { - int copy = (offset + nbytes > 64 ? 64 - offset : nbytes); - - memcpy(state->buffer + offset, p, copy); - if (offset + copy < 64) - return; - p += copy; - left -= copy; - md5_process(state, state->buffer); - } - - /* Process full blocks. */ - for (; left >= 64; p += 64, left -= 64) - md5_process(state, p); - - /* Process a final partial block. */ - if (left) - memcpy(state->buffer, p, left); -} - -#define md5_digest_byte(state, i) (uint8_t)(state->words[i >> 2] >> ((i & 3) << 3)) - -void md5_digest_get (md5_state *state, uint8_t digest[], int flags) -{ - static const uint8_t pad[64] = { - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }; - uint8_t data[8]; - int i; - - /* Save the length before padding. */ - for (i = 0; i < 8; ++i) - data[i] = (uint8_t)(state->bitcount[i >> 2] >> ((i & 3) << 3)); - /* Pad to 56 bytes mod 64. */ - md5_digest_add(state, pad, ((55 - (state->bitcount[0] >> 3)) & 63) + 1); - /* Append the length. */ - md5_digest_add(state, data, 8); - - /* Output */ - if (flags & MD5_HEX) - { // expected digest buffer size MD5_STRING_LENGTH - uint8_t byte; - const char *alphabet; - alphabet = (flags & MD5_LCHEX) ? "0123456789abcdef" : "0123456789ABCDEF"; - for (i = 0; i < MD5_DIGEST_LENGTH; ++i) - { - byte = md5_digest_byte(state, i); - *digest++ = (uint8_t)alphabet[byte >> 4]; - *digest++ = (uint8_t)alphabet[byte & 15]; - } - *digest = 0; - } - else - { // expected digest buffer size MD5_DIGEST_LENGTH - for (i = 0; i < MD5_DIGEST_LENGTH; ++i) - *digest++ = md5_digest_byte(state, i); - } -} - -void md5_digest (const void *input, size_t length, uint8_t digest[], int flags) -{ - md5_state md5; - md5_digest_init(&md5); - md5_digest_add(&md5, input, length); - md5_digest_get(&md5, digest, flags); -} - -/* file checksum */ - -#define DIGEST_BUFFER_SIZE 4096 - -int md5_digest_add_file (md5_state *state, const char *filename) -{ - FILE *fh; - uint8_t buffer[DIGEST_BUFFER_SIZE]; - size_t read; - - if ((fh = fopen(filename, "rb")) == NULL) - return 0; - do { - read = fread(buffer, 1, DIGEST_BUFFER_SIZE, fh); - md5_digest_add(state, buffer, read); - } while (read == DIGEST_BUFFER_SIZE); - fclose(fh); - return 1; -} - -int md5_digest_file (const char *filename, uint8_t digest[], int flags) -{ - md5_state state; - - md5_digest_init(&state); - if (md5_digest_add_file(&state, filename)) - { - md5_digest_get(&state, digest, flags); - return 1; - } - return 0; -}
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmd5.h b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmd5.h deleted file mode 100644 index 3964d59df21..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmd5.h +++ /dev/null @@ -1,49 +0,0 @@ - -/* sha2 implementation excerpted from code by Aaron D. Gifford */ - -#ifndef UTIL_MD5_H -#define UTIL_MD5_H - -#include <stdint.h> -#include <stddef.h> // for size_t -#include "utildecl.h" - -//#define md5_state md5_state_t - -typedef struct { - uint32_t bitcount[2]; - uint32_t words[4]; - uint8_t buffer[64]; -} md5_state; - -#define MD5_DIGEST_LENGTH 16 -#define MD5_STRING_LENGTH (MD5_DIGEST_LENGTH * 2 + 1) - -enum { - MD5_BYTES = 0, - MD5_UCHEX = (1<<0), - MD5_LCHEX = (1<<1) -}; - -#define MD5_DEFAULT MD5_BYTES -#define MD5_HEX (MD5_UCHEX|MD5_LCHEX) - -#ifdef __cplusplus -extern "C" -{ -#endif - -UTILAPI md5_state * md5_digest_init (md5_state *state); -UTILAPI void md5_digest_add (md5_state *state, const void *input, size_t size); -UTILAPI void md5_digest_get (md5_state *state, uint8_t digest[], int flags); - -UTILAPI void md5_digest (const void *input, size_t length, uint8_t digest[], int flags); - -UTILAPI int md5_digest_add_file (md5_state *state, const char *filename); -UTILAPI int md5_digest_file (const char *filename, uint8_t digest[], int flags); - -#ifdef __cplusplus -} /* end extern "C" */ -#endif - -#endif
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmem.c b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmem.c deleted file mode 100644 index 9a32247ab11..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmem.c +++ /dev/null @@ -1,67 +0,0 @@ - -#include <string.h> // for memcpy - -#include "utilmem.h" -#include "utillog.h" - -#ifndef util_memerr -# if defined(_WIN64) || defined(__MINGW32__) -# define util_memerr(size) { loggerf("ooops, not enough memory (%I64u)", ((unsigned long long)(size))); abort(); } -# else -# define util_memerr(size) { loggerf("ooops, not enough memory (%llu)", ((unsigned long long)(size))); abort(); } -# endif -#endif - -void * util_malloc (size_t size) -{ - void *m; - if ((m = malloc(size)) == NULL) - util_memerr(size); - return m; -} - -void * util_calloc (size_t num, size_t size) -{ - void *m; - if ((m = calloc(num, size)) == NULL) - util_memerr(size); - return m; -} - -void * util_realloc (void *m, size_t size) -{ - if ((m = realloc(m, size)) == NULL) - util_memerr(size); - return m; -} - -/* common array resizer - -data -- the beginning of array -unit -- sizeof array element -size -- current array size -extra -- requested extra size -space -- pointer to available space -allocated -- flag indicating if *data has been allocated (with malloc) - -*/ - -void util_resize (void **data, size_t unit, size_t size, size_t extra, size_t *space, int allocated) -{ - if (*space == 0) - *space = 4; // better keep *space non-zero to avoid it - do { *space <<= 1; } while (size + extra > *space); - - if (allocated) - { - *data = util_realloc(*data, *space * unit); - } - else - { - void *newdata = util_malloc(*space * unit); - if (*data != NULL) - memcpy(newdata, *data, size * unit); - *data = newdata; - } -} - diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmem.h b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmem.h deleted file mode 100644 index 4cfcfaba2a7..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmem.h +++ /dev/null @@ -1,16 +0,0 @@ - -#ifndef UTIL_MEM_H -#define UTIL_MEM_H - -#include <stdlib.h> // for size_t and alloc functions -#include "utildecl.h" - -UTILAPI void * util_malloc (size_t size); -UTILAPI void * util_calloc (size_t num, size_t size); -UTILAPI void * util_realloc (void *m, size_t size); - -void util_resize (void **data, size_t unit, size_t size, size_t extra, size_t *space, int allocated); - -#define util_free free // not a call, might be used as identifier - -#endif diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemallc.h b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemallc.h deleted file mode 100644 index 5471f4afb1c..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemallc.h +++ /dev/null @@ -1,565 +0,0 @@ -/* -Allocators -========== - -Using allocators defined here makes sense if there is a need to take a space for rather large amount of rather small objects. -The basic idea is to take memory in reasonably large blocks and to distribute small chunks from those blocks. Once chunks are -no longer needed, one can free them all at once, or free taken chunks individually. - -We define 3 types of allocators: - -1. HEAP - the simplest one, provides variable length memory chunks from larger blocks and frees them all on explicit - request. There is no way to free individual objects, only the entire heap. The heap only grows, until freed. - -2. STOCK - provides variable length memory chunks from larger blocks, but allows to free individual objects as well as the - entire stock. The stock grows and shrinks, by leaps and bounds, depending on parameters given during initialization. - -3. POOL - provides fixed size memory chunks from larger blocks. It allows to free individual chunks as well as the entire pool. - In opposite to a stock, a pool also reuses a space reclaimed by freeing individual objects; before allocating a new block it - firsts recycles freed chunks, if any. - -In general, memory chunks provided by allocators are never reallocated. Allocators do nothing with provided chunks until freed. - -Allocators are represented as small structures (several pointers and integers). We assume that such structures are either static -variables, or members of larger structures. We don't bother to allocate a memory for them. Usage scheme is pretty similar for -all: - - init() - just inititalize, don't allocate anything yet - take() - take chunks - take() - take() - ... - free() - free the all at once - -For stocks and pools there is a possibility to give back individual chunks: - - init() - like above - take() - take chunks - take() - take() - back() - give chunks back when no longer needed - take() - back() - ... - free() - needed only if not all chunks have been given back - -All calls take a shell structure pointer as an argument. take() returns a void pointer, aligned according to used variant -(8, 16, 32, 64). back() takes a void pointer as the second argument. It must be the pointer previously returned by take(). - -back() can be called in any order and can obviously be plotted with take(). By default, after back()-ing all taken chunks, the -stock returns to its initial state (zero memory used). A special KEEP flag can be used during initialization to prevent -freeing the last (sole) allocated block. If KEEP option is used, the allocator always keeps a single segment for further -allocations. This is necessary only when there is a risk that just several take() calls will be immediatelly followed by the -same number of back() calls. KEEP flag prevents allocating and freeing rather large blocks just to serve several chunks. And -this is actually important only if there are no other blocks taken, that is, if there is only one, nearly empty block in use. -In other cases KEEP flag doesn't matter, but allocators takes care to always have a block for fast allocs. - -There is also clear() operation that frees all but the recent block. One can use it to free all chunks taken so far, but to -make the allocator ready for further allocs. If either KEEP flag is used or clear() is called, soner or later the user have to -call free() explicitly, to remove all the remaining memory kept by the allocator. There is no KEEP flag for heaps, as heaps -don't allow to free individual chunks. And so, the heap never needs to make a decision if the last sole block should be removed -or not. The user makes the decision by calling clear() vs free() respectively. - -Pop -=== - -A very last chunk taken can be quickly given back with - - pop(heap, taken, size) // for heap or stock - pop(pool, taken) // for pool - -taken must be the chunk returned by the very last take(), size must be the size requested. If the chunk has been taken from -the head block (more about blocks below), the block pointer returns to its previous position, as it was before the last take(). -If the chunk has been taken from the sole block beneatch the head, the entire sole block (containing just that single chunk) -is freed. The pop() operation is different than back(); the popped chunk doesn't cause freeing the head block when its refcount -gets zero. So pop() operation breaks the concept of stock that frees all the memory once all taken chunks are given back. -on the other hand, if for some reason the very last taken chunk is to be ignored, pop() is better, as it doesn't cause blocks -scattering. The popped chunk pointer will probably be returned by the very next call to take(). In case of heap, pop() is -the only way to discard the chunk, as there is no back() operation. - -Buffer interface -================ - -When heap or stock is used by parsers, the caller oftenly doesn't know how many space will be needed for a data (this doesn't -apply to pools, which returns constant size memory chunks). Here is an interface for the allocator-as-bufer case (same for -heap and stock): - - some(heap, atleast, &space); - more(heap, taken, written, space); - ... - done(heap, taken, written); - -some() operation provides a data pointer to at least a given bytes. The actual space provided for writing is set to the third -argument. The caller may write space-bytes. If more space is needed, more() operation takes care to provide a chunk for a given -amount of bytes (space) and rewrites already written amount of bytes from a previous chunk to a new location. The function takes -the pointer to the chunk previously taken; the one returned by some() or more(). This argument must not be NULL. If you don't want -to copy a data, set written argument to zero. No matter if more() operation was used zero, one or multiple times, all the cycle must -end with done(). Calls triple - some(), more() and done() - must not be interrupted by any other api calls. In particular, using take() -or back() smells like a segfault. However, if there is a need discard the buffer being written (eg. input data error), instead of -done() one may use - - giveup(heap, taken) - -If done() has already been called, pop() is the only option to discard the chunk - - pop(heap, taken, written) - -some() operation usually doesn't change the state of the heap, unless the heap head block is NULL, or atleast parameter is too -large to fit the remaining block. more() usually changes the state, either by allocating a new head block, or by allocating -a sole block just beneath the head (blocks and blocks tiling mechanism are described below). If a sole block has been taken for -some large chunk subsequent calls to more() reallocate this sole block in place. It is assumed, that the size you request in subsequent -calls generally grows. It is ok to request space-bytes, then call done() with written value less then requested. But the drawback -is that if the chunk has already been allocated from a sole chunk, the space requested but not used is a waste. - -iof interface -============= - -iof is an independent interface for buffers written/read byte-by-byte. When used together with allocators, it provides -a convenient way to write byte data to the heap or stock, without a need for intermediate buffers. The buffer is setup with - - iof output, *O - O = buffer_init(heap, &output); // doesn't allocate anything - -or - - output = BUFFER_INIT(heap); // doesn't allocate anything - O = &output; - -iof keeps pointers to the beginning of the buffer, end of buffer, and current position. Once the position reaches the end, -the iof internal handler updates the buffer providing more space to write. When used in conjunction with heap or stock, -the space to write is the space provided by the heap or stock. To start the buffer session: - - O = buffer_some(heap, O, atleast) // ensure iof *O to have atleast bytes to be written - -Once you are done with writing some chunk - - buffer_done(heap, O) - -instead of buffer_done(), one may also use - - iof_flush(O) // calls buffer_done() and buffer_some() again - -which updates the underlying heap or stock, and makes the iof ready for a new chunk. iof itself does not allocate a memory, -so it doesn't need finalizer. iof_close(output) does nothing. To drop the buffer use: - - buffer_giveup(heap, O) // restore the from before buffer_some() - -More often then not, we need to specify a minimal space for buffer each time, eg. for memcpy() or so. The actual space left -can be checked with iof_left(O). The entire space of recent chunk is O->space (eq. O->end - O->buf). - -Identical interface for heap and stock. - -Blocks -====== - -Each alloctor structure keeps a pointer to a head block, initially NULL. Most of new chunks are taken from the head. Once the -space left in the head block is to small to provide a chunk of requested size, a new head is created and the previous one is -linked to the head (blocks form a linked list). A stock block is named a ream, a heap block is named a pyre, a pool block is -named pile (we need to distinguish structure names in code but in the description below they are all called blocks). Every -block knows a number of chunks taken from that block (refcont). A stock also keeps a number of freed chunks [actually only -for statistics; in most cases it doesn't need an extra space in struct ream, as thies structure member lays in the place -f padding bytes.] - -We change the head block only if the new block is allocated, but we never change the head backward. Once some block became -->prev, it will never became a head again. This ensures that the allocator have the head block that usually has a lot of space -for new allocs. This needs a special care when removing a block that is not a head block. We check if the next block to the one -being removed is the head. If it is, and if its refcount is zero (and no KEEP flag is used) the head is removed as well. - -The basis of pools is similar to stocks and heaps, but there are some significant differences. A pool servers memory chunks of -equal size, specified during initialization. This also means that the pool knows the boundaries of individual chunks (stock and -heap doesn't). A pool provides iterators over chunks in use (taken but not given back yet). A pool shell structure keeps -a pointer to a head block and a tail block (both may point a different block, the same block or NULL). This is necessary only -for iterators to let the user follow the chunks from the first or from the last taken. The extra cost of maintaining both -->head and ->tail is neglectable. - -Refcounting -=========== - -Heap refcounting: whenever a new chunk is taken, the block refcount is incremented. It is never decremented, but plays an -important role in block tiling algorithm (below). No KEEP flag is used here. All the blocks are removed on free(), all but -recent are removed on clear(). - -Stock refcounting: whenever a new chunk in taken from the block, the block refcount is incremented. Whenever the chunk is given -back, the refcount is decremented. When the refcount gets zero, the block is removed and freed. To remove the block from the -list (any block, not necessarily a head block), a stock needs 2-directional list; every block has ->next and ->prev links. The -head block of the stock is freed only if this is the last (sole) block and no KEEP flag was used during initialization. -Otherwise the block is just reset, becoming ready for further allocations - refcount gets zero, data space reset to an initial -state. - -Pool refcounting: pretty much like with stocks, except that any chunk given back can be recycled on further take(). - -Ghosts -====== - -Every allocated block starts with a private structure for next/prev links, data pointer, refcount. We call it a block ghost. -Except from heap, individual chunks also need a ghost (chunk ghost) so that we are able to know from which block the chunk -comes from once the chunk is given back by the user (heaps don't have back() operation so data chunks have no ghosts). We keep -ghosts possibly small. Chunk ghosts are of size natural for alignment variant (1, 2, 4 or 8 bytes). Block ghosts are somewhat -larger. Statistics show clearly that it is worthy to keep them as small as possible: -- chunk ghosts keep offset to the block ghost, not a pointer to it (we use the pointer only if it makes no difference - to the chunk size; 64-bit aligned variant on 64-bit machine, 32 and 64 variants on 32-bit machine) -- block ghosts uses a data pointer (not an offset) so that we are able to record any requested chunk size (size_t) and to avoid - long array indexing on every chunk request - -At some point we considered storing a sheel structure pointer in the block ghost, then back() operation wouldn't need an extra -argument. But stats showed that the size of the block ghost is the most significant factor in memory usage efficiency, so eliminating -this extra pointer pays off. Besides, this would make impossible to relocate the shell structure. We don't allocate a memory -for the shell, so we shouldn't make assumptions of shell structure address. - -Tiling algorithm -================ - -Tiling the block size refers to stocks and heaps that serves memory chunks of variable size. Both stock and heap performs best -when the average size of requested chunks is a way smaller that the configured block size. But both also put no limitations on -chunk sizes, so they need to cope with situation, where the requested size is quite large, eg. half of the block size or even -more than the block size. Here is the algorithm used for blocks tiling: - -1. When the requested chunk size fills in the recent block, just serve it from that block. This is the best and hopefully the - most common case. - -2. When the requested chunk size is larger that the space left in the recent block, the new block must be allocated. But there -are two ways: - - a) either replace the head block with the new block so that the list of blocks is - - ... <- prev <- head so far <- new head - - b) or insert the block just "below the head", keeping the head intact, - - ... <- prev <- new single head <- head - -The first is the regular case. It is used when the space left in the head so far is small (can be neglected), and the requested -size is relatively small (will fit the new block). If the space left in the head block is worthy to bother, or the requested -chunk size is rather large, the new chunk is served from a single block, allocated just for that chunk. The block is of the -size needed for that chunk. The block never becomes the head, no other chunks will be served from it (its refcount is -permanently 1, until freed). - -Much depends on what is considered 'small, neglectable block space' and 'rather large chunk size'. The later is easier to -imagine. When the requested size is larger than the block size used for a given allocator, then the size is definitelly -considered large. When it is smaller than the block size, but still large enough to occupy most of the block size (grabbing -quite some space for tiny chunks), it is also considered large. As the block size, what is considered 'large' can be spcified -during initialization. A setup that works fine for me is (large = block_size / 2). - -Making a decision what is the left block space we can neglect is quite not obvious. At first approach we used a constant value, -requested from the user during allocator initialization. But it is hard to select a good default. Now we compute this value -from block params, by dividing a complete space occupied so far in the block by the number of chunks served from that block -(the average size of chunks allocated from this block). We assume that the average chunk size (or smaller) is the space we can -neglect. The logic behind is the following: if the space left in the block is larger than the average, it makes sense not to -waste this space and keep it for further allocs. If the space left in the block is less than the average, there is only a little -chance we will get a request for suitable size, so we sacrifice that space and we start allocating from a new block. - -Statistics showed a caveat in average == treshold approach. Suppose we have a block that has the average chunk size 16, there -is 18 bytes left in the block (not neglectable), and the user request is 20 bytes. Allocating a single block for 20 bytes is -bad, because the block ghost is 24 bytes (more internal than allocated memory). Allocating many of such blocks gives bad results; -much more allocs than necessary, large waste. To avoid that, we help to neglect the remaining block space by checking if the -space left is smaller than the block ghost size, which is an inevitable cost anyway. - -Stats below shows clearly that we should rather focus on "how to avoid producing sole-chunk blocks" instead of "how to feel the -remaining space". - -Recycling -========= - -Recycling applies only to pools. When a chunk is given back, it is inserted into a list of items for recycling. Every pool -block keeps a head of that list. Once a chunk is given back, it is inserted as recycling head and the previous head is attached -to a new head. Since every chunk is associated with a ghost, we use ghosts to store a link (pointer or offset) to another item -for recycling. Note that the ghost always keeps either a link to the block it belongs to, or a link to another recyclable ghost -of the same block. This is used by iteratos to distinguish the chunk currently in use from the chunk that has already been -given back; if the link points the block, the chunk is in use. - -A pool block that has at least one recyclable chunk is called a squot. A pool shell structure keeps 2-directional list of -squots. Once a pool block becomes a squot, it is inserted to that list. Once its all recyclable items has been used, it is -removed from the squots list. In every moment, the pool has an access to a list of all squots, and therefore, to a list of all -recyclable items. - -Whenever there is a request for a new chunk, at first it is served from the head block, as this is the easiest and the cheapest way. -Once the recent block has no more place for new items, recycling list is used, starting from the head recyclable chunk of the head squot. -In practise this is always the most recently reclaimed chunk ghost. During further allocs, a pool will first utilize all recyclables -from all squots before allocating a new block. - -Stats -===== - -Some numbers. The test made on a stock8, block size 255 bytes, 10000 allocations, random chunk sizes from 1 to 32 bytes -(average 16). These are rather tight constraints because of 255 buffer limit. First approach: - - blocks: 903 - this is the actual number of malloc() calls - singles: 214, 23.70% of all blocks - waste: 20.16% - total memory that was allocated but not requested by the user - block ghosts 10.04%, plus single block ghosts 3.12% - chunk ghosts 4.55% - neglected block tails 2.45% - -After adding a test for left space that helps in 'neglect remainig space or make sole chunk block' decision: - - blocks: 723 - a way better - singles 0 - waste: 19.04% - slightly better - block ghosts 10.67% - chunk ghosts 4.61% - neglected block tails 3.76% - -The actual numbers vary depending on the buffer size, the average elements size and, of course, taken alignment variant. After -some parameters tuning, on various tests we get 5-19% total waste for stocks, 3-14% total waste for heaps. But the basic scheme -of statistics remains similar: we take relatively lots of space for blocks ghost (5-10% of total memory taken), some inevitable -space for chunk ghosts (varies, 4-13% on various tests), and a little waste of neglected block tails (2-4%). Quite -surprisingly, block ghosts are, in sum, oftenly more significant than individual chunk ghosts (for the test above over half of -all the waste!). The number of block ghosts (equals the number of blocks) mostly depends on block size vs chunk size relation. -But seemingly it is worthy to bother about the size of the block ghost and the number of blocks taken - the less the better. -The waste of ghosts of individual objects (stock and pool) is inevitable, and depends only on the number/size of objects taken. -We can't use smaller ghosts, we can't do better. Anyways, the least significant is the waste of neglected block tails. - -Pools stats are pretty similar, but more predictable because of known chunks size. A pool block ghost is somewhat larger -structure because it keeps ->nextsquot / ->prevsquot pointers among ->next / ->prev. On the other hand, it doesn't need -->unused counter, as for fixed-length chunks it can always be computed from the refcount and used data. Also somewhat larger -block ghost structure is compensated by the fact that the are no tail block waste and there is no 'neglect or not' problem. - -Alignment -========= - -Each allocator has 4 variants for 1, 2, 4, 8 bytes alignment respectively. Eg. stock32_take() always returns a pointer aligned -to 4 bytes, heap64_take() returns a pointer aligned to 8 bytes. You can ask for any data length, but in practise you'll always -obtain 1N, 2N, 4N or 8N. Alignment implies data padding unless the user requests for "aligned" sizes. In statistics the padding -is not considered a waste. - -Zeroing -======= - -All heap, stock and pool may return zeroed memory chunks, depending on initial flags: - - HEAP_ZERO - STOCK_ZERO - POOL_ZERO - -There are also take0() variants that simply return memset(take(), 0, size), regardless the flag. -*/ - -#ifndef UTIL_MEM_ALLC_C -#define UTIL_MEM_ALLC_C - -/* -Common internals for allocators suite. A selection or all of the following defines (from api headers) should already be there: - - UTIL_MEM_HEAP_H // utilmemheap.h - UTIL_MEM_STOCK_H // utilmemstock.h - UTIL_MEM_POOL_H // utilmempool.h - -*/ - -#include <string.h> // memset() -#include <stdio.h> // printf() - -#include "utilmem.h" - -//#if defined(DEBUG) && debug != 0 -#if 1 -# define ASSERT8(cond) ((void)((cond) || (printf("8bit allocator assertion, %s:%d: %s\n", __FILE__, __LINE__, #cond), 0))) -# define ASSERT16(cond) ((void)((cond) || (printf("16bit allocator assertion, %s:%d: %s\n", __FILE__, __LINE__, #cond), 0))) -# define ASSERT32(cond) ((void)((cond) || (printf("32bit allocator assertion, %s:%d: %s\n", __FILE__, __LINE__, #cond), 0))) -# define ASSERT64(cond) ((void)((cond) || (printf("64bit allocator assertion, %s:%d: %s\n", __FILE__, __LINE__, #cond), 0))) -#else -# define ASSERT8(cond) (void)0 -# define ASSERT16(cond) (void)0 -# define ASSERT32(cond) (void)0 -# define ASSERT64(cond) (void)0 -#endif - -#if defined(UTIL_MEM_STOCK_H) || defined(UTIL_MEM_POOL_H) -struct ghost8{ - uint8_t offset; -}; - -struct ghost16 { - uint16_t offset; -}; - -#ifdef BIT32 -struct ghost32 { - union { -#ifdef UTIL_MEM_STOCK_H - ream32 *ream; -#endif -#ifdef UTIL_MEM_POOL_H - pile32 *pile; - ghost32 *nextfree; -#endif - void *block; - }; -}; -#else -struct ghost32 { - uint32_t offset; -}; -#endif - -struct ghost64 { - union { -#ifdef UTIL_MEM_STOCK_H - ream64 *ream; -#endif -#ifdef UTIL_MEM_POOL_H - pile64 *pile; - ghost64 *nextfree; -#endif - void *block; - }; -#ifdef BIT32 - uint8_t dummy[4]; // force 8 -#endif -}; -#endif - -/* -All offsets related macro horror is here. Block is 4/8-bytes aligned (32/64 pointer size), ream->data is adjusted to 1/2/4/8-bytes accordingly. -Therefore all offsets we store and pointers we cast, should be properly aligned. In all cases, sizes and offsets refers to bytes. -We need data ghosts only to access the block. For 8 and 16 we use 8/16 bit offsets to keep the ghost smaller. For 32 and 64 we either use offset, -or a pointer to the ream. - -malloc() is obviously expected to return a pointer properly allowed for all standard c-types. For 64-bit we can safely expect at least 8-bytes aligned. -(at least, because long double may need 16 bytes on gcc64, or 8 bytes on msvc64, or weird on some exotics). On 32 bit machines pointers are 4 bytes -aligned, even long long is 4-bytes aligned. But double on 32bit machine is 8-bytes aligned on windows, 4 bytes aligned in linux (compiler option --malign-double makes it 8-bytes aligned). Anyways, we cannot expect that on 32bit machine the result of malloc is always 8-bytes aligned. -This requires a very special treatment of 64-variant on 32bit machine: the first data ghost may need to be 4-bytes off. Should we ensure 4 bytes -more from malloc just in case? Hmm padding will be there anyway, as we adjust ream->data size to bytes boundaries. - -In both 32/64bit environments, the ghost keeps a pointer to the block. On 32bit machine, the first chunk ghost address may need to be +4, -as this is not ensured by malloc(). See struct ream64 {}. We have an extra test; the final ghost pointer will be properly aligned iff - - ((block & 7 == 0) && (sizeof(block64) & 7 == 0)) || ((block & 7 == 4) && (sizeof(block64) & 7 == 4) - -or in short - - ((block + 1) & 7) == 0 - -otherwise it needs 4 bytes offset. -*/ - -#define pointer_tointeger(p) ((size_t)(p)) // & not allowed on pointer - -#define pointer_aligned32(p) ((pointer_tointeger(p) & 3) == 0) -#define pointer_aligned64(p) ((pointer_tointeger(p) & 7) == 0) - -#define void_data(data) ((void *)(data)) -#define byte_data(data) ((uint8_t *)(data)) - -/* top of the block ghost */ - -#define block_top(block) (byte_data(block + 1)) - -/* where the data begins */ - -#define block_edge8(block) block_top(block) -#define block_edge16(block) block_top(block) -#define block_edge32(block) block_top(block) - -#ifdef BIT32 -# define ALIGN64ON32(block) (pointer_aligned64(block + 1) ? 0 : 4) -# define block_edge64(block) (block_top(block) + ALIGN64ON32(block)) -#else -# define block_edge64(block) block_top(block) -#endif - -#define block_left8(block, size) (size) -#define block_left16(block, size) (size) -#define block_left32(block, size) (size) -#ifdef BIT32 -# define block_left64(block, size) (size - ALIGN64ON32(block)) -#else -# define block_left64(block, size) (size) -#endif - -/* consumed block space; it is important to use edge() macros that involves ALIGN64ON32() */ - -#define block_used8(block) (block->data - block_edge8(block)) -#define block_used16(block) (block->data - block_edge16(block)) -#define block_used32(block) (block->data - block_edge32(block)) -#define block_used64(block) (block->data - block_edge64(block)) - -/* align requested size to keep ream->data / pyre->data always aligned. size is always size_t, no insane overflow checks */ - -#define align_size8(size) ((void)size) -#define align_size16(size) (size = aligned_size16(size)) -#define align_size32(size) (size = aligned_size32(size)) -#define align_size64(size) (size = aligned_size64(size)) - -/* -done() and pop() operations decrements block->left space by an aligned size; block->left -= alignedwritten. Lets have 8-bytes aligned -variant block. If we tell the user there is 15 bytes left (block->left == 15) and the user taked 12. Aligned is 16, we cannot substract. -We could eventually set block->left to 0, but then pop() operation would no be allowed. Hance, block->left must be aligned. The procedure -is different than for size (size_t), we cannot cross 0xff/0xffff,... bondaries. -*/ - -#define align_space8(space) ((void)space) -#define align_space16(space) (space = aligned_space16(space)) -#define align_space32(space) (space = aligned_space32(space)) -#define align_space64(space) (space = aligned_space64(space)) - -/* handling ghost structure (stock and pool) */ - -#if defined(UTIL_MEM_STOCK_H) || defined(UTIL_MEM_POOL_H) - -/* ghost offset from block top; not from bottom because we must not exceed offset limit */ - -#define ghost_offset(block, ghost) (byte_data(ghost) - block_top(block)) - -/* ghost <-> data */ - -#define ghost_data(ghost) ((void *)(ghost + 1)) - -/* cast from data to ghost structure goes via (void *) to shut up warnigns, alignment ok */ - -#define data_ghost8(data) (((ghost8 *)void_data(data)) - 1) -#define data_ghost16(data) (((ghost16 *)void_data(data)) - 1) -#define data_ghost32(data) (((ghost32 *)void_data(data)) - 1) -#define data_ghost64(data) (((ghost64 *)void_data(data)) - 1) - -/* ghost <-> block */ - -#define ghost_block8(ghost, block8) ((block8 *)void_data(byte_data(ghost) - ghost->offset - sizeof(block8))) -#define ghost_block16(ghost, block16) ((block16 *)void_data(byte_data(ghost) - ghost->offset - sizeof(block16))) -#ifdef BIT32 -# define ghost_block32(ghost, block32) (ghost->block) -#else -# define ghost_block32(ghost, block32) ((block32 *)void_data(byte_data(ghost) - ghost->offset - sizeof(block32))) -#endif -#define ghost_block64(ghost, block64) (ghost->block) - -/* ghost init */ - -#define ghost_next8(block, ghost) ((ghost = block->dataghost), (ghost->offset = (uint8_t)ghost_offset(block, ghost))) -#define ghost_next16(block, ghost) ((ghost = block->dataghost), (ghost->offset = (uint16_t)ghost_offset(block, ghost))) -#ifdef BIT32 -# define ghost_next32(bl0ck, ghost) ((ghost = bl0ck->dataghost), (ghost->block = bl0ck)) -#else -# define ghost_next32(block, ghost) ((ghost = block->dataghost), (ghost->offset = (uint32_t)ghost_offset(block, ghost))) -#endif -#define ghost_next64(bl0ck, ghost) ((ghost = bl0ck->dataghost), (ghost->block = bl0ck)) - -#endif - -/* average block chunk size */ - -#define average_block_chunk8(ream) (block_used8(ream) / ream->chunks) -#define average_block_chunk16(ream) (block_used16(ream) / ream->chunks) -#define average_block_chunk32(ream) (block_used32(ream) / ream->chunks) -#define average_block_chunk64(ream) (block_used64(ream) / ream->chunks) - -/* -neglect remaining block tail and start a new block or create a single block; a test for (block->chunks > 0) is a sanity; -if block->chunks is zero (block has a full space left), we shouldn't get there, except when alloc->large is larger then alloc->space -*/ - -#define take_new_block8(alloc, ghoststruct, block, size) \ - ((size < alloc->large) && (block->left <= sizeof(ghoststruct) || (block->chunks > 0 && block->left <= average_block_chunk8(block)))) -#define take_new_block16(alloc, ghoststruct, block, size) \ - ((size < alloc->large) && (block->left <= sizeof(ghoststruct) || (block->chunks > 0 && block->left <= average_block_chunk16(block)))) -#define take_new_block32(alloc, ghoststruct, block, size) \ - ((size < alloc->large) && (block->left <= sizeof(ghoststruct) || (block->chunks > 0 && block->left <= average_block_chunk32(block)))) -#define take_new_block64(alloc, ghoststruct, block, size) \ - ((size < alloc->large) && (block->left <= sizeof(ghoststruct) || (block->chunks > 0 && block->left <= average_block_chunk64(block)))) - -/* empty */ - -#define head_block_empty(alloc, block) (((block = alloc->head) == NULL) || (block->chunks == 0 && block->prev == NULL)) - -#endif
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemallh.h b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemallh.h deleted file mode 100644 index a543d1acb06..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemallh.h +++ /dev/null @@ -1,36 +0,0 @@ - -#ifndef UTIL_MEM_ALLH_H -#define UTIL_MEM_ALLH_H - -#include <stddef.h> // size_t -#include <stdint.h> - -#include "utildecl.h" - -typedef struct ghost8 ghost8; -typedef struct ghost16 ghost16; -typedef struct ghost32 ghost32; -typedef struct ghost64 ghost64; - -#define aligned_size8(size) (size) -#define aligned_size16(size) ((((size) + 1) >> 1) << 1) -#define aligned_size32(size) ((((size) + 3) >> 2) << 2) -#define aligned_size64(size) ((((size) + 7) >> 3) << 3) - -#define aligned_space8(size) (size) -#define aligned_space16(size) (((size) & 1) ? ((size) < 0xFFFF ? ((size) + 1) : ((size) - 1)) : (size)) -#define aligned_space32(size) (((size) & 3) ? ((size) < 0xFFFFFFFD ? ((size) - ((size) & 3) + 4) : (size) - ((size) & 3)) : (size)) -#define aligned_space64(size) (((size) & 7) ? ((size) < 0xFFFFFFFFFFFFFFF8ULL ? ((size) - ((size) & 7) + 8) : (size) - ((size) & 7)) : (size)) - -/* info stub */ - -typedef struct { - size_t blocks, singles; - size_t chunks, unused; - size_t used, singleused, left; - size_t ghosts, blockghosts, singleghosts; -} mem_info; - -#define MEM_INFO_INIT() = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } - -#endif
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemheap.c b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemheap.c deleted file mode 100644 index cce28e0ed07..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemheap.c +++ /dev/null @@ -1,1078 +0,0 @@ - -#include "utilmemheap.h" -#include "utilmemallc.h" - -#define pyre_alloc8(heap, space) ((pyre8 *)((heap->flags & HEAP_ZERO) ? util_calloc(1, sizeof(pyre8) + space * sizeof(uint8_t)) : util_malloc(sizeof(pyre8) + space * sizeof(uint8_t)))) -#define pyre_alloc16(heap, space) ((pyre16 *)((heap->flags & HEAP_ZERO) ? util_calloc(1, sizeof(pyre16) + space * sizeof(uint8_t)) : util_malloc(sizeof(pyre16) + space * sizeof(uint8_t)))) -#define pyre_alloc32(heap, space) ((pyre32 *)((heap->flags & HEAP_ZERO) ? util_calloc(1, sizeof(pyre32) + space * sizeof(uint8_t)) : util_malloc(sizeof(pyre32) + space * sizeof(uint8_t)))) -#define pyre_alloc64(heap, space) ((pyre64 *)((heap->flags & HEAP_ZERO) ? util_calloc(1, sizeof(pyre64) + space * sizeof(uint8_t)) : util_malloc(sizeof(pyre64) + space * sizeof(uint8_t)))) - -#define pyre_free(pyre) util_free(pyre) - -/* block reset */ - -#define reset_heap_head8(heap, pyre, used) \ - ((used = block_used8(pyre)), (pyre->data -= used), ((heap->flags & HEAP_ZERO) ? (memset(pyre->data, 0, used), 0) : 0), (pyre->left += (uint8_t)used)) -#define reset_heap_head16(heap, pyre, used) \ - ((used = block_used16(pyre)), (pyre->data -= used), ((heap->flags & HEAP_ZERO) ? (memset(pyre->data, 0, used), 0) : 0), (pyre->left += (uint16_t)used)) -#define reset_heap_head32(heap, pyre, used) \ - ((used = block_used32(pyre)), (pyre->data -= used), ((heap->flags & HEAP_ZERO) ? (memset(pyre->data, 0, used), 0) : 0), (pyre->left += (uint32_t)used)) -#define reset_heap_head64(heap, pyre, used) \ - ((used = block_used64(pyre)), (pyre->data -= used), ((heap->flags & HEAP_ZERO) ? (memset(pyre->data, 0, used), 0) : 0), (pyre->left += (uint64_t)used)) - -/* init heap */ - -heap8 * heap8_init (heap8 *heap, uint8_t space, uint8_t large, uint8_t flags) -{ - align_space8(space); - if (large > space) large = space; - heap->head = NULL; - heap->space = space; - heap->large = large; - heap->flags = flags; - return heap; -} - -heap16 * heap16_init (heap16 *heap, uint16_t space, uint16_t large, uint8_t flags) -{ - align_space16(space); - if (large > space) large = space; - heap->head = NULL; - heap->space = space; - heap->large = large; - heap->flags = flags; - return heap; -} - -heap32 * heap32_init (heap32 *heap, uint32_t space, uint32_t large, uint8_t flags) -{ - align_space32(space); - if (large > space) large = space; - heap->head = NULL; - heap->space = space; - heap->large = large; - heap->flags = flags; - return heap; -} - -heap64 * heap64_init (heap64 *heap, uint64_t space, uint64_t large, uint8_t flags) -{ - align_space64(space); - if (large > space) large = space; - heap->head = NULL; - heap->space = space; - heap->large = large; - heap->flags = flags; - return heap; -} - -/* free heap */ - -void heap8_free (heap8 *heap) -{ - pyre8 *pyre, *prev; - pyre = heap->head; - heap->head = NULL; - while (pyre != NULL) - { - prev = pyre->prev; - pyre_free(pyre); - pyre = prev; - } -} - -void heap16_free (heap16 *heap) -{ - pyre16 *pyre, *prev; - pyre = heap->head; - heap->head = NULL; - while (pyre != NULL) - { - prev = pyre->prev; - pyre_free(pyre); - pyre = prev; - } -} - -void heap32_free (heap32 *heap) -{ - pyre32 *pyre, *prev; - pyre = heap->head; - heap->head = NULL; - while (pyre != NULL) - { - prev = pyre->prev; - pyre_free(pyre); - pyre = prev; - } -} - -void heap64_free (heap64 *heap) -{ - pyre64 *pyre, *prev; - pyre = heap->head; - heap->head = NULL; - while (pyre != NULL) - { - prev = pyre->prev; - pyre_free(pyre); - pyre = prev; - } -} - -/* clear heap */ - -void heap8_clear (heap8 *heap) -{ - pyre8 *pyre, *prev; - size_t used; - if ((pyre = heap->head) == NULL) - return; - prev = pyre->prev; - pyre->prev = NULL; - reset_heap_head8(heap, pyre, used); - for (; prev != NULL; prev = pyre) - { - pyre = prev->prev; - pyre_free(prev); - } -} - -void heap16_clear (heap16 *heap) -{ - pyre16 *pyre, *prev; - size_t used; - if ((pyre = heap->head) == NULL) - return; - prev = pyre->prev; - pyre->prev = NULL; - reset_heap_head16(heap, pyre, used); - for (; prev != NULL; prev = pyre) - { - pyre = prev->prev; - pyre_free(prev); - } -} - -void heap32_clear (heap32 *heap) -{ - pyre32 *pyre, *prev; - size_t used; - if ((pyre = heap->head) == NULL) - return; - prev = pyre->prev; - pyre->prev = NULL; - reset_heap_head32(heap, pyre, used); - for (; prev != NULL; prev = pyre) - { - pyre = prev->prev; - pyre_free(prev); - } -} - -void heap64_clear (heap64 *heap) -{ - pyre64 *pyre, *prev; - size_t used; - if ((pyre = heap->head) == NULL) - return; - prev = pyre->prev; - pyre->prev = NULL; - reset_heap_head64(heap, pyre, used); - for (; prev != NULL; prev = pyre) - { - pyre = prev->prev; - pyre_free(prev); - } -} - -/* heap head */ - -void heap8_head (heap8 *heap) -{ - pyre8 *pyre; - heap->head = pyre = pyre_alloc8(heap, heap->space); - pyre->prev = NULL; - pyre->data = block_edge8(pyre); - pyre->left = block_left8(pyre, heap->space); - pyre->chunks = 0; -} - -void heap16_head (heap16 *heap) -{ - pyre16 *pyre; - heap->head = pyre = pyre_alloc16(heap, heap->space); - pyre->prev = NULL; - pyre->data = block_edge16(pyre); - pyre->left = block_left16(pyre, heap->space); - pyre->chunks = 0; -} - -void heap32_head (heap32 *heap) -{ - pyre32 *pyre; - heap->head = pyre = pyre_alloc32(heap, heap->space); - pyre->prev = NULL; - pyre->data = block_edge32(pyre); - pyre->left = block_left32(pyre, heap->space); - pyre->chunks = 0; -} - -void heap64_head (heap64 *heap) -{ - pyre64 *pyre; - heap->head = pyre = pyre_alloc64(heap, heap->space); - pyre->prev = NULL; - pyre->data = block_edge64(pyre); - pyre->left = block_left64(pyre, heap->space); - pyre->chunks = 0; -} - -/* next heap head */ - -static pyre8 * heap8_new (heap8 *heap) -{ - pyre8 *pyre; - pyre = pyre_alloc8(heap, heap->space); - pyre->prev = heap->head; - heap->head = pyre; - pyre->data = block_edge8(pyre); - pyre->left = block_left8(pyre, heap->space); - pyre->chunks = 0; - return pyre; -} - -static pyre16 * heap16_new (heap16 *heap) -{ - pyre16 *pyre; - pyre = pyre_alloc16(heap, heap->space); - pyre->prev = heap->head; - heap->head = pyre; - pyre->data = block_edge16(pyre); - pyre->left = block_left16(pyre, heap->space); - pyre->chunks = 0; - return pyre; -} - -static pyre32 * heap32_new (heap32 *heap) -{ - pyre32 *pyre; - pyre = pyre_alloc32(heap, heap->space); - pyre->prev = heap->head; - heap->head = pyre; - pyre->data = block_edge32(pyre); - pyre->left = block_left32(pyre, heap->space); - pyre->chunks = 0; - return pyre; -} - -static pyre64 * heap64_new (heap64 *heap) -{ - pyre64 *pyre; - pyre = pyre_alloc64(heap, heap->space); - pyre->prev = heap->head; - heap->head = pyre; - pyre->data = block_edge64(pyre); - pyre->left = block_left64(pyre, heap->space); - pyre->chunks = 0; - return pyre; -} - -/* next heap sole */ - -static pyre8 * heap8_sole (heap8 *heap, size_t size) -{ - pyre8 *pyre, *head, *prev; - pyre = pyre_alloc8(heap, size); - head = heap->head; - prev = head->prev; - pyre->prev = prev; - head->prev = pyre; - pyre->data = block_edge8(pyre); - pyre->left = 0; // (uint8_t)size makes no sense, even with buffer api it will finally become 0 - return pyre; -} - -static pyre16 * heap16_sole (heap16 *heap, size_t size) -{ - pyre16 *pyre, *head, *prev; - pyre = pyre_alloc16(heap, size); - head = heap->head; - prev = head->prev; - pyre->prev = prev; - head->prev = pyre; - pyre->data = block_edge16(pyre); - pyre->left = 0; - return pyre; -} - -static pyre32 * heap32_sole (heap32 *heap, size_t size) -{ - pyre32 *pyre, *head, *prev; - pyre = pyre_alloc32(heap, size); - head = heap->head; - prev = head->prev; - pyre->prev = prev; - head->prev = pyre; - pyre->data = block_edge32(pyre); - pyre->left = 0; - return pyre; -} - -static pyre64 * heap64_sole (heap64 *heap, size_t size) -{ - pyre64 *pyre, *head, *prev; - pyre = pyre_alloc64(heap, size); - head = heap->head; - prev = head->prev; - pyre->prev = prev; - head->prev = pyre; - pyre->data = block_edge64(pyre); - pyre->left = 0; - return pyre; -} - -/* take from heap */ - -#define pyre_next8(d, pyre, size) (d = pyre->data, pyre->data += size, pyre->left -= (uint8_t)size, ++pyre->chunks) -#define pyre_next16(d, pyre, size) (d = pyre->data, pyre->data += size, pyre->left -= (uint16_t)size, ++pyre->chunks) -#define pyre_next32(d, pyre, size) (d = pyre->data, pyre->data += size, pyre->left -= (uint32_t)size, ++pyre->chunks) -#define pyre_next64(d, pyre, size) (d = pyre->data, pyre->data += size, pyre->left -= (uint64_t)size, ++pyre->chunks) - -// for sole blocks, block->left is permanently 0, we can't store size_t there -#define pyre_last8(d, pyre, size) (d = pyre->data, pyre->data += size, pyre->chunks = 1) -#define pyre_last16(d, pyre, size) (d = pyre->data, pyre->data += size, pyre->chunks = 1) -#define pyre_last32(d, pyre, size) (d = pyre->data, pyre->data += size, pyre->chunks = 1) -#define pyre_last64(d, pyre, size) (d = pyre->data, pyre->data += size, pyre->chunks = 1) - -void * _heap8_take (heap8 *heap, size_t size) -{ - pyre8 *pyre; - void *data; - pyre = heap->head; - align_size8(size); - if (size <= pyre->left) - { - pyre_next8(data, pyre, size); - } - else if (take_new_block8(heap, pyre8, pyre, size)) - { - pyre = heap8_new(heap); - pyre_next8(data, pyre, size); - } - else - { - pyre = heap8_sole(heap, size); - pyre_last8(data, pyre, size); - } - return data; -} - -void * _heap16_take (heap16 *heap, size_t size) -{ - pyre16 *pyre; - void *data; - pyre = heap->head; - align_size16(size); - if (size <= pyre->left) - { - pyre_next16(data, pyre, size); - } - else if (take_new_block16(heap, pyre16, pyre, size)) - { - pyre = heap16_new(heap); - pyre_next16(data, pyre, size); - } - else - { - pyre = heap16_sole(heap, size); - pyre_last16(data, pyre, size); - } - return data; -} - -void * _heap32_take (heap32 *heap, size_t size) -{ - pyre32 *pyre; - void *data; - pyre = heap->head; - align_size32(size); - if (size <= pyre->left) - { - pyre_next32(data, pyre, size); - } - else if (take_new_block32(heap, pyre32, pyre, size)) - { - pyre = heap32_new(heap); - pyre_next32(data, pyre, size); - } - else - { - pyre = heap32_sole(heap, size); - pyre_last32(data, pyre, size); - } - return data; -} - -void * _heap64_take (heap64 *heap, size_t size) -{ - pyre64 *pyre; - void *data; - pyre = heap->head; - align_size64(size); - if (size <= pyre->left) - { - pyre_next64(data, pyre, size); - } - else if (take_new_block64(heap, pyre64, pyre, size)) - { - pyre = heap64_new(heap); - pyre_next64(data, pyre, size); - } - else - { - pyre = heap64_sole(heap, size); - pyre_last64(data, pyre, size); - } - return data; -} - -void * _heap8_take0 (heap8 *heap, size_t size) -{ - return memset(_heap8_take(heap, size), 0, size); -} - -void * _heap16_take0 (heap16 *heap, size_t size) -{ - return memset(_heap16_take(heap, size), 0, size); -} - -void * _heap32_take0 (heap32 *heap, size_t size) -{ - return memset(_heap32_take(heap, size), 0, size); -} - -void * _heap64_take0 (heap64 *heap, size_t size) -{ - return memset(_heap64_take(heap, size), 0, size); -} - -/* pop last heap chunk */ - -#define taken_from_head(taken, head) (byte_data(taken) == head->data) -#define taken_from_sole(taken, head, sole) ((sole = head->prev) != NULL && byte_data(taken) == sole->data) - -#define taken_prev_head(taken, head, size) (byte_data(taken) == head->data - size) -#define taken_prev_sole(taken, head, sole, size) ((sole = head->prev) != NULL && byte_data(taken) == sole->data - size) - -void heap8_pop (heap8 *heap, void *taken, size_t size) -{ - pyre8 *pyre, *head; - head = heap->head; - align_size8(size); - if (taken_prev_head(taken, head, size)) - { - - head->data -= size; - head->left += (uint8_t)size; - --head->chunks; - } - else if (taken_prev_sole(taken, head, pyre, size)) - { - head->prev = pyre->prev; - pyre_free(pyre); - } - else - { - ASSERT8(0); - } -} - -void heap16_pop (heap16 *heap, void *taken, size_t size) -{ - pyre16 *pyre, *head; - head = heap->head; - align_size16(size); - if (taken_prev_head(taken, head, size)) - { - - head->data -= size; - head->left += (uint16_t)size; - --head->chunks; - } - else if (taken_prev_sole(taken, head, pyre, size)) - { - head->prev = pyre->prev; - pyre_free(pyre); - } - else - { - ASSERT16(0); - } -} - -void heap32_pop (heap32 *heap, void *taken, size_t size) -{ - pyre32 *pyre, *head; - head = heap->head; - align_size32(size); - if (taken_prev_head(taken, head, size)) - { - - head->data -= size; - head->left += (uint32_t)size; - --head->chunks; - } - else if (taken_prev_sole(taken, head, pyre, size)) - { - head->prev = pyre->prev; - pyre_free(pyre); - } - else - { - ASSERT32(0); - } -} - -void heap64_pop (heap64 *heap, void *taken, size_t size) -{ - pyre64 *pyre, *head; - head = heap->head; - align_size64(size); - if (taken_prev_head(taken, head, size)) - { - - head->data -= size; - head->left += (uint64_t)size; - --head->chunks; - } - else if (taken_prev_sole(taken, head, pyre, size)) - { - head->prev = pyre->prev; - pyre_free(pyre); - } - else - { - ASSERT64(0); - } -} - -/* heap buffer */ - -void * _heap8_some (heap8 *heap, size_t size, size_t *pspace) -{ - pyre8 *pyre; - pyre = heap->head; - align_size8(size); - if (size <= pyre->left) - { - *pspace = pyre->left; - } - else if (take_new_block8(heap, pyre8, pyre, size)) - { - pyre = heap8_new(heap); - *pspace = pyre->left; - } - else - { - pyre = heap8_sole(heap, size); - *pspace = size; - } - return void_data(pyre->data); -} - -void * _heap16_some (heap16 *heap, size_t size, size_t *pspace) -{ - pyre16 *pyre; - pyre = heap->head; - align_size16(size); - if (size <= pyre->left) - { - *pspace = pyre->left; - } - else if (take_new_block16(heap, pyre16, pyre, size)) - { - pyre = heap16_new(heap); - *pspace = pyre->left; - } - else - { - pyre = heap16_sole(heap, size); - *pspace = size; - } - return void_data(pyre->data); -} - -void * _heap32_some (heap32 *heap, size_t size, size_t *pspace) -{ - pyre32 *pyre; - pyre = heap->head; - align_size32(size); - if (size <= pyre->left) - { - *pspace = pyre->left; - } - else if (take_new_block32(heap, pyre32, pyre, size)) - { - pyre = heap32_new(heap); - *pspace = pyre->left; - } - else - { - pyre = heap32_sole(heap, size); - *pspace = size; - } - return void_data(pyre->data); -} - -void * _heap64_some (heap64 *heap, size_t size, size_t *pspace) -{ - pyre64 *pyre; - pyre = heap->head; - align_size64(size); - if (size <= pyre->left) - { - *pspace = pyre->left; - } - else if (take_new_block64(heap, pyre64, pyre, size)) - { - pyre = heap64_new(heap); - *pspace = pyre->left; - } - else - { - pyre = heap64_sole(heap, size); - *pspace = size; - } - return void_data(pyre->data); -} - -void * heap8_more (heap8 *heap, void *taken, size_t written, size_t size, size_t *pspace) -{ - pyre8 *pyre, *prev; - pyre = heap->head; - align_size8(size); - if (taken_from_head(taken, pyre)) - { - if (size <= pyre->left) - { - *pspace = pyre->left; - } - else if (take_new_block8(heap, pyre8, pyre, size)) - { - pyre = heap8_new(heap); - memcpy(pyre->data, taken, written); - *pspace = pyre->left; - } - else - { - pyre = heap8_sole(heap, size); - memcpy(pyre->data, taken, written); - *pspace = size; - } - } - else if (taken_from_sole(taken, pyre, prev)) - { - pyre = heap8_sole(heap, size); - memcpy(pyre->data, taken, written); - *pspace = size; - pyre->prev = prev->prev; - pyre_free(prev); - } - else - { - ASSERT8(0); - *pspace = 0; - return NULL; - } - return void_data(pyre->data); -} - -void * heap16_more (heap16 *heap, void *taken, size_t written, size_t size, size_t *pspace) -{ - pyre16 *pyre, *prev; - pyre = heap->head; - align_size16(size); - if (taken_from_head(taken, pyre)) - { - if (size <= pyre->left) - { - *pspace = pyre->left; - } - else if (take_new_block16(heap, pyre16, pyre, size)) - { - pyre = heap16_new(heap); - memcpy(pyre->data, taken, written); - *pspace = pyre->left; - } - else - { - pyre = heap16_sole(heap, size); - memcpy(pyre->data, taken, written); - *pspace = size; - } - } - else if (taken_from_sole(taken, pyre, prev)) - { - pyre = heap16_sole(heap, size); - memcpy(pyre->data, taken, written); - *pspace = size; - pyre->prev = prev->prev; - pyre_free(prev); - } - else - { - ASSERT16(0); - *pspace = 0; - return NULL; - } - return void_data(pyre->data); -} - -void * heap32_more (heap32 *heap, void *taken, size_t written, size_t size, size_t *pspace) -{ - pyre32 *pyre, *prev; - pyre = heap->head; - align_size32(size); - if (taken_from_head(taken, pyre)) - { - if (size <= pyre->left) - { - *pspace = pyre->left; - } - else if (take_new_block32(heap, pyre32, pyre, size)) - { - pyre = heap32_new(heap); - memcpy(pyre->data, taken, written); - *pspace = pyre->left; - } - else - { - pyre = heap32_sole(heap, size); - memcpy(pyre->data, taken, written); - *pspace = size; - } - } - else if (taken_from_sole(taken, pyre, prev)) - { - pyre = heap32_sole(heap, size); - memcpy(pyre->data, taken, written); - *pspace = size; - pyre->prev = prev->prev; - pyre_free(prev); - } - else - { - ASSERT32(0); - *pspace = 0; - return NULL; - } - return void_data(pyre->data); -} - -void * heap64_more (heap64 *heap, void *taken, size_t written, size_t size, size_t *pspace) -{ - pyre64 *pyre, *prev; - pyre = heap->head; - align_size64(size); - if (taken_from_head(taken, pyre)) - { - if (size <= pyre->left) - { - *pspace = pyre->left; - } - else if (take_new_block64(heap, pyre64, pyre, size)) - { - pyre = heap64_new(heap); - memcpy(pyre->data, taken, written); - *pspace = pyre->left; - } - else - { - pyre = heap64_sole(heap, size); - memcpy(pyre->data, taken, written); - *pspace = size; - } - } - else if (taken_from_sole(taken, pyre, prev)) - { - pyre = heap64_sole(heap, size); - memcpy(pyre->data, taken, written); - *pspace = size; - pyre->prev = prev->prev; - pyre_free(prev); - } - else - { - ASSERT64(0); - *pspace = 0; - return NULL; - } - return void_data(pyre->data); -} - -void heap8_done (heap8 *heap, void *taken, size_t written) -{ - pyre8 *pyre; - pyre = heap->head; - align_size8(written); - if (taken_from_head(taken, pyre)) - { - pyre->data += written; - pyre->left -= (uint8_t)written; - ++pyre->chunks; - } - else if (taken_from_sole(taken, pyre, pyre)) - { - pyre->data += written; - pyre->chunks = 1; - } - else - { - ASSERT8(0); - } -} - -void heap16_done (heap16 *heap, void *taken, size_t written) -{ - pyre16 *pyre; - pyre = heap->head; - align_size16(written); - if (taken_from_head(taken, pyre)) - { - pyre->data += written; - pyre->left -= (uint16_t)written; - ++pyre->chunks; - } - else if (taken_from_sole(taken, pyre, pyre)) - { - pyre->data += written; - pyre->chunks = 1; - } - else - { - ASSERT16(0); - } -} - -void heap32_done (heap32 *heap, void *taken, size_t written) -{ - pyre32 *pyre; - pyre = heap->head; - align_size32(written); - if (taken_from_head(taken, pyre)) - { - pyre->data += written; - pyre->left -= (uint32_t)written; - ++pyre->chunks; - } - else if (taken_from_sole(taken, pyre, pyre)) - { - pyre->data += written; - pyre->chunks = 1; - } - else - { - ASSERT32(0); - } -} - -void heap64_done (heap64 *heap, void *taken, size_t written) -{ - pyre64 *pyre; - pyre = heap->head; - align_size64(written); - if (taken_from_head(taken, pyre)) - { - pyre->data += written; - pyre->left -= (uint64_t)written; - ++pyre->chunks; - } - else if (taken_from_sole(taken, pyre, pyre)) - { - pyre->data += written; - pyre->chunks = 1; - } - else - { - ASSERT64(0); - } -} - -/* giveup */ - -void heap8_giveup (heap8 *heap, void *taken) -{ - pyre8 *head, *pyre; - head = heap->head; - if (taken_from_sole(taken, head, pyre)) - { - head->prev = pyre->prev; - pyre_free(pyre); - } -} - -void heap16_giveup (heap16 *heap, void *taken) -{ - pyre16 *head, *pyre; - head = heap->head; - if (taken_from_sole(taken, head, pyre)) - { - head->prev = pyre->prev; - pyre_free(pyre); - } -} - -void heap32_giveup (heap32 *heap, void *taken) -{ - pyre32 *head, *pyre; - head = heap->head; - if (taken_from_sole(taken, head, pyre)) - { - head->prev = pyre->prev; - pyre_free(pyre); - } -} - -void heap64_giveup (heap64 *heap, void *taken) -{ - pyre64 *head, *pyre; - head = heap->head; - if (taken_from_sole(taken, head, pyre)) - { - head->prev = pyre->prev; - pyre_free(pyre); - } -} - -/* heap empty */ - -int heap8_empty (heap8 *heap) -{ - pyre8 *pyre; - return head_block_empty(heap, pyre); -} - -int heap16_empty (heap16 *heap) -{ - pyre16 *pyre; - return head_block_empty(heap, pyre); -} - -int heap32_empty (heap32 *heap) -{ - pyre32 *pyre; - return head_block_empty(heap, pyre); -} - -int heap64_empty (heap64 *heap) -{ - pyre64 *pyre; - return head_block_empty(heap, pyre); -} - -/* heap stats */ - -void heap8_stats (heap8 *heap, mem_info *info, int append) -{ - pyre8 *pyre; - size_t used, chunks = 0, blocks = 0, singles = 0; - if (!append) - memset(info, 0, sizeof(mem_info)); - for (pyre = heap->head; pyre != NULL; pyre = pyre->prev) - { - ++blocks; - chunks += pyre->chunks; - used = block_used8(pyre); - info->used += used; - info->left += pyre->left; - if (pyre->chunks == 1 && pyre->left == 0) - { - ++singles; - info->singleused += used; - } - } - info->chunks += chunks; - info->blocks += blocks; - info->blockghosts += blocks * sizeof(pyre8); - info->singles += singles; - info->singleghosts += singles * sizeof(pyre8); -} - -void heap16_stats (heap16 *heap, mem_info *info, int append) -{ - pyre16 *pyre; - size_t used, chunks = 0, blocks = 0, singles = 0; - if (!append) - memset(info, 0, sizeof(mem_info)); - for (pyre = heap->head; pyre != NULL; pyre = pyre->prev) - { - ++blocks; - chunks += pyre->chunks; - used = block_used16(pyre); - info->used += used; - info->left += pyre->left; - if (pyre->chunks == 1 && pyre->left == 0) - { - ++singles; - info->singleused += used; - } - } - info->chunks += chunks; - info->blocks += blocks; - info->blockghosts += blocks * sizeof(pyre16); - info->singles += singles; - info->singleghosts += singles * sizeof(pyre16); -} - -void heap32_stats (heap32 *heap, mem_info *info, int append) -{ - pyre32 *pyre; - size_t used, chunks = 0, blocks = 0, singles = 0; - if (!append) - memset(info, 0, sizeof(mem_info)); - for (pyre = heap->head; pyre != NULL; pyre = pyre->prev) - { - ++blocks; - chunks += pyre->chunks; - used = block_used32(pyre); - info->used += used; - info->left += pyre->left; - if (pyre->chunks == 1 && pyre->left == 0) - { - ++singles; - info->singleused += used; - } - } - info->chunks += chunks; - info->blocks += blocks; - info->blockghosts += blocks * sizeof(pyre32); - info->singles += singles; - info->singleghosts += singles * sizeof(pyre32); -} - -void heap64_stats (heap64 *heap, mem_info *info, int append) -{ - pyre64 *pyre; - size_t used, chunks = 0, blocks = 0, singles = 0; - if (!append) - memset(info, 0, sizeof(mem_info)); - for (pyre = heap->head; pyre != NULL; pyre = pyre->prev) - { - ++blocks; - chunks += pyre->chunks; - used = block_used64(pyre); - info->used += used; - info->left += pyre->left; - if (pyre->chunks == 1 && pyre->left == 0) - { - ++singles; - info->singleused += used; - } - } - info->chunks += chunks; - info->blocks += blocks; - info->blockghosts += blocks * sizeof(pyre64); - info->singles += singles; - info->singleghosts += singles * sizeof(pyre64); -} diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemheap.h b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemheap.h deleted file mode 100644 index 8776419c284..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemheap.h +++ /dev/null @@ -1,188 +0,0 @@ - -#ifndef UTIL_MEM_HEAP_H -#define UTIL_MEM_HEAP_H - -#include "utilmemallh.h" - -typedef struct pyre8 pyre8; -typedef struct pyre16 pyre16; -typedef struct pyre32 pyre32; -typedef struct pyre64 pyre64; - -struct pyre8 { - pyre8 *prev; - uint8_t *data; - uint8_t left; - uint8_t chunks; -#ifdef BIT32 - uint8_t dummy[2]; // 10->12 -#else - uint8_t dummy[6]; // 18->24 -#endif -}; - -struct pyre16 { - pyre16 *prev; - uint8_t *data; - uint16_t left; - uint16_t chunks; -#ifdef BIT32 - //uint8_t dummy[0]; // 12->12 -#else - uint8_t dummy[4]; // 20->24 -#endif -}; - -struct pyre32 { - pyre32 *prev; - uint8_t *data; - uint32_t left; - uint32_t chunks; -#ifdef BIT32 - //uint8_t dummy[0]; // 16->16 -#else - //uint8_t dummy[0]; // 24->24 -#endif -}; - -struct pyre64 { - pyre64 *prev; - uint8_t *data; - uint64_t left; - uint64_t chunks; -#ifdef BIT32 - //uint8_t dummy[0]; // 24->24 -#else - //uint8_t dummy[0]; // 32->32 -#endif -}; - -/* heaps */ - -typedef struct heap8 heap8; -typedef struct heap16 heap16; -typedef struct heap32 heap32; -typedef struct heap64 heap64; - -struct heap8 { - pyre8 *head; - uint8_t space; - uint8_t large; - uint8_t flags; -}; - -struct heap16 { - pyre16 *head; - uint16_t space; - uint16_t large; - uint8_t flags; -}; - -struct heap32 { - pyre32 *head; - uint32_t space; - uint32_t large; - uint8_t flags; -}; - -struct heap64 { - pyre64 *head; - uint64_t space; - uint64_t large; - uint8_t flags; -}; - -#define HEAP_ZERO (1 << 0) -#define HEAP_DEFAULTS 0 - -#define HEAP8_INIT(space, large, flags) { NULL, aligned_space8(space), large, flags } -#define HEAP16_INIT(space, large, flags) { NULL, aligned_space16(space), large, flags } -#define HEAP32_INIT(space, large, flags) { NULL, aligned_space32(space), large, flags } -#define HEAP64_INIT(space, large, flags) { NULL, aligned_space64(space), large, flags } - -UTILAPI heap8 * heap8_init (heap8 *heap, uint8_t space, uint8_t large, uint8_t flags); -UTILAPI heap16 * heap16_init (heap16 *heap, uint16_t space, uint16_t large, uint8_t flags); -UTILAPI heap32 * heap32_init (heap32 *heap, uint32_t space, uint32_t large, uint8_t flags); -UTILAPI heap64 * heap64_init (heap64 *heap, uint64_t space, uint64_t large, uint8_t flags); - -UTILAPI void heap8_head (heap8 *heap); -UTILAPI void heap16_head (heap16 *heap); -UTILAPI void heap32_head (heap32 *heap); -UTILAPI void heap64_head (heap64 *heap); - -#define heap8_ensure_head(heap) ((void)((heap)->head != NULL || (heap8_head(heap), 0))) -#define heap16_ensure_head(heap) ((void)((heap)->head != NULL || (heap16_head(heap), 0))) -#define heap32_ensure_head(heap) ((void)((heap)->head != NULL || (heap32_head(heap), 0))) -#define heap64_ensure_head(heap) ((void)((heap)->head != NULL || (heap64_head(heap), 0))) - -UTILAPI void heap8_free (heap8 *heap); -UTILAPI void heap16_free (heap16 *heap); -UTILAPI void heap32_free (heap32 *heap); -UTILAPI void heap64_free (heap64 *heap); - -UTILAPI void heap8_clear (heap8 *heap); -UTILAPI void heap16_clear (heap16 *heap); -UTILAPI void heap32_clear (heap32 *heap); -UTILAPI void heap64_clear (heap64 *heap); - -UTILAPI void * _heap8_take (heap8 *heap, size_t size); -UTILAPI void * _heap16_take (heap16 *heap, size_t size); -UTILAPI void * _heap32_take (heap32 *heap, size_t size); -UTILAPI void * _heap64_take (heap64 *heap, size_t size); - -UTILAPI void * _heap8_take0 (heap8 *heap, size_t size); -UTILAPI void * _heap16_take0 (heap16 *heap, size_t size); -UTILAPI void * _heap32_take0 (heap32 *heap, size_t size); -UTILAPI void * _heap64_take0 (heap64 *heap, size_t size); - -#define heap8_take(heap, size) (heap8_ensure_head(heap), _heap8_take(heap, size)) -#define heap16_take(heap, size) (heap16_ensure_head(heap), _heap16_take(heap, size)) -#define heap32_take(heap, size) (heap32_ensure_head(heap), _heap32_take(heap, size)) -#define heap64_take(heap, size) (heap64_ensure_head(heap), _heap64_take(heap, size)) - -#define heap8_take0(heap, size) (heap8_ensure_head(heap), _heap8_take0(heap, size)) -#define heap16_take0(heap, size) (heap16_ensure_head(heap), _heap16_take0(heap, size)) -#define heap32_take0(heap, size) (heap32_ensure_head(heap), _heap32_take0(heap, size)) -#define heap64_take0(heap, size) (heap64_ensure_head(heap), _heap64_take0(heap, size)) - -UTILAPI void heap8_pop (heap8 *heap, void *taken, size_t size); -UTILAPI void heap16_pop (heap16 *heap, void *taken, size_t size); -UTILAPI void heap32_pop (heap32 *heap, void *taken, size_t size); -UTILAPI void heap64_pop (heap64 *heap, void *taken, size_t size); - -UTILAPI void * _heap8_some (heap8 *heap, size_t size, size_t *pspace); -UTILAPI void * _heap16_some (heap16 *heap, size_t size, size_t *pspace); -UTILAPI void * _heap32_some (heap32 *heap, size_t size, size_t *pspace); -UTILAPI void * _heap64_some (heap64 *heap, size_t size, size_t *pspace); - -#define heap8_some(heap, size, pspace) (heap8_ensure_head(heap), _heap8_some(heap, size, pspace)) -#define heap16_some(heap, size, pspace) (heap16_ensure_head(heap), _heap16_some(heap, size, pspace)) -#define heap32_some(heap, size, pspace) (heap32_ensure_head(heap), _heap32_some(heap, size, pspace)) -#define heap64_some(heap, size, pspace) (heap64_ensure_head(heap), _heap64_some(heap, size, pspace)) - -UTILAPI void * heap8_more (heap8 *heap, void *taken, size_t written, size_t size, size_t *pspace); -UTILAPI void * heap16_more (heap16 *heap, void *taken, size_t written, size_t size, size_t *pspace); -UTILAPI void * heap32_more (heap32 *heap, void *taken, size_t written, size_t size, size_t *pspace); -UTILAPI void * heap64_more (heap64 *heap, void *taken, size_t written, size_t size, size_t *pspace); - -UTILAPI void heap8_done (heap8 *heap, void *taken, size_t written); -UTILAPI void heap16_done (heap16 *heap, void *taken, size_t written); -UTILAPI void heap32_done (heap32 *heap, void *taken, size_t written); -UTILAPI void heap64_done (heap64 *heap, void *taken, size_t written); - -UTILAPI void heap8_giveup (heap8 *heap, void *taken); -UTILAPI void heap16_giveup (heap16 *heap, void *taken); -UTILAPI void heap32_giveup (heap32 *heap, void *taken); -UTILAPI void heap64_giveup (heap64 *heap, void *taken); - -UTILAPI int heap8_empty (heap8 *heap); -UTILAPI int heap16_empty (heap16 *heap); -UTILAPI int heap32_empty (heap32 *heap); -UTILAPI int heap64_empty (heap64 *heap); - -UTILAPI void heap8_stats (heap8 *heap, mem_info *info, int append); -UTILAPI void heap16_stats (heap16 *heap, mem_info *info, int append); -UTILAPI void heap32_stats (heap32 *heap, mem_info *info, int append); -UTILAPI void heap64_stats (heap64 *heap, mem_info *info, int append); - -#endif
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemheapiof.c b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemheapiof.c deleted file mode 100644 index cd9609da877..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemheapiof.c +++ /dev/null @@ -1,142 +0,0 @@ - -#include "utilmemheapiof.h" - -// this is identical to stock iof suite, keep in sync - -size_t heap8_writer (iof *O, iof_mode mode) -{ - heap8 *heap; - size_t written; - heap = (heap8 *)O->link; - switch (mode) - { - case IOFFLUSH: - heap8_buffer_done(heap, O); - O->buf = _heap8_some(heap, 0, &O->space); - O->pos = O->buf; - O->end = O->buf + O->space; - break; - case IOFWRITE: - written = (size_t)iof_size(O); - O->buf = heap8_more(heap, O->buf, written, written << 1, &O->space); - O->pos = O->buf + written; - O->end = O->buf + O->space; - return O->space - written; - case IOFCLOSE: - default: - break; - } - return 0; -} - -size_t heap16_writer (iof *O, iof_mode mode) -{ - heap16 *heap; - size_t written; - heap = (heap16 *)O->link; - switch (mode) - { - case IOFFLUSH: - heap16_buffer_done(heap, O); - O->buf = _heap16_some(heap, 0, &O->space); - O->pos = O->buf; - O->end = O->buf + O->space; - break; - case IOFWRITE: - written = (size_t)iof_size(O); - O->buf = heap16_more(heap, O->buf, written, written << 1, &O->space); - O->pos = O->buf + written; - O->end = O->buf + O->space; - return O->space - written; - case IOFCLOSE: - default: - break; - } - return 0; -} - -size_t heap32_writer (iof *O, iof_mode mode) -{ - heap32 *heap; - size_t written; - heap = (heap32 *)O->link; - switch (mode) - { - case IOFFLUSH: - heap32_buffer_done(heap, O); - O->buf = _heap32_some(heap, 0, &O->space); - O->pos = O->buf; - O->end = O->buf + O->space; - break; - case IOFWRITE: - written = (size_t)iof_size(O); - O->buf = heap32_more(heap, O->buf, written, written << 1, &O->space); - O->pos = O->buf + written; - O->end = O->buf + O->space; - return O->space - written; - case IOFCLOSE: - default: - break; - } - return 0; -} - -size_t heap64_writer (iof *O, iof_mode mode) -{ - heap64 *heap; - size_t written; - heap = (heap64 *)O->link; - switch (mode) - { - case IOFFLUSH: - heap64_buffer_done(heap, O); - O->buf = _heap64_some(heap, 0, &O->space); - O->pos = O->buf; - O->end = O->buf + O->space; - break; - case IOFWRITE: - written = (size_t)iof_size(O); - O->buf = heap64_more(heap, O->buf, written, written << 1, &O->space); - O->pos = O->buf + written; - O->end = O->buf + O->space; - return O->space - written; - case IOFCLOSE: - default: - break; - } - return 0; -} - -/* buffer for some */ - -iof * _heap8_buffer_some (heap8 *heap, iof *O, size_t atleast) -{ - O->buf = _heap8_some(heap, atleast, &O->space); - O->pos = O->buf; - O->end = O->buf + O->space; - return O; -} - -iof * _heap16_buffer_some (heap16 *heap, iof *O, size_t atleast) -{ - O->buf = _heap16_some(heap, atleast, &O->space); - O->pos = O->buf; - O->end = O->buf + O->space; - return O; -} - -iof * _heap32_buffer_some (heap32 *heap, iof *O, size_t atleast) -{ - O->buf = _heap32_some(heap, atleast, &O->space); - O->pos = O->buf; - O->end = O->buf + O->space; - return O; -} - -iof * _heap64_buffer_some (heap64 *heap, iof *O, size_t atleast) -{ - O->buf = _heap64_some(heap, atleast, &O->space); - O->pos = O->buf; - O->end = O->buf + O->space; - return O; -} diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemheapiof.h b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemheapiof.h deleted file mode 100644 index 1f3da7efb2f..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemheapiof.h +++ /dev/null @@ -1,43 +0,0 @@ - -#ifndef UTIL_MEM_HEAP_IOF_H -#define UTIL_MEM_HEAP_IOF_H - -#include "utilmemheap.h" -#include "utiliof.h" - -UTILAPI size_t heap8_writer (iof *O, iof_mode mode); -UTILAPI size_t heap16_writer (iof *O, iof_mode mode); -UTILAPI size_t heap32_writer (iof *O, iof_mode mode); -UTILAPI size_t heap64_writer (iof *O, iof_mode mode); - -#define HEAP8_BUFFER_INIT(heap) IOF_WRITER_INIT(heap8_writer, (void *)(heap), NULL, 0, 0) -#define HEAP16_BUFFER_INIT(heap) IOF_WRITER_INIT(heap16_writer, (void *)(heap), NULL, 0, 0) -#define HEAP32_BUFFER_INIT(heap) IOF_WRITER_INIT(heap32_writer, (void *)(heap), NULL, 0, 0) -#define HEAP64_BUFFER_INIT(heap) IOF_WRITER_INIT(heap64_writer, (void *)(heap), NULL, 0, 0) - -#define heap8_buffer_init(heap, O) iof_writer(O, (void *)(heap), heap8_writer, NULL, 0) -#define heap16_buffer_init(heap, O) iof_writer(O, (void *)(heap), heap16_writer, NULL, 0) -#define heap32_buffer_init(heap, O) iof_writer(O, (void *)(heap), heap32_writer, NULL, 0) -#define heap64_buffer_init(heap, O) iof_writer(O, (void *)(heap), heap64_writer, NULL, 0) - -UTILAPI iof * _heap8_buffer_some (heap8 *heap, iof *O, size_t atleast); -UTILAPI iof * _heap16_buffer_some (heap16 *heap, iof *O, size_t atleast); -UTILAPI iof * _heap32_buffer_some (heap32 *heap, iof *O, size_t atleast); -UTILAPI iof * _heap64_buffer_some (heap64 *heap, iof *O, size_t atleast); - -#define heap8_buffer_some(heap, O, atleast) (heap8_ensure_head(heap), _heap8_buffer_some(heap, O, atleast)) -#define heap16_buffer_some(heap, O, atleast) (heap16_ensure_head(heap), _heap16_buffer_some(heap, O, atleast)) -#define heap32_buffer_some(heap, O, atleast) (heap32_ensure_head(heap), _heap32_buffer_some(heap, O, atleast)) -#define heap64_buffer_some(heap, O, atleast) (heap64_ensure_head(heap), _heap64_buffer_some(heap, O, atleast)) - -#define heap8_buffer_done(heap, O) heap8_done(heap, (O)->buf, (size_t)iof_size(O)) -#define heap16_buffer_done(heap, O) heap16_done(heap, (O)->buf, (size_t)iof_size(O)) -#define heap32_buffer_done(heap, O) heap32_done(heap, (O)->buf, (size_t)iof_size(O)) -#define heap64_buffer_done(heap, O) heap64_done(heap, (O)->buf, (size_t)iof_size(O)) - -#define heap8_buffer_giveup(heap, O) heap8_giveup(heap, (O)->buf) -#define heap16_buffer_giveup(heap, O) heap16_giveup(heap, (O)->buf) -#define heap32_buffer_giveup(heap, O) heap32_giveup(heap, (O)->buf) -#define heap64_buffer_giveup(heap, O) heap64_giveup(heap, (O)->buf) - -#endif
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmeminfo.c b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmeminfo.c deleted file mode 100644 index d3f61d5cac9..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmeminfo.c +++ /dev/null @@ -1,38 +0,0 @@ -/* print stats; common for heap, stock and pool */ - -#include <stdio.h> - -#include "utilmeminfo.h" - -#define UINT(i) ((unsigned long)(i)) - -void show_mem_info (mem_info *info) -{ - size_t totalwaste, totalmem, averagechunk, singlemem; - double ftotalwaste, fblockwaste, fghostwaste, ftailwaste, fsinglewaste; - double funused, fsingles, fsinglemem, fsingleeff; - - totalwaste = info->ghosts + info->blockghosts + info->left; - totalmem = info->used + totalwaste; - - ftotalwaste = totalmem > 0 ? totalwaste * 100.0 / totalmem : 0; - fblockwaste = totalmem > 0 ? (info->blockghosts - info->singleghosts) * 100.0 / totalmem : 0; - fsinglewaste = totalmem > 0 ? info->singleghosts * 100.0 / totalmem : 0; - fghostwaste = totalmem > 0 ? info->ghosts * 100.0 / totalmem : 0; - ftailwaste = totalmem > 0 ? info->left * 100.0 / totalmem : 0; - - averagechunk = info->chunks > 0 ? info->used / info->chunks : 0; - funused = info->chunks > 0 ? info->unused * 100.0 / info->chunks : 0.0; - - fsingles = info->blocks > 0 ? info->singles * 100.0 / info->blocks : 0; - fsinglemem = info->used > 0 ? info->singleused * 100.0 / info->used : 0; - singlemem = info->singleused + info->singleghosts; - fsingleeff = singlemem > 0 ? info->singleused * 100.0 / singlemem : 0; - - printf("total: %lu + %lu = %lu\n", UINT(info->used), UINT(totalwaste), UINT(totalmem)); - printf("chunks: %lu of average size %lu, unused %lu[%.2f%%]\n", UINT(info->chunks), UINT(averagechunk), UINT(info->unused), funused); - printf("blocks: %lu, singles %lu[%.2f%%], %.2f%% of allocs, efficiency %.2f%%\n", - UINT(info->blocks), UINT(info->singles), fsingles, fsinglemem, fsingleeff); - printf("waste: %lu[%0.2f%%], block ghosts %0.2f%%, single ghosts %.2f%%, chunk ghosts %0.2f%%, tails %0.2f%%\n\n", - UINT(totalwaste), ftotalwaste, fblockwaste, fsinglewaste, fghostwaste, ftailwaste); -} diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmeminfo.h b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmeminfo.h deleted file mode 100644 index cfa0fd670ac..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmeminfo.h +++ /dev/null @@ -1,9 +0,0 @@ - -#ifndef UTIL_MEM_INFO_H -#define UTIL_MEM_INFO_H - -#include "utilmemallh.h" - -UTILAPI void show_mem_info (mem_info *info); - -#endif
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilnumber.c b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilnumber.c deleted file mode 100644 index 4352c26fbd0..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilnumber.c +++ /dev/null @@ -1,1177 +0,0 @@ - -#include <math.h> /* for log10() and floor() */ -#include <stdio.h> /* for printf() */ - -#include "utilnumber.h" - -// todo: lookups can be chars -// change lookup arrays to some __name to discourage accessing them directly; they always should be accessed via macros; base16_value() base16_digit() -// - -const int base10_lookup[] = { - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -}; - -const int base16_lookup[] = { - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1, - -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -}; - -const int base26_lookup[] = { - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15, - 16,17,18,19,20,21,22,23,24,25,26,-1,-1,-1,-1,-1, - -1, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15, - 16,17,18,19,20,21,22,23,24,25,26,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -}; - -const int base36_lookup[] = { - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1, - -1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24, - 25,26,27,28,29,30,31,32,33,34,35,-1,-1,-1,-1,-1, - -1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24, - 25,26,27,28,29,30,31,32,33,34,35,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -}; - -/* common buffer for quick conversions (unsafe) */ - -char util_number_buffer[NUMBER_BUFFER_SIZE] = { 0 }; - -/* integer from string; return a pointer to character next to the last digit */ - -#define string_scan_sign(s, c, sign) _scan_sign(c, sign, *++s) -#define string_scan_integer(s, c, number) _scan_integer(c, number, *++s) -#define string_scan_radix(s, c, number, radix) _scan_radix(c, number, radix, *++s) -#define string_read_integer(s, c, number) _read_integer(c, number, *++s) -#define string_read_radix(s, c, number, radix) _read_radix(c, number, radix, *++s) - -const char * string_to_int32 (const char *s, int32_t *number) -{ - int sign, c = *s; - string_scan_sign(s, c, sign); - string_scan_integer(s, c, *number); - if (sign) *number = -*number; - return s; -} - -const char * string_to_slong (const char *s, long *number) -{ - int sign, c = *s; - string_scan_sign(s, c, sign); - string_scan_integer(s, c, *number); - if (sign) *number = -*number; - return s; -} - -const char * string_to_int64 (const char *s, int64_t *number) -{ - int sign, c = *s; - string_scan_sign(s, c, sign); - string_scan_integer(s, c, *number); - if (sign) *number = -*number; - return s; -} - -const char * string_to_uint32 (const char *s, uint32_t *number) -{ - int c = *s; - string_scan_integer(s, c, *number); - return s; -} - -const char * string_to_ulong (const char *s, unsigned long *number) -{ - int c = *s; - string_scan_integer(s, c, *number); - return s; -} - -const char * string_to_usize (const char *s, size_t *number) -{ - int c = *s; - string_scan_integer(s, c, *number); - return s; -} - -const char * string_to_uint64 (const char *s, uint64_t *number) -{ - int c = *s; - string_scan_integer(s, c, *number); - return s; -} - -const char * radix_to_int32 (const char *s, int32_t *number, int radix) -{ - int sign, c = *s; - string_scan_sign(s, c, sign); - string_scan_radix(s, c, *number, radix); - if (sign) *number = -*number; - return s; -} - -const char * radix_to_slong (const char *s, long *number, int radix) -{ - int sign, c = *s; - string_scan_sign(s, c, sign); - string_scan_radix(s, c, *number, radix); - if (sign) *number = -*number; - return s; -} - -const char * radix_to_int64 (const char *s, int64_t *number, int radix) -{ - int sign, c = *s; - string_scan_sign(s, c, sign); - string_scan_radix(s, c, *number, radix); - if (sign) *number = -*number; - return s; -} - -const char * radix_to_uint32 (const char *s, uint32_t *number, int radix) -{ - int c = *s; - string_scan_radix(s, c, *number, radix); - return s; -} - -const char * radix_to_ulong (const char *s, unsigned long *number, int radix) -{ - int c = *s; - string_scan_radix(s, c, *number, radix); - return s; -} - -const char * radix_to_usize (const char *s, size_t *number, int radix) -{ - int c = *s; - string_scan_radix(s, c, *number, radix); - return s; -} - -const char * radix_to_uint64 (const char *s, uint64_t *number, int radix) -{ - int c = *s; - string_scan_radix(s, c, *number, radix); - return s; -} - -/* roman to uint16_t */ - -#define roman1000(c) (c == 'M' || c == 'm') -#define roman500(c) (c == 'D' || c == 'd') -#define roman100(c) (c == 'C' || c == 'c') -#define roman50(c) (c == 'L' || c == 'l') -#define roman10(c) (c == 'X' || c == 'x') -#define roman5(c) (c == 'V' || c == 'v') -#define roman1(c) (c == 'I' || c == 'i') - -#define roman100s(p) (roman100(*p) ? (100 + ((++p, roman100(*p)) ? (100 + ((++p, roman100(*p)) ? (++p, 100) : 0)) : 0)) : 0) -#define roman10s(p) (roman10(*p) ? (10 + ((++p, roman10(*p)) ? (10 + ((++p, roman10(*p)) ? (++p, 10) : 0)) : 0)) : 0) -#define roman1s(p) (roman1(*p) ? (1 + ((++p, roman1(*p)) ? (1 + ((++p, roman1(*p)) ? (++p, 1) : 0)) : 0)) : 0) - -const char * roman_to_uint16 (const char *s, uint16_t *number) -{ - const char *p; - /* M */ - for (*number = 0, p = s; roman1000(*p); *number += 1000, ++p); - /* D C */ - if (roman500(*p)) - { - ++p; - *number += 500 + roman100s(p); - } - else if (roman100(*p)) - { - ++p; - if (roman1000(*p)) - { - ++p; - *number += 900; - } - else if (roman500(*p)) - { - ++p; - *number += 400; - } - else - *number += 100 + roman100s(p); - } - /* L X */ - if (roman50(*p)) - { - ++p; - *number += 50 + roman10s(p); - } - else if (roman10(*p)) - { - ++p; - if (roman100(*p)) - { - ++p; - *number += 90; - } - else if (roman50(*p)) - { - ++p; - *number += 40; - } - else - *number += 10 + roman10s(p); - } - /* V I */ - if (roman5(*p)) - { - ++p; - *number += 5 + roman1s(p); - } - else if (roman1(*p)) - { - ++p; - if (roman10(*p)) - { - ++p; - *number += 9; - } - else if (roman5(*p)) - { - ++p; - *number += 4; - } - else - *number += 1 + roman1s(p); - } - return p; -} - -/* integer to string; return a pointer to null-terminated static const string */ - -#define end_of_integer_buffer(integer_buffer) (integer_buffer + MAX_INTEGER_DIGITS - 1) - -#define number_printrev_signed(p, number, quotient) \ - do { \ - quotient = number; number /= 10; \ - *--p = base10_palindrome[9 + (quotient - number*10)]; \ - } while (number); \ - if (quotient < 0) *--p = '-' - -#define number_printrev_unsigned(p, number, quotient) \ - do { \ - quotient = number; number /= 10; \ - *--p = (char)(quotient - integer_multiplied10(number)) + '0'; \ - } while (number) - -#define SINTTYPE_AS_STRING(inttype, number, ibuf, psize) \ - char *p, *e; \ - inttype quotient; \ - e = p = end_of_integer_buffer(ibuf); *p = '\0'; \ - number_printrev_signed(p, number, quotient); \ - *psize = (size_t)(e - p) - -#define UINTTYPE_AS_STRING(inttype, number, ibuf, psize) \ - char *p, *e; \ - inttype quotient; \ - e = p = end_of_integer_buffer(ibuf); *p = '\0'; \ - number_printrev_unsigned(p, number, quotient); \ - *psize = (size_t)(e - p) - -char * int32_as_string (int32_t number, char ibuf[MAX_INTEGER_DIGITS], size_t *psize) -{ - SINTTYPE_AS_STRING(int32_t, number, ibuf, psize); - return p; -} - -char * slong_as_string (long number, char ibuf[MAX_INTEGER_DIGITS], size_t *psize) -{ - SINTTYPE_AS_STRING(long, number, ibuf, psize); - return p; -} - -char * int64_as_string (int64_t number, char ibuf[MAX_INTEGER_DIGITS], size_t *psize) -{ - SINTTYPE_AS_STRING(int64_t, number, ibuf, psize); - return p; -} - -char * uint32_as_string (uint32_t number, char ibuf[MAX_INTEGER_DIGITS], size_t *psize) -{ - UINTTYPE_AS_STRING(uint32_t, number, ibuf, psize); - return p; -} - -char * ulong_as_string (unsigned long number, char ibuf[MAX_INTEGER_DIGITS], size_t *psize) -{ - UINTTYPE_AS_STRING(unsigned long, number, ibuf, psize); - return p; -} - -char * usize_as_string (size_t number, char ibuf[MAX_INTEGER_DIGITS], size_t *psize) -{ - UINTTYPE_AS_STRING(size_t, number, ibuf, psize); - return p; -} - -char * uint64_as_string (uint64_t number, char ibuf[MAX_INTEGER_DIGITS], size_t *psize) -{ - UINTTYPE_AS_STRING(uint64_t, number, ibuf, psize); - return p; -} - -/* radix variant */ - -#define number_printrev_signed_radix_uc(p, number, radix, quotient) \ - do { \ - quotient = number; number /= radix; \ - *--p = base36_uc_palindrome[MAX_RADIX - 1 + (quotient - number*radix)]; \ - } while (number) - -#define number_printrev_signed_radix_lc(p, number, radix, quotient) \ - do { \ - quotient = number; number /= radix; \ - *--p = base36_lc_palindrome[MAX_RADIX - 1 + (quotient - number*radix)]; \ - } while (number) - -#define number_printrev_signed_radix(p, number, radix, quotient, uc) \ - do { \ - if (uc) { number_printrev_signed_radix_uc(p, number, radix, quotient); } \ - else { number_printrev_signed_radix_lc(p, number, radix, quotient); } \ - if (quotient < 0) *--p = '-'; \ - } while (0) - -#define number_printrev_unsigned_radix_uc(p, number, radix, quotient) \ - do { \ - quotient = number; number /= radix; \ - *--p = base36_uc_alphabet[quotient % radix]; \ - } while (number) - -#define number_printrev_unsigned_radix_lc(p, number, radix, quotient) \ - do { \ - quotient = number; number /= radix; \ - *--p = base36_lc_alphabet[quotient % radix]; \ - } while (number) - -#define number_printrev_unsigned_radix(p, number, radix, quotient, uc) \ - do { \ - if (uc) { number_printrev_unsigned_radix_uc(p, number, radix, quotient); } \ - else { number_printrev_unsigned_radix_lc(p, number, radix, quotient); } \ - } while (0) - -#define SINTTYPE_AS_RADIX(inttype, number, radix, uc, ibuf, psize) \ - char *p, *e; \ - inttype quotient; \ - e = p = end_of_integer_buffer(ibuf); *p = '\0'; \ - number_printrev_signed_radix(p, number, radix, quotient, uc); \ - *psize = (size_t)(e - p) - -#define UINTTYPE_AS_RADIX(inttype, number, radix, uc, ibuf, psize) \ - char *p, *e; \ - inttype quotient; \ - e = p = end_of_integer_buffer(ibuf); *p = '\0'; \ - number_printrev_unsigned_radix(p, number, radix, quotient, uc); \ - *psize = (size_t)(e - p) - -char * int32_as_radix (int32_t number, int radix, int uc, char ibuf[MAX_INTEGER_DIGITS], size_t *psize) -{ - SINTTYPE_AS_RADIX(int32_t, number, radix, uc, ibuf, psize); - return p; -} - -char * slong_as_radix (long number, int radix, int uc, char ibuf[MAX_INTEGER_DIGITS], size_t *psize) -{ - SINTTYPE_AS_RADIX(long, number, radix, uc, ibuf, psize); - return p; -} - -/* -char * ssize_as_radix (ssize_t number, int radix, int uc, char ibuf[MAX_INTEGER_DIGITS], size_t *psize) -{ - SINTTYPE_AS_RADIX(ssize_t, number, radix, uc, ibuf, psize); - return p; -} -*/ - -char * int64_as_radix (int64_t number, int radix, int uc, char ibuf[MAX_INTEGER_DIGITS], size_t *psize) -{ - SINTTYPE_AS_RADIX(int64_t, number, radix, uc, ibuf, psize); - return p; -} - -char * uint32_as_radix (uint32_t number, int radix, int uc, char ibuf[MAX_INTEGER_DIGITS], size_t *psize) -{ - UINTTYPE_AS_RADIX(uint32_t, number, radix, uc, ibuf, psize); - return p; -} - -char * ulong_as_radix (unsigned long number, int radix, int uc, char ibuf[MAX_INTEGER_DIGITS], size_t *psize) -{ - UINTTYPE_AS_RADIX(unsigned long, number, radix, uc, ibuf, psize); - return p; -} - -char * usize_as_radix (size_t number, int radix, int uc, char ibuf[MAX_INTEGER_DIGITS], size_t *psize) -{ - UINTTYPE_AS_RADIX(size_t, number, radix, uc, ibuf, psize); - return p; -} - -char * uint64_as_radix (uint64_t number, int radix, int uc, char ibuf[MAX_INTEGER_DIGITS], size_t *psize) -{ - UINTTYPE_AS_RADIX(uint64_t, number, radix, uc, ibuf, psize); - return p; -} - -/* aaa, aab, aac, ...; unsigned only. 0 gives empty string */ - -#define string_scan_alpha(s, c, number, radix) \ - for (number = 0, c = *s; (c = base26_value(c)) > 0; number = number * radix + c, c = *++s) - -const char * alpha_to_uint32 (const char *s, uint32_t *number) -{ - int c; - string_scan_alpha(s, c, *number, 26); - return s; -} - -const char * alpha_to_ulong (const char *s, unsigned long *number) -{ - int c; - string_scan_alpha(s, c, *number, 26); - return s; -} - -const char * alpha_to_usize (const char *s, size_t *number) -{ - int c; - string_scan_alpha(s, c, *number, 26); - return s; -} - -const char * alpha_to_uint64 (const char *s, uint64_t *number) -{ - int c; - string_scan_alpha(s, c, *number, 26); - return s; -} - -#define number_printrev_unsigned_alpha_uc(p, number, radix, quotient) \ - while (number > 0) { \ - quotient = --number; number /= radix; \ - *--p = base26_uc_alphabet[quotient % radix]; \ - } - -#define number_printrev_unsigned_alpha_lc(p, number, radix, quotient) \ - while (number > 0) { \ - quotient = --number; number /= radix; \ - *--p = base26_lc_alphabet[quotient % radix]; \ - } - -#define UINTTYPE_AS_ALPHA(inttype, number, uc, ibuf, psize) \ - char *p, *e; \ - inttype quotient; \ - e = p = end_of_integer_buffer(ibuf); *p = '\0'; \ - if (uc) { number_printrev_unsigned_alpha_uc(p, number, 26, quotient); } \ - else { number_printrev_unsigned_alpha_lc(p, number, 26, quotient); } \ - *psize = (size_t)(e - p) - -char * uint32_as_alpha (uint32_t number, int uc, char ibuf[MAX_INTEGER_DIGITS], size_t *psize) -{ - UINTTYPE_AS_ALPHA(uint32_t, number, uc, ibuf, psize); - return p; -} - -char * ulong_as_alpha (unsigned long number, int uc, char ibuf[MAX_INTEGER_DIGITS], size_t *psize) -{ - UINTTYPE_AS_ALPHA(unsigned long, number, uc, ibuf, psize); - return p; -} - -char * usize_as_alpha (size_t number, int uc, char ibuf[MAX_INTEGER_DIGITS], size_t *psize) -{ - UINTTYPE_AS_ALPHA(size_t, number, uc, ibuf, psize); - return p; -} - -char * uint64_as_alpha (uint64_t number, int uc, char ibuf[MAX_INTEGER_DIGITS], size_t *psize) -{ - UINTTYPE_AS_ALPHA(uint64_t, number, uc, ibuf, psize); - return p; -} - -/* a variant of alphabetic, a, b, c, ..., z, aa, bb, cc, ..., zz (eg. pdf page labelling) - watch out: unsafe for large numbers; for buffer size N we can handle max. N * 26. */ - -#define string_scan_alphan(s, c, number, radix) \ - do { \ - number = 0; \ - if ((c = (uint16_t)base26_value(*s)) > 0) { \ - number = c; \ - while (c == (uint16_t)base26_value(*++s)) number += radix; \ - } \ - } while (0) - -const char * alphan_to_uint16 (const char *s, uint16_t *number) -{ - uint16_t c; - string_scan_alphan(s, c, *number, 26); - return s; -} - -#define number_print_alphan_uc(p, e, c, number, radix) \ - for (c = (--number) % radix, number -= c; ; number -= radix) { \ - *p++ = base26_uc_alphabet[c]; \ - if (number == 0 || p >= e) break; \ - } - -#define number_print_alphan_lc(p, e, c, number, radix) \ - for (c = (--number) % radix, number -= c; ; number -= radix) { \ - *p++ = base26_lc_alphabet[c]; \ - if (number == 0 || p >= e) break; \ - } - -#define UINTTYPE_AS_ALPHAN(inttype, number, uc, ibuf, size, psize) \ - char *p, *e; \ - uint8_t c; \ - p = ibuf; \ - e = p + size; \ - if (number > 0) { \ - if (uc) { number_print_alphan_uc(p, e, c, number, 26); } \ - else { number_print_alphan_lc(p, e, c, number, 26); } \ - } \ - *p = '\0'; \ - *psize = (size_t)(p - ibuf) - -char * uint16_as_alphan (uint16_t number, int uc, char ibuf[], size_t size, size_t *psize) -{ - UINTTYPE_AS_ALPHAN(uint16_t, number, uc, ibuf, size, psize); - return ibuf; -} - -/* roman numeral */ - -/* large roman numerals? http://mathforum.org/library/drmath/view/57569.html */ - -#define base_roman_uc_alphabet "MDCLXVI" -#define base_roman_lc_alphabet "mdclxvi" - -char * uint16_as_roman (uint16_t number, int uc, char ibuf[MAX_ROMAN_DIGITS], size_t *psize) -{ - static const uint32_t base_roman_values[] = { 1000, 500, 100, 50, 10, 5, 1 }; - const char *alphabet; - char *p; - uint32_t k, j, v, u, n; - - n = (uint32_t)number; // uint16_t used to limit leding 'M' - alphabet = uc ? base_roman_uc_alphabet : base_roman_lc_alphabet; - for (p = ibuf, j = 0, v = base_roman_values[0]; n > 0; ) - { - if (n >= v) - { - *p++ = alphabet[j]; - n -= v; - continue; - } - if (j & 1) - k = j + 1; - else - k = j + 2; - u = base_roman_values[k]; - if (n + u >= v) - { - *p++ = alphabet[k]; - n += u; - } - else - v = base_roman_values[++j]; - } - *p = '\0'; - *psize = (size_t)(p - ibuf); - return ibuf; -} - -/* IEEE-754 */ - -#define BINARY_MODF 1 - -#define NOT_A_NUMBER_STRING "NaN" -#define INFINITY_STRING "INF" -#define SIGNED_INFINITY 1 -#define SIGNED_ZERO 0 -#define SIGNED_NOT_A_NUMBER 0 -#define RADIX_CHAR '.' - -/* double/float to decimal */ - -typedef struct ieee_double { - union { - double number; - uint64_t bits; - }; - uint64_t fraction; - int exponent, sign; -} ieee_double; - -typedef struct ieee_float { - union { - float number; - uint32_t bits; - }; - uint32_t fraction; - int exponent, sign; -} ieee_float; - -#define IEEE_DOUBLE_BIAS 1023 -#define IEEE_DOUBLE_MIN_EXPONENT -1023 -#define IEEE_DOUBLE_MAX_EXPONENT (0x7ff - IEEE_DOUBLE_BIAS) - -#define IEEE_FLOAT_BIAS 127 -#define IEEE_FLOAT_MIN_EXPONENT -127 -#define IEEE_FLOAT_MAX_EXPONENT (0xff - IEEE_FLOAT_BIAS) - -#define ieee_double_fraction(i) (i & 0x000fffffffffffffull) -#define ieee_double_exponent(i) ((0x7ff & (i >> 52)) - IEEE_DOUBLE_BIAS) -#define ieee_double_init(ieee_number, number) \ - ieee_number.number = number, \ - ieee_number.fraction = ieee_double_fraction(ieee_number.bits), \ - ieee_number.exponent = ieee_double_exponent(ieee_number.bits) - -#define ieee_float_fraction(i) (i & 0x007fffff) -#define ieee_float_exponent(i) ((0xff & (i >> 23)) - IEEE_FLOAT_BIAS) -#define ieee_float_init(ieee_number, number) \ - ieee_number.number = number, \ - ieee_number.fraction = ieee_float_fraction(ieee_number.bits), \ - ieee_number.exponent = ieee_float_exponent(ieee_number.bits) - -/* special cases */ - -#define ieee_double_is_zero(ieee_number) (ieee_number.number == 0) // || ieee_double_too_small(ieee_number) ? -#define ieee_double_too_small(ieee_number) (ieee_number.exponent == 0 && ieee_number.fraction != 0) // denormalized, implicit fracion bit not set - -#define ieee_float_is_zero(ieee_number) (ieee_number.number == 0) // || ieee_float_too_small(ieee_number) ? -#define ieee_float_too_small(ieee_number) (ieee_number.exponent == 0 && ieee_number.fraction != 0) - -#define ieee_double_zero_string(ieee_number) (SIGNED_ZERO && ieee_number.sign ? "-0" : "0") -#define ieee_double_infinity_string(ieee_number) (SIGNED_INFINITY && ieee_number.sign ? "-" INFINITY_STRING : INFINITY_STRING) - -#define ieee_float_zero_string ieee_double_zero_string -#define ieee_float_infinity_string ieee_double_infinity_string - -#define ieee_double_special_case(ieee_number) (ieee_number.exponent == IEEE_DOUBLE_MAX_EXPONENT) -#define ieee_double_special_string(ieee_number) (ieee_number.fraction ? NOT_A_NUMBER_STRING : ieee_double_infinity_string(ieee_number)) - -#define ieee_float_special_case(ieee_number) (ieee_number.exponent == IEEE_FLOAT_MAX_EXPONENT) -#define ieee_float_special_string(ieee_number) (ieee_number.fraction ? NOT_A_NUMBER_STRING : ieee_float_infinity_string(ieee_number)) - -#if 0 - -const double double_binary_power10[] = -{ - 1.0e1, 1.0e2, 1.0e4, 1.0e8, 1.0e16, 1.0e32, 1.0e64, 1.0e128, 1.0e256 -}; - -const float float_binary_power10[] = -{ - 1.0e1, 1.0e2, 1.0e4, 1.0e8, 1.0e16, 1.0e32 -}; - -const double double_binary_negpower10[] = -{ - 1.0e-1, 1.0e-2, 1.0e-4, 1.0e-8, 1.0e-16, 1.0e-32 -}; - -const float float_binary_negpower10[] = -{ - 1.0e-1, 1.0e-2, 1.0e-4, 1.0e-8, 1.0e-16, 1.0e-32 -}; - -#else - -const double double_decimal_power10[] = { - 1.0e0, 1.0e1, 1.0e2, 1.0e3, 1.0e4, 1.0e5, 1.0e6, 1.0e7, 1.0e8, 1.0e9, - 1.0e10, 1.0e11, 1.0e12, 1.0e13, 1.0e14, 1.0e15, 1.0e16, 1.0e17, 1.0e18, 1.0e19, - 1.0e20, 1.0e21, 1.0e22, 1.0e23, 1.0e24, 1.0e25, 1.0e26, 1.0e27, 1.0e28, 1.0e29, - 1.0e30, 1.0e31, 1.0e32, 1.0e33, 1.0e34, 1.0e35, 1.0e36, 1.0e37, 1.0e38, 1.0e39, - 1.0e40, 1.0e41, 1.0e42, 1.0e43, 1.0e44, 1.0e45, 1.0e46, 1.0e47, 1.0e48, 1.0e49, - 1.0e50, 1.0e51, 1.0e52, 1.0e53, 1.0e54, 1.0e55, 1.0e56, 1.0e57, 1.0e58, 1.0e59, - 1.0e60, 1.0e61, 1.0e62, 1.0e63, 1.0e64, 1.0e65, 1.0e66, 1.0e67, 1.0e68, 1.0e69, - 1.0e70, 1.0e71, 1.0e72, 1.0e73, 1.0e74, 1.0e75, 1.0e76, 1.0e77, 1.0e78, 1.0e79, - 1.0e80, 1.0e81, 1.0e82, 1.0e83, 1.0e84, 1.0e85, 1.0e86, 1.0e87, 1.0e88, 1.0e89, - 1.0e90, 1.0e91, 1.0e92, 1.0e93, 1.0e94, 1.0e95, 1.0e96, 1.0e97, 1.0e98, 1.0e99, - 1.0e100, 1.0e101, 1.0e102, 1.0e103, 1.0e104, 1.0e105, 1.0e106, 1.0e107, 1.0e108, 1.0e109, - 1.0e110, 1.0e111, 1.0e112, 1.0e113, 1.0e114, 1.0e115, 1.0e116, 1.0e117, 1.0e118, 1.0e119, - 1.0e120, 1.0e121, 1.0e122, 1.0e123, 1.0e124, 1.0e125, 1.0e126, 1.0e127, 1.0e128, 1.0e129, - 1.0e130, 1.0e131, 1.0e132, 1.0e133, 1.0e134, 1.0e135, 1.0e136, 1.0e137, 1.0e138, 1.0e139, - 1.0e140, 1.0e141, 1.0e142, 1.0e143, 1.0e144, 1.0e145, 1.0e146, 1.0e147, 1.0e148, 1.0e149, - 1.0e150, 1.0e151, 1.0e152, 1.0e153, 1.0e154, 1.0e155, 1.0e156, 1.0e157, 1.0e158, 1.0e159, - 1.0e160, 1.0e161, 1.0e162, 1.0e163, 1.0e164, 1.0e165, 1.0e166, 1.0e167, 1.0e168, 1.0e169, - 1.0e170, 1.0e171, 1.0e172, 1.0e173, 1.0e174, 1.0e175, 1.0e176, 1.0e177, 1.0e178, 1.0e179, - 1.0e180, 1.0e181, 1.0e182, 1.0e183, 1.0e184, 1.0e185, 1.0e186, 1.0e187, 1.0e188, 1.0e189, - 1.0e190, 1.0e191, 1.0e192, 1.0e193, 1.0e194, 1.0e195, 1.0e196, 1.0e197, 1.0e198, 1.0e199, - 1.0e200, 1.0e201, 1.0e202, 1.0e203, 1.0e204, 1.0e205, 1.0e206, 1.0e207, 1.0e208, 1.0e209, - 1.0e210, 1.0e211, 1.0e212, 1.0e213, 1.0e214, 1.0e215, 1.0e216, 1.0e217, 1.0e218, 1.0e219, - 1.0e220, 1.0e221, 1.0e222, 1.0e223, 1.0e224, 1.0e225, 1.0e226, 1.0e227, 1.0e228, 1.0e229, - 1.0e230, 1.0e231, 1.0e232, 1.0e233, 1.0e234, 1.0e235, 1.0e236, 1.0e237, 1.0e238, 1.0e239, - 1.0e240, 1.0e241, 1.0e242, 1.0e243, 1.0e244, 1.0e245, 1.0e246, 1.0e247, 1.0e248, 1.0e249, - 1.0e250, 1.0e251, 1.0e252, 1.0e253, 1.0e254, 1.0e255, 1.0e256, 1.0e257, 1.0e258, 1.0e259, - 1.0e260, 1.0e261, 1.0e262, 1.0e263, 1.0e264, 1.0e265, 1.0e266, 1.0e267, 1.0e268, 1.0e269, - 1.0e270, 1.0e271, 1.0e272, 1.0e273, 1.0e274, 1.0e275, 1.0e276, 1.0e277, 1.0e278, 1.0e279, - 1.0e280, 1.0e281, 1.0e282, 1.0e283, 1.0e284, 1.0e285, 1.0e286, 1.0e287, 1.0e288, 1.0e289, - 1.0e290, 1.0e291, 1.0e292, 1.0e293, 1.0e294, 1.0e295, 1.0e296, 1.0e297, 1.0e298, 1.0e299, - 1.0e300, 1.0e301, 1.0e302, 1.0e303, 1.0e304, 1.0e305, 1.0e306, 1.0e307, 1.0e308 -}; - -const float float_decimal_power10[] = { - 1.0e0f, 1.0e1f, 1.0e2f, 1.0e3f, 1.0e4f, 1.0e5f, 1.0e6f, 1.0e7f, 1.0e8f, 1.0e9f, - 1.0e10f, 1.0e11f, 1.0e12f, 1.0e13f, 1.0e14f, 1.0e15f, 1.0e16f, 1.0e17f, 1.0e18f, 1.0e19f, - 1.0e20f, 1.0e21f, 1.0e22f, 1.0e23f, 1.0e24f, 1.0e25f, 1.0e26f, 1.0e27f, 1.0e28f, 1.0e29f, - 1.0e30f, 1.0e31f, 1.0e32f, 1.0e33f, 1.0e34f, 1.0e35f, 1.0e36f, 1.0e37f, 1.0e38f -}; - -const double double_decimal_negpower10[] = { - 1.0e0, 1.0e-1, 1.0e-2, 1.0e-3, 1.0e-4, 1.0e-5, 1.0e-6, 1.0e-7, 1.0e-8, 1.0e-9, - 1.0e-10, 1.0e-11, 1.0e-12, 1.0e-13, 1.0e-14, 1.0e-15, 1.0e-16, 1.0e-17, 1.0e-18, 1.0e-19, - 1.0e-20, 1.0e-21, 1.0e-22, 1.0e-23, 1.0e-24, 1.0e-25, 1.0e-26, 1.0e-27, 1.0e-28, 1.0e-29, - 1.0e-30, 1.0e-31, 1.0e-32, 1.0e-33, 1.0e-34, 1.0e-35, 1.0e-36, 1.0e-37, 1.0e-38, 1.0e-39, - 1.0e-40, 1.0e-41, 1.0e-42, 1.0e-43, 1.0e-44, 1.0e-45, 1.0e-46, 1.0e-47, 1.0e-48, 1.0e-49, - 1.0e-50, 1.0e-51, 1.0e-52, 1.0e-53, 1.0e-54, 1.0e-55, 1.0e-56, 1.0e-57, 1.0e-58, 1.0e-59, - 1.0e-60, 1.0e-61, 1.0e-62, 1.0e-63, 1.0e-64, 1.0e-65, 1.0e-66, 1.0e-67, 1.0e-68, 1.0e-69, - 1.0e-70, 1.0e-71, 1.0e-72, 1.0e-73, 1.0e-74, 1.0e-75, 1.0e-76, 1.0e-77, 1.0e-78, 1.0e-79, - 1.0e-80, 1.0e-81, 1.0e-82, 1.0e-83, 1.0e-84, 1.0e-85, 1.0e-86, 1.0e-87, 1.0e-88, 1.0e-89, - 1.0e-90, 1.0e-91, 1.0e-92, 1.0e-93, 1.0e-94, 1.0e-95, 1.0e-96, 1.0e-97, 1.0e-98, 1.0e-99, - 1.0e-100, 1.0e-101, 1.0e-102, 1.0e-103, 1.0e-104, 1.0e-105, 1.0e-106, 1.0e-107, 1.0e-108, 1.0e-109, - 1.0e-110, 1.0e-111, 1.0e-112, 1.0e-113, 1.0e-114, 1.0e-115, 1.0e-116, 1.0e-117, 1.0e-118, 1.0e-119, - 1.0e-120, 1.0e-121, 1.0e-122, 1.0e-123, 1.0e-124, 1.0e-125, 1.0e-126, 1.0e-127, 1.0e-128, 1.0e-129, - 1.0e-130, 1.0e-131, 1.0e-132, 1.0e-133, 1.0e-134, 1.0e-135, 1.0e-136, 1.0e-137, 1.0e-138, 1.0e-139, - 1.0e-140, 1.0e-141, 1.0e-142, 1.0e-143, 1.0e-144, 1.0e-145, 1.0e-146, 1.0e-147, 1.0e-148, 1.0e-149, - 1.0e-150, 1.0e-151, 1.0e-152, 1.0e-153, 1.0e-154, 1.0e-155, 1.0e-156, 1.0e-157, 1.0e-158, 1.0e-159, - 1.0e-160, 1.0e-161, 1.0e-162, 1.0e-163, 1.0e-164, 1.0e-165, 1.0e-166, 1.0e-167, 1.0e-168, 1.0e-169, - 1.0e-170, 1.0e-171, 1.0e-172, 1.0e-173, 1.0e-174, 1.0e-175, 1.0e-176, 1.0e-177, 1.0e-178, 1.0e-179, - 1.0e-180, 1.0e-181, 1.0e-182, 1.0e-183, 1.0e-184, 1.0e-185, 1.0e-186, 1.0e-187, 1.0e-188, 1.0e-189, - 1.0e-190, 1.0e-191, 1.0e-192, 1.0e-193, 1.0e-194, 1.0e-195, 1.0e-196, 1.0e-197, 1.0e-198, 1.0e-199, - 1.0e-200, 1.0e-201, 1.0e-202, 1.0e-203, 1.0e-204, 1.0e-205, 1.0e-206, 1.0e-207, 1.0e-208, 1.0e-209, - 1.0e-210, 1.0e-211, 1.0e-212, 1.0e-213, 1.0e-214, 1.0e-215, 1.0e-216, 1.0e-217, 1.0e-218, 1.0e-219, - 1.0e-220, 1.0e-221, 1.0e-222, 1.0e-223, 1.0e-224, 1.0e-225, 1.0e-226, 1.0e-227, 1.0e-228, 1.0e-229, - 1.0e-230, 1.0e-231, 1.0e-232, 1.0e-233, 1.0e-234, 1.0e-235, 1.0e-236, 1.0e-237, 1.0e-238, 1.0e-239, - 1.0e-240, 1.0e-241, 1.0e-242, 1.0e-243, 1.0e-244, 1.0e-245, 1.0e-246, 1.0e-247, 1.0e-248, 1.0e-249, - 1.0e-250, 1.0e-251, 1.0e-252, 1.0e-253, 1.0e-254, 1.0e-255, 1.0e-256, 1.0e-257, 1.0e-258, 1.0e-259, - 1.0e-260, 1.0e-261, 1.0e-262, 1.0e-263, 1.0e-264, 1.0e-265, 1.0e-266, 1.0e-267, 1.0e-268, 1.0e-269, - 1.0e-270, 1.0e-271, 1.0e-272, 1.0e-273, 1.0e-274, 1.0e-275, 1.0e-276, 1.0e-277, 1.0e-278, 1.0e-279, - 1.0e-280, 1.0e-281, 1.0e-282, 1.0e-283, 1.0e-284, 1.0e-285, 1.0e-286, 1.0e-287, 1.0e-288, 1.0e-289, - 1.0e-290, 1.0e-291, 1.0e-292, 1.0e-293, 1.0e-294, 1.0e-295, 1.0e-296, 1.0e-297, 1.0e-298, 1.0e-299, - 1.0e-300, 1.0e-301, 1.0e-302, 1.0e-303, 1.0e-304, 1.0e-305, 1.0e-306, 1.0e-307, 1.0e-308 -}; - -const float float_decimal_negpower10[] = { - 1.0e0f, 1.0e-1f, 1.0e-2f, 1.0e-3f, 1.0e-4f, 1.0e-5f, 1.0e-6f, 1.0e-7f, 1.0e-8f, 1.0e-9f, - 1.0e-10f, 1.0e-11f, 1.0e-12f, 1.0e-13f, 1.0e-14f, 1.0e-15f, 1.0e-16f, 1.0e-17f, 1.0e-18f, 1.0e-19f, - 1.0e-20f, 1.0e-21f, 1.0e-22f, 1.0e-23f, 1.0e-24f, 1.0e-25f, 1.0e-26f, 1.0e-27f, 1.0e-28f, 1.0e-29f, - 1.0e-30f, 1.0e-31f, 1.0e-32f, 1.0e-33f, 1.0e-34f, 1.0e-35f, 1.0e-36f, 1.0e-37f, 1.0e-38f -}; - -#endif - -/* scale number by floor(log10(number)) + 1 so that the result is in range [0.1, 1) */ - -#define ieee_double_exponent10(ieee_number) ((int)floor(log10(ieee_number.number)) + 1) -#define ieee_float_exponent10(ieee_number) ((int)floorf(log10f(ieee_number.number)) + 1) // floorf, log10f ? - -#define ieee_double_exp10(ieee_number, exponent10) \ - exponent10 = ieee_double_exponent10(ieee_number); \ - if (exponent10 > 0) { \ - double_negative_exp10(ieee_number.number, -exponent10); \ - ieee_number.fraction = ieee_double_fraction(ieee_number.bits); \ - ieee_number.exponent = ieee_double_exponent(ieee_number.bits); \ - } else if (exponent10 < 0) { \ - double_positive_exp10(ieee_number.number, -exponent10); \ - ieee_number.fraction = ieee_double_fraction(ieee_number.bits); \ - ieee_number.exponent = ieee_double_exponent(ieee_number.bits); \ - } - -#define ieee_float_exp10(ieee_number, exponent10) \ - exponent10 = ieee_float_exponent10(ieee_number); \ - if (exponent10 > 0) { \ - float_negative_exp10(ieee_number.number, -exponent10); \ - ieee_number.fraction = ieee_float_fraction(ieee_number.bits); \ - ieee_number.exponent = ieee_float_exponent(ieee_number.bits); \ - } else if (exponent10 < 0) { \ - float_positive_exp10(ieee_number.number, -exponent10); \ - ieee_number.fraction = ieee_float_fraction(ieee_number.bits); \ - ieee_number.exponent = ieee_float_exponent(ieee_number.bits); \ - } - -#if BINARY_MODF - -/* unhide implicit bit 53, produce 56-bit denormalised fraction (binary exponent already in range [-4, -1]) */ - -#define ieee_double_denormalize(ieee_number) \ - (ieee_number.exponent == IEEE_DOUBLE_MIN_EXPONENT ? (++ieee_number.exponent, 0) : (ieee_number.fraction |= (1ull<<52))), \ - ieee_number.fraction <<= (ieee_number.exponent + 4) - -/* unhide implicit bit 24, produce 27-bit denormalized fraction (binary exponent already in range [-4, -1]) */ - -#define ieee_float_denormalize(ieee_number) \ - (ieee_number.exponent == IEEE_FLOAT_MIN_EXPONENT ? (++ieee_number.exponent, 0) : (ieee_number.fraction |= (1<<23))), \ - ieee_number.fraction <<= (ieee_number.exponent + 4) - -/* turn off significant bits over 56 (integer part), multiply by 10, return new integer part (subsequent decimal digit) */ - -#define ieee_double_binary_fraction(ieee_number) \ - (ieee_number.fraction &= ((1ull<<56) - 1), \ - ieee_number.fraction = (ieee_number.fraction << 1) + (ieee_number.fraction << 3), \ - ieee_number.fraction >> 56) - -/* turn off significant bits over 27 (integer part), multiply by 10, return the integer part (subsequent decimal digit) */ - -#define ieee_float_binary_fraction(ieee_number) \ - (ieee_number.fraction &= ((1<<27) - 1), \ - ieee_number.fraction = (ieee_number.fraction << 1) + (ieee_number.fraction << 3), \ - ieee_number.fraction >> 27) - -#define ieee_double_decimal(ieee_number, exponent10, digits, p) \ - ieee_number_decimal(ieee_double_binary_fraction, ieee_number, exponent10, digits, p) -#define ieee_float_decimal(ieee_number, exponent10, digits, p) \ - ieee_number_decimal(ieee_float_binary_fraction, ieee_number, exponent10, digits, p) - -#else - -/* generic method */ - -#define ieee_double_decimal_fraction(ieee_number, i) (ieee_number.number = modf(10*ieee_number.number, &i), i) -#define ieee_float_decimal_fraction(ieee_number, i) (ieee_number.number = (float)modf(10*ieee_number.number, &i), i) // ??? - -#define ieee_double_decimal(ieee_number, exponent10, digits, p) \ - ieee_number_decimal(ieee_double_decimal_fraction, ieee_number, exponent10, digits, p) -#define ieee_float_decimal(ieee_number, exponent10, digits, p) \ - ieee_number_decimal(ieee_float_decimal_fraction, ieee_number, exponent10, digits, p) - -#endif - -#define ieee_number_decimal(method, ieee_number, exponent10, digits, p) \ - ieee_double_denormalize(ieee_number); \ - if (ieee_number.sign) *p++ = '-'; \ - if (exponent10 <= 0) \ - for (*p++ = '0', *p++ = RADIX_CHAR; exponent10 && digits; *p++ = '0', ++exponent10, --digits); \ - else \ - { \ - do { *p++ = '0' + (char)method(ieee_number); } while (--exponent10); \ - *p++ = RADIX_CHAR; \ - } \ - for ( ; digits && ieee_number.fraction; --digits) \ - *p++ = '0' + (char)method(ieee_number) - -/* rounding to nearest integer */ - -#if BINARY_MODF -/* check if the mantissa has the most significant bit set, means >= 0.5 */ -# define ieee_double_half(ieee_number) (ieee_number.fraction & (1ull<<55)) -# define ieee_float_half(ieee_number) (ieee_number.fraction & (1<<26)) -#else -# define ieee_double_half(ieee_number) (ieee_number.number >= 0.5) -# define ieee_float_half(ieee_number) (ieee_number.number >= 0.5) -#endif - -/* rounding to nearest integer */ - -#define buffer_ceil(s, p, sign) \ - { \ - while (*--p == '9'); \ - if (*p != RADIX_CHAR) ++*p++; \ - else { \ - char *q; \ - for (q = p - 1; ; --q) { \ - if (*q < '9') { ++*q; break; } \ - *q = '0'; \ - if (q == s) \ - *--s = '1'; \ - else if (sign && q - 1 == s) \ - *s = '1', *--s = '-'; \ - } \ - } \ - } - -#define buffer_remove_trailing_zeros(s, p, sign) \ - { \ - while (*--p == '0'); \ - if (*p != RADIX_CHAR) \ - ++p; \ - else if (!SIGNED_ZERO && sign && p - 2 == s && *(p - 1) == '0') \ - p -= 2, *p++ = '0'; \ - } - -// if digits parameter was initially less then exponent10, then exponent10 > 0 and ieee_double_half(ieee_number) is irrelevant -#define ieee_double_round(ieee_number, exponent10, s, p) \ - if (exponent10 == 0 && ieee_double_half(ieee_number)) \ - { buffer_ceil(s, p, ieee_number.sign); } \ - else \ - { buffer_remove_trailing_zeros(s, p, ieee_number.sign); } - -#define ieee_float_round(ieee_number, exponent10, s, p) \ - if (exponent10 == 0 && ieee_float_half(ieee_number)) \ - { buffer_ceil(s, p, ieee_number.sign); } \ - else \ - { buffer_remove_trailing_zeros(s, p, ieee_number.sign); } - -/* double to decimal */ - -#define ieee_copy_special_string(nbuf, special, p, _p) \ - for (p = nbuf, _p = special; ; ++p, ++_p) { \ - if ((*p = *_p) == '\0') break; \ - } - -#define ieee_copy_special_string_re(nbuf, special, p, _p, r, e) \ - for (p = nbuf, _p = special; ; ++p, ++_p) { \ - if ((*p = *_p) == '\0') { \ - if (r != NULL) *r = NULL; \ - if (e != NULL) *e = p; \ - break; \ - } \ - } - -char * double_as_string (double number, int digits, char nbuf[MAX_NUMBER_DIGITS], size_t *psize) -{ - ieee_double ieee_number; - int exponent10; - char *s, *p; const char *_p; - s = p = nbuf + 1; // for sign/rounding - ieee_double_init(ieee_number, number); - if ((ieee_number.sign = ieee_number.bits >> 63) != 0) - ieee_number.number = -ieee_number.number; - if (ieee_double_is_zero(ieee_number)) // to avoid crash on log10(number) - { - ieee_copy_special_string(nbuf, ieee_double_zero_string(ieee_number), p, _p); - *psize = (size_t)(p - nbuf); - return nbuf; - } - if (ieee_double_special_case(ieee_number)) - { - ieee_copy_special_string(nbuf, ieee_double_special_string(ieee_number), p, _p); - *psize = (size_t)(p - nbuf); - return nbuf; - } - ieee_double_exp10(ieee_number, exponent10); - ieee_double_decimal(ieee_number, exponent10, digits, p); - ieee_double_round(ieee_number, exponent10, s, p); - *p = '\0'; - *psize = (size_t)(p - s); - return s; -} - -/* float to decimal */ - -char * float_as_string (float number, int digits, char nbuf[MAX_NUMBER_DIGITS], size_t *psize) -{ - ieee_float ieee_number; - int exponent10; - char *s, *p; const char *_p; - s = p = nbuf + 1; // for sign/rounding - ieee_float_init(ieee_number, number); - if ((ieee_number.sign = ieee_number.bits >> 31) != 0) - ieee_number.number = -ieee_number.number; - if (ieee_float_is_zero(ieee_number)) - { - ieee_copy_special_string(nbuf, ieee_float_zero_string(ieee_number), p, _p); - *psize = (size_t)(p - nbuf); - return nbuf; - } - if (ieee_float_special_case(ieee_number)) - { - ieee_copy_special_string(nbuf, ieee_float_special_string(ieee_number), p, _p); - *psize = (size_t)(p - nbuf); - return nbuf; - } - ieee_float_exp10(ieee_number, exponent10); - ieee_float_decimal(ieee_number, exponent10, digits, p); - ieee_float_round(ieee_number, exponent10, s, p); - *p = '\0'; - *psize = (size_t)(p - s); - return s; -} - -/* decimal string to double/float */ - -#define string_scan_decimal(s, c, number) _scan_decimal(c, number, *++s) -#define string_scan_fraction(s, c, number, exponent10) _scan_fraction(c, number, exponent10, *++s) -#define string_scan_exponent10(s, c, exponent10) _scan_exponent10(c, exponent10, *++s) - -const char * string_to_double (const char *s, double *number) -{ - int sign, exponent10, c = *s; - string_scan_sign(s, c, sign); - string_scan_decimal(s, c, *number); - if (c == '.') - { - c = *++s; - string_scan_fraction(s, c, *number, exponent10); - } - else - exponent10 = 0; - if (c == 'e' || c == 'E') - { - c = *++s; - string_scan_exponent10(s, c, exponent10); - } - double_exp10(*number, exponent10); - if (sign) *number = -*number; - return s; -} - -const char * string_to_float (const char *s, float *number) -{ - int sign, exponent10, c = *s; - string_scan_sign(s, c, sign); - string_scan_decimal(s, c, *number); - if (c == '.') - { - c = *++s; - string_scan_fraction(s, c, *number, exponent10); - } - else - exponent10 = 0; - if (c == 'e' || c == 'E') - { - c = *++s; - string_scan_exponent10(s, c, exponent10); - } - float_exp10(*number, exponent10); - if (sign) *number = -*number; - return s; -} - -/* conventional form */ - -const char * convert_to_double (const char *s, double *number) -{ - int sign, c = *s; - string_scan_sign(s, c, sign); - string_scan_decimal(s, c, *number); - if (c == '.' || c == ',') - { - int exponent10; - c = *++s; - string_scan_fraction(s, c, *number, exponent10); - if (exponent10 < 0) - double_negative_exp10(*number, exponent10); - } - if (sign) *number = -*number; - return s; -} - -const char * convert_to_float (const char *s, float *number) -{ - int sign, c = *s; - string_scan_sign(s, c, sign); - string_scan_decimal(s, c, *number); - if (c == '.' || c == ',') - { - int exponent10; - c = *++s; - string_scan_fraction(s, c, *number, exponent10); - if (exponent10 < 0) - float_negative_exp10(*number, exponent10); - } - if (sign) *number = -*number; - return s; -} - -/* pretty common stuff */ - -size_t bytes_to_hex_lc (const void *input, size_t size, unsigned char *output) -{ - size_t i; - const unsigned char *p; - for (i = 0, p = (const unsigned char *)input; i < size; ++i, ++p) - { - *output++ = base16_lc_digit1(*p); - *output++ = base16_lc_digit2(*p); - } - *output = '\0'; - return 2*size + 1; -} - -size_t bytes_to_hex_uc (const void *input, size_t size, unsigned char *output) -{ - size_t i; - const unsigned char *p; - for (i = 0, p = (const unsigned char *)input; i < size; ++i, ++p) - { - *output++ = base16_uc_digit1(*p); - *output++ = base16_uc_digit2(*p); - } - *output = '\0'; - return 2*size + 1; -} - -size_t hex_to_bytes (const void *input, size_t size, unsigned char *output) -{ - size_t i; - int c1, c2; - const unsigned char *p; - for (i = 1, p = (const unsigned char *)input; i < size; i += 2) - { - c1 = base16_value(*p); - ++p; - c2 = base16_value(*p); - ++p; - if (c1 >= 0 && c2 >= 0) - *output++ = (unsigned char)((c1<<4)|c2); - else - break; - } - return i >> 1; -} - -void print_as_hex (const void *input, size_t bytes) -{ - const unsigned char *p; - for (p = (const unsigned char *)input; bytes > 0; --bytes, ++p) - printf("%02x", *p); -} diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilnumber.h b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilnumber.h deleted file mode 100644 index 735432b8dd8..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilnumber.h +++ /dev/null @@ -1,428 +0,0 @@ -#ifndef UTIL_NUMBER_H -#define UTIL_NUMBER_H - -#include <stddef.h> // for size_t - -#include "utilplat.h" -#include "utildecl.h" - -#if defined(__cplusplus) && defined(_MSC_VER) -// int*_t types are in standard in msvc++ -#else -# include <stdint.h> -#endif - -/* 'long' isn't long for msvc64/mingw64, we need a type for machine word */ - -#if defined(_WIN64) || defined(__MINGW32__) -# define INT64F "%I64d" -# define UINT64F "%I64u" -#else -# define INT64F "%lld" -# define UINT64F "%llu" -#endif - -#if defined(MSVC64) -# define INTLW_IS_INT64 -# define intlw_t int64_t -# define uintlw_t uint64_t -# define INTLW(N) N##I64 -# define UINTLW(N) N##UI64 -# define INTLWF INT64F -# define UINTLWF UINT64F -#elif defined(__MINGW64__) -# define INTLW_IS_INT64 -# define intlw_t int64_t -# define uintlw_t uint64_t -# define INTLW(N) N##LL -# define UINTLW(N) N##ULL -# define INTLWF INT64F -# define UINTLWF UINT64F -#else // 32bit or sane 64bit (LP64) -# define INTLW_IS_LONG -# define intlw_t long -# define uintlw_t unsigned long -# define INTLW(N) N##L -# define UINTLW(N) N##UL -# define INTLWF "%ld" -# define UINTLWF "%lu" -#endif - -// ssize_t is missing in MSVC, but defining it is risky; some environments (eg. python) typedefs ssize_t on its own way.. -// #if defined(MSVC64) -// # define ssize_t int32_t -// #else -// # if defined(MSVC32) -// # define ssize_t int64_t -// # endif -// #endif - -/* basic constants */ - -#define MAX_RADIX 36 -#define MAX_INTEGER_DIGITS 65 /* 64-bit number in binary form plus '\0' */ -#define MAX_ROMAN_DIGITS 128 /* to handle romannumeral of short int (up to 65 leading 'M') */ -#define MAX_NUMBER_DIGITS 512 -#define NUMBER_BUFFER_SIZE MAX_NUMBER_DIGITS - -#define base36_uc_alphabet "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" -#define base36_lc_alphabet "0123456789abcdefghijklmnopqrstuvwxyz" - -#define base26_uc_alphabet "ABCDEFGHIJKLMNOPQRSTUVWXYZ" -#define base26_lc_alphabet "abcdefghijklmnopqrstuvwxyz" -extern const int base26_lookup[]; - -#define base36_lc_palindrome "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" -#define base36_uc_palindrome "ZYXWVUTSRQPONMLKJIHGFEDCBA9876543210123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" - -extern const int base36_lookup[]; - -#define base10_palindrome "9876543210123456789" -#define base10_alphabet "0123456789" -extern const int base10_lookup[]; - -#define base16_uc_alphabet "0123456789ABCDEF" -#define base16_lc_alphabet "0123456789abcdef" -extern const int base16_lookup[]; - -#define base16_uc_digit1(c) base16_uc_alphabet[(c)>>4] -#define base16_uc_digit2(c) base16_uc_alphabet[(c)&15] -#define base16_lc_digit1(c) base16_lc_alphabet[(c)>>4] -#define base16_lc_digit2(c) base16_lc_alphabet[(c)&15] - -#define base8_digit(c) ((unsigned)(c - '0') <= (unsigned)('7' - '0')) -#define base8_value(c) (base8_digit(c) ? (c) - '0' : -1) - -#define base10_digit(c) ((unsigned)(c - '0') <= (unsigned)('9' - '0')) -#define base10_value(c) (base10_lookup[(uint8_t)(c)]) - -#define base16_digit(c) (base16_lookup[(uint8_t)(c)] >= 0) -#define base16_value(c) (base16_lookup[(uint8_t)(c)]) - -#define base26_digit(c) (base26_lookup[(uint8_t)(c)] >= 0) -#define base26_value(c) (base26_lookup[(uint8_t)(c)]) - -#define base36_digit(c) (base36_lookup[(uint8_t)(c)] >= 0) -#define base36_value(c) (base36_lookup[(uint8_t)(c)]) - -//#define base_digit(c, radix) ((unsigned)(base36_lookup[c]) < (unsigned)(radix)) -//#define base_value(c, radix) (base_digit(c, radix) ? base36_lookup[c] : -1) - -UTILDEF extern char util_number_buffer[NUMBER_BUFFER_SIZE]; - -/* integer from string; return a pointer to character next to the last digit */ - -UTILAPI const char * string_to_int32 (const char *s, int32_t *number); -UTILAPI const char * string_to_slong (const char *s, long *number); -UTILAPI const char * string_to_int64 (const char *s, int64_t *number); - -UTILAPI const char * string_to_uint32 (const char *s, uint32_t *number); -UTILAPI const char * string_to_ulong (const char *s, unsigned long *number); -UTILAPI const char * string_to_usize (const char *s, size_t *number); -UTILAPI const char * string_to_uint64 (const char *s, uint64_t *number); - -UTILAPI const char * radix_to_int32 (const char *s, int32_t *number, int radix); -UTILAPI const char * radix_to_slong (const char *s, long *number, int radix); -UTILAPI const char * radix_to_int64 (const char *s, int64_t *number, int radix); - -UTILAPI const char * radix_to_uint32 (const char *s, uint32_t *number, int radix); -UTILAPI const char * radix_to_ulong (const char *s, unsigned long *number, int radix); -UTILAPI const char * radix_to_usize (const char *s, size_t *number, int radix); -UTILAPI const char * radix_to_uint64 (const char *s, uint64_t *number, int radix); - -UTILAPI const char * alpha_to_uint32 (const char *s, uint32_t *number); -UTILAPI const char * alpha_to_ulong (const char *s, unsigned long *number); -UTILAPI const char * alpha_to_usize (const char *s, size_t *number); -UTILAPI const char * alpha_to_uint64 (const char *s, uint64_t *number); - -/* integer to string */ - -UTILAPI char * int32_as_string (int32_t number, char ibuf[MAX_INTEGER_DIGITS], size_t *psize); -UTILAPI char * slong_as_string (long number, char ibuf[MAX_INTEGER_DIGITS], size_t *psize); -UTILAPI char * int64_as_string (int64_t number, char ibuf[MAX_INTEGER_DIGITS], size_t *psize); - -#define int32_to_string(number, psize) int32_as_string(number, util_number_buffer, psize) -#define slong_to_string(number, psize) slong_as_string(number, util_number_buffer, psize) -#define int64_to_string(number, psize) int64_as_string(number, util_number_buffer, psize) - -UTILAPI char * uint32_as_string (uint32_t number, char ibuf[MAX_INTEGER_DIGITS], size_t *psize); -UTILAPI char * ulong_as_string (unsigned long number, char ibuf[MAX_INTEGER_DIGITS], size_t *psize); -UTILAPI char * usize_as_string (size_t number, char ibuf[MAX_INTEGER_DIGITS], size_t *psize); -UTILAPI char * uint64_as_string (uint64_t number, char ibuf[MAX_INTEGER_DIGITS], size_t *psize); - -#define uint32_to_string(number, psize) uint32_as_string(number, util_number_buffer, psize) -#define ulong_to_string(number, psize) ulong_as_string(number, util_number_buffer, psize) -#define usize_to_string(number, psize) usize_as_string(number, util_number_buffer, psize) -#define uint64_to_string(number, psize) uint64_as_string(number, util_number_buffer, psize) - -UTILAPI char * int32_as_radix (int32_t number, int radix, int uc, char ibuf[MAX_INTEGER_DIGITS], size_t *psize); -UTILAPI char * slong_as_radix (long number, int radix, int uc, char ibuf[MAX_INTEGER_DIGITS], size_t *psize); -UTILAPI char * int64_as_radix (int64_t number, int radix, int uc, char ibuf[MAX_INTEGER_DIGITS], size_t *psize); - -#define int32_to_radix(number, radix, uc, psize) int32_as_radix(number, radix, uc, util_number_buffer, psize) -#define slong_to_radix(number, radix, uc, psize) slong_as_radix(number, radix, uc, util_number_buffer, psize) -#define int64_to_radix(number, radix, uc, psize) int64_as_radix(number, radix, uc, util_number_buffer, psize) - -UTILAPI char * uint32_as_radix (uint32_t number, int radix, int uc, char ibuf[MAX_INTEGER_DIGITS], size_t *psize); -UTILAPI char * ulong_as_radix (unsigned long number, int radix, int uc, char ibuf[MAX_INTEGER_DIGITS], size_t *psize); -UTILAPI char * usize_as_radix (size_t number, int radix, int uc, char ibuf[MAX_INTEGER_DIGITS], size_t *psize); -UTILAPI char * uint64_as_radix (uint64_t number, int radix, int uc, char ibuf[MAX_INTEGER_DIGITS], size_t *psize); - -#define uint32_to_radix(number, radix, uc, psize) uint32_as_radix(number, radix, uc, util_number_buffer, psize) -#define ulong_to_radix(number, radix, uc, psize) ulong_as_radix(number, radix, uc, util_number_buffer, psize) -#define usize_to_radix(number, radix, uc, psize) usize_as_radix(number, radix, uc, util_number_buffer, psize) -#define uint64_to_radix(number, radix, uc, psize) uint64_as_radix(number, radix, uc, util_number_buffer, psize) - -UTILAPI char * uint32_as_alpha (uint32_t number, int uc, char ibuf[MAX_INTEGER_DIGITS], size_t *psize); -UTILAPI char * ulong_as_alpha (unsigned long number, int uc, char ibuf[MAX_INTEGER_DIGITS], size_t *psize); -UTILAPI char * usize_as_alpha (size_t number, int uc, char ibuf[MAX_INTEGER_DIGITS], size_t *psize); -UTILAPI char * uint64_as_alpha (uint64_t number, int uc, char ibuf[MAX_INTEGER_DIGITS], size_t *psize); - -#define uint32_to_alpha(number, uc, psize) uint32_as_alpha(number, uc, util_number_buffer, psize) -#define ulong_to_alpha(number, uc, psize) ulong_as_alpha(number, uc, util_number_buffer, psize) -#define usize_to_alpha(number, uc, psize) usize_as_alpha(number, uc, util_number_buffer, psize) -#define uint64_to_alpha(number, uc, psize) uint64_as_alpha(number, uc, util_number_buffer, psize) - -#if defined(INTLW_IS_INT64) - -# define string_to_intlw(s, number) string_to_int64(s, number) -# define string_to_uintlw(s, number) string_to_uint64(s, number) - -# define radix_to_intlw(s, number, radix) radix_to_int64(s, number, radix) -# define radix_to_uintlw(s, number, radix) radix_to_uint64(s, number, radix) - -# define alpha_to_uintlw(s, number) alpha_to_uint64(s, number) - -# define intlw_as_string(number, ibuf, psize) int64_as_string(number, ibuf, psize) -# define uintlw_as_string(number, ibuf, psize) uint64_as_string(number, ibuf, psize) - -# define intlw_to_string(number, psize) int64_to_string(number, psize) -# define uintlw_to_string(number, psize) uint64_to_string(number, psize) - -# define intlw_as_radix(number, radix, uc, ibuf, psize) int64_as_radix(number, radix, uc, ibuf, psize) -# define uintlw_as_radix(number, radix, uc, ibuf, psize) uint64_as_radix(number, radix, uc, ibuf, psize) - -# define intlw_to_radix(number, radix, uc, psize) int64_to_radix(number, radix, uc, psize) -# define uintlw_to_radix(number, radix, uc, psize) uint64_to_radix(number, radix, uc, psize) - -# define uintlw_as_alpha(number, uc, ibuf, psize) uint64_as_alpha(number, uc, ibuf, psize) -# define uintlw_to_alpha(number, uc, psize) uint64_to_alpha(number, uc, ibuf, psize) - -#elif defined(INTLW_IS_LONG) - -# define string_to_intlw(s, number) string_to_slong(s, number) -# define string_to_uintlw(s, number) string_to_ulong(s, number) - -# define radix_to_intlw(s, number, radix) radix_to_slong(s, number, radix) -# define radix_to_uintlw(s, number, radix) radix_to_ulong(s, number, radix) - -# define alpha_to_uintlw(s, number) alpha_to_ulong(s, number) - -# define intlw_as_string(number, ibuf, psize) slong_as_string(number, ibuf, psize) -# define uintlw_as_string(number, ibuf, psize) ulong_as_string(number, ibuf, psize) - -# define intlw_to_string(number, psize) slong_to_string(number, psize) -# define uintlw_to_string(number, psize) ulong_to_string(number, psize) - -# define intlw_as_radix(number, radix, uc, ibuf, psize) slong_as_radix(number, radix, uc, ibuf, psize) -# define uintlw_as_radix(number, radix, uc, ibuf, psize) ulong_as_radix(number, radix, uc, ibuf, psize) - -# define intlw_to_radix(number, radix, uc, psize) slong_to_radix(number, radix, uc, psize) -# define uintlw_to_radix(number, radix, uc, psize) ulong_to_radix(number, radix, uc, psize) - -# define uintlw_as_alpha(number, uc, ibuf, psize) ulong_as_alpha(number, uc, ibuf, psize) -# define uintlw_to_alpha(number, uc, psize) ulong_to_alpha(number, uc, ibuf, psize) - -#endif - -/* a..z, aa..zz, aaa..zzz (limited to uint16_t, valid for N <= buffer_size * 26) */ - -UTILAPI const char * alphan_to_uint16 (const char *s, uint16_t *number); -UTILAPI char * uint16_as_alphan (uint16_t number, int uc, char ibuf[], size_t size, size_t *psize); -#define uint16_to_alphan(number, uc, psize) uint16_as_alphan(number, uc, util_number_buffer, NUMBER_BUFFER_SIZE, psize) - -/* roman numeral (limited to uint16_t) */ - -UTILAPI const char * roman_to_uint16 (const char *s, uint16_t *number); -UTILAPI char * uint16_as_roman (uint16_t number, int uc, char ibuf[MAX_ROMAN_DIGITS], size_t *psize); -#define uint16_to_roman(number, uc, psize) uint16_as_roman(number, uc, util_number_buffer, psize) - -/* double/float to string */ - -UTILAPI char * double_as_string (double number, int digits, char nbuf[MAX_NUMBER_DIGITS], size_t *psize); -#define double_to_string(number, digits, psize) double_as_string(number, digits, util_number_buffer, psize) - -UTILAPI char * float_as_string (float number, int digits, char nbuf[MAX_NUMBER_DIGITS], size_t *psize); -#define float_to_string(number, digits, psize) float_as_string(number, digits, util_number_buffer, psize) - -/* string to double/float */ - -UTILAPI const char * string_to_double (const char *s, double *number); -UTILAPI const char * string_to_float (const char *s, float *number); - -/* convenience form accepting comma among a dot, with not exp notation (eg. pdf) */ - -UTILAPI const char * convert_to_double (const char *s, double *number); -UTILAPI const char * convert_to_float (const char *s, float *number); - -/* binary data parsers helpers */ - -#if 0 // masking gives more overactive warnings -#define get_number_byte1(n) ((n) & 0x000000ffu) -#define get_number_byte2(n) (((n) & 0x0000ff00u) >> 8) -#define get_number_byte3(n) (((n) & 0x00ff0000u) >> 16) -#define get_number_byte4(n) (((n) & 0xff000000u) >> 24) -#define get_number_byte5(n) (((n) & 0x000000ff00000000ull) >> 32) -#define get_number_byte6(n) (((n) & 0x0000ff0000000000ull) >> 40) -#define get_number_byte7(n) (((n) & 0x00ff000000000000ull) >> 48) -#define get_number_byte8(n) (((n) & 0xff00000000000000ull) >> 56) -#else -#define get_number_byte1(n) ((n) & 0xff) -#define get_number_byte2(n) (((n) >> 8) & 0xff) -#define get_number_byte3(n) (((n) >> 16) & 0xff) -#define get_number_byte4(n) (((n) >> 24) & 0xff) -#define get_number_byte5(n) (((n) >> 32) & 0xff) -#define get_number_byte6(n) (((n) >> 40) & 0xff) -#define get_number_byte7(n) (((n) >> 48) & 0xff) -#define get_number_byte8(n) (((n) >> 56) & 0xff) -#endif - -#define get_number_bytes_be1(n, b) (b[0] = (uint8_t)get_number_byte1(n)) -#define get_number_bytes_be2(n, b) (b[0] = (uint8_t)get_number_byte2(n), b[1] = (uint8_t)get_number_byte1(n)) -#define get_number_bytes_be3(n, b) (b[0] = (uint8_t)get_number_byte3(n), b[1] = (uint8_t)get_number_byte2(n), b[2] = (uint8_t)get_number_byte1(n)) -#define get_number_bytes_be4(n, b) (b[0] = (uint8_t)get_number_byte4(n), b[1] = (uint8_t)get_number_byte3(n), b[2] = (uint8_t)get_number_byte2(n), b[3] = (uint8_t)get_number_byte1(n)) - -#define get_number_bytes_be5(n, b) (b[0] = (uint8_t)get_number_byte5(n), b[1] = (uint8_t)get_number_byte4(n), b[2] = (uint8_t)get_number_byte3(n), b[3] = (uint8_t)get_number_byte2(n), \ - b[4] = (uint8_t)get_number_byte1(n)) -#define get_number_bytes_be6(n, b) (b[0] = (uint8_t)get_number_byte6(n), b[1] = (uint8_t)get_number_byte5(n), b[2] = (uint8_t)get_number_byte4(n), b[3] = (uint8_t)get_number_byte3(n), \ - b[4] = (uint8_t)get_number_byte2(n), b[5] = (uint8_t)get_number_byte1(n)) -#define get_number_bytes_be7(n, b) (b[0] = (uint8_t)get_number_byte7(n), b[1] = (uint8_t)get_number_byte6(n), b[2] = (uint8_t)get_number_byte5(n), b[3] = (uint8_t)get_number_byte4(n), \ - b[4] = (uint8_t)get_number_byte3(n), b[5] = (uint8_t)get_number_byte2(n), b[6] = (uint8_t)get_number_byte1(n)) -#define get_number_bytes_be8(n, b) (b[0] = (uint8_t)get_number_byte8(n), b[1] = (uint8_t)get_number_byte7(n), b[2] = (uint8_t)get_number_byte6(n), b[3] = (uint8_t)get_number_byte5(n), \ - b[4] = (uint8_t)get_number_byte4(n), b[5] = (uint8_t)get_number_byte3(n), b[6] = (uint8_t)get_number_byte2(n), b[7] = (uint8_t)get_number_byte1(n)) - -#define read_uint16be_as(s, int_type) ((int_type)((s[0]<<8)|s[1])) -#define read_uint32be_as(s, int_type) ((int_type)((s[0]<<24)|(s[1]<<16)|(s[2]<<8)|s[3])) - -#define read_uint16le_as(s, int_type) ((int_type)((s[1]<<8)|s[0])) -#define read_uint32le_as(s, int_type) ((int_type)((s[3]<<24)|(s[2]<<16)|(s[1]<<8)|s[0])) - -#define read_uint16_native(s) (*((uint16_t *)(s))) -#define read_uint32_native(s) (*((uint32_t *)(s))) -#define read_int16_native(s) (*((int16_t *)(s))) -#define read_int32_native(s) (*((int32_t *)(s))) - -#define scan_uint16be_as(s, int_type) (s += 2, (int_type)((s[-2]<<8)|s[-1])) -#define scan_uint32be_as(s, int_type) (s += 4, (int_type)((s[-4]<<24)|(s[-3]<<16)|(s[-2]<<8)|s[-1])) - -#define scan_uint16le_as(s, int_type) (s += 2, (int_type)((s[-1]<<8)|s[-2])) -#define scan_uint32le_as(s, int_type) (s += 4, (int_type)((s[-1]<<24)|(s[-2]<<16)|(s[-3]<<8)|s[-4])) - -#define scan_uint16_native(s) (s += 2, read_uint16_native(s-2)) -#define scan_uint32_native(s) (s += 4, read_uint32_native(s-4)) -#define scan_int16_native(s) (s += 2, read_int16_native(s-2)) -#define scan_int32_native(s) (s += 4, read_int32_native(s-4)) - -#define read_fixed16_16_as(s, float_type) (((float_type)read_uint32be_as(s, signed int))/(1<<16)) -#define read_fixed2_14_as(s, float_type) (((float_type)read_uint16be_as(s, signed short))/(1<<14)) - -#define scan_fixed16_16_as(s, float_type) (((float_type)scan_uint32be_as(s, signed int))/(1<<16)) -#define scan_fixed2_14_as(s, float_type) (((float_type)scan_uint16be_as(s, signed short))/(1<<14)) - -/* internal procedures */ - -#define _scan_sign(c, sign, next) \ - do { if (c == '-') { sign = 1; c = next; } else if (c == '+') { sign = 0; c = next; } else sign = 0; } while (0) - -#define integer_multiplied10(number) (((number) << 1) + ((number) << 3)) - -#define _scan_integer(c, number, next) \ - for (number = 0; base10_digit(c); number = integer_multiplied10(number) + (c - '0'), c = next) -#define _scan_radix(c, number, radix, next) \ - for (number = 0; (c = base36_value(c)) >= 0 && c < radix; number = number * radix + c, c = next) - -#define _read_integer(c, number, next) \ - for (number = c - '0', c = next; base10_digit(c); number = integer_multiplied10(number) + (c - '0'), c = next) -#define _read_radix(c, number, radix, next) \ - for (number = c - '0', c = next; (c = base36_value(c)) >= 0 && c < radix; number = number * radix + c, c = next) - -/* rationals */ - -#define _scan_decimal(c, number, next) \ - for (number = 0; base10_digit(c); number = number*10 + (c - '0'), c = next) -#define _scan_fraction(c, number, exponent10, next) \ - for (exponent10 = 0; base10_digit(c); --exponent10, number = number*10 + (c - '0'), c = next) - -#define _scan_exponent10(c, exponent10, next) \ - do { \ - int eexponent10, eexpsign; \ - _scan_sign(c, eexpsign, next); \ - _scan_integer(c, eexponent10, next); \ - if (eexpsign) \ - exponent10 -= eexponent10; \ - else \ - exponent10 += eexponent10; \ - } while(0) - -#if 0 - -// kept just for sentiment ;) - -extern const double double_binary_power10[]; -extern const float float_binary_power10[]; -extern const double double_binary_negpower10[]; -extern const float float_binary_negpower10[]; - -#define double_negative_exp10(number, exponent) \ -{ const double *bp10; int e = ((exponent) < 511 ? 511 : -(exponent)); \ - for (bp10 = double_binary_negpower10; e > 0; e >>= 1, ++bp10) \ - if (e & 1) number *= *bp10; } - -#define float_negative_exp10(number, exponent) \ -{ const float *bp10; int e = ((exponent) < 64 ? 64 : -(exponent)); \ - for (bp10 = float_binary_negpower10; e > 0; e >>= 1, ++bp10) \ - if (e & 1) number *= *bp10; } - -#define double_positive_exp10(number, exponent) \ -{ const double *bp10; int e = ((exponent) > 511 ? 511 : (exponent)); \ - for (bp10 = double_binary_power10; e > 0; e >>= 1, ++bp10) \ - if (e & 1) number *= *bp10; } - -#define float_positive_exp10(number, exponent) \ -{ const float *bp10; int e = ((exponent) > 64 ? 64 : (exponent)); \ - for (bp10 = double_binary_power10; e > 0; e >>= 1, ++bp10) \ - if (e & 1) number *= *bp10; } - -#define double_exp10(number, exponent) \ - if ((exponent) < 0) double_negative_exp10(number, exponent) else if ((exponent) > 0) double_positive_exp10(number, exponent) - -#define float_exp10(number, exponent) \ - if ((exponent) < 0) float_negative_exp10(number, exponent) else if ((exponent) > 0) float_positive_exp10(number, exponent) - -#else - -extern const double double_decimal_power10[]; -extern const float float_decimal_power10[]; -extern const double double_decimal_negpower10[]; -extern const float float_decimal_negpower10[]; - -#define double_negative_exp10(number, exponent) ((number) *= double_decimal_negpower10[(exponent) < -308 ? 308 : -(exponent)]) -#define double_positive_exp10(number, exponent) ((number) *= double_decimal_power10[(exponent) > 308 ? 308 : (exponent)]) - -#define float_negative_exp10(number, exponent) ((number) *= float_decimal_negpower10[(exponent) < -38 ? 38 : -(exponent)]) -#define float_positive_exp10(number, exponent) ((number) *= float_decimal_power10[(exponent) > 38 ? 38 : (exponent)]) - -#define double_exp10(number, exponent) ((void)(((exponent) < 0 && double_negative_exp10(number, exponent)) || (((exponent) > 0 && double_positive_exp10(number, exponent))))) -#define float_exp10(number, exponent) ((void)(((exponent) < 0 && float_negative_exp10(number, exponent)) || (((exponent) > 0 && float_positive_exp10(number, exponent))))) - -#endif - -/* pretty common stuff */ - -#define bytes_to_hex(input, size, output) bytes_to_hex_lc(input, size, output) -UTILAPI size_t bytes_to_hex_lc (const void *input, size_t size, uint8_t *output); -UTILAPI size_t bytes_to_hex_uc (const void *input, size_t size, uint8_t *output); -UTILAPI size_t hex_to_bytes (const void *input, size_t size, uint8_t *output); -UTILAPI void print_as_hex (const void *input, size_t bytes); - -#endif
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilplat.h b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilplat.h deleted file mode 100644 index 8838f702b92..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilplat.h +++ /dev/null @@ -1,31 +0,0 @@ - -#ifndef UTIL_PLAT_H -#define UTIL_PLAT_H - -#if defined(_WIN32) || defined(WIN32) -# ifdef _MSC_VER -# if defined(_M_64) || defined(_WIN64) -# define MSVC64 -# else -# define MSVC32 -# endif -# else -# if defined(__MINGW64__) -# define MINGW64 -# else -# if defined(__MINGW32__) -# define MINGW32 -# endif -# endif -# endif -#endif - -#ifdef __GNUC__ -//# define FALLTHRU [[fallthrough]] // c++17 -//# define FALLTHRU [[gnu:fallthrough]] // c++14 -# define FALLTHRU __attribute__((fallthrough)); // C and C++03 -#else -# define FALLTHRU -#endif - -#endif
\ No newline at end of file diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilsha.c b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilsha.c deleted file mode 100644 index 596bf76f72b..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilsha.c +++ /dev/null @@ -1,1065 +0,0 @@ -/* sha2 implementation excerpted from code by Aaron D. Gifford */ - -/* - * AUTHOR: Aaron D. Gifford - http://www.aarongifford.com/ - * - * Copyright (c) 2000-2001, Aaron D. Gifford - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the copyright holder nor the names of contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``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 OR CONTRIBUTOR(S) 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. - * - * $Id: sha2.c,v 1.1 2001/11/08 00:01:51 adg Exp adg $ - */ - -#include <stdio.h> /* FILE */ -#include <string.h> /* memcpy()/memset() or bcopy()/bzero() */ -//#include <assert.h> /* assert() */ -#include "utilsha.h" - -/* - * UNROLLED TRANSFORM LOOP NOTE: - * You can define SHA2_UNROLL_TRANSFORM to use the unrolled transform - * loop version for the hash transform rounds (defined using macros - * later in this file). Either define on the command line, for example: - * - * cc -DSHA2_UNROLL_TRANSFORM -o sha2 sha2.c sha2prog.c - * - * or define below: - * - * #define SHA2_UNROLL_TRANSFORM - * - */ - -/*** SHA-256/384/512 Machine Architecture Definitions *****************/ -/* - * BYTE_ORDER NOTE: - * - * Please make sure that your system defines BYTE_ORDER. If your - * architecture is little-endian, make sure it also defines - * LITTLE_ENDIAN and that the two (BYTE_ORDER and LITTLE_ENDIAN) are - * equivilent. - * - * If your system does not define the above, then you can do so by - * hand like this: - * - * #define LITTLE_ENDIAN 1234 - * #define BIG_ENDIAN 4321 - * - * And for little-endian machines, add: - * - * #define BYTE_ORDER LITTLE_ENDIAN - * - * Or for big-endian machines: - * - * #define BYTE_ORDER BIG_ENDIAN - * - * The FreeBSD machine this was written on defines BYTE_ORDER - * appropriately by including <sys/types.h> (which in turn includes - * <machine/endian.h> where the appropriate definitions are actually - * made). - */ - -#ifndef BYTE_ORDER -#define BYTE_ORDER LITTLE_ENDIAN -#endif - -//#if !defined(BYTE_ORDER) || (BYTE_ORDER != LITTLE_ENDIAN && BYTE_ORDER != BIG_ENDIAN) -//#error Define BYTE_ORDER to be equal to either LITTLE_ENDIAN or BIG_ENDIAN -//#endif - -/* - * Define the following sha2_* types to types of the correct length on - * the native archtecture. Most BSD systems and Linux define u_intXX_t - * types. Machines with very recent ANSI C headers, can use the - * uintXX_t definintions from inttypes.h by defining SHA2_USE_INTTYPES_H - * during compile or in the sha.h header file. - * - * Machines that support neither u_intXX_t nor inttypes.h's uintXX_t - * will need to define these three typedefs below (and the appropriate - * ones in sha.h too) by hand according to their system architecture. - * - * Thank you, Jun-ichiro itojun Hagino, for suggesting using u_intXX_t - * types and pointing out recent ANSI C support for uintXX_t in inttypes.h. - * - * PJ: replace by uintX_t - */ - -//typedef uint8_t sha2_byte; /* Exactly 1 byte */ -//typedef uint32_t sha2_word32; /* Exactly 4 bytes */ -//typedef uint64_t sha2_word64; /* Exactly 8 bytes */ - -/*** SHA-256/384/512 Various Length Definitions ***********************/ -/* NOTE: Most of these are in header */ -#define SHA256_SHORT_BLOCK_LENGTH (SHA256_BLOCK_LENGTH - 8) -#define SHA384_SHORT_BLOCK_LENGTH (SHA384_BLOCK_LENGTH - 16) -#define SHA512_SHORT_BLOCK_LENGTH (SHA512_BLOCK_LENGTH - 16) - - -/*** ENDIAN REVERSAL MACROS *******************************************/ -#if BYTE_ORDER == LITTLE_ENDIAN -#define REVERSE32(w, x) { \ - uint32_t tmp = (w); \ - tmp = (tmp >> 16) | (tmp << 16); \ - (x) = ((tmp & 0xff00ff00UL) >> 8) | ((tmp & 0x00ff00ffUL) << 8); \ -} -#define REVERSE64(w, x) { \ - uint64_t tmp = (w); \ - tmp = (tmp >> 32) | (tmp << 32); \ - tmp = ((tmp & 0xff00ff00ff00ff00ULL) >> 8) | \ - ((tmp & 0x00ff00ff00ff00ffULL) << 8); \ - (x) = ((tmp & 0xffff0000ffff0000ULL) >> 16) | \ - ((tmp & 0x0000ffff0000ffffULL) << 16); \ -} -#endif /* BYTE_ORDER == LITTLE_ENDIAN */ - -/* - * Macro for incrementally adding the unsigned 64-bit integer n to the - * unsigned 128-bit integer (represented using a two-element array of - * 64-bit words): - */ -#define ADDINC128(w,n) { \ - (w)[0] += (uint64_t)(n); \ - if ((w)[0] < (n)) { \ - (w)[1]++; \ - } \ -} - -#define MEMSET_BZERO(p,l) memset((p), 0, (l)) -#define MEMCPY_BCOPY(d,s,l) memcpy((d), (s), (l)) - -/*** THE SIX LOGICAL FUNCTIONS ****************************************/ -/* - * Bit shifting and rotation (used by the six SHA-XYZ logical functions: - * - * NOTE: The naming of R and S appears backwards here (R is a SHIFT and - * S is a ROTATION) because the SHA-256/384/512 description document - * (see http://csrc.nist.gov/cryptval/shs/sha256-384-512.pdf) uses this - * same "backwards" definition. - */ -/* Shift-right (used in SHA-256, SHA-384, and SHA-512): */ -#define R(b,x) ((x) >> (b)) -/* 32-bit Rotate-right (used in SHA-256): */ -#define S32(b,x) (((x) >> (b)) | ((x) << (32 - (b)))) -/* 64-bit Rotate-right (used in SHA-384 and SHA-512): */ -#define S64(b,x) (((x) >> (b)) | ((x) << (64 - (b)))) - -/* Two of six logical functions used in SHA-256, SHA-384, and SHA-512: */ -#define Ch(x,y,z) (((x) & (y)) ^ ((~(x)) & (z))) -#define Maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) - -/* Four of six logical functions used in SHA-256: */ -#define Sigma0_256(x) (S32(2, (x)) ^ S32(13, (x)) ^ S32(22, (x))) -#define Sigma1_256(x) (S32(6, (x)) ^ S32(11, (x)) ^ S32(25, (x))) -#define sigma0_256(x) (S32(7, (x)) ^ S32(18, (x)) ^ R(3 , (x))) -#define sigma1_256(x) (S32(17, (x)) ^ S32(19, (x)) ^ R(10, (x))) - -/* Four of six logical functions used in SHA-384 and SHA-512: */ -#define Sigma0_512(x) (S64(28, (x)) ^ S64(34, (x)) ^ S64(39, (x))) -#define Sigma1_512(x) (S64(14, (x)) ^ S64(18, (x)) ^ S64(41, (x))) -#define sigma0_512(x) (S64( 1, (x)) ^ S64( 8, (x)) ^ R( 7, (x))) -#define sigma1_512(x) (S64(19, (x)) ^ S64(61, (x)) ^ R( 6, (x))) - -static void sha512_last (sha512_state *state); -static void sha256_transform (sha256_state *state, const uint32_t idata[16]); -static void sha512_transform (sha512_state *state, const uint64_t idata[16]); - -/*** SHA-XYZ INITIAL HASH VALUES AND CONSTANTS ************************/ -/* Hash constant words K for SHA-256: */ -static const uint32_t K256[64] = { - 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, - 0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, - 0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL, - 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL, - 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL, - 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, - 0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, - 0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL, - 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL, - 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL, - 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, - 0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, - 0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL, - 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL, - 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL, - 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL -}; - -/* Initial hash value H for SHA-256: */ -static const uint32_t sha256_initial_hash_value[8] = { - 0x6a09e667UL, - 0xbb67ae85UL, - 0x3c6ef372UL, - 0xa54ff53aUL, - 0x510e527fUL, - 0x9b05688cUL, - 0x1f83d9abUL, - 0x5be0cd19UL -}; - -/* Hash constant words K for SHA-384 and SHA-512: */ -static const uint64_t K512[80] = { - 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, - 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL, - 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL, - 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL, - 0xd807aa98a3030242ULL, 0x12835b0145706fbeULL, - 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL, - 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, - 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL, - 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL, - 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL, - 0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL, - 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL, - 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, - 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL, - 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL, - 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL, - 0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL, - 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL, - 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, - 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL, - 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL, - 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL, - 0xd192e819d6ef5218ULL, 0xd69906245565a910ULL, - 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL, - 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, - 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL, - 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL, - 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL, - 0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL, - 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL, - 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, - 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL, - 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL, - 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL, - 0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL, - 0x113f9804bef90daeULL, 0x1b710b35131c471bULL, - 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, - 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL, - 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL, - 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL -}; - -/* Initial hash value H for SHA-384 */ -static const uint64_t sha384_initial_hash_value[8] = { - 0xcbbb9d5dc1059ed8ULL, - 0x629a292a367cd507ULL, - 0x9159015a3070dd17ULL, - 0x152fecd8f70e5939ULL, - 0x67332667ffc00b31ULL, - 0x8eb44a8768581511ULL, - 0xdb0c2e0d64f98fa7ULL, - 0x47b5481dbefa4fa4ULL -}; - -/* Initial hash value H for SHA-512 */ -static const uint64_t sha512_initial_hash_value[8] = { - 0x6a09e667f3bcc908ULL, - 0xbb67ae8584caa73bULL, - 0x3c6ef372fe94f82bULL, - 0xa54ff53a5f1d36f1ULL, - 0x510e527fade682d1ULL, - 0x9b05688c2b3e6c1fULL, - 0x1f83d9abfb41bd6bULL, - 0x5be0cd19137e2179ULL -}; - -/*** SHA-256: *********************************************************/ -sha256_state * sha256_digest_init (sha256_state *state) -{ - MEMCPY_BCOPY(state->words, sha256_initial_hash_value, SHA256_DIGEST_LENGTH); - MEMSET_BZERO(state->buffer, SHA256_BLOCK_LENGTH); - state->bitcount = 0; - return state; -} - -#ifdef SHA2_UNROLL_TRANSFORM - -/* Unrolled SHA-256 round macros: */ - -#if BYTE_ORDER == LITTLE_ENDIAN - -#define ROUND256_0_TO_15(v, a, b, c, d, e, f, g, h) \ - REVERSE32(v, W256[j]); \ - T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + K256[j] + W256[j]; \ - (d) += T1; \ - (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)) - -#else /* BYTE_ORDER == LITTLE_ENDIAN */ - -#define ROUND256_0_TO_15(v, a, b, c, d, e, f, g, h) \ - T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + K256[j] + (W256[j] = v); \ - (d) += T1; \ - (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)) - -#endif /* BYTE_ORDER == LITTLE_ENDIAN */ - -#define ROUND256(a, b, c, d, e, f, g, h) \ - s0 = W256[(j+1)&0x0f]; \ - s0 = sigma0_256(s0); \ - s1 = W256[(j+14)&0x0f]; \ - s1 = sigma1_256(s1); \ - T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + K256[j] + (W256[j&0x0f] += s1 + W256[(j+9)&0x0f] + s0); \ - (d) += T1; \ - (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)) - -static void sha256_transform (sha256_state *state, const uint32_t idata[16]) { - uint32_t a, b, c, d, e, f, g, h, s0, s1; - uint32_t T1, *W256, v; - int j; - - W256 = state->buffer32; - - /* Initialize registers with the prev. intermediate value */ - a = state->words[0]; - b = state->words[1]; - c = state->words[2]; - d = state->words[3]; - e = state->words[4]; - f = state->words[5]; - g = state->words[6]; - h = state->words[7]; - - j = 0; - do { - /* Rounds 0 to 15 (unrolled): */ - v = idata[j]; ROUND256_0_TO_15(v, a, b, c, d, e, f, g, h); ++j; - v = idata[j]; ROUND256_0_TO_15(v, h, a, b, c, d, e, f, g); ++j; - v = idata[j]; ROUND256_0_TO_15(v, g, h, a, b, c, d, e, f); ++j; - v = idata[j]; ROUND256_0_TO_15(v, f, g, h, a, b, c, d, e); ++j; - v = idata[j]; ROUND256_0_TO_15(v, e, f, g, h, a, b, c, d); ++j; - v = idata[j]; ROUND256_0_TO_15(v, d, e, f, g, h, a, b, c); ++j; - v = idata[j]; ROUND256_0_TO_15(v, c, d, e, f, g, h, a, b); ++j; - v = idata[j]; ROUND256_0_TO_15(v, b, c, d, e, f, g, h, a); ++j; - } while (j < 16); - - /* Now for the remaining rounds to 64: */ - do { - ROUND256(a, b, c, d, e, f, g, h); ++j; - ROUND256(h, a, b, c, d, e, f, g); ++j; - ROUND256(g, h, a, b, c, d, e, f); ++j; - ROUND256(f, g, h, a, b, c, d, e); ++j; - ROUND256(e, f, g, h, a, b, c, d); ++j; - ROUND256(d, e, f, g, h, a, b, c); ++j; - ROUND256(c, d, e, f, g, h, a, b); ++j; - ROUND256(b, c, d, e, f, g, h, a); ++j; - } while (j < 64); - - /* Compute the current intermediate hash value */ - state->words[0] += a; - state->words[1] += b; - state->words[2] += c; - state->words[3] += d; - state->words[4] += e; - state->words[5] += f; - state->words[6] += g; - state->words[7] += h; -} - -#else /* SHA2_UNROLL_TRANSFORM */ - -static void sha256_transform (sha256_state *state, const uint32_t idata[16]) { - uint32_t a, b, c, d, e, f, g, h, s0, s1; - uint32_t T1, T2, *W256, v; - int j; - - W256 = state->buffer32; - - /* Initialize registers with the prev. intermediate value */ - a = state->words[0]; - b = state->words[1]; - c = state->words[2]; - d = state->words[3]; - e = state->words[4]; - f = state->words[5]; - g = state->words[6]; - h = state->words[7]; - - j = 0; - do { - v = idata[j]; -#if BYTE_ORDER == LITTLE_ENDIAN - /* Copy data while converting to host byte order */ - REVERSE32(v, W256[j]); - /* Apply the SHA-256 compression function to update a..h */ - T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + W256[j]; -#else /* BYTE_ORDER == LITTLE_ENDIAN */ - /* Apply the SHA-256 compression function to update a..h with copy */ - T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + (W256[j] = v); -#endif /* BYTE_ORDER == LITTLE_ENDIAN */ - T2 = Sigma0_256(a) + Maj(a, b, c); - h = g; - g = f; - f = e; - e = d + T1; - d = c; - c = b; - b = a; - a = T1 + T2; - - j++; - } while (j < 16); - - do { - /* Part of the message block expansion: */ - s0 = W256[(j+1)&0x0f]; - s0 = sigma0_256(s0); - s1 = W256[(j+14)&0x0f]; - s1 = sigma1_256(s1); - - /* Apply the SHA-256 compression function to update a..h */ - T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + (W256[j&0x0f] += s1 + W256[(j+9)&0x0f] + s0); - T2 = Sigma0_256(a) + Maj(a, b, c); - h = g; - g = f; - f = e; - e = d + T1; - d = c; - c = b; - b = a; - a = T1 + T2; - - j++; - } while (j < 64); - - /* Compute the current intermediate hash value */ - state->words[0] += a; - state->words[1] += b; - state->words[2] += c; - state->words[3] += d; - state->words[4] += e; - state->words[5] += f; - state->words[6] += g; - state->words[7] += h; -} - -#endif /* SHA2_UNROLL_TRANSFORM */ - -/* PJ: alignment-safe version */ - -#define data_aligned4(data) (((data - (const uint8_t *)(0UL)) & 3) == 0) -#define data_aligned8(data) (((data - (const uint8_t *)(0ULL)) & 7) == 0) - -static void sha256_transform_aligned (sha256_state *state, const uint8_t *data) { - if (data_aligned4(data)) - { - sha256_transform(state, (const uint32_t *)((const void *)data)); // alignment ok - } - else - { - uint32_t idata[16]; - memcpy(&idata[0], data, 16 * sizeof(uint32_t)); - sha256_transform(state, idata); - } -} - -void sha256_digest_add (sha256_state *state, const void *vdata, size_t len) -{ - unsigned int freespace, usedspace; - const uint8_t *data; - - if (len == 0) /* Calling with no data is valid - we do nothing */ - return; - - data = (const uint8_t *)vdata; - - usedspace = (state->bitcount >> 3) % SHA256_BLOCK_LENGTH; - if (usedspace > 0) - { - /* Calculate how much free space is available in the buffer */ - freespace = SHA256_BLOCK_LENGTH - usedspace; - - if (len >= freespace) - { - /* Fill the buffer completely and process it */ - MEMCPY_BCOPY(&state->buffer[usedspace], data, freespace); - state->bitcount += freespace << 3; - len -= freespace; - data += freespace; - sha256_transform(state, state->buffer32); - } - else - { - /* The buffer is not yet full */ - MEMCPY_BCOPY(&state->buffer[usedspace], data, len); - state->bitcount += len << 3; - return; - } - } - while (len >= SHA256_BLOCK_LENGTH) - { - /* Process as many complete blocks as we can */ - sha256_transform_aligned(state, data); - - state->bitcount += SHA256_BLOCK_LENGTH << 3; - len -= SHA256_BLOCK_LENGTH; - data += SHA256_BLOCK_LENGTH; - } - if (len > 0) - { - /* There's left-overs, so save 'em */ - MEMCPY_BCOPY(state->buffer, data, len); - state->bitcount += len << 3; - } -} - -static void digest_hex (uint8_t digest[], const void *data, size_t size, int flags); - -void sha256_digest_get (sha256_state *state, uint8_t digest[], int flags) { - unsigned int usedspace; - - usedspace = (state->bitcount >> 3) % SHA256_BLOCK_LENGTH; -#if BYTE_ORDER == LITTLE_ENDIAN - /* Convert FROM host byte order */ - REVERSE64(state->bitcount,state->bitcount); -#endif - if (usedspace > 0) - { - /* Begin padding with a 1 bit: */ - state->buffer[usedspace++] = 0x80; - - if (usedspace <= SHA256_SHORT_BLOCK_LENGTH) { - /* Set-up for the last transform: */ - MEMSET_BZERO(&state->buffer[usedspace], SHA256_SHORT_BLOCK_LENGTH - usedspace); - } else { - if (usedspace < SHA256_BLOCK_LENGTH) { - MEMSET_BZERO(&state->buffer[usedspace], SHA256_BLOCK_LENGTH - usedspace); - } - /* Do second-to-last transform: */ - sha256_transform(state, state->buffer32); - - /* And set-up for the last transform: */ - MEMSET_BZERO(state->buffer, SHA256_SHORT_BLOCK_LENGTH); - } - } - else - { - /* Set-up for the last transform: */ - MEMSET_BZERO(state->buffer, SHA256_SHORT_BLOCK_LENGTH); - - /* Begin padding with a 1 bit: */ - *state->buffer = 0x80; - } - /* Set the bit count: */ - //*(uint64_t*)&state->buffer[SHA256_SHORT_BLOCK_LENGTH] = state->bitcount; // aliasing violation warning - state->buffer64[SHA256_SHORT_BLOCK_LENGTH / sizeof(uint64_t)] = state->bitcount; - - /* Final transform: */ - sha256_transform(state, state->buffer32); - -#if BYTE_ORDER == LITTLE_ENDIAN - { - /* Convert TO host byte order */ - int j; - for (j = 0; j < 8; j++) - { - REVERSE32(state->words[j], state->words[j]); - } - } -#endif - if (flags & SHA_HEX) - digest_hex(digest, state->words, SHA256_DIGEST_LENGTH, flags); - else - memcpy(digest, state->words, SHA256_DIGEST_LENGTH); -} - -/*** SHA-512: *********************************************************/ -sha512_state * sha512_digest_init (sha512_state *state) -{ - MEMCPY_BCOPY(state->words, sha512_initial_hash_value, SHA512_DIGEST_LENGTH); - MEMSET_BZERO(state->buffer, SHA512_BLOCK_LENGTH); - state->bitcount[0] = 0; - state->bitcount[1] = 0; - return state; -} - -#ifdef SHA2_UNROLL_TRANSFORM - -/* PJ: ++ operations moved out of macros! */ - -/* Unrolled SHA-512 round macros: */ -#if BYTE_ORDER == LITTLE_ENDIAN - -#define ROUND512_0_TO_15(v, a, b, c, d, e, f, g, h) \ - REVERSE64(v, W512[j]); \ - T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + K512[j] + W512[j]; \ - (d) += T1; \ - (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)) - -#else /* BYTE_ORDER == LITTLE_ENDIAN */ - -#define ROUND512_0_TO_15(v, a, b, c, d, e, f, g, h) \ - T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + K512[j] + (W512[j] = v); \ - (d) += T1; \ - (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)) - -#endif /* BYTE_ORDER == LITTLE_ENDIAN */ - -#define ROUND512(a, b, c, d, e, f, g, h) \ - s0 = W512[(j+1)&0x0f]; \ - s0 = sigma0_512(s0); \ - s1 = W512[(j+14)&0x0f]; \ - s1 = sigma1_512(s1); \ - T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + K512[j] + (W512[j&0x0f] += s1 + W512[(j+9)&0x0f] + s0); \ - (d) += T1; \ - (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)) - -static void sha512_transform (sha512_state *state, const uint64_t idata[16]) -{ - uint64_t a, b, c, d, e, f, g, h, s0, s1; - uint64_t T1, *W512, v; - int j; - - W512 = state->buffer64; - - /* Initialize registers with the prev. intermediate value */ - a = state->words[0]; - b = state->words[1]; - c = state->words[2]; - d = state->words[3]; - e = state->words[4]; - f = state->words[5]; - g = state->words[6]; - h = state->words[7]; - - j = 0; - do { - v = idata[j]; ROUND512_0_TO_15(v, a, b, c, d, e, f, g, h); ++j; - v = idata[j]; ROUND512_0_TO_15(v, h, a, b, c, d, e, f, g); ++j; - v = idata[j]; ROUND512_0_TO_15(v, g, h, a, b, c, d, e, f); ++j; - v = idata[j]; ROUND512_0_TO_15(v, f, g, h, a, b, c, d, e); ++j; - v = idata[j]; ROUND512_0_TO_15(v, e, f, g, h, a, b, c, d); ++j; - v = idata[j]; ROUND512_0_TO_15(v, d, e, f, g, h, a, b, c); ++j; - v = idata[j]; ROUND512_0_TO_15(v, c, d, e, f, g, h, a, b); ++j; - v = idata[j]; ROUND512_0_TO_15(v, b, c, d, e, f, g, h, a); ++j; - } while (j < 16); - - /* Now for the remaining rounds up to 79: */ - do { - ROUND512(a, b, c, d, e, f, g, h); ++j; - ROUND512(h, a, b, c, d, e, f, g); ++j; - ROUND512(g, h, a, b, c, d, e, f); ++j; - ROUND512(f, g, h, a, b, c, d, e); ++j; - ROUND512(e, f, g, h, a, b, c, d); ++j; - ROUND512(d, e, f, g, h, a, b, c); ++j; - ROUND512(c, d, e, f, g, h, a, b); ++j; - ROUND512(b, c, d, e, f, g, h, a); ++j; - } while (j < 80); - - /* Compute the current intermediate hash value */ - state->words[0] += a; - state->words[1] += b; - state->words[2] += c; - state->words[3] += d; - state->words[4] += e; - state->words[5] += f; - state->words[6] += g; - state->words[7] += h; -} - -#else /* SHA2_UNROLL_TRANSFORM */ - -static void sha512_transform (sha512_state *state, const uint64_t idata[16]) -{ - uint64_t a, b, c, d, e, f, g, h, s0, s1; - uint64_t T1, T2, *W512, v; - int j; - - W512 = state->buffer64; - - /* Initialize registers with the prev. intermediate value */ - a = state->words[0]; - b = state->words[1]; - c = state->words[2]; - d = state->words[3]; - e = state->words[4]; - f = state->words[5]; - g = state->words[6]; - h = state->words[7]; - - j = 0; - do { - v = idata[j]; -#if BYTE_ORDER == LITTLE_ENDIAN - /* Convert TO host byte order */ - REVERSE64(v, W512[j]); - /* Apply the SHA-512 compression function to update a..h */ - T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + W512[j]; -#else /* BYTE_ORDER == LITTLE_ENDIAN */ - /* Apply the SHA-512 compression function to update a..h with copy */ - T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + (W512[j] = v); -#endif /* BYTE_ORDER == LITTLE_ENDIAN */ - T2 = Sigma0_512(a) + Maj(a, b, c); - h = g; - g = f; - f = e; - e = d + T1; - d = c; - c = b; - b = a; - a = T1 + T2; - - j++; - } while (j < 16); - - do { - /* Part of the message block expansion: */ - s0 = W512[(j+1)&0x0f]; - s0 = sigma0_512(s0); - s1 = W512[(j+14)&0x0f]; - s1 = sigma1_512(s1); - - /* Apply the SHA-512 compression function to update a..h */ - T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + (W512[j&0x0f] += s1 + W512[(j+9)&0x0f] + s0); - T2 = Sigma0_512(a) + Maj(a, b, c); - h = g; - g = f; - f = e; - e = d + T1; - d = c; - c = b; - b = a; - a = T1 + T2; - - j++; - } while (j < 80); - - /* Compute the current intermediate hash value */ - state->words[0] += a; - state->words[1] += b; - state->words[2] += c; - state->words[3] += d; - state->words[4] += e; - state->words[5] += f; - state->words[6] += g; - state->words[7] += h; -} - -#endif /* SHA2_UNROLL_TRANSFORM */ - -static void sha512_transform_aligned (sha512_state *state, const uint8_t *data) -{ - if (data_aligned8(data)) - { - sha512_transform(state, (const uint64_t *)((const void *)data)); // alignment ok - } - else - { - uint64_t idata[16]; - memcpy(&idata[0], data, 16 * sizeof(uint64_t)); - sha512_transform(state, idata); - } -} - -void sha512_digest_add (sha512_state *state, const void *vdata, size_t len) -{ - unsigned int freespace, usedspace; - const uint8_t *data; - - if (len == 0) /* Calling with no data is valid - we do nothing */ - return; - - /* Sanity check: */ - data = (const uint8_t *)vdata; - - usedspace = (state->bitcount[0] >> 3) % SHA512_BLOCK_LENGTH; - if (usedspace > 0) - { - /* Calculate how much free space is available in the buffer */ - freespace = SHA512_BLOCK_LENGTH - usedspace; - - if (len >= freespace) - { - /* Fill the buffer completely and process it */ - MEMCPY_BCOPY(&state->buffer[usedspace], data, freespace); - ADDINC128(state->bitcount, freespace << 3); - len -= freespace; - data += freespace; - sha512_transform(state, state->buffer64); - } - else - { - /* The buffer is not yet full */ - MEMCPY_BCOPY(&state->buffer[usedspace], data, len); - ADDINC128(state->bitcount, len << 3); - return; - } - } - while (len >= SHA512_BLOCK_LENGTH) - { - /* Process as many complete blocks as we can */ - sha512_transform_aligned(state, data); - - ADDINC128(state->bitcount, SHA512_BLOCK_LENGTH << 3); - len -= SHA512_BLOCK_LENGTH; - data += SHA512_BLOCK_LENGTH; - } - if (len > 0) - { - /* There's left-overs, so save 'em */ - MEMCPY_BCOPY(state->buffer, data, len); - ADDINC128(state->bitcount, len << 3); - } -} - -static void sha512_last (sha512_state *state) -{ - unsigned int usedspace; - - usedspace = (state->bitcount[0] >> 3) % SHA512_BLOCK_LENGTH; -#if BYTE_ORDER == LITTLE_ENDIAN - /* Convert FROM host byte order */ - REVERSE64(state->bitcount[0],state->bitcount[0]); - REVERSE64(state->bitcount[1],state->bitcount[1]); -#endif - if (usedspace > 0) - { - /* Begin padding with a 1 bit: */ - state->buffer[usedspace++] = 0x80; - - if (usedspace <= SHA512_SHORT_BLOCK_LENGTH) { - /* Set-up for the last transform: */ - MEMSET_BZERO(&state->buffer[usedspace], SHA512_SHORT_BLOCK_LENGTH - usedspace); - } else { - if (usedspace < SHA512_BLOCK_LENGTH) { - MEMSET_BZERO(&state->buffer[usedspace], SHA512_BLOCK_LENGTH - usedspace); - } - /* Do second-to-last transform: */ - sha512_transform(state, state->buffer64); - - /* And set-up for the last transform: */ - //MEMSET_BZERO(state->buffer, SHA512_BLOCK_LENGTH - 2); // seems a typo, we overwrite last 16 bytes below - MEMSET_BZERO(state->buffer, SHA512_SHORT_BLOCK_LENGTH); - } - } - else - { - /* Prepare for final transform: */ - MEMSET_BZERO(state->buffer, SHA512_SHORT_BLOCK_LENGTH); - - /* Begin padding with a 1 bit: */ - *state->buffer = 0x80; - } - /* Store the length of input data (in bits): */ - //*(uint64_t*)&state->buffer[SHA512_SHORT_BLOCK_LENGTH] = state->bitcount[1]; // aliasing violation warning - //*(uint64_t*)&state->buffer[SHA512_SHORT_BLOCK_LENGTH+8] = state->bitcount[0]; - state->buffer64[SHA512_SHORT_BLOCK_LENGTH / sizeof(uint64_t)] = state->bitcount[1]; - state->buffer64[SHA512_SHORT_BLOCK_LENGTH / sizeof(uint64_t) + 1] = state->bitcount[0]; - - /* Final transform: */ - sha512_transform(state, state->buffer64); -} - -void sha512_digest_get (sha512_state *state, uint8_t digest[], int flags) -{ - /* If no digest buffer is passed, we don't bother doing this: */ - sha512_last(state); - - /* Save the hash data for output: */ -#if BYTE_ORDER == LITTLE_ENDIAN - { - /* Convert TO host byte order */ - int j; - for (j = 0; j < 8; j++) - { - REVERSE64(state->words[j], state->words[j]); - } - } -#endif - if (flags & SHA_HEX) - digest_hex(digest, state->words, SHA512_DIGEST_LENGTH, flags); - else - memcpy(digest, state->words, SHA512_DIGEST_LENGTH); -} - -/*** SHA-384: *********************************************************/ -sha384_state * sha384_digest_init (sha384_state *state) -{ - MEMCPY_BCOPY(state->words, sha384_initial_hash_value, SHA512_DIGEST_LENGTH); - MEMSET_BZERO(state->buffer, SHA384_BLOCK_LENGTH); - state->bitcount[0] = state->bitcount[1] = 0; - return state; -} - -void sha384_digest_add (sha384_state *state, const void *data, size_t len) -{ - sha512_digest_add((sha512_state *)state, data, len); -} - -void sha384_digest_get (sha384_state *state, uint8_t digest[], int flags) -{ - sha512_last((sha512_state *)state); - - /* Save the hash data for output: */ -#if BYTE_ORDER == LITTLE_ENDIAN - { - /* Convert TO host byte order */ - int j; - for (j = 0; j < 6; j++) - { - REVERSE64(state->words[j], state->words[j]); - } - } -#endif - if (flags & SHA_HEX) - digest_hex(digest, state->words, SHA384_DIGEST_LENGTH, flags); - else - memcpy(digest, state->words, SHA384_DIGEST_LENGTH); -} - -/* hex output */ - -static void digest_hex (uint8_t digest[], const void *data, size_t size, int flags) -{ - const char *alphabet; - const uint8_t *bytes; - size_t i; - - bytes = (const uint8_t *)data; - alphabet = (flags & SHA_LCHEX) ? "0123456789abcdef" : "0123456789ABCDEF"; - for (i = 0; i < size; ++i, ++bytes) - { - *digest++ = (uint8_t)alphabet[(*bytes) >> 4]; - *digest++ = (uint8_t)alphabet[(*bytes) & 15]; - } - *digest = 0; -} - -/* string checksum */ - -void sha256_digest (const void *data, size_t size, uint8_t digest[], int flags) -{ - sha256_state state; - sha256_digest_init(&state); - sha256_digest_add(&state, data, size); - sha256_digest_get(&state, digest, flags); -} - -void sha384_digest (const void *data, size_t size, uint8_t digest[], int flags) -{ - sha384_state state; - sha384_digest_init(&state); - sha384_digest_add(&state, data, size); - sha384_digest_get(&state, digest, flags); -} - -void sha512_digest (const void *data, size_t size, uint8_t digest[], int flags) -{ - sha512_state state; - sha512_digest_init(&state); - sha512_digest_add(&state, data, size); - sha512_digest_get(&state, digest, flags); -} - -/* file checksum */ - -#define DIGEST_BUFFER_SIZE 4096 - -int sha256_digest_add_file (sha256_state *state, const char *filename) -{ - FILE *fh; - uint8_t buffer[DIGEST_BUFFER_SIZE]; - size_t read; - - if ((fh = fopen(filename, "rb")) == NULL) - return 0; - do { - read = fread(buffer, 1, DIGEST_BUFFER_SIZE, fh); - sha256_digest_add(state, buffer, read); - } while (read == DIGEST_BUFFER_SIZE); - fclose(fh); - return 1; -} - -int sha256_digest_file (const char *filename, uint8_t digest[], int flags) -{ - sha256_state state; - - sha256_digest_init(&state); - if (sha256_digest_add_file(&state, filename)) - { - sha256_digest_get(&state, digest, flags); - return 1; - } - return 0; -} - -int sha384_digest_add_file (sha384_state *state, const char *filename) -{ - FILE *fh; - uint8_t buffer[DIGEST_BUFFER_SIZE]; - size_t read; - - if ((fh = fopen(filename, "rb")) == NULL) - return 0; - do { - read = fread(buffer, 1, DIGEST_BUFFER_SIZE, fh); - sha384_digest_add(state, buffer, read); - } while (read == DIGEST_BUFFER_SIZE); - fclose(fh); - return 1; -} - -int sha384_digest_file (const char *filename, uint8_t digest[], int flags) -{ - sha384_state state; - - sha384_digest_init(&state); - if (sha384_digest_add_file(&state, filename)) - { - sha384_digest_get(&state, digest, flags); - return 1; - } - return 0; -} - -int sha512_digest_add_file (sha512_state *state, const char *filename) -{ - FILE *fh; - uint8_t buffer[DIGEST_BUFFER_SIZE]; - size_t read; - - if ((fh = fopen(filename, "rb")) == NULL) - return 0; - do { - read = fread(buffer, 1, DIGEST_BUFFER_SIZE, fh); - sha512_digest_add(state, buffer, read); - } while (read == DIGEST_BUFFER_SIZE); - fclose(fh); - return 1; -} - -int sha512_digest_file (const char *filename, uint8_t digest[], int flags) -{ - sha512_state state; - - sha512_digest_init(&state); - if (sha512_digest_add_file(&state, filename)) - { - sha512_digest_get(&state, digest, flags); - return 1; - } - return 0; -} diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilsha.h b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilsha.h deleted file mode 100644 index 6c9b1bdc9c0..00000000000 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilsha.h +++ /dev/null @@ -1,79 +0,0 @@ -/* sha2 implementation excerpted from code by Aaron D. Gifford */ - -#ifndef UTIL_SHA_H -#define UTIL_SHA_H - -#include <stddef.h> -#include <stdint.h> -#include "utildecl.h" - -#define SHA256_BLOCK_LENGTH 64 -#define SHA256_DIGEST_LENGTH 32 -#define SHA256_STRING_LENGTH (SHA256_DIGEST_LENGTH * 2 + 1) -#define SHA384_BLOCK_LENGTH 128 -#define SHA384_DIGEST_LENGTH 48 -#define SHA384_STRING_LENGTH (SHA384_DIGEST_LENGTH * 2 + 1) -#define SHA512_BLOCK_LENGTH 128 -#define SHA512_DIGEST_LENGTH 64 -#define SHA512_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1) - -//#define sha256_state sha256_state_t -//#define sha384_state sha384_state_t -//#define sha512_state sha512_state_t - -typedef struct { - uint32_t words[8]; - uint64_t bitcount; - union { - uint8_t buffer[SHA256_BLOCK_LENGTH]; - uint32_t buffer32[SHA256_BLOCK_LENGTH / sizeof(uint32_t)]; - uint64_t buffer64[SHA256_BLOCK_LENGTH / sizeof(uint64_t)]; - }; -} sha256_state; - -typedef struct { - uint64_t words[8]; - uint64_t bitcount[2]; - union { - uint8_t buffer[SHA512_BLOCK_LENGTH]; - uint64_t buffer64[SHA512_BLOCK_LENGTH / sizeof(uint64_t)]; - }; -} sha512_state; - -typedef sha512_state sha384_state; - -enum { - SHA_BYTES = 0, - SHA_UCHEX = (1<<0), - SHA_LCHEX = (1<<1) -}; - -#define SHA_DEFAULT SHA_BYTES -#define SHA_HEX (SHA_UCHEX|SHA_LCHEX) - -UTILAPI sha256_state * sha256_digest_init (sha256_state *state); -UTILAPI sha384_state * sha384_digest_init (sha384_state *state); -UTILAPI sha512_state * sha512_digest_init (sha512_state *state); - -UTILAPI void sha256_digest_add (sha256_state *state, const void *data, size_t size); -UTILAPI void sha384_digest_add (sha384_state *state, const void *data, size_t size); -UTILAPI void sha512_digest_add (sha512_state *state, const void *data, size_t size); - -UTILAPI void sha256_digest_get (sha256_state *state, uint8_t digest[], int flags); -UTILAPI void sha384_digest_get (sha384_state *state, uint8_t digest[], int flags); -UTILAPI void sha512_digest_get (sha512_state *state, uint8_t digest[], int flags); - -UTILAPI void sha256_digest (const void *data, size_t size, uint8_t digest[], int flags); -UTILAPI void sha384_digest (const void *data, size_t size, uint8_t digest[], int flags); -UTILAPI void sha512_digest (const void *data, size_t size, uint8_t digest[], int flags); - -UTILAPI int sha256_digest_add_file (sha256_state *state, const char *filename); -UTILAPI int sha256_digest_file (const char *filename, uint8_t digest[], int flags); - -UTILAPI int sha384_digest_add_file (sha384_state *state, const char *filename); -UTILAPI int sha384_digest_file (const char *filename, uint8_t digest[], int flags); - -UTILAPI int sha512_digest_add_file (sha512_state *state, const char *filename); -UTILAPI int sha512_digest_file (const char *filename, uint8_t digest[], int flags); - -#endif diff --git a/Build/source/texk/web2c/luatexdir/luatex.c b/Build/source/texk/web2c/luatexdir/luatex.c index 3acf5ba05f5..d7414ef3fd9 100644 --- a/Build/source/texk/web2c/luatexdir/luatex.c +++ b/Build/source/texk/web2c/luatexdir/luatex.c @@ -32,9 +32,9 @@ stick to "0" upto "9" so users can expect a number represented as string. */ -int luatex_version = 112; +int luatex_version = 113; int luatex_revision = '0'; -const char *luatex_version_string = "1.12.0"; +const char *luatex_version_string = "1.13.0"; const char *engine_name = my_name; #include <kpathsea/c-ctype.h> diff --git a/Build/source/texk/web2c/luatexdir/luatex_svnversion.h b/Build/source/texk/web2c/luatexdir/luatex_svnversion.h index 3cce7d0b1be..057de518b2c 100644 --- a/Build/source/texk/web2c/luatexdir/luatex_svnversion.h +++ b/Build/source/texk/web2c/luatexdir/luatex_svnversion.h @@ -1 +1 @@ -#define luatex_svn_revision 7306 +#define luatex_svn_revision 7333 diff --git a/Build/source/texk/web2c/luatexdir/tex/commands.c b/Build/source/texk/web2c/luatexdir/tex/commands.c index f78d8bb612e..261f23f4a83 100644 --- a/Build/source/texk/web2c/luatexdir/tex/commands.c +++ b/Build/source/texk/web2c/luatexdir/tex/commands.c @@ -175,6 +175,7 @@ void initialize_commands(void) primitive_luatex("breakafterdirmode", assign_int_cmd, int_base + break_after_dir_mode_code, int_base); primitive_luatex("exceptionpenalty", assign_int_cmd, int_base + exception_penalty_code, int_base); primitive_luatex("fixupboxesmode", assign_int_cmd, int_base + fixup_boxes_code, int_base); + primitive_luatex("glyphdimensionsmode", assign_int_cmd, int_base + glyph_dimensions_code, int_base); /*tex diff --git a/Build/source/texk/web2c/luatexdir/tex/dumpdata.c b/Build/source/texk/web2c/luatexdir/tex/dumpdata.c index fdd586afaf7..215cd686fd2 100644 --- a/Build/source/texk/web2c/luatexdir/tex/dumpdata.c +++ b/Build/source/texk/web2c/luatexdir/tex/dumpdata.c @@ -32,7 +32,7 @@ with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */ -#define FORMAT_ID (907+52) +#define FORMAT_ID (907+53) #if ((FORMAT_ID>=0) && (FORMAT_ID<=256)) #error Wrong value for FORMAT_ID. #endif diff --git a/Build/source/texk/web2c/luatexdir/tex/equivalents.h b/Build/source/texk/web2c/luatexdir/tex/equivalents.h index 3ff9ac16dbe..83117c64fa1 100644 --- a/Build/source/texk/web2c/luatexdir/tex/equivalents.h +++ b/Build/source/texk/web2c/luatexdir/tex/equivalents.h @@ -308,8 +308,9 @@ the |number_regs| \.{\\dimen} registers. # define copy_lua_input_nodes_code 115 # define suppress_primitive_error_code 116 # define fixup_boxes_code 117 +# define glyph_dimensions_code 118 -# define math_option_code (suppress_primitive_error_code+1) +# define math_option_code 119 # define mathoption_int_base_code (math_option_code+1) /* one reserve */ # define mathoption_int_last_code (mathoption_int_base_code+8) @@ -809,6 +810,7 @@ extern halfword last_cs_name; #define cur_font_par equiv(cur_font_loc) #define fixup_boxes_par int_par(fixup_boxes_code) +#define glyph_dimensions_par int_par(glyph_dimensions_code) /* */ diff --git a/Build/source/texk/web2c/luatexdir/tex/mlist.c b/Build/source/texk/web2c/luatexdir/tex/mlist.c index 8223df4d1a0..43db6adbbb2 100644 --- a/Build/source/texk/web2c/luatexdir/tex/mlist.c +++ b/Build/source/texk/web2c/luatexdir/tex/mlist.c @@ -1246,7 +1246,14 @@ static void stack_glue_into_box(pointer b, scaled min, scaled max) { /*tex Size code corresponding to |cur_style|: */ -int cur_size; +int cur_size = 0; + +/*tex A few state variables: */ + +halfword del_height = 0; +halfword del_depth = 0; +halfword del_width = 0; +halfword del_shift = 0; static pointer get_delim_box(internal_font_number fnt, halfword chr, scaled v, scaled min_overlap, int horizontal, halfword att) { @@ -1538,6 +1545,20 @@ static pointer do_delimiter(pointer q, pointer d, int s, scaled v, boolean flat, boolean do_parts = false; boolean parts_done = false; extinfo *ext; + + if (d && ! small_fam(d) && ! large_fam(d) && ! small_char(d) && ! large_char(d)) { + halfword b = new_null_box(); + subtype(b) = math_v_delimiter_list; + height(b) = del_height; + depth(b) = del_depth; + width(b) = del_width; + shift_amount(b) = del_shift; + node_attr(b) = node_attr(d); + node_attr(d) = null; + flush_node(d); + return b; + } + f = null_font; c = 0; if (d == null) { @@ -1688,6 +1709,12 @@ static pointer do_delimiter(pointer q, pointer d, int s, scaled v, boolean flat, } DONE: delete_attribute_ref(att); + + del_height = height(b); + del_depth = depth(b); + del_width = width(b); + del_shift = shift_amount(b); + return b; } diff --git a/Build/source/texk/web2c/luatexdir/tex/mlist.h b/Build/source/texk/web2c/luatexdir/tex/mlist.h index 1a15afe3c04..dc08e0cdd6f 100644 --- a/Build/source/texk/web2c/luatexdir/tex/mlist.h +++ b/Build/source/texk/web2c/luatexdir/tex/mlist.h @@ -24,6 +24,11 @@ extern int cur_size; +extern halfword del_width; +extern halfword del_height; +extern halfword del_depth; +extern halfword del_shift; + extern void run_mlist_to_hlist(halfword, boolean, int); extern void mlist_to_hlist(halfword, boolean, int); extern void fixup_math_parameters(int fam_id, int size_id, int f, int lvl); diff --git a/Build/source/texk/web2c/luatexdir/tex/texnodes.c b/Build/source/texk/web2c/luatexdir/tex/texnodes.c index 6f1a6280eee..0d7bcd5dec2 100644 --- a/Build/source/texk/web2c/luatexdir/tex/texnodes.c +++ b/Build/source/texk/web2c/luatexdir/tex/texnodes.c @@ -4475,7 +4475,16 @@ halfword new_char(int f, int c) \.{\\rightghost}, respectively. They are going to be removed by |new_ligkern|, at the end of which they are no longer needed. - Here are a few handy helpers used by the list output routines. + Here are a few handy helpers used by the list output routines. The yoffset + has some history but we now give some control over its treatment: + + 0: what we had before + 1: compensate height and depth + 2: compensate height and depth, take max + 3: we keep height and depth + + The modes are controlled by a variable because we need to retain downward + compatibility. */ @@ -4487,20 +4496,24 @@ scaled glyph_width(halfword p) scaled glyph_height(halfword p) { - scaled w = char_height(font(p), character(p)) + y_displace(p); - if (w < 0) - w = 0; - return w; + scaled h = char_height(font(p), character(p)); + scaled y = y_displace(p); + if ((glyph_dimensions_par == 0) || (glyph_dimensions_par == 1) || (glyph_dimensions_par == 2 && y > 0)) + h += y; + if (h < 0) + h = 0; + return h; } -scaled glyph_depth(halfword p) +scaled glyph_depth(halfword p) /* not used */ { - scaled w = char_depth(font(p), character(p)); - if (y_displace(p) > 0) - w = w - y_displace(p); - if (w < 0) - w = 0; - return w; + scaled d = char_depth(font(p), character(p)); + scaled y = y_displace(p); + if ((glyph_dimensions_par == 0 && y > 0) || (glyph_dimensions_par == 1) || (glyph_dimensions_par == 2 && y < 0)) + d -= y; + if (d < 0) + d = 0; + return d; } /*tex diff --git a/Build/source/texk/web2c/man/Makefile.in b/Build/source/texk/web2c/man/Makefile.in index 371cf90ae9b..07c303fb34e 100644 --- a/Build/source/texk/web2c/man/Makefile.in +++ b/Build/source/texk/web2c/man/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -137,6 +137,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/web2c-disable.m4 \ $(top_srcdir)/../../m4/kpse-mpfr-flags.m4 \ $(top_srcdir)/../../m4/kpse-pixman-flags.m4 \ $(top_srcdir)/../../m4/kpse-poppler-flags.m4 \ + $(top_srcdir)/../../m4/kpse-pplib-flags.m4 \ $(top_srcdir)/../../m4/kpse-ptexenc-flags.m4 \ $(top_srcdir)/../../m4/kpse-socket-libs.m4 \ $(top_srcdir)/../../m4/kpse-teckit-flags.m4 \ @@ -346,6 +347,9 @@ PKG_CONFIG = @PKG_CONFIG@ POPPLER_DEPEND = @POPPLER_DEPEND@ POPPLER_INCLUDES = @POPPLER_INCLUDES@ POPPLER_LIBS = @POPPLER_LIBS@ +PPLIB_DEPEND = @PPLIB_DEPEND@ +PPLIB_INCLUDES = @PPLIB_INCLUDES@ +PPLIB_LIBS = @PPLIB_LIBS@ PTEXENC_DEPEND = @PTEXENC_DEPEND@ PTEXENC_INCLUDES = @PTEXENC_INCLUDES@ PTEXENC_LIBS = @PTEXENC_LIBS@ diff --git a/Build/source/texk/web2c/omegafonts/Makefile.in b/Build/source/texk/web2c/omegafonts/Makefile.in index 2e2dae746ae..98bf840d8dd 100644 --- a/Build/source/texk/web2c/omegafonts/Makefile.in +++ b/Build/source/texk/web2c/omegafonts/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -119,6 +119,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/web2c-disable.m4 \ $(top_srcdir)/../../m4/kpse-mpfr-flags.m4 \ $(top_srcdir)/../../m4/kpse-pixman-flags.m4 \ $(top_srcdir)/../../m4/kpse-poppler-flags.m4 \ + $(top_srcdir)/../../m4/kpse-pplib-flags.m4 \ $(top_srcdir)/../../m4/kpse-ptexenc-flags.m4 \ $(top_srcdir)/../../m4/kpse-socket-libs.m4 \ $(top_srcdir)/../../m4/kpse-teckit-flags.m4 \ @@ -593,6 +594,9 @@ PKG_CONFIG = @PKG_CONFIG@ POPPLER_DEPEND = @POPPLER_DEPEND@ POPPLER_INCLUDES = @POPPLER_INCLUDES@ POPPLER_LIBS = @POPPLER_LIBS@ +PPLIB_DEPEND = @PPLIB_DEPEND@ +PPLIB_INCLUDES = @PPLIB_INCLUDES@ +PPLIB_LIBS = @PPLIB_LIBS@ PTEXENC_DEPEND = @PTEXENC_DEPEND@ PTEXENC_INCLUDES = @PTEXENC_INCLUDES@ PTEXENC_LIBS = @PTEXENC_LIBS@ diff --git a/Build/source/texk/web2c/otps/Makefile.in b/Build/source/texk/web2c/otps/Makefile.in index a6b63930f99..7b19cf9116c 100644 --- a/Build/source/texk/web2c/otps/Makefile.in +++ b/Build/source/texk/web2c/otps/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -119,6 +119,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/web2c-disable.m4 \ $(top_srcdir)/../../m4/kpse-mpfr-flags.m4 \ $(top_srcdir)/../../m4/kpse-pixman-flags.m4 \ $(top_srcdir)/../../m4/kpse-poppler-flags.m4 \ + $(top_srcdir)/../../m4/kpse-pplib-flags.m4 \ $(top_srcdir)/../../m4/kpse-ptexenc-flags.m4 \ $(top_srcdir)/../../m4/kpse-socket-libs.m4 \ $(top_srcdir)/../../m4/kpse-teckit-flags.m4 \ @@ -627,6 +628,9 @@ PKG_CONFIG = @PKG_CONFIG@ POPPLER_DEPEND = @POPPLER_DEPEND@ POPPLER_INCLUDES = @POPPLER_INCLUDES@ POPPLER_LIBS = @POPPLER_LIBS@ +PPLIB_DEPEND = @PPLIB_DEPEND@ +PPLIB_INCLUDES = @PPLIB_INCLUDES@ +PPLIB_LIBS = @PPLIB_LIBS@ PTEXENC_DEPEND = @PTEXENC_DEPEND@ PTEXENC_INCLUDES = @PTEXENC_INCLUDES@ PTEXENC_LIBS = @PTEXENC_LIBS@ diff --git a/Build/source/texk/web2c/otps/win32/Makefile.in b/Build/source/texk/web2c/otps/win32/Makefile.in index c7e88f6f99f..ec8b9caa2cd 100644 --- a/Build/source/texk/web2c/otps/win32/Makefile.in +++ b/Build/source/texk/web2c/otps/win32/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -116,6 +116,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/web2c-disable.m4 \ $(top_srcdir)/../../m4/kpse-mpfr-flags.m4 \ $(top_srcdir)/../../m4/kpse-pixman-flags.m4 \ $(top_srcdir)/../../m4/kpse-poppler-flags.m4 \ + $(top_srcdir)/../../m4/kpse-pplib-flags.m4 \ $(top_srcdir)/../../m4/kpse-ptexenc-flags.m4 \ $(top_srcdir)/../../m4/kpse-socket-libs.m4 \ $(top_srcdir)/../../m4/kpse-teckit-flags.m4 \ @@ -347,6 +348,9 @@ PKG_CONFIG = @PKG_CONFIG@ POPPLER_DEPEND = @POPPLER_DEPEND@ POPPLER_INCLUDES = @POPPLER_INCLUDES@ POPPLER_LIBS = @POPPLER_LIBS@ +PPLIB_DEPEND = @PPLIB_DEPEND@ +PPLIB_INCLUDES = @PPLIB_INCLUDES@ +PPLIB_LIBS = @PPLIB_LIBS@ PTEXENC_DEPEND = @PTEXENC_DEPEND@ PTEXENC_INCLUDES = @PTEXENC_INCLUDES@ PTEXENC_LIBS = @PTEXENC_LIBS@ diff --git a/Build/source/texk/web2c/web2c/Makefile.in b/Build/source/texk/web2c/web2c/Makefile.in index 63607537c1c..ea64754404a 100644 --- a/Build/source/texk/web2c/web2c/Makefile.in +++ b/Build/source/texk/web2c/web2c/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -212,8 +212,8 @@ am__can_run_installinfo = \ esac DATA = $(dist_noinst_DATA) $(nodist_noinst_DATA) HEADERS = $(noinst_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - c-auto.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)c-auto.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -691,10 +691,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -737,8 +733,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -939,19 +933,18 @@ uninstall-am: check-am clean clean-cscope clean-generic clean-libtool \ clean-noinstPROGRAMS cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ - dist-xz dist-zip dist-zstd distcheck distclean \ - distclean-compile distclean-generic distclean-hdr \ - distclean-libtool distclean-local distclean-tags \ - distcleancheck distdir distuninstallcheck dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-am uninstall uninstall-am + dist-xz dist-zip distcheck distclean distclean-compile \ + distclean-generic distclean-hdr distclean-libtool \ + distclean-local distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile diff --git a/Build/source/texk/web2c/web2c/aclocal.m4 b/Build/source/texk/web2c/web2c/aclocal.m4 index 8772b88093e..b15fb14c037 100644 --- a/Build/source/texk/web2c/web2c/aclocal.m4 +++ b/Build/source/texk/web2c/web2c/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/web2c/web2c/configure b/Build/source/texk/web2c/web2c/configure index 95d4c52fdca..8669dd726aa 100755 --- a/Build/source/texk/web2c/web2c/configure +++ b/Build/source/texk/web2c/web2c/configure @@ -15737,9 +15737,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/web2c/window/Makefile.in b/Build/source/texk/web2c/window/Makefile.in index 6bf0ed05e48..7083ae129fe 100644 --- a/Build/source/texk/web2c/window/Makefile.in +++ b/Build/source/texk/web2c/window/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -116,6 +116,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/web2c-disable.m4 \ $(top_srcdir)/../../m4/kpse-mpfr-flags.m4 \ $(top_srcdir)/../../m4/kpse-pixman-flags.m4 \ $(top_srcdir)/../../m4/kpse-poppler-flags.m4 \ + $(top_srcdir)/../../m4/kpse-pplib-flags.m4 \ $(top_srcdir)/../../m4/kpse-ptexenc-flags.m4 \ $(top_srcdir)/../../m4/kpse-socket-libs.m4 \ $(top_srcdir)/../../m4/kpse-teckit-flags.m4 \ @@ -362,6 +363,9 @@ PKG_CONFIG = @PKG_CONFIG@ POPPLER_DEPEND = @POPPLER_DEPEND@ POPPLER_INCLUDES = @POPPLER_INCLUDES@ POPPLER_LIBS = @POPPLER_LIBS@ +PPLIB_DEPEND = @PPLIB_DEPEND@ +PPLIB_INCLUDES = @PPLIB_INCLUDES@ +PPLIB_LIBS = @PPLIB_LIBS@ PTEXENC_DEPEND = @PTEXENC_DEPEND@ PTEXENC_INCLUDES = @PTEXENC_INCLUDES@ PTEXENC_LIBS = @PTEXENC_LIBS@ diff --git a/Build/source/texk/xdvik/Makefile.in b/Build/source/texk/xdvik/Makefile.in index 54156750f24..32a230055b9 100644 --- a/Build/source/texk/xdvik/Makefile.in +++ b/Build/source/texk/xdvik/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -316,8 +316,8 @@ am__recursive_targets = \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir distdir-am dist dist-all distcheck -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ - c-auto.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)c-auto.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -1238,10 +1238,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1284,8 +1280,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1612,25 +1606,24 @@ uninstall-man: uninstall-man1 clean-binPROGRAMS clean-cscope clean-generic clean-libtool \ clean-noinstLIBRARIES cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ - dist-xz dist-zip dist-zstd distcheck distclean \ - distclean-compile distclean-generic distclean-hdr \ - distclean-libtool distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-binPROGRAMS install-binSCRIPTS \ - install-data install-data-am install-data-hook \ - install-desktopDATA install-dist_pixmapDATA \ - install-dist_xdviDATA install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-man1 install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ - uninstall-binPROGRAMS uninstall-binSCRIPTS \ - uninstall-desktopDATA uninstall-dist_pixmapDATA \ - uninstall-dist_xdviDATA uninstall-hook uninstall-man \ - uninstall-man1 + dist-xz dist-zip distcheck distclean distclean-compile \ + distclean-generic distclean-hdr distclean-libtool \ + distclean-tags distcleancheck distdir distuninstallcheck dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-binSCRIPTS install-data \ + install-data-am install-data-hook install-desktopDATA \ + install-dist_pixmapDATA install-dist_xdviDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \ + uninstall-binSCRIPTS uninstall-desktopDATA \ + uninstall-dist_pixmapDATA uninstall-dist_xdviDATA \ + uninstall-hook uninstall-man uninstall-man1 .PRECIOUS: Makefile diff --git a/Build/source/texk/xdvik/aclocal.m4 b/Build/source/texk/xdvik/aclocal.m4 index 58ac0e62ae1..deca76f11dd 100644 --- a/Build/source/texk/xdvik/aclocal.m4 +++ b/Build/source/texk/xdvik/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/xdvik/configure b/Build/source/texk/xdvik/configure index c98e9b1c6bb..ace80bf98db 100755 --- a/Build/source/texk/xdvik/configure +++ b/Build/source/texk/xdvik/configure @@ -20914,9 +20914,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/xdvik/squeeze/Makefile.in b/Build/source/texk/xdvik/squeeze/Makefile.in index a671885c5fb..acf7bfa7b67 100644 --- a/Build/source/texk/xdvik/squeeze/Makefile.in +++ b/Build/source/texk/xdvik/squeeze/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -472,10 +472,6 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) -dist-zstd: distdir - tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst - $(am__post_remove_distdir) - dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -518,8 +514,6 @@ distcheck: dist eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ - *.tar.zst*) \ - zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -699,17 +693,17 @@ uninstall-am: check-am clean clean-cscope clean-generic clean-noinstPROGRAMS \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ - dist-zstd distcheck distclean distclean-compile \ - distclean-generic distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ - tags tags-am uninstall uninstall-am + distcheck distclean distclean-compile distclean-generic \ + distclean-tags distcleancheck distdir distuninstallcheck dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am .PRECIOUS: Makefile diff --git a/Build/source/texk/xdvik/squeeze/aclocal.m4 b/Build/source/texk/xdvik/squeeze/aclocal.m4 index 85308c30617..79e0b598557 100644 --- a/Build/source/texk/xdvik/squeeze/aclocal.m4 +++ b/Build/source/texk/xdvik/squeeze/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.2], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.2])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -371,9 +371,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE="gmake" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -400,7 +398,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -597,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -618,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +638,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -675,7 +673,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -718,7 +716,7 @@ AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,7 +755,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -786,7 +784,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -833,7 +831,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -852,7 +850,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -933,7 +931,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,7 +991,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1021,7 +1019,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1040,7 +1038,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/Build/source/texk/xdvik/squeeze/configure b/Build/source/texk/xdvik/squeeze/configure index ed5e7df2be1..9615b79f8c6 100755 --- a/Build/source/texk/xdvik/squeeze/configure +++ b/Build/source/texk/xdvik/squeeze/configure @@ -5611,9 +5611,7 @@ $as_echo X/"$am_mf" | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. If GNU make was not used, consider - re-running the configure script with MAKE=\"gmake\" (or whatever is - necessary). You can also try re-running configure with the + for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } diff --git a/Build/source/texk/xdvik/tests/Makefile.in b/Build/source/texk/xdvik/tests/Makefile.in index 5ecb5490037..01ae032ebeb 100644 --- a/Build/source/texk/xdvik/tests/Makefile.in +++ b/Build/source/texk/xdvik/tests/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.2 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, |