This commit is contained in:
robm 2022-05-05 15:21:55 +01:00
commit 34ec27376f
338 changed files with 9471 additions and 4281 deletions

View File

@ -56,7 +56,7 @@ jobs:
if: steps.check_submit.outputs.should_run != 'false' if: steps.check_submit.outputs.should_run != 'false'
- name: Checkout the source - name: Checkout the source
uses: actions/checkout@v2 uses: actions/checkout@v3
with: with:
path: jdk path: jdk
if: steps.check_submit.outputs.should_run != 'false' if: steps.check_submit.outputs.should_run != 'false'
@ -94,14 +94,14 @@ jobs:
- name: Check if a jtreg image is present in the cache - name: Check if a jtreg image is present in the cache
id: jtreg id: jtreg
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: ~/jtreg/ path: ~/jtreg/
key: jtreg-${{ env.JTREG_REF }}-v1 key: jtreg-${{ env.JTREG_REF }}-v1
if: steps.check_submit.outputs.should_run != 'false' if: steps.check_submit.outputs.should_run != 'false'
- name: Checkout the jtreg source - name: Checkout the jtreg source
uses: actions/checkout@v2 uses: actions/checkout@v3
with: with:
repository: "openjdk/jtreg" repository: "openjdk/jtreg"
ref: ${{ env.JTREG_REF }} ref: ${{ env.JTREG_REF }}
@ -119,7 +119,7 @@ jobs:
if: steps.check_submit.outputs.should_run != 'false' && steps.jtreg.outputs.cache-hit != 'true' if: steps.check_submit.outputs.should_run != 'false' && steps.jtreg.outputs.cache-hit != 'true'
- name: Store jtreg for use by later steps - name: Store jtreg for use by later steps
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v3
with: with:
name: transient_jtreg_${{ steps.check_bundle_id.outputs.bundle_id }} name: transient_jtreg_${{ steps.check_bundle_id.outputs.bundle_id }}
path: ~/jtreg/ path: ~/jtreg/
@ -151,13 +151,13 @@ jobs:
steps: steps:
- name: Checkout the source - name: Checkout the source
uses: actions/checkout@v2 uses: actions/checkout@v3
with: with:
path: jdk path: jdk
- name: Restore boot JDK from cache - name: Restore boot JDK from cache
id: bootjdk id: bootjdk
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }} path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }}
key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1 key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1
@ -173,21 +173,21 @@ jobs:
- name: Restore jtreg artifact - name: Restore jtreg artifact
id: jtreg_restore id: jtreg_restore
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jtreg/ path: ~/jtreg/
continue-on-error: true continue-on-error: true
- name: Restore jtreg artifact (retry) - name: Restore jtreg artifact (retry)
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jtreg/ path: ~/jtreg/
if: steps.jtreg_restore.outcome == 'failure' if: steps.jtreg_restore.outcome == 'failure'
- name: Checkout gtest sources - name: Checkout gtest sources
uses: actions/checkout@v2 uses: actions/checkout@v3
with: with:
repository: "google/googletest" repository: "google/googletest"
ref: "release-${{ fromJson(needs.prerequisites.outputs.dependencies).GTEST_VERSION }}" ref: "release-${{ fromJson(needs.prerequisites.outputs.dependencies).GTEST_VERSION }}"
@ -219,7 +219,7 @@ jobs:
working-directory: jdk working-directory: jdk
- name: Persist test bundles - name: Persist test bundles
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v3
with: with:
name: transient_jdk-linux-x64${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jdk-linux-x64${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }}
path: | path: |
@ -280,11 +280,11 @@ jobs:
steps: steps:
- name: Checkout the source - name: Checkout the source
uses: actions/checkout@v2 uses: actions/checkout@v3
- name: Restore boot JDK from cache - name: Restore boot JDK from cache
id: bootjdk id: bootjdk
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }} path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }}
key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1 key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1
@ -300,14 +300,14 @@ jobs:
- name: Restore jtreg artifact - name: Restore jtreg artifact
id: jtreg_restore id: jtreg_restore
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jtreg/ path: ~/jtreg/
continue-on-error: true continue-on-error: true
- name: Restore jtreg artifact (retry) - name: Restore jtreg artifact (retry)
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jtreg/ path: ~/jtreg/
@ -315,14 +315,14 @@ jobs:
- name: Restore build artifacts - name: Restore build artifacts
id: build_restore id: build_restore
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jdk-linux-x64${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jdk-linux-x64${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jdk-linux-x64${{ matrix.artifact }} path: ~/jdk-linux-x64${{ matrix.artifact }}
continue-on-error: true continue-on-error: true
- name: Restore build artifacts (retry) - name: Restore build artifacts (retry)
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jdk-linux-x64${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jdk-linux-x64${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jdk-linux-x64${{ matrix.artifact }} path: ~/jdk-linux-x64${{ matrix.artifact }}
@ -395,14 +395,14 @@ jobs:
- name: Persist test results - name: Persist test results
if: always() if: always()
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v3
with: with:
path: ~/linux-x64${{ matrix.artifact }}_testresults_${{ env.logsuffix }}.zip path: ~/linux-x64${{ matrix.artifact }}_testresults_${{ env.logsuffix }}.zip
continue-on-error: true continue-on-error: true
- name: Persist test outputs - name: Persist test outputs
if: always() if: always()
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v3
with: with:
path: ~/linux-x64${{ matrix.artifact }}_testsupport_${{ env.logsuffix }}.zip path: ~/linux-x64${{ matrix.artifact }}_testsupport_${{ env.logsuffix }}.zip
continue-on-error: true continue-on-error: true
@ -463,13 +463,13 @@ jobs:
steps: steps:
- name: Checkout the source - name: Checkout the source
uses: actions/checkout@v2 uses: actions/checkout@v3
with: with:
path: jdk path: jdk
- name: Restore boot JDK from cache - name: Restore boot JDK from cache
id: bootjdk id: bootjdk
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }} path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }}
key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1 key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1
@ -485,14 +485,14 @@ jobs:
- name: Restore build JDK - name: Restore build JDK
id: build_restore id: build_restore
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jdk-linux-x64_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jdk-linux-x64_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jdk-linux-x64 path: ~/jdk-linux-x64
continue-on-error: true continue-on-error: true
- name: Restore build JDK (retry) - name: Restore build JDK (retry)
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jdk-linux-x64_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jdk-linux-x64_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jdk-linux-x64 path: ~/jdk-linux-x64
@ -523,7 +523,7 @@ jobs:
- name: Cache sysroot - name: Cache sysroot
id: cache-sysroot id: cache-sysroot
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: ~/sysroot-${{ matrix.debian-arch }}/ path: ~/sysroot-${{ matrix.debian-arch }}/
key: sysroot-${{ matrix.debian-arch }}-${{ hashFiles('jdk/.github/workflows/submit.yml') }} key: sysroot-${{ matrix.debian-arch }}-${{ hashFiles('jdk/.github/workflows/submit.yml') }}
@ -611,13 +611,13 @@ jobs:
steps: steps:
- name: Checkout the source - name: Checkout the source
uses: actions/checkout@v2 uses: actions/checkout@v3
with: with:
path: jdk path: jdk
- name: Restore boot JDK from cache - name: Restore boot JDK from cache
id: bootjdk id: bootjdk
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }} path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }}
key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1 key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1
@ -633,21 +633,21 @@ jobs:
- name: Restore jtreg artifact - name: Restore jtreg artifact
id: jtreg_restore id: jtreg_restore
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jtreg/ path: ~/jtreg/
continue-on-error: true continue-on-error: true
- name: Restore jtreg artifact (retry) - name: Restore jtreg artifact (retry)
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jtreg/ path: ~/jtreg/
if: steps.jtreg_restore.outcome == 'failure' if: steps.jtreg_restore.outcome == 'failure'
- name: Checkout gtest sources - name: Checkout gtest sources
uses: actions/checkout@v2 uses: actions/checkout@v3
with: with:
repository: "google/googletest" repository: "google/googletest"
ref: "release-${{ fromJson(needs.prerequisites.outputs.dependencies).GTEST_VERSION }}" ref: "release-${{ fromJson(needs.prerequisites.outputs.dependencies).GTEST_VERSION }}"
@ -686,7 +686,7 @@ jobs:
working-directory: jdk working-directory: jdk
- name: Persist test bundles - name: Persist test bundles
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v3
with: with:
name: transient_jdk-linux-x86${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jdk-linux-x86${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }}
path: | path: |
@ -748,11 +748,11 @@ jobs:
steps: steps:
- name: Checkout the source - name: Checkout the source
uses: actions/checkout@v2 uses: actions/checkout@v3
- name: Restore boot JDK from cache - name: Restore boot JDK from cache
id: bootjdk id: bootjdk
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }} path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }}
key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1 key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1
@ -768,14 +768,14 @@ jobs:
- name: Restore jtreg artifact - name: Restore jtreg artifact
id: jtreg_restore id: jtreg_restore
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jtreg/ path: ~/jtreg/
continue-on-error: true continue-on-error: true
- name: Restore jtreg artifact (retry) - name: Restore jtreg artifact (retry)
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jtreg/ path: ~/jtreg/
@ -783,14 +783,14 @@ jobs:
- name: Restore build artifacts - name: Restore build artifacts
id: build_restore id: build_restore
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jdk-linux-x86${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jdk-linux-x86${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jdk-linux-x86${{ matrix.artifact }} path: ~/jdk-linux-x86${{ matrix.artifact }}
continue-on-error: true continue-on-error: true
- name: Restore build artifacts (retry) - name: Restore build artifacts (retry)
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jdk-linux-x86${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jdk-linux-x86${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jdk-linux-x86${{ matrix.artifact }} path: ~/jdk-linux-x86${{ matrix.artifact }}
@ -863,14 +863,14 @@ jobs:
- name: Persist test results - name: Persist test results
if: always() if: always()
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v3
with: with:
path: ~/linux-x86${{ matrix.artifact }}_testresults_${{ env.logsuffix }}.zip path: ~/linux-x86${{ matrix.artifact }}_testresults_${{ env.logsuffix }}.zip
continue-on-error: true continue-on-error: true
- name: Persist test outputs - name: Persist test outputs
if: always() if: always()
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v3
with: with:
path: ~/linux-x86${{ matrix.artifact }}_testsupport_${{ env.logsuffix }}.zip path: ~/linux-x86${{ matrix.artifact }}_testsupport_${{ env.logsuffix }}.zip
continue-on-error: true continue-on-error: true
@ -901,7 +901,7 @@ jobs:
steps: steps:
- name: Restore cygwin installer from cache - name: Restore cygwin installer from cache
id: cygwin-installer id: cygwin-installer
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: ~/cygwin/setup-x86_64.exe path: ~/cygwin/setup-x86_64.exe
key: cygwin-installer key: cygwin-installer
@ -914,7 +914,7 @@ jobs:
- name: Restore cygwin packages from cache - name: Restore cygwin packages from cache
id: cygwin id: cygwin
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: ~/cygwin/packages path: ~/cygwin/packages
key: cygwin-packages-${{ runner.os }}-v1 key: cygwin-packages-${{ runner.os }}-v1
@ -924,13 +924,13 @@ jobs:
Start-Process -FilePath "$HOME\cygwin\setup-x86_64.exe" -ArgumentList "--quiet-mode --packages cygwin=3.2.0-1,autoconf,make,zip,unzip --root $HOME\cygwin\cygwin64 --local-package-dir $HOME\cygwin\packages --site http://mirrors.kernel.org/sourceware/cygwin --no-desktop --no-shortcuts --no-startmenu --no-admin" -Wait -NoNewWindow Start-Process -FilePath "$HOME\cygwin\setup-x86_64.exe" -ArgumentList "--quiet-mode --packages cygwin=3.2.0-1,autoconf,make,zip,unzip --root $HOME\cygwin\cygwin64 --local-package-dir $HOME\cygwin\packages --site http://mirrors.kernel.org/sourceware/cygwin --no-desktop --no-shortcuts --no-startmenu --no-admin" -Wait -NoNewWindow
- name: Checkout the source - name: Checkout the source
uses: actions/checkout@v2 uses: actions/checkout@v3
with: with:
path: jdk path: jdk
- name: Restore boot JDK from cache - name: Restore boot JDK from cache
id: bootjdk id: bootjdk
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }} path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }}
key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1 key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1
@ -1001,7 +1001,7 @@ jobs:
steps: steps:
- name: Restore cygwin installer from cache - name: Restore cygwin installer from cache
id: cygwin-installer id: cygwin-installer
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: ~/cygwin/setup-x86_64.exe path: ~/cygwin/setup-x86_64.exe
key: cygwin-installer key: cygwin-installer
@ -1014,7 +1014,7 @@ jobs:
- name: Restore cygwin packages from cache - name: Restore cygwin packages from cache
id: cygwin id: cygwin
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: ~/cygwin/packages path: ~/cygwin/packages
key: cygwin-packages-${{ runner.os }}-v1 key: cygwin-packages-${{ runner.os }}-v1
@ -1024,13 +1024,13 @@ jobs:
Start-Process -FilePath "$HOME\cygwin\setup-x86_64.exe" -ArgumentList "--quiet-mode --packages cygwin=3.2.0-1,autoconf,make,zip,unzip --root $HOME\cygwin\cygwin64 --local-package-dir $HOME\cygwin\packages --site http://mirrors.kernel.org/sourceware/cygwin --no-desktop --no-shortcuts --no-startmenu --no-admin" -Wait -NoNewWindow Start-Process -FilePath "$HOME\cygwin\setup-x86_64.exe" -ArgumentList "--quiet-mode --packages cygwin=3.2.0-1,autoconf,make,zip,unzip --root $HOME\cygwin\cygwin64 --local-package-dir $HOME\cygwin\packages --site http://mirrors.kernel.org/sourceware/cygwin --no-desktop --no-shortcuts --no-startmenu --no-admin" -Wait -NoNewWindow
- name: Checkout the source - name: Checkout the source
uses: actions/checkout@v2 uses: actions/checkout@v3
with: with:
path: jdk path: jdk
- name: Restore boot JDK from cache - name: Restore boot JDK from cache
id: bootjdk id: bootjdk
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }} path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }}
key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1 key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1
@ -1046,7 +1046,7 @@ jobs:
if: steps.bootjdk.outputs.cache-hit != 'true' if: steps.bootjdk.outputs.cache-hit != 'true'
- name: Checkout gtest sources - name: Checkout gtest sources
uses: actions/checkout@v2 uses: actions/checkout@v3
with: with:
repository: "google/googletest" repository: "google/googletest"
ref: "release-${{ fromJson(needs.prerequisites.outputs.dependencies).GTEST_VERSION }}" ref: "release-${{ fromJson(needs.prerequisites.outputs.dependencies).GTEST_VERSION }}"
@ -1054,14 +1054,14 @@ jobs:
- name: Restore jtreg artifact - name: Restore jtreg artifact
id: jtreg_restore id: jtreg_restore
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jtreg/ path: ~/jtreg/
continue-on-error: true continue-on-error: true
- name: Restore jtreg artifact (retry) - name: Restore jtreg artifact (retry)
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jtreg/ path: ~/jtreg/
@ -1101,7 +1101,7 @@ jobs:
working-directory: jdk working-directory: jdk
- name: Persist test bundles - name: Persist test bundles
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v3
with: with:
name: transient_jdk-windows-x64${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jdk-windows-x64${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }}
path: | path: |
@ -1163,11 +1163,11 @@ jobs:
steps: steps:
- name: Checkout the source - name: Checkout the source
uses: actions/checkout@v2 uses: actions/checkout@v3
- name: Restore boot JDK from cache - name: Restore boot JDK from cache
id: bootjdk id: bootjdk
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }} path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }}
key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1 key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1
@ -1184,7 +1184,7 @@ jobs:
- name: Restore cygwin installer from cache - name: Restore cygwin installer from cache
id: cygwin-installer id: cygwin-installer
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: ~/cygwin/setup-x86_64.exe path: ~/cygwin/setup-x86_64.exe
key: cygwin-installer key: cygwin-installer
@ -1197,7 +1197,7 @@ jobs:
- name: Restore cygwin packages from cache - name: Restore cygwin packages from cache
id: cygwin id: cygwin
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: ~/cygwin/packages path: ~/cygwin/packages
key: cygwin-packages-${{ runner.os }}-v1 key: cygwin-packages-${{ runner.os }}-v1
@ -1208,14 +1208,14 @@ jobs:
- name: Restore jtreg artifact - name: Restore jtreg artifact
id: jtreg_restore id: jtreg_restore
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jtreg/ path: ~/jtreg/
continue-on-error: true continue-on-error: true
- name: Restore jtreg artifact (retry) - name: Restore jtreg artifact (retry)
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jtreg/ path: ~/jtreg/
@ -1223,14 +1223,14 @@ jobs:
- name: Restore build artifacts - name: Restore build artifacts
id: build_restore id: build_restore
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jdk-windows-x64${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jdk-windows-x64${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jdk-windows-x64${{ matrix.artifact }} path: ~/jdk-windows-x64${{ matrix.artifact }}
continue-on-error: true continue-on-error: true
- name: Restore build artifacts (retry) - name: Restore build artifacts (retry)
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jdk-windows-x64${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jdk-windows-x64${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jdk-windows-x64${{ matrix.artifact }} path: ~/jdk-windows-x64${{ matrix.artifact }}
@ -1311,14 +1311,14 @@ jobs:
- name: Persist test results - name: Persist test results
if: always() if: always()
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v3
with: with:
path: ~/windows-x64${{ matrix.artifact }}_testresults_${{ env.logsuffix }}.zip path: ~/windows-x64${{ matrix.artifact }}_testresults_${{ env.logsuffix }}.zip
continue-on-error: true continue-on-error: true
- name: Persist test outputs - name: Persist test outputs
if: always() if: always()
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v3
with: with:
path: ~/windows-x64${{ matrix.artifact }}_testsupport_${{ env.logsuffix }}.zip path: ~/windows-x64${{ matrix.artifact }}_testsupport_${{ env.logsuffix }}.zip
continue-on-error: true continue-on-error: true
@ -1350,13 +1350,13 @@ jobs:
steps: steps:
- name: Checkout the source - name: Checkout the source
uses: actions/checkout@v2 uses: actions/checkout@v3
with: with:
path: jdk path: jdk
- name: Restore boot JDK from cache - name: Restore boot JDK from cache
id: bootjdk id: bootjdk
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }} path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }}
key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1 key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1
@ -1372,21 +1372,21 @@ jobs:
- name: Restore jtreg artifact - name: Restore jtreg artifact
id: jtreg_restore id: jtreg_restore
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jtreg/ path: ~/jtreg/
continue-on-error: true continue-on-error: true
- name: Restore jtreg artifact (retry) - name: Restore jtreg artifact (retry)
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jtreg/ path: ~/jtreg/
if: steps.jtreg_restore.outcome == 'failure' if: steps.jtreg_restore.outcome == 'failure'
- name: Checkout gtest sources - name: Checkout gtest sources
uses: actions/checkout@v2 uses: actions/checkout@v3
with: with:
repository: "google/googletest" repository: "google/googletest"
ref: "release-${{ fromJson(needs.prerequisites.outputs.dependencies).GTEST_VERSION }}" ref: "release-${{ fromJson(needs.prerequisites.outputs.dependencies).GTEST_VERSION }}"
@ -1418,7 +1418,7 @@ jobs:
working-directory: jdk working-directory: jdk
- name: Persist test bundles - name: Persist test bundles
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v3
with: with:
name: transient_jdk-macos-x64${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jdk-macos-x64${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }}
path: | path: |
@ -1452,13 +1452,13 @@ jobs:
steps: steps:
- name: Checkout the source - name: Checkout the source
uses: actions/checkout@v2 uses: actions/checkout@v3
with: with:
path: jdk path: jdk
- name: Restore boot JDK from cache - name: Restore boot JDK from cache
id: bootjdk id: bootjdk
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }} path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }}
key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1 key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1
@ -1474,21 +1474,21 @@ jobs:
- name: Restore jtreg artifact - name: Restore jtreg artifact
id: jtreg_restore id: jtreg_restore
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jtreg/ path: ~/jtreg/
continue-on-error: true continue-on-error: true
- name: Restore jtreg artifact (retry) - name: Restore jtreg artifact (retry)
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jtreg/ path: ~/jtreg/
if: steps.jtreg_restore.outcome == 'failure' if: steps.jtreg_restore.outcome == 'failure'
- name: Checkout gtest sources - name: Checkout gtest sources
uses: actions/checkout@v2 uses: actions/checkout@v3
with: with:
repository: "google/googletest" repository: "google/googletest"
ref: "release-${{ fromJson(needs.prerequisites.outputs.dependencies).GTEST_VERSION }}" ref: "release-${{ fromJson(needs.prerequisites.outputs.dependencies).GTEST_VERSION }}"
@ -1521,7 +1521,7 @@ jobs:
working-directory: jdk working-directory: jdk
- name: Persist test bundles - name: Persist test bundles
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v3
with: with:
name: transient_jdk-macos-aarch64${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jdk-macos-aarch64${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }}
path: | path: |
@ -1583,11 +1583,11 @@ jobs:
steps: steps:
- name: Checkout the source - name: Checkout the source
uses: actions/checkout@v2 uses: actions/checkout@v3
- name: Restore boot JDK from cache - name: Restore boot JDK from cache
id: bootjdk id: bootjdk
uses: actions/cache@v2 uses: actions/cache@v3
with: with:
path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }} path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }}
key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1 key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1
@ -1603,14 +1603,14 @@ jobs:
- name: Restore jtreg artifact - name: Restore jtreg artifact
id: jtreg_restore id: jtreg_restore
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jtreg/ path: ~/jtreg/
continue-on-error: true continue-on-error: true
- name: Restore jtreg artifact (retry) - name: Restore jtreg artifact (retry)
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jtreg/ path: ~/jtreg/
@ -1618,14 +1618,14 @@ jobs:
- name: Restore build artifacts - name: Restore build artifacts
id: build_restore id: build_restore
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jdk-macos-x64${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jdk-macos-x64${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jdk-macos-x64${{ matrix.artifact }} path: ~/jdk-macos-x64${{ matrix.artifact }}
continue-on-error: true continue-on-error: true
- name: Restore build artifacts (retry) - name: Restore build artifacts (retry)
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
name: transient_jdk-macos-x64${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }} name: transient_jdk-macos-x64${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }}
path: ~/jdk-macos-x64${{ matrix.artifact }} path: ~/jdk-macos-x64${{ matrix.artifact }}
@ -1704,14 +1704,14 @@ jobs:
- name: Persist test results - name: Persist test results
if: always() if: always()
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v3
with: with:
path: ~/macos-x64${{ matrix.artifact }}_testresults_${{ env.logsuffix }}.zip path: ~/macos-x64${{ matrix.artifact }}_testresults_${{ env.logsuffix }}.zip
continue-on-error: true continue-on-error: true
- name: Persist test outputs - name: Persist test outputs
if: always() if: always()
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v3
with: with:
path: ~/macos-x64${{ matrix.artifact }}_testsupport_${{ env.logsuffix }}.zip path: ~/macos-x64${{ matrix.artifact }}_testsupport_${{ env.logsuffix }}.zip
continue-on-error: true continue-on-error: true
@ -1734,7 +1734,7 @@ jobs:
steps: steps:
- name: Determine current artifacts endpoint - name: Determine current artifacts endpoint
id: actions_runtime id: actions_runtime
uses: actions/github-script@v3 uses: actions/github-script@v6
with: with:
script: "return { url: process.env['ACTIONS_RUNTIME_URL'], token: process.env['ACTIONS_RUNTIME_TOKEN'] }" script: "return { url: process.env['ACTIONS_RUNTIME_URL'], token: process.env['ACTIONS_RUNTIME_TOKEN'] }"
@ -1757,7 +1757,7 @@ jobs:
done done
- name: Fetch remaining artifacts (test results) - name: Fetch remaining artifacts (test results)
uses: actions/download-artifact@v2 uses: actions/download-artifact@v3
with: with:
path: test-results path: test-results
@ -1774,7 +1774,7 @@ jobs:
done done
- name: Upload a combined test results artifact - name: Upload a combined test results artifact
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v3
with: with:
name: test-results_${{ needs.prerequisites.outputs.bundle_id }} name: test-results_${{ needs.prerequisites.outputs.bundle_id }}
path: test-results path: test-results

