pax_global_header00006660000000000000000000000064147752576270014540gustar00rootroot0000000000000052 comment=17059ab27ce491f1edac150da2b7e2011f79b800 therion-6.3.4/000077500000000000000000000000001477525762700132225ustar00rootroot00000000000000therion-6.3.4/.clang-tidy000066400000000000000000000021351477525762700152570ustar00rootroot00000000000000--- Checks: '-*, modernize-use-override, clang-analyzer-cplusplus*, clang-analyzer-unix*, misc-definitions-in-headers, bugprone*, -bugprone-easily-swappable-parameters, -bugprone-macro-parentheses, -bugprone-narrowing-conversions, -bugprone-suspicious-enum-usage, -bugprone-integer-division, -bugprone-implicit-widening-of-multiplication-result, -bugprone-incorrect-roundings, -bugprone-suspicious-include, -bugprone-unhandled-self-assignment, -bugprone-branch-clone, -bugprone-assignment-in-if-condition, -bugprone-switch-missing-default-case, -bugprone-chained-comparison, performance-for-range-copy, cppcoreguidelines-no-malloc, cppcoreguidelines-pro-type-member-init' WarningsAsErrors: '*' HeaderFilterRegex: '.*' FormatStyle: none CheckOptions: - key: modernize-use-override.IgnoreDestructors value: '1' - key: modernize-use-nullptr.NullMacros value: 'NULL' ... therion-6.3.4/.devcontainer/000077500000000000000000000000001477525762700157615ustar00rootroot00000000000000therion-6.3.4/.devcontainer/Dockerfile000066400000000000000000000012141477525762700177510ustar00rootroot00000000000000FROM mcr.microsoft.com/devcontainers/base:noble ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update -qq && apt-get upgrade -y && apt-get install -y \ bash-completion \ bwidget \ catch2 \ clang \ clang-tidy \ cmake \ g++ \ ghostscript \ git \ imagemagick \ lcdf-typetools \ libfmt-dev \ libfreetype6-dev \ libjpeg-dev \ libpng-dev \ libproj-dev \ libtk-img-dev \ libvtk9-dev \ libwxgtk3.2-dev \ ninja-build \ python3 \ survex \ tcl-dev \ texlive-binaries \ texlive-lang-cyrillic \ texlive-lang-czechslovak \ texlive-metapost \ zlib1g-dev therion-6.3.4/.devcontainer/devcontainer.json000066400000000000000000000020261477525762700213350ustar00rootroot00000000000000// For format details, see https://aka.ms/devcontainer.json. For config options, see the // README at: https://github.com/devcontainers/templates/tree/main/src/ubuntu { "name": "therion-dev", // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile "build": { // Path is relative to the devcontainer.json file. "dockerfile": "Dockerfile" }, // Features to add to the dev container. More info: https://containers.dev/features. // "features": {}, // Use 'forwardPorts' to make a list of ports inside the container available locally. // "forwardPorts": [], // Use 'postCreateCommand' to run commands after the container is created. // "postCreateCommand": "uname -a", // Configure tool-specific properties. "customizations": { "vscode": { "extensions": [ "ms-vscode.cpptools", "twxs.cmake", "ms-vscode.cmake-tools", "eamodio.gitlens" ] } } // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. // "remoteUser": "root" } therion-6.3.4/.gitattributes000066400000000000000000000001211477525762700161070ustar00rootroot00000000000000lxFNT* linguist-generated TODO* linguist-documentation *.h linguist-language=C++ therion-6.3.4/.github/000077500000000000000000000000001477525762700145625ustar00rootroot00000000000000therion-6.3.4/.github/workflows/000077500000000000000000000000001477525762700166175ustar00rootroot00000000000000therion-6.3.4/.github/workflows/cmake.yml000066400000000000000000000215561477525762700204330ustar00rootroot00000000000000name: CMake on: [push, pull_request] jobs: Ubuntu: runs-on: ${{ matrix.os }} strategy: matrix: include: - { os: ubuntu-22.04, toolchain: gcc.cmake, pkgs: "libwxgtk3.0-gtk3-dev libvtk9-dev", args: "-DUSE_BUNDLED_CATCH2=ON" } - { os: ubuntu-22.04, toolchain: clang.cmake, pkgs: "catch2 libwxgtk3.0-gtk3-dev libvtk9-dev", args: "" } - { os: ubuntu-24.04, toolchain: gcc.cmake, pkgs: "catch2 libwxgtk3.2-dev libvtk9-dev", args: "" } - { os: ubuntu-24.04, toolchain: clang-sanitizers.cmake, pkgs: "catch2 libwxgtk3.2-dev libvtk9-dev", args: "" } - { os: ubuntu-24.04, toolchain: clang.cmake, pkgs: "catch2 libwxgtk3.2-dev libvtk9-dev", args: "-DENABLE_CLANG_TIDY=ON -DCMAKE_BUILD_TYPE=Debug" } steps: - uses: actions/checkout@v4 - name: install dependencies run: | sudo apt -qq update sudo apt install -y ${{ matrix.pkgs }} texlive-binaries texlive-metapost libproj-dev libshp-dev survex imagemagick ghostscript ninja-build clang-tidy gettext libfmt-dev - name: install additional texlive languages if: matrix.os == 'ubuntu-24.04' run: sudo apt install -y texlive-lang-czechslovak texlive-lang-cyrillic - name: Configure CMake run: | mkdir build && cd build && \ cmake -G Ninja \ -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/${{ matrix.toolchain }} \ -DCMAKE_C_FLAGS="-Werror" \ -DCMAKE_CXX_FLAGS="-Werror" \ -DUSE_BUNDLED_SHAPELIB=OFF \ ${{ matrix.args }} .. - run: cmake --build build - run: cmake --build build -t test - name: Run samples if: matrix.os == 'ubuntu-24.04' run: cmake --build build -t samples-verify-crc -- -j 4 - run: cmake --build build -t samples-verify-ref -- -j 4 - uses: actions/upload-artifact@v4 if: matrix.os == 'ubuntu-24.04' && always() with: name: samples-${{ matrix.os }}-${{ matrix.toolchain }} path: build/samples/ - name: Install run: sudo cmake --build build -t install macOS: runs-on: ${{ matrix.os }} strategy: matrix: os: [macos-13, macos-14, macos-15] steps: - uses: actions/checkout@v4 - name: install dependencies run: | find /usr/local/bin -lname '*/Library/Frameworks/Python.framework/*' -delete -print brew unlink python && brew link --overwrite python brew update # try to comment out in case of package problems brew install wxwidgets vtk proj xquartz ninja basictex fmt catch2 imagemagick - name: Configure CMake run: | mkdir build && cd build && cmake -G Ninja -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/sanitizers.cmake -DCMAKE_C_FLAGS="-Werror" -DCMAKE_CXX_FLAGS="-Werror" -DOPENGL_gl_LIBRARY:FILEPATH=/opt/X11/lib/libGL.dylib -DOPENGL_glu_LIBRARY:FILEPATH=/opt/X11/lib/libGLU.dylib -DBUILD_THBOOK=OFF .. - run: cmake --build build -t therion loch utest - run: cmake --build build -t test - name: Run samples run: | eval "$(/usr/libexec/path_helper)" sudo tlmgr update --self sudo tlmgr install collection-langcyrillic sudo tlmgr install collection-langczechslovak cmake --build build -t samples-verify-crc -- -j 4 cmake --build build -t samples-verify-ref -- -j 4 - uses: actions/upload-artifact@v4 if: always() with: name: samples-${{ matrix.os }} path: build/samples/ - name: Install run: sudo cmake --build build -t install Windows: runs-on: windows-latest strategy: matrix: config: - { msystem: UCRT64, arch: ucrt-x86_64, args: "" } - { msystem: CLANG64, arch: clang-x86_64, args: "-DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/sanitizers.cmake -DENABLE_PROJ_CMAKE=ON" } defaults: run: shell: msys2 {0} env: THDIR: d:/a/therion steps: - uses: actions/checkout@v4 - uses: msys2/setup-msys2@v2 with: msystem: ${{ matrix.config.msystem }} update: true install: > make git python diffutils mingw-w64-${{ matrix.config.arch }}-freetype mingw-w64-${{ matrix.config.arch }}-cmake mingw-w64-${{ matrix.config.arch }}-proj mingw-w64-${{ matrix.config.arch }}-shapelib mingw-w64-${{ matrix.config.arch }}-vtk mingw-w64-${{ matrix.config.arch }}-wxWidgets3.2 mingw-w64-${{ matrix.config.arch }}-gcc mingw-w64-${{ matrix.config.arch }}-make mingw-w64-${{ matrix.config.arch }}-bwidget mingw-w64-${{ matrix.config.arch }}-fmt mingw-w64-${{ matrix.config.arch }}-catch - run: mkdir build && cd build && cmake -G "MSYS Makefiles" -DCMAKE_CXX_FLAGS="-Werror" -DBUILD_THBOOK=OFF ${{ matrix.config.args }} .. - run: cmake --build build -t therion loch utest -- -j 4 - name: Set up the batteries run: | reg add HKCU\\Software\\Therion //v InstallDir //t REG_SZ //d "${THDIR}/therion-batteries" mkdir -p $HOME/.therion echo -e "mpost-path ${THDIR}/therion-batteries/bin/windows/mpost.exe\npdftex-path ${THDIR}/therion-batteries/bin/windows/pdftex.exe\nidentify-path ${THDIR}/therion-batteries/bin/identify.exe\nconvert-path ${THDIR}/therion-batteries/bin/convert.exe\n" > $HOME/.therion/therion.ini wget -qO - https://github.com/therion/therion-batteries/archive/master.tar.gz | tar -xzf - && mv therion-batteries-master ../therion-batteries cp -r ../therion-batteries/_proj/{proj-$(awk -F "=" '/version/{print $2}' build/innosetup.ini),proj-datumgrid}/ ../therion-batteries/lib/ - run: cmake --build build -t test - run: cmake --build build -t samples-verify-crc -- -j 4 - run: cmake --build build -t samples-verify-ref -- -j 4 - uses: actions/upload-artifact@v4 if: always() with: name: samples-windows-${{ matrix.config.msystem }} path: build/samples/ - run: cmake --build build -t deploy -- -j 4 # MXE: # runs-on: ${{ matrix.os }} # strategy: # matrix: # include: # - { os: ubuntu-20.04, osname: focal, pkg: i686, cmd: i686, wine-pkg: wine32, wine: wine } # - { os: ubuntu-20.04, osname: focal, pkg: x86-64, cmd: x86_64, wine-pkg: wine64, wine: wine64-stable } # steps: # - uses: actions/checkout@v4 # - name: install dependencies # run: | # sudo dpkg --add-architecture i386 # sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 86B72ED9 # sudo add-apt-repository 'deb [arch=amd64] https://mirror.mxe.cc/repos/apt ${{ matrix.osname }} main' # sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list # sudo apt -qq update # sudo apt install -yqq --allow-downgrades libgd3/focal libpcre2-8-0/focal libpcre2-16-0/focal libpcre2-32-0/focal libpcre2-posix2/focal # sudo apt purge -yqq libmono* moby* mono* php* libgdiplus libpcre2-posix3 libzip4 # sudo apt install -y ${{ matrix.wine-pkg }} # sudo apt install -y ninja-build # sudo apt install -y mxe-${{ matrix.pkg }}-w64-mingw32.static-binutils mxe-${{ matrix.pkg }}-w64-mingw32.static-bzip2 mxe-${{ matrix.pkg }}-w64-mingw32.static-expat mxe-${{ matrix.pkg }}-w64-mingw32.static-freetype-bootstrap mxe-${{ matrix.pkg }}-w64-mingw32.static-gcc mxe-${{ matrix.pkg }}-w64-mingw32.static-gettext mxe-${{ matrix.pkg }}-w64-mingw32.static-glib mxe-${{ matrix.pkg }}-w64-mingw32.static-harfbuzz mxe-${{ matrix.pkg }}-w64-mingw32.static-jpeg \ # mxe-${{ matrix.pkg }}-w64-mingw32.static-libiconv mxe-${{ matrix.pkg }}-w64-mingw32.static-libpng mxe-${{ matrix.pkg }}-w64-mingw32.static-tiff mxe-${{ matrix.pkg }}-w64-mingw32.static-vtk mxe-${{ matrix.pkg }}-w64-mingw32.static-wxwidgets mxe-${{ matrix.pkg }}-w64-mingw32.static-xz mxe-${{ matrix.pkg }}-w64-mingw32.static-zlib mxe-${{ matrix.pkg }}-w64-mingw32.static-proj # - name: run build # run: | # export PATH=/usr/lib/mxe/usr/bin:$PATH # mkdir build && cd build # ${{ matrix.cmd }}-w64-mingw32.static-cmake -G Ninja \ # -DMXE_USE_CCACHE=OFF \ # -DCMAKE_CROSSCOMPILING_EMULATOR=${{ matrix.wine }} \ # -DCMAKE_C_FLAGS="-Werror" \ # -DCMAKE_CXX_FLAGS="-Werror" \ # -DBUILD_SHARED_LIBS=OFF \ # -DBUILD_THBOOK=OFF .. # ninja therion-6.3.4/.github/workflows/codeql.yaml000066400000000000000000000013251477525762700207530ustar00rootroot00000000000000name: CodeQL on: [push, pull_request] jobs: CodeQL: runs-on: ubuntu-24.04 steps: - name: Enable parallel compilation run: echo "MAKEFLAGS=-j$(nproc)" >> $GITHUB_ENV - name: Checkout Repository uses: actions/checkout@v4 - name: Install Dependencies run: | sudo apt -qq update sudo apt install -y texlive-binaries texlive-metapost libproj-dev libshp-dev libwxgtk3.2-dev libvtk9-dev survex imagemagick ghostscript ninja-build gettext libfmt-dev catch2 - name: Initialize CodeQL uses: github/codeql-action/init@v3 - name: Autobuild uses: github/codeql-action/autobuild@v3 - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v3 therion-6.3.4/.github/workflows/installer.yaml000066400000000000000000000222611477525762700215030ustar00rootroot00000000000000name: Installer on: push jobs: # Windows_installer_MXE: # runs-on: ubuntu-20.04 # outputs: # THID: ${{ steps.build.outputs.THID_out }} # git_branch: ${{ steps.build.outputs.git_branch }} # env: # THDIR: /home/runner/work/therion # steps: # - uses: actions/checkout@v4 # with: # fetch-depth: 0 # - name: install dependencies # run: | # sudo dpkg --add-architecture i386 # sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 86B72ED9 # sudo add-apt-repository 'deb [arch=amd64] https://mirror.mxe.cc/repos/apt focal main' # sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list # sudo apt -qq update # sudo apt install -yqq --allow-downgrades libgd3/focal libpcre2-8-0/focal libpcre2-16-0/focal libpcre2-32-0/focal libpcre2-posix2/focal # sudo apt purge -yqq libmono* moby* mono* php* libgdiplus libpcre2-posix3 libzip4 # sudo apt install -y wine32 # sudo apt install -y ninja-build # sudo apt install -y mxe-i686-w64-mingw32.static-binutils mxe-i686-w64-mingw32.static-bzip2 mxe-i686-w64-mingw32.static-expat mxe-i686-w64-mingw32.static-freetype-bootstrap mxe-i686-w64-mingw32.static-gcc mxe-i686-w64-mingw32.static-gettext mxe-i686-w64-mingw32.static-glib mxe-i686-w64-mingw32.static-harfbuzz mxe-i686-w64-mingw32.static-jpeg \ # mxe-i686-w64-mingw32.static-libiconv mxe-i686-w64-mingw32.static-libpng mxe-i686-w64-mingw32.static-tiff mxe-i686-w64-mingw32.static-vtk mxe-i686-w64-mingw32.static-wxwidgets mxe-i686-w64-mingw32.static-xz mxe-i686-w64-mingw32.static-zlib mxe-i686-w64-mingw32.static-proj # - name: build and create the installation package # id: build # run: | # export PATH=/usr/lib/mxe/usr/bin:$PATH # mkdir -p $HOME/.wine/drive_c/windows # echo -e "mpost-path ${THDIR}/therion-batteries/bin/windows/mpost.exe\npdftex-path ${THDIR}/therion-batteries/bin/windows/pdftex.exe\nidentify-path ${THDIR}/therion-batteries/bin/identify.exe\nconvert-path ${THDIR}/therion-batteries/bin/convert.exe\n" > $HOME/.wine/drive_c/windows/therion.ini # wget -qO - https://github.com/therion/therion-batteries/archive/master.tar.gz | tar -xz && mv therion-batteries-master ../therion-batteries # if ${{startsWith(github.ref, 'refs/tags/v')}}; then THID=${GITHUB_REF##*/}; else THID=$(git rev-parse --short HEAD); fi # echo "THID_out=$THID" >> $GITHUB_OUTPUT # BRANCH_FULL=$(git branch -r --contains ${{ github.ref }}) # BRANCH=${BRANCH_FULL##*/} # echo "git_branch=$BRANCH" >> $GITHUB_OUTPUT # mkdir ../therion.bin # cd ../therion.bin # i686-w64-mingw32.static-cmake -G Ninja \ # -DMXE_USE_CCACHE=OFF \ # -DCMAKE_CROSSCOMPILING_EMULATOR=wine \ # -DBUILD_SHARED_LIBS=OFF ../therion # ninja # cp -r ../therion-batteries/_proj/{proj-$(awk -F "=" '/version/{print $2}' innosetup.ini),proj-datumgrid}/ ../therion-batteries/lib/ # ninja samples # cd ../therion-batteries # wine InnoSetup/ISCC.exe therion.iss # cd ../therion.bin # mv therion-setup.exe therion-setup-$THID.exe # mv thbook/thbook.pdf thbook-$THID.pdf # - uses: 'actions/upload-artifact@v4' # with: # name: therion-setup-mxe-${{ steps.build.outputs.THID_out }} # path: | # ${{ env.THDIR }}/therion.bin/therion-setup-${{ steps.build.outputs.THID_out }}.exe # ${{ env.THDIR }}/therion.bin/thbook-${{ steps.build.outputs.THID_out }}.pdf Windows_installer: runs-on: windows-latest strategy: matrix: config: - { msystem: UCRT64, arch: ucrt-x86_64 } defaults: run: shell: msys2 {0} outputs: THID: ${{ steps.build.outputs.THID_out }} git_branch: ${{ steps.build.outputs.git_branch }} env: THDIR: d:/a/therion steps: - uses: msys2/setup-msys2@v2 with: msystem: ${{ matrix.config.msystem }} update: true install: make git python mingw-w64-${{ matrix.config.arch }}-freetype mingw-w64-${{ matrix.config.arch }}-cmake mingw-w64-${{ matrix.config.arch }}-proj mingw-w64-${{ matrix.config.arch }}-shapelib mingw-w64-${{ matrix.config.arch }}-vtk mingw-w64-${{ matrix.config.arch }}-wxWidgets3.2 mingw-w64-${{ matrix.config.arch }}-gcc mingw-w64-${{ matrix.config.arch }}-make mingw-w64-${{ matrix.config.arch }}-bwidget mingw-w64-${{ matrix.config.arch }}-fmt mingw-w64-${{ matrix.config.arch }}-catch - name: prevent git EOL conversion run: git config --global core.autocrlf input - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Fetch tags (relevant for forks only) if: github.repository != 'therion/therion' run: git fetch https://github.com/therion/therion tag 'v*' - name: build and create the installation package id: build run: | reg add HKCU\\Software\\Therion //v InstallDir //t REG_SZ //d "${THDIR}/therion-batteries" mkdir -p $HOME/.therion echo -e "mpost-path ${THDIR}/therion-batteries/bin/windows/mpost.exe\npdftex-path ${THDIR}/therion-batteries/bin/windows/pdftex.exe\nidentify-path ${THDIR}/therion-batteries/bin/identify.exe\nconvert-path ${THDIR}/therion-batteries/bin/convert.exe\n" > $HOME/.therion/therion.ini wget -qO - https://github.com/therion/therion-batteries/archive/master.tar.gz | tar -xzf - && mv therion-batteries-master ../therion-batteries if ${{startsWith(github.ref, 'refs/tags/v')}}; then THID=${GITHUB_REF##*/}; FID=${THID#?}; else THID=$(git rev-parse --short HEAD); FID=$(git rev-parse HEAD); fi echo "THID_out=$THID" >> $GITHUB_OUTPUT BRANCH_FULL=$(git branch -r --contains ${{ github.ref }}) BRANCH=${BRANCH_FULL##*/} echo "git_branch=$BRANCH" >> $GITHUB_OUTPUT mkdir ../therion.bin cd ../therion.bin cmake -G "MSYS Makefiles" -DCMAKE_CXX_FLAGS="-Werror" -DUSE_BUNDLED_SHAPELIB=ON ../therion cmake --build . -j 4 cp -r ../therion-batteries/_proj/{proj-$(awk -F "=" '/version/{print $2}' innosetup.ini),proj-datumgrid}/ ../therion-batteries/lib/ cmake --build . -t samples deploy -- -j 4 cd ../therion-batteries InnoSetup/ISCC.exe therion.iss cd ../therion.bin mv therion-setup.exe therion-setup-$THID.exe mv thbook/thbook.pdf thbook-$THID.pdf curl -L https://github.com/${{ github.repository }}/archive/$THID.tar.gz -o therion-$FID.tar.gz curl -L https://github.com/${{ github.repository }}/archive/$THID.zip -o therion-$FID.zip sha256sum thbook-$THID.pdf therion-$FID.tar.gz therion-$FID.zip therion-setup-$THID.exe > sha256-$THID.txt - uses: actions/upload-artifact@v4 with: name: therion-setup-msys2-${{ steps.build.outputs.THID_out }} path: | ${{ env.THDIR }}/therion.bin/therion-setup-${{ steps.build.outputs.THID_out }}.exe ${{ env.THDIR }}/therion.bin/thbook-${{ steps.build.outputs.THID_out }}.pdf ${{ env.THDIR }}/therion.bin/sha256-${{ steps.build.outputs.THID_out }}.txt Release: runs-on: ubuntu-latest needs: Windows_installer if: startsWith(github.ref, 'refs/tags/v') && needs.Windows_installer.outputs.git_branch == 'master' && github.event_name == 'push' steps: - name: get the upload url run: | URL=$(curl -s 'https://api.github.com/repos/${{ github.repository }}/releases/tags/${{ needs.Windows_installer.outputs.THID }}' | python3 -c "import sys, json; print(json.load(sys.stdin)['id'])") URL="https://uploads.github.com/repos/${{ github.repository }}/releases/${URL}/assets{?name,label}" echo "URL=$URL" >> $GITHUB_ENV - name: Download binaries uses: actions/download-artifact@v4 with: name: therion-setup-msys2-${{ needs.Windows_installer.outputs.THID }} - name: Upload installer uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ env.URL }} asset_path: therion-setup-${{ needs.Windows_installer.outputs.THID }}.exe asset_name: therion-setup-${{ needs.Windows_installer.outputs.THID }}.exe asset_content_type: application/exe - name: Upload thbook uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ env.URL }} asset_path: thbook-${{ needs.Windows_installer.outputs.THID }}.pdf asset_name: thbook-${{ needs.Windows_installer.outputs.THID }}.pdf asset_content_type: application/pdf - name: Upload checksums uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ env.URL }} asset_path: sha256-${{ needs.Windows_installer.outputs.THID }}.txt asset_name: sha256-${{ needs.Windows_installer.outputs.THID }}.txt asset_content_type: text/plain therion-6.3.4/.github/workflows/make.yaml000066400000000000000000000114201477525762700204160ustar00rootroot00000000000000name: make on: [push, pull_request] jobs: ubuntu: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - name: install dependencies run: | sudo apt -qq update sudo apt install -y texlive-binaries texlive-metapost texlive-lang-czechslovak texlive-lang-cyrillic libproj-dev libwxgtk3.2-dev libvtk9-dev survex imagemagick ghostscript libfmt-dev - name: compile therion run: | make config-debian make make tests sudo make install ./therion --print-symbols # - name: make samples # run: make samples # mac: # runs-on: macos-latest # steps: # - uses: actions/checkout@v4 # - name: install dependencies # run: | # # brew update # commented out because of conflicting python versions # brew tap homebrew/core # rm /usr/local/bin/2to3 # brew install wxwidgets vtk proj fmt # - name: compile therion # run: | # make config-macosx # make ./therion # make loch/loch # make tests # ./therion --version # mxe-i686: # runs-on: ubuntu-20.04 # steps: # - uses: actions/checkout@v4 # - name: install dependencies # run: | # sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 86B72ED9 # sudo add-apt-repository 'deb [arch=amd64] https://mirror.mxe.cc/repos/apt focal main' # sudo apt -qq update # sudo apt install -y mxe-i686-w64-mingw32.static-binutils mxe-i686-w64-mingw32.static-bzip2 mxe-i686-w64-mingw32.static-expat mxe-i686-w64-mingw32.static-freetype-bootstrap mxe-i686-w64-mingw32.static-gcc mxe-i686-w64-mingw32.static-gettext mxe-i686-w64-mingw32.static-glib mxe-i686-w64-mingw32.static-harfbuzz mxe-i686-w64-mingw32.static-jpeg \ # mxe-i686-w64-mingw32.static-libiconv mxe-i686-w64-mingw32.static-libpng mxe-i686-w64-mingw32.static-tiff mxe-i686-w64-mingw32.static-vtk mxe-i686-w64-mingw32.static-wxwidgets mxe-i686-w64-mingw32.static-xz mxe-i686-w64-mingw32.static-zlib mxe-i686-w64-mingw32.static-proj # - name: compile therion # run: | # export PATH=/usr/lib/mxe/usr/bin:$PATH # perl makeconfig.pl PLATFORM WIN32CROSS # cd loch; perl makeconfig.pl PLATFORM WIN32CROSS; cd .. # make OUTDIR=. therion # make OUTDIR=. loch/loch # mxe-x86_64: # runs-on: ubuntu-20.04 # steps: # - uses: actions/checkout@v4 # - name: install dependencies # run: | # sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 86B72ED9 # sudo add-apt-repository 'deb [arch=amd64] https://mirror.mxe.cc/repos/apt focal main' # sudo apt -qq update # sudo apt install -y mxe-x86-64-w64-mingw32.static-binutils mxe-x86-64-w64-mingw32.static-bzip2 mxe-x86-64-w64-mingw32.static-expat mxe-x86-64-w64-mingw32.static-freetype-bootstrap mxe-x86-64-w64-mingw32.static-gcc mxe-x86-64-w64-mingw32.static-gettext mxe-x86-64-w64-mingw32.static-glib mxe-x86-64-w64-mingw32.static-harfbuzz mxe-x86-64-w64-mingw32.static-jpeg \ # mxe-x86-64-w64-mingw32.static-libiconv mxe-x86-64-w64-mingw32.static-libpng mxe-x86-64-w64-mingw32.static-tiff mxe-x86-64-w64-mingw32.static-vtk mxe-x86-64-w64-mingw32.static-wxwidgets mxe-x86-64-w64-mingw32.static-xz mxe-x86-64-w64-mingw32.static-zlib mxe-x86-64-w64-mingw32.static-proj # - name: compile therion # run: | # export PATH=/usr/lib/mxe/usr/bin:$PATH # perl makeconfig.pl PLATFORM WIN32CROSS # cd loch; perl makeconfig.pl PLATFORM WIN32CROSS; cd .. # make CROSS=x86_64-w64-mingw32.static- OUTDIR=. therion # make CROSS=x86_64-w64-mingw32.static- OUTDIR=. loch/loch # mingw: # runs-on: windows-latest # strategy: # matrix: # include: [ # { msystem: MINGW64, arch: x86_64 } # ] # defaults: # run: # shell: msys2 {0} # steps: # - uses: actions/checkout@v4 # - uses: msys2/setup-msys2@v2 # with: # msystem: ${{ matrix.msystem }} # update: true # install: python mingw-w64-${{ matrix.arch }}-freetype mingw-w64-${{ matrix.arch }}-cmake mingw-w64-${{ matrix.arch }}-pkgconf mingw-w64-${{ matrix.arch }}-proj mingw-w64-${{ matrix.arch }}-vtk mingw-w64-${{ matrix.arch }}-wxWidgets mingw-w64-${{ matrix.arch }}-gcc mingw-w64-${{ matrix.arch }}-make mingw-w64-${{ matrix.arch }}-tcl mingw-w64-${{ matrix.arch }}-jbigkit mingw-w64-${{ matrix.arch }}-fmt # - name: compile therion # run: | # mingw32-make config-win32 # mingw32-make OUTDIR=. therion # mingw32-make OUTDIR=. loch/loch # mingw32-make OUTDIR=. tests therion-6.3.4/.gitignore000066400000000000000000000016061477525762700152150ustar00rootroot00000000000000thversion.h thbook/version.tex thmpost.cxx thtex.h thlangdata.h thchencdata.cxx thcsdata.h thmpost.h thcsdata.cxx thtex.cxx thsymbolsetlist.h thsymbolsets.cxx thsymbolsets.h thlangdatafields.h thchencdata.h SYMBOLS.txt innosetup.ini xtherion/therion.tcl *~ ./*.3d *.a *.err *.exe *.log *.lox *.o *.orig *.pyc *.rej *.shp *.so *.htb *.stackdump *.tar.gz *.xhtml *.xvi *.zip samples/pocket-topo/cave.3d samples/pocket-topo/cave.plt core geomag/test/geomag.i geomag/test/geomag.py loch.app/Contents/MacOS/loch samples.doc/ samples/**/*.doc samples/**/*.pdf samples/**/*.html screendump symbols.html therion.res thbook/etc/contents.tex thbook/thbook.pdf thTMPDIR/ xtherion/ver.tcl xtherion/xtherion xtherion/xtherion.tcl xtherion/msgxth.tcl /loch/loch /loch/loch.res /therion /utest CMakeLists.txt.user CMakeCache.txt CMakeFiles/ extern/fmt/Makefile extern/fmt/cmake_install.cmake build/ rel_notes.md .vs/ therion-6.3.4/.vscode/000077500000000000000000000000001477525762700145635ustar00rootroot00000000000000therion-6.3.4/.vscode/cmake-kits.json000066400000000000000000000003431477525762700175060ustar00rootroot00000000000000[ { "name": "Clang", "compilers": { "C": "/usr/bin/clang", "CXX": "/usr/bin/clang++" } }, { "name": "GCC", "compilers": { "C": "/usr/bin/gcc", "CXX": "/usr/bin/g++" } } ] therion-6.3.4/CHANGES000066400000000000000000002056351477525762700142300ustar00rootroot00000000000000Therion 6.3.4 (2025-04-08): therion: * added SKBB chimney symbol * added UIS camp symbol [#624] * on windows, Therion no longer uses PROJ_LIB env variable (it's used only in unit tests to easily switch between Proj versions) * source is now reported when automatic declination calculation is out of range * import coordinate system from 3D file [#648] * improved documentation of valid team roles * bugs fixed: - thbook fixes and updates [#641, #651, #630] - fixed UIS chimney symbol - fixed continuation-list crash [#632] - fixed NaN, Inf values in SQL export xtherion: * added Help/Logs... menu item and window * context menu update for point extra: dist, from * restructured XTherion chapter in thbook, add a mention of wtherion [#649] * reverted removal of xtherion cmd wrapping on Windows [#639] loch: * fixed loch crashing on Wayland on non-Debian based distros (patch by Olly Betts) infrastructure and compiler: * CI: ubuntu-latest -> ubuntu-22.04 [#620]; use Ubuntu 24.04 in 'make' workflow * CI: use windows registry data instead of PROJ_LIB * CI: generate sha-256 checksums for the windows installer, source archives and thbook.pdf * CMake: explicit static linking for img, QuickHull, lxTR, lxR2P [#619] * Make: Ubuntu 24.04 fixes * added support for compilation in Visual Studio [#621] * fixed compatibility with C++17 and C++20 [#628] * fixed missing breaks [#625], fix valid degree in bezier_pt() [#626], simplify thexception [#631], fix lifetime issues of thlogfile [#637], thlogfile::print() improvements [#643], removed thlogfile::printf() [#650] * added simple unit tests [#634] -------------------------------------------------------------------------------- Therion 6.3.3 (2025-01-06): infrastructure: * fix a bug introduced in [#613] preventing building the Windows installer -------------------------------------------------------------------------------- Therion 6.3.2 (2025-01-06): therion: * SVG maps are now editable (map data is not in section any more) * geomag data updated up to 2030 * splay shots removed from SHP 2D line layer (to be consistent with PDF; splay shots are included in 3D SHP files) * code improvements: manual memory management cleanup [#604], refactoring of thpoint internal state [#611] * documentation updates including #610, #615 * bugs fixed: - Proj canʼt find files in the user-writable directory on Windows - import .3d unmatched survey legs [#606] - fixed surface grid misalignment when CS of grid differs from output CS xtherion: * allow space in thconfig filename [#603] * code improvements: replace obsolete ‛case’ with ‛switch’ [#612] Windows installer: * fixed shortcuts to thbook.pdf and CHANGES.txt infrastructure: * add several ‛diff’ tests, fix CSV database export [#609] * CI: fix Windows installer version in GIT forks [#613] * removed Ubuntu 20.04 CI job [#616] * support for code coverage generation [#618] * Proj 9.5.1 included to the testing script -------------------------------------------------------------------------------- Therion 6.3.1 (2024-11-22): xtherion: * revert the change introduced in 6.3.0 to allow spaces in the thconfig filename [#590] to fix file opening issues on Windows -------------------------------------------------------------------------------- Therion 6.3.0 (2024-11-20): therion: * REMOVED proj-auto initialization file option; remove it from your ini files if you use it * support for Geospatial PDF maps added (custom georeferencing used in versions 5.3-6.2.1 is not included in PDF maps any more) * new layout option: geospatial on/off * projection (*.prj) files associated with shapefiles are generated by Proj for all output projections; it's not possible to specify them in thcsdata.tcl any more * use precise grid transformation for built-in OSGB:XY coordinate systems * import splays from 3d files [#599] * new 'require ' command [#598] * thbook updates * REMOVED Proj v4 and v5 compatibility; minimum supported Proj version is 6.3.1 * updated Survex img library [#567] * old MetaPost output to PDF conversion functions removed from sources (they were unused since 6.0.0 release) * bug fixes: - fix symbol-hide special (scale-bar|north-arrow) in XHTML output [#558] - fix order of layout copy commands [#563] - don't reset symbol-hide with symbol-set [#561] - improve th2 export [#573, #588] - import .3d shots with their correct survey name [#585] - KML entrance label: comment or name [#574] - fix import filter: exclude filtered stations [#583] - fix NaN coordinates if Z is undefined in Proj 9.2.0+ - fix thcsdata.cxx generation - fix PROJ_LIB path handling - use linux line-ends in text outputs (TXT, SVG, HTML, XHTML, KML, SQL, CSV, XVI, TH2, PLT, VRML, 3DMF, BBOX) to ensure cross-platform uniformity - various smaller fixes [#559, #586] * code refactoring [#576, #579, #580] and cleanup xtherion: * remove check for Img package [#566] * allow space in thconfig filename [#590] loch: * bug fixes: - fix missing surface texture on Windows [#587] (thanks to switching to ucrt) Windows installer: * build environment changed from MSYS2/mingw64 to a more modern MSYS2/ucrt64; for Windows 7 and 8 users this may require to install UCRT libraries (https://learn.microsoft.com/en-us/cpp/windows/universal-crt-deployment) to run Therion, unless already installed by system updates infrastructure: * CI environments fixes and updates [#568, #575, #578, #589, #593] * Windows CI: run unit tests; verify samples; enforce warnings [#600] * drop make workflows on MacOSX and Windows CI * Makefile fixes for fmtlib and VTK * updates in test_proj.sh testing script * Catch2 testing suite fixes [#595] and updates * add SVG and XHTML samples; make sure that Proj needs proj.db in samples Thanks to Matěj Plch and Thomas Holder for many contributions to this release. -------------------------------------------------------------------------------- Therion 6.2.1 (2024-03-20): therion: * Polish translation updated [#553] * many C++/CMake/Makefile improvements and fixes by Matěj Plch [#535, #536, #537, #539, #541, #541, #542, #552] * updated poly2tri library [#538] * bugs fixed: - length can also be equal to depth change [#556] - std::sort() usage causing segmentation fault in some cases xtherion: * new setting $xth(gui,init_app_normalized) to allow disabling of window geometry adjustments when xtherion starts [#557] * xtherion line artifact fixed [#554] infrastructure: * initial implementation of a devcontainer [#532] * CI environments: fixes, macOS 14 added [#546, #551] -------------------------------------------------------------------------------- Therion 6.2.0 (2023-12-21): therion: * Windows version: only 64-bit Windows are supported now [#530] * code fixes and improvements by Matěj Plch [#518, #522, #523, #524, #533] * thbook fixes, mostly by Rodrigo Severo [#520, #525, #526] * updated QuickHull library [#521] * added support for Catch2 version 3 [#534] * Proj 9.3.1 included to the test suite loch: * fixed compilation issues on Debian infrastructure: * installer: updated TeX and ImageMagick to use current, 64-bit binaries * macOS 13 added to and macOS 11 removed from CI environments [#516, #529] -------------------------------------------------------------------------------- Therion 6.1.8 (2023-06-14): therion: * added coordinate transformation sample * bugs fixed: - "no usable coordinate transformation found" issue when there is just one fixed station - fix irregularities in vertical grid markers - bug with area bedrock - various code fixes (NAN on windows, GCC 13 compatibility, includes reorganization, missing includes, incorrect printf arguments) infrastructure: * CI fixes -------------------------------------------------------------------------------- Therion 6.1.7 (2023-04-23): therion: * allow custom fonts for map grid coordinates (see the \gridfont TeX macro) * display negative coordinates in s_altitudebar_SKBB using an en-dash (-- ligature) instead of a hyphen as an approximation of the minus character * various thbook updates * C++ code modernization and fixes, including [#483, #484, #486, #487, #488, #491, #492, #493] by Matěj Plch * samples reorganization: a common directory for tests; new test: inputrel * bugs fixed: - wrong check for ICC profile type - hyphen used instead of minus in s_altitudebar - path not ending with slash in \includeprefix (TeX) and includeprefix (mpost) - thbook: document the usage of TeX registers [#485] xtherion: * bugs fixed: - fixed polyline to bezier conversion bug introduced in 6.1.4 infrastructure: * therion no longer includes an internal copy of fmtlib * system fmtlib is a mandatory dependency now * updated GitHub Actions configuration * CMake 3.16 required * CMake: dependencies refactoring and other improvements [#498] * bundled Catch2 updated to 2.13.10 * added extern/readme.txt -------------------------------------------------------------------------------- Therion 6.1.6 (2023-01-11): therion: * bugs fixed: - Incorrect output coordinates system [#482] - documentation fixes infrastructure: * updated release script -------------------------------------------------------------------------------- Therion 6.1.5 (2022-12-30): therion: * bugs fixed - v6.1.4 won't overwrite output files on Windows [#480, #481] infrastructure: * updated GitHub Actions * updated make_relase.py -------------------------------------------------------------------------------- Therion 6.1.4 (2022-12-23): therion: * platform-independent titles in 3d, html and kml outputs [#469, Matěj Plch] * bugs fixed: - scrap lookup colouring fix xtherion: * added support for converting all eligible poly lines to curves in one operation [Mark Dickey] * updated Portuguese translation [#473, Rodrigo Severo] infrastructure, code refactoring: * GitHub Actions: upload samples artefacts; fix deprecated actions; build samples on Mac OS; enable static code analysis by CodeQL [Matěj Plch] * code modernisation (std::filesystem, fmt::format); fixed compiler warnings [Matěj Plch] * Makefile fixed -------------------------------------------------------------------------------- Therion 6.1.3 (2022-11-26): therion: * Slovenian translation updated [#462, Marko Zakrajsek] * improve output reproducibility across platforms (two-pass rounding, improved angles calculation in the warping algorithm) * bugs fixed - at non-int mapping of scale to base-scale, text labels get debugging text added before them [#428] infrastructure: * C++17 standard required [#449, Matěj Plch] * C++17 related code refactoring and modernisation (attributes, std::filesystem, std::string_view) [Matěj Plch] * fixed compiler warnings [#437, Matěj Plch] * fixed wxWidgets asserts [#439, Matěj Plch] * CMake: compile QuickHull as a library [#436, Matěj Plch] * CMake: reworked include paths [Matěj Plch] * CMake: compile C sources as a separate C libraries [Matěj Plch] * CMake: further improvements [Matěj Plch] * CMake: add the missing sample [#440, Matěj Plch] * Makefile fixed * CI: fixed wine32 installation issues * CI: removed builds on deprecated ubuntu-18.04 and macos-10.15 [#442, Matěj Plch] * CI: suspended builds on MXE [#448, Matěj Plch] * CI: add missing msys2/mingw packages * CI: enable sanitizers and build samples on Windows and MacOS [#457, #458, Matěj Plch] * clang-tidy improvements [#452, Matěj Plch] * require at least VTK 7 [#444, Matěj Plch] * require at least wxWidgets 3.0.0 [#451, Matěj Plch] * linking to Proj 9.1.0 added to test_proj.sh -------------------------------------------------------------------------------- Therion 6.1.2 (2022-07-11): therion: * updated fmtlib to 9.0.0 * updated Russian translation [#427] * bugs fixed - FTBFS with fmtlib 9.0.0 [Debian #1014679] - empty Maori translations removed -------------------------------------------------------------------------------- Therion 6.1.1 (2022-06-23): therion: * support custom font size in map labels using and in the label text * updated Maori translation [#424] * bugs fixed: - line rope having two points with the same x-coordinate [#423] - spelling errors in the source code loch: * bugs fixed: - ABI mismatch preventing loch from starting in msys2 build; fixed by linking to wxWidgets 3.1 [#426] -------------------------------------------------------------------------------- Therion 6.1.0 (2022-05-27): therion: * CHANGED the default settings for 'proj-auto' (on) and 'proj-missing-grid' (download) to allow Proj choosing the best transformation and automatically download any missing transformation grids * added a new ini file option ‘cs-trans’ for user-defined PROJ transformation pipelines between two coordinate systems * added support for automatic downloading of PROJ transformation grids used in cs-trans pipelines from cdn.proj.org * layout: color map-fg scrap now uses more different colors to avoid that connected scraps are colored the same. Needed in labyrinth-like caves. [#416] * support custom font size in map labels using in the label text * support atlas page labeling A, B, …, Z, AA, AB, … instead of only A, B, …, Z * updated bundled libraries: survex/img 1.4.3, Catch2 2.13.9, fmt 8.1.1 * documentation fixes [#410,#415,#417] * updated github workflows [#411] -------------------------------------------------------------------------------- Therion 6.0.6 (2022-03-12): therion: * added support for hex rgb color specification (e.g. color map-fg ffeeaa) * using -value with point extra triggers deprecation warning. It is undocumented feature/bug. * thbook improvements [#403,404,406,407] (thanks to Rodrigo Severo) * support Proj 9.0.0 in test_proj.py xtherion: * bugs fixed: - control panel sizing on certain OS and hidpi displays loch: * bugs fixed: - mac retina display size fix infrastructure: * cmake: fix a missing icon in therion.exe [#405] (thanks to Matěj Plch) * split too long lines in .github/workflows/*.yml * support for signed releases: sign the tag + upload a detached signature for .tar.gz sources to a Github release (the release is now created by the local script make_release.py instead of Github Actions; this allows for integration of the rel_notes.py script into make_release.py) -------------------------------------------------------------------------------- Therion 6.0.5 (2022-02-20): therion: * added support for backtape/backlength readings * warning if forwards and backwards readings do not match (the difference threshold changed from 2 SD to 3 SD) * some missing point and line types added to thbook [#401,402] * Catch2 library updated to 2.3.18 * bugs fixed: - lox file generation segfault (solved by poly2tri library update) - segfault caused by mixing local and global coordinate system - unable to determine direction on zero-length path in scrap [#395] xtherion: * added line section -direction to context menu * bugs fixed: - fixed a wrong translation - wrong handling of filename open as argument - SVG import fixed loch: * added PLY walls export (File → Export) * added support for cave volume calculation (Tools → Survey statistics) windows installer: * updated 3rd party programs: - Tcl/Tk 8.6.12, tkImg 1.4.13, BWidget 1.9.15 - ImageMagick 7.1.0-24 - W32TeX 2021/06/24 - InnoSetup 6.2.0 * support for multiple languages during the installation * two variants available now: - built on Windows using MSYS2 environment; contains up-to-date libraries; dynamically linked (a lot of DLLs are included) [this is now the default for releases] - built on Linux using MXE cross-compiler; some of the libraries are quite outdated; statically linked; smaller installer size [the only option used between 5.4.0 and 6.0.4 to build the installer] cmake: * support for collecting the required DLLs for deployment [#397] (thanks to Matěj Plch) -------------------------------------------------------------------------------- Therion 6.0.4 (2021-11-28): therion: * MapBackground colour variable available in MetaPost (corresponding to 'color map-bg' set in the layout) * bugs fixed: - fixed bug with counter and depth instrument calibration - fixed error message for map containing only previews - depth is incorrectly taken from surface legs [#165] - cmyk/grayscale color export fix - fix shapefile generation issues under Windows (only when using the embedded shp library) loch: * bugs fixed: - fixed grayscale surface image rendering xtherion: * bugs fixed: - sketch import file browser case-sensitive to filename extensions [#390] - fix lintian warnings by using a different shebang line infrastructure: * cmake: generate help and locale files for target loch * cmake improvements by Matěj Plch [#391] * updated Makefile and getvtkver.tcl for loch * fix thbook reproducible build (cmake only; SOURCE_DATE_EPOCH should be set) * support thbook compilation with luatex * use only current OS versions for make-based builds on GHA * fix/workaround for wine32 installation on Ubuntu 20.04 on GHA * updated libfmt [#388] * updated proj testing script -------------------------------------------------------------------------------- Therion 6.0.3 (2021-10-03): therion: * add support for splay shots in .3d import * survex code updated to 1.2.45 * a new patch to get reproducible .3d files applied * bugs fixed: - fixed typos in an error message - sample files modified not to start with #! characters which confused lintian - color map-fg depth: fix the colouring issues and the related metapost error loch: * use help files in .htb format on all platforms * fixed cross-platform differences of generated .lox files xtherion: * fixed bug with PocketTopo XVI rendering introduced in 6.0.2 infrastructure: * cmake: added compilation of .mo translation file * cmake: improved installation using components * cmake: reproducibility fixes * cmake: added support for generation of the documentation in HTML format -------------------------------------------------------------------------------- Therion 6.0.2 (2021-09-13): therion: * add compatibility macros for pre-6.0.0 transparency style in MetaPost * allow scaling of some point symbols (anchor, bridge, camp, dig, fixedladder, noequipment, rope, ropeladder, steps, traverse, viaferrata) [PR#382,384] * include Proj 8.1.1 to the Proj testing suite * bugs fixed: - wrong vertical alignment of legend entries using
to split lines - \baselineskip not applied to \the\cavename in the map legend - fixed the collision of \the\cavename with the north arrow loch: * fix a missing include when compiling with vtk 9.0.1 and gcc 11 [Debian #984363] xtherion: * improved control over vertical positioning of background images infrastructure: * fix possible mixing of make and cmake generated files [PR#381] * fix static linking issues under recent MinGW -------------------------------------------------------------------------------- Therion 6.0.1 (2021-07-25): therion: * flexible altitude bar height based on the number of colours in use * changed layout colour-legend option to * bugs fixed: - wrong shading patterns references when exporting multiple maps - projection name truncated to 20 characters in Proj ver. > 5 -------------------------------------------------------------------------------- Therion 6.0.0 (2021-07-13): therion: * support for colour models: cmyk, rgb, grayscale (see the color-model layout option in the Thbook) * support for colour management (see the color-profile layout option) * support for linear and radial shading (colour gradients) in MetaPost (withlinearshading and withradialshading options) * support for smooth colour transitions of scrap backgrounds in PDF maps if the map-fg is coloured by altitude * added smooth-shading layout switch – quick is the default * reimplemented internal processing of patterns and transparent colors in MetaPost (incompatible changes: the drawing option 'withtransparentcolor', macro 'def_transparent_rgb' and predefined transparent colors tr_bg, tr_white, tr_black were removed; use the drawing option 'withcolor withalpha ' instead) * reimplemented conversion of MetaPost output to PDF * support for double number system in MetaPost (this eliminates the current MetaPost limits; see the chapter Limitations in the Appendix of the Thbook) * tex-refs-registers initialization file option added (see the chapters Initialization files and Limitations in the Appendix of the Thbook) * support for LuaTeX as an alternative to pdfTeX * support for relative paths in TeX (\inputrel, \savepath and \loadpicture) and in MetaPost (inputrel) * updated Serbian translation * bugs fixed: - symbol-hide,show,color not working for user defined symbols - ISO8859-2 literals in the source code caused clang warnings - removed unnecessary SOURCE_DATE_EPOCH in the thbook Makefile - fixed numerical instability in l_overhang_SKBB - swapped anastomosis & karren symbols - no station scrap continuation list [#333] - fixed arrows flipping [#245] - colour preview-above doesn't work [#90] - KML export fix [#84] - p_smartlabel fails with a picture argument - other minor fixes * included {fmt} library * updated shapelib loch: * Tools→Selection – only displays selected surveys * bugs fixed: - missing title - autorotation issues infrastructure: * support for CMake builds (thanks to Matěj Plch) * C++14 required * use Github Actions to create Github releases -------------------------------------------------------------------------------- Therion 5.5.7 (2021-02-06): therion: * added --generate-output-crc, --verify-output-crc options * error raised when unknown command line option used * version number ends with '-dev' if there are uncommitted local changes * optimizations: - much faster processing of fixed stations with associated CRS data - faster check for optional fonts * bugs fixed: - survey selection ignored when exporting 3d model from splay shots - "cs local" bugfix - scrap 3d reconstruction spike artifact fix - selection logging bugfix - svg/xhtml map export without filename creates cave.pdf file make: * better detection of wx-config variants * innosetup.ini is generated in the build directory -------------------------------------------------------------------------------- Therion 5.5.6 (2020-12-27): therion: * fixed map statistics bug introduced in 5.5.5 -------------------------------------------------------------------------------- Therion 5.5.5 (2020-12-22): therion: * updated Italian translation [#308] * fixed bug with statistic explo/topo/carto/copyright * fixed bugs related to an undefined Area of Use, which should be used in Proj transformations -------------------------------------------------------------------------------- Therion 5.5.4 (2020-12-15): therion: * added layout-statistics carto|copyright-count * use unique pointers in thdatabase [#296] * added support for 270 to 360 degrees gradient readings * bugs fixed - scrap -walls off not working [#297] - various fixes [#293,294,295,296,298,299,301,302,303,305] thbook: * support smaller page formats (configuration at the line 5 of the file thbook/thbook.tex) loch: * bugs fixed: - fix display of Survex 3D with LRUD [#286] - read splay flag from Survex 3D files [#287] make: * allow -j$N [#283] * allow passing of WX_CONFIG variable [#284] * remove local copies of getline and getopt [#290,306] * small fixes infrastructure * use Github actions instead of Travis CI -------------------------------------------------------------------------------- Therion 5.5.3 (2020-10-17): therion: * mil/mils angle unit deprecation warning [#129] * sql export shot length precision increase [#147] * bugs fixed - incorrect calculation of station position when fixed multiple times [#269,270] - memory leaks causing some random behaviour [#278] - scale value should default to 1 when omitted from "calibrate" [#263] loch: * splay shots are rendered with darker colour * duplicate shots displayed by default * small bug fixes -------------------------------------------------------------------------------- Therion 5.5.2 (2020-10-09): therion: * added extend ignore path -- extend ignore * added ratio of extended elevation -- extend <0..100> * support CMYK colors in MetaPost symbols (this is not yet a complete CMYK support) * updated WKT definitions for some built-in projections * the names of projections defined by EPSG/ESRI are loaded dynamically from the Proj database if Proj version >= 6 * undated surveys are listed in the Therion messages * documentation updates * updated German translation [#258] * bugs fixed - use proper ISO code for Czech language ('cs' instead of 'cz') [#251]; 'cz' is still allowed in the map layout for backwards compatibility - pdftex included in the windows installer failed to find images with '/./' or '/../' in the file path - splay shots extended elevation processing - another fix for Proj 7.1.0 axes swap in Krovak's projection - refuse to compile with unsupported Proj versions - depth is incorrectly taken from surface legs - Survex err reading bugfix - VTK9 compatibility fixes - Xtherion map georeferencing bugfix - mingw-w64 compatibility fixes - wxWidgets compilation issues - declination set to 0 outside of the geomag model range (now the declination is extrapolated 15 years after the model date; error is produced after that and before 1900) - other minor fixes infrastructure: * add more Travis CI targets, update the libraries used * removed Therion library rebuilding -------------------------------------------------------------------------------- Therion 5.5.1 (2020-07-03): therion: * duplicate shot length removed from explored individual team member statistics * improved Proj support in auto mode (automatic specification of the area of use; caching and logging of the used transformations) * added support for handling of missing coordinate transformation grids (see the proj-missing-grid init file option) * support for linking with multiple Proj versions to improve testing (see test_proj.sh) * improved mingw-w64 compatibility * bugs fixed - various memory-related fixes by Matěj Plch [#242,243,244,248] - broken debug build [#246] - workaround for Proj 7.1.0 axes swap in Krovak's projection - various items missing from the clean targets [#252] windows installer: * updated InnoSetup * updated TeX and MetaPost distribution * installer now includes the right version of Proj support files automatically -------------------------------------------------------------------------------- Therion 5.5.0 (2020-05-01): therion: * maps-offset feature in thconfig file to disable maps drawn in offset [#159] * maps feature in thconfig file to produce map just from scraps, ignoring the maps definition * log extend feature in thconfig to log extended elevation construction * added point mudcrack (thanks to Rodrigo Severo) * added an extensive SBE symbol set (thanks to Rodrigo Severo) * geomag data updated up to 2025 * added support for reproducible generation of PDF and SVG output (command-line option --reproducible-output) * make thbook.pdf build reproducible (derive the created/modified dates of the PDF file from the commit date) * improved support for Proj 6.0 and 7.0 (see proj-auto init file option) * Catch2 unit testing library and Proj test cases added * all python scripts use Python 3 now * added Serbian (thanks to Ivana Miskovic) and Slovenian [PR#142] translations * updated Portuguese translation [PR#170,220] * thbook improvements by Benedikt Hallinger [PR#161,162] * bugs fixed - spelling in some thbook chapters - html and kml output [PR#145,150] - extend ingore fixed - Survex 3D output is missing the nodes on the end of anonymous splay legs [#157] - a_blocks_AUT missing semi-colon [#126] xtherion: * add thconfig* to selectable config file list [PR#168] * bugs fixed: - Windows xtherion window geometry bugfix loch: * bugs fixed: - MacOS X compilation [PR#144] - multiple minor fixes - Linux off-screen rendering bugfix -------------------------------------------------------------------------------- Therion 5.4.4 (2019-05-01): therion: * support for Proj 5.0 and newer API (proj.h) * bugs fixed: - segfault while generating SVG when compiled by newer g++ - incorrect EPSG projections handling if more than one EPSG codes are used - custom projection name missing - missing Proj4 human readable projection names -------------------------------------------------------------------------------- Therion 5.4.3 (2019-02-01): therion: * input line length increased to allow reading larger elevation datasets * built-in Proj.4 removed; internal mapping of EPSG and ESRI codes replaced by +init=epsg|esri:... libproj initialization string * bugs fixed: - add and use PROJ grid files in the windows distribution - fix comment and code typos [PR#127] -------------------------------------------------------------------------------- Therion 5.4.2 (2019-01-08): therion: * added -color option to select command * added lookup command to configuration * support for 3D models generated from splay shots * added support for label customization * added scrap distortions to SQL export * therion uses system libproj by default [PR#118,121] * metapost output is reproducible now [PR#117] * updated Spanish, German, Russian, Bulgarian, Portuguese, Catalan, French, Czech and English translations and messages [PR#77,78,82,83,94,95,102,103,105,107,108,109,112] * thbook updates [PR#76,98] * bugs fixed: - KML with multiple outer polygon outlines - other minor bugfixes xtherion: * support for scrap shifting * bugs fixed: - fix problems with selection/copy/paste for text editors [PR#86] - mouse zooming fixed - disappearing menu fixed loch: * bugs fixed: - displaying LRUD envelope for surface & splay shots - surface transparency rendering -------------------------------------------------------------------------------- Therion 5.4.1 (2017-04-18): therion: * added fonts-setup layout option * added min-symbol-scale layout option * added support for -scale for point and line symbols (1.0 ≡ medium symbol size) * updated Russian translation [PR#73,74] * bugs fixed: - remove debugging output when reading Survex err files - don't accept stddev <= 0 -------------------------------------------------------------------------------- Therion 5.4.0 (2017-04-03): infrastructure: * github.com/therion repos created * added support for mxe.cc cross-compiler * travis-ci.org integration therion: * include UISv1 grade definitions [PR#6] * new ini file option: tex-fonts-optional * simple CSV database export with shot and equate lists [PR#9,19] * KML export improved (survey title, map comment, folder icons, entrances, survey names...) [PR#13] * added loop error info to .3d model * sync up img.c and img.h with latest Survex versions [PR#16] * update to latest poly2tri code [PR#43] * documentation improvements [PR#29,38,42] * Chinese translation added -- manual setup of fonts in the ini file (pdf-fonts) is necessary (thanks to Zhang Yuan Hai and Duncan Collis) * updated Bulgarian, Czech, English, German, Portuguese, Russian and Slovak translations [PR#9,12,18,34,41,46,55,56,58,60,65,67,68,69,70,72] * new and updated map symbols: - added line rope symbol, updated line handrail in MP [PR#9] - added area flowstone to AUT symbolset [PR#35] - added line fixed-ladder - added polyline_offset macro in MP - fixed AUT ceiling-step and ceiling-meander [PR#47] - changed AUT painted/fixed station to ASF:fixed layout [PR#48] * bugs and issues fixed: - fix missing font declarations when using pdf-fonts with more than 256 chars - added export of CLIP attribute in SHP export - include coordinate system and date-surveyed in the .3d export [PR#9,19] - fix warning "Can't Open Cavern Log File For Input" [PR#9] - fix compiler warnings [PR#10,22,24] - fix altitude colours with centreline [PR#11] - fix survex path detection - ensure text files end with a new line [PR#14] - fix typos in messages and comments [PR#17,23,25,39,40,45] - make "make clean" work fully for debug build [PR#20] - regularise indentation to use spaces [PR#26] - whitespace clean-up [PR#27] - sync divergent docs of therion command line [PR#28] - eliminate second copy of Survex img code [PR#33] - remove accidentally committed files [PR#37] - remove redundant NULL checks [PR#44] - use $(MAKE) instead of make [PR#51] - improve calculation of fractional year [PR#52] - fixing raft-cone point being drawn as raft [PR#54] xtherion: * shortcuts to delete a line point (Ctrl-Shift-D) and zoom (Ctrl-Up/Down) * colouring of lines based on type * station point shown with triangle instead of dot * Line simplification command to reduce number of points without converting to Bezier [PR#8] * apply proper collation when sorting [PR#71] * bugs fixed: - fix long delay processing large log files [PR#2] - fix loading of files with no extension in text editor [PR#30] - fix line point contextual menu [PR#61] - fix xtherion/lang/process.pl regex [PR#62] - include missing translatable texts [PR#63,66] - enable canvas zoom with the mouse wheel [PR#64] - incomprehensible error message while loading unsupported progressive JPEGs loch: * manual page added [PR#15] * bugs fixed: - fix assertions with wxWidgets 3.0 [PR#1] - remove redundant NULL checks [PR#44] - fix loch "make depend" [PR#32] -------------------------------------------------------------------------------- Therion 5.3.16 (2014-12-28): therion: * scale upper limit changed to 1:10 * geomag data updated up to 2020 * bugs fixed: - black area displayed instead of some patterns in SVG - broken XHTML output when string formatting keywords are used in map-comment etc. - unescaped special characters in map-comment etc. in XHTML - improved error message when therion can't map custom TeX fonts in MetaPost macros to Unicode - cave depth value in XHTML output - invalid compass/backcompass averaging formula xtherion: * elevation orientation in Compiler map structure loch: * VTK 6.0 support * wxWidgets 3.0 support -------------------------------------------------------------------------------- Therion 5.3.15 (2014-05-27): therion: * multiline comments inside (comment/endcomment) block allowed in data and configuration files * new TeX variables \cave[max|min]z = altitude max|min value \thversion = current therion version \currentdate = current date \outcs[code|name] = output CS code and name \northdir = true or grid \magdecl = magnetic declination in degrees \gridconv = grid meridian convergence in degrees * new metapost variables NorthDir = "true" or "grid" MagDecl = magnetic declination in degrees GridConv = grid meridian convergence in degrees * bugs fixed: - invalid colors for station names and wall altitudes xtherion: * resetting symbol options when type is changed can be turned off using xth(gui,me,type_reset_options) variable * you can turn off symbol type translation in dropdown menus using xth(gui,me,type_dropdown_trans) variable * bugs fixed: - area type u type change bug -------------------------------------------------------------------------------- Therion 5.3.14 (2014-02-22): xtherion: * added Undo/Redo toolbar buttons * added option Edit->Hide inactive scraps * added context menu, right click on line and point -------------------------------------------------------------------------------- Therion 5.3.13 (2014-01-22): therion: * bugs fixed: - update survex img parser to v8 (should fix various errors) - several patches from Wookey's debian distribution applied -------------------------------------------------------------------------------- Therion 5.3.12 (2013-12-22): therion: * -enable/disable spay-shots should work for VRML and DXF format (splay shots in separate layer) * added ATTR__shotflag_splay, ATTR__shotflag_duplicate, ATTR__shotflag_approx to metapost code before line survey * warning raised, if equate statement creates new station in some subsurvey * removed transaction from SQL export * bugs fixed: - color map-fg altitude should work for elevation projection - error deleting temporary directory - missing vcomp100.dll in Win32 installation xtherion: * bugs fixed: - BOM handling in UTF-8 files - ver.tcl ends with lf only loch: * bugs fixed: - file open dialog not working properly on Debian linux -------------------------------------------------------------------------------- Therion 5.3.11 (2012-12-22): therion: * added -survey option for map for setting survey associated with map. For example all surveying statistics from this survey will be used, when this map is selected for output. * added sketch-colors option to thconfig file, to reduce size of sketch bitmap images in maps * hide symbol from legend, if it has explicitly empty translation * survey-level works for point station-name labels, if station name is automatically determined (no -text is specified) * symbol-show|hide group text for point label, remark, date and line label * grid-angle - can be used in centerline to specify magnetic grid angle (declination against grid north). * -cs output specification works for export cave-list (including lat-long) * dates are shown using OS locale settings in map export * layout statistics explo/topo-length on/hide/off -- if it is off, team members are sorted alphabetically * KML export format supported for cave-list and continuation-list * bugs fixed: - PLT export in output coordinate system - context point air-draught not working - instrument position in centerline does not work - debug scrap-names crashes if empty scraps - counter not working in centerline data diving - revise not working outside of survey context - wrong length/depth and other statistics calculation for map output - sketch bitmaps inserted multiple times in PDF files xtherion: * bugs fixed: - new file in xtherion works, even if file is already open -------------------------------------------------------------------------------- Therion 5.3.10 (2012-08-13): therion: * added new point types: ice-stalactite, ice-stalagmite, ice-pillar, clay-choke, clay-tree * added new wall subtypes: pit, flowstone, moonmilk, overlying * added new symbol groups: ice, sediments * added -height option for pit/wall:pit * added new layout option: color map-bg transparent * full OSGB grid coverage (e.g. cs OSGB:ST) * Austrian symbol set added (thanks to Georg Pacher) * added New Zealand symbol set (NZSS, thanks to Bruce Mutton) * updated UIS symbol set (thanks to Bruce Mutton) * updated German translation (thanks to Georg Pacher) * updated Italian translation (thanks to Marco Corvi) * added bulgarian translation (thanks to Alexander Yanev) * updated English translation (thanks to Bruce Mutton) * added te reo Maori translation (thanks to Kyle Davis) * added possibility to define own coordinate system in therion.ini (cs-def) * updated survex img library to version 1.1.15 * added option -enable/disable splay-shots to 3d model export (works with .3d and .kml file formats) * bugs fixed: - fixed huge coordinate numbers in extended elevation xvi - xvi with sketches export - unnecessary warningcheck changes eliminated from metapost code - fixed bug with 3d model generation from scraps without outline - fixed bug with missing patterns in symbols.xhtml - fixed bug - direction point not working with line secion - fixed inaccurate clipping of coloured scrap background - fixed placement of surface bitmaps with larger offset - fixed alignment of some point symbols in AUT symbol set - missing white fill below cave passages in transparent PDFs if background colour is white (needed if the map is included into other map with non-white background) - fixed incorrect line width conversion in some patterns - hide white background of scraps when the PDF layer containing them is invisible - constrained Delaunay triangulation engine replaced by poly2tri - passage outline scanning algorithm improved - "nosurvey" shots allowed between unfixed stations - added missing area flowstone, moonmilk and bedrock into legend - fixed xvi export of extended elevation - fixed symbol-hide/show point remark bug - fixed wall:debris bug in AUT symbol set (thanks to Georg Pacher) - fixed layout color map-bg transparent bug - LRUD area dimensions is drawn for all shots before these shots are drawn (centerline is compact when map is exported from centerline only) xtherion: * bugs fixed: - loch: * VTK file export changed to binary type (problem with coordinate systems) * added checkbox that enables/disables surface lighting (Scene->Surface) * bugs fixed: - vthreshold should work now for LRUD modelling -------------------------------------------------------------------------------- Therion 5.3 (2010-02-17): therion: * added language selector for strings * -filter (on)|off option added to continuation export to support export of all continuations * -surveys (on)|off option added to cave-list export to allow export of raw list of caves * new easy setup for OpenType and TrueType fonts (requires lcdf-typetools) (new otf2pfb and pdf-fonts options in therion.ini) * basic support for right-to-left scripts in labels and legend * PDF files now contain unicode mapping information to allow searching and copying texts consisting of accented and non-latin characters * georeferencing data added to pdf maps * new layout option: symbol-color * new symbol groups: water, speleothems, passage-fills, equipment * new flags for stations: arch and overhang to mark these surface karst features * support for splay shots without station names (using "-" or "." as station name) * added greek translation (thanks to Stelios Zacharias) * added albanian translation (thanks to Fatos Katallozi) * updated german translation (thanks to Roger Schuster; Georg Pacher's additions to be implemented soon) * sketches displayed in map layer in pdf and svg, not among surface bitmaps (T#8996) * PROJ.4 library updated to 4.7.0 * geomag data updated until 2015 * bugs fixed: - BCRA3 and BCRA5 survey grades fixed - missing altitudes in cave list - atlas page exclusion - map header positioning using real numbers - attribute export to metapost - fixed russian translation (B#26399) - transparency in metapost reset when followed by clipped area - back readings supported in data roles+instruments - missing LRUD data in PLT export (B#25532) - segfault on line with single point - "-flip none" not working for scrap - lat/long out of range - map-header x y off behaves as if map-header x y nw (B#25537) - incorrect boundary of background sketches in pdf and svg maps xtherion: * script for creation of OziExplorer MAP files for georeferenced maps (Help->Calibrate bitmap) * added import functions for PocketTopo export - centerline in text editor: File->Import->PocketTopo therion export - sketches in map editor: Background Images->Insert->PocketTopo therion export * bugs fixed: - increasing of station numbers with leading zeros or trailing letters loch: * added File->Import function to allow merging of e.g. 3d files with DTM in loch format * added Tools->Options->Measurement system setup * splay and duplicate shots are hidden by default * entrances, stations and fixed stations and their labels can be displayed on screen (added toolbar buttons and Scene setup->Stations control panel) -------------------------------------------------------------------------------- Therion 5.2 (2008-08-07): therion: * statistics of explored but not yet surveyed passages. Just specify `-explored ' to point continuation or add `explored ' to station flags and this length will be used in survey/cave statistics. * new handling of user defined symbols (including legend) * improved station flags handling. Added new flags for stations: sink, spring, doline, dig, air-draught(:winter|summer). Also `not' is supported before flag. User defined attributes may be added to stations using flag `attr' followed by attribute name and value. * station flags can be turned on|off using layout: symbol-show|hide point flag:entrance|continuation|sink|spring|doline|dig... * added `splay' and `approx[imate]' survey shot flag * grid labeling using coordinates - layout option grid-coords off|border|all * ability to color labels by scrap color using `color labels on|off' in layout * user can change translation of therion texts at runtime using `text' option in configuration or initialization files * when layouts are copied one into another, map-comments are concatenated instead of replaced * added russian translations + encodings (thanks to Vasily Vl. Suhachev) * updated french translations (thanks to Gilbert Fernandes) * attributes to metapost are exported as strings only * bugs fixed: - symbol-show|hide line moonmilk works - declination output fixed (half year shift removed) - invalid LRUD dimensions in PDF map output - installation script - page grid origin not affected by rotation/meridian convergence - scale works with all point labels xtherion: * ERROR/WARNING state of compilation * changed increased default sidebar width + default sidebar width configuration option in xtherion.ini file * single .xtherion.dat file containing survey and map structures is created after compilation * bugs fixed: - "end of line" characters translation - toolbar icon decriptions added to localization files loch: * export of cave 3D model in VTK format using File->Export * bugs fixed: - wxWidgets 2.8.0 compilation thanks to Olly Betts - walls altitude coloring under Linux -------------------------------------------------------------------------------- Therion 0.5.1 (2007-08-29): therion: * added configuration for debian based linux systems: make config-debian * new samples directory * new subtypes for air-draught symbol: winter and summer * new area types: flowstone, moonmilk * ability to display overlying maps in offset * new point and line type: map-connection (used to indicate connection between map parts - extended elevations, maps in offset) * improved default centerline symbols * LRUD envelopes of maps exported from centerline * point -extend option changed to -from * user defined types of points/lines/areas (using u type and custom subtype string e.g. u:electric-cable) * scraps without calibration stations are allowed * coordinate system specification allowed for scraps * areas exported to SHP files * export of simple DXF maps * updated Italian translation (thanks to Marco Corvi) * bugs fixed: - top level objects selection - generation of extended elevation - map coloring - creating surveys from .3d files - subpixel inaccuracy with bitmap morphing - entering angles/lat-long in degree:minutes format - shapefile export fixes xtherion: * DXF/SVG import in map editor (File->Import) * symbol themes and translations comboboxes * autocompletion in symbol type comboboxes * bugs fixed: - translations of type:subtype works loch: * first Mac OS X version works * bugs fixed: - surface texture mapping under Linux -------------------------------------------------------------------------------- Therion 0.5.0 (2007-02-02): therion: * geodetic coordinate systems support -- CS specification in layout, centerline, surface, import and configuration file. Coordinate systems used all around the world are supported (EPSG and ESRI standards). * added GEOMAG model for automatic calculation of magnetic declination according to cave coordinates and survey date * multiple images (PDF, PNG, JPEG) in PDF map supported (e.g. plan and xelevation in single PDF) using new layout option map-image * new improved vector morphing algorithm * morphing of survey sketches now supported. New -sketch option for scrap + sketches switch in layout. Allows export of morphed survey sketches in PDF and XVI. ImageMagick package (convert and identify executables) are needed to use these features. * -attr option for specification of user defined attributes, valid for all objects. Attributes are exported to metapost code using ATTR_* variables. * shapefile map export format * Google Earth (.kml) map (scrap outlines) and model (centerline) export * -enc|-encoding option allowed for map and model export * top level survey command not needed any more * survey: new -namespace switch, enables using datasets with unique station names * new area type: bedrock * subtype specification is now possible using ":" separator (e.g. border:invisible) * added "system" command in configuration files to execute system commands during therion compilation * new layout option: north (true)|grid * -calibrate option for import * source/endsource construct allowed in configuration files * input allowed within multiline commands * improved ceiling and floor meander symbols * background centerline map exported only when no scraps or maps exist * support for 1.1 survex .3d file format * added German translation of symbols (thanks to Roger Schuster), updated Italian translation (thanks to Marco Corvi). * default Linux installation is done into "/usr/local" instead of "/usr" directory * bugs fixed: - automatic calculation of atlas paper size when only size is specified - extended elevation generation ("break" removed, only "ignore" works) - empty map when exported with -layout-color map-fg map xtherion: * compiler preview toolbox (experimental, acrobat reader supported on Win32, xpdf on Linux (original idea of Marco Corvi)) * sketch control (insert, remove) in scrap toolbox * 3D viewer removed from xtherion * does not connect to Internet any more to check new version available * remembers last working directory on Windows * improved scrap scaling - "Scale" button + scale preview arrow in scrap control * scrap selection selects current scrap first * bugs fixed: - hang when area inserted at the end of file - deleting contents of configuration files should not happen any more - fixed zooming of transparent pictures loch: * bugs fixed: - initial size on multiple display machines - crash when file with texture is opened as loch argument (or doubleclick on Win) -------------------------------------------------------------------------------- Therion 0.4.0 (2006-10-02): therion: * loch - new 3D viewer and default 3D export format * VRML model export improved (added surface texture) * export model: -wall-source (all)|maps|centerline -- specify the source of passage walls * layout: survey-level -- show up to N surveys with station names (default N=0, survey-level all is also accepted). * 3d file import improved -- multiple imports of the same centerline allowed * if no map is selected with export, also centerline is exported * symbol sets overview using --print-symbols option. Output in XHTML format (file symbols.xhtml). * fixed bug with autojoin and multiple projection output xtherion: * images outside .th2 file path accepted, relative path is still created using ".." directory reference * area border lines are highlighted, when selected in listbox * backup of configuration files is created after OK compilation * added IT translation -------------------------------------------------------------------------------- Therion 0.3.10 (2006-04-05): therion: * decimal point in low passage heights * fixed bugs: loop closure errors log, symbol-hide group cave-centreline * SVG export in XHTML format * flowstone and waterflow symbols joined in legend, if used as line and point together * improved loop closure method selection - if there was an error when processed using survex - therion is used for loop closure * when scrap size exceed metapost limits - more reasonable errors are generated + limit for centerline scraps is larger * layout: you can change overlap or size and page setup is automatically recalculated * layout: color map-fg scrap * layout: debug station-names xtherion: * added toolbar (thanks to dzach) * added text editor template (in xtherion.ini file) -------------------------------------------------------------------------------- Therion 0.3.9 (2005-08-30): therion: * units (metric)|imperial in layout and initialization file * new therion.ini switch: loop-closure therion|survex By default, survex is used if present, otherwise therion. * fixed bugs - error log when disk full, vtreshold -> vthreshold * map export to .3d files * scraps in one .th2 file that have common end line points are automatically joined * scrap names in map output, via layout: debug scrap-names xtherion: * fixed bugs - view is not moved when line is split, file is not changed when image insertion is canceled -------------------------------------------------------------------------------- Therion 0.3.8 (2005-05-10): therion: * SVG export added (features not yet supported: map header, font embedding, layers, map transparency -- this requires SVG 1.2 features) * DXF model export added * export format automatically determined from file extension * layout: map-header-bg on|(off) - when on, background of map header is filled with background color * .ini files installed into /etc directory, .ini.new files always installed xtherion: * new items in xtherion.ini file * text editor - indent mode now similar to ordinary text editors -------------------------------------------------------------------------------- Therion 0.3.7 (2005-03-16): therion: * new (more intuitive) extended elevation arrangement * new import options: filter, surveys * new surface option: grid-flip * new centerline option: extend * new point type: dimensions * new scrap option: flip * new scrap/centerline option: station-names * reduced `extend' point option * all altitudes are exported as a difference against grid Z origin * XVI (xtherion vector image) map export * UD data from centerline used in 3D model generated from scraps * plt export with LRUD data * `/' supported as survey name character * Unicode characters support in layout TeX code * fixed bugs: plumbed shots; join; statistics of centerline only maps xtherion: * limited i18n support * XVI support (automatic insertion of survey stations, LRUD data) * fixed bug with gamma correction -------------------------------------------------------------------------------- Therion 0.3.6 (2005-01-31): therion: * LRUD passage dimensions support * centreline processed in other programs (*.3d, *.plt) may be imported * transparent solid surface in 3D model * map colouring support * map grid support * if station subtype is not specified, Therion reads it from centreline, if it's specified there * MetaPost symbols completed and improved (error handling, division by zero fixed) * scrap filled and clipped correctly even if scrap border intersects itself * centerline, bounding box and surface supported in 3DMF and VRML export * Spanish translation added * input language changes: - centreline command: mark, walls, vtreshold; + new role pics + new data item ignoreall + new data type dimensions (station, up/ceiling, down/floor, left, right) + LRUD dimensions may specified as pair [ ] - point command: snow - line command: ceiling/floor-meander, border:presumed + line gradient and water-flow not clipped by default - area command: blocks, snow, ice, clay, pebbles - scrap command: -3d changed to -walls option - equate command: may be used outside of centreline - import command added * configuration file changes: - layout command: grid, grid-size, code/endcode, color map-fg , color-legend xtherion: * new items in xtherion.ini * file timestamps are checked while saving * auto save feature * lot of bugfixes * Map editor: new shortcuts (ctrl-a, ctrl-r, page up/down, shift page up/down) * Map editor: clicking twice on the same point ends the point insertion mode * Map editor: station names are automatically increased (or decreased :) in extended elevation) -------------------------------------------------------------------------------- Therion 0.3.5 (2004-11-25): therion: * map rotation in 2D output supported * bug fixed: -scale option works for point labels * input language changes: - centreline command: percent[age] clino units support * configuration file changes: - layout command: rotate xtherion: * Map editor: point, line and area symbol are never inserted outside of a scrap -------------------------------------------------------------------------------- Therion 0.3.4 (2004-10-22): therion: * MetaPost and TeX supplied in Therion for Windows installer work even if there is other TeX(Live) installation present in the system (see the tex-env initialization file option) * if there are no maps defined and map is exported, all scraps in given projection are exported * input language changes: - centreline command: group/endgroup * initialization file: - new option: tex-env * fixed bug in atlas export introduced in 0.3.3 * fixed minor MetaPost bugs xtherion: * Compiler: hyperlinked error messages * Map editor: larger tick at the line symbol beginning * Map editor: new scrap is inserted in the beginning of the file * Map editor: fixed bug when deleting last line point * Map editor: line symbol type change resets rotations and lengths set-up in the line points -------------------------------------------------------------------------------- Therion 0.3.3 (2004-09-10): therion: * surface (topographical) map supported in 2D maps * surface grid supported in 3D models (therion format) * typesetting of legend symbols in multiple columns fixed * input language changes: - new command surface - point, line and area commands have new option: context - line command: survey has new subtypes: cave, surface - line command has new option: adjust - map command: ability to draw centreline from specified survey without drawing a scrap; new option: projection * configuration file changes: - layout command has new options: legend-width, legend-columns, surface, surface-opacity - export model has new options: enable, disable xtherion: * Model viewer: mouse wheel supported -------------------------------------------------------------------------------- Therion 0.3.2 (2004-07-22): therion: * configuration file changes: - layout command: scale 1 50 up to 1 100000 allowed and supported * Therion constructs accented characters if the character is not present in the font. It used to omit the accent and display the base character only * error message `invalid command context' changed to `missing xxx command before yyy command' * French translation added xtherion: * line split bug fixed * automatically checks for updates * 3D viewer: reload (Ctrl+R) * 3D viewer: bounding box computation fixed -------------------------------------------------------------------------------- Therion 0.3.1 (2004-04-23): therion: * input language changes: - scrap command has new option: 3d * windows version: accepts slashes as directory separators in the export command * Czech translation added xtherion: * Map editor: fixed bug with empty lines displayed as text * Map editor: doesn't allow to insert a background image if the *.th2 file hasn't been saved -------------------------------------------------------------------------------- Therion 0.3.0 (2004-04-16): therion: * Therion exports 3D model * loop closure algorithms implemented in Therion * input language changes: - centreline command: fix doesn't accept covariances specification * configuration file changes: - layout command: map-header improved - export command: new formats for 3D model export added -- vrml, 3dmf, therion (default) * initialization file changes: - removed item: path-cavern * log file contains both loop errors and scrap distortions at the end * completely new Win32 installation with TeX and Tcl/Tk included xtherion: * data file may be specified as an argument from the command line * basic 3D model viewer added * Map editor: only the visible part of background images is zoomed (less memory consumption and speed improvement) -------------------------------------------------------------------------------- Therion 0.2.19 (2004-03-01): therion: * input language changes: - place option of point, line, area commands: none renamed to default - area command: place bottom is default - line command: if contour has no gradient specified, visualization is symbol-set dependent (no gradient tick in UIS, tick in the middle in SKBB) - line command: pit may be spelled as pitch - line command has new type: gradient - survey command has new option: person-rename * configuration file changes: - layout command has new option: debug - select command: new rules for selection if there is no map selected * scrap transformation improved, distortion logged in the log file * debugging map mode shows scrap distortions * bug fixed in PLT export xtherion: * Map editor: status bar displays command preview * Map editor: new Area control * Map editor: `Move to' in File commands added * Map editor: name of the edited scrap displayed in Title bar * Map editor: edited line is highlighted * Map editor: selected area is highlighted * Map editor: orientation tick at the beginning of line symbols * Help/Control dialog with key and mouse shortcuts * input (keyboard) encoding menu -------------------------------------------------------------------------------- Therion 0.2.18 (2004-02-12): therion: * Therion supports translations of texts in PDF map/atlas output * Therion exports centreline to SQL database * input language changes: - line command has new type: water-flow - centerline command: discovery-date/team renamed to explo-date/team - layout command has new options: language, colo[u]r, symbol-show, map-comment, map-header, scale-bar, statistics - -author and -copyright options apply only to centreline and scrap, -title to survey, centreline, map and scrap - it's possible to leave date field unspecified `-' * configuration file changes: - export command has new type: database * initialization file changes: - new items: language, encoding-sql - encoding_default renamed to encoding-default * air-draught ticks set according to -scale option -------------------------------------------------------------------------------- Therion 0.2.17 (2003-12-04): therion: * input language changes: - layout command has new options: base-scale, symbol-set, symbol-assign, symbol-hide - size option for point and line symbols accepts following values: tiny (xs), small (s), normal (m), large (l), huge (xl) * support for run-time loading of map symbols * MetaPost processing optimizations -------------------------------------------------------------------------------- Therion 0.2.16 (2003-11-24): therion: * input language changes: - centerline command has new team roles: instruments (insts), assistant (dog) - centerline command has new data readings: up/ceiling, down/floor, left, right, ignore - centerline may be spelled as centreline - deg:min:sec syntax allowed for degree values - point, line and area commands have new option: visibility on/off * new rules for displaying map previews * new initialization file items: tmp-path, tmp-remove * error if no source files are specified * if error occurs under Win32, Therion waits until RETURN is pressed xtherion: * Help/BAC Calculator dialog added -------------------------------------------------------------------------------- Therion 0.2.15: therion: * input language changes: - layout command has new option: code - join command has new option: count * therion checks validity of UTF-8 encoded input files xtherion: * bug fixed -- compiler does not add empty lines to config files -------------------------------------------------------------------------------- Therion 0.2.14 (2003-07-16): therion: * input language changes: - layout command has new option: layers on/off * initialization file syntax changes: cavern-path, pdftex-path, mpost-path, source-path * fonts setup for PDF output * updated documentation * Therion reads (definitely) following environment variable: - THERION -- search paths for [x]therion.ini file -------------------------------------------------------------------------------- Therion 0.2.13 (2003-06-16): therion: * thpdf, theps2pdf and 3dtops external programs integrated into Therion * MetaPost and TeX macros compiled into Therion * compilation: just "make" is enough; works also on win32 systems * input language changes: - centerline command has new options: discovery-date, discovery-team - point command: type anostomosen renamed to anastomosis - layout command has new option: transparency on/off - layout command has changed option: opacity 0.0-100.0 - layout command has changed option: grid-size is measured in real units * Therion reads following environment variables: - THINIT -- search paths for [x]therion.ini file - THERION -- search paths for configuration and source files * PDF output: support for Optional Content Groups (Layers) in Acrobat 6 xtherion: * Text editor: text undo/redo works with tcltk8.4.3 * Map editor: line symbols may be split -------------------------------------------------------------------------------- Therion 0.2.12 (2003-05-27): * 3dtopos not needed any more (removed also from therion.ini file) * layout::grid-size in real distance units * environment variables: THINIT - search paths for (x)therion.ini file THERION - search paths for configuration and source files * centerline - discovery-date + discovery-team -------------------------------------------------------------------------------- Therion 0.2.11 (2003-05-05): * point->subtype: water-flow: paleo, intermittent, permanent (default) (station: temporary (default)) -------------------------------------------------------------------------------- Therion 0.2.10 (2003-04-09): * Installation - just "make" is enough - make xtherion, make thpdf not needed any more - make xtherion, thpdf works on Win32 * Layout - transparency on/off - opacity 0.0-100.0 * Point symbols - anostomosen -> anastomosis therion-6.3.4/CMakeLists.txt000066400000000000000000000210441477525762700157630ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.16) set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) include(PreventInSourceBuilds) project(therion) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) option(BUILD_THERION "Build therion executable." ON) option(BUILD_LOCH "Build loch executable." ON) option(BUILD_THBOOK "Build thbook.pdf." ON) option(BUILD_XTHERION "Build xtherion." ON) include(GNUInstallDirs) include(BuildType) include(Dependencies) include(TherionSources) include(ECMEnableSanitizers) include(Warnings) # strip binaries in release build set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -s") set(ECM_ENABLE_SANITIZERS "" CACHE STRING "Enable runtime sanitizers, available options: address,memory,thread,leak,undefined." ) set(ENABLE_THDEBUG OFF CACHE BOOL "Print debug information.") option(ENABLE_CLANG_TIDY "Enable static analysis with clang-tidy." OFF) if (ENABLE_CLANG_TIDY) find_program(CLANG_TIDY_EXECUTABLE clang-tidy) if (CLANG_TIDY_EXECUTABLE) set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_EXECUTABLE};--quiet") endif() endif() option(ENABLE_CCACHE "Enable compiler cache." OFF) if (ENABLE_CCACHE) find_program(CCACHE_EXECUTABLE ccache) mark_as_advanced(CCACHE_EXECUTABLE) if(CCACHE_EXECUTABLE) set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_EXECUTABLE}) set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CCACHE_EXECUTABLE}) endif() endif() option(ENABLE_CODE_COVERAGE "Enable code coverage." OFF) include(CodeCoverage) # determine platform if(UNIX AND NOT APPLE) set(THPLATFORM LINUX) elseif(APPLE) set(THPLATFORM MACOSX) else() set(THPLATFORM WIN32) endif() # tell CMake which files must be generated now, doing so in subfolders is too late set_source_files_properties( ${CMAKE_BINARY_DIR}/thchencdata.h ${CMAKE_BINARY_DIR}/thchencdata.cxx ${CMAKE_BINARY_DIR}/thlangdata.h ${CMAKE_BINARY_DIR}/thlangdatafields.h ${CMAKE_BINARY_DIR}/thmpost.h ${CMAKE_BINARY_DIR}/thmpost.cxx ${CMAKE_BINARY_DIR}/thsymbolsets.h ${CMAKE_BINARY_DIR}/thsymbolsets.cxx ${CMAKE_BINARY_DIR}/thversion.h ${CMAKE_BINARY_DIR}/thcsdata.h ${CMAKE_BINARY_DIR}/thcsdata.cxx ${CMAKE_BINARY_DIR}/thsymbolsetlist.h ${CMAKE_BINARY_DIR}/thtex.h ${CMAKE_BINARY_DIR}/thtex.cxx PROPERTIES GENERATED TRUE ) # copy given files to the build dir function(therion_copy_files) foreach(FILE_NAME ${ARGV}) configure_file(${FILE_NAME} ${FILE_NAME} COPYONLY) endforeach() endfunction() # make lists of names with source and binary dir prefixes macro(therion_make_files_lists LIST_NAME) foreach(FILE_NAME ${ARGN}) list(APPEND ${LIST_NAME}_SRC ${CMAKE_CURRENT_SOURCE_DIR}/${FILE_NAME}) list(APPEND ${LIST_NAME}_BIN ${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}) endforeach() endmacro() # copy files needed by some build steps therion_copy_files(thcsdata.tcl thsymbolsetfont.txt .clang-tidy) # generate thcsdata sources add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/thcsdata.h ${CMAKE_BINARY_DIR}/thcsdata.cxx COMMAND tclsh thcsdata.tcl ${PROJ_PREFIX}/share/proj DEPENDS ${CMAKE_BINARY_DIR}/thcsdata.tcl WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) add_custom_target(generate_thcsdata DEPENDS ${CMAKE_BINARY_DIR}/thcsdata.h ${CMAKE_BINARY_DIR}/thcsdata.cxx ) # generate thsymbolsetlist sources add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/thsymbolsetlist.h COMMAND perl ARGS ${CMAKE_SOURCE_DIR}/thsymbolsetlist.pl DEPENDS ${CMAKE_SOURCE_DIR}/thsymbolsetlist.pl ${CMAKE_BINARY_DIR}/mpost/thTrans.mp ${CMAKE_BINARY_DIR}/thsymbolsetfont.txt WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) add_custom_target(generate_thsymbolsetlist DEPENDS ${CMAKE_BINARY_DIR}/thsymbolsetlist.h) # check if there are artifacts from the legacy Makefile in the source dir, # which could interfere with the CMake build add_custom_target(legacy-make ${CMAKE_COMMAND} -P cmake/DetectLegacyBuild.cmake COMMENT "Checking for legacy build" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) # generate version files add_custom_target(version python3 set_version.py ${CMAKE_BINARY_DIR} COMMENT "Updating version" BYPRODUCTS ${CMAKE_BINARY_DIR}/thversion.h ${CMAKE_BINARY_DIR}/thbook/version.tex DEPENDS legacy-make WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) # generate InnoSetup config file if (WIN32) configure_file(innosetup.ini.in innosetup.ini) endif() # set an installation path for ini files if (IS_ABSOLUTE ${CMAKE_INSTALL_SYSCONFDIR}) set(TH_PATH_INI "${CMAKE_INSTALL_SYSCONFDIR}") else() set(TH_PATH_INI "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_SYSCONFDIR}") endif() if (BUILD_THERION) add_subdirectory(extern/quickhull) # therion lib add_library(therion-common STATIC ${THERION_HEADERS} ${THERION_SOURCES}) target_include_directories(therion-common BEFORE PUBLIC "${CMAKE_BINARY_DIR}" "${CMAKE_SOURCE_DIR}") target_link_libraries(therion-common PUBLIC proj-interface shp-interface poly2tri common-utils QuickHull) target_compile_definitions(therion-common PUBLIC "TH${THPLATFORM}" $<$:THDEBUG>) add_dependencies(therion-common version generate_thsymbolsetlist generate_thlang generate_tex generate_mpost generate_thchencdata generate_thcsdata ) # therion executable add_executable(therion therion-main.cxx) target_link_libraries(therion therion-common) # therion resource file if (WIN32) if (MSVC) set(THERION_RC_COMMAND ${CMAKE_RC_COMPILER} /fo ${CMAKE_CURRENT_BINARY_DIR}/therion.res ${CMAKE_CURRENT_SOURCE_DIR}/therion.rc) else() set(THERION_RC_COMMAND ${CMAKE_RC_COMPILER} -i ${CMAKE_CURRENT_SOURCE_DIR}/therion.rc -J rc -o ${CMAKE_CURRENT_BINARY_DIR}/therion.res -O coff) endif() add_custom_command(COMMAND ${THERION_RC_COMMAND} OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/therion.res DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/therion.rc ${CMAKE_CURRENT_SOURCE_DIR}/therion.ico WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) add_custom_target(generate_resource_therion DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/therion.res) add_dependencies(therion generate_resource_therion) target_link_libraries(therion ${CMAKE_CURRENT_BINARY_DIR}/therion.res) endif() install(TARGETS therion RUNTIME COMPONENT th-runtime) install(FILES therion.ini TYPE SYSCONF RENAME therion.ini.new COMPONENT th-runtime) install(CODE "if (NOT EXISTS ${TH_PATH_INI}/therion.ini) file(INSTALL ${CMAKE_CURRENT_SOURCE_DIR}/therion.ini DESTINATION ${TH_PATH_INI}) endif()" COMPONENT th-runtime) # unit tests add_executable(utest utest-main.cxx utest-proj.cxx utest-str.cxx utest-thdatastation.cxx utest-thdb2dab.cxx utest-thdouble.cxx utest-thexception.cxx utest-thlayoutln.cxx utest-thlogfile.cxx utest-thobjectid.cxx utest-thobjectsrc.cxx utest-thscrapen.cxx utest-thscraplo.cxx ) target_link_libraries(utest PUBLIC therion-common catch2-interface) enable_testing() add_test(NAME utest COMMAND $ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) if (ENABLE_CODE_COVERAGE) set_property(TEST utest PROPERTY ENVIRONMENT LLVM_PROFILE_FILE=${COVERAGE_FOLDER}/utest.profraw) endif() # updates thlibrarydata.cxx add_custom_target(library ${CMAKE_COMMAND} -D THERION=$ -P cmake/Library.cmake WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) add_subdirectory(extern/poly2tri) add_subdirectory(mpost) add_subdirectory(thchencdata) add_subdirectory(tex) add_subdirectory(thlang) add_subdirectory(samples) endif() add_subdirectory(loch) add_subdirectory(thbook) add_subdirectory(xtherion) # deployment of DLL dependencies on Windows if (BUILD_THERION AND BUILD_LOCH AND WIN32) set(DLLS_DIR ${CMAKE_BINARY_DIR}/dependencies) add_custom_target(deploy ${CMAKE_COMMAND} -D THERION=$ -D LOCH=$ -D DLLS_DIR=${DLLS_DIR} -P cmake/Deploy.cmake WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) set_target_properties(deploy PROPERTIES ADDITIONAL_CLEAN_FILES ${DLLS_DIR}) endif() therion-6.3.4/CONTRIBUTING.md000066400000000000000000000007611477525762700154570ustar00rootroot00000000000000## Pull requests Please follow these rules when submitting pull requests (PR): * make PRs as atomic as possible (don't combine unrelated changes or features into one PR) * the PR should include all necessary documentation updates (summary of the changes in the file [CHANGES](https://github.com/therion/therion/blob/master/CHANGES), all the details in the [thbook](https://github.com/therion/therion/tree/master/thbook)). Please try to be consistent with the style of existing documentation. therion-6.3.4/COPYING000066400000000000000000000431411477525762700142600ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. therion-6.3.4/Makefile000066400000000000000000001666731477525762700147050ustar00rootroot00000000000000# common therion objects CMNOBJECTS = thdate.o extern/shapelib/shpopen.o extern/shapelib/dbfopen.o extern/shapelib/safileio.o \ thexception.o thbuffer.o thmbuffer.o thlog.o thlogfile.o thtmpdir.o thlocale.o \ thparse.o thcmdline.o thconfig.o thinput.o thchenc.o thdatabase.o \ thdataobject.o thdatareader.o thsurvey.o thendsurvey.o thdata.o \ thperson.o thtf.o thtfangle.o thtflength.o thtfpwf.o \ thdataleg.o thobjectname.o thinfnan.o thlayout.o thlookup.o thcomment.o \ thinit.o thdb1d.o thsvxctrl.o thdatastation.o thobjectid.o \ thobjectsrc.o thgrade.o thlibrary.o thgeomag.o thbezier.o \ thexport.o thexporter.o thselector.o extern/img/img.o \ thexpmodel.o thdb2d00.o thscrapis.o thcs.o thcsdata.o thexptable.o \ thdb2d.o thscrap.o thendscrap.o th2ddataobject.o thdb2dprj.o \ thdb2dpt.o thdb2dlp.o thdb2dab.o thdb2dji.o thdb2dmi.o thdb2dcp.o \ thdb2dxm.o thdb2dxs.o thscraplo.o thscraplp.o thscrapen.o \ thpoint.o thline.o tharea.o thlegenddata.o thmpost.o thsymbolsets.o \ thjoin.o thmap.o thexpmap.o thlayoutln.o thlayoutclr.o thexpsys.o thexpuni.o \ thpdf.o thpdfdbg.o thpdfdata.o thtexfonts.o \ thsymbolset.o thlang.o thmapstat.o thexpdb.o thpic.o thsketch.o thproj.o \ extern/lxMath.o extern/lxFile.o extern/icase.o thdb3d.o thsurface.o thimport.o thsvg.o thepsparse.o \ thtrans.o thwarpp.o thwarppt.o thwarppme.o thwarp.o thexpshp.o thattr.o thtex.o \ extern/poly2tri/common/shapes.o extern/poly2tri/sweep/advancing_front.o extern/poly2tri/sweep/sweep.o extern/poly2tri/sweep/cdt.o extern/poly2tri/sweep/sweep_context.o \ extern/quickhull/QuickHull.o therion.o TESTOBJECTS = utest-main.o utest-proj.o utest-str.o EXT = # Prefix to install to (override like so: make PREFIX=/usr) PREFIX ?= /usr/local # Directory to install config files in (override like so: make SYSCONFDIR=/etc) SYSCONFDIR ?= $(PREFIX)/etc # PLATFORM CONFIG # PLATFORM LINUX ##CXX = c++ ##CC = gcc ##POBJECTS = ##LOCHEXE = loch/loch ##CXXPFLAGS = -DTHLINUX ##CCPFLAGS = -DTHLINUX ##LDPFLAGS = -s ##export THPLATFORM = LINUX ##export OUTDIR = ../therion.bin ##THXTHMKCMD = $(OUTDIR)/therion # PLATFORM DEBIAN CXX ?= c++ CC ?= gcc POBJECTS = LOCHEXE = loch/loch CXXPFLAGS = -DTHLINUX CCPFLAGS = -DTHLINUX LDPFLAGS = -s export THPLATFORM = LINUX export OUTDIR = . THXTHMKCMD = $(OUTDIR)/therion # PLATFORM WIN32 ##EXT = .exe ##CXX ?= c++ ##CC ?= gcc ##POBJECTS = therion.res ##LOCHEXE = loch/loch ##CXXPFLAGS = -DTHWIN32 ##CCPFLAGS = -DTHWIN32 ##LDPFLAGS = -static-libgcc -s ##export THPLATFORM = WIN32 ##export OUTDIR ?= ../therion.bin ##THXTHMKCMD = $(OUTDIR)/therion # PLATFORM WIN32CROSS ##CROSS ?= i686-w64-mingw32.static- ##EXT = .exe ##CXX = $(CROSS)c++ ##export CC = $(CROSS)gcc ##export AR = $(CROSS)ar ##POBJECTS = therion.res ##LOCHEXE = loch/loch ##CXXPFLAGS = -DTHWIN32 ##CCPFLAGS = -DTHWIN32 ##LDPFLAGS = -static-libgcc -static -s ##export THPLATFORM = WIN32 ##THXTHMKCMD = therion ##export OUTDIR ?= ../therion.bin # PLATFORM MACOSX ##CXX = c++ ##CC = cc ##LOCHEXE = loch/loch ##POBJECTS = ##CXXPFLAGS = -DTHMACOSX ##CCPFLAGS = -DTHMACOSX ##LDPFLAGS = ##export THPLATFORM = MACOSX ##export OUTDIR = . ##THXTHMKCMD = ./therion # PLATFORM ENDCONFIG # BUILD CONFIG # BUILD OZONE ##CCBFLAGS = -O3 ##CXXBFLAGS = -O3 ##LDBFLAGS = $(LDPFLAGS) # BUILD OXYGEN CCBFLAGS = -O2 CXXBFLAGS = -O2 LDBFLAGS = $(LDPFLAGS) # BUILD RELEASE ##CCBFLAGS = ##CXXBFLAGS = ##LDBFLAGS = $(LDPFLAGS) # BUILD DEBUG ##CCBFLAGS = -ggdb -fsanitize=address ##CXXBFLAGS = -ggdb -DTHDEBUG -fsanitize=address ##LDBFLAGS = # BUILD ENDCONFIG # proj4 settings PROJ_UNSUPPORTED = 5.0.0 5.0.1 6.0.0 6.1.0 6.1.1 6.2.0 PROJ_VER = $(shell $(CROSS)pkg-config proj --modversion) ifneq ($(filter $(PROJ_VER),$(PROJ_UNSUPPORTED)),) $(error unsupported Proj version: $(PROJ_VER)) endif PROJ_LIBS ?= $(shell $(CROSS)pkg-config proj --libs) PROJ_MVER ?= $(shell echo $(PROJ_VER) | sed 's/\..*//') CXXJFLAGS ?= -DPROJ_VER=$(PROJ_MVER) -I$(shell $(CROSS)pkg-config proj --variable=includedir) # compiler settings CXXFLAGS = -DIMG_API_VERSION=1 -DP2T_STATIC_EXPORTS -Wall $(CXXPFLAGS) $(CXXBFLAGS) $(CXXJFLAGS) -Iextern -Iextern/shapelib -Iextern/quickhull -Iextern/img -I$(shell $(CROSS)pkg-config fmt --variable=includedir) -std=c++17 CCFLAGS = -DIMG_API_VERSION=1 -Wall $(CCPFLAGS) $(CCBFLAGS) OBJECTS = $(addprefix $(OUTDIR)/,$(POBJECTS)) $(addprefix $(OUTDIR)/,$(CMNOBJECTS)) TESTOBJECTS_P = $(addprefix $(OUTDIR)/,$(TESTOBJECTS)) # linker settings LIBS = $(PROJ_LIBS) $(shell $(CROSS)pkg-config fmt --libs) LDFLAGS = $(LDBFLAGS) $(OUTDIR)/%.o : %.cxx $(CXX) -c $(CXXFLAGS) -o $@ $< $(OUTDIR)/%.o : %.cpp $(CXX) -c $(CXXFLAGS) -o $@ $< $(OUTDIR)/%.o : %.cc $(CXX) -c $(CXXFLAGS) -o $@ $< $(OUTDIR)/%.o : %.c $(CC) -c $(CCFLAGS) -o $@ $< all: version outdirs $(OUTDIR)/therion tests doc xtherion/xtherion $(LOCHEXE) outdirs: mkdir -p $(OUTDIR)/extern/poly2tri/sweep/ mkdir -p $(OUTDIR)/extern/poly2tri/common/ mkdir -p $(OUTDIR)/extern/quickhull mkdir -p $(OUTDIR)/extern/shapelib mkdir -p $(OUTDIR)/extern/img mkdir -p $(OUTDIR)/loch mkdir -p $(OUTDIR)/loch/help mkdir -p $(OUTDIR)/loch/help/en mkdir -p $(OUTDIR)/loch/help/sk mkdir -p $(OUTDIR)/xtherion mkdir -p $(OUTDIR)/thbook version: outdirs python3 set_version.py . ifeq ($(THPLATFORM),WIN32) echo "[PROJ]" > $(OUTDIR)/innosetup.ini && echo "version=$(PROJ_MVER)" >> $(OUTDIR)/innosetup.ini endif thversion.h: version $(OUTDIR)/therion: $(OBJECTS) $(CXX) $(CXXFLAGS) -o $(OUTDIR)/therion$(EXT) therion-main.cxx $(OBJECTS) $(LDFLAGS) $(LIBS) $(OUTDIR)/utest$(EXT): $(OBJECTS) $(TESTOBJECTS_P) $(CXX) $(CXXFLAGS) -o $(OUTDIR)/utest$(EXT) $(OBJECTS) $(TESTOBJECTS_P) $(LDFLAGS) $(LIBS) tests: $(OUTDIR)/utest$(EXT) ifneq ($(THPLATFORM),WIN32) $(OUTDIR)/utest$(EXT) endif $(OUTDIR)/therion.res: therion.rc $(CROSS)windres -i therion.rc -J rc -o $(OUTDIR)/therion.res -O coff init: ./therion --print-init-file > therion.ini install: all tclsh makeinstall.tcl $(THPLATFORM) $(DESTDIR)$(PREFIX) $(DESTDIR)$(SYSCONFDIR) release: python3 make_release.py depend: perl makedepend.pl > Makefile.dep perl maketest.pl Makefile.dep perl makefile.pl mv Makefile.dep Makefile $(CXX) -MM $(CXXFLAGS) *.cxx >> Makefile perl makedepend2.pl library: thversion.h $(THXTHMKCMD) --print-library-src thlibrarydata.thcfg > thlibrarydata.log perl makelibrary.pl thlibrarydata.log > thlibrarydata.tmp perl maketest.pl thlibrarydata.tmp perl makefile.pl mv thlibrarydata.tmp thlibrarydata.cxx ifeq ($(THXTHMKCMD),$(OUTDIR)/therion) THERION_TCL_DEPS += $(OUTDIR)/therion endif xtherion/therion.tcl: $(THERION_TCL_DEPS) $(THXTHMKCMD) --print-xtherion-src > xtherion/therion.tcl xtherion/xtherion: version xtherion/therion.tcl xtherion/*.tcl $(MAKE) -C ./xtherion loch/loch: version loch/*.h loch/*.cxx $(MAKE) -C ./loch doc: $(OUTDIR)/thbook/thbook.pdf thbook: version $(OUTDIR)/thbook/thbook.pdf samples: $(OUTDIR)/samples.doc/index.tex samples-quick: $(MAKE) -C samples quick touch thbook/version.tex $(MAKE) -C thbook samples-html: $(MAKE) -C samples html $(OUTDIR)/samples.doc/index.tex: $(MAKE) -C samples touch thbook/version.tex $(MAKE) -C thbook $(OUTDIR)/thbook/thbook.pdf: thbook/*.tex thversion.h $(MAKE) -C thbook clean: perl makefile.pl rm -q ./xtherion/therion.tcl perl makefile.pl rmdir -q samples.doc $(MAKE) -C ./samples clean $(MAKE) -C ./loch clean $(MAKE) cleanrest cleanrest: $(MAKE) -C ./xtherion clean $(MAKE) -C ./loch clean perl makefile.pl rm -q thmpost.cxx thtex.h thlangdata.h thchencdata.cxx thcsdata.h thmpost.h thcsdata.cxx thtex.cxx thsymbolsetlist.h thsymbolsets.cxx thsymbolsets.h thlangdatafields.h thchencdata.h SYMBOLS.txt perl makefile.pl rm -q therion ./xtherion/xtherion ./xtherion/xtherion.tcl therion.exe *~ *.log *.o thchencdata/*~ .xtherion.dat ./xtherion/ver.tcl thversion.h thbook/version.tex perl makefile.pl rm -q xtherion/*~ .xth_thconfig_xth xtherion/screendump thlang/*~ perl makefile.pl rm -q extern/*.o extern/*~ extern/quickhull/*.o extern/shapelib/*.o extern/poly2tri/common/*.o extern/poly2tri/sweep/*.o samples/*~ samples/*.log perl makefile.pl rm -q symbols.html therion.res innosetup.ini perl makefile.pl rm -q tri/*.o tri/*~ perl makefile.pl rm -q utest perl makefile.pl rm -q tex/*~ perl makefile.pl rm -q us.stackdump loch/us.stackdump samples/us.stackdump xtherion/us.stackdump perl makefile.pl rm -q mpost/*~ examples/*~ examples/therion.log perl makefile.pl rm -q core symbols.xhtml cave.kml perl makefile.pl rm -q data.3d data.svx data.pos data.pts data.err data.plt perl makefile.pl rm -q cave.3d cave.lox cave.thm cave.pdf cave.sql cave.xhtml therion.tcl cave_a.pdf cave_m.pdf cave.vrml cave.wrl cave.3dmf cave.svg cave.tlx perl makefile.pl rm -q ./thbook/*~ ./thbook/thbook.log ./thbook/thbook.pdf ./lib/*~ ./mpost/*~ ./tex/*~ perl makefile.pl rmdir -q doc thTMPDIR samples.doc symbols cave.shp tests/.doc perl makefile.pl rmdir -q doc symbols cave.shp tests/.doc perl makefile.pl rmdir -q thTMPDIR samples/*/thTMPDIR samples/*/*/thTMPDIR thmpost.h: mpost/*.mp $(MAKE) -C ./mpost thmpost.cxx: thmpost.h thsymbolsets.h: thmpost.h thsymbolsetlist.h thsymbolsets.cxx: thsymbolsets.h thsymbolsetlist.h: thsymbolsetlist.pl mpost/thTrans.mp perl thsymbolsetlist.pl thtex.h: tex/*.tex $(MAKE) -C ./tex thtex.cxx: thtex.h thchencdata.cxx: thchencdata.h thchencdata.h: thchencdata/*.TXT $(MAKE) -C ./thchencdata thcsdata.h: thcsdata.tcl tclsh thcsdata.tcl $(shell $(CROSS)pkg-config proj --variable=prefix)/share/proj update: $(MAKE) -C ./thlang update unixify: clean tclsh makeunixify.tcl thlangdata.h: thlang/texts.txt $(MAKE) -C ./thlang thlangdatafields.h: thlangdata.h $(MAKE) -C ./thlang config-debug: perl makeconfig.pl BUILD DEBUG cd loch; perl makeconfig.pl BUILD DEBUG config-release: perl makeconfig.pl BUILD RELEASE cd loch; perl makeconfig.pl BUILD RELEASE config-oxygen: perl makeconfig.pl BUILD OXYGEN cd loch; perl makeconfig.pl BUILD OXYGEN config-ozone: perl makeconfig.pl BUILD OZONE cd loch; perl makeconfig.pl BUILD OZONE config-debian: perl makeconfig.pl PLATFORM DEBIAN cd loch; perl makeconfig.pl PLATFORM DEBIAN config-linux: perl makeconfig.pl PLATFORM LINUX cd loch; perl makeconfig.pl PLATFORM LINUX config-win32: perl makeconfig.pl PLATFORM WIN32 cd loch; perl makeconfig.pl PLATFORM WIN32 config-win32cross: perl makeconfig.pl PLATFORM WIN32CROSS cd loch; perl makeconfig.pl PLATFORM WIN32CROSS config-macosx: perl makeconfig.pl PLATFORM MACOSX cd loch; perl makeconfig.pl PLATFORM MACOSX # external sources $(OUTDIR)/extern/lxMath.o: loch/lxMath.h loch/lxMath.cxx $(CXX) -c $(CXXFLAGS) -o $(OUTDIR)/extern/lxMath.o loch/lxMath.cxx $(OUTDIR)/extern/lxFile.o: loch/lxFile.h loch/lxFile.cxx $(CXX) -c $(CXXFLAGS) -o $(OUTDIR)/extern/lxFile.o loch/lxFile.cxx $(OUTDIR)/extern/icase.o: loch/icase.h loch/icase.cxx $(CXX) -c $(CXXFLAGS) -o $(OUTDIR)/extern/icase.o loch/icase.cxx extern/img/img.o: extern/img/img.c extern/img/img.h extern/poly2tri/common/shapes.o: extern/poly2tri/common/shapes.cc extern/poly2tri/common/shapes.h extern/poly2tri/sweep/advancing_front.o: extern/poly2tri/sweep/advancing_front.cc extern/poly2tri/sweep/sweep.o: extern/poly2tri/sweep/sweep.cc extern/poly2tri/sweep/cdt.o: extern/poly2tri/sweep/cdt.cc extern/poly2tri/sweep/sweep_context.o: extern/poly2tri/sweep/sweep_context.cc # DEPENDENCIES $(OUTDIR)/th2ddataobject.o: th2ddataobject.cxx th2ddataobject.h thdataobject.h \ thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h \ thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thlayoutclr.h thpdfdata.h thepsparse.h thscraplo.h thlayoutln.h \ thscrapen.h thscraplp.h thexception.h thsymbolset.h thsymbolsetlist.h $(OUTDIR)/tharea.o: tharea.cxx tharea.h th2ddataobject.h thdataobject.h \ thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h \ thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thlayoutclr.h thpdfdata.h thepsparse.h thscraplo.h thlayoutln.h \ thscrapen.h thscraplp.h thexception.h thexpmap.h thexport.h thlayout.h \ thsymbolset.h thsymbolsetlist.h thlocale.h loch/icase.h thlang.h \ thlangdata.h thline.h $(OUTDIR)/thattr.o: thattr.cxx thattr.h thmbuffer.h thchenc.h thchencdata.h \ thparse.h thbuffer.h extern/shapelib/shapefil.h therion.h $(OUTDIR)/thbezier.o: thbezier.cxx thbezier.h $(OUTDIR)/thbuffer.o: thbuffer.cxx thbuffer.h $(OUTDIR)/thchenc.o: thchenc.cxx thchenc.h thchencdata.h thparse.h thbuffer.h \ thmbuffer.h thchencdata.cxx therion.h thexception.h $(OUTDIR)/thchencdata.o: thchencdata.cxx $(OUTDIR)/thcmdline.o: thcmdline.cxx thcmdline.h therion.h thlogfile.h thbuffer.h \ thconfig.h thmbuffer.h thinput.h thparse.h thexporter.h thexport.h \ thobjectsrc.h thlayout.h thdataobject.h thdatabase.h thdb1d.h \ thobjectid.h thinfnan.h thdataleg.h thobjectname.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thlayoutclr.h thpdfdata.h thepsparse.h thscraplo.h thlayoutln.h \ thscrapen.h thscraplp.h thsymbolset.h thsymbolsetlist.h thlocale.h \ loch/icase.h thselector.h thtmpdir.h $(OUTDIR)/thcomment.o: thcomment.cxx thcomment.h thdataobject.h thdatabase.h \ thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thlayoutclr.h \ thpdfdata.h thepsparse.h thscraplo.h thlayoutln.h thscrapen.h \ thscraplp.h thdata.h thtfangle.h thtf.h thtflength.h thtfpwf.h \ thexception.h $(OUTDIR)/thconfig.o: thconfig.cxx thconfig.h thbuffer.h thmbuffer.h thinput.h \ thparse.h thexporter.h thexport.h thobjectsrc.h thlayout.h \ thdataobject.h thdatabase.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thobjectname.h therion.h thdb3d.h loch/lxMath.h thattr.h thchenc.h \ thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h thperson.h \ thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h \ thdb2dcp.h thdb2dxs.h thdb2dxm.h thlayoutclr.h thpdfdata.h thepsparse.h \ thscraplo.h thlayoutln.h thscrapen.h thscraplp.h thsymbolset.h \ thsymbolsetlist.h thlocale.h loch/icase.h thselector.h thlang.h \ thlangdata.h thexception.h thdatareader.h thcsdata.h thproj.h \ thlogfile.h thinit.h thgeomag.h thgeomagdata.h thcomment.h thdata.h \ thtfangle.h thtf.h thtflength.h thtfpwf.h thsketch.h thpic.h thwarp.h \ thcs.h $(OUTDIR)/thcs.o: thcs.cxx thcs.h thcsdata.h thparse.h thbuffer.h thmbuffer.h \ thexception.h thproj.h thdatabase.h thdataobject.h thperson.h thdate.h \ thdataleg.h thobjectname.h therion.h thobjectsrc.h thinfnan.h \ thlayoutclr.h thpdfdata.h thepsparse.h thdb1d.h thobjectid.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thscrapen.h thscraplp.h $(OUTDIR)/thcsdata.o: thcsdata.cxx thcsdata.h thparse.h thbuffer.h thmbuffer.h \ thcs.h $(OUTDIR)/thdata.o: thdata.cxx thdata.h thdataleg.h thparse.h thbuffer.h \ thmbuffer.h thobjectname.h therion.h thobjectsrc.h thinfnan.h \ thdataobject.h thdatabase.h thdb1d.h thobjectid.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thlayoutclr.h \ thpdfdata.h thepsparse.h thscraplo.h thlayoutln.h thscrapen.h \ thscraplp.h thtfangle.h thtf.h thtflength.h thtfpwf.h thexception.h \ thsurvey.h thlayout.h thsymbolset.h thsymbolsetlist.h thlocale.h \ thgrade.h thcsdata.h thdatareader.h thinput.h loch/icase.h $(OUTDIR)/thdatabase.o: thdatabase.cxx thdatabase.h thdataobject.h thperson.h \ thparse.h thbuffer.h thmbuffer.h thdate.h thdataleg.h thobjectname.h \ therion.h thobjectsrc.h thinfnan.h thlayoutclr.h thpdfdata.h \ thepsparse.h thdb1d.h thobjectid.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thlegenddata.h \ thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h \ thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h thscrapen.h thscraplp.h \ thsurvey.h thtfpwf.h thdata.h thtfangle.h thtf.h thtflength.h \ thendsurvey.h thexception.h thcmdline.h thdatastation.h thlookup.h \ thlocale.h thgrade.h thcomment.h thlayout.h thsymbolset.h \ thsymbolsetlist.h thscrap.h thsketch.h thpic.h thwarp.h thtrans.h \ th2ddataobject.h thpoint.h thline.h tharea.h thjoin.h thmap.h thimport.h \ thsurface.h thendscrap.h thconfig.h thinput.h thexporter.h thexport.h \ loch/icase.h thselector.h thproj.h $(OUTDIR)/thdataleg.o: thdataleg.cxx thdataleg.h thparse.h thbuffer.h thmbuffer.h \ thobjectname.h therion.h thobjectsrc.h thinfnan.h thcs.h thcsdata.h $(OUTDIR)/thdataobject.o: thdataobject.cxx thdataobject.h thdatabase.h thmbuffer.h \ thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h thparse.h \ thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thlayoutclr.h thpdfdata.h \ thepsparse.h thscraplo.h thlayoutln.h thscrapen.h thscraplp.h \ thexception.h thsurvey.h thtfpwf.h thdata.h thtfangle.h thtf.h \ thtflength.h thconfig.h thinput.h thexporter.h thexport.h thlayout.h \ thsymbolset.h thsymbolsetlist.h thlocale.h loch/icase.h thselector.h \ thcsdata.h thproj.h thcs.h $(OUTDIR)/thdatareader.o: thdatareader.cxx thdatareader.h thdatabase.h \ thdataobject.h thperson.h thparse.h thbuffer.h thmbuffer.h thdate.h \ thdataleg.h thobjectname.h therion.h thobjectsrc.h thinfnan.h \ thlayoutclr.h thpdfdata.h thepsparse.h thdb1d.h thobjectid.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thscrapen.h thscraplp.h thinput.h thexception.h $(OUTDIR)/thdatastation.o: thdatastation.cxx thdatastation.h thdataobject.h \ thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h \ thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thlayoutclr.h thpdfdata.h thepsparse.h thscraplo.h thlayoutln.h \ thscrapen.h thscraplp.h thexception.h $(OUTDIR)/thdate.o: thdate.cxx thdate.h thparse.h thbuffer.h thmbuffer.h \ thexception.h therion.h $(OUTDIR)/thdb1d.o: thdb1d.cxx thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thparse.h thbuffer.h thmbuffer.h thobjectname.h therion.h thobjectsrc.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thsurvey.h \ thdataobject.h thdatabase.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thlayoutclr.h thpdfdata.h \ thepsparse.h thscraplo.h thlayoutln.h thscrapen.h thscraplp.h thtfpwf.h \ thdata.h thtfangle.h thtf.h thtflength.h thsvxctrl.h thexception.h \ thpoint.h th2ddataobject.h thlogfile.h thsurface.h thlocale.h thinit.h \ thinput.h thconfig.h thexporter.h thexport.h thlayout.h thsymbolset.h \ thsymbolsetlist.h loch/icase.h thselector.h thtrans.h thcs.h thcsdata.h \ thgeomag.h thgeomagdata.h extern/quickhull/QuickHull.hpp \ extern/quickhull/Structs/Vector3.hpp extern/quickhull/Structs/Plane.hpp \ extern/quickhull/Structs/Vector3.hpp extern/quickhull/Structs/Pool.hpp \ extern/quickhull/Structs/Mesh.hpp extern/quickhull/Structs/Plane.hpp \ extern/quickhull/Structs/Pool.hpp \ extern/quickhull/Structs/VertexDataSource.hpp \ extern/quickhull/ConvexHull.hpp \ extern/quickhull/Structs/VertexDataSource.hpp \ extern/quickhull/HalfEdgeMesh.hpp extern/quickhull/MathUtils.hpp \ extern/quickhull/Structs/Ray.hpp $(OUTDIR)/thdb2d.o: thdb2d.cxx thdb2d.h thinfnan.h thdb2dprj.h thparse.h thbuffer.h \ thmbuffer.h thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h \ thdb2dlp.h thdb2dab.h thobjectname.h therion.h thobjectsrc.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thlayoutclr.h thpdfdata.h \ thepsparse.h thscraplo.h thlayoutln.h thscrapen.h thscraplp.h thdb1d.h \ thobjectid.h thdataleg.h thdb3d.h loch/lxMath.h thattr.h thchenc.h \ thchencdata.h thexception.h thdatabase.h thdataobject.h thtfangle.h \ thtf.h tharea.h th2ddataobject.h thmap.h thjoin.h thpoint.h thline.h \ thscrap.h thsketch.h thpic.h thwarp.h thtrans.h thsurvey.h thtfpwf.h \ thdata.h thtflength.h thlogfile.h thlayout.h thsymbolset.h \ thsymbolsetlist.h thlocale.h thexpmap.h thexport.h loch/icase.h thlang.h \ thlangdata.h thconfig.h thinput.h thexporter.h thselector.h thtmpdir.h \ thinit.h thfilehandle.h $(OUTDIR)/thdb2d00.o: thdb2d00.cxx thdb2d.h thinfnan.h thdb2dprj.h thparse.h \ thbuffer.h thmbuffer.h thmapstat.h thdate.h thperson.h thlegenddata.h \ thdb2dpt.h thdb2dlp.h thdb2dab.h thobjectname.h therion.h thobjectsrc.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thlayoutclr.h \ thpdfdata.h thepsparse.h thscraplo.h thlayoutln.h thscrapen.h \ thscraplp.h thdb1d.h thobjectid.h thdataleg.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thexception.h thdatabase.h \ thdataobject.h thtfangle.h thtf.h tharea.h th2ddataobject.h thmap.h \ thjoin.h thpoint.h thline.h thscrap.h thsketch.h thpic.h thwarp.h \ thtrans.h thsurvey.h thtfpwf.h thdata.h thtflength.h thlogfile.h \ thlayout.h thsymbolset.h thsymbolsetlist.h thlocale.h thconfig.h \ thinput.h thexporter.h thexport.h loch/icase.h thselector.h $(OUTDIR)/thdb2dab.o: thdb2dab.cxx thdb2dab.h thobjectname.h thmbuffer.h therion.h \ thobjectsrc.h $(OUTDIR)/thdb2dcp.o: thdb2dcp.cxx thdb2dcp.h thdb2dpt.h $(OUTDIR)/thdb2dji.o: thdb2dji.cxx thdb2dji.h thobjectname.h thmbuffer.h therion.h \ thdatabase.h thdataobject.h thperson.h thparse.h thbuffer.h thdate.h \ thdataleg.h thobjectsrc.h thinfnan.h thlayoutclr.h thpdfdata.h \ thepsparse.h thdb1d.h thobjectid.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thlegenddata.h \ thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dmi.h thdb2dcp.h thdb2dxs.h \ thdb2dxm.h thscraplo.h thlayoutln.h thscrapen.h thscraplp.h \ thexception.h $(OUTDIR)/thdb2dlp.o: thdb2dlp.cxx thdb2dlp.h thdb2dpt.h thline.h th2ddataobject.h \ thdataobject.h thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h \ thinfnan.h thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h \ thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thlayoutclr.h \ thpdfdata.h thepsparse.h thscraplo.h thlayoutln.h thscrapen.h \ thscraplp.h thexpmap.h thexport.h thlayout.h thsymbolset.h \ thsymbolsetlist.h thlocale.h loch/icase.h thlang.h thlangdata.h $(OUTDIR)/thdb2dmi.o: thdb2dmi.cxx thdb2dmi.h thobjectname.h thmbuffer.h therion.h \ thobjectsrc.h thparse.h thbuffer.h thexception.h $(OUTDIR)/thdb2dprj.o: thdb2dprj.cxx thdb2dprj.h thparse.h thbuffer.h thmbuffer.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thinfnan.h $(OUTDIR)/thdb2dpt.o: thdb2dpt.cxx thdb2dpt.h thexpmap.h thexport.h thparse.h \ thbuffer.h thmbuffer.h thobjectsrc.h thlayout.h thdataobject.h \ thdatabase.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h thobjectname.h \ therion.h thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h \ thdb2d.h thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h \ thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h \ thdb2dxm.h thlayoutclr.h thpdfdata.h thepsparse.h thscraplo.h \ thlayoutln.h thscrapen.h thscraplp.h thsymbolset.h thsymbolsetlist.h \ thlocale.h loch/icase.h thlang.h thlangdata.h $(OUTDIR)/thdb2dxm.o: thdb2dxm.cxx thdb2dxm.h thdb2dmi.h thobjectname.h thmbuffer.h \ therion.h thobjectsrc.h thparse.h thbuffer.h thlayoutclr.h thpdfdata.h \ thepsparse.h $(OUTDIR)/thdb2dxs.o: thdb2dxs.cxx thdb2dxs.h thdb2dmi.h thobjectname.h thmbuffer.h \ therion.h thobjectsrc.h thparse.h thbuffer.h $(OUTDIR)/thdb3d.o: thdb3d.cxx thdb3d.h loch/lxMath.h $(OUTDIR)/thendscrap.o: thendscrap.cxx thendscrap.h thdataobject.h thdatabase.h \ thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thlayoutclr.h \ thpdfdata.h thepsparse.h thscraplo.h thlayoutln.h thscrapen.h \ thscraplp.h thexception.h $(OUTDIR)/thendsurvey.o: thendsurvey.cxx thendsurvey.h thdataobject.h thdatabase.h \ thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thlayoutclr.h \ thpdfdata.h thepsparse.h thscraplo.h thlayoutln.h thscrapen.h \ thscraplp.h thexception.h $(OUTDIR)/thepsparse.o: thepsparse.cxx thepsparse.h thpdfdbg.h thexception.h \ thpdfdata.h thtexfonts.h therion.h thdouble.h therion-main.o: therion-main.cxx therion.h thcmdline.h thconfig.h \ thbuffer.h thmbuffer.h thinput.h thparse.h thexporter.h thexport.h \ thobjectsrc.h thlayout.h thdataobject.h thdatabase.h thdb1d.h \ thobjectid.h thinfnan.h thdataleg.h thobjectname.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thlayoutclr.h thpdfdata.h thepsparse.h thscraplo.h thlayoutln.h \ thscrapen.h thscraplp.h thsymbolset.h thsymbolsetlist.h thlocale.h \ loch/icase.h thselector.h thdatareader.h thexception.h thlibrary.h \ thinit.h thversion.h thtexfonts.h thbezier.h thlogfile.h thproj.h $(OUTDIR)/therion.o: therion.cxx therion.h thlogfile.h thbuffer.h thtmpdir.h \ thcmdline.h thconfig.h thmbuffer.h thinput.h thparse.h thexporter.h \ thexport.h thobjectsrc.h thlayout.h thdataobject.h thdatabase.h thdb1d.h \ thobjectid.h thinfnan.h thdataleg.h thobjectname.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thlayoutclr.h thpdfdata.h thepsparse.h thscraplo.h thlayoutln.h \ thscrapen.h thscraplp.h thsymbolset.h thsymbolsetlist.h thlocale.h \ loch/icase.h thselector.h thdatareader.h thexception.h thlibrary.h \ thinit.h thgrade.h thdata.h thtfangle.h thtf.h thtflength.h thtfpwf.h \ thpoint.h th2ddataobject.h thline.h tharea.h thversion.h thtexfonts.h \ thlang.h thlangdata.h thbezier.h $(OUTDIR)/thexception.o: thexception.cxx thexception.h $(OUTDIR)/thexpdb.o: thexpdb.cxx thexpdb.h thexport.h thparse.h thbuffer.h \ thmbuffer.h thobjectsrc.h thlayout.h thdataobject.h thdatabase.h \ thdb1d.h thobjectid.h thinfnan.h thdataleg.h thobjectname.h therion.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h \ thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h \ thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h \ thdb2dxm.h thlayoutclr.h thpdfdata.h thepsparse.h thscraplo.h \ thlayoutln.h thscrapen.h thscraplp.h thsymbolset.h thsymbolsetlist.h \ thlocale.h loch/icase.h thexception.h thscrap.h thsketch.h thpic.h \ thwarp.h thtrans.h thmap.h thdata.h thtfangle.h thtf.h thtflength.h \ thtfpwf.h thinit.h thinput.h thsurvey.h $(OUTDIR)/thexpmap.o: thexpmap.cxx thexpmap.h thexport.h thparse.h thbuffer.h \ thmbuffer.h thobjectsrc.h thlayout.h thdataobject.h thdatabase.h \ thdb1d.h thobjectid.h thinfnan.h thdataleg.h thobjectname.h therion.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h \ thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h \ thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h \ thdb2dxm.h thlayoutclr.h thpdfdata.h thepsparse.h thscraplo.h \ thlayoutln.h thscrapen.h thscraplp.h thsymbolset.h thsymbolsetlist.h \ thlocale.h loch/icase.h thlang.h thlangdata.h thexporter.h thexception.h \ thtmpdir.h thscrap.h thsketch.h thpic.h thwarp.h thtrans.h thpoint.h \ th2ddataobject.h thline.h tharea.h thmap.h thconfig.h thinput.h \ thselector.h thlookup.h thinit.h thlogfile.h thpdf.h \ thmpost.h thtex.h thcmdline.h thtexfonts.h thsurvey.h thtfpwf.h thdata.h \ thtfangle.h thtf.h thtflength.h thcsdata.h thproj.h thsurface.h thsvg.h \ extern/img/img.h thcs.h $(OUTDIR)/thexpmodel.o: thexpmodel.cxx thexpmodel.h thexport.h thparse.h thbuffer.h \ thmbuffer.h thobjectsrc.h thlayout.h thdataobject.h thdatabase.h \ thdb1d.h thobjectid.h thinfnan.h thdataleg.h thobjectname.h therion.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h \ thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h \ thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h \ thdb2dxm.h thlayoutclr.h thpdfdata.h thepsparse.h thscraplo.h \ thlayoutln.h thscrapen.h thscraplp.h thsymbolset.h thsymbolsetlist.h \ thlocale.h loch/icase.h thsurvey.h thtfpwf.h thdata.h thtfangle.h thtf.h \ thtflength.h thexception.h extern/img/img.h thscrap.h thsketch.h thpic.h \ thwarp.h thtrans.h thsurface.h loch/lxFile.h thconfig.h thinput.h \ thexporter.h thselector.h thcsdata.h thproj.h thcs.h thtexfonts.h \ thlang.h thlangdata.h thfilehandle.h $(OUTDIR)/thexport.o: thexport.cxx thexport.h thparse.h thbuffer.h thmbuffer.h \ thobjectsrc.h thlayout.h thdataobject.h thdatabase.h thdb1d.h \ thobjectid.h thinfnan.h thdataleg.h thobjectname.h therion.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thlayoutclr.h thpdfdata.h thepsparse.h thscraplo.h thlayoutln.h \ thscrapen.h thscraplp.h thsymbolset.h thsymbolsetlist.h thlocale.h \ loch/icase.h thexception.h thconfig.h thinput.h thexporter.h \ thselector.h thcs.h thcsdata.h $(OUTDIR)/thexporter.o: thexporter.cxx thexporter.h thexport.h thparse.h thbuffer.h \ thmbuffer.h thobjectsrc.h thlayout.h thdataobject.h thdatabase.h \ thdb1d.h thobjectid.h thinfnan.h thdataleg.h thobjectname.h therion.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h \ thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h \ thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h \ thdb2dxm.h thlayoutclr.h thpdfdata.h thepsparse.h thscraplo.h \ thlayoutln.h thscrapen.h thscraplp.h thsymbolset.h thsymbolsetlist.h \ thlocale.h loch/icase.h thexception.h thconfig.h thinput.h thselector.h \ thexpmodel.h thsurvey.h thtfpwf.h thdata.h thtfangle.h thtf.h \ thtflength.h thexpmap.h thlang.h thlangdata.h thexpdb.h thexpsys.h \ thexptable.h $(OUTDIR)/thexpshp.o: thexpshp.cxx thexpmap.h thexport.h thparse.h thbuffer.h \ thmbuffer.h thobjectsrc.h thlayout.h thdataobject.h thdatabase.h \ thdb1d.h thobjectid.h thinfnan.h thdataleg.h thobjectname.h therion.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h \ thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h \ thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h \ thdb2dxm.h thlayoutclr.h thpdfdata.h thepsparse.h thscraplo.h \ thlayoutln.h thscrapen.h thscraplp.h thsymbolset.h thsymbolsetlist.h \ thlocale.h loch/icase.h thlang.h thlangdata.h thexporter.h thexception.h \ thmap.h thsketch.h thpic.h thwarp.h thconfig.h thinput.h thselector.h \ thtmpdir.h thinit.h thlogfile.h thcmdline.h thsurvey.h thtfpwf.h \ thdata.h thtfangle.h thtf.h thtflength.h thsurface.h \ extern/shapelib/shapefil.h thexpmodel.h thcsdata.h thcs.h thexpshp.h \ thscrap.h thtrans.h thpoint.h th2ddataobject.h thline.h tharea.h $(OUTDIR)/thexpsys.o: thexpsys.cxx thexpsys.h thexport.h thparse.h thbuffer.h \ thmbuffer.h thobjectsrc.h thlayout.h thdataobject.h thdatabase.h \ thdb1d.h thobjectid.h thinfnan.h thdataleg.h thobjectname.h therion.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h \ thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h \ thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h \ thdb2dxm.h thlayoutclr.h thpdfdata.h thepsparse.h thscraplo.h \ thlayoutln.h thscrapen.h thscraplp.h thsymbolset.h thsymbolsetlist.h \ thlocale.h loch/icase.h thexception.h $(OUTDIR)/thexptable.o: thexptable.cxx thexptable.h thexport.h thparse.h thbuffer.h \ thmbuffer.h thobjectsrc.h thlayout.h thdataobject.h thdatabase.h \ thdb1d.h thobjectid.h thinfnan.h thdataleg.h thobjectname.h therion.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h \ thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h \ thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h \ thdb2dxm.h thlayoutclr.h thpdfdata.h thepsparse.h thscraplo.h \ thlayoutln.h thscrapen.h thscraplp.h thsymbolset.h thsymbolsetlist.h \ thlocale.h loch/icase.h thexception.h thdata.h thtfangle.h thtf.h \ thtflength.h thtfpwf.h thexporter.h thinit.h thinput.h thsurvey.h \ thscrap.h thsketch.h thpic.h thwarp.h thtrans.h thpoint.h \ th2ddataobject.h thcsdata.h thproj.h thconfig.h thselector.h thcs.h \ thtexfonts.h thlang.h thlangdata.h $(OUTDIR)/thexpuni.o: thexpuni.cxx thexpmap.h thexport.h thparse.h thbuffer.h \ thmbuffer.h thobjectsrc.h thlayout.h thdataobject.h thdatabase.h \ thdb1d.h thobjectid.h thinfnan.h thdataleg.h thobjectname.h therion.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h \ thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h \ thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h \ thdb2dxm.h thlayoutclr.h thpdfdata.h thepsparse.h thscraplo.h \ thlayoutln.h thscrapen.h thscraplp.h thsymbolset.h thsymbolsetlist.h \ thlocale.h loch/icase.h thlang.h thlangdata.h thexporter.h thexception.h \ thmap.h thsketch.h thpic.h thwarp.h thconfig.h thinput.h thselector.h \ thtmpdir.h thcsdata.h thinit.h thlogfile.h thcmdline.h thsurvey.h \ thtfpwf.h thdata.h thtfangle.h thtf.h thtflength.h thsurface.h \ extern/shapelib/shapefil.h thexpmodel.h thexpuni.h thscrap.h thtrans.h \ thpoint.h th2ddataobject.h thline.h tharea.h thproj.h thcs.h \ thtexfonts.h $(OUTDIR)/thgeomag.o: thgeomag.cxx thgeomagdata.h $(OUTDIR)/thgrade.o: thgrade.cxx thgrade.h thdataobject.h thdatabase.h thmbuffer.h \ thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h thparse.h \ thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thlayoutclr.h thpdfdata.h \ thepsparse.h thscraplo.h thlayoutln.h thscrapen.h thscraplp.h thdata.h \ thtfangle.h thtf.h thtflength.h thtfpwf.h thexception.h $(OUTDIR)/thimport.o: thimport.cxx loch/icase.h thimport.h thdataobject.h \ thcsdata.h \ thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h \ thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thlayoutclr.h thpdfdata.h thepsparse.h thscraplo.h thlayoutln.h \ thscrapen.h thscraplp.h thexception.h thdata.h thtfangle.h thtf.h \ thtflength.h thtfpwf.h thsurvey.h thendsurvey.h extern/img/img.h $(OUTDIR)/thinfnan.o: thinfnan.cxx thinfnan.h $(OUTDIR)/thinit.o: thinit.cxx thinit.h thbuffer.h thmbuffer.h thinput.h thparse.h \ thchenc.h thchencdata.h therion.h thconfig.h thexporter.h thexport.h \ thobjectsrc.h thlayout.h thdataobject.h thdatabase.h thdb1d.h \ thobjectid.h thinfnan.h thdataleg.h thobjectname.h thdb3d.h \ loch/lxMath.h thattr.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thlayoutclr.h thpdfdata.h \ thepsparse.h thscraplo.h thlayoutln.h thscrapen.h thscraplp.h \ thsymbolset.h thsymbolsetlist.h thlocale.h loch/icase.h thselector.h \ thexception.h thtexfonts.h thlang.h thlangdata.h thtmpdir.h thcs.h \ thcsdata.h thproj.h thpdfdbg.h $(OUTDIR)/thinput.o: thinput.cxx thinput.h thbuffer.h thmbuffer.h thparse.h \ thchenc.h thchencdata.h therion.h thexception.h $(OUTDIR)/thjoin.o: thjoin.cxx thjoin.h thdataobject.h thdatabase.h thmbuffer.h \ thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h thparse.h \ thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thlayoutclr.h thpdfdata.h \ thepsparse.h thscraplo.h thlayoutln.h thscrapen.h thscraplp.h \ thexception.h $(OUTDIR)/thlang.o: thlang.cxx thlang.h thlangdata.h thparse.h thbuffer.h \ thmbuffer.h thlangdatafields.h thinit.h thinput.h thconfig.h \ thexporter.h thexport.h thobjectsrc.h thlayout.h thdataobject.h \ thdatabase.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h thobjectname.h \ therion.h thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h \ thdb2d.h thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h \ thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h \ thdb2dxs.h thdb2dxm.h thlayoutclr.h thpdfdata.h thepsparse.h thscraplo.h \ thlayoutln.h thscrapen.h thscraplp.h thsymbolset.h thsymbolsetlist.h \ thlocale.h loch/icase.h thselector.h thexception.h $(OUTDIR)/thlayout.o: thlayout.cxx thlayout.h thdataobject.h thdatabase.h \ thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thlayoutclr.h \ thpdfdata.h thepsparse.h thscraplo.h thlayoutln.h thscrapen.h \ thscraplp.h thsymbolset.h thsymbolsetlist.h thlocale.h thlookup.h \ thexception.h thdata.h thtfangle.h thtf.h thtflength.h thtfpwf.h \ thlang.h thlangdata.h thcsdata.h thconfig.h thinput.h thexporter.h \ thexport.h loch/icase.h thselector.h th2ddataobject.h $(OUTDIR)/thlayoutclr.o: thlayoutclr.cxx thlayoutclr.h thparse.h thbuffer.h \ thmbuffer.h thpdfdata.h thepsparse.h thdatabase.h thdataobject.h \ thperson.h thdate.h thdataleg.h thobjectname.h therion.h thobjectsrc.h \ thinfnan.h thdb1d.h thobjectid.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thlegenddata.h \ thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h \ thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h thscrapen.h thscraplp.h \ thexception.h $(OUTDIR)/thlayoutln.o: thlayoutln.cxx thlayoutln.h thlayoutclr.h thparse.h \ thbuffer.h thmbuffer.h thpdfdata.h thepsparse.h thlayout.h \ thdataobject.h thdatabase.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thscrapen.h \ thscraplp.h thsymbolset.h thsymbolsetlist.h thlocale.h $(OUTDIR)/thlegenddata.o: thlegenddata.cxx thlegenddata.h $(OUTDIR)/thlibrary.o: thlibrary.cxx thlibrary.h thlibrarydata.cxx thdatabase.h \ thdataobject.h thperson.h thparse.h thbuffer.h thmbuffer.h thdate.h \ thdataleg.h thobjectname.h therion.h thobjectsrc.h thinfnan.h \ thlayoutclr.h thpdfdata.h thepsparse.h thdb1d.h thobjectid.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thscrapen.h thscraplp.h thlayout.h thsymbolset.h thsymbolsetlist.h \ thlocale.h thlang.h thlangdata.h thgrade.h thdata.h thtfangle.h thtf.h \ thtflength.h thtfpwf.h $(OUTDIR)/thlibrarydata.o: thlibrarydata.cxx thdatabase.h thdataobject.h thperson.h \ thparse.h thbuffer.h thmbuffer.h thdate.h thdataleg.h thobjectname.h \ therion.h thobjectsrc.h thinfnan.h thlayoutclr.h thpdfdata.h \ thepsparse.h thdb1d.h thobjectid.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thlegenddata.h \ thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h \ thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h thscrapen.h thscraplp.h \ thlayout.h thsymbolset.h thsymbolsetlist.h thlocale.h thlang.h \ thlangdata.h thgrade.h thdata.h thtfangle.h thtf.h thtflength.h \ thtfpwf.h $(OUTDIR)/thline.o: thline.cxx thline.h th2ddataobject.h thdataobject.h \ thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h \ thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thlayoutclr.h thpdfdata.h thepsparse.h thscraplo.h thlayoutln.h \ thscrapen.h thscraplp.h thexception.h thexpmap.h thexport.h thlayout.h \ thsymbolset.h thsymbolsetlist.h thlocale.h loch/icase.h thlang.h \ thlangdata.h thtflength.h thtf.h thtexfonts.h thscrap.h thsketch.h \ thpic.h thwarp.h thtrans.h $(OUTDIR)/thlocale.o: thlocale.cxx thlocale.h thparse.h thbuffer.h thmbuffer.h \ thexception.h thlang.h thlangdata.h thinit.h thinput.h $(OUTDIR)/thlog.o: thlog.cxx thlog.h thlogfile.h thbuffer.h $(OUTDIR)/thlogfile.o: thlogfile.cxx thlogfile.h thbuffer.h therion.h $(OUTDIR)/thlookup.o: thlookup.cxx thlookup.h thdataobject.h thdatabase.h \ thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thlayoutclr.h \ thpdfdata.h thepsparse.h thscraplo.h thlayoutln.h thscrapen.h \ thscraplp.h thlocale.h thexception.h thdata.h thtfangle.h thtf.h \ thtflength.h thtfpwf.h thsymbolset.h thsymbolsetlist.h thlang.h \ thlangdata.h thcsdata.h thconfig.h thinput.h thexporter.h thexport.h \ thlayout.h loch/icase.h thselector.h thscrap.h thsketch.h thpic.h \ thwarp.h thtrans.h thmap.h thpdf.h thtexfonts.h $(OUTDIR)/thmap.o: thmap.cxx thmap.h thdataobject.h thdatabase.h thmbuffer.h \ thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h thparse.h \ thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thlayoutclr.h thpdfdata.h \ thepsparse.h thscraplo.h thlayoutln.h thscrapen.h thscraplp.h \ thexception.h thscrap.h thsketch.h thpic.h thwarp.h thtrans.h \ thtflength.h thtf.h thconfig.h thinput.h thexporter.h thexport.h \ thlayout.h thsymbolset.h thsymbolsetlist.h thlocale.h loch/icase.h \ thselector.h $(OUTDIR)/thmapstat.o: thmapstat.cxx thmapstat.h thdate.h thperson.h thlegenddata.h \ thscrap.h thdataobject.h thdatabase.h thmbuffer.h thbuffer.h thdb1d.h \ thobjectid.h thinfnan.h thdataleg.h thparse.h thobjectname.h therion.h \ thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h \ thdb2d.h thdb2dprj.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thlayoutclr.h thpdfdata.h \ thepsparse.h thscraplo.h thlayoutln.h thscrapen.h thscraplp.h thsketch.h \ thpic.h thwarp.h thtrans.h thdata.h thtfangle.h thtf.h thtflength.h \ thtfpwf.h thmap.h thlayout.h thsymbolset.h thsymbolsetlist.h thlocale.h \ thlang.h thlangdata.h thversion.h thtexfonts.h thsurvey.h thconfig.h \ thinput.h thexporter.h thexport.h loch/icase.h thselector.h thcs.h \ thcsdata.h $(OUTDIR)/thmbuffer.o: thmbuffer.cxx thmbuffer.h $(OUTDIR)/thmpost.o: thmpost.cxx thmpost.h $(OUTDIR)/thobjectid.o: thobjectid.cxx thobjectid.h $(OUTDIR)/thobjectname.o: thobjectname.cxx thobjectname.h thmbuffer.h therion.h \ thexception.h thparse.h thbuffer.h thdatabase.h thdataobject.h \ thperson.h thdate.h thdataleg.h thobjectsrc.h thinfnan.h thlayoutclr.h \ thpdfdata.h thepsparse.h thdb1d.h thobjectid.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h \ thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h thscrapen.h \ thscraplp.h thsurvey.h thtfpwf.h thdata.h thtfangle.h thtf.h \ thtflength.h $(OUTDIR)/thobjectsrc.o: thobjectsrc.cxx thobjectsrc.h $(OUTDIR)/thparse.o: thparse.cxx thparse.h thbuffer.h thmbuffer.h therion.h \ thlang.h thlangdata.h thtexfonts.h thinfnan.h thdatabase.h \ thdataobject.h thperson.h thdate.h thdataleg.h thobjectname.h \ thobjectsrc.h thlayoutclr.h thpdfdata.h thepsparse.h thdb1d.h \ thobjectid.h thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h \ thdb2d.h thdb2dprj.h thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thscrapen.h thscraplp.h thtflength.h thtf.h \ thexception.h loch/icase.h $(OUTDIR)/thpdf.o: thpdf.cxx thpdfdbg.h thexception.h thconfig.h thbuffer.h \ thmbuffer.h thinput.h thparse.h thexporter.h thexport.h thobjectsrc.h \ thlayout.h thdataobject.h thdatabase.h thdb1d.h thobjectid.h thinfnan.h \ thdataleg.h thobjectname.h therion.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thlayoutclr.h thpdfdata.h \ thepsparse.h thscraplo.h thlayoutln.h thscrapen.h thscraplp.h \ thsymbolset.h thsymbolsetlist.h thlocale.h loch/icase.h thselector.h \ thtexfonts.h thlang.h thlangdata.h thversion.h thdouble.h $(OUTDIR)/thpdfdata.o: thpdfdata.cxx thexception.h thpdfdata.h thepsparse.h \ thlang.h thlangdata.h thparse.h thbuffer.h thmbuffer.h $(OUTDIR)/thpdfdbg.o: thpdfdbg.cxx thpdfdbg.h thexception.h thpdfdata.h \ thepsparse.h $(OUTDIR)/thperson.o: thperson.cxx thperson.h thdatabase.h thdataobject.h thparse.h \ thbuffer.h thmbuffer.h thdate.h thdataleg.h thobjectname.h therion.h \ thobjectsrc.h thinfnan.h thlayoutclr.h thpdfdata.h thepsparse.h thdb1d.h \ thobjectid.h thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h \ thdb2d.h thdb2dprj.h thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thscrapen.h thscraplp.h thexception.h $(OUTDIR)/thpic.o: thpic.cxx thpic.h thbuffer.h thdatabase.h thdataobject.h \ thperson.h thparse.h thmbuffer.h thdate.h thdataleg.h thobjectname.h \ therion.h thobjectsrc.h thinfnan.h thlayoutclr.h thpdfdata.h \ thepsparse.h thdb1d.h thobjectid.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thlegenddata.h \ thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h \ thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h thscrapen.h thscraplp.h \ thinit.h thinput.h thtmpdir.h thexception.h thconfig.h thexporter.h \ thexport.h thlayout.h thsymbolset.h thsymbolsetlist.h thlocale.h \ loch/icase.h thselector.h $(OUTDIR)/thpoint.o: thpoint.cxx thpoint.h th2ddataobject.h thdataobject.h \ thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h \ thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thlayoutclr.h thpdfdata.h thepsparse.h thscraplo.h thlayoutln.h \ thscrapen.h thscraplp.h thexception.h thexpmap.h thexport.h thlayout.h \ thsymbolset.h thsymbolsetlist.h thlocale.h loch/icase.h thlang.h \ thlangdata.h thtflength.h thtf.h thtexfonts.h thscrap.h thsketch.h \ thpic.h thwarp.h thtrans.h $(OUTDIR)/thproj.o: thproj.cxx therion.h thexception.h thproj.h thlogfile.h \ thbuffer.h thcs.h thcsdata.h thparse.h thmbuffer.h $(OUTDIR)/thscrap.o: thscrap.cxx thscrap.h thdataobject.h thdatabase.h thmbuffer.h \ thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h thparse.h \ thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thlayoutclr.h thpdfdata.h \ thepsparse.h thscraplo.h thlayoutln.h thscrapen.h thscraplp.h thsketch.h \ thpic.h thwarp.h thtrans.h thexception.h thtflength.h thtf.h \ th2ddataobject.h thline.h thpoint.h thscrapis.h thsurvey.h thtfpwf.h \ thdata.h thtfangle.h thsymbolset.h thsymbolsetlist.h thcsdata.h $(OUTDIR)/thscrapen.o: thscrapen.cxx thscrapen.h $(OUTDIR)/thscrapis.o: thscrapis.cxx thscrapis.h thdb3d.h loch/lxMath.h thscrap.h \ thdataobject.h thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h \ thinfnan.h thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thlayoutclr.h \ thpdfdata.h thepsparse.h thscraplo.h thlayoutln.h thscrapen.h \ thscraplp.h thsketch.h thpic.h thwarp.h thtrans.h thpoint.h \ th2ddataobject.h thline.h thconfig.h thinput.h thexporter.h thexport.h \ thlayout.h thsymbolset.h thsymbolsetlist.h thlocale.h loch/icase.h \ thselector.h extern/poly2tri/poly2tri.h extern/poly2tri/common/shapes.h \ extern/poly2tri/sweep/cdt.h extern/poly2tri/sweep/advancing_front.h \ extern/poly2tri/sweep/../common/shapes.h \ extern/poly2tri/sweep/sweep_context.h extern/poly2tri/sweep/sweep.h \ thsurvey.h thtfpwf.h thdata.h thtfangle.h thtf.h thtflength.h $(OUTDIR)/thscraplo.o: thscraplo.cxx thscraplo.h $(OUTDIR)/thscraplp.o: thscraplp.cxx thscraplp.h thdb1d.h thobjectid.h thinfnan.h \ thdataleg.h thparse.h thbuffer.h thmbuffer.h thobjectname.h therion.h \ thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h \ thscrap.h thdataobject.h thdatabase.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thlayoutclr.h \ thpdfdata.h thepsparse.h thscraplo.h thlayoutln.h thscrapen.h thsketch.h \ thpic.h thwarp.h thtrans.h thexpmap.h thexport.h thlayout.h \ thsymbolset.h thsymbolsetlist.h thlocale.h loch/icase.h thlang.h \ thlangdata.h $(OUTDIR)/thselector.o: thselector.cxx thselector.h thlayoutclr.h thparse.h \ thbuffer.h thmbuffer.h thpdfdata.h thepsparse.h thexception.h thconfig.h \ thinput.h thexporter.h thexport.h thobjectsrc.h thlayout.h \ thdataobject.h thdatabase.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thobjectname.h therion.h thdb3d.h loch/lxMath.h thattr.h thchenc.h \ thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h thperson.h \ thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h \ thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h thscrapen.h \ thscraplp.h thsymbolset.h thsymbolsetlist.h thlocale.h loch/icase.h \ thsurvey.h thtfpwf.h thdata.h thtfangle.h thtf.h thtflength.h \ th2ddataobject.h thscrap.h thsketch.h thpic.h thwarp.h thtrans.h thmap.h $(OUTDIR)/thsketch.o: thsketch.cxx therion.h thsketch.h thpic.h thwarp.h thscrap.h \ thdataobject.h thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h \ thinfnan.h thdataleg.h thparse.h thobjectname.h thobjectsrc.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thlayoutclr.h thpdfdata.h thepsparse.h thscraplo.h thlayoutln.h \ thscrapen.h thscraplp.h thtrans.h thwarpp.h thwarppme.h thwarppdef.h \ thwarppt.h thconfig.h thinput.h thexporter.h thexport.h thlayout.h \ thsymbolset.h thsymbolsetlist.h thlocale.h loch/icase.h thselector.h $(OUTDIR)/thsurface.o: thsurface.cxx thsurface.h thdb3d.h loch/lxMath.h \ thdataobject.h thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h \ thinfnan.h thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thlayoutclr.h \ thpdfdata.h thepsparse.h thscraplo.h thlayoutln.h thscrapen.h \ thscraplp.h thtflength.h thtf.h thexception.h thcsdata.h thdatareader.h \ thinput.h $(OUTDIR)/thsurvey.o: thsurvey.cxx thsurvey.h thdataobject.h thdatabase.h \ thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thlayoutclr.h \ thpdfdata.h thepsparse.h thscraplo.h thlayoutln.h thscrapen.h \ thscraplp.h thtfpwf.h thdata.h thtfangle.h thtf.h thtflength.h \ thexception.h $(OUTDIR)/thsvg.o: thsvg.cxx thepsparse.h thpdfdbg.h thexception.h thpdfdata.h \ therion.h thversion.h thconfig.h thbuffer.h thmbuffer.h thinput.h \ thparse.h thexporter.h thexport.h thobjectsrc.h thlayout.h \ thdataobject.h thdatabase.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thobjectname.h thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h \ thdb2d.h thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h \ thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h \ thdb2dxs.h thdb2dxm.h thlayoutclr.h thscraplo.h thlayoutln.h thscrapen.h \ thscraplp.h thsymbolset.h thsymbolsetlist.h thlocale.h loch/icase.h \ thselector.h thtexfonts.h thdouble.h $(OUTDIR)/thsvxctrl.o: thsvxctrl.cxx thsvxctrl.h thdataleg.h thparse.h thbuffer.h \ thmbuffer.h thobjectname.h therion.h thobjectsrc.h thinfnan.h \ thdatabase.h thdataobject.h thperson.h thdate.h thlayoutclr.h \ thpdfdata.h thepsparse.h thdb1d.h thobjectid.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h \ thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h thscrapen.h \ thscraplp.h thtmpdir.h thdata.h thtfangle.h thtf.h thtflength.h \ thtfpwf.h thexception.h thinit.h thinput.h thconfig.h thexporter.h \ thexport.h thlayout.h thsymbolset.h thsymbolsetlist.h thlocale.h \ loch/icase.h thselector.h thsurvey.h thcs.h thcsdata.h thlogfile.h \ extern/img/img.h $(OUTDIR)/thsymbolset.o: thsymbolset.cxx thsymbolset.h thsymbolsetlist.h \ thlayoutclr.h thparse.h thbuffer.h thmbuffer.h thpdfdata.h thepsparse.h \ thpoint.h th2ddataobject.h thdataobject.h thdatabase.h thdb1d.h \ thobjectid.h thinfnan.h thdataleg.h thobjectname.h therion.h \ thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h \ thdb2d.h thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h \ thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h \ thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h thscrapen.h thscraplp.h \ thline.h tharea.h thexception.h thlayout.h thlocale.h thtexfonts.h \ thlang.h thlangdata.h thtmpdir.h thcmdline.h thmpost.h thinit.h \ thinput.h thsymbolsets.h thlogfile.h $(OUTDIR)/thsymbolsets.o: thsymbolsets.cxx thsymbolsets.h thsymbolsetlist.h $(OUTDIR)/thtex.o: thtex.cxx thtex.h $(OUTDIR)/thtexfonts.o: thtexfonts.cxx thtexfonts.h thtexenc.h thpdfdbg.h \ thexception.h thinit.h thbuffer.h thmbuffer.h thinput.h thparse.h \ thpdfdata.h thepsparse.h therion.h $(OUTDIR)/thtf.o: thtf.cxx thtf.h thexception.h thparse.h thbuffer.h thmbuffer.h $(OUTDIR)/thtfangle.o: thtfangle.cxx therion.h thparse.h thbuffer.h thmbuffer.h \ thtfangle.h thtf.h thexception.h thinfnan.h $(OUTDIR)/thtflength.o: thtflength.cxx thtflength.h thtf.h thparse.h thbuffer.h \ thmbuffer.h thexception.h $(OUTDIR)/thtfpwf.o: thtfpwf.cxx thtfpwf.h thexception.h thinfnan.h thparse.h \ thbuffer.h thmbuffer.h $(OUTDIR)/thtmpdir.o: thtmpdir.cxx thtmpdir.h therion.h thinit.h thbuffer.h \ thmbuffer.h thinput.h thparse.h $(OUTDIR)/thtrans.o: thtrans.cxx thtrans.h thinfnan.h thdatabase.h thdataobject.h \ thperson.h thparse.h thbuffer.h thmbuffer.h thdate.h thdataleg.h \ thobjectname.h therion.h thobjectsrc.h thlayoutclr.h thpdfdata.h \ thepsparse.h thdb1d.h thobjectid.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thlegenddata.h \ thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h \ thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h thscrapen.h thscraplp.h $(OUTDIR)/thwarp.o: thwarp.cxx thwarp.h thpic.h thdb1d.h thobjectid.h thinfnan.h \ thdataleg.h thparse.h thbuffer.h thmbuffer.h thobjectname.h therion.h \ thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h \ thscrap.h thdataobject.h thdatabase.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thlayoutclr.h \ thpdfdata.h thepsparse.h thscraplo.h thlayoutln.h thscrapen.h \ thscraplp.h thsketch.h thtrans.h th2ddataobject.h thpoint.h thconfig.h \ thinput.h thexporter.h thexport.h thlayout.h thsymbolset.h \ thsymbolsetlist.h thlocale.h loch/icase.h thselector.h $(OUTDIR)/thwarpp.o: thwarpp.cxx thwarpp.h thwarp.h thpic.h thwarppme.h \ thwarppdef.h therion.h thtrans.h thinfnan.h thwarppt.h thdataobject.h \ thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thdataleg.h \ thparse.h thobjectname.h thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thlayoutclr.h thpdfdata.h \ thepsparse.h thscraplo.h thlayoutln.h thscrapen.h thscraplp.h thscrap.h \ thsketch.h th2ddataobject.h thpoint.h thconfig.h thinput.h thexporter.h \ thexport.h thlayout.h thsymbolset.h thsymbolsetlist.h thlocale.h \ loch/icase.h thselector.h $(OUTDIR)/thwarppme.o: thwarppme.cxx thinfnan.h thwarppme.h thwarppdef.h therion.h \ thtrans.h $(OUTDIR)/thwarppt.o: thwarppt.cxx thwarppt.h thtrans.h thinfnan.h thwarppme.h \ thwarppdef.h therion.h utest-icase.o: utest-icase.cxx extern/catch2/catch.hpp loch/icase.h \ thparse.h thbuffer.h thmbuffer.h thcsdata.h utest-main.o: utest-main.cxx extern/catch2/catch.hpp thinit.h thbuffer.h \ thmbuffer.h thinput.h thparse.h thproj.h utest-proj.o: utest-proj.cxx extern/catch2/catch.hpp thproj.h thcsdata.h \ thparse.h thbuffer.h thmbuffer.h thcs.h utest-thdouble.o: utest-thdouble.cxx thdouble.h extern/catch2/catch.hpp therion-6.3.4/README000066400000000000000000000016501477525762700141040ustar00rootroot00000000000000This is Therion, cave surveying software. It produces complete, always up-to-date cave maps. The map is automatically updated after loop closure, blunder fix or map symbol set change. It's particularly well suitable for documenting large and complicated cave systems. Therion creates realistic 3D models from 2D maps without quantity of additional information. LRUD dimensions are also supported. Documentation is in the Therion Book (file thbook.pdf), which can either be downloaded from https://therion.speleo.sk/downloads/thbook.pdf or compiled in the `thbook' directory using pdfTeX. Installation (compilation) is described in the Appendix of the Therion Book. There is also much excellent documentation contributed by users on the wiki at: https://therion.speleo.sk/wiki/doku.php Web page: https://therion.speleo.sk Copyright (c) 1999–2025 Stacho Mudrak, Martin Budaj Distributed free under the GNU General Public License therion-6.3.4/SVG.problems000066400000000000000000000004501477525762700154250ustar00rootroot00000000000000Adobe viewer 3 on Linux: * ignores fractional part of numbers when LC_NUMERIC=sk_SK or others with comma as decimal separator (zero width lines, singular matrices) Sodipodi on Linux: * doesn't inherit linecap &c. from the parent group Batik 1.6 on Linux: * fails to load large files therion-6.3.4/TODO.M000066400000000000000000000105511477525762700141070ustar00rootroot00000000000000------------------- nastavitelny okraj vyplne pod legendou (0 pre map-image!) metapost: warningy len v debug mode; interaktivny mod pre -d (s vysvetlenim v thbooku, ktore premenne pouzit) do thbooku vysvetlenie o debugovani MP (mail muttonovi 15.1.09 zvacsovanie fontov v suradniciach pri reze grid vpravo pretrca cez mapu (postupne skladanie) v atlase nie je moznost pouzit mierku a sever pred vlozenim map (formdef vkladat uz v data.tex) rozmery zrkadla sadzby zmenit len pre mapy, nie pre uvod a legendu mapy vseobecne: * pri farebnych labeloch stmavit odtien farby thpdf: * zoznam scrapov na danej strane v atlase -> z toho registre * register pouzitych nazvov - z blokov - z vrstiev * zhrnutie udajov o listoch na konci * k vrstve: meno vo vertikalnom smere alebo udaj o vyske * zanorene OCG * cisla stran a odkazov cez utf2tex * skontrolovat ci nezapisujem nadbytocne xobjecty kvoli vrstvam * podmienene nacitavanie scrapov v TeXu * dvojstrankovy mod (Title vzdy na pravej strane), vtedy akceptovat: * vkladanie prazdnych stran (lepsie: atribut prava/lava pre stranu) * exclude pages a vkladanie prazdnych stran: mena namiesto cisel stran (?) * zrusit OwnPages option (jedine spolu s predch. -- problem s funkciou find_excluded_pages) -- namiesto cisla strany makro \getpage{.} zvacsi argument o hodnotu \the\pageno na 1. strane s mapou * 2. sokolie oko * vrstvy pod aktualnou: odlisit hlbku odtienmi sedej (?) * mody pre preview (ziadne, linkovane, vsetky) * vrstva `pri' pre atlas * co s posunom stran v rychlom mode thsvg: * pattern coloring using symbol-color - delete setgray and setrgbcolor when converting pattern body - extend structures to include pattcolor - use "inherit" color * uxivatelsky prefix pre ids * fonty - orezavacie cesty + vkladanie? * layers cez javascript * (priehladnost -> SVG 1.2) thconvert: * (dorobit) CONCAT + konverzia rozdelenych textovych riadkov * optimalizacia zmien fontov + gsave & al. thepsparse: * grid do 2d struktur thtexfonts: * upravit citanie glyphlistu aby podporovalo viac unicode hodnot * prepinanie fontov v makrach definovanych uzivatelom v TeXu a MP (equipment, continuation) aj pre cisla stran v atlase (tie cez utf2tex) * optimalizacia zmien fontov (delenie slov!) * doplnit kvazi HTML znackovanie vstupnych retazcov tex: * sipka na sever je zbytocna pri priecnom a rozvinutom reze. V ich pripade by tam mal byt nejaky identifikator projekcie * northarrow do atlasu? mpost: * konfigurovatelna velkost textu v mierke a velkost sipky na sever * point stalctites,stalagmites, via-ferrata * gradientny prechod pre areas * poriesit odsadenie bodovych znaciek a najma labelov * dorobit aby fungovalo predefinovanie u,v,w - pri presumed wall, patternoch * initialize(Scale) nepomaha na lejble v legende -- prepisovanie mptexpre.tex? * color map-bg do legendboxov (hadam fg; co ak je fg farbene rozne?) thbook: * varovania texu a metapostu * obrazky mapovych znaciek ----- prezitky dob minulych ----- * mod pre _velke_ mapy (>10MB): scrapy vysadzat do samostatneho suboru a z dalsieho na ne odkazovat pomocou Reference XObject forms -> nefunguje v AR5 --------------------------------- hotovo: * point snow * line rope * area snow, ice, clay * opr. area debris, sand, line debris; dopln. ostatne nedef, equipment, sipka na sever * ramik a stvorcova siet (kriziky): vylepsit alebo cez MetaPost (do uvahy aj convergence) * vypnit miesto pod legendou bg farbou * text vo farbe scrapov * suradnice ku gridu * labels ku kladu listov * velkost gridu (suradnic) urcit pred zvacsenim plochy podla page-gridu * --print-symbols: nepodchyti vsetky patterny (nie vsetky znacky v LEGENDLISTE? -- chybaju v ALL_PATTERNS) * systemove farbenie znaciek * fixed bug with missing patterns in symbols.xhtml * fixed inaccurate clipping of coloured scrap background * fixed placement of surface bitmaps with larger offset * added white fill below cave passages in transparent PDFs if background colour is white (needed if the map is included into other map with non-white background) * fixed alignment of some point symbols in AUT symbol set * new layout option 'color map-bg transparent' to omit page background * fixed incorrect line width conversion in some patterns * hide white background of scraps when the PDF layer containing them is invisible therion-6.3.4/TODO.MS000066400000000000000000000072641477525762700142410ustar00rootroot00000000000000extend left/right a backreadings problem suradnice v cave-liste su v semilogaritmickom tvare bug s izbicou a pevnymi bodmi xth calibrate bitmap: zlucit filtre img/pdf Makefile: make library pri zmene prekladov (neaktualne therion.tcl!) Pacher: * obrovske patterny * interim bboxmargin:=0 bez skupiny pri l_wall_ice podpora NFSS pri --print-symbols (ENC_NEW.write_enc_files(); + skopirovat fonty) do sql: ostatne flagy; commenty pre stations (mutton) ATTR__scale pre vsetky znacky v MP pri kresleni s xvi na pozadi: ak nad mer. bod v xvi vkladam dva mer. body, druhy ma nespravne meno neumoznit shift 0 0 pre mapy kontrola nulovych segmentov na ciare pre MP stopy/palce pomocou '/" pri ctrl-p aktivovat point dialog a po vlozeni bodu aplikovt zmeny grades pre polygon aj fixne body meno obrazku do uvodzoviek: -sketch [Sketches/Greenlink Plan J2 sketch 210707.jpg] 0 -784 sketche do samostatneho layera map-comments v spravnom poradi konvertor: serie precislovat na jednoduche nazvy bodov HEEB: + chybajuci podorys vo vtacej2 premenovat subor na pth (?) pri manipulacii s fix bodmi (pridanie; najprv fix potom pripojenie na koncovy pri merani od konca) thexport len "FIX\r\n" / chyba spojnica k priecnemu rezu / v priecnom reze chybaju shoty a mer. bod / preco sa vo vsetkych nacrtkoch opakuje bod 0 (fix?) / thexport dodrziavat uhlove jednotky, / dat tam trip comment, / opakovat 3 merania polygonu, / problem s pripojenim roznych dist neprebera sa attr do survey ... - entrance ... ak je continuation s explored udajmi, nezobrazit otaznik ale dlzku xtherion ma do scrapu doplnit autora + rok! (pokial tam nie je) pridat margin option pre uvodne strany atlasu, potom dat pagesetup do 1) data.tex za opacity a scale s normalnym okrajom 2) do th_pagedef s overlapom 3) do legendy s normalnym altitude scaling ak je label prazdny retazec, zhuci mp? nejde naraz zadat mapy elev. v dvoch projekciach LOG-subor: X m surveyed (of which Y approximate) + about Z unsurveyed but explored (see the continuation-list and survey-list for details) do xtherionu info o tom ktory ini precital, + warning ak nerozparsoval ini xtherion linux -- delete nezmaze oznaceny blok textu, len znak na kurzore label k line section preco nepouzivame if else v Makefile namiesto komentovania casti? pri centerline so zadanou deklinaciou alebo data nosurvey nepozadovat datum na vypocet automatickej deklinacie obvod scrapu a rozdelena stena spajanie ciar ***************************************************************************** georeferencovanie bitmap aj pomocou jgw/pgw: A world file file is a plain ASCII text file consisting of six values separated by newlines. The format is: pixel X size rotation about the Y axis (usually 0.0) rotation about the X axis (usually 0.0) negative pixel Y size X coordinate of upper left pixel center Y coordinate of upper left pixel center ************************************************ loch pada pri exporte X Error of failed request: GLXBadContext Major opcode of failed request: 144 (GLX) Minor opcode of failed request: 5 (X_GLXMakeCurrent) Serial number of failed request: 70567 Current serial number in output stream: 70567 The program 'loch' received an X Window System error. This probably reflects a bug in the program. The error was 'GLXBadContext'. (Details: serial 23 error_code 155 request_code 144 minor_code 5) (Note to programmers: normally, X errors are reported asynchronously; that is, you will receive the error a while after causing it. To debug your program, run it with the --sync command line option to change this behavior. You can then get a meaningful backtrace from your debugger if you break on the gdk_x_error() function.) therion-6.3.4/TODO.S000066400000000000000000000215451477525762700141220ustar00rootroot00000000000000HOT LIST: + survey level for station-name labels + hyperlink + KML description and name + bugfix + symbol show/hide group texts + do KML povrchove flagy sink/spring etc... + zobrazovat povrchove flagy v lochu + strike and dip + alphabetical team sorting + symbol hide/show user defined symbols + CCNP symbol set + team instrument bug + pridat strike & dip + fills orientation + pridat l:steps, l:rope, l:handrail + pridat do TeXu \northsouthrange a \eastwestrange + skontrolovat v xtherione stavovy riadok - kde je tam list + pridat ignore offsets + pridat topofil from-count/to-count/count(er) standardne namiesto dlzky + pridat inclination ako percetage + pridat ignoreall aj ked multiline + color map-fg survey-date, explo-date -pridat layout object lookup -criteria: altitude, depth, map, survey, eplo-date, topo-date - -type continuous / discrete ([x y] [- x] [x -] [- -]) - -title text -data: value color (.,-) label + loch na debiane!!! -> checkovat opengl status + moznost vypnut off-screen, ak je problem tam + pozriet co by stalo data dimensions/passage + getline a macosx -> vyhodit ho z makefile, podla maximilianovho mailu + urobit dmg podla survexu + warning ked chces zmenit popis nejakej group + pridat strukturu na triangulation line - vypocitat typ: AB,BCDE,ABCDE,BCDEF,ABCDEF + do trojuholnika pridat pointer na t-line + info ci normal/reverse + vypocitat intersection-point-up/down alebo central-point-up/down,up,down + vypocitat potrebne body (ABCDEF) + vytriangulovat + vytvorit thcs.h & thcs.cxx: - vrati int cs podla mena alebo unknown - vrati meno podla int - vrati pointer na strukturu podla int - pridat custom CS alebo throwne exception + interpolovane LRUD na zaklade shotov + vylucit z interpolacie tie shoty, ktore nemaju oba body explicitne zadane (cez stations uid) + layout pri exporte XHTML + priradenie farieb mapam + priame proj4 retazce do CS + calibracia surface v lochu + survey selection v loch-u + loch entrance/fix/station/label off-screen rendering + splayshoty previest na LRUD + jazyky parsovat na vystupe - odskusat + chybaju meracske body v legende + thbook: units up|down|left|right|dimensions + thbook: splay shots using "-" or "." as station name + thbook: in therion.ini otf2pfb on|off + thbook: in therion.ini pdf-fonts + thbook: -filter (on|off) + thbook: more join description + thbook: flags arch & overhang + thbook: export cave-list -surveys (on)|off + thbook: symbol-colour + thbook: new symbol groups + include maps with previews + loch surface handling + add options menu to xtherion + support iso date format YYYY-MM-DD + add lookup tables to configuration files + check label size switch and tex export + add grid-range to layout + fix bug with default layout size/page-setup etc... + KML table export + samples.doc: add coordinates of stations to cave list + create cave penetration distance calculation code + label + sort caves in export according to source position! + add shot type (leg flag) to attribute export + layout: default text orientation switch + automatic label flip if they are up-side down according to given orientation + attributes sample + show/hide U symbols + add cave structure to continuation-list + add -source on|(off) to table export + user defined attributes to shots + scrap morphing algorithm setup to configuration file + 3D generation algorithm - do not remove join points + 3D generation algorithm - take xelevation data into account + scrap name with "_" exported with "." when debug scrap-names + fix hash export in AutoCAD DXF file format + fix usage of extra morphing points (sometimes are ignored) + support cross sections (LRUD) in XVI + allow (direction + distance) instead of LRUD + polyline to bezier conversion mode + more complex attribute export + link same continuations within different projections + symbol show/hide of user defined symbols (using subtypes) + add shot/stations flags to attributes when exported in metapost + add -survey-lines on|off|auto option to scrap - auto by default - if there is some line survey, it will be off + add rotation of 3D surface into surface calibration + negative values to point-dimensions + add selections/unselections to export queue + redo database export + add gradient to area + add line moonmilk and flowstone areas surrounded by line flowstone or moonmilk + solve transparency of sketches + add more layers to DXF export (lines, points, areas?) with some symbols + add legends to SVG export + import of 3D and PLT via lxFile + LRUD envelope generation by lxFile + LRUD walls into 3D shapefiles + associate line section with section scrap + solve section names and sections far from passage + add links to NWES page numbers in atlas + point camera + point picture/hyperlink + not to use -walls off when PLT file is exported + NOT_LRUD flag to lox shots, when there exists shot point in some scrap with outline + warning if reading/backreading difference is big + no joins where starting/ending points are identical + new centerline station flags: spring, sink, lake, doline + special symbols centerline features: entrance, spring, sink, lake, doline + new surface symbols: line dripline line cliff line landform line surface-contour (-altitude??) + individual coloring of previews + map coloring - add user defined color tables into configuration files - chapter|explo-date|topo-date colormodes - saturation as color parameter - use grid settings in altitudes + add bookmarks to PDF files (maps?) + add user define map headers into layout (meta language simmilar to HTML) + 3d: fix bug with internal hole, where no part of it is wall + point rock or block + line rope anchor on/off/auto (point option) line-adjust on/off/auto + line fixed-ladder, rope-ladder, via-ferrata + depth-bar [position| off ] - support for multiple depth-bars + grid-bar [position|off] [position|off] - support for multiple grid bars s_depthbar() - divide into pieces (to fit into figure size) s_gridbar() - divide into pieces (to fit into figure size) + add centerline flags for sink, spring and doline and map these flags to metapost symbols in export + add statistics survey + add survey name under scrap name when debug scrap-names + therion --protractor + MacOS X installator (e.g. http://s.sudre.free.fr/Software/Iceberg.html) + single temporary directory, change name if process file exists + remove temp-dir warning xtherion: + vtopo import + generate error if therion is not found + search & replace toolbar to compiler + moving split bar in compiler window + commands for tabbing/commenting out blocks of texts + rightclick on map-item with changes of types and subtypes + multiselection for properties changing + fix file saving when drive/device have been unplugged + fix: the scrollbar does not appear automatically in compilation window after a compile. We must resize the window or go back in image window (and go back in compile window) to make it appear + save/load xtherion startup script to $HOME/.xtherion + edit line -> to bezier / to polyline option + simple line digitizer + add map editor import filter + SVG import into map editor (using tcldom) + do not save empty lines/areas/scraps + Ctrl+F binding in text/map editor - switch focus to Find control panel and maximize it + add "Filter" and "Unfilter" button for search & select + add filter menus + warn if symbols are outside of scraps + autoincrease scrap names (not scrapN) + area indicator to map editor (type and rotation) + fix MacOS X key bindings + disable "new file" and "open" when one file is opened in map editor + multiplatform init files + shortcuts and macros for common actions + right click on line + undo/redo buttons + context sensitive controls for most commonly used options (subtype, text, name, visibility, align, scale, ...) + rebuild compiler (no more cp text editor) WOULD BE NICE LIST: therion: + navigation pane labeling + redo database export + morphing: add additional features (line extra, point extra:point|distance) + export rigging list + -text option to point anchor + add morphing features browsing code + add fast mode for xtherion - just to generate survey and map structures + surface selection according to coverage 2D: all surfaces that covers current map sorted by size and coverage 3D: make a surface selection and clipping + export all information database + add support for output units (date format, feets etc...) + preview beside + add support for multiple metapost files (more than 4096 scraps) + add -map-level scrap to select -> each scrap will be a separate map + multiple selections in thconfig file + error when 2 simmilar points in scrap xtherion: + add endscrap name to the scrap + add join toolbar simmilar to area + select and move several points together + select and move several objects betweens scraps together + add encoding control of configuration file + solve splitting of curves with id + let xtherion compilation run without configuration file (only with opened files) therion-6.3.4/TODO.SM000066400000000000000000000006071477525762700142330ustar00rootroot00000000000000+ global variables that define density and randomness of area fills + hierarchicky outline + pridat ,,,, do utf2tex + do thbook-u Having done this you will probably want to install what you have built. This should be done as root: $ su password: ****** # make install On the mac the process is slightly different: $ sudo make install password: ****** therion-6.3.4/abisso2th.py000077500000000000000000000017471477525762700155060ustar00rootroot00000000000000#!/usr/bin/python3 # # copyright 2009 Martin Budaj import sys,os if len(sys.argv) < 2: print("usage: ss2th ") sys.exit() file_in = open(sys.argv[1]); file_out = open(os.path.splitext(sys.argv[1])[0]+'.th', 'w') f_prev = 0 m = 2 file_out.write('centreline\n') for i,l in enumerate(file_in): if i < 8: continue toks = l.split() if i < 18 and float(toks[0]) < 0 and sum(abs(float(x)) for x in toks[1:4]): file_out.write(' fix') for j in range(4): file_out.write(" {}".format(toks[j])) file_out.write('\n') if i == 18: file_out.write(' units clino compass deg\n') file_out.write(' calibrate tape 0 0.01\n') file_out.write(' data normal from to compass clino length\n') if len(toks) < 9: continue l,s,a,f,t = [float(x) for x in toks[0:5]] if l == s == f == a == t == 0: continue t = m if t==0 else t f = t_prev if f == 0 else f t_prev = t m += 1 file_out.write('%8d%8d%8s%8s%8s\n' % (f,t,a,s,l)) file_out.write('endcentreline\n') therion-6.3.4/cclass.pl000077500000000000000000000141061477525762700150340ustar00rootroot00000000000000#!/usr/bin/perl $myname = "cclass.pl"; $nargin = $#ARGV + 1; die "$myname: missing class name\n" if ($nargin < 1); if ($nargin < 2) { $father = "dataobject"; } else { $father = $ARGV[1]; } $class = $ARGV[0]; $thclass = "th$class"; $thfather = "th$father"; $CLASS = uc($class); $FATHER = uc($father); die "$myname: $thclass.h already exists\n" if (open(TST,"$thclass.h")); die "$myname: $thclass.cxx already exists\n" if (open(TST,"$thclass.cxx")); die "$myname: $thfather.h does not exist\n" unless (open(TST,"$thfather.h")); $level = 0; while () { if (/TT\_$FATHER\_UNKNOWN\s*\=\s*(\d+)/) { $level = $1; } } die "$myname: unknown level\n" if ($level == 0); close(TST); $level += 1000; $levelp = $level + 1; print "class $thclass : public class $thfather at level $level\n"; print "writing $thclass.h ... "; open(OUT,">$thclass.h"); print OUT <$thclass.cxx"); print OUT <opt = 0; } $thclass\::~$thclass() { } int $thclass\::get_class_id() { return TT_$CLASS\_CMD; } bool $thclass\::is(int class_id) { if (class_id == TT_$CLASS\_CMD) return true; else return $thfather\::is(class_id); } int $thclass\::get_cmd_nargs() { // replace by real number of arguments return 0; } const char * $thclass\::get_cmd_end() { // insert endcommand if multiline command return NULL; } const char * $thclass\::get_cmd_name() { // insert command name here return \"$class\"; } thcmd_option_desc $thclass\::get_cmd_option_desc(const char * opts) { int id = thmatch_token(opts, thtt_$class\_opt); if (id == TT_$CLASS\_UNKNOWN) return $thfather\::get_cmd_option_desc(opts); else return thcmd_option_desc(id); } void $thclass\::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { switch (cod.id) { // replace this by real properties setting case TT_$CLASS\_OPTION: this->opt = sscanf("%d", *args); break; // if not found, try to set fathers properties default: $thfather\::set(cod, args, argenc, indataline); } } void $thclass\::self_print_properties(FILE * outf) { $thfather\::self_print_properties(outf); fprintf(outf,"$thclass:\\n"); // insert intended print of object properties here } ENDBODY close(OUT); print "done\n"; therion-6.3.4/cmake/000077500000000000000000000000001477525762700143025ustar00rootroot00000000000000therion-6.3.4/cmake/BuildType.cmake000066400000000000000000000006631477525762700172120ustar00rootroot00000000000000# set default build type if missing if(NOT CMAKE_BUILD_TYPE) set(DEFAULT_BUILD_TYPE Release) message(STATUS "Build type not specified, using ${DEFAULT_BUILD_TYPE}.") set(CMAKE_BUILD_TYPE ${DEFAULT_BUILD_TYPE} CACHE STRING "Choose the type of build." FORCE) endif() # convenient choice between standard CMake build types set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") therion-6.3.4/cmake/Catch2.cmake000066400000000000000000000011541477525762700164110ustar00rootroot00000000000000# # Set how to find dependency Catch2. # Option USE_BUNDLED_CATCH2: # * ON - use Catch2 header from extern subdirectory # * OFF - use Catch2 installed in the system # option(USE_BUNDLED_CATCH2 "Use bundled version of Catch2." OFF) add_library(catch2-interface INTERFACE) if (USE_BUNDLED_CATCH2) target_include_directories(catch2-interface INTERFACE ${CMAKE_SOURCE_DIR}/extern) return() endif() find_package(Catch2 REQUIRED) target_link_libraries(catch2-interface INTERFACE Catch2::Catch2) if (Catch2_VERSION_MAJOR GREATER_EQUAL 3) target_compile_definitions(catch2-interface INTERFACE CATCH2_V3) endif() therion-6.3.4/cmake/CodeCoverage.cmake000066400000000000000000000032661477525762700176410ustar00rootroot00000000000000# # Generate code coverage report for unit tests. # # How to use: # 1. Use Clang compiler. # 2. Set already configured build folder as a working directory. # 3. Enable code coverage: cmake -DENABLE_CODE_COVERAGE=ON . # 4. Build the project: cmake --build . # 5. Run unit tests: cmake --build . --target test # 6. Generate report: cmake --build . --target ccov-report # 7. View HTML report at ./coverage/html/index.html. # # interface library for setting compiler and linker flags add_library(code-coverage INTERFACE) if (ENABLE_CODE_COVERAGE) if(NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang") message(FATAL_ERROR "Code coverage requires Clang compiler.") endif() set(COVERAGE_FLAGS -fprofile-instr-generate -fcoverage-mapping) target_compile_options(code-coverage INTERFACE ${COVERAGE_FLAGS}) target_link_options(code-coverage INTERFACE ${COVERAGE_FLAGS}) endif() set(COVERAGE_FOLDER ${CMAKE_BINARY_DIR}/coverage) add_custom_target(ccov-report # process raw coverage profile COMMAND llvm-profdata merge -sparse ${COVERAGE_FOLDER}/utest.profraw -o ${COVERAGE_FOLDER}/utest.profdata # generate HTML report COMMAND llvm-cov show $ -instr-profile=${COVERAGE_FOLDER}/utest.profdata -output-dir=${COVERAGE_FOLDER}/html -format=html -show-line-counts-or-regions -show-expansions -Xdemangler=c++filt # Generate console summary COMMAND llvm-cov report $ -instr-profile=${COVERAGE_FOLDER}/utest.profdata -show-region-summary=false WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMENT "Generating coverage report for utest" ) therion-6.3.4/cmake/Dependencies.cmake000066400000000000000000000022461477525762700176760ustar00rootroot00000000000000# link libraries statically when crosscompiling if (CMAKE_CROSSCOMPILING) set(BUILD_SHARED_LIBS OFF) set(CMAKE_EXE_LINKER_FLAGS "-static") endif() if (BUILD_THERION OR BUILD_LOCH) add_subdirectory(extern/img) find_package(fmt REQUIRED) endif() # therion dependencies if (BUILD_THERION) include(PROJ) include(Catch2) include(Shapelib) endif() # loch dependencies if (BUILD_LOCH) find_package(wxWidgets 3.0.0 REQUIRED COMPONENTS core base gl xml html) find_package(VTK REQUIRED COMPONENTS vtkCommonExecutionModel vtkCommonDataModel vtkCommonCore vtkIOPLY vtkFiltersCore vtkFiltersHybrid vtkIOLegacy vtkjpeg vtkpng ) # We must check VTK version manually, doing so in find_package() # won't work for all the versions we support. if (VTK_MAJOR_VERSION LESS 7) message(FATAL_ERROR "At least VTK 7 required, version found: ${VTK_VERSION}") endif() find_package(Freetype REQUIRED) find_package(PNG REQUIRED) find_package(JPEG REQUIRED) find_package(OpenGL REQUIRED) find_package(X11 REQUIRED) find_package(Gettext REQUIRED) endif() therion-6.3.4/cmake/Deploy.cmake000066400000000000000000000006551477525762700165460ustar00rootroot00000000000000# Find all DLL dependencies to deploy on Windows. file(GET_RUNTIME_DEPENDENCIES EXECUTABLES ${THERION} ${LOCH} RESOLVED_DEPENDENCIES_VAR DLLS PRE_EXCLUDE_REGEXES "^api-ms-" "^ext-ms-" POST_EXCLUDE_REGEXES ".*system32/.*\\.dll" DIRECTORIES $ENV{PATH} ) file(MAKE_DIRECTORY ${DLLS_DIR}) foreach(DLL ${DLLS}) message("Copying dependency: ${DLL}") file(COPY ${DLL} DESTINATION ${DLLS_DIR}) endforeach() therion-6.3.4/cmake/DetectLegacyBuild.cmake000066400000000000000000000005121477525762700206170ustar00rootroot00000000000000# Prevent building with CMake when there are files in the source dir generated by the legacy Therion Makefile. if (EXISTS ${CMAKE_SOURCE_DIR}/thversion.h) message(FATAL_ERROR "Using old Therion Makefile together with new CMake build is not supported, please run \"make clean\" in the source directory and try again.") endif() therion-6.3.4/cmake/ECMEnableSanitizers.cmake000066400000000000000000000147631477525762700211060ustar00rootroot00000000000000#.rst: # ECMEnableSanitizers # ------------------- # # Enable compiler sanitizer flags. # # The following sanitizers are supported: # # - Address Sanitizer # - Memory Sanitizer # - Thread Sanitizer # - Leak Sanitizer # - Undefined Behaviour Sanitizer # # All of them are implemented in Clang, depending on your version, and # there is an work in progress in GCC, where some of them are currently # implemented. # # This module will check your current compiler version to see if it # supports the sanitizers that you want to enable # # Usage # ===== # # Simply add:: # # include(ECMEnableSanitizers) # # to your ``CMakeLists.txt``. Note that this module is included in # KDECompilerSettings, so projects using that module do not need to also # include this one. # # The sanitizers are not enabled by default. Instead, you must set # ``ECM_ENABLE_SANITIZERS`` (either in your ``CMakeLists.txt`` or on the # command line) to a semicolon-separated list of sanitizers you wish to enable. # The options are: # # - address # - memory # - thread # - leak # - undefined # # The sanitizers "address", "memory" and "thread" are mutually exclusive. You # cannot enable two of them in the same build. # # "leak" requires the "address" sanitizer. # # .. note:: # # To reduce the overhead induced by the instrumentation of the sanitizers, it # is advised to enable compiler optimizations (``-O1`` or higher). # # Example # ======= # # This is an example of usage:: # # mkdir build # cd build # cmake -DECM_ENABLE_SANITIZERS='address;leak;undefined' .. # # .. note:: # # Most of the sanitizers will require Clang. To enable it, use:: # # -DCMAKE_CXX_COMPILER=clang++ # # Since 1.3.0. #============================================================================= # Copyright 2014 Mathieu Tarral # # 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 copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # MACRO check_compiler_version #----------------------------- macro (check_compiler_version gcc_required_version clang_required_version) if ( ( CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${gcc_required_version} ) OR ( CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${clang_required_version} ) ) # error ! message(FATAL_ERROR "You ask to enable the sanitizer ${CUR_SANITIZER}, but your compiler ${CMAKE_CXX_COMPILER_ID} version ${CMAKE_CXX_COMPILER_VERSION} does not support it ! You should use at least GCC ${gcc_required_version} or Clang ${clang_required_version} (99.99 means not implemented yet)") endif () endmacro () # MACRO check_compiler_support #------------------------------ macro (enable_sanitizer_flags sanitize_option) if (${sanitize_option} MATCHES "address") check_compiler_version("4.8" "3.1") set(XSAN_COMPILE_FLAGS "-fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls") set(XSAN_LINKER_FLAGS "asan") elseif (${sanitize_option} MATCHES "thread") check_compiler_version("4.8" "3.1") set(XSAN_COMPILE_FLAGS "-fsanitize=thread") set(XSAN_LINKER_FLAGS "tsan") elseif (${sanitize_option} MATCHES "memory") check_compiler_version("99.99" "3.1") set(XSAN_COMPILE_FLAGS "-fsanitize=memory") elseif (${sanitize_option} MATCHES "leak") check_compiler_version("4.9" "3.4") set(XSAN_COMPILE_FLAGS "-fsanitize=leak") set(XSAN_LINKER_FLAGS "lsan") elseif (${sanitize_option} MATCHES "undefined") check_compiler_version("4.9" "3.1") set(XSAN_COMPILE_FLAGS "-fsanitize=undefined -fno-omit-frame-pointer -fno-optimize-sibling-calls") else () message(FATAL_ERROR "Compiler sanitizer option \"${sanitize_option}\" not supported.") endif () endmacro () if (ECM_ENABLE_SANITIZERS) if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") # for each element of the ECM_ENABLE_SANITIZERS list foreach ( CUR_SANITIZER ${ECM_ENABLE_SANITIZERS} ) # lowercase filter string(TOLOWER ${CUR_SANITIZER} CUR_SANITIZER) # check option and enable appropriate flags enable_sanitizer_flags ( ${CUR_SANITIZER} ) # TODO: GCC will not link pthread library if enabled ASan if(CMAKE_C_COMPILER_ID MATCHES "Clang") set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${XSAN_COMPILE_FLAGS}" ) endif() set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${XSAN_COMPILE_FLAGS}" ) if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") link_libraries(${XSAN_LINKER_FLAGS}) endif() if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") string(REPLACE "-Wl,--no-undefined" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}") string(REPLACE "-Wl,--no-undefined" "" CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}") endif () endforeach() else() message(STATUS "Tried to enable sanitizers (-DECM_ENABLE_SANITIZERS=${ECM_ENABLE_SANITIZERS}), \ but compiler (${CMAKE_CXX_COMPILER_ID}) does not have sanitizer support") endif() endif() therion-6.3.4/cmake/Library.cmake000066400000000000000000000011121477525762700167030ustar00rootroot00000000000000# run therion to generate source code for thlibrarydata.cxx execute_process( COMMAND ${THERION} --print-library-src thlibrarydata.thcfg OUTPUT_VARIABLE LIBRARY_LOG WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) # find start of source file in the therion log string(FIND "${LIBRARY_LOG}" "/**" CXX_START) if (${CXX_START} EQUAL -1) message(FATAL_ERROR "thlibrarydata.cxx generation failed") endif() string(SUBSTRING "${LIBRARY_LOG}" ${CXX_START} -1 LIBRARY_LOG) # write generated CXX source to the source file file(WRITE ${CMAKE_SOURCE_DIR}/thlibrarydata.cxx "${LIBRARY_LOG}") therion-6.3.4/cmake/LochSources.cmake000066400000000000000000000011321477525762700175320ustar00rootroot00000000000000set(LOCH_HEADERS lxAboutDlg.h lxFNT10x20_bdf.h lxGLC.h lxImgIO.h lxOptDlg.h lxRender.h lxR2P.h lxSScene.h lxSView.h lxWX.h lxData.h lxFNTFreeSans_ttf.h lxFNT6x13_bdf.h lxGUI.h lxLRUD.h lxOGLFT.h lxPres.h lxR2D.h lxSetup.h lxSTree.h lxSStats.h ) set(LOCH_SOURCES lxAboutDlg.cxx lxGUI.cxx lxLRUD.cxx lxOGLFT.cxx lxPres.cxx lxSetup.cxx lxSTree.cxx lxWX.cxx lxData.cxx lxGLC.cxx lxImgIO.cxx lxOptDlg.cxx lxRender.cxx lxSScene.cxx lxSView.cxx lxSStats.cxx ) therion-6.3.4/cmake/PROJ.cmake000066400000000000000000000017461477525762700160660ustar00rootroot00000000000000# # Set how to find dependency PROJ. # Option ENABLE_PROJ_CMAKE: # * ON - use CMake to find PROJ's exported targets # * OFF - find PROJ with pkg-config # option(ENABLE_PROJ_CMAKE "Use CMake to find PROJ library." OFF) add_library(proj-interface INTERFACE) if (ENABLE_PROJ_CMAKE) find_package(PROJ REQUIRED) target_link_libraries(proj-interface INTERFACE PROJ::proj) else() if (NOT PKG_CONFIG_FOUND) find_package(PkgConfig REQUIRED) endif() pkg_check_modules(PROJ REQUIRED IMPORTED_TARGET proj) target_link_libraries(proj-interface INTERFACE PkgConfig::PROJ) endif() string(FIND ${PROJ_VERSION} "." MVER_SEP) string(SUBSTRING ${PROJ_VERSION} 0 ${MVER_SEP} PROJ_MVER) set(PROJ_UNSUPPORTED 7.0.0) if (PROJ_VERSION IN_LIST PROJ_UNSUPPORTED OR PROJ_VERSION VERSION_LESS 6.3.1) # check if proj version is unsupported message(FATAL_ERROR "Unsupported proj version: ${PROJ_VERSION}") endif() target_compile_definitions(proj-interface INTERFACE PROJ_VER=${PROJ_MVER}) therion-6.3.4/cmake/PreventInSourceBuilds.cmake000066400000000000000000000013101477525762700215350ustar00rootroot00000000000000# # This function will prevent in-source builds function(AssureOutOfSourceBuilds) # make sure the user doesn't play dirty with symlinks get_filename_component(srcdir "${CMAKE_SOURCE_DIR}" REALPATH) get_filename_component(bindir "${CMAKE_BINARY_DIR}" REALPATH) # disallow in-source builds if("${srcdir}" STREQUAL "${bindir}") message("######################################################") message("Warning: in-source builds are disabled") message("Please create a separate build directory and run cmake from there") message("######################################################") message(FATAL_ERROR "Quitting configuration") endif() endfunction() assureoutofsourcebuilds() therion-6.3.4/cmake/Shapelib.cmake000066400000000000000000000011641477525762700170350ustar00rootroot00000000000000# # Set how to find dependency shapelib. # Option USE_BUNDLED_SHAPELIB: # * ON - use shapelib from extern subdirectory # * OFF - use shapelib installed in the system # option(USE_BUNDLED_SHAPELIB "Use bundled version of shapelib." ON) add_library(shp-interface INTERFACE) if (USE_BUNDLED_SHAPELIB) add_subdirectory(extern/shapelib) target_link_libraries(shp-interface INTERFACE shp) else() if (NOT PKG_CONFIG_FOUND) find_package(PkgConfig REQUIRED) endif() pkg_check_modules(SHAPELIB REQUIRED IMPORTED_TARGET shapelib) target_link_libraries(shp-interface INTERFACE PkgConfig::SHAPELIB) endif() therion-6.3.4/cmake/TherionSources.cmake000066400000000000000000000176611477525762700202730ustar00rootroot00000000000000set(THERION_HEADERS ${CMAKE_BINARY_DIR}/thcsdata.h ${CMAKE_BINARY_DIR}/thchencdata.h ${CMAKE_BINARY_DIR}/thlangdata.h ${CMAKE_BINARY_DIR}/thlangdatafields.h ${CMAKE_BINARY_DIR}/thmpost.h ${CMAKE_BINARY_DIR}/thsymbolsetlist.h ${CMAKE_BINARY_DIR}/thsymbolsets.h ${CMAKE_BINARY_DIR}/thtex.h ${CMAKE_BINARY_DIR}/thversion.h ${CMAKE_SOURCE_DIR}/th2ddataobject.h ${CMAKE_SOURCE_DIR}/tharea.h ${CMAKE_SOURCE_DIR}/thattr.h ${CMAKE_SOURCE_DIR}/thbezier.h ${CMAKE_SOURCE_DIR}/thbuffer.h ${CMAKE_SOURCE_DIR}/thcmdline.h ${CMAKE_SOURCE_DIR}/thcomment.h ${CMAKE_SOURCE_DIR}/thconfig.h ${CMAKE_SOURCE_DIR}/thcs.h ${CMAKE_SOURCE_DIR}/thdata.h ${CMAKE_SOURCE_DIR}/thdatabase.h ${CMAKE_SOURCE_DIR}/thdataleg.h ${CMAKE_SOURCE_DIR}/thdataobject.h ${CMAKE_SOURCE_DIR}/thdatareader.h ${CMAKE_SOURCE_DIR}/thdatastation.h ${CMAKE_SOURCE_DIR}/thdate.h ${CMAKE_SOURCE_DIR}/thdb1d.h ${CMAKE_SOURCE_DIR}/thdb2d.h ${CMAKE_SOURCE_DIR}/thdb2dab.h ${CMAKE_SOURCE_DIR}/thdb2dcp.h ${CMAKE_SOURCE_DIR}/thdb2dji.h ${CMAKE_SOURCE_DIR}/thdb2dlp.h ${CMAKE_SOURCE_DIR}/thdb2dmi.h ${CMAKE_SOURCE_DIR}/thdb2dprj.h ${CMAKE_SOURCE_DIR}/thdb2dpt.h ${CMAKE_SOURCE_DIR}/thdb2dxm.h ${CMAKE_SOURCE_DIR}/thdb2dxs.h ${CMAKE_SOURCE_DIR}/thdb3d.h ${CMAKE_SOURCE_DIR}/thdouble.h ${CMAKE_SOURCE_DIR}/thendscrap.h ${CMAKE_SOURCE_DIR}/thendsurvey.h ${CMAKE_SOURCE_DIR}/thepsparse.h ${CMAKE_SOURCE_DIR}/therion.h ${CMAKE_SOURCE_DIR}/thexception.h ${CMAKE_SOURCE_DIR}/thexpdb.h ${CMAKE_SOURCE_DIR}/thexpmap.h ${CMAKE_SOURCE_DIR}/thexpmodel.h ${CMAKE_SOURCE_DIR}/thexport.h ${CMAKE_SOURCE_DIR}/thexporter.h ${CMAKE_SOURCE_DIR}/thexpshp.h ${CMAKE_SOURCE_DIR}/thexpsys.h ${CMAKE_SOURCE_DIR}/thexptable.h ${CMAKE_SOURCE_DIR}/thexpuni.h ${CMAKE_SOURCE_DIR}/thfilehandle.h ${CMAKE_SOURCE_DIR}/thgeomag.h ${CMAKE_SOURCE_DIR}/thgeomagdata.h ${CMAKE_SOURCE_DIR}/thgrade.h ${CMAKE_SOURCE_DIR}/thchenc.h ${CMAKE_SOURCE_DIR}/thimport.h ${CMAKE_SOURCE_DIR}/thinfnan.h ${CMAKE_SOURCE_DIR}/thinit.h ${CMAKE_SOURCE_DIR}/thinput.h ${CMAKE_SOURCE_DIR}/thjoin.h ${CMAKE_SOURCE_DIR}/thlang.h ${CMAKE_SOURCE_DIR}/thlayout.h ${CMAKE_SOURCE_DIR}/thlayoutclr.h ${CMAKE_SOURCE_DIR}/thlayoutln.h ${CMAKE_SOURCE_DIR}/thlegenddata.h ${CMAKE_SOURCE_DIR}/thlibrary.h ${CMAKE_SOURCE_DIR}/thline.h ${CMAKE_SOURCE_DIR}/thlocale.h ${CMAKE_SOURCE_DIR}/thlog.h ${CMAKE_SOURCE_DIR}/thlogfile.h ${CMAKE_SOURCE_DIR}/thlookup.h ${CMAKE_SOURCE_DIR}/thmap.h ${CMAKE_SOURCE_DIR}/thmapstat.h ${CMAKE_SOURCE_DIR}/thmbuffer.h ${CMAKE_SOURCE_DIR}/thobjectid.h ${CMAKE_SOURCE_DIR}/thobjectname.h ${CMAKE_SOURCE_DIR}/thobjectsrc.h ${CMAKE_SOURCE_DIR}/thparse.h ${CMAKE_SOURCE_DIR}/thpdf.h ${CMAKE_SOURCE_DIR}/thpdfdata.h ${CMAKE_SOURCE_DIR}/thpdfdbg.h ${CMAKE_SOURCE_DIR}/thperson.h ${CMAKE_SOURCE_DIR}/thpic.h ${CMAKE_SOURCE_DIR}/thpoint.h ${CMAKE_SOURCE_DIR}/thproj.h ${CMAKE_SOURCE_DIR}/thscrap.h ${CMAKE_SOURCE_DIR}/thscrapen.h ${CMAKE_SOURCE_DIR}/thscrapis.h ${CMAKE_SOURCE_DIR}/thscraplo.h ${CMAKE_SOURCE_DIR}/thscraplp.h ${CMAKE_SOURCE_DIR}/thselector.h ${CMAKE_SOURCE_DIR}/thsketch.h ${CMAKE_SOURCE_DIR}/thsurface.h ${CMAKE_SOURCE_DIR}/thsurvey.h ${CMAKE_SOURCE_DIR}/thsvg.h ${CMAKE_SOURCE_DIR}/thsvxctrl.h ${CMAKE_SOURCE_DIR}/thsymbolset.h ${CMAKE_SOURCE_DIR}/thtexenc.h ${CMAKE_SOURCE_DIR}/thtexfonts.h ${CMAKE_SOURCE_DIR}/thtf.h ${CMAKE_SOURCE_DIR}/thtfangle.h ${CMAKE_SOURCE_DIR}/thtflength.h ${CMAKE_SOURCE_DIR}/thtfpwf.h ${CMAKE_SOURCE_DIR}/thtmpdir.h ${CMAKE_SOURCE_DIR}/thtrans.h ${CMAKE_SOURCE_DIR}/thwarp.h ${CMAKE_SOURCE_DIR}/thwarpp.h ${CMAKE_SOURCE_DIR}/thwarppdef.h ${CMAKE_SOURCE_DIR}/thwarppme.h ${CMAKE_SOURCE_DIR}/thwarppt.h ) # TODO rename these files to .h set_source_files_properties( ${CMAKE_BINARY_DIR}/thchencdata.cxx ${CMAKE_SOURCE_DIR}/thlibrarydata.cxx PROPERTIES HEADER_FILE_ONLY TRUE) set(THERION_SOURCES ${CMAKE_BINARY_DIR}/thcsdata.cxx ${CMAKE_BINARY_DIR}/thchencdata.cxx ${CMAKE_BINARY_DIR}/thmpost.cxx ${CMAKE_BINARY_DIR}/thsymbolsets.cxx ${CMAKE_BINARY_DIR}/thtex.cxx ${CMAKE_SOURCE_DIR}/th2ddataobject.cxx ${CMAKE_SOURCE_DIR}/tharea.cxx ${CMAKE_SOURCE_DIR}/thattr.cxx ${CMAKE_SOURCE_DIR}/thbezier.cxx ${CMAKE_SOURCE_DIR}/thbuffer.cxx ${CMAKE_SOURCE_DIR}/thcmdline.cxx ${CMAKE_SOURCE_DIR}/thcomment.cxx ${CMAKE_SOURCE_DIR}/thconfig.cxx ${CMAKE_SOURCE_DIR}/thcs.cxx ${CMAKE_SOURCE_DIR}/thdata.cxx ${CMAKE_SOURCE_DIR}/thdatabase.cxx ${CMAKE_SOURCE_DIR}/thdataleg.cxx ${CMAKE_SOURCE_DIR}/thdataobject.cxx ${CMAKE_SOURCE_DIR}/thdatareader.cxx ${CMAKE_SOURCE_DIR}/thdatastation.cxx ${CMAKE_SOURCE_DIR}/thdate.cxx ${CMAKE_SOURCE_DIR}/thdb1d.cxx ${CMAKE_SOURCE_DIR}/thdb2d.cxx ${CMAKE_SOURCE_DIR}/thdb2d00.cxx ${CMAKE_SOURCE_DIR}/thdb2dab.cxx ${CMAKE_SOURCE_DIR}/thdb2dcp.cxx ${CMAKE_SOURCE_DIR}/thdb2dji.cxx ${CMAKE_SOURCE_DIR}/thdb2dlp.cxx ${CMAKE_SOURCE_DIR}/thdb2dmi.cxx ${CMAKE_SOURCE_DIR}/thdb2dprj.cxx ${CMAKE_SOURCE_DIR}/thdb2dpt.cxx ${CMAKE_SOURCE_DIR}/thdb2dxm.cxx ${CMAKE_SOURCE_DIR}/thdb2dxs.cxx ${CMAKE_SOURCE_DIR}/thdb3d.cxx ${CMAKE_SOURCE_DIR}/thendscrap.cxx ${CMAKE_SOURCE_DIR}/thendsurvey.cxx ${CMAKE_SOURCE_DIR}/thepsparse.cxx ${CMAKE_SOURCE_DIR}/therion.cxx ${CMAKE_SOURCE_DIR}/thexception.cxx ${CMAKE_SOURCE_DIR}/thexpdb.cxx ${CMAKE_SOURCE_DIR}/thexpmap.cxx ${CMAKE_SOURCE_DIR}/thexpmodel.cxx ${CMAKE_SOURCE_DIR}/thexport.cxx ${CMAKE_SOURCE_DIR}/thexporter.cxx ${CMAKE_SOURCE_DIR}/thexpshp.cxx ${CMAKE_SOURCE_DIR}/thexpsys.cxx ${CMAKE_SOURCE_DIR}/thexptable.cxx ${CMAKE_SOURCE_DIR}/thexpuni.cxx ${CMAKE_SOURCE_DIR}/thgeomag.cxx ${CMAKE_SOURCE_DIR}/thgrade.cxx ${CMAKE_SOURCE_DIR}/thchenc.cxx ${CMAKE_SOURCE_DIR}/thimport.cxx ${CMAKE_SOURCE_DIR}/thinfnan.cxx ${CMAKE_SOURCE_DIR}/thinit.cxx ${CMAKE_SOURCE_DIR}/thinput.cxx ${CMAKE_SOURCE_DIR}/thjoin.cxx ${CMAKE_SOURCE_DIR}/thlang.cxx ${CMAKE_SOURCE_DIR}/thlayout.cxx ${CMAKE_SOURCE_DIR}/thlayoutclr.cxx ${CMAKE_SOURCE_DIR}/thlayoutln.cxx ${CMAKE_SOURCE_DIR}/thlegenddata.cxx ${CMAKE_SOURCE_DIR}/thlibrary.cxx ${CMAKE_SOURCE_DIR}/thlibrarydata.cxx ${CMAKE_SOURCE_DIR}/thline.cxx ${CMAKE_SOURCE_DIR}/thlocale.cxx ${CMAKE_SOURCE_DIR}/thlog.cxx ${CMAKE_SOURCE_DIR}/thlogfile.cxx ${CMAKE_SOURCE_DIR}/thlookup.cxx ${CMAKE_SOURCE_DIR}/thmap.cxx ${CMAKE_SOURCE_DIR}/thmapstat.cxx ${CMAKE_SOURCE_DIR}/thmbuffer.cxx ${CMAKE_SOURCE_DIR}/thobjectid.cxx ${CMAKE_SOURCE_DIR}/thobjectname.cxx ${CMAKE_SOURCE_DIR}/thobjectsrc.cxx ${CMAKE_SOURCE_DIR}/thparse.cxx ${CMAKE_SOURCE_DIR}/thpdf.cxx ${CMAKE_SOURCE_DIR}/thpdfdata.cxx ${CMAKE_SOURCE_DIR}/thpdfdbg.cxx ${CMAKE_SOURCE_DIR}/thperson.cxx ${CMAKE_SOURCE_DIR}/thpic.cxx ${CMAKE_SOURCE_DIR}/thpoint.cxx ${CMAKE_SOURCE_DIR}/thproj.cxx ${CMAKE_SOURCE_DIR}/thscrap.cxx ${CMAKE_SOURCE_DIR}/thscrapen.cxx ${CMAKE_SOURCE_DIR}/thscrapis.cxx ${CMAKE_SOURCE_DIR}/thscraplo.cxx ${CMAKE_SOURCE_DIR}/thscraplp.cxx ${CMAKE_SOURCE_DIR}/thselector.cxx ${CMAKE_SOURCE_DIR}/thsketch.cxx ${CMAKE_SOURCE_DIR}/thsurface.cxx ${CMAKE_SOURCE_DIR}/thsurvey.cxx ${CMAKE_SOURCE_DIR}/thsvg.cxx ${CMAKE_SOURCE_DIR}/thsvxctrl.cxx ${CMAKE_SOURCE_DIR}/thsymbolset.cxx ${CMAKE_SOURCE_DIR}/thtexfonts.cxx ${CMAKE_SOURCE_DIR}/thtf.cxx ${CMAKE_SOURCE_DIR}/thtfangle.cxx ${CMAKE_SOURCE_DIR}/thtflength.cxx ${CMAKE_SOURCE_DIR}/thtfpwf.cxx ${CMAKE_SOURCE_DIR}/thtmpdir.cxx ${CMAKE_SOURCE_DIR}/thtrans.cxx ${CMAKE_SOURCE_DIR}/thwarp.cxx ${CMAKE_SOURCE_DIR}/thwarpp.cxx ${CMAKE_SOURCE_DIR}/thwarppme.cxx ${CMAKE_SOURCE_DIR}/thwarppt.cxx ) therion-6.3.4/cmake/Warnings.cmake000066400000000000000000000007731477525762700171030ustar00rootroot00000000000000# link with this interface library to enable warnings, used for project code add_library(enable-warnings INTERFACE) # link with this interface library to disable warnings, used for extern libraries add_library(disable-warnings INTERFACE) if (MSVC) target_compile_options(enable-warnings INTERFACE /W4) target_compile_options(disable-warnings INTERFACE /w) else() target_compile_options(enable-warnings INTERFACE -Wall -Wextra) target_compile_options(disable-warnings INTERFACE -w) endif() therion-6.3.4/cmake/toolchains/000077500000000000000000000000001477525762700164455ustar00rootroot00000000000000therion-6.3.4/cmake/toolchains/clang-sanitizers.cmake000066400000000000000000000002331477525762700227220ustar00rootroot00000000000000# Clang + ASan + UBSan + optimizations + debug symbols include(${CMAKE_CURRENT_LIST_DIR}/clang.cmake) include(${CMAKE_CURRENT_LIST_DIR}/sanitizers.cmake) therion-6.3.4/cmake/toolchains/clang.cmake000066400000000000000000000004111477525762700205270ustar00rootroot00000000000000# Set Clang as a compiler. find_program(CMAKE_C_COMPILER clang) find_program(CMAKE_CXX_COMPILER clang++) set(CMAKE_C_COMPILER "${CMAKE_C_COMPILER}" CACHE STRING "C compiler" FORCE) set(CMAKE_CXX_COMPILER "${CMAKE_CXX_COMPILER}" CACHE STRING "C++ compiler" FORCE) therion-6.3.4/cmake/toolchains/gcc.cmake000066400000000000000000000004011477525762700201760ustar00rootroot00000000000000# Set GCC as a compiler. find_program(CMAKE_C_COMPILER gcc) find_program(CMAKE_CXX_COMPILER g++) set(CMAKE_C_COMPILER "${CMAKE_C_COMPILER}" CACHE STRING "C compiler" FORCE) set(CMAKE_CXX_COMPILER "${CMAKE_CXX_COMPILER}" CACHE STRING "C++ compiler" FORCE) therion-6.3.4/cmake/toolchains/sanitizers.cmake000066400000000000000000000007661477525762700216530ustar00rootroot00000000000000# Enable sanitizers. # Fail on errors. set(CMAKE_C_FLAGS_INIT "-fno-sanitize-recover=all") set(CMAKE_CXX_FLAGS_INIT "-fno-sanitize-recover=all") # Optimizations help to uncover bugs, debug symbols make reports from sanitizers readable. set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build.") # ASan and UBSan can be run together. set(ECM_ENABLE_SANITIZERS "address;undefined" CACHE STRING "Enable runtime sanitizers, available options: address,memory,thread,leak,undefined." ) therion-6.3.4/extern/000077500000000000000000000000001477525762700145275ustar00rootroot00000000000000therion-6.3.4/extern/catch2/000077500000000000000000000000001477525762700156735ustar00rootroot00000000000000therion-6.3.4/extern/catch2/catch.hpp000066400000000000000000024040031477525762700174710ustar00rootroot00000000000000/* * Catch v2.13.10 * Generated: 2022-10-16 11:01:23.452308 * ---------------------------------------------------------- * This file has been merged from multiple headers. Please don't edit it directly * Copyright (c) 2022 Two Blue Cubes Ltd. All rights reserved. * * Distributed under the Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) */ #ifndef TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED #define TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED // start catch.hpp #define CATCH_VERSION_MAJOR 2 #define CATCH_VERSION_MINOR 13 #define CATCH_VERSION_PATCH 10 #ifdef __clang__ # pragma clang system_header #elif defined __GNUC__ # pragma GCC system_header #endif // start catch_suppress_warnings.h #ifdef __clang__ # ifdef __ICC // icpc defines the __clang__ macro # pragma warning(push) # pragma warning(disable: 161 1682) # else // __ICC # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wpadded" # pragma clang diagnostic ignored "-Wswitch-enum" # pragma clang diagnostic ignored "-Wcovered-switch-default" # endif #elif defined __GNUC__ // Because REQUIREs trigger GCC's -Wparentheses, and because still // supported version of g++ have only buggy support for _Pragmas, // Wparentheses have to be suppressed globally. # pragma GCC diagnostic ignored "-Wparentheses" // See #674 for details # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wunused-variable" # pragma GCC diagnostic ignored "-Wpadded" #endif // end catch_suppress_warnings.h #if defined(CATCH_CONFIG_MAIN) || defined(CATCH_CONFIG_RUNNER) # define CATCH_IMPL # define CATCH_CONFIG_ALL_PARTS #endif // In the impl file, we want to have access to all parts of the headers // Can also be used to sanely support PCHs #if defined(CATCH_CONFIG_ALL_PARTS) # define CATCH_CONFIG_EXTERNAL_INTERFACES # if defined(CATCH_CONFIG_DISABLE_MATCHERS) # undef CATCH_CONFIG_DISABLE_MATCHERS # endif # if !defined(CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER) # define CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER # endif #endif #if !defined(CATCH_CONFIG_IMPL_ONLY) // start catch_platform.h // See e.g.: // https://opensource.apple.com/source/CarbonHeaders/CarbonHeaders-18.1/TargetConditionals.h.auto.html #ifdef __APPLE__ # include # if (defined(TARGET_OS_OSX) && TARGET_OS_OSX == 1) || \ (defined(TARGET_OS_MAC) && TARGET_OS_MAC == 1) # define CATCH_PLATFORM_MAC # elif (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE == 1) # define CATCH_PLATFORM_IPHONE # endif #elif defined(linux) || defined(__linux) || defined(__linux__) # define CATCH_PLATFORM_LINUX #elif defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER) || defined(__MINGW32__) # define CATCH_PLATFORM_WINDOWS #endif // end catch_platform.h #ifdef CATCH_IMPL # ifndef CLARA_CONFIG_MAIN # define CLARA_CONFIG_MAIN_NOT_DEFINED # define CLARA_CONFIG_MAIN # endif #endif // start catch_user_interfaces.h namespace Catch { unsigned int rngSeed(); } // end catch_user_interfaces.h // start catch_tag_alias_autoregistrar.h // start catch_common.h // start catch_compiler_capabilities.h // Detect a number of compiler features - by compiler // The following features are defined: // // CATCH_CONFIG_COUNTER : is the __COUNTER__ macro supported? // CATCH_CONFIG_WINDOWS_SEH : is Windows SEH supported? // CATCH_CONFIG_POSIX_SIGNALS : are POSIX signals supported? // CATCH_CONFIG_DISABLE_EXCEPTIONS : Are exceptions enabled? // **************** // Note to maintainers: if new toggles are added please document them // in configuration.md, too // **************** // In general each macro has a _NO_ form // (e.g. CATCH_CONFIG_NO_POSIX_SIGNALS) which disables the feature. // Many features, at point of detection, define an _INTERNAL_ macro, so they // can be combined, en-mass, with the _NO_ forms later. #ifdef __cplusplus # if (__cplusplus >= 201402L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201402L) # define CATCH_CPP14_OR_GREATER # endif # if (__cplusplus >= 201703L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) # define CATCH_CPP17_OR_GREATER # endif #endif // Only GCC compiler should be used in this block, so other compilers trying to // mask themselves as GCC should be ignored. #if defined(__GNUC__) && !defined(__clang__) && !defined(__ICC) && !defined(__CUDACC__) && !defined(__LCC__) # define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic push" ) # define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic pop" ) # define CATCH_INTERNAL_IGNORE_BUT_WARN(...) (void)__builtin_constant_p(__VA_ARGS__) #endif #if defined(__clang__) # define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic push" ) # define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic pop" ) // As of this writing, IBM XL's implementation of __builtin_constant_p has a bug // which results in calls to destructors being emitted for each temporary, // without a matching initialization. In practice, this can result in something // like `std::string::~string` being called on an uninitialized value. // // For example, this code will likely segfault under IBM XL: // ``` // REQUIRE(std::string("12") + "34" == "1234") // ``` // // Therefore, `CATCH_INTERNAL_IGNORE_BUT_WARN` is not implemented. # if !defined(__ibmxl__) && !defined(__CUDACC__) # define CATCH_INTERNAL_IGNORE_BUT_WARN(...) (void)__builtin_constant_p(__VA_ARGS__) /* NOLINT(cppcoreguidelines-pro-type-vararg, hicpp-vararg) */ # endif # define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ _Pragma( "clang diagnostic ignored \"-Wexit-time-destructors\"" ) \ _Pragma( "clang diagnostic ignored \"-Wglobal-constructors\"") # define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \ _Pragma( "clang diagnostic ignored \"-Wparentheses\"" ) # define CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS \ _Pragma( "clang diagnostic ignored \"-Wunused-variable\"" ) # define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \ _Pragma( "clang diagnostic ignored \"-Wgnu-zero-variadic-macro-arguments\"" ) # define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \ _Pragma( "clang diagnostic ignored \"-Wunused-template\"" ) #endif // __clang__ //////////////////////////////////////////////////////////////////////////////// // Assume that non-Windows platforms support posix signals by default #if !defined(CATCH_PLATFORM_WINDOWS) #define CATCH_INTERNAL_CONFIG_POSIX_SIGNALS #endif //////////////////////////////////////////////////////////////////////////////// // We know some environments not to support full POSIX signals #if defined(__CYGWIN__) || defined(__QNX__) || defined(__EMSCRIPTEN__) || defined(__DJGPP__) #define CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS #endif #ifdef __OS400__ # define CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS # define CATCH_CONFIG_COLOUR_NONE #endif //////////////////////////////////////////////////////////////////////////////// // Android somehow still does not support std::to_string #if defined(__ANDROID__) # define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING # define CATCH_INTERNAL_CONFIG_ANDROID_LOGWRITE #endif //////////////////////////////////////////////////////////////////////////////// // Not all Windows environments support SEH properly #if defined(__MINGW32__) # define CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH #endif //////////////////////////////////////////////////////////////////////////////// // PS4 #if defined(__ORBIS__) # define CATCH_INTERNAL_CONFIG_NO_NEW_CAPTURE #endif //////////////////////////////////////////////////////////////////////////////// // Cygwin #ifdef __CYGWIN__ // Required for some versions of Cygwin to declare gettimeofday // see: http://stackoverflow.com/questions/36901803/gettimeofday-not-declared-in-this-scope-cygwin # define _BSD_SOURCE // some versions of cygwin (most) do not support std::to_string. Use the libstd check. // https://gcc.gnu.org/onlinedocs/gcc-4.8.2/libstdc++/api/a01053_source.html line 2812-2813 # if !((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \ && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF)) # define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING # endif #endif // __CYGWIN__ //////////////////////////////////////////////////////////////////////////////// // Visual C++ #if defined(_MSC_VER) // Universal Windows platform does not support SEH // Or console colours (or console at all...) # if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP) # define CATCH_CONFIG_COLOUR_NONE # else # define CATCH_INTERNAL_CONFIG_WINDOWS_SEH # endif # if !defined(__clang__) // Handle Clang masquerading for msvc // MSVC traditional preprocessor needs some workaround for __VA_ARGS__ // _MSVC_TRADITIONAL == 0 means new conformant preprocessor // _MSVC_TRADITIONAL == 1 means old traditional non-conformant preprocessor # if !defined(_MSVC_TRADITIONAL) || (defined(_MSVC_TRADITIONAL) && _MSVC_TRADITIONAL) # define CATCH_INTERNAL_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR # endif // MSVC_TRADITIONAL // Only do this if we're not using clang on Windows, which uses `diagnostic push` & `diagnostic pop` # define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION __pragma( warning(push) ) # define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION __pragma( warning(pop) ) # endif // __clang__ #endif // _MSC_VER #if defined(_REENTRANT) || defined(_MSC_VER) // Enable async processing, as -pthread is specified or no additional linking is required # define CATCH_INTERNAL_CONFIG_USE_ASYNC #endif // _MSC_VER //////////////////////////////////////////////////////////////////////////////// // Check if we are compiled with -fno-exceptions or equivalent #if defined(__EXCEPTIONS) || defined(__cpp_exceptions) || defined(_CPPUNWIND) # define CATCH_INTERNAL_CONFIG_EXCEPTIONS_ENABLED #endif //////////////////////////////////////////////////////////////////////////////// // DJGPP #ifdef __DJGPP__ # define CATCH_INTERNAL_CONFIG_NO_WCHAR #endif // __DJGPP__ //////////////////////////////////////////////////////////////////////////////// // Embarcadero C++Build #if defined(__BORLANDC__) #define CATCH_INTERNAL_CONFIG_POLYFILL_ISNAN #endif //////////////////////////////////////////////////////////////////////////////// // Use of __COUNTER__ is suppressed during code analysis in // CLion/AppCode 2017.2.x and former, because __COUNTER__ is not properly // handled by it. // Otherwise all supported compilers support COUNTER macro, // but user still might want to turn it off #if ( !defined(__JETBRAINS_IDE__) || __JETBRAINS_IDE__ >= 20170300L ) #define CATCH_INTERNAL_CONFIG_COUNTER #endif //////////////////////////////////////////////////////////////////////////////// // RTX is a special version of Windows that is real time. // This means that it is detected as Windows, but does not provide // the same set of capabilities as real Windows does. #if defined(UNDER_RTSS) || defined(RTX64_BUILD) #define CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH #define CATCH_INTERNAL_CONFIG_NO_ASYNC #define CATCH_CONFIG_COLOUR_NONE #endif #if !defined(_GLIBCXX_USE_C99_MATH_TR1) #define CATCH_INTERNAL_CONFIG_GLOBAL_NEXTAFTER #endif // Various stdlib support checks that require __has_include #if defined(__has_include) // Check if string_view is available and usable #if __has_include() && defined(CATCH_CPP17_OR_GREATER) # define CATCH_INTERNAL_CONFIG_CPP17_STRING_VIEW #endif // Check if optional is available and usable # if __has_include() && defined(CATCH_CPP17_OR_GREATER) # define CATCH_INTERNAL_CONFIG_CPP17_OPTIONAL # endif // __has_include() && defined(CATCH_CPP17_OR_GREATER) // Check if byte is available and usable # if __has_include() && defined(CATCH_CPP17_OR_GREATER) # include # if defined(__cpp_lib_byte) && (__cpp_lib_byte > 0) # define CATCH_INTERNAL_CONFIG_CPP17_BYTE # endif # endif // __has_include() && defined(CATCH_CPP17_OR_GREATER) // Check if variant is available and usable # if __has_include() && defined(CATCH_CPP17_OR_GREATER) # if defined(__clang__) && (__clang_major__ < 8) // work around clang bug with libstdc++ https://bugs.llvm.org/show_bug.cgi?id=31852 // fix should be in clang 8, workaround in libstdc++ 8.2 # include # if defined(__GLIBCXX__) && defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 9) # define CATCH_CONFIG_NO_CPP17_VARIANT # else # define CATCH_INTERNAL_CONFIG_CPP17_VARIANT # endif // defined(__GLIBCXX__) && defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 9) # else # define CATCH_INTERNAL_CONFIG_CPP17_VARIANT # endif // defined(__clang__) && (__clang_major__ < 8) # endif // __has_include() && defined(CATCH_CPP17_OR_GREATER) #endif // defined(__has_include) #if defined(CATCH_INTERNAL_CONFIG_COUNTER) && !defined(CATCH_CONFIG_NO_COUNTER) && !defined(CATCH_CONFIG_COUNTER) # define CATCH_CONFIG_COUNTER #endif #if defined(CATCH_INTERNAL_CONFIG_WINDOWS_SEH) && !defined(CATCH_CONFIG_NO_WINDOWS_SEH) && !defined(CATCH_CONFIG_WINDOWS_SEH) && !defined(CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH) # define CATCH_CONFIG_WINDOWS_SEH #endif // This is set by default, because we assume that unix compilers are posix-signal-compatible by default. #if defined(CATCH_INTERNAL_CONFIG_POSIX_SIGNALS) && !defined(CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_POSIX_SIGNALS) # define CATCH_CONFIG_POSIX_SIGNALS #endif // This is set by default, because we assume that compilers with no wchar_t support are just rare exceptions. #if !defined(CATCH_INTERNAL_CONFIG_NO_WCHAR) && !defined(CATCH_CONFIG_NO_WCHAR) && !defined(CATCH_CONFIG_WCHAR) # define CATCH_CONFIG_WCHAR #endif #if !defined(CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_CPP11_TO_STRING) # define CATCH_CONFIG_CPP11_TO_STRING #endif #if defined(CATCH_INTERNAL_CONFIG_CPP17_OPTIONAL) && !defined(CATCH_CONFIG_NO_CPP17_OPTIONAL) && !defined(CATCH_CONFIG_CPP17_OPTIONAL) # define CATCH_CONFIG_CPP17_OPTIONAL #endif #if defined(CATCH_INTERNAL_CONFIG_CPP17_STRING_VIEW) && !defined(CATCH_CONFIG_NO_CPP17_STRING_VIEW) && !defined(CATCH_CONFIG_CPP17_STRING_VIEW) # define CATCH_CONFIG_CPP17_STRING_VIEW #endif #if defined(CATCH_INTERNAL_CONFIG_CPP17_VARIANT) && !defined(CATCH_CONFIG_NO_CPP17_VARIANT) && !defined(CATCH_CONFIG_CPP17_VARIANT) # define CATCH_CONFIG_CPP17_VARIANT #endif #if defined(CATCH_INTERNAL_CONFIG_CPP17_BYTE) && !defined(CATCH_CONFIG_NO_CPP17_BYTE) && !defined(CATCH_CONFIG_CPP17_BYTE) # define CATCH_CONFIG_CPP17_BYTE #endif #if defined(CATCH_CONFIG_EXPERIMENTAL_REDIRECT) # define CATCH_INTERNAL_CONFIG_NEW_CAPTURE #endif #if defined(CATCH_INTERNAL_CONFIG_NEW_CAPTURE) && !defined(CATCH_INTERNAL_CONFIG_NO_NEW_CAPTURE) && !defined(CATCH_CONFIG_NO_NEW_CAPTURE) && !defined(CATCH_CONFIG_NEW_CAPTURE) # define CATCH_CONFIG_NEW_CAPTURE #endif #if !defined(CATCH_INTERNAL_CONFIG_EXCEPTIONS_ENABLED) && !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS) # define CATCH_CONFIG_DISABLE_EXCEPTIONS #endif #if defined(CATCH_INTERNAL_CONFIG_POLYFILL_ISNAN) && !defined(CATCH_CONFIG_NO_POLYFILL_ISNAN) && !defined(CATCH_CONFIG_POLYFILL_ISNAN) # define CATCH_CONFIG_POLYFILL_ISNAN #endif #if defined(CATCH_INTERNAL_CONFIG_USE_ASYNC) && !defined(CATCH_INTERNAL_CONFIG_NO_ASYNC) && !defined(CATCH_CONFIG_NO_USE_ASYNC) && !defined(CATCH_CONFIG_USE_ASYNC) # define CATCH_CONFIG_USE_ASYNC #endif #if defined(CATCH_INTERNAL_CONFIG_ANDROID_LOGWRITE) && !defined(CATCH_CONFIG_NO_ANDROID_LOGWRITE) && !defined(CATCH_CONFIG_ANDROID_LOGWRITE) # define CATCH_CONFIG_ANDROID_LOGWRITE #endif #if defined(CATCH_INTERNAL_CONFIG_GLOBAL_NEXTAFTER) && !defined(CATCH_CONFIG_NO_GLOBAL_NEXTAFTER) && !defined(CATCH_CONFIG_GLOBAL_NEXTAFTER) # define CATCH_CONFIG_GLOBAL_NEXTAFTER #endif // Even if we do not think the compiler has that warning, we still have // to provide a macro that can be used by the code. #if !defined(CATCH_INTERNAL_START_WARNINGS_SUPPRESSION) # define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION #endif #if !defined(CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION) # define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION #endif #if !defined(CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS) # define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS #endif #if !defined(CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS) # define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS #endif #if !defined(CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS) # define CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS #endif #if !defined(CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS) # define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS #endif // The goal of this macro is to avoid evaluation of the arguments, but // still have the compiler warn on problems inside... #if !defined(CATCH_INTERNAL_IGNORE_BUT_WARN) # define CATCH_INTERNAL_IGNORE_BUT_WARN(...) #endif #if defined(__APPLE__) && defined(__apple_build_version__) && (__clang_major__ < 10) # undef CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS #elif defined(__clang__) && (__clang_major__ < 5) # undef CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS #endif #if !defined(CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS) # define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS #endif #if defined(CATCH_CONFIG_DISABLE_EXCEPTIONS) #define CATCH_TRY if ((true)) #define CATCH_CATCH_ALL if ((false)) #define CATCH_CATCH_ANON(type) if ((false)) #else #define CATCH_TRY try #define CATCH_CATCH_ALL catch (...) #define CATCH_CATCH_ANON(type) catch (type) #endif #if defined(CATCH_INTERNAL_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR) && !defined(CATCH_CONFIG_NO_TRADITIONAL_MSVC_PREPROCESSOR) && !defined(CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR) #define CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR #endif // end catch_compiler_capabilities.h #define INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) name##line #define INTERNAL_CATCH_UNIQUE_NAME_LINE( name, line ) INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) #ifdef CATCH_CONFIG_COUNTER # define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __COUNTER__ ) #else # define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __LINE__ ) #endif #include #include #include // We need a dummy global operator<< so we can bring it into Catch namespace later struct Catch_global_namespace_dummy {}; std::ostream& operator<<(std::ostream&, Catch_global_namespace_dummy); namespace Catch { struct CaseSensitive { enum Choice { Yes, No }; }; class NonCopyable { NonCopyable( NonCopyable const& ) = delete; NonCopyable( NonCopyable && ) = delete; NonCopyable& operator = ( NonCopyable const& ) = delete; NonCopyable& operator = ( NonCopyable && ) = delete; protected: NonCopyable(); virtual ~NonCopyable(); }; struct SourceLineInfo { SourceLineInfo() = delete; SourceLineInfo( char const* _file, std::size_t _line ) noexcept : file( _file ), line( _line ) {} SourceLineInfo( SourceLineInfo const& other ) = default; SourceLineInfo& operator = ( SourceLineInfo const& ) = default; SourceLineInfo( SourceLineInfo&& ) noexcept = default; SourceLineInfo& operator = ( SourceLineInfo&& ) noexcept = default; bool empty() const noexcept { return file[0] == '\0'; } bool operator == ( SourceLineInfo const& other ) const noexcept; bool operator < ( SourceLineInfo const& other ) const noexcept; char const* file; std::size_t line; }; std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ); // Bring in operator<< from global namespace into Catch namespace // This is necessary because the overload of operator<< above makes // lookup stop at namespace Catch using ::operator<<; // Use this in variadic streaming macros to allow // >> +StreamEndStop // as well as // >> stuff +StreamEndStop struct StreamEndStop { std::string operator+() const; }; template T const& operator + ( T const& value, StreamEndStop ) { return value; } } #define CATCH_INTERNAL_LINEINFO \ ::Catch::SourceLineInfo( __FILE__, static_cast( __LINE__ ) ) // end catch_common.h namespace Catch { struct RegistrarForTagAliases { RegistrarForTagAliases( char const* alias, char const* tag, SourceLineInfo const& lineInfo ); }; } // end namespace Catch #define CATCH_REGISTER_TAG_ALIAS( alias, spec ) \ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ namespace{ Catch::RegistrarForTagAliases INTERNAL_CATCH_UNIQUE_NAME( AutoRegisterTagAlias )( alias, spec, CATCH_INTERNAL_LINEINFO ); } \ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION // end catch_tag_alias_autoregistrar.h // start catch_test_registry.h // start catch_interfaces_testcase.h #include namespace Catch { class TestSpec; struct ITestInvoker { virtual void invoke () const = 0; virtual ~ITestInvoker(); }; class TestCase; struct IConfig; struct ITestCaseRegistry { virtual ~ITestCaseRegistry(); virtual std::vector const& getAllTests() const = 0; virtual std::vector const& getAllTestsSorted( IConfig const& config ) const = 0; }; bool isThrowSafe( TestCase const& testCase, IConfig const& config ); bool matchTest( TestCase const& testCase, TestSpec const& testSpec, IConfig const& config ); std::vector filterTests( std::vector const& testCases, TestSpec const& testSpec, IConfig const& config ); std::vector const& getAllTestCasesSorted( IConfig const& config ); } // end catch_interfaces_testcase.h // start catch_stringref.h #include #include #include #include namespace Catch { /// A non-owning string class (similar to the forthcoming std::string_view) /// Note that, because a StringRef may be a substring of another string, /// it may not be null terminated. class StringRef { public: using size_type = std::size_t; using const_iterator = const char*; private: static constexpr char const* const s_empty = ""; char const* m_start = s_empty; size_type m_size = 0; public: // construction constexpr StringRef() noexcept = default; StringRef( char const* rawChars ) noexcept; constexpr StringRef( char const* rawChars, size_type size ) noexcept : m_start( rawChars ), m_size( size ) {} StringRef( std::string const& stdString ) noexcept : m_start( stdString.c_str() ), m_size( stdString.size() ) {} explicit operator std::string() const { return std::string(m_start, m_size); } public: // operators auto operator == ( StringRef const& other ) const noexcept -> bool; auto operator != (StringRef const& other) const noexcept -> bool { return !(*this == other); } auto operator[] ( size_type index ) const noexcept -> char { assert(index < m_size); return m_start[index]; } public: // named queries constexpr auto empty() const noexcept -> bool { return m_size == 0; } constexpr auto size() const noexcept -> size_type { return m_size; } // Returns the current start pointer. If the StringRef is not // null-terminated, throws std::domain_exception auto c_str() const -> char const*; public: // substrings and searches // Returns a substring of [start, start + length). // If start + length > size(), then the substring is [start, size()). // If start > size(), then the substring is empty. auto substr( size_type start, size_type length ) const noexcept -> StringRef; // Returns the current start pointer. May not be null-terminated. auto data() const noexcept -> char const*; constexpr auto isNullTerminated() const noexcept -> bool { return m_start[m_size] == '\0'; } public: // iterators constexpr const_iterator begin() const { return m_start; } constexpr const_iterator end() const { return m_start + m_size; } }; auto operator += ( std::string& lhs, StringRef const& sr ) -> std::string&; auto operator << ( std::ostream& os, StringRef const& sr ) -> std::ostream&; constexpr auto operator "" _sr( char const* rawChars, std::size_t size ) noexcept -> StringRef { return StringRef( rawChars, size ); } } // namespace Catch constexpr auto operator "" _catch_sr( char const* rawChars, std::size_t size ) noexcept -> Catch::StringRef { return Catch::StringRef( rawChars, size ); } // end catch_stringref.h // start catch_preprocessor.hpp #define CATCH_RECURSION_LEVEL0(...) __VA_ARGS__ #define CATCH_RECURSION_LEVEL1(...) CATCH_RECURSION_LEVEL0(CATCH_RECURSION_LEVEL0(CATCH_RECURSION_LEVEL0(__VA_ARGS__))) #define CATCH_RECURSION_LEVEL2(...) CATCH_RECURSION_LEVEL1(CATCH_RECURSION_LEVEL1(CATCH_RECURSION_LEVEL1(__VA_ARGS__))) #define CATCH_RECURSION_LEVEL3(...) CATCH_RECURSION_LEVEL2(CATCH_RECURSION_LEVEL2(CATCH_RECURSION_LEVEL2(__VA_ARGS__))) #define CATCH_RECURSION_LEVEL4(...) CATCH_RECURSION_LEVEL3(CATCH_RECURSION_LEVEL3(CATCH_RECURSION_LEVEL3(__VA_ARGS__))) #define CATCH_RECURSION_LEVEL5(...) CATCH_RECURSION_LEVEL4(CATCH_RECURSION_LEVEL4(CATCH_RECURSION_LEVEL4(__VA_ARGS__))) #ifdef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR #define INTERNAL_CATCH_EXPAND_VARGS(...) __VA_ARGS__ // MSVC needs more evaluations #define CATCH_RECURSION_LEVEL6(...) CATCH_RECURSION_LEVEL5(CATCH_RECURSION_LEVEL5(CATCH_RECURSION_LEVEL5(__VA_ARGS__))) #define CATCH_RECURSE(...) CATCH_RECURSION_LEVEL6(CATCH_RECURSION_LEVEL6(__VA_ARGS__)) #else #define CATCH_RECURSE(...) CATCH_RECURSION_LEVEL5(__VA_ARGS__) #endif #define CATCH_REC_END(...) #define CATCH_REC_OUT #define CATCH_EMPTY() #define CATCH_DEFER(id) id CATCH_EMPTY() #define CATCH_REC_GET_END2() 0, CATCH_REC_END #define CATCH_REC_GET_END1(...) CATCH_REC_GET_END2 #define CATCH_REC_GET_END(...) CATCH_REC_GET_END1 #define CATCH_REC_NEXT0(test, next, ...) next CATCH_REC_OUT #define CATCH_REC_NEXT1(test, next) CATCH_DEFER ( CATCH_REC_NEXT0 ) ( test, next, 0) #define CATCH_REC_NEXT(test, next) CATCH_REC_NEXT1(CATCH_REC_GET_END test, next) #define CATCH_REC_LIST0(f, x, peek, ...) , f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1) ) ( f, peek, __VA_ARGS__ ) #define CATCH_REC_LIST1(f, x, peek, ...) , f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST0) ) ( f, peek, __VA_ARGS__ ) #define CATCH_REC_LIST2(f, x, peek, ...) f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1) ) ( f, peek, __VA_ARGS__ ) #define CATCH_REC_LIST0_UD(f, userdata, x, peek, ...) , f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1_UD) ) ( f, userdata, peek, __VA_ARGS__ ) #define CATCH_REC_LIST1_UD(f, userdata, x, peek, ...) , f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST0_UD) ) ( f, userdata, peek, __VA_ARGS__ ) #define CATCH_REC_LIST2_UD(f, userdata, x, peek, ...) f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1_UD) ) ( f, userdata, peek, __VA_ARGS__ ) // Applies the function macro `f` to each of the remaining parameters, inserts commas between the results, // and passes userdata as the first parameter to each invocation, // e.g. CATCH_REC_LIST_UD(f, x, a, b, c) evaluates to f(x, a), f(x, b), f(x, c) #define CATCH_REC_LIST_UD(f, userdata, ...) CATCH_RECURSE(CATCH_REC_LIST2_UD(f, userdata, __VA_ARGS__, ()()(), ()()(), ()()(), 0)) #define CATCH_REC_LIST(f, ...) CATCH_RECURSE(CATCH_REC_LIST2(f, __VA_ARGS__, ()()(), ()()(), ()()(), 0)) #define INTERNAL_CATCH_EXPAND1(param) INTERNAL_CATCH_EXPAND2(param) #define INTERNAL_CATCH_EXPAND2(...) INTERNAL_CATCH_NO## __VA_ARGS__ #define INTERNAL_CATCH_DEF(...) INTERNAL_CATCH_DEF __VA_ARGS__ #define INTERNAL_CATCH_NOINTERNAL_CATCH_DEF #define INTERNAL_CATCH_STRINGIZE(...) INTERNAL_CATCH_STRINGIZE2(__VA_ARGS__) #ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR #define INTERNAL_CATCH_STRINGIZE2(...) #__VA_ARGS__ #define INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS(param) INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_REMOVE_PARENS(param)) #else // MSVC is adding extra space and needs another indirection to expand INTERNAL_CATCH_NOINTERNAL_CATCH_DEF #define INTERNAL_CATCH_STRINGIZE2(...) INTERNAL_CATCH_STRINGIZE3(__VA_ARGS__) #define INTERNAL_CATCH_STRINGIZE3(...) #__VA_ARGS__ #define INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS(param) (INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_REMOVE_PARENS(param)) + 1) #endif #define INTERNAL_CATCH_MAKE_NAMESPACE2(...) ns_##__VA_ARGS__ #define INTERNAL_CATCH_MAKE_NAMESPACE(name) INTERNAL_CATCH_MAKE_NAMESPACE2(name) #define INTERNAL_CATCH_REMOVE_PARENS(...) INTERNAL_CATCH_EXPAND1(INTERNAL_CATCH_DEF __VA_ARGS__) #ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR #define INTERNAL_CATCH_MAKE_TYPE_LIST2(...) decltype(get_wrapper()) #define INTERNAL_CATCH_MAKE_TYPE_LIST(...) INTERNAL_CATCH_MAKE_TYPE_LIST2(INTERNAL_CATCH_REMOVE_PARENS(__VA_ARGS__)) #else #define INTERNAL_CATCH_MAKE_TYPE_LIST2(...) INTERNAL_CATCH_EXPAND_VARGS(decltype(get_wrapper())) #define INTERNAL_CATCH_MAKE_TYPE_LIST(...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_MAKE_TYPE_LIST2(INTERNAL_CATCH_REMOVE_PARENS(__VA_ARGS__))) #endif #define INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(...)\ CATCH_REC_LIST(INTERNAL_CATCH_MAKE_TYPE_LIST,__VA_ARGS__) #define INTERNAL_CATCH_REMOVE_PARENS_1_ARG(_0) INTERNAL_CATCH_REMOVE_PARENS(_0) #define INTERNAL_CATCH_REMOVE_PARENS_2_ARG(_0, _1) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_1_ARG(_1) #define INTERNAL_CATCH_REMOVE_PARENS_3_ARG(_0, _1, _2) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_2_ARG(_1, _2) #define INTERNAL_CATCH_REMOVE_PARENS_4_ARG(_0, _1, _2, _3) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_3_ARG(_1, _2, _3) #define INTERNAL_CATCH_REMOVE_PARENS_5_ARG(_0, _1, _2, _3, _4) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_4_ARG(_1, _2, _3, _4) #define INTERNAL_CATCH_REMOVE_PARENS_6_ARG(_0, _1, _2, _3, _4, _5) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_5_ARG(_1, _2, _3, _4, _5) #define INTERNAL_CATCH_REMOVE_PARENS_7_ARG(_0, _1, _2, _3, _4, _5, _6) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_6_ARG(_1, _2, _3, _4, _5, _6) #define INTERNAL_CATCH_REMOVE_PARENS_8_ARG(_0, _1, _2, _3, _4, _5, _6, _7) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_7_ARG(_1, _2, _3, _4, _5, _6, _7) #define INTERNAL_CATCH_REMOVE_PARENS_9_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_8_ARG(_1, _2, _3, _4, _5, _6, _7, _8) #define INTERNAL_CATCH_REMOVE_PARENS_10_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_9_ARG(_1, _2, _3, _4, _5, _6, _7, _8, _9) #define INTERNAL_CATCH_REMOVE_PARENS_11_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_10_ARG(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10) #define INTERNAL_CATCH_VA_NARGS_IMPL(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, ...) N #define INTERNAL_CATCH_TYPE_GEN\ template struct TypeList {};\ template\ constexpr auto get_wrapper() noexcept -> TypeList { return {}; }\ template class...> struct TemplateTypeList{};\ template class...Cs>\ constexpr auto get_wrapper() noexcept -> TemplateTypeList { return {}; }\ template\ struct append;\ template\ struct rewrap;\ template class, typename...>\ struct create;\ template class, typename>\ struct convert;\ \ template \ struct append { using type = T; };\ template< template class L1, typename...E1, template class L2, typename...E2, typename...Rest>\ struct append, L2, Rest...> { using type = typename append, Rest...>::type; };\ template< template class L1, typename...E1, typename...Rest>\ struct append, TypeList, Rest...> { using type = L1; };\ \ template< template class Container, template class List, typename...elems>\ struct rewrap, List> { using type = TypeList>; };\ template< template class Container, template class List, class...Elems, typename...Elements>\ struct rewrap, List, Elements...> { using type = typename append>, typename rewrap, Elements...>::type>::type; };\ \ template