View File

@ -129,8 +129,17 @@ static inline uint32_t uimm(uint32_t val, int hi, int lo)
uint64_t replicate(uint64_t bits, int nbits, int count) uint64_t replicate(uint64_t bits, int nbits, int count)
{ {
assert(count > 0, "must be");
assert(nbits > 0, "must be");
assert(count * nbits <= 64, "must be");
// Special case nbits == 64 since the shift below with that nbits value
// would result in undefined behavior.
if (nbits == 64) {
return bits;
}
uint64_t result = 0; uint64_t result = 0;
// nbits may be 64 in which case we want mask to be -1
uint64_t mask = ones(nbits); uint64_t mask = ones(nbits);
for (int i = 0; i < count ; i++) { for (int i = 0; i < count ; i++) {
result <<= nbits; result <<= nbits;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -133,11 +133,10 @@ CodeBuffer::~CodeBuffer() {
// Previous incarnations of this buffer are held live, so that internal // Previous incarnations of this buffer are held live, so that internal
// addresses constructed before expansions will not be confused. // addresses constructed before expansions will not be confused.
cb->free_blob(); cb->free_blob();
// free any overflow storage
delete cb->_overflow_arena;
} }
// free any overflow storage
delete _overflow_arena;
NOT_PRODUCT(clear_strings()); NOT_PRODUCT(clear_strings());
assert(_default_oop_recorder.allocated_on_stack_or_embedded(), "should be embedded object"); assert(_default_oop_recorder.allocated_on_stack_or_embedded(), "should be embedded object");
@ -932,6 +931,7 @@ void CodeBuffer::take_over_code_from(CodeBuffer* cb) {
this_sect->take_over_code_from(cb_sect); this_sect->take_over_code_from(cb_sect);
} }
_overflow_arena = cb->_overflow_arena; _overflow_arena = cb->_overflow_arena;
cb->_overflow_arena = NULL;
// Make sure the old cb won't try to use it or free it. // Make sure the old cb won't try to use it or free it.
DEBUG_ONLY(cb->_blob = (BufferBlob*)badAddress); DEBUG_ONLY(cb->_blob = (BufferBlob*)badAddress);
} }

View File

@ -82,7 +82,6 @@ ciMethod::ciMethod(const methodHandle& h_m, ciInstanceKlass* holder) :
_max_stack = h_m->max_stack(); _max_stack = h_m->max_stack();
_max_locals = h_m->max_locals(); _max_locals = h_m->max_locals();
_code_size = h_m->code_size(); _code_size = h_m->code_size();
_intrinsic_id = h_m->intrinsic_id();
_handler_count = h_m->exception_table_length(); _handler_count = h_m->exception_table_length();
_size_of_parameters = h_m->size_of_parameters(); _size_of_parameters = h_m->size_of_parameters();
_uses_monitors = h_m->access_flags().has_monitor_bytecodes(); _uses_monitors = h_m->access_flags().has_monitor_bytecodes();
@ -102,6 +101,10 @@ ciMethod::ciMethod(const methodHandle& h_m, ciInstanceKlass* holder) :
_bcea = NULL; _bcea = NULL;
#endif // COMPILER2 #endif // COMPILER2
// Check for blackhole intrinsic and then populate the intrinsic ID.
CompilerOracle::tag_blackhole_if_possible(h_m);
_intrinsic_id = h_m->intrinsic_id();
ciEnv *env = CURRENT_ENV; ciEnv *env = CURRENT_ENV;
if (env->jvmti_can_hotswap_or_post_breakpoint()) { if (env->jvmti_can_hotswap_or_post_breakpoint()) {
// 6328518 check hotswap conditions under the right lock. // 6328518 check hotswap conditions under the right lock.
@ -157,8 +160,6 @@ ciMethod::ciMethod(const methodHandle& h_m, ciInstanceKlass* holder) :
ciReplay::initialize(this); ciReplay::initialize(this);
} }
#endif #endif
CompilerOracle::tag_blackhole_if_possible(h_m);
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2018, 2021, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2018, 2019 SAP SE. All rights reserved. * Copyright (c) 2018, 2019 SAP SE. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
@ -756,18 +756,17 @@ void CodeHeapState::aggregate(outputStream* out, CodeHeap* heap, size_t granular
CodeBlob* cb = (CodeBlob*)heap->find_start(h); CodeBlob* cb = (CodeBlob*)heap->find_start(h);
cbType = get_cbType(cb); // Will check for cb == NULL and other safety things. cbType = get_cbType(cb); // Will check for cb == NULL and other safety things.
if (cbType != noType) { if (cbType != noType) {
const char* blob_name = os::strdup(cb->name()); const char* blob_name = nullptr;
unsigned int nm_size = 0; unsigned int nm_size = 0;
int temperature = 0; int temperature = 0;
nmethod* nm = cb->as_nmethod_or_null(); nmethod* nm = cb->as_nmethod_or_null();
if (nm != NULL) { // no is_readable check required, nm = (nmethod*)cb. if (nm != NULL) { // no is_readable check required, nm = (nmethod*)cb.
ResourceMark rm; ResourceMark rm;
Method* method = nm->method(); Method* method = nm->method();
if (nm->is_in_use()) { if (nm->is_in_use() || nm->is_not_entrant()) {
blob_name = os::strdup(method->name_and_sig_as_C_string());
}
if (nm->is_not_entrant()) {
blob_name = os::strdup(method->name_and_sig_as_C_string()); blob_name = os::strdup(method->name_and_sig_as_C_string());
} else {
blob_name = os::strdup(cb->name());
} }
nm_size = nm->total_size(); nm_size = nm->total_size();
@ -815,6 +814,8 @@ void CodeHeapState::aggregate(outputStream* out, CodeHeap* heap, size_t granular
default: default:
break; break;
} }
} else {
blob_name = os::strdup(cb->name());
} }
//------------------------------------------ //------------------------------------------

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2014, 2021, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -29,6 +29,17 @@ BitSet::BitMapFragment::BitMapFragment(uintptr_t granule, BitMapFragment* next)
_next(next) { _next(next) {
} }
BitSet::BitMapFragmentTable::~BitMapFragmentTable() {
for (int index = 0; index < table_size(); index ++) {
Entry* e = bucket(index);
while (e != nullptr) {
Entry* tmp = e;
e = e->next();
free_entry(tmp);
}
}
}
BitSet::BitSet() : BitSet::BitSet() :
_bitmap_fragments(32), _bitmap_fragments(32),
_fragment_list(NULL), _fragment_list(NULL),

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -68,6 +68,7 @@ class BitSet : public CHeapObj<mtTracing> {
public: public:
BitMapFragmentTable(int table_size) : BasicHashtable<mtTracing>(table_size, sizeof(Entry)) {} BitMapFragmentTable(int table_size) : BasicHashtable<mtTracing>(table_size, sizeof(Entry)) {}
~BitMapFragmentTable();
void add(uintptr_t key, CHeapBitMap* value); void add(uintptr_t key, CHeapBitMap* value);
CHeapBitMap** lookup(uintptr_t key); CHeapBitMap** lookup(uintptr_t key);
}; };

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2014, 2020, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -612,11 +612,11 @@ ObjectSampleWriter::ObjectSampleWriter(JfrCheckpointWriter& writer, EdgeStore* s
assert(store != NULL, "invariant"); assert(store != NULL, "invariant");
assert(!store->is_empty(), "invariant"); assert(!store->is_empty(), "invariant");
register_serializers(); register_serializers();
sample_infos = NULL; assert(field_infos == NULL, "Invariant");
ref_infos = NULL; assert(sample_infos == NULL, "Invariant");
array_infos = NULL; assert(ref_infos == NULL, "Invariant");
field_infos = NULL; assert(array_infos == NULL, "Invariant");
root_infos = NULL; assert(root_infos == NULL, "Invariant");
} }
ObjectSampleWriter::~ObjectSampleWriter() { ObjectSampleWriter::~ObjectSampleWriter() {
@ -625,6 +625,16 @@ ObjectSampleWriter::~ObjectSampleWriter() {
write_array_infos(_writer); write_array_infos(_writer);
write_field_infos(_writer); write_field_infos(_writer);
write_root_descriptors(_writer); write_root_descriptors(_writer);
// Followings are RA allocated, memory will be released automatically.
if (field_infos != NULL) {
field_infos->~FieldTable();
field_infos = NULL;
}
sample_infos = NULL;
ref_infos = NULL;
array_infos = NULL;
root_infos = NULL;
} }
bool ObjectSampleWriter::operator()(StoredEdge& e) { bool ObjectSampleWriter::operator()(StoredEdge& e) {

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2015, 2021, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2015, 2022, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -334,6 +334,11 @@ void LogOutput::update_config_string(const size_t on_level[LogLevel::Count]) {
assert(n_deviates < deviating_tagsets, "deviating tag set array overflow"); assert(n_deviates < deviating_tagsets, "deviating tag set array overflow");
assert(prev_deviates > n_deviates, "number of deviating tag sets must never grow"); assert(prev_deviates > n_deviates, "number of deviating tag sets must never grow");
if (n_deviates == 1 && n_selections == 0) {
// we're done as we couldn't reduce things any further
break;
}
} }
FREE_C_HEAP_ARRAY(LogTagSet*, deviates); FREE_C_HEAP_ARRAY(LogTagSet*, deviates);
FREE_C_HEAP_ARRAY(Selection, selections); FREE_C_HEAP_ARRAY(Selection, selections);

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1996, 2021, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1996, 2022, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -3210,16 +3210,18 @@ public class DecimalFormat extends NumberFormat {
for (i = digitCount; i > 0; --i) { for (i = digitCount; i > 0; --i) {
if (i != digitCount && isGroupingUsed() && groupingSize != 0 && if (i != digitCount && isGroupingUsed() && groupingSize != 0 &&
i % groupingSize == 0) { i % groupingSize == 0) {
result.append(localized ? symbols.getGroupingSeparator() : result.append(localized ?
PATTERN_GROUPING_SEPARATOR); (isCurrencyFormat ? symbols.getMonetaryGroupingSeparator() : symbols.getGroupingSeparator()) :
PATTERN_GROUPING_SEPARATOR);
} }
result.append(i <= getMinimumIntegerDigits() result.append(i <= getMinimumIntegerDigits()
? (localized ? symbols.getZeroDigit() : PATTERN_ZERO_DIGIT) ? (localized ? symbols.getZeroDigit() : PATTERN_ZERO_DIGIT)
: (localized ? symbols.getDigit() : PATTERN_DIGIT)); : (localized ? symbols.getDigit() : PATTERN_DIGIT));
} }
if (getMaximumFractionDigits() > 0 || decimalSeparatorAlwaysShown) if (getMaximumFractionDigits() > 0 || decimalSeparatorAlwaysShown)
result.append(localized ? symbols.getDecimalSeparator() : result.append(localized ?
PATTERN_DECIMAL_SEPARATOR); (isCurrencyFormat ? symbols.getMonetaryDecimalSeparator() : symbols.getDecimalSeparator()) :
PATTERN_DECIMAL_SEPARATOR);
for (i = 0; i < getMaximumFractionDigits(); ++i) { for (i = 0; i < getMaximumFractionDigits(); ++i) {
if (i < getMinimumFractionDigits()) { if (i < getMinimumFractionDigits()) {
result.append(localized ? symbols.getZeroDigit() : result.append(localized ? symbols.getZeroDigit() :

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -5,7 +5,9 @@
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

View File

@ -1,4 +1,4 @@
## The FreeType Project: Freetype v2.10.4 ## The FreeType Project: Freetype v2.12.0
### FreeType Notice ### FreeType Notice

View File

@ -30,6 +30,6 @@ src/java.desktop/share/legal/freetype.md
When updating specify --with-freetype=bundled to test builds to When updating specify --with-freetype=bundled to test builds to
expose build issues. expose build issues.
This is important because presently on Linux and Solaris the build This is important because presently on Linux the build
defaults to linking against the system library and does not attempt defaults to linking against the system library and does not attempt
to compile the sources. to compile the sources.

View File

@ -4,7 +4,7 @@
* *
* ANSI-specific configuration file (specification only). * ANSI-specific configuration file (specification only).
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -4,7 +4,7 @@
* *
* Build macros of the FreeType 2 library. * Build macros of the FreeType 2 library.
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -777,6 +777,18 @@
#define FT_COLOR_H <freetype/ftcolor.h> #define FT_COLOR_H <freetype/ftcolor.h>
/**************************************************************************
*
* @macro:
* FT_OTSVG_H
*
* @description:
* A macro used in `#include` statements to name the file containing the
* FreeType~2 API which handles the OpenType 'SVG~' glyphs.
*/
#define FT_OTSVG_H <freetype/otsvg.h>
/* */ /* */
/* These header files don't need to be included by the user. */ /* These header files don't need to be included by the user. */

View File

@ -19,12 +19,15 @@ FT_USE_MODULE( FT_Driver_ClassRec, t1cid_driver_class )
// FT_USE_MODULE( FT_Driver_ClassRec, t42_driver_class ) // FT_USE_MODULE( FT_Driver_ClassRec, t42_driver_class )
// FT_USE_MODULE( FT_Driver_ClassRec, winfnt_driver_class ) // FT_USE_MODULE( FT_Driver_ClassRec, winfnt_driver_class )
// FT_USE_MODULE( FT_Driver_ClassRec, pcf_driver_class ) // FT_USE_MODULE( FT_Driver_ClassRec, pcf_driver_class )
// FT_USE_MODULE( FT_Driver_ClassRec, bdf_driver_class )
FT_USE_MODULE( FT_Module_Class, psaux_module_class ) FT_USE_MODULE( FT_Module_Class, psaux_module_class )
FT_USE_MODULE( FT_Module_Class, psnames_module_class ) FT_USE_MODULE( FT_Module_Class, psnames_module_class )
FT_USE_MODULE( FT_Module_Class, pshinter_module_class ) FT_USE_MODULE( FT_Module_Class, pshinter_module_class )
FT_USE_MODULE( FT_Renderer_Class, ft_raster1_renderer_class )
FT_USE_MODULE( FT_Module_Class, sfnt_module_class ) FT_USE_MODULE( FT_Module_Class, sfnt_module_class )
FT_USE_MODULE( FT_Renderer_Class, ft_smooth_renderer_class ) FT_USE_MODULE( FT_Renderer_Class, ft_smooth_renderer_class )
// FT_USE_MODULE( FT_Driver_ClassRec, bdf_driver_class ) FT_USE_MODULE( FT_Renderer_Class, ft_raster1_renderer_class )
// FT_USE_MODULE( FT_Renderer_Class, ft_sdf_renderer_class )
// FT_USE_MODULE( FT_Renderer_Class, ft_bitmap_sdf_renderer_class )
// FT_USE_MODULE( FT_Renderer_Class, ft_svg_renderer_class )
/* EOF */ /* EOF */

View File

@ -4,7 +4,7 @@
* *
* User-selectable configuration macros (specification only). * User-selectable configuration macros (specification only).
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -105,8 +105,7 @@ FT_BEGIN_HEADER
* *
* ``` * ```
* FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ * FREETYPE_PROPERTIES=truetype:interpreter-version=35 \
* cff:no-stem-darkening=1 \ * cff:no-stem-darkening=1
* autofitter:warping=1
* ``` * ```
* *
*/ */
@ -220,6 +219,10 @@ FT_BEGIN_HEADER
* If you use a build system like cmake or the `configure` script, * If you use a build system like cmake or the `configure` script,
* options set by those programs have precedence, overwriting the value * options set by those programs have precedence, overwriting the value
* here with the configured one. * here with the configured one.
*
* If you use the GNU make build system directly (that is, without the
* `configure` script) and you define this macro, you also have to pass
* `SYSTEM_ZLIB=yes` as an argument to make.
*/ */
/* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */ /* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */
@ -431,6 +434,23 @@ FT_BEGIN_HEADER
/* #define FT_DEBUG_LEVEL_TRACE */ /* #define FT_DEBUG_LEVEL_TRACE */
/**************************************************************************
*
* Logging
*
* Compiling FreeType in debug or trace mode makes FreeType write error
* and trace log messages to `stderr`. Enabling this macro
* automatically forces the `FT_DEBUG_LEVEL_ERROR` and
* `FT_DEBUG_LEVEL_TRACE` macros and allows FreeType to write error and
* trace log messages to a file instead of `stderr`. For writing logs
* to a file, FreeType uses an the external `dlg` library (the source
* code is in `src/dlg`).
*
* This option needs a C99 compiler.
*/
/* #define FT_DEBUG_LOGGING */
/************************************************************************** /**************************************************************************
* *
* Autofitter debugging * Autofitter debugging
@ -507,6 +527,20 @@ FT_BEGIN_HEADER
#undef FT_CONFIG_OPTION_USE_MODULE_ERRORS #undef FT_CONFIG_OPTION_USE_MODULE_ERRORS
/**************************************************************************
*
* OpenType SVG Glyph Support
*
* Setting this macro enables support for OpenType SVG glyphs. By
* default, FreeType can only fetch SVG documents. However, it can also
* render them if external rendering hook functions are plugged in at
* runtime.
*
* More details on the hooks can be found in file `otsvg.h`.
*/
/* #define FT_CONFIG_OPTION_SVG */
/************************************************************************** /**************************************************************************
* *
* Error Strings * Error Strings
@ -892,24 +926,6 @@ FT_BEGIN_HEADER
#endif #endif
/**************************************************************************
*
* Compile 'autofit' module with warp hinting. The idea of the warping
* code is to slightly scale and shift a glyph within a single dimension so
* that as much of its segments are aligned (more or less) on the grid. To
* find out the optimal scaling and shifting value, various parameter
* combinations are tried and scored.
*
* You can switch warping on and off with the `warping` property of the
* auto-hinter (see file `ftdriver.h` for more information; by default it
* is switched off).
*
* This experimental option is not active if the rendering mode is
* `FT_RENDER_MODE_LIGHT`.
*/
#define AF_CONFIG_OPTION_USE_WARPER
/************************************************************************** /**************************************************************************
* *
* Use TrueType-like size metrics for 'light' auto-hinting. * Use TrueType-like size metrics for 'light' auto-hinting.
@ -961,6 +977,21 @@ FT_BEGIN_HEADER
#endif #endif
/*
* The TT_SUPPORT_COLRV1 macro is defined to indicate to clients that this
* version of FreeType has support for 'COLR' v1 API. This definition is
* useful to FreeType clients that want to build in support for 'COLR' v1
* depending on a tip-of-tree checkout before it is officially released in
* FreeType, and while the feature cannot yet be tested against using
* version macros. Don't change this macro. This may be removed once the
* feature is in a FreeType release version and version macros can be used
* to test for availability.
*/
#ifdef TT_CONFIG_OPTION_COLOR_LAYERS
#define TT_SUPPORT_COLRV1
#endif
/* /*
* Check CFF darkening parameters. The checks are the same as in function * Check CFF darkening parameters. The checks are the same as in function
* `cff_property_set` in file `cffdrivr.c`. * `cff_property_set` in file `cffdrivr.c`.
@ -989,8 +1020,8 @@ FT_BEGIN_HEADER
#error "Invalid CFF darkening parameters!" #error "Invalid CFF darkening parameters!"
#endif #endif
FT_END_HEADER
FT_END_HEADER
#endif /* FTOPTION_H_ */ #endif /* FTOPTION_H_ */

View File

@ -5,7 +5,7 @@
* ANSI-specific library and header configuration file (specification * ANSI-specific library and header configuration file (specification
* only). * only).
* *
* Copyright (C) 2002-2020 by * Copyright (C) 2002-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -43,7 +43,8 @@
* *
* `UINT_MAX` and `ULONG_MAX` are used to automatically compute the size of * `UINT_MAX` and `ULONG_MAX` are used to automatically compute the size of
* `int` and `long` in bytes at compile-time. So far, this works for all * `int` and `long` in bytes at compile-time. So far, this works for all
* platforms the library has been tested on. * platforms the library has been tested on. We also check `ULLONG_MAX`
* to see whether we can use 64-bit `long long` later on.
* *
* Note that on the extremely rare platforms that do not provide integer * Note that on the extremely rare platforms that do not provide integer
* types that are _exactly_ 16 and 32~bits wide (e.g., some old Crays where * types that are _exactly_ 16 and 32~bits wide (e.g., some old Crays where
@ -66,6 +67,15 @@
#define FT_LONG_MIN LONG_MIN #define FT_LONG_MIN LONG_MIN
#define FT_LONG_MAX LONG_MAX #define FT_LONG_MAX LONG_MAX
#define FT_ULONG_MAX ULONG_MAX #define FT_ULONG_MAX ULONG_MAX
#ifdef LLONG_MAX
#define FT_LLONG_MAX LLONG_MAX
#endif
#ifdef LLONG_MIN
#define FT_LLONG_MIN LLONG_MIN
#endif
#ifdef ULLONG_MAX
#define FT_ULLONG_MAX ULLONG_MAX
#endif
/************************************************************************** /**************************************************************************

View File

@ -4,7 +4,7 @@
* *
* FreeType integer types definitions. * FreeType integer types definitions.
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -60,6 +60,18 @@
#endif /* !defined(FT_SIZEOF_LONG) */ #endif /* !defined(FT_SIZEOF_LONG) */
#ifndef FT_SIZEOF_LONG_LONG
/* The size of a `long long` type if available */
#if defined( FT_ULLONG_MAX ) && FT_ULLONG_MAX >= 0xFFFFFFFFFFFFFFFFULL
#define FT_SIZEOF_LONG_LONG ( 64 / FT_CHAR_BIT )
#else
#define FT_SIZEOF_LONG_LONG 0
#endif
#endif /* !defined(FT_SIZEOF_LONG_LONG) */
/************************************************************************** /**************************************************************************
* *
* @section: * @section:
@ -174,15 +186,17 @@
#endif #endif
/* determine whether we have a 64-bit `int` type for platforms without */ /* determine whether we have a 64-bit integer type */
/* Autoconf */
#if FT_SIZEOF_LONG == ( 64 / FT_CHAR_BIT ) #if FT_SIZEOF_LONG == ( 64 / FT_CHAR_BIT )
/* `FT_LONG64` must be defined if a 64-bit type is available */
#define FT_LONG64
#define FT_INT64 long #define FT_INT64 long
#define FT_UINT64 unsigned long #define FT_UINT64 unsigned long
#elif FT_SIZEOF_LONG_LONG >= ( 64 / FT_CHAR_BIT )
#define FT_INT64 long long int
#define FT_UINT64 unsigned long long int
/************************************************************************** /**************************************************************************
* *
* A 64-bit data type may create compilation problems if you compile in * A 64-bit data type may create compilation problems if you compile in
@ -192,16 +206,9 @@
*/ */
#elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 ) #elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 )
#if defined( __STDC_VERSION__ ) && __STDC_VERSION__ >= 199901L #if defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
#define FT_LONG64
#define FT_INT64 long long int
#define FT_UINT64 unsigned long long int
#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
/* this compiler provides the `__int64` type */ /* this compiler provides the `__int64` type */
#define FT_LONG64
#define FT_INT64 __int64 #define FT_INT64 __int64
#define FT_UINT64 unsigned __int64 #define FT_UINT64 unsigned __int64
@ -211,32 +218,30 @@
/* to test the compiler version. */ /* to test the compiler version. */
/* this compiler provides the `__int64` type */ /* this compiler provides the `__int64` type */
#define FT_LONG64
#define FT_INT64 __int64 #define FT_INT64 __int64
#define FT_UINT64 unsigned __int64 #define FT_UINT64 unsigned __int64
#elif defined( __WATCOMC__ ) /* Watcom C++ */ #elif defined( __WATCOMC__ ) && __WATCOMC__ >= 1100 /* Watcom C++ */
/* Watcom doesn't provide 64-bit data types */ #define FT_INT64 long long int
#define FT_UINT64 unsigned long long int
#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */ #elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */
#define FT_LONG64
#define FT_INT64 long long int #define FT_INT64 long long int
#define FT_UINT64 unsigned long long int #define FT_UINT64 unsigned long long int
#elif defined( __GNUC__ ) #elif defined( __GNUC__ )
/* GCC provides the `long long` type */ /* GCC provides the `long long` type */
#define FT_LONG64
#define FT_INT64 long long int #define FT_INT64 long long int
#define FT_UINT64 unsigned long long int #define FT_UINT64 unsigned long long int
#endif /* __STDC_VERSION__ >= 199901L */ #endif /* !__STDC__ */
#endif /* FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) */ #endif /* FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) */
#ifdef FT_LONG64 #ifdef FT_INT64
typedef FT_INT64 FT_Int64; typedef FT_INT64 FT_Int64;
typedef FT_UINT64 FT_UInt64; typedef FT_UINT64 FT_UInt64;
#endif #endif

View File

@ -4,7 +4,7 @@
* *
* Mac/OS X support configuration header. * Mac/OS X support configuration header.
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -4,7 +4,7 @@
* *
* Define a set of compiler macros used in public FreeType headers. * Define a set of compiler macros used in public FreeType headers.
* *
* Copyright (C) 2020 by * Copyright (C) 2020-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -103,6 +103,7 @@ FT_BEGIN_HEADER
*/ */
#define FT_EXPORT( x ) FT_PUBLIC_FUNCTION_ATTRIBUTE extern x #define FT_EXPORT( x ) FT_PUBLIC_FUNCTION_ATTRIBUTE extern x
/* /*
* `FT_UNUSED` indicates that a given parameter is not used -- this is * `FT_UNUSED` indicates that a given parameter is not used -- this is
* only used to get rid of unpleasant compiler warnings. * only used to get rid of unpleasant compiler warnings.
@ -115,6 +116,23 @@ FT_BEGIN_HEADER
#endif #endif
/*
* Support for casts in both C and C++.
*/
#ifdef __cplusplus
#define FT_STATIC_CAST( type, var ) static_cast<type>(var)
#define FT_REINTERPRET_CAST( type, var ) reinterpret_cast<type>(var)
#define FT_STATIC_BYTE_CAST( type, var ) \
static_cast<type>( static_cast<unsigned char>( var ) )
#else
#define FT_STATIC_CAST( type, var ) (type)(var)
#define FT_REINTERPRET_CAST( type, var ) (type)(var)
#define FT_STATIC_BYTE_CAST( type, var ) (type)(unsigned char)(var)
#endif
FT_END_HEADER FT_END_HEADER
#endif /* FREETYPE_CONFIG_PUBLIC_MACROS_H_ */ #endif /* FREETYPE_CONFIG_PUBLIC_MACROS_H_ */

View File

@ -4,7 +4,7 @@
* *
* FreeType high-level API and common types (specification only). * FreeType high-level API and common types (specification only).
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -30,6 +30,34 @@ FT_BEGIN_HEADER
/**************************************************************************
*
* @section:
* preamble
*
* @title:
* Preamble
*
* @abstract:
* What FreeType is and isn't
*
* @description:
* FreeType is a library that provides access to glyphs in font files. It
* scales the glyph images and their metrics to a requested size, and it
* rasterizes the glyph images to produce pixel or subpixel alpha coverage
* bitmaps.
*
* Note that FreeType is _not_ a text layout engine. You have to use
* higher-level libraries like HarfBuzz, Pango, or ICU for that.
*
* Note also that FreeType does _not_ perform alpha blending or
* compositing the resulting bitmaps or pixmaps by itself. Use your
* favourite graphics library (for example, Cairo or Skia) to further
* process FreeType's output.
*
*/
/************************************************************************** /**************************************************************************
* *
* @section: * @section:
@ -125,6 +153,9 @@ FT_BEGIN_HEADER
* FT_FACE_FLAG_GLYPH_NAMES * FT_FACE_FLAG_GLYPH_NAMES
* FT_FACE_FLAG_EXTERNAL_STREAM * FT_FACE_FLAG_EXTERNAL_STREAM
* FT_FACE_FLAG_HINTER * FT_FACE_FLAG_HINTER
* FT_FACE_FLAG_SVG
* FT_FACE_FLAG_SBIX
* FT_FACE_FLAG_SBIX_OVERLAY
* *
* FT_HAS_HORIZONTAL * FT_HAS_HORIZONTAL
* FT_HAS_VERTICAL * FT_HAS_VERTICAL
@ -133,6 +164,9 @@ FT_BEGIN_HEADER
* FT_HAS_GLYPH_NAMES * FT_HAS_GLYPH_NAMES
* FT_HAS_COLOR * FT_HAS_COLOR
* FT_HAS_MULTIPLE_MASTERS * FT_HAS_MULTIPLE_MASTERS
* FT_HAS_SVG
* FT_HAS_SBIX
* FT_HAS_SBIX_OVERLAY
* *
* FT_IS_SFNT * FT_IS_SFNT
* FT_IS_SCALABLE * FT_IS_SCALABLE
@ -176,6 +210,7 @@ FT_BEGIN_HEADER
* FT_Size_RequestRec * FT_Size_RequestRec
* FT_Size_Request * FT_Size_Request
* FT_Set_Transform * FT_Set_Transform
* FT_Get_Transform
* FT_Load_Glyph * FT_Load_Glyph
* FT_Get_Char_Index * FT_Get_Char_Index
* FT_Get_First_Char * FT_Get_First_Char
@ -196,6 +231,7 @@ FT_BEGIN_HEADER
* FT_LOAD_NO_SCALE * FT_LOAD_NO_SCALE
* FT_LOAD_NO_HINTING * FT_LOAD_NO_HINTING
* FT_LOAD_NO_BITMAP * FT_LOAD_NO_BITMAP
* FT_LOAD_SBITS_ONLY
* FT_LOAD_NO_AUTOHINT * FT_LOAD_NO_AUTOHINT
* FT_LOAD_COLOR * FT_LOAD_COLOR
* *
@ -493,13 +529,15 @@ FT_BEGIN_HEADER
* size. * size.
* *
* @note: * @note:
* An @FT_Face has one _active_ @FT_Size object that is used by functions * An @FT_Face has one _active_ `FT_Size` object that is used by
* like @FT_Load_Glyph to determine the scaling transformation that in * functions like @FT_Load_Glyph to determine the scaling transformation
* turn is used to load and hint glyphs and metrics. * that in turn is used to load and hint glyphs and metrics.
* *
* You can use @FT_Set_Char_Size, @FT_Set_Pixel_Sizes, @FT_Request_Size * A newly created `FT_Size` object contains only meaningless zero values.
* You must use @FT_Set_Char_Size, @FT_Set_Pixel_Sizes, @FT_Request_Size
* or even @FT_Select_Size to change the content (i.e., the scaling * or even @FT_Select_Size to change the content (i.e., the scaling
* values) of the active @FT_Size. * values) of the active `FT_Size`. Otherwise, the scaling and hinting
* will not be performed.
* *
* You can use @FT_New_Size to create additional size objects for a given * You can use @FT_New_Size to create additional size objects for a given
* @FT_Face, but they won't be used by other functions until you activate * @FT_Face, but they won't be used by other functions until you activate
@ -587,11 +625,12 @@ FT_BEGIN_HEADER
*/ */
#ifndef FT_ENC_TAG #ifndef FT_ENC_TAG
#define FT_ENC_TAG( value, a, b, c, d ) \
value = ( ( (FT_UInt32)(a) << 24 ) | \ #define FT_ENC_TAG( value, a, b, c, d ) \
( (FT_UInt32)(b) << 16 ) | \ value = ( ( FT_STATIC_BYTE_CAST( FT_UInt32, a ) << 24 ) | \
( (FT_UInt32)(c) << 8 ) | \ ( FT_STATIC_BYTE_CAST( FT_UInt32, b ) << 16 ) | \
(FT_UInt32)(d) ) ( FT_STATIC_BYTE_CAST( FT_UInt32, c ) << 8 ) | \
FT_STATIC_BYTE_CAST( FT_UInt32, d ) )
#endif /* FT_ENC_TAG */ #endif /* FT_ENC_TAG */
@ -701,11 +740,16 @@ FT_BEGIN_HEADER
* Same as FT_ENCODING_JOHAB. Deprecated. * Same as FT_ENCODING_JOHAB. Deprecated.
* *
* @note: * @note:
* By default, FreeType enables a Unicode charmap and tags it with * When loading a font, FreeType makes a Unicode charmap active if
* `FT_ENCODING_UNICODE` when it is either provided or can be generated * possible (either if the font provides such a charmap, or if FreeType
* from PostScript glyph name dictionaries in the font file. All other * can synthesize one from PostScript glyph name dictionaries; in either
* encodings are considered legacy and tagged only if explicitly defined * case, the charmap is tagged with `FT_ENCODING_UNICODE`). If such a
* in the font file. Otherwise, `FT_ENCODING_NONE` is used. * charmap is synthesized, it is placed at the first position of the
* charmap array.
*
* All other encodings are considered legacy and tagged only if
* explicitly defined in the font file. Otherwise, `FT_ENCODING_NONE` is
* used.
* *
* `FT_ENCODING_NONE` is set by the BDF and PCF drivers if the charmap is * `FT_ENCODING_NONE` is set by the BDF and PCF drivers if the charmap is
* neither Unicode nor ISO-8859-1 (otherwise it is set to * neither Unicode nor ISO-8859-1 (otherwise it is set to
@ -1193,6 +1237,19 @@ FT_BEGIN_HEADER
* altered with @FT_Set_MM_Design_Coordinates, * altered with @FT_Set_MM_Design_Coordinates,
* @FT_Set_Var_Design_Coordinates, or @FT_Set_Var_Blend_Coordinates. * @FT_Set_Var_Design_Coordinates, or @FT_Set_Var_Blend_Coordinates.
* This flag is unset by a call to @FT_Set_Named_Instance. * This flag is unset by a call to @FT_Set_Named_Instance.
*
* FT_FACE_FLAG_SVG ::
* [Since 2.12] The face has an 'SVG~' OpenType table.
*
* FT_FACE_FLAG_SBIX ::
* [Since 2.12] The face has an 'sbix' OpenType table *and* outlines.
* For such fonts, @FT_FACE_FLAG_SCALABLE is not set by default to
* retain backward compatibility.
*
* FT_FACE_FLAG_SBIX_OVERLAY ::
* [Since 2.12] The face has an 'sbix' OpenType table where outlines
* should be drawn on top of bitmap strikes.
*
*/ */
#define FT_FACE_FLAG_SCALABLE ( 1L << 0 ) #define FT_FACE_FLAG_SCALABLE ( 1L << 0 )
#define FT_FACE_FLAG_FIXED_SIZES ( 1L << 1 ) #define FT_FACE_FLAG_FIXED_SIZES ( 1L << 1 )
@ -1210,6 +1267,9 @@ FT_BEGIN_HEADER
#define FT_FACE_FLAG_TRICKY ( 1L << 13 ) #define FT_FACE_FLAG_TRICKY ( 1L << 13 )
#define FT_FACE_FLAG_COLOR ( 1L << 14 ) #define FT_FACE_FLAG_COLOR ( 1L << 14 )
#define FT_FACE_FLAG_VARIATION ( 1L << 15 ) #define FT_FACE_FLAG_VARIATION ( 1L << 15 )
#define FT_FACE_FLAG_SVG ( 1L << 16 )
#define FT_FACE_FLAG_SBIX ( 1L << 17 )
#define FT_FACE_FLAG_SBIX_OVERLAY ( 1L << 18 )
/************************************************************************** /**************************************************************************
@ -1450,6 +1510,124 @@ FT_BEGIN_HEADER
( !!( (face)->face_flags & FT_FACE_FLAG_COLOR ) ) ( !!( (face)->face_flags & FT_FACE_FLAG_COLOR ) )
/**************************************************************************
*
* @macro:
* FT_HAS_SVG
*
* @description:
* A macro that returns true whenever a face object contains an 'SVG~'
* OpenType table.
*
* @since:
* 2.12
*/
#define FT_HAS_SVG( face ) \
( !!( (face)->face_flags & FT_FACE_FLAG_SVG ) )
/**************************************************************************
*
* @macro:
* FT_HAS_SBIX
*
* @description:
* A macro that returns true whenever a face object contains an 'sbix'
* OpenType table *and* outline glyphs.
*
* Currently, FreeType only supports bitmap glyphs in PNG format for this
* table (i.e., JPEG and TIFF formats are unsupported, as are
* Apple-specific formats not part of the OpenType specification).
*
* @note:
* For backward compatibility, a font with an 'sbix' table is treated as
* a bitmap-only face. Using @FT_Open_Face with
* @FT_PARAM_TAG_IGNORE_SBIX, an application can switch off 'sbix'
* handling so that the face is treated as an ordinary outline font with
* scalable outlines.
*
* Here is some pseudo code that roughly illustrates how to implement
* 'sbix' handling according to the OpenType specification.
*
* ```
* if ( FT_HAS_SBIX( face ) )
* {
* // open font as a scalable one without sbix handling
* FT_Face face2;
* FT_Parameter param = { FT_PARAM_TAG_IGNORE_SBIX, NULL };
* FT_Open_Args args = { FT_OPEN_PARAMS | ...,
* ...,
* 1, &param };
*
*
* FT_Open_Face( library, &args, 0, &face2 );
*
* <sort `face->available_size` as necessary into
* `preferred_sizes`[*]>
*
* for ( i = 0; i < face->num_fixed_sizes; i++ )
* {
* size = preferred_sizes[i].size;
*
* error = FT_Set_Pixel_Sizes( face, size, size );
* <error handling omitted>
*
* // check whether we have a glyph in a bitmap strike
* error = FT_Load_Glyph( face,
* glyph_index,
* FT_LOAD_SBITS_ONLY |
* FT_LOAD_BITMAP_METRICS_ONLY );
* if ( error == FT_Err_Invalid_Argument )
* continue;
* else if ( error )
* <other error handling omitted>
* else
* break;
* }
*
* if ( i != face->num_fixed_sizes )
* <load embedded bitmap with `FT_Load_Glyph`,
* scale it, display it, etc.>
*
* if ( i == face->num_fixed_sizes ||
* FT_HAS_SBIX_OVERLAY( face ) )
* <use `face2` to load outline glyph with `FT_Load_Glyph`,
* scale it, display it on top of the bitmap, etc.>
* }
* ```
*
* [*] Assuming a target value of 400dpi and available strike sizes 100,
* 200, 300, and 400dpi, a possible order might be [400, 200, 300, 100]:
* scaling 200dpi to 400dpi usually gives better results than scaling
* 300dpi to 400dpi; it is also much faster. However, scaling 100dpi to
* 400dpi can yield a too pixelated result, thus the preference might be
* 300dpi over 100dpi.
*
* @since:
* 2.12
*/
#define FT_HAS_SBIX( face ) \
( !!( (face)->face_flags & FT_FACE_FLAG_SBIX ) )
/**************************************************************************
*
* @macro:
* FT_HAS_SBIX_OVERLAY
*
* @description:
* A macro that returns true whenever a face object contains an 'sbix'
* OpenType table with bit~1 in its `flags` field set, instructing the
* application to overlay the bitmap strike with the corresponding
* outline glyph. See @FT_HAS_SBIX for pseudo code how to use it.
*
* @since:
* 2.12
*/
#define FT_HAS_SBIX_OVERLAY( face ) \
( !!( (face)->face_flags & FT_FACE_FLAG_SBIX_OVERLAY ) )
/************************************************************************** /**************************************************************************
* *
* @enum: * @enum:
@ -2065,7 +2243,8 @@ FT_BEGIN_HEADER
* The size in bytes of the file in memory. * The size in bytes of the file in memory.
* *
* pathname :: * pathname ::
* A pointer to an 8-bit file pathname. The pointer is not owned by * A pointer to an 8-bit file pathname, which must be a C~string (i.e.,
* no null bytes except at the very end). The pointer is not owned by
* FreeType. * FreeType.
* *
* stream :: * stream ::
@ -2084,8 +2263,7 @@ FT_BEGIN_HEADER
* Extra parameters passed to the font driver when opening a new face. * Extra parameters passed to the font driver when opening a new face.
* *
* @note: * @note:
* The stream type is determined by the contents of `flags` that are * The stream type is determined by the contents of `flags`:
* tested in the following order by @FT_Open_Face:
* *
* If the @FT_OPEN_MEMORY bit is set, assume that this is a memory file * If the @FT_OPEN_MEMORY bit is set, assume that this is a memory file
* of `memory_size` bytes, located at `memory_address`. The data are not * of `memory_size` bytes, located at `memory_address`. The data are not
@ -2098,6 +2276,9 @@ FT_BEGIN_HEADER
* Otherwise, if the @FT_OPEN_PATHNAME bit is set, assume that this is a * Otherwise, if the @FT_OPEN_PATHNAME bit is set, assume that this is a
* normal file and use `pathname` to open it. * normal file and use `pathname` to open it.
* *
* If none of the above bits are set or if multiple are set at the same
* time, the flags are invalid and @FT_Open_Face fails.
*
* If the @FT_OPEN_DRIVER bit is set, @FT_Open_Face only tries to open * If the @FT_OPEN_DRIVER bit is set, @FT_Open_Face only tries to open
* the file with the driver whose handler is in `driver`. * the file with the driver whose handler is in `driver`.
* *
@ -2150,6 +2331,13 @@ FT_BEGIN_HEADER
* FreeType error code. 0~means success. * FreeType error code. 0~means success.
* *
* @note: * @note:
* The `pathname` string should be recognizable as such by a standard
* `fopen` call on your system; in particular, this means that `pathname`
* must not contain null bytes. If that is not sufficient to address all
* file name possibilities (for example, to handle wide character file
* names on Windows in UTF-16 encoding) you might use @FT_Open_Face to
* pass a memory array or a stream object instead.
*
* Use @FT_Done_Face to destroy the created @FT_Face object (along with * Use @FT_Done_Face to destroy the created @FT_Face object (along with
* its slot and sizes). * its slot and sizes).
*/ */
@ -2270,6 +2458,10 @@ FT_BEGIN_HEADER
* See the discussion of reference counters in the description of * See the discussion of reference counters in the description of
* @FT_Reference_Face. * @FT_Reference_Face.
* *
* If `FT_OPEN_STREAM` is set in `args->flags`, the stream in
* `args->stream` is automatically closed before this function returns
* any error (including `FT_Err_Invalid_Argument`).
*
* @example: * @example:
* To loop over all faces, use code similar to the following snippet * To loop over all faces, use code similar to the following snippet
* (omitting the error handling). * (omitting the error handling).
@ -2428,6 +2620,7 @@ FT_BEGIN_HEADER
* *
* @since: * @since:
* 2.4.2 * 2.4.2
*
*/ */
FT_EXPORT( FT_Error ) FT_EXPORT( FT_Error )
FT_Reference_Face( FT_Face face ); FT_Reference_Face( FT_Face face );
@ -2652,8 +2845,8 @@ FT_BEGIN_HEADER
* 'https://www.freetype.org/freetype2/docs/glyphs/glyphs-2.html'. * 'https://www.freetype.org/freetype2/docs/glyphs/glyphs-2.html'.
* *
* Contrary to @FT_Set_Char_Size, this function doesn't have special code * Contrary to @FT_Set_Char_Size, this function doesn't have special code
* to normalize zero-valued widths, heights, or resolutions (which lead * to normalize zero-valued widths, heights, or resolutions, which are
* to errors in most cases). * treated as @FT_LOAD_NO_SCALE.
* *
* Don't use this function if you are using the FreeType cache API. * Don't use this function if you are using the FreeType cache API.
*/ */
@ -2769,7 +2962,7 @@ FT_BEGIN_HEADER
* *
* load_flags :: * load_flags ::
* A flag indicating what to load for this glyph. The @FT_LOAD_XXX * A flag indicating what to load for this glyph. The @FT_LOAD_XXX
* constants can be used to control the glyph loading process (e.g., * flags can be used to control the glyph loading process (e.g.,
* whether the outline should be scaled, whether to load bitmaps or * whether the outline should be scaled, whether to load bitmaps or
* not, whether to hint the outline, etc). * not, whether to hint the outline, etc).
* *
@ -2777,8 +2970,10 @@ FT_BEGIN_HEADER
* FreeType error code. 0~means success. * FreeType error code. 0~means success.
* *
* @note: * @note:
* The loaded glyph may be transformed. See @FT_Set_Transform for the * For proper scaling and hinting, the active @FT_Size object owned by
* details. * the face has to be meaningfully initialized by calling
* @FT_Set_Char_Size before this function, for example. The loaded
* glyph may be transformed. See @FT_Set_Transform for the details.
* *
* For subsetted CID-keyed fonts, `FT_Err_Invalid_Argument` is returned * For subsetted CID-keyed fonts, `FT_Err_Invalid_Argument` is returned
* for invalid CID values (this is, for CID values that don't have a * for invalid CID values (this is, for CID values that don't have a
@ -2868,6 +3063,8 @@ FT_BEGIN_HEADER
* *
* FT_LOAD_NO_SCALE :: * FT_LOAD_NO_SCALE ::
* Don't scale the loaded outline glyph but keep it in font units. * Don't scale the loaded outline glyph but keep it in font units.
* This flag is also assumed if @FT_Size owned by the face was not
* properly initialized.
* *
* This flag implies @FT_LOAD_NO_HINTING and @FT_LOAD_NO_BITMAP, and * This flag implies @FT_LOAD_NO_HINTING and @FT_LOAD_NO_BITMAP, and
* unsets @FT_LOAD_RENDER. * unsets @FT_LOAD_RENDER.
@ -2898,6 +3095,15 @@ FT_BEGIN_HEADER
* *
* @FT_LOAD_NO_SCALE always sets this flag. * @FT_LOAD_NO_SCALE always sets this flag.
* *
* FT_LOAD_SBITS_ONLY ::
* [Since 2.12] This is the opposite of @FT_LOAD_NO_BITMAP, more or
* less: @FT_Load_Glyph returns `FT_Err_Invalid_Argument` if the face
* contains a bitmap strike for the given size (or the strike selected
* by @FT_Select_Size) but there is no glyph in the strike.
*
* Note that this load flag was part of FreeType since version 2.0.6
* but previously tagged as internal.
*
* FT_LOAD_VERTICAL_LAYOUT :: * FT_LOAD_VERTICAL_LAYOUT ::
* Load the glyph for vertical text layout. In particular, the * Load the glyph for vertical text layout. In particular, the
* `advance` value in the @FT_GlyphSlotRec structure is set to the * `advance` value in the @FT_GlyphSlotRec structure is set to the
@ -2954,21 +3160,31 @@ FT_BEGIN_HEADER
* Disable the auto-hinter. See also the note below. * Disable the auto-hinter. See also the note below.
* *
* FT_LOAD_COLOR :: * FT_LOAD_COLOR ::
* Load colored glyphs. There are slight differences depending on the * Load colored glyphs. FreeType searches in the following order;
* font format. * there are slight differences depending on the font format.
* *
* [Since 2.5] Load embedded color bitmap images. The resulting color * [Since 2.5] Load embedded color bitmap images (provided
* bitmaps, if available, will have the @FT_PIXEL_MODE_BGRA format, * @FT_LOAD_NO_BITMAP is not set). The resulting color bitmaps, if
* with pre-multiplied color channels. If the flag is not set and * available, have the @FT_PIXEL_MODE_BGRA format, with pre-multiplied
* color bitmaps are found, they are converted to 256-level gray * color channels. If the flag is not set and color bitmaps are found,
* bitmaps, using the @FT_PIXEL_MODE_GRAY format. * they are converted to 256-level gray bitmaps, using the
* @FT_PIXEL_MODE_GRAY format.
* *
* [Since 2.10, experimental] If the glyph index contains an entry in * [Since 2.12] If the glyph index maps to an entry in the face's
* 'SVG~' table, load the associated SVG document from this table and
* set the `format` field of @FT_GlyphSlotRec to @FT_GLYPH_FORMAT_SVG.
* Note that FreeType itself can't render SVG documents; however, the
* library provides hooks to seamlessly integrate an external renderer.
* See sections @ot_svg_driver and @svg_fonts for more.
*
* [Since 2.10, experimental] If the glyph index maps to an entry in
* the face's 'COLR' table with a 'CPAL' palette table (as defined in * the face's 'COLR' table with a 'CPAL' palette table (as defined in
* the OpenType specification), make @FT_Render_Glyph provide a default * the OpenType specification), make @FT_Render_Glyph provide a default
* blending of the color glyph layers associated with the glyph index, * blending of the color glyph layers associated with the glyph index,
* using the same bitmap format as embedded color bitmap images. This * using the same bitmap format as embedded color bitmap images. This
* is mainly for convenience; for full control of color layers use * is mainly for convenience and works only for glyphs in 'COLR' v0
* tables (or glyphs in 'COLR' v1 tables that exclusively use v0
* features). For full control of color layers use
* @FT_Get_Color_Glyph_Layer and FreeType's color functions like * @FT_Get_Color_Glyph_Layer and FreeType's color functions like
* @FT_Palette_Select instead of setting @FT_LOAD_COLOR for rendering * @FT_Palette_Select instead of setting @FT_LOAD_COLOR for rendering
* so that the client application can handle blending by itself. * so that the client application can handle blending by itself.
@ -3019,19 +3235,20 @@ FT_BEGIN_HEADER
* *
*/ */
#define FT_LOAD_DEFAULT 0x0 #define FT_LOAD_DEFAULT 0x0
#define FT_LOAD_NO_SCALE ( 1L << 0 ) #define FT_LOAD_NO_SCALE ( 1L << 0 )
#define FT_LOAD_NO_HINTING ( 1L << 1 ) #define FT_LOAD_NO_HINTING ( 1L << 1 )
#define FT_LOAD_RENDER ( 1L << 2 ) #define FT_LOAD_RENDER ( 1L << 2 )
#define FT_LOAD_NO_BITMAP ( 1L << 3 ) #define FT_LOAD_NO_BITMAP ( 1L << 3 )
#define FT_LOAD_VERTICAL_LAYOUT ( 1L << 4 ) #define FT_LOAD_VERTICAL_LAYOUT ( 1L << 4 )
#define FT_LOAD_FORCE_AUTOHINT ( 1L << 5 ) #define FT_LOAD_FORCE_AUTOHINT ( 1L << 5 )
#define FT_LOAD_CROP_BITMAP ( 1L << 6 ) #define FT_LOAD_CROP_BITMAP ( 1L << 6 )
#define FT_LOAD_PEDANTIC ( 1L << 7 ) #define FT_LOAD_PEDANTIC ( 1L << 7 )
#define FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ( 1L << 9 ) #define FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ( 1L << 9 )
#define FT_LOAD_NO_RECURSE ( 1L << 10 ) #define FT_LOAD_NO_RECURSE ( 1L << 10 )
#define FT_LOAD_IGNORE_TRANSFORM ( 1L << 11 ) #define FT_LOAD_IGNORE_TRANSFORM ( 1L << 11 )
#define FT_LOAD_MONOCHROME ( 1L << 12 ) #define FT_LOAD_MONOCHROME ( 1L << 12 )
#define FT_LOAD_LINEAR_DESIGN ( 1L << 13 ) #define FT_LOAD_LINEAR_DESIGN ( 1L << 13 )
#define FT_LOAD_SBITS_ONLY ( 1L << 14 )
#define FT_LOAD_NO_AUTOHINT ( 1L << 15 ) #define FT_LOAD_NO_AUTOHINT ( 1L << 15 )
/* Bits 16-19 are used by `FT_LOAD_TARGET_` */ /* Bits 16-19 are used by `FT_LOAD_TARGET_` */
#define FT_LOAD_COLOR ( 1L << 20 ) #define FT_LOAD_COLOR ( 1L << 20 )
@ -3041,8 +3258,8 @@ FT_BEGIN_HEADER
/* */ /* */
/* used internally only by certain font drivers */ /* used internally only by certain font drivers */
#define FT_LOAD_ADVANCE_ONLY ( 1L << 8 ) #define FT_LOAD_ADVANCE_ONLY ( 1L << 8 )
#define FT_LOAD_SBITS_ONLY ( 1L << 14 ) #define FT_LOAD_SVG_ONLY ( 1L << 23 )
/************************************************************************** /**************************************************************************
@ -3132,7 +3349,7 @@ FT_BEGIN_HEADER
* necessary to empty the cache after a mode switch to avoid false hits. * necessary to empty the cache after a mode switch to avoid false hits.
* *
*/ */
#define FT_LOAD_TARGET_( x ) ( (FT_Int32)( (x) & 15 ) << 16 ) #define FT_LOAD_TARGET_( x ) ( FT_STATIC_CAST( FT_Int32, (x) & 15 ) << 16 )
#define FT_LOAD_TARGET_NORMAL FT_LOAD_TARGET_( FT_RENDER_MODE_NORMAL ) #define FT_LOAD_TARGET_NORMAL FT_LOAD_TARGET_( FT_RENDER_MODE_NORMAL )
#define FT_LOAD_TARGET_LIGHT FT_LOAD_TARGET_( FT_RENDER_MODE_LIGHT ) #define FT_LOAD_TARGET_LIGHT FT_LOAD_TARGET_( FT_RENDER_MODE_LIGHT )
@ -3151,7 +3368,8 @@ FT_BEGIN_HEADER
* @FT_LOAD_TARGET_XXX value. * @FT_LOAD_TARGET_XXX value.
* *
*/ */
#define FT_LOAD_TARGET_MODE( x ) ( (FT_Render_Mode)( ( (x) >> 16 ) & 15 ) ) #define FT_LOAD_TARGET_MODE( x ) \
FT_STATIC_CAST( FT_Render_Mode, ( (x) >> 16 ) & 15 )
/************************************************************************** /**************************************************************************
@ -3172,11 +3390,12 @@ FT_BEGIN_HEADER
* A pointer to the transformation's 2x2 matrix. Use `NULL` for the * A pointer to the transformation's 2x2 matrix. Use `NULL` for the
* identity matrix. * identity matrix.
* delta :: * delta ::
* A pointer to the translation vector. Use `NULL` for the null vector. * A pointer to the translation vector. Use `NULL` for the null
* vector.
* *
* @note: * @note:
* This function is provided as a convenience, but keep in mind that * This function is provided as a convenience, but keep in mind that
* @FT_Matrix coefficients are only 16.16 fixed point values, which can * @FT_Matrix coefficients are only 16.16 fixed-point values, which can
* limit the accuracy of the results. Using floating-point computations * limit the accuracy of the results. Using floating-point computations
* to perform the transform directly in client code instead will always * to perform the transform directly in client code instead will always
* yield better numbers. * yield better numbers.
@ -3195,6 +3414,39 @@ FT_BEGIN_HEADER
FT_Vector* delta ); FT_Vector* delta );
/**************************************************************************
*
* @function:
* FT_Get_Transform
*
* @description:
* Return the transformation that is applied to glyph images when they
* are loaded into a glyph slot through @FT_Load_Glyph. See
* @FT_Set_Transform for more details.
*
* @input:
* face ::
* A handle to the source face object.
*
* @output:
* matrix ::
* A pointer to a transformation's 2x2 matrix. Set this to NULL if you
* are not interested in the value.
*
* delta ::
* A pointer a translation vector. Set this to NULL if you are not
* interested in the value.
*
* @since:
* 2.11
*
*/
FT_EXPORT( void )
FT_Get_Transform( FT_Face face,
FT_Matrix* matrix,
FT_Vector* delta );
/************************************************************************** /**************************************************************************
* *
* @enum: * @enum:
@ -3213,6 +3465,10 @@ FT_BEGIN_HEADER
* correction to correctly render non-monochrome glyph bitmaps onto a * correction to correctly render non-monochrome glyph bitmaps onto a
* surface; see @FT_Render_Glyph. * surface; see @FT_Render_Glyph.
* *
* The @FT_RENDER_MODE_SDF is a special render mode that uses up to 256
* distance values, indicating the signed distance from the grid position
* to the nearest outline.
*
* @values: * @values:
* FT_RENDER_MODE_NORMAL :: * FT_RENDER_MODE_NORMAL ::
* Default render mode; it corresponds to 8-bit anti-aliased bitmaps. * Default render mode; it corresponds to 8-bit anti-aliased bitmaps.
@ -3238,11 +3494,87 @@ FT_BEGIN_HEADER
* bitmaps that are 3~times the height of the original glyph outline in * bitmaps that are 3~times the height of the original glyph outline in
* pixels and use the @FT_PIXEL_MODE_LCD_V mode. * pixels and use the @FT_PIXEL_MODE_LCD_V mode.
* *
* FT_RENDER_MODE_SDF ::
* This mode corresponds to 8-bit, single-channel signed distance field
* (SDF) bitmaps. Each pixel in the SDF grid is the value from the
* pixel's position to the nearest glyph's outline. The distances are
* calculated from the center of the pixel and are positive if they are
* filled by the outline (i.e., inside the outline) and negative
* otherwise. Check the note below on how to convert the output values
* to usable data.
*
* @note: * @note:
* The selected render mode only affects vector glyphs of a font. * The selected render mode only affects vector glyphs of a font.
* Embedded bitmaps often have a different pixel mode like * Embedded bitmaps often have a different pixel mode like
* @FT_PIXEL_MODE_MONO. You can use @FT_Bitmap_Convert to transform them * @FT_PIXEL_MODE_MONO. You can use @FT_Bitmap_Convert to transform them
* into 8-bit pixmaps. * into 8-bit pixmaps.
*
* For @FT_RENDER_MODE_SDF the output bitmap buffer contains normalized
* distances that are packed into unsigned 8-bit values. To get pixel
* values in floating point representation use the following pseudo-C
* code for the conversion.
*
* ```
* // Load glyph and render using FT_RENDER_MODE_SDF,
* // then use the output buffer as follows.
*
* ...
* FT_Byte buffer = glyph->bitmap->buffer;
*
*
* for pixel in buffer
* {
* // `sd` is the signed distance and `spread` is the current spread;
* // the default spread is 2 and can be changed.
*
* float sd = (float)pixel - 128.0f;
*
*
* // Convert to pixel values.
* sd = ( sd / 128.0f ) * spread;
*
* // Store `sd` in a buffer or use as required.
* }
*
* ```
*
* FreeType has two rasterizers for generating SDF, namely:
*
* 1. `sdf` for generating SDF directly from glyph's outline, and
*
* 2. `bsdf` for generating SDF from rasterized bitmaps.
*
* Depending on the glyph type (i.e., outline or bitmap), one of the two
* rasterizers is chosen at runtime and used for generating SDFs. To
* force the use of `bsdf` you should render the glyph with any of the
* FreeType's other rendering modes (e.g., `FT_RENDER_MODE_NORMAL`) and
* then re-render with `FT_RENDER_MODE_SDF`.
*
* There are some issues with stability and possible failures of the SDF
* renderers (specifically `sdf`).
*
* 1. The `sdf` rasterizer is sensitive to really small features (e.g.,
* sharp turns that are less than 1~pixel) and imperfections in the
* glyph's outline, causing artifacts in the final output.
*
* 2. The `sdf` rasterizer has limited support for handling intersecting
* contours and *cannot* handle self-intersecting contours whatsoever.
* Self-intersection happens when a single connected contour intersect
* itself at some point; having these in your font definitely pose a
* problem to the rasterizer and cause artifacts, too.
*
* 3. Generating SDF for really small glyphs may result in undesirable
* output; the pixel grid (which stores distance information) becomes
* too coarse.
*
* 4. Since the output buffer is normalized, precision at smaller spreads
* is greater than precision at larger spread values because the
* output range of [0..255] gets mapped to a smaller SDF range. A
* spread of~2 should be sufficient in most cases.
*
* Points (1) and (2) can be avoided by using the `bsdf` rasterizer,
* which is more stable than the `sdf` rasterizer in general.
*
*/ */
typedef enum FT_Render_Mode_ typedef enum FT_Render_Mode_
{ {
@ -3251,6 +3583,7 @@ FT_BEGIN_HEADER
FT_RENDER_MODE_MONO, FT_RENDER_MODE_MONO,
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD,
FT_RENDER_MODE_LCD_V, FT_RENDER_MODE_LCD_V,
FT_RENDER_MODE_SDF,
FT_RENDER_MODE_MAX FT_RENDER_MODE_MAX
@ -3282,7 +3615,7 @@ FT_BEGIN_HEADER
* @FT_Render_Mode for a list of possible values. * @FT_Render_Mode for a list of possible values.
* *
* If @FT_RENDER_MODE_NORMAL is used, a previous call of @FT_Load_Glyph * If @FT_RENDER_MODE_NORMAL is used, a previous call of @FT_Load_Glyph
* with flag @FT_LOAD_COLOR makes FT_Render_Glyph provide a default * with flag @FT_LOAD_COLOR makes `FT_Render_Glyph` provide a default
* blending of colored glyph layers associated with the current glyph * blending of colored glyph layers associated with the current glyph
* slot (provided the font contains such layers) instead of rendering * slot (provided the font contains such layers) instead of rendering
* the glyph slot's outline. This is an experimental feature; see * the glyph slot's outline. This is an experimental feature; see
@ -3292,9 +3625,6 @@ FT_BEGIN_HEADER
* FreeType error code. 0~means success. * FreeType error code. 0~means success.
* *
* @note: * @note:
* To get meaningful results, font scaling values must be set with
* functions like @FT_Set_Char_Size before calling `FT_Render_Glyph`.
*
* When FreeType outputs a bitmap of a glyph, it really outputs an alpha * When FreeType outputs a bitmap of a glyph, it really outputs an alpha
* coverage map. If a pixel is completely covered by a filled-in * coverage map. If a pixel is completely covered by a filled-in
* outline, the bitmap contains 0xFF at that pixel, meaning that * outline, the bitmap contains 0xFF at that pixel, meaning that
@ -3338,7 +3668,8 @@ FT_BEGIN_HEADER
* *
* which is known as the OVER operator. * which is known as the OVER operator.
* *
* To correctly composite an antialiased pixel of a glyph onto a surface, * To correctly composite an anti-aliased pixel of a glyph onto a
* surface,
* *
* 1. take the foreground and background colors (e.g., in sRGB space) * 1. take the foreground and background colors (e.g., in sRGB space)
* and apply gamma to get them in a linear space, * and apply gamma to get them in a linear space,
@ -4015,168 +4346,6 @@ FT_BEGIN_HEADER
FT_Matrix *p_transform ); FT_Matrix *p_transform );
/**************************************************************************
*
* @section:
* layer_management
*
* @title:
* Glyph Layer Management
*
* @abstract:
* Retrieving and manipulating OpenType's 'COLR' table data.
*
* @description:
* The functions described here allow access of colored glyph layer data
* in OpenType's 'COLR' tables.
*/
/**************************************************************************
*
* @struct:
* FT_LayerIterator
*
* @description:
* This iterator object is needed for @FT_Get_Color_Glyph_Layer.
*
* @fields:
* num_layers ::
* The number of glyph layers for the requested glyph index. Will be
* set by @FT_Get_Color_Glyph_Layer.
*
* layer ::
* The current layer. Will be set by @FT_Get_Color_Glyph_Layer.
*
* p ::
* An opaque pointer into 'COLR' table data. The caller must set this
* to `NULL` before the first call of @FT_Get_Color_Glyph_Layer.
*/
typedef struct FT_LayerIterator_
{
FT_UInt num_layers;
FT_UInt layer;
FT_Byte* p;
} FT_LayerIterator;
/**************************************************************************
*
* @function:
* FT_Get_Color_Glyph_Layer
*
* @description:
* This is an interface to the 'COLR' table in OpenType fonts to
* iteratively retrieve the colored glyph layers associated with the
* current glyph slot.
*
* https://docs.microsoft.com/en-us/typography/opentype/spec/colr
*
* The glyph layer data for a given glyph index, if present, provides an
* alternative, multi-color glyph representation: Instead of rendering
* the outline or bitmap with the given glyph index, glyphs with the
* indices and colors returned by this function are rendered layer by
* layer.
*
* The returned elements are ordered in the z~direction from bottom to
* top; the 'n'th element should be rendered with the associated palette
* color and blended on top of the already rendered layers (elements 0,
* 1, ..., n-1).
*
* @input:
* face ::
* A handle to the parent face object.
*
* base_glyph ::
* The glyph index the colored glyph layers are associated with.
*
* @inout:
* iterator ::
* An @FT_LayerIterator object. For the first call you should set
* `iterator->p` to `NULL`. For all following calls, simply use the
* same object again.
*
* @output:
* aglyph_index ::
* The glyph index of the current layer.
*
* acolor_index ::
* The color index into the font face's color palette of the current
* layer. The value 0xFFFF is special; it doesn't reference a palette
* entry but indicates that the text foreground color should be used
* instead (to be set up by the application outside of FreeType).
*
* The color palette can be retrieved with @FT_Palette_Select.
*
* @return:
* Value~1 if everything is OK. If there are no more layers (or if there
* are no layers at all), value~0 gets returned. In case of an error,
* value~0 is returned also.
*
* @note:
* This function is necessary if you want to handle glyph layers by
* yourself. In particular, functions that operate with @FT_GlyphRec
* objects (like @FT_Get_Glyph or @FT_Glyph_To_Bitmap) don't have access
* to this information.
*
* Note that @FT_Render_Glyph is able to handle colored glyph layers
* automatically if the @FT_LOAD_COLOR flag is passed to a previous call
* to @FT_Load_Glyph. [This is an experimental feature.]
*
* @example:
* ```
* FT_Color* palette;
* FT_LayerIterator iterator;
*
* FT_Bool have_layers;
* FT_UInt layer_glyph_index;
* FT_UInt layer_color_index;
*
*
* error = FT_Palette_Select( face, palette_index, &palette );
* if ( error )
* palette = NULL;
*
* iterator.p = NULL;
* have_layers = FT_Get_Color_Glyph_Layer( face,
* glyph_index,
* &layer_glyph_index,
* &layer_color_index,
* &iterator );
*
* if ( palette && have_layers )
* {
* do
* {
* FT_Color layer_color;
*
*
* if ( layer_color_index == 0xFFFF )
* layer_color = text_foreground_color;
* else
* layer_color = palette[layer_color_index];
*
* // Load and render glyph `layer_glyph_index', then
* // blend resulting pixmap (using color `layer_color')
* // with previously created pixmaps.
*
* } while ( FT_Get_Color_Glyph_Layer( face,
* glyph_index,
* &layer_glyph_index,
* &layer_color_index,
* &iterator ) );
* }
* ```
*/
FT_EXPORT( FT_Bool )
FT_Get_Color_Glyph_Layer( FT_Face face,
FT_UInt base_glyph,
FT_UInt *aglyph_index,
FT_UInt *acolor_index,
FT_LayerIterator* iterator );
/************************************************************************** /**************************************************************************
* *
* @section: * @section:
@ -4267,6 +4436,7 @@ FT_BEGIN_HEADER
* *
* @since: * @since:
* 2.3.8 * 2.3.8
*
*/ */
FT_EXPORT( FT_UShort ) FT_EXPORT( FT_UShort )
FT_Get_FSType_Flags( FT_Face face ); FT_Get_FSType_Flags( FT_Face face );
@ -4360,6 +4530,7 @@ FT_BEGIN_HEADER
* *
* @since: * @since:
* 2.3.6 * 2.3.6
*
*/ */
FT_EXPORT( FT_UInt ) FT_EXPORT( FT_UInt )
FT_Face_GetCharVariantIndex( FT_Face face, FT_Face_GetCharVariantIndex( FT_Face face,
@ -4396,6 +4567,7 @@ FT_BEGIN_HEADER
* *
* @since: * @since:
* 2.3.6 * 2.3.6
*
*/ */
FT_EXPORT( FT_Int ) FT_EXPORT( FT_Int )
FT_Face_GetCharVariantIsDefault( FT_Face face, FT_Face_GetCharVariantIsDefault( FT_Face face,
@ -4427,6 +4599,7 @@ FT_BEGIN_HEADER
* *
* @since: * @since:
* 2.3.6 * 2.3.6
*
*/ */
FT_EXPORT( FT_UInt32* ) FT_EXPORT( FT_UInt32* )
FT_Face_GetVariantSelectors( FT_Face face ); FT_Face_GetVariantSelectors( FT_Face face );
@ -4460,6 +4633,7 @@ FT_BEGIN_HEADER
* *
* @since: * @since:
* 2.3.6 * 2.3.6
*
*/ */
FT_EXPORT( FT_UInt32* ) FT_EXPORT( FT_UInt32* )
FT_Face_GetVariantsOfChar( FT_Face face, FT_Face_GetVariantsOfChar( FT_Face face,
@ -4494,6 +4668,7 @@ FT_BEGIN_HEADER
* *
* @since: * @since:
* 2.3.6 * 2.3.6
*
*/ */
FT_EXPORT( FT_UInt32* ) FT_EXPORT( FT_UInt32* )
FT_Face_GetCharsOfVariant( FT_Face face, FT_Face_GetCharsOfVariant( FT_Face face,
@ -4766,8 +4941,8 @@ FT_BEGIN_HEADER
* *
*/ */
#define FREETYPE_MAJOR 2 #define FREETYPE_MAJOR 2
#define FREETYPE_MINOR 10 #define FREETYPE_MINOR 12
#define FREETYPE_PATCH 4 #define FREETYPE_PATCH 0
/************************************************************************** /**************************************************************************
@ -4829,6 +5004,7 @@ FT_BEGIN_HEADER
* *
* @since: * @since:
* 2.3.5 * 2.3.5
*
*/ */
FT_EXPORT( FT_Bool ) FT_EXPORT( FT_Bool )
FT_Face_CheckTrueTypePatents( FT_Face face ); FT_Face_CheckTrueTypePatents( FT_Face face );
@ -4857,6 +5033,7 @@ FT_BEGIN_HEADER
* *
* @since: * @since:
* 2.3.5 * 2.3.5
*
*/ */
FT_EXPORT( FT_Bool ) FT_EXPORT( FT_Bool )
FT_Face_SetUnpatentedHinting( FT_Face face, FT_Face_SetUnpatentedHinting( FT_Face face,

View File

@ -4,7 +4,7 @@
* *
* Quick computation of advance widths (specification only). * Quick computation of advance widths (specification only).
* *
* Copyright (C) 2008-2020 by * Copyright (C) 2008-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -4,7 +4,7 @@
* *
* FreeType exact bbox computation (specification). * FreeType exact bbox computation (specification).
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -4,7 +4,7 @@
* *
* FreeType API for accessing BDF-specific strings (specification). * FreeType API for accessing BDF-specific strings (specification).
* *
* Copyright (C) 2002-2020 by * Copyright (C) 2002-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -4,7 +4,7 @@
* *
* FreeType utility functions for bitmaps (specification). * FreeType utility functions for bitmaps (specification).
* *
* Copyright (C) 2004-2020 by * Copyright (C) 2004-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -15,6 +15,7 @@
* General Remarks * General Remarks
* *
* @sections: * @sections:
* preamble
* header_inclusion * header_inclusion
* user_allocation * user_allocation
* *
@ -61,6 +62,7 @@
* cid_fonts * cid_fonts
* pfr_fonts * pfr_fonts
* winfnt_fonts * winfnt_fonts
* svg_fonts
* font_formats * font_formats
* gasp_table * gasp_table
* *
@ -81,6 +83,7 @@
* t1_cid_driver * t1_cid_driver
* tt_driver * tt_driver
* pcf_driver * pcf_driver
* ot_svg_driver
* properties * properties
* parameter_tags * parameter_tags
* lcd_rendering * lcd_rendering
@ -123,6 +126,7 @@
* gzip * gzip
* lzw * lzw
* bzip2 * bzip2
* debugging_apis
* *
*/ */

View File

@ -4,7 +4,7 @@
* *
* FreeType API for accessing CID font information (specification). * FreeType API for accessing CID font information (specification).
* *
* Copyright (C) 2007-2020 by * Copyright (C) 2007-2022 by
* Dereg Clegg and Michael Toftdal. * Dereg Clegg and Michael Toftdal.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -4,7 +4,7 @@
* *
* FreeType API for controlling driver modules (specification only). * FreeType API for controlling driver modules (specification only).
* *
* Copyright (C) 2017-2020 by * Copyright (C) 2017-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -53,10 +53,10 @@ FT_BEGIN_HEADER
* reasons. * reasons.
* *
* Available properties are @increase-x-height, @no-stem-darkening * Available properties are @increase-x-height, @no-stem-darkening
* (experimental), @darkening-parameters (experimental), @warping * (experimental), @darkening-parameters (experimental),
* (experimental), @glyph-to-script-map (experimental), @fallback-script * @glyph-to-script-map (experimental), @fallback-script (experimental),
* (experimental), and @default-script (experimental), as documented in * and @default-script (experimental), as documented in the @properties
* the @properties section. * section.
* *
*/ */
@ -84,15 +84,15 @@ FT_BEGIN_HEADER
* @properties section. * @properties section.
* *
* *
* **Hinting and antialiasing principles of the new engine** * **Hinting and anti-aliasing principles of the new engine**
* *
* The rasterizer is positioning horizontal features (e.g., ascender * The rasterizer is positioning horizontal features (e.g., ascender
* height & x-height, or crossbars) on the pixel grid and minimizing the * height & x-height, or crossbars) on the pixel grid and minimizing the
* amount of antialiasing applied to them, while placing vertical * amount of anti-aliasing applied to them, while placing vertical
* features (vertical stems) on the pixel grid without hinting, thus * features (vertical stems) on the pixel grid without hinting, thus
* representing the stem position and weight accurately. Sometimes the * representing the stem position and weight accurately. Sometimes the
* vertical stems may be only partially black. In this context, * vertical stems may be only partially black. In this context,
* 'antialiasing' means that stems are not positioned exactly on pixel * 'anti-aliasing' means that stems are not positioned exactly on pixel
* borders, causing a fuzzy appearance. * borders, causing a fuzzy appearance.
* *
* There are two principles behind this approach. * There are two principles behind this approach.
@ -108,7 +108,7 @@ FT_BEGIN_HEADER
* sizes are comparable to kerning values and thus would be noticeable * sizes are comparable to kerning values and thus would be noticeable
* (and distracting) while reading if hinting were applied. * (and distracting) while reading if hinting were applied.
* *
* One of the reasons to not hint horizontally is antialiasing for LCD * One of the reasons to not hint horizontally is anti-aliasing for LCD
* screens: The pixel geometry of modern displays supplies three vertical * screens: The pixel geometry of modern displays supplies three vertical
* subpixels as the eye moves horizontally across each visible pixel. On * subpixels as the eye moves horizontally across each visible pixel. On
* devices where we can be certain this characteristic is present a * devices where we can be certain this characteristic is present a
@ -116,7 +116,7 @@ FT_BEGIN_HEADER
* weight. In Western writing systems this turns out to be the more * weight. In Western writing systems this turns out to be the more
* critical direction anyway; the weights and spacing of vertical stems * critical direction anyway; the weights and spacing of vertical stems
* (see above) are central to Armenian, Cyrillic, Greek, and Latin type * (see above) are central to Armenian, Cyrillic, Greek, and Latin type
* designs. Even when the rasterizer uses greyscale antialiasing instead * designs. Even when the rasterizer uses greyscale anti-aliasing instead
* of color (a necessary compromise when one doesn't know the screen * of color (a necessary compromise when one doesn't know the screen
* characteristics), the unhinted vertical features preserve the design's * characteristics), the unhinted vertical features preserve the design's
* weight and spacing much better than aliased type would. * weight and spacing much better than aliased type would.
@ -212,16 +212,14 @@ FT_BEGIN_HEADER
* @description: * @description:
* While FreeType's TrueType driver doesn't expose API functions by * While FreeType's TrueType driver doesn't expose API functions by
* itself, it is possible to control its behaviour with @FT_Property_Set * itself, it is possible to control its behaviour with @FT_Property_Set
* and @FT_Property_Get. The following lists the available properties * and @FT_Property_Get.
* together with the necessary macros and structures.
* *
* The TrueType driver's module name is 'truetype'. * The TrueType driver's module name is 'truetype'; a single property
* @interpreter-version is available, as documented in the @properties
* section.
* *
* A single property @interpreter-version is available, as documented in * To help understand the differences between interpreter versions, we
* the @properties section. * introduce a list of definitions, kindly provided by Greg Hitchcock.
*
* We start with a list of definitions, kindly provided by Greg
* Hitchcock.
* *
* _Bi-Level Rendering_ * _Bi-Level Rendering_
* *
@ -300,6 +298,31 @@ FT_BEGIN_HEADER
*/ */
/**************************************************************************
*
* @section:
* ot_svg_driver
*
* @title:
* The SVG driver
*
* @abstract:
* Controlling the external rendering of OT-SVG glyphs.
*
* @description:
* By default, FreeType can only load the 'SVG~' table of OpenType fonts
* if configuration macro `FT_CONFIG_OPTION_SVG` is defined. To make it
* render SVG glyphs, an external SVG rendering library is needed. All
* details on the interface between FreeType and the external library
* via function hooks can be found in section @svg_fonts.
*
* The OT-SVG driver's module name is 'ot-svg'; it supports a single
* property called @svg-hooks, documented below in the @properties
* section.
*
*/
/************************************************************************** /**************************************************************************
* *
* @section: * @section:
@ -362,12 +385,8 @@ FT_BEGIN_HEADER
* The same holds for the Type~1 and CID modules if compiled with * The same holds for the Type~1 and CID modules if compiled with
* `T1_CONFIG_OPTION_OLD_ENGINE`. * `T1_CONFIG_OPTION_OLD_ENGINE`.
* *
* For the 'cff' module, the default engine is 'freetype' if * For the 'cff' module, the default engine is 'adobe'. For both the
* `CFF_CONFIG_OPTION_OLD_ENGINE` is defined, and 'adobe' otherwise. * 'type1' and 't1cid' modules, the default engine is 'adobe', too.
*
* For both the 'type1' and 't1cid' modules, the default engine is
* 'freetype' if `T1_CONFIG_OPTION_OLD_ENGINE` is defined, and 'adobe'
* otherwise.
* *
* @note: * @note:
* This property can be used with @FT_Property_Get also. * This property can be used with @FT_Property_Get also.
@ -802,6 +821,40 @@ FT_BEGIN_HEADER
*/ */
/**************************************************************************
*
* @property:
* svg-hooks
*
* @description:
* Set up the interface between FreeType and an extern SVG rendering
* library like 'librsvg'. All details on the function hooks can be
* found in section @svg_fonts.
*
* @example:
* The following example code expects that the four hook functions
* `svg_*` are defined elsewhere. Error handling is omitted, too.
*
* ```
* FT_Library library;
* SVG_RendererHooks hooks = {
* (SVG_Lib_Init_Func)svg_init,
* (SVG_Lib_Free_Func)svg_free,
* (SVG_Lib_Render_Func)svg_render,
* (SVG_Lib_Preset_Slot_Func)svg_preset_slot };
*
*
* FT_Init_FreeType( &library );
*
* FT_Property_Set( library, "ot-svg",
* "svg-hooks", &hooks );
* ```
*
* @since:
* 2.12
*/
/************************************************************************** /**************************************************************************
* *
* @property: * @property:
@ -1166,48 +1219,18 @@ FT_BEGIN_HEADER
* warping * warping
* *
* @description: * @description:
* **Experimental only** * **Obsolete**
* *
* If FreeType gets compiled with option `AF_CONFIG_OPTION_USE_WARPER` to * This property was always experimental and probably never worked
* activate the warp hinting code in the auto-hinter, this property * correctly. It was entirely removed from the FreeType~2 sources. This
* switches warping on and off. * entry is only here for historical reference.
* *
* Warping only works in 'normal' auto-hinting mode replacing it. The * Warping only worked in 'normal' auto-hinting mode replacing it. The
* idea of the code is to slightly scale and shift a glyph along the * idea of the code was to slightly scale and shift a glyph along the
* non-hinted dimension (which is usually the horizontal axis) so that as * non-hinted dimension (which is usually the horizontal axis) so that as
* much of its segments are aligned (more or less) to the grid. To find * much of its segments were aligned (more or less) to the grid. To find
* out a glyph's optimal scaling and shifting value, various parameter * out a glyph's optimal scaling and shifting value, various parameter
* combinations are tried and scored. * combinations were tried and scored.
*
* By default, warping is off.
*
* @note:
* This property can be used with @FT_Property_Get also.
*
* This property can be set via the `FREETYPE_PROPERTIES` environment
* variable (using values 1 and 0 for 'on' and 'off', respectively).
*
* The warping code can also change advance widths. Have a look at the
* `lsb_delta` and `rsb_delta` fields in the @FT_GlyphSlotRec structure
* for details on improving inter-glyph distances while rendering.
*
* Since warping is a global property of the auto-hinter it is best to
* change its value before rendering any face. Otherwise, you should
* reload all faces that get auto-hinted in 'normal' hinting mode.
*
* @example:
* This example shows how to switch on warping (omitting the error
* handling).
*
* ```
* FT_Library library;
* FT_Bool warping = 1;
*
*
* FT_Init_FreeType( &library );
*
* FT_Property_Set( library, "autofitter", "warping", &warping );
* ```
* *
* @since: * @since:
* 2.6 * 2.6

View File

@ -4,7 +4,7 @@
* *
* FreeType error codes (specification). * FreeType error codes (specification).
* *
* Copyright (C) 2002-2020 by * Copyright (C) 2002-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -101,6 +101,8 @@
"too many hints" ) "too many hints" )
FT_ERRORDEF_( Invalid_Pixel_Size, 0x17, FT_ERRORDEF_( Invalid_Pixel_Size, 0x17,
"invalid pixel size" ) "invalid pixel size" )
FT_ERRORDEF_( Invalid_SVG_Document, 0x18,
"invalid SVG document" )
/* handle errors */ /* handle errors */
@ -234,6 +236,8 @@
"found FDEF or IDEF opcode in glyf bytecode" ) "found FDEF or IDEF opcode in glyf bytecode" )
FT_ERRORDEF_( Missing_Bitmap, 0x9D, FT_ERRORDEF_( Missing_Bitmap, 0x9D,
"missing bitmap in strike" ) "missing bitmap in strike" )
FT_ERRORDEF_( Missing_SVG_Hooks, 0x9E,
"SVG hooks have not been set" )
/* CFF, CID, and Type 1 errors */ /* CFF, CID, and Type 1 errors */

View File

@ -4,7 +4,7 @@
* *
* FreeType error code handling (specification). * FreeType error code handling (specification).
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -281,6 +281,8 @@ FT_BEGIN_HEADER
FT_EXPORT( const char* ) FT_EXPORT( const char* )
FT_Error_String( FT_Error error_code ); FT_Error_String( FT_Error error_code );
/* */
FT_END_HEADER FT_END_HEADER

View File

@ -4,7 +4,7 @@
* *
* Support functions for font formats. * Support functions for font formats.
* *
* Copyright (C) 2002-2020 by * Copyright (C) 2002-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -4,7 +4,7 @@
* *
* Access of TrueType's 'gasp' table (specification). * Access of TrueType's 'gasp' table (specification).
* *
* Copyright (C) 2007-2020 by * Copyright (C) 2007-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -4,7 +4,7 @@
* *
* FreeType convenience functions to handle glyphs (specification). * FreeType convenience functions to handle glyphs (specification).
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -126,7 +126,7 @@ FT_BEGIN_HEADER
* *
* @description: * @description:
* A handle to an object used to model a bitmap glyph image. This is a * A handle to an object used to model a bitmap glyph image. This is a
* sub-class of @FT_Glyph, and a pointer to @FT_BitmapGlyphRec. * 'sub-class' of @FT_Glyph, and a pointer to @FT_BitmapGlyphRec.
*/ */
typedef struct FT_BitmapGlyphRec_* FT_BitmapGlyph; typedef struct FT_BitmapGlyphRec_* FT_BitmapGlyph;
@ -142,7 +142,7 @@ FT_BEGIN_HEADER
* *
* @fields: * @fields:
* root :: * root ::
* The root @FT_Glyph fields. * The root fields of @FT_Glyph.
* *
* left :: * left ::
* The left-side bearing, i.e., the horizontal distance from the * The left-side bearing, i.e., the horizontal distance from the
@ -181,7 +181,7 @@ FT_BEGIN_HEADER
* *
* @description: * @description:
* A handle to an object used to model an outline glyph image. This is a * A handle to an object used to model an outline glyph image. This is a
* sub-class of @FT_Glyph, and a pointer to @FT_OutlineGlyphRec. * 'sub-class' of @FT_Glyph, and a pointer to @FT_OutlineGlyphRec.
*/ */
typedef struct FT_OutlineGlyphRec_* FT_OutlineGlyph; typedef struct FT_OutlineGlyphRec_* FT_OutlineGlyph;
@ -222,6 +222,92 @@ FT_BEGIN_HEADER
} FT_OutlineGlyphRec; } FT_OutlineGlyphRec;
/**************************************************************************
*
* @type:
* FT_SvgGlyph
*
* @description:
* A handle to an object used to model an SVG glyph. This is a
* 'sub-class' of @FT_Glyph, and a pointer to @FT_SvgGlyphRec.
*
* @since:
* 2.12
*/
typedef struct FT_SvgGlyphRec_* FT_SvgGlyph;
/**************************************************************************
*
* @struct:
* FT_SvgGlyphRec
*
* @description:
* A structure used for OT-SVG glyphs. This is a 'sub-class' of
* @FT_GlyphRec.
*
* @fields:
* root ::
* The root @FT_GlyphRec fields.
*
* svg_document ::
* A pointer to the SVG document.
*
* svg_document_length ::
* The length of `svg_document`.
*
* glyph_index ::
* The index of the glyph to be rendered.
*
* metrics ::
* A metrics object storing the size information.
*
* units_per_EM ::
* The size of the EM square.
*
* start_glyph_id ::
* The first glyph ID in the glyph range covered by this document.
*
* end_glyph_id ::
* The last glyph ID in the glyph range covered by this document.
*
* transform ::
* A 2x2 transformation matrix to apply to the glyph while rendering
* it.
*
* delta ::
* Translation to apply to the glyph while rendering.
*
* @note:
* The Glyph Management API requires @FT_Glyph or its 'sub-class' to have
* all the information needed to completely define the glyph's rendering.
* Outline-based glyphs can directly apply transformations to the outline
* but this is not possible for an SVG document that hasn't been parsed.
* Therefore, the transformation is stored along with the document. In
* the absence of a 'ViewBox' or 'Width'/'Height' attribute, the size of
* the ViewPort should be assumed to be 'units_per_EM'.
*/
typedef struct FT_SvgGlyphRec_
{
FT_GlyphRec root;
FT_Byte* svg_document;
FT_ULong svg_document_length;
FT_UInt glyph_index;
FT_Size_Metrics metrics;
FT_UShort units_per_EM;
FT_UShort start_glyph_id;
FT_UShort end_glyph_id;
FT_Matrix transform;
FT_Vector delta;
} FT_SvgGlyphRec;
/************************************************************************** /**************************************************************************
* *
* @function: * @function:
@ -337,9 +423,9 @@ FT_BEGIN_HEADER
* vector. * vector.
*/ */
FT_EXPORT( FT_Error ) FT_EXPORT( FT_Error )
FT_Glyph_Transform( FT_Glyph glyph, FT_Glyph_Transform( FT_Glyph glyph,
FT_Matrix* matrix, const FT_Matrix* matrix,
FT_Vector* delta ); const FT_Vector* delta );
/************************************************************************** /**************************************************************************
@ -498,9 +584,9 @@ FT_BEGIN_HEADER
* The glyph image is translated with the `origin` vector before * The glyph image is translated with the `origin` vector before
* rendering. * rendering.
* *
* The first parameter is a pointer to an @FT_Glyph handle, that will be * The first parameter is a pointer to an @FT_Glyph handle that will be
* _replaced_ by this function (with newly allocated data). Typically, * _replaced_ by this function (with newly allocated data). Typically,
* you would use (omitting error handling): * you would do something like the following (omitting error handling).
* *
* ``` * ```
* FT_Glyph glyph; * FT_Glyph glyph;
@ -517,7 +603,7 @@ FT_BEGIN_HEADER
* if ( glyph->format != FT_GLYPH_FORMAT_BITMAP ) * if ( glyph->format != FT_GLYPH_FORMAT_BITMAP )
* { * {
* error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_NORMAL, * error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_NORMAL,
* 0, 1 ); * 0, 1 );
* if ( error ) // `glyph' unchanged * if ( error ) // `glyph' unchanged
* ... * ...
* } * }
@ -532,7 +618,7 @@ FT_BEGIN_HEADER
* FT_Done_Glyph( glyph ); * FT_Done_Glyph( glyph );
* ``` * ```
* *
* Here is another example, again without error handling: * Here is another example, again without error handling.
* *
* ``` * ```
* FT_Glyph glyphs[MAX_GLYPHS] * FT_Glyph glyphs[MAX_GLYPHS]
@ -569,10 +655,10 @@ FT_BEGIN_HEADER
* ``` * ```
*/ */
FT_EXPORT( FT_Error ) FT_EXPORT( FT_Error )
FT_Glyph_To_Bitmap( FT_Glyph* the_glyph, FT_Glyph_To_Bitmap( FT_Glyph* the_glyph,
FT_Render_Mode render_mode, FT_Render_Mode render_mode,
FT_Vector* origin, const FT_Vector* origin,
FT_Bool destroy ); FT_Bool destroy );
/************************************************************************** /**************************************************************************

View File

@ -4,7 +4,7 @@
* *
* Gzip-compressed stream support. * Gzip-compressed stream support.
* *
* Copyright (C) 2002-2020 by * Copyright (C) 2002-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -5,7 +5,7 @@
* FreeType glyph image formats and default raster interface * FreeType glyph image formats and default raster interface
* (specification). * (specification).
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -28,11 +28,6 @@
#define FTIMAGE_H_ #define FTIMAGE_H_
/* STANDALONE_ is from ftgrays.c */
#ifndef STANDALONE_
#endif
FT_BEGIN_HEADER FT_BEGIN_HEADER
@ -201,6 +196,11 @@ FT_BEGIN_HEADER
#define ft_pixel_mode_pal2 FT_PIXEL_MODE_GRAY2 #define ft_pixel_mode_pal2 FT_PIXEL_MODE_GRAY2
#define ft_pixel_mode_pal4 FT_PIXEL_MODE_GRAY4 #define ft_pixel_mode_pal4 FT_PIXEL_MODE_GRAY4
/* */
/* For debugging, the @FT_Pixel_Mode enumeration must stay in sync */
/* with the `pixel_modes` array in file `ftobjs.c`. */
/************************************************************************** /**************************************************************************
* *
@ -401,11 +401,11 @@ FT_BEGIN_HEADER
* information. * information.
* *
* FT_OUTLINE_OVERLAP :: * FT_OUTLINE_OVERLAP ::
* This flag indicates that this outline contains overlapping contrours * [Since 2.10.3] This flag indicates that this outline contains
* and the anti-aliased renderer should perform oversampling to * overlapping contours and the anti-aliased renderer should perform
* mitigate possible artifacts. This flag should _not_ be set for * oversampling to mitigate possible artifacts. This flag should _not_
* well designed glyphs without overlaps because it quadruples the * be set for well designed glyphs without overlaps because it quadruples
* rendering time. * the rendering time.
* *
* FT_OUTLINE_HIGH_PRECISION :: * FT_OUTLINE_HIGH_PRECISION ::
* This flag indicates that the scan-line converter should try to * This flag indicates that the scan-line converter should try to
@ -695,11 +695,13 @@ FT_BEGIN_HEADER
* to get a simple enumeration without assigning special numbers. * to get a simple enumeration without assigning special numbers.
*/ */
#ifndef FT_IMAGE_TAG #ifndef FT_IMAGE_TAG
#define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) \
value = ( ( (unsigned long)_x1 << 24 ) | \ #define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) \
( (unsigned long)_x2 << 16 ) | \ value = ( ( FT_STATIC_BYTE_CAST( unsigned long, _x1 ) << 24 ) | \
( (unsigned long)_x3 << 8 ) | \ ( FT_STATIC_BYTE_CAST( unsigned long, _x2 ) << 16 ) | \
(unsigned long)_x4 ) ( FT_STATIC_BYTE_CAST( unsigned long, _x3 ) << 8 ) | \
FT_STATIC_BYTE_CAST( unsigned long, _x4 ) )
#endif /* FT_IMAGE_TAG */ #endif /* FT_IMAGE_TAG */
@ -739,6 +741,10 @@ FT_BEGIN_HEADER
* contours. Some Type~1 fonts, like those in the Hershey family, * contours. Some Type~1 fonts, like those in the Hershey family,
* contain glyphs in this format. These are described as @FT_Outline, * contain glyphs in this format. These are described as @FT_Outline,
* but FreeType isn't currently capable of rendering them correctly. * but FreeType isn't currently capable of rendering them correctly.
*
* FT_GLYPH_FORMAT_SVG ::
* [Since 2.12] The glyph is represented by an SVG document in the
* 'SVG~' table.
*/ */
typedef enum FT_Glyph_Format_ typedef enum FT_Glyph_Format_
{ {
@ -747,7 +753,8 @@ FT_BEGIN_HEADER
FT_IMAGE_TAG( FT_GLYPH_FORMAT_COMPOSITE, 'c', 'o', 'm', 'p' ), FT_IMAGE_TAG( FT_GLYPH_FORMAT_COMPOSITE, 'c', 'o', 'm', 'p' ),
FT_IMAGE_TAG( FT_GLYPH_FORMAT_BITMAP, 'b', 'i', 't', 's' ), FT_IMAGE_TAG( FT_GLYPH_FORMAT_BITMAP, 'b', 'i', 't', 's' ),
FT_IMAGE_TAG( FT_GLYPH_FORMAT_OUTLINE, 'o', 'u', 't', 'l' ), FT_IMAGE_TAG( FT_GLYPH_FORMAT_OUTLINE, 'o', 'u', 't', 'l' ),
FT_IMAGE_TAG( FT_GLYPH_FORMAT_PLOTTER, 'p', 'l', 'o', 't' ) FT_IMAGE_TAG( FT_GLYPH_FORMAT_PLOTTER, 'p', 'l', 'o', 't' ),
FT_IMAGE_TAG( FT_GLYPH_FORMAT_SVG, 'S', 'V', 'G', ' ' )
} FT_Glyph_Format; } FT_Glyph_Format;
@ -772,17 +779,6 @@ FT_BEGIN_HEADER
/*************************************************************************/ /*************************************************************************/
/**************************************************************************
*
* A raster is a scan converter, in charge of rendering an outline into a
* bitmap. This section contains the public API for rasters.
*
* Note that in FreeType 2, all rasters are now encapsulated within
* specific modules called 'renderers'. See `ftrender.h` for more details
* on renderers.
*
*/
/************************************************************************** /**************************************************************************
* *
@ -796,16 +792,35 @@ FT_BEGIN_HEADER
* How vectorial outlines are converted into bitmaps and pixmaps. * How vectorial outlines are converted into bitmaps and pixmaps.
* *
* @description: * @description:
* This section contains technical definitions. * A raster or a rasterizer is a scan converter in charge of producing a
* pixel coverage bitmap that can be used as an alpha channel when
* compositing a glyph with a background. FreeType comes with two
* rasterizers: bilevel `raster1` and anti-aliased `smooth` are two
* separate modules. They are usually called from the high-level
* @FT_Load_Glyph or @FT_Render_Glyph functions and produce the entire
* coverage bitmap at once, while staying largely invisible to users.
*
* Instead of working with complete coverage bitmaps, it is also possible
* to intercept consecutive pixel runs on the same scanline with the same
* coverage, called _spans_, and process them individually. Only the
* `smooth` rasterizer permits this when calling @FT_Outline_Render with
* @FT_Raster_Params as described below.
*
* Working with either complete bitmaps or spans it is important to think
* of them as colorless coverage objects suitable as alpha channels to
* blend arbitrary colors with a background. For best results, it is
* recommended to use gamma correction, too.
*
* This section also describes the public API needed to set up alternative
* @FT_Renderer modules.
* *
* @order: * @order:
* FT_Raster
* FT_Span * FT_Span
* FT_SpanFunc * FT_SpanFunc
*
* FT_Raster_Params * FT_Raster_Params
* FT_RASTER_FLAG_XXX * FT_RASTER_FLAG_XXX
* *
* FT_Raster
* FT_Raster_NewFunc * FT_Raster_NewFunc
* FT_Raster_DoneFunc * FT_Raster_DoneFunc
* FT_Raster_ResetFunc * FT_Raster_ResetFunc
@ -816,26 +831,14 @@ FT_BEGIN_HEADER
*/ */
/**************************************************************************
*
* @type:
* FT_Raster
*
* @description:
* An opaque handle (pointer) to a raster object. Each object can be
* used independently to convert an outline into a bitmap or pixmap.
*/
typedef struct FT_RasterRec_* FT_Raster;
/************************************************************************** /**************************************************************************
* *
* @struct: * @struct:
* FT_Span * FT_Span
* *
* @description: * @description:
* A structure used to model a single span of gray pixels when rendering * A structure to model a single span of consecutive pixels when
* an anti-aliased bitmap. * rendering an anti-aliased bitmap.
* *
* @fields: * @fields:
* x :: * x ::
@ -852,8 +855,8 @@ FT_BEGIN_HEADER
* This structure is used by the span drawing callback type named * This structure is used by the span drawing callback type named
* @FT_SpanFunc that takes the y~coordinate of the span as a parameter. * @FT_SpanFunc that takes the y~coordinate of the span as a parameter.
* *
* The coverage value is always between 0 and 255. If you want less gray * The anti-aliased rasterizer produces coverage values from 0 to 255,
* values, the callback function has to reduce them. * this is, from completely transparent to completely opaque.
*/ */
typedef struct FT_Span_ typedef struct FT_Span_
{ {
@ -871,8 +874,8 @@ FT_BEGIN_HEADER
* *
* @description: * @description:
* A function used as a call-back by the anti-aliased renderer in order * A function used as a call-back by the anti-aliased renderer in order
* to let client applications draw themselves the gray pixel spans on * to let client applications draw themselves the pixel spans on each
* each scan line. * scan line.
* *
* @input: * @input:
* y :: * y ::
@ -888,11 +891,12 @@ FT_BEGIN_HEADER
* User-supplied data that is passed to the callback. * User-supplied data that is passed to the callback.
* *
* @note: * @note:
* This callback allows client applications to directly render the gray * This callback allows client applications to directly render the spans
* spans of the anti-aliased bitmap to any kind of surfaces. * of the anti-aliased bitmap to any kind of surfaces.
* *
* This can be used to write anti-aliased outlines directly to a given * This can be used to write anti-aliased outlines directly to a given
* background bitmap, and even perform translucency. * background bitmap using alpha compositing. It can also be used for
* oversampling and averaging.
*/ */
typedef void typedef void
(*FT_SpanFunc)( int y, (*FT_SpanFunc)( int y,
@ -962,11 +966,17 @@ FT_BEGIN_HEADER
* will be clipped to a box specified in the `clip_box` field of the * will be clipped to a box specified in the `clip_box` field of the
* @FT_Raster_Params structure. Otherwise, the `clip_box` is * @FT_Raster_Params structure. Otherwise, the `clip_box` is
* effectively set to the bounding box and all spans are generated. * effectively set to the bounding box and all spans are generated.
*
* FT_RASTER_FLAG_SDF ::
* This flag is set to indicate that a signed distance field glyph
* image should be generated. This is only used while rendering with
* the @FT_RENDER_MODE_SDF render mode.
*/ */
#define FT_RASTER_FLAG_DEFAULT 0x0 #define FT_RASTER_FLAG_DEFAULT 0x0
#define FT_RASTER_FLAG_AA 0x1 #define FT_RASTER_FLAG_AA 0x1
#define FT_RASTER_FLAG_DIRECT 0x2 #define FT_RASTER_FLAG_DIRECT 0x2
#define FT_RASTER_FLAG_CLIP 0x4 #define FT_RASTER_FLAG_CLIP 0x4
#define FT_RASTER_FLAG_SDF 0x8
/* these constants are deprecated; use the corresponding */ /* these constants are deprecated; use the corresponding */
/* `FT_RASTER_FLAG_XXX` values instead */ /* `FT_RASTER_FLAG_XXX` values instead */
@ -1047,6 +1057,23 @@ FT_BEGIN_HEADER
} FT_Raster_Params; } FT_Raster_Params;
/**************************************************************************
*
* @type:
* FT_Raster
*
* @description:
* An opaque handle (pointer) to a raster object. Each object can be
* used independently to convert an outline into a bitmap or pixmap.
*
* @note:
* In FreeType 2, all rasters are now encapsulated within specific
* @FT_Renderer modules and only used in their context.
*
*/
typedef struct FT_RasterRec_* FT_Raster;
/************************************************************************** /**************************************************************************
* *
* @functype: * @functype:

View File

@ -4,7 +4,7 @@
* *
* FreeType incremental loading (specification). * FreeType incremental loading (specification).
* *
* Copyright (C) 2002-2020 by * Copyright (C) 2002-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -213,9 +213,14 @@ FT_BEGIN_HEADER
* *
* @description: * @description:
* A function used to retrieve the basic metrics of a given glyph index * A function used to retrieve the basic metrics of a given glyph index
* before accessing its data. This is necessary because, in certain * before accessing its data. This allows for handling font types such
* formats like TrueType, the metrics are stored in a different place * as PCL~XL Format~1, Class~2 downloaded TrueType fonts, where the glyph
* from the glyph images proper. * metrics (`hmtx` and `vmtx` tables) are permitted to be omitted from
* the font, and the relevant metrics included in the header of the glyph
* outline data. Importantly, this is not intended to allow custom glyph
* metrics (for example, Postscript Metrics dictionaries), because that
* conflicts with the requirements of outline hinting. Such custom
* metrics must be handled separately, by the calling application.
* *
* @input: * @input:
* incremental :: * incremental ::
@ -235,7 +240,7 @@ FT_BEGIN_HEADER
* *
* @output: * @output:
* ametrics :: * ametrics ::
* The replacement glyph metrics in font units. * The glyph metrics in font units.
* *
*/ */
typedef FT_Error typedef FT_Error
@ -264,7 +269,7 @@ FT_BEGIN_HEADER
* *
* get_glyph_metrics :: * get_glyph_metrics ::
* The function to get glyph metrics. May be null if the font does not * The function to get glyph metrics. May be null if the font does not
* provide overriding glyph metrics. * require it.
* *
*/ */
typedef struct FT_Incremental_FuncsRec_ typedef struct FT_Incremental_FuncsRec_

View File

@ -5,7 +5,7 @@
* FreeType API for color filtering of subpixel bitmap glyphs * FreeType API for color filtering of subpixel bitmap glyphs
* (specification). * (specification).
* *
* Copyright (C) 2006-2020 by * Copyright (C) 2006-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -55,13 +55,12 @@ FT_BEGIN_HEADER
* ClearType-style LCD rendering exploits the color-striped structure of * ClearType-style LCD rendering exploits the color-striped structure of
* LCD pixels, increasing the available resolution in the direction of * LCD pixels, increasing the available resolution in the direction of
* the stripe (usually horizontal RGB) by a factor of~3. Using the * the stripe (usually horizontal RGB) by a factor of~3. Using the
* subpixels coverages unfiltered can create severe color fringes * subpixel coverages unfiltered can create severe color fringes
* especially when rendering thin features. Indeed, to produce * especially when rendering thin features. Indeed, to produce
* black-on-white text, the nearby color subpixels must be dimmed * black-on-white text, the nearby color subpixels must be dimmed
* equally. * evenly. Therefore, an equalizing 5-tap FIR filter should be applied
* * to subpixel coverages regardless of pixel boundaries and should have
* A good 5-tap FIR filter should be applied to subpixel coverages * these properties:
* regardless of pixel boundaries and should have these properties:
* *
* 1. It should be symmetrical, like {~a, b, c, b, a~}, to avoid * 1. It should be symmetrical, like {~a, b, c, b, a~}, to avoid
* any shifts in appearance. * any shifts in appearance.
@ -84,7 +83,7 @@ FT_BEGIN_HEADER
* Harmony LCD rendering is suitable to panels with any regular subpixel * Harmony LCD rendering is suitable to panels with any regular subpixel
* structure, not just monitors with 3 color striped subpixels, as long * structure, not just monitors with 3 color striped subpixels, as long
* as the color subpixels have fixed positions relative to the pixel * as the color subpixels have fixed positions relative to the pixel
* center. In this case, each color channel is then rendered separately * center. In this case, each color channel can be rendered separately
* after shifting the outline opposite to the subpixel shift so that the * after shifting the outline opposite to the subpixel shift so that the
* coverage maps are aligned. This method is immune to color fringes * coverage maps are aligned. This method is immune to color fringes
* because the shifts do not change integral coverage. * because the shifts do not change integral coverage.
@ -101,9 +100,9 @@ FT_BEGIN_HEADER
* clockwise. Harmony with default LCD geometry is equivalent to * clockwise. Harmony with default LCD geometry is equivalent to
* ClearType with light filter. * ClearType with light filter.
* *
* As a result of ClearType filtering or Harmony rendering, the * As a result of ClearType filtering or Harmony shifts, the resulting
* dimensions of LCD bitmaps can be either wider or taller than the * dimensions of LCD bitmaps can be slightly wider or taller than the
* dimensions of the corresponding outline with regard to the pixel grid. * dimensions the original outline with regard to the pixel grid.
* For example, for @FT_RENDER_MODE_LCD, the filter adds 2~subpixels to * For example, for @FT_RENDER_MODE_LCD, the filter adds 2~subpixels to
* the left, and 2~subpixels to the right. The bitmap offset values are * the left, and 2~subpixels to the right. The bitmap offset values are
* adjusted accordingly, so clients shouldn't need to modify their layout * adjusted accordingly, so clients shouldn't need to modify their layout

View File

@ -4,7 +4,7 @@
* *
* Generic list support for FreeType (specification). * Generic list support for FreeType (specification).
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -0,0 +1,184 @@
/****************************************************************************
*
* ftlogging.h
*
* Additional debugging APIs.
*
* Copyright (C) 2020-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
* modified, and distributed under the terms of the FreeType project
* license, LICENSE.TXT. By continuing to use, modify, or distribute
* this file you indicate that you have read the license and
* understand and accept it fully.
*
*/
#ifndef FTLOGGING_H_
#define FTLOGGING_H_
#include <ft2build.h>
#include FT_CONFIG_CONFIG_H
FT_BEGIN_HEADER
/**************************************************************************
*
* @section:
* debugging_apis
*
* @title:
* External Debugging APIs
*
* @abstract:
* Public APIs to control the `FT_DEBUG_LOGGING` macro.
*
* @description:
* This section contains the declarations of public functions that
* enables fine control of what the `FT_DEBUG_LOGGING` macro outputs.
*
*/
/**************************************************************************
*
* @function:
* FT_Trace_Set_Level
*
* @description:
* Change the levels of tracing components of FreeType at run time.
*
* @input:
* tracing_level ::
* New tracing value.
*
* @example:
* The following call makes FreeType trace everything but the 'memory'
* component.
*
* ```
* FT_Trace_Set_Level( "any:7 memory:0 );
* ```
*
* @note:
* This function does nothing if compilation option `FT_DEBUG_LOGGING`
* isn't set.
*
* @since:
* 2.11
*
*/
FT_EXPORT( void )
FT_Trace_Set_Level( const char* tracing_level );
/**************************************************************************
*
* @function:
* FT_Trace_Set_Default_Level
*
* @description:
* Reset tracing value of FreeType's components to the default value
* (i.e., to the value of the `FT2_DEBUG` environment value or to NULL
* if `FT2_DEBUG` is not set).
*
* @note:
* This function does nothing if compilation option `FT_DEBUG_LOGGING`
* isn't set.
*
* @since:
* 2.11
*
*/
FT_EXPORT( void )
FT_Trace_Set_Default_Level( void );
/**************************************************************************
*
* @functype:
* FT_Custom_Log_Handler
*
* @description:
* A function typedef that is used to handle the logging of tracing and
* debug messages on a file system.
*
* @input:
* ft_component ::
* The name of `FT_COMPONENT` from which the current debug or error
* message is produced.
*
* fmt ::
* Actual debug or tracing message.
*
* args::
* Arguments of debug or tracing messages.
*
* @since:
* 2.11
*
*/
typedef void
(*FT_Custom_Log_Handler)( const char* ft_component,
const char* fmt,
va_list args );
/**************************************************************************
*
* @function:
* FT_Set_Log_Handler
*
* @description:
* A function to set a custom log handler.
*
* @input:
* handler ::
* New logging function.
*
* @note:
* This function does nothing if compilation option `FT_DEBUG_LOGGING`
* isn't set.
*
* @since:
* 2.11
*
*/
FT_EXPORT( void )
FT_Set_Log_Handler( FT_Custom_Log_Handler handler );
/**************************************************************************
*
* @function:
* FT_Set_Default_Log_Handler
*
* @description:
* A function to undo the effect of @FT_Set_Log_Handler, resetting the
* log handler to FreeType's built-in version.
*
* @note:
* This function does nothing if compilation option `FT_DEBUG_LOGGING`
* isn't set.
*
* @since:
* 2.11
*
*/
FT_EXPORT( void )
FT_Set_Default_Log_Handler( void );
/* */
FT_END_HEADER
#endif /* FTLOGGING_H_ */
/* END */

View File

@ -4,7 +4,7 @@
* *
* Additional Mac-specific API. * Additional Mac-specific API.
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. * Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -4,7 +4,7 @@
* *
* FreeType Multiple Master font interface (specification). * FreeType Multiple Master font interface (specification).
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -47,6 +47,9 @@ FT_BEGIN_HEADER
* MM fonts, others will work with all three types. They are similar * MM fonts, others will work with all three types. They are similar
* enough that a consistent interface makes sense. * enough that a consistent interface makes sense.
* *
* For Adobe MM fonts, macro @FT_IS_SFNT returns false. For GX and
* OpenType variation fonts, it returns true.
*
*/ */

View File

@ -4,7 +4,7 @@
* *
* FreeType modules public interface (specification). * FreeType modules public interface (specification).
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -45,10 +45,12 @@ FT_BEGIN_HEADER
* *
* @description: * @description:
* The definitions below are used to manage modules within FreeType. * The definitions below are used to manage modules within FreeType.
* Modules can be added, upgraded, and removed at runtime. Additionally, * Internal and external modules can be added, upgraded, and removed at
* some module properties can be controlled also. * runtime. For example, an alternative renderer or proprietary font
* driver can be registered and prioritized. Additionally, some module
* properties can also be controlled.
* *
* Here is a list of possible values of the `module_name` field in the * Here is a list of existing values of the `module_name` field in the
* @FT_Module_Class structure. * @FT_Module_Class structure.
* *
* ``` * ```
@ -86,6 +88,7 @@ FT_BEGIN_HEADER
* FT_Remove_Module * FT_Remove_Module
* FT_Add_Default_Modules * FT_Add_Default_Modules
* *
* FT_FACE_DRIVER_NAME
* FT_Property_Set * FT_Property_Set
* FT_Property_Get * FT_Property_Get
* FT_Set_Default_Properties * FT_Set_Default_Properties
@ -328,6 +331,27 @@ FT_BEGIN_HEADER
FT_Module module ); FT_Module module );
/**************************************************************************
*
* @macro:
* FT_FACE_DRIVER_NAME
*
* @description:
* A macro that retrieves the name of a font driver from a face object.
*
* @note:
* The font driver name is a valid `module_name` for @FT_Property_Set
* and @FT_Property_Get. This is not the same as @FT_Get_Font_Format.
*
* @since:
* 2.11
*
*/
#define FT_FACE_DRIVER_NAME( face ) \
( ( *FT_REINTERPRET_CAST( FT_Module_Class**, \
( face )->driver ) )->module_name )
/************************************************************************** /**************************************************************************
* *
* @function: * @function:
@ -485,8 +509,7 @@ FT_BEGIN_HEADER
* *
* ``` * ```
* FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ * FREETYPE_PROPERTIES=truetype:interpreter-version=35 \
* cff:no-stem-darkening=0 \ * cff:no-stem-darkening=0
* autofitter:warping=1
* ``` * ```
* *
* @inout: * @inout:

View File

@ -4,7 +4,7 @@
* *
* FreeType module error offsets (specification). * FreeType module error offsets (specification).
* *
* Copyright (C) 2001-2020 by * Copyright (C) 2001-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -171,6 +171,7 @@
FT_MODERRDEF( Type42, 0x1400, "Type 42 module" ) FT_MODERRDEF( Type42, 0x1400, "Type 42 module" )
FT_MODERRDEF( Winfonts, 0x1500, "Windows FON/FNT module" ) FT_MODERRDEF( Winfonts, 0x1500, "Windows FON/FNT module" )
FT_MODERRDEF( GXvalid, 0x1600, "GX validation module" ) FT_MODERRDEF( GXvalid, 0x1600, "GX validation module" )
FT_MODERRDEF( Sdf, 0x1700, "Signed distance field raster module" )
#ifdef FT_MODERR_END_LIST #ifdef FT_MODERR_END_LIST

View File

@ -5,7 +5,7 @@
* Support for the FT_Outline type used to store glyph shapes of * Support for the FT_Outline type used to store glyph shapes of
* most scalable font formats (specification). * most scalable font formats (specification).
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -109,11 +109,13 @@ FT_BEGIN_HEADER
* FreeType error code. 0~means success. * FreeType error code. 0~means success.
* *
* @note: * @note:
* A contour that contains a single point only is represented by a 'move * Degenerate contours, segments, and Bezier arcs may be reported. In
* to' operation followed by 'line to' to the same point. In most cases, * most cases, it is best to filter these out before using the outline
* it is best to filter this out before using the outline for stroking * for stroking or other path modification purposes (which may cause
* purposes (otherwise it would result in a visible dot when round caps * degenerate segments to become non-degenrate and visible, like when
* are used). * stroke caps are used or the path is otherwise outset). Some glyph
* outlines may contain deliberate degenerate single points for mark
* attachement.
* *
* Similarly, the function returns success for an empty outline also * Similarly, the function returns success for an empty outline also
* (doing nothing, this is, not calling any emitter); if necessary, you * (doing nothing, this is, not calling any emitter); if necessary, you

View File

@ -4,7 +4,7 @@
* *
* FreeType API for possible FT_Parameter tags (specification only). * FreeType API for possible FT_Parameter tags (specification only).
* *
* Copyright (C) 2017-2020 by * Copyright (C) 2017-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -112,6 +112,21 @@ FT_BEGIN_HEADER
FT_MAKE_TAG( 'i', 'n', 'c', 'r' ) FT_MAKE_TAG( 'i', 'n', 'c', 'r' )
/**************************************************************************
*
* @enum:
* FT_PARAM_TAG_IGNORE_SBIX
*
* @description:
* A tag for @FT_Parameter to make @FT_Open_Face ignore an 'sbix' table
* while loading a font. Use this if @FT_FACE_FLAG_SBIX is set and you
* want to access the outline glyphs in the font.
*
*/
#define FT_PARAM_TAG_IGNORE_SBIX \
FT_MAKE_TAG( 'i', 's', 'b', 'x' )
/************************************************************************** /**************************************************************************
* *
* @enum: * @enum:

View File

@ -4,7 +4,7 @@
* *
* FreeType renderer modules public interface (specification). * FreeType renderer modules public interface (specification).
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -4,7 +4,7 @@
* *
* FreeType size objects management (specification). * FreeType size objects management (specification).
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -7,7 +7,7 @@
* *
* This is _not_ used to retrieve glyph names! * This is _not_ used to retrieve glyph names!
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -4,7 +4,7 @@
* *
* FreeType path stroker (specification). * FreeType path stroker (specification).
* *
* Copyright (C) 2002-2020 by * Copyright (C) 2002-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -5,7 +5,7 @@
* FreeType synthesizing code for emboldening and slanting * FreeType synthesizing code for emboldening and slanting
* (specification). * (specification).
* *
* Copyright (C) 2000-2020 by * Copyright (C) 2000-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -4,7 +4,7 @@
* *
* FreeType low-level system interface definition (specification). * FreeType low-level system interface definition (specification).
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -4,7 +4,7 @@
* *
* FreeType trigonometric functions (specification). * FreeType trigonometric functions (specification).
* *
* Copyright (C) 2001-2020 by * Copyright (C) 2001-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -4,7 +4,7 @@
* *
* FreeType simple types definitions (specification only). * FreeType simple types definitions (specification only).
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -413,7 +413,7 @@ FT_BEGIN_HEADER
typedef struct FT_Data_ typedef struct FT_Data_
{ {
const FT_Byte* pointer; const FT_Byte* pointer;
FT_Int length; FT_UInt length;
} FT_Data; } FT_Data;
@ -479,18 +479,17 @@ FT_BEGIN_HEADER
* *
* @description: * @description:
* This macro converts four-letter tags that are used to label TrueType * This macro converts four-letter tags that are used to label TrueType
* tables into an unsigned long, to be used within FreeType. * tables into an `FT_Tag` type, to be used within FreeType.
* *
* @note: * @note:
* The produced values **must** be 32-bit integers. Don't redefine this * The produced values **must** be 32-bit integers. Don't redefine this
* macro. * macro.
*/ */
#define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \ #define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \
(FT_Tag) \ ( ( FT_STATIC_BYTE_CAST( FT_Tag, _x1 ) << 24 ) | \
( ( (FT_ULong)_x1 << 24 ) | \ ( FT_STATIC_BYTE_CAST( FT_Tag, _x2 ) << 16 ) | \
( (FT_ULong)_x2 << 16 ) | \ ( FT_STATIC_BYTE_CAST( FT_Tag, _x3 ) << 8 ) | \
( (FT_ULong)_x3 << 8 ) | \ FT_STATIC_BYTE_CAST( FT_Tag, _x4 ) )
(FT_ULong)_x4 )
/*************************************************************************/ /*************************************************************************/
@ -588,7 +587,7 @@ FT_BEGIN_HEADER
#define FT_IS_EMPTY( list ) ( (list).head == 0 ) #define FT_IS_EMPTY( list ) ( (list).head == 0 )
#define FT_BOOL( x ) ( (FT_Bool)( (x) != 0 ) ) #define FT_BOOL( x ) FT_STATIC_CAST( FT_Bool, (x) != 0 )
/* concatenate C tokens */ /* concatenate C tokens */
#define FT_ERR_XCAT( x, y ) x ## y #define FT_ERR_XCAT( x, y ) x ## y

View File

@ -4,7 +4,7 @@
* *
* High-level 'autohint' module-specific interface (specification). * High-level 'autohint' module-specific interface (specification).
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -4,7 +4,7 @@
* *
* Basic OpenType/CFF object type definitions (specification). * Basic OpenType/CFF object type definitions (specification).
* *
* Copyright (C) 2017-2020 by * Copyright (C) 2017-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -5,7 +5,7 @@
* Basic OpenType/CFF type definitions and interface (specification * Basic OpenType/CFF type definitions and interface (specification
* only). * only).
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -4,7 +4,7 @@
* *
* Compiler-specific macro definitions used internally by FreeType. * Compiler-specific macro definitions used internally by FreeType.
* *
* Copyright (C) 2020 by * Copyright (C) 2020-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -71,12 +71,18 @@ FT_BEGIN_HEADER
*/ */
#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT #define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
#ifdef _WIN64 #ifdef __UINTPTR_TYPE__
/*
* GCC and Clang both provide a `__UINTPTR_TYPE__` that can be used to
* avoid a dependency on `stdint.h`.
*/
# define FT_UINT_TO_POINTER( x ) (void *)(__UINTPTR_TYPE__)(x)
#elif defined( _WIN64 )
/* only 64bit Windows uses the LLP64 data model, i.e., */ /* only 64bit Windows uses the LLP64 data model, i.e., */
/* 32-bit integers, 64-bit pointers. */ /* 32-bit integers, 64-bit pointers. */
#define FT_UINT_TO_POINTER( x ) (void *)(unsigned __int64)(x) # define FT_UINT_TO_POINTER( x ) (void *)(unsigned __int64)(x)
#else #else
#define FT_UINT_TO_POINTER( x ) (void *)(unsigned long)(x) # define FT_UINT_TO_POINTER( x ) (void *)(unsigned long)(x)
#endif #endif
/* /*
@ -216,79 +222,93 @@ FT_BEGIN_HEADER
#define FT_EXPORT_VAR( x ) FT_FUNCTION_DECLARATION( x ) #define FT_EXPORT_VAR( x ) FT_FUNCTION_DECLARATION( x )
#endif #endif
/* When compiling FreeType as a DLL or DSO with hidden visibility, */ /*
/* some systems/compilers need a special attribute in front OR after */ * When compiling FreeType as a DLL or DSO with hidden visibility,
/* the return type of function declarations. */ * some systems/compilers need a special attribute in front OR after
/* */ * the return type of function declarations.
/* Two macros are used within the FreeType source code to define */ *
/* exported library functions: `FT_EXPORT` and `FT_EXPORT_DEF`. */ * Two macros are used within the FreeType source code to define
/* */ * exported library functions: `FT_EXPORT` and `FT_EXPORT_DEF`.
/* - `FT_EXPORT( return_type )` */ *
/* */ * - `FT_EXPORT( return_type )`
/* is used in a function declaration, as in */ *
/* */ * is used in a function declaration, as in
/* ``` */ *
/* FT_EXPORT( FT_Error ) */ * ```
/* FT_Init_FreeType( FT_Library* alibrary ); */ * FT_EXPORT( FT_Error )
/* ``` */ * FT_Init_FreeType( FT_Library* alibrary );
/* */ * ```
/* - `FT_EXPORT_DEF( return_type )` */ *
/* */ * - `FT_EXPORT_DEF( return_type )`
/* is used in a function definition, as in */ *
/* */ * is used in a function definition, as in
/* ``` */ *
/* FT_EXPORT_DEF( FT_Error ) */ * ```
/* FT_Init_FreeType( FT_Library* alibrary ) */ * FT_EXPORT_DEF( FT_Error )
/* { */ * FT_Init_FreeType( FT_Library* alibrary )
/* ... some code ... */ * {
/* return FT_Err_Ok; */ * ... some code ...
/* } */ * return FT_Err_Ok;
/* ``` */ * }
/* */ * ```
/* You can provide your own implementation of `FT_EXPORT` and */ *
/* `FT_EXPORT_DEF` here if you want. */ * You can provide your own implementation of `FT_EXPORT` and
/* */ * `FT_EXPORT_DEF` here if you want.
/* To export a variable, use `FT_EXPORT_VAR`. */ *
/* */ * To export a variable, use `FT_EXPORT_VAR`.
*/
/* See `freetype/config/compiler_macros.h` for the `FT_EXPORT` definition */ /* See `freetype/config/compiler_macros.h` for the `FT_EXPORT` definition */
#define FT_EXPORT_DEF( x ) FT_FUNCTION_DEFINITION( x ) #define FT_EXPORT_DEF( x ) FT_FUNCTION_DEFINITION( x )
/* The following macros are needed to compile the library with a */ /*
/* C++ compiler and with 16bit compilers. */ * The following macros are needed to compile the library with a
/* */ * C++ compiler and with 16bit compilers.
*/
/* This is special. Within C++, you must specify `extern "C"` for */ /*
/* functions which are used via function pointers, and you also */ * This is special. Within C++, you must specify `extern "C"` for
/* must do that for structures which contain function pointers to */ * functions which are used via function pointers, and you also
/* assure C linkage -- it's not possible to have (local) anonymous */ * must do that for structures which contain function pointers to
/* functions which are accessed by (global) function pointers. */ * assure C linkage -- it's not possible to have (local) anonymous
/* */ * functions which are accessed by (global) function pointers.
/* */ *
/* FT_CALLBACK_DEF is used to _define_ a callback function, */ *
/* located in the same source code file as the structure that uses */ * FT_CALLBACK_DEF is used to _define_ a callback function,
/* it. */ * located in the same source code file as the structure that uses
/* */ * it. FT_COMPARE_DEF, in addition, ensures the `cdecl` calling
/* FT_BASE_CALLBACK and FT_BASE_CALLBACK_DEF are used to declare */ * convention on x86, required by the C library function `qsort`.
/* and define a callback function, respectively, in a similar way */ *
/* as FT_BASE and FT_BASE_DEF work. */ * FT_BASE_CALLBACK and FT_BASE_CALLBACK_DEF are used to declare
/* */ * and define a callback function, respectively, in a similar way
/* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */ * as FT_BASE and FT_BASE_DEF work.
/* contains pointers to callback functions. */ *
/* */ * FT_CALLBACK_TABLE is used to _declare_ a constant variable that
/* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */ * contains pointers to callback functions.
/* that contains pointers to callback functions. */ *
/* */ * FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable
/* */ * that contains pointers to callback functions.
/* Some 16bit compilers have to redefine these macros to insert */ *
/* the infamous `_cdecl` or `__fastcall` declarations. */ *
/* */ * Some 16bit compilers have to redefine these macros to insert
* the infamous `_cdecl` or `__fastcall` declarations.
*/
#ifdef __cplusplus #ifdef __cplusplus
#define FT_CALLBACK_DEF( x ) extern "C" x #define FT_CALLBACK_DEF( x ) extern "C" x
#else #else
#define FT_CALLBACK_DEF( x ) static x #define FT_CALLBACK_DEF( x ) static x
#endif #endif
#if defined( __GNUC__ ) && defined( __i386__ )
#define FT_COMPARE_DEF( x ) FT_CALLBACK_DEF( x ) __attribute__(( cdecl ))
#elif defined( _MSC_VER ) && defined( _M_IX86 )
#define FT_COMPARE_DEF( x ) FT_CALLBACK_DEF( x ) __cdecl
#elif defined( __WATCOMC__ ) && __WATCOMC__ >= 1240
#define FT_COMPARE_DEF( x ) FT_CALLBACK_DEF( x ) __watcall
#else
#define FT_COMPARE_DEF( x ) FT_CALLBACK_DEF( x )
#endif
#define FT_BASE_CALLBACK( x ) FT_FUNCTION_DECLARATION( x ) #define FT_BASE_CALLBACK( x ) FT_FUNCTION_DECLARATION( x )
#define FT_BASE_CALLBACK_DEF( x ) FT_FUNCTION_DEFINITION( x ) #define FT_BASE_CALLBACK_DEF( x ) FT_FUNCTION_DEFINITION( x )

View File

@ -4,7 +4,7 @@
* *
* Arithmetic computations (specification). * Arithmetic computations (specification).
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -359,8 +359,8 @@ FT_BEGIN_HEADER
#ifndef FT_CONFIG_OPTION_NO_ASSEMBLER #ifndef FT_CONFIG_OPTION_NO_ASSEMBLER
#if defined( __GNUC__ ) && \ #if defined( __clang__ ) || ( defined( __GNUC__ ) && \
( __GNUC__ > 3 || ( __GNUC__ == 3 && __GNUC_MINOR__ >= 4 ) ) ( __GNUC__ > 3 || ( __GNUC__ == 3 && __GNUC_MINOR__ >= 4 ) ) )
#if FT_SIZEOF_INT == 4 #if FT_SIZEOF_INT == 4
@ -370,12 +370,25 @@ FT_BEGIN_HEADER
#define FT_MSB( x ) ( 31 - __builtin_clzl( x ) ) #define FT_MSB( x ) ( 31 - __builtin_clzl( x ) )
#endif /* __GNUC__ */ #endif
#elif defined( _MSC_VER ) && _MSC_VER >= 1400
#elif defined( _MSC_VER ) && ( _MSC_VER >= 1400 ) #if defined( _WIN32_WCE )
#if FT_SIZEOF_INT == 4 #include <cmnintrin.h>
#pragma intrinsic( _CountLeadingZeros )
#define FT_MSB( x ) ( 31 - _CountLeadingZeros( x ) )
#elif defined( _M_ARM64 ) || defined( _M_ARM )
#include <intrin.h>
#pragma intrinsic( _CountLeadingZeros )
#define FT_MSB( x ) ( 31 - _CountLeadingZeros( x ) )
#elif defined( _M_IX86 ) || defined( _M_AMD64 ) || defined( _M_IA64 )
#include <intrin.h> #include <intrin.h>
#pragma intrinsic( _BitScanReverse ) #pragma intrinsic( _BitScanReverse )
@ -391,15 +404,40 @@ FT_BEGIN_HEADER
return (FT_Int32)where; return (FT_Int32)where;
} }
#define FT_MSB( x ) ( FT_MSB_i386( x ) ) #define FT_MSB( x ) FT_MSB_i386( x )
#endif #endif
#endif /* _MSC_VER */ #elif defined( __WATCOMC__ ) && defined( __386__ )
extern __inline FT_Int32
FT_MSB_i386( FT_UInt32 x );
#pragma aux FT_MSB_i386 = \
"bsr eax, eax" \
parm [eax] nomemory \
value [eax] \
modify exact [eax] nomemory;
#define FT_MSB( x ) FT_MSB_i386( x )
#elif defined( __DECC ) || defined( __DECCXX )
#include <builtins.h>
#define FT_MSB( x ) (FT_Int)( 63 - _leadz( x ) )
#elif defined( _CRAYC )
#include <intrinsics.h>
#define FT_MSB( x ) (FT_Int)( 31 - _leadz32( x ) )
#endif /* FT_MSB macro definitions */
#endif /* !FT_CONFIG_OPTION_NO_ASSEMBLER */ #endif /* !FT_CONFIG_OPTION_NO_ASSEMBLER */
#ifndef FT_MSB #ifndef FT_MSB
FT_BASE( FT_Int ) FT_BASE( FT_Int )
@ -487,7 +525,7 @@ FT_BEGIN_HEADER
#define NEG_INT32( a ) \ #define NEG_INT32( a ) \
(FT_Int32)( (FT_UInt32)0 - (FT_UInt32)(a) ) (FT_Int32)( (FT_UInt32)0 - (FT_UInt32)(a) )
#ifdef FT_LONG64 #ifdef FT_INT64
#define ADD_INT64( a, b ) \ #define ADD_INT64( a, b ) \
(FT_Int64)( (FT_UInt64)(a) + (FT_UInt64)(b) ) (FT_Int64)( (FT_UInt64)(a) + (FT_UInt64)(b) )
@ -498,7 +536,7 @@ FT_BEGIN_HEADER
#define NEG_INT64( a ) \ #define NEG_INT64( a ) \
(FT_Int64)( (FT_UInt64)0 - (FT_UInt64)(a) ) (FT_Int64)( (FT_UInt64)0 - (FT_UInt64)(a) )
#endif /* FT_LONG64 */ #endif /* FT_INT64 */
FT_END_HEADER FT_END_HEADER

View File

@ -4,7 +4,7 @@
* *
* Debugging and logging component (specification). * Debugging and logging component (specification).
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -31,9 +31,24 @@
#include "compiler-macros.h" #include "compiler-macros.h"
#ifdef FT_DEBUG_LOGGING
#define DLG_STATIC
#include <dlg/output.h>
#include <dlg/dlg.h>
#include <freetype/ftlogging.h>
#endif /* FT_DEBUG_LOGGING */
FT_BEGIN_HEADER FT_BEGIN_HEADER
/* force the definition of FT_DEBUG_LEVEL_TRACE if FT_DEBUG_LOGGING is */
/* already defined. */
/* */
#ifdef FT_DEBUG_LOGGING
#undef FT_DEBUG_LEVEL_TRACE
#define FT_DEBUG_LEVEL_TRACE
#endif
/* force the definition of FT_DEBUG_LEVEL_ERROR if FT_DEBUG_LEVEL_TRACE */ /* force the definition of FT_DEBUG_LEVEL_ERROR if FT_DEBUG_LEVEL_TRACE */
/* is already defined; this simplifies the following #ifdefs */ /* is already defined; this simplifies the following #ifdefs */
@ -82,20 +97,66 @@ FT_BEGIN_HEADER
* Each component must define the macro FT_COMPONENT to a valid FT_Trace * Each component must define the macro FT_COMPONENT to a valid FT_Trace
* value before using any TRACE macro. * value before using any TRACE macro.
* *
* To get consistent logging output, there should be no newline character
* (i.e., '\n') or a single trailing one in the message string of
* `FT_TRACEx` and `FT_ERROR`.
*/ */
/*************************************************************************
*
* If FT_DEBUG_LOGGING is enabled, tracing messages are sent to dlg's API.
* If FT_DEBUG_LOGGING is disabled, tracing messages are sent to
* `FT_Message` (defined in ftdebug.c).
*/
#ifdef FT_DEBUG_LOGGING
/* we need two macros to convert the names of `FT_COMPONENT` to a string */
#define FT_LOGGING_TAG( x ) FT_LOGGING_TAG_( x )
#define FT_LOGGING_TAG_( x ) #x
/* we need two macros to convert the component and the trace level */
/* to a string that combines them */
#define FT_LOGGING_TAGX( x, y ) FT_LOGGING_TAGX_( x, y )
#define FT_LOGGING_TAGX_( x, y ) #x ":" #y
#define FT_LOG( level, varformat ) \
do \
{ \
const char* dlg_tag = FT_LOGGING_TAGX( FT_COMPONENT, level ); \
\
\
ft_add_tag( dlg_tag ); \
if ( ft_trace_levels[FT_TRACE_COMP( FT_COMPONENT )] >= level ) \
{ \
if ( custom_output_handler != NULL ) \
FT_Logging_Callback varformat; \
else \
dlg_trace varformat; \
} \
ft_remove_tag( dlg_tag ); \
} while( 0 )
#else /* !FT_DEBUG_LOGGING */
#define FT_LOG( level, varformat ) \
do \
{ \
if ( ft_trace_levels[FT_TRACE_COMP( FT_COMPONENT )] >= level ) \
FT_Message varformat; \
} while ( 0 )
#endif /* !FT_DEBUG_LOGGING */
#ifdef FT_DEBUG_LEVEL_TRACE #ifdef FT_DEBUG_LEVEL_TRACE
/* we need two macros here to make cpp expand `FT_COMPONENT' */ /* we need two macros here to make cpp expand `FT_COMPONENT' */
#define FT_TRACE_COMP( x ) FT_TRACE_COMP_( x ) #define FT_TRACE_COMP( x ) FT_TRACE_COMP_( x )
#define FT_TRACE_COMP_( x ) trace_ ## x #define FT_TRACE_COMP_( x ) trace_ ## x
#define FT_TRACE( level, varformat ) \ #define FT_TRACE( level, varformat ) FT_LOG( level, varformat )
do \
{ \
if ( ft_trace_levels[FT_TRACE_COMP( FT_COMPONENT )] >= level ) \
FT_Message varformat; \
} while ( 0 )
#else /* !FT_DEBUG_LEVEL_TRACE */ #else /* !FT_DEBUG_LEVEL_TRACE */
@ -204,7 +265,32 @@ FT_BEGIN_HEADER
#ifdef FT_DEBUG_LEVEL_ERROR #ifdef FT_DEBUG_LEVEL_ERROR
#define FT_ERROR( varformat ) FT_Message varformat /**************************************************************************
*
* If FT_DEBUG_LOGGING is enabled, error messages are sent to dlg's API.
* If FT_DEBUG_LOGGING is disabled, error messages are sent to `FT_Message`
* (defined in ftdebug.c).
*
*/
#ifdef FT_DEBUG_LOGGING
#define FT_ERROR( varformat ) \
do \
{ \
const char* dlg_tag = FT_LOGGING_TAG( FT_COMPONENT ); \
\
\
ft_add_tag( dlg_tag ); \
dlg_trace varformat; \
ft_remove_tag( dlg_tag ); \
} while ( 0 )
#else /* !FT_DEBUG_LOGGING */
#define FT_ERROR( varformat ) FT_Message varformat
#endif /* !FT_DEBUG_LOGGING */
#else /* !FT_DEBUG_LEVEL_ERROR */ #else /* !FT_DEBUG_LEVEL_ERROR */
@ -277,6 +363,77 @@ FT_BEGIN_HEADER
FT_BASE( void ) FT_BASE( void )
ft_debug_init( void ); ft_debug_init( void );
#ifdef FT_DEBUG_LOGGING
/**************************************************************************
*
* 'dlg' uses output handlers to control how and where log messages are
* printed. Therefore we need to define a default output handler for
* FreeType.
*/
FT_BASE( void )
ft_log_handler( const struct dlg_origin* origin,
const char* string,
void* data );
/**************************************************************************
*
* 1. `ft_default_log_handler` stores the function pointer that is used
* internally by FreeType to print logs to a file.
*
* 2. `custom_output_handler` stores the function pointer to the callback
* function provided by the user.
*
* It is defined in `ftdebug.c`.
*/
extern dlg_handler ft_default_log_handler;
extern FT_Custom_Log_Handler custom_output_handler;
/**************************************************************************
*
* If FT_DEBUG_LOGGING macro is enabled, FreeType needs to initialize and
* un-initialize `FILE*`.
*
* These functions are defined in `ftdebug.c`.
*/
FT_BASE( void )
ft_logging_init( void );
FT_BASE( void )
ft_logging_deinit( void );
/**************************************************************************
*
* For printing the name of `FT_COMPONENT` along with the actual log we
* need to add a tag with the name of `FT_COMPONENT`.
*
* These functions are defined in `ftdebug.c`.
*/
FT_BASE( void )
ft_add_tag( const char* tag );
FT_BASE( void )
ft_remove_tag( const char* tag );
/**************************************************************************
*
* A function to print log data using a custom callback logging function
* (which is set using `FT_Set_Log_Handler`).
*
* This function is defined in `ftdebug.c`.
*/
FT_BASE( void )
FT_Logging_Callback( const char* fmt,
... );
#endif /* FT_DEBUG_LOGGING */
FT_END_HEADER FT_END_HEADER
#endif /* FTDEBUG_H_ */ #endif /* FTDEBUG_H_ */

View File

@ -4,7 +4,7 @@
* *
* FreeType internal font driver interface (specification). * FreeType internal font driver interface (specification).
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -4,7 +4,7 @@
* *
* The FreeType glyph loader (specification). * The FreeType glyph loader (specification).
* *
* Copyright (C) 2002-2020 by * Copyright (C) 2002-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg * David Turner, Robert Wilhelm, and Werner Lemberg
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -22,6 +22,7 @@
#include <freetype/freetype.h> #include <freetype/freetype.h>
#include "compiler-macros.h"
FT_BEGIN_HEADER FT_BEGIN_HEADER

View File

@ -4,7 +4,7 @@
* *
* The FreeType memory management macros (specification). * The FreeType memory management macros (specification).
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg * David Turner, Robert Wilhelm, and Werner Lemberg
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -344,14 +344,13 @@ extern "C++"
#define FT_RENEW_ARRAY( ptr, curcnt, newcnt ) \ #define FT_RENEW_ARRAY( ptr, curcnt, newcnt ) \
FT_MEM_SET_ERROR( FT_MEM_RENEW_ARRAY( ptr, curcnt, newcnt ) ) FT_MEM_SET_ERROR( FT_MEM_RENEW_ARRAY( ptr, curcnt, newcnt ) )
#define FT_QNEW( ptr ) \ #define FT_QNEW( ptr ) FT_MEM_SET_ERROR( FT_MEM_QNEW( ptr ) )
FT_MEM_SET_ERROR( FT_MEM_QNEW( ptr ) )
#define FT_QNEW_ARRAY( ptr, count ) \ #define FT_QNEW_ARRAY( ptr, count ) \
FT_MEM_SET_ERROR( FT_MEM_NEW_ARRAY( ptr, count ) ) FT_MEM_SET_ERROR( FT_MEM_QNEW_ARRAY( ptr, count ) )
#define FT_QRENEW_ARRAY( ptr, curcnt, newcnt ) \ #define FT_QRENEW_ARRAY( ptr, curcnt, newcnt ) \
FT_MEM_SET_ERROR( FT_MEM_RENEW_ARRAY( ptr, curcnt, newcnt ) ) FT_MEM_SET_ERROR( FT_MEM_QRENEW_ARRAY( ptr, curcnt, newcnt ) )
FT_BASE( FT_Pointer ) FT_BASE( FT_Pointer )

View File

@ -4,7 +4,7 @@
* *
* The FreeType private base classes (specification). * The FreeType private base classes (specification).
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -418,7 +418,8 @@ FT_BEGIN_HEADER
* initializing the glyph slot. * initializing the glyph slot.
*/ */
#define FT_GLYPH_OWN_BITMAP 0x1U #define FT_GLYPH_OWN_BITMAP 0x1U
#define FT_GLYPH_OWN_GZIP_SVG 0x2U
typedef struct FT_Slot_InternalRec_ typedef struct FT_Slot_InternalRec_
{ {
@ -673,7 +674,7 @@ FT_BEGIN_HEADER
/* Set the metrics according to a size request. */ /* Set the metrics according to a size request. */
FT_BASE( void ) FT_BASE( FT_Error )
FT_Request_Metrics( FT_Face face, FT_Request_Metrics( FT_Face face,
FT_Size_Request req ); FT_Size_Request req );

View File

@ -4,7 +4,7 @@
* *
* Get and set properties of PostScript drivers (specification). * Get and set properties of PostScript drivers (specification).
* *
* Copyright (C) 2017-2020 by * Copyright (C) 2017-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -4,7 +4,7 @@
* *
* Embedded resource forks accessor (specification). * Embedded resource forks accessor (specification).
* *
* Copyright (C) 2004-2020 by * Copyright (C) 2004-2022 by
* Masatake YAMATO and Redhat K.K. * Masatake YAMATO and Redhat K.K.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -4,7 +4,7 @@
* *
* The FreeType services (specification only). * The FreeType services (specification only).
* *
* Copyright (C) 2003-2020 by * Copyright (C) 2003-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -4,7 +4,7 @@
* *
* Stream handling (specification). * Stream handling (specification).
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -196,9 +196,9 @@ FT_BEGIN_HEADER
FT_BYTE_U32( p, 2, 8 ) | \ FT_BYTE_U32( p, 2, 8 ) | \
FT_BYTE_U32( p, 3, 0 ) ) FT_BYTE_U32( p, 3, 0 ) )
#define FT_PEEK_OFF3( p ) FT_INT32( FT_BYTE_U32( p, 0, 16 ) | \ #define FT_PEEK_OFF3( p ) ( FT_INT32( FT_BYTE_U32( p, 0, 24 ) | \
FT_BYTE_U32( p, 1, 8 ) | \ FT_BYTE_U32( p, 1, 16 ) | \
FT_BYTE_U32( p, 2, 0 ) ) FT_BYTE_U32( p, 2, 8 ) ) >> 8 )
#define FT_PEEK_UOFF3( p ) FT_UINT32( FT_BYTE_U32( p, 0, 16 ) | \ #define FT_PEEK_UOFF3( p ) FT_UINT32( FT_BYTE_U32( p, 0, 16 ) | \
FT_BYTE_U32( p, 1, 8 ) | \ FT_BYTE_U32( p, 1, 8 ) | \
@ -220,9 +220,9 @@ FT_BEGIN_HEADER
FT_BYTE_U32( p, 1, 8 ) | \ FT_BYTE_U32( p, 1, 8 ) | \
FT_BYTE_U32( p, 0, 0 ) ) FT_BYTE_U32( p, 0, 0 ) )
#define FT_PEEK_OFF3_LE( p ) FT_INT32( FT_BYTE_U32( p, 2, 16 ) | \ #define FT_PEEK_OFF3_LE( p ) ( FT_INT32( FT_BYTE_U32( p, 2, 24 ) | \
FT_BYTE_U32( p, 1, 8 ) | \ FT_BYTE_U32( p, 1, 16 ) | \
FT_BYTE_U32( p, 0, 0 ) ) FT_BYTE_U32( p, 0, 8 ) ) >> 8 )
#define FT_PEEK_UOFF3_LE( p ) FT_UINT32( FT_BYTE_U32( p, 2, 16 ) | \ #define FT_PEEK_UOFF3_LE( p ) FT_UINT32( FT_BYTE_U32( p, 2, 16 ) | \
FT_BYTE_U32( p, 1, 8 ) | \ FT_BYTE_U32( p, 1, 8 ) | \
@ -305,11 +305,10 @@ FT_BEGIN_HEADER
#else #else
#define FT_GET_MACRO( func, type ) ( (type)func( stream ) ) #define FT_GET_MACRO( func, type ) ( (type)func( stream ) )
#define FT_GET_CHAR() FT_GET_MACRO( FT_Stream_GetChar, FT_Char ) #define FT_GET_CHAR() FT_GET_MACRO( FT_Stream_GetByte, FT_Char )
#define FT_GET_BYTE() FT_GET_MACRO( FT_Stream_GetChar, FT_Byte ) #define FT_GET_BYTE() FT_GET_MACRO( FT_Stream_GetByte, FT_Byte )
#define FT_GET_SHORT() FT_GET_MACRO( FT_Stream_GetUShort, FT_Short ) #define FT_GET_SHORT() FT_GET_MACRO( FT_Stream_GetUShort, FT_Short )
#define FT_GET_USHORT() FT_GET_MACRO( FT_Stream_GetUShort, FT_UShort ) #define FT_GET_USHORT() FT_GET_MACRO( FT_Stream_GetUShort, FT_UShort )
#define FT_GET_OFF3() FT_GET_MACRO( FT_Stream_GetUOffset, FT_Long )
#define FT_GET_UOFF3() FT_GET_MACRO( FT_Stream_GetUOffset, FT_ULong ) #define FT_GET_UOFF3() FT_GET_MACRO( FT_Stream_GetUOffset, FT_ULong )
#define FT_GET_LONG() FT_GET_MACRO( FT_Stream_GetULong, FT_Long ) #define FT_GET_LONG() FT_GET_MACRO( FT_Stream_GetULong, FT_Long )
#define FT_GET_ULONG() FT_GET_MACRO( FT_Stream_GetULong, FT_ULong ) #define FT_GET_ULONG() FT_GET_MACRO( FT_Stream_GetULong, FT_ULong )
@ -333,11 +332,10 @@ FT_BEGIN_HEADER
* `FT_STREAM_POS'. They use the full machinery to check whether a read is * `FT_STREAM_POS'. They use the full machinery to check whether a read is
* valid. * valid.
*/ */
#define FT_READ_BYTE( var ) FT_READ_MACRO( FT_Stream_ReadChar, FT_Byte, var ) #define FT_READ_BYTE( var ) FT_READ_MACRO( FT_Stream_ReadByte, FT_Byte, var )
#define FT_READ_CHAR( var ) FT_READ_MACRO( FT_Stream_ReadChar, FT_Char, var ) #define FT_READ_CHAR( var ) FT_READ_MACRO( FT_Stream_ReadByte, FT_Char, var )
#define FT_READ_SHORT( var ) FT_READ_MACRO( FT_Stream_ReadUShort, FT_Short, var ) #define FT_READ_SHORT( var ) FT_READ_MACRO( FT_Stream_ReadUShort, FT_Short, var )
#define FT_READ_USHORT( var ) FT_READ_MACRO( FT_Stream_ReadUShort, FT_UShort, var ) #define FT_READ_USHORT( var ) FT_READ_MACRO( FT_Stream_ReadUShort, FT_UShort, var )
#define FT_READ_OFF3( var ) FT_READ_MACRO( FT_Stream_ReadUOffset, FT_Long, var )
#define FT_READ_UOFF3( var ) FT_READ_MACRO( FT_Stream_ReadUOffset, FT_ULong, var ) #define FT_READ_UOFF3( var ) FT_READ_MACRO( FT_Stream_ReadUOffset, FT_ULong, var )
#define FT_READ_LONG( var ) FT_READ_MACRO( FT_Stream_ReadULong, FT_Long, var ) #define FT_READ_LONG( var ) FT_READ_MACRO( FT_Stream_ReadULong, FT_Long, var )
#define FT_READ_ULONG( var ) FT_READ_MACRO( FT_Stream_ReadULong, FT_ULong, var ) #define FT_READ_ULONG( var ) FT_READ_MACRO( FT_Stream_ReadULong, FT_ULong, var )
@ -457,8 +455,8 @@ FT_BEGIN_HEADER
/* read a byte from an entered frame */ /* read a byte from an entered frame */
FT_BASE( FT_Char ) FT_BASE( FT_Byte )
FT_Stream_GetChar( FT_Stream stream ); FT_Stream_GetByte( FT_Stream stream );
/* read a 16-bit big-endian unsigned integer from an entered frame */ /* read a 16-bit big-endian unsigned integer from an entered frame */
FT_BASE( FT_UShort ) FT_BASE( FT_UShort )
@ -482,8 +480,8 @@ FT_BEGIN_HEADER
/* read a byte from a stream */ /* read a byte from a stream */
FT_BASE( FT_Char ) FT_BASE( FT_Byte )
FT_Stream_ReadChar( FT_Stream stream, FT_Stream_ReadByte( FT_Stream stream,
FT_Error* error ); FT_Error* error );
/* read a 16-bit big-endian unsigned integer from a stream */ /* read a 16-bit big-endian unsigned integer from a stream */

View File

@ -4,7 +4,7 @@
* *
* Tracing handling (specification only). * Tracing handling (specification only).
* *
* Copyright (C) 2002-2020 by * Copyright (C) 2002-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,
@ -18,6 +18,11 @@
/* definitions of trace levels for FreeType 2 */ /* definitions of trace levels for FreeType 2 */
/* the maximum string length (if the argument to `FT_TRACE_DEF` */
/* gets used as a string) plus one charachter for ':' plus */
/* another one for the trace level */
#define FT_MAX_TRACE_LEVEL_LENGTH (9 + 1 + 1)
/* the first level must always be `trace_any' */ /* the first level must always be `trace_any' */
FT_TRACE_DEF( any ) FT_TRACE_DEF( any )
@ -38,12 +43,17 @@ FT_TRACE_DEF( checksum ) /* bitmap checksum (ftobjs.c) */
FT_TRACE_DEF( mm ) /* MM interface (ftmm.c) */ FT_TRACE_DEF( mm ) /* MM interface (ftmm.c) */
FT_TRACE_DEF( psprops ) /* PS driver properties (ftpsprop.c) */ FT_TRACE_DEF( psprops ) /* PS driver properties (ftpsprop.c) */
FT_TRACE_DEF( raccess ) /* resource fork accessor (ftrfork.c) */ FT_TRACE_DEF( raccess ) /* resource fork accessor (ftrfork.c) */
FT_TRACE_DEF( raster ) /* monochrome rasterizer (ftraster.c) */
FT_TRACE_DEF( smooth ) /* anti-aliasing raster (ftgrays.c) */
FT_TRACE_DEF( synth ) /* bold/slant synthesizer (ftsynth.c) */ FT_TRACE_DEF( synth ) /* bold/slant synthesizer (ftsynth.c) */
/* Cache sub-system */ /* rasterizers */
FT_TRACE_DEF( cache ) /* cache sub-system (ftcache.c, etc.) */ FT_TRACE_DEF( raster ) /* monochrome rasterizer (ftraster.c) */
FT_TRACE_DEF( smooth ) /* anti-aliasing raster (ftgrays.c) */
/* ot-svg module */
FT_TRACE_DEF( otsvg ) /* OT-SVG renderer (ftsvg.c) */
/* cache sub-system */
FT_TRACE_DEF( cache ) /* cache sub-system (ftcache.c, etc.) */
/* SFNT driver components */ /* SFNT driver components */
FT_TRACE_DEF( sfdriver ) /* SFNT font driver (sfdriver.c) */ FT_TRACE_DEF( sfdriver ) /* SFNT font driver (sfdriver.c) */
@ -54,6 +64,7 @@ FT_TRACE_DEF( ttbdf ) /* TrueType embedded BDF (ttbdf.c) */
FT_TRACE_DEF( ttcmap ) /* charmap handler (ttcmap.c) */ FT_TRACE_DEF( ttcmap ) /* charmap handler (ttcmap.c) */
FT_TRACE_DEF( ttcolr ) /* glyph layer table (ttcolr.c) */ FT_TRACE_DEF( ttcolr ) /* glyph layer table (ttcolr.c) */
FT_TRACE_DEF( ttcpal ) /* color palette table (ttcpal.c) */ FT_TRACE_DEF( ttcpal ) /* color palette table (ttcpal.c) */
FT_TRACE_DEF( ttsvg ) /* OpenType SVG table (ttsvg.c) */
FT_TRACE_DEF( ttkern ) /* kerning handler (ttkern.c) */ FT_TRACE_DEF( ttkern ) /* kerning handler (ttkern.c) */
FT_TRACE_DEF( ttload ) /* basic TrueType tables (ttload.c) */ FT_TRACE_DEF( ttload ) /* basic TrueType tables (ttload.c) */
FT_TRACE_DEF( ttmtx ) /* metrics-related tables (ttmtx.c) */ FT_TRACE_DEF( ttmtx ) /* metrics-related tables (ttmtx.c) */
@ -77,6 +88,7 @@ FT_TRACE_DEF( t1objs )
FT_TRACE_DEF( t1parse ) FT_TRACE_DEF( t1parse )
/* PostScript helper module `psaux' */ /* PostScript helper module `psaux' */
FT_TRACE_DEF( afmparse )
FT_TRACE_DEF( cffdecode ) FT_TRACE_DEF( cffdecode )
FT_TRACE_DEF( psconv ) FT_TRACE_DEF( psconv )
FT_TRACE_DEF( psobjs ) FT_TRACE_DEF( psobjs )
@ -151,8 +163,10 @@ FT_TRACE_DEF( afglobal )
FT_TRACE_DEF( afhints ) FT_TRACE_DEF( afhints )
FT_TRACE_DEF( afmodule ) FT_TRACE_DEF( afmodule )
FT_TRACE_DEF( aflatin ) FT_TRACE_DEF( aflatin )
FT_TRACE_DEF( aflatin2 )
FT_TRACE_DEF( afshaper ) FT_TRACE_DEF( afshaper )
FT_TRACE_DEF( afwarp )
/* SDF components */
FT_TRACE_DEF( sdf ) /* signed distance raster for outlines (ftsdf.c) */
FT_TRACE_DEF( bsdf ) /* signed distance raster for bitmaps (ftbsdf.c) */
/* END */ /* END */

View File

@ -4,7 +4,7 @@
* *
* FreeType validation support (specification). * FreeType validation support (specification).
* *
* Copyright (C) 2004-2020 by * Copyright (C) 2004-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -5,7 +5,7 @@
* Auxiliary functions and data structures related to PostScript fonts * Auxiliary functions and data structures related to PostScript fonts
* (specification). * (specification).
* *
* Copyright (C) 1996-2020 by * Copyright (C) 1996-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -6,7 +6,7 @@
* recorders (specification only). These are used to support native * recorders (specification only). These are used to support native
* T1/T2 hints in the 'type1', 'cid', and 'cff' font drivers. * T1/T2 hints in the 'type1', 'cid', and 'cff' font drivers.
* *
* Copyright (C) 2001-2020 by * Copyright (C) 2001-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -4,7 +4,7 @@
* *
* The FreeType BDF services (specification). * The FreeType BDF services (specification).
* *
* Copyright (C) 2003-2020 by * Copyright (C) 2003-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

View File

@ -4,7 +4,7 @@
* *
* The FreeType CFF tables loader service (specification). * The FreeType CFF tables loader service (specification).
* *
* Copyright (C) 2017-2020 by * Copyright (C) 2017-2022 by
* David Turner, Robert Wilhelm, and Werner Lemberg. * David Turner, Robert Wilhelm, and Werner Lemberg.
* *
* This file is part of the FreeType project, and may only be used, * This file is part of the FreeType project, and may only be used,

Some files were not shown because too many files have changed in this diff Show More