pax_global_header00006660000000000000000000000064150311346520014512gustar00rootroot0000000000000052 comment=6d0a98982ec351c165c9224c8b7dbdfca3010e47 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/000077500000000000000000000000001503113465200213725ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/.clang-format000066400000000000000000000210141503113465200237430ustar00rootroot00000000000000--- AccessModifierOffset: -4 AlignAfterOpenBracket: Align AlignArrayOfStructures: Left AlignConsecutiveAssignments: Enabled: false AcrossEmptyLines: true AcrossComments: true AlignCompound: false AlignFunctionPointers: false PadOperators: true AlignConsecutiveBitFields: Enabled: false AcrossEmptyLines: false AcrossComments: false AlignCompound: false AlignFunctionPointers: false PadOperators: false AlignConsecutiveDeclarations: Enabled: true AcrossEmptyLines: false AcrossComments: false AlignCompound: false AlignFunctionPointers: false PadOperators: false AlignConsecutiveMacros: Enabled: true AcrossEmptyLines: true AcrossComments: true AlignCompound: false AlignFunctionPointers: false PadOperators: false AlignConsecutiveShortCaseStatements: Enabled: false AcrossEmptyLines: false AcrossComments: false AlignCaseArrows: false AlignCaseColons: false AlignConsecutiveTableGenBreakingDAGArgColons: Enabled: false AcrossEmptyLines: false AcrossComments: false AlignCompound: false AlignFunctionPointers: false PadOperators: false AlignConsecutiveTableGenCondOperatorColons: Enabled: false AcrossEmptyLines: false AcrossComments: false AlignCompound: false AlignFunctionPointers: false PadOperators: false AlignConsecutiveTableGenDefinitionColons: Enabled: false AcrossEmptyLines: false AcrossComments: false AlignCompound: false AlignFunctionPointers: false PadOperators: false AlignEscapedNewlines: Left AlignOperands: Align AlignTrailingComments: Kind: Always OverEmptyLines: 0 AllowAllArgumentsOnNextLine: false AllowAllParametersOfDeclarationOnNextLine: true AllowBreakBeforeNoexceptSpecifier: Never AllowShortBlocksOnASingleLine: Never AllowShortCaseExpressionOnASingleLine: true AllowShortCaseLabelsOnASingleLine: true AllowShortCompoundRequirementOnASingleLine: true AllowShortEnumsOnASingleLine: true AllowShortFunctionsOnASingleLine: All AllowShortIfStatementsOnASingleLine: Never AllowShortLambdasOnASingleLine: All AllowShortLoopsOnASingleLine: false AlwaysBreakAfterDefinitionReturnType: All AlwaysBreakBeforeMultilineStrings: true AttributeMacros: - __capability - FC_UNUSED - FcPrivate BinPackArguments: true BinPackParameters: true BitFieldColonSpacing: Both BraceWrapping: AfterCaseLabel: false AfterClass: true AfterControlStatement: Never AfterEnum: false AfterExternBlock: false AfterFunction: true AfterNamespace: false AfterObjCDeclaration: false AfterStruct: false AfterUnion: false BeforeCatch: false BeforeElse: false BeforeLambdaBody: false BeforeWhile: false IndentBraces: false SplitEmptyFunction: true SplitEmptyRecord: true SplitEmptyNamespace: true BreakAdjacentStringLiterals: true BreakAfterAttributes: Leave BreakAfterJavaFieldAnnotations: false BreakAfterReturnType: Automatic BreakArrays: true BreakBeforeBinaryOperators: None BreakBeforeConceptDeclarations: Always BreakBeforeBraces: Linux BreakBeforeInlineASMColon: OnlyMultiline BreakBeforeTernaryOperators: true BreakConstructorInitializers: BeforeColon BreakFunctionDefinitionParameters: false BreakInheritanceList: BeforeColon BreakStringLiterals: true BreakTemplateDeclarations: Yes ColumnLimit: 0 CommentPragmas: '^ IWYU pragma:' CompactNamespaces: false ConstructorInitializerIndentWidth: 4 ContinuationIndentWidth: 4 Cpp11BracedListStyle: false DerivePointerAlignment: true DisableFormat: false EmptyLineAfterAccessModifier: Never EmptyLineBeforeAccessModifier: LogicalBlock ExperimentalAutoDetectBinPacking: false FixNamespaceComments: true ForEachMacros: - foreach - Q_FOREACH - BOOST_FOREACH IfMacros: - KJ_IF_MAYBE IncludeBlocks: Regroup IncludeCategories: - Regex: '^"fcint.h\"' Priority: 0 - Regex: '^"(\.\./src/)?fc(arch|md5|ftint|objshash|stdint).h\"' Priority: 1 - Regex: '^' Priority: 1 SortPriority: 1 - Regex: '^' Priority: 1 SortPriority: 2 - Regex: '^' Priority: 3 SortPriority: 0 CaseSensitive: false - Regex: '^<.*\.h>' Priority: 2 SortPriority: 0 CaseSensitive: false - Regex: '^<.*' Priority: 3 SortPriority: 0 CaseSensitive: false - Regex: '.*' Priority: 4 SortPriority: 0 CaseSensitive: false IncludeIsMainRegex: '([-_](test|unittest))?$' IncludeIsMainSourceRegex: '' IndentAccessModifiers: false IndentCaseBlocks: false IndentCaseLabels: false IndentExternBlock: AfterExternBlock IndentGotoLabels: true IndentPPDirectives: AfterHash IndentRequiresClause: true IndentWidth: 4 IndentWrappedFunctionNames: false InsertBraces: false InsertNewlineAtEOF: false InsertTrailingCommas: None IntegerLiteralSeparator: Binary: 0 BinaryMinDigits: 0 Decimal: 0 DecimalMinDigits: 0 Hex: 0 HexMinDigits: 0 JavaScriptQuotes: Leave JavaScriptWrapImports: true KeepEmptyLines: AtEndOfFile: false AtStartOfBlock: false AtStartOfFile: true LambdaBodyIndentation: Signature LineEnding: DeriveLF Macros: - args1(x)=(x) - args2(x,y)=(x,y) MainIncludeChar: Quote MaxEmptyLinesToKeep: 1 NamespaceIndentation: None ObjCBinPackProtocolList: Never ObjCBlockIndentWidth: 2 ObjCBreakBeforeNestedBlockParam: true ObjCSpaceAfterProperty: false ObjCSpaceBeforeProtocolList: true PackConstructorInitializers: CurrentLine PenaltyBreakAssignment: 2 PenaltyBreakBeforeFirstCallParameter: 1 PenaltyBreakComment: 300 PenaltyBreakFirstLessLess: 120 PenaltyBreakOpenParenthesis: 0 PenaltyBreakScopeResolution: 500 PenaltyBreakString: 1000 PenaltyBreakTemplateDeclaration: 10 PenaltyExcessCharacter: 1000000 PenaltyIndentedWhitespace: 0 PenaltyReturnTypeOnItsOwnLine: 200 PointerAlignment: Left PPIndentWidth: 2 QualifierAlignment: Leave RawStringFormats: - Language: Cpp Delimiters: - cc - CC - cpp - Cpp - CPP - 'c++' - 'C++' CanonicalDelimiter: '' BasedOnStyle: google - Language: TextProto Delimiters: - pb - PB - proto - PROTO EnclosingFunctions: - EqualsProto - EquivToProto - PARSE_PARTIAL_TEXT_PROTO - PARSE_TEST_PROTO - PARSE_TEXT_PROTO - ParseTextOrDie - ParseTextProtoOrDie - ParseTestProto - ParsePartialTestProto CanonicalDelimiter: pb BasedOnStyle: google ReferenceAlignment: Pointer ReflowComments: true RemoveBracesLLVM: false RemoveParentheses: Leave RemoveSemicolon: false RequiresClausePosition: OwnLine RequiresExpressionIndentation: OuterScope SeparateDefinitionBlocks: Leave ShortNamespaceLines: 1 SkipMacroDefinitionBody: false SortIncludes: CaseSensitive SortJavaStaticImport: Before SortUsingDeclarations: LexicographicNumeric SpaceAfterCStyleCast: false SpaceAfterLogicalNot: false SpaceAfterTemplateKeyword: true SpaceAroundPointerQualifiers: Default SpaceBeforeAssignmentOperators: true SpaceBeforeCaseColon: false SpaceBeforeCpp11BracedList: false SpaceBeforeCtorInitializerColon: true SpaceBeforeInheritanceColon: true SpaceBeforeJsonColon: false SpaceBeforeParens: Custom SpaceBeforeParensOptions: AfterControlStatements: true AfterForeachMacros: true AfterFunctionDefinitionName: true AfterFunctionDeclarationName: true AfterIfMacros: true AfterOverloadedOperator: false AfterPlacementOperator: true AfterRequiresInClause: false AfterRequiresInExpression: false BeforeNonEmptyParentheses: true SpaceBeforeRangeBasedForLoopColon: true SpaceBeforeSquareBrackets: false SpaceInEmptyBlock: false SpacesBeforeTrailingComments: 2 SpacesInAngles: Never SpacesInContainerLiterals: true SpacesInLineCommentPrefix: Minimum: 1 Maximum: -1 SpacesInParens: Never SpacesInParensOptions: ExceptDoubleParentheses: false InCStyleCasts: false InConditionalStatements: false InEmptyParentheses: false Other: false SpacesInSquareBrackets: false Standard: Auto StatementAttributeLikeMacros: - Q_EMIT StatementMacros: - Q_UNUSED - QT_REQUIRE_VERSION TableGenBreakInsideDAGArg: DontBreak TabWidth: 8 UseTab: AlignWithSpaces VerilogBreakBetweenInstancePorts: true WhitespaceSensitiveMacros: - BOOST_PP_STRINGIZE - CF_SWIFT_NAME - NS_SWIFT_NAME - PP_STRINGIZE - STRINGIZE - FC_OBJECT - _FC_STRINGIFY - _FC_STRINGIFY_ - _ ... fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/.clang-format-ignore000066400000000000000000000001111503113465200252170ustar00rootroot00000000000000# To prevent reformatting @@@ to @ @ @ */*.tmpl.h src/fcobjshash.gperf.h fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/.gitlab-ci.yml000066400000000000000000000541331503113465200240340ustar00rootroot00000000000000# vim: set expandtab shiftwidth=2 tabstop=8 textwidth=0 filetype=yaml: ####################################### # # # THIS FILE IS GENERATED, DO NOT EDIT # # # ####################################### # To change the gitlab CI, edit .gitlab-ci/ci.template and/or .gitlab-ci/config.yml # and run ci-fairy generate-template. For details, see # https://freedesktop.pages.freedesktop.org/ci-templates/ci-fairy.html#templating-gitlab-ci-yml .templates_sha: &template_sha ef5e4669b7500834a17ffe9277e15fbb6d977fff include: # Fedora container builder template - project: 'freedesktop/ci-templates' ref: *template_sha file: '/templates/fedora.yml' # Freebsd container builder template - project: 'freedesktop/ci-templates' ref: *template_sha file: '/templates/freebsd.yml' - project: 'freedesktop/ci-templates' ref: *template_sha file: '/templates/ci-fairy.yml' - local: '.gitlab-ci/other.yml' stages: - sanity check - prep - build - test - distro - deploy - container_clean variables: FDO_UPSTREAM_REPO: fontconfig/fontconfig GIT_DEPTH: 1 # these tags should be updated each time the list of packages is updated # changing these will force rebuilding the associated image # Note: these tags have no meaning and are not tied to a particular # fontconfig version FEDORA_TAG: '2025-04-30.1-1e6ed32d8678' FREEBSD_TAG: '2025-04-30.1-b401dfb43b5f' FEDORA_EXEC: 'bash .gitlab-ci/fedora-install.sh' FREEBSD_EXEC: 'bash .gitlab-ci/freebsd-install.sh' ####################################### # # # sanity check # # # ####################################### fail-if-fork-is-not-public: stage: sanity check script: - | if [ $CI_PROJECT_VISIBILITY != "public" ]; then echo "*************************************************************************************" echo "Project visibility must be set to 'public'." echo "Change this in $CI_PROJECT_URL/edit under 'Visibility, project features, permissions'" echo "*************************************************************************************" exit 1 fi except: - main@fontconfig/fontconfig check-ci-script: extends: - .fdo.ci-fairy stage: sanity check script: - ci-fairy generate-template --verify && exit 0 || true - > printf "%s\n" \ "Committed gitlab-ci.yml differs from generated gitlab-ci.yml." \ "To change the gitlab CI, edit .gitlab-ci/ci.template and/or .gitlab-ci/config.yml" \ " and run ci-fairy generate-template. For details, see " \ "https://freedesktop.pages.freedesktop.org/ci-templates/ci-fairy.html#templating-gitlab-ci-yml" - exit 1 ####################################### # # # containers stage # # # ####################################### # Build a container for each distribution + version. The ci-templates # will re-use the containers if the tag doesn't change. fedora:rawhide@container-prep: extends: .fdo.container-build@fedora stage: prep variables: GIT_STRATEGY: none FDO_DISTRIBUTION_VERSION: 'rawhide' FDO_DISTRIBUTION_PACKAGES: '@buildsys-build autoconf automake clang-devel clang-tools-extra curl libtool gettext gettext-devel gperf expat-devel libxml2-devel freetype-devel json-c-devel git git-clang-format docbook-utils docbook-utils-pdf bubblewrap ninja-build wget python3-pip mingw64-expat mingw64-gcc mingw64-gettext mingw64-freetype mingw64-libxml2 rust cargo bindgen-cli' FDO_DISTRIBUTION_TAG: $FEDORA_TAG FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC fedora:41@container-prep: extends: .fdo.container-build@fedora stage: prep variables: GIT_STRATEGY: none FDO_DISTRIBUTION_VERSION: '41' FDO_DISTRIBUTION_PACKAGES: '@buildsys-build autoconf automake clang-devel clang-tools-extra curl libtool gettext gettext-devel gperf expat-devel libxml2-devel freetype-devel json-c-devel git git-clang-format docbook-utils docbook-utils-pdf bubblewrap ninja-build wget python3-pip mingw64-expat mingw64-gcc mingw64-gettext mingw64-freetype mingw64-libxml2 rust cargo bindgen-cli' FDO_DISTRIBUTION_TAG: $FEDORA_TAG FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC fedora:40@container-prep: extends: .fdo.container-build@fedora stage: prep variables: GIT_STRATEGY: none FDO_DISTRIBUTION_VERSION: '40' FDO_DISTRIBUTION_PACKAGES: '@buildsys-build autoconf automake clang-devel clang-tools-extra curl libtool gettext gettext-devel gperf expat-devel libxml2-devel freetype-devel json-c-devel git git-clang-format docbook-utils docbook-utils-pdf bubblewrap ninja-build wget python3-pip mingw64-expat mingw64-gcc mingw64-gettext mingw64-freetype mingw64-libxml2 rust cargo bindgen-cli' FDO_DISTRIBUTION_TAG: $FEDORA_TAG FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC freebsd:14.1@container-prep: extends: .fdo.qemu-build@freebsd tags: - kvm stage: prep variables: GIT_STRATEGY: none FDO_DISTRIBUTION_VERSION: '14.1' FDO_DISTRIBUTION_PACKAGES: 'gcc autoconf automake libtool gettext gperf expat libxml2 freetype2 json-c git ninja wget python3 py311-pip pkgconf gmake gettext-runtime' FDO_DISTRIBUTION_TAG: $FREEBSD_TAG FDO_DISTRIBUTION_EXEC: $FREEBSD_EXEC ####################################### # # # container clean stage # # # ####################################### # # This stage will look for the container images e currently have in # the registry and will remove any that are not tagged with the provided # $container_image:$tag # # This job only runs for a scheduled pipeline. # # Go to your Profile, Settings, Access Tokens # Create a personal token with `api' scope, copy the value. # Go to CI/CD, Schedules, schedule a monthly job. # Define a variable of type File named AUTHFILE. Content is that token # value. .container-clean: stage: container_clean image: golang:alpine before_script: - apk add python3 py-pip git - pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates script: - ci-fairy -v --authfile $AUTHFILE delete-image --repository $FDO_DISTRIBUTION_NAME/$FDO_DISTRIBUTION_VERSION --exclude-tag $FDO_DISTRIBUTION_TAG dependencies: [] allow_failure: true only: - schedules fedora:rawhide@container-clean: extends: - .container-clean variables: GIT_STRATEGY: none CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG FDO_DISTRIBUTION_VERSION: 'rawhide' FDO_DISTRIBUTION_TAG: $FEDORA_TAG fedora:41@container-clean: extends: - .container-clean variables: GIT_STRATEGY: none CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG FDO_DISTRIBUTION_VERSION: '41' FDO_DISTRIBUTION_TAG: $FEDORA_TAG fedora:40@container-clean: extends: - .container-clean variables: GIT_STRATEGY: none CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG FDO_DISTRIBUTION_VERSION: '40' FDO_DISTRIBUTION_TAG: $FEDORA_TAG freebsd:14.1@container-clean: extends: - .container-clean variables: GIT_STRATEGY: none CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/freebsd/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG FDO_DISTRIBUTION_VERSION: '14.1' FDO_DISTRIBUTION_TAG: $FREEBSD_TAG ####################################### # # # build template # # # ####################################### .check_tainted: &check_tainted | # make sure the kernel is not tainted if [[ "$(ssh localhost -p 5555 cat /proc/sys/kernel/tainted)" -gt 0 ]]; then echo tainted kernel ; exit 1 ; fi .build-in-qemu@template: tags: - kvm script: - /app/vmctl start || (echo "Error - Failed to start the VM." && exit 1) - *check_tainted - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID" - export PREFIX="$(pwd)/prefix-$BUILD_ID" - export BUILDDIR="$(pwd)/build-$BUILD_ID" - export MAKEFLAGS="-j4" - | buildopt=() for bo in $FC_BUILD_ENABLED; do buildopt+=(-e $bo) done for bo in $FC_BUILD_DISABLED; do buildopt+=(-d $bo) done [ -n "$FC_BUILD_ARCH" ] && buildopt+=(-a $FC_BUILD_ARCH) [ $FC_BUILD_DISTCHECK -eq 1 ] && buildopt+=(-c) [ $FC_BUILD_NO_INSTALL -eq 1 ] && buildopt+=(-I) [ $FC_BUILD_NO_CHECK -eq 1 ] && buildopt+=(-C) buildopt+=(-s $FC_BUILDSYS) buildopt+=(-t $FC_BUILD_TYPE) buildopt+=(-X $FC_XML_BACKEND) export buildopt - "scp -r $(pwd) vm:" - echo "CI_JOB_ID=\"$CI_JOB_ID\"" > fcenv - echo "CI_JOB_NAME=\"$CI_JOB_NAME\"" >> fcenv - echo "BUILD_ID=\"$BUILD_ID\"" >> fcenv - echo "MAKEFLAGS=\"$MAKEFLAGS\"" >> fcenv - echo "MAKE=\"$MAKE\"" >> fcenv - "scp fcenv vm:~/$CI_PROJECT_NAME/.gitlab-ci/fcenv" - /app/vmctl exec "cd $CI_PROJECT_NAME ; bash .gitlab-ci/build.sh ${buildopt[@]}" && touch .success || true - scp -r vm:$CI_PROJECT_NAME/build $BUILDDIR - *check_tainted - /app/vmctl stop - if [[ ! -e .success ]]; then exit 1 ; fi variables: FC_BUILDSYS: autotools FC_XML_BACKEND: expat FC_BUILD_TYPE: both FC_BUILD_DISTCHECK: 0 FC_BUILD_NO_INSTALL: 0 FC_BUILD_NO_CHECK: 0 .build@template: script: - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID" - export PREFIX="$(pwd)/prefix-$BUILD_ID" - export BUILDDIR="$(pwd)/build-$BUILD_ID" - export MAKEFLAGS="-j4" - | buildopt=() for bo in $FC_BUILD_ENABLED; do buildopt+=(-e $bo) done for bo in $FC_BUILD_DISABLED; do buildopt+=(-d $bo) done [ -n "$FC_BUILD_ARCH" ] && buildopt+=(-a $FC_BUILD_ARCH) [ $FC_BUILD_DISTCHECK -eq 1 ] && buildopt+=(-c) [ $FC_BUILD_NO_INSTALL -eq 1 ] && buildopt+=(-I) [ $FC_BUILD_NO_CHECK -eq 1 ] && buildopt+=(-C) [ $FC_BUILD_SUBPROJECT -eq 1 ] && buildopt+=(-S) buildopt+=(-s $FC_BUILDSYS) buildopt+=(-t $FC_BUILD_TYPE) buildopt+=(-X $FC_XML_BACKEND) sh .gitlab-ci/build.sh ${buildopt[@]} variables: FC_BUILDSYS: autotools FC_XML_BACKEND: expat FC_BUILD_TYPE: both FC_BUILD_DISTCHECK: 0 FC_BUILD_NO_INSTALL: 0 FC_BUILD_NO_CHECK: 0 FC_BUILD_SUBPROJECT: 0 .fc_artifacts: artifacts: name: fontconfig-$CI_COMMIT_SHA-$CI_JOB_ID when: always expire_in: 5 days paths: - build*/doc/fontconfig-user.html - build*/doc/fontconfig-devel.html - build*/fc-build.log - build*/config.log - build*/fontconfig-*.tar.* - build*/test/*log - build*/fontconfig*/_build - build*/meson-logs/* - build*/meson-dist/* - prefix* .upload: rules: - if: $CI_COMMIT_TAG variables: PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/fontconfig/${CI_COMMIT_TAG}" script: - | for f in $(pwd)/build-fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-*/meson-dist/*; do curl --location --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file $f ${PACKAGE_REGISTRY_URL}/$(basename $f) done ####################################### # # # build stage # # # ####################################### build-autotools shared expat: stage: build extends: - .build@template - .fdo.distribution-image@fedora - .fc_artifacts variables: FC_DISTRO_NAME: fedora FDO_DISTRIBUTION_VERSION: rawhide FDO_DISTRIBUTION_TAG: $FEDORA_TAG FC_BUILDSYS: autotools FC_BUILD_TYPE: shared FC_XML_BACKEND: expat needs: - fedora:rawhide@container-prep build-autotools shared libxml2: stage: build extends: - .build@template - .fdo.distribution-image@fedora - .fc_artifacts variables: FC_DISTRO_NAME: fedora FDO_DISTRIBUTION_VERSION: rawhide FDO_DISTRIBUTION_TAG: $FEDORA_TAG FC_BUILDSYS: autotools FC_BUILD_TYPE: shared FC_XML_BACKEND: libxml2 needs: - fedora:rawhide@container-prep build-autotools static expat: stage: build extends: - .build@template - .fdo.distribution-image@fedora - .fc_artifacts variables: FC_DISTRO_NAME: fedora FDO_DISTRIBUTION_VERSION: rawhide FDO_DISTRIBUTION_TAG: $FEDORA_TAG FC_BUILDSYS: autotools FC_BUILD_TYPE: static FC_XML_BACKEND: expat needs: - fedora:rawhide@container-prep build-autotools static libxml2: stage: build extends: - .build@template - .fdo.distribution-image@fedora - .fc_artifacts variables: FC_DISTRO_NAME: fedora FDO_DISTRIBUTION_VERSION: rawhide FDO_DISTRIBUTION_TAG: $FEDORA_TAG FC_BUILDSYS: autotools FC_BUILD_TYPE: static FC_XML_BACKEND: libxml2 needs: - fedora:rawhide@container-prep build-meson shared expat: stage: build extends: - .build@template - .fdo.distribution-image@fedora - .fc_artifacts variables: FC_DISTRO_NAME: fedora FDO_DISTRIBUTION_VERSION: rawhide FDO_DISTRIBUTION_TAG: $FEDORA_TAG FC_BUILDSYS: meson FC_BUILD_TYPE: shared FC_XML_BACKEND: expat needs: - fedora:rawhide@container-prep build-meson shared libxml2: stage: build extends: - .build@template - .fdo.distribution-image@fedora - .fc_artifacts variables: FC_DISTRO_NAME: fedora FDO_DISTRIBUTION_VERSION: rawhide FDO_DISTRIBUTION_TAG: $FEDORA_TAG FC_BUILDSYS: meson FC_BUILD_TYPE: shared FC_XML_BACKEND: libxml2 needs: - fedora:rawhide@container-prep build-meson static expat: stage: build extends: - .build@template - .fdo.distribution-image@fedora - .fc_artifacts variables: FC_DISTRO_NAME: fedora FDO_DISTRIBUTION_VERSION: rawhide FDO_DISTRIBUTION_TAG: $FEDORA_TAG FC_BUILDSYS: meson FC_BUILD_TYPE: static FC_XML_BACKEND: expat needs: - fedora:rawhide@container-prep build-meson static libxml2: stage: build extends: - .build@template - .fdo.distribution-image@fedora - .fc_artifacts variables: FC_DISTRO_NAME: fedora FDO_DISTRIBUTION_VERSION: rawhide FDO_DISTRIBUTION_TAG: $FEDORA_TAG FC_BUILDSYS: meson FC_BUILD_TYPE: static FC_XML_BACKEND: libxml2 needs: - fedora:rawhide@container-prep build-meson static fontations: stage: build extends: - .build@template - .fdo.distribution-image@fedora - .fc_artifacts variables: FC_DISTRO_NAME: fedora FDO_DISTRIBUTION_VERSION: rawhide FDO_DISTRIBUTION_TAG: $FEDORA_TAG FC_BUILDSYS: meson FC_BUILD_TYPE: static FC_BUILD_ENABLED: fontations needs: - fedora:rawhide@container-prep ####################################### # # # test # # # ####################################### .test_hook@template: script: - export PREFIX="$(echo $(pwd)/prefix-*)" - | if [ -n "$FC_TEST_EXEC" -a -f ".gitlab-ci/test-${FC_TEST_EXEC}.sh" ]; then sh ".gitlab-ci/test-${FC_TEST_EXEC}.sh" else echo "*** No test script found" exit 1 fi variables: FC_TEST_EXEC: "" clang-format: stage: test extends: - .fdo.distribution-image@fedora variables: FDO_DISTRIBUTION_VERSION: 'rawhide' FDO_DISTRIBUTION_TAG: $FEDORA_TAG needs: - 'fedora:rawhide@container-prep' script: - | commit="${CI_MERGE_REQUEST_TARGET_BRANCH_SHA:-${CI_MERGE_REQUEST_DIFF_BASE_SHA:?}}" || exit echo sh .gitlab-ci/check-style.sh "$commit" sh .gitlab-ci/check-style.sh "$commit" rules: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' subproject-build shared: stage: test extends: - .build@template - .fdo.distribution-image@fedora - .fc_artifacts variables: FC_DISTRO_NAME: fedora FDO_DISTRIBUTION_VERSION: rawhide FDO_DISTRIBUTION_TAG: $FEDORA_TAG FC_TEST_EXEC: subproject-build shared FC_BUILDSYS: meson FC_BUILD_TYPE: shared FC_BUILD_SUBPROJECT: 1 needs: - fedora:rawhide@container-prep subproject-build static: stage: test extends: - .build@template - .fdo.distribution-image@fedora - .fc_artifacts variables: FC_DISTRO_NAME: fedora FDO_DISTRIBUTION_VERSION: rawhide FDO_DISTRIBUTION_TAG: $FEDORA_TAG FC_TEST_EXEC: subproject-build static FC_BUILDSYS: meson FC_BUILD_TYPE: static FC_BUILD_SUBPROJECT: 1 needs: - fedora:rawhide@container-prep meson-install-shared: stage: test extends: - .test_hook@template - .fdo.distribution-image@fedora - .fc_artifacts variables: FC_DISTRO_NAME: fedora FDO_DISTRIBUTION_VERSION: rawhide FDO_DISTRIBUTION_TAG: $FEDORA_TAG FC_TEST_EXEC: meson-install-shared needs: - fedora:rawhide@container-prep - build-meson shared libxml2 meson-install-static: stage: test extends: - .test_hook@template - .fdo.distribution-image@fedora - .fc_artifacts variables: FC_DISTRO_NAME: fedora FDO_DISTRIBUTION_VERSION: rawhide FDO_DISTRIBUTION_TAG: $FEDORA_TAG FC_TEST_EXEC: meson-install-static needs: - fedora:rawhide@container-prep - build-meson static libxml2 ####################################### # # # distro stage # # # ####################################### t_fedora:rawhide:standard build: stage: distro extends: - .build@template - .fdo.distribution-image@fedora - .fc_artifacts variables: FC_DISTRO_NAME: fedora FDO_DISTRIBUTION_VERSION: 'rawhide' FDO_DISTRIBUTION_TAG: $FEDORA_TAG FC_BUILDSYS: meson FC_BUILD_TYPE: shared FC_XML_BACKEND: libxml2 FC_BUILD_DISTCHECK: 1 needs: - 'fedora:rawhide@container-prep' t_fedora:41:standard build: stage: distro extends: - .build@template - .fdo.distribution-image@fedora - .fc_artifacts variables: FC_DISTRO_NAME: fedora FDO_DISTRIBUTION_VERSION: '41' FDO_DISTRIBUTION_TAG: $FEDORA_TAG FC_BUILDSYS: meson FC_BUILD_TYPE: shared FC_XML_BACKEND: libxml2 FC_BUILD_DISTCHECK: 1 needs: - 'fedora:41@container-prep' t_fedora:40:standard build: stage: distro extends: - .build@template - .fdo.distribution-image@fedora - .fc_artifacts variables: FC_DISTRO_NAME: fedora FDO_DISTRIBUTION_VERSION: '40' FDO_DISTRIBUTION_TAG: $FEDORA_TAG FC_BUILDSYS: meson FC_BUILD_TYPE: shared FC_XML_BACKEND: libxml2 FC_BUILD_DISTCHECK: 1 needs: - 'fedora:40@container-prep' t_fedora:rawhide:MinGW: stage: distro extends: - .build@template - .fdo.distribution-image@fedora - .fc_artifacts variables: FC_DISTRO_NAME: fedora FDO_DISTRIBUTION_VERSION: 'rawhide' FDO_DISTRIBUTION_TAG: $FEDORA_TAG FC_BUILDSYS: meson FC_BUILD_TYPE: static FC_BUILD_PLATFORM: mingw FC_BUILD_ARCH: linux-mingw-w64-64bit FC_BUILD_NO_INSTALL: 1 needs: - 'fedora:rawhide@container-prep' t_fedora:rawhide:android aarch64: stage: distro extends: - .build@template - .fdo.distribution-image@fedora - .fc_artifacts variables: FC_DISTRO_NAME: fedora FDO_DISTRIBUTION_VERSION: 'rawhide' FDO_DISTRIBUTION_TAG: $FEDORA_TAG FC_BUILDSYS: meson FC_BUILD_TYPE: shared FC_XML_BACKEND: expat FC_BUILD_PLATFORM: android FC_BUILD_ARCH: aarch64-linux-android FC_BUILD_NO_INSTALL: 1 FC_BUILD_DISABLED: nls FC_BUILD_NO_CHECK: 1 needs: - 'fedora:rawhide@container-prep' t_freebsd:14.1:standard build: stage: distro extends: - .build-in-qemu@template - .fdo.distribution-image@freebsd - .fc_artifacts variables: FC_DISTRO_NAME: freebsd FDO_DISTRIBUTION_VERSION: '14.1' FDO_DISTRIBUTION_TAG: $FREEBSD_TAG FC_BUILDSYS: meson FC_BUILD_TYPE: shared FC_XML_BACKEND: libxml2 FC_BUILD_NO_CHECK: 1 needs: - 'freebsd:14.1@container-prep' ####################################### # # # deploy stage # # # ####################################### check-merge-request: extends: - .fdo.ci-fairy stage: deploy script: - ci-fairy check-merge-request --require-allow-collaboration --junit-xml=results.xml artifacts: when: on_failure reports: junit: results.xml allow_failure: true rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" upload_asset: stage: deploy needs: - t_fedora:rawhide:standard build extends: - .fdo.distribution-image@fedora - .upload variables: FDO_DISTRIBUTION_VERSION: 'rawhide' FDO_DISTRIBUTION_TAG: $FEDORA_TAG pages: stage: deploy needs: - t_fedora:rawhide:standard build dependencies: - t_fedora:rawhide:standard build script: - | mkdir public || : cp -a build*/doc/fontconfig-user.html build*/doc/fontconfig-devel.html public/ artifacts: paths: - public rules: - if: $CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE != "merge_request_event" make-release: stage: deploy image: registry.gitlab.com/gitlab-org/cli:latest rules: - if: $CI_COMMIT_TAG variables: PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/fontconfig/${CI_COMMIT_TAG}" script: - glab auth login -h ${CI_SERVER_HOST} -j ${CI_JOB_TOKEN} - | glab changelog generate -v ${CI_COMMIT_TAG} > changelog-${CI_COMMIT_TAG}.md glab release create ${CI_COMMIT_TAG} --name "Release ${CI_COMMIT_TAG}" -F changelog-${CI_COMMIT_TAG}.md -a "[{\"name\": \"fontconfig-${CI_COMMIT_TAG}.tar.xz\", \"url\": \"${PACKAGE_REGISTRY_URL}/fontconfig-${CI_COMMIT_TAG}.tar.xz\"}, {\"name\": \"fontconfig-${CI_COMMIT_TAG}.tar.xz (sha256sum)\", \"url\": \"${PACKAGE_REGISTRY_URL}/fontconfig-${CI_COMMIT_TAG}.tar.xz.sha256sum\"}]" workflow: rules: - if: $CI_COMMIT_TAG - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS when: never - if: $CI_COMMIT_BRANCH fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/.gitlab-ci/000077500000000000000000000000001503113465200233035ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/.gitlab-ci/.gitignore000066400000000000000000000000041503113465200252650ustar00rootroot00000000000000/*~ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/.gitlab-ci/aarch64-linux-android.txt000066400000000000000000000012571503113465200300540ustar00rootroot00000000000000[constants] ndk_path = '/android/ndk' toolchain_path = ndk_path + '/toolchains/llvm/prebuilt/linux-x86_64/bin' toolchain = toolchain_path + '/aarch64-linux-android' api = '28' [host_machine] system = 'android' cpu_family = 'aarch64' cpu = 'aarch64' endian = 'little' [properties] sys_root = ndk_path + '/sysroot' [binaries] c = toolchain + api + '-clang' cpp = toolchain + api + '-clang++' ar = toolchain_path + '/llvm-ar' strip = toolchain_path + '/llvm-strip' c_ld = toolchain_path + '/ld' cpp_ld = toolchain_path + '/ld' [built-in options] c_args = ['-Wno-pointer-bool-conversion'] fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/.gitlab-ci/build.sh000077500000000000000000000177511503113465200247540ustar00rootroot00000000000000#! /bin/bash set -ex set -o pipefail cidir=$(dirname $0) [ -f ${cidir}/fcenv ] && . ${cidir}/fcenv case "$OSTYPE" in msys) MyPWD=$(pwd -W) ;; *BSD) PATH=$PATH:/usr/local/bin ;& *) MyPWD=$(pwd) ;; esac enable=() disable=() distcheck=0 enable_install=1 disable_check=0 clean_build=1 cross=0 subproject=0 subprojectname="" buildsys="meson" type="shared" arch="" buildopt=() optimization="" SRCDIR=$MyPWD export MAKE=${MAKE:-make} export BUILD_ID=${BUILD_ID:-fontconfig-$$} export PREFIX=${PREFIX:-$MyPWD/prefix} export BUILDDIR=${BUILDDIR:-$MyPWD/build} export CI_MERGE_REQUEST_PROJECT_URL=${CI_MERGE_REQUEST_PROJECT_URL:-https://gitlab.freedesktop.org/fontconfig/fontconfig} export CI_COMMIT_REF_NAME=${CI_COMMIT_REF_NAME:-main} if [ "x$FC_DISTRO_NAME" = "x" ]; then . /etc/os-release || : FC_DISTRO_NAME=$ID fi if [ "x$FC_DISTRO_NAME" = "x" ]; then echo "***" echo "*** Unable to detect OS. cross-compiling may not work. Please consider setting FC_DISTRO_NAME" echo "***" sleep 3 fi while getopts a:cCe:d:hINO:s:St:X: OPT do case $OPT in 'a') arch=$OPTARG ;; 'c') distcheck=1 ;; 'C') disable_check=1 ;; 'e') enable+=($OPTARG) ;; 'd') disable+=($OPTARG) ;; 'I') enable_install=0 ;; 'N') clean_build=0 ;; 'O') optimization=$OPTARG ;; 's') buildsys=$OPTARG ;; 'S') subproject=1 ;; 't') type=$OPTARG ;; 'X') backend=$OPTARG ;; 'h') set +x echo "Usage: $0 [-a ARCH] [-c] [-C] [-e OPT] [-d OPT] [-h] [-I] [-N] [-O N] [-s BUILDSYS] [-S] [-t BUILDTYPE] [-X XMLBACKEND]" echo "Options:" echo " -a ARCH Use ARCH for cross-compile. Depends on BUILDSYS" echo " -c Run distcheck" echo " -C Do not run unit tests" echo " -e OPT Enable OPT feature to build" echo " -d OPT Disable OPT feature to build" echo " -I Run install" echo " -N Do not clean build directory" echo " -O N Optimization level to build" echo " -s BUILDSYS Use BUILDSYS to build (default: $buildsys)" echo " -S Run sub-project build. Take effect on meson only" echo " -t BUILDTYPE shared build or static build (default: $type)" echo " -X XMLBACKEND Use XMLBACKEND for xml parser library" echo "" echo "FC_BUILD_PLATFORM: Set a platform for cross-compiling, mingw or android" exit 1 ;; esac done case x"$FC_BUILD_PLATFORM" in 'xmingw') cross=1 ;; 'xandroid') cross=1 ;; *) cross=0 ;; esac env clean_exit() { rc=$? trap - INT TERM ABRT EXIT if [ "x$TASK" != "x" ]; then echo "Aborting from \"$TASK\" with the exit code $rc" fi mv /tmp/fc-build.log . || : exit $rc } trap clean_exit INT TERM ABRT EXIT if [ x"$buildsys" == "xautotools" ]; then if [ $subproject -eq 1 ]; then echo "Subproject build not supported in autotools" exit 1 fi for i in "${enable[@]}"; do buildopt+=(--enable-$i) done for i in "${disable[@]}"; do buildopt+=(--disable-$i) done case x"$backend" in 'xexpat') buildopt+=(--disable-libxml2) ;; 'xlibxml2') buildopt+=(--enable-libxml2) ;; esac case x"$type" in 'xshared') buildopt+=(--enable-shared) buildopt+=(--disable-static) ;; 'xstatic') buildopt+=(--disable-shared) buildopt+=(--enable-static) ;; 'both') buildopt+=(--enable-shared) buildopt+=(--enable-static) ;; esac if [ $cross -eq 1 -a -n "$arch" ]; then buildopt+=(--host=$arch) if [ ! -f .gitlab-ci/${FC_DISTRO_NAME}-cross.sh ]; then echo "No ${FC_DISTRO_NAME}-cross.sh available" exit 1 fi . .gitlab-ci/${FC_DISTRO_NAME}-cross.sh fi if [ $clean_build -eq 1 ]; then rm -rf "$BUILDDIR" "$PREFIX" || : mkdir "$BUILDDIR" "$PREFIX" fi cd "$BUILDDIR" TASK="autogen.sh" ../autogen.sh --prefix="$PREFIX" --disable-cache-build ${buildopt[*]} 2>&1 | tee /tmp/fc-build.log TASK="make" $MAKE V=1 2>&1 | tee -a /tmp/fc-build.log if [ $disable_check -eq 0 ]; then TASK="make check" $MAKE check V=1 2>&1 | tee -a /tmp/fc-build.log fi if [ $enable_install -eq 1 ]; then TASK="make install" $MAKE install V=1 2>&1 | tee -a /tmp/fc-build.log fi if [ $distcheck -eq 1 ]; then TASK="make distcheck" $MAKE distcheck V=1 2>&1 | tee -a /tmp/fc-build.log fi elif [ x"$buildsys" == "xmeson" ]; then TASK="pip install" pip install "meson>=1.6.1" # tomli not required for Python >= 3.11 pip install tomli pip install pytest pytest-tap requests for i in "${enable[@]}"; do buildopt+=(-D$i=enabled) # Update bindgen on Fontations builds to improve support for constants in fcint.h if [[ "$i" == "fontations" ]]; then TASK="cargo install" cargo install bindgen-cli # Prepend the cargo bin directory to PATH if [[ -d "$HOME/.cargo/bin" ]]; then export PATH="$HOME/.cargo/bin:$PATH" echo "Cargo bin directory added to PATH." else echo "Cargo bin directory not found." fi fi done if [ $subproject -eq 1 ]; then buildopt+=(--force-fallback-for=fontconfig) if [ -d fc-ci-meson-subproject ]; then rm -rf fc-ci-meson-subproject fi TASK="git clone" git clone https://gitlab.freedesktop.org/fontconfig/fc-ci-meson-subproject.git cd fc-ci-meson-subproject pushd subprojects git clone ${CI_MERGE_REQUEST_PROJECT_URL}.git if [ -n "$CI_MERGE_REQUEST_IID" ]; then pushd fontconfig git fetch origin merge-requests/$CI_MERGE_REQUEST_IID/head:$CI_COMMIT_REF_NAME git switch $CI_COMMIT_REF_NAME popd else # use main branch instead : fi popd subprojectname="fontconfig:" fi TASK= if [ -n "$optimization" ]; then buildopt+=(--optimization=$optimization) fi for i in "${disable[@]}"; do buildopt+=(-D${subprojectname}$i=disabled) done case x"$backend" in 'xexpat') buildopt+=(-D${subprojectname}xml-backend=expat) ;; 'xlibxml2') buildopt+=(-D${subprojectname}xml-backend=libxml2) ;; esac if [ $cross -eq 1 -a -n "$arch" ]; then buildopt+=(--cross-file) buildopt+=(.gitlab-ci/$arch.txt) if [ ! -f .gitlab-ci/$FC_DISTRO_NAME-cross.sh ]; then echo "No $FC_DISTRO_NAME-cross.sh available" exit 1 fi if [ $subproject -eq 1 ]; then . subprojects/fontconfig/.gitlab-ci/$FC_DISTRO_NAME-cross.sh else . .gitlab-ci/$FC_DISTRO_NAME-cross.sh fi fi buildopt+=(--default-library=$type) if [ $clean_build -eq 1 ]; then rm -rf "$BUILDDIR" "$PREFIX" || : fi TASK="meson setup" meson setup --prefix="$PREFIX" -D${subprojectname}nls=enabled -D${subprojectname}cache-build=disabled -D${subprojectname}iconv=enabled ${buildopt[*]} "$BUILDDIR" 2>&1 | tee /tmp/fc-build.log TASK="meson compile" meson compile -v -C "$BUILDDIR" 2>&1 | tee -a /tmp/fc-build.log if [ $disable_check -eq 0 ]; then TASK="meson test" meson test -v -C "$BUILDDIR" 2>&1 | tee -a /tmp/fc-build.log fi if [ $enable_install -eq 1 ]; then TASK="meson install" meson install -C "$BUILDDIR" 2>&1 | tee -a /tmp/fc-build.log fi if [ $distcheck -eq 1 ]; then TASK="meson dist" meson dist -C "$BUILDDIR" 2>&1 | tee -a /tmp/fc-build.log fi fi TASK= exit 0 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/.gitlab-ci/check-style.sh000066400000000000000000000001521503113465200260500ustar00rootroot00000000000000#! /bin/bash set -e commit=$1 echo git clang-format --diff "$commit" git clang-format --diff "$commit" fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/.gitlab-ci/ci.template000066400000000000000000000366361503113465200254510ustar00rootroot00000000000000# vim: set expandtab shiftwidth=2 tabstop=8 textwidth=0 filetype=yaml: {# You're looking at the template here, so you can ignore the below warning. This is the right file to edit #} ####################################### # # # THIS FILE IS GENERATED, DO NOT EDIT # # # ####################################### # To change the gitlab CI, edit .gitlab-ci/ci.template and/or .gitlab-ci/config.yml # and run ci-fairy generate-template. For details, see # https://freedesktop.pages.freedesktop.org/ci-templates/ci-fairy.html#templating-gitlab-ci-yml .templates_sha: &template_sha ef5e4669b7500834a17ffe9277e15fbb6d977fff include: {% for distro in distributions|sort(attribute="name")|unique(attribute="name") %} # {{ distro.name.capitalize() }} container builder template - project: 'freedesktop/ci-templates' ref: *template_sha file: '/templates/{{distro.name}}.yml' {% endfor %} - project: 'freedesktop/ci-templates' ref: *template_sha file: '/templates/ci-fairy.yml' - local: '.gitlab-ci/other.yml' stages: - sanity check - prep - build - test - distro - deploy - container_clean variables: FDO_UPSTREAM_REPO: fontconfig/fontconfig GIT_DEPTH: 1 # these tags should be updated each time the list of packages is updated # changing these will force rebuilding the associated image # Note: these tags have no meaning and are not tied to a particular # fontconfig version {% for distro in distributions|unique(attribute="name") %} {{"%-15s"| format(distro.name.upper() + '_TAG:')}}'{{distro.tag}}-{{ (ci_fairy.hashfiles('.gitlab-ci/config.yml', '.gitlab-ci/' + distro.name + '-install.sh', 'build-aux/fetch-testfonts.py'))[0:12] }}' {% endfor %} {% for distro in distributions|unique(attribute="name") %} {{"%-15s"| format(distro.name.upper() + '_EXEC:')}}'bash .gitlab-ci/{{distro.name}}-install.sh' {% endfor %} ####################################### # # # sanity check # # # ####################################### fail-if-fork-is-not-public: stage: sanity check script: - | if [ $CI_PROJECT_VISIBILITY != "public" ]; then echo "*************************************************************************************" echo "Project visibility must be set to 'public'." echo "Change this in $CI_PROJECT_URL/edit under 'Visibility, project features, permissions'" echo "*************************************************************************************" exit 1 fi except: - main@fontconfig/fontconfig check-ci-script: extends: - .fdo.ci-fairy stage: sanity check script: - ci-fairy generate-template --verify && exit 0 || true - > printf "%s\n" \ "Committed gitlab-ci.yml differs from generated gitlab-ci.yml." \ "To change the gitlab CI, edit .gitlab-ci/ci.template and/or .gitlab-ci/config.yml" \ " and run ci-fairy generate-template. For details, see " \ "https://freedesktop.pages.freedesktop.org/ci-templates/ci-fairy.html#templating-gitlab-ci-yml" - exit 1 ####################################### # # # containers stage # # # ####################################### # Build a container for each distribution + version. The ci-templates # will re-use the containers if the tag doesn't change. {% for distro in distributions|unique(attribute="name") %} {% for version in distro.versions %} {{distro.name}}:{{version}}@container-prep: {% if distro.qemu_based %} extends: .fdo.qemu-build@{{distro.name}} {% else %} extends: .fdo.container-build@{{distro.name}} {% endif %} {% if distro.qemu_based %} tags: - kvm {% endif %} stage: prep variables: GIT_STRATEGY: none FDO_DISTRIBUTION_VERSION: '{{version}}' FDO_DISTRIBUTION_PACKAGES: '{{' '.join(packages[distro.name].needed)}}' FDO_DISTRIBUTION_TAG: ${{distro.name.upper()}}_TAG FDO_DISTRIBUTION_EXEC: ${{distro.name.upper()}}_EXEC {% endfor %} {% endfor %} ####################################### # # # container clean stage # # # ####################################### # # This stage will look for the container images e currently have in # the registry and will remove any that are not tagged with the provided # $container_image:$tag # # This job only runs for a scheduled pipeline. # # Go to your Profile, Settings, Access Tokens # Create a personal token with `api' scope, copy the value. # Go to CI/CD, Schedules, schedule a monthly job. # Define a variable of type File named AUTHFILE. Content is that token # value. .container-clean: stage: container_clean image: golang:alpine before_script: - apk add python3 py-pip git - pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates script: - ci-fairy -v --authfile $AUTHFILE delete-image --repository $FDO_DISTRIBUTION_NAME/$FDO_DISTRIBUTION_VERSION --exclude-tag $FDO_DISTRIBUTION_TAG dependencies: [] allow_failure: true only: - schedules {% for distro in distributions|unique(attribute="name") %} {% for version in distro.versions %} {{distro.name}}:{{version}}@container-clean: extends: - .container-clean variables: GIT_STRATEGY: none CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/{{distro.name}}/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG FDO_DISTRIBUTION_VERSION: '{{version}}' FDO_DISTRIBUTION_TAG: ${{distro.name.upper()}}_TAG {% endfor %} {% endfor %} ####################################### # # # build template # # # ####################################### .check_tainted: &check_tainted | # make sure the kernel is not tainted if [[ "$(ssh localhost -p 5555 cat /proc/sys/kernel/tainted)" -gt 0 ]]; then echo tainted kernel ; exit 1 ; fi .build-in-qemu@template: tags: - kvm script: - /app/vmctl start || (echo "Error - Failed to start the VM." && exit 1) - *check_tainted - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID" - export PREFIX="$(pwd)/prefix-$BUILD_ID" - export BUILDDIR="$(pwd)/build-$BUILD_ID" - export MAKEFLAGS="-j4" - | buildopt=() for bo in $FC_BUILD_ENABLED; do buildopt+=(-e $bo) done for bo in $FC_BUILD_DISABLED; do buildopt+=(-d $bo) done [ -n "$FC_BUILD_ARCH" ] && buildopt+=(-a $FC_BUILD_ARCH) [ $FC_BUILD_DISTCHECK -eq 1 ] && buildopt+=(-c) [ $FC_BUILD_NO_INSTALL -eq 1 ] && buildopt+=(-I) [ $FC_BUILD_NO_CHECK -eq 1 ] && buildopt+=(-C) buildopt+=(-s $FC_BUILDSYS) buildopt+=(-t $FC_BUILD_TYPE) buildopt+=(-X $FC_XML_BACKEND) export buildopt - "scp -r $(pwd) vm:" - echo "CI_JOB_ID=\"$CI_JOB_ID\"" > fcenv - echo "CI_JOB_NAME=\"$CI_JOB_NAME\"" >> fcenv - echo "BUILD_ID=\"$BUILD_ID\"" >> fcenv - echo "MAKEFLAGS=\"$MAKEFLAGS\"" >> fcenv - echo "MAKE=\"$MAKE\"" >> fcenv - "scp fcenv vm:~/$CI_PROJECT_NAME/.gitlab-ci/fcenv" - /app/vmctl exec "cd $CI_PROJECT_NAME ; bash .gitlab-ci/build.sh ${buildopt[@]}" && touch .success || true - scp -r vm:$CI_PROJECT_NAME/build $BUILDDIR - *check_tainted - /app/vmctl stop - if [[ ! -e .success ]]; then exit 1 ; fi variables: FC_BUILDSYS: autotools FC_XML_BACKEND: expat FC_BUILD_TYPE: both FC_BUILD_DISTCHECK: 0 FC_BUILD_NO_INSTALL: 0 FC_BUILD_NO_CHECK: 0 .build@template: script: - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID" - export PREFIX="$(pwd)/prefix-$BUILD_ID" - export BUILDDIR="$(pwd)/build-$BUILD_ID" - export MAKEFLAGS="-j4" - | buildopt=() for bo in $FC_BUILD_ENABLED; do buildopt+=(-e $bo) done for bo in $FC_BUILD_DISABLED; do buildopt+=(-d $bo) done [ -n "$FC_BUILD_ARCH" ] && buildopt+=(-a $FC_BUILD_ARCH) [ $FC_BUILD_DISTCHECK -eq 1 ] && buildopt+=(-c) [ $FC_BUILD_NO_INSTALL -eq 1 ] && buildopt+=(-I) [ $FC_BUILD_NO_CHECK -eq 1 ] && buildopt+=(-C) [ $FC_BUILD_SUBPROJECT -eq 1 ] && buildopt+=(-S) buildopt+=(-s $FC_BUILDSYS) buildopt+=(-t $FC_BUILD_TYPE) buildopt+=(-X $FC_XML_BACKEND) sh .gitlab-ci/build.sh ${buildopt[@]} variables: FC_BUILDSYS: autotools FC_XML_BACKEND: expat FC_BUILD_TYPE: both FC_BUILD_DISTCHECK: 0 FC_BUILD_NO_INSTALL: 0 FC_BUILD_NO_CHECK: 0 FC_BUILD_SUBPROJECT: 0 .fc_artifacts: artifacts: name: fontconfig-$CI_COMMIT_SHA-$CI_JOB_ID when: always expire_in: 5 days paths: - build*/doc/fontconfig-user.html - build*/doc/fontconfig-devel.html - build*/fc-build.log - build*/config.log - build*/fontconfig-*.tar.* - build*/test/*log - build*/fontconfig*/_build - build*/meson-logs/* - build*/meson-dist/* - prefix* .upload: rules: - if: $CI_COMMIT_TAG variables: PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/fontconfig/${CI_COMMIT_TAG}" script: - | for f in $(pwd)/build-fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-*/meson-dist/*; do curl --location --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file $f ${PACKAGE_REGISTRY_URL}/$(basename $f) done ####################################### # # # build stage # # # ####################################### {% for build in build_patterns %} build-{{build.name}}: stage: build extends: - .build@template - .fdo.distribution-image@fedora - .fc_artifacts variables: FC_DISTRO_NAME: fedora FDO_DISTRIBUTION_VERSION: rawhide FDO_DISTRIBUTION_TAG: $FEDORA_TAG {# Where we have extra_variables defined, add them to the list #} {% if build.variables is defined %} {% for key, value in build.variables.items() %} {{key}}: {{value}} {% endfor %} {% endif %} needs: - fedora:rawhide@container-prep {% endfor %} ####################################### # # # test # # # ####################################### .test_hook@template: script: - export PREFIX="$(echo $(pwd)/prefix-*)" - | if [ -n "$FC_TEST_EXEC" -a -f ".gitlab-ci/test-${FC_TEST_EXEC}.sh" ]; then sh ".gitlab-ci/test-${FC_TEST_EXEC}.sh" else echo "*** No test script found" exit 1 fi variables: FC_TEST_EXEC: "" clang-format: stage: test extends: - .fdo.distribution-image@fedora variables: FDO_DISTRIBUTION_VERSION: 'rawhide' FDO_DISTRIBUTION_TAG: $FEDORA_TAG needs: - 'fedora:rawhide@container-prep' script: - | commit="${CI_MERGE_REQUEST_TARGET_BRANCH_SHA:-${CI_MERGE_REQUEST_DIFF_BASE_SHA:?}}" || exit echo sh .gitlab-ci/check-style.sh "$commit" sh .gitlab-ci/check-style.sh "$commit" rules: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' {% for test in test_patterns %} {{test.name}}: stage: test extends: {% if 'parent' in test %} - .test_hook@template {% else %} - .build@template {% endif %} - .fdo.distribution-image@fedora - .fc_artifacts variables: FC_DISTRO_NAME: fedora FDO_DISTRIBUTION_VERSION: rawhide FDO_DISTRIBUTION_TAG: $FEDORA_TAG FC_TEST_EXEC: {{test.name}} {# Where we have extra_variables defined, add them to the list #} {% if test.variables is defined %} {% for key, value in test.variables.items() %} {{key}}: {{value}} {% endfor %} {% endif %} needs: - fedora:rawhide@container-prep {% if 'parent' in test %} - build-{{test.parent}} {% endif %} {% endfor %} ####################################### # # # distro stage # # # ####################################### {% for distro in distributions %} {% for version in distro.versions %} {% for build in distro.builds %} {% if not 'build_only' in build or build.build_only == version %} t_{{distro.name}}:{{version}}:{{build.name}}: stage: distro extends: {% if distro.qemu_based %} - .build-in-qemu@template {% else %} - .build@template {% endif %} - .fdo.distribution-image@{{distro.name}} - .fc_artifacts variables: FC_DISTRO_NAME: {{distro.name}} FDO_DISTRIBUTION_VERSION: '{{version}}' FDO_DISTRIBUTION_TAG: ${{distro.name.upper()}}_TAG {# Where we have extra_variables defined, add them to the list #} {% if build.variables is defined %} {% for key, value in build.variables.items() %} {{key}}: {{value}} {% endfor %} {% endif %} needs: - '{{distro.name}}:{{version}}@container-prep' {% endif %} {% endfor %} {% endfor %} {% endfor %} ####################################### # # # deploy stage # # # ####################################### check-merge-request: extends: - .fdo.ci-fairy stage: deploy script: - ci-fairy check-merge-request --require-allow-collaboration --junit-xml=results.xml artifacts: when: on_failure reports: junit: results.xml allow_failure: true rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" {% for distro in distributions %} {% for version in distro.versions %} {% for build in distro.builds %} {% if 'upload' in build and build.upload == version %} upload_asset: stage: deploy needs: - t_{{distro.name}}:{{version}}:{{build.name}} extends: - .fdo.distribution-image@{{distro.name}} - .upload variables: FDO_DISTRIBUTION_VERSION: '{{version}}' FDO_DISTRIBUTION_TAG: ${{distro.name.upper()}}_TAG {% endif %} {% if 'doc' in build and build.doc == version %} pages: stage: deploy needs: - t_{{distro.name}}:{{version}}:{{build.name}} dependencies: - t_{{distro.name}}:{{version}}:{{build.name}} script: - | mkdir public || : cp -a build*/doc/fontconfig-user.html build*/doc/fontconfig-devel.html public/ artifacts: paths: - public rules: - if: $CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE != "merge_request_event" {% endif %} {% endfor %} {% endfor %} {% endfor %} make-release: stage: deploy image: registry.gitlab.com/gitlab-org/cli:latest rules: - if: $CI_COMMIT_TAG variables: PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/fontconfig/${CI_COMMIT_TAG}" script: - glab auth login -h ${CI_SERVER_HOST} -j ${CI_JOB_TOKEN} - | glab changelog generate -v ${CI_COMMIT_TAG} > changelog-${CI_COMMIT_TAG}.md glab release create ${CI_COMMIT_TAG} --name "Release ${CI_COMMIT_TAG}" -F changelog-${CI_COMMIT_TAG}.md -a "[{\"name\": \"fontconfig-${CI_COMMIT_TAG}.tar.xz\", \"url\": \"${PACKAGE_REGISTRY_URL}/fontconfig-${CI_COMMIT_TAG}.tar.xz\"}, {\"name\": \"fontconfig-${CI_COMMIT_TAG}.tar.xz (sha256sum)\", \"url\": \"${PACKAGE_REGISTRY_URL}/fontconfig-${CI_COMMIT_TAG}.tar.xz.sha256sum\"}]" workflow: rules: - if: $CI_COMMIT_TAG - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS when: never - if: $CI_COMMIT_BRANCH fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/.gitlab-ci/config.yml000066400000000000000000000100661503113465200252760ustar00rootroot00000000000000.default_tag: &default_tag "2025-04-30.1" build_patterns: - name: "autotools shared expat" variables: FC_BUILDSYS: autotools FC_BUILD_TYPE: shared FC_XML_BACKEND: expat - name: "autotools shared libxml2" variables: FC_BUILDSYS: autotools FC_BUILD_TYPE: shared FC_XML_BACKEND: libxml2 - name: "autotools static expat" variables: FC_BUILDSYS: autotools FC_BUILD_TYPE: static FC_XML_BACKEND: expat - name: "autotools static libxml2" variables: FC_BUILDSYS: autotools FC_BUILD_TYPE: static FC_XML_BACKEND: libxml2 - name: "meson shared expat" variables: FC_BUILDSYS: meson FC_BUILD_TYPE: shared FC_XML_BACKEND: expat - name: "meson shared libxml2" variables: FC_BUILDSYS: meson FC_BUILD_TYPE: shared FC_XML_BACKEND: libxml2 - name: "meson static expat" variables: FC_BUILDSYS: meson FC_BUILD_TYPE: static FC_XML_BACKEND: expat - name: "meson static libxml2" variables: FC_BUILDSYS: meson FC_BUILD_TYPE: static FC_XML_BACKEND: libxml2 - name: "meson static fontations" variables: FC_BUILDSYS: meson FC_BUILD_TYPE: static FC_BUILD_ENABLED: "fontations" test_patterns: - name: "subproject-build shared" variables: FC_BUILDSYS: meson FC_BUILD_TYPE: shared FC_BUILD_SUBPROJECT: 1 - name: "subproject-build static" variables: FC_BUILDSYS: meson FC_BUILD_TYPE: static FC_BUILD_SUBPROJECT: 1 - name: "meson-install-shared" parent: "meson shared libxml2" - name: "meson-install-static" parent: "meson static libxml2" distributions: - name: fedora tag: *default_tag base_type: fedora qemu_based: false versions: - "rawhide" - "41" - "40" builds: - name: "standard build" upload: "rawhide" doc: "rawhide" variables: FC_BUILDSYS: meson FC_BUILD_TYPE: shared FC_XML_BACKEND: libxml2 FC_BUILD_DISTCHECK: 1 - name: fedora tag: *default_tag base_type: fedora qemu_based: false versions: - "rawhide" builds: - name: "MinGW" variables: FC_BUILDSYS: meson FC_BUILD_TYPE: static FC_BUILD_PLATFORM: mingw FC_BUILD_ARCH: linux-mingw-w64-64bit FC_BUILD_NO_INSTALL: 1 - name: "android aarch64" variables: FC_BUILDSYS: meson FC_BUILD_TYPE: shared FC_XML_BACKEND: expat FC_BUILD_PLATFORM: android FC_BUILD_ARCH: aarch64-linux-android FC_BUILD_NO_INSTALL: 1 FC_BUILD_DISABLED: nls FC_BUILD_NO_CHECK: 1 - name: freebsd tag: *default_tag base_type: freebsd qemu_based: true versions: - "14.1" builds: - name: "standard build" variables: FC_BUILDSYS: meson FC_BUILD_TYPE: shared FC_XML_BACKEND: libxml2 FC_BUILD_NO_CHECK: 1 packages: fedora: needed: [ "@buildsys-build", "autoconf", "automake", "clang-devel", "clang-tools-extra", "curl", "libtool", "gettext", "gettext-devel", "gperf", "expat-devel", "libxml2-devel", "freetype-devel", "json-c-devel", "git", "git-clang-format", "docbook-utils", "docbook-utils-pdf", "bubblewrap", "ninja-build", "wget", "python3-pip", "mingw64-expat", "mingw64-gcc", "mingw64-gettext", "mingw64-freetype", "mingw64-libxml2", "rust", "cargo", "bindgen-cli" ] freebsd: needed: [ "gcc", "autoconf", "automake", "libtool", "gettext", "gperf", "expat", "libxml2", "freetype2", "json-c", "git", "ninja", "wget", "python3", "py311-pip", "pkgconf", "gmake", "gettext-runtime", ] fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/.gitlab-ci/fedora-cross.sh000066400000000000000000000001431503113465200262240ustar00rootroot00000000000000#! /bin/sh if [ x"$FC_BUILD_PLATFORM" == "xmingw" ]; then eval `rpm --eval %{mingw64_env}` fi fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/.gitlab-ci/fedora-install.sh000066400000000000000000000015621503113465200265470ustar00rootroot00000000000000#! /bin/bash set -ex # Disable fedora-cisco-openh264 repo to avoid signature verification fail during # signature migration for new release. # We don't need it. dnf --version|grep dnf5 > /dev/null || ret=$? if [[ $ret -eq 0 ]]; then dnf -y install dnf5-plugins dnf -y config-manager setopt fedora-cisco-openh264.enabled=0 else dnf -y install dnf-plugins-core dnf -y config-manager --set-disabled fedora-cisco-openh264 fi # workaround to avoid conflict between systemd and systemd-standalone-sysusers dnf -y swap systemd-standalone-sysusers systemd dnf -y install wine # Install Android NDK dnf -y install unzip mkdir /android pushd /android curl -O https://dl.google.com/android/repository/android-ndk-r28-linux.zip unzip android-ndk-r28-linux.zip ln -sf android-ndk-r28 ndk rm android-ndk-r28-linux.zip popd python3 build-aux/fetch-testfonts.py --target-dir /testfontsfontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/.gitlab-ci/freebsd-cross.sh000066400000000000000000000000701503113465200263750ustar00rootroot00000000000000#! /bin/sh echo "** Cross build not supported." exit 1 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/.gitlab-ci/freebsd-install.sh000066400000000000000000000000271503113465200267140ustar00rootroot00000000000000#! /bin/bash set -ex fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/.gitlab-ci/linux-mingw-w64-64bit.txt000066400000000000000000000007631503113465200276740ustar00rootroot00000000000000[host_machine] system = 'windows' cpu_family = 'x86_64' cpu = 'x86_64' endian = 'little' [properties] # Will be picked up from env vars if not defined here #c_args = [] #c_link_args = [] [binaries] c = 'x86_64-w64-mingw32-gcc' cpp = 'x86_64-w64-mingw32-g++' ar = 'x86_64-w64-mingw32-ar' ld = 'x86_64-w64-mingw32-ld' objcopy = 'x86_64-w64-mingw32-objcopy' strip = 'x86_64-w64-mingw32-strip' pkgconfig = 'x86_64-w64-mingw32-pkg-config' windres = 'x86_64-w64-mingw32-windres' # exe_wrapper = 'wine64'fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/.gitlab-ci/other.yml000066400000000000000000000114151503113465200251510ustar00rootroot00000000000000# FIXME: fontconfig should probably get its own image # In the meantime, the latest GStreamer image tag can be found here: # https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/.gitlab-image-tags.yml#L18 .build meson windows: image: "registry.freedesktop.org/gstreamer/gstreamer/amd64/windows:2024-11-12.0-main" stage: "distro" tags: - "docker" - "windows" - "2022" variables: # Make sure any failure in PowerShell scripts is fatal ErrorActionPreference: "Stop" WarningPreference: "Stop" # Uncomment the following key if need to pass custom args, as well with the # $env:MESON_ARGS line in the `script:` blocks # MESON_ARGS: >- # -Dfoo=enabled # -Dbar=disabled before_script: # Make sure meson is up to date, so we don't need to rebuild the image with each release - pip3 install -U meson>=1.6.1 certifi tomli requests # Test Rust availability. As of 11/25/2024, according to # https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/ci/docker/windows/Dockerfile # Rust 1.82 is already installed. - rustc --version script: # For some reason, options are separated by newline instead of space, so we # have to replace them first. # - $env:MESON_ARGS = $env:MESON_ARGS.replace("`n"," ") # Gitlab executes PowerShell in docker, but VsDevCmd.bat is a batch script. # Environment variables substitutions is done by PowerShell before calling # cmd.exe, that's why we use $env:FOO instead of %FOO% - cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=$env:ARCH && SET CERT_PATH=$(python -m certifi) && SET SSL_CERT_FILE=$(python -m certifi) && SET REQUESTS_CA_BUNDLE=$(python -m certifi) && meson setup -Dxml-backend=expat $env:MESON_ARGS build && meson compile --verbose -C build && meson test -C build" artifacts: name: fontconfig-$CI_COMMIT_SHA-$CI_JOB_ID when: always paths: - build-*/meson-logs/*txt - prefix-* meson vs2019 x86: extends: ".build meson windows" variables: ARCH: "x86" MESON_ARGS: "-Dfontations=disabled" # A Windows Fontations build would currently require # libclang and llvm installation which is a several hundred megabyte download. # Skip that configuration for now. .meson macos test: stage: "distro" # See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/.gitlab-ci.yml # As of 2024-11-21, this is a Mac OS 15 Sequia image on Apple silicon. image: "registry.freedesktop.org/gstreamer/gstreamer/macos-arm64/15-sequoia:2024-10-28.0" tags: - gst-mac-arm artifacts: name: "${CI_JOB_NAME}_${CI_COMMIT_SHA}" expire_in: "5 days" when: "always" paths: - "build/meson-logs/*txt" before_script: - pip3 install --upgrade pip # Make sure meson is up to date - pip3 install -U 'meson>=1.6.1' # For Python < 3.11 we need tomli for Rust build support - pip3 install -U tomli # Need to install certificates for python - pip3 install --upgrade certifi # Get ninja - pip3 install --upgrade ninja # Install rust - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y - . "$HOME/.cargo/env" # Test Rust availability. - rustup update - cargo install bindgen-cli - rustc --version - bindgen --version script: - CERT_PATH=$(python3 -m certifi) && export SSL_CERT_FILE=${CERT_PATH} && export REQUESTS_CA_BUNDLE=${CERT_PATH} && meson setup -Diconv=enabled $MESON_FONTATIONS_ARG build - meson compile --verbose -C build - meson test -C build meson macos test: extends: ".meson macos test" variables: MESON_FONTATIONS_ARG: "-Dfontations=disabled" meson macos test fontations: extends: ".meson macos test" variables: MESON_FONTATIONS_ARG: "-Dfontations=enabled" # msys infrastructure is a bit broken, disable for now meson msys2: extends: ".build meson windows" when: "manual" allow_failure: true script: # For some reason, options are separated by newline instead of space, so we # have to replace them first. # - $env:MESON_ARGS = $env:MESON_ARGS.replace("`n"," ") - $env:PATH += ";C:\msys64\usr\bin;C:\msys64\mingw64/bin;C:\msys64\mingw32/bin" # XXX: Copied from https://gitlab.freedesktop.org/gstreamer/gst-ci/blob/master/gitlab/ci_template.yml#L487 # For some reason docker build hangs if this is included in the image, needs more troubleshooting - C:\msys64\usr\bin\bash -c "pacman-key --init && pacman-key --populate msys2 && pacman-key --refresh-keys || true" - C:\msys64\usr\bin\bash -c "pacman -Syuu --noconfirm" - C:\msys64\usr\bin\bash -c "pacman -Sy --noconfirm --needed mingw-w64-x86_64-toolchain ninja" - C:\msys64\usr\bin\bash -c "meson build $env:MESON_ARGS && ninja -C build && ninja -C build test" fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/.gitlab-ci/test-meson-install-shared.sh000066400000000000000000000007151503113465200306500ustar00rootroot00000000000000#! /bin/bash set -e ret=0 r=0 echo -n "*** libfontconfig.so installation check: " 1>&2 ret=$(find $PREFIX -name libfontconfig.so | wc -l) if [ $ret -eq 0 ]; then echo "NG - libfontconfig.so not installed." 1>&2 r=1 else echo "OK" 1>&2 fi echo -n "*** libfontconfig.a installation check: " 1>&2 ret=$(find $PREFIX -name libfontconfig.a | wc -l) if [ $ret -ne 0 ]; then echo "NG - libfontconfig.a installed." 1>&2 r=1 else echo "OK" 1>&2 fi exit $r fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/.gitlab-ci/test-meson-install-static.sh000066400000000000000000000007151503113465200306710ustar00rootroot00000000000000#! /bin/bash set -e ret=0 r=0 echo -n "*** libfontconfig.so installation check: " 1>&2 ret=$(find $PREFIX -name libfontconfig.so | wc -l) if [ $ret -ne 0 ]; then echo "NG - libfontconfig.so installed." 1>&2 r=1 else echo "OK" 1>&2 fi echo -n "*** libfontconfig.a installation check: " 1>&2 ret=$(find $PREFIX -name libfontconfig.a | wc -l) if [ $ret -eq 0 ]; then echo "NG - libfontconfig.a not installed." 1>&2 r=1 else echo "OK" 1>&2 fi exit $r fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/AUTHORS000066400000000000000000000000761503113465200224450ustar00rootroot00000000000000Keith Packard Patrick Lam fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/COPYING000066400000000000000000000206501503113465200224300ustar00rootroot00000000000000fontconfig/COPYING Copyright © 2000,2001,2002,2003,2004,2006,2007 Keith Packard Copyright © 2005 Patrick Lam Copyright © 2007 Dwayne Bailey and Translate.org.za Copyright © 2009 Roozbeh Pournader Copyright © 2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020 Red Hat, Inc. Copyright © 2008 Danilo Šegan Copyright © 2012 Google, Inc. Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of the author(s) not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. The authors make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -------------------------------------------------------------------------------- fontconfig/fc-case/CaseFolding.txt © 2019 Unicode®, Inc. Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. For terms of use, see http://www.unicode.org/terms_of_use.html -------------------------------------------------------------------------------- fontconfig/src/fcatomic.h /* * Mutex operations. Originally copied from HarfBuzz. * * Copyright © 2007 Chris Wilson * Copyright © 2009,2010 Red Hat, Inc. * Copyright © 2011,2012,2013 Google, Inc. * * Permission is hereby granted, without written agreement and without * license or royalty fees, to use, copy, modify, and distribute this * software and its documentation for any purpose, provided that the * above copyright notice and the following two paragraphs appear in * all copies of this software. * * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. * * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. * * Contributor(s): * Chris Wilson * Red Hat Author(s): Behdad Esfahbod * Google Author(s): Behdad Esfahbod */ -------------------------------------------------------------------------------- fontconfig/src/fcfoundry.h /* Copyright © 2002-2003 by Juliusz Chroboczek Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -------------------------------------------------------------------------------- fontconfig/src/fcmd5.h /* * This code implements the MD5 message-digest algorithm. * The algorithm is due to Ron Rivest. This code was * written by Colin Plumb in 1993, no copyright is claimed. * This code is in the public domain; do with it what you wish. * * Equivalent code is available from RSA Data Security, Inc. * This code has been tested against that, and is equivalent, * except that you don't need to include two pages of legalese * with every copy. * * To compute the message digest of a chunk of bytes, declare an * MD5Context structure, pass it to MD5Init, call MD5Update as * needed on buffers full of bytes, and then call MD5Final, which * will fill a supplied 16-byte array with the digest. */ -------------------------------------------------------------------------------- fontconfig/src/fcmutex.h /* * Atomic int and pointer operations. Originally copied from HarfBuzz. * * Copyright © 2007 Chris Wilson * Copyright © 2009,2010 Red Hat, Inc. * Copyright © 2011,2012,2013 Google, Inc. * * Permission is hereby granted, without written agreement and without * license or royalty fees, to use, copy, modify, and distribute this * software and its documentation for any purpose, provided that the * above copyright notice and the following two paragraphs appear in * all copies of this software. * * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. * * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. * * Contributor(s): * Chris Wilson * Red Hat Author(s): Behdad Esfahbod * Google Author(s): Behdad Esfahbod */ -------------------------------------------------------------------------------- fontconfig/src/ftglue.[ch] /* ftglue.c: Glue code for compiling the OpenType code from * FreeType 1 using only the public API of FreeType 2 * * By David Turner, The FreeType Project (www.freetype.org) * * This code is explicitely put in the public domain * * ========================================================================== * * the OpenType parser codes was originally written as an extension to * FreeType 1.x. As such, its source code was embedded within the library, * and used many internal FreeType functions to deal with memory and * stream i/o. * * When it was 'salvaged' for Pango and Qt, the code was "ported" to FreeType 2, * which basically means that some macro tricks were performed in order to * directly access FT2 _internal_ functions. * * these functions were never part of FT2 public API, and _did_ change between * various releases. This created chaos for many users: when they upgraded the * FreeType library on their system, they couldn't run Gnome anymore since * Pango refused to link. * * Very fortunately, it's possible to completely avoid this problem because * the FT_StreamRec and FT_MemoryRec structure types, which describe how * memory and stream implementations interface with the rest of the font * library, have always been part of the public API, and never changed. * * What we do thus is re-implement, within the OpenType parser, the few * functions that depend on them. This only adds one or two kilobytes of * code, and ensures that the parser can work with _any_ version * of FreeType installed on your system. How sweet... ! * * Note that we assume that Pango doesn't use any other internal functions * from FreeType. It used to in old versions, but this should no longer * be the case. (crossing my fingers). * * - David Turner * - The FreeType Project (www.freetype.org) * * PS: This "glue" code is explicitely put in the public domain */ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/Cargo.lock000066400000000000000000000053411503113465200233020ustar00rootroot00000000000000# This file is automatically @generated by Cargo. # It is not intended for manual editing. version = 4 [[package]] name = "bytemuck" version = "1.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9134a6ef01ce4b366b50689c94f82c14bc72bc5d0386829828a2e2752ef7958c" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ecc273b49b3205b83d648f0690daa588925572cc5063745bfe547fe7ec8e1a1" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "fc-fontations" version = "0.1.0" dependencies = [ "bytemuck", "bytemuck_derive", "fcint-bindings", "font-types", "fontconfig-bindings", "libc", "read-fonts", "skrifa", ] [[package]] name = "fcint-bindings" version = "0.1.0" dependencies = [ "fontconfig-bindings", "libc", ] [[package]] name = "font-types" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02a596f5713680923a2080d86de50fe472fb290693cf0f701187a1c8b36996b7" dependencies = [ "bytemuck", ] [[package]] name = "fontconfig-bindings" version = "0.1.0" dependencies = [ "libc", ] [[package]] name = "libc" version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "proc-macro2" version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] [[package]] name = "quote" version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] [[package]] name = "read-fonts" version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f96bfbb7df43d34a2b7b8582fcbcb676ba02a763265cb90bc8aabfd62b57d64" dependencies = [ "bytemuck", "font-types", ] [[package]] name = "skrifa" version = "0.31.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbeb4ca4399663735553a09dd17ce7e49a0a0203f03b706b39628c4d913a8607" dependencies = [ "bytemuck", "read-fonts", ] [[package]] name = "syn" version = "2.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] [[package]] name = "unicode-ident" version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/Cargo.toml000066400000000000000000000010111503113465200233130ustar00rootroot00000000000000[package] name = "fc-fontations" version = "0.1.0" edition = "2021" [dependencies] fontconfig-bindings = { path = "./fc-fontations/fontconfig-bindings" } fcint-bindings = { path = "./fc-fontations/fcint-bindings"} libc = "0.2.150" read-fonts = { version = "0.29", features = [ "experimental_traverse" ]} font-types = { version = "0.9", features = ["bytemuck"]} skrifa = "0.31.3" bytemuck = { version = "1.19.0" , features = [ 'derive', 'min_const_generics'] } bytemuck_derive = "1" [lib] path = "fc-fontations/mod.rs" fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/INSTALL000066400000000000000000000024461503113465200224310ustar00rootroot00000000000000Fontconfig is built with the traditional configure script: $ ./configure --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man If you checked out from the git repository (as opposed to downloading a tarball), you need to run autogen.sh instead of configure: $ ./autogen.sh --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man Either way, that should generate valid Makefiles, then: $ make $ make install If you're going to package fontconfig for release, there are several important steps: 1. Create new version sh new-version.sh 2.xx.xx 2. rebuild the configuration files with autogen.sh ./autogen.sh --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man --localstatedir=/var 3. make distcheck 4. Copy ChangeLog-2.x.y and fontconfig-2.x.y.tar.gz to freedesktop.org:/srv/www.freedesktop.org/www/software/fontconfig/release 5. Update the Fontconfig Devel wiki page https://www.freedesktop.org/wiki/Software/fontconfig/Devel/ 6. Update the fontconfig documentation scp -rp doc/fontconfig-user.html doc/fontconfig-devel freedesktop.org:/srv/www.freedesktop.org/www/software/fontconfig 7. Compute md5sums for release files: md5sum fontconfig-2.4.x.tar.gz ChangeLog-2.4.x 8. Post a note to fontconfig@fontconfig.org. Include the md5sums. gpg sign the message. fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/Makefile.am000066400000000000000000000140411503113465200234260ustar00rootroot00000000000000# # fontconfig/Makefile.am # # Copyright © 2003 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. SUBDIRS=fontconfig fc-case fc-lang src \ fc-cache fc-cat fc-conflist fc-list fc-match \ fc-pattern fc-query fc-scan fc-validate conf.d \ its po po-conf test if ENABLE_DOCS SUBDIRS += doc endif ACLOCAL_AMFLAGS = -I m4 MESON_FILES = \ conf.d/link_confs.py \ conf.d/write-35-lang-normalize-conf.py \ doc/edit-sgml.py \ doc/extract-man-list.py \ doc/run-quiet.py \ fc-case/fc-case.py \ fc-lang/fc-lang.py \ meson.build \ meson.options \ src/cutout.py \ src/fcstdint.h.in \ src/fcwindows.h \ src/fontconfig.def.in \ src/makealias.py \ $(wildcard $(srcdir)/*/meson.build) \ $(wildcard $(srcdir)/meson-cc-tests/*) \ $(wildcard $(srcdir)/subprojects/*.wrap) EXTRA_DIST = config.rpath \ fontconfig.pc.in \ fonts.conf.in \ fonts.dtd \ fontconfig-zip.in \ config-fixups.h \ $(MESON_FILES) CLEANFILES = fonts.conf DISTCLEANFILES = config.cache doltcompile MAINTAINERCLEANFILES = \ $(srcdir)/aclocal.m4 \ $(srcdir)/autoscan.log \ $(srcdir)/compile \ $(srcdir)/config.guess \ $(srcdir)/config.h.in \ $(srcdir)/config.sub \ $(srcdir)/configure.scan \ $(srcdir)/depcomp \ $(srcdir)/install-sh \ $(srcdir)/ltmain.sh \ $(srcdir)/missing \ $(srcdir)/mkinstalldirs \ $(srcdir)/test-driver \ `find "$(srcdir)" -type f -name Makefile.in -print` pkgconfig_DATA = fontconfig.pc baseconfigdir = $(BASECONFIGDIR) configdir = $(CONFIGDIR) xmldir = $(XMLDIR) xml_DATA = fonts.dtd if !ENABLE_CACHE_BUILD RUN_FC_CACHE_TEST=false else RUN_FC_CACHE_TEST=test -z "$(DESTDIR)" endif # Creating ChangeLog from git log: MAINTAINERCLEANFILES += $(srcdir)/ChangeLog EXTRA_DIST += ChangeLog ChangeLog: $(srcdir)/ChangeLog $(srcdir)/ChangeLog: if test -d "$(srcdir)/.git"; then \ (GIT_DIR=$(top_srcdir)/.git $(GIT) log --stat) | fmt --split-only > $@.tmp \ && mv -f $@.tmp $@ \ || ($(RM) $@.tmp; \ echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \ (test -f $@ || echo git-log is required to generate this file >> $@)); \ else \ test -f $@ || \ (echo A git checkout and git-log is required to generate ChangeLog >&2 && \ echo A git checkout and git-log is required to generate this file >> $@); \ fi .PHONY: ChangeLog FC_CONFIGDIR = $(subst $(BASECONFIGDIR)/,,$(CONFIGDIR)) fonts.conf: fonts.conf.in Makefile sed \ -e 's,@FC_CACHEDIR\@,$(FC_CACHEDIR),g' \ -e 's,@FC_DEFAULT_FONTS\@, $(FC_DEFAULT_FONTS),g' \ -e 's,@FC_FONTPATH\@,$(FC_FONTPATH),g' \ -e 's,@CONFIGDIR\@,$(FC_CONFIGDIR),g' \ -e 's,@PACKAGE\@,$(PACKAGE),g' \ -e 's,@VERSION\@,$(VERSION),g' \ $(srcdir)/$@.in > $@.tmp && \ mv $@.tmp $@ install-data-local: fonts.conf $(mkinstalldirs) $(DESTDIR)$(baseconfigdir) $(DESTDIR)$(fc_cachedir) if [ -f $(DESTDIR)$(baseconfigdir)/fonts.conf ]; then \ echo "backing up existing $(DESTDIR)$(baseconfigdir)/fonts.conf"; \ mv $(DESTDIR)$(baseconfigdir)/fonts.conf $(DESTDIR)$(baseconfigdir)/fonts.conf.bak; \ fi if [ -f $(srcdir)/fonts.conf ]; then \ echo " $(INSTALL_DATA) $(srcdir)/fonts.conf $(DESTDIR)$(baseconfigdir)/fonts.conf"; \ $(INSTALL_DATA) $(srcdir)/fonts.conf $(DESTDIR)$(baseconfigdir)/fonts.conf; \ else if [ -f fonts.conf ]; then \ echo " $(INSTALL_DATA) fonts.conf $(DESTDIR)$(baseconfigdir)/fonts.conf"; \ $(INSTALL_DATA) fonts.conf $(DESTDIR)$(baseconfigdir)/fonts.conf; \ fi; fi @(if $(RUN_FC_CACHE_TEST); then \ echo "fc-cache$(EXEEXT) -s -f -v"; \ fc-cache/fc-cache$(EXEEXT) -s -f -v; \ else \ echo "***"; \ echo "*** Warning: fonts.cache not built"; \ echo "***"; \ echo "*** Generate this file manually on host system using fc-cache"; \ echo "***"; \ fi) uninstall-local: if [ -f $(srcdir)/fonts.conf ]; then \ if cmp -s $(srcdir)/fonts.conf $(DESTDIR)$(baseconfigdir)/fonts.conf; then \ echo " uninstall standard $(DESTDIR)$(baseconfigdir)/fonts.conf"; \ $(RM) $(DESTDIR)$(baseconfigdir)/fonts.conf; \ fi; \ else if [ -f fonts.conf ]; then \ if cmp -s fonts.conf $(DESTDIR)$(baseconfigdir)/fonts.conf; then \ echo " uninstall standard $(DESTDIR)$(baseconfigdir)/fonts.conf"; \ $(RM) $(DESTDIR)$(baseconfigdir)/fonts.conf; \ fi; \ fi; fi debuild debuild-signed: debuild-dirs (cd $(distdir)/debian && debuild) debuild-unsigned: debuild-dirs (cd $(distdir)/debian && debuild -us -uc) debuild-dirs: distdir $(RM) $(PACKAGE)_$(VERSION).orig.tar.gz $(RM) -r $(distdir).orig cp -a $(distdir) $(distdir).orig $(RM) -r $(distdir).orig/debian DISTCHECK_CONFIGURE_FLAGS = check-versions: @$(GREP) -e "^[[:space:]]*version[[:space:]]*:[[:space:]]*'$(VERSION)'," $(srcdir)/meson.build >/dev/null || { \ echo "======================================================================================"; \ echo "Meson version does not seem to match autotools version $(VERSION), update meson.build!"; \ echo "======================================================================================"; \ exit 1; \ } all-local: check-versions -include $(top_srcdir)/git.mk fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/NEWS000066400000000000000000003463351503113465200221070ustar00rootroot00000000000000 Fontconfig Font configuration and customization library Version 2.17.1 2025-07-02 Check INSTALL for compilation and installation instructions. Report bugs to https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/new. 2.17.1 Akira TAGOH (3): Fix a heap buffer overflow meson: Add 'noinstall' to default-hinting, default-sub-pixel-rendering, bitmap-conf build options Bump the libtool version 2.17 Akira TAGOH (48): ci: Add a subproject test case for meson test: Set sys-root to WINEPATH for MinGW ci: Correct reference to not trigger fetching a branch for main ci: clean up and add changelog to the release note through changelog API meson: don't try to call run_command for gperf on --wrap-mode=forcefallback Make sure that the debugging facilities are initialized at loading config phase Add FcConfigPerferAppFont() to allow changing the order of application fonts conf.d/65-nonlatin.conf: Rename Lohit Oriya to Lohit Odia ci: disable meson static fontations build tentatively conf.d/65-nonlatin.conf: drop the leading extra white spaces ci: quote pip's requirement specifier in the build script ci: Add -O option to the build script for convenience ci: add installation test Add a test case for FcPtrList Improve performance of FcPtrListIterInitAtLast test: make sure we have fcstdint.h before building test programs Drop FcDefaultFini() from FcFini() to fix memory leaks test: do not free FcFontSet From FcConfigGetFonts Drop the configuration path migration code Drop FcObjectFini() from FcFini() to fix memory leaks Free the mutex object only when all cache objects isn't referenced Free the mutex object only when there are no references to the default FcConfig instance Increase a reference count for default FcConfig instance with FcInit() conf.d: Add a conf to guess a generic-family for substitution test: add a pattern test test: add a test scenario for 48-guessfamily.conf test-crbug1004254: hold FcConfig during running a test in a thread Simplify FcConfigFini() Revert "test-crbug1004254: hold FcConfig during running a test in a thread" Call FcMutexUnlock only when valid instance is available Fix a memory leak in default_langs Avoid possibly invalid access on MT Add bitmap-conf build option to choose default bitmap conf doc: rewrite check-missing-doc in Python Do not hardcode a cache version Add default font paths for Android in configure script meson: Fix additional-fonts-dirs build option that not taking effect meson: rename meson_options.txt to meson.options Allow dotfiles to scan for caching Trim trailing newline in string in cache Fix a crash with broken cache ci: cleanup builddir Do not fallback decoding with UTF-16BE if no iconv support Fix padding with "und" in pattern elements ci: fix pipeline fail of subproject build on forked project ci: add some usage text to build script Bump libtool version for autotools build Fix release script Albert Lee (1): Avoid conflict between dgettext macro and declaration in fcint.h ComixHe (1): fix: Skip empty entries in XDG_DATA_DIRS parsing Dominik Röttsches (40): [Fontations] Factor out fcpat.c - add Fontations dependencies Add FcPatternObjectGet* impl for CharSet and LangSet [Fontations] Improve resolution of Rust crate features [Fontations] Roll Skrifa, Read-Fonts, Font-Types [Fontations] Pattern Bindings for CharSet and LangSet [Fontations] Container and local download of testfiles Add Pytest status to Meson Summary Add Roboto Flex to font downloading script Migrate pytest testcase 431 to pre-downloaded fonts [Fontations] Enable fc-query indexing through Fontations Revert "ci: disable meson static fontations build tentatively" [Fontations] Fix Rust edition, do not require extern crate [Fontations] Add support for "foundry" pattern element [Fontations] Add support for "version" pattern element [Fontations] Clippy fix for foundries mapping [Fontations] Add attributes weight, width, slant to Pattern Cargo build improvements [Fontations] Iterate over TrueType collections and named instances Amend license headers [Fontations] Process and append font capabilities to Pattern Speculative fix for uninitialised value used in FcFontSort [Fontations] Add charset pattern element [Fontations] Add langset pattern element [Fontations] Add fontwrapper, filename and symbol elements to pattern [Fontations] Add woff wrapper and filename if file is woff or woff2 [Fontations] Roll Fontations, Skrifa to 0.31.3 [Fontations] Match name id append order to FreeType indexer Sort test pattern elements [Fontations] Add pixel size information [Fontations] Fix size element and enable more element tests [Fontations] Add spacing property [Fontations] No style element for variable instance [Fontations] Remove pattern filter from tests Parse foundry from OS/2 for table version 0 [Fontations] Assorted fixes to match FreeType indexing [Fontations] Do not combine bindings into one crate Make "retry:" label conditional on ICONV [Fontations] Clarify import of FcLangSet Rename FcFreeTypeLangSet to FcLangSetFromCharset [Fontations] Fix downstream build of indexing with Fontations Federico Gallo Herosa (2): fccharset.c Avoid use-after-free warning fccharset.c Avoid use-after-free warning Sam James (1): configure.ac: drop -fno-strict-aliasing Thomas Anderson (1): Fix heap buffer underflow in FcConfigXdgDataDirs Tom Anderson (1): Fix use-after-free in FcConfigGetPrgname Xi Ruoyao (1): meson: don't force installation of a static library 2.16.2 Akira TAGOH (12): meson: do not require libintl if nls feature is disabled ci: Add back Android build in a common way ci: drop Language to make sure they are applied as default style ci: Change the default build system to meson ci: Stop on fail anyway ci: default to clean-build ci: detect OS from os-release if no FC_DISTRO_NAME is set ci: add missing dependency of pytest ci: Set more timeout for pytest ci: fix too many open files on test ci: add missing dependency of requests meson: Use Requires.private instead of Requires Dominik Röttsches (2): Upgrade bindgen in Fontations enabled Rust builds [Fontations] Add internal PatternBuilder abstraction Kacper Michajłow (1): meson: don't force build of a shared library Thomas Devoogdt (1): meson.build: define a 'c' standard for the project (C99 and C11) 2.16.1 Akira TAGOH (10): meson: create fc_cachedir at the installation time meson: set WORDS_BIGENDIAN ci: get back MinGW build to rawhide meson: make sure config.h contains config-fixups.h for OSX Reformatting with clang-format ci: Add a workflow to check the coding style ci: workaround conflict between systemd and systemd-standalone-sysusers conf.d: Add Adwaita Sans as system-ui ci: disable job tentatively ci: Add a release workflow Dominik Röttsches (1): [Fontations] Allow linkage to internals in tests Thomas Devoogdt (1): meson.build: explicitly check for pthread support 2.16 Akira TAGOH (69): Publish docs to GitLab pages doc: default index for fontconfig-devel to index.html Update URLs for docs doc: Fix a typo of the summary for FcFontSetSort Clean up .uuid files with fc-cache -f too Fix undesired unref of FcConfig on Win32 meson.build: Fix a typo in POT names meson.build: Add missing --msgid-bugs-address Sort out bitmap related config files Add test cases for 70-no-bitmap-and-emoji.conf and 70-no-bitmap-except-emoji.conf meson: Add missing checkup Add a missing dependency for CI on FreeBSD meson: try to figure out libintl dependency ci: Fix a typo in build script ci: Add config.log for artifacts ci: Add missing dependencies ci: Disable cache update meson: Fix build fail with NLS enabled on BSD meson: Add libxml2 support ci: Add libxml2 build for meson meson: Workaround an exception ci: Workaround an error with libxml2 on Android meson: Add iconv checkup for all platforms Fix incompatible pointer type on MinGW meson: Use c_shared_args to take care of --default-library=both on Win32 ci: Fix a typo ci: disable iconv for MSVC ci: build with expat on MSVC doc: Use sans-serif instead of sans Do not add merge commits into NEWS file doc: Fix a typo meson: Enable run-test.sh for non-Win32 test/wrapper-script.sh: don't add a path when executable already has a path name. meson: Add missing the unit testing with json-c test-conf: Fix compiler warnings Fix test case for reproducible builds ci: Use md5 if md5sum isn't available. ci: normalize path to avoid miscalculation of cache name ci: Add Fedora 40 and remove Fedora 38 More information when no writable cache directories Fix a memory leak in _get_real_paths_from_prefix Set FcTypeVoid if no valid types to convert Add FcConfigSetFontSetFilter Improve hinting detection for fonthashint object Accept integer for pixelsize Fix a memory leak in fc-list/fc-query/fc-scan Add got.orth for Gothic language Add cop.orth for Coptic language Add foreign automake option to avoid an error on autotools bootstrap ci: rebase ci-templates ci: Add Fedora 41 and drop 39 ci: run check-merge-request on merge request pipelines only ci: Add FreeBSD 14.1 and drop 13.2 ci: build mingw on f40 only meson: Add install_tag for install targets meson: Add docs into dist meson: Add autotools files into dist doc: generate fontconfig-devel.html as one big file ci: Fix a fail on pages deployment ci: Fix pages deployment again fc-case: Correct the license header of fccase.h Use proper postscriptname for named instance if any Replace hardcoded path in man pages to url link Allow comma as a delimiter in postscriptname and ignore it on matching Deal with glob string properly Another fix of glob string for Win32 ci: Enable meson dist Fix misleading-indentation warning Bump the libtool version Andreas Falkenhahn (1): Do not prefix cache_base with a "/". Doing so will lead to FcStrBuildFilename() composing paths that contain double slashes, e.g. in FcDirCacheProcess(). If FcDirCacheBasenameMD5() returns a cache_base that is prefixed with a "/", the call to FcStrBuildFilename() in FcDirCacheProcess() will compose a path that contains double slashes and this double-slashed path will then be passed to FcDirCacheOpenFile(). This won't cause any harm on Linux because Linux just ignores multiple slashes in paths but on other operating systems multiple slashes in paths are not allowed so FcDirCacheOpenFile() will fail on those platforms because of the double slash in the path. Andrey Prokopyuk (2): Fix qsort nullpointer issue Fix FcSerialize null pointer usage Christoph Reiter (1): meson: fix config relocation on Windows Dan Yeaw (1): Fix invalid escape character \s Dominik Röttsches (6): Remove redundant leaf assignment in fcfreetype.c Move Mac OS image to an up-to-date Mac OS 15 Sequoia image on ARM Update Windows image to gstreamer image from stable Allow building Rust targets in CI [Fontations] Build bindgen targets, basic Rust test Refactor exclusive language logic into separate file Florian "sp1rit"​ (1): meson: added default font dirs for android Kenny Levinsen (2): Unlock on allocation failure in FcCacheInsert Ensure config is locked during retry in FcConfigReference Ryan Schmidt (1): Fix wording in README.md Sam James (2): build: detect-and-use `-lm` for `fabs` in fcmatch fontconfig: mark _FcPatternIter as may_alias Xavier Claessens (2): Meson: Fix build with clang-cl by using cc.preprocess() meson: Add missing dep on generated header 2.15 Akira TAGOH (39): Do not change the order of orth files Convert tabs to spaces Convert more tabs to spaces in docs src/meson.build: Store correct paths to fontconfig.pc. Fix a typo in description for HAVE_STDATOMIC_PRIMITIVES Report more detailed logs instead of assertion. Add some missing constant names for weight. Adujst indentation between programlisting in fontconfig-user.sgml Bump version to 2.14.2 Clean up unused code Add another test case for flatpak Update 65-nonlatin.conf for macOS Change the order of the properties to the order of fontconfig cache format Add missing property descriptions Add namedinstance property Remove the problematic language from code and doc Fix a typo Fix a typo for FcCharSetDelChar doc Fix a typo in scalable property Use 'outline' instead of 'scalable' for bitmaps Add more docs about selectfont Rework CI implementation Fix a typo Rework CI implementation v2 Apply a fix of ci-templates Fix uninitialized memory access when failing memory allocation. Create a symlink with relative path Fix an error of "initializer element is not constant" Update CaseFolding.txt to Unicode 15.1 Update the encoding table for Simplified Chinese Retry to decode strings in the name table as UTF-16BE in some cases. Work around decoding strings in Macintosh encoding for the name table. Add iconv detection for meson build .gitlab-ci: Update CI: Update CI: static build only for rawhide Use memmove instead of memcpy Rename README to NEWS and add README.md Update so version Ben Wagner (1): Fix leak of `reason` in _FcConfigParse when not complaining Jean Abou Samra (2): Ignore LC_CTYPE if set to "UTF-8" Some doc clarifications Khaled Hosny (2): Add FC_FONT_WRAPPER Detect standalone CFF fonts for FC_FONT_WRAPPER Mike FABIAN (3): Add anp.orth, bhb.orth, hif.orth, mag.orth, raj.orth, and the.orth Add {agr,ayc,bem,ckb,cmn,dsb,hak,lij,lzh,mfe,mhr,miq,mjw,mnw,nan,nhn,niu,rif,sgs,shn,szl,tcy,tpi,unm,wae,yue,yuw}.orth Change index type to 16 bit and bump cache version to 9 Ondrej Balaz (1): Expand ~ in glob Sefa Eyeoglu (1): Add optional 11-lcdfilter-none configuration Tom Anderson (2): Fix filepaths added when scanning with sysroot Fix false-positive CFI failure Vitaly Lysenkov (1): In fcfreetype.c, `GetScriptTags`: fix `use_of_uninitialized_value` and return the correct number of parsed tags in case the font file contains less tags than indicated. Xavier Claessens (1): meson: Support any compiler with gcc or msvc argument syntax lilinjie (1): fix typo msizanoen1 (1): Reload MM/VF metadata for each font face in font collection pell (1): fixed typos in fc-conflist.sgml xiota (1): Add aliases for Helvetica LT Std 2.14.2 Akira TAGOH (13): Fix the build issue on meson when -g option is added to c_args Store artifacts for meson windows CI Add FC_DESKTOP_NAME property Add --with-default-sub-pixel-rendering option Update po-conf/POTFILES.in Ignore null pointer on Fc*Destroy functions Convert tabs to spaces Convert more tabs to spaces in docs src/meson.build: Store correct paths to fontconfig.pc. Fix a typo in description for HAVE_STDATOMIC_PRIMITIVES Report more detailed logs instead of assertion. Add some missing constant names for weight. Adujst indentation between programlisting in fontconfig-user.sgml Christopher Degawa (1): meson: modify gperf test to remove sh dependency Jason Francis (1): meson: Update freetype2 git repository to upstream Jean Abou Samra (1): Ignore LC_CTYPE if set to "UTF-8" Ondrej Balaz (1): Expand ~ in glob lilinjie (1): fix typo 2.14.1 Akira TAGOH (6): Use the latest stable release image for CI for mingw Real fix of 91114d18c Fix test cases for wrong use of remap-dir Add back sort command Add config files to enable/disable antialias Enable 10-sub-pixel-rgb.conf by default Alan Coopersmith (1): Bump the cache version to 8 in doc/fontconfig-user.sgml Jeremy Huddleston Sequoia (3): meson: Fix linking libexpat on darwin meson: Use fc_templatedir and fc_baseconfigdir are used when installing configs meson: Use fc_configdir where appropriate during build NorwayFun (4): add Georgian add Georgian po: add Georgian translation po: Add Georgian translation Sam James (1): configure.ac: allow disabling docbook Taylor R Campbell (1): Avoid misuse of ctype(3) Tim-Philipp Müller (7): meson: add 'default-hinting' option meson: add 'default-fonts-dirs' option meson: add 'additional-fonts-dirs' option meson: add 'cache-dir' option meson: add 'template-dir', 'baseconfig-dir', 'config-dir', and 'xml-dir' options ci: update windows image to a 2022-server based one ci: update macOS image Xavier Claessens (3): meson: Do not run fc-cache when installing into a DESTDIR meson: Fix configuration warnings link_confs.py: Fix prepending DESTDIR to absolute path 2.14 Alan Coopersmith (1): Update address for reporting msgid bugs from bugzilla to gitlab 2.13.96 (2.14 RC6) Akira TAGOH (2): Add a missing file 48-spacing.conf Merge branch 'main' of ssh://gitlab.freedesktop.org/fontconfig/fontconfig 2.13.95 (2.14 RC5) Akira TAGOH (18): Do not set different score to non-string values Enable 11-lcdfilter-default.conf by default Bump the cache version to 8 Reflect matching results to binding in FcPattern Fix a memory leak when trying to open a non-existing file Fix score estimation for postscriptname Resolves symlinks against Add the option to not build fontconfig cache during installation conf.d/60-latin.conf: Make Noto default. Fix some testcase fails for 14c265a1 Fix the issue fail to obtain the style name Apply the change made by 23e46d1 again Initialize variable Add more description for fc-conflist.1 and FcConfigFileInfoIterInit.3 Update CaseFolding.txt to Unicode 14 Add an user font directory for Win32 to the default font path Add test/wrapper-script.sh to the archive Fix possible memory leaks in FcPatternObjectAddWithBinding Alex Richardson (3): fcint: add casts to allow building with stricter compilers Add support for C11 stdatomic atomics FcCharSetPutLeaf(): Fix missing move of new_leaves contents Behdad Esfahbod (1): If a varfont has 'opsz' axis, set FC_SIZE on default instant pattern Ben Wagner (6): Add memory order constraints to C11 atomics Free local FcCache lock on contention Extend test thread args lifetime Fix warning about os2->achVendID cannot be NULL Back FcSerialize with open addressing hash table. Actually skip leading spaces in style name Francesco Pretto (1): WIN32: Fix pGetSystemWindowsDirectory found initialized during FcConfigParseAndLoadFromMemory Mehdi Sabwat (1): fcstat: add support for wasm-emscripten Nirbheek Chauhan (1): meson: Remove summary() from version_compare() block Pierre Ducroquet (5): Add a configuration to switch to monospace if spacing=100 is requested Reference the new configuration file Remove configuration file from POTFILES It seems this qual doesn't work on integers Always add the family name from spacing=100 Ryan Gonzalez (1): Ensure config.h is always included before stdlib headers Ryan Schmidt (5): Avoid PCRE syntax when using grep Remove Bugzilla references Fix run-test.sh to work with BSD mktemp Restore fcatomic compatibility with Mac OS X 10.4. Fix FC_DEFAULT_FONTS on macOS and with BSD sed 2.13.94 (2.14 RC4) Akira TAGOH (10): Add back fullname property at scan matching phase Overwrite symlinks for config files Fix missing element for WINDOWSFONTDIR in meson Refactoring configure.ac to add element around font paths Fix build fail when missing docbook and/or disabling doc-build ci: Update CA cert related thing for Python on Windows Add support for XDG_DATA_DIRS Better wording for comments in config Revert constructing fullname property from family and style properties Fix score evaluation for multiple values in properties Albert Astals Cid (1): Fix potential memory leak in _get_real_paths_from_prefix Ben Wagner (11): Skip leading whitespace in style name. Remove abort from FcCompareSize. Add line between licenses in COPYING. Portable trap conditions in run-test.sh. Fix leaks in fcxml.c, fc-match.c, and tests. Fix wild frees and leak of fs in test-conf. Always run-test-conf, but skip if not built. Fix test-conf string to integer conversion. Test all not_eq for family names. Clean up test-family-matching test. Fix stack use after scope in FcConfigCompareValue Carmina16 (1): ie.orth: Corrected; mistaken source replaced Heiko Becker (1): Handle absolute sysconfdir when installing symlinks Jacko Dirks (1): fccfg.c: lock_config: Fix potential memory leak Szunti (3): Fix locale dependent behaviour in run-test.sh Check qual and compare for family tests Fix stripping whitespace from end of family in FcPatternAddFullname Tim-Philipp Müller (6): meson: remove unused stdin_wrapper.py script fcformat: fix compiler warnings with clang on Android ci: add meson android aarch64 build meson: error out in script if gperf preprocessing failed meson: fix cross-compilation issues with gperf header file preprocessing meson: fix subproject build regression Xavier Claessens (3): Meson: Fallback to gperf subproject on all platforms Meson: Do not wrap fccache insallation script Windows: Fix symlink privilege error detection ratijas (1): Fix closing tag bracket typo in doc/fontconfig-user.sgml 2.13.93 (2.14 RC3) Akira TAGOH (48): Affect FC_FONT_HAS_HINT property to score on matcher Do not return FcFalse from FcConfigParseAndLoad*() if complain is set to false Warn as well if no directory name for cachedir provided Take effect sysroot functionality to the default config file Read latest cache in paths Fix a memory leak caused by the previous commit Use FcConfigReference/Destroy appropriately instead of FcConfigGetCurrent Fix potential race condition in FcConfigSetCurrent and FcConfigReference Fix gcc warnings with -Wpointer-sign Don't add a value for FC_FULLNAME in meta face Fix a test fail when no bwrap was available Add proper fullname for named-instances Fix the process substitution doesn't work with FONTCONFIG_FILE Fix memory leaks Fix assertion in FcFini() Set exact boolean value to color property Fix assertion in FcCacheFini() again Fix errors on shellcheck Fix cache conflicts on OSTree based system Drop unmaintained files Drop elements with its namespace from conf Add FC_ORDER property into cache Drop Bitstream Vera fonts from 60-latin.conf Fix a typo in doc/confdir.sgml.in Fix empty XDG_CACHE_HOME Behavior Fix build issues regarding formatter for Win32 Add some tweaks into runtest.sh to see progress Integrate python scripts to autotools build Make sure a minimum version of python Make more clearer the license terms Add CONFIGDIR to the fallback config where can be specified by --with-configdir fc-scan: add --sysroot option Construct fullname from family and style Add fullname later once FcConfigSubstitute() is done Update meson.build Add Regular style when no meta data available to guess a style Make sure a combination of family and familylang is available Split up a code again coming from different copyright notice Update COPYING Use memcpy instead of strcpy Evaluate mingw64_env to setup properly on CI Add examples section in fc-match(1) Drop duplicated BUILT_SOURCES in doc/Makefile.am Initialize shell variables to be sure Update README that missed changes mistakenly new-version.sh: update version in meson.build Update version in meson.build to sync up with configure.ac new-version.sh: commit meson.build when bumpping Alan Coopersmith (1): Fix some typos/spelling errors Ben Wagner (2): Replace FT_UNUSED with FC_UNUSED. Fix fc_atomic_ptr_get and use. Chun-wei Fan (2): meson: Look for FreeType using CMake too meson: Don't use .def files for Visual Studio builds James Lee (1): Fix 'meson install' when cross compiling Jan Tojnar (4): conf: Add JoyPixels emoji font Correct reset-dirs in DTD Drop elements with its namespace from fonts.conf.in Turn unknown attributes into warning Jonathan Kew (1): Set name_mapping to NULL after freeing Mathieu Duponchelle (1): Some build fixes to support compilation with MSVC on Windows Matthias Clasen (17): Avoid a crash in FcPatternHash with ranges Special-case some of the string walking code Add a hash function for families Use a hash table for family matching Add a shortcut for FcQualAny matching Speed up fonthashint matching Speed up FcConfigCompareValue Speed up FcConfigCompareValue Speed up FcCompareLang and FcCompareBool Use a hash table for families in FcConfigSubstitute Use __builtin_expect in a few places Fixup: Promote ints to ranges when appropriate Add FC_LIKELY and FC_UNLIKELY macros Use FC_UNLIKELY Fixup: Handle patterns without family Fix up FC_LIKELY macros Fix a problem in FcConfigSubstitute Nicolas Mailhot (1): Use an URN for DTD ID Niklas Guertler (3): Allow multiple default system font directories in the fallback config, and set them to the default dirs on Darwin. Add XML tags to default values for FC_DEFAULT_FONTS on non-Darwin systems Increased timeout for meson tests to 600sec to make tests work on Darwin Nirbheek Chauhan (2): fcatomic: Fix EXC_BAD_ACCESS on iOS ARM64 meson: Fix build failure with gcc10 on mingw Szunti (1): Add missing return type for FcFontSet* functions Tim-Philipp Müller (8): doc: fix FcPatternFilter documentation Use FC_PATH_MAX to fix build on Windows Fix build on Windows some more fccompat: fix build on Windows without unistd.h Guard dirent.h includes Add Meson build system meson: print configuration summary() ci: allow meson mingw build to fail Xavier Claessens (3): meson: Fix build when 'tools' option is disabled meson: Use version comparison function meson: Fix build failure when compiler is not in PATH xiota (1): Add Courier Std aliases. Fixes #262. 2.13.92 (2.14 RC2) Akira TAGOH (18): Fix a typo on masking face id Don't clean up pre-built docs if no docbook installed. Fix obtaining real path from pre-defined names for Win32 Fix a crash when running with FC_DEBUG=256 Improve the performance a bit Fix a typo Add English name first into a cache FcConfigParseAndLoad*() should returns false on config errors Clean up temporary directory for tests Add docs for missing properties Fix the fail on fc-cache Fix memory leaks Fix a memory leak in FcFreeTypeQuery*() Add 35-lang-normalize.conf Add FC_FONT_HAS_HINT property to see if font has hinting or not. Fix failing the check of prep table in some fonts Fix the fails of make check when SOURCE_DATE_EPOCH is set Improve the performance a bit Egmont Koblinger (1): Fix the linear interpolation during weight mapping 2.13.91 (2.14 RC1) Akira TAGOH (74): Fix the build issue with --enable-static Fix the issue that '~' wasn't extracted to the proper homedir Add a test case for d1f48f11 Fix CI Add more prefix support in element Update fonts.dtd for last commit Update docs for 1aa8b700 add missing the case of prefix="default" as documented Fix test case CI: Add more logs Do not update mtime when removing .uuid file Do not try updating mtime when unlink was failed Do not run a test case for .uuid deletion Drop Mitra Mono from 65-nonlatin.conf Enable bubblewrap test case Use FC_PATH_MAX instead of PATH_MAX Use Rachana instead of Meera for Malayalam Add doc for description element and update fonts.dtd Fix FcFontList doesn't return a font with FC_COLOR=true Add a test case for FcFontList Warn when constant name is used for unexpected object covscan fix: get rid of unnecessary condition check Don't call unlink_dirs if basedir is null covscan: fix compiler warnings Fix a dereference of a null pointer Fix a crash with invalid matrix element Add system-ui generic family Fix misleading summary in docs for FcStrStrIgnoreCase Fix build issue on Win32. autogen.sh: Make AUTORECONF_FLAGS overwritable Ifdef'ed unnecessary code for Win32 Fix make check on cross-compiled env Add build test for MinGW Fix make distcheck error Update requirement for gettext Correct configure option to cross-compile Install wine for CI on MinGW Don't test bind-mount thing for MinGW Reset errno to do error handling properly Add FcDirCacheCreateUUID doc back to pass make check Drop a line to include uuid.h Fix make check fail on run-test-conf.sh Add new element remap-dir instead of extending dir element Trim the last slash Update testcase Update deps to run CI Drop unnecessary line to include uuid.h Fix a typo Add reset-dirs element Add salt attribute to dir and remap-dir elements Update doc for salt trivial testcase update Add back if !OS_WIN32 line Fix build issues on MinGW Use alternative function for realpath on Win32 Fix make check fail on MinGW again Add more data to artifacts for debugging purpose Don't share fonts and cache dir for testing Don't warn if path can't be converted with prefix Add some debugging output Oops, Terminate string fc-cache: Show font directories to generate cache with -v Allow overriding salt with new one coming later Don't show salt in debugging message if salt is null Fix unexpected cache name by double-slash in path Fallback uuid-based name to read a cache if no MD5-based cache available No need to remap for uuid based Update the test case that is looking for uuid based on host Distribute archive in xz instead of bz2 Update CaseFolding.txt to Unicode 12.1 fc-validate: returns an error code when missing some glyphs Correct the comment for FC_LANG in fontconfig.h Fix a typo in the description of FcWeightFromOpenTypeDouble Fix endianness on generating MD5 cache name Behdad Esfahbod (1): Fix name-table language code mapping for Mongolian Ben Wagner (1): Better document sysroot. Chris McDonald (2): Respect sysroot option for file path passed to stat Lowered temporary rooted_dir variable inside loop Jon Turney (1): Only use test wrapper-script if host is MinGW Keith Packard (6): Do not remove UUID file when a scanned directory is empty Fetch FONTCONFIG_SYSROOT in FcConfigCreate Remove '-u' option from run-test-conf.sh Add delays to test-bz106632, check UptoDate separately Remove UUID-related tests Replace UUID file mechanism with per-directory 'map' attribute [v2] Robert Yang (1): src/fccache.c: Fix define for HAVE_POSIX_FADVISE 2.13.1 Akira TAGOH (48): Use the builtin uuid for OSX Fix the build issue again on MinGW with enabling nls Add uuid to Requires.private in .pc only when pkgconfig macro found it Allow the constant names in the range Do not override locale if already set by app Add the value of the constant name to the implicit object in the pattern Add a testcase for FcNameParse Leave the locale setting to applications call setlocale Fix make check fail when srcdir != builddir. Do not ship fcobjshash.h Fix typo in doc Change the emboldening logic again Bug 43367 - RFE: iterator to peek objects in FcPattern Add a testrunner for conf Add a test case for 90-synthetic.conf Bug 106497 - better error description when problem reading font configuration Bug 106459 - fc-cache doesn't use -y option for .uuid files Fix leaks Fix -Wstringop-truncation warning Fix double-free Add a test case for bz#106618 Update CaseFolding.txt to Unicode 11 Remove .uuid when no font files exists on a directory Fix the leak of file handle Fix memory leak Fix memory leaks Fix memory leak Fix memory leak Fix memory leak Fix unterminated string issue Fix array access in a null pointer dereference Fix access in a null pointer dereference do not pass null pointer to memcpy Fix dereferencing null pointer Fix a typo Fix possibly dereferencing a null pointer Fix allocating insufficient memory for terminating null of the string Make a call fail on ENOMEM Allocate sufficient memory to terminate with null Drop the redundant code Fix memory leak Fix the build issue with gperf Fix missing closing bracket in FcStrIsAbsoluteFilename() Update the issue tracker URL Fix distcheck fail Add .gitlab-ci.yml Bump the libtool revision Alexander Larsson (3): Add FcCacheAllocate() helper Cache: Rewrite relocated paths in earlier Cache: Remove alias_table Behdad Esfahbod (4): Minor: fix warnings Fix name scanning Share name-mapping across instances Use FT_HAS_COLOR Chris Lamb (1): Ensure cache checksums are deterministic Matthieu Herrb (1): FcCacheFindByStat(): fix checking of nanoseconds field. Tom Anderson (7): Fix undefined-shift UBSAN errors Use realfilename for FcOpen in _FcConfigParse Add FONTCONFIG_SYSROOT environment variable Fix CFI builds Fix heap use-after-free Return canonicalized paths from FcConfigRealFilename Fix build with CFLAGS="-std=c11 -D_GNU_SOURCE" 2.13 Akira TAGOH (4): Add Simplified Chinese translations Fix a build issue on MinGW with enabling nls Initialize an array explicitly Bump the libtool revision 2.12.93 (2.13 RC3) Akira TAGOH (12): trivial fix Add files to enable ITS support in gettext Use the native ITS support in gettext Remove POTFILES.in until new release of gettext is coming... export GETTEXTDATADIR to refer the local .its/.loc file instead of using --its option clean up Do not add cflags and libs coming from pkg-config file. Revert some removal from 7ac6af6 Take effects on dir, cachedir, acceptfont, and rejectfont only when loading Do not mix up font dirs into the list of config dirs Ensure the user config dir is available in the list of config dirs on the fallback config Add missing files to ship Alexander Larsson (1): FcHashTableAddInternal: Compare against the right key Behdad Esfahbod (5): Remove hack for OS/2 weights 1..9 Support FC_WIDTH as double as well Fix leak Use FT_Done_MM_Var if available Fix undefined-behavior signed shifts Olivier Crête (1): Fix cross-compilation by passing CPPFLAGS to CPP Tom Anderson (1): Allow overriding symbol visibility. 2.12.92 (2.13 RC2) Akira TAGOH (13): cleanup files Update .uuid only when -r is given but not -f. Returns false if key is already available in the table Add missing doc of FcDirCacheCreateUUID Replace uuid in the table properly when -r Add a test case for uuid creation Do not update mtime with creating .uuid Disable uuid related code on Win32 Try to get current instance of FcConfig as far as possible do not check the existence of itstool on win32 Fix the mis-ordering of ruleset evaluation in a file with include element Fix compiler warnings Add FcReadLink to wrap up readlink impl. Alexander Larsson (1): fchash: Fix replace Behdad Esfahbod (7): Don't crash Remove a debug abort() Minor Set font-variations settings for standard axes in variable fonts Let pattern FC_FONT_VARIATIONS override standard axis variations Put back accidentally removed code Add FcWeightTo/FromOpenTypeDouble() 2.12.91 (2.13 RC1) Akira TAGOH (37): und_zsye.orth: polish to get for NotoEmoji-Regular.ttf Revert "Keep the same behavior to the return value of FcConfigParseAndLoad" Fix again to keep the same behavior to the return value of FcConfigParseAndLoad cleanup Fix a compiler warning Update libtool revision Bump version to 2.12.6 doc: trivial update Add the ruleset description support workaround to avoid modifying by gettextize missing an open parenthesis another workaround to avoid modifying by gettextize... Validate cache more carefully Allow autoreconf through autopoint for gettext things Correct debugging messages to load/scan config Add the check of PCF_CONFIG_OPTION_LONG_FAMILY_NAMES back Use uuid-based cache filename if uuid is assigned to dirs Add new API to find out a font from current search path Replace the font path in FcPattern to what it is actually located. Replace the original path to the new one Replace the path of subdirs in caches as well Don't call FcStat when the alias has already been added Destroy the alias and UUID tables when all of caches is unloaded cleanup abstract hash table functions update Fix memory leak Fix a typo Don't call FcStat when the alias has already been added Add a testcase for bind-mounted cachedir cleanup Use smaller prime for hash size Fix the testcase for env not enabled PCF_CONFIG_OPTION_LONG_FAMILY_NAMES in freetype thread-safe functions in fchash.c Fix distcheck error Fix "make check" fail again Bump the libtool revision Alban Browaeys (1): Fixes cleanup Alexander Kanavin (1): src/fcxml.c: avoid double free() of filename Bastien Nocera (1): conf: Prefer system emoji fonts to third-party ones Behdad Esfahbod (76): Minor Remove stray printf() [fc-query] Fix linking order Instead of loading glyphs (with FreeType), just check loca table Don't even check loca for glyph outline detection Check for non-empty outline for U+0000..U+001F Add back code for choosing strike, and cleanup Minor: adjust debug output Remove unnecessary check Remove a few unused blanks parameters Remove check that cannot fail Remove use of psnames for charset construction Remove unused variable Remove fc-glyphname Remove blanks facility from the library Remove blanks support from fc-scan Mark more parameters FC_UNUSED Move variables to narrower scope and indent Remove unneeded check Use multiplication instead of division Use inline functions instead of macros for a couple of things Simplify advance-width calculations Inline FcFreeTypeCheckGlyph() Call FT_Get_Advance() only as long as we need to determine font width type Minor Update documentation for removal of blanks Merge branch 'faster' Add FcFreeTypeQueryAll() Document FcFreeTypeQueryAll() Accept NULL in for spacing in FcFreeTypeCharSetAndSpacing() Remove FcCompareSize() Rename FcCompareSizeRange() to FcCompareRange() Rewrite FcCompareRange() In FcSubstituteDefault(), handle size range Check instance-index before accessing array Indent [varfonts] Add FC_FONT_VARIATIONS [varfonts] Add FC_VARIABLE [varfonts] Change id argument in FcFreeTypeQuery* to unsigned int Print ranges as closed as opposed to half-open [varfonts] Change FC_WEIGHT and FC_WIDTH into ranges [varfonts] Query varfonts if id >> 16 == 0x8000 Fix instance-num handling in collections [varfonts] Query variable font in FcFreeTypeQueryAll() [varfonts] Fetch optical-size for named instances In RenderPrepare(), handle ranges smartly [fc-query] Remove --ignore-blanks / -b [fc-match/fc-list/fc-query/fc-scan] Add --brief that is like --verbose without charset Add separate match compare function for size Fix range comparision operators implementation Adjust emboldening logic [varfonts] Map from OpenType to Fontconfig weight values Add FcDontCare value to FcBool Implement more config bool operations for boolean types Fix possible div-by-zero [varfonts] Use fvar data even if there's no variation in it Minor Revert "[varfonts] Use fvar data even if there's no variation in it" [varfonts] Minor [varfonts] Comment [varfonts] Don't set style for variable-font pattern [varfonts] Skip named-instance that is equivalent to base font [varfonts] Do not set postscriptname for varfont pattern [varfonts] Don't reopen face for each named instance Separate charset and spacing code [varfonts] Reuse charset for named instances Move whitespace-trimming code to apply to all name-table strings Fix whitespace-trimming loop and empty strings... Whitespace Don't convert nameds to UTF-8 unless we are going to use them Simplify name-table platform mathcing logic Use binary-search for finding name table entries [varfonts] Share lang across named-instances Merge branch 'varfonts2' Require freetype >= 2.8.1 Remove assert David Kaspar [Dee'Kej] (1): conf.d: Drop aliases for (URW)++ fonts Florian Müllner (1): build: Remove references to deleted file 2.12.6 Akira TAGOH (4): und_zsye.orth: polish to get for NotoEmoji-Regular.ttf Revert "Keep the same behavior to the return value of FcConfigParseAndLoad" Fix again to keep the same behavior to the return value of FcConfigParseAndLoad Update libtool revision Behdad Esfahbod (2): Minor [fc-query] Fix linking order David Kaspar [Dee'Kej] (1): conf.d: Drop aliases for (URW)++ fonts Florian Müllner (1): build: Remove references to deleted file 2.12.5 Akira TAGOH (17): Add FcPatternGetWithBinding() to obtain the binding type of the value in FcPattern. Add FcConfigParseAndLoadFromMemory() to load a configuration from memory. Bug 101726 - Sans config pulls in Microsoft Serifed font Fix gcc warnings with enabling libxml2 Add und-zsye.orth to support emoji in lang Add more code points to und-zsye.orth Keep the same behavior to the return value of FcConfigParseAndLoad Do not ship fcobjshash.gperf in archive Accept 4 digit script tag in FcLangNormalize(). Fix to work the debugging option on fc-validate Add und_zmth.orth to support Math in lang Polish und_zmth.orth for Libertinus Math Polish und_zmth.orth more for Cambria Math and Minion Math Update similar to emoji's fc-blanks: fall back to the static data available in repo if downloaded data is corrupted Update docs Update libtool versioning Behdad Esfahbod (14): Pass --pic to gperf Add generic family matching for "emoji" and "math" [fc-query] Support listing named instances Add Twitter Color Emoji Add EmojiOne Mozilla font [fc-lang] Allow using ".." instead of "-" in ranges Minor Remove unneeded codepoints Adjust color emoji config some more Ignore 'und-' prefix for in FcLangCompare Minor Fix sign-difference compare warning Fix warning Fix weight mapping 2.12.4 Akira TAGOH (5): Force regenerate fcobjshash.h when updating Makefile Fix the build failure when srcdir != builddir and have gperf 3.1 or later installed Add a testcase for Bug#131804 Update libtool revision Fix distcheck error Florent Rougon (6): FcCharSetHash(): use the 'numbers' values to compute the hash fc-lang: gracefully handle the case where the last language initial is < 'z' Fix an off-by-one error in FcLangSetIndex() Fix erroneous test on language id in FcLangSetPromote() FcLangSetCompare(): fix bug when two charsets come from different "buckets" FcCharSetFreezeOrig(), FcCharSetFindFrozen(): use all buckets of freezer->orig_hash_table Helmut Grohne (1): fix cross compilation Jan Alexander Steffens (heftig) (1): Fix testing PCF_CONFIG_OPTION_LONG_FAMILY_NAMES (CFLAGS need to be right) Josselin Mouette (1): Treat C.UTF-8 and C.utf8 locales as built in the C library. Masamichi Hosoda (1): Bug 99360 - Fix cache file update on MinGW 2.12.3 Akira TAGOH (1): Fix make check fail with freetype-2.7.1 and 2.8 with PCF_CONFIG_OPTION_LONG_FAMILY_NAMES enabled. 2.12.2 Akira TAGOH (8): Don't call perror() if no changes happens in errno Fix FcCacheOffsetsValid() Fix the build issue with gperf 3.1 Fix the build issue on GNU/Hurd Update a bit for the changes in FreeType 2.7.1 Add the description of FC_LANG envvar to the doc Bug 101202 - fontconfig FTBFS if docbook-utils is installed Update libtool revision Alan Coopersmith (1): Correct cache version info in doc/fontconfig-user.sgml Khem Raj (1): Avoid conflicts with integer width macros from TS 18661-1:2014 Masamichi Hosoda (2): Fix PostScript font alias name Update aliases for URW June 2016 2.12.1 Akira TAGOH (6): Add --with-default-hinting to configure Update CaseFolding.txt to Unicode 9.0 Check python installed in autogen.sh Fix some errors related to python3 Bug 96676 - Check range of FcWeightFromOpenType argument Update libtool revision Tobias Stoeckmann (1): Properly validate offsets in cache files. 2.12 Akira TAGOH (8): Modernize fc-blanks.py Update URL Bug 95477 - FcAtomicLock fails when SELinux denies link() syscall with EACCES 45-latin.conf: Add some Windows fonts to categorize them properly Correct one for the previous change Bug 95481 - Build fails on Android due to broken lconv struct Add the static raw data to generate fcblanks.h Remove unused code Erik de Castro Lopo (1): Fix a couple of minor memory leaks Petr Filipsky (1): Fix memory leak in FcDirCacheLock 2.11.95 (2.12 RC5) Akira TAGOH (22): Add one more debugging option to see transformation on font-matching Fix a crash when no objects are available after filtering No need to be public mark as private at this moment Don't return FcFalse even when no fonts dirs is configured Add a warning for blank in fonts.conf Fix a memory leak in FcFreeTypeQueryFace Update CaseFolding.txt to Unicode 8.0 Bug 90867 - Memory Leak during error case in fccharset Fix the broken cache more. Fail on make runtime as needed instead of configure if no python installed Use long long to see the same size between LP64 and LLP64 Fix build issue on MinGW Use int64_t instead of long long Fix compiler warnings on MinGW Fix assertion on 32bit arch remomve unnecessary code Bug 93075 - Possible fix for make check failure on msys/MinGW... Avoid an error message on testing when no fonts.conf installed Add hintstyle templates and make hintslight default Revert "Workaround another race condition issue" Update libtool revision Behdad Esfahbod (6): Revert changes made to FcConfigAppFontAddDir() recently Call FcFreeTypeQueryFace() from fcdir.c, instead of FcFreeTypeQuery() [GX] Support instance weight, width, and style name [GX] Enumerate all named-instances in TrueType GX fonts Improve OpenType to Fontconfig weight mapping [GX] Improve weight mapping Patrick Haller (1): Optimizations in FcStrSet 2.11.94 (2.12 RC4) Akira TAGOH (16): Remove the dead code Bug 89617 - FcConfigAppFontAddFile() returns false on any font file Fix unknown attribute in Win32 Fix SIGFPE Fix a typo for the latest cache version Fix a typo in fontconfig-user.sgml Drop unmaintained code Observe blanks to compute correct languages in fc-query/fc-scan Add missing description for usage Make FC_SCALE deprecated Bug 90148 - Don't warn if cachedir isn't specified Fix memory leaks after FcFini() Fix a typo Fix a crash Detect the overflow for the object ID Revert the previous change Behdad Esfahbod (11): Fix bitmap scaling Add su[pport for symbol fonts Write ranges using a [start finish) format Only set FC_SIZE for scalable fonts if OS/2 version 5 is present Add bitmap-only font size as Double, not Range Accept Integer for FC_SIZE Don't set FC_SIZE for bitmap fonts Fix compiler warnings Simplify FcRange Reduce number of places that cache version is specified to 1 Bump cache version number to 6, because of recent FcRange changes Руслан Ижбулатов (1): W32: Support cache paths relative to the root directory 2.11.93 (2.12 RC3) Akira TAGOH (18): Fix a typo in docs Add pkg.m4 to git Fix a build fail on some non-POSIX platforms ifdef'd the unnecessary code for win32 Fix pointer cast warning on win32 filter can be null Copy the real size of struct dirent Rework again to copy the struct dirent Hardcode the blanks in the library Update the script to recognize the escaped space Fix a build issue when $(srcdir) != $(builddir) Don't add FC_LANG when it has "und" Fix the array allocation Improve the performance on searching blanks Fix a segfault when OOM happened. Fix a bug in the previous change forFcBlanksIsMember() Fix an infinite loop in FcBlanksIsMember() Fix a trivial bug for dist Alan Coopersmith (1): Fix configure to work with Solaris Studio compilers Behdad Esfahbod (3): Fix symbol cmap handling Remove dead code after previous commit Simplify some more Michael Haubenwallner (1): Ensure config.h is included first, bug#89336. 2.11.92 (2.12 RC2) Akira TAGOH (1): Add missing docs 2.11.91 (2.12 RC1) Akira TAGOH (28): Bug 71287 - size specific design selection support in OS/2 table version 5 Fix a build issue with freetype <2.5.1 Fix missing docs Fix a typo Fix fc-cache fail with -r Rebase ja.orth against Joyo kanji characters Allow the modification on FcTypeVoid with FcTypeLangSet and FcTypeCharSet Workaround another race condition issue Read the config files and fonts on the sysroot when --sysroot is given to fc-cache Fix a segfault Update CaseFolding.txt to Unicode 7.0 Don't read/write from/to the XDG dirs if the home directory is disabled Rework for 5004e8e01f5de30ad01904e57ea0eda006ab3a0c Fix a crash when no sysroot is given and failed to load the default fonts.conf Fix a gcc warning Don't add duplicate lang fallback to the another method to lock when link() failed Increase the refcount in FcConfigSetCurrent() Fix the memory leak in fc-cat Note FcConfigSetCurrent() increases the refcount in document Add FcRangeGetDouble() Revert "Bug 73291 - poppler does not show fl ligature" Update aliases for new URW fonts Returns False if no fonts found fc-cache: make a fail if no fonts processed on a given path fc-cache: Add an option to raise an error if no fonts found Bump the cache version to 5 Fix a typo Behdad Esfahbod (39): Remove unused code Simplify hash code Further simplify hash code Rewrite hashing to use FT_Stream directly Allow passing NULL for file to FcFreeTypeQueryFace() [ko.orth] Remove U+3164 HANGUL FILLER Deprecate FC_HASH and don't compute it Remove unused FcHash code now that FC_HASH is deprecated Update list of blanks to Unicode 6.3.0 Update blanks to Unicode 7.0 Change charset parse/unparse format to be human readable Minor Fix charset unparse after recent changes Comments Remove HASH from matching priorities Fixup previous commit Update mingw32 MemoryBarrier from HarfBuzz More mingw32 MemoryBarrier() fixup Symlinks fix for DESTDIR Revert "Symlinks fix for DESTDIR" Call FcInitDebug from FcFreeTypeQueryFace Decode MacRoman encoding in name table without iconv Ouch, fix buffer Use lang=und instead of lang=xx for "undetermined" Remove unused regex code Improve / cleanup namelang matching Add FC_WEIGHT_DEMILIGHT Change DemiLight from 65 to 55 Linearly interpolate weight values Export recently added API Remove unneeded FcPublic Fix assertion failure If OS/2 table says weight is 1 to 9, multiply by 100 Trebuchet MS is a sans-serif font, not serif Fix previous commit Revert "[fcmatch] When matching, reserve score 0 for when elements don't exist" Fix buffer overflow in copying PS name Add FC_COLOR Treat color fonts as scalable Nick Alcock (1): Generate documentation for FcWeight* functions. 2.11.1 Akira TAGOH (31): do not build test-migration for Win32 Fix build issue on Debian/kFreeBSD 7.0 Update ax_pthread.m4 to the latest version Fix the dynamic loading issue on NetBSD Use stat() if there are no d_type in struct dirent Fix a build issue on Solaris 10 Change the default weight on match to FC_WEIGHT_NORMAL Warn if no nor elements in Correct DTD Re-scan font directories only when it contains subdirs Fix typo Bug 72086 - Check for gperf in autogen.sh Simplify to validate the availability of posix_fadvise Simplify to validate the availability of scandir Fix a typo Fix a build issue on platforms where doesn't support readlink() Improve the performance issue on rescanning directories Bug 73686 - confdir is not set correctly in fontconfig.pc Update zh_hk.orth clean up the unused files Add missing license headers Update the use of autotools' macro Fix a crash issue when empty strings are set to the BDF properties Add a doc for FcDirCacheRescan Add missing #include in fcstat.c Fix incompatible API on AIX with random_r and initstate_r Fallback to lstat() in case the filesystem doesn't support d_type in struct dirent Update doc to include the version info of `since when' Bug 73291 - poppler does not show fl ligature Add README describes the criteria to add/modify the orthography files Fix autoconf warning, warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS Alan Coopersmith (3): Leave room for null terminators in arrays Avoid memory leak when NULL path passed to FcStrBuildFilename Avoid null pointer dereference in FcNameParse if malloc fails Behdad Esfahbod (1): Bug 72380 - Never drop first font when trimming Frederic Crozat (2): Fix inversion between Tinos and Cousine in the comment Add metric aliases for additional Google ChromeOS fonts Jehan (1): Defaulting to LOCAL_APPDATA_FONTCONFIG_CACHE for Win32 build Ross Burton (1): fc-cache: --sysroot option takes an argument 2.11 Akira TAGOH (15): Do not create a config dir for migration when no config files nor dirs Add a test case of the migration for config place Fix memory leaks in FcFreeTypeQueryFace Bug 68955 - Deprecate / remove FC_RASTERIZER Copy all values from the font to the pattern if the pattern doesn't have the element Fix a crash when FcPattern is set to null on FcFontSetList() and FcFontList() Add the description of -q option to the man page avoid reading config.h twice clean up Add the relative path for to fonts.conf if the parent path is same to fonts.conf Workaround the race condition issue on updating cache exit with the error code when FcNameParse() failed Add missing doc for FcStrListFirst and fix a typo Bump libtool revision Update CaseFolding.txt to Unicode 6.3 Jan Alexander Steffens (heftig) (1): Further changes to 30-metric-aliases.conf W. Trevor King (1): doc/fccharset.fncs: Describe the map format in more detail 2.10.95 (2.11 RC5) Akira TAGOH (2): Fix a typo Fix a crash 2.10.94 (2.11 RC4) Akira TAGOH (25): Bug 64906 - FcNameParse() should ignore leading whitespace in parameters Fix a comparison of constant warning with clang Fix a shift count overflow on 32bit box Fix a incompatible pointer warning on NetBSD Add FcTypeUnknown to FcType to avoid comparison of constant -1 Fix the behavior of intermixed tests end edits in match Ignore scandir() check on mingw Use INT_MAX instead of unreliable hardcoding value Add FC_UNUSED to FC_ASSERT_STATIC macro to avoid compiler warning Rework to apply the intermixed test and edit elements in one-pass trivial code optimization Correct fontconfig.pc to add certain dependencies for build Correct fontconfig.pc to add certain dependencies for static build Fix wrong edit position Bug 67809 - Invalid read/write with valgrind when assigning something twice warn deprecated only when migration failed Bug 67845 - Match on FC_SCALABLE Bug 16818 - fontformat in match pattern is not respected? Bug 68340 - More metric compat fonts Bug 63399 - Add default aliases for Georgia, Garamond, Palatino Linotype, Trebuchet MS Fix a typo Fix a crash when non-builtin objects are edited Fix a wrong edit position when 'kind' is different Bug 68587 - copy qu.orth to quz.orth Add quz.orth to Makefile.am Behdad Esfahbod (2): Minor Fix assertion 2.10.93 (2.11 RC3) Akira TAGOH (10): Bug 62980 - matching native fonts with even :lang=en Ensure closing fp on error Obtain fonts data via FT_Face instead of opening a file directly Revert the previous change and rework to not export freetype API outside fcfreetype.c documented FC_HASH and FC_POSTSCRIPT_NAME Bug 63329 - make check fails: .. contents:: :depth: 2 Use the glob matching for filename Bug 63452 - conf.d/README outdated Fix missing OSAtomicCompareAndSwapPtrBarrier() on Mac OS X 10.4 Bug 63922 - FcFreeTypeQueryFace fails on postscripts fonts loaded from memory Sebastian Freundt (1): build-chain, replace INCLUDES directive by AM_CPPFLAGS 2.10.92 (2.11 RC2) Akira TAGOH (33): Fix the build fail on MinGW Bug 50497 - RFE: Add OpenType feature tags support Improve FcGetPrgname() to work on BSD Better fix for 2fe5ddfd Add missing file descriptor to F_DUPFD_CLOEXEC Fix mkstemp absence for some platform Fix installation on MinGW32 Add another approach to FC_PRGNAME for Solaris 10 or before remove the unnecessary code Bug 59385 - Do the right thing for intermixed edit and test elements Bug 23757 - Add mode="delete" to Modernize configure.ac Use AM_MISSING_PROG instead of hardcoding missing Revert "test: Use SH_LOG_COMPILER and AM_TESTS_ENVIRONMENT" Use AM_MISSING_PROG instead of hardcoding missing Bug 50733 - Add font-file hash? Bug 60312 - DIST_SUBDIRS should never appear in a conditional Update _FcMatchers definition logic Bump the cache version to 4 Add Culmus foundry to the vendor list Bug 60748 - broken conf.d/10-autohint.conf and conf.d/10-unhinted.conf Bug 60783 - Add Liberation Sans Narrow to 30-metric-aliases.conf Fix a typo Fix a crash when the object is non-builtin object Fix broken sort order with FcFontSort() Fix a memory leak Bug 59456 - Adding a --sysroot like option to fc-cache Do not copy FC_*LANG_OBJECT even if it's not available on the pattern Fix a SIGSEGV on FcPatternGet* with NULL pattern Bug 38737 - Wishlist: support FC_POSTSCRIPT_NAME Minor cleanup Bump libtool revision Minor fix Behdad Esfahbod (12): Resepct $NOCONFIGURE Ensure we find the uninstalled fontconfig header Copy all values from pattern to font if the font doesn't have the element Minor Bug 59379 - FC_PRGNAME Remove unused checks for common functions Minor Fix fc-cache crash caused by looking up NULL object incorrectly Fix FC_PRGNAME default Fix readlink failure Accept digits as part of OpenType script tags Fix crash with FcConfigSetCurrent(NULL) Christoph J. Thompson (1): Use the PKG_INSTALLDIR macro. Colin Walters (1): build: Only use PKG_INSTALLDIR if available Quentin Glidic (2): test: Use SH_LOG_COMPILER and AM_TESTS_ENVIRONMENT Use LOG_COMPILER and AM_TESTS_ENVIRONMENT 2.10.91 (2.11 RC1) Akira TAGOH (19): Fix a potability issue about stdint.h Fix build issues on clean tree Do not show the deprecation warning if it is a symlink Fix a typo Fix the wrong estimation for the memory usage information in fontconfig Remove the duplicate null-check Remove the dead code clean up Fix a typo that accessing to the out of array Fix a memory leak Check the system font to be initialized Missing header file for _mkdir declaration Clean up the unused variable Bug 47705 - Using O_CLOEXEC missing header file to declare _mkdir Fix a build fail on mingw Fix a typo in the manpages template Bug 29312 - RFE: feature to indicate which characters are missing to satisfy the language support Update the date in README properly Behdad Esfahbod (73): Fix typo Parse matrices of expressions Fix compiler warnings Fix unused-parameter warnings Fix more warnings Fix sign-compare warnings Fix warning Fix more warnings Fixup from 4f6767470f52b287a2923e7e6d8de5fae1993f67 Remove memory accounting and reporting Allow target="font/pattern/default" in elements Don't warn if an unknown element is used in an expression Unbreak build when FC_ARCHITECTURE is defined Remove unneeded stuff Enable fcarch assert checks even when FC_ARCHITECTURE is explicitly given Make tests run on Windows Initialize matrix during name parsing Adjust docs for recent changes Warn if appears in Make FC_DBG_OBJTYPES debug messages into warnings Refuse to set value to unsupported types during config too Add NULL check Don't crash in FcPatternDestroy with NULL pattern Don't crash in FcPatternFormat() with NULL pattern Minor Whitespace Deprecate FcName(Un)RegisterObjectTypes / FcName(Un)RegisterConstants Use a static perfect hash table for object-name lookup Switch .gitignore to git.mk Remove shared-str pool Fix build stuff Add build stuff for threadsafety primitives Add thread-safety primitives Make refcounts, patterns, charsets, strings, and FcLang thread-safe Make FcGetDefaultLang and FcGetDefaultLangs thread-safe Make FcInitDebug() idempotent Make FcDefaultFini() threadsafe Refactor; contain default config in fccfg.c Minor Make default-FcConfig threadsafe Minor Make FcCacheIsMmapSafe() threadsafe Minor Make cache refcounting threadsafe Add a big cache lock Make random-state initialization threadsafe Make cache hash threadsafe Make FcDirCacheDispose() threadsafe Make fcobjs.c thread-safe Warn about undefined/invalid attributes during config parsing Fixup fcobjs.c Remove FcSharedStr* Fix compiler warnings Minor Fix build and warnings on win32 Use CC_FOR_BUILD to generate source files Fix more warnings. Trying to fix distcheck Fix build around true/false Work around Sun CPP Really fix cross-compiling and building of tools this time Second try to make Sun CPP happy Ugh, add Tools.mk Minor Don't use blanks for fc-query Remove FcInit() calls from tools Add 10-scale-bitmap-fonts.conf and enable by default Oops, add the actual file Fix pthreads setup Fix memory corruption! Add pthread test Add atomic ops for Solaris Make linker happy Jon TURNEY (1): Fix build when srcdir != builddir 2.10.2 Akira TAGOH (13): Bug 53585 - Two highly-visible typos in src/fcxml.c Fix for libtoolize's warnings Bug 54138 - X_OK permission is invalid for win32 access(..) calls Bug 52573 - patch required to build 2.10.x with oldish GNU C library headers deal with warnings as errors for the previous change Fix wrongly squashing for the network path on Win32. Fix syntax errors in fonts.dtd. autogen.sh: Add -I option to tell aclocal a place for external m4 files Use automake variable instead of cleaning files in clean-local Bug 56531 - autogen.sh fails due to missing 'm4' directory Bug 57114 - regression on FcFontMatch with namelang Update CaseFolding.txt to Unicode 6.2 Bug 57286 - Remove UnBatang and Baekmuk Batang from monospace in 65-nonlatin.conf Behdad Esfahbod (1): Fix N'ko orthography Jeremy Huddleston Sequoia (1): Remove _CONFIG_FIXUPS_H_ guards, so multiple includes of "config.h" result in the correct values 2.10.1 Akira TAGOH (2): Fix a typo in fontconfig.pc Install config files first 2.10.0 Akira TAGOH (5): Bug 34266 - configs silently ignored if libxml2 doesn't support SAX1 interface Update CaseFolding.txt to Unicode 6.1 Fix a build fail with gcc 2.95, not supporting the flexible array members. Bump libtool revision Update INSTALL 2.9.92 (2.10 RC2) Akira TAGOH (9): Bug 50835 - Deprecate FC_GLOBAL_ADVANCE Fix a typo and build fail. Fix a build fail on MINGW Fix the fail of make install with --disable-shared on Win32 clean up the lock file properly on even hardlink-not-supported filesystem. Rename configure.in to configure.ac Bug 18726 - RFE: help write locale-specific tests Bump libtool revision Update INSTALL Marius Tolzmann (2): Fix newline in warning about deprecated config includes Fix warning about deprecated, non-existent config includes 2.9.91 (2.10 RC1) Akira TAGOH (60): [doc] Update the path for cache files and the version. [doc] Update for cachedir. Revert "Fix a build fail on some environment." Revert "Fix a build fail on some environment" Fix a build issue due to the use of non-portable variables Get rid of the prerequisites from the sufix rules Bug 39914 - Please tag the cache directory with CACHEDIR.TAG fc-cache: improvement of the fix for Bug#39914. fcmatch: Set FcResultMatch at the end if the return value is valid. Bug 47703 - SimSun default family Bug 17722 - Don't overwrite user's configurations in default config Fix a memory leak in FcDirScanConfig() Bug 17832 - Memory leaks due to FcStrStaticName use for external patterns fcpat: Increase the number of buckets in the shared string hash table Fix the hardcoded cache file suffix Move workaround macros for fat binaries into the separate header file Bug 48020 - Fix for src/makealias on Solaris 10 Bug 24729 - [ne_NP] Fix ortho file doc: Add contains and not_contains operators and elements Use AC_HELP_STRING instead of formatting manually Use pkgconfig to check builddeps Bug 29341 - Make some fontconfig paths configurable Bug 22862 - ignores s Bug 26830 - Add search for libiconv non-default directory Bug 28491 - Allow matching on FC_FILE Bug 48573 - platform without regex do not have also REG_XXX defines Bug 27526 - Compatibility fix for old windows systems Add --with-expat, --with-expat-includes and --with-expat-lib back. doc: Fix a typo of the environment variable name. Bug 25151 - Move cleanCacheDirectory() from fc-cache.c into Rework to avoid adding the unexpected value to ICONV_CFLAGS and ICONV_LIBS Fix a build issue again when no regex functions available C++11 requires a space between literal and identifier Bug 47721 - Add ChromeOS fonts to 30-metric-aliases.conf Create CACHEDIR.TAG when fc-cache is run or only when the cache directory is created at the runtime. Add --enable-iconv option to configure Bug 27765 - FcMatch() returns style in wrong language Disable iconv support anyway... Bug 39278 - make usage of mmap optional Output more verbose debugging log to show where to insert the element into the value list fonts.conf: keeps same binding for alternatives fcarch.c: get rid of the duplicate definition of FC_MAX Bug 19128 - Handling whitespace in aliases Bug 20411 - fontconfig doesn't match FreeDesktop directories specs Correct the example Bug 33644 - Fontconfig doesn't match correctly in fcatomic: fallback to create a directory with FcAtomicLock Move statfs/statvfs wrapper to fcstat.c and add a test for the mtime broken fs Fix the build fail on Solaris Fix a typo and polish the previous change Fix the wrong estimation for the memory usage information in fontconfig Bug 32853 - Export API to get the default language fcdefault: fallback if the environment variables are empty Add the default language to the pattern prior to do build the substitution fcdefault: no need to set FC_LANG in FcDefaultSubstitute() anymore fcdefault: Add the lang object at FcConfigSubstituteWithPat() only when kind is FcMatchPattern Bug 50525 - superfluous whitespace in the style Bump libtool revision doc: Fix distcheck error again... Generate bzip2-compressed tarball too Jeremy Huddleston (1): fcarch: Check for architecture signature at compile time rather than configure time Keith Packard (3): Use posix_fadvise to speed startup Extra ',' in AC_ARG_WITH(arch causes arch to never be autodetected Deal with architectures where ALIGNOF_DOUBLE < 4 Mark Brand (1): fix building for WIN32 Mikhail Gusarov (2): Move FcStat to separate compilation unit Fix cache aging for fonts on FAT filesystem under Linux 2.9 Akira TAGOH (28): Add charset editing feature. add some document for range and charset. Add the range support in blank element Add editing langset feature. add some documents Bug 24744 - No n'ko orthography Remove the unnecessary comment in ks.orth Bug 32965 - Asturian (ast-ES) language matching missing ḷḷḥ Add a missing file Bug 35517 - Remove Apple Roman cmap support Bug 40452 - Running 'fc-match --all' core dumps when no fonts are installed Get rid of the unexpected family name Bug 44826 - must contain only a single Bug 46169 - Pointer error in FcConfigGlobMatch Do not update stream->pos when seeking is failed. Bug 27385 - lcdfilter settings for freetype-2.3.12 not available in fontconfig-2.8.0 Add brx.orth and sat.orth Bug 41694 - FcCache functions have random-number-generator side effects Bug 23336 - unable to display bitmap-only (SFNT) TrueType or OpenType Check null value for given object to avoid possibly segfaulting Bug 19128 - Handling whitespace in aliases Fix distcheck error Update the version info Update to detect the uncommited changes properly Fix a build issue Fix a build fail on some environment Fix a build fail on some environment. Get rid of $< from Makefile.am Alan Coopersmith (1): Fix compiler warnings Behdad Esfahbod (54): [fc-cache] Document -r argument in man page [doc] Fix typo Bug 25508 configure assumes bash > 2.0 is on system Update INSTALL Add note about autogen.sh to INSTALL Fix doc typo More doc typo fixes Bug 18886 installation crashes if fontconfig already installed Bug 26157 Solaris/Sun C 5.8: compilation of 2.8.0 and 2.7.3 fails Bug 25152 Don't sleep(2) if all caches were uptodate Don't include unistd.h in fontconfig.h Accept TT_PLATFORM_MICROSOFT, TT_MS_ID_SYMBOL_CS from name table Whitespace More whitespace Remove all training whitespaces Fix comment Add fc-pattern cmdline tool Bug 29338 - fc-pattern.sgml, open para tag Add comments Bug 29995 - fc-cat does not invoke FcFini() Add new public API: FcCharSetDelChar() [fc-lang] Support excluding characters Bug 24729 - [ne_NP] Fix ortho file Add more copyright owners Cleanup copyright notices to replace "Keith Packard" with "the author(s)" Fix returned value Bug 28958 - lang=en matches other langs Make most generated-files cross-compiling-safe Make fc-arch stuff cross-compiling-safe Bump version Allow editing charset and lang in target="scan" Add support for into the DTD Skip elements with begin > end Doc nit Fix assertion failure on le32d4 Remove AM_MAINTAINER_MODE Update CaseFolding.txt to Unicode 6.0 Remove --enable-maintainer-mode from autogen.sh Bug 20113 - Uighur (ug) orthography incomplete Bug 30566 - fcformat.c:interpret_enumerate() passes uninitialized idx to FcPatternGetLangSet() Mark constant strings as constant More doc typo fixes Always define FcStat as a function Fix warning Bug 35587 - Add padding to make valgrind and glibc not hate each other [.gitignore] Update Bug 36577 - Updating cache with no-bitmaps disables bitmap fonts... Bug 26718 - "fc-match sans file" doesn't work Switch fc-match to use FcPatternFormat() Switch fc-cat to use FcPatternFormat() Fix stupid bug in FcFontSort() Bug 41171 - Invalid use of memset Fix parallel build Add FcPublic to FcLangSetUnion and FcLangSetSubtract Brad Hards (1): Documentation fixes Jeremy Huddleston (2): fontconfig.pc: Add variables for confdir and cachedir fontconfig.pc.in: Add sysconfdir, localstatedir, and PACKAGE Jinkyu Yi (1): Bug 42423 - make default Korean font from Un to Nanum MINAMI Hirokazu (1): Bug 43406 - typo of Japanese font name in conf.d/65-nonlatin.conf Mike Frysinger (9): FcStrPlus: optimize a little delete unused variables FcStat: change to FcChar8 for first arg fc-cat: fix pointer warning FcName{,Get}Constant: constify string input fc-{list,match}: constify format string fix build warnings when using --with-arch FcObjectValidType: tweak -1 checking makealias: handle missing funcs better Parag Nemade (2): Bug 25651 - Add ortho file for locale brx_IN Bug 25650 - Add ortho file for locale sat_IN Pravin Satpute (4): Bug 27195 - need updates to ks.orth file Bug 43321 - Required corrections in urdu.orth file Bug 25653 - Add ortho file for locale doi_IN Bug 25652 - Add ortho file for locale mni_IN 2.8 Behdad Esfahbod (24): Clarify default confdir and cachedir better. Move FcAlign to fcint.h [fc-arch] Add FcAlign to arch signature [int] Define MIN/MAX/ABS macros Bump cache version up from 2 to 3 and fix FcLangSet caching/crash Remove unused macros [int] Remove fc_storage_type() in favor of direct access to v->type [int] Remove fc_value_* macros that did nothing other than renaming Enable automake silent rules [int] Remove more unused macros [xml] Remove unused code [arch] Try to ensure proper FcLangSet alignment in arch [lang] Fix serializing LangSet from older versions Make sure fclang.h and fcarch.h are built Remove bogus comment [fc-glyphname] Cleanup Makefile.am [src] Create fcglyphname.h automatically [fc-glyphname] Rename internal arrays to prefix with _fc_ Clean up Makefile's a bit [fc-glyphname] Remove Adobe glyphlist [fc-case] Update CaseFolding.txt to Unicode 5.2.0 [fc-arch] Beautify the arch template [fc-arch] Rename architecture names to better reflect what they are Bump libtool revision in preparation for release 2.7.3 Behdad Esfahbod (2): Use default config in FcFileScan() and FcDirScan() Bump libtool version in preparation for release Roozbeh Pournader (2): Correct Ewe (ee) orthography to use U+025B (bug #20711) Updated Arabic, Persian, and Urdu orthographies 2.7.2 Behdad Esfahbod (6): Improve charset printing [ja.orth] Comment out FULLWIDTH YEN SIGN (#22942) Bug 22037 - No Fonts installed on a default install on Windows Server 2003 Bug 23419 - "contains" expression seems not working on the fontconfig rule Revert "Fix FcNameUnparseLangSet()" and redo it Bump libtool version for release Tor Lillqvist (3): Fix MinGW compilation Fix heap corruption on Windows in FcEndElement() Use multi-byte codepage aware string function on Windows 2.7.1 Behdad Esfahbod (16): git-tag -s again Fix win32 build Replace spaces with tabs in conf files Remove unused ftglue code Add Inconsolata to monospace config (#22710) Fix leak with string VStack objects Improve libtool version parsing (#22122) Use GetSystemWindowsDirectory() instead of GetWindowsDirectory() (#22037) Remove unused macros Fix FcNameUnparseLangSet() Fix doc syntax (#22902) TT_MS_ID_UCS_4 is really UTF-16BE, not UTF-32 [doc] Add ~/fonts.conf.d to user docs Hardcode /etc/fonts instead of @CONFDIR@ in docs (#22911) Bump libtool versions that 2.7.0 (I forgot to do back then) Update .gitignore Karl Tomlinson (1): Don't change the order of names unnecessarily (#20128) 2.7 Alexey Khoroshilov (1): Use human-readable file names in the docs (bug #16278) Behdad Esfahbod (119): Avoid C99ism in Win32 code (#16651) [doc] Fix inaccuracy in FcFontRenderPrepare docs (#16985) When canonizing filenames, squash // and remove final / (#bug 16286) Add orth file for Maithili mai.orth (#15821) Replace RCS Id tags with the file name [doc] Fix signatures of FcPatternGetFTFace and FcPatternGetLangSet (#16272) Update Thai default families (#16223) Add ~/.fonts.conf.d to default config (#17100) [fc-match] Fix list of getopt options in --help Update man pages Add fc-query (#13019) Implement fc-list --verbose (#13015) [doc] Add const decorator for FcPatternDuplicate() Add FcPatternFilter() (#13016) [doc] Document that a zero rescanInterval disables automatic checks (#17103) Get rid of $Id$ tags [doc] Fix signature of FcConfigHome() Fix docs re 'orig' argument of FcPatternBuild and family Update sr.orth to actul subset of Cyrillic used by Serbian (#17208) Add Sindhi .orth file. (#17140) Add WenQuanYi fonts to default conf (#17262, from Mandriva) Handle -h and --help according to GNU Coding Standards (#17104) Document when config can be NULL (#17105) Add FcConfigReference() (#17124) Document how to free return value of FcNameUnparse() Don't leak FcValues string loaded through fcxml.c (#17661) Don't call FcPatternGetCharSet in FcSortWalk unless we need to (#17361) Fix two more doc typos [.gitignore] Update Cleanup symlinks in "make uninstall" (bug #18885) [fccache] Consistently use FcStat() over stat() (bug #18195) Consistently use FcStat() over stat() in all places Use __builtin_popcount() when available (bug #17592) Fix compile with old FreeType that doesn't have FT_Select_Size() (bug #17498) Implement fc-list --quiet ala grep (bug #17141) [65-fonts-persian.conf] Set foundry in target=scan instead of target=font Don't use identifier named complex Explicitly chmod() directories (bug #18934) Remove special-casing of FC_FILE in FcPatternPrint() [.gitignore] Update Implement FcPatternFormat and use it in cmdline tools (bug #17107) Fix comparison of family names to ignore leading space properly [fcmatch.c] Fix debug formatting [fcmatch] Use larger multipliers to enforce order [fcmatch] When matching, reserve score 0 for when elements don't exist [fcmatch] Move FcFontSetMatch() functionality into FcFontSetMatchInternal() [doc] Note that fontset returned by FcConfigGetFonts should not be modified Make FcCharSetMerge() public Don't use FcCharSetCopy in FcCharSetMerge Oops. Fix usage output. Revive FcConfigScan() (bug #17121) Add fc-scan too that runs FcFileScan/FcDirScan Oops, fix FcPatternFilter [fc-match] Accept list of elements like fc-list (bug #13017) Cleanup all manpage.* files [fcmatch] Fix crash when no fonts are available. [fcfreetype] Fix typo in GB2312 encoding name string (#19845) Add ICONV_LIBS to fontconfig.pc.in (#19606) [win32] Fix usage of GetFullPathName() [win32] Expand "APPSHAREFONTDIR" to ../share/fonts relative to binary location [win32] Do not remove leading '\\' such that network paths work [fccache] Make sure the cache is current when reusing from open caches Update Sinhala orthography (#19288) [cache] After writing cache to file, update the internal copy to reflect this Further update Sinhala orthography (#19288) [fcformat] Add support for width modifiers [fcformat] Refactor and restructure code for upcoming changes [fcformat] Add support for subexpressions [fcformat] Add element filtering and deletion [fcformat] Add conditionals [fcformat] Add simple converters [fcformat] Implement 'cescape', 'shescape', and 'xmlescape' converters [FcStrBuf] better handle malloc failure [fcformat] Add value-count syntax [fcformat] Implement 'delete', 'escape', and 'translate' filter functions [fcformat] Start adding builtins [fcformat] Refactor code to avoid malloc [fcformat] Add support for builtin formats [fcformat] Support indexing simple tags [fcformat] Support 'default value' for simple tags [fcformat] Implement array enumeration [fclang] Implement FcLangSetGetLangs() (#18846) [fcformat] Enumerate langsets like we do arrays of values [fcformat] Add a 'pkgkit' builtin that prints tags for font packages [fcformat] Add list of undocumented language features [fc-lang] Continue parsing after an "include" (#20179) Fix Fanti (fat) orth file (#20390) Fix Makefile's to not create target file in case of failure [fcstr.c] Embed a static 64-byte buffer in FcStrBuf [fcstr,fcxml] Don't copy FcStrBuf contents when we would free it soon [fcxml] Don't allocate attr array if there are no attributes [fcxml] Embed 8 static FcPStack objects in FcConfigParse [fcxml] Embed 64 static FcVStack objects in FcConfigParse [fcxml.c] Embed a static 64-byte attr buffer in FcPStack Call git tools using "git cmd" instead of "git-cmd" syntax Replace 'KEITH PACKARD' with 'THE AUTHOR(S)' in license text in all files [fcformat] Fix default-value handling Document FcPatternFormat() format [Makefile.am] Don't clean ChangeLog in distclean Revert "[conf] Disable hinting when emboldening (#19904)" (#20599) [fc-lang] Fix bug in country map generation [fcstr] Remove unused variable [fc-lang] Make LangSet representation in the cache files stable [fc-cache] Remove obsolete sentence from man page Detect TrueType Collections by checking the font data header Mark matchers array const (#21935) Use/prefer WWS family/style (name table id 21/22) Simplify FcValueSave() semantics Add XXX note about Unicode Plane 16 Always set *changed in FcCharsetMerge [charset] Grow internal FcCharset arrays exponentially Remove unused prototypes and function [xml] Centralize FcExpr allocation [xml] Mark more symbols static [xml] Allocate FcExpr's in a pool in FcConfig [xml] Intern more strings Bug 22154 -- fontconfig.pc doesn't include libxml2 link flags Fix distcheck Remove keithp's GPG key id Benjamin Close (1): Remove build manpage logfile if it exists Chris Wilson (1): Reduce number of allocations during FcSortWalk(). Dan Nicholson (1): Let make expand fc_cachedir/FC_CACHEDIR (bug #18675) Harald Fernengel (1): Don't use variables named 'bool' (bug #18851) Harshula Jayasuriya (1): Fix Sinhala coverage (bug #19288) Karl Tomlinson (1): Change FcCharSetMerge API Mike FABIAN (1): [conf] Disable hinting when emboldening (#19904) Peter (1): Make sure alias files are built first (bug 16464) Rahul Bhalerao (1): Add config for new Indic fonts (bug #17856) Roozbeh Pournader (60): Correct Sindhi orthography to use Arabic script (bug #17140) Remove Sinhala characters not in modern use (bug #19288) Add Filipino orth, alias Tagalog to Filipino (bug #19846) Split Mongolian orth to Mongolia and China (bug #19847) Fix doubly encoded UTF-8 in comments (bug #19848) Change Turkmen orth from Cyrillic to Latin (bug #19849) Rename Venda from "ven" to "ve" (bug #19852) Rename "ku" to "ku_am", add "ku_iq" (bug #19853). Add Kashubian (csb) orth file (bug #19866) Add Malay (ms) orthography (bug #19867) Add Kinyarwanda (rw) orthography (bug #19868) Add Upper Sorbian (hsb) orthography (bug #19870) Add Berber orthographies in Latin and Tifinagh scripts (bug #19881) Renamed az to az_az (bug #19889) Rename Igbo from "ibo" to "ig" (bug #19892) Remove punctuation symbols from Asturian orthography (bug #19893) Add Chhattisgarhi (hne) orthography (bug #19891) Use newly added Cyrillic letters for Kurdish (bug #20049) Add Kurdish in Turkey (ku_tr) orthography (bug #19891) Add Aragonese (an) orthography (bug #19891) Add Haitian Creole (ht) orthography (bug #19891) Ad Ganda (lg) orthography (bug #19891) Add Limburgan (li) orthography (bug #19891) Add Sardinian (sc) orthography (bug #19891) Add Sidamo (sid) and Wolaitta (wal) orthographies (bug #19891) Fix Bengali (bn) and Assamese (as) orthographies (bug #22924) Remove Euro Sign from all orthographies (bug #19865) Add Ottoman Turkish (ota) orthography (bug #20114) Divide Panjabi (pa) to that of Pakistan and India (bug #19890) Add Blin (byn) orthography (bug #19891) Add Papiamento (pap_aw, pap_an) orthographies (bug #19891) Add Crimean Tatar (crh) orthography (bug #19891) Switch Uzbek (uz) orthography to Latin (bug #19851) Update Azerbaijani in Latin (az_az) to present usage (bug #20173) Rename Avaric orthography from 'ava' to 'av' (bug #20174) Rename Bambara orthography from 'bam' to 'bm' (bug #20175) Rename Fulah orthography from 'ful' to 'ff' (bug #20177) Change Kashmiri (ks) orthography to Arabic script (bug #20200) Tighten Central Khmer (km) orthography (bug #20202) Remove digits and symbols from some Indic orthographies (bug #20204) Add Divehi (dv) orthography (bug #20207) Extend Crimean Tatar (crh) orthography (bug #19891) Update Serbo-Croatian (sh) orthography (bug #20368) Add Ewe (ee) orthography (bug #20386) Add Herero (hz) orthograhy (bug #20387) Add Akan (ak) and Fanti (fat) orthographies (bug #20390) Added Quechua (qu) orthography (bug #20392) Add Sango (sg) orthography (bug #20393) Add Tahitian (ty) orthography (bug #20391) Add Navajo (nv) orthography (bug #20395) Add Rundi (rn) orthography (bug #20398) Add Zhuang (za) orthography (bug #20399) Add orthographies for Oshiwambo languages (bug #20401) Add Shona (sn) orthography (bug #20394) Add Sichuan Yi (ii) orthography (bug #20402) Add Javanese (jv) orthography (bug #20403) Add Nauru (na) orthography (bug #20418) Add Kanuri (kr) orthography (bug #20438) Add Sundanese (su) orthography (bug #20440) Reorganize Panjabi/Punjabi and Lahnda orthographies (bug #19890) Serge van den Boom (1): Correctly handle mmap() failure (#21062) 2.6 2.5.93 (2.6 RC3) Alexey Khoroshilov (1): Fix FcStrDirname documentation. (bug 16068) Behdad Esfahbod (1): Persian conf update. (bug 16066). Evgeniy Stepanov (1): Fix index/offset for 'decorative' matcher. Bug 15890. Glen Low (1): Fix Win32 build error: install tries to run fc-cache locally (bug 15928). Keith Packard (8): Call FcFini to make memory debugging easier Fix a few memory tracking mistakes. Add extended, caps, dunhill style mappings. Freetype 2.3.5 (2007-jul-02) fixes indic font hinting. re-enable (bug 15822) Add a copy of dolt.m4 to acinclude.m4. Libs.private needs freetype libraries Oops. Fix for bug 15928 used wrong path for installed fc-cache. Ignore empty elements Neskie Manuel (1): Add Secwepemctsin Orthography. Bug 15996. Sayamindu Dasgupta (1): FcConfigUptoDate breaks if directory mtime is in the future. Bug 14424. 2.5.92 (2.6 RC2) Carlo Bramini (1): Add FreeType-dependent functions to fontconfig.def file. (bug 15415) Changwoo Ryu (1): Korean font in the default config - replacing baekmuk with un (bug 13569) Dennis Schridde (1): Proper config path for static libraries in win32 Eric Anholt (1): Fix build with !ENABLE_DOCS and no built manpages. Frederic Crozat (1): Merge some of Mandriva configuration into upstream configuration. Bug 13247 Keith Packard (11): Use DOLT if available Work around for bitmap-only TrueType fonts that are missing the glyf table. Remove size and dpi values from bitmap fonts. Bug 8765. Add some sample cursive and fantasy families. Add --all flag to fc-match to show the untrimmed list. Bug 13018. Remove doltcompile in distclean Use of ":=" in src/Makefile.am is unportable (bug 14420) Make fc-match behave better when style is unknown (bug 15332) Deal with libtool 2.2 which doesn't let us use LT_ variables. (bug 15692) Allow for RC versions in README update git ignore doltcompile Ryan Schmidt (1): fontconfig build fails if "head" is missing or unusable (bug 14304) Sylvain Pasche (1): Fontconfig options for freetype sub-pixel filter configuration 2.5.91 (2.6 RC1) Hongbo Zhao (1): Not_contain should use strstr, not strcmp on strings. (bug 13632) Keith Packard (11): Move conf.avail/README to conf.d/README (bug 13392) Fix OOM failure case in FcPStackPush. Remove freetype requirement for build-time applications. Include fcftaliastail.h so that the freetype funcs are exported. Eliminate references to freetype from utility Makefile.am's Distribute new fcftint.h file Create new-version.sh to help with releases, update INSTALL instructions Distribute khmer font aliases Add more files to .gitignore new-version.sh was mis-editing files git-tag requires space after -m flag 2.5 Keith Packard (4): Document several function return values (Bug 13145). Document that Match calls FcFontRenderPrepare (bug 13162). Document that FcConfigGetFonts returns the internal fontset (bug 13197) Revert "Remove fcprivate.h, move the remaining macros to fcint.h." Tor Lillqvist (1): Workaround for stat() brokenness in Microsoft's C library (bug 8526) 2.4.92 (2.5 RC2) Behdad Esfahbod (14): Make fc-match --sort call FcFontRenderPrepare. Port fonts-persian.conf to new alias syntax with binding="same" Fix trivial bugs in edit-sgml.c Add FcGetLangs() and FcLangGetCharSet(). Add/update config files from Fedora. Split 40-generic.conf into 40-nonlatin.conf and 45-latin.conf Use binding="same" in 30-urw-aliases.conf and remove duplicate entries. Remove redundant/obsolete comments from conf files. Remove 20-lohit-gujarati.conf. It's covered by 25-unhint-nonlatin.conf now. Oops, fix Makefile.am. Remove 25-unhint-nonlatin.conf from default configuration by not linking it. Fix documented conf-file naming format in README Remove list of available conf files from README. Simplify/improve 30-metric-aliases.conf Keith Packard (25): Also check configDirs mtimes in FcConfigUptoDate Respect "binding" attribute in entries. Correct documentation for FcAtomicLock (Bug 12947). Remove fcprivate.h, move the remaining macros to fcint.h. Correct documentation for FcConfigUptoDate (bug 12948). Document skipping of fonts from FcFileScan/FcDirScan. Make file_stat argument to FcDirCacheLoadFile optional. Clean up exported names in fontconfig.h. Track line numbers in sgml edit tool input. Typo error in function name: Inverval -> interval Don't check cache file time stamps when cleaning cache dir. Use FcLangDifferentTerritory instead of FcLangDifferentCountry. Verify documentation covers exposed symbols. Document previously undocumented functions. (bug 12963) Update documentation for FcStrCopyFilename (bug 12964). Update documentation for stale FcConfigGetConfig function. Have FcConfigSetCurrent accept the current configuration and simply return Remove references to FcConfigParse and FcConfigLoad. Replace incorrect documentation uses of 'char' with 'FcChar8' (bug 13002). Fix formatting syntax in doc/fccache.fncs Generate fccache.sgml, fcdircache.sgml and fclangset.sgml. Formatting syntax mistake in doc/fclangset.fncs. Link new function documentation into the fontconfig-devel.sgml Ignore new generated documentation Export FcConfig{G,S}etRescanInverval from .so, mark as deprecated. 2.4.91 (2.5 RC1) Behdad Esfahbod (1): Update CaseFolding.txt to Unicode 5.1.0 Dwayne Bailey (1): Add/fix *.orth files for South African languages Hideki Yamane (1): Handle Japanese fonts better. (debian bug #435971) Keith Packard (32): rehash increment could be zero, causing rehash infinite loop. Work around FreeType bug when glyph name buffer is too small. Free temporary string in FcDirCacheUnlink (Bug #11758) Fix ChangeLog generation to avoid circular make dependency Store font directory mtime in cache file. Comment about mmaping cache files was misleading. Make FC_FULLNAME include all fullname entries, elide nothing. [bug 12827] Remove unneeded call to access(2) in fc-cache. Improve verbose messages from fc-cache. Verbose message about cleaning directories was imprecise Don't use X_OK bit when checking for writable directories (bug 12438) Have fc-cache remove invalid cache files from cache directories. FcConfigParseAndLoad doc was missing the last param. Place language name in constant array instead of pointer. Must not insert cache into hash table before completely validating. Eliminate relocations for glyph name table. Eliminate relocations from FcCodePageRange structure (bug 10982). Leave generated headers out of distribution (bug 12734). Move elements to the end of fonts.conf. Add BRAILLE PATTERN BLANK to list of blank glyphs. Replace makealias pattern with something supported by POSIX grep (bug 11083) FcInit should return FcFalse when FcInitLoadConfigAndFonts fails. (bug 10976) There is no U+1257 (bug 10899). Spelling errors in documentation. (bug 10879). Oops. Left debugging printf in previous commit. Handle UltraBlack weight. Fix parallel build in fontconfig/docs (bug 10481). Distribute man source files for command line programs (bug 9678). Ensure weight/slant values present even when style is supplied (bug 9313). fontconfig needs configure option to use gnu iconv (bug 4083). Match 'ultra' on word boundaries to detect ultra bold fonts. (bug 2511) Build fix for Solaris 10 with GCC. Mike FABIAN (1): Avoid crashes if config files contain junk. Stephan Kulow (1): Make FcPatternDuplicate copy the binding instead of always using Strong. Tilman Sauerbeck (2): Store FcNoticeFoundries in read-only memory. Store FcVendorFoundries in read-only memory. 2.4.2 Han-Wen Nienhuys: FcStrCanonFileName buggy for mingw. (bug 8311) More fixes for Win32 building (bug 8311) Kean Johnston: Don't use varargs CPP macros in fccache.c. (bug 8733) Keith Packard: Remove documentation for non-existant FcConfigNormalizeFontDir. Build fontconfig.def from header files when needed. Detect and use available random number generator (bug 8308) Add sparc64 architecture string. FcStrCanonAbsoluteFilename should be static. Use explicit platform/nameid order when scanning ttf files. Warn (and recover) from config file without elements. Avoid writing uninitialized structure pad bytes to cache files. Fix grep pattern in makealias to work on non-Gnu grep (bug 8368). Add FcFreeTypeQueryFace external API. Bug #7311. Segfault scanning non-font files. Disallow scan edit of user vars. (#8767) Add space between type and formal in devel man pages (bug 8935) Mike FABIAN: Do not clean cache files for different architectures Peter Breitenlohner: A VPATH build of fontconfig-2.4.1 fails for various reasons. Bug 8933. Use instead of when documenting fonts.conf. Bug 8935. Fix fc-cat documentation (bug 8935). 2.4.1 Keith Packard: Update installation notes for 2.4 base. Add ppc64 signature. Bug 8227 Add signatures for m68k and mipsel (thanks debian buildd) Add warning flags to fc-cache build. Clean up warnings in fc-cache. Reimplement FcConfigAppFontAddDir; function was lost in 2.4.0. 2.4.0 David Turner: Replace character discovery loop with simpler, faster version. James Cloos: Move files from conf.d to conf.avail Standardize conf.avail number prefixing convention Support all five possibilities for sub-pixel Move user and local conf file loading into conf.avail files Number the remaining conf.avail files Update Makefile.am to match conf.avail changes Replace load of conf.d in fonts.conf.in Make room for chunks from fonts.conf in conf.avail Re-order old conf.d files Move some section from fonts.conf into conf.avail files Update Makefile.am files Make conf.avail and conf.d work Keith Packard: Create fc_cachedir at install time. Bug 8157. Reference patterns in FcCacheCopySet. Replace gnu-specific sed command with simple grep. Attempt to fix makealias usage for build on Mac OS X. Accept locale environment variables that do not contain territory. Merge branch 'jhcloos' Insert newly created caches into reference data structure. Add XML headers to new conf files. Move link make commands to conf.avail dir Rename conf.avail to conf.d Fix conf.d directory sorting. Include cachedir in fonts.dtd. Don't display tests for DESTDIR on make install. Split much of the configuration into separate files. Renumber files 2.3.97 Carl Worth: Rename FcPatternThawAll to FcPatternFini. Add a configuration file that disables hinting for the Lohit Gujarati font Keith Packard: Various GCC 4 cleanups for signed vs unsigned char Finish INSTALL changes. .gitignore ChangeLog Merge branch 'fc-2_4_branch' to master Remove all .cvsignore files Hide private functions in shared library. Export functionality for utilities. Hide FreeType glue code from library ABI. Can't typecheck values for objects with no known type. Leave cache files mapped permanently. Reference count cache objects. Make cache reference counting more efficient. Oops, fc-lang broke when I added cache referencing. Correct reference count when sharing cache file objects. Eliminate .so PLT entries for local symbols. (thanks to Arjan van de Ven) Update architecture signatures for x86-64 and ppc. Parallel build fix for fcalias.h and fcaliastail.h Charset hashing depended on uniqueness of leaves. Patrick Lam: file Makefile.am was initially added on branch fc-2_4_branch. Modify config file to use Greek fonts before Asian fonts with Greek glyphs. Use libtool -no-undefined flag on all platforms. file ftglue.c was initially added on branch fc-2_4_branch. 2005-11-23 Frederic Crozat : reviewed by: plam file 10-fonts-persian.conf was initially added on branch fc-2_4_branch. Sort directory entries while scanning them from disk; prevents Heisenbugs file ln.orth was initially added on branch fc-2_4_branch. Fix typos in orth files. Reported by Denis Jacquerye. On Windows, unlink before rename. Reported by Tim Evans. file fc-match.sgml was initially added on branch fc-2_4_branch. 2.3.96 Keith Packard: Make path names in cache files absolute (NB, cache format change) Stop Eliminate pattern freezing Add .gitignore Construct short architecture name from architecture signature. Write caches to first directory with permission. Valid cache in FcDirCacheOpen. Eliminate NormalizeDir. Eliminate gratuitous stat/access calls per dir. Add architecture to cache filename. Eliminate global cache. Eliminate multi-arch cache code. Fix up fc-cache and fc-cat for no global cache changes. Eliminate ./ and ../ elements from font directory names when scanning. Regenerate x86 line in fcarch.tmpl.h to match change in cache data. Add x86-64 architecture and signature. During test run, remove cache directory to avoid stale cache usage. Add ppc architecture Revert to original FcFontSetMatch algorithm to avoid losing fonts. Rework cache files to use offsets for all data structures. Fix build problems caused by cache rework. FcCharSetSerialize was using wrong offset for leaves. Make fc-cat work. Rework Object name database to unify typechecking and object lookup. Skip broken caches. Cache files are auto-written, don't rewrite in fc-cache. Fix fc-cat again. Sigh. Use intptr_t instead of off_t inside FcCache structure. Serialized value lists were only including one value. Automatically remove invalid cache files. With no args, fc-cat now dumps all directories. Revert ABI changes from version 2.3 Change $(pkgcachedir) to $(fc_cachedir) in fc-cat and fc-cache Makefile.am Allow FcTypeLangSet to match either FcTypeLangSet or FcTypeString. Remove stale architecture signatures. Pass directory information around in FcCache structure. Freeze charsets. Fix fc-lang to use new charset freezer API. Fontset pattern references are relative to fontset, not array. Add some ignores Only rebuild caches for system fonts at make install time. Fix memory leaks in fc-cache directory cleaning code. Add @EXPAT_LIBS@ to Libs.private in fontconfig.pc (bug 7683) Avoid #warning directives on non-GCC compilers. (bug 7683) Chinese/Macau needs the Hong Kong orthography instead of Taiwan (bug 7884) Add Assamese orthography (as.orth). Bug #8050 Really only rebuild caches for system fonts at make install time. Fonts matching lang not territory should satisfy sort pattern lang. Prefer Bitstream Vera to DejaVu families. Guess that mac roman names with lots of high bits are actually SJIS. Document FC_DEBUG values (bug 6393). Document name \ escape syntax. Move Free family names to bottom of respective aliases. (bug 7429) Unify directory canonicalization into FcStrAddFilename. Allow font caches to contain newer version numbers Add FcMatchScan to resolve Delicious font matching issues (bug #6769) Fix missing initialization/destruction of new 'scan' target subst list. Don't segfault when string values can't be parsed as charsets or langsets. Using uninitialized (and wrong) variable in FcStrCopyFilename. Oops; missed the 60-delicious.conf file. Patrick Lam: Keith Packard 2006-04-27 Paolo Borelli (pborelli@katamail.com) reviewed by: plam 2006-05-31 Yong Li (rigel863@gmail.com) reviewed by: plam, Bedhad Esfahbod 2006-07-19 Jon Burgess (jburgess@uklinux.net) reviewed by: plam 2006-08-04 Keith Packard (keithp@keithp.com) reviewed by: plam 2.3.95 Match 'Standard Symbols L' for 'Symbol'. Add URW fonts as aliases for all of the PostScript fonts. (reported by Miguel Rodriguez). Fix a number of Coverity defects (Frederic Crozat). Speed up FcFontSort (fix suggested by Kenichi Handa). Fix error with charsets. Survive missing docbook2pdf. Compile on HP-UX, AIX, SGI and Windows (Cygwin, MinGW). Fix intel compiler warnings. Fix multiarch support (don't destroy multiarch files!) Require pkg-config. (Thanks Behdad; better solution wanted for libxml2 detection!) Fix typos in orth files and add orth for Lingala (reported by Denis Jacquerye). Remove debian/ directory. Add a configuration file that disables hinting for the Lohit Gujarati font (since the hinting distorts some glyphs quite badly). Sort directory entries while scanning them from disk; prevents Heisenbugs due to file ordering in a directory (due to Egmont Koblinger). Fix Wine's problem with finding fonts. (Reported by Bernhard Rosenkraenzer.) Fix the issues with GNU libiconv vs. libc iconv (which especially appear on Solarii); patch by Behdad Esfahbod, approach suggested by Tim Mooney. 2.3.94 fc-cat can take directories as input and creates old-style fonts.cache listings. fc-cache takes -r --really-force which blows away all old caches and regenerates. Robustness fixes, integer overflow fixes (notably to cache handling code), toast broken global cache files. Change binary format to make it compatible with static langset information (thanks to Takashi Iwai). Open hashed caches before fonts.cache-2 (Takashi Iwai). Fix FcFontSetMatch's algorithm, which used to unjustly kill fonts for not declaring certain elements (Takashi Iwai). Fix matching bug when multiple elements match; don't use the sum of all scores, but the best score (James Su). Make fc-lang more friendly to Windows systems. Remove archaic chars from Georgian charset; add Euro character to charsets for European languages. Fix treatment of broken PCF fonts that don't declare family names. Pass O_BINARY to open if appropriate (reported by Doodle). Normalize font directories to the form in which they appear in config files. Add a record of the cached directory to the cache file. Perf optimizations (Dirk Mueller; some reported by Michael Meeks.) Don't loop infinitely on recursive symlinks. Make 'make distcheck' work with automake 1.6.3. Replace 'stamp' target with mkinstalldirs. Don't stop scanning if a directory in fonts.conf doesn't exist, because subsequent directories might exist. Put directory names into global cache (reported by Ronny V. Vindenes). Treat zh-hk fonts differently from zh-tw fonts. This patch may cause fontconfig to treat A-X fonts differently from A-Y fonts; please mail the fontconfig list if this causes any problems. Fix for unaligned memory accesses (Andreas Schwab). Fix treatment of cache directory as read from cache file; don't use string equality to determine if we have the right file, use inode equality. Properly skip past dir caches that contain zero fonts, as occurs in global caches (reported by Mike Fabian). Print out full pathname in fc-match -v (reported by Frederic Crozat). Fix bug where fc-match crashes when given __DUMMY__ property to match on. 2.3.93 Create cache files in /var/cache/fontconfig with hashed filenames, if possible, for added FHS compliance. Make fc-cat read both per-directory and global cache files. Add config file for Persian fonts from Sharif FarsiWeb, Inc. Major performance improvements by Dirk Mueller, Stephen Kulow, and Michael Matz at SuSE: in particular, speed up FcFontSetMatch, and inline many functions. Fix treatment of globs in config files, broken since 2.3.2 and discovered by Mathias Clasen. Don't use freetype internal headers (patch by Matthias Clasen). Further space improvements: create langsets statically, so that they can live in .rodata. Properly align mmapped data structures to make e.g. ia64 happy. Bug fixes. 2.3.92 Fix corrupted caches bugs from 2.3.91 (reported by Mike Fabian). Store only basename in the cache, reconstitute on demand (reported by James Cloos). Change the rule for artificial emboldening in fonts.conf.in. This enables the support for artificial emboldening included in cairo (patch by Zhe Su). Add FC_EMBEDDED_BITMAP object type to tell Xft/Cairo whether to load embedded bitmaps or not (patch by Jinghua Luo). Fix GCC4 warnings (some by Behdad Esfahbod). Support localized font family and style names; this has been reported to break old apps like xfd, but modern (gtk+/qt/mozilla) apps work fine (patch by Zhe Su). Prevent fc-list from escaping strings when printing them (reported by Matthias Clasen). Add valist sentinel markup for FcObjectSetBuild and FcPatternBuild (patch by Marcus Meissner). Add consts to variables so as to move arrays into .rodata (patch by Ross Burton). Modify config file to use Greek fonts before Asian fonts with Greek glyphs. (patch by Simos Xenitellis). Use libtool -no-undefined flag on all platforms (patch by Christian Biesinger). 2.3.91 Use libxml2 if requested or if expat not available. (Mathias Hasselmann) Fix multi-arch cache files: compute the position for the block to be added using info from OrigFile, not NewFile. (plam) Cast results of sizeof() to unsigned int to get rid of warnings on x86_64 (reported by Matthias Clasen). Use FcAtomic to rewrite cache files; don't unlink the fonts.cache-2 file even if there's no data to write; just write an empty cache file. (Reported by Lubos Lunak) Allocate room for the subdirectory names in each directory cache. (Reported by James Cloos) 2.3.90 Development release of mmap patch: load pattern information directly from cache files. (Patrick Lam) 2.3.2 Patch memory leaks in using iconv. (Reported by Chris Capoccia) Patch memory leaks in fc-cache. (Reported by Chris Capoccia) Fetch bitmap glyphs to get widths during font evaluation. (keithp) Share strings through FcObjectStaticName (Ross Burton) Windows build updates (Tor Lillqvist) 2.3.1 Be more careful about broken GSUB/GPOS tables (Manish Singh) Include debian packaging stuff in CVS (Josselin Mouette) Add more conf.d examples (Keith Packard) Make manuals build again (Keith Packard) Johap -> Johab (Funda Wang) 2.3.0 Fix memory leak of patterns rejected by configuration (#2518) Create prototype /etc/fonts/conf.d directory and populate it with a few sample files. These samples are unused as the file names don't start with numbers. Update documentation. 2.2.99 Verify cache for FC_FILE and FC_FAMILY in every entry (#2219) Update blanks list from recent Unicode docs (#86) Various small build fixes (#280, #2278, Documentation fixes (#2085, #2284, #2285) Add polite typechecking to config file loader (#229) 2.2.98 Share object name strings (Michael Meeks) Eliminate a couple of codepoints from Russian orthography (John Thacker) Add synthetic emboldening configuration changes (Jakub Pavelek) Change FcFontSetSort to ignore language after fonts with the requested languages have been found. (Owen Taylor) Add some RedHat font configuration changes (Owen Tayler). Add full Unicode case folding support to case-ignoring string functions (Keith Packard) Remove Han characters from Korean orthography (Tor Andersson) 2.2.97 Fc-cache sleeps before exiting to ensure filesystem timestamps are well ordered. Added Punjai orthography. The timestamp in fonts.conf is gone now. Too many problems. The default font path includes all of the X fonts; use selectfont/rejectfont to eliminate bitmaps, as shown in the sample local.conf file. configuration elements may now reference a directory. Files in that directory matching [0-9]* are loaded in UTF-8 collating sequence order. configuration added to control which fonts are used. fontformat font pattern elements built from the FT_Get_X11_Font_Format function in newer versions of FreeType. 'capability' list constructed from gsub/gpos and silf values in TrueType files. Multi-lingual names (style, family, fullname) extracted and stored with parallel lang properties marking language. 2.2.96 Fix FcConfigUpToDate to actually check all font directories and eliminate a typo which completely prevented it from working (Lubos Lunak ) Remove comma at end of FcResult enum definition for picky compilers. 2.2.95 Add FcResultOutOfMemory so FcFontSetMatch can return accurate error. Replace MIN/MAX/ABS macros which happened to be in old FreeType releases with FC_MIN/FC_MAX/FC_ABS macros owned by fontconfig. 2.2.94 The 2.2.93 release was prepared with a broken libtool which created the shared library without the '.so' in the file names. 2.2.93 This is the third prerelease of fontconfig 2.3. Significant changes from 2.2.92 are: o Use new FreeType #include syntax o use y_ppem field instead of 'height' in bitmap sizes rec - FreeType changed the semantics. Still uses height for older versions of FreeType o Don't construct program manuals unless docbook is available 2.2.92 o make distcheck work 2.2.91 o Switch to SGML manuals o Add FC_DUAL width spacing value o Add FcFini to close out fontconfig and release all memory 2.2 This is the third public release of fontconfig, a font configuration and customization library. Fontconfig is designed to locate fonts within the system and select them according to requirements specified by applications. Fontconfig is not a rasterization library, nor does it impose a particular rasterization library on the application. The X-specific library 'Xft' uses fontconfig along with freetype to specify and rasterize fonts. Keith Packard keithp@keithp.com fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/README.md000066400000000000000000000030301503113465200226450ustar00rootroot00000000000000# Fontconfig Font configuration and customization library [[_TOC_]] ## About Fontconfig Fontconfig can: * discover new fonts when installed automatically, removing a common source of configuration problems. * perform font name substitution, so that appropriate alternative fonts can be selected if fonts are missing. * identify the set of fonts required to completely cover a set of languages. * have GUI configuration tools built as it uses an XML-based configuration file (though with autodiscovery, we believe this need is minimized). * efficiently and quickly find the fonts you need among the set of fonts you have installed, even if you have installed thousands of fonts, while minimizing memory usage. * be used in concert with the X Render Extension and [FreeType](https://www.freedesktop.org/wiki/Software/FreeType/) to implement high quality, anti-aliased and subpixel rendered text on a display. Fontconfig does not: * render the fonts themselves (this is left to FreeType or other rendering mechanisms) * depend on the X Window System in any fashion, so that printer only applications do not have such dependencies ## Documentation * [Fontconfig User Documentation](https://fontconfig.pages.freedesktop.org/fontconfig/fontconfig-user.html) * [Fontconfig Developer Documentation](https://fontconfig.pages.freedesktop.org/fontconfig/fontconfig-devel/) ## Bug reports If you have encountered any issues relating to Fontconfig, please file an issue in the [GitLab issue tracker](https://gitlab.freedesktop.org/fontconfig/fontconfig/issues). fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/Tools.mk000066400000000000000000000033511503113465200230250ustar00rootroot00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2003 Keith Packard # Copyright © 2013 Google, Inc. # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Google Author(s): Behdad Esfahbod DIR=fc-$(TAG) OUT=fc$(TAG) TMPL=$(OUT).tmpl.h TARG=$(OUT).h TOOL=$(srcdir)/$(DIR).py noinst_SCRIPTS = $(TOOL) EXTRA_DIST = $(TARG) $(TMPL) $(DIST) $(TARG): $(TMPL) $(TOOL) $(DEPS) $(AM_V_GEN) \ $(RM) $(TARG) && \ $(PYTHON) $(TOOL) $(ARGS) --template $< --output $(TARG).tmp && \ mv $(TARG).tmp $(TARG) || ( $(RM) $(TARG).tmp && false ) noinst_HEADERS=$(TARG) ALIAS_FILES = fcalias.h fcaliastail.h BUILT_SOURCES = $(ALIAS_FILES) $(ALIAS_FILES): $(AM_V_GEN) touch $@ CLEANFILES = $(ALIAS_FILES) MAINTAINERCLEANFILES = $(TARG) fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/autogen.sh000077500000000000000000000075551503113465200234070ustar00rootroot00000000000000#!/bin/sh # fontconfig/autogen.sh # # Copyright © 2000 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # Run this to generate all the initial makefiles, etc. set -e srcdir=`dirname $0` test -z "$srcdir" && srcdir=. case "$1" in --noconf*) AUTOGEN_SUBDIR_MODE="true" shift ;; esac ORIGDIR=`pwd` cd $srcdir PROJECT=Fontconfig TEST_TYPE=-f FILE=fontconfig/fontconfig.h.in LIBTOOLIZE=${LIBTOOLIZE-libtoolize} AUTOPOINT=${AUTOPOINT-autopoint} AUTORECONF=${AUTORECONF-autoreconf} AUTORECONF_FLAGS=${AUTORECONF_FLAGS-"-i"} GPERF=${GPERF-gperf} GETTEXTIZE=${GETTEXTIZE-gettextize} GETTEXTIZE_FLAGS="--force --no-changelog" DIE=0 ($GPERF --version) < /dev/null > /dev/null 2>&1 || { echo echo "You must have gperf installed to compile $PROJECT." echo "Install the appropriate package for your distribution." echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" DIE=1 } have_libtool=false if $LIBTOOLIZE --version < /dev/null > /dev/null 2>&1 ; then libtool_version=`$LIBTOOLIZE --version | sed 's/^.* \([0-9][.][0-9.]*\)[^ ]*$/\1/'` case $libtool_version in 1.4*|1.5*|1.6*|1.7*|2*) have_libtool=true ;; esac fi if $have_libtool ; then : ; else echo echo "You must have libtool 1.4 installed to compile $PROJECT." echo "Install the appropriate package for your distribution," echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" DIE=1 fi ($GETTEXTIZE --version) < /dev/null > /dev/null 2>&1 || { echo echo "You must have gettext installed to compile $PROJECT." echo "Install the appropriate package for your distribution," echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" DIE=1 } ($AUTOPOINT --version) < /dev/null > /dev/null 2>&1 || { echo echo "You must have autopoint installed to compile $PROJECT." echo "Install the appropriate package for your distribution," echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" DIE=1 } ($AUTORECONF --version) < /dev/null > /dev/null 2>&1 || { echo echo "You must have autoreconf installed to compile $PROJECT." echo "Install the appropriate package for your distribution," echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" DIE=1 } if test "$DIE" -eq 1; then exit 1 fi test $TEST_TYPE $FILE || { echo "You must run this script in the top-level $PROJECT directory" exit 1 } if test -z "$AUTOGEN_SUBDIR_MODE" -a -z "$NOCONFIGURE"; then if test -z "$*"; then echo "I am going to run ./configure with no arguments - if you wish " echo "to pass any to it, please specify them on the $0 command line." fi fi echo Running $AUTORECONF $AUTORECONF_FLAGS $AUTORECONF $AUTORECONF_FLAGS cd $ORIGDIR if test -z "$AUTOGEN_SUBDIR_MODE" -a -z "$NOCONFIGURE"; then echo Running $srcdir/configure "$@" $srcdir/configure "$@" echo echo "Now type 'make' to compile $PROJECT." fi fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/build-aux/000077500000000000000000000000001503113465200232645ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/build-aux/fetch-testfonts.py000077500000000000000000000143651503113465200267720ustar00rootroot00000000000000#!/usr/bin/env python3 import argparse import os import shutil import subprocess import sys import tempfile from urllib.request import urlretrieve import multiprocessing import logging import sys logging.basicConfig(level=logging.INFO) logger = logging.getLogger() if not sys.stdout.isatty(): logger.handlers = [] URL_TEMPLATE = ( "https://commondatastorage.googleapis.com/chromeos-localmirror/distfiles/%s" ) SOURCE_FILES = ( "noto-cjk-20210501.tar.bz2", "crosextrafonts-20130214.tar.gz", "notofonts-20250214.tar.xz", "robotofonts-2.132.tar.bz2", "lohitfonts-cros-2.5.5.tar.bz2", "ko-nanumfonts-3.20.tar.bz2", ) SOURCES = [URL_TEMPLATE % source for source in SOURCE_FILES] SOURCES += ["https://github.com/googlefonts/roboto-flex/releases/download/3.100/roboto-flex-fonts.zip"] CONTAINER_DOWNLOAD_DIR = "/testfonts" # If you want to update these, copy the contents of the .stamp file from the target directory here. EXPECTED_HASHES = """ noto-cjk-20210501.tar.bz2 5c70f246c392bf15aeaee22b2fba26bb0ac54e47c00a4b9c3b556bd06fe89281 crosextrafonts-20130214.tar.gz c48d1c2fd613c9c06c959c34da7b8388059e2408d2bb19845dc3ed35f76e4d09 notofonts-20250214.tar.xz cb0f9edc030e07eca58b799c607d000dfde588911d8e228fc82d5f61b9e5b6b3 robotofonts-2.132.tar.bz2 087c6f0708fe71f71a056f70fdbd5a85f4d2ce916670a98bd4be10b168abe16a lohitfonts-cros-2.5.5.tar.bz2 ce0ce2a5098c8ffc52327cc030576df7f5328ad9fd8a3289e2476990ad133ff1 ko-nanumfonts-3.20.tar.bz2 59f9b6d7fcf63ca2bea7156ad66c784a1f0601d47be1b11237e17733d7112832 roboto-flex-fonts.zip 02e0f5db84e69f254958434269d83aa6057b06f3c2a21042bb81b1afe1a0c8c6 """ STAMP_FILE = ".stamp" def download_file(url, tmp_dir, target_dir): filename = os.path.basename(url) filepath = os.path.join(tmp_dir, filename) logger.info(f"Downloading {url} to {filepath}") urlretrieve(url, filepath) return filepath def compute_sha256(filepath): """Computes the SHA-256 hash of a file.""" import hashlib hasher = hashlib.sha256() with open(filepath, "rb") as file: while True: chunk = file.read(4096) if not chunk: break hasher.update(chunk) return hasher.hexdigest() def extract_archive(filepath, target_dir): """Extracts an archive to the target directory.""" filename = os.path.basename(filepath) logger.info(f"Extracting {filepath} to {target_dir}") if filename.endswith((".tar.bz2", ".tar.gz", ".tar.xz")): subprocess.run(["tar", "xf", filepath, "-C", target_dir], check=True) elif filename.endswith(".zip"): shutil.unpack_archive(filepath, target_dir) else: raise ValueError(f"Unsupported archive type: {filename}") def download_and_extract(url, tmp_dir, target_dir): archivepath = download_file(url, tmp_dir, target_dir) archivehash = compute_sha256(archivepath) extract_archive(archivepath, target_dir) return os.path.basename(archivepath), archivehash def stamp_target_dir(target_dir, downloaded_files_hashes): if not downloaded_files_hashes or len(downloaded_files_hashes) == 0: logger.error("No files to stamp") return stamp_path = os.path.join(target_dir, STAMP_FILE) if os.path.exists(stamp_path): os.remove(stamp_path) max_filename_length = ( max(len(filename) for filename, _ in downloaded_files_hashes) if downloaded_files_hashes else 0 ) hash_results = "\n".join( f"{filename:<{max_filename_length}} {hash}" for filename, hash in downloaded_files_hashes ) with open(stamp_path, "w") as f: f.write(hash_results) if not stamp_hashes_match(stamp_path): raise ValueError("Downloaded files do not match recorded hashes!") def stamp_hashes_match(stamp_path): if not os.path.exists(stamp_path): return False lines = [] with open(stamp_path, "r") as f: lines = f.readlines() expected_hashes = {} for line in EXPECTED_HASHES.strip().split("\n"): filename, hash = line.split() expected_hashes[filename] = hash for line in lines: filename, hash = line.split() if filename not in expected_hashes: logger.error(f"Unexpected file in stamp: {filename}") return False if expected_hashes[filename] != hash: logger.error( f"Hash mismatch for {filename}: expected {expected_hashes[filename]}, got {hash}" ) return False return True def main(): """Main function to parse arguments and download/extract fonts.""" parser = argparse.ArgumentParser(description="Download and extract ChromeOS fonts.") parser.add_argument("--target-dir", help="Target directory for extracted fonts.") parser.add_argument( "--try-symlink", action="store_true", help="Try to symlink test files previously downloaded to the container.", ) args = parser.parse_args() target_dir = args.target_dir if args.try_symlink: if os.path.exists(CONTAINER_DOWNLOAD_DIR) and stamp_hashes_match( os.path.join(CONTAINER_DOWNLOAD_DIR, STAMP_FILE) ): try: os.symlink(CONTAINER_DOWNLOAD_DIR, target_dir, target_is_directory=True) except FileExistsError: logger.debug( f"Target directory {target_dir} already exists. Skipping symlink." ) except OSError as e: logger.warning(f"Failed to create symlink: {e}") logger.info( f"Symlinked test fonts directory from {CONTAINER_DOWNLOAD_DIR} to {target_dir}." ) else: logger.debug("Pre-downloaded test fonts not found.") if stamp_hashes_match(os.path.join(target_dir, STAMP_FILE)): logger.info("Fonts already downloaded and extracted.") return 0 os.makedirs(target_dir, exist_ok=True) with tempfile.TemporaryDirectory() as tmp_dir: with multiprocessing.Pool(processes=multiprocessing.cpu_count()) as pool: hashes = pool.starmap( download_and_extract, [(source, tmp_dir, target_dir) for source in SOURCES], ) stamp_target_dir(target_dir, hashes) if __name__ == "__main__": main() fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/build-aux/meson-dist-autotools.py000077500000000000000000000012461503113465200277550ustar00rootroot00000000000000#! /usr/bin/env python3 # Copyright (C) 2024 fontconfig Authors # SPDX-License-Identifier: HPND import os import shutil import subprocess import sys from pathlib import Path sourcedir = os.environ.get('MESON_SOURCE_ROOT') builddir = os.environ.get('MESON_BUILD_ROOT') distdir = os.environ.get('MESON_DIST_ROOT') if shutil.which('autoreconf'): print('no autoreconf installed', file=sys.stderr) subprocess.run(['autoreconf', '-i'], cwd=distdir) # Copy files for compatibility for f in (Path(builddir) / 'doc').glob('*.1'): print(f'Copying {f.name}') shutil.copy2(f, Path(distdir) / f.stem) # Remove autom4te.cache shutil.rmtree(Path(distdir) / 'autom4te.cache') fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/build-aux/meson-dist-docs.py000077500000000000000000000017621503113465200266570ustar00rootroot00000000000000#! /usr/bin/env python3 # Copyright (C) 2024 fontconfig Authors # SPDX-License-Identifier: HPND import os import shutil from pathlib import Path sourcedir = os.environ.get('MESON_SOURCE_ROOT') builddir = os.environ.get('MESON_BUILD_ROOT') distdir = os.environ.get('MESON_DIST_ROOT') # Copy manpages docdir = Path(distdir) / 'doc' for f in (Path(builddir) / 'doc').glob('*.[135]'): print(f'Copying {f.name}') shutil.copy2(f, docdir) # Copy config file confdir = Path(distdir) / 'conf.d' shutil.copy2(Path(builddir) / 'conf.d' / '35-lang-normalize.conf', confdir) # Documentation shutil.copy2(Path(builddir) / 'doc' / 'fontconfig-devel.html', docdir) shutil.copy2(Path(builddir) / 'doc' / 'fontconfig-devel.pdf', docdir) shutil.copy2(Path(builddir) / 'doc' / 'fontconfig-devel.txt', docdir) shutil.copy2(Path(builddir) / 'doc' / 'fontconfig-user.html', docdir) shutil.copy2(Path(builddir) / 'doc' / 'fontconfig-user.pdf', docdir) shutil.copy2(Path(builddir) / 'doc' / 'fontconfig-user.txt', docdir) fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/000077500000000000000000000000001503113465200225415ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/05-reset-dirs-sample.conf000066400000000000000000000003251503113465200271720ustar00rootroot00000000000000 Re-define fonts dirs sample fonts fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/09-autohint-if-no-hinting.conf000066400000000000000000000013151503113465200301350ustar00rootroot00000000000000 Enable autohinter if font doesn't have any hinting false true fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/10-autohint.conf000066400000000000000000000011661503113465200254650ustar00rootroot00000000000000 Enable autohinter true fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/10-hinting-full.conf000066400000000000000000000011501503113465200262230ustar00rootroot00000000000000 Set hintfull to hintstyle hintfull fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/10-hinting-medium.conf000066400000000000000000000011541503113465200265450ustar00rootroot00000000000000 Set hintmedium to hintstyle hintmedium fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/10-hinting-none.conf000066400000000000000000000011501503113465200262200ustar00rootroot00000000000000 Set hintnone to hintstyle hintnone fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/10-hinting-slight.conf000066400000000000000000000011541503113465200265570ustar00rootroot00000000000000 Set hintslight to hintstyle hintslight fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/10-no-antialias.conf000066400000000000000000000004041503113465200262030ustar00rootroot00000000000000 Disable antialiasing false fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/10-scale-bitmap-fonts.conf000066400000000000000000000040241503113465200273160ustar00rootroot00000000000000 Bitmap scaling false pixelsize pixelsize false false true pixelsizefixupfactor 1.2 pixelsizefixupfactor 0.8 true 1.0 false 1.0 matrix pixelsizefixupfactor 0 0 pixelsizefixupfactor size pixelsizefixupfactor fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/10-sub-pixel-bgr.conf000066400000000000000000000012401503113465200263030ustar00rootroot00000000000000 Enable sub-pixel rendering with the BGR stripes layout bgr fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/10-sub-pixel-none.conf000066400000000000000000000012071503113465200264730ustar00rootroot00000000000000 Disable sub-pixel rendering none fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/10-sub-pixel-rgb.conf000066400000000000000000000012401503113465200263030ustar00rootroot00000000000000 Enable sub-pixel rendering with the RGB stripes layout rgb fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/10-sub-pixel-vbgr.conf000066400000000000000000000012521503113465200264740ustar00rootroot00000000000000 Enable sub-pixel rendering with the vertical BGR stripes layout vbgr fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/10-sub-pixel-vrgb.conf000066400000000000000000000012521503113465200264740ustar00rootroot00000000000000 Enable sub-pixel rendering with the vertical RGB stripes layout vrgb fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/10-unhinted.conf000066400000000000000000000011611503113465200254430ustar00rootroot00000000000000 Disable hinting false fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/10-yes-antialias.conf000066400000000000000000000004021503113465200263650ustar00rootroot00000000000000 Enable antialiasing true fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/11-lcdfilter-default.conf000066400000000000000000000012671503113465200272270ustar00rootroot00000000000000 Use lcddefault as default for LCD filter lcddefault fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/11-lcdfilter-legacy.conf000066400000000000000000000012641503113465200270440ustar00rootroot00000000000000 Use lcdlegacy as default for LCD filter lcdlegacy fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/11-lcdfilter-light.conf000066400000000000000000000012611503113465200267040ustar00rootroot00000000000000 Use lcdlight as default for LCD filter lcdlight fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/11-lcdfilter-none.conf000066400000000000000000000012561503113465200265400ustar00rootroot00000000000000 Use lcdnone as default for LCD filter lcdnone fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/20-unhint-small-vera.conf000066400000000000000000000025411503113465200271770ustar00rootroot00000000000000 Disable hinting for Bitstream Vera fonts when the size is less than 8ppem Bitstream Vera Sans 7.5 false Bitstream Vera Serif 7.5 false Bitstream Vera Sans Mono 7.5 false fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/25-unhint-nonlatin.conf000066400000000000000000000064011503113465200267620ustar00rootroot00000000000000 Disable hinting for CJK fonts Kochi Mincho false Kochi Gothic false Sazanami Mincho false Sazanami Gothic false Baekmuk Batang false Baekmuk Dotum false Baekmuk Gulim false Baekmuk Headline false AR PL Mingti2L Big5 false AR PL ShanHeiSun Uni false AR PL KaitiM Big5 false AR PL ZenKai Uni false AR PL SungtiL GB false AR PL KaitiM GB false ZYSong18030 false fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/30-metric-aliases.conf000066400000000000000000000324521503113465200265400ustar00rootroot00000000000000 Set substitutions for similar/metric-compatible families Helvetica LT Std Helvetica Nimbus Sans L Helvetica Nimbus Sans Helvetica TeX Gyre Heros Helvetica Nimbus Sans Narrow Helvetica Narrow TeX Gyre Heros Cn Helvetica Narrow Nimbus Roman No9 L Times Nimbus Roman Times TeX Gyre Termes Times Courier Std Courier Nimbus Mono L Courier Nimbus Mono Courier Nimbus Mono PS Courier TeX Gyre Cursor Courier Avant Garde ITC Avant Garde Gothic URW Gothic L ITC Avant Garde Gothic URW Gothic ITC Avant Garde Gothic TeX Gyre Adventor ITC Avant Garde Gothic Bookman ITC Bookman URW Bookman L ITC Bookman Bookman URW ITC Bookman URW Bookman ITC Bookman TeX Gyre Bonum ITC Bookman Bookman Old Style ITC Bookman Zapf Chancery ITC Zapf Chancery URW Chancery L ITC Zapf Chancery Chancery URW ITC Zapf Chancery Z003 ITC Zapf Chancery TeX Gyre Chorus ITC Zapf Chancery URW Palladio L Palatino Palladio URW Palatino P052 Palatino TeX Gyre Pagella Palatino Palatino Linotype Palatino Century Schoolbook L New Century Schoolbook Century SchoolBook URW New Century Schoolbook C059 New Century Schoolbook TeX Gyre Schola New Century Schoolbook Century Schoolbook New Century Schoolbook Arimo Arial Liberation Sans Arial Liberation Sans Narrow Arial Narrow Albany Arial Albany AMT Arial Tinos Times New Roman Liberation Serif Times New Roman Thorndale Times New Roman Thorndale AMT Times New Roman Cousine Courier New Liberation Mono Courier New Cumberland Courier New Cumberland AMT Courier New Gelasio Georgia Caladea Cambria Carlito Calibri SymbolNeu Symbol Helvetica Arial Helvetica Narrow Arial Narrow Times Times New Roman Courier Courier New Arial Helvetica Arial Narrow Helvetica Narrow Times New Roman Times Courier New Courier Helvetica Helvetica LT Std Helvetica TeX Gyre Heros Helvetica Narrow TeX Gyre Heros Cn Times TeX Gyre Termes Courier TeX Gyre Cursor Courier Courier Std ITC Avant Garde Gothic TeX Gyre Adventor ITC Bookman Bookman Old Style TeX Gyre Bonum ITC Zapf Chancery TeX Gyre Chorus Palatino Palatino Linotype TeX Gyre Pagella New Century Schoolbook Century Schoolbook TeX Gyre Schola Arial Arimo Liberation Sans Albany Albany AMT Arial Narrow Liberation Sans Narrow Times New Roman Tinos Liberation Serif Thorndale Thorndale AMT Courier New Cousine Liberation Mono Cumberland Cumberland AMT Georgia Gelasio Cambria Caladea Calibri Carlito Symbol SymbolNeu fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/40-nonlatin.conf000066400000000000000000000171371503113465200254640ustar00rootroot00000000000000 Set substitutions for non-Latin fonts Nazli serif Lotoos serif Mitra serif Ferdosi serif Badr serif Zar serif Titr serif Jadid serif Kochi Mincho serif AR PL SungtiL GB serif AR PL Mingti2L Big5 serif MS 明朝 serif NanumMyeongjo serif UnBatang serif Baekmuk Batang serif MgOpen Canonica serif Sazanami Mincho serif AR PL ZenKai Uni serif ZYSong18030 serif FreeSerif serif SimSun serif Arshia sans-serif Elham sans-serif Farnaz sans-serif Nasim sans-serif Sina sans-serif Roya sans-serif Koodak sans-serif Terafik sans-serif Kochi Gothic sans-serif AR PL KaitiM GB sans-serif AR PL KaitiM Big5 sans-serif MS ゴシック sans-serif NanumGothic sans-serif UnDotum sans-serif Baekmuk Dotum sans-serif MgOpen Modata sans-serif Sazanami Gothic sans-serif AR PL ShanHeiSun Uni sans-serif ZYSong18030 sans-serif FreeSans sans-serif NSimSun monospace ZYSong18030 monospace NanumGothicCoding monospace FreeMono monospace Homa fantasy Kamran fantasy Fantezi fantasy Tabassom fantasy IranNastaliq cursive Nafees Nastaleeq cursive Noto Sans Arabic UI system-ui Noto Sans Bengali UI system-ui Noto Sans Devanagari UI system-ui Noto Sans Gujarati UI system-ui Noto Sans Gurmukhi UI system-ui Noto Sans Kannada UI system-ui Noto Sans Khmer UI system-ui Noto Sans Lao UI system-ui Noto Sans Malayalam UI system-ui Noto Sans Myanmar UI system-ui Noto Sans Oriya UI system-ui Noto Sans Sinhala UI system-ui Noto Sans Tamil UI system-ui Noto Sans Telugu UI system-ui Noto Sans Thai UI system-ui Leelawadee UI system-ui Nirmala UI system-ui Yu Gothic UI system-ui Meiryo UI system-ui MS UI Gothic system-ui Khmer UI system-ui Lao UI system-ui Microsoft JhengHei UI system-ui Microsoft YaHei UI system-ui fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/45-generic.conf000066400000000000000000000066421503113465200252620ustar00rootroot00000000000000 Set substitutions for emoji/math fonts Noto Color Emoji emoji Apple Color Emoji emoji Segoe UI Emoji emoji Twitter Color Emoji emoji EmojiOne Mozilla emoji Emoji Two emoji JoyPixels emoji Emoji One emoji Noto Emoji emoji Android Emoji emoji emoji und-zsye und-zsye emoji emoji XITS Math math STIX Two Math math Cambria Math math Latin Modern Math math Minion Math math Lucida Math math Asana Math math math und-zmth und-zmth math math fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/45-latin.conf000066400000000000000000000161321503113465200247500ustar00rootroot00000000000000 Set substitutions for Latin fonts Bitstream Vera Serif serif Cambria serif Constantia serif DejaVu Serif serif Elephant serif Garamond serif Georgia serif Liberation Serif serif Luxi Serif serif MS Serif serif Nimbus Roman No9 L serif Nimbus Roman serif Palatino Linotype serif Thorndale AMT serif Thorndale serif Times New Roman serif Times serif Albany AMT sans-serif Albany sans-serif Arial Unicode MS sans-serif Arial sans-serif Bitstream Vera Sans sans-serif Britannic sans-serif Calibri sans-serif Candara sans-serif Century Gothic sans-serif Corbel sans-serif DejaVu Sans sans-serif Helvetica LT Std sans-serif Helvetica sans-serif Haettenschweiler sans-serif Liberation Sans sans-serif MS Sans Serif sans-serif Nimbus Sans L sans-serif Nimbus Sans sans-serif Luxi Sans sans-serif Tahoma sans-serif Trebuchet MS sans-serif Twentieth Century sans-serif Verdana sans-serif Andale Mono monospace Bitstream Vera Sans Mono monospace Consolas monospace Courier New monospace Courier Std monospace Courier monospace Cumberland AMT monospace Cumberland monospace DejaVu Sans Mono monospace Fixedsys monospace Inconsolata monospace Liberation Mono monospace Luxi Mono monospace Nimbus Mono L monospace Nimbus Mono monospace Nimbus Mono PS monospace Terminal monospace Bauhaus Std fantasy Cooper Std fantasy Copperplate Gothic Std fantasy Impact fantasy Comic Sans MS cursive ITC Zapf Chancery Std cursive Zapfino cursive Adwaita Sans system-ui Cantarell system-ui Noto Sans UI system-ui Segoe UI system-ui Segoe UI Historic system-ui Segoe UI Symbol system-ui fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/48-guessfamily.conf000066400000000000000000000023471503113465200261770ustar00rootroot00000000000000 Guess a generic-family for substitution sans-serif sans sans-serif sans-serif serif serif serif monospace mono monospace fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/48-spacing.conf000066400000000000000000000006711503113465200252710ustar00rootroot00000000000000 Add mono to the family when spacing is 100 100 monospace fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/49-sansserif.conf000066400000000000000000000011771503113465200256450ustar00rootroot00000000000000 Add sans-serif to the family when no generic name sans-serif serif monospace sans-serif fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/50-user.conf000066400000000000000000000010361503113465200246100ustar00rootroot00000000000000 Load per-user customization files fontconfig/conf.d fontconfig/fonts.conf fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/51-local.conf000066400000000000000000000004071503113465200247260ustar00rootroot00000000000000 Load local customization file local.conf fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/60-generic.conf000066400000000000000000000035671503113465200252620ustar00rootroot00000000000000 Set preferable fonts for emoji/math fonts und-zsye true false true emoji Noto Color Emoji Apple Color Emoji Segoe UI Emoji Twitter Color Emoji EmojiOne Mozilla Emoji Two JoyPixels Emoji One Noto Emoji Android Emoji math XITS Math STIX Two Math Cambria Math Latin Modern Math Minion Math Lucida Math Asana Math fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/60-latin.conf000066400000000000000000000041711503113465200247450ustar00rootroot00000000000000 Set preferable fonts for Latin serif Noto Serif DejaVu Serif Times New Roman Thorndale AMT Luxi Serif Nimbus Roman No9 L Nimbus Roman Times sans-serif Noto Sans DejaVu Sans Verdana Arial Albany AMT Luxi Sans Nimbus Sans L Nimbus Sans Helvetica Lucida Sans Unicode BPG Glaho International Tahoma monospace Noto Sans Mono DejaVu Sans Mono Inconsolata Andale Mono Courier New Cumberland AMT Luxi Mono Nimbus Mono L Nimbus Mono Nimbus Mono PS Courier fantasy Impact Copperplate Gothic Std Cooper Std Bauhaus Std cursive ITC Zapf Chancery Std Zapfino Comic Sans MS system-ui Adwaita Sans Cantarell Noto Sans UI Segoe UI Segoe UI Historic Segoe UI Symbol fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/65-fonts-persian.conf000066400000000000000000000236241503113465200264370ustar00rootroot00000000000000 Nesf Nesf2 Nesf2 Persian_sansserif_default Nazanin Nazli Lotus Lotoos Yaqut Yaghoot Yaghut Yaghoot Traffic Terafik Ferdowsi Ferdosi Fantezy Fantezi Jadid Persian_title Titr Persian_title Kamran Persian_fantasy Homa Homa Persian_fantasy Kamran Fantezi Persian_fantasy Tabassom Persian_fantasy Arshia Persian_square Nasim Persian_square Elham Persian_square Farnaz Farnaz Persian_square Elham Sina Persian_square Persian_title Titr Jadid Persian_serif Persian_fantasy Homa Kamran Fantezi Tabassom Persian_square Persian_square Arshia Elham Farnaz Nasim Sina Persian_serif Elham farsiweb Homa farsiweb Koodak farsiweb Nazli farsiweb Roya farsiweb Terafik farsiweb Titr farsiweb TURNED-OFF farsiweb roman roman matrix 1-0.2 01 oblique farsiweb false false false serif Nazli Lotoos Mitra Ferdosi Badr Zar sans-serif Roya Koodak Terafik monospace Terafik fantasy Homa Kamran Fantezi Tabassom cursive IranNastaliq Nafees Nastaleeq serif 200 24 Titr sans-serif 200 24 Titr Persian_sansserif_default 200 24 Titr Persian_sansserif_default Roya fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/65-khmer.conf000066400000000000000000000004601503113465200247460ustar00rootroot00000000000000 serif Khmer OS" sans-serif Khmer OS" fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/65-nonlatin.conf000066400000000000000000000234331503113465200254670ustar00rootroot00000000000000 Set preferable fonts for non-Latin serif Artsounk BPG UTF8 M Kinnari Norasi Frank Ruehl Dror JG LaoTimes Saysettha Unicode Pigiarniq B Davat B Compset Kacst-Qr Urdu Nastaliq Unicode Raghindi Mukti Narrow malayalam Sampige padmaa Hapax Berbère MS Mincho SimSun PMingLiu WenQuanYi Zen Hei WenQuanYi Bitmap Song AR PL ShanHeiSun Uni AR PL New Sung ZYSong18030 HanyiSong Hiragino Mincho ProN Songti SC Songti TC SimSong MgOpen Canonica Sazanami Mincho IPAMonaMincho IPAMincho Kochi Mincho AR PL SungtiL GB AR PL Mingti2L Big5 AR PL Zenkai Uni MS 明朝 ZYSong18030 NanumMyeongjo UnBatang Baekmuk Batang AppleMyungjo KacstQura Frank Ruehl CLM Lohit Bengali Lohit Gujarati Lohit Hindi Lohit Marathi Lohit Maithili Lohit Kashmiri Lohit Konkani Lohit Nepali Lohit Sindhi Lohit Punjabi Lohit Tamil Rachana Lohit Malayalam Lohit Kannada Lohit Telugu Lohit Odia LKLUG sans-serif Nachlieli Lucida Sans Unicode Yudit Unicode Kerkis ArmNet Helvetica Artsounk BPG UTF8 M Waree Loma Garuda Umpush Saysettha Unicode JG Lao Old Arial GF Zemen Unicode Pigiarniq B Davat B Compset Kacst-Qr Urdu Nastaliq Unicode Raghindi Mukti Narrow malayalam Sampige padmaa Hapax Berbère MS Gothic UmePlus P Gothic Microsoft YaHei Microsoft JhengHei WenQuanYi Zen Hei WenQuanYi Bitmap Song AR PL ShanHeiSun Uni AR PL New Sung Hiragino Sans PingFang SC PingFang TC PingFang HK Hiragino Sans CNS Hiragino Sans GB MgOpen Modata VL Gothic IPAMonaGothic IPAGothic Sazanami Gothic Kochi Gothic AR PL KaitiM GB AR PL KaitiM Big5 AR PL ShanHeiSun Uni AR PL SungtiL GB AR PL Mingti2L Big5 MS ゴシック ZYSong18030 TSCu_Paranar NanumGothic UnDotum Baekmuk Dotum Baekmuk Gulim Apple SD Gothic Neo KacstQura Lohit Bengali Lohit Gujarati Lohit Hindi Lohit Marathi Lohit Maithili Lohit Kashmiri Lohit Konkani Lohit Nepali Lohit Sindhi Lohit Punjabi Lohit Tamil Meera Lohit Malayalam Lohit Kannada Lohit Telugu Lohit Odia LKLUG monospace Miriam Mono VL Gothic IPAMonaGothic IPAGothic Sazanami Gothic Kochi Gothic AR PL KaitiM GB MS Gothic UmePlus Gothic NSimSun MingLiu AR PL ShanHeiSun Uni AR PL New Sung Mono HanyiSong AR PL SungtiL GB AR PL Mingti2L Big5 ZYSong18030 NanumGothicCoding NanumGothic UnDotum Baekmuk Dotum Baekmuk Gulim TlwgTypo TlwgTypist TlwgTypewriter TlwgMono Hasida GF Zemen Unicode Hapax Berbère Lohit Bengali Lohit Gujarati Lohit Hindi Lohit Marathi Lohit Maithili Lohit Kashmiri Lohit Konkani Lohit Nepali Lohit Sindhi Lohit Punjabi Lohit Tamil Meera Lohit Malayalam Lohit Kannada Lohit Telugu Lohit Odia LKLUG system-ui Noto Sans Arabic UI Noto Sans Bengali UI Noto Sans Devanagari UI Noto Sans Gujarati UI Noto Sans Gurmukhi UI Noto Sans Kannada UI Noto Sans Khmer UI Noto Sans Lao UI Noto Sans Malayalam UI Noto Sans Myanmar UI Noto Sans Oriya UI Noto Sans Sinhala UI Noto Sans Tamil UI Noto Sans Telugu UI Noto Sans Thai UI Leelawadee UI Nirmala UI Yu Gothic UI Meiryo UI MS UI Gothic Khmer UI Lao UI Microsoft YaHei UI Microsoft JhengHei UI fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/69-unifont.conf000066400000000000000000000012571503113465200253330ustar00rootroot00000000000000 serif FreeSerif Code2000 Code2001 sans-serif FreeSans Arial Unicode MS Arial Unicode Code2000 Code2001 monospace FreeMono fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/70-no-bitmaps-and-emoji.conf000066400000000000000000000005651503113465200275540ustar00rootroot00000000000000 Reject bitmap fonts, including bitmap emoji fonts false fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/70-no-bitmaps-except-emoji.conf000066400000000000000000000006551503113465200303020ustar00rootroot00000000000000 Reject bitmap fonts except bitmap emoji fonts false false fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/70-no-bitmaps.conf000066400000000000000000000004601503113465200257050ustar00rootroot00000000000000 Reject bitmap fonts except bitmap emoji fonts (deprecated; use 70-no-bitmaps-except-emoji.conf) 70-no-bitmaps-except-emoji.conf fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/70-yes-bitmaps.conf000066400000000000000000000005061503113465200260720ustar00rootroot00000000000000 Accept bitmap fonts false fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/80-delicious.conf000066400000000000000000000006651503113465200256240ustar00rootroot00000000000000 Delicious Heavy heavy fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/90-synthetic.conf000066400000000000000000000033351503113465200256540ustar00rootroot00000000000000 roman roman matrix 10.2 01 oblique false medium bold true bold fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/Makefile.am000066400000000000000000000071311503113465200245770ustar00rootroot00000000000000# # fontconfig/conf.d/Makefile.am # # Copyright © 2005 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. NULL = BUILT_SOURCES = \ README \ 35-lang-normalize.conf \ $(NULL) DOC_SOURCES = README.in DOC_FILES = $(DOC_SOURCES:.in=) CONF_LINKS = \ 10-hinting-$(PREFERRED_HINTING).conf \ 10-scale-bitmap-fonts.conf \ 10-yes-antialias.conf \ 10-sub-pixel-$(PREFERRED_SUB_PIXEL_RENDERING).conf \ 11-lcdfilter-default.conf \ 20-unhint-small-vera.conf \ 30-metric-aliases.conf \ 40-nonlatin.conf \ 45-generic.conf \ 45-latin.conf \ 48-spacing.conf \ 49-sansserif.conf \ 50-user.conf \ 51-local.conf \ 60-generic.conf \ 60-latin.conf \ 65-fonts-persian.conf \ 65-nonlatin.conf \ 69-unifont.conf \ 80-delicious.conf \ 90-synthetic.conf CONF_LINKS += 70-$(PREFERRED_BITMAP).conf EXTRA_DIST = $(template_DATA) $(DOC_SOURCES) CLEANFILES = $(DOC_FILES) configdir = $(CONFIGDIR) config_DATA = $(DOC_FILES) templatedir = $(TEMPLATEDIR) template_DATA = \ 05-reset-dirs-sample.conf \ 09-autohint-if-no-hinting.conf \ 10-autohint.conf \ 10-hinting-full.conf \ 10-hinting-medium.conf \ 10-hinting-none.conf \ 10-hinting-slight.conf \ 10-no-antialias.conf \ 10-scale-bitmap-fonts.conf \ 10-sub-pixel-bgr.conf \ 10-sub-pixel-none.conf \ 10-sub-pixel-rgb.conf \ 10-sub-pixel-vbgr.conf \ 10-sub-pixel-vrgb.conf \ 10-unhinted.conf \ 10-yes-antialias.conf \ 11-lcdfilter-default.conf \ 11-lcdfilter-legacy.conf \ 11-lcdfilter-light.conf \ 11-lcdfilter-none.conf \ 20-unhint-small-vera.conf \ 25-unhint-nonlatin.conf \ 30-metric-aliases.conf \ 35-lang-normalize.conf \ 40-nonlatin.conf \ 45-generic.conf \ 45-latin.conf \ 48-guessfamily.conf \ 48-spacing.conf \ 49-sansserif.conf \ 50-user.conf \ 51-local.conf \ 60-generic.conf \ 60-latin.conf \ 65-fonts-persian.conf \ 65-khmer.conf \ 65-nonlatin.conf \ 69-unifont.conf \ 70-no-bitmaps.conf \ 70-no-bitmaps-and-emoji.conf \ 70-no-bitmaps-except-emoji.conf \ 70-yes-bitmaps.conf \ 80-delicious.conf \ 90-synthetic.conf README: $(srcdir)/README.in sed "s|\@TEMPLATEDIR\@|$(templatedir)|" $< > $@ 35-lang-normalize.conf: ../fc-lang/Makefile.am cd ../fc-lang && $(MAKE) $(AM_MAKEFLAGS) $(top_builddir)/conf.d/35-lang-normalize.conf install-data-hook: $(PYTHON) $(srcdir)/link_confs.py $(templatedir) $(configdir) $(CONF_LINKS) uninstall-local: @(echo cd $(DESTDIR)$(configdir); \ cd $(DESTDIR)$(configdir); \ for i in $(CONF_LINKS); do \ echo $(RM) $$i; \ $(RM) $$i; \ done) -include $(top_srcdir)/git.mk fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/README.in000066400000000000000000000017001503113465200240240ustar00rootroot00000000000000conf.d/README Each file in this directory is a fontconfig configuration file. Fontconfig scans this directory, loading all files of the form [0-9][0-9]*.conf. These files are normally installed in @TEMPLATEDIR@ and then symlinked here, allowing them to be easily installed and then enabled/disabled by adjusting the symlinks. The files are loaded in numeric order, the structure of the configuration has led to the following conventions in usage: Files beginning with: Contain: 00 through 09 Font directories 10 through 19 system rendering defaults (AA, etc) 20 through 29 font rendering options 30 through 39 family substitution 40 through 49 generic identification, map family->generic 50 through 59 alternate config file loading 60 through 69 generic aliases, map generic->family 70 through 79 select font (adjust which fonts are available) 80 through 89 match target="scan" (modify scanned patterns) 90 through 99 font synthesis fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/link_confs.py000066400000000000000000000025621503113465200252450ustar00rootroot00000000000000#!/usr/bin/env python3 import os import sys import argparse import platform from pathlib import PurePath if __name__=='__main__': parser = argparse.ArgumentParser() parser.add_argument('availpath') parser.add_argument('confpath') parser.add_argument('links', nargs='+') args = parser.parse_args() if os.path.isabs(args.confpath): destdir = os.environ.get('DESTDIR') if destdir: # c:\destdir + c:\prefix must produce c:\destdir\prefix confpath = str(PurePath(destdir, *PurePath(args.confpath).parts[1:])) else: confpath = args.confpath else: confpath = os.path.join(os.environ['MESON_INSTALL_DESTDIR_PREFIX'], args.confpath) if not os.path.exists(confpath): os.makedirs(confpath) for link in args.links: src = os.path.join(args.availpath, link) dst = os.path.join(confpath, link) try: os.remove(dst) except FileNotFoundError: pass try: os.symlink(os.path.relpath(src, start=args.confpath), dst) except NotImplementedError: # Not supported on this version of Windows break except OSError as e: # Symlink privileges are not available if platform.system().lower() == 'windows' and e.winerror == 1314: break raise fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/meson.build000066400000000000000000000064031503113465200247060ustar00rootroot00000000000000conf_files = [ '05-reset-dirs-sample.conf', '09-autohint-if-no-hinting.conf', '10-autohint.conf', '10-hinting-full.conf', '10-hinting-medium.conf', '10-hinting-none.conf', '10-hinting-slight.conf', '10-no-antialias.conf', '10-scale-bitmap-fonts.conf', '10-sub-pixel-bgr.conf', '10-sub-pixel-none.conf', '10-sub-pixel-rgb.conf', '10-sub-pixel-vbgr.conf', '10-sub-pixel-vrgb.conf', '10-unhinted.conf', '10-yes-antialias.conf', '11-lcdfilter-default.conf', '11-lcdfilter-legacy.conf', '11-lcdfilter-light.conf', '11-lcdfilter-none.conf', '20-unhint-small-vera.conf', '25-unhint-nonlatin.conf', '30-metric-aliases.conf', '40-nonlatin.conf', '45-generic.conf', '45-latin.conf', '48-guessfamily.conf', '48-spacing.conf', '49-sansserif.conf', '50-user.conf', '51-local.conf', '60-generic.conf', '60-latin.conf', '65-fonts-persian.conf', '65-khmer.conf', '65-nonlatin.conf', '69-unifont.conf', '70-no-bitmaps.conf', '70-no-bitmaps-and-emoji.conf', '70-no-bitmaps-except-emoji.conf', '70-yes-bitmaps.conf', '80-delicious.conf', '90-synthetic.conf', ] preferred_hinting = get_option('default-hinting') preferred_sub_pixel_rendering = get_option('default-sub-pixel-rendering') preferred_bitmap = get_option('bitmap-conf') conf_links = [ '10-scale-bitmap-fonts.conf', '10-yes-antialias.conf', '11-lcdfilter-default.conf', '20-unhint-small-vera.conf', '30-metric-aliases.conf', '40-nonlatin.conf', '45-generic.conf', '45-latin.conf', '48-spacing.conf', '49-sansserif.conf', '50-user.conf', '51-local.conf', '60-generic.conf', '60-latin.conf', '65-fonts-persian.conf', '65-nonlatin.conf', '69-unifont.conf', '80-delicious.conf', '90-synthetic.conf', ] if preferred_hinting != 'noinstall' conf_links += '10-hinting-@0@.conf'.format(preferred_hinting) endif if preferred_sub_pixel_rendering != 'noinstall' conf_links += '10-sub-pixel-@0@.conf'.format(preferred_sub_pixel_rendering) endif bitmap_conf_options = { 'yes': 'yes-bitmaps', 'no': 'no-bitmaps-and-emoji', 'no-except-emoji': 'no-bitmaps-except-emoji' } foreach opt, configfile : bitmap_conf_options if opt == preferred_bitmap conf_links += '70-@0@.conf'.format(configfile) endif endforeach install_data(conf_files, install_dir: fc_templatedir, install_tag: 'runtime') meson.add_install_script('link_confs.py', fc_templatedir, fc_configdir, conf_links, install_tag: 'runtime') # 35-lang-normalize.conf orths = [] foreach o : orth_files # orth_files is from fc-lang/meson.build o = o.split('.')[0] # strip filename suffix if not o.contains('_') # ignore those with an underscore orths += [o] endif endforeach custom_target('35-lang-normalize.conf', output: '35-lang-normalize.conf', command: [find_program('write-35-lang-normalize-conf.py'), ','.join(orths), '@OUTPUT@'], install_dir: fc_templatedir, install: true, install_tag: 'runtime') # README readme_cdata = configuration_data() readme_cdata.set('TEMPLATEDIR', fc_templatedir) configure_file(output: 'README', input: 'README.in', configuration: readme_cdata, install_dir: fc_configdir, install: true, install_tag: 'runtime') fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/conf.d/write-35-lang-normalize-conf.py000077500000000000000000000017061503113465200303410ustar00rootroot00000000000000#!/usr/bin/env python3 # # fontconfig write-35-lang-normalize-conf.py import os import sys if len(sys.argv) < 2: print('ERROR: usage: {} ORTH_LIST [OUTPUT.CONF]'.format(sys.argv[0])) sys.exit(-1) orth_list_unsorted = sys.argv[1].split(',') if len(sys.argv) > 2 and sys.argv[2] != '-': f_out = open(sys.argv[2], 'w', encoding='utf8') else: f_out = sys.stdout orth_list = sorted(sys.argv[1].split(',')) print('', file=f_out) print('', file=f_out) print('', file=f_out) for o in orth_list: print(f' ', file=f_out) print(f' ', file=f_out) print(f' {o}', file=f_out) print(f' {o}', file=f_out) print(f' ', file=f_out) print('', file=f_out) f_out.close() sys.exit(0) fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/config-fixups.h000066400000000000000000000031141503113465200243230ustar00rootroot00000000000000/* * Copyright 息 2006 Keith Packard * Copyright 息 2010 Behdad Esfahbod * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ /* This header file is supposed to be included in config.h */ /* just a hack to build the fat binaries: * https://bugs.freedesktop.org/show_bug.cgi?id=20208 */ #ifdef __APPLE__ # include # undef SIZEOF_VOID_P # undef ALIGNOF_DOUBLE # ifdef __LP64__ # define SIZEOF_VOID_P 8 # define ALIGNOF_DOUBLE 8 # else # define SIZEOF_VOID_P 4 # define ALIGNOF_DOUBLE 4 # endif #endif fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/configure.ac000066400000000000000000000617551503113465200236760ustar00rootroot00000000000000dnl dnl fontconfig/configure.in dnl dnl Copyright © 2003 Keith Packard dnl dnl Permission to use, copy, modify, distribute, and sell this software and its dnl documentation for any purpose is hereby granted without fee, provided that dnl the above copyright notice appear in all copies and that both that dnl copyright notice and this permission notice appear in supporting dnl documentation, and that the name of the author(s) not be used in dnl advertising or publicity pertaining to distribution of the software without dnl specific, written prior permission. The authors make no dnl representations about the suitability of this software for any purpose. It dnl is provided "as is" without express or implied warranty. dnl dnl THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, dnl INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO dnl EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR dnl CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, dnl DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER dnl TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR dnl PERFORMANCE OF THIS SOFTWARE. dnl dnl Process this file with autoconf to create configure. AC_PREREQ([2.71]) dnl ========================================================================== dnl Versioning dnl ========================================================================== dnl This is the package version number, not the shared library dnl version. This same version number must appear in fontconfig/fontconfig.h dnl Yes, it is a pain to synchronize version numbers. Unfortunately, it's dnl not possible to extract the version number here from fontconfig.h AC_INIT([fontconfig],[2.17.1],[https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/new]) AM_INIT_AUTOMAKE([1.11 parallel-tests dist-xz foreign]) m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) dnl ========================================================================== AC_CONFIG_HEADERS(config.h) AC_CONFIG_MACRO_DIR([m4]) AC_PROG_CC AC_USE_SYSTEM_EXTENSIONS AC_SYS_LARGEFILE AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_MAKE_SET PKG_PROG_PKG_CONFIG m4_ifdef([PKG_INSTALLDIR], [PKG_INSTALLDIR], AC_SUBST([pkgconfigdir], ${libdir}/pkgconfig)) AM_MISSING_PROG([GIT], [git]) AM_MISSING_PROG([GPERF], [gperf]) AM_PATH_PYTHON([3]) AC_MSG_CHECKING([for RM macro]) _predefined_rm=`make -p -f /dev/null 2>/dev/null|grep '^RM ='|sed -e 's/^RM = //'` if test "x$_predefined_rm" = "x"; then AC_MSG_RESULT([no predefined RM]) AC_CHECK_PROG(RM, rm, [rm -f]) else AC_MSG_RESULT($_predefined_rm) fi dnl Initialize libtool LT_PREREQ([2.2]) LT_INIT([disable-static win32-dll]) dnl cache version CACHE_VERSION=9 AC_SUBST(CACHE_VERSION) dnl libtool versioning dnl bump revision when fixing bugs dnl bump current and age, reset revision to zero when adding APIs dnl bump current, leave age, reset revision to zero when changing/removing APIS LIBT_CURRENT=17 LIBT_REVISION=1 AC_SUBST(LIBT_CURRENT) AC_SUBST(LIBT_REVISION) LIBT_AGE=16 LIBT_VERSION_INFO="$LIBT_CURRENT:$LIBT_REVISION:$LIBT_AGE" AC_SUBST(LIBT_VERSION_INFO) LIBT_CURRENT_MINUS_AGE=`expr $LIBT_CURRENT - $LIBT_AGE` AC_SUBST(LIBT_CURRENT_MINUS_AGE) PKGCONFIG_REQUIRES= PKGCONFIG_REQUIRES_PRIVATELY= dnl ========================================================================== AC_CANONICAL_HOST os_win32=no os_darwin=no os_android=no case "${host_os}" in linux*android*) os_android=yes ;; cygwin*|mingw*) os_win32=yes ;; darwin*) os_darwin=yes ;; esac AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes") AM_CONDITIONAL(OS_DARWIN, test "$os_darwin" = "yes") dnl ========================================================================== dnl gettext stuff dnl ========================================================================== GETTEXT_PACKAGE=$PACKAGE AC_SUBST(GETTEXT_PACKAGE) AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [Gettext package]) AM_GNU_GETTEXT_VERSION([0.19.7]) AM_GNU_GETTEXT([external]) dnl ========================================================================== if test "$os_win32" = "yes"; then AC_CHECK_PROG(ms_librarian, lib.exe, yes, no) fi AM_CONDITIONAL(MS_LIB_AVAILABLE, test x$ms_librarian = xyes) AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"]) WARN_CFLAGS="" WARNING_CPP_DIRECTIVE="no" if test "x$GCC" = "xyes"; then WARN_CFLAGS="-Wall -Wpointer-arith -Wstrict-prototypes \ -Wmissing-prototypes -Wmissing-declarations \ -Wnested-externs" WARNING_CPP_DIRECTIVE="yes" elif test "x$SUNCC" = "xyes"; then WARN_CFLAGS="-v -fd" WARNING_CPP_DIRECTIVE="yes" fi if test "x$WARNING_CPP_DIRECTIVE" = "xyes"; then AC_DEFINE_UNQUOTED(HAVE_WARNING_CPP_DIRECTIVE,1, [Can use #warning in C files]) fi AC_SUBST(WARN_CFLAGS) dnl ========================================================================== AX_CC_FOR_BUILD() AC_ARG_VAR(CC_FOR_BUILD, [build system C compiler]) AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes) AM_CONDITIONAL(ENABLE_SHARED, test "$enable_shared" = "yes") dnl ========================================================================== AC_ARG_WITH(arch, [AS_HELP_STRING([--with-arch=ARCH],[Force architecture to ARCH])], arch="$withval", arch=auto) if test "x$arch" != xauto; then AC_DEFINE_UNQUOTED([FC_ARCHITECTURE], "$arch", [Architecture prefix to use for cache file names]) fi dnl ========================================================================== # Checks for header files. AC_HEADER_DIRENT # Autoupdate added the next two lines to ensure that your configure # script's behavior did not change. They are probably safe to remove. AC_CHECK_INCLUDES_DEFAULT AC_PROG_EGREP AC_CHECK_HEADERS([dirent.h fcntl.h stdlib.h string.h unistd.h sys/statvfs.h sys/vfs.h sys/statfs.h sys/param.h sys/mount.h]) AX_CREATE_STDINT_H([src/fcstdint.h]) # Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_C_INLINE AC_C_FLEXIBLE_ARRAY_MEMBER AC_TYPE_PID_T # Checks for library functions. AC_FUNC_VPRINTF AC_FUNC_MMAP AC_CHECK_FUNCS([link mkstemp mkostemp _mktemp_s mkdtemp getopt getopt_long getprogname getexecname rand random lrand48 random_r rand_r readlink fstatvfs fstatfs lstat strerror strerror_r]) AC_SEARCH_LIBS([fabs], [m], [], [AC_MSG_ERROR([unable to find the fabs() function])]) dnl AC_CHECK_FUNCS doesn't check for header files. dnl posix_fadvise() may be not available in older libc. AC_CHECK_SYMBOL([posix_fadvise], [fcntl.h], [fc_func_posix_fadvise=1], [fc_func_posix_fadvise=0]) AC_DEFINE_UNQUOTED([HAVE_POSIX_FADVISE], [$fc_func_posix_fadvise], [Define to 1 if you have the 'posix_fadvise' function.]) # AC_CHECK_MEMBERS([struct stat.st_mtim],,, [#include ]) # if test "x$ac_cv_func_fstatvfs" = "xyes"; then AC_CHECK_MEMBERS([struct statvfs.f_basetype, struct statvfs.f_fstypename],,, [#include ]) fi if test "x$ac_cv_func_fstatfs" = "xyes"; then AC_CHECK_MEMBERS([struct statfs.f_flags, struct statfs.f_fstypename],,, [ #ifdef HAVE_SYS_VFS_H #include #endif #ifdef HAVE_SYS_STATFS_H #include #endif #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_SYS_MOUNT_H #include #endif]) fi AC_CHECK_MEMBERS([struct dirent.d_type],,, [#include ]) # Check the argument type of the gperf hash/lookup function AC_MSG_CHECKING([The type of len parameter of gperf hash/lookup function]) fc_gperf_test="$(echo 'foo' | gperf -L ANSI-C)" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include const char *in_word_set(register const char *, register size_t); $fc_gperf_test ]])], [FC_GPERF_SIZE_T=size_t], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include const char *in_word_set(register const char *, register unsigned int); $fc_gperf_test ]])], [FC_GPERF_SIZE_T="unsigned int"], [AC_MSG_ERROR([Unable to determine the type of the len parameter of the gperf hash/lookup function])] )]) AC_DEFINE_UNQUOTED(FC_GPERF_SIZE_T, $FC_GPERF_SIZE_T, [The type of len parameter of the gperf hash/lookup function]) AC_MSG_RESULT($FC_GPERF_SIZE_T) # # Checks for iconv # AC_ARG_ENABLE(iconv, [AS_HELP_STRING([--enable-iconv],[Use iconv to support non-Unicode SFNT name])], ,enable_iconv=no) AC_ARG_WITH(libiconv, [AS_HELP_STRING([--with-libiconv=DIR],[Use libiconv in DIR])], [if test "x$withval" = "xyes"; then libiconv_prefix=$prefix else libiconv_prefix=$withval fi], [libiconv_prefix=auto]) AC_ARG_WITH(libiconv-includes, [AS_HELP_STRING([--with-libiconv-includes=DIR],[Use libiconv includes in DIR])], [libiconv_includes=$withval], [libiconv_includes=auto]) AC_ARG_WITH(libiconv-lib, [AS_HELP_STRING([--with-libiconv-lib=DIR],[Use libiconv library in DIR])], [libiconv_lib=$withval], [libiconv_lib=auto]) # if no libiconv,libiconv-includes,libiconv-lib are specified, # libc's iconv has a priority. if test "$libiconv_includes" != "auto" -a -r ${libiconv_includes}/iconv.h; then libiconv_cflags="-I${libiconv_includes}" elif test "$libiconv_prefix" != "auto" -a -r ${libiconv_prefix}/include/iconv.h; then libiconv_cflags="-I${libiconv_prefix}/include" else libiconv_cflags="" fi libiconv_libs="" if test "x$libiconv_cflags" != "x"; then if test "$libiconv_lib" != "auto" -a -d ${libiconv_lib}; then libiconv_libs="-L${libiconv_lib} -liconv" elif test "$libiconv_prefix" != "auto" -a -d ${libiconv_prefix}/lib; then libiconv_libs="-L${libiconv_prefix}/lib -liconv" else libiconv_libs="-liconv" fi fi use_iconv=0 if test "x$enable_iconv" != "xno"; then AC_MSG_CHECKING([for a usable iconv]) if test "x$libiconv_cflags" != "x" -o "x$libiconv_libs" != "x"; then iconvsaved_CFLAGS="$CFLAGS" iconvsaved_LIBS="$LIBS" CFLAGS="$CFLAGS $libiconv_cflags" LIBS="$LIBS $libiconv_libs" AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[iconv_open ("from", "to");]])],[iconv_type="libiconv" use_iconv=1 ICONV_CFLAGS="$libiconv_cflags" ICONV_LIBS="$libiconv_libs" ],[use_iconv=0]) CFLAGS="$iconvsaved_CFLAGS" LIBS="$iconvsaved_LIBS" fi if test "x$use_iconv" = "x0"; then AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[iconv_open ("from", "to");]])],[iconv_type="libc" use_iconv=1],[iconv_type="not found" use_iconv=0]) fi AC_MSG_RESULT([$iconv_type]) AC_SUBST(ICONV_CFLAGS) AC_SUBST(ICONV_LIBS) fi AC_DEFINE_UNQUOTED(USE_ICONV,$use_iconv,[Use iconv.]) # # Checks for FreeType # dnl See http://git.savannah.gnu.org/cgit/freetype/freetype2.git/tree/docs/VERSIONS.TXT for versioning in freetype PKG_CHECK_MODULES(FREETYPE, freetype2 >= 21.0.15) PKGCONFIG_REQUIRES="$PKGCONFIG_REQUIRES freetype2 >= 21.0.15" AC_SUBST(FREETYPE_LIBS) AC_SUBST(FREETYPE_CFLAGS) fontconfig_save_libs="$LIBS" fontconfig_save_cflags="$CFLAGS" LIBS="$LIBS $FREETYPE_LIBS" CFLAGS="$CFLAGS $FREETYPE_CFLAGS" AC_CHECK_FUNCS(FT_Get_BDF_Property FT_Get_PS_Font_Info FT_Has_PS_Glyph_Names FT_Get_X11_Font_Format FT_Done_MM_Var) AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ #include #include FT_CONFIG_OPTIONS_H #ifndef PCF_CONFIG_OPTION_LONG_FAMILY_NAMES # error "No pcf long family names support" #endif ]])], [have_pcf_long_family_names=yes], [have_pcf_long_family_names=no]) AM_CONDITIONAL(FREETYPE_PCF_LONG_FAMILY_NAMES, test "x$have_pcf_long_family_names" = xyes) LIBS="$fontconfig_save_libs" CFLAGS="$fontconfig_save_cflags" # # Check expat configuration # AC_ARG_WITH(expat, [AS_HELP_STRING([--with-expat=DIR],[Use Expat in DIR])], [expat_prefix=$withval], [expat_prefix=auto]) AC_ARG_WITH(expat-includes, [AS_HELP_STRING([--with-expat-includes=DIR],[Use Expat includes in DIR])], [expat_includes=$withval], [expat_includes=auto]) AC_ARG_WITH(expat-lib, [AS_HELP_STRING([--with-expat-lib=DIR])], [expat_lib=$withval], [expat_lib=auto]) if test "$enable_libxml2" != "yes"; then use_pkgconfig_for_expat=yes if test "$expat_prefix" = "auto" -a "$expat_includes" = "auto" -a "$expat_lib" = "auto"; then PKG_CHECK_MODULES(EXPAT, expat,,use_pkgconfig_for_expat=no) else use_pkgconfig_for_expat=no fi if test "x$use_pkgconfig_for_expat" = "xno"; then if test "$expat_includes" != "auto" -a -r ${expat_includes}/expat.h; then EXPAT_CFLAGS="-I${expat_includes}" elif test "$expat_prefix" != "auto" -a -r ${expat_prefix}/include/expat.h; then EXPAT_CFLAGS="-I${expat_prefix}/include" else EXPAT_CFLAGS="" fi if test "$expat_lib" != "auto"; then EXPAT_LIBS="-L${expat_lib} -lexpat" elif test "$expat_prefix" != "auto"; then EXPAT_LIBS="-L${expat_prefix}/lib -lexpat" else EXPAT_LIBS="-lexpat" fi PKG_EXPAT_CFLAGS=$EXPAT_CFLAGS PKG_EXPAT_LIBS=$EXPAT_LIBS else PKGCONFIG_REQUIRES_PRIVATELY="$PKGCONFIG_REQUIRES_PRIVATELY expat" PKG_EXPAT_CFLAGS= PKG_EXPAT_LIBS= fi expatsaved_CPPFLAGS="$CPPFLAGS" expatsaved_LIBS="$LIBS" CPPFLAGS="$CPPFLAGS $EXPAT_CFLAGS" LIBS="$LIBS $EXPAT_LIBS" AC_CHECK_HEADER(expat.h) if test "$ac_cv_header_expat_h" = "no"; then AC_CHECK_HEADER(xmlparse.h) if test "$ac_cv_header_xmlparse_h" = "yes"; then HAVE_XMLPARSE_H=1 AC_SUBST(HAVE_XMLPARSE_H) AC_DEFINE_UNQUOTED(HAVE_XMLPARSE_H,$HAVE_XMLPARSE_H, [Use xmlparse.h instead of expat.h]) else AC_MSG_ERROR([ *** expat is required. or try to use --enable-libxml2]) fi fi AC_CHECK_FUNCS(XML_SetDoctypeDeclHandler) if test "$ac_cv_func_XML_SetDoctypeDeclHandler" = "no"; then AC_MSG_ERROR([ *** expat is required. or try to use --enable-libxml2]) fi CPPFLAGS="$expatsaved_CPPFLAGS" LIBS="$expatsaved_LIBS" AC_SUBST(EXPAT_CFLAGS) AC_SUBST(EXPAT_LIBS) AC_SUBST(PKG_EXPAT_CFLAGS) AC_SUBST(PKG_EXPAT_LIBS) fi # # Check libxml2 configuration # AC_ARG_ENABLE(libxml2, [AS_HELP_STRING([--enable-libxml2],[Use libxml2 instead of Expat])]) if test "$enable_libxml2" = "yes"; then PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.6]) PKGCONFIG_REQUIRES_PRIVATELY="$PKGCONFIG_REQUIRES_PRIVATELY libxml-2.0 >= 2.6" AC_DEFINE_UNQUOTED(ENABLE_LIBXML2,1,[Use libxml2 instead of Expat]) AC_SUBST(LIBXML2_CFLAGS) AC_SUBST(LIBXML2_LIBS) fc_saved_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $LIBXML2_CFLAGS" AC_MSG_CHECKING([SAX1 support in libxml2]) AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ #include #if !defined(LIBXML_SAX1_ENABLED) # include "error: No SAX1 support in libxml2" #endif ]])], [AC_MSG_RESULT([found])], [AC_MSG_ERROR([ *** SAX1 support in libxml2 is required. enable it or use expat instead.])]) CFLAGS="$fc_saved_CFLAGS" fi # # Check json-c # PKG_CHECK_MODULES([JSONC], [json-c], [use_jsonc=yes], [use_jsonc=no]) AM_CONDITIONAL(ENABLE_JSONC, test "x$use_jsonc" = "xyes") AC_SUBST(JSONC_CFLAGS) AC_SUBST(JSONC_LIBS) # # Set default sub-pixel rendering # AC_ARG_WITH(default-sub-pixel-rendering, [AS_HELP_STRING([--with-default-sub-pixel-rendering=NAME],[Enable your preferred sub-pixel rendering configuration (none/bgr/rgb/vbgr/vrgb) [default=none]])], preferred_sub_pixel_rendering="$withval", preferred_sub_pixel_rendering=none) case "$preferred_sub_pixel_rendering" in none|bgr|rgb|vbgr|vrgb) PREFERRED_SUB_PIXEL_RENDERING="$preferred_sub_pixel_rendering" AC_SUBST(PREFERRED_SUB_PIXEL_RENDERING) ;; *) AC_MSG_ERROR([Invalid sub-pixel rendering. please choose one of none, bgr, rgb, vbgr, or vrgb]) ;; esac # # Set default hinting # AC_ARG_WITH(default-hinting, [AS_HELP_STRING([--with-default-hinting=NAME],[Enable your preferred hinting configuration (none/slight/medium/full) [default=slight]])], preferred_hinting="$withval", preferred_hinting=slight) case "$preferred_hinting" in none|slight|medium|full) PREFERRED_HINTING="$preferred_hinting" AC_SUBST(PREFERRED_HINTING) ;; *) AC_MSG_ERROR([Invalid hinting. please choose one of none, slight, medium, or full]) ;; esac # # default bitmap config # AC_ARG_WITH(bitmap-conf, [AS_HELP_STRING([--with-bitmap-conf=NAME],[Enable your preferred bitmap related configuration (yes/no/no-except-emoji) [default=no-except-emoji]])], preferred_bitmap="$withval", preferred_bitmap=no-except-emoji) case "$preferred_bitmap" in yes) PREFERRED_BITMAP="yes-bitmaps" ;; no) PREFERRED_BITMAP="no-bitmaps-and-emoji" ;; no-except-emoji) PREFERRED_BITMAP="no-bitmaps-except-emoji" ;; *) AC_MSG_ERROR([Invalid bitmap config. please choose one of yes, no, or no-except-emoji]) ;; esac AC_SUBST(PREFERRED_BITMAP) # # Set default font directory # AC_ARG_WITH(default-fonts, [AS_HELP_STRING([--with-default-fonts=DIR1,DIR2,...],[Use fonts from DIR1,DIR2,... when config is busted])], default_fonts="$withval", default_fonts=yes) case "$default_fonts" in yes) if test "$os_win32" = "yes"; then default_fonts="WINDOWSFONTDIR,WINDOWSUSERFONTDIR" elif test "$os_darwin" = "yes"; then default_fonts="/System/Library/Fonts,/Library/Fonts,~/Library/Fonts,/System/Library/Assets/com_apple_MobileAsset_Font3,/System/Library/Assets/com_apple_MobileAsset_Font4" elif test "$os_android" = "yes"; then default_fonts="/system/fonts,/product/fonts" else default_fonts="/usr/share/fonts" fi ;; esac FC_DEFAULT_FONTS="" if test x${default_fonts+set} = xset; then fc_IFS=$IFS IFS="," for p in $default_fonts; do if test x"$FC_DEFAULT_FONTS" != x; then FC_DEFAULT_FONTS="$FC_DEFAULT_FONTS " fi FC_DEFAULT_FONTS="$FC_DEFAULT_FONTS$p" done IFS=$fc_IFS fi AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "$FC_DEFAULT_FONTS", [System font directory]) AC_SUBST(FC_DEFAULT_FONTS) # # Add more fonts if available. By default, add only the directories # with outline fonts; those with bitmaps can be added as desired in # local.conf or ~/.fonts.conf # AC_ARG_WITH(add-fonts, [AS_HELP_STRING([--with-add-fonts=DIR1,DIR2,...],[Find additional fonts in DIR1,DIR2,... ])], add_fonts="$withval", add_fonts=yes) case "$add_fonts" in yes) FC_ADD_FONTS="" for dir in /usr/X11R6/lib/X11 /usr/X11/lib/X11 /usr/lib/X11; do case x"$FC_ADD_FONTS" in x) sub="$dir/fonts" if test -d "$sub"; then case x$FC_ADD_FONTS in x) FC_ADD_FONTS="$sub" ;; *) FC_ADD_FONTS="$FC_ADD_FONTS,$sub" ;; esac fi ;; esac done AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories]) ;; no) FC_ADD_FONTS="" ;; *) FC_ADD_FONTS="$add_fonts" AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories]) ;; esac AC_SUBST(FC_ADD_FONTS) FC_FONTPATH="" case "$FC_ADD_FONTS" in "") ;; *) FC_FONTPATH=`echo $FC_ADD_FONTS | sed -e 's/^//' -e 's/$/<\/dir>/' -e 's/,/<\/dir> /g'` ;; esac AC_SUBST(FC_FONTPATH) # # Set default cache directory path # AC_ARG_WITH(cache-dir, [AS_HELP_STRING([--with-cache-dir=DIR],[Use DIR to store cache files [default=LOCALSTATEDIR/cache/fontconfig]])], fc_cachedir="$withval", fc_cachedir=yes) case $fc_cachedir in no|yes) if test "$os_win32" = "yes"; then fc_cachedir="LOCAL_APPDATA_FONTCONFIG_CACHE" else fc_cachedir='${localstatedir}/cache/${PACKAGE}' fi ;; *) ;; esac AC_SUBST(fc_cachedir) FC_CACHEDIR=${fc_cachedir} AC_SUBST(FC_CACHEDIR) FC_FONTDATE=`LC_ALL=C date` AC_SUBST(FC_FONTDATE) # # Set configuration paths # AC_ARG_WITH(templatedir, [AS_HELP_STRING([--with-templatedir=DIR],[Use DIR to store the configuration template files [default=DATADIR/fontconfig/conf.avail]])], [templatedir="$withval"], [templatedir=yes]) AC_ARG_WITH(baseconfigdir, [AS_HELP_STRING([--with-baseconfigdir=DIR],[Use DIR to store the base configuration files [default=SYSCONFDIR/fonts]])], [baseconfigdir="$withval"], [baseconfigdir=yes]) AC_ARG_WITH(configdir, [AS_HELP_STRING([--with-configdir=DIR],[Use DIR to store active configuration files [default=BASECONFIGDIR/conf.d]])], [configdir="$withval"], [configdir=yes]) AC_ARG_WITH(xmldir, [AS_HELP_STRING([--with-xmldir=DIR],[Use DIR to store XML schema files [default=DATADIR/xml/fontconfig]])], [xmldir="$withval"], [xmldir=yes]) case "$templatedir" in no|yes) templatedir='${datadir}'/fontconfig/conf.avail ;; *) ;; esac case "$baseconfigdir" in no|yes) baseconfigdir='${sysconfdir}'/fonts ;; *) ;; esac case "$configdir" in no|yes) configdir='${BASECONFIGDIR}'/conf.d ;; *) ;; esac case "$xmldir" in no|yes) xmldir='${datadir}'/xml/fontconfig ;; *) ;; esac TEMPLATEDIR=${templatedir} BASECONFIGDIR=${baseconfigdir} CONFIGDIR=${configdir} XMLDIR=${xmldir} AC_SUBST(TEMPLATEDIR) AC_SUBST(BASECONFIGDIR) AC_SUBST(CONFIGDIR) AC_SUBST(XMLDIR) dnl =========================================================================== # # Thread-safety primitives # AC_CACHE_CHECK([stdatomic.h atomic primitives], fc_cv_have_stdatomic_atomic_primitives, [ fc_cv_have_stdatomic_atomic_primitives=false AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include void memory_barrier (void) { atomic_thread_fence (memory_order_acq_rel); } int atomic_add (atomic_int *i) { return atomic_fetch_add_explicit (i, 1, memory_order_relaxed); } int mutex_trylock (atomic_flag *m) { return atomic_flag_test_and_set_explicit (m, memory_order_acquire); } void mutex_unlock (atomic_flag *m) { atomic_flag_clear_explicit (m, memory_order_release); } ]], [[]])],[fc_cv_have_stdatomic_atomic_primitives=true ],[]) ]) if $fc_cv_have_stdatomic_atomic_primitives; then AC_DEFINE(HAVE_STDATOMIC_PRIMITIVES, 1, [Have C99 stdatomic atomic primitives]) fi AC_CACHE_CHECK([for Intel atomic primitives], fc_cv_have_intel_atomic_primitives, [ fc_cv_have_intel_atomic_primitives=false AC_LINK_IFELSE([AC_LANG_PROGRAM([[ void memory_barrier (void) { __sync_synchronize (); } int atomic_add (int *i) { return __sync_fetch_and_add (i, 1); } int mutex_trylock (int *m) { return __sync_lock_test_and_set (m, 1); } void mutex_unlock (int *m) { __sync_lock_release (m); } ]], [[]])],[fc_cv_have_intel_atomic_primitives=true ],[]) ]) if $fc_cv_have_intel_atomic_primitives; then AC_DEFINE(HAVE_INTEL_ATOMIC_PRIMITIVES, 1, [Have Intel __sync_* atomic primitives]) fi AC_CACHE_CHECK([for Solaris atomic operations], fc_cv_have_solaris_atomic_ops, [ fc_cv_have_solaris_atomic_ops=false AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include /* This requires Solaris Studio 12.2 or newer: */ #include void memory_barrier (void) { __machine_rw_barrier (); } int atomic_add (volatile unsigned *i) { return atomic_add_int_nv (i, 1); } void *atomic_ptr_cmpxchg (volatile void **target, void *cmp, void *newval) { return atomic_cas_ptr (target, cmp, newval); } ]], [[]])],[fc_cv_have_solaris_atomic_ops=true ],[]) ]) if $fc_cv_have_solaris_atomic_ops; then AC_DEFINE(HAVE_SOLARIS_ATOMIC_OPS, 1, [Have Solaris __machine_*_barrier and atomic_* operations]) fi if test "$os_win32" = no && ! $have_pthread; then AC_CHECK_HEADERS(sched.h) AC_SEARCH_LIBS(sched_yield,rt,AC_DEFINE(HAVE_SCHED_YIELD, 1, [Have sched_yield])) fi have_pthread=false if test "$os_win32" = no; then AX_PTHREAD([have_pthread=true]) fi if $have_pthread; then LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" CC="$PTHREAD_CC" AC_DEFINE(HAVE_PTHREAD, 1, [Have POSIX threads]) fi AM_CONDITIONAL(HAVE_PTHREAD, $have_pthread) dnl =========================================================================== # # Let people not build/install docs if they don't have docbook # AC_ARG_ENABLE(docbook, [AS_HELP_STRING([--disable-docbook], [Disable building docs with docbook2html (default: no)])],,) if test x$enable_docbook != xno; then AC_CHECK_PROG(HASDOCBOOK, docbook2html, yes, no) fi AM_CONDITIONAL(USEDOCBOOK, test "x$HASDOCBOOK" = xyes) default_docs="yes" # # Check if docs exist or can be created # if test x$HASDOCBOOK = xno; then if test -f $srcdir/doc/fonts-conf.5; then : else default_docs="no" fi fi AC_ARG_ENABLE(docs, [AS_HELP_STRING([--disable-docs],[Don't build and install documentation])], , enable_docs=$default_docs) AM_CONDITIONAL(ENABLE_DOCS, test "x$enable_docs" = xyes) if test "x$enable_docs" = xyes; then tmp=funcs.$$ cat $srcdir/doc/*.fncs | awk ' /^@TITLE@/ { if (!done) { printf ("%s\n", $2); done = 1; } } /^@FUNC@/ { if (!done) { printf ("%s\n", $2); done = 1; } } /^@@/ { done = 0; }' > $tmp DOCMAN3=`cat $tmp | awk '{ printf ("%s.3 ", $1); }'` echo DOCMAN3 $DOCMAN3 rm -f $tmp else DOCMAN3="" fi AC_SUBST(DOCMAN3) dnl =========================================================================== default_cache_build="yes" if test $cross_compiling = "yes"; then default_cache_build="no" fi AC_ARG_ENABLE(cache-build, [AS_HELP_STRING([--disable-cache-build],[Don't run fc-cache during the build])], , enable_cache_build=$default_cache_build) AM_CONDITIONAL(ENABLE_CACHE_BUILD, test "x$enable_cache_build" = xyes) dnl Figure out what cache format suffix to use for this architecture AC_C_BIGENDIAN AC_CHECK_SIZEOF([void *]) AC_CHECK_ALIGNOF([double]) AC_CHECK_ALIGNOF([void *]) dnl include the header file for workaround of miscalculating size on autoconf dnl particularly for fat binaries AH_BOTTOM([#include "config-fixups.h"]) dnl dnl AC_SUBST(PKGCONFIG_REQUIRES) AC_SUBST(PKGCONFIG_REQUIRES_PRIVATELY) dnl AC_CONFIG_FILES([ Makefile fontconfig/Makefile fc-lang/Makefile fc-case/Makefile src/Makefile conf.d/Makefile fc-cache/Makefile fc-cat/Makefile fc-conflist/Makefile fc-list/Makefile fc-match/Makefile fc-pattern/Makefile fc-query/Makefile fc-scan/Makefile fc-validate/Makefile fontconfig/fontconfig.h doc/Makefile doc/cache-version.sgml doc/version.sgml its/Makefile po/Makefile.in po-conf/Makefile.in test/Makefile fontconfig.pc fontconfig-zip ]) AC_OUTPUT fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/000077500000000000000000000000001503113465200221375ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/Makefile.am000066400000000000000000000127561503113465200242060ustar00rootroot00000000000000# -*- encoding: utf-8 -*- # # fontconfig/doc/Makefile.am # # Copyright © 2003 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. NULL = EXTRA_DIST = \ $(BUILT_DOCS) \ $(DOC_FUNCS_FNCS) \ $(SGML_FILES) \ $(check_SCRIPTS) \ confdir.sgml.in \ func.sgml \ $(NULL) BUILT_SOURCES = \ $(DOC_FUNCS_SGML) \ $(NULL) if USEDOCBOOK maintainerdoccleanfiles = \ $(NULL) cleandocfiles = \ $(BUILT_DOCS) \ $(NULL) else maintainerdoccleanfiles = \ $(BUILT_DOCS) \ $(NULL) cleandocfiles = \ $(NULL) endif MAINTAINERCLEANFILES = \ $(DOC_FUNCS_SGML) \ $(maintainerdoccleanfiles) \ $(NULL) CLEANFILES = \ $(cleandocfiles) \ $(LOCAL_SGML_FILES) \ confdir.sgml \ func.refs \ $(NULL) SUFFIXES = \ .fncs \ .sgml \ .txt \ .html \ $(NULL) TESTS = \ check-missing-doc \ check-whitespace-in-args \ $(NULL) TESTS_ENVIRONMENT = \ top_srcdir=${top_srcdir}; export top_srcdir; \ $(NULL) LOG_COMPILER = sh # DOC2HTML = docbook2html DOC2TXT = docbook2txt DOC2MAN = docbook2man DOC2PDF = docbook2pdf DOC_FUNCS_FNCS = \ fcatomic.fncs \ fcblanks.fncs \ fccache.fncs \ fccharset.fncs \ fcconfig.fncs \ fcconstant.fncs \ fcdircache.fncs \ fcfile.fncs \ fcfontset.fncs \ fcformat.fncs \ fcfreetype.fncs \ fcfontations.fncs \ fcinit.fncs \ fclangset.fncs \ fcmatrix.fncs \ fcobjectset.fncs \ fcobjecttype.fncs \ fcpattern.fncs \ fcrange.fncs \ fcstring.fncs \ fcstrset.fncs \ fcvalue.fncs \ fcweight.fncs \ $(NULL) SGML_FILES = \ fontconfig-user.sgml \ fontconfig-devel.sgml \ $(NULL) LOCAL_SGML_FILES = \ local-fontconfig-user.sgml \ local-fontconfig-devel.sgml \ $(NULL) DOC_FUNCS_SGML = $(DOC_FUNCS_FNCS:.fncs=.sgml) BUILT_DOCS = \ $(HTML_FILES) \ $(PDF_FILES) \ $(TXT_FILES) \ $(man3_MANS) \ $(man5_MANS) \ $(NULL) DOCS_DEPS = \ $(DOC_FUNCS_SGML) \ cache-version.sgml \ confdir.sgml \ version.sgml \ $(NULL) TXT_FILES = $(SGML_FILES:.sgml=.txt) PDF_FILES = $(SGML_FILES:.sgml=.pdf) HTML_FILES = \ fontconfig-user.html \ fontconfig-devel.html \ $(NULL) # noinst_PROGRAMS = \ $(NULL) noinst_SCRIPTS = \ edit-sgml.py \ $(NULL) ## check_SCRIPTS = \ check-missing-doc \ check-missing-doc.py \ check-whitespace-in-args \ check-whitespace-in-args.py \ $(NULL) # man3_MANS = \ $(DOCMAN3) \ $(NULL) man5_MANS = \ fonts-conf.5 \ $(NULL) # doc_DATA = \ $(TXT_FILES) \ $(PDF_FILES) \ $(HTML_FILES) \ $(NULL) # if USEDOCBOOK BUILT_SOURCES += \ $(LOCAL_SGML_FILES) \ $(NULL) ## .fncs.sgml: $(AM_V_GEN) $(RM) $@; \ $(PYTHON) $(srcdir)/edit-sgml.py $(srcdir)/func.sgml '$(srcdir)/$*.fncs' $*.sgml .sgml.txt: $(AM_V_GEN) $(RM) $@; \ $(DOC2TXT) $*.sgml .sgml.pdf: $(AM_V_GEN) $(RM) $@; \ $(DOC2PDF) $*.sgml .sgml.html: $(AM_V_GEN) $(RM) $@; \ $(DOC2HTML) -u $*.sgml > $@ ## fonts-conf.5: local-fontconfig-user.sgml cache-version.sgml version.sgml confdir.sgml $(AM_V_GEN) $(RM) $@; \ $(DOC2MAN) local-fontconfig-user.sgml && \ $(RM) manpage.* ## $(man3_MANS): func.refs func.refs: local-fontconfig-devel.sgml $(DOCS_DEPS) $(AM_V_GEN) $(RM) $@; \ $(DOC2MAN) -o devel-man local-fontconfig-devel.sgml && \ mv devel-man/manpage.refs func.refs && \ mv devel-man/*.3 . && \ $(RM) devel-man/manpage.* && \ rmdir devel-man || rm $@ || : confdir.sgml: $(srcdir)/confdir.sgml.in $(AM_V_GEN) sed -e 's,@BASECONFIGDIR\@,${BASECONFIGDIR},' $(srcdir)/$@.in | awk '{if (NR > 1) printf("\n"); printf("%s", $$0);}' > $@ ## $(DOC_FUNCS_SGML): $(DOC_FUNCS_FNCS) $(srcdir)/edit-sgml.py $(srcdir)/func.sgml $(TXT_FILES): $(DOCS_DEPS) $(PDF_FILES): $(DOCS_DEPS) $(HTML_FILES): $(DOCS_DEPS) local-fontconfig-user.sgml: $(srcdir)/fontconfig-user.sgml $(AM_V_GEN) $(LN_S) $(srcdir)/fontconfig-user.sgml $@; \ [ ! -f $(builddir)/fontconfig-user.sgml ] && cp -a $(srcdir)/fontconfig-user.sgml $(builddir)/fontconfig-user.sgml || : local-fontconfig-devel.sgml: $(srcdir)/fontconfig-devel.sgml $(AM_V_GEN) $(LN_S) $(srcdir)/fontconfig-devel.sgml $@; \ [ ! -f $(builddir)/fontconfig-devel.sgml ] && cp -a $(srcdir)/fontconfig-devel.sgml $(builddir)/fontconfig-devel.sgml || : # all-local: $(BUILT_DOCS) clean-local: $(RM) -r devel-man [ "x$(builddir)" != "x$(srcdir)" ] && $(RM) $(builddir)/*.sgml || : dist-local-check-docs-enabled: @true else .fncs.sgml: $(AM_V_GEN) $(RM) $@; \ touch -r $< $@ all-local: clean-local: dist-local-check-docs-enabled: @echo "*** --enable-man must be used in order to make dist" @false endif # force doc rebuild after configure dist-hook-local: dist-local-check-docs-enabled -include $(top_srcdir)/git.mk fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/cache-version.sgml.in000066400000000000000000000022761503113465200261650ustar00rootroot00000000000000 @CACHE_VERSION@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/check-missing-doc000066400000000000000000000002261503113465200253510ustar00rootroot00000000000000#!/bin/sh set -e top_srcdir=${top_srcdir:-..} top_builddir=${top_builddir:-..} ${top_srcdir}/doc/check-missing-doc.py ${top_srcdir} ${top_builddir} fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/check-missing-doc.py000077500000000000000000000027731503113465200260140ustar00rootroot00000000000000#! /usr/bin/env python3 # Copyright (C) 2025 fontconfig Authors # SPDX-License-Identifier: HPND import argparse import glob import re import sys from pathlib import Path parser = argparse.ArgumentParser() parser.add_argument('srcdir') parser.add_argument('builddir') args = parser.parse_args() h_apis = [] d_apis = [] header_files = glob.glob(str(Path(args.builddir) / 'fontconfig' / '*.h')) + glob.glob(str(Path(args.srcdir) / 'fontconfig' / '*.h')) for fn in header_files: with open(fn) as f: for s in f: if re.search(r'^Fc', s) and not re.search('FcPublic', s): res = re.sub(r'[^a-zA-Z0-9].*', '', s) h_apis += [res] m = re.search(r'#\s*define\s+(Fc[a-zA-Z]+)\s*\(.*$', s) if m: h_apis += [m.group(1)] h_apis.sort() doc_files = glob.glob(str(Path(args.srcdir) / 'doc' / '*.fncs')) for fn in doc_files: with open(fn) as f: for s in f: if re.search(r'@FUNC[+]*@', s): d_apis += [s.split()[1]] d_apis.sort() missing_in_doc = list(set(h_apis) - set(d_apis)) missing_in_header = list(set(d_apis) - set(h_apis)) if len(missing_in_doc) == 0 and len(missing_in_header) == 0: sys.exit(0) if len(missing_in_doc) > 0: print('Missing API documentation:') for s in missing_in_doc: print(f'\t{s}') print('') if len(missing_in_header) > 0: print('API available in documentation only:') for s in missing_in_header: print(f'\t{s}') print('') sys.exit(1) fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/check-whitespace-in-args000066400000000000000000000001611503113465200266250ustar00rootroot00000000000000#! /bin/sh set -e top_srcdir=${top_srcdir:-..} ${top_srcdir}/doc/check-whitespace-in-args.py ${top_srcdir}/doc fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/check-whitespace-in-args.py000077500000000000000000000007711503113465200272660ustar00rootroot00000000000000#! /usr/bin/env python3 import argparse import glob import re import sys from pathlib import Path ret = 0 parser = argparse.ArgumentParser() parser.add_argument('path') args = parser.parse_args() for fn in glob.glob(str(Path(args.path) / '*.fncs')): with open(fn) as f: for i, line in enumerate(f): if re.search(r'[\w\[\]]+\s+@ARG', line, re.A): ret = 1 print("{file}:{line}\t{str}".format(file=fn, line=i+1, str=line.rstrip())) sys.exit(ret) fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/confdir.sgml.in000066400000000000000000000023701503113465200250560ustar00rootroot00000000000000 /etc/fonts fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/edit-sgml.py000077500000000000000000000122021503113465200243760ustar00rootroot00000000000000#!/usr/bin/env python3 # # fontconfig/doc/edit-sgml.py # # Copyright © 2003 Keith Packard # Copyright © 2020 Tim-Philipp Müller # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. import argparse import sys import re parser = argparse.ArgumentParser() parser.add_argument('template') parser.add_argument('input') parser.add_argument('output') args = parser.parse_known_args() template_fn = args[0].template output_fn = args[0].output input_fn = args[0].input # ------------- # Read template # ------------- with open(template_fn, 'r', encoding='utf8') as f: template_text = f.read() template_lines = template_text.strip().split('\n') # ------------------------------------- # Read replacement sets from .fncs file # ------------------------------------- replacement_sets = [] # TODO: also allow '-' for stdin with open(input_fn, 'r', encoding='utf8') as f: fncs_text = f.read() # split into replacement sets fncs_chunks = fncs_text.strip().split('@@') for chunk in fncs_chunks: # get rid of any preamble such as license and FcFreeTypeQueryAll decl in fcfreetype.fncs start = chunk.find('@') if start: chunk = chunk[start:] # split at '@' and remove empty lines (keep it simple instead of doing fancy # things with regular expression matches, we control the input after all) lines = [line for line in chunk.split('@') if line.strip()] replacement_set = {} while lines: tag = lines.pop(0).strip() # FIXME: this hard codes the tag used in funcs.sgml - we're lazy if tag.startswith('PROTOTYPE'): text = '' else: text = lines.pop(0).strip() if text.endswith('%'): text = text[:-1] + ' ' replacement_set[tag] = text if replacement_set: replacement_sets += [replacement_set] # ---------------- # Open output file # ---------------- if output_fn == '-': fout = sys.stdout else: fout = open(output_fn, "w", encoding='utf8') # ---------------- # Process template # ---------------- def do_replace(template_lines, rep, tag_suffix=''): skip_tag = None skip_lines = False loop_lines = [] loop_tag = None for t_line in template_lines: # This makes processing easier and is the case for our templates if t_line.startswith('@') and not t_line.endswith('@'): sys.exit('Template lines starting with @ are expected to end with @, please fix me!') if loop_tag: loop_lines += [t_line] # Check if line starts with a directive if t_line.startswith('@?'): tag = t_line[2:-1] + tag_suffix if skip_tag: sys.exit('Recursive skipping not supported, please fix me!') skip_tag = tag skip_lines = tag not in rep elif t_line.startswith('@:'): if not skip_tag: sys.exit('Skip else but no active skip list?!') skip_lines = skip_tag in rep elif t_line.startswith('@;'): if not skip_tag: sys.exit('Skip end but no active skip list?!') skip_tag = None skip_lines = False elif t_line.startswith('@{'): if loop_tag or tag_suffix != '': sys.exit('Recursive looping not supported, please fix me!') loop_tag = t_line[2:-1] elif t_line.startswith('@}'): tag = t_line[2:-1] + tag_suffix if not loop_tag: sys.exit('Loop end but no active loop?!') if loop_tag != tag: sys.exit(f'Loop end but loop tag mismatch: {loop_tag} != {tag}!') loop_lines.pop() # remove loop end directive suffix = '+' while loop_tag + suffix in rep: do_replace(loop_lines, rep, suffix) suffix += '+' loop_tag = None loop_lines = [] else: if not skip_lines: # special-case inline optional substitution (hard-codes specific pattern in funcs.sgml because we're lazy) output_line = re.sub(r'@\?(RET)@@RET@@:@(void)@;@', lambda m: rep.get(m.group(1) + tag_suffix, m.group(2)), t_line) # replace any substitution tags with their respective substitution text output_line = re.sub(r'@(\w+)@', lambda m: rep.get(m.group(1) + tag_suffix, ''), output_line) print(output_line, file=fout) # process template for each replacement set for rep in replacement_sets: do_replace(template_lines, rep) fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/extract-man-list.py000077500000000000000000000060031503113465200257070ustar00rootroot00000000000000#!/usr/bin/env python3 # # fontconfig/doc/extract-man-list.py # # Parses .fncs files and extracts list of man pages that will be generated # # Copyright © 2020 Tim-Philipp Müller # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. import sys import re replacement_sets = [] # ------------------------------------- # Read replacement sets from .fncs file # ------------------------------------- def read_fncs_file(fn): global replacement_sets with open(fn, 'r', encoding='utf8') as f: fncs_text = f.read() # split into replacement sets fncs_chunks = fncs_text.strip().split('@@') for chunk in fncs_chunks: # get rid of any preamble such as license and FcFreeTypeQueryAll decl in fcfreetype.fncs start = chunk.find('@') if start: chunk = chunk[start:] # split at '@' and remove empty lines (keep it simple instead of doing fancy # things with regular expression matches, we control the input after all) lines = [line for line in chunk.split('@') if line.strip()] replacement_set = {} while lines: tag = lines.pop(0).strip() # FIXME: this hard codes the tag used in funcs.sgml - we're lazy if tag.startswith('PROTOTYPE'): text = '' else: text = lines.pop(0).strip() if text.endswith('%'): text = text[:-1] + ' ' replacement_set[tag] = text if replacement_set: replacement_sets += [replacement_set] # ---------------------------------------------------------------------------- # Main # ---------------------------------------------------------------------------- if len(sys.argv) < 2: sys.exit('Usage: {} FILE1.FNCS [FILE2.FNCS...]'.format(sys.argv[0])) fout = sys.stdout for input_fn in sys.argv[1:]: read_fncs_file(input_fn) # process template for each replacement set for rep in replacement_sets: if 'FUNC+' in rep: man_page_title = rep.get('TITLE', rep['FUNC']) else: man_page_title = rep['FUNC'] print(man_page_title) fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/fcatomic.fncs000066400000000000000000000070001503113465200245740ustar00rootroot00000000000000/* * fontconfig/doc/fcatomic.fncs * * Copyright © 2003 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ @RET@ FcAtomic * @FUNC@ FcAtomicCreate @TYPE1@ const FcChar8 * @ARG1@ file @PURPOSE@ create an FcAtomic object @DESC@ Creates a data structure containing data needed to control access to file. Writing is done to a separate file. Once that file is complete, the original configuration file is atomically replaced so that reading process always see a consistent and complete file without the need to lock for reading. @@ @RET@ FcBool @FUNC@ FcAtomicLock @TYPE1@ FcAtomic * @ARG1@ atomic @PURPOSE@ lock a file @DESC@ Attempts to lock the file referenced by atomic. Returns FcFalse if the file is already locked, else returns FcTrue and leaves the file locked. @@ @RET@ FcChar8 * @FUNC@ FcAtomicNewFile @TYPE1@ FcAtomic * @ARG1@ atomic @PURPOSE@ return new temporary file name @DESC@ Returns the filename for writing a new version of the file referenced by atomic. @@ @RET@ FcChar8 * @FUNC@ FcAtomicOrigFile @TYPE1@ FcAtomic * @ARG1@ atomic @PURPOSE@ return original file name @DESC@ Returns the file referenced by atomic. @@ @RET@ FcBool @FUNC@ FcAtomicReplaceOrig @TYPE1@ FcAtomic * @ARG1@ atomic @PURPOSE@ replace original with new @DESC@ Replaces the original file referenced by atomic with the new file. Returns FcFalse if the file cannot be replaced due to permission issues in the filesystem. Otherwise returns FcTrue. @@ @RET@ void @FUNC@ FcAtomicDeleteNew @TYPE1@ FcAtomic * @ARG1@ atomic @PURPOSE@ delete new file @DESC@ Deletes the new file. Used in error recovery to back out changes. @@ @RET@ void @FUNC@ FcAtomicUnlock @TYPE1@ FcAtomic * @ARG1@ atomic @PURPOSE@ unlock a file @DESC@ Unlocks the file. @@ @RET@ void @FUNC@ FcAtomicDestroy @TYPE1@ FcAtomic * @ARG1@ atomic @PURPOSE@ destroy an FcAtomic object @DESC@ Destroys atomic. @@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/fcblanks.fncs000066400000000000000000000042401503113465200245750ustar00rootroot00000000000000/* * fontconfig/doc/fcblanks.fncs * * Copyright © 2003 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ @RET@ FcBlanks * @FUNC@ FcBlanksCreate @TYPE1@ void @PURPOSE@ Create an FcBlanks @DESC@ FcBlanks is deprecated. This function always returns NULL. @@ @RET@ void @FUNC@ FcBlanksDestroy @TYPE1@ FcBlanks * @ARG1@ b @PURPOSE@ Destroy and FcBlanks @DESC@ FcBlanks is deprecated. This function does nothing. @@ @RET@ FcBool @FUNC@ FcBlanksAdd @TYPE1@ FcBlanks * @ARG1@ b @TYPE2@ FcChar32% @ARG2@ ucs4 @PURPOSE@ Add a character to an FcBlanks @DESC@ FcBlanks is deprecated. This function always returns FALSE. @@ @RET@ FcBool @FUNC@ FcBlanksIsMember @TYPE1@ FcBlanks * @ARG1@ b @TYPE2@ FcChar32% @ARG2@ ucs4 @PURPOSE@ Query membership in an FcBlanks @DESC@ FcBlanks is deprecated. This function always returns FALSE. @@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/fccache.fncs000066400000000000000000000105501503113465200243670ustar00rootroot00000000000000/* * Copyright © 2007 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ @RET@ const FcChar8 * @FUNC@ FcCacheDir @TYPE1@ const FcCache * @ARG1@ cache @PURPOSE@ Return directory of cache @DESC@ This function returns the directory from which the cache was constructed. @@ @RET@ FcFontSet * @FUNC@ FcCacheCopySet @TYPE1@ const FcCache * @ARG1@ cache @PURPOSE@ Returns a copy of the fontset from cache @DESC@ The returned fontset contains each of the font patterns from cache. This fontset may be modified, but the patterns from the cache are read-only. @@ @RET@ const FcChar8 * @FUNC@ FcCacheSubdir @TYPE1@ const FcCache * @ARG1@ cache @TYPE2@ int% @ARG2@ i @PURPOSE@ Return the i'th subdirectory. @DESC@ The set of subdirectories stored in a cache file are indexed by this function, i should range from 0 to n-1, where n is the return value from FcCacheNumSubdir. @@ @RET@ int @FUNC@ FcCacheNumSubdir @TYPE1@ const FcCache * @ARG1@ cache @PURPOSE@ Return the number of subdirectories in cache. @DESC@ This returns the total number of subdirectories in the cache. @@ @RET@ int @FUNC@ FcCacheNumFont @TYPE1@ const FcCache * @ARG1@ cache @PURPOSE@ Returns the number of fonts in cache. @DESC@ This returns the number of fonts which would be included in the return from FcCacheCopySet. @@ @RET@ FcBool @FUNC@ FcDirCacheClean @TYPE1@ const FcChar8 * @ARG1@ cache_dir @TYPE2@ FcBool% @ARG2@ verbose @PURPOSE@ Clean up a cache directory @DESC@ This tries to clean up the cache directory of cache_dir. This returns FcTrue if the operation is successfully complete. otherwise FcFalse. @SINCE@ 2.9.91 @@ @RET@ void @FUNC@ FcCacheCreateTagFile @TYPE1@ const FcConfig * @ARG1@ config @PURPOSE@ Create CACHEDIR.TAG at cache directory. @DESC@ This tries to create CACHEDIR.TAG file at the cache directory registered to config. @SINCE@ 2.9.91 @@ @RET@ FcBool @FUNC@ FcDirCacheCreateUUID @TYPE1@ FcChar8 * @ARG1@ dir @TYPE2@ FcBool% @ARG2@ force @TYPE3@ FcConfig * @ARG3@ config @PURPOSE@ Create .uuid file at a directory @DESC@ This function is deprecated. it doesn't take any effects. @SINCE@ 2.12.92 @@ @RET@ FcBool @FUNC@ FcDirCacheDeleteUUID @TYPE1@ const FcChar8 * @ARG1@ dir @TYPE2@ FcConfig * @ARG2@ config @PURPOSE@ Delete .uuid file @DESC@ This is to delete .uuid file containing an UUID at a font directory of dir. @SINCE@ 2.13.1 @@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/fccharset.fncs000066400000000000000000000226451503113465200247650ustar00rootroot00000000000000/* * fontconfig/doc/fccharset.fncs * * Copyright © 2003 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ @RET@ FcCharSet * @FUNC@ FcCharSetCreate @TYPE1@ void @PURPOSE@ Create an empty character set @DESC@ FcCharSetCreate allocates and initializes a new empty character set object. @@ @RET@ void @FUNC@ FcCharSetDestroy @TYPE1@ FcCharSet * @ARG1@ fcs @PURPOSE@ Destroy a character set @DESC@ FcCharSetDestroy decrements the reference count fcs. If the reference count becomes zero, all memory referenced is freed. @@ @RET@ FcBool @FUNC@ FcCharSetAddChar @TYPE1@ FcCharSet * @ARG1@ fcs @TYPE2@ FcChar32% @ARG2@ ucs4 @PURPOSE@ Add a character to a charset @DESC@ FcCharSetAddChar adds a single Unicode char to the set, returning FcFalse on failure, either as a result of a constant set or from running out of memory. @@ @RET@ FcBool @FUNC@ FcCharSetDelChar @TYPE1@ FcCharSet * @ARG1@ fcs @TYPE2@ FcChar32% @ARG2@ ucs4 @PURPOSE@ Delete a character from a charset @DESC@ FcCharSetDelChar deletes a single Unicode char from the set, returning FcFalse on failure, either as a result of a constant set or from running out of memory. @SINCE@ 2.9.0 @@ @RET@ FcCharSet * @FUNC@ FcCharSetCopy @TYPE1@ FcCharSet * @ARG1@ src @PURPOSE@ Copy a charset @DESC@ Makes a copy of src; note that this may not actually do anything more than increment the reference count on src. @@ @RET@ FcBool @FUNC@ FcCharSetEqual @TYPE1@ const FcCharSet * @ARG1@ a @TYPE2@ const FcCharSet * @ARG2@ b @PURPOSE@ Compare two charsets @DESC@ Returns whether a and b contain the same set of Unicode chars. @@ @RET@ FcCharSet * @FUNC@ FcCharSetIntersect @TYPE1@ const FcCharSet * @ARG1@ a @TYPE2@ const FcCharSet * @ARG2@ b @PURPOSE@ Intersect charsets @DESC@ Returns a set including only those chars found in both a and b. @@ @RET@ FcCharSet * @FUNC@ FcCharSetUnion @TYPE1@ const FcCharSet * @ARG1@ a @TYPE2@ const FcCharSet * @ARG2@ b @PURPOSE@ Add charsets @DESC@ Returns a set including only those chars found in either a or b. @@ @RET@ FcCharSet * @FUNC@ FcCharSetSubtract @TYPE1@ const FcCharSet * @ARG1@ a @TYPE2@ const FcCharSet * @ARG2@ b @PURPOSE@ Subtract charsets @DESC@ Returns a set including only those chars found in a but not b. @@ @RET@ FcBool @FUNC@ FcCharSetMerge @TYPE1@ FcCharSet * @ARG1@ a @TYPE2@ const FcCharSet * @ARG2@ b @TYPE3@ FcBool * @ARG3@ changed @PURPOSE@ Merge charsets @DESC@ Adds all chars in b to a. In other words, this is an in-place version of FcCharSetUnion. If changed is not NULL, then it returns whether any new chars from b were added to a. Returns FcFalse on failure, either when a is a constant set or from running out of memory. @@ @RET@ FcBool @FUNC@ FcCharSetHasChar @TYPE1@ const FcCharSet * @ARG1@ fcs @TYPE2@ FcChar32% @ARG2@ ucs4 @PURPOSE@ Check a charset for a char @DESC@ Returns whether fcs contains the char ucs4. @@ @RET@ FcChar32 @FUNC@ FcCharSetCount @TYPE1@ const FcCharSet * @ARG1@ a @PURPOSE@ Count entries in a charset @DESC@ Returns the total number of Unicode chars in a. @@ @RET@ FcChar32 @FUNC@ FcCharSetIntersectCount @TYPE1@ const FcCharSet * @ARG1@ a @TYPE2@ const FcCharSet * @ARG2@ b @PURPOSE@ Intersect and count charsets @DESC@ Returns the number of chars that are in both a and b. @@ @RET@ FcChar32 @FUNC@ FcCharSetSubtractCount @TYPE1@ const FcCharSet * @ARG1@ a @TYPE2@ const FcCharSet * @ARG2@ b @PURPOSE@ Subtract and count charsets @DESC@ Returns the number of chars that are in a but not in b. @@ @RET@ FcBool @FUNC@ FcCharSetIsSubset @TYPE1@ const FcCharSet * @ARG1@ a @TYPE2@ const FcCharSet * @ARG2@ b @PURPOSE@ Test for charset inclusion @DESC@ Returns whether a is a subset of b. @@ @RET@ FcChar32 @FUNC@ FcCharSetFirstPage @TYPE1@ const FcCharSet * @ARG1@ a @TYPE2@ FcChar32[FC_CHARSET_MAP_SIZE]% @ARG2@ map @TYPE3@ FcChar32 * @ARG3@ next @PURPOSE@ Start enumerating charset contents @DESC@ Builds an array of bits in map marking the first page of Unicode coverage of a. *next is set to contains the base code point for the next page in a. Returns the base code point for the page, or FC_CHARSET_DONE if a contains no pages. As an example, if FcCharSetFirstPage returns 0x300 and fills map with 0xffffffff 0xffffffff 0x01000008 0x44300002 0xffffd7f0 0xfffffffb 0xffff7fff 0xffff0003 Then the page contains code points 0x300 through 0x33f (the first 64 code points on the page) because map[0] and map[1] both have all their bits set. It also contains code points 0x343 (0x300 + 32*2 + (4-1)) and 0x35e (0x300 + 32*2 + (31-1)) because map[2] has the 4th and 31st bits set. The code points represented by map[3] and later are left as an exercise for the reader ;). @@ @RET@ FcChar32 @FUNC@ FcCharSetNextPage @TYPE1@ const FcCharSet * @ARG1@ a @TYPE2@ FcChar32[FC_CHARSET_MAP_SIZE]% @ARG2@ map @TYPE3@ FcChar32 * @ARG3@ next @PURPOSE@ Continue enumerating charset contents @DESC@ Builds an array of bits in map marking the Unicode coverage of a for page containing *next (see the FcCharSetFirstPage description for details). *next is set to contains the base code point for the next page in a. Returns the base of code point for the page, or FC_CHARSET_DONE if a does not contain *next. @@ @RET@ FcChar32 @FUNC@ FcCharSetCoverage @TYPE1@ const FcCharSet * @ARG1@ a @TYPE2@ FcChar32% @ARG2@ page @TYPE3@ FcChar32[8]% @ARG3@ result @PURPOSE@ DEPRECATED return coverage for a Unicode page @DESC@ DEPRECATED This function returns a bitmask in result which indicates which code points in page are included in a. FcCharSetCoverage returns the next page in the charset which has any coverage. @@ @RET@ FcCharSet * @FUNC@ FcCharSetNew @TYPE1@ void @PURPOSE@ DEPRECATED alias for FcCharSetCreate @DESC@ FcCharSetNew is a DEPRECATED alias for FcCharSetCreate. @@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/fcconfig.fncs000066400000000000000000000604621503113465200246000ustar00rootroot00000000000000/* * fontconfig/doc/fcconfig.fncs * * Copyright © 2003 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ @RET@ FcConfig * @FUNC@ FcConfigCreate @TYPE1@ void @PURPOSE@ Create a configuration @DESC@ Creates an empty configuration. @@ @RET@ FcConfig * @FUNC@ FcConfigReference @TYPE1@ FcConfig * @ARG1@ config @PURPOSE@ Increment config reference count @DESC@ Add another reference to config. Configs are freed only when the reference count reaches zero. If config is NULL, the current configuration is used. In that case this function will be similar to FcConfigGetCurrent() except that it increments the reference count before returning and the user is responsible for destroying the configuration when not needed anymore. @@ @RET@ void @FUNC@ FcConfigDestroy @TYPE1@ FcConfig * @ARG1@ config @PURPOSE@ Destroy a configuration @DESC@ Decrements the config reference count. If all references are gone, destroys the configuration and any data associated with it. Note that calling this function with the return from FcConfigGetCurrent will cause a new configuration to be created for use as current configuration. @@ @RET@ FcBool @FUNC@ FcConfigSetCurrent @TYPE1@ FcConfig * @ARG1@ config @PURPOSE@ Set configuration as default @DESC@ Sets the current default configuration to config. Implicitly calls FcConfigBuildFonts if necessary, and FcConfigReference() to inrease the reference count in config since 2.12.0, returning FcFalse if that call fails. @@ @RET@ FcConfig * @FUNC@ FcConfigGetCurrent @TYPE1@ void @PURPOSE@ Return current configuration @DESC@ Returns the current default configuration. @@ @RET@ FcConfig * @FUNC@ FcConfigSetFontSetFilter @TYPE1@ FcConfig * @ARG1@ config @TYPE2@ FcFilterFontSetFunc% @ARG2@ filter_func @TYPE3@ FcDestroyFunc% @ARG3@ destroy_data_func @TYPE4@ void * @ARG4@ user_data @PURPOSE@ Set a predicate function to filter fontsets @DESC@ Sets filter_func as a predicate function and filter out fontsets in config as desired. filter_func will be called with a font pattern and user_data only when loading caches. When config is going to be destroyed, user_data will be destroyed through destroy_data_func if it is set. @SINCE@ 2.16.0 @@ @RET@ FcBool @FUNC@ FcConfigAcceptFilter @TYPE1@ FcConfig * @ARG1@ config @TYPE2@ const FcPattern * @ARG2@ font @PURPOSE@ Test whether the given pattern matches filter @DESC@ This triggers a predicate function set by FcConfigSetFontSetFilter and return FcTrue if font matches something they expect. otherwise FcFalse. @SINCE@ 2.16.0 @@ @RET@ FcBool @FUNC@ FcConfigUptoDate @TYPE1@ FcConfig * @ARG1@ config @PURPOSE@ Check timestamps on config files @DESC@ Checks all of the files related to config and returns whether any of them has been modified since the configuration was created. If config is NULL, the current configuration is used. @@ @RET@ FcChar8 * @FUNC@ FcConfigHome @TYPE1@ void @PURPOSE@ return the current home directory. @DESC@ Return the current user's home directory, if it is available, and if using it is enabled, and NULL otherwise. See also FcConfigEnableHome). @@ @RET@ FcBool @FUNC@ FcConfigEnableHome @TYPE1@ FcBool% @ARG1@ enable @PURPOSE@ controls use of the home directory. @DESC@ If enable is FcTrue, then Fontconfig will use various files which are specified relative to the user's home directory (using the ~ notation in the configuration). When enable is FcFalse, then all use of the home directory in these contexts will be disabled. The previous setting of the value is returned. @@ @RET@ FcBool @FUNC@ FcConfigBuildFonts @TYPE1@ FcConfig * @ARG1@ config @PURPOSE@ Build font database @DESC@ Builds the set of available fonts for the given configuration. Note that any changes to the configuration after this call (through FcConfigParseAndLoad or FcConfigParseAndLoadFromMemory) have indeterminate effects. (On the other hand, application fonts can still be modified through FcConfigAppFontAddFile, FcConfigAppFontAddDir and FcConfigAppFontClear). Returns FcFalse if this operation runs out of memory. If config is NULL, the current configuration is used. @@ @RET@ FcStrList * @FUNC@ FcConfigGetConfigDirs @TYPE1@ FcConfig * @ARG1@ config @PURPOSE@ Get config directories @DESC@ Returns the list of font directories specified in the configuration files for config. Does not include any subdirectories. If config is NULL, the current configuration is used. @@ @RET@ FcStrList * @FUNC@ FcConfigGetFontDirs @TYPE1@ FcConfig * @ARG1@ config @PURPOSE@ Get font directories @DESC@ Returns the list of font directories in config. This includes the configured font directories along with any directories below those in the filesystem. If config is NULL, the current configuration is used. @@ @RET@ FcStrList * @FUNC@ FcConfigGetConfigFiles @TYPE1@ FcConfig * @ARG1@ config @PURPOSE@ Get config files @DESC@ Returns the list of known configuration files used to generate config. If config is NULL, the current configuration is used. @@ @RET@ FcChar8 * @FUNC@ FcConfigGetCache @TYPE1@ FcConfig * @ARG1@ config @PURPOSE@ DEPRECATED used to return per-user cache filename @DESC@ With fontconfig no longer using per-user cache files, this function now simply returns NULL to indicate that no per-user file exists. @@ @RET@ FcStrList * @FUNC@ FcConfigGetCacheDirs @TYPE1@ const FcConfig * @ARG1@ config @PURPOSE@ return the list of directories searched for cache files @DESC@ FcConfigGetCacheDirs returns a string list containing all of the directories that fontconfig will search when attempting to load a cache file for a font directory. If config is NULL, the current configuration is used. @@ @RET@ FcFontSet * @FUNC@ FcConfigGetFonts @TYPE1@ FcConfig * @ARG1@ config @TYPE2@ FcSetName% @ARG2@ set @PURPOSE@ Get config font set @DESC@ Returns one of the two sets of fonts from the configuration as specified by set. This font set is owned by the library and must not be modified or freed. If config is NULL, the current configuration is used. This function isn't MT-safe. FcConfigReference must be called before using this and then FcConfigDestroy when the return value is no longer referenced. @@ @RET@ FcBlanks * @FUNC@ FcConfigGetBlanks @TYPE1@ FcConfig * @ARG1@ config @PURPOSE@ Get config blanks @DESC@ FcBlanks is deprecated. This function always returns NULL. @@ @RET@ int @FUNC@ FcConfigGetRescanInterval @TYPE1@ FcConfig * @ARG1@ config @PURPOSE@ Get config rescan interval @DESC@ Returns the interval between automatic checks of the configuration (in seconds) specified in config. The configuration is checked during a call to FcFontList when this interval has passed since the last check. An interval setting of zero disables automatic checks. If config is NULL, the current configuration is used. @@ @RET@ FcBool @FUNC@ FcConfigSetRescanInterval @TYPE1@ FcConfig * @ARG1@ config @TYPE2@ int% @ARG2@ rescanInterval @PURPOSE@ Set config rescan interval @DESC@ Sets the rescan interval. Returns FcFalse if the interval cannot be set (due to allocation failure). Otherwise returns FcTrue. An interval setting of zero disables automatic checks. If config is NULL, the current configuration is used. @@ @RET@ FcBool @FUNC@ FcConfigAppFontAddFile @TYPE1@ FcConfig * @ARG1@ config @TYPE2@ const FcChar8 * @ARG2@ file @PURPOSE@ Add font file to font database @DESC@ Adds an application-specific font to the configuration. Returns FcFalse if the fonts cannot be added (due to allocation failure or no fonts found). Otherwise returns FcTrue. If config is NULL, the current configuration is used. @@ @RET@ FcBool @FUNC@ FcConfigAppFontAddDir @TYPE1@ FcConfig * @ARG1@ config @TYPE2@ const FcChar8 * @ARG2@ dir @PURPOSE@ Add fonts from directory to font database @DESC@ Scans the specified directory for fonts, adding each one found to the application-specific set of fonts. Returns FcFalse if the fonts cannot be added (due to allocation failure). Otherwise returns FcTrue. If config is NULL, the current configuration is used. @@ @RET@ void @FUNC@ FcConfigAppFontClear @TYPE1@ FcConfig * @ARG1@ config @PURPOSE@ Remove all app fonts from font database @DESC@ Clears the set of application-specific fonts. If config is NULL, the current configuration is used. @@ @RET@ FcBool @FUNC@ FcConfigSubstituteWithPat @TYPE1@ FcConfig * @ARG1@ config @TYPE2@ FcPattern * @ARG2@ p @TYPE3@ FcPattern * @ARG3@ p_pat @TYPE4@ FcMatchKind% @ARG4@ kind @PURPOSE@ Execute substitutions @DESC@ Performs the sequence of pattern modification operations, if kind is FcMatchPattern, then those tagged as pattern operations are applied, else if kind is FcMatchFont, those tagged as font operations are applied and p_pat is used for <test> elements with target=pattern. Returns FcFalse if the substitution cannot be performed (due to allocation failure). Otherwise returns FcTrue. If config is NULL, the current configuration is used. @@ @RET@ FcBool @FUNC@ FcConfigSubstitute @TYPE1@ FcConfig * @ARG1@ config @TYPE2@ FcPattern * @ARG2@ p @TYPE3@ FcMatchKind% @ARG3@ kind @PURPOSE@ Execute substitutions @DESC@ Calls FcConfigSubstituteWithPat setting p_pat to NULL. Returns FcFalse if the substitution cannot be performed (due to allocation failure). Otherwise returns FcTrue. If config is NULL, the current configuration is used. @@ @RET@ FcPattern * @FUNC@ FcFontMatch @TYPE1@ FcConfig * @ARG1@ config @TYPE2@ FcPattern * @ARG2@ p @TYPE3@ FcResult * @ARG3@ result @PURPOSE@ Return best font @DESC@ Finds the font in sets most closely matching pattern and returns the result of FcFontRenderPrepare for that font and the provided pattern. This function should be called only after FcConfigSubstitute and FcDefaultSubstitute have been called for p; otherwise the results will not be correct. If config is NULL, the current configuration is used. @@ @RET@ FcFontSet * @FUNC@ FcFontSort @TYPE1@ FcConfig * @ARG1@ config @TYPE2@ FcPattern * @ARG2@ p @TYPE3@ FcBool% @ARG3@ trim @TYPE4@ FcCharSet ** @ARG4@ csp @TYPE5@ FcResult * @ARG5@ result @PURPOSE@ Return list of matching fonts @DESC@ Returns the list of fonts sorted by closeness to p. If trim is FcTrue, elements in the list which don't include Unicode coverage not provided by earlier elements in the list are elided. The union of Unicode coverage of all of the fonts is returned in csp, if csp is not NULL. This function should be called only after FcConfigSubstitute and FcDefaultSubstitute have been called for p; otherwise the results will not be correct. The returned FcFontSet references FcPattern structures which may be shared by the return value from multiple FcFontSort calls, applications must not modify these patterns. Instead, they should be passed, along with p to FcFontRenderPrepare which combines them into a complete pattern. The FcFontSet returned by FcFontSort is destroyed by calling FcFontSetDestroy. If config is NULL, the current configuration is used. @@ @RET@ FcPattern * @FUNC@ FcFontRenderPrepare @TYPE1@ FcConfig * @ARG1@ config @TYPE2@ FcPattern * @ARG2@ pat @TYPE3@ FcPattern * @ARG3@ font @PURPOSE@ Prepare pattern for loading font file @DESC@ Creates a new pattern consisting of elements of font not appearing in pat, elements of pat not appearing in font and the best matching value from pat for elements appearing in both. The result is passed to FcConfigSubstituteWithPat with kind FcMatchFont and then returned. @@ @RET@ FcFontSet * @FUNC@ FcFontList @TYPE1@ FcConfig * @ARG1@ config @TYPE2@ FcPattern * @ARG2@ p @TYPE3@ FcObjectSet * @ARG3@ os @PURPOSE@ List fonts @DESC@ Selects fonts matching p, creates patterns from those fonts containing only the objects in os and returns the set of unique such patterns. If config is NULL, the default configuration is checked to be up to date, and used. @@ @RET@ FcChar8 * @FUNC@ FcConfigFilename @TYPE1@ const FcChar8 * @ARG1@ name @PURPOSE@ Find a config file @DESC@ This function is deprecated and is replaced by FcConfigGetFilename. @@ @RET@ FcChar8 * @FUNC@ FcConfigGetFilename @TYPE1@ FcConfig * @ARG1@ config @TYPE2@ const FcChar8 * @ARG2@ name @PURPOSE@ Find a config file @DESC@ Given the specified external entity name, return the associated filename. This provides applications a way to convert various configuration file references into filename form. A null or empty name indicates that the default configuration file should be used; which file this references can be overridden with the FONTCONFIG_FILE environment variable. Next, if the name starts with ~, it refers to a file in the current users home directory. Otherwise if the name doesn't start with '/', it refers to a file in the default configuration directory; the built-in default directory can be overridden with the FONTCONFIG_PATH environment variable. The result of this function is affected by the FONTCONFIG_SYSROOT environment variable or equivalent functionality. @@ @RET@ FcBool @FUNC@ FcConfigParseAndLoad @TYPE1@ FcConfig * @ARG1@ config @TYPE2@ const FcChar8 * @ARG2@ file @TYPE3@ FcBool% @ARG3@ complain @PURPOSE@ load a configuration file @DESC@ Walks the configuration in 'file' and constructs the internal representation in 'config'. Any include files referenced from within 'file' will be loaded and parsed. If 'complain' is FcFalse, no warning will be displayed if 'file' does not exist. Error and warning messages will be output to stderr. Returns FcFalse if some error occurred while loading the file, either a parse error, semantic error or allocation failure. Otherwise returns FcTrue. After all configuration files / strings have been loaded, with FcConfigParseAndLoad and/or FcConfigParseAndLoadFromMemory, call FcConfigBuildFonts to build the font database. @@ @RET@ FcBool @FUNC@ FcConfigParseAndLoadFromMemory @TYPE1@ FcConfig * @ARG1@ config @TYPE2@ const FcChar8 * @ARG2@ buffer @TYPE3@ FcBool% @ARG3@ complain @PURPOSE@ load a configuration from memory @DESC@ Walks the configuration in 'memory' and constructs the internal representation in 'config'. Any includes files referenced from within 'memory' will be loaded and dparsed. If 'complain' is FcFalse, no warning will be displayed if 'file' does not exist. Error and warning messages will be output to stderr. Returns FcFalse if fsome error occurred while loading the file, either a parse error, semantic error or allocation failure. Otherwise returns FcTrue. After all configuration files / strings have been loaded, with FcConfigParseAndLoad and/or FcConfigParseAndLoadFromMemory, call FcConfigBuildFonts to build the font database. @SINCE@ 2.12.5 @@ @RET@ const FcChar8 * @FUNC@ FcConfigGetSysRoot @TYPE1@ const FcConfig * @ARG1@ config @PURPOSE@ Obtain the system root directory @DESC@ Obtains the system root directory in 'config' if available. All files (including file properties in patterns) obtained from this 'config' are relative to this system root directory. This function isn't MT-safe. FcConfigReference must be called before using this and then FcConfigDestroy when the return value is no longer referenced. @SINCE@ 2.10.92 @@ @RET@ void @FUNC@ FcConfigSetSysRoot @TYPE1@ FcConfig * @ARG1@ config @TYPE2@ const FcChar8 * @ARG2@ sysroot @PURPOSE@ Set the system root directory @DESC@ Set 'sysroot' as the system root directory. All file paths used or created with this 'config' (including file properties in patterns) will be considered or made relative to this 'sysroot'. This allows a host to generate caches for targets at build time. This also allows a cache to be re-targeted to a different base directory if 'FcConfigGetSysRoot' is used to resolve file paths. When setting this on the current config this causes changing current config (calls FcConfigSetCurrent()). @SINCE@ 2.10.92 @@ @RET@ void @FUNC@ FcConfigFileInfoIterInit @TYPE1@ FcConfig * @ARG1@ config @TYPE2@ FcConfigFileInfoIter * @ARG2@ iter @PURPOSE@ Initialize the iterator @DESC@ Initialize 'iter' with the first iterator in the config file information list. The config file information list is stored in numerical order for filenames i.e. how fontconfig actually read them. This function isn't MT-safe. FcConfigReference must be called before using this and then FcConfigDestroy when the relevant values are no longer referenced. @SINCE@ 2.12.91 @@ @RET@ FcBool @FUNC@ FcConfigFileInfoIterNext @TYPE1@ FcConfig * @ARG1@ config @TYPE2@ FcConfigFileInfoIter * @ARG2@ iter @PURPOSE@ Set the iterator to point to the next list @DESC@ Set 'iter' to point to the next node in the config file information list. If there is no next node, FcFalse is returned. This function isn't MT-safe. FcConfigReference must be called before using FcConfigFileInfoIterInit and then FcConfigDestroy when the relevant values are no longer referenced. @SINCE@ 2.12.91 @@ @RET@ FcBool @FUNC@ FcConfigFileInfoIterGet @TYPE1@ FcConfig * @ARG1@ config @TYPE2@ FcConfigFileInfoIter * @ARG2@ iter @TYPE3@ FcChar8 ** @ARG3@ name @TYPE4@ FcChar8 ** @ARG4@ description @TYPE5@ FcBool * @ARG5@ enabled @PURPOSE@ Obtain the configuration file information @DESC@ Obtain the filename, the description and the flag whether it is enabled or not for 'iter' where points to current configuration file information. If the iterator is invalid, FcFalse is returned. This function isn't MT-safe. FcConfigReference must be called before using FcConfigFileInfoIterInit and then FcConfigDestroy when the relevant values are no longer referenced. @SINCE@ 2.12.91 @@ @RET@ FcBool @FUNC@ FcConfigAcceptFont @TYPE1@ FcConfig * @ARG1@ config @TYPE2@ FcPattern * @ARG2@ pat @PURPOSE@ Test whether the given pattern matches deny list @DESC@ fontconfig has the deny list which is built against <rejectfont> directive in configuration file. This function tries to match 'pat' with them and return FcFalse if 'pat' is rejected, otherwise FcTrue. @SINCE@ 2.15.1 @@ @RET@ void @FUNC@ FcConfigPreferAppFont @TYPE1@ FcConfig * @ARG1@ config @TYPE2@ FcBool% @ARG2@ flag @DESC@ Set 'flag' to change the priority of Application fonts. default behavior is turned off for backward compatibility. @SINCE@ 2.17.0 @@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/fcconstant.fncs000066400000000000000000000055571503113465200251700ustar00rootroot00000000000000/* * fontconfig/doc/fcconstant.fncs * * Copyright © 2003 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ @RET@ FcBool @FUNC@ FcNameRegisterConstants @TYPE1@ const FcConstant * @ARG1@ consts @TYPE2@ int% @ARG2@ nconsts @PURPOSE@ Register symbolic constants @DESC@ Deprecated. Does nothing. Returns FcFalse. @@ @RET@ FcBool @FUNC@ FcNameUnregisterConstants @TYPE1@ const FcConstant * @ARG1@ consts @TYPE2@ int% @ARG2@ nconsts @PURPOSE@ Unregister symbolic constants @DESC@ Deprecated. Does nothing. Returns FcFalse. @@ @RET@ const FcConstant * @FUNC@ FcNameGetConstant @TYPE1@ FcChar8 * @ARG1@ string @PURPOSE@ Lookup symbolic constant @DESC@ Return the FcConstant structure related to symbolic constant string. @@ @RET@ const FcConstant * @FUNC@ FcNameGetConstantFor @TYPE1@ FcChar8 * @ARG1@ string @TYPE2@ char * @ARG2@ object @PURPOSE@ Lookup symbolic constant For object @DESC@ Return the FcConstant structure related to symbolic constant string for object. @@ @RET@ FcBool @FUNC@ FcNameConstant @TYPE1@ FcChar8 * @ARG1@ string @TYPE2@ int * @ARG2@ result @PURPOSE@ Get the value for a symbolic constant @DESC@ Returns whether a symbolic constant with name string is registered, placing the value of the constant in result if present. @@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/fcdircache.fncs000066400000000000000000000102121503113465200250610ustar00rootroot00000000000000/* * Copyright © 2007 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that copyright * notice and this permission notice appear in supporting documentation, and * that the name of the copyright holders not be used in advertising or * publicity pertaining to distribution of the software without specific, * written prior permission. The copyright holders make no representations * about the suitability of this software for any purpose. It is provided "as * is" without express or implied warranty. * * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE * OF THIS SOFTWARE. */ @RET@ FcBool @FUNC@ FcDirCacheUnlink @TYPE1@ const FcChar8 * @ARG1@ dir @TYPE2@ FcConfig * @ARG2@ config @PURPOSE@ Remove all caches related to dir @DESC@ Scans the cache directories in config, removing any instances of the cache file for dir. Returns FcFalse when some internal error occurs (out of memory, etc). Errors actually unlinking any files are ignored. @@ @RET@ FcBool @FUNC@ FcDirCacheValid @TYPE1@ const FcChar8 * @ARG1@ dir @PURPOSE@ check directory cache @DESC@ Returns FcTrue if dir has an associated valid cache file, else returns FcFalse @@ @RET@ FcCache * @FUNC@ FcDirCacheLoad @TYPE1@ const FcChar8 * @ARG1@ dir @TYPE2@ FcConfig * @ARG2@ config @TYPE3@ FcChar8 ** @ARG3@ cache_file @PURPOSE@ load a directory cache @DESC@ Loads the cache related to dir. If no cache file exists, returns NULL. The name of the cache file is returned in cache_file, unless that is NULL. See also FcDirCacheRead. @@ @RET@ FcCache * @FUNC@ FcDirCacheRescan @TYPE1@ const FcChar8 * @ARG1@ dir @TYPE2@ FcConfig * @ARG2@ config @PURPOSE@ Re-scan a directory cache @DESC@ Re-scan directories only at dir and update the cache. returns NULL if failed. @SINCE@ 2.11.1 @@ @RET@ FcCache * @FUNC@ FcDirCacheRead @TYPE1@ const FcChar8 * @ARG1@ dir @TYPE2@ FcBool% @ARG2@ force @TYPE3@ FcConfig * @ARG3@ config @PURPOSE@ read or construct a directory cache @DESC@ This returns a cache for dir. If force is FcFalse, then an existing, valid cache file will be used. Otherwise, a new cache will be created by scanning the directory and that returned. @@ @RET@ FcCache * @FUNC@ FcDirCacheLoadFile @TYPE1@ const FcChar8 * @ARG1@ cache_file @TYPE2@ struct stat * @ARG2@ file_stat @PURPOSE@ load a cache file @DESC@ This function loads a directory cache from cache_file. If file_stat is non-NULL, it will be filled with the results of stat(2) on the cache file. @@ @RET@ void @FUNC@ FcDirCacheUnload @TYPE1@ FcCache * @ARG1@ cache @PURPOSE@ unload a cache file @DESC@ This function dereferences cache. When no other references to it remain, all memory associated with the cache will be freed. @@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/fcfile.fncs000066400000000000000000000104161503113465200242440ustar00rootroot00000000000000/* * fontconfig/doc/fcfile.fncs * * Copyright © 2003 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ @RET@ FcBool @FUNC@ FcFileScan @TYPE1@ FcFontSet * @ARG1@ set @TYPE2@ FcStrSet * @ARG2@ dirs @TYPE3@ FcFileCache * @ARG3@ cache @TYPE4@ FcBlanks * @ARG4@ blanks @TYPE5@ const FcChar8 * @ARG5@ file @TYPE6@ FcBool% @ARG6@ force @PURPOSE@ scan a font file @DESC@ Scans a single file and adds all fonts found to set. If force is FcTrue, then the file is scanned even if associated information is found in cache. If file is a directory, it is added to dirs. Whether fonts are found depends on fontconfig policy as well as the current configuration. Internally, fontconfig will ignore BDF and PCF fonts which are not in Unicode (or the effectively equivalent ISO Latin-1) encoding as those are not usable by Unicode-based applications. The configuration can ignore fonts based on filename or contents of the font file itself. Returns FcFalse if any of the fonts cannot be added (due to allocation failure). Otherwise returns FcTrue. @@ @RET@ FcBool @FUNC@ FcFileIsDir @TYPE1@ const FcChar8 * @ARG1@ file @PURPOSE@ check whether a file is a directory @DESC@ Returns FcTrue if file is a directory, otherwise returns FcFalse. @@ @RET@ FcBool @FUNC@ FcDirScan @TYPE1@ FcFontSet * @ARG1@ set @TYPE2@ FcStrSet * @ARG2@ dirs @TYPE3@ FcFileCache * @ARG3@ cache @TYPE4@ FcBlanks * @ARG4@ blanks @TYPE5@ const FcChar8 * @ARG5@ dir @TYPE6@ FcBool% @ARG6@ force @PURPOSE@ scan a font directory without caching it @DESC@ If cache is not zero or if force is FcFalse, this function currently returns FcFalse. Otherwise, it scans an entire directory and adds all fonts found to set. Any subdirectories found are added to dirs. Calling this function does not create any cache files. Use FcDirCacheRead() if caching is desired. @@ @RET@ FcBool @FUNC@ FcDirSave @TYPE1@ FcFontSet * @ARG1@ set @TYPE2@ FcStrSet * @ARG2@ dirs @TYPE3@ const FcChar8 * @ARG3@ dir @PURPOSE@ DEPRECATED: formerly used to save a directory cache @DESC@ This function now does nothing aside from returning FcFalse. It used to creates the per-directory cache file for dir and populates it with the fonts in set and subdirectories in dirs. All of this functionality is now automatically managed by FcDirCacheLoad and FcDirCacheRead. @@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/fcfontations.fncs000066400000000000000000000044701503113465200255140ustar00rootroot00000000000000/* * fontconfig/doc/fcfontations.fncs * * Copyright © 2025 Google LLC. * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ @SYNOPSIS@ #include <fontconfig.h> #include <fcfontations.h> @RET@ unsigned int @FUNC@ FcFontationsQueryAll @TYPE1@ const FcChar8 * @ARG1@ file @TYPE2@ int% @ARG2@ id @TYPE3@ FcBlanks * @ARG3@ blanks @TYPE4@ int * @ARG4@ count @TYPE5@ FcFontSet * @ARG5@ set @PURPOSE@ compute all patterns from font file (and index) @DESC@ UNSTABLE feature. Constructs patterns found in 'file'. Currently pattern is incomplete compared to FcFreeTypeQueryAll() and may deviate from what FreeType indexing produces. Not supported yet, but will follow: If id is -1, then all patterns found in 'file' are added to 'set'. Otherwise, this function works exactly like FcFreeTypeQueryAll()/FcFreeTypeQuery(). The number of faces in 'file' is returned in 'count'. The number of patterns added to 'set' is returned. FcBlanks is deprecated, blanks is ignored and accepted only for compatibility with older code. @SINCE@ 2.17.0 @@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/fcfontset.fncs000066400000000000000000000143631503113465200250140ustar00rootroot00000000000000/* * fontconfig/doc/fcfontset.fncs * * Copyright © 2003 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ @RET@ FcFontSet * @FUNC@ FcFontSetCreate @TYPE1@ void @PURPOSE@ Create a font set @DESC@ Creates an empty font set. @@ @RET@ void @FUNC@ FcFontSetDestroy @TYPE1@ FcFontSet * @ARG1@ s @PURPOSE@ Destroy a font set @DESC@ Destroys a font set. Note that this destroys any referenced patterns as well. @@ @RET@ FcBool @FUNC@ FcFontSetAdd @TYPE1@ FcFontSet * @ARG1@ s @TYPE2@ FcPattern * @ARG2@ font @PURPOSE@ Add to a font set @DESC@ Adds a pattern to a font set. Note that the pattern is not copied before being inserted into the set. Returns FcFalse if the pattern cannot be inserted into the set (due to allocation failure). Otherwise returns FcTrue. @@ @RET@ FcFontSet * @FUNC@ FcFontSetList @TYPE1@ FcConfig * @ARG1@ config @TYPE2@ FcFontSet ** @ARG2@ sets @TYPE3@ int% @ARG3@ nsets @TYPE4@ FcPattern * @ARG4@ pattern @TYPE5@ FcObjectSet * @ARG5@ object_set @PURPOSE@ List fonts from a set of font sets @DESC@ Selects fonts matching pattern from sets, creates patterns from those fonts containing only the objects in object_set and returns the set of unique such patterns. If config is NULL, the default configuration is checked to be up to date, and used. @@ @RET@ FcPattern * @FUNC@ FcFontSetMatch @TYPE1@ FcConfig * @ARG1@ config @TYPE2@ FcFontSet ** @ARG2@ sets @TYPE3@ int% @ARG3@ nsets @TYPE4@ FcPattern * @ARG4@ pattern @TYPE5@ FcResult * @ARG5@ result @PURPOSE@ Return the best font from a set of font sets @DESC@ Finds the font in sets most closely matching pattern and returns the result of FcFontRenderPrepare for that font and the provided pattern. This function should be called only after FcConfigSubstitute and FcDefaultSubstitute have been called for pattern; otherwise the results will not be correct. If config is NULL, the current configuration is used. Returns NULL if an error occurs during this process. @@ @RET@ void @FUNC@ FcFontSetPrint @TYPE1@ FcFontSet * @ARG1@ set @PURPOSE@ Print a set of patterns to stdout @DESC@ This function is useful for diagnosing font related issues, printing the complete contents of every pattern in set. The format of the output is designed to be of help to users and developers, and may change at any time. @@ @RET@ FcFontSet * @FUNC@ FcFontSetSort @TYPE1@ FcConfig * @ARG1@ config @TYPE2@ FcFontSet ** @ARG2@ sets @TYPE3@ int% @ARG3@ nsets @TYPE4@ FcPattern * @ARG4@ pattern @TYPE5@ FcBool% @ARG5@ trim @TYPE6@ FcCharSet ** @ARG6@ csp @TYPE7@ FcResult * @ARG7@ result @PURPOSE@ Return list of matching fonts @DESC@ Returns the list of fonts from sets sorted by closeness to pattern. If trim is FcTrue, elements in the list which don't include Unicode coverage not provided by earlier elements in the list are elided. The union of Unicode coverage of all of the fonts is returned in csp, if csp is not NULL. This function should be called only after FcConfigSubstitute and FcDefaultSubstitute have been called for p; otherwise the results will not be correct. The returned FcFontSet references FcPattern structures which may be shared by the return value from multiple FcFontSort calls, applications cannot modify these patterns. Instead, they should be passed, along with pattern to FcFontRenderPrepare which combines them into a complete pattern. The FcFontSet returned by FcFontSetSort is destroyed by calling FcFontSetDestroy. @@ @RET@ void @FUNC@ FcFontSetSortDestroy @TYPE1@ FcFontSet * @ARG1@ set @PURPOSE@ DEPRECATED destroy a font set @DESC@ This function is DEPRECATED. FcFontSetSortDestroy destroys set by calling FcFontSetDestroy. Applications should use FcFontSetDestroy directly instead. @@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/fcformat.fncs000066400000000000000000000276711503113465200246300ustar00rootroot00000000000000/* * fontconfig/doc/fcformat.fncs * * Copyright © 2008 Behdad Esfahbod * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ @RET@ FcChar8 * @FUNC@ FcPatternFormat @TYPE1@ FcPattern * @ARG1@ pat @TYPE2@ const FcChar8 * @ARG2@ format @PURPOSE@ Format a pattern into a string according to a format specifier @DESC@ Converts given pattern pat into text described by the format specifier format. The return value refers to newly allocated memory which should be freed by the caller using free(), or NULL if format is invalid. The format is loosely modeled after printf-style format string. The format string is composed of zero or more directives: ordinary characters (not "%"), which are copied unchanged to the output stream; and tags which are interpreted to construct text from the pattern in a variety of ways (explained below). Special characters can be escaped using backslash. C-string style special characters like \n and \r are also supported (this is useful when the format string is not a C string literal). It is advisable to always escape curly braces that are meant to be copied to the output as ordinary characters. Each tag is introduced by the character "%", followed by an optional minimum field width, followed by tag contents in curly braces ({}). If the minimum field width value is provided the tag will be expanded and the result padded to achieve the minimum width. If the minimum field width is positive, the padding will right-align the text. Negative field width will left-align. The rest of this section describes various supported tag contents and their expansion. A simple tag is one where the content is an identifier. When simple tags are expanded, the named identifier will be looked up in pattern and the resulting list of values returned, joined together using comma. For example, to print the family name and style of the pattern, use the format "%{family} %{style}\n". To extend the family column to forty characters use "%-40{family}%{style}\n". Simple tags expand to list of all values for an element. To only choose one of the values, one can index using the syntax "%{elt[idx]}". For example, to get the first family name only, use "%{family[0]}". If a simple tag ends with "=" and the element is found in the pattern, the name of the element followed by "=" will be output before the list of values. For example, "%{weight=}" may expand to the string "weight=80". Or to the empty string if pattern does not have weight set. If a simple tag starts with ":" and the element is found in the pattern, ":" will be printed first. For example, combining this with the =, the format "%{:weight=}" may expand to ":weight=80" or to the empty string if pattern does not have weight set. If a simple tag contains the string ":-", the rest of the the tag contents will be used as a default string. The default string is output if the element is not found in the pattern. For example, the format "%{:weight=:-123}" may expand to ":weight=80" or to the string ":weight=123" if pattern does not have weight set. A count tag is one that starts with the character "#" followed by an element name, and expands to the number of values for the element in the pattern. For example, "%{#family}" expands to the number of family names pattern has set, which may be zero. A sub-expression tag is one that expands a sub-expression. The tag contents are the sub-expression to expand placed inside another set of curly braces. Sub-expression tags are useful for aligning an entire sub-expression, or to apply converters (explained later) to the entire sub-expression output. For example, the format "%40{{%{family} %{style}}}" expands the sub-expression to construct the family name followed by the style, then takes the entire string and pads it on the left to be at least forty characters. A filter-out tag is one starting with the character "-" followed by a comma-separated list of element names, followed by a sub-expression enclosed in curly braces. The sub-expression will be expanded but with a pattern that has the listed elements removed from it. For example, the format "%{-size,pixelsize{sub-expr}}" will expand "sub-expr" with pattern sans the size and pixelsize elements. A filter-in tag is one starting with the character "+" followed by a comma-separated list of element names, followed by a sub-expression enclosed in curly braces. The sub-expression will be expanded but with a pattern that only has the listed elements from the surrounding pattern. For example, the format "%{+family,familylang{sub-expr}}" will expand "sub-expr" with a sub-pattern consisting only the family and family lang elements of pattern. A conditional tag is one starting with the character "?" followed by a comma-separated list of element conditions, followed by two sub-expression enclosed in curly braces. An element condition can be an element name, in which case it tests whether the element is defined in pattern, or the character "!" followed by an element name, in which case the test is negated. The conditional passes if all the element conditions pass. The tag expands the first sub-expression if the conditional passes, and expands the second sub-expression otherwise. For example, the format "%{?size,dpi,!pixelsize{pass}{fail}}" will expand to "pass" if pattern has size and dpi elements but no pixelsize element, and to "fail" otherwise. An enumerate tag is one starting with the string "[]" followed by a comma-separated list of element names, followed by a sub-expression enclosed in curly braces. The list of values for the named elements are walked in parallel and the sub-expression expanded each time with a pattern just having a single value for those elements, starting from the first value and continuing as long as any of those elements has a value. For example, the format "%{[]family,familylang{%{family} (%{familylang})\n}}" will expand the pattern "%{family} (%{familylang})\n" with a pattern having only the first value of the family and familylang elements, then expands it with the second values, then the third, etc. As a special case, if an enumerate tag has only one element, and that element has only one value in the pattern, and that value is of type FcLangSet, the individual languages in the language set are enumerated. A builtin tag is one starting with the character "=" followed by a builtin name. The following builtins are defined: unparse Expands to the result of calling FcNameUnparse() on the pattern. fcmatch Expands to the output of the default output format of the fc-match command on the pattern, without the final newline. fclist Expands to the output of the default output format of the fc-list command on the pattern, without the final newline. fccat Expands to the output of the default output format of the fc-cat command on the pattern, without the final newline. pkgkit Expands to the list of PackageKit font() tags for the pattern. Currently this includes tags for each family name, and each language from the pattern, enumerated and sanitized into a set of tags terminated by newline. Package management systems can use these tags to tag their packages accordingly. For example, the format "%{+family,style{%{=unparse}}}\n" will expand to an unparsed name containing only the family and style element values from pattern. The contents of any tag can be followed by a set of zero or more converters. A converter is specified by the character "|" followed by the converter name and arguments. The following converters are defined: basename Replaces text with the results of calling FcStrBasename() on it. dirname Replaces text with the results of calling FcStrDirname() on it. downcase Replaces text with the results of calling FcStrDowncase() on it. shescape Escapes text for one level of shell expansion. (Escapes single-quotes, also encloses text in single-quotes.) cescape Escapes text such that it can be used as part of a C string literal. (Escapes backslash and double-quotes.) xmlescape Escapes text such that it can be used in XML and HTML. (Escapes less-than, greater-than, and ampersand.) delete(chars) Deletes all occurrences of each of the characters in chars from the text. FIXME: This converter is not UTF-8 aware yet. escape(chars) Escapes all occurrences of each of the characters in chars by prepending it by the first character in chars. FIXME: This converter is not UTF-8 aware yet. translate(from,to) Translates all occurrences of each of the characters in from by replacing them with their corresponding character in to. If to has fewer characters than from, it will be extended by repeating its last character. FIXME: This converter is not UTF-8 aware yet. For example, the format "%{family|downcase|delete( )}\n" will expand to the values of the family element in pattern, lower-cased and with spaces removed. @SINCE@ 2.9.0 @@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/fcfreetype.fncs000066400000000000000000000134211503113465200251470ustar00rootroot00000000000000/* * fontconfig/doc/fcfreetype.fncs * * Copyright © 2003 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ @SYNOPSIS@ #include <fontconfig.h> #include <fcfreetype.h> @RET@ FT_UInt @FUNC@ FcFreeTypeCharIndex @TYPE1@ FT_Face% @ARG1@ face @TYPE2@ FcChar32% @ARG2@ ucs4 @PURPOSE@ map Unicode to glyph id @DESC@ Maps a Unicode char to a glyph index. This function uses information from several possible underlying encoding tables to work around broken fonts. As a result, this function isn't designed to be used in performance sensitive areas; results from this function are intended to be cached by higher level functions. @@ @SYNOPSIS@ #include <fontconfig.h> #include <fcfreetype.h> @RET@ FcCharSet * @FUNC@ FcFreeTypeCharSet @TYPE1@ FT_Face% @ARG1@ face @TYPE2@ FcBlanks * @ARG2@ blanks @PURPOSE@ compute Unicode coverage @DESC@ Scans a FreeType face and returns the set of encoded Unicode chars. FcBlanks is deprecated, blanks is ignored and accepted only for compatibility with older code. @@ @SYNOPSIS@ #include <fontconfig.h> #include <fcfreetype.h> @RET@ FcCharSet * @FUNC@ FcFreeTypeCharSetAndSpacing @TYPE1@ FT_Face% @ARG1@ face @TYPE2@ FcBlanks * @ARG2@ blanks @TYPE3@ int * @ARG3@ spacing @PURPOSE@ compute Unicode coverage and spacing type @DESC@ Scans a FreeType face and returns the set of encoded Unicode chars. FcBlanks is deprecated, blanks is ignored and accepted only for compatibility with older code. spacing receives the computed spacing type of the font, one of FC_MONO for a font where all glyphs have the same width, FC_DUAL, where the font has glyphs in precisely two widths, one twice as wide as the other, or FC_PROPORTIONAL where the font has glyphs of many widths. @@ @SYNOPSIS@ #include <fontconfig.h> #include <fcfreetype.h> @RET@ FcPattern * @FUNC@ FcFreeTypeQuery @TYPE1@ const FcChar8 * @ARG1@ file @TYPE2@ int% @ARG2@ id @TYPE3@ FcBlanks * @ARG3@ blanks @TYPE4@ int * @ARG4@ count @PURPOSE@ compute pattern from font file (and index) @DESC@ Constructs a pattern representing the 'id'th face in 'file'. The number of faces in 'file' is returned in 'count'. FcBlanks is deprecated, blanks is ignored and accepted only for compatibility with older code. @@ unsigned int FcFreeTypeQueryAll(const FcChar8 *file, int id, FcBlanks *blanks, int *count, FcFontSet *set) @SYNOPSIS@ #include <fontconfig.h> #include <fcfreetype.h> @RET@ unsigned int @FUNC@ FcFreeTypeQueryAll @TYPE1@ const FcChar8 * @ARG1@ file @TYPE2@ int% @ARG2@ id @TYPE3@ FcBlanks * @ARG3@ blanks @TYPE4@ int * @ARG4@ count @TYPE5@ FcFontSet * @ARG5@ set @PURPOSE@ compute all patterns from font file (and index) @DESC@ Constructs patterns found in 'file'. If id is -1, then all patterns found in 'file' are added to 'set'. Otherwise, this function works exactly like FcFreeTypeQuery(). The number of faces in 'file' is returned in 'count'. The number of patterns added to 'set' is returned. FcBlanks is deprecated, blanks is ignored and accepted only for compatibility with older code. @SINCE@ 2.12.91 @@ @SYNOPSIS@ #include <fontconfig.h> #include <fcfreetype.h> @RET@ FcPattern * @FUNC@ FcFreeTypeQueryFace @TYPE1@ const FT_Face% @ARG1@ face @TYPE2@ const FcChar8 * @ARG2@ file @TYPE3@ int% @ARG3@ id @TYPE4@ FcBlanks * @ARG4@ blanks @PURPOSE@ compute pattern from FT_Face @DESC@ Constructs a pattern representing 'face'. 'file' and 'id' are used solely as data for pattern elements (FC_FILE, FC_INDEX and sometimes FC_FAMILY). FcBlanks is deprecated, blanks is ignored and accepted only for compatibility with older code. @@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/fcinit.fncs000066400000000000000000000066051503113465200242750ustar00rootroot00000000000000/* * fontconfig/doc/fcinit.fncs * * Copyright © 2003 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ @RET@ FcConfig * @FUNC@ FcInitLoadConfig @TYPE1@ void @PURPOSE@ load configuration @DESC@ Loads the default configuration file and returns the resulting configuration. Does not load any font information. @@ @RET@ FcConfig * @FUNC@ FcInitLoadConfigAndFonts @TYPE1@ void @PURPOSE@ load configuration and font data @DESC@ Loads the default configuration file and builds information about the available fonts. Returns the resulting configuration. @@ @RET@ FcBool @FUNC@ FcInit @TYPE1@ void @PURPOSE@ initialize fontconfig library @DESC@ Loads the default configuration file and the fonts referenced therein and sets the default configuration to that result. Returns whether this process succeeded or not. If the default configuration has already been loaded, this routine does nothing and returns FcTrue. @@ @RET@ void @FUNC@ FcFini @TYPE1@ void @PURPOSE@ finalize fontconfig library @DESC@ Frees all data structures allocated by previous calls to fontconfig functions. Fontconfig returns to an uninitialized state, requiring a new call to one of the FcInit functions before any other fontconfig function may be called. @@ @RET@ int @FUNC@ FcGetVersion @TYPE1@ void @PURPOSE@ library version number @DESC@ Returns the version number of the library. @@ @RET@ FcBool @FUNC@ FcInitReinitialize @TYPE1@ void @PURPOSE@ re-initialize library @DESC@ Forces the default configuration file to be reloaded and resets the default configuration. Returns FcFalse if the configuration cannot be reloaded (due to configuration file errors, allocation failures or other issues) and leaves the existing configuration unchanged. Otherwise returns FcTrue. @@ @RET@ FcBool @FUNC@ FcInitBringUptoDate @TYPE1@ void @PURPOSE@ reload configuration files if needed @DESC@ Checks the rescan interval in the default configuration, checking the configuration if the interval has passed and reloading the configuration if when any changes are detected. Returns FcFalse if the configuration cannot be reloaded (see FcInitReinitialize). Otherwise returns FcTrue. @@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/fclangset.fncs000066400000000000000000000206111503113465200247600ustar00rootroot00000000000000/* * Copyright © 2007 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that copyright * notice and this permission notice appear in supporting documentation, and * that the name of the copyright holders not be used in advertising or * publicity pertaining to distribution of the software without specific, * written prior permission. The copyright holders make no representations * about the suitability of this software for any purpose. It is provided "as * is" without express or implied warranty. * * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE * OF THIS SOFTWARE. */ @RET@ FcLangSet * @FUNC@ FcLangSetCreate @TYPE1@ void @PURPOSE@ create a langset object @DESC@ FcLangSetCreate creates a new FcLangSet object. @@ @RET@ void @FUNC@ FcLangSetDestroy @TYPE1@ FcLangSet * @ARG1@ ls @PURPOSE@ destroy a langset object @DESC@ FcLangSetDestroy destroys a FcLangSet object, freeing all memory associated with it. @@ @RET@ FcLangSet * @FUNC@ FcLangSetCopy @TYPE1@ const FcLangSet * @ARG1@ ls @PURPOSE@ copy a langset object @DESC@ FcLangSetCopy creates a new FcLangSet object and populates it with the contents of ls. @@ @RET@ FcBool @FUNC@ FcLangSetAdd @TYPE1@ FcLangSet * @ARG1@ ls @TYPE2@ const FcChar8 * @ARG2@ lang @PURPOSE@ add a language to a langset @DESC@ lang is added to ls. lang should be of the form Ll-Tt where Ll is a two or three letter language from ISO 639 and Tt is a territory from ISO 3166. @@ @RET@ FcBool @FUNC@ FcLangSetDel @TYPE1@ FcLangSet * @ARG1@ ls @TYPE2@ const FcChar8 * @ARG2@ lang @PURPOSE@ delete a language from a langset @DESC@ lang is removed from ls. lang should be of the form Ll-Tt where Ll is a two or three letter language from ISO 639 and Tt is a territory from ISO 3166. @SINCE@ 2.9.0 @@ @RET@ FcLangSet * @FUNC@ FcLangSetUnion @TYPE1@ const FcLangSet * @ARG1@ ls_a @TYPE2@ const FcLangSet * @ARG2@ ls_b @PURPOSE@ Add langsets @DESC@ Returns a set including only those languages found in either ls_a or ls_b. @SINCE@ 2.9.0 @@ @RET@ FcLangSet * @FUNC@ FcLangSetSubtract @TYPE1@ const FcLangSet * @ARG1@ ls_a @TYPE2@ const FcLangSet * @ARG2@ ls_b @PURPOSE@ Subtract langsets @DESC@ Returns a set including only those languages found in ls_a but not in ls_b. @SINCE@ 2.9.0 @@ @RET@ FcLangResult @FUNC@ FcLangSetCompare @TYPE1@ const FcLangSet * @ARG1@ ls_a @TYPE2@ const FcLangSet * @ARG2@ ls_b @PURPOSE@ compare language sets @DESC@ FcLangSetCompare compares language coverage for ls_a and ls_b. If they share any language and territory pair, this function returns FcLangEqual. If they share a language but differ in which territory that language is for, this function returns FcLangDifferentTerritory. If they share no languages in common, this function returns FcLangDifferentLang. @@ @RET@ FcBool @FUNC@ FcLangSetContains @TYPE1@ const FcLangSet * @ARG1@ ls_a @TYPE2@ const FcLangSet * @ARG2@ ls_b @PURPOSE@ check langset subset relation @DESC@ FcLangSetContains returns FcTrue if ls_a contains every language in ls_b. ls_a will 'contain' a language from ls_b if ls_a has exactly the language, or either the language or ls_a has no territory. @@ @RET@ FcBool @FUNC@ FcLangSetEqual @TYPE1@ const FcLangSet * @ARG1@ ls_a @TYPE2@ const FcLangSet * @ARG2@ ls_b @PURPOSE@ test for matching langsets @DESC@ Returns FcTrue if and only if ls_a supports precisely the same language and territory combinations as ls_b. @@ @RET@ FcChar32 @FUNC@ FcLangSetHash @TYPE1@ const FcLangSet * @ARG1@ ls @PURPOSE@ return a hash value for a langset @DESC@ This function returns a value which depends solely on the languages supported by ls. Any language which equals ls will have the same result from FcLangSetHash. However, two langsets with the same hash value may not be equal. @@ @RET@ FcLangResult @FUNC@ FcLangSetHasLang @TYPE1@ const FcLangSet * @ARG1@ ls @TYPE2@ const FcChar8 * @ARG2@ lang @PURPOSE@ test langset for language support @DESC@ FcLangSetHasLang checks whether ls supports lang. If ls has a matching language and territory pair, this function returns FcLangEqual. If ls has a matching language but differs in which territory that language is for, this function returns FcLangDifferentTerritory. If ls has no matching language, this function returns FcLangDifferentLang. @@ @RET@ FcStrSet * @FUNC@ FcGetDefaultLangs @TYPE1@ void @PURPOSE@ Get the default languages list @DESC@ Returns a string set of the default languages according to the environment variables on the system. This function looks for them in order of FC_LANG, LC_ALL, LC_CTYPE and LANG then. If there are no valid values in those environment variables, "en" will be set as fallback. This function has been replaced by FcConfigGetDefaultLangs and will be deprecated. @SINCE@ 2.9.91 @@ @RET@ FcStrSet * @FUNC@ FcConfigGetDefaultLangs @TYPE1@ FcConfig * @ARG1@ config @PURPOSE@ Get the default languages list @DESC@ Returns a string set of the default languages according to the environment variables on the system. This function looks for them in order of FC_LANG, LC_ALL, LC_CTYPE and LANG then. If there are no valid values in those environment variables, "en" will be set as fallback. @SINCE@ 2.17.0 @@ @RET@ FcStrSet * @FUNC@ FcLangSetGetLangs @TYPE1@ const FcLangSet * @ARG1@ ls @PURPOSE@ get the list of languages in the langset @DESC@ Returns a string set of all languages in langset. @@ @RET@ FcStrSet * @FUNC@ FcGetLangs @TYPE1@ void @PURPOSE@ Get list of languages @DESC@ Returns a string set of all known languages. @@ @RET@ FcChar8 * @FUNC@ FcLangNormalize @TYPE1@ const FcChar8 * @ARG1@ lang @PURPOSE@ Normalize the language string @DESC@ Returns a string to make lang suitable on fontconfig. @SINCE@ 2.10.91 @@ @RET@ const FcCharSet * @FUNC@ FcLangGetCharSet @TYPE1@ const FcChar8 * @ARG1@ lang @PURPOSE@ Get character map for a language @DESC@ Returns the FcCharMap for a language. @@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/fcmatrix.fncs000066400000000000000000000074401503113465200246340ustar00rootroot00000000000000/* * fontconfig/doc/fcmatrix.fncs * * Copyright © 2003 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ @RET@ void @FUNC@ FcMatrixInit @PURPOSE@ initialize an FcMatrix structure @TYPE1@ FcMatrix * @ARG1@ matrix @DESC@ FcMatrixInit initializes matrix to the identity matrix. @@ @FUNC@ FcMatrixCopy @PURPOSE@ Copy a matrix @TYPE1@ const FcMatrix * @ARG1@ matrix @DESC@ FcMatrixCopy allocates a new FcMatrix and copies mat into it. @@ @FUNC@ FcMatrixEqual @PURPOSE@ Compare two matrices @TYPE1@ const FcMatrix * @ARG1@ matrix1 @TYPE2@ const FcMatrix * @ARG2@ matrix2 @DESC@ FcMatrixEqual compares matrix1 and matrix2 returning FcTrue when they are equal and FcFalse when they are not. @@ @FUNC@ FcMatrixMultiply @PURPOSE@ Multiply matrices @TYPE1@ FcMatrix * @ARG1@ result @TYPE2@ const FcMatrix * @ARG2@ matrix1 @TYPE3@ const FcMatrix * @ARG3@ matrix2 @DESC@ FcMatrixMultiply multiplies matrix1 and matrix2 storing the result in result. @@ @FUNC@ FcMatrixRotate @PURPOSE@ Rotate a matrix @TYPE1@ FcMatrix * @ARG1@ matrix @TYPE2@ double% @ARG2@ cos @TYPE3@ double% @ARG3@ sin @DESC@ FcMatrixRotate rotates matrix by the angle who's sine is sin and cosine is cos. This is done by multiplying by the matrix: cos -sin sin cos @@ @FUNC@ FcMatrixScale @PURPOSE@ Scale a matrix @TYPE1@ FcMatrix * @ARG1@ matrix @TYPE2@ double% @ARG2@ sx @TYPE3@ double% @ARG3@ dy @DESC@ FcMatrixScale multiplies matrix x values by sx and y values by dy. This is done by multiplying by the matrix: sx 0 0 dy @@ @FUNC@ FcMatrixShear @PURPOSE@ Shear a matrix @TYPE1@ FcMatrix * @ARG1@ matrix @TYPE2@ double% @ARG2@ sh @TYPE3@ double% @ARG3@ sv @DESC@ FcMatrixShare shears matrix horizontally by sh and vertically by sv. This is done by multiplying by the matrix: 1 sh sv 1 @@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/fcobjectset.fncs000066400000000000000000000054551503113465200253160ustar00rootroot00000000000000/* * fontconfig/doc/fcobjectset.fncs * * Copyright © 2003 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ @RET@ FcObjectSet * @FUNC@ FcObjectSetCreate @TYPE1@ void @PURPOSE@ Create an object set @DESC@ Creates an empty set. @@ @RET@ FcBool @FUNC@ FcObjectSetAdd @TYPE1@ FcObjectSet * @ARG1@ os @TYPE2@ const char * @ARG2@ object @PURPOSE@ Add to an object set @DESC@ Adds a property name to the set. Returns FcFalse if the property name cannot be inserted into the set (due to allocation failure). Otherwise returns FcTrue. @@ @RET@ void @FUNC@ FcObjectSetDestroy @TYPE1@ FcObjectSet * @ARG1@ os @PURPOSE@ Destroy an object set @DESC@ Destroys an object set. @@ @RET@ FcObjectSet * @FUNC@ FcObjectSetBuild @TYPE1@ const char * @ARG1@ first @TYPE2@ ... @PROTOTYPE+@ @RET+@ FcObjectSet * @FUNC+@ FcObjectSetVaBuild @TYPE1+@ const char * @ARG1+@ first @TYPE2+@ va_list% @ARG2+@ va @PROTOTYPE++@ @RET++@ void @FUNC++@ FcObjectSetVapBuild @TYPE1++@ FcObjectSet * @ARG1++@ result @TYPE2++@ const char * @ARG2++@ first @TYPE3++@ va_list% @ARG3++@ va @PURPOSE@ Build object set from args @DESC@ These build an object set from a null-terminated list of property names. FcObjectSetVapBuild is a macro version of FcObjectSetVaBuild which returns the result in the result variable directly. @@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/fcobjecttype.fncs000066400000000000000000000040321503113465200254720ustar00rootroot00000000000000/* * fontconfig/doc/fcobjecttype.fncs * * Copyright © 2003 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ @RET@ FcBool @FUNC@ FcNameRegisterObjectTypes @TYPE1@ const FcObjectType * @ARG1@ types @TYPE2@ int% @ARG2@ ntype @PURPOSE@ Register object types @DESC@ Deprecated. Does nothing. Returns FcFalse. @@ @RET@ FcBool @FUNC@ FcNameUnregisterObjectTypes @TYPE1@ const FcObjectType * @ARG1@ types @TYPE2@ int% @ARG2@ ntype @PURPOSE@ Unregister object types @DESC@ Deprecated. Does nothing. Returns FcFalse. @@ @RET@ const FcObjectType * @FUNC@ FcNameGetObjectType @TYPE1@ const char * @ARG1@ object @PURPOSE@ Lookup an object type @DESC@ Return the object type for the pattern element named object. @@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/fcpattern.fncs000066400000000000000000000545651503113465200250170ustar00rootroot00000000000000/* * fontconfig/doc/fcpattern.fncs * * Copyright © 2003 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ @RET@ FcPattern * @FUNC@ FcPatternCreate @TYPE1@ void @PURPOSE@ Create a pattern @DESC@ Creates a pattern with no properties; used to build patterns from scratch. @@ @RET@ FcPattern * @FUNC@ FcPatternDuplicate @TYPE1@ const FcPattern * @ARG1@ p @PURPOSE@ Copy a pattern @DESC@ Copy a pattern, returning a new pattern that matches p. Each pattern may be modified without affecting the other. @@ @RET@ void @FUNC@ FcPatternReference @TYPE1@ FcPattern * @ARG1@ p @PURPOSE@ Increment pattern reference count @DESC@ Add another reference to p. Patterns are freed only when the reference count reaches zero. @@ @RET@ void @FUNC@ FcPatternDestroy @TYPE1@ FcPattern * @ARG1@ p @PURPOSE@ Destroy a pattern @DESC@ Decrement the pattern reference count. If all references are gone, destroys the pattern, in the process destroying all related values. @@ @RET@ int @FUNC@ FcPatternObjectCount @TYPE1@ const FcPattern * @ARG1@ p @PURPOSE@ Returns the number of the object @DESC@ Returns the number of the object p has. @SINCE@ 2.13.1 @@ @RET@ FcBool @FUNC@ FcPatternEqual @TYPE1@ const FcPattern * @ARG1@ pa @TYPE2@ const FcPattern * @ARG2@ pb @PURPOSE@ Compare patterns @DESC@ Returns whether pa and pb are exactly alike. @@ @RET@ FcBool @FUNC@ FcPatternEqualSubset @TYPE1@ const FcPattern * @ARG1@ pa @TYPE2@ const FcPattern * @ARG2@ pb @TYPE3@ const FcObjectSet * @ARG3@ os @PURPOSE@ Compare portions of patterns @DESC@ Returns whether pa and pb have exactly the same values for all of the objects in os. @@ @RET@ FcPattern * @FUNC@ FcPatternFilter @TYPE1@ FcPattern * @ARG1@ p @TYPE2@ const FcObjectSet * @ARG2@ os @PURPOSE@ Filter the objects of pattern @DESC@ Returns a new pattern that only has those objects from p that are in os. If os is NULL, a duplicate of p is returned. @@ @RET@ FcChar32 @FUNC@ FcPatternHash @TYPE1@ const FcPattern * @ARG1@ p @PURPOSE@ Compute a pattern hash value @DESC@ Returns a 32-bit number which is the same for any two patterns which are equal. @@ @RET@ FcBool @FUNC@ FcPatternAdd @TYPE1@ FcPattern * @ARG1@ p @TYPE2@ const char * @ARG2@ object @TYPE3@ FcValue% @ARG3@ value @TYPE4@ FcBool% @ARG4@ append @PURPOSE@ Add a value to a pattern @DESC@ Adds a single value to the list of values associated with the property named `object. If `append is FcTrue, the value is added at the end of any existing list, otherwise it is inserted at the beginning. `value' is saved (with FcValueSave) when inserted into the pattern so that the library retains no reference to any application-supplied data structure. @@ @RET@ FcBool @FUNC@ FcPatternAddWeak @TYPE1@ FcPattern * @ARG1@ p @TYPE2@ const char * @ARG2@ object @TYPE3@ FcValue% @ARG3@ value @TYPE4@ FcBool% @ARG4@ append @PURPOSE@ Add a value to a pattern with weak binding @DESC@ FcPatternAddWeak is essentially the same as FcPatternAdd except that any values added to the list have binding weak instead of strong. @@ @TITLE@ FcPatternAdd-Type @RET@ FcBool @FUNC@ FcPatternAddInteger @TYPE1@ FcPattern * @ARG1@ p @TYPE2@ const char * @ARG2@ object @TYPE3@ int% @ARG3@ i @PROTOTYPE+@ @RET+@ FcBool @FUNC+@ FcPatternAddDouble @TYPE1+@ FcPattern * @ARG1+@ p @TYPE2+@ const char * @ARG2+@ object @TYPE3+@ double% @ARG3+@ d @PROTOTYPE++@ @RET++@ FcBool @FUNC++@ FcPatternAddString @TYPE1++@ FcPattern * @ARG1++@ p @TYPE2++@ const char * @ARG2++@ object @TYPE3++@ const FcChar8 * @ARG3++@ s @PROTOTYPE+++@ @RET+++@ FcBool @FUNC+++@ FcPatternAddMatrix @TYPE1+++@ FcPattern * @ARG1+++@ p @TYPE2+++@ const char * @ARG2+++@ object @TYPE3+++@ const FcMatrix * @ARG3+++@ m @PROTOTYPE++++@ @RET++++@ FcBool @FUNC++++@ FcPatternAddCharSet @TYPE1++++@ FcPattern * @ARG1++++@ p @TYPE2++++@ const char * @ARG2++++@ object @TYPE3++++@ const FcCharSet * @ARG3++++@ c @PROTOTYPE+++++@ @RET+++++@ FcBool @FUNC+++++@ FcPatternAddBool @TYPE1+++++@ FcPattern * @ARG1+++++@ p @TYPE2+++++@ const char * @ARG2+++++@ object @TYPE3+++++@ FcBool% @ARG3+++++@ b @PROTOTYPE++++++@ @RET++++++@ FcBool @FUNC++++++@ FcPatternAddFTFace @TYPE1++++++@ FcPattern * @ARG1++++++@ p @TYPE2++++++@ const char * @ARG2++++++@ object @TYPE3++++++@ const FT_Face% @ARG3++++++@ f @PROTOTYPE+++++++@ @RET+++++++@ FcBool @FUNC+++++++@ FcPatternAddLangSet @TYPE1+++++++@ FcPattern * @ARG1+++++++@ p @TYPE2+++++++@ const char * @ARG2+++++++@ object @TYPE3+++++++@ const FcLangSet * @ARG3+++++++@ l @PROTOTYPE++++++++@ @RET++++++++@ FcBool @FUNC++++++++@ FcPatternAddRange @TYPE1++++++++@ FcPattern * @ARG1++++++++@ p @TYPE2++++++++@ const char * @ARG2++++++++@ object @TYPE3++++++++@ const FcRange * @ARG3++++++++@ r @PURPOSE@ Add a typed value to a pattern @DESC@ These are all convenience functions that insert objects of the specified type into the pattern. Use these in preference to FcPatternAdd as they will provide compile-time typechecking. These all append values to any existing list of values. FcPatternAddRange are available since 2.11.91. @@ @RET@ FcResult @FUNC@ FcPatternGetWithBinding @TYPE1@ FcPattern * @ARG1@ p @TYPE2@ const char * @ARG2@ object @TYPE3@ int% @ARG3@ id @TYPE4@ FcValue * @ARG4@ v @TYPE5@ FcValueBinding * @ARG5@ b @PURPOSE@ Return a value with binding from a pattern @DESC@ Returns in v the id'th value and b binding for that associated with the property object. The Value returned is not a copy, but rather refers to the data stored within the pattern directly. Applications must not free this value. @SINCE@ 2.12.5 @@ @RET@ FcResult @FUNC@ FcPatternGet @TYPE1@ FcPattern * @ARG1@ p @TYPE2@ const char * @ARG2@ object @TYPE3@ int% @ARG3@ id @TYPE4@ FcValue * @ARG4@ v @PURPOSE@ Return a value from a pattern @DESC@ Returns in v the id'th value associated with the property object. The value returned is not a copy, but rather refers to the data stored within the pattern directly. Applications must not free this value. @@ @TITLE@ FcPatternGet-Type @PROTOTYPE@ @RET@ FcResult @FUNC@ FcPatternGetInteger @TYPE1@ FcPattern * @ARG1@ p @TYPE2@ const char * @ARG2@ object @TYPE3@ int% @ARG3@ n @TYPE4@ int * @ARG4@ i @PROTOTYPE+@ @RET+@ FcResult @FUNC+@ FcPatternGetDouble @TYPE1+@ FcPattern * @ARG1+@ p @TYPE2+@ const char * @ARG2+@ object @TYPE3+@ int% @ARG3+@ n @TYPE4+@ double * @ARG4+@ d @PROTOTYPE++@ @RET++@ FcResult @FUNC++@ FcPatternGetString @TYPE1++@ FcPattern * @ARG1++@ p @TYPE2++@ const char * @ARG2++@ object @TYPE3++@ int% @ARG3++@ n @TYPE4++@ FcChar8 ** @ARG4++@ s @PROTOTYPE+++@ @RET+++@ FcResult @FUNC+++@ FcPatternGetMatrix @TYPE1+++@ FcPattern * @ARG1+++@ p @TYPE2+++@ const char * @ARG2+++@ object @TYPE3+++@ int% @ARG3+++@ n @TYPE4+++@ FcMatrix ** @ARG4+++@ s @PROTOTYPE++++@ @RET++++@ FcResult @FUNC++++@ FcPatternGetCharSet @TYPE1++++@ FcPattern * @ARG1++++@ p @TYPE2++++@ const char * @ARG2++++@ object @TYPE3++++@ int% @ARG3++++@ n @TYPE4++++@ FcCharSet ** @ARG4++++@ c @PROTOTYPE+++++@ @RET+++++@ FcResult @FUNC+++++@ FcPatternGetBool @TYPE1+++++@ FcPattern * @ARG1+++++@ p @TYPE2+++++@ const char * @ARG2+++++@ object @TYPE3+++++@ int% @ARG3+++++@ n @TYPE4+++++@ FcBool * @ARG4+++++@ b @PROTOTYPE++++++@ @RET++++++@ FcResult @FUNC++++++@ FcPatternGetFTFace @TYPE1++++++@ FcPattern * @ARG1++++++@ p @TYPE2++++++@ const char * @ARG2++++++@ object @TYPE3++++++@ int% @ARG3++++++@ n @TYPE4++++++@ FT_Face * @ARG4++++++@ f @PROTOTYPE+++++++@ @RET+++++++@ FcResult @FUNC+++++++@ FcPatternGetLangSet @TYPE1+++++++@ FcPattern * @ARG1+++++++@ p @TYPE2+++++++@ const char * @ARG2+++++++@ object @TYPE3+++++++@ int% @ARG3+++++++@ n @TYPE4+++++++@ FcLangSet ** @ARG4+++++++@ l @PROTOTYPE++++++++@ @RET++++++++@ FcResult @FUNC++++++++@ FcPatternGetRange @TYPE1++++++++@ FcPattern * @ARG1++++++++@ p @TYPE2++++++++@ const char * @ARG2++++++++@ object @TYPE3++++++++@ int% @ARG3++++++++@ n @TYPE4++++++++@ FcRange ** @ARG4++++++++@ r @PURPOSE@ Return a typed value from a pattern @DESC@ These are convenience functions that call FcPatternGet and verify that the returned data is of the expected type. They return FcResultTypeMismatch if this is not the case. Note that these (like FcPatternGet) do not make a copy of any data structure referenced by the return value. Use these in preference to FcPatternGet to provide compile-time typechecking. FcPatternGetRange are available since 2.11.91. @@ @RET@ FcPattern * @FUNC@ FcPatternBuild @TYPE1@ FcPattern * @ARG1@ pattern @TYPE2@ ... @PROTOTYPE+@ @RET+@ FcPattern * @FUNC+@ FcPatternVaBuild @TYPE1+@ FcPattern * @ARG1+@ pattern @TYPE2+@ va_list% @ARG2+@ va @PROTOTYPE++@ @RET++@ void @FUNC++@ FcPatternVapBuild @TYPE1++@ FcPattern * @ARG1++@ result @TYPE2++@ FcPattern * @ARG2++@ pattern @TYPE3++@ va_list% @ARG3++@ va @PURPOSE@ Create patterns from arguments @DESC@ Builds a pattern using a list of objects, types and values. Each value to be entered in the pattern is specified with three arguments: Object name, a string describing the property to be added. Object type, one of the FcType enumerated values Value, not an FcValue, but the raw type as passed to any of the FcPatternAdd<type> functions. Must match the type of the second argument. The argument list is terminated by a null object name, no object type nor value need be passed for this. The values are added to `pattern', if `pattern' is null, a new pattern is created. In either case, the pattern is returned. Example pattern = FcPatternBuild (0, FC_FAMILY, FcTypeString, "Times", (char *) 0); FcPatternVaBuild is used when the arguments are already in the form of a varargs value. FcPatternVapBuild is a macro version of FcPatternVaBuild which returns its result directly in the result variable. @@ @RET@ FcBool @FUNC@ FcPatternDel @TYPE1@ FcPattern * @ARG1@ p @TYPE2@ const char * @ARG2@ object @PURPOSE@ Delete a property from a pattern @DESC@ Deletes all values associated with the property `object', returning whether the property existed or not. @@ @RET@ FcBool @FUNC@ FcPatternRemove @TYPE1@ FcPattern * @ARG1@ p @TYPE2@ const char * @ARG2@ object @TYPE3@ int% @ARG3@ id @PURPOSE@ Remove one object of the specified type from the pattern @DESC@ Removes the value associated with the property `object' at position `id', returning whether the property existed and had a value at that position or not. @@ @RET@ void @FUNC@ FcPatternIterStart @TYPE1@ const FcPattern * @ARG1@ p @TYPE2@ FcPatternIter * @ARG2@ iter @PURPOSE@ Initialize the iterator with the first iterator in the pattern @DESC@ Initialize iter with the first iterator in p. If there are no objects in p, iter will not have any valid data. @SINCE@ 2.13.1 @@ @RET@ FcBool @FUNC@ FcPatternIterNext @TYPE1@ const FcPattern * @ARG1@ p @TYPE2@ FcPatternIter * @ARG2@ iter @PURPUSE@ Set the iterator to point to the next object in the pattern @DESC@ Set iter to point to the next object in p and returns FcTrue if iter has been changed to the next object. returns FcFalse otherwise. @SINCE@ 2.13.1 @@ @RET@ FcBool @FUNC@ FcPatternIterEqual @TYPE1@ const FcPattern * @ARG1@ p1 @TYPE2@ FcPatternIter * @ARG2@ i1 @TYPE3@ const FcPattern * @ARG3@ p2 @TYPE4@ FcPatternIter * @ARG4@ i2 @PURPOSE@ Compare iterators @DESC@ Return FcTrue if both i1 and i2 point to same object and contains same values. return FcFalse otherwise. @SINCE@ 2.13.1 @@ @RET@ FcBool @FUNC@ FcPatternFindIter @TYPE1@ const FcPattern * @ARG1@ p @TYPE2@ FcPatternIter * @ARG2@ iter @TYPE3@ const char * @ARG3@ object @PURPOSE@ Set the iterator to point to the object in the pattern @DESC@ Set iter to point to object in p if any and returns FcTrue. returns FcFalse otherwise. @SINCE@ 2.13.1 @@ @RET@ FcBool @FUNC@ FcPatternIterIsValid @TYPE1@ const FcPattern * @ARG1@ p @TYPE2@ FcPatternIter : @ARG2@ iter @PURPOSE@ Check whether the iterator is valid or not @DESC@ Returns FcTrue if iter point to the valid entry in p. returns FcFalse otherwise. @SINCE@ 2.13.1 @@ @RET@ const char * @FUNC@ FcPatternIterGetObject @TYPE1@ const FcPattern * @ARG1@ p @TYPE2@ FcPatternIter * @ARG2@ iter @PURPOSE@ Returns an object name which the iterator point to @DESC@ Returns an object name in p which iter point to. returns NULL if iter isn't valid. @SINCE@ 2.13.1 @@ @RET@ int @FUNC@ FcPatternIterValueCount @TYPE1@ const FcPattern * @ARG1@ p @TYPE2@ FcPatternIter * @ARG2@ iter @PURPOSE@ Returns the number of the values which the iterator point to @DESC@ Returns the number of the values in the object which iter point to. if iter isn't valid, returns 0. @SINCE@ 2.13.1 @@ @RET@ FcResult @FUNC@ FcPatternIterGetValue @TYPE1@ const FcPattern * @ARG1@ p @TYPE2@ FcPatternIter * @ARG2@ iter @TYPE3@ int% @ARG3@ id @TYPE4@ FcValue * @ARG4@ v @TYPE5@ FcValueBinding * @ARG5@ b @PURPOSE@ Returns a value which the iterator point to @DESC@ Returns in v the id'th value which iter point to. also binding to b if given. The value returned is not a copy, but rather refers to the data stored within the pattern directly. Applications must not free this value. @SINCE@ 2.13.1 @@ @RET@ void @FUNC@ FcPatternPrint @TYPE1@ const FcPattern * @ARG1@ p @PURPOSE@ Print a pattern for debugging @DESC@ Prints an easily readable version of the pattern to stdout. There is no provision for reparsing data in this format, it's just for diagnostics and debugging. @@ @RET@ void @FUNC@ FcDefaultSubstitute @TYPE1@ FcPattern * @ARG1@ pattern @PURPOSE@ Perform default substitutions in a pattern @DESC@ Supplies default values for underspecified font patterns: Patterns without a specified style or weight are set to Medium Patterns without a specified style or slant are set to Roman Patterns without a specified pixel size are given one computed from any specified point size (default 12), dpi (default 75) and scale (default 1). This function has been replaced by FcConfigSetDefaultSubstitute and will be deprecated. @@ @RET@ void @FUNC@ FcConfigSetDefaultSubstitute @TYPE1@ FcConfig * @ARG1@ config @TYPE2@ FcPattern * @ARG2@ pattern @PURPOSE@ Perform default substitutions in a pattern @DESC@ Supplies default values for underspecified font patterns: Patterns without a specified style or weight are set to Medium Patterns without a specified style or slant are set to Roman Patterns without a specified pixel size are given one computed from any specified point size (default 12), dpi (default 75) and scale (default 1). @SINCE@ 2.17.0 @@ @RET@ FcPattern * @FUNC@ FcNameParse @TYPE1@ const FcChar8 * @ARG1@ name @PURPOSE@ Parse a pattern string @DESC@ Converts name from the standard text format described above into a pattern. @@ @RET@ FcChar8 * @FUNC@ FcNameUnparse @TYPE1@ FcPattern * @ARG1@ pat @PURPOSE@ Convert a pattern back into a string that can be parsed @DESC@ Converts the given pattern into the standard text format described above. The return value is not static, but instead refers to newly allocated memory which should be freed by the caller using free(). @@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/fcrange.fncs000066400000000000000000000056671503113465200244350ustar00rootroot00000000000000/* * fontconfig/doc/fcrange.fncs * * Copyright © 2003 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ @RET@ FcRange * @FUNC@ FcRangeCopy @TYPE1@ const FcRange * @ARG1@ range @PURPOSE@ Copy a range object @DESC@ FcRangeCopy creates a new FcRange object and populates it with the contents of range. @SINCE@ 2.11.91 @@ @RET@ FcRange * @FUNC@ FcRangeCreateDouble @TYPE1@ double% @ARG1@ begin @TYPE2@ double% @ARG2@ end @PURPOSE@ create a range object for double @DESC@ FcRangeCreateDouble creates a new FcRange object with double sized value. @SINCE@ 2.11.91 @@ @RET@ FcRange * @FUNC@ FcRangeCreateInteger @TYPE1@ int% @ARG1@ begin @TYPE2@ int% @ARG2@ end @PURPOSE@ create a range object for integer @DESC@ FcRangeCreateInteger creates a new FcRange object with integer sized value. @SINCE@ 2.11.91 @@ @RET@ void @FUNC@ FcRangeDestroy @TYPE1@ FcRange * @ARG1@ range @PURPOSE@ destroy a range object @DESC@ FcRangeDestroy destroys a FcRange object, freeing all memory associated with it. @SINCE@ 2.11.91 @@ @RET@ FcBool @FUNC@ FcRangeGetDouble @TYPE1@ const FcRange * @ARG1@ range @TYPE2@ double * @ARG2@ begin @TYPE3@ double * @ARG3@ end @PURPOSE@ Get the range in double @DESC@ Returns in begin and end as the range. @SINCE@ 2.11.91 @@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/fcstring.fncs000066400000000000000000000241401503113465200246320ustar00rootroot00000000000000/* * fontconfig/doc/fcstring.fncs * * Copyright © 2003 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ @RET@ int @FUNC@ FcUtf8ToUcs4 @TYPE1@ FcChar8 * @ARG1@ src @TYPE2@ FcChar32 * @ARG2@ dst @TYPE3@ int% @ARG3@ len @PURPOSE@ convert UTF-8 to UCS4 @DESC@ Converts the next Unicode char from src into dst and returns the number of bytes containing the char. src must be at least len bytes long. @@ @RET@ int @FUNC@ FcUcs4ToUtf8 @TYPE1@ FcChar32% @ARG1@ src @TYPE2@ FcChar8% @ARG2@ dst[FC_UTF8_MAX_LEN] @PURPOSE@ convert UCS4 to UTF-8 @DESC@ Converts the Unicode char from src into dst and returns the number of bytes needed to encode the char. @@ @RET@ FcBool @FUNC@ FcUtf8Len @TYPE1@ FcChar8 * @ARG1@ src @TYPE2@ int% @ARG2@ len @TYPE3@ int * @ARG3@ nchar @TYPE4@ int * @ARG4@ wchar @PURPOSE@ count UTF-8 encoded chars @DESC@ Counts the number of Unicode chars in len bytes of src. Places that count in nchar. wchar contains 1, 2 or 4 depending on the number of bytes needed to hold the largest Unicode char counted. The return value indicates whether src is a well-formed UTF8 string. @@ @RET@ int @FUNC@ FcUtf16ToUcs4 @TYPE1@ FcChar8 * @ARG1@ src @TYPE2@ FcEndian% @ARG2@ endian @TYPE3@ FcChar32 * @ARG3@ dst @TYPE4@ int% @ARG4@ len @PURPOSE@ convert UTF-16 to UCS4 @DESC@ Converts the next Unicode char from src into dst and returns the number of bytes containing the char. src must be at least len bytes long. Bytes of src are combined into 16-bit units according to endian. @@ @RET@ FcBool @FUNC@ FcUtf16Len @TYPE1@ FcChar8 * @ARG1@ src @TYPE2@ FcEndian% @ARG2@ endian @TYPE3@ int% @ARG3@ len @TYPE4@ int * @ARG4@ nchar @TYPE5@ int * @ARG5@ wchar @PURPOSE@ count UTF-16 encoded chars @DESC@ Counts the number of Unicode chars in len bytes of src. Bytes of src are combined into 16-bit units according to endian. Places that count in nchar. wchar contains 1, 2 or 4 depending on the number of bytes needed to hold the largest Unicode char counted. The return value indicates whether string is a well-formed UTF16 string. @@ @RET@ FcBool @FUNC@ FcIsLower @TYPE1@ FcChar8% @ARG1@ c @PURPOSE@ check for lower case ASCII character @DESC@ This macro checks whether c is an lower case ASCII letter. @@ @RET@ FcBool @FUNC@ FcIsUpper @TYPE1@ FcChar8% @ARG1@ c @PURPOSE@ check for upper case ASCII character @DESC@ This macro checks whether c is a upper case ASCII letter. @@ @RET@ FcChar8 @FUNC@ FcToLower @TYPE1@ FcChar8% @ARG1@ c @PURPOSE@ convert upper case ASCII to lower case @DESC@ This macro converts upper case ASCII c to the equivalent lower case letter. @@ @RET@ FcChar8 * @FUNC@ FcStrCopy @TYPE1@ const FcChar8 * @ARG1@ s @PURPOSE@ duplicate a string @DESC@ Allocates memory, copies s and returns the resulting buffer. Yes, this is strdup, but that function isn't available on every platform. @@ @RET@ FcChar8 * @FUNC@ FcStrDowncase @TYPE1@ const FcChar8 * @ARG1@ s @PURPOSE@ create a lower case translation of a string @DESC@ Allocates memory, copies s, converting upper case letters to lower case and returns the allocated buffer. @@ @RET@ FcChar8 * @FUNC@ FcStrCopyFilename @TYPE1@ const FcChar8 * @ARG1@ s @PURPOSE@ create a complete path from a filename @DESC@ FcStrCopyFilename constructs an absolute pathname from s. It converts any leading '~' characters in to the value of the HOME environment variable, and any relative paths are converted to absolute paths using the current working directory. Sequences of '/' characters are converted to a single '/', and names containing the current directory '.' or parent directory '..' are correctly reconstructed. Returns NULL if '~' is the leading character and HOME is unset or disabled (see FcConfigEnableHome). @@ @RET@ int @FUNC@ FcStrCmp @TYPE1@ const FcChar8 * @ARG1@ s1 @TYPE2@ const FcChar8 * @ARG2@ s2 @PURPOSE@ compare UTF-8 strings @DESC@ Returns the usual <0, 0, >0 result of comparing s1 and s2. @@ @RET@ int @FUNC@ FcStrCmpIgnoreCase @TYPE1@ const FcChar8 * @ARG1@ s1 @TYPE2@ const FcChar8 * @ARG2@ s2 @PURPOSE@ compare UTF-8 strings ignoring case @DESC@ Returns the usual <0, 0, >0 result of comparing s1 and s2. This test is case-insensitive for all proper UTF-8 encoded strings. @@ @RET@ FcChar8 * @FUNC@ FcStrStr @TYPE1@ const FcChar8 * @ARG1@ s1 @TYPE2@ const FcChar8 * @ARG2@ s2 @PURPOSE@ locate UTF-8 substring @DESC@ Returns the location of s2 in s1. Returns NULL if s2 is not present in s1. This test will operate properly with UTF8 encoded strings. @@ @RET@ FcChar8 * @FUNC@ FcStrStrIgnoreCase @TYPE1@ const FcChar8 * @ARG1@ s1 @TYPE2@ const FcChar8 * @ARG2@ s2 @PURPOSE@ locate UTF-8 substring ignoring case @DESC@ Returns the location of s2 in s1, ignoring case. Returns NULL if s2 is not present in s1. This test is case-insensitive for all proper UTF-8 encoded strings. @@ @RET@ FcChar8 * @FUNC@ FcStrPlus @TYPE1@ const FcChar8 * @ARG1@ s1 @TYPE2@ const FcChar8 * @ARG2@ s2 @PURPOSE@ concatenate two strings @DESC@ This function allocates new storage and places the concatenation of s1 and s2 there, returning the new string. @@ @RET@ void @FUNC@ FcStrFree @TYPE1@ FcChar8 * @ARG1@ s @PURPOSE@ free a string @DESC@ This is just a wrapper around free(3) which helps track memory usage of strings within the fontconfig library. @@ @RET@ FcChar8 * @FUNC@ FcStrBuildFilename @TYPE1@ const FcChar8 * @ARG1@ path @TYPE2@ ... @PURPOSE@ Concatenate strings as a file path @DESC@ Creates a filename from the given elements of strings as file paths and concatenate them with the appropriate file separator. Arguments must be null-terminated. This returns a newly-allocated memory which should be freed when no longer needed. @@ @RET@ FcChar8 * @FUNC@ FcStrDirname @TYPE1@ const FcChar8 * @ARG1@ file @PURPOSE@ directory part of filename @DESC@ Returns the directory containing file. This is returned in newly allocated storage which should be freed when no longer needed. @@ @RET@ FcChar8 * @FUNC@ FcStrBasename @TYPE1@ const FcChar8 * @ARG1@ file @PURPOSE@ last component of filename @DESC@ Returns the filename of file stripped of any leading directory names. This is returned in newly allocated storage which should be freed when no longer needed. @@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/fcstrset.fncs000066400000000000000000000104661503113465200246560ustar00rootroot00000000000000/* * fontconfig/doc/fcstrset.fncs * * Copyright © 2003 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ @RET@ FcStrSet * @FUNC@ FcStrSetCreate @TYPE1@ void @PURPOSE@ create a string set @DESC@ Create an empty set. @@ @RET@ FcBool @FUNC@ FcStrSetMember @TYPE1@ FcStrSet * @ARG1@ set @TYPE2@ const FcChar8 * @ARG2@ s @PURPOSE@ check set for membership @DESC@ Returns whether s is a member of set. @@ @RET@ FcBool @FUNC@ FcStrSetEqual @TYPE1@ FcStrSet * @ARG1@ set_a @TYPE2@ FcStrSet * @ARG2@ set_b @PURPOSE@ check sets for equality @DESC@ Returns whether set_a contains precisely the same strings as set_b. Ordering of strings within the two sets is not considered. @@ @RET@ FcBool @FUNC@ FcStrSetAdd @TYPE1@ FcStrSet * @ARG1@ set @TYPE2@ const FcChar8 * @ARG2@ s @PURPOSE@ add to a string set @DESC@ Adds a copy of s to set. @@ @RET@ FcBool @FUNC@ FcStrSetAddFilename @TYPE1@ FcStrSet * @ARG1@ set @TYPE2@ const FcChar8 * @ARG2@ s @PURPOSE@ add a filename to a string set @DESC@ Adds a copy s to set, The copy is created with FcStrCopyFilename so that leading '~' values are replaced with the value of the HOME environment variable. @@ @RET@ FcBool @FUNC@ FcStrSetDel @TYPE1@ FcStrSet * @ARG1@ set @TYPE2@ const FcChar8 * @ARG2@ s @PURPOSE@ delete from a string set @DESC@ Removes s from set, returning FcTrue if s was a member else FcFalse. @@ @RET@ void @FUNC@ FcStrSetDestroy @TYPE1@ FcStrSet * @ARG1@ set @PURPOSE@ destroy a string set @DESC@ Destroys set. @@ @RET@ FcStrList * @FUNC@ FcStrListCreate @TYPE1@ FcStrSet * @ARG1@ set @PURPOSE@ create a string iterator @DESC@ Creates an iterator to list the strings in set. @@ @RET@ void @FUNC@ FcStrListFirst @TYPE1@ FcStrList * @ARG1@ list @PURPOSE@ get first string in iteration @DESC@ Returns the first string in list. @SINCE@ 2.11.0 @@ @RET@ FcChar8 * @FUNC@ FcStrListNext @TYPE1@ FcStrList * @ARG1@ list @PURPOSE@ get next string in iteration @DESC@ Returns the next string in list. @@ @RET@ void @FUNC@ FcStrListDone @TYPE1@ FcStrList * @ARG1@ list @PURPOSE@ destroy a string iterator @DESC@ Destroys the enumerator list. @@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/fcvalue.fncs000066400000000000000000000050051503113465200244370ustar00rootroot00000000000000/* * fontconfig/doc/fcvalue.fncs * * Copyright © 2003 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ @RET@ void @FUNC@ FcValueDestroy @TYPE1@ FcValue% @ARG1@ v @PURPOSE@ Free a value @DESC@ Frees any memory referenced by v. Values of type FcTypeString, FcTypeMatrix and FcTypeCharSet reference memory, the other types do not. @@ @RET@ FcValue @FUNC@ FcValueSave @TYPE1@ FcValue% @ARG1@ v @PURPOSE@ Copy a value @DESC@ Returns a copy of v duplicating any object referenced by it so that v may be safely destroyed without harming the new value. @@ @RET@ void @FUNC@ FcValuePrint @TYPE1@ FcValue% @ARG1@ v @PURPOSE@ Print a value to stdout @DESC@ Prints a human-readable representation of v to stdout. The format should not be considered part of the library specification as it may change in the future. @@ @RET@ FcBool @FUNC@ FcValueEqual @TYPE1@ FcValue% @ARG1@ v_a @TYPE2@ FcValue% @ARG2@ v_b @PURPOSE@ Test two values for equality @DESC@ Compares two values. Integers and Doubles are compared as numbers; otherwise the two values have to be the same type to be considered equal. Strings are compared ignoring case. @@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/fcweight.fncs000066400000000000000000000061351503113465200246170ustar00rootroot00000000000000/* * fontconfig/doc/fcweight.fncs * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ @RET@ double @FUNC@ FcWeightFromOpenTypeDouble @TYPE1@ double% @ARG1@ ot_weight @PURPOSE@ Convert from OpenType weight values to fontconfig ones @DESC@ FcWeightFromOpenTypeDouble returns an double value to use with FC_WEIGHT, from an double in the 1..1000 range, resembling the numbers from OpenType specification's OS/2 usWeight numbers, which are also similar to CSS font-weight numbers. If input is negative, zero, or greater than 1000, returns -1. This function linearly interpolates between various FC_WEIGHT_* constants. As such, the returned value does not necessarily match any of the predefined constants. @SINCE@ 2.12.92 @@ @RET@ double @FUNC@ FcWeightToOpenTypeDouble @TYPE1@ double% @ARG1@ ot_weight @PURPOSE@ Convert from fontconfig weight values to OpenType ones @DESC@ FcWeightToOpenTypeDouble is the inverse of FcWeightFromOpenType. If the input is less than FC_WEIGHT_THIN or greater than FC_WEIGHT_EXTRABLACK, returns -1. Otherwise returns a number in the range 1 to 1000. @SINCE@ 2.12.92 @@ @RET@ int @FUNC@ FcWeightFromOpenType @TYPE1@ int% @ARG1@ ot_weight @PURPOSE@ Convert from OpenType weight values to fontconfig ones @DESC@ FcWeightFromOpenType is like FcWeightFromOpenTypeDouble but with integer arguments. Use the other function instead. @SINCE@ 2.11.91 @@ @RET@ int @FUNC@ FcWeightToOpenType @TYPE1@ int% @ARG1@ ot_weight @PURPOSE@ Convert from fontconfig weight values to OpenType ones @DESC@ FcWeightToOpenType is like FcWeightToOpenTypeDouble but with integer arguments. Use the other function instead. @SINCE@ 2.11.91 @@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/fontconfig-devel.sgml000066400000000000000000000657451503113465200262750ustar00rootroot00000000000000 ]>
Fontconfig Developers Reference, Version &version; Keith Packard HP Cambridge Research Lab KRP Fontconfig &version; Copyright © 2002 Keith Packard Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of the author(s) not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. The authors make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. DESCRIPTION Fontconfig is a library designed to provide system-wide font configuration, customization and application access. FUNCTIONAL OVERVIEW Fontconfig contains two essential modules, the configuration module which builds an internal configuration from XML files and the matching module which accepts font patterns and returns the nearest matching font. FONT CONFIGURATION The configuration module consists of the FcConfig datatype, libexpat and FcConfigParse which walks over an XML tree and amends a configuration with data found within. From an external perspective, configuration of the library consists of generating a valid XML tree and feeding that to FcConfigParse. The only other mechanism provided to applications for changing the running configuration is to add fonts and directories to the list of application-provided font files. The intent is to make font configurations relatively static, and shared by as many applications as possible. It is hoped that this will lead to more stable font selection when passing names from one application to another. XML was chosen as a configuration file format because it provides a format which is easy for external agents to edit while retaining the correct structure and syntax. Font configuration is separate from font matching; applications needing to do their own matching can access the available fonts from the library and perform private matching. The intent is to permit applications to pick and choose appropriate functionality from the library instead of forcing them to choose between this library and a private configuration mechanism. The hope is that this will ensure that configuration of fonts for all applications can be centralized in one place. Centralizing font configuration will simplify and regularize font installation and customization. FONT PROPERTIES While font patterns may contain essentially any properties, there are some well known properties with associated types. Fontconfig uses some of these properties for font matching and font completion. Others are provided as a convenience for the application's rendering mechanism. Property Definitions Property C Preprocessor Symbol Type Description ---------------------------------------------------- family FC_FAMILY String Font family names familylang FC_FAMILYLANG String Language corresponding to each family name style FC_STYLE String Font style. Overrides weight and slant stylelang FC_STYLELANG String Language corresponding to each style name fullname FC_FULLNAME String Font face full name where different from family and family + style fullnamelang FC_FULLNAMELANG String Language corresponding to each fullname slant FC_SLANT Int Italic, oblique or roman weight FC_WEIGHT Int Light, medium, demibold, bold or black width FC_WIDTH Int Condensed, normal or expanded size FC_SIZE Double Point size aspect FC_ASPECT Double Stretches glyphs horizontally before hinting pixelsize FC_PIXEL_SIZE Double Pixel size spacing FC_SPACING Int Proportional, dual-width, monospace or charcell foundry FC_FOUNDRY String Font foundry name antialias FC_ANTIALIAS Bool Whether glyphs can be antialiased hintstyle FC_HINT_STYLE Int Automatic hinting style hinting FC_HINTING Bool Whether the rasterizer should use hinting verticallayout FC_VERTICAL_LAYOUT Bool Use vertical layout autohint FC_AUTOHINT Bool Use autohinter instead of normal hinter globaladvance FC_GLOBAL_ADVANCE Bool Use font global advance data (deprecated) file FC_FILE String The filename holding the font relative to the config's sysroot index FC_INDEX Int The index of the font within the file ftface FC_FT_FACE FT_Face Use the specified FreeType face object rasterizer FC_RASTERIZER String Which rasterizer is in use (deprecated) outline FC_OUTLINE Bool Whether the glyphs are outlines scalable FC_SCALABLE Bool Whether the glyphs are outlines or have color dpi FC_DPI Double Target dots per inch rgba FC_RGBA Int unknown, rgb, bgr, vrgb, vbgr, none - subpixel geometry scale FC_SCALE Double Scale factor for point->pixel conversions (deprecated) minspace FC_MINSPACE Bool Eliminate leading from line spacing matrix FC_MATRIX Matrix Hold an affine transformation charset FC_CHARSET CharSet Unicode chars encoded by the font lang FC_LANG LangSet Set of RFC-3066-style languages this font supports fontversion FC_FONTVERSION Int Version number of the font capability FC_CAPABILITY String List of layout capabilities in the font fontformat FC_FONTFORMAT String String name of the font format embolden FC_EMBOLDEN Bool Rasterizer should synthetically embolden the font embeddedbitmap FC_EMBEDDED_BITMAP Bool Use the embedded bitmap instead of the outline decorative FC_DECORATIVE Bool Whether the style is a decorative variant lcdfilter FC_LCD_FILTER Int Type of LCD filter namelang FC_NAMELANG String Language name to be used for the default value of familylang, stylelang and fullnamelang fontfeatures FC_FONT_FEATURES String List of extra feature tags in OpenType to be enabled prgname FC_PRGNAME String Name of the running program hash FC_HASH String SHA256 hash value of the font data with "sha256:" prefix (deprecated) postscriptname FC_POSTSCRIPT_NAME String Font name in PostScript color FC_COLOR Bool Whether any glyphs have color symbol FC_SYMBOL Bool Whether font uses MS symbol-font encoding fontvariations FC_FONT_VARIATIONS String comma-separated string of axes in variable font variable FC_VARIABLE Bool Whether font is Variable Font fonthashint FC_FONT_HAS_HINT Bool Whether font has hinting order FC_ORDER Int Order number of the font desktop FC_DESKTOP_NAME String Current desktop name namedinstance FC_NAMED_INSTANCE Bool Whether font is a named instance fontwarapper FC_FONT_WRAPPER String The font wrapper format Datatypes Fontconfig uses abstract data types to hide internal implementation details for most data structures. A few structures are exposed where appropriate. FcChar8, FcChar16, FcChar32, FcBool These are primitive data types; the FcChar* types hold precisely the number of bits stated (if supported by the C implementation). FcBool holds one of two C preprocessor symbols: FcFalse or FcTrue. FcMatrix An FcMatrix holds an affine transformation, usually used to reshape glyphs. A small set of matrix operations are provided to manipulate these. typedef struct _FcMatrix { double xx, xy, yx, yy; } FcMatrix; FcCharSet An FcCharSet is an abstract type that holds the set of encoded Unicode chars in a font. Operations to build and compare these sets are provided. FcLangSet An FcLangSet is an abstract type that holds the set of languages supported by a font. Operations to build and compare these sets are provided. These are computed for a font based on orthographic information built into the fontconfig library. Fontconfig has orthographies for all of the ISO 639-1 languages except for MS, NA, PA, PS, QU, RN, RW, SD, SG, SN, SU and ZA. If you have orthographic information for any of these languages, please submit them. FcLangResult An FcLangResult is an enumeration used to return the results of comparing two language strings or FcLangSet objects. FcLangEqual means the objects match language and territory. FcLangDifferentTerritory means the objects match in language but differ in territory. FcLangDifferentLang means the objects differ in language. FcType Tags the kind of data stored in an FcValue. FcValue An FcValue object holds a single value with one of a number of different types. The 'type' tag indicates which member is valid. typedef struct _FcValue { FcType type; union { const FcChar8 *s; int i; FcBool b; double d; const FcMatrix *m; const FcCharSet *c; void *f; const FcLangSet *l; const FcRange *r; } u; } FcValue; FcValue Members Type Union member Datatype -------------------------------- FcTypeVoid (none) (none) FcTypeInteger i int FcTypeDouble d double FcTypeString s FcChar8 * FcTypeBool b b FcTypeMatrix m FcMatrix * FcTypeCharSet c FcCharSet * FcTypeFTFace f void * (FT_Face) FcTypeLangSet l FcLangSet * FcTypeRange r FcRange * FcPattern, FcPatternIter An FcPattern holds a set of names with associated value lists; each name refers to a property of a font. FcPatterns are used as inputs to the matching code as well as holding information about specific fonts. Each property can hold one or more values; conventionally all of the same type, although the interface doesn't demand that. An FcPatternIter is used during iteration to access properties in FcPattern. FcFontSet typedef struct _FcFontSet { int nfont; int sfont; FcPattern **fonts; } FcFontSet; An FcFontSet contains a list of FcPatterns. Internally fontconfig uses this data structure to hold sets of fonts. Externally, fontconfig returns the results of listing fonts in this format. 'nfont' holds the number of patterns in the 'fonts' array; 'sfont' is used to indicate the size of that array. FcStrSet, FcStrList FcStrSet holds a list of strings that can be appended to and enumerated. Its unique characteristic is that the enumeration works even while strings are appended during enumeration. FcStrList is used during enumeration to safely and correctly walk the list of strings even while that list is edited in the middle of enumeration. FcObjectSet typedef struct _FcObjectSet { int nobject; int sobject; const char **objects; } FcObjectSet; holds a set of names and is used to specify which fields from fonts are placed in the the list of returned patterns when listing fonts. FcObjectType typedef struct _FcObjectType { const char *object; FcType type; } FcObjectType; marks the type of a pattern element generated when parsing font names. Applications can add new object types so that font names may contain the new elements. FcConstant typedef struct _FcConstant { const FcChar8 *name; const char *object; int value; } FcConstant; Provides for symbolic constants for new pattern elements. When 'name' is seen in a font name, an 'object' element is created with value 'value'. FcBlanks holds a list of Unicode chars which are expected to be blank; unexpectedly blank chars are assumed to be invalid and are elided from the charset associated with the font. FcBlanks is deprecated and should not be used in newly written code. It is still accepted by some functions for compatibility with older code but will be removed in the future. FcFileCache holds the per-user cache information for use while loading the font database. This is built automatically for the current configuration when that is loaded. Applications must always pass '0' when one is requested. FcConfig holds a complete configuration of the library; there is one default configuration, other can be constructed from XML data structures. All public entry points that need global data can take an optional FcConfig* argument; passing 0 uses the default configuration. FcConfig objects hold two sets of fonts, the first contains those specified by the configuration, the second set holds those added by the application at run-time. Interfaces that need to reference a particular set use one of the FcSetName enumerated values. FcSetName Specifies one of the two sets of fonts available in a configuration; FcSetSystem for those fonts specified in the configuration and FcSetApplication which holds fonts provided by the application. FcResult Used as a return type for functions manipulating FcPattern objects. FcResult Values Result Code Meaning ----------------------------------------------------------- FcResultMatch Object exists with the specified ID FcResultNoMatch Object doesn't exist at all FcResultTypeMismatch Object exists, but the type doesn't match FcResultNoId Object exists, but has fewer values than specified FcResultOutOfMemory malloc failed FcAtomic Used for locking access to configuration files. Provides a safe way to update configuration files. FcCache Holds information about the fonts contained in a single directory. Normal applications need not worry about this as caches for font access are automatically managed by the library. Applications dealing with cache management may want to use some of these objects in their work, however the included 'fc-cache' program generally suffices for all of that. FUNCTIONS These are grouped by functionality, often using the main data type being manipulated. Initialization These functions provide some control over how the library is initialized. &fcinit; FcPattern An FcPattern is an opaque type that holds both patterns to match against the available fonts, as well as the information about each font. &fcpattern; &fcformat; FcFontSet An FcFontSet simply holds a list of patterns; these are used to return the results of listing available fonts. &fcfontset; FcObjectSet An FcObjectSet holds a list of pattern property names; it is used to indicate which properties are to be returned in the patterns from FcFontList. &fcobjectset; FreeType specific functions While the fontconfig library doesn't insist that FreeType be used as the rasterization mechanism for fonts, it does provide some convenience functions. &fcfreetype; Fontations specific functions For font indexing, an alternative backend based on the Fontations set of font libraries is in development. The indexing functions are exposed as Fontations specific functions. &fcfontations; FcValue FcValue is a structure containing a type tag and a union of all possible datatypes. The tag is an enum of type FcType and is intended to provide a measure of run-time typechecking, although that depends on careful programming. &fcvalue; FcCharSet An FcCharSet is a boolean array indicating a set of Unicode chars. Those associated with a font are marked constant and cannot be edited. FcCharSets may be reference counted internally to reduce memory consumption; this may be visible to applications as the result of FcCharSetCopy may return it's argument, and that CharSet may remain unmodifiable. &fccharset; FcLangSet An FcLangSet is a set of language names (each of which include language and an optional territory). They are used when selecting fonts to indicate which languages the fonts need to support. Each font is marked, using language orthography information built into fontconfig, with the set of supported languages. &fclangset; FcMatrix FcMatrix structures hold an affine transformation in matrix form. &fcmatrix; FcRange An FcRange holds two variables to indicate a range in between. &fcrange; FcConfig An FcConfig object holds the internal representation of a configuration. There is a default configuration which applications may use by passing 0 to any function using the data within an FcConfig. &fcconfig; FcObjectType Provides for application-specified font name object types so that new pattern elements can be generated from font names. &fcobjecttype; FcConstant Provides for application-specified symbolic constants for font names. &fcconstant; FcWeight Maps weights to and from OpenType weights. &fcweight; FcBlanks An FcBlanks object holds a list of Unicode chars which are expected to be blank when drawn. When scanning new fonts, any glyphs which are empty and not in this list will be assumed to be broken and not placed in the FcCharSet associated with the font. This provides a significantly more accurate CharSet for applications. FcBlanks is deprecated and should not be used in newly written code. It is still accepted by some functions for compatibility with older code but will be removed in the future. &fcblanks; FcAtomic These functions provide a safe way to update configuration files, allowing ongoing reading of the old configuration file while locked for writing and ensuring that a consistent and complete version of the configuration file is always available. &fcatomic; File and Directory routines These routines work with font files and directories, including font directory cache files. &fcfile; &fcdircache; FcCache routines These routines work with font directory caches, accessing their contents in limited ways. It is not expected that normal applications will need to use these functions. &fccache; FcStrSet and FcStrList A data structure for enumerating strings, used to list directories while scanning the configuration as directories are added while scanning. &fcstrset; String utilities Fontconfig manipulates many UTF-8 strings represented with the FcChar8 type. These functions are exposed to help applications deal with these UTF-8 strings in a locale-insensitive manner. &fcstring;
fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/fontconfig-user.sgml000066400000000000000000001265341503113465200261460ustar00rootroot00000000000000 ]> fonts-conf 5 fonts.conf Font configuration files &confdir;/fonts.conf &confdir;/fonts.dtd &confdir;/conf.d $XDG_CONFIG_HOME/fontconfig/conf.d $XDG_CONFIG_HOME/fontconfig/fonts.conf ~/.fonts.conf.d ~/.fonts.conf Description Fontconfig is a library designed to provide system-wide font configuration, customization and application access. Functional Overview Fontconfig contains two essential modules, the configuration module which builds an internal configuration from XML files and the matching module which accepts font patterns and returns the nearest matching font. Font Configuration The configuration module consists of the FcConfig datatype, libexpat and FcConfigParse which walks over an XML tree and amends a configuration with data found within. From an external perspective, configuration of the library consists of generating a valid XML tree and feeding that to FcConfigParse. The only other mechanism provided to applications for changing the running configuration is to add fonts and directories to the list of application-provided font files. The intent is to make font configurations relatively static, and shared by as many applications as possible. It is hoped that this will lead to more stable font selection when passing names from one application to another. XML was chosen as a configuration file format because it provides a format which is easy for external agents to edit while retaining the correct structure and syntax. Font configuration is separate from font matching; applications needing to do their own matching can access the available fonts from the library and perform private matching. The intent is to permit applications to pick and choose appropriate functionality from the library instead of forcing them to choose between this library and a private configuration mechanism. The hope is that this will ensure that configuration of fonts for all applications can be centralized in one place. Centralizing font configuration will simplify and regularize font installation and customization. Font Properties While font patterns may contain essentially any properties, there are some well known properties with associated types. Fontconfig uses some of these properties for font matching and font completion. Others are provided as a convenience for the applications' rendering mechanism. Property Type Description -------------------------------------------------------------- family String Font family names familylang String Languages corresponding to each family style String Font style. Overrides weight and slant stylelang String Languages corresponding to each style fullname String Font full names (often includes style) fullnamelang String Languages corresponding to each fullname slant Int Italic, oblique or roman weight Int Light, medium, demibold, bold or black width Int Condensed, normal or expanded size Double Point size aspect Double Stretches glyphs horizontally before hinting pixelsize Double Pixel size spacing Int Proportional, dual-width, monospace or charcell foundry String Font foundry name antialias Bool Whether glyphs can be antialiased hintstyle Int Automatic hinting style hinting Bool Whether the rasterizer should use hinting verticallayout Bool Use vertical layout autohint Bool Use autohinter instead of normal hinter globaladvance Bool Use font global advance data (deprecated) file String The filename holding the font index Int The index of the font within the file ftface FT_Face Use the specified FreeType face object rasterizer String Which rasterizer is in use (deprecated) outline Bool Whether the glyphs are outlines scalable Bool Whether the glyphs are outlines or have color dpi Double Target dots per inch rgba Int unknown, rgb, bgr, vrgb, vbgr, none - subpixel geometry scale Double Scale factor for point->pixel conversions (deprecated) minspace Bool Eliminate leading from line spacing charset CharSet Unicode chars encoded by the font lang String List of RFC-3066-style languages this font supports fontversion Int Version number of the font capability String List of layout capabilities in the font fontformat String String name of the font format embolden Bool Rasterizer should synthetically embolden the font embeddedbitmap Bool Use the embedded bitmap instead of the outline decorative Bool Whether the style is a decorative variant lcdfilter Int Type of LCD filter namelang String Language name to be used for the default value of familylang, stylelang, and fullnamelang fontfeatures String List of the feature tags in OpenType to be enabled prgname String String Name of the running program postscriptname String Font family name in PostScript color Bool Whether any glyphs have color symbol Bool Whether font uses MS symbol-font encoding fontvariations String comma-separated string of axes in variable font variable Bool Wheter font is Variable Font fonthashint Bool Whether the font has hinting order Int Order number of the font desktop String Current desktop name namedinstance Bool Whether font is a named instance fontwarapper String The font wrapper format, current values are WOFF, WOFF2, SFNT for any other SFNT font, and CFF for standalone CFF fonts. Font Matching Fontconfig performs matching by measuring the distance from a provided pattern to all of the available fonts in the system. The closest matching font is selected. This ensures that a font will always be returned, but doesn't ensure that it is anything like the requested pattern. Font matching starts with an application constructed pattern. The desired attributes of the resulting font are collected together in a pattern. Each property of the pattern can contain one or more values; these are listed in priority order; matches earlier in the list are considered "closer" than matches later in the list. The initial pattern is modified by applying the list of editing instructions specific to patterns found in the configuration; each consists of a match predicate and a set of editing operations. They are executed in the order they appeared in the configuration. Each match causes the associated sequence of editing operations to be applied. After the pattern has been edited, a sequence of default substitutions are performed to canonicalize the set of available properties; this avoids the need for the lower layers to constantly provide default values for various font properties during rendering. The canonical font pattern is finally matched against all available fonts. The distance from the pattern to the font is measured for each of several properties: foundry, charset, family, lang, spacing, pixelsize, style, slant, weight, antialias, rasterizer and outline. This list is in priority order -- results of comparing earlier elements of this list weigh more heavily than later elements. There is one special case to this rule; family names are split into two bindings; strong and weak. Strong family names are given greater precedence in the match than lang elements while weak family names are given lower precedence than lang elements. This permits the document language to drive font selection when any document specified font is unavailable. The pattern representing that font is augmented to include any properties found in the pattern but not found in the font itself; this permits the application to pass rendering instructions or any other data through the matching system. Finally, the list of editing instructions specific to fonts found in the configuration are applied to the pattern. This modified pattern is returned to the application. The return value contains sufficient information to locate and rasterize the font, including the file name, pixel size and other rendering data. As none of the information involved pertains to the FreeType library, applications are free to use any rasterization engine or even to take the identified font file and access it directly. The match/edit sequences in the configuration are performed in two passes because there are essentially two different operations necessary -- the first is to modify how fonts are selected; aliasing families and adding suitable defaults. The second is to modify how the selected fonts are rasterized. Those must apply to the selected font, not the original pattern as false matches will often occur. Font Names Fontconfig provides a textual representation for patterns that the library can both accept and generate. The representation is in three parts, first a list of family names, second a list of point sizes and finally a list of additional properties: <families>-<point sizes>:<name1>=<values1>:<name2>=<values2>... Values in a list are separated with commas. The name needn't include either families or point sizes; they can be elided. In addition, there are symbolic constants that simultaneously indicate both a name and a value. Here are some examples: Name Meaning ---------------------------------------------------------- Times-12 12 point Times Roman Times-12:bold 12 point Times Bold Courier:italic Courier Italic in the default size Monospace:matrix=1 .1 0 1 The users preferred monospace font with artificial obliquing The '\', '-', ':' and ',' characters in family names must be preceded by a '\' character to avoid having them misinterpreted. Similarly, values containing '\', '=', '_', ':' and ',' must also have them preceded by a '\' character. The '\' characters are stripped out of the family name and values as the font name is read. Debugging Applications To help diagnose font and applications problems, fontconfig is built with a large amount of internal debugging left enabled. It is controlled by means of the FC_DEBUG environment variable. The value of this variable is interpreted as a number, and each bit within that value controls different debugging messages. Name Value Meaning --------------------------------------------------------- MATCH 1 Brief information about font matching MATCHV 2 Extensive font matching information EDIT 4 Monitor match/test/edit execution FONTSET 8 Track loading of font information at startup CACHE 16 Watch cache files being written CACHEV 32 Extensive cache file writing information PARSE 64 (no longer in use) SCAN 128 Watch font files being scanned to build caches SCANV 256 Verbose font file scanning information MEMORY 512 Monitor fontconfig memory usage CONFIG 1024 Monitor which config files are loaded LANGSET 2048 Dump char sets used to construct lang values MATCH2 4096 Display font-matching transformation in patterns Add the value of the desired debug levels together and assign that (in base 10) to the FC_DEBUG environment variable before running the application. Output from these statements is sent to stdout. Lang Tags Each font in the database contains a list of languages it supports. This is computed by comparing the Unicode coverage of the font with the orthography of each language. Languages are tagged using an RFC-3066 compatible naming and occur in two parts -- the ISO 639 language tag followed a hyphen and then by the ISO 3166 country code. The hyphen and country code may be elided. Fontconfig has orthographies for several languages built into the library. No provision has been made for adding new ones aside from rebuilding the library. It currently supports 122 of the 139 languages named in ISO 639-1, 141 of the languages with two-letter codes from ISO 639-2 and another 30 languages with only three-letter codes. Languages with both two and three letter codes are provided with only the two letter code. For languages used in multiple territories with radically different character sets, fontconfig includes per-territory orthographies. This includes Azerbaijani, Kurdish, Pashto, Tigrinya and Chinese. Configuration File Format Configuration files for fontconfig are stored in XML format; this format makes external configuration tools easier to write and ensures that they will generate syntactically correct configuration files. As XML files are plain text, they can also be manipulated by the expert user using a text editor. The fontconfig document type definition resides in the external entity "fonts.dtd"; this is normally stored in the default font configuration directory (&confdir;). Each configuration file should contain the following structure: <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd"> <fontconfig> ... </fontconfig> <literal><fontconfig></literal> This is the top level element for a font configuration and can contain <dir>, <cachedir>, <include>, <match> and <alias> elements in any order. <literal><dir prefix="default" salt=""></literal> This element contains a directory name which will be scanned for font files to include in the set of available fonts. If 'prefix' is set to "default" or "cwd", the current working directory will be added as the path prefix prior to the value. If 'prefix' is set to "xdg", the value in the XDG_DATA_HOME environment variable will be added as the path prefix. please see XDG Base Directory Specification for more details. If 'prefix' is set to "relative", the path of current file will be added prior to the value. 'salt' property affects to determine cache filename. this is useful for example when having different fonts sets on same path at container and share fonts from host on different font path. <literal><cachedir prefix="default"></literal> This element contains a directory name that is supposed to be stored or read the cache of font information. If multiple elements are specified in the configuration file, the directory that can be accessed first in the list will be used to store the cache files. If it starts with '~', it refers to a directory in the users home directory. If 'prefix' is set to "xdg", the value in the XDG_CACHE_HOME environment variable will be added as the path prefix. please see XDG Base Directory Specification for more details. The default directory is ``$XDG_CACHE_HOME/fontconfig'' and it contains the cache files named ``<hash value>-<architecture>.cache-<version>'', where <version> is the fontconfig cache file version number (currently &cacheversion;). <literal><include ignore_missing="no" prefix="default"></literal> This element contains the name of an additional configuration file or directory. If a directory, every file within that directory starting with an ASCII digit (U+0030 - U+0039) and ending with the string ``.conf'' will be processed in sorted order. When the XML datatype is traversed by FcConfigParse, the contents of the file(s) will also be incorporated into the configuration by passing the filename(s) to FcConfigLoadAndParse. If 'ignore_missing' is set to "yes" instead of the default "no", a missing file or directory will elicit no warning message from the library. If 'prefix' is set to "xdg", the value in the XDG_CONFIG_HOME environment variable will be added as the path prefix. please see XDG Base Directory Specification for more details. <literal><config></literal> This element provides a place to consolidate additional configuration information. <config> can contain <blank> and <rescan> elements in any order. <literal><description domain="fontconfig-conf"></literal> This element is supposed to hold strings which describe what a config is used for. This string can be translated through gettext. 'domain' needs to be set the proper name to apply then. fontconfig will tries to retrieve translations with 'domain' from gettext. <literal><blank></literal> Fonts often include "broken" glyphs which appear in the encoding but are drawn as blanks on the screen. Within the <blank> element, place each Unicode characters which is supposed to be blank in an <int> element. Characters outside of this set which are drawn as blank will be elided from the set of characters supported by the font. <literal><remap-dir prefix="default" as-path="" salt=""></literal> This element contains a directory name where will be mapped as the path 'as-path' in cached information. This is useful if the directory name is an alias (via a bind mount or symlink) to another directory in the system for which cached font information is likely to exist. 'salt' property affects to determine cache filename as same as <dir> element. <literal><reset-dirs /></literal> This element removes all of fonts directories where added by <dir> elements. This is useful to override fonts directories from system to own fonts directories only. <literal><rescan></literal> The <rescan> element holds an <int> element which indicates the default interval between automatic checks for font configuration changes. Fontconfig will validate all of the configuration files and directories and automatically rebuild the internal datastructures when this interval passes. <literal><selectfont></literal> This element is used to deny/allow list fonts from being listed or matched against. It holds acceptfont and rejectfont elements. This list is applied only once when caches is loaded. So if you want to filter out by some patterns, patterns is evaluated with something in cache only. In other words, target patterns except "scan" won't takes any effects. <literal><acceptfont></literal> Fonts matched by an acceptfont element are "allowlisted"; such fonts are explicitly included in the set of fonts used to resolve list and match requests; including them in this list protects them from being "denylisted" by a rejectfont element. Acceptfont elements include glob and pattern elements which are used to match fonts. <literal><rejectfont></literal> Fonts matched by an rejectfont element are "denylisted"; such fonts are excluded from the set of fonts used to resolve list and match requests as if they didn't exist in the system. Rejectfont elements include glob and pattern elements which are used to match fonts. <literal><glob></literal> Glob elements hold shell-style filename matching patterns (including ? and *) which match fonts based on their complete pathnames. If it starts with '~', it refers to a directory in the users home directory. This can be used to exclude a set of directories (/usr/share/fonts/uglyfont*), or particular font file types (*.pcf.gz), but the latter mechanism relies rather heavily on filenaming conventions which can't be relied upon. Note that globs only apply to directories, not to individual fonts. <literal><pattern></literal> Pattern elements perform list-style matching on incoming fonts; that is, they hold a list of elements and associated values. If all of those elements have a matching value, then the pattern matches the font. This can be used to select fonts based on attributes of the font (scalable, bold, etc), which is a more reliable mechanism than using file extensions. Pattern elements include patelt elements. <literal><patelt name="property"></literal> Patelt elements hold a single pattern element and list of values. They must have a 'name' attribute which indicates the pattern element name. Patelt elements include int, double, string, matrix, bool, charset and const elements. <literal><match target="pattern"></literal> This element holds first a (possibly empty) list of <test> elements and then a (possibly empty) list of <edit> elements. Patterns which match all of the tests are subjected to all the edits. If 'target' is set to "font" instead of the default "pattern", then this element applies to the font name resulting from a match rather than a font pattern to be matched. If 'target' is set to "scan", then this element applies when the font is scanned to build the fontconfig database. <literal><test qual="any" name="property" target="default" compare="eq"></literal> This element contains a single value which is compared with the target ('pattern', 'font', 'scan' or 'default') property "property" (substitute any of the property names seen above). 'compare' can be one of "eq", "not_eq", "less", "less_eq", "more", "more_eq", "contains" or "not_contains". 'qual' may either be the default, "any", in which case the match succeeds if any value associated with the property matches the test value, or "all", in which case all of the values associated with the property must match the test value. 'ignore-blanks' takes a boolean value. if 'ignore-blanks' is set "true", any blanks in the string will be ignored on its comparison. this takes effects only when compare="eq" or compare="not_eq". When used in a <match target="font"> element, the target= attribute in the <test> element selects between matching the original pattern or the font. "default" selects whichever target the outer <match> element has selected. <literal><edit name="property" mode="assign" binding="weak"></literal> This element contains a list of expression elements (any of the value or operator elements). The expression elements are evaluated at run-time and modify the property "property". The modification depends on whether "property" was matched by one of the associated <test> elements, if so, the modification may affect the first matched value. Any values inserted into the property are given the indicated binding ("strong", "weak" or "same") with "same" binding using the value from the matched pattern element. 'mode' is one of: Mode With Match Without Match --------------------------------------------------------------------- "assign" Replace matching value Replace all values "assign_replace" Replace all values Replace all values "prepend" Insert before matching Insert at head of list "prepend_first" Insert at head of list Insert at head of list "append" Append after matching Append at end of list "append_last" Append at end of list Append at end of list "delete" Delete matching value Delete all values "delete_all" Delete all values Delete all values <literal><int></literal>, <literal><double></literal>, <literal><string></literal>, <literal><bool></literal> These elements hold a single value of the indicated type. <bool> elements hold either true or false. An important limitation exists in the parsing of floating point numbers -- fontconfig requires that the mantissa start with a digit, not a decimal point, so insert a leading zero for purely fractional values (e.g. use 0.5 instead of .5 and -0.5 instead of -.5). <literal><matrix></literal> This element holds four numerical expressions of an affine transformation. At their simplest these will be four <double> elements but they can also be more involved expressions. <literal><range></literal> This element holds the two <int> elements of a range representation. <literal><charset></literal> This element holds at least one <int> element of an Unicode code point or more. <literal><langset></literal> This element holds at least one <string> element of a RFC-3066-style languages or more. <literal><name></literal> Holds a property name. Evaluates to the first value from the property of the pattern. If the 'target' attribute is not present, it will default to 'default', in which case the property is returned from the font pattern during a target="font" match, and to the pattern during a target="pattern" match. The attribute can also take the values 'font' or 'pattern' to explicitly choose which pattern to use. It is an error to use a target of 'font' in a match that has target="pattern". <literal><const></literal> Holds the name of a constant; these are always integers and serve as symbolic names for common font values: Constant Property Value ------------------------------------- thin weight 0 extralight weight 40 ultralight weight 40 light weight 50 demilight weight 55 semilight weight 55 book weight 75 regular weight 80 normal weight 80 medium weight 100 demibold weight 180 semibold weight 180 bold weight 200 extrabold weight 205 ultrabold weight 205 black weight 210 heavy weight 210 extrablack weight 215 ultrablack weight 215 roman slant 0 italic slant 100 oblique slant 110 ultracondensed width 50 extracondensed width 63 condensed width 75 semicondensed width 87 normal width 100 semiexpanded width 113 expanded width 125 extraexpanded width 150 ultraexpanded width 200 proportional spacing 0 dual spacing 90 mono spacing 100 charcell spacing 110 unknown rgba 0 rgb rgba 1 bgr rgba 2 vrgb rgba 3 vbgr rgba 4 none rgba 5 lcdnone lcdfilter 0 lcddefault lcdfilter 1 lcdlight lcdfilter 2 lcdlegacy lcdfilter 3 hintnone hintstyle 0 hintslight hintstyle 1 hintmedium hintstyle 2 hintfull hintstyle 3 <literal><or></literal>, <literal><and></literal>, <literal><plus></literal>, <literal><minus></literal>, <literal><times></literal>, <literal><divide></literal> These elements perform the specified operation on a list of expression elements. <or> and <and> are boolean, not bitwise. <literal><eq></literal>, <literal><not_eq></literal>, <literal><less></literal>, <literal><less_eq></literal>, <literal><more></literal>, <literal><more_eq></literal>, <literal><contains></literal>, <literal><not_contains</literal> These elements compare two values, producing a boolean result. <literal><not></literal> Inverts the boolean sense of its one expression element <literal><if></literal> This element takes three expression elements; if the value of the first is true, it produces the value of the second, otherwise it produces the value of the third. <literal><alias></literal> Alias elements provide a shorthand notation for the set of common match operations needed to substitute one font family for another. They contain a <family> element followed by optional <prefer>, <accept> and <default> elements. Fonts matching the <family> element are edited to prepend the list of <prefer>ed families before the matching <family>, append the <accept>able families after the matching <family> and append the <default> families to the end of the family list. <literal><family></literal> Holds a single font family name <literal><prefer></literal>, <literal><accept></literal>, <literal><default></literal> These hold a list of <family> elements to be used by the <alias> element. EXAMPLE CONFIGURATION FILE System configuration file This is an example of a system-wide configuration file <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd"> <!-- &confdir;/fonts.conf file to configure system font access --> <fontconfig> <!-- Find fonts in these directories --> <dir>/usr/share/fonts</dir> <dir>/usr/X11R6/lib/X11/fonts</dir> <!-- Accept deprecated 'mono' alias, replacing it with 'monospace' --> <match target="pattern"> <test qual="any" name="family"> <string>mono</string> </test> <edit name="family" mode="assign"> <string>monospace</string> </edit> </match> <!-- Names not including any well known alias are given 'sans-serif' --> <match target="pattern"> <test qual="all" name="family" compare="not_eq"> <string>sans-serif</string> </test> <test qual="all" name="family" compare="not_eq"> <string>serif</string> </test> <test qual="all" name="family" compare="not_eq"> <string>monospace</string> </test> <edit name="family" mode="append_last"> <string>sans-serif</string> </edit> </match> <!-- Load per-user customization file, but don't complain if it doesn't exist --> <include ignore_missing="yes" prefix="xdg"> fontconfig/fonts.conf </include> <!-- Load local customization files, but don't complain if there aren't any --> <include ignore_missing="yes">conf.d</include> <include ignore_missing="yes">local.conf</include> <!-- Alias well known font names to available TrueType fonts. These substitute TrueType faces for similar Type1 faces to improve screen appearance. --> <alias> <family>Times</family> <prefer> <family>Times New Roman</family> </prefer> <default> <family>serif</family> </default> </alias> <alias> <family>Helvetica</family> <prefer> <family>Arial</family> </prefer> <default> <family>sans-serif</family> </default> </alias> <alias> <family>Courier</family> <prefer> <family>Courier New</family> </prefer> <default> <family>monospace</family> </default> </alias> <!-- Provide required aliases for standard names Do these after the users configuration file so that any aliases there are used preferentially --> <alias> <family>serif</family> <prefer> <family>Times New Roman</family> </prefer> </alias> <alias> <family>sans-serif</family> <prefer> <family>Arial</family> </prefer> </alias> <alias> <family>monospace</family> <prefer> <family>Andale Mono</family> </prefer> </alias> <-- The example of the requirements of OR operator; If the 'family' contains 'Courier New' OR 'Courier' add 'monospace' as the alternative --> <match target="pattern"> <test name="family" compare="eq"> <string>Courier New</string> </test> <edit name="family" mode="prepend"> <string>monospace</string> </edit> </match> <match target="pattern"> <test name="family" compare="eq"> <string>Courier</string> </test> <edit name="family" mode="prepend"> <string>monospace</string> </edit> </match> </fontconfig> User configuration file This is an example of a per-user configuration file that lives in $XDG_CONFIG_HOME/fontconfig/fonts.conf <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd"> <!-- $XDG_CONFIG_HOME/fontconfig/fonts.conf for per-user font configuration --> <fontconfig> <!-- Private font directory --> <dir prefix="xdg">fonts</dir> <!-- use rgb sub-pixel ordering to improve glyph appearance on LCD screens. Changes affecting rendering, but not matching should always use target="font". --> <match target="font"> <edit name="rgba" mode="assign"> <const>rgb</const> </edit> </match> <!-- use WenQuanYi Zen Hei font when serif is requested for Chinese --> <match> <!-- If you don't want to use WenQuanYi Zen Hei font for zh-tw etc, you can use zh-cn instead of zh. Please note, even if you set zh-cn, it still matches zh. if you don't like it, you can use compare="eq" instead of compare="contains". --> <test name="lang" compare="contains"> <string>zh</string> </test> <test name="family"> <string>serif</string> </test> <edit name="family" mode="prepend"> <string>WenQuanYi Zen Hei</string> </edit> </match> <!-- use VL Gothic font when sans-serif is requested for Japanese --> <match> <test name="lang" compare="contains"> <string>ja</string> </test> <test name="family"> <string>sans-serif</string> </test> <edit name="family" mode="prepend"> <string>VL Gothic</string> </edit> </match> </fontconfig> Files fonts.conf contains configuration information for the fontconfig library consisting of directories to look at for font information as well as instructions on editing program specified font patterns before attempting to match the available fonts. It is in XML format. conf.d is the conventional name for a directory of additional configuration files managed by external applications or the local administrator. The filenames starting with decimal digits are sorted in lexicographic order and used as additional configuration files. All of these files are in XML format. The master fonts.conf file references this directory in an <include> directive. fonts.dtd is a DTD that describes the format of the configuration files. $XDG_CONFIG_HOME/fontconfig/conf.d and ~/.fonts.conf.d is the conventional name for a per-user directory of (typically auto-generated) configuration files, although the actual location is specified in the global fonts.conf file. please note that ~/.fonts.conf.d is deprecated now. it will not be read by default in the future version. $XDG_CONFIG_HOME/fontconfig/fonts.conf and ~/.fonts.conf is the conventional location for per-user font configuration, although the actual location is specified in the global fonts.conf file. please note that ~/.fonts.conf is deprecated now. it will not be read by default in the future version. $XDG_CACHE_HOME/fontconfig/*.cache-* and ~/.fontconfig/*.cache-* is the conventional repository of font information that isn't found in the per-directory caches. This file is automatically maintained by fontconfig. please note that ~/.fontconfig/*.cache-* is deprecated now. it will not be read by default in the future version. Environment variables FONTCONFIG_FILE is used to override the default configuration file. FONTCONFIG_PATH is used to override the default configuration directory. FONTCONFIG_SYSROOT is used to set a default sysroot directory. FC_DEBUG is used to output the detailed debugging messages. see Debugging Applications section for more details. FC_DBG_MATCH_FILTER is used to filter out the patterns. this takes a comma-separated list of object names and effects only when FC_DEBUG has MATCH2. see Debugging Applications section for more details. FC_LANG is used to specify the default language as the weak binding in the query. if this isn't set, the default language will be determined from current locale. FONTCONFIG_USE_MMAP is used to control the use of mmap(2) for the cache files if available. this take a boolean value. fontconfig will checks if the cache files are stored on the filesystem that is safe to use mmap(2). explicitly setting this environment variable will causes skipping this check and enforce to use or not use mmap(2) anyway. SOURCE_DATE_EPOCH is used to ensure fc-cache(1) generates files in a deterministic manner in order to support reproducible builds. When set to a numeric representation of UNIX timestamp, fontconfig will prefer this value over using the modification timestamps of the input files in order to identify which cache files require regeneration. If SOURCE_DATE_EPOCH is not set (or is newer than the mtime of the directory), the existing behaviour is unchanged. See Also fc-cat(1), fc-cache(1), fc-list(1), fc-match(1), fc-query(1), SOURCE_DATE_EPOCH. Version Fontconfig version &version; fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/func.sgml000066400000000000000000000055361503113465200237670ustar00rootroot00000000000000 @?TITLE@ @:@ @;@ @?TITLE@ @TITLE@ @:@ @FUNC@ @;@ 3 Fontconfig &version; @{PROTOTYPE@ @FUNC@ @}PROTOTYPE@ @PURPOSE@ @?SYNOPSIS@ @SYNOPSIS@ @:@ #include <fontconfig/fontconfig.h> @;@ @{PROTOTYPE@ @?RET@@RET@@:@void@;@ @FUNC@ @?TYPE1@ @TYPE1@@ARG1@ @;@ @?TYPE2@ @TYPE2@@ARG2@ @;@ @?TYPE3@ @TYPE3@@ARG3@ @;@ @?TYPE4@ @TYPE4@@ARG4@ @;@ @?TYPE5@ @TYPE5@@ARG5@ @;@ @?TYPE6@ @TYPE6@@ARG6@ @;@ @?TYPE7@ @TYPE7@@ARG7@ @;@ @}PROTOTYPE@ Description @DESC@ @?SINCE@ Since version @SINCE@ @;@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/meson.build000066400000000000000000000133621503113465200243060ustar00rootroot00000000000000doc_targets = [] tests = [] if host_machine.system() != 'windows' tests += [ 'check-missing-doc.py', # 'check-whitespace-in-args' ] meson.add_dist_script(find_program('check-whitespace-in-args.py'), '@SOURCE_ROOT@/doc') endif docbook2man = find_program('docbook2man', required: get_option('doc-man')) docbook2txt = find_program('docbook2txt', required: get_option('doc-txt')) docbook2pdf = find_program('docbook2pdf', required: get_option('doc-pdf')) docbook2html = find_program('docbook2html', required: get_option('doc-html')) # docbook is very spammy run_quiet = find_program('run-quiet.py') # .fncs files doc_funcs_fncs = [ 'fcatomic', 'fcblanks', 'fccache', 'fccharset', 'fcconfig', 'fcconstant', 'fcdircache', 'fcfile', 'fcfontset', 'fcfontations', 'fcformat', 'fcfreetype', 'fcinit', 'fclangset', 'fcmatrix', 'fcobjectset', 'fcobjecttype', 'fcpattern', 'fcrange', 'fcstring', 'fcstrset', 'fcvalue', 'fcweight', ] fncs_files = [] foreach f : doc_funcs_fncs fncs_files += files('@0@.fncs'.format(f)) endforeach man_pages = [] extract_man_list = find_program('extract-man-list.py') man_list = run_command(extract_man_list, fncs_files, check: true).stdout().split() foreach m : man_list man_pages += ['@0@.3'.format(m)] endforeach # Generate sgml pages for funcs edit_sgml = find_program('edit-sgml.py') # copy into build directory, it includes generated files from build directory fontconfig_devel_sgml = fs.copyfile('fontconfig-devel.sgml') fontconfig_user_sgml = fs.copyfile('fontconfig-user.sgml') cacheversion_conf = configuration_data() cacheversion_conf.set('CACHE_VERSION', cacheversion) configure_file(output: 'cache-version.sgml', input: 'cache-version.sgml.in', configuration: cacheversion_conf) version_conf = configuration_data() version_conf.set('VERSION', meson.project_version()) configure_file(output: 'version.sgml', input: 'version.sgml.in', configuration: version_conf) confdir_conf = configuration_data() confdir_conf.set('BASECONFIGDIR', fc_configdir) confdir_sgml = configure_file(output: 'confdir.sgml', input: 'confdir.sgml.in', configuration: confdir_conf) funcs_sgml = [] foreach f : doc_funcs_fncs funcs_sgml += [custom_target('@0@.sgml'.format(f), input: [files('func.sgml'), files('@0@.fncs'.format(f))], output: '@0@.sgml'.format(f), command: [edit_sgml, '@INPUT0@', '@INPUT1@', '@OUTPUT@'], install: false)] endforeach if docbook2man.found() doc_targets += ['man'] custom_target('devel-man', input: [fontconfig_devel_sgml, funcs_sgml], output: man_pages, command: [run_quiet, docbook2man, '@INPUT0@', '--output', '@OUTDIR@'], build_by_default: true, install_dir: get_option('mandir') / 'man3', install: true, install_tag: 'docs') # fonts.conf(5) custom_target('fonts-conf-5-man-page', input: [fontconfig_user_sgml], output: 'fonts-conf.5', command: [run_quiet, docbook2man, '@INPUT0@', '--output', '@OUTDIR@'], install_dir: get_option('mandir') / 'man5', build_by_default: true, install: true, install_tag: 'docs') # Generate man pages for tools foreach t : tools_man_pages # docbook2man doesn't seem to have a --quiet option unfortunately custom_target('@0@-man-page'.format(t), input: '../@0@/@0@.sgml'.format(t), output: '@0@.1'.format(t), command: [run_quiet, docbook2man, '@INPUT@', '--output', '@OUTDIR@'], install_dir: get_option('mandir') / 'man1', install: true, install_tag: 'docs') endforeach endif if docbook2pdf.found() doc_targets += ['PDF'] custom_target('devel-pdf', input: [fontconfig_devel_sgml, funcs_sgml], output: 'fontconfig-devel.pdf', command: [run_quiet, docbook2pdf, '@INPUT0@', '--output', '@OUTDIR@'], build_by_default: true, install_dir: get_option('datadir') / 'doc' / 'fontconfig', install: true, install_tag: 'docs') custom_target('user-pdf', input: [fontconfig_user_sgml, funcs_sgml], output: 'fontconfig-user.pdf', command: [run_quiet, docbook2pdf, '@INPUT0@', '--output', '@OUTDIR@'], build_by_default: true, install_dir: get_option('datadir') / 'doc' / 'fontconfig', install: true, install_tag: 'docs') endif if docbook2txt.found() doc_targets += ['Text'] custom_target('devel-txt', input: [fontconfig_devel_sgml, funcs_sgml], output: 'fontconfig-devel.txt', command: [run_quiet, docbook2txt, '@INPUT0@', '--output', '@OUTDIR@'], build_by_default: true, install_dir: get_option('datadir') / 'doc' / 'fontconfig', install: true, install_tag: 'docs') custom_target('user-txt', input: [fontconfig_user_sgml, funcs_sgml], output: 'fontconfig-user.txt', command: [run_quiet, docbook2txt, '@INPUT0@', '--output', '@OUTDIR@'], build_by_default: true, install_dir: get_option('datadir') / 'doc' / 'fontconfig', install: true, install_tag: 'docs') endif if docbook2html.found() doc_targets += ['HTML'] custom_target('devel-html', input: [fontconfig_devel_sgml, funcs_sgml], output: 'fontconfig-devel.html', command: [run_quiet, docbook2html, '--nochunks', '@INPUT0@', '--output', '@OUTDIR@'], build_by_default: true, install_dir: get_option('datadir') / 'doc' / 'fontconfig', install: true, install_tag: 'docs') custom_target('user-html', input: [fontconfig_user_sgml, funcs_sgml], output: 'fontconfig-user.html', command: [run_quiet, docbook2html, '--nochunks', '@INPUT0@', '--output', '@OUTDIR@'], build_by_default: true, install_dir: get_option('datadir') / 'doc' / 'fontconfig', install: true, install_tag: 'docs') endif foreach script : tests py = find_program(script) test(script, py, args: [meson.project_source_root(), meson.project_build_root()]) endforeach fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/run-quiet.py000077500000000000000000000027261503113465200244540ustar00rootroot00000000000000#!/usr/bin/env python3 # # fontconfig/doc/run-quiet.py # # Runs command and discards anything it sends to stdout # # Copyright © 2020 Tim-Philipp Müller # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. import subprocess import sys import os if len(sys.argv) < 2: sys.exit('Usage: {} PROGRAM [ARGS..]'.format(sys.argv[0])) command = sys.argv[1:] with open(os.devnull, 'w') as out: sys.exit(subprocess.run(command, stdout=out).returncode) fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/doc/version.sgml.in000066400000000000000000000022701503113465200251160ustar00rootroot00000000000000 @VERSION@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-cache/000077500000000000000000000000001503113465200230235ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-cache/Makefile.am000066400000000000000000000035631503113465200250660ustar00rootroot00000000000000# # fontconfig/fc-cache/Makefile.am # # Copyright © 2003 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. DOC2MAN = docbook2man FC_CACHE_SRC=${top_srcdir}/fc-cache SGML = ${FC_CACHE_SRC}/fc-cache.sgml if OS_WIN32 else install-data-local: -$(mkinstalldirs) "$(DESTDIR)$(fc_cachedir)" uninstall-local: -$(RM) -rf "$(DESTDIR)$(fc_cachedir)" endif AM_CPPFLAGS=-I${top_srcdir} -I${top_srcdir}/src $(WARN_CFLAGS) bin_PROGRAMS=fc-cache BUILT_MANS=fc-cache.1 if ENABLE_DOCS man_MANS=${BUILT_MANS} endif EXTRA_DIST=fc-cache.sgml $(BUILT_MANS) CLEANFILES = fc_cache_LDADD = ${top_builddir}/src/libfontconfig.la if USEDOCBOOK ${man_MANS}: ${SGML} $(AM_V_GEN) $(RM) $@; \ $(DOC2MAN) ${SGML}; \ $(RM) manpage.* all-local: $(man_MANS) CLEANFILES += ${man_MANS} else all-local: endif -include $(top_srcdir)/git.mk fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-cache/fc-cache.c000066400000000000000000000272501503113465200246260ustar00rootroot00000000000000/* * fontconfig/fc-cache/fc-cache.c * * Copyright © 2002 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_CONFIG_H # include #else # ifdef linux # define HAVE_GETOPT_LONG 1 # endif # define HAVE_GETOPT 1 #endif #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include #include #ifdef HAVE_DIRENT_H # include #endif #include #include #if defined(_WIN32) # define STRICT # include # define sleep(x) Sleep ((x) * 1000) # undef STRICT #endif #ifdef ENABLE_NLS # include # define _(x) (dgettext (GETTEXT_PACKAGE, x)) #else # define dgettext(d, s) (s) # define _(x) (x) #endif #ifndef O_BINARY # define O_BINARY 0 #endif #ifndef S_ISDIR # define S_ISDIR(m) (((m) & _S_IFMT) == _S_IFDIR) #endif #ifndef HAVE_GETOPT # define HAVE_GETOPT 0 #endif #ifndef HAVE_GETOPT_LONG # define HAVE_GETOPT_LONG 0 #endif #if HAVE_GETOPT_LONG # undef _GNU_SOURCE # define _GNU_SOURCE # include const struct option longopts[] = { { "error-on-no-fonts", 0, 0, 'E' }, { "force", 0, 0, 'f' }, { "really-force", 0, 0, 'r' }, { "sysroot", required_argument, 0, 'y' }, { "system-only", 0, 0, 's' }, { "version", 0, 0, 'V' }, { "verbose", 0, 0, 'v' }, { "help", 0, 0, 'h' }, { NULL, 0, 0, 0 }, }; #else # if HAVE_GETOPT extern char *optarg; extern int optind, opterr, optopt; # endif #endif static void usage (char *program, int error) { FILE *file = error ? stderr : stdout; #if HAVE_GETOPT_LONG fprintf (file, _("usage: %s [-EfrsvVh] [-y SYSROOT] [--error-on-no-fonts] [--force|--really-force] [--sysroot=SYSROOT] [--system-only] [--verbose] [--version] [--help] [dirs]\n"), program); #else fprintf (file, _("usage: %s [-EfrsvVh] [-y SYSROOT] [dirs]\n"), program); #endif fprintf (file, _("Build font information caches in [dirs]\n" "(all directories in font configuration by default).\n")); fprintf (file, "\n"); #if HAVE_GETOPT_LONG fprintf (file, _(" -E, --error-on-no-fonts raise an error if no fonts in a directory\n")); fprintf (file, _(" -f, --force scan directories with apparently valid caches\n")); fprintf (file, _(" -r, --really-force erase all existing caches, then rescan\n")); fprintf (file, _(" -s, --system-only scan system-wide directories only\n")); fprintf (file, _(" -y, --sysroot=SYSROOT prepend SYSROOT to all paths for scanning\n")); fprintf (file, _(" -v, --verbose display status information while busy\n")); fprintf (file, _(" -V, --version display font config version and exit\n")); fprintf (file, _(" -h, --help display this help and exit\n")); #else fprintf (file, _(" -E (error-on-no-fonts)\n")); fprintf (file, _(" raise an error if no fonts in a directory\n")); fprintf (file, _(" -f (force) scan directories with apparently valid caches\n")); fprintf (file, _(" -r, (really force) erase all existing caches, then rescan\n")); fprintf (file, _(" -s (system) scan system-wide directories only\n")); fprintf (file, _(" -y SYSROOT (sysroot) prepend SYSROOT to all paths for scanning\n")); fprintf (file, _(" -v (verbose) display status information while busy\n")); fprintf (file, _(" -V (version) display font config version and exit\n")); fprintf (file, _(" -h (help) display this help and exit\n")); #endif exit (error); } static FcStrSet *processed_dirs; static int scanDirs (FcStrList *list, FcConfig *config, FcBool force, FcBool really_force, FcBool verbose, FcBool error_on_no_fonts, int *changed) { int ret = 0; const FcChar8 *dir; FcStrSet *subdirs; FcStrList *sublist; FcCache *cache; struct stat statb; FcBool was_valid, was_processed = FcFalse; int i; const FcChar8 *sysroot = FcConfigGetSysRoot (config); /* * Now scan all of the directories into separate databases * and write out the results */ while ((dir = FcStrListNext (list))) { if (verbose) { if (sysroot) printf ("[%s]", sysroot); printf ("%s: ", dir); fflush (stdout); } if (FcStrSetMember (processed_dirs, dir)) { if (verbose) printf (_("skipping, looped directory detected\n")); continue; } FcChar8 *rooted_dir = NULL; if (sysroot) { rooted_dir = FcStrPlus (sysroot, dir); } else { rooted_dir = FcStrCopy (dir); } if (stat ((char *)rooted_dir, &statb) == -1) { switch (errno) { case ENOENT: case ENOTDIR: if (verbose) printf (_("skipping, no such directory\n")); break; default: fprintf (stderr, "\"%s\": ", dir); perror (""); ret++; break; } FcStrFree (rooted_dir); rooted_dir = NULL; continue; } FcStrFree (rooted_dir); rooted_dir = NULL; if (!S_ISDIR (statb.st_mode)) { fprintf (stderr, _("\"%s\": not a directory, skipping\n"), dir); continue; } was_processed = FcTrue; if (really_force) { FcDirCacheUnlink (dir, config); } cache = NULL; was_valid = FcFalse; if (!force) { cache = FcDirCacheLoad (dir, config, NULL); if (cache) was_valid = FcTrue; } if (!cache) { (*changed)++; cache = FcDirCacheRead (dir, FcTrue, config); if (!cache) { fprintf (stderr, _("\"%s\": scanning error\n"), dir); ret++; continue; } } if (was_valid) { if (verbose) printf (_("skipping, existing cache is valid: %d fonts, %d dirs\n"), FcCacheNumFont (cache), FcCacheNumSubdir (cache)); } else { if (verbose) printf (_("caching, new cache contents: %d fonts, %d dirs\n"), FcCacheNumFont (cache), FcCacheNumSubdir (cache)); if (!FcDirCacheValid (dir)) { fprintf (stderr, _("%s: failed to write cache\n"), dir); (void)FcDirCacheUnlink (dir, config); ret++; } } subdirs = FcStrSetCreate(); if (!subdirs) { fprintf (stderr, _("%s: Can't create subdir set\n"), dir); ret++; FcDirCacheUnload (cache); continue; } for (i = 0; i < FcCacheNumSubdir (cache); i++) FcStrSetAdd (subdirs, FcCacheSubdir (cache, i)); FcDirCacheUnload (cache); sublist = FcStrListCreate (subdirs); FcStrSetDestroy (subdirs); if (!sublist) { fprintf (stderr, _("%s: Can't create subdir list\n"), dir); ret++; continue; } FcStrSetAdd (processed_dirs, dir); ret += scanDirs (sublist, config, force, really_force, verbose, error_on_no_fonts, changed); FcStrListDone (sublist); } if (error_on_no_fonts && !was_processed) ret++; return ret; } static FcBool cleanCacheDirectories (FcConfig *config, FcBool verbose) { FcStrList *cache_dirs = FcConfigGetCacheDirs (config); FcChar8 *cache_dir; FcBool ret = FcTrue; if (!cache_dirs) return FcFalse; while ((cache_dir = FcStrListNext (cache_dirs))) { if (!FcDirCacheClean (cache_dir, verbose)) { ret = FcFalse; break; } } FcStrListDone (cache_dirs); return ret; } int main (int argc, char **argv) { FcStrSet *dirs; FcStrList *list; FcBool verbose = FcFalse; FcBool force = FcFalse; FcBool really_force = FcFalse; FcBool systemOnly = FcFalse; FcBool error_on_no_fonts = FcFalse; FcConfig *config; FcChar8 *sysroot = NULL; int i; int changed; int ret; #if HAVE_GETOPT_LONG || HAVE_GETOPT int c; setlocale (LC_ALL, ""); # if HAVE_GETOPT_LONG while ((c = getopt_long (argc, argv, "Efrsy:Vvh", longopts, NULL)) != -1) # else while ((c = getopt (argc, argv, "Efrsy:Vvh")) != -1) # endif { switch (c) { case 'E': error_on_no_fonts = FcTrue; break; case 'r': really_force = FcTrue; /* fall through */ case 'f': force = FcTrue; break; case 's': systemOnly = FcTrue; break; case 'y': sysroot = FcStrCopy ((const FcChar8 *)optarg); break; case 'V': fprintf (stderr, "fontconfig version %d.%d.%d\n", FC_MAJOR, FC_MINOR, FC_REVISION); exit (0); case 'v': verbose = FcTrue; break; case 'h': usage (argv[0], 0); default: usage (argv[0], 1); } } i = optind; #else i = 1; #endif if (systemOnly) FcConfigEnableHome (FcFalse); if (sysroot) { FcConfigSetSysRoot (NULL, sysroot); FcStrFree (sysroot); config = FcConfigGetCurrent(); } else { config = FcInitLoadConfig(); } if (!config) { fprintf (stderr, _("%s: Can't initialize font config library\n"), argv[0]); return 1; } FcConfigSetCurrent (config); if (argv[i]) { dirs = FcStrSetCreate(); if (!dirs) { fprintf (stderr, _("%s: Can't create list of directories\n"), argv[0]); return 1; } while (argv[i]) { if (!FcStrSetAddFilename (dirs, (FcChar8 *)argv[i])) { fprintf (stderr, _("%s: Can't add directory\n"), argv[0]); return 1; } i++; } list = FcStrListCreate (dirs); FcStrSetDestroy (dirs); } else list = FcConfigGetFontDirs (config); if ((processed_dirs = FcStrSetCreate()) == NULL) { fprintf (stderr, _("Out of Memory\n")); return 1; } if (verbose) { const FcChar8 *dir; printf ("Font directories:\n"); while ((dir = FcStrListNext (list))) { printf ("\t%s\n", dir); } FcStrListFirst (list); } changed = 0; ret = scanDirs (list, config, force, really_force, verbose, error_on_no_fonts, &changed); FcStrListDone (list); /* * Try to create CACHEDIR.TAG anyway. * This expects the fontconfig cache directory already exists. * If it doesn't, it won't be simply created. */ FcCacheCreateTagFile (config); FcStrSetDestroy (processed_dirs); cleanCacheDirectories (config, verbose); FcConfigDestroy (config); FcFini(); /* * Now we need to sleep a second (or two, to be extra sure), to make * sure that timestamps for changes after this run of fc-cache are later * then any timestamps we wrote. We don't use gettimeofday() because * sleep(3) can't be interrupted by a signal here -- this isn't in the * library, and there aren't any signals flying around here. */ /* the resolution of mtime on FAT is 2 seconds */ if (changed) sleep (2); if (verbose) printf ("%s: %s\n", argv[0], ret ? _("failed") : _("succeeded")); return ret; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-cache/fc-cache.sgml000066400000000000000000000175101503113465200253440ustar00rootroot00000000000000 manpage.1'. You may view the manual page with: `docbook-to-man manpage.sgml | nroff -man | less'. A typical entry in a Makefile or Makefile.am is: manpage.1: manpage.sgml docbook-to-man $< > $@ The docbook-to-man binary is found in the docbook-to-man package. Please remember that if you create the nroff version in one of the debian/rules file targets (such as build), you will need to include docbook-to-man in your Build-Depends control field. --> Josselin"> Mouette"> Aug 13, 2008"> 1"> joss@debian.org"> fc-cache"> Debian"> GNU"> GPL"> ]>
&dhemail;
&dhfirstname; &dhsurname; 2003 &dhusername; &dhdate;
&dhucpackage; &dhsection; &dhpackage; build font information cache files &dhpackage; DESCRIPTION &dhpackage; scans the font directories on the system and builds font information cache files for applications using fontconfig for their font handling. If directory arguments are not given, &dhpackage; uses each directory in the current font configuration. Each directory is scanned for font files readable by FreeType. A cache is created which contains properties of each font and the associated filename. This cache is used to speed up application startup when using the fontconfig library. Note that &dhpackage; must be executed once per architecture to generate font information customized for that architecture. OPTIONS This program follows the usual &gnu; command line syntax, with long options starting with two dashes (`-'). A summary of options is included below. Raise an error if there are no fonts in or directories in the configuration if not given. Force re-generation of apparently up-to-date cache files, overriding the timestamp checking. Erase all existing cache files and rescan. Only scan system-wide directories, omitting the places located in the user's home directory. Display status information while busy. Prepend to all paths for scanning. Show summary of options. Show version of the program and exit. Directory to scan for fonts. RETURN CODES fc-cache returns zero if the caches successfully generated. otherwise non-zero. FILES %cachedir%/*-%arch%.cache-%version% These files are generated by &dhpackage; and contain maps from file names to font properties. They are read by the fontconfig library at application startup to locate appropriate fonts. SEE ALSO fc-cat(1) fc-list(1) fc-match(1) fc-pattern(1) fc-query(1) fc-scan(1) The fontconfig user's guide AUTHOR This manual page was written by Keith Packard keithp@keithp.com and &dhusername; &dhemail;.
fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-cache/meson.build000066400000000000000000000011161503113465200251640ustar00rootroot00000000000000fccache = executable('fc-cache', ['fc-cache.c', fcstdint_h, alias_headers, ft_alias_headers], include_directories: [incbase, incsrc], dependencies: [libintl_dep], link_with: [libfontconfig], c_args: c_args, install: true, install_tag: 'tools') tools_man_pages += ['fc-cache'] # Do not try to execute target's fc-cache on host when cross compiling if get_option('cache-build').enabled() and not meson.is_cross_build() meson.add_install_script(fccache, '-s', '-f', '-v', skip_if_destdir: true, install_tag: 'tools') endif fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-case/000077500000000000000000000000001503113465200226735ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-case/CaseFolding.txt000066400000000000000000002456061503113465200256270ustar00rootroot00000000000000# CaseFolding-15.1.0.txt # Date: 2023-05-12, 21:53:10 GMT # © 2023 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see https://www.unicode.org/terms_of_use.html # # Unicode Character Database # For documentation, see https://www.unicode.org/reports/tr44/ # # Case Folding Properties # # This file is a supplement to the UnicodeData file. # It provides a case folding mapping generated from the Unicode Character Database. # If all characters are mapped according to the full mapping below, then # case differences (according to UnicodeData.txt and SpecialCasing.txt) # are eliminated. # # The data supports both implementations that require simple case foldings # (where string lengths don't change), and implementations that allow full case folding # (where string lengths may grow). Note that where they can be supported, the # full case foldings are superior: for example, they allow "MASSE" and "Maße" to match. # # All code points not listed in this file map to themselves. # # NOTE: case folding does not preserve normalization formats! # # For information on case folding, including how to have case folding # preserve normalization formats, see Section 3.13 Default Case Algorithms in # The Unicode Standard. # # ================================================================================ # Format # ================================================================================ # The entries in this file are in the following machine-readable format: # # ; ; ; # # # The status field is: # C: common case folding, common mappings shared by both simple and full mappings. # F: full case folding, mappings that cause strings to grow in length. Multiple characters are separated by spaces. # S: simple case folding, mappings to single characters where different from F. # T: special case for uppercase I and dotted uppercase I # - For non-Turkic languages, this mapping is normally not used. # - For Turkic languages (tr, az), this mapping can be used instead of the normal mapping for these characters. # Note that the Turkic mappings do not maintain canonical equivalence without additional processing. # See the discussions of case mapping in the Unicode Standard for more information. # # Usage: # A. To do a simple case folding, use the mappings with status C + S. # B. To do a full case folding, use the mappings with status C + F. # # The mappings with status T can be used or omitted depending on the desired case-folding # behavior. (The default option is to exclude them.) # # ================================================================= # Property: Case_Folding # All code points not explicitly listed for Case_Folding # have the value C for the status field, and the code point itself for the mapping field. # ================================================================= 0041; C; 0061; # LATIN CAPITAL LETTER A 0042; C; 0062; # LATIN CAPITAL LETTER B 0043; C; 0063; # LATIN CAPITAL LETTER C 0044; C; 0064; # LATIN CAPITAL LETTER D 0045; C; 0065; # LATIN CAPITAL LETTER E 0046; C; 0066; # LATIN CAPITAL LETTER F 0047; C; 0067; # LATIN CAPITAL LETTER G 0048; C; 0068; # LATIN CAPITAL LETTER H 0049; C; 0069; # LATIN CAPITAL LETTER I 0049; T; 0131; # LATIN CAPITAL LETTER I 004A; C; 006A; # LATIN CAPITAL LETTER J 004B; C; 006B; # LATIN CAPITAL LETTER K 004C; C; 006C; # LATIN CAPITAL LETTER L 004D; C; 006D; # LATIN CAPITAL LETTER M 004E; C; 006E; # LATIN CAPITAL LETTER N 004F; C; 006F; # LATIN CAPITAL LETTER O 0050; C; 0070; # LATIN CAPITAL LETTER P 0051; C; 0071; # LATIN CAPITAL LETTER Q 0052; C; 0072; # LATIN CAPITAL LETTER R 0053; C; 0073; # LATIN CAPITAL LETTER S 0054; C; 0074; # LATIN CAPITAL LETTER T 0055; C; 0075; # LATIN CAPITAL LETTER U 0056; C; 0076; # LATIN CAPITAL LETTER V 0057; C; 0077; # LATIN CAPITAL LETTER W 0058; C; 0078; # LATIN CAPITAL LETTER X 0059; C; 0079; # LATIN CAPITAL LETTER Y 005A; C; 007A; # LATIN CAPITAL LETTER Z 00B5; C; 03BC; # MICRO SIGN 00C0; C; 00E0; # LATIN CAPITAL LETTER A WITH GRAVE 00C1; C; 00E1; # LATIN CAPITAL LETTER A WITH ACUTE 00C2; C; 00E2; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 00C3; C; 00E3; # LATIN CAPITAL LETTER A WITH TILDE 00C4; C; 00E4; # LATIN CAPITAL LETTER A WITH DIAERESIS 00C5; C; 00E5; # LATIN CAPITAL LETTER A WITH RING ABOVE 00C6; C; 00E6; # LATIN CAPITAL LETTER AE 00C7; C; 00E7; # LATIN CAPITAL LETTER C WITH CEDILLA 00C8; C; 00E8; # LATIN CAPITAL LETTER E WITH GRAVE 00C9; C; 00E9; # LATIN CAPITAL LETTER E WITH ACUTE 00CA; C; 00EA; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 00CB; C; 00EB; # LATIN CAPITAL LETTER E WITH DIAERESIS 00CC; C; 00EC; # LATIN CAPITAL LETTER I WITH GRAVE 00CD; C; 00ED; # LATIN CAPITAL LETTER I WITH ACUTE 00CE; C; 00EE; # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 00CF; C; 00EF; # LATIN CAPITAL LETTER I WITH DIAERESIS 00D0; C; 00F0; # LATIN CAPITAL LETTER ETH 00D1; C; 00F1; # LATIN CAPITAL LETTER N WITH TILDE 00D2; C; 00F2; # LATIN CAPITAL LETTER O WITH GRAVE 00D3; C; 00F3; # LATIN CAPITAL LETTER O WITH ACUTE 00D4; C; 00F4; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 00D5; C; 00F5; # LATIN CAPITAL LETTER O WITH TILDE 00D6; C; 00F6; # LATIN CAPITAL LETTER O WITH DIAERESIS 00D8; C; 00F8; # LATIN CAPITAL LETTER O WITH STROKE 00D9; C; 00F9; # LATIN CAPITAL LETTER U WITH GRAVE 00DA; C; 00FA; # LATIN CAPITAL LETTER U WITH ACUTE 00DB; C; 00FB; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX 00DC; C; 00FC; # LATIN CAPITAL LETTER U WITH DIAERESIS 00DD; C; 00FD; # LATIN CAPITAL LETTER Y WITH ACUTE 00DE; C; 00FE; # LATIN CAPITAL LETTER THORN 00DF; F; 0073 0073; # LATIN SMALL LETTER SHARP S 0100; C; 0101; # LATIN CAPITAL LETTER A WITH MACRON 0102; C; 0103; # LATIN CAPITAL LETTER A WITH BREVE 0104; C; 0105; # LATIN CAPITAL LETTER A WITH OGONEK 0106; C; 0107; # LATIN CAPITAL LETTER C WITH ACUTE 0108; C; 0109; # LATIN CAPITAL LETTER C WITH CIRCUMFLEX 010A; C; 010B; # LATIN CAPITAL LETTER C WITH DOT ABOVE 010C; C; 010D; # LATIN CAPITAL LETTER C WITH CARON 010E; C; 010F; # LATIN CAPITAL LETTER D WITH CARON 0110; C; 0111; # LATIN CAPITAL LETTER D WITH STROKE 0112; C; 0113; # LATIN CAPITAL LETTER E WITH MACRON 0114; C; 0115; # LATIN CAPITAL LETTER E WITH BREVE 0116; C; 0117; # LATIN CAPITAL LETTER E WITH DOT ABOVE 0118; C; 0119; # LATIN CAPITAL LETTER E WITH OGONEK 011A; C; 011B; # LATIN CAPITAL LETTER E WITH CARON 011C; C; 011D; # LATIN CAPITAL LETTER G WITH CIRCUMFLEX 011E; C; 011F; # LATIN CAPITAL LETTER G WITH BREVE 0120; C; 0121; # LATIN CAPITAL LETTER G WITH DOT ABOVE 0122; C; 0123; # LATIN CAPITAL LETTER G WITH CEDILLA 0124; C; 0125; # LATIN CAPITAL LETTER H WITH CIRCUMFLEX 0126; C; 0127; # LATIN CAPITAL LETTER H WITH STROKE 0128; C; 0129; # LATIN CAPITAL LETTER I WITH TILDE 012A; C; 012B; # LATIN CAPITAL LETTER I WITH MACRON 012C; C; 012D; # LATIN CAPITAL LETTER I WITH BREVE 012E; C; 012F; # LATIN CAPITAL LETTER I WITH OGONEK 0130; F; 0069 0307; # LATIN CAPITAL LETTER I WITH DOT ABOVE 0130; T; 0069; # LATIN CAPITAL LETTER I WITH DOT ABOVE 0132; C; 0133; # LATIN CAPITAL LIGATURE IJ 0134; C; 0135; # LATIN CAPITAL LETTER J WITH CIRCUMFLEX 0136; C; 0137; # LATIN CAPITAL LETTER K WITH CEDILLA 0139; C; 013A; # LATIN CAPITAL LETTER L WITH ACUTE 013B; C; 013C; # LATIN CAPITAL LETTER L WITH CEDILLA 013D; C; 013E; # LATIN CAPITAL LETTER L WITH CARON 013F; C; 0140; # LATIN CAPITAL LETTER L WITH MIDDLE DOT 0141; C; 0142; # LATIN CAPITAL LETTER L WITH STROKE 0143; C; 0144; # LATIN CAPITAL LETTER N WITH ACUTE 0145; C; 0146; # LATIN CAPITAL LETTER N WITH CEDILLA 0147; C; 0148; # LATIN CAPITAL LETTER N WITH CARON 0149; F; 02BC 006E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE 014A; C; 014B; # LATIN CAPITAL LETTER ENG 014C; C; 014D; # LATIN CAPITAL LETTER O WITH MACRON 014E; C; 014F; # LATIN CAPITAL LETTER O WITH BREVE 0150; C; 0151; # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 0152; C; 0153; # LATIN CAPITAL LIGATURE OE 0154; C; 0155; # LATIN CAPITAL LETTER R WITH ACUTE 0156; C; 0157; # LATIN CAPITAL LETTER R WITH CEDILLA 0158; C; 0159; # LATIN CAPITAL LETTER R WITH CARON 015A; C; 015B; # LATIN CAPITAL LETTER S WITH ACUTE 015C; C; 015D; # LATIN CAPITAL LETTER S WITH CIRCUMFLEX 015E; C; 015F; # LATIN CAPITAL LETTER S WITH CEDILLA 0160; C; 0161; # LATIN CAPITAL LETTER S WITH CARON 0162; C; 0163; # LATIN CAPITAL LETTER T WITH CEDILLA 0164; C; 0165; # LATIN CAPITAL LETTER T WITH CARON 0166; C; 0167; # LATIN CAPITAL LETTER T WITH STROKE 0168; C; 0169; # LATIN CAPITAL LETTER U WITH TILDE 016A; C; 016B; # LATIN CAPITAL LETTER U WITH MACRON 016C; C; 016D; # LATIN CAPITAL LETTER U WITH BREVE 016E; C; 016F; # LATIN CAPITAL LETTER U WITH RING ABOVE 0170; C; 0171; # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0172; C; 0173; # LATIN CAPITAL LETTER U WITH OGONEK 0174; C; 0175; # LATIN CAPITAL LETTER W WITH CIRCUMFLEX 0176; C; 0177; # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX 0178; C; 00FF; # LATIN CAPITAL LETTER Y WITH DIAERESIS 0179; C; 017A; # LATIN CAPITAL LETTER Z WITH ACUTE 017B; C; 017C; # LATIN CAPITAL LETTER Z WITH DOT ABOVE 017D; C; 017E; # LATIN CAPITAL LETTER Z WITH CARON 017F; C; 0073; # LATIN SMALL LETTER LONG S 0181; C; 0253; # LATIN CAPITAL LETTER B WITH HOOK 0182; C; 0183; # LATIN CAPITAL LETTER B WITH TOPBAR 0184; C; 0185; # LATIN CAPITAL LETTER TONE SIX 0186; C; 0254; # LATIN CAPITAL LETTER OPEN O 0187; C; 0188; # LATIN CAPITAL LETTER C WITH HOOK 0189; C; 0256; # LATIN CAPITAL LETTER AFRICAN D 018A; C; 0257; # LATIN CAPITAL LETTER D WITH HOOK 018B; C; 018C; # LATIN CAPITAL LETTER D WITH TOPBAR 018E; C; 01DD; # LATIN CAPITAL LETTER REVERSED E 018F; C; 0259; # LATIN CAPITAL LETTER SCHWA 0190; C; 025B; # LATIN CAPITAL LETTER OPEN E 0191; C; 0192; # LATIN CAPITAL LETTER F WITH HOOK 0193; C; 0260; # LATIN CAPITAL LETTER G WITH HOOK 0194; C; 0263; # LATIN CAPITAL LETTER GAMMA 0196; C; 0269; # LATIN CAPITAL LETTER IOTA 0197; C; 0268; # LATIN CAPITAL LETTER I WITH STROKE 0198; C; 0199; # LATIN CAPITAL LETTER K WITH HOOK 019C; C; 026F; # LATIN CAPITAL LETTER TURNED M 019D; C; 0272; # LATIN CAPITAL LETTER N WITH LEFT HOOK 019F; C; 0275; # LATIN CAPITAL LETTER O WITH MIDDLE TILDE 01A0; C; 01A1; # LATIN CAPITAL LETTER O WITH HORN 01A2; C; 01A3; # LATIN CAPITAL LETTER OI 01A4; C; 01A5; # LATIN CAPITAL LETTER P WITH HOOK 01A6; C; 0280; # LATIN LETTER YR 01A7; C; 01A8; # LATIN CAPITAL LETTER TONE TWO 01A9; C; 0283; # LATIN CAPITAL LETTER ESH 01AC; C; 01AD; # LATIN CAPITAL LETTER T WITH HOOK 01AE; C; 0288; # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK 01AF; C; 01B0; # LATIN CAPITAL LETTER U WITH HORN 01B1; C; 028A; # LATIN CAPITAL LETTER UPSILON 01B2; C; 028B; # LATIN CAPITAL LETTER V WITH HOOK 01B3; C; 01B4; # LATIN CAPITAL LETTER Y WITH HOOK 01B5; C; 01B6; # LATIN CAPITAL LETTER Z WITH STROKE 01B7; C; 0292; # LATIN CAPITAL LETTER EZH 01B8; C; 01B9; # LATIN CAPITAL LETTER EZH REVERSED 01BC; C; 01BD; # LATIN CAPITAL LETTER TONE FIVE 01C4; C; 01C6; # LATIN CAPITAL LETTER DZ WITH CARON 01C5; C; 01C6; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON 01C7; C; 01C9; # LATIN CAPITAL LETTER LJ 01C8; C; 01C9; # LATIN CAPITAL LETTER L WITH SMALL LETTER J 01CA; C; 01CC; # LATIN CAPITAL LETTER NJ 01CB; C; 01CC; # LATIN CAPITAL LETTER N WITH SMALL LETTER J 01CD; C; 01CE; # LATIN CAPITAL LETTER A WITH CARON 01CF; C; 01D0; # LATIN CAPITAL LETTER I WITH CARON 01D1; C; 01D2; # LATIN CAPITAL LETTER O WITH CARON 01D3; C; 01D4; # LATIN CAPITAL LETTER U WITH CARON 01D5; C; 01D6; # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 01D7; C; 01D8; # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 01D9; C; 01DA; # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 01DB; C; 01DC; # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 01DE; C; 01DF; # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON 01E0; C; 01E1; # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON 01E2; C; 01E3; # LATIN CAPITAL LETTER AE WITH MACRON 01E4; C; 01E5; # LATIN CAPITAL LETTER G WITH STROKE 01E6; C; 01E7; # LATIN CAPITAL LETTER G WITH CARON 01E8; C; 01E9; # LATIN CAPITAL LETTER K WITH CARON 01EA; C; 01EB; # LATIN CAPITAL LETTER O WITH OGONEK 01EC; C; 01ED; # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON 01EE; C; 01EF; # LATIN CAPITAL LETTER EZH WITH CARON 01F0; F; 006A 030C; # LATIN SMALL LETTER J WITH CARON 01F1; C; 01F3; # LATIN CAPITAL LETTER DZ 01F2; C; 01F3; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z 01F4; C; 01F5; # LATIN CAPITAL LETTER G WITH ACUTE 01F6; C; 0195; # LATIN CAPITAL LETTER HWAIR 01F7; C; 01BF; # LATIN CAPITAL LETTER WYNN 01F8; C; 01F9; # LATIN CAPITAL LETTER N WITH GRAVE 01FA; C; 01FB; # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE 01FC; C; 01FD; # LATIN CAPITAL LETTER AE WITH ACUTE 01FE; C; 01FF; # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE 0200; C; 0201; # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE 0202; C; 0203; # LATIN CAPITAL LETTER A WITH INVERTED BREVE 0204; C; 0205; # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE 0206; C; 0207; # LATIN CAPITAL LETTER E WITH INVERTED BREVE 0208; C; 0209; # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE 020A; C; 020B; # LATIN CAPITAL LETTER I WITH INVERTED BREVE 020C; C; 020D; # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE 020E; C; 020F; # LATIN CAPITAL LETTER O WITH INVERTED BREVE 0210; C; 0211; # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE 0212; C; 0213; # LATIN CAPITAL LETTER R WITH INVERTED BREVE 0214; C; 0215; # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE 0216; C; 0217; # LATIN CAPITAL LETTER U WITH INVERTED BREVE 0218; C; 0219; # LATIN CAPITAL LETTER S WITH COMMA BELOW 021A; C; 021B; # LATIN CAPITAL LETTER T WITH COMMA BELOW 021C; C; 021D; # LATIN CAPITAL LETTER YOGH 021E; C; 021F; # LATIN CAPITAL LETTER H WITH CARON 0220; C; 019E; # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG 0222; C; 0223; # LATIN CAPITAL LETTER OU 0224; C; 0225; # LATIN CAPITAL LETTER Z WITH HOOK 0226; C; 0227; # LATIN CAPITAL LETTER A WITH DOT ABOVE 0228; C; 0229; # LATIN CAPITAL LETTER E WITH CEDILLA 022A; C; 022B; # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON 022C; C; 022D; # LATIN CAPITAL LETTER O WITH TILDE AND MACRON 022E; C; 022F; # LATIN CAPITAL LETTER O WITH DOT ABOVE 0230; C; 0231; # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON 0232; C; 0233; # LATIN CAPITAL LETTER Y WITH MACRON 023A; C; 2C65; # LATIN CAPITAL LETTER A WITH STROKE 023B; C; 023C; # LATIN CAPITAL LETTER C WITH STROKE 023D; C; 019A; # LATIN CAPITAL LETTER L WITH BAR 023E; C; 2C66; # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE 0241; C; 0242; # LATIN CAPITAL LETTER GLOTTAL STOP 0243; C; 0180; # LATIN CAPITAL LETTER B WITH STROKE 0244; C; 0289; # LATIN CAPITAL LETTER U BAR 0245; C; 028C; # LATIN CAPITAL LETTER TURNED V 0246; C; 0247; # LATIN CAPITAL LETTER E WITH STROKE 0248; C; 0249; # LATIN CAPITAL LETTER J WITH STROKE 024A; C; 024B; # LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL 024C; C; 024D; # LATIN CAPITAL LETTER R WITH STROKE 024E; C; 024F; # LATIN CAPITAL LETTER Y WITH STROKE 0345; C; 03B9; # COMBINING GREEK YPOGEGRAMMENI 0370; C; 0371; # GREEK CAPITAL LETTER HETA 0372; C; 0373; # GREEK CAPITAL LETTER ARCHAIC SAMPI 0376; C; 0377; # GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA 037F; C; 03F3; # GREEK CAPITAL LETTER YOT 0386; C; 03AC; # GREEK CAPITAL LETTER ALPHA WITH TONOS 0388; C; 03AD; # GREEK CAPITAL LETTER EPSILON WITH TONOS 0389; C; 03AE; # GREEK CAPITAL LETTER ETA WITH TONOS 038A; C; 03AF; # GREEK CAPITAL LETTER IOTA WITH TONOS 038C; C; 03CC; # GREEK CAPITAL LETTER OMICRON WITH TONOS 038E; C; 03CD; # GREEK CAPITAL LETTER UPSILON WITH TONOS 038F; C; 03CE; # GREEK CAPITAL LETTER OMEGA WITH TONOS 0390; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS 0391; C; 03B1; # GREEK CAPITAL LETTER ALPHA 0392; C; 03B2; # GREEK CAPITAL LETTER BETA 0393; C; 03B3; # GREEK CAPITAL LETTER GAMMA 0394; C; 03B4; # GREEK CAPITAL LETTER DELTA 0395; C; 03B5; # GREEK CAPITAL LETTER EPSILON 0396; C; 03B6; # GREEK CAPITAL LETTER ZETA 0397; C; 03B7; # GREEK CAPITAL LETTER ETA 0398; C; 03B8; # GREEK CAPITAL LETTER THETA 0399; C; 03B9; # GREEK CAPITAL LETTER IOTA 039A; C; 03BA; # GREEK CAPITAL LETTER KAPPA 039B; C; 03BB; # GREEK CAPITAL LETTER LAMDA 039C; C; 03BC; # GREEK CAPITAL LETTER MU 039D; C; 03BD; # GREEK CAPITAL LETTER NU 039E; C; 03BE; # GREEK CAPITAL LETTER XI 039F; C; 03BF; # GREEK CAPITAL LETTER OMICRON 03A0; C; 03C0; # GREEK CAPITAL LETTER PI 03A1; C; 03C1; # GREEK CAPITAL LETTER RHO 03A3; C; 03C3; # GREEK CAPITAL LETTER SIGMA 03A4; C; 03C4; # GREEK CAPITAL LETTER TAU 03A5; C; 03C5; # GREEK CAPITAL LETTER UPSILON 03A6; C; 03C6; # GREEK CAPITAL LETTER PHI 03A7; C; 03C7; # GREEK CAPITAL LETTER CHI 03A8; C; 03C8; # GREEK CAPITAL LETTER PSI 03A9; C; 03C9; # GREEK CAPITAL LETTER OMEGA 03AA; C; 03CA; # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA 03AB; C; 03CB; # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA 03B0; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS 03C2; C; 03C3; # GREEK SMALL LETTER FINAL SIGMA 03CF; C; 03D7; # GREEK CAPITAL KAI SYMBOL 03D0; C; 03B2; # GREEK BETA SYMBOL 03D1; C; 03B8; # GREEK THETA SYMBOL 03D5; C; 03C6; # GREEK PHI SYMBOL 03D6; C; 03C0; # GREEK PI SYMBOL 03D8; C; 03D9; # GREEK LETTER ARCHAIC KOPPA 03DA; C; 03DB; # GREEK LETTER STIGMA 03DC; C; 03DD; # GREEK LETTER DIGAMMA 03DE; C; 03DF; # GREEK LETTER KOPPA 03E0; C; 03E1; # GREEK LETTER SAMPI 03E2; C; 03E3; # COPTIC CAPITAL LETTER SHEI 03E4; C; 03E5; # COPTIC CAPITAL LETTER FEI 03E6; C; 03E7; # COPTIC CAPITAL LETTER KHEI 03E8; C; 03E9; # COPTIC CAPITAL LETTER HORI 03EA; C; 03EB; # COPTIC CAPITAL LETTER GANGIA 03EC; C; 03ED; # COPTIC CAPITAL LETTER SHIMA 03EE; C; 03EF; # COPTIC CAPITAL LETTER DEI 03F0; C; 03BA; # GREEK KAPPA SYMBOL 03F1; C; 03C1; # GREEK RHO SYMBOL 03F4; C; 03B8; # GREEK CAPITAL THETA SYMBOL 03F5; C; 03B5; # GREEK LUNATE EPSILON SYMBOL 03F7; C; 03F8; # GREEK CAPITAL LETTER SHO 03F9; C; 03F2; # GREEK CAPITAL LUNATE SIGMA SYMBOL 03FA; C; 03FB; # GREEK CAPITAL LETTER SAN 03FD; C; 037B; # GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL 03FE; C; 037C; # GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL 03FF; C; 037D; # GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL 0400; C; 0450; # CYRILLIC CAPITAL LETTER IE WITH GRAVE 0401; C; 0451; # CYRILLIC CAPITAL LETTER IO 0402; C; 0452; # CYRILLIC CAPITAL LETTER DJE 0403; C; 0453; # CYRILLIC CAPITAL LETTER GJE 0404; C; 0454; # CYRILLIC CAPITAL LETTER UKRAINIAN IE 0405; C; 0455; # CYRILLIC CAPITAL LETTER DZE 0406; C; 0456; # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I 0407; C; 0457; # CYRILLIC CAPITAL LETTER YI 0408; C; 0458; # CYRILLIC CAPITAL LETTER JE 0409; C; 0459; # CYRILLIC CAPITAL LETTER LJE 040A; C; 045A; # CYRILLIC CAPITAL LETTER NJE 040B; C; 045B; # CYRILLIC CAPITAL LETTER TSHE 040C; C; 045C; # CYRILLIC CAPITAL LETTER KJE 040D; C; 045D; # CYRILLIC CAPITAL LETTER I WITH GRAVE 040E; C; 045E; # CYRILLIC CAPITAL LETTER SHORT U 040F; C; 045F; # CYRILLIC CAPITAL LETTER DZHE 0410; C; 0430; # CYRILLIC CAPITAL LETTER A 0411; C; 0431; # CYRILLIC CAPITAL LETTER BE 0412; C; 0432; # CYRILLIC CAPITAL LETTER VE 0413; C; 0433; # CYRILLIC CAPITAL LETTER GHE 0414; C; 0434; # CYRILLIC CAPITAL LETTER DE 0415; C; 0435; # CYRILLIC CAPITAL LETTER IE 0416; C; 0436; # CYRILLIC CAPITAL LETTER ZHE 0417; C; 0437; # CYRILLIC CAPITAL LETTER ZE 0418; C; 0438; # CYRILLIC CAPITAL LETTER I 0419; C; 0439; # CYRILLIC CAPITAL LETTER SHORT I 041A; C; 043A; # CYRILLIC CAPITAL LETTER KA 041B; C; 043B; # CYRILLIC CAPITAL LETTER EL 041C; C; 043C; # CYRILLIC CAPITAL LETTER EM 041D; C; 043D; # CYRILLIC CAPITAL LETTER EN 041E; C; 043E; # CYRILLIC CAPITAL LETTER O 041F; C; 043F; # CYRILLIC CAPITAL LETTER PE 0420; C; 0440; # CYRILLIC CAPITAL LETTER ER 0421; C; 0441; # CYRILLIC CAPITAL LETTER ES 0422; C; 0442; # CYRILLIC CAPITAL LETTER TE 0423; C; 0443; # CYRILLIC CAPITAL LETTER U 0424; C; 0444; # CYRILLIC CAPITAL LETTER EF 0425; C; 0445; # CYRILLIC CAPITAL LETTER HA 0426; C; 0446; # CYRILLIC CAPITAL LETTER TSE 0427; C; 0447; # CYRILLIC CAPITAL LETTER CHE 0428; C; 0448; # CYRILLIC CAPITAL LETTER SHA 0429; C; 0449; # CYRILLIC CAPITAL LETTER SHCHA 042A; C; 044A; # CYRILLIC CAPITAL LETTER HARD SIGN 042B; C; 044B; # CYRILLIC CAPITAL LETTER YERU 042C; C; 044C; # CYRILLIC CAPITAL LETTER SOFT SIGN 042D; C; 044D; # CYRILLIC CAPITAL LETTER E 042E; C; 044E; # CYRILLIC CAPITAL LETTER YU 042F; C; 044F; # CYRILLIC CAPITAL LETTER YA 0460; C; 0461; # CYRILLIC CAPITAL LETTER OMEGA 0462; C; 0463; # CYRILLIC CAPITAL LETTER YAT 0464; C; 0465; # CYRILLIC CAPITAL LETTER IOTIFIED E 0466; C; 0467; # CYRILLIC CAPITAL LETTER LITTLE YUS 0468; C; 0469; # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS 046A; C; 046B; # CYRILLIC CAPITAL LETTER BIG YUS 046C; C; 046D; # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS 046E; C; 046F; # CYRILLIC CAPITAL LETTER KSI 0470; C; 0471; # CYRILLIC CAPITAL LETTER PSI 0472; C; 0473; # CYRILLIC CAPITAL LETTER FITA 0474; C; 0475; # CYRILLIC CAPITAL LETTER IZHITSA 0476; C; 0477; # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT 0478; C; 0479; # CYRILLIC CAPITAL LETTER UK 047A; C; 047B; # CYRILLIC CAPITAL LETTER ROUND OMEGA 047C; C; 047D; # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO 047E; C; 047F; # CYRILLIC CAPITAL LETTER OT 0480; C; 0481; # CYRILLIC CAPITAL LETTER KOPPA 048A; C; 048B; # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL 048C; C; 048D; # CYRILLIC CAPITAL LETTER SEMISOFT SIGN 048E; C; 048F; # CYRILLIC CAPITAL LETTER ER WITH TICK 0490; C; 0491; # CYRILLIC CAPITAL LETTER GHE WITH UPTURN 0492; C; 0493; # CYRILLIC CAPITAL LETTER GHE WITH STROKE 0494; C; 0495; # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK 0496; C; 0497; # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER 0498; C; 0499; # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER 049A; C; 049B; # CYRILLIC CAPITAL LETTER KA WITH DESCENDER 049C; C; 049D; # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE 049E; C; 049F; # CYRILLIC CAPITAL LETTER KA WITH STROKE 04A0; C; 04A1; # CYRILLIC CAPITAL LETTER BASHKIR KA 04A2; C; 04A3; # CYRILLIC CAPITAL LETTER EN WITH DESCENDER 04A4; C; 04A5; # CYRILLIC CAPITAL LIGATURE EN GHE 04A6; C; 04A7; # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK 04A8; C; 04A9; # CYRILLIC CAPITAL LETTER ABKHASIAN HA 04AA; C; 04AB; # CYRILLIC CAPITAL LETTER ES WITH DESCENDER 04AC; C; 04AD; # CYRILLIC CAPITAL LETTER TE WITH DESCENDER 04AE; C; 04AF; # CYRILLIC CAPITAL LETTER STRAIGHT U 04B0; C; 04B1; # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE 04B2; C; 04B3; # CYRILLIC CAPITAL LETTER HA WITH DESCENDER 04B4; C; 04B5; # CYRILLIC CAPITAL LIGATURE TE TSE 04B6; C; 04B7; # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER 04B8; C; 04B9; # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE 04BA; C; 04BB; # CYRILLIC CAPITAL LETTER SHHA 04BC; C; 04BD; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE 04BE; C; 04BF; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER 04C0; C; 04CF; # CYRILLIC LETTER PALOCHKA 04C1; C; 04C2; # CYRILLIC CAPITAL LETTER ZHE WITH BREVE 04C3; C; 04C4; # CYRILLIC CAPITAL LETTER KA WITH HOOK 04C5; C; 04C6; # CYRILLIC CAPITAL LETTER EL WITH TAIL 04C7; C; 04C8; # CYRILLIC CAPITAL LETTER EN WITH HOOK 04C9; C; 04CA; # CYRILLIC CAPITAL LETTER EN WITH TAIL 04CB; C; 04CC; # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE 04CD; C; 04CE; # CYRILLIC CAPITAL LETTER EM WITH TAIL 04D0; C; 04D1; # CYRILLIC CAPITAL LETTER A WITH BREVE 04D2; C; 04D3; # CYRILLIC CAPITAL LETTER A WITH DIAERESIS 04D4; C; 04D5; # CYRILLIC CAPITAL LIGATURE A IE 04D6; C; 04D7; # CYRILLIC CAPITAL LETTER IE WITH BREVE 04D8; C; 04D9; # CYRILLIC CAPITAL LETTER SCHWA 04DA; C; 04DB; # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS 04DC; C; 04DD; # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS 04DE; C; 04DF; # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS 04E0; C; 04E1; # CYRILLIC CAPITAL LETTER ABKHASIAN DZE 04E2; C; 04E3; # CYRILLIC CAPITAL LETTER I WITH MACRON 04E4; C; 04E5; # CYRILLIC CAPITAL LETTER I WITH DIAERESIS 04E6; C; 04E7; # CYRILLIC CAPITAL LETTER O WITH DIAERESIS 04E8; C; 04E9; # CYRILLIC CAPITAL LETTER BARRED O 04EA; C; 04EB; # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS 04EC; C; 04ED; # CYRILLIC CAPITAL LETTER E WITH DIAERESIS 04EE; C; 04EF; # CYRILLIC CAPITAL LETTER U WITH MACRON 04F0; C; 04F1; # CYRILLIC CAPITAL LETTER U WITH DIAERESIS 04F2; C; 04F3; # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE 04F4; C; 04F5; # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS 04F6; C; 04F7; # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER 04F8; C; 04F9; # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS 04FA; C; 04FB; # CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK 04FC; C; 04FD; # CYRILLIC CAPITAL LETTER HA WITH HOOK 04FE; C; 04FF; # CYRILLIC CAPITAL LETTER HA WITH STROKE 0500; C; 0501; # CYRILLIC CAPITAL LETTER KOMI DE 0502; C; 0503; # CYRILLIC CAPITAL LETTER KOMI DJE 0504; C; 0505; # CYRILLIC CAPITAL LETTER KOMI ZJE 0506; C; 0507; # CYRILLIC CAPITAL LETTER KOMI DZJE 0508; C; 0509; # CYRILLIC CAPITAL LETTER KOMI LJE 050A; C; 050B; # CYRILLIC CAPITAL LETTER KOMI NJE 050C; C; 050D; # CYRILLIC CAPITAL LETTER KOMI SJE 050E; C; 050F; # CYRILLIC CAPITAL LETTER KOMI TJE 0510; C; 0511; # CYRILLIC CAPITAL LETTER REVERSED ZE 0512; C; 0513; # CYRILLIC CAPITAL LETTER EL WITH HOOK 0514; C; 0515; # CYRILLIC CAPITAL LETTER LHA 0516; C; 0517; # CYRILLIC CAPITAL LETTER RHA 0518; C; 0519; # CYRILLIC CAPITAL LETTER YAE 051A; C; 051B; # CYRILLIC CAPITAL LETTER QA 051C; C; 051D; # CYRILLIC CAPITAL LETTER WE 051E; C; 051F; # CYRILLIC CAPITAL LETTER ALEUT KA 0520; C; 0521; # CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK 0522; C; 0523; # CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK 0524; C; 0525; # CYRILLIC CAPITAL LETTER PE WITH DESCENDER 0526; C; 0527; # CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER 0528; C; 0529; # CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK 052A; C; 052B; # CYRILLIC CAPITAL LETTER DZZHE 052C; C; 052D; # CYRILLIC CAPITAL LETTER DCHE 052E; C; 052F; # CYRILLIC CAPITAL LETTER EL WITH DESCENDER 0531; C; 0561; # ARMENIAN CAPITAL LETTER AYB 0532; C; 0562; # ARMENIAN CAPITAL LETTER BEN 0533; C; 0563; # ARMENIAN CAPITAL LETTER GIM 0534; C; 0564; # ARMENIAN CAPITAL LETTER DA 0535; C; 0565; # ARMENIAN CAPITAL LETTER ECH 0536; C; 0566; # ARMENIAN CAPITAL LETTER ZA 0537; C; 0567; # ARMENIAN CAPITAL LETTER EH 0538; C; 0568; # ARMENIAN CAPITAL LETTER ET 0539; C; 0569; # ARMENIAN CAPITAL LETTER TO 053A; C; 056A; # ARMENIAN CAPITAL LETTER ZHE 053B; C; 056B; # ARMENIAN CAPITAL LETTER INI 053C; C; 056C; # ARMENIAN CAPITAL LETTER LIWN 053D; C; 056D; # ARMENIAN CAPITAL LETTER XEH 053E; C; 056E; # ARMENIAN CAPITAL LETTER CA 053F; C; 056F; # ARMENIAN CAPITAL LETTER KEN 0540; C; 0570; # ARMENIAN CAPITAL LETTER HO 0541; C; 0571; # ARMENIAN CAPITAL LETTER JA 0542; C; 0572; # ARMENIAN CAPITAL LETTER GHAD 0543; C; 0573; # ARMENIAN CAPITAL LETTER CHEH 0544; C; 0574; # ARMENIAN CAPITAL LETTER MEN 0545; C; 0575; # ARMENIAN CAPITAL LETTER YI 0546; C; 0576; # ARMENIAN CAPITAL LETTER NOW 0547; C; 0577; # ARMENIAN CAPITAL LETTER SHA 0548; C; 0578; # ARMENIAN CAPITAL LETTER VO 0549; C; 0579; # ARMENIAN CAPITAL LETTER CHA 054A; C; 057A; # ARMENIAN CAPITAL LETTER PEH 054B; C; 057B; # ARMENIAN CAPITAL LETTER JHEH 054C; C; 057C; # ARMENIAN CAPITAL LETTER RA 054D; C; 057D; # ARMENIAN CAPITAL LETTER SEH 054E; C; 057E; # ARMENIAN CAPITAL LETTER VEW 054F; C; 057F; # ARMENIAN CAPITAL LETTER TIWN 0550; C; 0580; # ARMENIAN CAPITAL LETTER REH 0551; C; 0581; # ARMENIAN CAPITAL LETTER CO 0552; C; 0582; # ARMENIAN CAPITAL LETTER YIWN 0553; C; 0583; # ARMENIAN CAPITAL LETTER PIWR 0554; C; 0584; # ARMENIAN CAPITAL LETTER KEH 0555; C; 0585; # ARMENIAN CAPITAL LETTER OH 0556; C; 0586; # ARMENIAN CAPITAL LETTER FEH 0587; F; 0565 0582; # ARMENIAN SMALL LIGATURE ECH YIWN 10A0; C; 2D00; # GEORGIAN CAPITAL LETTER AN 10A1; C; 2D01; # GEORGIAN CAPITAL LETTER BAN 10A2; C; 2D02; # GEORGIAN CAPITAL LETTER GAN 10A3; C; 2D03; # GEORGIAN CAPITAL LETTER DON 10A4; C; 2D04; # GEORGIAN CAPITAL LETTER EN 10A5; C; 2D05; # GEORGIAN CAPITAL LETTER VIN 10A6; C; 2D06; # GEORGIAN CAPITAL LETTER ZEN 10A7; C; 2D07; # GEORGIAN CAPITAL LETTER TAN 10A8; C; 2D08; # GEORGIAN CAPITAL LETTER IN 10A9; C; 2D09; # GEORGIAN CAPITAL LETTER KAN 10AA; C; 2D0A; # GEORGIAN CAPITAL LETTER LAS 10AB; C; 2D0B; # GEORGIAN CAPITAL LETTER MAN 10AC; C; 2D0C; # GEORGIAN CAPITAL LETTER NAR 10AD; C; 2D0D; # GEORGIAN CAPITAL LETTER ON 10AE; C; 2D0E; # GEORGIAN CAPITAL LETTER PAR 10AF; C; 2D0F; # GEORGIAN CAPITAL LETTER ZHAR 10B0; C; 2D10; # GEORGIAN CAPITAL LETTER RAE 10B1; C; 2D11; # GEORGIAN CAPITAL LETTER SAN 10B2; C; 2D12; # GEORGIAN CAPITAL LETTER TAR 10B3; C; 2D13; # GEORGIAN CAPITAL LETTER UN 10B4; C; 2D14; # GEORGIAN CAPITAL LETTER PHAR 10B5; C; 2D15; # GEORGIAN CAPITAL LETTER KHAR 10B6; C; 2D16; # GEORGIAN CAPITAL LETTER GHAN 10B7; C; 2D17; # GEORGIAN CAPITAL LETTER QAR 10B8; C; 2D18; # GEORGIAN CAPITAL LETTER SHIN 10B9; C; 2D19; # GEORGIAN CAPITAL LETTER CHIN 10BA; C; 2D1A; # GEORGIAN CAPITAL LETTER CAN 10BB; C; 2D1B; # GEORGIAN CAPITAL LETTER JIL 10BC; C; 2D1C; # GEORGIAN CAPITAL LETTER CIL 10BD; C; 2D1D; # GEORGIAN CAPITAL LETTER CHAR 10BE; C; 2D1E; # GEORGIAN CAPITAL LETTER XAN 10BF; C; 2D1F; # GEORGIAN CAPITAL LETTER JHAN 10C0; C; 2D20; # GEORGIAN CAPITAL LETTER HAE 10C1; C; 2D21; # GEORGIAN CAPITAL LETTER HE 10C2; C; 2D22; # GEORGIAN CAPITAL LETTER HIE 10C3; C; 2D23; # GEORGIAN CAPITAL LETTER WE 10C4; C; 2D24; # GEORGIAN CAPITAL LETTER HAR 10C5; C; 2D25; # GEORGIAN CAPITAL LETTER HOE 10C7; C; 2D27; # GEORGIAN CAPITAL LETTER YN 10CD; C; 2D2D; # GEORGIAN CAPITAL LETTER AEN 13F8; C; 13F0; # CHEROKEE SMALL LETTER YE 13F9; C; 13F1; # CHEROKEE SMALL LETTER YI 13FA; C; 13F2; # CHEROKEE SMALL LETTER YO 13FB; C; 13F3; # CHEROKEE SMALL LETTER YU 13FC; C; 13F4; # CHEROKEE SMALL LETTER YV 13FD; C; 13F5; # CHEROKEE SMALL LETTER MV 1C80; C; 0432; # CYRILLIC SMALL LETTER ROUNDED VE 1C81; C; 0434; # CYRILLIC SMALL LETTER LONG-LEGGED DE 1C82; C; 043E; # CYRILLIC SMALL LETTER NARROW O 1C83; C; 0441; # CYRILLIC SMALL LETTER WIDE ES 1C84; C; 0442; # CYRILLIC SMALL LETTER TALL TE 1C85; C; 0442; # CYRILLIC SMALL LETTER THREE-LEGGED TE 1C86; C; 044A; # CYRILLIC SMALL LETTER TALL HARD SIGN 1C87; C; 0463; # CYRILLIC SMALL LETTER TALL YAT 1C88; C; A64B; # CYRILLIC SMALL LETTER UNBLENDED UK 1C90; C; 10D0; # GEORGIAN MTAVRULI CAPITAL LETTER AN 1C91; C; 10D1; # GEORGIAN MTAVRULI CAPITAL LETTER BAN 1C92; C; 10D2; # GEORGIAN MTAVRULI CAPITAL LETTER GAN 1C93; C; 10D3; # GEORGIAN MTAVRULI CAPITAL LETTER DON 1C94; C; 10D4; # GEORGIAN MTAVRULI CAPITAL LETTER EN 1C95; C; 10D5; # GEORGIAN MTAVRULI CAPITAL LETTER VIN 1C96; C; 10D6; # GEORGIAN MTAVRULI CAPITAL LETTER ZEN 1C97; C; 10D7; # GEORGIAN MTAVRULI CAPITAL LETTER TAN 1C98; C; 10D8; # GEORGIAN MTAVRULI CAPITAL LETTER IN 1C99; C; 10D9; # GEORGIAN MTAVRULI CAPITAL LETTER KAN 1C9A; C; 10DA; # GEORGIAN MTAVRULI CAPITAL LETTER LAS 1C9B; C; 10DB; # GEORGIAN MTAVRULI CAPITAL LETTER MAN 1C9C; C; 10DC; # GEORGIAN MTAVRULI CAPITAL LETTER NAR 1C9D; C; 10DD; # GEORGIAN MTAVRULI CAPITAL LETTER ON 1C9E; C; 10DE; # GEORGIAN MTAVRULI CAPITAL LETTER PAR 1C9F; C; 10DF; # GEORGIAN MTAVRULI CAPITAL LETTER ZHAR 1CA0; C; 10E0; # GEORGIAN MTAVRULI CAPITAL LETTER RAE 1CA1; C; 10E1; # GEORGIAN MTAVRULI CAPITAL LETTER SAN 1CA2; C; 10E2; # GEORGIAN MTAVRULI CAPITAL LETTER TAR 1CA3; C; 10E3; # GEORGIAN MTAVRULI CAPITAL LETTER UN 1CA4; C; 10E4; # GEORGIAN MTAVRULI CAPITAL LETTER PHAR 1CA5; C; 10E5; # GEORGIAN MTAVRULI CAPITAL LETTER KHAR 1CA6; C; 10E6; # GEORGIAN MTAVRULI CAPITAL LETTER GHAN 1CA7; C; 10E7; # GEORGIAN MTAVRULI CAPITAL LETTER QAR 1CA8; C; 10E8; # GEORGIAN MTAVRULI CAPITAL LETTER SHIN 1CA9; C; 10E9; # GEORGIAN MTAVRULI CAPITAL LETTER CHIN 1CAA; C; 10EA; # GEORGIAN MTAVRULI CAPITAL LETTER CAN 1CAB; C; 10EB; # GEORGIAN MTAVRULI CAPITAL LETTER JIL 1CAC; C; 10EC; # GEORGIAN MTAVRULI CAPITAL LETTER CIL 1CAD; C; 10ED; # GEORGIAN MTAVRULI CAPITAL LETTER CHAR 1CAE; C; 10EE; # GEORGIAN MTAVRULI CAPITAL LETTER XAN 1CAF; C; 10EF; # GEORGIAN MTAVRULI CAPITAL LETTER JHAN 1CB0; C; 10F0; # GEORGIAN MTAVRULI CAPITAL LETTER HAE 1CB1; C; 10F1; # GEORGIAN MTAVRULI CAPITAL LETTER HE 1CB2; C; 10F2; # GEORGIAN MTAVRULI CAPITAL LETTER HIE 1CB3; C; 10F3; # GEORGIAN MTAVRULI CAPITAL LETTER WE 1CB4; C; 10F4; # GEORGIAN MTAVRULI CAPITAL LETTER HAR 1CB5; C; 10F5; # GEORGIAN MTAVRULI CAPITAL LETTER HOE 1CB6; C; 10F6; # GEORGIAN MTAVRULI CAPITAL LETTER FI 1CB7; C; 10F7; # GEORGIAN MTAVRULI CAPITAL LETTER YN 1CB8; C; 10F8; # GEORGIAN MTAVRULI CAPITAL LETTER ELIFI 1CB9; C; 10F9; # GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN 1CBA; C; 10FA; # GEORGIAN MTAVRULI CAPITAL LETTER AIN 1CBD; C; 10FD; # GEORGIAN MTAVRULI CAPITAL LETTER AEN 1CBE; C; 10FE; # GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN 1CBF; C; 10FF; # GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN 1E00; C; 1E01; # LATIN CAPITAL LETTER A WITH RING BELOW 1E02; C; 1E03; # LATIN CAPITAL LETTER B WITH DOT ABOVE 1E04; C; 1E05; # LATIN CAPITAL LETTER B WITH DOT BELOW 1E06; C; 1E07; # LATIN CAPITAL LETTER B WITH LINE BELOW 1E08; C; 1E09; # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE 1E0A; C; 1E0B; # LATIN CAPITAL LETTER D WITH DOT ABOVE 1E0C; C; 1E0D; # LATIN CAPITAL LETTER D WITH DOT BELOW 1E0E; C; 1E0F; # LATIN CAPITAL LETTER D WITH LINE BELOW 1E10; C; 1E11; # LATIN CAPITAL LETTER D WITH CEDILLA 1E12; C; 1E13; # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW 1E14; C; 1E15; # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE 1E16; C; 1E17; # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE 1E18; C; 1E19; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW 1E1A; C; 1E1B; # LATIN CAPITAL LETTER E WITH TILDE BELOW 1E1C; C; 1E1D; # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE 1E1E; C; 1E1F; # LATIN CAPITAL LETTER F WITH DOT ABOVE 1E20; C; 1E21; # LATIN CAPITAL LETTER G WITH MACRON 1E22; C; 1E23; # LATIN CAPITAL LETTER H WITH DOT ABOVE 1E24; C; 1E25; # LATIN CAPITAL LETTER H WITH DOT BELOW 1E26; C; 1E27; # LATIN CAPITAL LETTER H WITH DIAERESIS 1E28; C; 1E29; # LATIN CAPITAL LETTER H WITH CEDILLA 1E2A; C; 1E2B; # LATIN CAPITAL LETTER H WITH BREVE BELOW 1E2C; C; 1E2D; # LATIN CAPITAL LETTER I WITH TILDE BELOW 1E2E; C; 1E2F; # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE 1E30; C; 1E31; # LATIN CAPITAL LETTER K WITH ACUTE 1E32; C; 1E33; # LATIN CAPITAL LETTER K WITH DOT BELOW 1E34; C; 1E35; # LATIN CAPITAL LETTER K WITH LINE BELOW 1E36; C; 1E37; # LATIN CAPITAL LETTER L WITH DOT BELOW 1E38; C; 1E39; # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON 1E3A; C; 1E3B; # LATIN CAPITAL LETTER L WITH LINE BELOW 1E3C; C; 1E3D; # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW 1E3E; C; 1E3F; # LATIN CAPITAL LETTER M WITH ACUTE 1E40; C; 1E41; # LATIN CAPITAL LETTER M WITH DOT ABOVE 1E42; C; 1E43; # LATIN CAPITAL LETTER M WITH DOT BELOW 1E44; C; 1E45; # LATIN CAPITAL LETTER N WITH DOT ABOVE 1E46; C; 1E47; # LATIN CAPITAL LETTER N WITH DOT BELOW 1E48; C; 1E49; # LATIN CAPITAL LETTER N WITH LINE BELOW 1E4A; C; 1E4B; # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW 1E4C; C; 1E4D; # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE 1E4E; C; 1E4F; # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS 1E50; C; 1E51; # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE 1E52; C; 1E53; # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE 1E54; C; 1E55; # LATIN CAPITAL LETTER P WITH ACUTE 1E56; C; 1E57; # LATIN CAPITAL LETTER P WITH DOT ABOVE 1E58; C; 1E59; # LATIN CAPITAL LETTER R WITH DOT ABOVE 1E5A; C; 1E5B; # LATIN CAPITAL LETTER R WITH DOT BELOW 1E5C; C; 1E5D; # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON 1E5E; C; 1E5F; # LATIN CAPITAL LETTER R WITH LINE BELOW 1E60; C; 1E61; # LATIN CAPITAL LETTER S WITH DOT ABOVE 1E62; C; 1E63; # LATIN CAPITAL LETTER S WITH DOT BELOW 1E64; C; 1E65; # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE 1E66; C; 1E67; # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE 1E68; C; 1E69; # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE 1E6A; C; 1E6B; # LATIN CAPITAL LETTER T WITH DOT ABOVE 1E6C; C; 1E6D; # LATIN CAPITAL LETTER T WITH DOT BELOW 1E6E; C; 1E6F; # LATIN CAPITAL LETTER T WITH LINE BELOW 1E70; C; 1E71; # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW 1E72; C; 1E73; # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW 1E74; C; 1E75; # LATIN CAPITAL LETTER U WITH TILDE BELOW 1E76; C; 1E77; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW 1E78; C; 1E79; # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE 1E7A; C; 1E7B; # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS 1E7C; C; 1E7D; # LATIN CAPITAL LETTER V WITH TILDE 1E7E; C; 1E7F; # LATIN CAPITAL LETTER V WITH DOT BELOW 1E80; C; 1E81; # LATIN CAPITAL LETTER W WITH GRAVE 1E82; C; 1E83; # LATIN CAPITAL LETTER W WITH ACUTE 1E84; C; 1E85; # LATIN CAPITAL LETTER W WITH DIAERESIS 1E86; C; 1E87; # LATIN CAPITAL LETTER W WITH DOT ABOVE 1E88; C; 1E89; # LATIN CAPITAL LETTER W WITH DOT BELOW 1E8A; C; 1E8B; # LATIN CAPITAL LETTER X WITH DOT ABOVE 1E8C; C; 1E8D; # LATIN CAPITAL LETTER X WITH DIAERESIS 1E8E; C; 1E8F; # LATIN CAPITAL LETTER Y WITH DOT ABOVE 1E90; C; 1E91; # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX 1E92; C; 1E93; # LATIN CAPITAL LETTER Z WITH DOT BELOW 1E94; C; 1E95; # LATIN CAPITAL LETTER Z WITH LINE BELOW 1E96; F; 0068 0331; # LATIN SMALL LETTER H WITH LINE BELOW 1E97; F; 0074 0308; # LATIN SMALL LETTER T WITH DIAERESIS 1E98; F; 0077 030A; # LATIN SMALL LETTER W WITH RING ABOVE 1E99; F; 0079 030A; # LATIN SMALL LETTER Y WITH RING ABOVE 1E9A; F; 0061 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING 1E9B; C; 1E61; # LATIN SMALL LETTER LONG S WITH DOT ABOVE 1E9E; F; 0073 0073; # LATIN CAPITAL LETTER SHARP S 1E9E; S; 00DF; # LATIN CAPITAL LETTER SHARP S 1EA0; C; 1EA1; # LATIN CAPITAL LETTER A WITH DOT BELOW 1EA2; C; 1EA3; # LATIN CAPITAL LETTER A WITH HOOK ABOVE 1EA4; C; 1EA5; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE 1EA6; C; 1EA7; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE 1EA8; C; 1EA9; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE 1EAA; C; 1EAB; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE 1EAC; C; 1EAD; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW 1EAE; C; 1EAF; # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE 1EB0; C; 1EB1; # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE 1EB2; C; 1EB3; # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE 1EB4; C; 1EB5; # LATIN CAPITAL LETTER A WITH BREVE AND TILDE 1EB6; C; 1EB7; # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW 1EB8; C; 1EB9; # LATIN CAPITAL LETTER E WITH DOT BELOW 1EBA; C; 1EBB; # LATIN CAPITAL LETTER E WITH HOOK ABOVE 1EBC; C; 1EBD; # LATIN CAPITAL LETTER E WITH TILDE 1EBE; C; 1EBF; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 1EC0; C; 1EC1; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 1EC2; C; 1EC3; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 1EC4; C; 1EC5; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE 1EC6; C; 1EC7; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW 1EC8; C; 1EC9; # LATIN CAPITAL LETTER I WITH HOOK ABOVE 1ECA; C; 1ECB; # LATIN CAPITAL LETTER I WITH DOT BELOW 1ECC; C; 1ECD; # LATIN CAPITAL LETTER O WITH DOT BELOW 1ECE; C; 1ECF; # LATIN CAPITAL LETTER O WITH HOOK ABOVE 1ED0; C; 1ED1; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE 1ED2; C; 1ED3; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE 1ED4; C; 1ED5; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE 1ED6; C; 1ED7; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE 1ED8; C; 1ED9; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW 1EDA; C; 1EDB; # LATIN CAPITAL LETTER O WITH HORN AND ACUTE 1EDC; C; 1EDD; # LATIN CAPITAL LETTER O WITH HORN AND GRAVE 1EDE; C; 1EDF; # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE 1EE0; C; 1EE1; # LATIN CAPITAL LETTER O WITH HORN AND TILDE 1EE2; C; 1EE3; # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW 1EE4; C; 1EE5; # LATIN CAPITAL LETTER U WITH DOT BELOW 1EE6; C; 1EE7; # LATIN CAPITAL LETTER U WITH HOOK ABOVE 1EE8; C; 1EE9; # LATIN CAPITAL LETTER U WITH HORN AND ACUTE 1EEA; C; 1EEB; # LATIN CAPITAL LETTER U WITH HORN AND GRAVE 1EEC; C; 1EED; # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE 1EEE; C; 1EEF; # LATIN CAPITAL LETTER U WITH HORN AND TILDE 1EF0; C; 1EF1; # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW 1EF2; C; 1EF3; # LATIN CAPITAL LETTER Y WITH GRAVE 1EF4; C; 1EF5; # LATIN CAPITAL LETTER Y WITH DOT BELOW 1EF6; C; 1EF7; # LATIN CAPITAL LETTER Y WITH HOOK ABOVE 1EF8; C; 1EF9; # LATIN CAPITAL LETTER Y WITH TILDE 1EFA; C; 1EFB; # LATIN CAPITAL LETTER MIDDLE-WELSH LL 1EFC; C; 1EFD; # LATIN CAPITAL LETTER MIDDLE-WELSH V 1EFE; C; 1EFF; # LATIN CAPITAL LETTER Y WITH LOOP 1F08; C; 1F00; # GREEK CAPITAL LETTER ALPHA WITH PSILI 1F09; C; 1F01; # GREEK CAPITAL LETTER ALPHA WITH DASIA 1F0A; C; 1F02; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA 1F0B; C; 1F03; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA 1F0C; C; 1F04; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA 1F0D; C; 1F05; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA 1F0E; C; 1F06; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI 1F0F; C; 1F07; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI 1F18; C; 1F10; # GREEK CAPITAL LETTER EPSILON WITH PSILI 1F19; C; 1F11; # GREEK CAPITAL LETTER EPSILON WITH DASIA 1F1A; C; 1F12; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA 1F1B; C; 1F13; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA 1F1C; C; 1F14; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA 1F1D; C; 1F15; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA 1F28; C; 1F20; # GREEK CAPITAL LETTER ETA WITH PSILI 1F29; C; 1F21; # GREEK CAPITAL LETTER ETA WITH DASIA 1F2A; C; 1F22; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA 1F2B; C; 1F23; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA 1F2C; C; 1F24; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA 1F2D; C; 1F25; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA 1F2E; C; 1F26; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI 1F2F; C; 1F27; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI 1F38; C; 1F30; # GREEK CAPITAL LETTER IOTA WITH PSILI 1F39; C; 1F31; # GREEK CAPITAL LETTER IOTA WITH DASIA 1F3A; C; 1F32; # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA 1F3B; C; 1F33; # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA 1F3C; C; 1F34; # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA 1F3D; C; 1F35; # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA 1F3E; C; 1F36; # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI 1F3F; C; 1F37; # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI 1F48; C; 1F40; # GREEK CAPITAL LETTER OMICRON WITH PSILI 1F49; C; 1F41; # GREEK CAPITAL LETTER OMICRON WITH DASIA 1F4A; C; 1F42; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA 1F4B; C; 1F43; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA 1F4C; C; 1F44; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA 1F4D; C; 1F45; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA 1F50; F; 03C5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI 1F52; F; 03C5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA 1F54; F; 03C5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA 1F56; F; 03C5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI 1F59; C; 1F51; # GREEK CAPITAL LETTER UPSILON WITH DASIA 1F5B; C; 1F53; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA 1F5D; C; 1F55; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA 1F5F; C; 1F57; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI 1F68; C; 1F60; # GREEK CAPITAL LETTER OMEGA WITH PSILI 1F69; C; 1F61; # GREEK CAPITAL LETTER OMEGA WITH DASIA 1F6A; C; 1F62; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA 1F6B; C; 1F63; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA 1F6C; C; 1F64; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA 1F6D; C; 1F65; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA 1F6E; C; 1F66; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI 1F6F; C; 1F67; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI 1F80; F; 1F00 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI 1F81; F; 1F01 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI 1F82; F; 1F02 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI 1F83; F; 1F03 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI 1F84; F; 1F04 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI 1F85; F; 1F05 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI 1F86; F; 1F06 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI 1F87; F; 1F07 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI 1F88; F; 1F00 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI 1F88; S; 1F80; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI 1F89; F; 1F01 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI 1F89; S; 1F81; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI 1F8A; F; 1F02 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI 1F8A; S; 1F82; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI 1F8B; F; 1F03 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI 1F8B; S; 1F83; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI 1F8C; F; 1F04 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI 1F8C; S; 1F84; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI 1F8D; F; 1F05 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI 1F8D; S; 1F85; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI 1F8E; F; 1F06 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 1F8E; S; 1F86; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 1F8F; F; 1F07 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 1F8F; S; 1F87; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 1F90; F; 1F20 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI 1F91; F; 1F21 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI 1F92; F; 1F22 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI 1F93; F; 1F23 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI 1F94; F; 1F24 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI 1F95; F; 1F25 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI 1F96; F; 1F26 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI 1F97; F; 1F27 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI 1F98; F; 1F20 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI 1F98; S; 1F90; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI 1F99; F; 1F21 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI 1F99; S; 1F91; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI 1F9A; F; 1F22 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI 1F9A; S; 1F92; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI 1F9B; F; 1F23 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI 1F9B; S; 1F93; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI 1F9C; F; 1F24 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI 1F9C; S; 1F94; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI 1F9D; F; 1F25 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI 1F9D; S; 1F95; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI 1F9E; F; 1F26 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 1F9E; S; 1F96; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 1F9F; F; 1F27 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 1F9F; S; 1F97; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 1FA0; F; 1F60 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI 1FA1; F; 1F61 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI 1FA2; F; 1F62 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI 1FA3; F; 1F63 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI 1FA4; F; 1F64 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI 1FA5; F; 1F65 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI 1FA6; F; 1F66 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI 1FA7; F; 1F67 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI 1FA8; F; 1F60 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI 1FA8; S; 1FA0; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI 1FA9; F; 1F61 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI 1FA9; S; 1FA1; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI 1FAA; F; 1F62 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI 1FAA; S; 1FA2; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI 1FAB; F; 1F63 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI 1FAB; S; 1FA3; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI 1FAC; F; 1F64 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI 1FAC; S; 1FA4; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI 1FAD; F; 1F65 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI 1FAD; S; 1FA5; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI 1FAE; F; 1F66 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 1FAE; S; 1FA6; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 1FAF; F; 1F67 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 1FAF; S; 1FA7; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 1FB2; F; 1F70 03B9; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI 1FB3; F; 03B1 03B9; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI 1FB4; F; 03AC 03B9; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI 1FB6; F; 03B1 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI 1FB7; F; 03B1 0342 03B9; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI 1FB8; C; 1FB0; # GREEK CAPITAL LETTER ALPHA WITH VRACHY 1FB9; C; 1FB1; # GREEK CAPITAL LETTER ALPHA WITH MACRON 1FBA; C; 1F70; # GREEK CAPITAL LETTER ALPHA WITH VARIA 1FBB; C; 1F71; # GREEK CAPITAL LETTER ALPHA WITH OXIA 1FBC; F; 03B1 03B9; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI 1FBC; S; 1FB3; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI 1FBE; C; 03B9; # GREEK PROSGEGRAMMENI 1FC2; F; 1F74 03B9; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI 1FC3; F; 03B7 03B9; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI 1FC4; F; 03AE 03B9; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI 1FC6; F; 03B7 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI 1FC7; F; 03B7 0342 03B9; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI 1FC8; C; 1F72; # GREEK CAPITAL LETTER EPSILON WITH VARIA 1FC9; C; 1F73; # GREEK CAPITAL LETTER EPSILON WITH OXIA 1FCA; C; 1F74; # GREEK CAPITAL LETTER ETA WITH VARIA 1FCB; C; 1F75; # GREEK CAPITAL LETTER ETA WITH OXIA 1FCC; F; 03B7 03B9; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI 1FCC; S; 1FC3; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI 1FD2; F; 03B9 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA 1FD3; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA 1FD3; S; 0390; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA 1FD6; F; 03B9 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI 1FD7; F; 03B9 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI 1FD8; C; 1FD0; # GREEK CAPITAL LETTER IOTA WITH VRACHY 1FD9; C; 1FD1; # GREEK CAPITAL LETTER IOTA WITH MACRON 1FDA; C; 1F76; # GREEK CAPITAL LETTER IOTA WITH VARIA 1FDB; C; 1F77; # GREEK CAPITAL LETTER IOTA WITH OXIA 1FE2; F; 03C5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA 1FE3; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA 1FE3; S; 03B0; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA 1FE4; F; 03C1 0313; # GREEK SMALL LETTER RHO WITH PSILI 1FE6; F; 03C5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI 1FE7; F; 03C5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI 1FE8; C; 1FE0; # GREEK CAPITAL LETTER UPSILON WITH VRACHY 1FE9; C; 1FE1; # GREEK CAPITAL LETTER UPSILON WITH MACRON 1FEA; C; 1F7A; # GREEK CAPITAL LETTER UPSILON WITH VARIA 1FEB; C; 1F7B; # GREEK CAPITAL LETTER UPSILON WITH OXIA 1FEC; C; 1FE5; # GREEK CAPITAL LETTER RHO WITH DASIA 1FF2; F; 1F7C 03B9; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI 1FF3; F; 03C9 03B9; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI 1FF4; F; 03CE 03B9; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI 1FF6; F; 03C9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI 1FF7; F; 03C9 0342 03B9; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI 1FF8; C; 1F78; # GREEK CAPITAL LETTER OMICRON WITH VARIA 1FF9; C; 1F79; # GREEK CAPITAL LETTER OMICRON WITH OXIA 1FFA; C; 1F7C; # GREEK CAPITAL LETTER OMEGA WITH VARIA 1FFB; C; 1F7D; # GREEK CAPITAL LETTER OMEGA WITH OXIA 1FFC; F; 03C9 03B9; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI 1FFC; S; 1FF3; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI 2126; C; 03C9; # OHM SIGN 212A; C; 006B; # KELVIN SIGN 212B; C; 00E5; # ANGSTROM SIGN 2132; C; 214E; # TURNED CAPITAL F 2160; C; 2170; # ROMAN NUMERAL ONE 2161; C; 2171; # ROMAN NUMERAL TWO 2162; C; 2172; # ROMAN NUMERAL THREE 2163; C; 2173; # ROMAN NUMERAL FOUR 2164; C; 2174; # ROMAN NUMERAL FIVE 2165; C; 2175; # ROMAN NUMERAL SIX 2166; C; 2176; # ROMAN NUMERAL SEVEN 2167; C; 2177; # ROMAN NUMERAL EIGHT 2168; C; 2178; # ROMAN NUMERAL NINE 2169; C; 2179; # ROMAN NUMERAL TEN 216A; C; 217A; # ROMAN NUMERAL ELEVEN 216B; C; 217B; # ROMAN NUMERAL TWELVE 216C; C; 217C; # ROMAN NUMERAL FIFTY 216D; C; 217D; # ROMAN NUMERAL ONE HUNDRED 216E; C; 217E; # ROMAN NUMERAL FIVE HUNDRED 216F; C; 217F; # ROMAN NUMERAL ONE THOUSAND 2183; C; 2184; # ROMAN NUMERAL REVERSED ONE HUNDRED 24B6; C; 24D0; # CIRCLED LATIN CAPITAL LETTER A 24B7; C; 24D1; # CIRCLED LATIN CAPITAL LETTER B 24B8; C; 24D2; # CIRCLED LATIN CAPITAL LETTER C 24B9; C; 24D3; # CIRCLED LATIN CAPITAL LETTER D 24BA; C; 24D4; # CIRCLED LATIN CAPITAL LETTER E 24BB; C; 24D5; # CIRCLED LATIN CAPITAL LETTER F 24BC; C; 24D6; # CIRCLED LATIN CAPITAL LETTER G 24BD; C; 24D7; # CIRCLED LATIN CAPITAL LETTER H 24BE; C; 24D8; # CIRCLED LATIN CAPITAL LETTER I 24BF; C; 24D9; # CIRCLED LATIN CAPITAL LETTER J 24C0; C; 24DA; # CIRCLED LATIN CAPITAL LETTER K 24C1; C; 24DB; # CIRCLED LATIN CAPITAL LETTER L 24C2; C; 24DC; # CIRCLED LATIN CAPITAL LETTER M 24C3; C; 24DD; # CIRCLED LATIN CAPITAL LETTER N 24C4; C; 24DE; # CIRCLED LATIN CAPITAL LETTER O 24C5; C; 24DF; # CIRCLED LATIN CAPITAL LETTER P 24C6; C; 24E0; # CIRCLED LATIN CAPITAL LETTER Q 24C7; C; 24E1; # CIRCLED LATIN CAPITAL LETTER R 24C8; C; 24E2; # CIRCLED LATIN CAPITAL LETTER S 24C9; C; 24E3; # CIRCLED LATIN CAPITAL LETTER T 24CA; C; 24E4; # CIRCLED LATIN CAPITAL LETTER U 24CB; C; 24E5; # CIRCLED LATIN CAPITAL LETTER V 24CC; C; 24E6; # CIRCLED LATIN CAPITAL LETTER W 24CD; C; 24E7; # CIRCLED LATIN CAPITAL LETTER X 24CE; C; 24E8; # CIRCLED LATIN CAPITAL LETTER Y 24CF; C; 24E9; # CIRCLED LATIN CAPITAL LETTER Z 2C00; C; 2C30; # GLAGOLITIC CAPITAL LETTER AZU 2C01; C; 2C31; # GLAGOLITIC CAPITAL LETTER BUKY 2C02; C; 2C32; # GLAGOLITIC CAPITAL LETTER VEDE 2C03; C; 2C33; # GLAGOLITIC CAPITAL LETTER GLAGOLI 2C04; C; 2C34; # GLAGOLITIC CAPITAL LETTER DOBRO 2C05; C; 2C35; # GLAGOLITIC CAPITAL LETTER YESTU 2C06; C; 2C36; # GLAGOLITIC CAPITAL LETTER ZHIVETE 2C07; C; 2C37; # GLAGOLITIC CAPITAL LETTER DZELO 2C08; C; 2C38; # GLAGOLITIC CAPITAL LETTER ZEMLJA 2C09; C; 2C39; # GLAGOLITIC CAPITAL LETTER IZHE 2C0A; C; 2C3A; # GLAGOLITIC CAPITAL LETTER INITIAL IZHE 2C0B; C; 2C3B; # GLAGOLITIC CAPITAL LETTER I 2C0C; C; 2C3C; # GLAGOLITIC CAPITAL LETTER DJERVI 2C0D; C; 2C3D; # GLAGOLITIC CAPITAL LETTER KAKO 2C0E; C; 2C3E; # GLAGOLITIC CAPITAL LETTER LJUDIJE 2C0F; C; 2C3F; # GLAGOLITIC CAPITAL LETTER MYSLITE 2C10; C; 2C40; # GLAGOLITIC CAPITAL LETTER NASHI 2C11; C; 2C41; # GLAGOLITIC CAPITAL LETTER ONU 2C12; C; 2C42; # GLAGOLITIC CAPITAL LETTER POKOJI 2C13; C; 2C43; # GLAGOLITIC CAPITAL LETTER RITSI 2C14; C; 2C44; # GLAGOLITIC CAPITAL LETTER SLOVO 2C15; C; 2C45; # GLAGOLITIC CAPITAL LETTER TVRIDO 2C16; C; 2C46; # GLAGOLITIC CAPITAL LETTER UKU 2C17; C; 2C47; # GLAGOLITIC CAPITAL LETTER FRITU 2C18; C; 2C48; # GLAGOLITIC CAPITAL LETTER HERU 2C19; C; 2C49; # GLAGOLITIC CAPITAL LETTER OTU 2C1A; C; 2C4A; # GLAGOLITIC CAPITAL LETTER PE 2C1B; C; 2C4B; # GLAGOLITIC CAPITAL LETTER SHTA 2C1C; C; 2C4C; # GLAGOLITIC CAPITAL LETTER TSI 2C1D; C; 2C4D; # GLAGOLITIC CAPITAL LETTER CHRIVI 2C1E; C; 2C4E; # GLAGOLITIC CAPITAL LETTER SHA 2C1F; C; 2C4F; # GLAGOLITIC CAPITAL LETTER YERU 2C20; C; 2C50; # GLAGOLITIC CAPITAL LETTER YERI 2C21; C; 2C51; # GLAGOLITIC CAPITAL LETTER YATI 2C22; C; 2C52; # GLAGOLITIC CAPITAL LETTER SPIDERY HA 2C23; C; 2C53; # GLAGOLITIC CAPITAL LETTER YU 2C24; C; 2C54; # GLAGOLITIC CAPITAL LETTER SMALL YUS 2C25; C; 2C55; # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL 2C26; C; 2C56; # GLAGOLITIC CAPITAL LETTER YO 2C27; C; 2C57; # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS 2C28; C; 2C58; # GLAGOLITIC CAPITAL LETTER BIG YUS 2C29; C; 2C59; # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS 2C2A; C; 2C5A; # GLAGOLITIC CAPITAL LETTER FITA 2C2B; C; 2C5B; # GLAGOLITIC CAPITAL LETTER IZHITSA 2C2C; C; 2C5C; # GLAGOLITIC CAPITAL LETTER SHTAPIC 2C2D; C; 2C5D; # GLAGOLITIC CAPITAL LETTER TROKUTASTI A 2C2E; C; 2C5E; # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE 2C2F; C; 2C5F; # GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI 2C60; C; 2C61; # LATIN CAPITAL LETTER L WITH DOUBLE BAR 2C62; C; 026B; # LATIN CAPITAL LETTER L WITH MIDDLE TILDE 2C63; C; 1D7D; # LATIN CAPITAL LETTER P WITH STROKE 2C64; C; 027D; # LATIN CAPITAL LETTER R WITH TAIL 2C67; C; 2C68; # LATIN CAPITAL LETTER H WITH DESCENDER 2C69; C; 2C6A; # LATIN CAPITAL LETTER K WITH DESCENDER 2C6B; C; 2C6C; # LATIN CAPITAL LETTER Z WITH DESCENDER 2C6D; C; 0251; # LATIN CAPITAL LETTER ALPHA 2C6E; C; 0271; # LATIN CAPITAL LETTER M WITH HOOK 2C6F; C; 0250; # LATIN CAPITAL LETTER TURNED A 2C70; C; 0252; # LATIN CAPITAL LETTER TURNED ALPHA 2C72; C; 2C73; # LATIN CAPITAL LETTER W WITH HOOK 2C75; C; 2C76; # LATIN CAPITAL LETTER HALF H 2C7E; C; 023F; # LATIN CAPITAL LETTER S WITH SWASH TAIL 2C7F; C; 0240; # LATIN CAPITAL LETTER Z WITH SWASH TAIL 2C80; C; 2C81; # COPTIC CAPITAL LETTER ALFA 2C82; C; 2C83; # COPTIC CAPITAL LETTER VIDA 2C84; C; 2C85; # COPTIC CAPITAL LETTER GAMMA 2C86; C; 2C87; # COPTIC CAPITAL LETTER DALDA 2C88; C; 2C89; # COPTIC CAPITAL LETTER EIE 2C8A; C; 2C8B; # COPTIC CAPITAL LETTER SOU 2C8C; C; 2C8D; # COPTIC CAPITAL LETTER ZATA 2C8E; C; 2C8F; # COPTIC CAPITAL LETTER HATE 2C90; C; 2C91; # COPTIC CAPITAL LETTER THETHE 2C92; C; 2C93; # COPTIC CAPITAL LETTER IAUDA 2C94; C; 2C95; # COPTIC CAPITAL LETTER KAPA 2C96; C; 2C97; # COPTIC CAPITAL LETTER LAULA 2C98; C; 2C99; # COPTIC CAPITAL LETTER MI 2C9A; C; 2C9B; # COPTIC CAPITAL LETTER NI 2C9C; C; 2C9D; # COPTIC CAPITAL LETTER KSI 2C9E; C; 2C9F; # COPTIC CAPITAL LETTER O 2CA0; C; 2CA1; # COPTIC CAPITAL LETTER PI 2CA2; C; 2CA3; # COPTIC CAPITAL LETTER RO 2CA4; C; 2CA5; # COPTIC CAPITAL LETTER SIMA 2CA6; C; 2CA7; # COPTIC CAPITAL LETTER TAU 2CA8; C; 2CA9; # COPTIC CAPITAL LETTER UA 2CAA; C; 2CAB; # COPTIC CAPITAL LETTER FI 2CAC; C; 2CAD; # COPTIC CAPITAL LETTER KHI 2CAE; C; 2CAF; # COPTIC CAPITAL LETTER PSI 2CB0; C; 2CB1; # COPTIC CAPITAL LETTER OOU 2CB2; C; 2CB3; # COPTIC CAPITAL LETTER DIALECT-P ALEF 2CB4; C; 2CB5; # COPTIC CAPITAL LETTER OLD COPTIC AIN 2CB6; C; 2CB7; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE 2CB8; C; 2CB9; # COPTIC CAPITAL LETTER DIALECT-P KAPA 2CBA; C; 2CBB; # COPTIC CAPITAL LETTER DIALECT-P NI 2CBC; C; 2CBD; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI 2CBE; C; 2CBF; # COPTIC CAPITAL LETTER OLD COPTIC OOU 2CC0; C; 2CC1; # COPTIC CAPITAL LETTER SAMPI 2CC2; C; 2CC3; # COPTIC CAPITAL LETTER CROSSED SHEI 2CC4; C; 2CC5; # COPTIC CAPITAL LETTER OLD COPTIC SHEI 2CC6; C; 2CC7; # COPTIC CAPITAL LETTER OLD COPTIC ESH 2CC8; C; 2CC9; # COPTIC CAPITAL LETTER AKHMIMIC KHEI 2CCA; C; 2CCB; # COPTIC CAPITAL LETTER DIALECT-P HORI 2CCC; C; 2CCD; # COPTIC CAPITAL LETTER OLD COPTIC HORI 2CCE; C; 2CCF; # COPTIC CAPITAL LETTER OLD COPTIC HA 2CD0; C; 2CD1; # COPTIC CAPITAL LETTER L-SHAPED HA 2CD2; C; 2CD3; # COPTIC CAPITAL LETTER OLD COPTIC HEI 2CD4; C; 2CD5; # COPTIC CAPITAL LETTER OLD COPTIC HAT 2CD6; C; 2CD7; # COPTIC CAPITAL LETTER OLD COPTIC GANGIA 2CD8; C; 2CD9; # COPTIC CAPITAL LETTER OLD COPTIC DJA 2CDA; C; 2CDB; # COPTIC CAPITAL LETTER OLD COPTIC SHIMA 2CDC; C; 2CDD; # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA 2CDE; C; 2CDF; # COPTIC CAPITAL LETTER OLD NUBIAN NGI 2CE0; C; 2CE1; # COPTIC CAPITAL LETTER OLD NUBIAN NYI 2CE2; C; 2CE3; # COPTIC CAPITAL LETTER OLD NUBIAN WAU 2CEB; C; 2CEC; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI 2CED; C; 2CEE; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA 2CF2; C; 2CF3; # COPTIC CAPITAL LETTER BOHAIRIC KHEI A640; C; A641; # CYRILLIC CAPITAL LETTER ZEMLYA A642; C; A643; # CYRILLIC CAPITAL LETTER DZELO A644; C; A645; # CYRILLIC CAPITAL LETTER REVERSED DZE A646; C; A647; # CYRILLIC CAPITAL LETTER IOTA A648; C; A649; # CYRILLIC CAPITAL LETTER DJERV A64A; C; A64B; # CYRILLIC CAPITAL LETTER MONOGRAPH UK A64C; C; A64D; # CYRILLIC CAPITAL LETTER BROAD OMEGA A64E; C; A64F; # CYRILLIC CAPITAL LETTER NEUTRAL YER A650; C; A651; # CYRILLIC CAPITAL LETTER YERU WITH BACK YER A652; C; A653; # CYRILLIC CAPITAL LETTER IOTIFIED YAT A654; C; A655; # CYRILLIC CAPITAL LETTER REVERSED YU A656; C; A657; # CYRILLIC CAPITAL LETTER IOTIFIED A A658; C; A659; # CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS A65A; C; A65B; # CYRILLIC CAPITAL LETTER BLENDED YUS A65C; C; A65D; # CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS A65E; C; A65F; # CYRILLIC CAPITAL LETTER YN A660; C; A661; # CYRILLIC CAPITAL LETTER REVERSED TSE A662; C; A663; # CYRILLIC CAPITAL LETTER SOFT DE A664; C; A665; # CYRILLIC CAPITAL LETTER SOFT EL A666; C; A667; # CYRILLIC CAPITAL LETTER SOFT EM A668; C; A669; # CYRILLIC CAPITAL LETTER MONOCULAR O A66A; C; A66B; # CYRILLIC CAPITAL LETTER BINOCULAR O A66C; C; A66D; # CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O A680; C; A681; # CYRILLIC CAPITAL LETTER DWE A682; C; A683; # CYRILLIC CAPITAL LETTER DZWE A684; C; A685; # CYRILLIC CAPITAL LETTER ZHWE A686; C; A687; # CYRILLIC CAPITAL LETTER CCHE A688; C; A689; # CYRILLIC CAPITAL LETTER DZZE A68A; C; A68B; # CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK A68C; C; A68D; # CYRILLIC CAPITAL LETTER TWE A68E; C; A68F; # CYRILLIC CAPITAL LETTER TSWE A690; C; A691; # CYRILLIC CAPITAL LETTER TSSE A692; C; A693; # CYRILLIC CAPITAL LETTER TCHE A694; C; A695; # CYRILLIC CAPITAL LETTER HWE A696; C; A697; # CYRILLIC CAPITAL LETTER SHWE A698; C; A699; # CYRILLIC CAPITAL LETTER DOUBLE O A69A; C; A69B; # CYRILLIC CAPITAL LETTER CROSSED O A722; C; A723; # LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF A724; C; A725; # LATIN CAPITAL LETTER EGYPTOLOGICAL AIN A726; C; A727; # LATIN CAPITAL LETTER HENG A728; C; A729; # LATIN CAPITAL LETTER TZ A72A; C; A72B; # LATIN CAPITAL LETTER TRESILLO A72C; C; A72D; # LATIN CAPITAL LETTER CUATRILLO A72E; C; A72F; # LATIN CAPITAL LETTER CUATRILLO WITH COMMA A732; C; A733; # LATIN CAPITAL LETTER AA A734; C; A735; # LATIN CAPITAL LETTER AO A736; C; A737; # LATIN CAPITAL LETTER AU A738; C; A739; # LATIN CAPITAL LETTER AV A73A; C; A73B; # LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR A73C; C; A73D; # LATIN CAPITAL LETTER AY A73E; C; A73F; # LATIN CAPITAL LETTER REVERSED C WITH DOT A740; C; A741; # LATIN CAPITAL LETTER K WITH STROKE A742; C; A743; # LATIN CAPITAL LETTER K WITH DIAGONAL STROKE A744; C; A745; # LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE A746; C; A747; # LATIN CAPITAL LETTER BROKEN L A748; C; A749; # LATIN CAPITAL LETTER L WITH HIGH STROKE A74A; C; A74B; # LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY A74C; C; A74D; # LATIN CAPITAL LETTER O WITH LOOP A74E; C; A74F; # LATIN CAPITAL LETTER OO A750; C; A751; # LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER A752; C; A753; # LATIN CAPITAL LETTER P WITH FLOURISH A754; C; A755; # LATIN CAPITAL LETTER P WITH SQUIRREL TAIL A756; C; A757; # LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER A758; C; A759; # LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE A75A; C; A75B; # LATIN CAPITAL LETTER R ROTUNDA A75C; C; A75D; # LATIN CAPITAL LETTER RUM ROTUNDA A75E; C; A75F; # LATIN CAPITAL LETTER V WITH DIAGONAL STROKE A760; C; A761; # LATIN CAPITAL LETTER VY A762; C; A763; # LATIN CAPITAL LETTER VISIGOTHIC Z A764; C; A765; # LATIN CAPITAL LETTER THORN WITH STROKE A766; C; A767; # LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER A768; C; A769; # LATIN CAPITAL LETTER VEND A76A; C; A76B; # LATIN CAPITAL LETTER ET A76C; C; A76D; # LATIN CAPITAL LETTER IS A76E; C; A76F; # LATIN CAPITAL LETTER CON A779; C; A77A; # LATIN CAPITAL LETTER INSULAR D A77B; C; A77C; # LATIN CAPITAL LETTER INSULAR F A77D; C; 1D79; # LATIN CAPITAL LETTER INSULAR G A77E; C; A77F; # LATIN CAPITAL LETTER TURNED INSULAR G A780; C; A781; # LATIN CAPITAL LETTER TURNED L A782; C; A783; # LATIN CAPITAL LETTER INSULAR R A784; C; A785; # LATIN CAPITAL LETTER INSULAR S A786; C; A787; # LATIN CAPITAL LETTER INSULAR T A78B; C; A78C; # LATIN CAPITAL LETTER SALTILLO A78D; C; 0265; # LATIN CAPITAL LETTER TURNED H A790; C; A791; # LATIN CAPITAL LETTER N WITH DESCENDER A792; C; A793; # LATIN CAPITAL LETTER C WITH BAR A796; C; A797; # LATIN CAPITAL LETTER B WITH FLOURISH A798; C; A799; # LATIN CAPITAL LETTER F WITH STROKE A79A; C; A79B; # LATIN CAPITAL LETTER VOLAPUK AE A79C; C; A79D; # LATIN CAPITAL LETTER VOLAPUK OE A79E; C; A79F; # LATIN CAPITAL LETTER VOLAPUK UE A7A0; C; A7A1; # LATIN CAPITAL LETTER G WITH OBLIQUE STROKE A7A2; C; A7A3; # LATIN CAPITAL LETTER K WITH OBLIQUE STROKE A7A4; C; A7A5; # LATIN CAPITAL LETTER N WITH OBLIQUE STROKE A7A6; C; A7A7; # LATIN CAPITAL LETTER R WITH OBLIQUE STROKE A7A8; C; A7A9; # LATIN CAPITAL LETTER S WITH OBLIQUE STROKE A7AA; C; 0266; # LATIN CAPITAL LETTER H WITH HOOK A7AB; C; 025C; # LATIN CAPITAL LETTER REVERSED OPEN E A7AC; C; 0261; # LATIN CAPITAL LETTER SCRIPT G A7AD; C; 026C; # LATIN CAPITAL LETTER L WITH BELT A7AE; C; 026A; # LATIN CAPITAL LETTER SMALL CAPITAL I A7B0; C; 029E; # LATIN CAPITAL LETTER TURNED K A7B1; C; 0287; # LATIN CAPITAL LETTER TURNED T A7B2; C; 029D; # LATIN CAPITAL LETTER J WITH CROSSED-TAIL A7B3; C; AB53; # LATIN CAPITAL LETTER CHI A7B4; C; A7B5; # LATIN CAPITAL LETTER BETA A7B6; C; A7B7; # LATIN CAPITAL LETTER OMEGA A7B8; C; A7B9; # LATIN CAPITAL LETTER U WITH STROKE A7BA; C; A7BB; # LATIN CAPITAL LETTER GLOTTAL A A7BC; C; A7BD; # LATIN CAPITAL LETTER GLOTTAL I A7BE; C; A7BF; # LATIN CAPITAL LETTER GLOTTAL U A7C0; C; A7C1; # LATIN CAPITAL LETTER OLD POLISH O A7C2; C; A7C3; # LATIN CAPITAL LETTER ANGLICANA W A7C4; C; A794; # LATIN CAPITAL LETTER C WITH PALATAL HOOK A7C5; C; 0282; # LATIN CAPITAL LETTER S WITH HOOK A7C6; C; 1D8E; # LATIN CAPITAL LETTER Z WITH PALATAL HOOK A7C7; C; A7C8; # LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY A7C9; C; A7CA; # LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY A7D0; C; A7D1; # LATIN CAPITAL LETTER CLOSED INSULAR G A7D6; C; A7D7; # LATIN CAPITAL LETTER MIDDLE SCOTS S A7D8; C; A7D9; # LATIN CAPITAL LETTER SIGMOID S A7F5; C; A7F6; # LATIN CAPITAL LETTER REVERSED HALF H AB70; C; 13A0; # CHEROKEE SMALL LETTER A AB71; C; 13A1; # CHEROKEE SMALL LETTER E AB72; C; 13A2; # CHEROKEE SMALL LETTER I AB73; C; 13A3; # CHEROKEE SMALL LETTER O AB74; C; 13A4; # CHEROKEE SMALL LETTER U AB75; C; 13A5; # CHEROKEE SMALL LETTER V AB76; C; 13A6; # CHEROKEE SMALL LETTER GA AB77; C; 13A7; # CHEROKEE SMALL LETTER KA AB78; C; 13A8; # CHEROKEE SMALL LETTER GE AB79; C; 13A9; # CHEROKEE SMALL LETTER GI AB7A; C; 13AA; # CHEROKEE SMALL LETTER GO AB7B; C; 13AB; # CHEROKEE SMALL LETTER GU AB7C; C; 13AC; # CHEROKEE SMALL LETTER GV AB7D; C; 13AD; # CHEROKEE SMALL LETTER HA AB7E; C; 13AE; # CHEROKEE SMALL LETTER HE AB7F; C; 13AF; # CHEROKEE SMALL LETTER HI AB80; C; 13B0; # CHEROKEE SMALL LETTER HO AB81; C; 13B1; # CHEROKEE SMALL LETTER HU AB82; C; 13B2; # CHEROKEE SMALL LETTER HV AB83; C; 13B3; # CHEROKEE SMALL LETTER LA AB84; C; 13B4; # CHEROKEE SMALL LETTER LE AB85; C; 13B5; # CHEROKEE SMALL LETTER LI AB86; C; 13B6; # CHEROKEE SMALL LETTER LO AB87; C; 13B7; # CHEROKEE SMALL LETTER LU AB88; C; 13B8; # CHEROKEE SMALL LETTER LV AB89; C; 13B9; # CHEROKEE SMALL LETTER MA AB8A; C; 13BA; # CHEROKEE SMALL LETTER ME AB8B; C; 13BB; # CHEROKEE SMALL LETTER MI AB8C; C; 13BC; # CHEROKEE SMALL LETTER MO AB8D; C; 13BD; # CHEROKEE SMALL LETTER MU AB8E; C; 13BE; # CHEROKEE SMALL LETTER NA AB8F; C; 13BF; # CHEROKEE SMALL LETTER HNA AB90; C; 13C0; # CHEROKEE SMALL LETTER NAH AB91; C; 13C1; # CHEROKEE SMALL LETTER NE AB92; C; 13C2; # CHEROKEE SMALL LETTER NI AB93; C; 13C3; # CHEROKEE SMALL LETTER NO AB94; C; 13C4; # CHEROKEE SMALL LETTER NU AB95; C; 13C5; # CHEROKEE SMALL LETTER NV AB96; C; 13C6; # CHEROKEE SMALL LETTER QUA AB97; C; 13C7; # CHEROKEE SMALL LETTER QUE AB98; C; 13C8; # CHEROKEE SMALL LETTER QUI AB99; C; 13C9; # CHEROKEE SMALL LETTER QUO AB9A; C; 13CA; # CHEROKEE SMALL LETTER QUU AB9B; C; 13CB; # CHEROKEE SMALL LETTER QUV AB9C; C; 13CC; # CHEROKEE SMALL LETTER SA AB9D; C; 13CD; # CHEROKEE SMALL LETTER S AB9E; C; 13CE; # CHEROKEE SMALL LETTER SE AB9F; C; 13CF; # CHEROKEE SMALL LETTER SI ABA0; C; 13D0; # CHEROKEE SMALL LETTER SO ABA1; C; 13D1; # CHEROKEE SMALL LETTER SU ABA2; C; 13D2; # CHEROKEE SMALL LETTER SV ABA3; C; 13D3; # CHEROKEE SMALL LETTER DA ABA4; C; 13D4; # CHEROKEE SMALL LETTER TA ABA5; C; 13D5; # CHEROKEE SMALL LETTER DE ABA6; C; 13D6; # CHEROKEE SMALL LETTER TE ABA7; C; 13D7; # CHEROKEE SMALL LETTER DI ABA8; C; 13D8; # CHEROKEE SMALL LETTER TI ABA9; C; 13D9; # CHEROKEE SMALL LETTER DO ABAA; C; 13DA; # CHEROKEE SMALL LETTER DU ABAB; C; 13DB; # CHEROKEE SMALL LETTER DV ABAC; C; 13DC; # CHEROKEE SMALL LETTER DLA ABAD; C; 13DD; # CHEROKEE SMALL LETTER TLA ABAE; C; 13DE; # CHEROKEE SMALL LETTER TLE ABAF; C; 13DF; # CHEROKEE SMALL LETTER TLI ABB0; C; 13E0; # CHEROKEE SMALL LETTER TLO ABB1; C; 13E1; # CHEROKEE SMALL LETTER TLU ABB2; C; 13E2; # CHEROKEE SMALL LETTER TLV ABB3; C; 13E3; # CHEROKEE SMALL LETTER TSA ABB4; C; 13E4; # CHEROKEE SMALL LETTER TSE ABB5; C; 13E5; # CHEROKEE SMALL LETTER TSI ABB6; C; 13E6; # CHEROKEE SMALL LETTER TSO ABB7; C; 13E7; # CHEROKEE SMALL LETTER TSU ABB8; C; 13E8; # CHEROKEE SMALL LETTER TSV ABB9; C; 13E9; # CHEROKEE SMALL LETTER WA ABBA; C; 13EA; # CHEROKEE SMALL LETTER WE ABBB; C; 13EB; # CHEROKEE SMALL LETTER WI ABBC; C; 13EC; # CHEROKEE SMALL LETTER WO ABBD; C; 13ED; # CHEROKEE SMALL LETTER WU ABBE; C; 13EE; # CHEROKEE SMALL LETTER WV ABBF; C; 13EF; # CHEROKEE SMALL LETTER YA FB00; F; 0066 0066; # LATIN SMALL LIGATURE FF FB01; F; 0066 0069; # LATIN SMALL LIGATURE FI FB02; F; 0066 006C; # LATIN SMALL LIGATURE FL FB03; F; 0066 0066 0069; # LATIN SMALL LIGATURE FFI FB04; F; 0066 0066 006C; # LATIN SMALL LIGATURE FFL FB05; F; 0073 0074; # LATIN SMALL LIGATURE LONG S T FB05; S; FB06; # LATIN SMALL LIGATURE LONG S T FB06; F; 0073 0074; # LATIN SMALL LIGATURE ST FB13; F; 0574 0576; # ARMENIAN SMALL LIGATURE MEN NOW FB14; F; 0574 0565; # ARMENIAN SMALL LIGATURE MEN ECH FB15; F; 0574 056B; # ARMENIAN SMALL LIGATURE MEN INI FB16; F; 057E 0576; # ARMENIAN SMALL LIGATURE VEW NOW FB17; F; 0574 056D; # ARMENIAN SMALL LIGATURE MEN XEH FF21; C; FF41; # FULLWIDTH LATIN CAPITAL LETTER A FF22; C; FF42; # FULLWIDTH LATIN CAPITAL LETTER B FF23; C; FF43; # FULLWIDTH LATIN CAPITAL LETTER C FF24; C; FF44; # FULLWIDTH LATIN CAPITAL LETTER D FF25; C; FF45; # FULLWIDTH LATIN CAPITAL LETTER E FF26; C; FF46; # FULLWIDTH LATIN CAPITAL LETTER F FF27; C; FF47; # FULLWIDTH LATIN CAPITAL LETTER G FF28; C; FF48; # FULLWIDTH LATIN CAPITAL LETTER H FF29; C; FF49; # FULLWIDTH LATIN CAPITAL LETTER I FF2A; C; FF4A; # FULLWIDTH LATIN CAPITAL LETTER J FF2B; C; FF4B; # FULLWIDTH LATIN CAPITAL LETTER K FF2C; C; FF4C; # FULLWIDTH LATIN CAPITAL LETTER L FF2D; C; FF4D; # FULLWIDTH LATIN CAPITAL LETTER M FF2E; C; FF4E; # FULLWIDTH LATIN CAPITAL LETTER N FF2F; C; FF4F; # FULLWIDTH LATIN CAPITAL LETTER O FF30; C; FF50; # FULLWIDTH LATIN CAPITAL LETTER P FF31; C; FF51; # FULLWIDTH LATIN CAPITAL LETTER Q FF32; C; FF52; # FULLWIDTH LATIN CAPITAL LETTER R FF33; C; FF53; # FULLWIDTH LATIN CAPITAL LETTER S FF34; C; FF54; # FULLWIDTH LATIN CAPITAL LETTER T FF35; C; FF55; # FULLWIDTH LATIN CAPITAL LETTER U FF36; C; FF56; # FULLWIDTH LATIN CAPITAL LETTER V FF37; C; FF57; # FULLWIDTH LATIN CAPITAL LETTER W FF38; C; FF58; # FULLWIDTH LATIN CAPITAL LETTER X FF39; C; FF59; # FULLWIDTH LATIN CAPITAL LETTER Y FF3A; C; FF5A; # FULLWIDTH LATIN CAPITAL LETTER Z 10400; C; 10428; # DESERET CAPITAL LETTER LONG I 10401; C; 10429; # DESERET CAPITAL LETTER LONG E 10402; C; 1042A; # DESERET CAPITAL LETTER LONG A 10403; C; 1042B; # DESERET CAPITAL LETTER LONG AH 10404; C; 1042C; # DESERET CAPITAL LETTER LONG O 10405; C; 1042D; # DESERET CAPITAL LETTER LONG OO 10406; C; 1042E; # DESERET CAPITAL LETTER SHORT I 10407; C; 1042F; # DESERET CAPITAL LETTER SHORT E 10408; C; 10430; # DESERET CAPITAL LETTER SHORT A 10409; C; 10431; # DESERET CAPITAL LETTER SHORT AH 1040A; C; 10432; # DESERET CAPITAL LETTER SHORT O 1040B; C; 10433; # DESERET CAPITAL LETTER SHORT OO 1040C; C; 10434; # DESERET CAPITAL LETTER AY 1040D; C; 10435; # DESERET CAPITAL LETTER OW 1040E; C; 10436; # DESERET CAPITAL LETTER WU 1040F; C; 10437; # DESERET CAPITAL LETTER YEE 10410; C; 10438; # DESERET CAPITAL LETTER H 10411; C; 10439; # DESERET CAPITAL LETTER PEE 10412; C; 1043A; # DESERET CAPITAL LETTER BEE 10413; C; 1043B; # DESERET CAPITAL LETTER TEE 10414; C; 1043C; # DESERET CAPITAL LETTER DEE 10415; C; 1043D; # DESERET CAPITAL LETTER CHEE 10416; C; 1043E; # DESERET CAPITAL LETTER JEE 10417; C; 1043F; # DESERET CAPITAL LETTER KAY 10418; C; 10440; # DESERET CAPITAL LETTER GAY 10419; C; 10441; # DESERET CAPITAL LETTER EF 1041A; C; 10442; # DESERET CAPITAL LETTER VEE 1041B; C; 10443; # DESERET CAPITAL LETTER ETH 1041C; C; 10444; # DESERET CAPITAL LETTER THEE 1041D; C; 10445; # DESERET CAPITAL LETTER ES 1041E; C; 10446; # DESERET CAPITAL LETTER ZEE 1041F; C; 10447; # DESERET CAPITAL LETTER ESH 10420; C; 10448; # DESERET CAPITAL LETTER ZHEE 10421; C; 10449; # DESERET CAPITAL LETTER ER 10422; C; 1044A; # DESERET CAPITAL LETTER EL 10423; C; 1044B; # DESERET CAPITAL LETTER EM 10424; C; 1044C; # DESERET CAPITAL LETTER EN 10425; C; 1044D; # DESERET CAPITAL LETTER ENG 10426; C; 1044E; # DESERET CAPITAL LETTER OI 10427; C; 1044F; # DESERET CAPITAL LETTER EW 104B0; C; 104D8; # OSAGE CAPITAL LETTER A 104B1; C; 104D9; # OSAGE CAPITAL LETTER AI 104B2; C; 104DA; # OSAGE CAPITAL LETTER AIN 104B3; C; 104DB; # OSAGE CAPITAL LETTER AH 104B4; C; 104DC; # OSAGE CAPITAL LETTER BRA 104B5; C; 104DD; # OSAGE CAPITAL LETTER CHA 104B6; C; 104DE; # OSAGE CAPITAL LETTER EHCHA 104B7; C; 104DF; # OSAGE CAPITAL LETTER E 104B8; C; 104E0; # OSAGE CAPITAL LETTER EIN 104B9; C; 104E1; # OSAGE CAPITAL LETTER HA 104BA; C; 104E2; # OSAGE CAPITAL LETTER HYA 104BB; C; 104E3; # OSAGE CAPITAL LETTER I 104BC; C; 104E4; # OSAGE CAPITAL LETTER KA 104BD; C; 104E5; # OSAGE CAPITAL LETTER EHKA 104BE; C; 104E6; # OSAGE CAPITAL LETTER KYA 104BF; C; 104E7; # OSAGE CAPITAL LETTER LA 104C0; C; 104E8; # OSAGE CAPITAL LETTER MA 104C1; C; 104E9; # OSAGE CAPITAL LETTER NA 104C2; C; 104EA; # OSAGE CAPITAL LETTER O 104C3; C; 104EB; # OSAGE CAPITAL LETTER OIN 104C4; C; 104EC; # OSAGE CAPITAL LETTER PA 104C5; C; 104ED; # OSAGE CAPITAL LETTER EHPA 104C6; C; 104EE; # OSAGE CAPITAL LETTER SA 104C7; C; 104EF; # OSAGE CAPITAL LETTER SHA 104C8; C; 104F0; # OSAGE CAPITAL LETTER TA 104C9; C; 104F1; # OSAGE CAPITAL LETTER EHTA 104CA; C; 104F2; # OSAGE CAPITAL LETTER TSA 104CB; C; 104F3; # OSAGE CAPITAL LETTER EHTSA 104CC; C; 104F4; # OSAGE CAPITAL LETTER TSHA 104CD; C; 104F5; # OSAGE CAPITAL LETTER DHA 104CE; C; 104F6; # OSAGE CAPITAL LETTER U 104CF; C; 104F7; # OSAGE CAPITAL LETTER WA 104D0; C; 104F8; # OSAGE CAPITAL LETTER KHA 104D1; C; 104F9; # OSAGE CAPITAL LETTER GHA 104D2; C; 104FA; # OSAGE CAPITAL LETTER ZA 104D3; C; 104FB; # OSAGE CAPITAL LETTER ZHA 10570; C; 10597; # VITHKUQI CAPITAL LETTER A 10571; C; 10598; # VITHKUQI CAPITAL LETTER BBE 10572; C; 10599; # VITHKUQI CAPITAL LETTER BE 10573; C; 1059A; # VITHKUQI CAPITAL LETTER CE 10574; C; 1059B; # VITHKUQI CAPITAL LETTER CHE 10575; C; 1059C; # VITHKUQI CAPITAL LETTER DE 10576; C; 1059D; # VITHKUQI CAPITAL LETTER DHE 10577; C; 1059E; # VITHKUQI CAPITAL LETTER EI 10578; C; 1059F; # VITHKUQI CAPITAL LETTER E 10579; C; 105A0; # VITHKUQI CAPITAL LETTER FE 1057A; C; 105A1; # VITHKUQI CAPITAL LETTER GA 1057C; C; 105A3; # VITHKUQI CAPITAL LETTER HA 1057D; C; 105A4; # VITHKUQI CAPITAL LETTER HHA 1057E; C; 105A5; # VITHKUQI CAPITAL LETTER I 1057F; C; 105A6; # VITHKUQI CAPITAL LETTER IJE 10580; C; 105A7; # VITHKUQI CAPITAL LETTER JE 10581; C; 105A8; # VITHKUQI CAPITAL LETTER KA 10582; C; 105A9; # VITHKUQI CAPITAL LETTER LA 10583; C; 105AA; # VITHKUQI CAPITAL LETTER LLA 10584; C; 105AB; # VITHKUQI CAPITAL LETTER ME 10585; C; 105AC; # VITHKUQI CAPITAL LETTER NE 10586; C; 105AD; # VITHKUQI CAPITAL LETTER NJE 10587; C; 105AE; # VITHKUQI CAPITAL LETTER O 10588; C; 105AF; # VITHKUQI CAPITAL LETTER PE 10589; C; 105B0; # VITHKUQI CAPITAL LETTER QA 1058A; C; 105B1; # VITHKUQI CAPITAL LETTER RE 1058C; C; 105B3; # VITHKUQI CAPITAL LETTER SE 1058D; C; 105B4; # VITHKUQI CAPITAL LETTER SHE 1058E; C; 105B5; # VITHKUQI CAPITAL LETTER TE 1058F; C; 105B6; # VITHKUQI CAPITAL LETTER THE 10590; C; 105B7; # VITHKUQI CAPITAL LETTER U 10591; C; 105B8; # VITHKUQI CAPITAL LETTER VE 10592; C; 105B9; # VITHKUQI CAPITAL LETTER XE 10594; C; 105BB; # VITHKUQI CAPITAL LETTER Y 10595; C; 105BC; # VITHKUQI CAPITAL LETTER ZE 10C80; C; 10CC0; # OLD HUNGARIAN CAPITAL LETTER A 10C81; C; 10CC1; # OLD HUNGARIAN CAPITAL LETTER AA 10C82; C; 10CC2; # OLD HUNGARIAN CAPITAL LETTER EB 10C83; C; 10CC3; # OLD HUNGARIAN CAPITAL LETTER AMB 10C84; C; 10CC4; # OLD HUNGARIAN CAPITAL LETTER EC 10C85; C; 10CC5; # OLD HUNGARIAN CAPITAL LETTER ENC 10C86; C; 10CC6; # OLD HUNGARIAN CAPITAL LETTER ECS 10C87; C; 10CC7; # OLD HUNGARIAN CAPITAL LETTER ED 10C88; C; 10CC8; # OLD HUNGARIAN CAPITAL LETTER AND 10C89; C; 10CC9; # OLD HUNGARIAN CAPITAL LETTER E 10C8A; C; 10CCA; # OLD HUNGARIAN CAPITAL LETTER CLOSE E 10C8B; C; 10CCB; # OLD HUNGARIAN CAPITAL LETTER EE 10C8C; C; 10CCC; # OLD HUNGARIAN CAPITAL LETTER EF 10C8D; C; 10CCD; # OLD HUNGARIAN CAPITAL LETTER EG 10C8E; C; 10CCE; # OLD HUNGARIAN CAPITAL LETTER EGY 10C8F; C; 10CCF; # OLD HUNGARIAN CAPITAL LETTER EH 10C90; C; 10CD0; # OLD HUNGARIAN CAPITAL LETTER I 10C91; C; 10CD1; # OLD HUNGARIAN CAPITAL LETTER II 10C92; C; 10CD2; # OLD HUNGARIAN CAPITAL LETTER EJ 10C93; C; 10CD3; # OLD HUNGARIAN CAPITAL LETTER EK 10C94; C; 10CD4; # OLD HUNGARIAN CAPITAL LETTER AK 10C95; C; 10CD5; # OLD HUNGARIAN CAPITAL LETTER UNK 10C96; C; 10CD6; # OLD HUNGARIAN CAPITAL LETTER EL 10C97; C; 10CD7; # OLD HUNGARIAN CAPITAL LETTER ELY 10C98; C; 10CD8; # OLD HUNGARIAN CAPITAL LETTER EM 10C99; C; 10CD9; # OLD HUNGARIAN CAPITAL LETTER EN 10C9A; C; 10CDA; # OLD HUNGARIAN CAPITAL LETTER ENY 10C9B; C; 10CDB; # OLD HUNGARIAN CAPITAL LETTER O 10C9C; C; 10CDC; # OLD HUNGARIAN CAPITAL LETTER OO 10C9D; C; 10CDD; # OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE 10C9E; C; 10CDE; # OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE 10C9F; C; 10CDF; # OLD HUNGARIAN CAPITAL LETTER OEE 10CA0; C; 10CE0; # OLD HUNGARIAN CAPITAL LETTER EP 10CA1; C; 10CE1; # OLD HUNGARIAN CAPITAL LETTER EMP 10CA2; C; 10CE2; # OLD HUNGARIAN CAPITAL LETTER ER 10CA3; C; 10CE3; # OLD HUNGARIAN CAPITAL LETTER SHORT ER 10CA4; C; 10CE4; # OLD HUNGARIAN CAPITAL LETTER ES 10CA5; C; 10CE5; # OLD HUNGARIAN CAPITAL LETTER ESZ 10CA6; C; 10CE6; # OLD HUNGARIAN CAPITAL LETTER ET 10CA7; C; 10CE7; # OLD HUNGARIAN CAPITAL LETTER ENT 10CA8; C; 10CE8; # OLD HUNGARIAN CAPITAL LETTER ETY 10CA9; C; 10CE9; # OLD HUNGARIAN CAPITAL LETTER ECH 10CAA; C; 10CEA; # OLD HUNGARIAN CAPITAL LETTER U 10CAB; C; 10CEB; # OLD HUNGARIAN CAPITAL LETTER UU 10CAC; C; 10CEC; # OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE 10CAD; C; 10CED; # OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE 10CAE; C; 10CEE; # OLD HUNGARIAN CAPITAL LETTER EV 10CAF; C; 10CEF; # OLD HUNGARIAN CAPITAL LETTER EZ 10CB0; C; 10CF0; # OLD HUNGARIAN CAPITAL LETTER EZS 10CB1; C; 10CF1; # OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN 10CB2; C; 10CF2; # OLD HUNGARIAN CAPITAL LETTER US 118A0; C; 118C0; # WARANG CITI CAPITAL LETTER NGAA 118A1; C; 118C1; # WARANG CITI CAPITAL LETTER A 118A2; C; 118C2; # WARANG CITI CAPITAL LETTER WI 118A3; C; 118C3; # WARANG CITI CAPITAL LETTER YU 118A4; C; 118C4; # WARANG CITI CAPITAL LETTER YA 118A5; C; 118C5; # WARANG CITI CAPITAL LETTER YO 118A6; C; 118C6; # WARANG CITI CAPITAL LETTER II 118A7; C; 118C7; # WARANG CITI CAPITAL LETTER UU 118A8; C; 118C8; # WARANG CITI CAPITAL LETTER E 118A9; C; 118C9; # WARANG CITI CAPITAL LETTER O 118AA; C; 118CA; # WARANG CITI CAPITAL LETTER ANG 118AB; C; 118CB; # WARANG CITI CAPITAL LETTER GA 118AC; C; 118CC; # WARANG CITI CAPITAL LETTER KO 118AD; C; 118CD; # WARANG CITI CAPITAL LETTER ENY 118AE; C; 118CE; # WARANG CITI CAPITAL LETTER YUJ 118AF; C; 118CF; # WARANG CITI CAPITAL LETTER UC 118B0; C; 118D0; # WARANG CITI CAPITAL LETTER ENN 118B1; C; 118D1; # WARANG CITI CAPITAL LETTER ODD 118B2; C; 118D2; # WARANG CITI CAPITAL LETTER TTE 118B3; C; 118D3; # WARANG CITI CAPITAL LETTER NUNG 118B4; C; 118D4; # WARANG CITI CAPITAL LETTER DA 118B5; C; 118D5; # WARANG CITI CAPITAL LETTER AT 118B6; C; 118D6; # WARANG CITI CAPITAL LETTER AM 118B7; C; 118D7; # WARANG CITI CAPITAL LETTER BU 118B8; C; 118D8; # WARANG CITI CAPITAL LETTER PU 118B9; C; 118D9; # WARANG CITI CAPITAL LETTER HIYO 118BA; C; 118DA; # WARANG CITI CAPITAL LETTER HOLO 118BB; C; 118DB; # WARANG CITI CAPITAL LETTER HORR 118BC; C; 118DC; # WARANG CITI CAPITAL LETTER HAR 118BD; C; 118DD; # WARANG CITI CAPITAL LETTER SSUU 118BE; C; 118DE; # WARANG CITI CAPITAL LETTER SII 118BF; C; 118DF; # WARANG CITI CAPITAL LETTER VIYO 16E40; C; 16E60; # MEDEFAIDRIN CAPITAL LETTER M 16E41; C; 16E61; # MEDEFAIDRIN CAPITAL LETTER S 16E42; C; 16E62; # MEDEFAIDRIN CAPITAL LETTER V 16E43; C; 16E63; # MEDEFAIDRIN CAPITAL LETTER W 16E44; C; 16E64; # MEDEFAIDRIN CAPITAL LETTER ATIU 16E45; C; 16E65; # MEDEFAIDRIN CAPITAL LETTER Z 16E46; C; 16E66; # MEDEFAIDRIN CAPITAL LETTER KP 16E47; C; 16E67; # MEDEFAIDRIN CAPITAL LETTER P 16E48; C; 16E68; # MEDEFAIDRIN CAPITAL LETTER T 16E49; C; 16E69; # MEDEFAIDRIN CAPITAL LETTER G 16E4A; C; 16E6A; # MEDEFAIDRIN CAPITAL LETTER F 16E4B; C; 16E6B; # MEDEFAIDRIN CAPITAL LETTER I 16E4C; C; 16E6C; # MEDEFAIDRIN CAPITAL LETTER K 16E4D; C; 16E6D; # MEDEFAIDRIN CAPITAL LETTER A 16E4E; C; 16E6E; # MEDEFAIDRIN CAPITAL LETTER J 16E4F; C; 16E6F; # MEDEFAIDRIN CAPITAL LETTER E 16E50; C; 16E70; # MEDEFAIDRIN CAPITAL LETTER B 16E51; C; 16E71; # MEDEFAIDRIN CAPITAL LETTER C 16E52; C; 16E72; # MEDEFAIDRIN CAPITAL LETTER U 16E53; C; 16E73; # MEDEFAIDRIN CAPITAL LETTER YU 16E54; C; 16E74; # MEDEFAIDRIN CAPITAL LETTER L 16E55; C; 16E75; # MEDEFAIDRIN CAPITAL LETTER Q 16E56; C; 16E76; # MEDEFAIDRIN CAPITAL LETTER HP 16E57; C; 16E77; # MEDEFAIDRIN CAPITAL LETTER NY 16E58; C; 16E78; # MEDEFAIDRIN CAPITAL LETTER X 16E59; C; 16E79; # MEDEFAIDRIN CAPITAL LETTER D 16E5A; C; 16E7A; # MEDEFAIDRIN CAPITAL LETTER OE 16E5B; C; 16E7B; # MEDEFAIDRIN CAPITAL LETTER N 16E5C; C; 16E7C; # MEDEFAIDRIN CAPITAL LETTER R 16E5D; C; 16E7D; # MEDEFAIDRIN CAPITAL LETTER O 16E5E; C; 16E7E; # MEDEFAIDRIN CAPITAL LETTER AI 16E5F; C; 16E7F; # MEDEFAIDRIN CAPITAL LETTER Y 1E900; C; 1E922; # ADLAM CAPITAL LETTER ALIF 1E901; C; 1E923; # ADLAM CAPITAL LETTER DAALI 1E902; C; 1E924; # ADLAM CAPITAL LETTER LAAM 1E903; C; 1E925; # ADLAM CAPITAL LETTER MIIM 1E904; C; 1E926; # ADLAM CAPITAL LETTER BA 1E905; C; 1E927; # ADLAM CAPITAL LETTER SINNYIIYHE 1E906; C; 1E928; # ADLAM CAPITAL LETTER PE 1E907; C; 1E929; # ADLAM CAPITAL LETTER BHE 1E908; C; 1E92A; # ADLAM CAPITAL LETTER RA 1E909; C; 1E92B; # ADLAM CAPITAL LETTER E 1E90A; C; 1E92C; # ADLAM CAPITAL LETTER FA 1E90B; C; 1E92D; # ADLAM CAPITAL LETTER I 1E90C; C; 1E92E; # ADLAM CAPITAL LETTER O 1E90D; C; 1E92F; # ADLAM CAPITAL LETTER DHA 1E90E; C; 1E930; # ADLAM CAPITAL LETTER YHE 1E90F; C; 1E931; # ADLAM CAPITAL LETTER WAW 1E910; C; 1E932; # ADLAM CAPITAL LETTER NUN 1E911; C; 1E933; # ADLAM CAPITAL LETTER KAF 1E912; C; 1E934; # ADLAM CAPITAL LETTER YA 1E913; C; 1E935; # ADLAM CAPITAL LETTER U 1E914; C; 1E936; # ADLAM CAPITAL LETTER JIIM 1E915; C; 1E937; # ADLAM CAPITAL LETTER CHI 1E916; C; 1E938; # ADLAM CAPITAL LETTER HA 1E917; C; 1E939; # ADLAM CAPITAL LETTER QAAF 1E918; C; 1E93A; # ADLAM CAPITAL LETTER GA 1E919; C; 1E93B; # ADLAM CAPITAL LETTER NYA 1E91A; C; 1E93C; # ADLAM CAPITAL LETTER TU 1E91B; C; 1E93D; # ADLAM CAPITAL LETTER NHA 1E91C; C; 1E93E; # ADLAM CAPITAL LETTER VA 1E91D; C; 1E93F; # ADLAM CAPITAL LETTER KHA 1E91E; C; 1E940; # ADLAM CAPITAL LETTER GBE 1E91F; C; 1E941; # ADLAM CAPITAL LETTER ZAL 1E920; C; 1E942; # ADLAM CAPITAL LETTER KPO 1E921; C; 1E943; # ADLAM CAPITAL LETTER SHA # # EOF fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-case/Makefile.am000066400000000000000000000027411503113465200247330ustar00rootroot00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2003 Keith Packard # Copyright © 2013 Google, Inc. # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Google Author(s): Behdad Esfahbod TAG=case DEPS = $(srcdir)/CaseFolding.txt ARGS = $(srcdir)/CaseFolding.txt DIST = $(srcdir)/CaseFolding.txt update: curl -s -o $(srcdir)/CaseFolding.txt http://www.unicode.org/Public/UNIDATA/CaseFolding.txt include $(top_srcdir)/Tools.mk -include $(top_srcdir)/git.mk fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-case/fc-case.py000077500000000000000000000172541503113465200245620ustar00rootroot00000000000000#!/usr/bin/env python3 # # fontconfig/fc-case/fc-case.py # # Copyright © 2004 Keith Packard # Copyright © 2019 Tim-Philipp Müller # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. from enum import Enum import argparse import string import sys class CaseFoldClass(Enum): COMMON = 1 FULL = 2 SIMPLE = 3 TURKIC = 4 class CaseFoldMethod(Enum): RANGE = 0 EVEN_ODD = 1 FULL = 2 caseFoldClassMap = { 'C': CaseFoldClass.COMMON, 'F': CaseFoldClass.FULL, 'S': CaseFoldClass.SIMPLE, 'T': CaseFoldClass.TURKIC } folds = [] def ucs4_to_utf8(ucs4): utf8_rep = [] if ucs4 < 0x80: utf8_rep.append(ucs4) bits = -6 elif ucs4 < 0x800: utf8_rep.append(((ucs4 >> 6) & 0x1F) | 0xC0) bits = 0 elif ucs4 < 0x10000: utf8_rep.append(((ucs4 >> 12) & 0x0F) | 0xE0) bits = 6 elif ucs4 < 0x200000: utf8_rep.append(((ucs4 >> 18) & 0x07) | 0xF0) bits = 12 elif ucs4 < 0x4000000: utf8_rep.append(((ucs4 >> 24) & 0x03) | 0xF8) bits = 18 elif ucs4 < 0x80000000: utf8_rep.append(((ucs4 >> 30) & 0x01) | 0xFC) bits = 24 else: return [] while bits >= 0: utf8_rep.append(((ucs4 >> bits) & 0x3F) | 0x80) bits -= 6 return utf8_rep def utf8_size(ucs4): return len(ucs4_to_utf8(ucs4)) case_fold_method_name_map = { CaseFoldMethod.RANGE: 'FC_CASE_FOLD_RANGE,', CaseFoldMethod.EVEN_ODD: 'FC_CASE_FOLD_EVEN_ODD,', CaseFoldMethod.FULL: 'FC_CASE_FOLD_FULL,', } if __name__=='__main__': parser = argparse.ArgumentParser() parser.add_argument('case_folding_file') parser.add_argument('--template', dest='template_file', default=None) parser.add_argument('--output', dest='output_file', default=None) args = parser.parse_args() minFoldChar = None maxFoldChar = None fold = None foldChars = [] maxFoldChars = 0 maxExpand = 0 # Read the standard Unicode CaseFolding.txt file with open(args.case_folding_file, 'r', encoding='utf-8') as casefile: for cnt, line in enumerate(casefile): if not line or not line[0] in string.hexdigits: continue # print('Line {}: {}'.format(cnt, line.strip())) tokens = line.split('; ') if len(tokens) < 3: print('Not enough tokens in line {}'.format(cnt), file=sys.stderr) sys.exit(1) # Get upper case value upper = int(tokens.pop(0), 16) # Get class cfclass = caseFoldClassMap[tokens.pop(0)] # Get list of result characters lower = list(map(lambda s: int(s, 16), tokens.pop(0).split())) # print('\t----> {:04X} {} {}'.format(upper, cfclass, lower)) if not minFoldChar: minFoldChar = upper maxFoldChar = upper if cfclass in [CaseFoldClass.COMMON, CaseFoldClass.FULL]: if len(lower) == 1: # foldExtends if fold and fold['method'] == CaseFoldMethod.RANGE: foldExtends = (lower[0] - upper) == fold['offset'] and upper == fold['upper'] + fold['count'] elif fold and fold['method'] == CaseFoldMethod.EVEN_ODD: foldExtends = (lower[0] - upper) == 1 and upper == (fold['upper'] + fold['count'] + 1) else: foldExtends = False if foldExtends: # This modifies the last fold item in the array too fold['count'] = upper - fold['upper'] + 1 else: fold = {} fold['upper'] = upper fold['offset'] = lower[0] - upper if fold['offset'] == 1: fold['method'] = CaseFoldMethod.EVEN_ODD else: fold['method'] = CaseFoldMethod.RANGE fold['count'] = 1 folds.append(fold) expand = utf8_size(lower[0]) - utf8_size(upper) else: fold = {} fold['upper'] = upper fold['method'] = CaseFoldMethod.FULL fold['offset'] = len(foldChars) # add chars for c in lower: utf8_rep = ucs4_to_utf8(c) # print('{} -> {}'.format(c,utf8_rep)) for utf8_char in utf8_rep: foldChars.append(utf8_char) fold['count'] = len(foldChars) - fold['offset'] folds.append(fold) if fold['count'] > maxFoldChars: maxFoldChars = fold['count'] expand = fold['count'] - utf8_size(upper) if expand > maxExpand: maxExpand = expand # Open output file if args.output_file: sys.stdout = open(args.output_file, 'w', encoding='utf-8') print('/*') print(' * This file was generated against CaseFolding.txt from' ' Unicode.org.') print(' * All the data in array is a part of them and licensed' ' under a terms of use:') print(' * https://www.unicode.org/terms_of_use.html') print(' */') print('') # Dump these tables print('#define FC_NUM_CASE_FOLD\t{}'.format(len(folds))) print('#define FC_NUM_CASE_FOLD_CHARS\t{}'.format(len(foldChars))) print('#define FC_MAX_CASE_FOLD_CHARS\t{}'.format(maxFoldChars)) print('#define FC_MAX_CASE_FOLD_EXPAND\t{}'.format(maxExpand)) print('#define FC_MIN_FOLD_CHAR\t0x{:08x}'.format(minFoldChar)) print('#define FC_MAX_FOLD_CHAR\t0x{:08x}'.format(maxFoldChar)) print('') # Dump out ranges print('static const FcCaseFold fcCaseFold[FC_NUM_CASE_FOLD] = {') for f in folds: short_offset = f['offset'] if short_offset < -32367: short_offset += 65536 if short_offset > 32368: short_offset -= 65536 print(f' {{ 0x{f["upper"]:08x}, ' f'{case_fold_method_name_map[f["method"]]:22s} ' f'0x{f["count"]:04x}, {short_offset:6d} }},') print('};\n') # Dump out "other" values print('static const FcChar8\tfcCaseFoldChars[FC_NUM_CASE_FOLD_CHARS] = {') for n, c in enumerate(foldChars): if n == len(foldChars) - 1: end = '' elif n % 16 == 15: end = ',\n' else: end = ',' print('0x{:02x}'.format(c), end=end) print('\n};') sys.stdout.flush() fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-case/fccase.tmpl.h000066400000000000000000000022611503113465200252440ustar00rootroot00000000000000/* * fontconfig/fc-case/fccase.tmpl.h * * Copyright © 2003 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ @@@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-case/meson.build000066400000000000000000000003211503113465200250310ustar00rootroot00000000000000fccase_h = custom_target('fccase.h', output: 'fccase.h', input: ['CaseFolding.txt', 'fccase.tmpl.h'], command: [find_program('fc-case.py'), '@INPUT0@', '--template', '@INPUT1@', '--output', '@OUTPUT@']) fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-cat/000077500000000000000000000000001503113465200225275ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-cat/Makefile.am000066400000000000000000000032721503113465200245670ustar00rootroot00000000000000# # fontconfig/fc-cat/Makefile.am # # Copyright © 2003 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. DOC2MAN = docbook2man FC_CAT_SRC=${top_srcdir}/fc-cat SGML = ${FC_CAT_SRC}/fc-cat.sgml AM_CPPFLAGS=-I${top_srcdir} $(WARN_CFLAGS) bin_PROGRAMS=fc-cat BUILT_MANS=fc-cat.1 if ENABLE_DOCS man_MANS=${BUILT_MANS} endif EXTRA_DIST=fc-cat.sgml ${BUILT_MANS} CLEANFILES = fc_cat_LDADD = ${top_builddir}/src/libfontconfig.la if USEDOCBOOK ${man_MANS}: ${SGML} $(AM_V_GEN) $(RM) $@; \ $(DOC2MAN) ${SGML}; \ $(RM) manpage.* all-local: $(man_MANS) CLEANFILES += ${man_MANS} else all-local: endif -include $(top_srcdir)/git.mk fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-cat/fc-cat.c000066400000000000000000000223541503113465200240360ustar00rootroot00000000000000/* * fontconfig/fc-cat/fc-cat.c * * Copyright © 2002 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_CONFIG_H # include #else # ifdef linux # define HAVE_GETOPT_LONG 1 # endif # define HAVE_GETOPT 1 #endif #include "../src/fcarch.h" #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include #include #ifdef ENABLE_NLS # include # define _(x) (dgettext (GETTEXT_PACKAGE, x)) #else # define dgettext(d, s) (s) # define _(x) (x) #endif #ifndef HAVE_GETOPT # define HAVE_GETOPT 0 #endif #ifndef HAVE_GETOPT_LONG # define HAVE_GETOPT_LONG 0 #endif #if HAVE_GETOPT_LONG # undef _GNU_SOURCE # define _GNU_SOURCE # include const struct option longopts[] = { { "version", 0, 0, 'V' }, { "verbose", 0, 0, 'v' }, { "recurse", 0, 0, 'r' }, { "help", 0, 0, 'h' }, { NULL, 0, 0, 0 }, }; #else # if HAVE_GETOPT extern char *optarg; extern int optind, opterr, optopt; # endif #endif /* * POSIX has broken stdio so that putc must do thread-safe locking, * this is a serious performance problem for applications doing large * amounts of IO with putc (as is done here). If available, use * the putc_unlocked variant instead. */ #if defined(putc_unlocked) || defined(_IO_putc_unlocked) # define PUTC(c, f) putc_unlocked (c, f) #else # define PUTC(c, f) putc (c, f) #endif static FcBool write_chars (FILE *f, const FcChar8 *chars) { FcChar8 c; while ((c = *chars++)) { switch (c) { case '"': case '\\': if (PUTC ('\\', f) == EOF) return FcFalse; /* fall through */ default: if (PUTC (c, f) == EOF) return FcFalse; } } return FcTrue; } static FcBool write_ulong (FILE *f, unsigned long t) { int pow; unsigned long temp, digit; temp = t; pow = 1; while (temp >= 10) { temp /= 10; pow *= 10; } temp = t; while (pow) { digit = temp / pow; if (PUTC ((char)digit + '0', f) == EOF) return FcFalse; temp = temp - pow * digit; pow = pow / 10; } return FcTrue; } static FcBool write_int (FILE *f, int i) { return write_ulong (f, (unsigned long)i); } static FcBool write_string (FILE *f, const FcChar8 *string) { if (PUTC ('"', f) == EOF) return FcFalse; if (!write_chars (f, string)) return FcFalse; if (PUTC ('"', f) == EOF) return FcFalse; return FcTrue; } static void usage (char *program, int error) { FILE *file = error ? stderr : stdout; #if HAVE_GETOPT_LONG fprintf (file, _("usage: %s [-rv] [--recurse] [--verbose] [*-%s" FC_CACHE_SUFFIX "|directory]...\n"), program, FC_ARCHITECTURE); fprintf (file, " %s [-Vh] [--version] [--help]\n", program); #else fprintf (file, _("usage: %s [-rvVh] [*-%s" FC_CACHE_SUFFIX "|directory]...\n"), program, FC_ARCHITECTURE); #endif fprintf (file, _("Reads font information cache from:\n")); fprintf (file, _(" 1) specified fontconfig cache file\n")); fprintf (file, _(" 2) related to a particular font directory\n")); fprintf (file, "\n"); #if HAVE_GETOPT_LONG fprintf (file, _(" -r, --recurse recurse into subdirectories\n")); fprintf (file, _(" -v, --verbose be verbose\n")); fprintf (file, _(" -V, --version display font config version and exit\n")); fprintf (file, _(" -h, --help display this help and exit\n")); #else fprintf (file, _(" -r (recurse) recurse into subdirectories\n")); fprintf (file, _(" -v (verbose) be verbose\n")); fprintf (file, _(" -V (version) display font config version and exit\n")); fprintf (file, _(" -h (help) display this help and exit\n")); #endif exit (error); } /* * return the path from the directory containing 'cache' to 'file' */ static const FcChar8 * file_base_name (const FcChar8 *cache, const FcChar8 *file) { int cache_len = strlen ((char *)cache); if (!strncmp ((char *)cache, (char *)file, cache_len) && file[cache_len] == '/') return file + cache_len + 1; return file; } #define FC_FONT_FILE_DIR ((FcChar8 *)".dir") static FcBool cache_print_set (FcFontSet *set, FcStrSet *dirs, const FcChar8 *base_name, FcBool verbose) { FcChar8 *dir; const FcChar8 *base; int n; int ndir = 0; FcStrList *list; list = FcStrListCreate (dirs); if (!list) goto bail2; while ((dir = FcStrListNext (list))) { base = file_base_name (base_name, dir); if (!write_string (stdout, base)) goto bail3; if (PUTC (' ', stdout) == EOF) goto bail3; if (!write_int (stdout, 0)) goto bail3; if (PUTC (' ', stdout) == EOF) goto bail3; if (!write_string (stdout, FC_FONT_FILE_DIR)) goto bail3; if (PUTC ('\n', stdout) == EOF) goto bail3; ndir++; } for (n = 0; n < set->nfont; n++) { FcPattern *font = set->fonts[n]; FcChar8 *s; s = FcPatternFormat (font, (const FcChar8 *)"%{=fccat}\n"); if (s) { printf ("%s", s); FcStrFree (s); } } if (verbose && !set->nfont && !ndir) printf ("\n"); FcStrListDone (list); return FcTrue; bail3: FcStrListDone (list); bail2: return FcFalse; } int main (int argc, char **argv) { int i; int ret = 0; FcFontSet *fs; FcStrSet *dirs; FcStrSet *args = NULL; FcStrList *arglist; FcCache *cache; FcConfig *config; FcChar8 *arg; int verbose = 0; int recurse = 0; FcBool first = FcTrue; #if HAVE_GETOPT_LONG || HAVE_GETOPT int c; setlocale (LC_ALL, ""); # if HAVE_GETOPT_LONG while ((c = getopt_long (argc, argv, "Vvrh", longopts, NULL)) != -1) # else while ((c = getopt (argc, argv, "Vvrh")) != -1) # endif { switch (c) { case 'V': fprintf (stderr, "fontconfig version %d.%d.%d\n", FC_MAJOR, FC_MINOR, FC_REVISION); exit (0); case 'v': verbose++; break; case 'r': recurse++; break; case 'h': usage (argv[0], 0); default: usage (argv[0], 1); } } i = optind; #else i = 1; #endif config = FcInitLoadConfig(); if (!config) { fprintf (stderr, _("%s: Can't initialize font config library\n"), argv[0]); return 1; } FcConfigSetCurrent (config); FcConfigDestroy (config); args = FcStrSetCreate(); if (!args) { fprintf (stderr, _("%s: malloc failure\n"), argv[0]); return 1; } if (i < argc) { for (; i < argc; i++) { if (!FcStrSetAddFilename (args, (const FcChar8 *)argv[i])) { fprintf (stderr, _("%s: malloc failure\n"), argv[0]); return 1; } } } else { recurse++; arglist = FcConfigGetFontDirs (config); while ((arg = FcStrListNext (arglist))) if (!FcStrSetAdd (args, arg)) { fprintf (stderr, _("%s: malloc failure\n"), argv[0]); return 1; } FcStrListDone (arglist); } arglist = FcStrListCreate (args); if (!arglist) { fprintf (stderr, _("%s: malloc failure\n"), argv[0]); return 1; } FcStrSetDestroy (args); while ((arg = FcStrListNext (arglist))) { int j; FcChar8 *cache_file = NULL; struct stat file_stat; /* reset errno */ errno = 0; if (FcFileIsDir (arg)) cache = FcDirCacheLoad (arg, config, &cache_file); else cache = FcDirCacheLoadFile (arg, &file_stat); if (!cache) { if (errno != 0) perror ((char *)arg); else fprintf (stderr, "%s: Unable to load the cache: %s\n", argv[0], arg); ret++; continue; } dirs = FcStrSetCreate(); fs = FcCacheCopySet (cache); for (j = 0; j < FcCacheNumSubdir (cache); j++) { FcStrSetAdd (dirs, FcCacheSubdir (cache, j)); if (recurse) FcStrSetAdd (args, FcCacheSubdir (cache, j)); } if (verbose) { if (!first) printf ("\n"); printf (_("Directory: %s\nCache: %s\n--------\n"), FcCacheDir (cache), cache_file ? cache_file : arg); first = FcFalse; } cache_print_set (fs, dirs, FcCacheDir (cache), verbose); FcStrSetDestroy (dirs); FcFontSetDestroy (fs); FcDirCacheUnload (cache); if (cache_file) FcStrFree (cache_file); } FcStrListDone (arglist); FcFini(); return 0; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-cat/fc-cat.sgml000066400000000000000000000133621503113465200245550ustar00rootroot00000000000000 Patrick"> Lam"> Aug 13, 2008"> 1"> plam@mit.edu"> fc-cat"> Debian"> GNU"> GPL"> ]>
&dhemail;
&dhfirstname; &dhsurname; 2005 &dhusername; &dhdate;
&dhucpackage; &dhsection; &dhpackage; read font information cache files &dhpackage; DESCRIPTION &dhpackage; reads the font information from cache files or related to font directories and emits it in ASCII form. OPTIONS This program follows the usual &gnu; command line syntax, with long options starting with two dashes (`-'). A summary of options is included below. Recurse into subdirectories. Be verbose. Show summary of options. Show version of the program and exit. SEE ALSO fc-cache(1) fc-list(1) fc-match(1) fc-pattern(1) fc-query(1) fc-scan(1) The fontconfig user's guide AUTHOR This manual page was written by &dhusername; &dhemail;.
fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-cat/meson.build000066400000000000000000000004311503113465200246670ustar00rootroot00000000000000fccat = executable('fc-cat', ['fc-cat.c', fcstdint_h, alias_headers, ft_alias_headers], include_directories: [incbase, incsrc], dependencies: [libintl_dep], link_with: [libfontconfig], c_args: c_args, install: true, install_tag: 'tools') tools_man_pages += ['fc-cat'] fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-conflist/000077500000000000000000000000001503113465200236015ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-conflist/Makefile.am000066400000000000000000000034061503113465200256400ustar00rootroot00000000000000# # fontconfig/fc-conflist/Makefile.am # # Copyright © 2003 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. bin_PROGRAMS=fc-conflist DOC2MAN = docbook2man FC_VALIDATE_SRC=${top_srcdir}/fc-conflist SGML = ${FC_VALIDATE_SRC}/fc-conflist.sgml AM_CPPFLAGS=-I${top_srcdir} $(FREETYPE_CFLAGS) $(WARN_CFLAGS) BUILT_MANS=fc-conflist.1 if ENABLE_DOCS man_MANS=${BUILT_MANS} endif EXTRA_DIST=fc-conflist.sgml $(BUILT_MANS) CLEANFILES = fc_conflist_LDADD = ${top_builddir}/src/libfontconfig.la $(FREETYPE_LIBS) if USEDOCBOOK ${man_MANS}: ${SGML} $(AM_V_GEN) $(RM) $@; \ $(DOC2MAN) ${SGML}; \ $(RM) manpage.* all-local: $(man_MANS) CLEANFILES += $(man_MANS) else all-local: endif -include $(top_srcdir)/git.mk fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-conflist/fc-conflist.c000066400000000000000000000075371503113465200261700ustar00rootroot00000000000000/* * fontconfig/fc-conflist/fc-conflist.c * * Copyright © 2003 Keith Packard * Copyright © 2014 Red Hat, Inc. * Red Hat Author(s): Akira TAGOH * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_CONFIG_H # include #else # ifdef linux # define HAVE_GETOPT_LONG 1 # endif # define HAVE_GETOPT 1 #endif #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include #ifdef ENABLE_NLS # include # define _(x) (dgettext (GETTEXT_PACKAGE, x)) #else # define dgettext(d, s) (s) # define _(x) (x) #endif #ifndef HAVE_GETOPT # define HAVE_GETOPT 0 #endif #ifndef HAVE_GETOPT_LONG # define HAVE_GETOPT_LONG 0 #endif #if HAVE_GETOPT_LONG # undef _GNU_SOURCE # define _GNU_SOURCE # include static const struct option longopts[] = { { "version", 0, 0, 'V' }, { "help", 0, 0, 'h' }, { NULL, 0, 0, 0 }, }; #else # if HAVE_GETOPT extern char *optarg; extern int optind, opterr, optopt; # endif #endif static void usage (char *program, int error) { FILE *file = error ? stderr : stdout; #if HAVE_GETOPT_LONG fprintf (file, _("usage: %s [-Vh] [--version] [--help]\n"), program); #else fprintf (file, _("usage: %s [-Vh]\n"), program); #endif fprintf (file, _("Show the ruleset files information on the system\n")); fprintf (file, "\n"); #if HAVE_GETOPT_LONG fprintf (file, _(" -V, --version display font config version and exit\n")); fprintf (file, _(" -h, --help display this help and exit\n")); #else fprintf (file, _(" -V (version) display font config version and exit\n")); fprintf (file, _(" -h (help) display this help and exit\n")); #endif exit (error); } int main (int argc, char **argv) { FcConfig *config; FcConfigFileInfoIter iter; #if HAVE_GETOPT_LONG || HAVE_GETOPT int c; setlocale (LC_ALL, ""); # if HAVE_GETOPT_LONG while ((c = getopt_long (argc, argv, "Vh", longopts, NULL)) != -1) # else while ((c = getopt (argc, argv, "Vh")) != -1) # endif { switch (c) { case 'V': fprintf (stderr, "fontconfig version %d.%d.%d\n", FC_MAJOR, FC_MINOR, FC_REVISION); exit (0); case 'h': usage (argv[0], 0); default: usage (argv[0], 1); } } #endif config = FcConfigGetCurrent(); FcConfigFileInfoIterInit (config, &iter); do { FcChar8 *name, *desc; FcBool enabled; if (FcConfigFileInfoIterGet (config, &iter, &name, &desc, &enabled)) { printf ("%c %s: %s\n", enabled ? '+' : '-', name, desc); FcStrFree (name); FcStrFree (desc); } } while (FcConfigFileInfoIterNext (config, &iter)); FcFini(); return 0; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-conflist/fc-conflist.sgml000066400000000000000000000123431503113465200266770ustar00rootroot00000000000000 Akira"> TAGOH"> Dec 21, 2021"> 1"> akira@tagoh.org"> fc-conflist"> GNU"> GPL"> ]>
&dhemail;
&dhfirstname; &dhsurname; 2014 &dhusername; &dhdate;
&dhucpackage; &dhsection; &dhpackage; list the configuration files processed by Fontconfig &dhpackage; DESCRIPTION &dhpackage; prints an annotated list of all the configuration files processed by Fontconfig. The output is a `-' or `+' depending on whether the file is ignored or processed, a space, the file's path, a colon and space, and the description from the file or `No description' if none is present. The order of files looks like how fontconfig actually processes them except one contains <include> element. In that case, it will be shown after processing all the sub directories where is targeted by <include>. OPTIONS This program follows the usual &gnu; command line syntax, with long options starting with two dashes (`-'). A summary of options is included below. Show version of the program and exit. Show summary of options. RETURN CODES fc-conflist returns error code 0 for successful parsing, or 1 if any errors occurred or if at least one font face could not be opened. AUTHOR This manual page was updated by &dhusername; &dhemail;.
fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-conflist/meson.build000066400000000000000000000004551503113465200257470ustar00rootroot00000000000000fcconflist = executable('fc-conflist', ['fc-conflist.c', fcstdint_h, alias_headers, ft_alias_headers], include_directories: [incbase, incsrc], dependencies: [libintl_dep], link_with: [libfontconfig], c_args: c_args, install: true, install_tag: 'tools') tools_man_pages += ['fc-conflist'] fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-fontations/000077500000000000000000000000001503113465200241445ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-fontations/attributes.rs000066400000000000000000000607321503113465200267100ustar00rootroot00000000000000/* * fontconfig/fc-fontations/attributes.rs * * Copyright 2025 Google LLC. * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ use fontconfig_bindings::{ FcWeightFromOpenTypeDouble, FC_DUAL, FC_MONO, FC_SLANT_ITALIC, FC_SLANT_OBLIQUE, FC_SLANT_ROMAN, FC_WEIGHT_BLACK, FC_WEIGHT_BOLD, FC_WEIGHT_BOOK, FC_WEIGHT_DEMIBOLD, FC_WEIGHT_DEMILIGHT, FC_WEIGHT_EXTRABLACK, FC_WEIGHT_EXTRABOLD, FC_WEIGHT_EXTRALIGHT, FC_WEIGHT_HEAVY, FC_WEIGHT_LIGHT, FC_WEIGHT_MEDIUM, FC_WEIGHT_NORMAL, FC_WEIGHT_REGULAR, FC_WEIGHT_SEMIBOLD, FC_WEIGHT_SEMILIGHT, FC_WEIGHT_THIN, FC_WEIGHT_ULTRABLACK, FC_WEIGHT_ULTRABOLD, FC_WEIGHT_ULTRALIGHT, FC_WIDTH_CONDENSED, FC_WIDTH_EXPANDED, FC_WIDTH_EXTRACONDENSED, FC_WIDTH_EXTRAEXPANDED, FC_WIDTH_NORMAL, FC_WIDTH_SEMICONDENSED, FC_WIDTH_SEMIEXPANDED, FC_WIDTH_ULTRACONDENSED, FC_WIDTH_ULTRAEXPANDED, }; use fcint_bindings::{ FC_DECORATIVE_OBJECT, FC_INDEX_OBJECT, FC_NAMED_INSTANCE_OBJECT, FC_SIZE_OBJECT, FC_SLANT_OBJECT, FC_SPACING_OBJECT, FC_STYLE_OBJECT, FC_VARIABLE_OBJECT, FC_WEIGHT_OBJECT, FC_WIDTH_OBJECT, }; use crate::{ pattern_bindings::{ fc_wrapper::FcRangeWrapper, FcPatternBuilder, PatternElement, PatternValue, }, InstanceMode, }; use read_fonts::TableProvider; use skrifa::{ attribute::{Attributes, Stretch, Style, Weight}, instance::Location, metrics::GlyphMetrics, prelude::{LocationRef, Size}, AxisCollection, FontRef, MetadataProvider, NamedInstance, Tag, }; use std::ffi::CString; fn fc_weight(skrifa_weight: Weight) -> f64 { (match skrifa_weight { Weight::THIN => FC_WEIGHT_THIN, Weight::EXTRA_LIGHT => FC_WEIGHT_EXTRALIGHT, Weight::LIGHT => FC_WEIGHT_LIGHT, Weight::NORMAL => FC_WEIGHT_NORMAL, Weight::MEDIUM => FC_WEIGHT_MEDIUM, Weight::SEMI_BOLD => FC_WEIGHT_SEMIBOLD, Weight::BOLD => FC_WEIGHT_BOLD, Weight::EXTRA_BOLD => FC_WEIGHT_EXTRABOLD, Weight::BLACK => FC_WEIGHT_BLACK, // See fcfreetype.c: When weight is not available, set to medium. // This would mean a font did not have a parseable OS/2 table or // a weight value could not be retrieved from it. _ => FC_WEIGHT_MEDIUM, }) as f64 } fn fc_slant(skrifa_style: Style) -> u32 { match skrifa_style { Style::Italic => FC_SLANT_ITALIC, Style::Oblique(_) => FC_SLANT_OBLIQUE, _ => FC_SLANT_ROMAN, } } fn fc_width(skrifa_stretch: Stretch) -> f64 { (match skrifa_stretch { Stretch::ULTRA_CONDENSED => FC_WIDTH_ULTRACONDENSED, Stretch::EXTRA_CONDENSED => FC_WIDTH_EXTRACONDENSED, Stretch::CONDENSED => FC_WIDTH_CONDENSED, Stretch::SEMI_CONDENSED => FC_WIDTH_SEMICONDENSED, Stretch::NORMAL => FC_WIDTH_NORMAL, Stretch::SEMI_EXPANDED => FC_WIDTH_SEMIEXPANDED, Stretch::EXPANDED => FC_WIDTH_EXPANDED, Stretch::EXTRA_EXPANDED => FC_WIDTH_EXTRAEXPANDED, Stretch::ULTRA_EXPANDED => FC_WIDTH_ULTRAEXPANDED, _ => FC_WIDTH_NORMAL, } as f64) } fn fc_weight_from_os2(font_ref: &FontRef) -> Option { let us_weight = font_ref.os2().ok()?.us_weight_class() as f64; unsafe { let result = FcWeightFromOpenTypeDouble(us_weight); if result == -1.0 { None } else { Some(result) } } } fn fc_width_from_os2(font_ref: &FontRef) -> Option { let us_width = font_ref.os2().ok()?.us_width_class(); let converted = match us_width { 1 => FC_WIDTH_ULTRACONDENSED, 2 => FC_WIDTH_EXTRACONDENSED, 3 => FC_WIDTH_CONDENSED, 4 => FC_WIDTH_SEMICONDENSED, 5 => FC_WIDTH_NORMAL, 6 => FC_WIDTH_SEMIEXPANDED, 7 => FC_WIDTH_EXPANDED, 8 => FC_WIDTH_EXTRAEXPANDED, 9 => FC_WIDTH_ULTRAEXPANDED, _ => FC_WIDTH_NORMAL, }; Some(converted as f64) } fn fc_size_from_os2(font_ref: &FontRef) -> Option<(f64, f64)> { font_ref.os2().ok().and_then(|os2| { Some(( os2.us_lower_optical_point_size()? as f64 / 20.0, os2.us_upper_optical_point_size()? as f64 / 20.0, )) }) } struct AttributesToPattern<'a> { weight_from_os2: Option, width_from_os2: Option, attributes: Attributes, axes: AxisCollection<'a>, named_instance: Option>, font_ref: FontRef<'a>, } impl<'a> AttributesToPattern<'a> { fn new(font: &'a FontRef, instance_mode: &InstanceMode) -> Self { let named_instance = match instance_mode { InstanceMode::Named(index) => font.named_instances().get(*index as usize), _ => None, }; Self { weight_from_os2: fc_weight_from_os2(font), width_from_os2: fc_width_from_os2(font), attributes: Attributes::new(font), axes: font.axes(), named_instance, font_ref: font.clone(), } } fn user_coord_for_tag(&self, tag: Tag) -> Option { let mut axis_coords = self .axes .iter() .map(|axis| axis.tag()) .zip(self.named_instance.clone()?.user_coords()); Some(axis_coords.find(|item| item.0 == tag)?.1 as f64) } fn flags_weight(&self) -> PatternElement { PatternElement::new( FC_WEIGHT_OBJECT as i32, fc_weight(self.attributes.weight).into(), ) } fn os2_weight(&self) -> Option { self.weight_from_os2 .map(|weight| PatternElement::new(FC_WEIGHT_OBJECT as i32, weight.into())) } fn flags_width(&self) -> PatternElement { PatternElement::new( FC_WIDTH_OBJECT as i32, fc_width(self.attributes.stretch).into(), ) } fn os2_width(&self) -> Option { self.width_from_os2 .map(|width| PatternElement::new(FC_WIDTH_OBJECT as i32, width.into())) } fn static_slant(&self) -> PatternElement { PatternElement::new( FC_SLANT_OBJECT as i32, (fc_slant(self.attributes.style) as i32).into(), ) } fn instance_weight(&self) -> Option { let named_instance_weight = self.user_coord_for_tag(Tag::new(b"wght"))?; unsafe { Some(PatternElement::new( FC_WEIGHT_OBJECT as i32, FcWeightFromOpenTypeDouble(named_instance_weight).into(), )) } } fn instance_width(&self) -> Option { let named_instance_weight = self.user_coord_for_tag(Tag::new(b"wdth"))?; Some(PatternElement::new( FC_WIDTH_OBJECT as i32, named_instance_weight.into(), )) } fn instance_slant(&self) -> Option { let named_instance_slant = self.user_coord_for_tag(Tag::new(b"slnt"))?; if named_instance_slant < 0.0 { Some(PatternElement::new( FC_SLANT_OBJECT as i32, (FC_SLANT_ITALIC as i32).into(), )) } else { Some(PatternElement::new( FC_SLANT_OBJECT as i32, (FC_SLANT_ROMAN as i32).into(), )) } } fn instance_size(&self) -> Option { let named_instance_size = self.user_coord_for_tag(Tag::new(b"opsz"))?; Some(PatternElement::new( FC_SIZE_OBJECT as i32, named_instance_size.into(), )) } fn default_axis_size(&self) -> Option { self.axes.get_by_tag(Tag::new(b"opsz")).map(|opsz_axis| { PatternElement::new( FC_SIZE_OBJECT as i32, (opsz_axis.default_value() as f64).into(), ) }) } fn os2_size(&self) -> Option { fc_size_from_os2(&self.font_ref).and_then(|(lower, higher)| { if lower != higher { let range = FcRangeWrapper::new(lower, higher)?; Some(PatternElement::new(FC_SIZE_OBJECT as i32, range.into())) } else { Some(PatternElement::new(FC_SIZE_OBJECT as i32, lower.into())) } }) } fn variable_weight(&self) -> Option { let weight_axis = self.axes.get_by_tag(Tag::new(b"wght"))?; unsafe { Some(PatternElement::new( FC_WEIGHT_OBJECT as i32, FcRangeWrapper::new( FcWeightFromOpenTypeDouble(weight_axis.min_value() as f64), FcWeightFromOpenTypeDouble(weight_axis.max_value() as f64), )? .into(), )) } } fn variable_width(&self) -> Option { let width_axis = self.axes.get_by_tag(Tag::new(b"wdth"))?; Some(PatternElement::new( FC_WIDTH_OBJECT as i32, FcRangeWrapper::new(width_axis.min_value() as f64, width_axis.max_value() as f64)? .into(), )) } fn variable_opsz(&self) -> Option { let opsz_axis = self.axes.get_by_tag(Tag::new(b"opsz"))?; Some(PatternElement::new( FC_SIZE_OBJECT as i32, FcRangeWrapper::new(opsz_axis.min_value() as f64, opsz_axis.max_value() as f64)?.into(), )) } // Determine FontConfig spacing property. // In fcfreetype.c FcFreeTypeSpacing a heuristic checks whether the glyphs // for a bitmap font are "approximately equal". // For this purpose, fcfreetype.c selects the strike size closest to 16 px, // then iterates over available glyphs and checks whether the advance width // is within a relative tolerance of 1/33. // We'll do this based on skrifa advances here - if needed, this can be // moved to selecting a particular bitmap strike size and compare pixel // widths. fn spacing_from_advances(advances: impl Iterator) -> Option { let mut encountered_advances = Vec::new(); let approximately_equal = |a: f32, b: f32| (a - b).abs() / a.abs().max(b.abs()) <= 1.0 / 33.0; 'outer: for advance in advances { let mut may_push: Option = None; if encountered_advances.is_empty() { encountered_advances.push(advance); continue; } for encountered in encountered_advances.iter() { if encountered_advances.len() >= 3 { break 'outer; } if approximately_equal(advance, *encountered) { may_push = None; break; } may_push = Some(advance); } if let Some(push) = may_push { encountered_advances.push(push); } } match encountered_advances.len() { 1 => Some(FC_MONO as i32), 2 if approximately_equal( encountered_advances[0].min(encountered_advances[1]) * 2.0, encountered_advances[0].max(encountered_advances[1]), ) => { Some(FC_DUAL as i32) } _ => None, } } fn spacing(&self) -> Option { let mut location = Location::default(); if let Some(instance) = &self.named_instance { location = instance.location().clone(); }; let glyph_metrics = GlyphMetrics::new( &self.font_ref, Size::new(16.0), LocationRef::from(&location), ); let advances = self .font_ref .charmap() .mappings() .filter_map(|(_codepoint, gid)| { glyph_metrics .advance_width(gid) .and_then(|adv| if adv > 0.0 { Some(adv) } else { None }) }); Self::spacing_from_advances(advances) .map(|spacing| PatternElement::new(FC_SPACING_OBJECT as i32, spacing.into())) } } #[derive(Default)] struct AttributesFromStyleString { weight: Option, width: Option, slant: Option, decorative: Option, } fn contains_weight(style_name: &CString) -> Option { const WEIGHT_MAP: [(&str, f64); 23] = [ ("thin", FC_WEIGHT_THIN as f64), ("extralight", FC_WEIGHT_EXTRALIGHT as f64), ("ultralight", FC_WEIGHT_ULTRALIGHT as f64), ("demilight", FC_WEIGHT_DEMILIGHT as f64), ("semilight", FC_WEIGHT_SEMILIGHT as f64), ("light", FC_WEIGHT_LIGHT as f64), ("book", FC_WEIGHT_BOOK as f64), ("regular", FC_WEIGHT_REGULAR as f64), ("normal", FC_WEIGHT_NORMAL as f64), ("medium", FC_WEIGHT_MEDIUM as f64), ("demibold", FC_WEIGHT_DEMIBOLD as f64), ("demi", FC_WEIGHT_DEMIBOLD as f64), ("semibold", FC_WEIGHT_SEMIBOLD as f64), ("extrabold", FC_WEIGHT_EXTRABOLD as f64), ("superbold", FC_WEIGHT_EXTRABOLD as f64), ("ultrabold", FC_WEIGHT_ULTRABOLD as f64), ("bold", FC_WEIGHT_BOLD as f64), ("ultrablack", FC_WEIGHT_ULTRABLACK as f64), ("superblack", FC_WEIGHT_EXTRABLACK as f64), ("extrablack", FC_WEIGHT_EXTRABLACK as f64), ("ultra", FC_WEIGHT_ULTRABOLD as f64), ("black", FC_WEIGHT_BLACK as f64), ("heavy", FC_WEIGHT_HEAVY as f64), ]; for weight_mapping in WEIGHT_MAP { if style_name .to_string_lossy() .to_lowercase() .contains(weight_mapping.0) { return Some(PatternElement::new( FC_WEIGHT_OBJECT as i32, weight_mapping.1.into(), )); } } None } fn contains_slant(style_name: &CString) -> Option { const SLANT_MAP: [(&str, i32); 3] = [ ("italic", FC_SLANT_ITALIC as i32), ("kursiv", FC_SLANT_ITALIC as i32), ("oblique", FC_SLANT_OBLIQUE as i32), ]; for mapping in SLANT_MAP { if style_name .to_string_lossy() .to_lowercase() .contains(mapping.0) { return Some(PatternElement::new( FC_SLANT_OBJECT as i32, mapping.1.into(), )); } } None } fn contains_width(style_name: &CString) -> Option { const WIDTH_MAP: [(&str, f64); 10] = [ ("ultracondensed", FC_WIDTH_ULTRACONDENSED as f64), ("extracondensed", FC_WIDTH_EXTRACONDENSED as f64), ("semicondensed", FC_WIDTH_SEMICONDENSED as f64), ("condensed", FC_WIDTH_CONDENSED as f64), ("normal", FC_WIDTH_NORMAL as f64), ("semiexpanded", FC_WIDTH_SEMIEXPANDED as f64), ("extraexpanded", FC_WIDTH_EXTRAEXPANDED as f64), ("ultraexpanded", FC_WIDTH_ULTRAEXPANDED as f64), ("expanded", FC_WIDTH_EXPANDED as f64), ("extended", FC_WIDTH_EXPANDED as f64), ]; for mapping in WIDTH_MAP { if style_name .to_string_lossy() .to_lowercase() .contains(mapping.0) { return Some(PatternElement::new( FC_WIDTH_OBJECT as i32, mapping.1.into(), )); } } None } fn contains_decorative(style_name: &CString) -> Option { let had_decorative = style_name .to_string_lossy() .to_lowercase() .contains("decorative"); Some(PatternElement::new( FC_DECORATIVE_OBJECT as i32, had_decorative.into(), )) } impl AttributesFromStyleString { fn new(pattern: &FcPatternBuilder) -> Self { let style_string = pattern .into_iter() .find(|element| element.object_id == FC_STYLE_OBJECT as i32) .and_then(|element| match &element.value { PatternValue::String(style) => Some(style), _ => None, }); if let Some(style) = style_string { Self { weight: contains_weight(style), width: contains_width(style), slant: contains_slant(style), decorative: contains_decorative(style), } } else { Self { weight: None, width: None, slant: None, decorative: Some(PatternElement::new( FC_DECORATIVE_OBJECT as i32, false.into(), )), } } } } /// Appends style pattern elements such as weight, width, slant, decorative to the pattern. /// Requires a textual style element to be already added to the pattern, so it's good /// to run this after names have been added. This is because this method performs certain /// string matches on the font name to determine style attributes. pub fn append_style_elements( font: &FontRef, instance_mode: InstanceMode, ttc_index: Option, pattern: &mut FcPatternBuilder, ) { // TODO: fcfreetype.c seems to prefer parsing information from the WWS name table entry, // but falls back to flags if those are not found. So far, I haven't identified test fonts // for which the WWS code path would trigger. let attributes_text = AttributesFromStyleString::new(pattern); let skrifa_attributes = AttributesToPattern::new(font, &instance_mode); if let Some(spacing) = skrifa_attributes.spacing() { pattern.append_element(spacing); } match instance_mode { InstanceMode::Default => { let pattern_weight = skrifa_attributes .os2_weight() .or(attributes_text.weight) .unwrap_or(skrifa_attributes.flags_weight()); pattern.append_element(pattern_weight); let width = skrifa_attributes .os2_width() .or(attributes_text.width) .unwrap_or(skrifa_attributes.flags_width()); pattern.append_element(width); pattern.append_element( attributes_text .slant .unwrap_or(skrifa_attributes.static_slant()), ); if let Some(element) = attributes_text.decorative { pattern.append_element(element) } pattern.append_element(PatternElement::new(FC_VARIABLE_OBJECT as i32, false.into())); pattern.append_element(PatternElement::new( FC_INDEX_OBJECT as i32, ttc_index.unwrap_or_default().into(), )); if let Some(size) = skrifa_attributes .default_axis_size() .or(skrifa_attributes.os2_size()) { pattern.append_element(size); } pattern.append_element(PatternElement::new( FC_NAMED_INSTANCE_OBJECT as i32, false.into(), )); } InstanceMode::Variable => { let weight = skrifa_attributes .variable_weight() .or(skrifa_attributes.os2_weight()) .or(attributes_text.weight) .unwrap_or(skrifa_attributes.flags_weight()); pattern.append_element(weight); let width = skrifa_attributes .variable_width() .or(skrifa_attributes.os2_width()) .or(attributes_text.width) .unwrap_or(skrifa_attributes.flags_width()); pattern.append_element(width); if let Some(element) = attributes_text.decorative { pattern.append_element(element) } if let Some(size) = skrifa_attributes.variable_opsz() { pattern.append_element(size); } pattern.append_element(PatternElement::new(FC_VARIABLE_OBJECT as i32, true.into())); // TODO: Check if this should have a zero ttc index if not part of a collection. pattern.append_element(PatternElement::new( FC_INDEX_OBJECT as i32, ttc_index.unwrap_or_default().into(), )); pattern.append_element(PatternElement::new( FC_NAMED_INSTANCE_OBJECT as i32, false.into(), )); pattern.append_element(skrifa_attributes.static_slant()); } InstanceMode::Named(index) => { let weight = skrifa_attributes .instance_weight() .or(attributes_text.weight) .unwrap_or(skrifa_attributes.flags_weight()); pattern.append_element(weight); let width = skrifa_attributes .instance_width() .or(attributes_text.width) .unwrap_or(skrifa_attributes.flags_width()); pattern.append_element(width); pattern.append_element( skrifa_attributes .instance_slant() .or(attributes_text.slant) .unwrap_or(skrifa_attributes.static_slant()), ); if let Some(element) = attributes_text.decorative { pattern.append_element(element) } pattern.append_element(PatternElement::new(FC_VARIABLE_OBJECT as i32, false.into())); pattern.append_element(PatternElement::new( FC_INDEX_OBJECT as i32, (ttc_index.unwrap_or_default() + ((index + 1) << 16)).into(), )); if let Some(size_element) = skrifa_attributes .instance_size() .or(skrifa_attributes.default_axis_size()) { pattern.append_element(size_element); }; pattern.append_element(PatternElement::new( FC_NAMED_INSTANCE_OBJECT as i32, true.into(), )); } } } #[cfg(test)] mod test { use crate::attributes::AttributesToPattern; use fontconfig_bindings::{FC_DUAL, FC_MONO}; const THRESHOLD_FACTOR_DOWN: f32 = 1.0 - 1.0 / 33.0; const THRESHOLD_FACTOR_UP: f32 = 1.0 + 1.0 / 33.0; fn assert_spacing(advances: impl Iterator, expectation: Option) { assert_eq!( AttributesToPattern::spacing_from_advances(advances), expectation ); } #[test] fn spacing_mono() { assert_spacing([10.0].iter().cloned(), Some(FC_MONO as i32)); assert_spacing( [ 10.0, 10.0, 10.0, 10.0 * THRESHOLD_FACTOR_UP, 10.0 * THRESHOLD_FACTOR_DOWN, ] .iter() .cloned(), Some(FC_MONO as i32), ); } #[test] fn spacing_proportional() { assert_spacing( [10.0, 10.0 * THRESHOLD_FACTOR_UP + 0.01].iter().cloned(), None, ); assert_spacing( [10.0, 10.0 * THRESHOLD_FACTOR_DOWN - 0.01].iter().cloned(), None, ); assert_spacing([10.0, 15.0].iter().cloned(), None); assert_spacing([10.0, 15.0, 20.0].iter().cloned(), None); } #[test] fn advances_dual() { assert_spacing([10.0, 20.0].iter().cloned(), Some(FC_DUAL as i32)); assert_spacing( [10.0, 20.0, 10.0, 20.0, 10.0, 20.0].iter().cloned(), Some(FC_DUAL as i32), ); assert_spacing( [ 10.0, 20.0 * THRESHOLD_FACTOR_UP, 10.0, 20.0, 10.0 * THRESHOLD_FACTOR_DOWN, 20.0, ] .iter() .cloned(), Some(FC_DUAL as i32), ); } } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-fontations/bitmap.rs000066400000000000000000000037151503113465200257740ustar00rootroot00000000000000/* * fontconfig/fc-fontations/bitmap.rs * * Copyright 2025 Google LLC. * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ use skrifa::{bitmap::BitmapFormat, FontRef}; use skrifa::bitmap::BitmapStrikes; use crate::pattern_bindings::{FcPatternBuilder, PatternElement}; use fcint_bindings::{FC_ANTIALIAS_OBJECT, FC_PIXEL_SIZE_OBJECT}; pub fn add_pixel_size(pattern: &mut FcPatternBuilder, font: &FontRef) { let strikes = BitmapStrikes::new(font); if let Some(BitmapFormat::Ebdt) = strikes.format() { return; } let has_strikes = !strikes.is_empty(); for strike in strikes.iter() { pattern.append_element(PatternElement::new( FC_PIXEL_SIZE_OBJECT as i32, (strike.ppem() as f64).into(), )); } if has_strikes { pattern.append_element(PatternElement::new( FC_ANTIALIAS_OBJECT as i32, false.into(), )); } } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-fontations/capabilities.rs000066400000000000000000000073251503113465200271520ustar00rootroot00000000000000/* * fontconfig/fc-fontations/capabilities.rs * * Copyright 2025 Google LLC. * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ use font_types::Tag; use read_fonts::tables::layout::ScriptRecord; use read_fonts::TableProvider; use skrifa::FontRef; use std::ffi::CString; // Mimicking issue in FreeType indexer inserting two delimiting spaces. const SILF_CAPABILITIES_PREFIX: &str = "ttable:Silf"; const SILF_TAG: Tag = Tag::new(b"Silf"); fn capabilities_string>(tags: T, has_silf: bool) -> Option { let mut deduplicated_tags: Vec = tags.into_iter().collect::>(); deduplicated_tags.sort(); deduplicated_tags.dedup(); let mut capabilities_set = deduplicated_tags .into_iter() .map(|tag| format!("otlayout:{}", tag)) .collect::>(); has_silf.then(|| capabilities_set.insert(0, SILF_CAPABILITIES_PREFIX.to_string())); let capabilities = capabilities_set.join(" "); if capabilities.is_empty() { return None; } CString::new(capabilities).ok() } fn gsub_tags<'a>(font: &'a FontRef) -> Option<&'a [ScriptRecord]> { Some(font.gsub().ok()?.script_list().ok()?.script_records()) } fn gpos_tags<'a>(font: &'a FontRef) -> Option<&'a [ScriptRecord]> { Some(font.gpos().ok()?.script_list().ok()?.script_records()) } pub fn make_capabilities(font: &FontRef) -> Option { let has_silf = font.table_data(SILF_TAG).is_some(); capabilities_string( gsub_tags(font) .into_iter() .flatten() .chain(gpos_tags(font).into_iter().flatten()) .map(|script_record| script_record.script_tag()), has_silf, ) } #[cfg(test)] mod test { use super::capabilities_string; use font_types::Tag; #[test] fn capabilities() { let tags = [Tag::new(b"DFLT"), Tag::new(b"cyrl"), Tag::new(b"grek")]; assert_eq!( "otlayout:DFLT otlayout:cyrl otlayout:grek", capabilities_string(tags, false).unwrap().to_str().unwrap() ); let tags = [ Tag::new(b"DFLT"), Tag::new(b"cyrl"), Tag::new(b"cyrl"), Tag::new(b"grek"), ]; assert_eq!( "otlayout:DFLT otlayout:cyrl otlayout:grek", capabilities_string(tags, false).unwrap().to_str().unwrap() ); } #[test] fn empty_capabilities() { assert_eq!(None, capabilities_string([], false)); } #[test] fn graphite_capabilities() { let tags = [Tag::new(b"grek")]; assert_eq!( "ttable:Silf otlayout:grek", capabilities_string(tags, true).unwrap().to_str().unwrap() ); } } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-fontations/charset.rs000066400000000000000000000061321503113465200261450ustar00rootroot00000000000000/* * fontconfig/fc-fontations/charset.rs * * Copyright 2025 Google LLC. * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ use font_types::GlyphId; use skrifa::outline::DrawSettings; use skrifa::prelude::{LocationRef, Size}; use skrifa::{outline::pen::OutlinePen, FontRef, MetadataProvider}; use crate::pattern_bindings::fc_wrapper::FcCharSetWrapper; struct HasAnyContourPen { has_ink: bool, } impl HasAnyContourPen { pub fn new() -> Self { Self { has_ink: false } } } impl OutlinePen for HasAnyContourPen { fn move_to(&mut self, _x: f32, _y: f32) {} fn line_to(&mut self, _x: f32, _y: f32) {} fn quad_to(&mut self, _cx0: f32, _cy0: f32, _x: f32, _y: f32) {} fn curve_to(&mut self, _cx0: f32, _cy0: f32, _cx1: f32, _cy1: f32, _x: f32, _y: f32) {} fn close(&mut self) { self.has_ink = true; } } const CONTROL_CHAR_MAX: u32 = 0x1F; // For control characters, check for whether they have ink/any-contour since // these might be mapped to space. Simulates fcfreetype.c behavior. // Specifically, FreeType checks for face->glyph->outline.n_contours - so, // number of contours, not for actually pixel coverage / contour area. fn control_char_without_ink(font: &FontRef, char: u32, glyph: GlyphId) -> bool { let mut pen = HasAnyContourPen::new(); if char <= CONTROL_CHAR_MAX { font.outline_glyphs().get(glyph).and_then(|outline| { outline .draw( DrawSettings::unhinted(Size::new(12.0), LocationRef::default()), &mut pen, ) .ok() }); if !pen.has_ink { return true; } } false } pub fn make_charset(font: &FontRef) -> Option { let mut charset = FcCharSetWrapper::new()?; let mappings = font.charmap().mappings(); for mapping in mappings { if control_char_without_ink(font, mapping.0, mapping.1) { continue; } if charset.add_char(mapping.0).is_err() { return None; } } Some(charset) } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-fontations/fcint-bindings/000077500000000000000000000000001503113465200270425ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-fontations/fcint-bindings/Cargo.toml000066400000000000000000000002761503113465200307770ustar00rootroot00000000000000[package] name = "fcint-bindings" version = "0.1.0" [lib] path = "../../build/fc-fontations/fcint.rs" [dependencies] libc = "0.2" fontconfig-bindings = { path = "../fontconfig-bindings" } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-fontations/fcint-bindings/build.rs000066400000000000000000000020561503113465200305120ustar00rootroot00000000000000use std::path::PathBuf; use std::fs; fn main() { // Directory for the fontconfig build let cargo_manifest_dir = std::env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR not set"); let mut build_dir = PathBuf::from(cargo_manifest_dir); build_dir = build_dir.join("../../build"); build_dir = fs::canonicalize(build_dir).expect("Failed to canonicalize path."); let fontconfig_lib = build_dir.join("libfontconfig.a"); if !fontconfig_lib.exists() { panic!("{:?} not found, build FontConfig with -Dfontations=enabled into dir build/ first.", fontconfig_lib); } // Tell cargo to look for fontconfig in the build directory println!("cargo:rustc-link-search=native={}", build_dir.display()); println!("cargo:rustc-link-lib=static=fontconfig"); // FreeType and Expat from the system. println!("cargo:rustc-link-lib=dylib=freetype"); println!("cargo:rustc-link-lib=dylib=expat"); // Rerun this build script if the fontconfig source code changes println!("cargo:rerun-if-changed=src"); } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-fontations/fontconfig-bindings/000077500000000000000000000000001503113465200300735ustar00rootroot00000000000000Cargo.toml000066400000000000000000000002431503113465200317430ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-fontations/fontconfig-bindings[package] name = "fontconfig-bindings" version = "0.1.0" links = "fontconfig" [lib] path = "../../build/fc-fontations/fontconfig.rs" [dependencies] libc = "0.2" build.rs000066400000000000000000000020561503113465200314640ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-fontations/fontconfig-bindingsuse std::path::PathBuf; use std::fs; fn main() { // Directory for the fontconfig build let cargo_manifest_dir = std::env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR not set"); let mut build_dir = PathBuf::from(cargo_manifest_dir); build_dir = build_dir.join("../../build"); build_dir = fs::canonicalize(build_dir).expect("Failed to canonicalize path."); let fontconfig_lib = build_dir.join("libfontconfig.a"); if !fontconfig_lib.exists() { panic!("{:?} not found, build FontConfig with -Dfontations=enabled into dir build/ first.", fontconfig_lib); } // Tell cargo to look for fontconfig in the build directory println!("cargo:rustc-link-search=native={}", build_dir.display()); println!("cargo:rustc-link-lib=static=fontconfig"); // FreeType and Expat from the system. println!("cargo:rustc-link-lib=dylib=freetype"); println!("cargo:rustc-link-lib=dylib=expat"); // Rerun this build script if the fontconfig source code changes println!("cargo:rerun-if-changed=src"); } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-fontations/foundries.rs000066400000000000000000000060661503113465200265200ustar00rootroot00000000000000/* * fontconfig/fc-fontations/foundries.rs * * Copyright 2025 Google LLC. * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ use read_fonts::TableProvider; use skrifa::{ string::{LocalizedStrings, StringId}, FontRef, MetadataProvider, }; use std::ffi::{CStr, CString}; fn foundry_name_to_taglike(foundry: &str) -> Option<&'static str> { match foundry { "Adobe" => Some("adobe"), "Bigelow" => Some("b&h"), "Bitstream" => Some("bitstream"), "Gnat" | "Iorsh" => Some("culmus"), "HanYang System" => Some("hanyang"), "Font21" => Some("hwan"), "IBM" => Some("ibm"), "International Typeface Corporation" => Some("itc"), "Linotype" | "LINOTYPE-HELL" => Some("linotype"), "Microsoft" => Some("microsoft"), "Monotype" => Some("monotype"), "Omega" => Some("omega"), "Tiro Typeworks" => Some("tiro"), "URW" => Some("urw"), "XFree86" => Some("xfree86"), "Xorg" => Some("xorg"), _ => None, } } fn map_foundry_from_name_entry(localized_strings: &mut LocalizedStrings) -> Option { localized_strings.into_iter().find_map(|foundry_name| { foundry_name_to_taglike(foundry_name.to_string().as_str()) .map(|foundry| CString::new(foundry).unwrap()) }) } pub fn make_foundry(font: &FontRef) -> Option { if let Ok(os2) = font.os2() { let vend_bytes = os2.ach_vend_id().to_be_bytes(); let foundry = if vend_bytes.contains(&0) { CStr::from_bytes_until_nul(&vend_bytes) .ok() .map(|cstr| cstr.to_owned()) } else { CString::new(vend_bytes).ok() }; if let Some(foundry) = foundry { if !foundry.is_empty() { return Some(foundry); } } } map_foundry_from_name_entry(&mut font.localized_strings(StringId::TRADEMARK)).or_else(|| { map_foundry_from_name_entry(&mut font.localized_strings(StringId::MANUFACTURER)) }) } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-fontations/instance_enumerate.rs000066400000000000000000000125641503113465200303730ustar00rootroot00000000000000/* * fontconfig/fc-fontations/instance_enumerate.rs * * Copyright 2025 Google LLC. * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ use crate::InstanceMode::{self, Named}; use read_fonts::{ FileRef::{self, Collection, Font}, FontRef, }; use skrifa::MetadataProvider; pub fn fonts_and_indices( file_ref: Option, ) -> impl Iterator, Option)> { let (iter_one, iter_two) = match file_ref { Some(Font(font)) => (Some((Ok(font.clone()), None)), None), Some(Collection(collection)) => ( None, Some( collection .iter() .enumerate() .map(|entry| (entry.1, Some(entry.0 as i32))), ), ), None => (None, None), }; iter_two .into_iter() .flatten() .chain(iter_one) .filter_map(|(font_result, index)| { if let Ok(font) = font_result { return Some((font, index)); } None }) } // Produces an iterator over the named instances of the font. #[allow(unused)] pub fn enumerate_named_instances<'a>(f: &'a FontRef) -> impl Iterator + 'a { let default_coords = f.axes().iter().map(|axis| axis.default_value()); f.named_instances() .iter() .enumerate() .filter_map(move |(i, instance)| { let user_coords = instance.user_coords(); if user_coords.eq(default_coords.clone()) { None } else { Some(Named(i as i32)) } }) } /// Used for producing the expected set of patterns out of variable fonts. /// Produces an iterator over /// * the default instance, /// * the named instances, and the /// * variable instance. #[allow(unused)] pub fn all_instances<'a>(f: &'a FontRef) -> Box + 'a> { if f.axes().is_empty() { Box::new(std::iter::once(InstanceMode::Default)) } else { Box::new( std::iter::once(InstanceMode::Default) .chain(enumerate_named_instances(f)) .chain(std::iter::once(InstanceMode::Variable)), ) } } #[cfg(test)] mod test { use crate::{ instance_enumerate::{all_instances, fonts_and_indices}, InstanceMode, }; use read_fonts::FileRef; use std::path::PathBuf; fn testfontdir() -> PathBuf { let default_build_dir = std::env::current_dir().unwrap().join("build"); let build_dir = std::env::var("builddir").unwrap_or_else(|_| { println!("builddir env var not set, using current directory + \"build/\""); default_build_dir.to_string_lossy().to_string() }); PathBuf::from(build_dir) .join("testfonts") .join("roboto-flex-fonts") .join("fonts") .join("variable") } fn variable_collection_testfont() -> PathBuf { testfontdir().join( "RobotoFlex[GRAD,XOPQ,XTRA,YOPQ,YTAS,YTDE,YTFI,YTLC,YTUC,opsz,slnt,wdth,wght].ttf", ) } const EXPECTED_INSTANCES: [InstanceMode; 21] = [ InstanceMode::Default, InstanceMode::Named(0), InstanceMode::Named(1), InstanceMode::Named(2), InstanceMode::Named(4), InstanceMode::Named(5), InstanceMode::Named(6), InstanceMode::Named(7), InstanceMode::Named(8), InstanceMode::Named(9), InstanceMode::Named(10), InstanceMode::Named(11), InstanceMode::Named(12), InstanceMode::Named(13), InstanceMode::Named(14), InstanceMode::Named(15), InstanceMode::Named(16), InstanceMode::Named(17), InstanceMode::Named(18), InstanceMode::Named(19), InstanceMode::Variable, ]; #[test] fn test_instance_iterator() { let bytes = std::fs::read(variable_collection_testfont()) .ok() .unwrap_or_default(); let fileref = FileRef::new(&bytes).ok(); let fonts = fonts_and_indices(fileref); for (font, _ttc_index) in fonts { all_instances(&font) .zip(EXPECTED_INSTANCES.iter()) .for_each(|(instance, expected_instance)| { assert_eq!(instance, *expected_instance); }) } } } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-fontations/lang.rs000066400000000000000000000055601503113465200254410ustar00rootroot00000000000000/* * fontconfig/fc-fontations/lang.rs * * Copyright 2025 Google LLC. * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ use read_fonts::TableProvider; use skrifa::FontRef; use std::ffi::CString; // See logic and comment in FcFreeTypeLangSet, check for Han charsets to make fonts // which advertise support for a single language not support other Han languages. fn exclusive_lang_in_codepage_range(codepage_ranges: u64) -> Option { // u32 is the position of the bit in the OS/2 codepage range. const LANG_MAP: [(u32, &str); 4] = [(17, "ja"), (18, "zh-cn"), (19, "ko"), (20, "zh-tw")]; let mut found_languages = LANG_MAP .iter() .filter(move |bit_lang_pair| codepage_ranges & (1 << bit_lang_pair.0) != 0); match (found_languages.next(), found_languages.next()) { (Some(bit_lang_pair), None) => Some(bit_lang_pair.1.to_string()), _ => None, } } // Returns the language identifier string if according to OS/2 codepage ranges // the font advertises support for only one Han font, otherwise none. pub fn exclusive_lang(font: &FontRef) -> Option { let os2 = font.os2().ok()?; let codepage_ranges: u64 = ((os2.ul_code_page_range_2()? as u64) << 32) + os2.ul_code_page_range_1()? as u64; exclusive_lang_in_codepage_range(codepage_ranges).and_then(|string| CString::new(string).ok()) } #[cfg(test)] mod test { use super::exclusive_lang_in_codepage_range; #[test] fn exclusive_lang() { let non_exclusive = 1 << 17 + 1 << 20; assert!(exclusive_lang_in_codepage_range(non_exclusive).is_none()); let exclusive = 1 << 17; assert_eq!(exclusive_lang_in_codepage_range(exclusive).unwrap(), "ja"); let unmatched_non_han = 1 << 4 + 1 << 21; assert!(exclusive_lang_in_codepage_range(unmatched_non_han).is_none()); } } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-fontations/meson.build000066400000000000000000000045361503113465200263160ustar00rootroot00000000000000fontations = get_option('fontations') if (fontations.enabled()) rust = import('rust') generated_fontconfig = rust.bindgen( input: fontconfig_h, output: 'fontconfig.rs', include_directories: incbase, args: [ '--merge-extern-blocks', '--allowlist-item=(FcCharSet.*|FC_(SLANT|WEIGHT|WIDTH)_.*|FcFontSet(Add|Create|Destroy).*|FcLangSet(Create|Destroy|Copy|Add|HasLang)|FcWeightFromOpenType.*|FC_DUAL|FC_MONO)', '--raw-line=#![allow(nonstandard_style,unused)]', ], # FC_NO_MT=1 is added here to reduce required headers in bindings generation. # It does not mean a functional change in multi-threading behavior. c_args: ['-DBINDGEN_IGNORE_VISIBILITY=1', '-DFC_NO_MT=1'], ) generated_fcint = rust.bindgen( input: ['../src/fcint.h', fclang_h], output: 'fcint.rs', include_directories: incbase, args: [ '--merge-extern-blocks', '--allowlist-item=(FcPattern.*|FcRange.*|FC_.*_OBJECT|FcCharSet.*|FcLangSetFromCharSet)', '--blocklist-type=(FcCharSet|FcLangSet)', '--raw-line=#![allow(nonstandard_style,unused)]', '--raw-line=extern crate fontconfig_bindings;', '--raw-line=pub use fontconfig_bindings::FcCharSet; pub use fontconfig_bindings::FcLangSet;', ], # FC_NO_MT=1 is added here to reduce required headers in bindings generation. # It does not mean a functional change in multi-threading behavior. c_args: ['-DBINDGEN_IGNORE_VISIBILITY=1', '-DFC_NO_MT=1'], ) fontations_bindings_lib = static_library( 'fontconfig_bindings', sources: [generated_fontconfig], rust_abi: 'rust', ) fcint_bindings_lib = static_library( 'fcint_bindings', sources: [generated_fcint], rust_abi: 'rust', link_with: [fontations_bindings_lib], ) fontations_query_lib = static_library( 'fc_fontations_query', include_directories: incbase, sources: ['../src/fcfontations.c', fcstdint_h, fclang_h, alias_headers], ) fc_fontations = static_library( 'fc_fontations', sources: ['mod.rs'], link_with: [ fontations_bindings_lib, fcint_bindings_lib, pattern_lib, fontations_query_lib, ], rust_abi: 'c', dependencies: [ dependency('skrifa-0.31-rs'), dependency('read-fonts-0.29-rs'), dependency('font-types-0.9-rs'), dependency('libc-0.2-rs'), ], install: true, ) endiffontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-fontations/mod.rs000066400000000000000000000251101503113465200252700ustar00rootroot00000000000000/* * fontconfig/fc-fontations/mod.rs * * Copyright 2025 Google LLC. * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ mod attributes; mod bitmap; mod capabilities; mod charset; mod foundries; mod instance_enumerate; mod lang; mod name_records; mod names; mod pattern_bindings; use attributes::append_style_elements; use bitmap::add_pixel_size; use capabilities::make_capabilities; use foundries::make_foundry; use lang::exclusive_lang; use names::add_names; use fontconfig_bindings::{FcFontSet, FcFontSetAdd, FcPattern}; use fcint_bindings::{ FcLangSetFromCharSet, FC_CAPABILITY_OBJECT, FC_CHARSET_OBJECT, FC_COLOR_OBJECT, FC_FILE_OBJECT, FC_FONTFORMAT_OBJECT, FC_FONTVERSION_OBJECT, FC_FONT_HAS_HINT_OBJECT, FC_FONT_WRAPPER_OBJECT, FC_FOUNDRY_OBJECT, FC_LANG_OBJECT, FC_ORDER_OBJECT, FC_OUTLINE_OBJECT, FC_SCALABLE_OBJECT, FC_SYMBOL_OBJECT, }; use font_types::Tag; use pattern_bindings::{fc_wrapper::FcLangSetWrapper, FcPatternBuilder, PatternElement}; use skrifa::MetadataProvider; use std::str::FromStr; use read_fonts::{FileRef, FontRef, TableProvider}; use std::{ ffi::{CStr, CString, OsStr}, iter::IntoIterator, os::unix::ffi::OsStrExt, }; use instance_enumerate::{all_instances, fonts_and_indices}; #[no_mangle] /// Externally called in fcfontations.c as the file scanner function /// similar to the job that FreeType performs. /// /// # Safety /// * At this point, the font file path is not dereferenced. /// * In this initial sanity check mock call, only one empty pattern /// is added to the FontSet, which is null checked, which is sound. pub unsafe extern "C" fn add_patterns_to_fontset( font_file: *const libc::c_char, font_set: *mut FcFontSet, ) -> libc::c_int { let font_path = unsafe { OsStr::from_bytes(CStr::from_ptr(font_file).to_bytes()) }; let bytes = std::fs::read(font_path).ok().unwrap_or_default(); let fileref = FileRef::new(&bytes).ok(); let fonts = fonts_and_indices(fileref); let mut patterns_added: u32 = 0; for (font, ttc_index) in fonts { for pattern in build_patterns_for_font(&font, font_file, ttc_index) { unsafe { if FcFontSetAdd(font_set, pattern) == 0 { return 0; } patterns_added += 1; } } } // Fontations does not natively understand WOFF/WOFF2 compressed file, // if we are asked to scan one of those, only add wrapper information // and filename. if patterns_added == 0 { try_append_woff_pattern(font_set, bytes.as_slice(), font_file); } 1 } /// Used for controlling FontConfig's behavior per font instance. /// /// We add one pattern for the default instance, one for each named instance, /// and one for using the font as a variable font, with ranges of values where applicable. #[derive(Copy, Clone, Debug, PartialEq)] #[allow(dead_code)] enum InstanceMode { Default, Named(i32), Variable, } fn try_append_woff_pattern(font_set: *mut FcFontSet, bytes: &[u8], font_file: *const libc::c_char) { let wrapper: Option = match bytes.get(0..4) { Some(b"wOFF") => CString::new("WOFF").ok(), Some(b"wOF2") => CString::new("WOFF2").ok(), _ => None, }; if let Some(w) = wrapper { let mut pattern = FcPatternBuilder::new(); pattern.append_element(PatternElement::new(FC_FONT_WRAPPER_OBJECT as i32, w.into())); add_font_file_name(&mut pattern, font_file); pattern .create_fc_pattern() .map(|p| unsafe { FcFontSetAdd(font_set, p.into_raw() as *mut FcPattern) }); } } fn has_one_of_tables(font_ref: &FontRef, tags: I) -> bool where I: IntoIterator, I::Item: ToString, { tags.into_iter().fold(false, |has_tag, tag| { let tag = Tag::from_str(tag.to_string().as_str()); if let Ok(tag_converted) = tag { return has_tag | font_ref.data_for_tag(tag_converted).is_some(); } has_tag }) } fn has_hint(font_ref: &FontRef) -> bool { if has_one_of_tables(font_ref, ["fpgm", "cvt "]) { return true; } if let Some(prep_table) = font_ref.data_for_tag(Tag::new(b"prep")) { return prep_table.len() > 7; } false } fn add_font_file_name(pattern: &mut FcPatternBuilder, font_file: *const libc::c_char) { if !font_file.is_null() { let filename = unsafe { std::ffi::CStr::from_ptr(font_file) }; pattern.append_element(PatternElement::new( FC_FILE_OBJECT as i32, filename.to_owned().into(), )); } } fn build_patterns_for_font( font: &FontRef, font_file: *const libc::c_char, ttc_index: Option, ) -> Vec<*mut FcPattern> { let mut pattern = FcPatternBuilder::new(); let has_glyf = has_one_of_tables(font, ["glyf"]); let has_cff = has_one_of_tables(font, ["CFF ", "CFF2"]); let has_color = has_one_of_tables(font, ["COLR", "SVG ", "CBLC", "SBIX"]); // Color and Outlines let has_outlines = has_glyf | has_cff; pattern.append_element(PatternElement::new( FC_OUTLINE_OBJECT as i32, has_outlines.into(), )); pattern.append_element(PatternElement::new( FC_COLOR_OBJECT as i32, has_color.into(), )); pattern.append_element(PatternElement::new( FC_SCALABLE_OBJECT as i32, (has_outlines || has_color).into(), )); pattern.append_element(PatternElement::new( FC_FONT_HAS_HINT_OBJECT as i32, has_hint(font).into(), )); match (has_glyf, has_cff) { (_, true) => { pattern.append_element(PatternElement::new( FC_FONTFORMAT_OBJECT as i32, CString::new("CFF").unwrap().into(), )); } _ => { pattern.append_element(PatternElement::new( FC_FONTFORMAT_OBJECT as i32, CString::new("TrueType").unwrap().into(), )); } } let foundry_string = make_foundry(font).unwrap_or(CString::new("unknown").unwrap()); pattern.append_element(PatternElement::new( FC_FOUNDRY_OBJECT as i32, foundry_string.into(), )); pattern.append_element(PatternElement::new( FC_SYMBOL_OBJECT as i32, font.charmap().is_symbol().into(), )); if let Some(capabilities) = make_capabilities(font) { pattern.append_element(PatternElement::new( FC_CAPABILITY_OBJECT as i32, capabilities.into(), )); }; // CharSet and Langset. if let Some(charset) = charset::make_charset(font) { let exclusive_lang = exclusive_lang(font).map_or(std::ptr::null(), |lang| lang.as_bytes_with_nul().as_ptr()); unsafe { let langset = FcLangSetWrapper::from_raw(FcLangSetFromCharSet(charset.as_ptr(), exclusive_lang) as *mut fontconfig_bindings::_FcLangSet); pattern.append_element(PatternElement::new( FC_CHARSET_OBJECT as i32, charset.into(), )); // TODO: Move FcFreeTypeLangSet to a different name, as the function does not actually depend on FreeType. if !langset.is_null() { pattern.append_element(PatternElement::new(FC_LANG_OBJECT as i32, langset.into())); } } }; let version = font .head() .ok() .map(|head| head.font_revision()) .unwrap_or_default() .to_bits(); add_font_file_name(&mut pattern, font_file); pattern.append_element(PatternElement::new( FC_FONT_WRAPPER_OBJECT as i32, CString::new("SFNT").unwrap().into(), )); pattern.append_element(PatternElement::new( FC_FONTVERSION_OBJECT as i32, version.into(), )); add_pixel_size(&mut pattern, font); pattern.append_element(PatternElement::new(FC_ORDER_OBJECT as i32, 0.into())); // So far the pattern elements applied to te whole font file, in the below, // clone the current pattern state and add instance specific // attributes. FontConfig for variable fonts produces a pattern for the // default instance, each named instance, and a separate one for the // "variable instance", which may contain ranges for pattern elements that // describe variable aspects, such as weight of the font. all_instances(font) .flat_map(move |instance_mode| { let mut instance_pattern = pattern.clone(); // Family, full name, postscript name, etc. // Includes adding style name to the pattern, which is then used by append_style_elements. add_names(font, instance_mode, &mut instance_pattern); // Style names: fcfreetype adds TT_NAME_ID_WWS_SUBFAMILY, TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY, // TT_NAME_ID_FONT_SUBFAMILY as FC_STYLE_OBJECT, FC_STYLE_OBJECT_LANG unless a named instance // is added,then the instance's name id is used as FC_STYLE_OBJECT. append_style_elements(font, instance_mode, ttc_index, &mut instance_pattern); instance_pattern .create_fc_pattern() .map(|wrapper| wrapper.into_raw() as *mut FcPattern) }) .collect::>() } #[cfg(test)] mod test { use crate::add_patterns_to_fontset; use fontconfig_bindings::{FcFontSetCreate, FcFontSetDestroy}; use std::ffi::CString; #[test] fn basic_pattern_construction() { unsafe { let font_set = FcFontSetCreate(); assert!(add_patterns_to_fontset(CString::new("").unwrap().into_raw(), font_set) == 1); FcFontSetDestroy(font_set); } } } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-fontations/name_records.rs000066400000000000000000000316651503113465200271660ustar00rootroot00000000000000/* * fontconfig/fc-fontations/name_records.rs * * Copyright 2025 Google LLC. * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ use font_types::NameId; use read_fonts::tables::cmap::PlatformId; use read_fonts::tables::name::{Name, NameRecord}; // Compare platform_order[] in fcfreetype.c. // https://learn.microsoft.com/en-us/typography/opentype/spec/name#platform-encoding-and-language-ids const PLATFORM_ORDER: [PlatformId; 4] = [ PlatformId::Windows, PlatformId::Unicode, PlatformId::Macintosh, PlatformId::ISO, // deprecated. ]; // Compare name_order[] in fcfreetype.c. const NAME_ID_ORDER: [NameId; 10] = [ NameId::WWS_FAMILY_NAME, NameId::TYPOGRAPHIC_FAMILY_NAME, NameId::FAMILY_NAME, NameId::COMPATIBLE_FULL_NAME, NameId::FULL_NAME, NameId::WWS_SUBFAMILY_NAME, NameId::TYPOGRAPHIC_SUBFAMILY_NAME, NameId::SUBFAMILY_NAME, NameId::TRADEMARK, NameId::MANUFACTURER, ]; pub struct FcSortedNameRecords<'a> { name: &'a Name<'a>, sorted_record_indices: std::vec::IntoIter, } impl<'a> FcSortedNameRecords<'a> { pub fn new(name: &'a Name) -> Self { let mut sorted_name_id_indices: Vec = (0..name.name_record().len() as u16).collect(); Self::sort_name_records(name, &mut sorted_name_id_indices); Self { name, sorted_record_indices: sorted_name_id_indices.into_iter(), } } // In instances of this comparison function, return Greater for an id a that // is higher priorty than id b, Less for one that is lower priority. fn cmp_id_ordered(priorities: &[T], a: &T, b: &T) -> std::cmp::Ordering where T: std::cmp::Ord, { match ( priorities.iter().position(|x| *x == *a), priorities.iter().position(|x| *x == *b), ) { (Some(pos_a), Some(pos_b)) => pos_a.cmp(&pos_b).reverse(), (Some(_), None) => std::cmp::Ordering::Greater, (None, Some(_)) => std::cmp::Ordering::Less, (None, None) => a.cmp(b).reverse(), } } fn language_cmp_english_first(a: (u16, u16), b: (u16, u16)) -> std::cmp::Ordering { const MS_ENGLISH_US: (u16, u16) = (0x409, 3); const MAC_ENGLISH: (u16, u16) = (0, 1); match (a, b) { (MS_ENGLISH_US, MS_ENGLISH_US) | (MAC_ENGLISH, MAC_ENGLISH) => { std::cmp::Ordering::Equal } (MS_ENGLISH_US, _) | (MAC_ENGLISH, _) => std::cmp::Ordering::Greater, (_, MS_ENGLISH_US) | (_, MAC_ENGLISH) => std::cmp::Ordering::Less, _ => a.cmp(&b).reverse(), } } fn sort_name_records(name: &'a Name, indices: &mut [u16]) { indices.sort_by(|a, b| { let name_record_a = name.name_record()[*a as usize]; let name_record_b = name.name_record()[*b as usize]; Self::cmp_id_ordered( &PLATFORM_ORDER, &PlatformId::new(name_record_a.platform_id()), &PlatformId::new(name_record_b.platform_id()), ) .then(Self::cmp_id_ordered( &NAME_ID_ORDER, &name_record_a.name_id(), &name_record_b.name_id(), )) .then( name_record_a .encoding_id() .cmp(&name_record_b.encoding_id()), ) .then(Self::language_cmp_english_first( (name_record_a.language_id(), name_record_a.platform_id()), (name_record_b.language_id(), name_record_b.platform_id()), )) }); // Return in descending order, from most important to least important. indices.reverse(); } } impl Iterator for FcSortedNameRecords<'_> { type Item = NameRecord; fn next(&mut self) -> Option { let record_index = self.sorted_record_indices.next()?; Some(self.name.name_record()[record_index as usize]) } } #[cfg(test)] mod test { use crate::name_records::FcSortedNameRecords; use read_fonts::TableProvider; use std::{env, fs, path::PathBuf}; fn get_test_font_bytes() -> Option> { let base_path_str = env::var("builddir").unwrap_or(String::from("build/")); let file_path = PathBuf::from(base_path_str) .join("testfonts/roboto-flex-fonts/fonts/variable/RobotoFlex[GRAD,XOPQ,XTRA,YOPQ,YTAS,YTDE,YTFI,YTLC,YTUC,opsz,slnt,wdth,wght].ttf"); let file_contents: Vec = fs::read(&file_path).ok()?; Some(file_contents) } #[test] fn test_sort_name_records() { let font_bytes = get_test_font_bytes().expect("Could not read test font file."); let font = read_fonts::FontRef::new(font_bytes.as_slice()).unwrap(); let name_table = font.name().unwrap(); let sorted_records = FcSortedNameRecords::new(&name_table); let sorted_platform_ids = sorted_records .map(|entry| { ( entry.platform_id(), entry.name_id().to_u16(), entry.encoding_id(), entry.language_id(), ) }) .collect::>(); assert_eq!( sorted_platform_ids, [ (3, 1, 1, 1033), (3, 4, 1, 1033), (3, 2, 1, 1033), (3, 7, 1, 1033), (3, 8, 1, 1033), (3, 0, 1, 1033), (3, 3, 1, 1033), (3, 5, 1, 1033), (3, 6, 1, 1033), (3, 9, 1, 1033), (3, 11, 1, 1033), (3, 12, 1, 1033), (3, 13, 1, 1033), (3, 14, 1, 1033), (3, 25, 1, 1033), (3, 256, 1, 1033), (3, 257, 1, 1033), (3, 258, 1, 1033), (3, 259, 1, 1033), (3, 260, 1, 1033), (3, 261, 1, 1033), (3, 262, 1, 1033), (3, 263, 1, 1033), (3, 264, 1, 1033), (3, 265, 1, 1033), (3, 266, 1, 1033), (3, 267, 1, 1033), (3, 268, 1, 1033), (3, 269, 1, 1033), (3, 270, 1, 1033), (3, 271, 1, 1033), (3, 272, 1, 1033), (3, 273, 1, 1033), (3, 274, 1, 1033), (3, 275, 1, 1033), (3, 276, 1, 1033), (3, 277, 1, 1033), (3, 278, 1, 1033), (3, 279, 1, 1033), (3, 280, 1, 1033), (3, 281, 1, 1033), (3, 282, 1, 1033), (3, 283, 1, 1033), (3, 284, 1, 1033), (3, 285, 1, 1033), (3, 286, 1, 1033), (3, 287, 1, 1033), (3, 288, 1, 1033), (3, 289, 1, 1033), (3, 290, 1, 1033), (3, 291, 1, 1033), (3, 292, 1, 1033), (3, 293, 1, 1033), (3, 294, 1, 1033), (3, 295, 1, 1033), (3, 296, 1, 1033), (3, 297, 1, 1033), (3, 298, 1, 1033), (3, 299, 1, 1033), (3, 300, 1, 1033), (3, 301, 1, 1033), (3, 302, 1, 1033), (3, 303, 1, 1033), (3, 304, 1, 1033), (3, 305, 1, 1033), (3, 306, 1, 1033), (3, 307, 1, 1033), (3, 308, 1, 1033), (3, 309, 1, 1033), (3, 310, 1, 1033), (3, 311, 1, 1033), (3, 312, 1, 1033), (3, 313, 1, 1033), (3, 314, 1, 1033), (3, 315, 1, 1033), (3, 316, 1, 1033), (3, 317, 1, 1033), (3, 318, 1, 1033), (3, 319, 1, 1033), (3, 320, 1, 1033), (3, 321, 1, 1033), (3, 322, 1, 1033), (3, 323, 1, 1033), (3, 324, 1, 1033), (3, 325, 1, 1033), (3, 326, 1, 1033), (3, 327, 1, 1033), (3, 328, 1, 1033), (3, 329, 1, 1033), (3, 330, 1, 1033), (3, 331, 1, 1033), (3, 332, 1, 1033), (3, 333, 1, 1033), (3, 334, 1, 1033), (3, 335, 1, 1033), (3, 336, 1, 1033), (3, 337, 1, 1033), (3, 338, 1, 1033), (3, 339, 1, 1033), (3, 340, 1, 1033), (3, 341, 1, 1033), (3, 342, 1, 1033), (3, 343, 1, 1033), (3, 344, 1, 1033), (3, 345, 1, 1033), (3, 346, 1, 1033), (3, 347, 1, 1033), (3, 348, 1, 1033), (3, 349, 1, 1033), (1, 25, 0, 0), (1, 256, 0, 0), (1, 257, 0, 0), (1, 258, 0, 0), (1, 259, 0, 0), (1, 260, 0, 0), (1, 261, 0, 0), (1, 262, 0, 0), (1, 263, 0, 0), (1, 264, 0, 0), (1, 265, 0, 0), (1, 266, 0, 0), (1, 267, 0, 0), (1, 268, 0, 0), (1, 269, 0, 0), (1, 270, 0, 0), (1, 271, 0, 0), (1, 272, 0, 0), (1, 273, 0, 0), (1, 274, 0, 0), (1, 275, 0, 0), (1, 276, 0, 0), (1, 277, 0, 0), (1, 278, 0, 0), (1, 279, 0, 0), (1, 280, 0, 0), (1, 281, 0, 0), (1, 282, 0, 0), (1, 283, 0, 0), (1, 284, 0, 0), (1, 285, 0, 0), (1, 286, 0, 0), (1, 287, 0, 0), (1, 288, 0, 0), (1, 289, 0, 0), (1, 290, 0, 0), (1, 291, 0, 0), (1, 292, 0, 0), (1, 293, 0, 0), (1, 294, 0, 0), (1, 295, 0, 0), (1, 296, 0, 0), (1, 297, 0, 0), (1, 298, 0, 0), (1, 299, 0, 0), (1, 300, 0, 0), (1, 301, 0, 0), (1, 302, 0, 0), (1, 303, 0, 0), (1, 304, 0, 0), (1, 305, 0, 0), (1, 306, 0, 0), (1, 307, 0, 0), (1, 308, 0, 0), (1, 309, 0, 0), (1, 310, 0, 0), (1, 311, 0, 0), (1, 312, 0, 0), (1, 313, 0, 0), (1, 314, 0, 0), (1, 315, 0, 0), (1, 316, 0, 0), (1, 317, 0, 0), (1, 318, 0, 0), (1, 319, 0, 0), (1, 320, 0, 0), (1, 321, 0, 0), (1, 322, 0, 0), (1, 323, 0, 0), (1, 324, 0, 0), (1, 325, 0, 0), (1, 326, 0, 0), (1, 327, 0, 0), (1, 328, 0, 0), (1, 329, 0, 0), (1, 330, 0, 0), (1, 331, 0, 0), (1, 332, 0, 0), (1, 333, 0, 0), (1, 334, 0, 0), (1, 335, 0, 0), (1, 336, 0, 0), (1, 337, 0, 0), (1, 338, 0, 0), (1, 339, 0, 0), (1, 340, 0, 0), (1, 341, 0, 0), (1, 342, 0, 0), (1, 343, 0, 0), (1, 344, 0, 0), (1, 345, 0, 0), (1, 346, 0, 0), (1, 347, 0, 0), (1, 348, 0, 0), (1, 349, 0, 0) ] ); } } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-fontations/names.rs000066400000000000000000000175141503113465200256250ustar00rootroot00000000000000/* * fontconfig/fc-fontations/names.rs * * Copyright 2025 Google LLC. * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ use skrifa::string::LocalizedString; use skrifa::{string::StringId, MetadataProvider}; use fcint_bindings::{ FC_FAMILYLANG_OBJECT, FC_FAMILY_OBJECT, FC_FULLNAMELANG_OBJECT, FC_FULLNAME_OBJECT, FC_INVALID_OBJECT, FC_POSTSCRIPT_NAME_OBJECT, FC_STYLELANG_OBJECT, FC_STYLE_OBJECT, }; use crate::{name_records::FcSortedNameRecords, FcPatternBuilder, InstanceMode, PatternElement}; use read_fonts::{FontRef, TableProvider}; use std::ffi::CString; use std::collections::HashSet; fn object_ids_for_name_id(string_id: StringId) -> Option<(i32, i32)> { match string_id { StringId::FAMILY_NAME | StringId::WWS_FAMILY_NAME | StringId::TYPOGRAPHIC_FAMILY_NAME => { Some((FC_FAMILY_OBJECT as i32, FC_FAMILYLANG_OBJECT as i32)) } StringId::FULL_NAME | StringId::COMPATIBLE_FULL_NAME => { Some((FC_FULLNAME_OBJECT as i32, FC_FULLNAMELANG_OBJECT as i32)) } StringId::POSTSCRIPT_NAME => { Some((FC_POSTSCRIPT_NAME_OBJECT as i32, FC_INVALID_OBJECT as i32)) } StringId::SUBFAMILY_NAME | StringId::WWS_SUBFAMILY_NAME | StringId::TYPOGRAPHIC_SUBFAMILY_NAME => { Some((FC_STYLE_OBJECT as i32, FC_STYLELANG_OBJECT as i32)) } _ => None, } } fn normalize_name(name: &CString) -> String { name.clone() .into_string() .unwrap_or_default() .to_lowercase() .replace(' ', "") } fn mangle_postscript_name_for_named_instance( font: &FontRef, named_instance_id: i32, ) -> Option { let instance_ps_name_id = font .named_instances() .get(named_instance_id as usize)? .postscript_name_id(); if let Some(ps_name_id) = instance_ps_name_id { let ps_name = font .localized_strings(ps_name_id) .english_or_first()? .clone() .to_string(); CString::new(ps_name).ok() } else { let instance_subfamily_name_id = font .named_instances() .get(named_instance_id as usize)? .subfamily_name_id(); let prefix = font .localized_strings(StringId::VARIATIONS_POSTSCRIPT_NAME_PREFIX) .english_or_first() .or(font .localized_strings(StringId::FAMILY_NAME) .english_or_first())? .to_string() + "-"; let subfam = font .localized_strings(instance_subfamily_name_id) .english_or_first()? .to_string(); let assembled = prefix + &subfam; let assembled = assembled.replace(" ", ""); CString::new(assembled).ok() } } fn mangle_subfamily_name_for_named_instance( font: &FontRef, named_instance_id: i32, ) -> Option { let instance_subfamily_name_id = font .named_instances() .get(named_instance_id as usize)? .subfamily_name_id(); let subfamily = font .localized_strings(instance_subfamily_name_id) .english_or_first()? .clone() .to_string(); CString::new(subfamily).ok() } fn mangle_full_name_for_named_instance(font: &FontRef, named_instance_id: i32) -> Option { let instance_subfamily_name_id = font .named_instances() .get(named_instance_id as usize)? .subfamily_name_id(); let full_name = font .localized_strings(StringId::FAMILY_NAME) .english_or_first()? .to_string() + " "; let subfam = font .localized_strings(instance_subfamily_name_id) .english_or_first()? .to_string(); CString::new(full_name + &subfam).ok() } pub fn add_names(font: &FontRef, instance_mode: InstanceMode, pattern: &mut FcPatternBuilder) { let mut already_encountered_names: HashSet<(i32, String)> = HashSet::new(); let name_table = font.name(); if name_table.is_err() { return; } let name_table = name_table.unwrap(); for name_record in FcSortedNameRecords::new(&name_table) { let string_id = name_record.name_id(); if let Some(object_ids) = object_ids_for_name_id(string_id) { let localized = LocalizedString::new(&name_table, &name_record); let name = if localized.to_string().is_empty() { None } else { let mut name_trimmed = localized.to_string().trim().to_owned(); // PostScript name sanitization. if object_ids.0 == FC_POSTSCRIPT_NAME_OBJECT as i32 { name_trimmed = name_trimmed.replace(" ", ""); } CString::new(name_trimmed).ok() }; let language = localized.language().or(Some("und")).and_then(|lang| { let lang = lang.to_lowercase(); let lang = if lang.starts_with("zh") { lang } else { lang.split('-').next().unwrap_or(&lang).to_string() }; CString::new(lang).ok() }); // Instance postscript name. let name = match (instance_mode, string_id) { (InstanceMode::Named(instance), StringId::POSTSCRIPT_NAME) => { mangle_postscript_name_for_named_instance(font, instance).or(name) } (InstanceMode::Named(instance), StringId::SUBFAMILY_NAME) => { mangle_subfamily_name_for_named_instance(font, instance).or(name) } (InstanceMode::Named(instance), StringId::FULL_NAME) => { mangle_full_name_for_named_instance(font, instance).or(name) } ( InstanceMode::Variable, StringId::SUBFAMILY_NAME | StringId::WWS_SUBFAMILY_NAME | StringId::TYPOGRAPHIC_SUBFAMILY_NAME | StringId::FULL_NAME | StringId::POSTSCRIPT_NAME, ) => None, _ => name, }; if let (Some(name), Some(language)) = (name, language) { let normalized_name = normalize_name(&name); if already_encountered_names.contains(&(object_ids.0, normalized_name.clone())) { continue; } already_encountered_names.insert((object_ids.0, normalized_name)); pattern.append_element(PatternElement::new(object_ids.0, name.into())); // Postscriptname for example does not attach a language. if object_ids.1 != FC_INVALID_OBJECT as i32 { pattern.append_element(PatternElement::new(object_ids.1, language.into())); } } } } } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-fontations/pattern_bindings/000077500000000000000000000000001503113465200274765ustar00rootroot00000000000000fc_wrapper.rs000066400000000000000000000114271503113465200321220ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-fontations/pattern_bindings/* * fontconfig/fc-fontations/pattern_bindings/fc_wrapper.rs * * Copyright 2025 Google LLC. * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ use fontconfig_bindings::{FcLangSet, FcLangSetCopy, FcLangSetCreate, FcLangSetDestroy}; use fcint_bindings::{ FcCharSet, FcCharSetAddChar, FcCharSetCopy, FcCharSetCreate, FcCharSetDestroy, FcPattern, FcPatternCreate, FcPatternDestroy, FcRange, FcRangeCopy, FcRangeCreateDouble, FcRangeDestroy, }; macro_rules! wrap_fc_object { ( $wrapper_name:ident, $wrapped_type:ident, $destroy_fn:ident $(, $copy_fn:ident)? ) => { #[allow(unused)] #[derive(Debug)] pub struct $wrapper_name { inner: *mut $wrapped_type, } impl $wrapper_name { #[allow(unused)] pub fn from_raw(ptr: *mut $wrapped_type) -> Self { Self { inner: ptr } } #[allow(unused)] pub fn into_raw(self) -> *mut $wrapped_type { let ptr = self.inner; std::mem::forget(self); ptr } #[allow(unused)] pub fn as_ptr(&self) -> *mut $wrapped_type { assert!(!self.inner.is_null()); self.inner } } impl Drop for $wrapper_name { fn drop(&mut self) { unsafe { $destroy_fn(self.inner); } } } $( impl Clone for $wrapper_name { fn clone(&self) -> Self { Self { inner: unsafe { $copy_fn(self.inner) }, } } } )? }; } wrap_fc_object! { FcRangeWrapper, FcRange, FcRangeDestroy, FcRangeCopy } impl FcRangeWrapper { #[allow(unused)] pub fn new(min: f64, max: f64) -> Option { unsafe { let ptr = FcRangeCreateDouble(min, max); if ptr.is_null() { None } else { Some(Self { inner: ptr }) } } } } wrap_fc_object! { FcPatternWrapper, FcPattern, FcPatternDestroy } impl FcPatternWrapper { #[allow(unused)] pub fn new() -> Option { // Corrected new function for FcPattern unsafe { let ptr = FcPatternCreate(); if ptr.is_null() { None } else { Some(Self { inner: ptr }) } } } } wrap_fc_object! { FcCharSetWrapper, FcCharSet, FcCharSetDestroy, FcCharSetCopy } impl FcCharSetWrapper { pub fn new() -> Option { let created_charset: *mut FcCharSet; unsafe { created_charset = FcCharSetCreate(); } if created_charset.is_null() { None } else { Some(Self { inner: created_charset, }) } } pub fn add_char(&mut self, char: u32) -> Result<(), ()> { unsafe { if FcCharSetAddChar(self.as_ptr(), char) == 1 { Ok(()) } else { Err(()) } } } } wrap_fc_object! { FcLangSetWrapper, FcLangSet, FcLangSetDestroy, FcLangSetCopy } impl FcLangSetWrapper { #[allow(unused)] pub fn new() -> Option { let created_langset: *mut fontconfig_bindings::FcLangSet; unsafe { created_langset = FcLangSetCreate(); } if created_langset.is_null() { None } else { Some(Self { inner: created_langset, }) } } pub fn is_null(&self) -> bool { self.inner.is_null() } } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-fontations/pattern_bindings/mod.rs000066400000000000000000000275301503113465200306320ustar00rootroot00000000000000/* * fontconfig/fc-fontations/pattern_bindings/mod.rs * * Copyright 2025 Google LLC. * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ pub mod fc_wrapper; use std::ffi::CString; use std::fmt::Debug; use fcint_bindings::{ FcPattern, FcPatternObjectAddBool, FcPatternObjectAddCharSet, FcPatternObjectAddDouble, FcPatternObjectAddInteger, FcLangSet, FcPatternObjectAddLangSet, FcPatternObjectAddRange, FcPatternObjectAddString, FC_FAMILY_OBJECT, FC_FILE_OBJECT, }; use fc_wrapper::{FcCharSetWrapper, FcLangSetWrapper, FcPatternWrapper, FcRangeWrapper}; #[allow(unused)] #[derive(Debug, Clone)] pub enum PatternValue { String(CString), Boolean(bool), Integer(i32), Double(f64), Range(FcRangeWrapper), LangSet(FcLangSetWrapper), CharSet(FcCharSetWrapper), } impl From for PatternValue { fn from(item: CString) -> Self { PatternValue::String(item) } } impl From for PatternValue { fn from(item: i32) -> Self { PatternValue::Integer(item) } } impl From for PatternValue { fn from(item: bool) -> Self { PatternValue::Boolean(item) } } impl From for PatternValue { fn from(item: f64) -> Self { PatternValue::Double(item) } } impl From for PatternValue { fn from(item: FcRangeWrapper) -> Self { PatternValue::Range(item) } } impl From for PatternValue { fn from(value: FcCharSetWrapper) -> Self { PatternValue::CharSet(value) } } impl From for PatternValue { fn from(value: FcLangSetWrapper) -> Self { PatternValue::LangSet(value) } } #[derive(Debug, Clone)] pub struct PatternElement { pub object_id: i32, pub value: PatternValue, } impl PatternElement { #[allow(unused)] pub fn new(object_id: i32, value: PatternValue) -> Self { Self { object_id, value } } } #[derive(Debug, Clone)] struct PatternAddError; impl std::fmt::Display for PatternAddError { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { write!(f, "Failed to add object to Fontconfig pattern.") } } impl PatternElement { fn append_to_fc_pattern(self, pattern: *mut FcPattern) -> Result<(), PatternAddError> { let pattern_add_success = match self.value { PatternValue::String(string) => unsafe { FcPatternObjectAddString(pattern, self.object_id, string.as_ptr() as *const u8) }, PatternValue::Boolean(value) => unsafe { FcPatternObjectAddBool(pattern, self.object_id, value as i32) }, PatternValue::Integer(value) => unsafe { FcPatternObjectAddInteger(pattern, self.object_id, value) }, PatternValue::Double(value) => unsafe { FcPatternObjectAddDouble(pattern, self.object_id, value) }, PatternValue::Range(value) => unsafe { FcPatternObjectAddRange(pattern, self.object_id, value.into_raw()) }, PatternValue::CharSet(value) => unsafe { FcPatternObjectAddCharSet(pattern, self.object_id, value.into_raw()) }, PatternValue::LangSet(value) => unsafe { FcPatternObjectAddLangSet( pattern, self.object_id, value.into_raw() as *const FcLangSet, ) }, } == 1; if pattern_add_success { return Ok(()); } Err(PatternAddError) } } #[derive(Default, Debug, Clone)] pub struct FcPatternBuilder { elements: Vec, } impl FcPatternBuilder { #[allow(unused)] pub fn new() -> Self { Self::default() } #[allow(unused)] pub fn append_element(&mut self, element: PatternElement) { self.elements.push(element); } #[allow(unused)] pub fn create_fc_pattern(&mut self) -> Option { let pattern = FcPatternWrapper::new()?; let mut family_name_or_file_name_encountered = false; const FAMILY_ID: i32 = FC_FAMILY_OBJECT as i32; const FILE_ID: i32 = FC_FILE_OBJECT as i32; for element in self.elements.drain(0..) { if let PatternElement { object_id: FAMILY_ID | FILE_ID, value: PatternValue::String(ref file_fam_name), } = element { if !file_fam_name.is_empty() { family_name_or_file_name_encountered = true; } } element.append_to_fc_pattern(pattern.as_ptr()).ok()?; } if !family_name_or_file_name_encountered { return None; } Some(pattern) } } /// Mainly needed for finding the style PatternElement in attributes.rs. impl<'a> IntoIterator for &'a FcPatternBuilder { type Item = &'a PatternElement; type IntoIter = std::slice::Iter<'a, PatternElement>; fn into_iter(self) -> Self::IntoIter { self.elements.iter() } } #[cfg(test)] mod test { use std::ffi::CString; use crate::pattern_bindings::fc_wrapper::FcLangSetWrapper; use super::{ fc_wrapper::FcCharSetWrapper, FcPatternBuilder, FcRangeWrapper, PatternElement, PatternValue, }; use fontconfig_bindings::{ FcCharSet, FcCharSetAddChar, FcCharSetHasChar, FcLangSet, FcLangSetAdd, FcLangSetHasLang, _FcLangResult_FcLangEqual, }; use fcint_bindings::{ FcPatternObjectGetBool, FcPatternObjectGetCharSet, FcPatternObjectGetDouble, FcPatternObjectGetInteger, FcPatternObjectGetLangSet, FcPatternObjectGetRange, FcPatternObjectGetString, FcRange, FC_CHARSET_OBJECT, FC_COLOR_OBJECT, FC_FAMILY_OBJECT, FC_LANG_OBJECT, FC_SLANT_OBJECT, FC_WEIGHT_OBJECT, FC_WIDTH_OBJECT, }; #[test] fn verify_pattern_bindings() { let mut pattern_builder = FcPatternBuilder::new(); // Add a bunch of test properties. pattern_builder.append_element(PatternElement::new( FC_COLOR_OBJECT as i32, PatternValue::Boolean(true), )); pattern_builder.append_element(PatternElement::new( FC_WEIGHT_OBJECT as i32, PatternValue::Double(800.), )); pattern_builder.append_element(PatternElement::new( FC_SLANT_OBJECT as i32, PatternValue::Integer(15), )); pattern_builder.append_element(PatternElement::new( FC_WIDTH_OBJECT as i32, PatternValue::Range(FcRangeWrapper::new(100., 400.).unwrap()), )); pattern_builder.append_element(PatternElement::new( FC_FAMILY_OBJECT as i32, PatternValue::String(CString::new("TestFont").unwrap()), )); let test_charset = FcCharSetWrapper::new().unwrap(); const BIANG: u32 = 0x30EDE; unsafe { assert!(FcCharSetAddChar(test_charset.as_ptr(), BIANG) != 0); } pattern_builder.append_element(PatternElement::new( FC_CHARSET_OBJECT as i32, PatternValue::CharSet(test_charset), )); let test_langset = FcLangSetWrapper::new().unwrap(); const LANG_EN: &[u8] = b"en\0"; unsafe { assert!(FcLangSetAdd(test_langset.as_ptr(), LANG_EN.as_ptr()) != 0); } pattern_builder.append_element(PatternElement::new( FC_LANG_OBJECT as i32, PatternValue::LangSet(test_langset), )); let pattern = pattern_builder.create_fc_pattern().unwrap(); let fontconfig_pattern = pattern.as_ptr(); unsafe { // Verify color properties. let mut result: i32 = 0; let get_result = FcPatternObjectGetBool(fontconfig_pattern, FC_COLOR_OBJECT as i32, 0, &mut result); assert_eq!(get_result, 0); assert_eq!(result, 1); // Verify weight value. let mut weight_result: f64 = 0.; let get_result = FcPatternObjectGetDouble( fontconfig_pattern, FC_WEIGHT_OBJECT as i32, 0, &mut weight_result, ); assert_eq!(get_result, 0); assert_eq!(weight_result, 800.0); // Verify that weight is not a range. let range_result: *mut *mut FcRange = std::mem::zeroed(); assert_eq!( FcPatternObjectGetRange( fontconfig_pattern, FC_WEIGHT_OBJECT as i32, 0, range_result ), 2 ); // Verify slant. let mut slant_result: i32 = 0; let get_result = FcPatternObjectGetInteger( fontconfig_pattern, FC_SLANT_OBJECT as i32, 0, &mut slant_result, ); assert_eq!(get_result, 0); assert_eq!(slant_result, 15); // Verify width. let mut width_result: *mut FcRange = std::mem::zeroed(); let get_result = FcPatternObjectGetRange( fontconfig_pattern, FC_WIDTH_OBJECT as i32, 0, &mut width_result, ); assert_eq!(get_result, 0); assert_eq!((*width_result).begin, 100.); assert_eq!((*width_result).end, 400.); // Verify family name. let mut family_result: *mut u8 = std::mem::zeroed(); let get_result = FcPatternObjectGetString( fontconfig_pattern, FC_FAMILY_OBJECT as i32, 0, &mut family_result, ); assert_eq!(get_result, 0); assert_eq!( std::ffi::CStr::from_ptr(family_result as *const i8) .to_str() .unwrap(), "TestFont" ); // Verify CharSet. let mut retrieved_charset: *mut FcCharSet = std::mem::zeroed(); let get_result = FcPatternObjectGetCharSet( fontconfig_pattern, FC_CHARSET_OBJECT as i32, 0, &mut retrieved_charset, ); assert_eq!(get_result, 0); assert_eq!(FcCharSetHasChar(retrieved_charset, BIANG), 1); // Verify LangSet. let mut retrieved_langset: *mut FcLangSet = std::mem::zeroed(); let get_result = FcPatternObjectGetLangSet( fontconfig_pattern, FC_LANG_OBJECT as i32, 0, &mut retrieved_langset, ); assert_eq!(get_result, 0); assert_eq!( FcLangSetHasLang(retrieved_langset, LANG_EN.as_ptr()), _FcLangResult_FcLangEqual ); } } } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/000077500000000000000000000000001503113465200227015ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/Makefile.am000066400000000000000000000130151503113465200247350ustar00rootroot00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2003 Keith Packard # Copyright © 2013 Google, Inc. # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Google Author(s): Behdad Esfahbod TAG = lang DEPS = $(ORTH) ARGS = --directory $(srcdir) $(ORTH) DIST = $(ORTH) include $(top_srcdir)/Tools.mk # NOTE: # # The order of the orth files here is extremely important (part of the cache # format) and should not be modified. New orth files should be added at the # end. No files should be removed either. # ORTH = \ aa.orth \ ab.orth \ af.orth \ am.orth \ ar.orth \ as.orth \ ast.orth \ av.orth \ ay.orth \ az_az.orth \ az_ir.orth \ ba.orth \ bm.orth \ be.orth \ bg.orth \ bh.orth \ bho.orth \ bi.orth \ bin.orth \ bn.orth \ bo.orth \ br.orth \ bs.orth \ bua.orth \ ca.orth \ ce.orth \ ch.orth \ chm.orth \ chr.orth \ co.orth \ cs.orth \ cu.orth \ cv.orth \ cy.orth \ da.orth \ de.orth \ dz.orth \ el.orth \ en.orth \ eo.orth \ es.orth \ et.orth \ eu.orth \ fa.orth \ fi.orth \ fj.orth \ fo.orth \ fr.orth \ ff.orth \ fur.orth \ fy.orth \ ga.orth \ gd.orth \ gez.orth \ gl.orth \ gn.orth \ gu.orth \ gv.orth \ ha.orth \ haw.orth \ he.orth \ hi.orth \ ho.orth \ hr.orth \ hu.orth \ hy.orth \ ia.orth \ ig.orth \ id.orth \ ie.orth \ ik.orth \ io.orth \ is.orth \ it.orth \ iu.orth \ ja.orth \ ka.orth \ kaa.orth \ ki.orth \ kk.orth \ kl.orth \ km.orth \ kn.orth \ ko.orth \ kok.orth \ ks.orth \ ku_am.orth \ ku_ir.orth \ kum.orth \ kv.orth \ kw.orth \ ky.orth \ la.orth \ lb.orth \ lez.orth \ ln.orth \ lo.orth \ lt.orth \ lv.orth \ mg.orth \ mh.orth \ mi.orth \ mk.orth \ ml.orth \ mn_cn.orth \ mo.orth \ mr.orth \ mt.orth \ my.orth \ nb.orth \ nds.orth \ ne.orth \ nl.orth \ nn.orth \ no.orth \ nr.orth \ nso.orth \ ny.orth \ oc.orth \ om.orth \ or.orth \ os.orth \ pa.orth \ pl.orth \ ps_af.orth \ ps_pk.orth \ pt.orth \ rm.orth \ ro.orth \ ru.orth \ sa.orth \ sah.orth \ sco.orth \ se.orth \ sel.orth \ sh.orth \ shs.orth \ si.orth \ sk.orth \ sl.orth \ sm.orth \ sma.orth \ smj.orth \ smn.orth \ sms.orth \ so.orth \ sq.orth \ sr.orth \ ss.orth \ st.orth \ sv.orth \ sw.orth \ syr.orth \ ta.orth \ te.orth \ tg.orth \ th.orth \ ti_er.orth \ ti_et.orth \ tig.orth \ tk.orth \ tl.orth \ tn.orth \ to.orth \ tr.orth \ ts.orth \ tt.orth \ tw.orth \ tyv.orth \ ug.orth \ uk.orth \ ur.orth \ uz.orth \ ve.orth \ vi.orth \ vo.orth \ vot.orth \ wa.orth \ wen.orth \ wo.orth \ xh.orth \ yap.orth \ yi.orth \ yo.orth \ zh_cn.orth \ zh_hk.orth \ zh_mo.orth \ zh_sg.orth \ zh_tw.orth \ zu.orth \ ak.orth \ an.orth \ ber_dz.orth \ ber_ma.orth \ byn.orth \ crh.orth \ csb.orth \ dv.orth \ ee.orth \ fat.orth \ fil.orth \ hne.orth \ hsb.orth \ ht.orth \ hz.orth \ ii.orth \ jv.orth \ kab.orth \ kj.orth \ kr.orth \ ku_iq.orth \ ku_tr.orth \ kwm.orth \ lg.orth \ li.orth \ mai.orth \ mn_mn.orth \ ms.orth \ na.orth \ ng.orth \ nv.orth \ ota.orth \ pa_pk.orth \ pap_an.orth \ pap_aw.orth \ qu.orth \ quz.orth \ rn.orth \ rw.orth \ sc.orth \ sd.orth \ sg.orth \ sid.orth \ sn.orth \ su.orth \ ty.orth \ wal.orth \ za.orth \ lah.orth \ nqo.orth \ brx.orth \ sat.orth \ doi.orth \ mni.orth \ und_zsye.orth \ und_zmth.orth \ anp.orth \ bhb.orth \ hif.orth \ mag.orth \ raj.orth \ the.orth \ agr.orth \ ayc.orth \ bem.orth \ ckb.orth \ cmn.orth \ dsb.orth \ hak.orth \ lij.orth \ lzh.orth \ mfe.orth \ mhr.orth \ miq.orth \ mjw.orth \ mnw.orth \ nan.orth \ nhn.orth \ niu.orth \ rif.orth \ sgs.orth \ shn.orth \ szl.orth \ tcy.orth \ tpi.orth \ unm.orth \ wae.orth \ yue.orth \ yuw.orth \ got.orth \ cop.orth # ^-------------- Add new orth files here BUILT_SOURCES += $(top_builddir)/conf.d/35-lang-normalize.conf DISTCLEANFILES = $(BUILT_SOURCES) $(top_builddir)/conf.d/35-lang-normalize.conf: $(ORTH) Makefile $(AM_V_GEN) echo "" > $@ && \ echo "" >> $@ && \ echo "" >> $@ && \ for i in `echo $(ORTH) | sed -e 's/ /\n/g' | grep -v _ | sed -e 's/\.orth$$//g' | sort`; do \ echo " " >> $@; \ echo " " >> $@; \ echo " $$i" >> $@; \ echo " $$i" >> $@; \ echo " " >> $@; \ done && \ echo "" >> $@ -include $(top_srcdir)/git.mk fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/README000066400000000000000000000017471503113465200235720ustar00rootroot00000000000000Requirements for adding new orth file: * we are following up to the locale name, 2 or 3 letter code in ISO 639 and ISO 3166-1 alpha-2 code to determine a filename. if it's not yet available, in advance, you should get it fixed in glibc or so. * Please add a reference URL (written in English as far as possible) into the orth file that explains the code coverage for the certain language. this would helps to review if it has enough coverage. * no need to add all of the codepoints for the certain language. good enough if it covers most frequently used codepoints in it. To update existing orth files: * Please make sure how the changes affects to the existing fonts and no regressions except it is expected behavior. * Please add any reference URL in GitLab or any explanation why it needs to be added/removed and also why current orth file doesn't work. * Please provide a test case what fonts are supposed to be accepted against the change and what fonts aren't. fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/aa.orth000066400000000000000000000034221503113465200241610ustar00rootroot00000000000000# # fontconfig/fc-lang/aa.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Afar (AA) # # Taken from http://www.arhotaba.com/waldegram.htm # and http://www.arhotaba.com/alphabet.htm # 0041-005a # afar doesn't use J, P, V or Z 0061-007a # afar doesn't use j, p, v or z 00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX 00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX 00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX 00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX 00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX 00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ab.orth000066400000000000000000000026141503113465200241640ustar00rootroot00000000000000# # fontconfig/fc-lang/ab.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Abkhazia (AB) # # Sources: # www.evertype.com # www.eki.ee/letter # #00ab # double angle quotes #00bb # double angle quotes 0401 040f 0410-044f 0451 045f 049e-049f 04a6-04a9 04ac-04ad 04b2-04b7 04bc-04bf 04d8 04d9 04e0-04e1 #2039-203a # angle quotes fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/af.orth000066400000000000000000000024701503113465200241700ustar00rootroot00000000000000# # fontconfig/fc-lang/af.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Afrikaans (AF) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 00c8 00e8 00c9 00e9 00ca 00ea 00cb 00eb 00ce 00ee 00cf 00ef 00d4 00f4 00db 00fb 0149 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/agr.orth000066400000000000000000000026051503113465200243530ustar00rootroot00000000000000# # fontconfig/fc-lang/agr.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Aguaruna (Latin) (anp) Endonym: Awajún # # See: # https://en.wikipedia.org/wiki/Aguaruna_language # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/agr_PE 0041-005a 0061-007a 00fa # ú LATIN SMALL LETTER U WITH ACUTE fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ak.orth000066400000000000000000000025411503113465200241740ustar00rootroot00000000000000# # fontconfig/fc-lang/ak.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Akan (ak) # # According to ISO 639-3, Akan is a macro-language of Twi and Fanti. # Information on the web indicates Twi and Fanti now have a unified # orthography. We include Twi. # include tw.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/am.orth000066400000000000000000000025441503113465200242010ustar00rootroot00000000000000# # fontconfig/fc-lang/am.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Amharic (AM) # # The same as Ethiopic # include gez.orth 1238-123f # xe-xWa 1268-126e # ve-vo 1278-127f # ce-cWa 1298-129f # Ne-NWa 12a8 # ea 12e0-12e8 # Ze-ZWa 1300-1307 # je-jWa 1328-132f # Ce-CWa fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/an.orth000066400000000000000000000026141503113465200242000ustar00rootroot00000000000000# # fontconfig/fc-lang/an.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Aragonese (an) # # Source: # * Consello d’a Fabla Aragonesa, "Normas graficas de l’aragonés", at # http://www.charrando.com/normasgraficas.pdf # 0041-005A 0061-007A 00C1 00C9 00CD 00D1 00D3 00DA 00DC 00E1 00E9 00ED 00F1 00F3 00FA 00FC fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/anp.orth000066400000000000000000000025061503113465200243600ustar00rootroot00000000000000# # fontconfig/fc-lang/anp.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Anguika (Devanagari script) (anp) # # See: # https://en.wikipedia.org/wiki/Angika # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/anp_IN include hi.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ar.orth000066400000000000000000000031601503113465200242010ustar00rootroot00000000000000# # fontconfig/fc-lang/ar.orth # # Copyright © 2002 Keith Packard # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Arabic (ar) # # We are assuming that: # * Most fonts that claim to support an Arabic letter actually do so; # * Most modern text rendering software use OpenType tables, instead of # directly using presentation forms. # * Some good Arabic fonts do not support codepoints for Arabic presentation # forms. # Thus, we are switching to general forms of Arabic letters. # # General forms: 0621-063a 0641-064a # Presentations forms: # fe80-fefc fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/as.orth000066400000000000000000000030461503113465200242050ustar00rootroot00000000000000# # fontconfig/fc-lang/as.orth # # Copyright © 2006 Keith Packard # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Assamese (as) # # Source: Unicode coverage and notes for Bengali script, Unicode internal # documents, Wikipedia articles 0981-0983 0985-098c 098f-0990 0993-09a8 09aa-09af # 09b0 # Assamese uses U+09F0 instead 09b2 09b6-09b9 09bc 09be-09c4 09c7-09c8 09cb-09cd # 09d7 # Only used as a part of U+09CC 09dc-09dd 09df # 09e0-09e3 # These are for Sanskrit 09f0-09f1 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ast.orth000066400000000000000000000025571503113465200243770ustar00rootroot00000000000000# # fontconfig/fc-lang/ast.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Orthography from http://www.evertype.com/alphabets/asturian.pdf # # Asturian/Bable/Leonese/Asturleonese (ast) # 0041-005a 0061-007a 00c1 00c9 00cd 00d1 00d3 00da 00dc 00e1 00e9 00ed 00f1 00f3 00fa 00fc 1e24 1e25 1e36 1e37 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/av.orth000066400000000000000000000032051503113465200242050ustar00rootroot00000000000000# # fontconfig/fc-lang/av.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Coverage taken from TITUS (Thesaurus Indogermanischer Text und # Sprachmaterialien) # # http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm # # Avaric (av) # 0401 0406 0410 0411 0412 0413 0414 0415 0416 0417 0418 0419 041a 041b 041c 041d 041e 041f 0420 0421 0422 0423 0424 0425 0426 0427 0428 0429 042a 042b 042c 042d 042e 042f 0430 0431 0432 0433 0434 0435 0436 0437 0438 0439 043a 043b 043c 043d 043e 043f 0440 0441 0442 0443 0444 0445 0446 0447 0448 0449 044a 044b 044c 044d 044e 044f 0451 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ay.orth000066400000000000000000000031131503113465200242060ustar00rootroot00000000000000# # fontconfig/fc-lang/ay.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Aymara (KW) # # Orthography from http://www.aymara.org/arusa/qillqa_eng.html # 0041-005a 0061-007a 00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS 00CF # LATIN CAPITAL LETTER I WITH DIAERESIS 00D1 # LATIN CAPITAL LETTER N WITH TILDE 00DC # LATIN CAPITAL LETTER U WITH DIAERESIS 00E4 # LATIN SMALL LETTER A WITH DIAERESIS 00EF # LATIN SMALL LETTER I WITH DIAERESIS 00F1 # LATIN SMALL LETTER N WITH TILDE 00FC # LATIN SMALL LETTER U WITH DIAERESIS fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ayc.orth000066400000000000000000000031151503113465200243530ustar00rootroot00000000000000# # fontconfig/fc-lang/ayc.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Aymara (Latin) (ayc) # # See: # https://en.wikipedia.org/wiki/Aymara_language # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/ayc_PE 0041-005a 0061-007a # Long vowels are indicated in the spelling with a diaeresis in writing: ä, ï, ü 00e4 # ä LATIN SMALL LETTER A WITH DIAERESIS 00ef # ï LATIN SMALL LETTER I WITH DIAERESIS 00fc # ü LATIN SMALL LETTER U WITH DIAERESIS 00f1 # ñ LATIN SMALL LETTER N WITH TILDEfontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/az_az.orth000066400000000000000000000043601503113465200247060ustar00rootroot00000000000000# # fontconfig/fc-lang/az_az.orth # # Copyright © 2002 Keith Packard # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Azerbaijani in Azerbaijan (az-AZ) # # The complete orthography was from http://www.evertype.com # # This had been verified with the latin and cyrillic orthographies found at # http://www.eki.ee/letter # # Cyrillic was removed because the switch to Latin is almost finished. # The letter “ä” is also deprecated and replaced with “ə” since 1992. # 0041-005a 0061-007a #00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS 00C7 # LATIN CAPITAL LETTER C WITH CEDILLA 00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS 00DC # LATIN CAPITAL LETTER U WITH DIAERESIS #00E4 # LATIN SMALL LETTER A WITH DIAERESIS 00E7 # LATIN SMALL LETTER C WITH CEDILLA 00F6 # LATIN SMALL LETTER O WITH DIAERESIS 00FC # LATIN SMALL LETTER U WITH DIAERESIS 011E # LATIN CAPITAL LETTER G WITH BREVE 011F # LATIN SMALL LETTER G WITH BREVE 0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE 0131 # LATIN SMALL LETTER DOTLESS I 015E # LATIN CAPITAL LETTER S WITH CEDILLA 015F # LATIN SMALL LETTER S WITH CEDILLA 018F # LATIN CAPITAL LETTER SCHWA 0259 # LATIN SMALL LETTER SCHWA #02BC # MODIFIER LETTER APOSTROPHE fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/az_ir.orth000066400000000000000000000025711503113465200247100ustar00rootroot00000000000000# # fontconfig/fc-lang/az_ir.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Azerbaijani in Iran (AZ-IR) # # Data from Roozbeh Pournader # # Iran's Azerbaijani uses Persian letters plus an obligatory HAMZA ABOVE # (only used over FARSI YEH). # include fa.orth 0654 # ARABIC HAMZA ABOVE fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ba.orth000066400000000000000000000043611503113465200241650ustar00rootroot00000000000000# # fontconfig/fc-lang/ba.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Bashkir (BA) # # Sources: # www.evertype.com # www.eki.ee/letter # #00AA # FEMININE ORDINAL INDICATOR #00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK * #0401 # CYRILLIC CAPITAL LETTER IO in evertype.com #0451 # CYRILLIC SMALL LETTER IO in evertype.com 0410-044f # CYRILLIC 0492 # CYRILLIC CAPITAL LETTER GHE WITH STROKE 0493 # CYRILLIC SMALL LETTER GHE WITH STROKE 0498 # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER 0499 # CYRILLIC SMALL LETTER ZE WITH DESCENDER 04A0 # CYRILLIC CAPITAL LETTER BASHKIR KA 04A1 # CYRILLIC SMALL LETTER BASHKIR KA 04A2 # CYRILLIC CAPITAL LETTER EN WITH DESCENDER 04A3 # CYRILLIC SMALL LETTER EN WITH DESCENDER 04AA # CYRILLIC CAPITAL LETTER ES WITH DESCENDER 04AB # CYRILLIC SMALL LETTER ES WITH DESCENDER 04AE # CYRILLIC CAPITAL LETTER STRAIGHT U 04AF # CYRILLIC SMALL LETTER STRAIGHT U 04BA # CYRILLIC CAPITAL LETTER SHHA 04BB # CYRILLIC SMALL LETTER SHHA 04D8 # CYRILLIC CAPITAL LETTER SCHWA 04D9 # CYRILLIC SMALL LETTER SCHWA 04E8 # CYRILLIC CAPITAL LETTER BARRED O 04E9 # CYRILLIC SMALL LETTER BARRED O #2018-2019 # single quotes #201c-201d # double quotes #2039-203a # angle quotes fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/be.orth000066400000000000000000000031501503113465200241640ustar00rootroot00000000000000# # fontconfig/fc-lang/be.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Byelorussian (BE) # # Sources: # www.evertype.com # www.eki.ee/letter # #00ab #00bb #02BC # MODIFIER LETTER APOSTROPHE #0401 # CYRILLIC CAPITAL LETTER IO evertype.com 0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I 040E # CYRILLIC CAPITAL LETTER SHORT U (Byelorussian) 0410-044f #0451 # CYRILLIC SMALL LETTER IO evertype.com 0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I 045E # CYRILLIC SMALL LETTER SHORT U (Byelorussian) #2039-203a # angle quotes fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/bem.orth000066400000000000000000000026111503113465200243420ustar00rootroot00000000000000# # fontconfig/fc-lang/bem.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Bemba (Latin) (bem) # # See: # https://en.wikipedia.org/wiki/Bemba_language # https://github.com/unicode-org/cldr/blob/main/common/main/bem.xml # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/bem_ZM 0041-005a 0061-007a fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ber_dz.orth000066400000000000000000000023611503113465200250460ustar00rootroot00000000000000# # fontconfig/fc-lang/ber_dz.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Berber in Algeria (ber-DZ) # # Algerian Berber is usually Kabyle include kab.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ber_ma.orth000066400000000000000000000031051503113465200250230ustar00rootroot00000000000000# # fontconfig/fc-lang/ber_ma.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Berber in Morocco (ber-MA) # # Tifinagh is the official script for Berber language(s) in Morocco. # The character list comes from Institut Royal de la Culture Amazighe (IRCAM). # Sources: # http://www.omniglot.com/writing/tifinagh.htm # http://www.win.tue.nl/~aeb/natlang/berber/tifinagh/tifinagh.html 2D30-2D31 2D33 2D37 2D39 2D3B-2D3D 2D40 2D43-2D45 2D47 2D49-2D4A 2D4D-2D4F 2D53-2D56 2D59-2D5C 2D5F 2D61-2D63 2D65 2D6F fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/bg.orth000066400000000000000000000032571503113465200241760ustar00rootroot00000000000000# # fontconfig/fc-lang/bg.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Bulgarian (BG) # # Sources: # www.evertype.com # www.eki.ee/letter # #0400 # CYRILLIC CAPITAL IE WITH GRAVE evertype.com #040d # CYRILLIC CAPITAL I WITH GRAVE evertype.com 0410-042a 042c 042e-042f 0430-044a 044c 044e-044f #0450 # CYRILLIC SMALL IE WITH GRAVE evertype.com #045d # CYRILLIC SMALL I WITH GRAVE evertype.com #0462 # CYRILLIC CAPITAL LETTER YAT evertype.com #0463 # CYRILLIC SMALL LETTER YAT evertype.com #046A # CYRILLIC CAPITAL LETTER BIG YUS evertype.com #046B # CYRILLIC SMALL LETTER BIG YUS evertype.com fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/bh.orth000066400000000000000000000023001503113465200241630ustar00rootroot00000000000000# # fontconfig/fc-lang/bh.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Bihari (Devanagari script) (BH) include hi.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/bhb.orth000066400000000000000000000025141503113465200243340ustar00rootroot00000000000000# # fontconfig/fc-lang/bhb.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Bhili (Devanagari script) (bhb) # # See: # https://en.wikipedia.org/wiki/Bhili_language # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/bhb_IN include hi.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/bho.orth000066400000000000000000000023041503113465200243460ustar00rootroot00000000000000# # fontconfig/fc-lang/bho.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Bhojpuri (Devanagari script) (BHO) include hi.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/bi.orth000066400000000000000000000027371503113465200242020ustar00rootroot00000000000000# # fontconfig/fc-lang/bi.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Bislama (BI) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 00c9 00e9 00cf 00ef #e000 # LATIN CAPITAL LETTER M WITH MACRON (no UCS code) #e001 # LATIN SMALL LETTER M WITH MACRON (no UCS code) #e002 # LATIN CAPITAL LETTER P WITH MACRON (no UCS code) #e003 # LATIN SMALL LETTER P WITH MACRON (no UCS code) 00dc 00fc fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/bin.orth000066400000000000000000000044451503113465200243560ustar00rootroot00000000000000# # fontconfig/fc-lang/bin.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Edo or Bini (BIN) # # Orthography from http://www.ideography.co.uk/library/pdf/charsets.pdf # 0041-005a 0061-007a 00C0 # LATIN CAPITAL LETTER A WITH GRAVE 00C1 # LATIN CAPITAL LETTER A WITH ACUTE 00C8 # LATIN CAPITAL LETTER E WITH GRAVE 00C9 # LATIN CAPITAL LETTER E WITH ACUTE 00CC # LATIN CAPITAL LETTER I WITH GRAVE 00CD # LATIN CAPITAL LETTER I WITH ACUTE 00D2 # LATIN CAPITAL LETTER O WITH GRAVE 00D3 # LATIN CAPITAL LETTER O WITH ACUTE 00D9 # LATIN CAPITAL LETTER U WITH GRAVE 00DA # LATIN CAPITAL LETTER U WITH ACUTE 00E0 # LATIN SMALL LETTER A WITH GRAVE 00E1 # LATIN SMALL LETTER A WITH ACUTE 00E8 # LATIN SMALL LETTER E WITH GRAVE 00E9 # LATIN SMALL LETTER E WITH ACUTE 00EC # LATIN SMALL LETTER I WITH GRAVE 00ED # LATIN SMALL LETTER I WITH ACUTE 00F2 # LATIN SMALL LETTER O WITH GRAVE 00F3 # LATIN SMALL LETTER O WITH ACUTE 00F9 # LATIN SMALL LETTER U WITH GRAVE 00FA # LATIN SMALL LETTER U WITH ACUTE 1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW 1EB9 # LATIN SMALL LETTER E WITH DOT BELOW 1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW 1ECD # LATIN SMALL LETTER O WITH DOT BELOW 0300 # COMBINING GRAVE ACCENT (Varia) 0301 # COMBINING ACUTE ACCENT (Oxia, Tonos) fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/bm.orth000066400000000000000000000024111503113465200241730ustar00rootroot00000000000000# # fontconfig/fc-lang/bm.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Bambara (bm) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 0190 025b 014a 014b 019d 0272 0186 0254 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/bn.orth000066400000000000000000000030061503113465200241750ustar00rootroot00000000000000# # fontconfig/fc-lang/bn.orth # # Copyright © 2002 Keith Packard # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Bengali (bn) # # Source: Unicode coverage and notes for Bengali script, Unicode internal # documents 0981-0983 0985-098c 098f-0990 0993-09a8 09aa-09b0 09b2 09b6-09b9 09bc 09be-09c4 09c7-09c8 09cb-09cd # 09d7 # Only used as a part of U+09CC 09dc-09dd 09df # 09e0-09e3 # These are for Sanskrit # 09f0-09f1 # These are for Assamese fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/bo.orth000066400000000000000000000026251503113465200242040ustar00rootroot00000000000000# # fontconfig/fc-lang/bo.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Tibetan (BO) # # Taken from the Unicode coverage of this language # 0f40-0f47 0f49-0f69 0f71-0f76 0f78 0f7a-0f7d 0f80-0f81 0f90-0f97 0f99-0fb9 # Fixed-form subjoined consonants # These characters are used only for transliteration and transcription. #0fba-0fbc fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/br.orth000066400000000000000000000036341503113465200242100ustar00rootroot00000000000000# # fontconfig/fc-lang/br.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Breton (BR) # # Sources: # www.evertype.com # www.eki.ee/letter # #0027 0041-005a 0061-007a #00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK * #00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK * 00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 00D1 # LATIN CAPITAL LETTER N WITH TILDE 00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX eki.ee 00D9 # LATIN CAPITAL LETTER U WITH GRAVE 00DC # LATIN CAPITAL LETTER U WITH DIAERESIS 00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX 00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX 00F1 # LATIN SMALL LETTER N WITH TILDE 00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX eki.ee 00F9 # LATIN SMALL LETTER U WITH GRAVE 00FC # LATIN SMALL LETTER U WITH DIAERESIS #2019-201a # single quote and comma fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/brx.orth000066400000000000000000000036571503113465200244050ustar00rootroot00000000000000# # fontconfig/fc-lang/brx.orth # # Copyright © 2012 Parag Nemade # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of Keith Packard not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. Keith Packard makes no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Bodo (Devanagari script) (brx) # # Source: Enhanced inscript: http://pune.cdac.in/html/gist/down/inscript_d.asp # Or # Source: http://malayalam.kerala.gov.in/images/8/80/Qwerty_enhancedinscriptkeyboardlayout.pdf Page No. 44 # 0901-0903 # Various Signs 0905-090c # Independent vowels 090f-0910 # Independent vowels 0913-0914 # Independent vowels 0915-0928 # Consonants 092a-0930 # Consonants 0932-0932 # Consonants 0935-0939 # Consonants 093c-0944 # Various and Dependent vowel signs 0947-0948 # Dependent vowel signs 094b-094d # Dependent vowel signs and virama 0950-0952 # Sign and vedic tone marks 0960-0963 # Additional vowels 0964-0965 # Punctuations 0966-096F # Digits 0970 # Abbreviation sign fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/bs.orth000066400000000000000000000024231503113465200242040ustar00rootroot00000000000000# # fontconfig/fc-lang/bs.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Bosnian (BS) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 0106 0107 010c 010d 0110 0111 0160 0161 017d 017e fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/bua.orth000066400000000000000000000034351503113465200243530ustar00rootroot00000000000000# # fontconfig/fc-lang/bua.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Coverage taken from TITUS (Thesaurus Indogermanischer Text und # Sprachmaterialien) # # http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm # # Buriat (Buryat) (BUA) # 0401 0410 0411 0412 0413 0414 0415 0416 0417 0418 0419 041a 041b 041c 041d 041e 041f 0420 0421 0422 0423 0424 0425 0426 0427 0428 0429 042a 042b 042c 042d 042e 042f 0430 0431 0432 0433 0434 0435 0436 0437 0438 0439 043a 043b 043c 043d 043e 043f 0440 0441 0442 0443 0444 0445 0446 0447 0448 0449 044a 044b 044c 044d 044e 044f 0451 #0472 # CYRILLIC CAPITAL LETTER FITA (Historic cyrillic letter) #0473 # CYRILLIC SMALL LETTER FITA (Historic cyrillic letter) 04ae 04af 04ba 04bb fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/byn.orth000066400000000000000000000023571503113465200243760ustar00rootroot00000000000000# # fontconfig/fc-lang/byn.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Blin/Bilin (byn) # # Copying Tigrinya of Eritrea, as does glibc include ti_er.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ca.orth000066400000000000000000000045231503113465200241660ustar00rootroot00000000000000# # fontconfig/fc-lang/ca.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Catalan (CA) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a #00B7 # MIDDLE DOT 00C0 # LATIN CAPITAL LETTER A WITH GRAVE 00C7 # LATIN CAPITAL LETTER C WITH CEDILLA 00C8 # LATIN CAPITAL LETTER E WITH GRAVE 00C9 # LATIN CAPITAL LETTER E WITH ACUTE 00CD # LATIN CAPITAL LETTER I WITH ACUTE 00CF # LATIN CAPITAL LETTER I WITH DIAERESIS #00D1 # LATIN CAPITAL LETTER N WITH TILDE "important" @ eki.ee 00D2 # LATIN CAPITAL LETTER O WITH GRAVE 00D3 # LATIN CAPITAL LETTER O WITH ACUTE 00DA # LATIN CAPITAL LETTER U WITH ACUTE 00DC # LATIN CAPITAL LETTER U WITH DIAERESIS 00E0 # LATIN SMALL LETTER A WITH GRAVE 00E7 # LATIN SMALL LETTER C WITH CEDILLA 00E8 # LATIN SMALL LETTER E WITH GRAVE 00E9 # LATIN SMALL LETTER E WITH ACUTE 00ED # LATIN SMALL LETTER I WITH ACUTE 00EF # LATIN SMALL LETTER I WITH DIAERESIS #00F1 # LATIN SMALL LETTER N WITH TILDE "important" @ eki.ee 00F2 # LATIN SMALL LETTER O WITH GRAVE 00F3 # LATIN SMALL LETTER O WITH ACUTE 00FA # LATIN SMALL LETTER U WITH ACUTE 00FC # LATIN SMALL LETTER U WITH DIAERESIS 013F # LATIN CAPITAL LETTER L WITH MIDDLE DOT 0140 # LATIN SMALL LETTER L WITH MIDDLE DOT #2018-2019 # single quotes #201c-201d # double quotes fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ce.orth000066400000000000000000000032061503113465200241670ustar00rootroot00000000000000# # fontconfig/fc-lang/ce.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Coverage taken from TITUS (Thesaurus Indogermanischer Text und # Sprachmaterialien) # # http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm # # Chechen (CE) # 0401 0406 0410 0411 0412 0413 0414 0415 0416 0417 0418 0419 041a 041b 041c 041d 041e 041f 0420 0421 0422 0423 0424 0425 0426 0427 0428 0429 042a 042b 042c 042d 042e 042f 0430 0431 0432 0433 0434 0435 0436 0437 0438 0439 043a 043b 043c 043d 043e 043f 0440 0441 0442 0443 0444 0445 0446 0447 0448 0449 044a 044b 044c 044d 044e 044f 0451 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ch.orth000066400000000000000000000024001503113465200241650ustar00rootroot00000000000000# # fontconfig/fc-lang/ch.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Chamorro (CH) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 00c2 00e2 00d1 00f1 00dc 00fc fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/chm.orth000066400000000000000000000034761503113465200243600ustar00rootroot00000000000000# # fontconfig/fc-lang/chm.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Coverage taken from TITUS (Thesaurus Indogermanischer Text und # Sprachmaterialien) # # http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm # # Mari (Lower Cheremis / Upper Cheremis) (CHM) # # I've merged both of these languages together so that a font # for 'chm' will cover both orthographies # 0401 0410 0411 0412 0413 0414 0415 0416 0417 0418 0419 041a 041b 041c 041d 041e 041f 0420 0421 0422 0423 0424 0425 0426 0427 0428 0429 042a 042b 042c 042d 042e 042f 0430 0431 0432 0433 0434 0435 0436 0437 0438 0439 043a 043b 043c 043d 043e 043f 0440 0441 0442 0443 0444 0445 0446 0447 0448 0449 044a 044b 044c 044d 044e 044f 0451 04a4 04a5 04d2 04d3 04e6 04e7 04f0 04f1 04f8 04f9 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/chr.orth000066400000000000000000000022521503113465200243540ustar00rootroot00000000000000# # fontconfig/fc-lang/chr.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Cherokee (chr) 13a0-13f4 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ckb.orth000066400000000000000000000030151503113465200243350ustar00rootroot00000000000000# # fontconfig/fc-lang/ckb.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Central Kurdish (ckb) # # See: # https://en.wikipedia.org/wiki/Sorani # https://en.wikipedia.org/wiki/Kurdish_alphabets#Sorani_alphabet # https://github.com/unicode-org/cldr/blob/main/common/main/ckb.xml # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/ckb_IQ # Assuming central Kurdish uses the same orthography as Iranian Kurdish include ku_ir.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/cmn.orth000066400000000000000000000025101503113465200243520ustar00rootroot00000000000000# # fontconfig/fc-lang/cmn.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Mandarin Chinese (cmn) # # See: # https://en.wikipedia.org/wiki/Mandarin_Chinese # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/cmn_TW include zh_tw.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/co.orth000066400000000000000000000022561503113465200242050ustar00rootroot00000000000000# # fontconfig/fc-lang/co.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Corsican (CO) include fr.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/cop.orth000066400000000000000000000003171503113465200243610ustar00rootroot00000000000000# Copyright (C) 2024 fontconfig Authors # SPDX-License-Identifier: HPND # # Coptic (cop) # # https://en.wikipedia.org/wiki/Coptic_script 03E2-03EF # Greek and Coptic 2C80-2CF3 # Coptic 2CF9-2CFF # Coptic fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/crh.orth000066400000000000000000000027621503113465200243620ustar00rootroot00000000000000# # fontconfig/fc-lang/crh.orth # # Copyright © 2009 Roozbeh Pournader # Copyright © 2009 Reşat SABIQ # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Crimean Tatar/Crimean Turkish (crh) # # Sources: # * http://www.omniglot.com/writing/crimeantatar.php # * http://en.wikipedia.org/wiki/Crimean_Tatar_language # * http://www.vatankirim.net/yazi.asp?yaziNo=31 # 0041-005A 0061-007A 00C2 00C7 00D1 00D6 00DC 00E2 00E7 00F1 00F6 00FC 011E-011F 0130-0131 015E-015F fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/cs.orth000066400000000000000000000054451503113465200242140ustar00rootroot00000000000000# # fontconfig/fc-lang/cs.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Czech (CS) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a 00C1 # LATIN CAPITAL LETTER A WITH ACUTE #00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS evertype.com 00C9 # LATIN CAPITAL LETTER E WITH ACUTE 00CD # LATIN CAPITAL LETTER I WITH ACUTE 00D3 # LATIN CAPITAL LETTER O WITH ACUTE #00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS evertype.com 00DA # LATIN CAPITAL LETTER U WITH ACUTE #00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com 00DD # LATIN CAPITAL LETTER Y WITH ACUTE 00E1 # LATIN SMALL LETTER A WITH ACUTE #00E4 # LATIN SMALL LETTER A WITH DIAERESIS evertype.com 00E9 # LATIN SMALL LETTER E WITH ACUTE 00ED # LATIN SMALL LETTER I WITH ACUTE 00F3 # LATIN SMALL LETTER O WITH ACUTE #00F6 # LATIN SMALL LETTER O WITH DIAERESIS evertype.com 00FA # LATIN SMALL LETTER U WITH ACUTE #00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com 00FD # LATIN SMALL LETTER Y WITH ACUTE 010C # LATIN CAPITAL LETTER C WITH CARON 010D # LATIN SMALL LETTER C WITH CARON 010E # LATIN CAPITAL LETTER D WITH CARON 010F # LATIN SMALL LETTER D WITH CARON 011A # LATIN CAPITAL LETTER E WITH CARON 011B # LATIN SMALL LETTER E WITH CARON 0147 # LATIN CAPITAL LETTER N WITH CARON 0148 # LATIN SMALL LETTER N WITH CARON 0158 # LATIN CAPITAL LETTER R WITH CARON 0159 # LATIN SMALL LETTER R WITH CARON 0160 # LATIN CAPITAL LETTER S WITH CARON 0161 # LATIN SMALL LETTER S WITH CARON 0164 # LATIN CAPITAL LETTER T WITH CARON 0165 # LATIN SMALL LETTER T WITH CARON 016E # LATIN CAPITAL LETTER U WITH RING ABOVE 016F # LATIN SMALL LETTER U WITH RING ABOVE 017D # LATIN CAPITAL LETTER Z WITH CARON 017E # LATIN SMALL LETTER Z WITH CARON fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/csb.orth000066400000000000000000000027461503113465200243570ustar00rootroot00000000000000# # fontconfig/fc-lang/csb.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Kashubian (CSB) # # Sources: # http://www.omniglot.com/writing/kashubian.htm # http://www.evertype.com/alphabets/kashubian.pdf # 0041-005A 0061-007A 00C3 00C9 00CB 00D2-00D4 00D9 00E3 00E9 00EB 00F2-00F4 00F9 0104-0105 #0118-0119 # E with ogonek - only in evertype 0141-0144 #015A-015B # S with acute - only in evertype 017B-017C fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/cu.orth000066400000000000000000000025541503113465200242140ustar00rootroot00000000000000# # fontconfig/fc-lang/cu.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Old Church Slavonic (CU) # # Orthography from http://www.evertype.com/alphabets/old-church-slavonic.pdf # 0401-0402 0405-0406 0408 040b 040d 040f-0418 041a-042c 042e-044c 044e-0450 0452 0455-456 0458 045b 045d 045f-0479 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/cv.orth000066400000000000000000000035001503113465200242050ustar00rootroot00000000000000# # fontconfig/fc-lang/cv.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Coverage taken from TITUS (Thesaurus Indogermanischer Text und # Sprachmaterialien) # # http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm # # Chuvash (CV) # # # I'm guessing the c cedilla is really es with descender # #00c7 # C cedilla #00e7 # c cedilla 04aa # capital es with descender 04ab # small es with descender 0102 0103 0401 0410 0411 0412 0413 0414 0415 0416 0417 0418 0419 041a 041b 041c 041d 041e 041f 0420 0421 0422 0423 0424 0425 0426 0427 0428 0429 042a 042b 042c 042d 042e 042f 0430 0431 0432 0433 0434 0435 0436 0437 0438 0439 043a 043b 043c 043d 043e 043f 0440 0441 0442 0443 0444 0445 0446 0447 0448 0449 044a 044b 044c 044d 044e 044f 0451 04d6 04d7 04f2 04f3 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/cy.orth000066400000000000000000000050521503113465200242140ustar00rootroot00000000000000# # fontconfig/fc-lang/cy.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Welsh (CY) # # Coverage given by Markus Kuhn # and separately by Jessica Perry Hekman # with help from Mark Kille and Jerry Hunter. # 0041-005a 0061-007a 00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 00C9 # LATIN CAPITAL LETTER E WITH ACUTE 00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 00CF # LATIN CAPITAL LETTER I WITH DIAERESIS 00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX 00E9 # LATIN SMALL LETTER E WITH ACUTE 00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX 00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX 00EF # LATIN SMALL LETTER I WITH DIAERESIS 00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX 00FF # LATIN SMALL LETTER Y WITH DIAERESIS # # Non-Latin-1 characters needed for Welsh: # 0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX 0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX 0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX 0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX 0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS # # And stricktly speaking for dictionary authors also: # 1E80 # LATIN CAPITAL LETTER W WITH GRAVE 1E81 # LATIN SMALL LETTER W WITH GRAVE 1E82 # LATIN CAPITAL LETTER W WITH ACUTE 1E83 # LATIN SMALL LETTER W WITH ACUTE 1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS 1E85 # LATIN SMALL LETTER W WITH DIAERESIS 1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE 1EF3 # LATIN SMALL LETTER Y WITH GRAVE fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/da.orth000066400000000000000000000073161503113465200241720ustar00rootroot00000000000000# # fontconfig/fc-lang/da.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Danish (DA) # # Sources: # www.evertype.com # www.eki.ee/letter # Note: # The sources cited at www.evertype.com appear to have unified # all of the nordic languages making the orthography significantly # larger than needed for Danish. The orthography used here is # just that from eki.ee with the evertype.com additions commented out # 0041-005a 0061-007a #00ab #00bb #00C0 # LATIN CAPITAL LETTER A WITH GRAVE 00C1 # LATIN CAPITAL LETTER A WITH ACUTE #00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX #00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS 00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE 00C6 # LATIN CAPITAL LETTER AE (ash) * #00C7 # LATIN CAPITAL LETTER C WITH CEDILLA #00C8 # LATIN CAPITAL LETTER E WITH GRAVE 00C9 # LATIN CAPITAL LETTER E WITH ACUTE #00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX #00CB # LATIN CAPITAL LETTER E WITH DIAERESIS 00CD # LATIN CAPITAL LETTER I WITH ACUTE #00D0 # LATIN CAPITAL LETTER ETH (Icelandic) 00D3 # LATIN CAPITAL LETTER O WITH ACUTE #00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX #00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS 00D8 # LATIN CAPITAL LETTER O WITH STROKE 00DA # LATIN CAPITAL LETTER U WITH ACUTE #00DC # LATIN CAPITAL LETTER U WITH DIAERESIS 00DD # LATIN CAPITAL LETTER Y WITH ACUTE #00DE # LATIN CAPITAL LETTER THORN (Icelandic) #00E0 # LATIN SMALL LETTER A WITH GRAVE 00E1 # LATIN SMALL LETTER A WITH ACUTE #00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX #00E4 # LATIN SMALL LETTER A WITH DIAERESIS 00E5 # LATIN SMALL LETTER A WITH RING ABOVE 00E6 # LATIN SMALL LETTER AE (ash) * #00E7 # LATIN SMALL LETTER C WITH CEDILLA #00E8 # LATIN SMALL LETTER E WITH GRAVE 00E9 # LATIN SMALL LETTER E WITH ACUTE #00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX #00EB # LATIN SMALL LETTER E WITH DIAERESIS 00ED # LATIN SMALL LETTER I WITH ACUTE #00F0 # LATIN SMALL LETTER ETH (Icelandic) 00F3 # LATIN SMALL LETTER O WITH ACUTE #00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX #00F6 # LATIN SMALL LETTER O WITH DIAERESIS 00F8 # LATIN SMALL LETTER O WITH STROKE 00FA # LATIN SMALL LETTER U WITH ACUTE #00FC # LATIN SMALL LETTER U WITH DIAERESIS 00FD # LATIN SMALL LETTER Y WITH ACUTE #00FE # LATIN SMALL LETTER THORN (Icelandic) #0152 # LATIN CAPITAL LIGATURE OE #0153 # LATIN SMALL LIGATURE OE #01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE #01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE #01FC # LATIN CAPITAL LETTER AE WITH ACUTE (ash) * #01FD # LATIN SMALL LETTER AE WITH ACUTE (ash) * #01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE #01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE #2039-203a # angle quotes fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/de.orth000066400000000000000000000035521503113465200241740ustar00rootroot00000000000000# # fontconfig/fc-lang/de.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # German (DE) # # Sources: # www.evertype.com # www.eki.ee/letter # #00ab #00bb 0041-005a 0061-007a #00C0 # LATIN CAPITAL LETTER A WITH GRAVE eki.ee 00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS #00C9 # LATIN CAPITAL LETTER E WITH ACUTE eki.ee 00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS 00DC # LATIN CAPITAL LETTER U WITH DIAERESIS 00DF # LATIN SMALL LETTER SHARP S (German) #00E0 # LATIN SMALL LETTER A WITH GRAVE eki.ee 00E4 # LATIN SMALL LETTER A WITH DIAERESIS #00E9 # LATIN SMALL LETTER E WITH ACUTE eki.ee 00F6 # LATIN SMALL LETTER O WITH DIAERESIS 00FC # LATIN SMALL LETTER U WITH DIAERESIS #2018 # single quotes #201a # single quotes #201c # double quotes #201e # double quotes #2039-203a # angle quotes fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/doi.orth000066400000000000000000000030371503113465200243550ustar00rootroot00000000000000# # fontconfig/fc-lang/doi.orth # # Copyright © 2012 Pravin Satpute # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Dogri (doi) # # Source: Enhanced inscript: http://malayalam.kerala.gov.in/images/8/80/Qwerty_enhancedinscriptkeyboardlayout.pdf Page No. 58 # Encircled these characters in Unicode chart: http://pravins.fedorapeople.org/Dogri-characters.pdf # documents 0902-0903 0905-090c 090f-0910 0913-0928 092a-0930 0932 0935-0939 093c-0944 0947-0948 094b-094d 0950-0952 095b-096f fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/dsb.orth000066400000000000000000000033221503113465200243470ustar00rootroot00000000000000# # fontconfig/fc-lang/dsb.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Lower Sorbian (dsb) # # See: # https://en.wikipedia.org/wiki/Lower_Sorbian_language # https://en.wikipedia.org/wiki/Sorbian_alphabet # # “The Sorbian alphabet is based on the ISO basic Latin alphabet but # uses diacritics such as the acute accent and the caron, making it # similar to the Czech and Polish alphabets. (This mixture is also # found in the Belarusian Latin alphabet.) The standard character # encoding for the Sorbian alphabet is ISO 8859-2 (Latin-2).” # # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/dsb_DE include cs.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/dv.orth000066400000000000000000000027061503113465200242150ustar00rootroot00000000000000# # fontconfig/fc-lang/dv.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Divehi/Dhivehi/Maldivian (dv) # # Sources: # * The Unicode standard # * http://www.omniglot.com/writing/thaana.htm # * http://en.wikipedia.org/wiki/T%C4%81na # 0780-0797 # main consonants 0798-07A5 # consonants used for loanwords 07A6-07B0 # vowels #07B1 # used only in dialectic or historic Divehi fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/dz.orth000066400000000000000000000023101503113465200242100ustar00rootroot00000000000000# # fontconfig/fc-lang/dz.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Dzongkha (DZ) # # Uses Tibetan script # include bo.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ee.orth000066400000000000000000000047051503113465200241760ustar00rootroot00000000000000# # fontconfig/fc-lang/ee.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Ewe (ee) # # Sources: # * http://www.uni-koeln.de/phil-fak/afrikanistik/down/publikationen/basic_ewe.pdf # * http://en.wikipedia.org/wiki/Ewe_language # * http://www.omniglot.com/writing/ewe.htm # * http://www.panafril10n.org/wikidoc/pmwiki.php/PanAfrLoc/Gbe # # We amend the main alphabet with tone marks over each vowel, but some # combinations lack precomposed forms in Unicode, so we also add individual # combining marks. # # Sources also differ on the notation used for the fourth tone: circumflex # vs combining line above (U+030D). At the moment, we are not including any # of the two. # # There is also a nasalization mark for vowels (combining tilde), but there # is a need for more research to find which vowels it's used with. The # combination of nasalization and tones may also exist, resulting in double # accents. # # C, J, and Q are not used. # 0041-005A 0061-007A 00C0-00C1 00C8-00C9 00CC-00CD 00D2-00D3 00D9-00DA 00E0-00E1 00E8-00E9 00EC-00ED 00F2-00F3 00F9-00FA 011A-011B 014A-014B 0186 0189 # 018A # according to Unicode characters notes for U+0257 0190-0192 0194 01B2 01CD-01D4 0254 0256 # 0257 # according to Unicode character notes 025B 0263 028B 0300-0301 # to be used with open e and open o # 0303 # combining tilde 030C # to be used with open e and open o # 030D # combining vertical line above fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/el.orth000066400000000000000000000023661503113465200242060ustar00rootroot00000000000000# # fontconfig/fc-lang/el.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Greek (EL) # # From vvas@hal.csd.auth.gr (Vasilis Vasaitis) # 0386 0388-038a 038c 038e-03a1 03a3-03ce fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/en.orth000066400000000000000000000024551503113465200242070ustar00rootroot00000000000000# # fontconfig/fc-lang/en.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # English (EN) 0041-005a 0061-007a 00c0 00c7-00cb 00cf 00d1 00d4 00d6 00e0 00e7-00eb 00ef 00f1 00f4 00f6 #2018-2019 # single quotes #201c-201d # double quotes fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/eo.orth000066400000000000000000000023571503113465200242110ustar00rootroot00000000000000# # fontconfig/fc-lang/eo.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Esperanto (EO) 0041-005a 0061-007a 0108-0109 011c-011d 0124-0125 0134-0135 015c-015d 016c-016d fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/es.orth000066400000000000000000000037561503113465200242210ustar00rootroot00000000000000# # fontconfig/fc-lang/es.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Spanish (ES) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a #00A1 # INVERTED EXCLAMATION MARK #00BF # INVERTED QUESTION MARK 00C1 # LATIN CAPITAL LETTER A WITH ACUTE #00C7 # LATIN CAPITAL LETTER C WITH CEDILLA important @eki.ee 00C9 # LATIN CAPITAL LETTER E WITH ACUTE 00CD # LATIN CAPITAL LETTER I WITH ACUTE 00D1 # LATIN CAPITAL LETTER N WITH TILDE 00D3 # LATIN CAPITAL LETTER O WITH ACUTE 00DA # LATIN CAPITAL LETTER U WITH ACUTE 00DC # LATIN CAPITAL LETTER U WITH DIAERESIS 00E1 # LATIN SMALL LETTER A WITH ACUTE #00E7 # LATIN SMALL LETTER C WITH CEDILLA important @eki.ee 00E9 # LATIN SMALL LETTER E WITH ACUTE 00ED # LATIN SMALL LETTER I WITH ACUTE 00F1 # LATIN SMALL LETTER N WITH TILDE 00F3 # LATIN SMALL LETTER O WITH ACUTE 00FA # LATIN SMALL LETTER U WITH ACUTE 00FC # LATIN SMALL LETTER U WITH DIAERESIS # fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/et.orth000066400000000000000000000035141503113465200242120ustar00rootroot00000000000000# # fontconfig/fc-lang/et.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Estonian (ET) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a 00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS 00D5 # LATIN CAPITAL LETTER O WITH TILDE 00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS 00DC # LATIN CAPITAL LETTER U WITH DIAERESIS 00E4 # LATIN SMALL LETTER A WITH DIAERESIS 00F5 # LATIN SMALL LETTER O WITH TILDE 00F6 # LATIN SMALL LETTER O WITH DIAERESIS 00FC # LATIN SMALL LETTER U WITH DIAERESIS 0160 # LATIN CAPITAL LETTER S WITH CARON 0161 # LATIN SMALL LETTER S WITH CARON 017D # LATIN CAPITAL LETTER Z WITH CARON 017E # LATIN SMALL LETTER Z WITH CARON #2018 # # single quote #201a # # single quote #201c # # double quote #201e # # double quote fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/eu.orth000066400000000000000000000035741503113465200242210ustar00rootroot00000000000000# # fontconfig/fc-lang/eu.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Basque (EU) # # Sources: # www.evertype.com # www.eki.ee/letter # # The orthography from evertype.com comes from the Académie de la Langue # Basque prior to 1926. eki.ee adds some additional letters, marked here # and commented out. I've also commented out some older letters # from the evertype.com orthography which are (apparently) no longer # in use # 0041-005a 0061-007a #00C7 # LATIN CAPITAL LETTER C WITH CEDILLA eki.ee 00D1 LATIN CAPITAL LETTER N WITH TILDE 00DC LATIN CAPITAL LETTER U WITH DIAERESIS #00E7 # LATIN SMALL LETTER C WITH CEDILLA eki.ee 00F1 LATIN SMALL LETTER N WITH TILDE 00FC LATIN SMALL LETTER U WITH DIAERESIS #0154 LATIN CAPITAL LETTER R WITH ACUTE evertype.com #0155 LATIN SMALL LETTER R WITH ACUTE evertype.com fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/fa.orth000066400000000000000000000055201503113465200241670ustar00rootroot00000000000000# # fontconfig/fc-lang/fa.orth # # Copyright © 2002 Keith Packard # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Persian (fa) # # Sources: # * ISIRI 6219:2002, "Information Technology — Persian Information # Interchange and Display Mechanism, using Unicode" # * "Dastur-e Khat-te Fārsi", Iranian Academy of Persian Language and # Literature, 4th printing, December 2005, ISBN 964-7531-13-3. Available # at http://www.persianacademy.ir/fa/das.aspx # # We are assuming that: # * Most fonts that claim to support an Arabic letter actually do so; # * Most modern text rendering software use OpenType tables, instead of # directly using presentation forms. # * Some good Arabic fonts do not support codepoints for Arabic presentation # forms. # Thus, we are switching to general forms of Arabic letters. # # General forms: 0621-0624 0626-0628 0629 # TEH MARBUTA, implicitly considered mandatory in the official orthography 062a-063a 0641-0642 0644-0648 064b # FATHATAN, considered mandatory in the official orthography # 064b-064d # DAMMATAN and KASRATAN, considered mandatory in the official orthography, but very rare # 064e-0650 # FATHA, DAMMA, and KASRA, not mandataroy in the official orthography # 0651 # SHADDA, considered mandatory only for legal texts # 0652 # SUKUN, not mandatory in the official orthography 0654 # HAMZA ABOVE, considered mandatory in the official orthography # 0656 # SUBSCRIPT ALEF, not mentioned in official orthography, but sometimes used # 0670 # SUPERSCRIPT ALEF, not explicilty listed in the official orthography, although used in the document; not mandatory 067e 0686 0698 06a9 06af 06cc # Presentations forms: #fb56-fb59 #fb7a-fb7d #fb8a-fb8b #fb8e-fb95 #fbfc-fbff #fe80-fe86 #fe89-fed8 #fedd-feee ##fef5-fef8 # These four happen very rarely #fefb-fefc fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/fat.orth000066400000000000000000000025441503113465200243560ustar00rootroot00000000000000# # fontconfig/fc-lang/fat.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Fanti (fat) # # According to ISO 639-3, Akan is a macro-language of Twi and Fanti. # Information on the web indicates Twi and Fanti now have a unified # orthography. We include Twi. # include tw.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/fc-lang.man000066400000000000000000000031621503113465200247070ustar00rootroot00000000000000.\" .\" Copyright © 2002 Keith Packard .\" .\" Permission to use, copy, modify, distribute, and sell this software and its .\" documentation for any purpose is hereby granted without fee, provided that .\" the above copyright notice appear in all copies and that both that .\" copyright notice and this permission notice appear in supporting .\" documentation, and that the name of the author(s) not be used in .\" advertising or publicity pertaining to distribution of the software without .\" specific, written prior permission. The authors make no .\" representations about the suitability of this software for any purpose. It .\" is provided "as is" without express or implied warranty. .\" .\" THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, .\" INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO .\" EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR .\" CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, .\" DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER .\" TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR .\" PERFORMANCE OF THIS SOFTWARE. .\" .\" .\" fontconfig/fc-lang/fc-lang.man .\" .TH FC-LANG 1 __vendorversion__ .SH NAME fc-lang, fclang.h \- create an database of language orthographies .SH SYNOPSIS .B "fc-lang" .RI [ language-coverage \|.\|.\|. ] .SH DESCRIPTION .I Fc-lang builds the fclang.h file used in the fontconfig library to automatically determine language coverage for fonts which don't contain this information. .SH FILES .TP 15 .B fclang.tmpl.h The template file in which the tables are inserted fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/fc-lang.py000077500000000000000000000312031503113465200245640ustar00rootroot00000000000000#!/usr/bin/env python3 # # fontconfig/fc-lang/fc-lang.py # # Copyright © 2001-2002 Keith Packard # Copyright © 2019 Tim-Philipp Müller # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # fc-lang # # Read a set of language orthographies and build C declarations for # charsets which can then be used to identify which languages are # supported by a given font. # # TODO: this code is not very pythonic, a lot of it is a 1:1 translation # of the C code and we could probably simplify it a bit import argparse import string import sys import os # we just store the leaves in a dict, we can order the leaves later if needed class CharSet: def __init__(self): self.leaves = {} # leaf_number -> leaf data (= 16 uint32) def add_char(self, ucs4): assert ucs4 < 0x01000000 leaf_num = ucs4 >> 8 if leaf_num in self.leaves: leaf = self.leaves[leaf_num] else: leaf = [0, 0, 0, 0, 0, 0, 0, 0] # 256/32 = 8 self.leaves[leaf_num] = leaf leaf[(ucs4 & 0xff) >> 5] |= (1 << (ucs4 & 0x1f)) #print('{:08x} [{:04x}] --> {}'.format(ucs4, ucs4>>8, leaf)) def del_char(self, ucs4): assert ucs4 < 0x01000000 leaf_num = ucs4 >> 8 if leaf_num in self.leaves: leaf = self.leaves[leaf_num] leaf[(ucs4 & 0xff) >> 5] &= ~(1 << (ucs4 & 0x1f)) # We don't bother removing the leaf if it's empty */ #print('{:08x} [{:04x}] --> {}'.format(ucs4, ucs4>>8, leaf)) def equals(self, other_cs): keys = sorted(self.leaves.keys()) other_keys = sorted(other_cs.leaves.keys()) if len(keys) != len(other_keys): return False for k1, k2 in zip(keys, other_keys): if k1 != k2: return False if not leaves_equal(self.leaves[k1], other_cs.leaves[k2]): return False return True # Convert a file name into a name suitable for C declarations def get_name(file_name): return file_name.split('.')[0] # Convert a C name into a language name def get_lang(c_name): return c_name.replace('_', '-').replace(' ', '').lower() def read_orth_file(file_name): lines = [] with open(file_name, 'r', encoding='utf-8') as orth_file: for num, line in enumerate(orth_file): if line.startswith('include '): include_fn = line[8:].strip() lines += read_orth_file(include_fn) else: # remove comments and strip whitespaces line = line.split('#')[0].strip() line = line.split('\t')[0].strip() # skip empty lines if line: lines += [(file_name, num, line)] return lines def leaves_equal(leaf1, leaf2): for v1, v2 in zip(leaf1, leaf2): if v1 != v2: return False return True # Build a single charset from a source file # # The file format is quite simple, either # a single hex value or a pair separated with a dash def parse_orth_file(file_name, lines): charset = CharSet() for fn, num, line in lines: delete_char = line.startswith('-') if delete_char: line = line[1:] if line.find('-') != -1: parts = line.split('-') elif line.find('..') != -1: parts = line.split('..') else: parts = [line] start = int(parts.pop(0), 16) end = start if parts: end = int(parts.pop(0), 16) if parts: print('ERROR: {} line {}: parse error (too many parts)'.format(fn, num)) for ucs4 in range(start, end+1): if delete_char: charset.del_char(ucs4) else: charset.add_char(ucs4) assert charset.equals(charset) # sanity check for the equals function return charset if __name__=='__main__': parser = argparse.ArgumentParser() parser.add_argument('orth_files', nargs='+', help='List of .orth files') parser.add_argument('--directory', dest='directory', default=None) parser.add_argument('--template', dest='template_file', default=None) parser.add_argument('--output', dest='output_file', default=None) args = parser.parse_args() sets = [] names = [] langs = [] country = [] total_leaves = 0 LangCountrySets = {} # Open output file if args.output_file: sys.stdout = open(args.output_file, 'w', encoding='utf-8') # Read the template file if args.template_file: tmpl_file = open(args.template_file, 'r', encoding='utf-8') else: tmpl_file = sys.stdin # Change into source dir if specified (after opening other files) if args.directory: os.chdir(args.directory) orth_entries = {} for i, fn in enumerate(args.orth_files): orth_entries[fn] = i for fn in sorted(orth_entries.keys()): lines = read_orth_file(fn) charset = parse_orth_file(fn, lines) sets.append(charset) name = get_name(fn) names.append(name) lang = get_lang(name) langs.append(lang) if lang.find('-') != -1: country.append(orth_entries[fn]) # maps to original index language_family = lang.split('-')[0] if not language_family in LangCountrySets: LangCountrySets[language_family] = [] LangCountrySets[language_family] += [orth_entries[fn]] total_leaves += len(charset.leaves) # Find unique leaves leaves = [] for s in sets: for leaf_num in sorted(s.leaves.keys()): leaf = s.leaves[leaf_num] is_unique = True for existing_leaf in leaves: if leaves_equal(leaf, existing_leaf): is_unique = False break #print('unique: ', is_unique) if is_unique: leaves.append(leaf) # Find duplicate charsets duplicate = [] for i, s in enumerate(sets): dup_num = None if i >= 1: for j, s_cmp in enumerate(sets): if j >= i: break if s_cmp.equals(s): dup_num = j break duplicate.append(dup_num) tn = 0 off = {} for i, s in enumerate(sets): if duplicate[i]: continue off[i] = tn tn += len(s.leaves) # Scan the input until the marker is found # FIXME: this is a bit silly really, might just as well hardcode # the license header in the script and drop the template for line in tmpl_file: if line.strip() == '@@@': break print(line, end='') print('/* total size: {} unique leaves: {} */\n'.format(total_leaves, len(leaves))) print('#define LEAF0 ({} * sizeof (FcLangCharSet))'.format(len(sets))) print('#define OFF0 (LEAF0 + {} * sizeof (FcCharLeaf))'.format(len(leaves))) print('#define NUM0 (OFF0 + {} * sizeof (uintptr_t))'.format(tn)) print('#define SET(n) (n * sizeof (FcLangCharSet) + offsetof (FcLangCharSet, charset))') print('#define OFF(s,o) (OFF0 + o * sizeof (uintptr_t) - SET(s))') print('#define NUM(s,n) (NUM0 + n * sizeof (FcChar16) - SET(s))') print('#define LEAF(o,l) (LEAF0 + l * sizeof (FcCharLeaf) - (OFF0 + o * sizeof (intptr_t)))') print('#define fcLangCharSets (fcLangData.langCharSets)') print('#define fcLangCharSetIndices (fcLangData.langIndices)') print('#define fcLangCharSetIndicesInv (fcLangData.langIndicesInv)') assert len(sets) < 65536 # FIXME: need to change index type to 32-bit below then print(''' static const struct {{ FcLangCharSet langCharSets[{}]; FcCharLeaf leaves[{}]; uintptr_t leaf_offsets[{}]; FcChar16 numbers[{}]; {} langIndices[{}]; {} langIndicesInv[{}]; }} fcLangData = {{'''.format(len(sets), len(leaves), tn, tn, 'FcChar16 ', len(sets), 'FcChar16 ', len(sets))) # Dump sets print('{') for i, s in enumerate(sets): if duplicate[i]: j = duplicate[i] else: j = i print(' {{ "{}", {{ FC_REF_CONSTANT, {}, OFF({},{}), NUM({},{}) }} }}, /* {} */'.format( langs[i], len(sets[j].leaves), i, off[j], i, off[j], i)) print('},') # Dump leaves print('{') for l, leaf in enumerate(leaves): print(' {{ {{ /* {} */'.format(l), end='') for i in range(0, 8): # 256/32 = 8 if i % 4 == 0: print('\n ', end='') print(' 0x{:08x},'.format(leaf[i]), end='') print('\n } },') print('},') # Dump leaves print('{') for i, s in enumerate(sets): if duplicate[i]: continue print(' /* {} */'.format(names[i])) for n, leaf_num in enumerate(sorted(s.leaves.keys())): leaf = s.leaves[leaf_num] if n % 4 == 0: print(' ', end='') found = [k for k, unique_leaf in enumerate(leaves) if leaves_equal(unique_leaf,leaf)] assert found, "Couldn't find leaf in unique leaves list!" assert len(found) == 1 print(' LEAF({:3},{:3}),'.format(off[i], found[0]), end='') if n % 4 == 3: print('') if len(s.leaves) % 4 != 0: print('') print('},') print('{') for i, s in enumerate(sets): if duplicate[i]: continue print(' /* {} */'.format(names[i])) for n, leaf_num in enumerate(sorted(s.leaves.keys())): leaf = s.leaves[leaf_num] if n % 8 == 0: print(' ', end='') print(' 0x{:04x},'.format(leaf_num), end='') if n % 8 == 7: print('') if len(s.leaves) % 8 != 0: print('') print('},') # langIndices print('{') for i, s in enumerate(sets): fn = '{}.orth'.format(names[i]) print(' {}, /* {} */'.format(orth_entries[fn], names[i])) print('},') # langIndicesInv print('{') for i, k in enumerate(orth_entries.keys()): name = get_name(k) idx = names.index(name) print(' {}, /* {} */'.format(idx, name)) print('}') print('};\n') print('#define NUM_LANG_CHAR_SET {}'.format(len(sets))) num_lang_set_map = (len(sets) + 31) // 32; print('#define NUM_LANG_SET_MAP {}'.format(num_lang_set_map)) # Dump indices with country codes assert len(country) > 0 assert len(LangCountrySets) > 0 print('') print('static const FcChar32 fcLangCountrySets[][NUM_LANG_SET_MAP] = {') for k in sorted(LangCountrySets.keys()): langset_map = [0] * num_lang_set_map # initialise all zeros for entries_id in LangCountrySets[k]: langset_map[entries_id >> 5] |= (1 << (entries_id & 0x1f)) print(' {', end='') for v in langset_map: print(' 0x{:08x},'.format(v), end='') print(' }}, /* {} */'.format(k)) print('};\n') print('#define NUM_COUNTRY_SET {}\n'.format(len(LangCountrySets))) # Find ranges for each letter for faster searching # Dump sets start/finish for the fastpath print('static const FcLangCharSetRange fcLangCharSetRanges[] = {\n') for c in string.ascii_lowercase: # a-z start = 9999 stop = -1 for i, s in enumerate(sets): if names[i].startswith(c): start = min(start,i) stop = max(stop,i) print(' {{ {}, {} }}, /* {} */'.format(start, stop, c)) print('};\n') # And flush out the rest of the input file for line in tmpl_file: print(line, end='') sys.stdout.flush() fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/fclang.tmpl.h000066400000000000000000000022611503113465200252600ustar00rootroot00000000000000/* * fontconfig/fc-lang/fclang.tmpl.h * * Copyright © 2002 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ @@@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ff.orth000066400000000000000000000024301503113465200241710ustar00rootroot00000000000000# # fontconfig/fc-lang/ff.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Fulah (Fula) (ff) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 0181 0253 018a 0257 014a 014b 019d 0272 01b3-01b4 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/fi.orth000066400000000000000000000041471503113465200242030ustar00rootroot00000000000000# # fontconfig/fc-lang/fi.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Finnish (FI) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a #00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK * 00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS 00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE #00C6 # LATIN CAPITAL LETTER AE (ash) * evertype.com #00D5 # LATIN CAPITAL LETTER O WITH TILDE evertype.com 00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS #00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com 00E4 # LATIN SMALL LETTER A WITH DIAERESIS 00E5 # LATIN SMALL LETTER A WITH RING ABOVE #00E6 # LATIN SMALL LETTER AE (ash) * evertype.com #00F5 # LATIN SMALL LETTER O WITH TILDE evertype.com 00F6 # LATIN SMALL LETTER O WITH DIAERESIS #00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com 0160 # LATIN CAPITAL LETTER S WITH CARON 0161 # LATIN SMALL LETTER S WITH CARON 017D # LATIN CAPITAL LETTER Z WITH CARON 017E # LATIN SMALL LETTER Z WITH CARON #2019 # single quote #201d # double quote #203a # angle quote fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/fil.orth000066400000000000000000000031521503113465200243520ustar00rootroot00000000000000# # fontconfig/fc-lang/fil.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Filipino (fil) # # Sources: # * Paul Morrow, "A Brief Guide to Filipino Pronunciation", # http://www.mts.net/~pmorrow/filpro.htm # * Komisyon sa Wikang Filipino, "Ang Ortograpiya ng Wikang Pambansa", # http://wika.pbwiki.com/f/ORTOPDF.pdf (in Filipino) # * CLDR exemplar set for Filipino: # http://unicode.org/cldr/data/common/main/fil.xml # 0041-005A 0061-007A 00C0-00C2 00C8-00CA 00CC-00CE 00D1-00D4 00D9-00DB 00E0-00E2 00E8-00EA 00EC-00EE 00F1-00F4 00F9-00FB fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/fj.orth000066400000000000000000000026721503113465200242050ustar00rootroot00000000000000# # fontconfig/fc-lang/fj.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Fijian (KW) # # Orthography guessed from http://www.deeptrans.com/deeptrans/german.html # # There may be diacritical marks used, but I couldn't find any information # about them, nor any Fijian text using them. # # Fijian doesn't use h, x, z and uses f, j and p in loan words # 0041-005a 0061-007a fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/fo.orth000066400000000000000000000046641503113465200242150ustar00rootroot00000000000000# # fontconfig/fc-lang/fo.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Faroese (FO) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a 00C1 # LATIN CAPITAL LETTER A WITH ACUTE #00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS evertype.com #00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE evertype.com 00C6 # LATIN CAPITAL LETTER AE (ash) * 00CD # LATIN CAPITAL LETTER I WITH ACUTE 00D0 # LATIN CAPITAL LETTER ETH (Icelandic) 00D3 # LATIN CAPITAL LETTER O WITH ACUTE #00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS evertype.com 00D8 # LATIN CAPITAL LETTER O WITH STROKE 00DA # LATIN CAPITAL LETTER U WITH ACUTE #00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com 00DD # LATIN CAPITAL LETTER Y WITH ACUTE 00E1 # LATIN SMALL LETTER A WITH ACUTE #00E4 # LATIN SMALL LETTER A WITH DIAERESIS evertype.com #00E5 # LATIN SMALL LETTER A WITH RING ABOVE evertype.com 00E6 # LATIN SMALL LETTER AE (ash) * 00ED # LATIN SMALL LETTER I WITH ACUTE 00F0 # LATIN SMALL LETTER ETH (Icelandic) 00F3 # LATIN SMALL LETTER O WITH ACUTE #00F6 # LATIN SMALL LETTER O WITH DIAERESIS evertype.com 00F8 # LATIN SMALL LETTER O WITH STROKE 00FA # LATIN SMALL LETTER U WITH ACUTE #00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com 00FD # LATIN SMALL LETTER Y WITH ACUTE #2018 # single quote #201a # single quote #201c # double quote #201e # double quote fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/fr.orth000066400000000000000000000047621503113465200242170ustar00rootroot00000000000000# # fontconfig/fc-lang/fr.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # French (FR) 0041-005a 0061-007a 00C0 # LATIN CAPITAL LETTER A WITH GRAVE 00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 00E0 # LATIN SMALL LETTER A WITH GRAVE 00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX 00C7 # LATIN CAPITAL LETTER C WITH CEDILLA 00E7 # LATIN SMALL LETTER C WITH CEDILLA 00C8 # LATIN CAPITAL LETTER E WITH GRAVE 00E8 # LATIN SMALL LETTER E WITH GRAVE 00C9 # LATIN CAPITAL LETTER E WITH ACUTE 00E9 # LATIN SMALL LETTER E WITH ACUTE 00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX 00CB # LATIN CAPITAL LETTER E WITH DIAERESIS 00EB # LATIN SMALL LETTER E WITH DIAERESIS 00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX 00CF # LATIN CAPITAL LETTER I WITH DIAERESIS 00EF # LATIN SMALL LETTER I WITH DIAERESIS 00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX 0152 # LATIN CAPITAL LIGATURE OE 0153 # LATIN SMALL LIGATURE OE 00D9 # LATIN CAPITAL LETTER U WITH GRAVE 00F9 # LATIN SMALL LETTER U WITH GRAVE 00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX 00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX 00DC # LATIN CAPITAL LETTER U WITH DIAERESIS 00FC # LATIN SMALL LETTER U WITH DIAERESIS 0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS 00FF # LATIN SMALL LETTER Y WITH DIAERESIS 00C6 # LATIN CAPITAL LETTER AE (ash) * 00E6 # LATIN SMALL LETTER AE (ash) * fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/fur.orth000066400000000000000000000024661503113465200244030ustar00rootroot00000000000000# # fontconfig/fc-lang/fur.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Friulian (FUR) # # Orthography from http://www.evertype.com/alphabets/friulian.pdf # 0041-005a 0061-007a 00c0-00c2 00c8 00cc 00d2 00d9 00e0-00e2 00e8 00ec 00f2 00f9 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/fy.orth000066400000000000000000000030501503113465200242130ustar00rootroot00000000000000# # fontconfig/fc-lang/fy.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Frisian (FY) # # West Frisian orthography from # http://www.evertype.com/alphabets/west-frisian.pdf # # # Checked with orthography from eki.ee/letter which include # a few others (commented out here). # # Added in ß from German orthography # 0041-005a 0061-007a 00c2 00c4 00c9 00ca 00cb #00ce # eki.ee 00cf 00d4 00d6 00da 00db 00dc 00df 00e2 00e4 00e9 00ea 00eb #00ee # eki.ee 00ef 00f4 00f6 00fa 00fb 00fc fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ga.orth000066400000000000000000000072101503113465200241660ustar00rootroot00000000000000# # fontconfig/fc-lang/ga.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Irish (GA) # # Sources: # www.evertype.com # www.eki.ee/letter # # The orthography from evertype.com includes the lenited consonants # as indicated with seimhiu (dot above). I've included those here # even though they're not present in the orthography listed from eki.ee; # eki.ee mentions that the seimhiu form is still written but is # often written by a following h instead. # 0041-005a 0061-007a #00C0 # LATIN CAPITAL LETTER A WITH GRAVE evertype.com 00C1 # LATIN CAPITAL LETTER A WITH ACUTE #00C7 # LATIN CAPITAL LETTER C WITH CEDILLA evertype.com #00C8 # LATIN CAPITAL LETTER E WITH GRAVE evertype.com 00C9 # LATIN CAPITAL LETTER E WITH ACUTE #00CC # LATIN CAPITAL LETTER I WITH GRAVE evertype.com 00CD # LATIN CAPITAL LETTER I WITH ACUTE #00D2 # LATIN CAPITAL LETTER O WITH GRAVE evertype.com 00D3 # LATIN CAPITAL LETTER O WITH ACUTE #00D9 # LATIN CAPITAL LETTER U WITH GRAVE evertype.com 00DA # LATIN CAPITAL LETTER U WITH ACUTE #00E0 # LATIN SMALL LETTER A WITH GRAVE evertype.com 00E1 # LATIN SMALL LETTER A WITH ACUTE #00E7 # LATIN SMALL LETTER C WITH CEDILLA evertype.com #00E8 # LATIN SMALL LETTER E WITH GRAVE evertype.com 00E9 # LATIN SMALL LETTER E WITH ACUTE #00EC # LATIN SMALL LETTER I WITH GRAVE 00ED # LATIN SMALL LETTER I WITH ACUTE #00F2 # LATIN SMALL LETTER O WITH GRAVE evertype.com 00F3 # LATIN SMALL LETTER O WITH ACUTE #00F9 # LATIN SMALL LETTER U WITH GRAVE evertype.com 00FA # LATIN SMALL LETTER U WITH ACUTE 010A # LATIN CAPITAL LETTER C WITH DOT ABOVE 010B # LATIN SMALL LETTER C WITH DOT ABOVE 0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE 0121 # LATIN SMALL LETTER G WITH DOT ABOVE #017F # LATIN SMALL LETTER LONG S evertype.com #027C # LATIN SMALL LETTER R WITH LONG LEG evertype.com 1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE 1E03 # LATIN SMALL LETTER B WITH DOT ABOVE 1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE 1E0B # LATIN SMALL LETTER D WITH DOT ABOVE 1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE 1E1F # LATIN SMALL LETTER F WITH DOT ABOVE 1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE 1E41 # LATIN SMALL LETTER M WITH DOT ABOVE 1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE 1E57 # LATIN SMALL LETTER P WITH DOT ABOVE 1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE 1E61 # LATIN SMALL LETTER S WITH DOT ABOVE 1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE 1E6B # LATIN SMALL LETTER T WITH DOT ABOVE #1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE evertype.com #1680-169c # Ogham #2018-2019 # single quotes #201c-201d # double quotes #204a # tironian sign et fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/gd.orth000066400000000000000000000025741503113465200242010ustar00rootroot00000000000000# # fontconfig/fc-lang/gd.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Scots Gaelic (GD) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a 00c0 00c1 00c7 00c8 00c9 00cc 00d2 00d3 00d9 00e0 00e1 00e7 00e8 00e9 00ec 00f2 00f3 00f9 #2018-2019 # single quotes #201c-201d # double quotes fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/gez.orth000066400000000000000000000035641503113465200243740ustar00rootroot00000000000000# # fontconfig/fc-lang/gez.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Ethiopic (Geez) (eth) # # Taken from Unicode coverage (1200-137f) # # Sylables 1200-1206 # he-ho 1208-1216 # le-Ho, skip HWa 1218-1226 # me-`so, skip `sWa 1228-1230 # re-sWa 1238-1246 # re-qo 1248 # qWe 124a-124d # qWi-qW 1260-1267 # be-bWa 1270-1277 # te-to 1280-1286 # `he-`ho 1288 # hWe 128a-128d # hWi-hW 1290-1297 # ne-nWa 12a0-12a7 # a-o, skip ea 12a8-12ae # ke-ko 12b0 # kWe 12b2-12b5 # kWi-kW 12c8-12ce # we-wo 12d0-12d6 # `e-`o 12d8-12df # ze-zWa 12e8-12ee # ye-yo 12f0-12f7 # de-dWa 1308-130e # ge-go 1310 # gWe 1312-1315 # gWi-gW 1320-1328 # Te-TWa 1330-1346 # Pe-`So 1348-1356 # fe-po, skip pWa, rYa, mYa, fYa #1361-1368 # punctuation #1369-1371 # digits #1372-137c # numbers # fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/gl.orth000066400000000000000000000025411503113465200242030ustar00rootroot00000000000000# # fontconfig/fc-lang/gl.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Galician (GL) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a #00a1 #00ab #00bb #00bf 00c1 00c9 00cd 00d1 00d3 00da 00dc 00e1 00e9 00ed 00f1 00f3 00fa 00fc #2019-201a # single qutoes fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/gn.orth000066400000000000000000000025551503113465200242120ustar00rootroot00000000000000# # fontconfig/fc-lang/gn.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Guaraní (GN) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 00c1 00e1 00e3 00c9 00e9 1ebd #e005 # LATIN SMALL LETTER G WITH TILDE (no UCS) 00cd 00ed 0129 00d1 00f1 00d3 00f3 00f5 00da 00fa 0169 1ef9 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/got.orth000066400000000000000000000023441503113465200243730ustar00rootroot00000000000000# # fontconfig/fc-lang/got.orth # # Copyright © 2024 Akira TAGOH # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Gothic (got) # # See: # https://en.wikipedia.org/wiki/Gothic_alphabet # 10330-1034A fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/gu.orth000066400000000000000000000025341503113465200242160ustar00rootroot00000000000000# # fontconfig/fc-lang/gu.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Gujarati (gu) # # Taken from the Unicode coverage of this language # 0a81-0a83 0a85-0a8b 0a8d 0a8f-0a91 0a93-0aa8 0aaa-0ab0 0ab2-0ab3 0ab5-0ab9 0abc-0ac5 0ac7-0ac9 0acb-0acd 0ad0 0ae0 #0ae6-0aef # Digits fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/gv.orth000066400000000000000000000024101503113465200242100ustar00rootroot00000000000000# # fontconfig/fc-lang/gv.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Manx Gaelic (GV) # # Orthography from http://www.evertype.com/alphabets/manx-gaelic.pdf # 0041-005a 0061-007a 00c7 00e7 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ha.orth000066400000000000000000000024471503113465200241760ustar00rootroot00000000000000# # fontconfig/fc-lang/ha.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Hausa (HA) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 0181 0253 018a 0257 0198-0199 01b3 # used in Niger 01b4 # used in Niger fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/hak.orth000066400000000000000000000025021503113465200243410ustar00rootroot00000000000000# # fontconfig/fc-lang/hak.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Hakka Chinese (hak) # # See: # https://en.wikipedia.org/wiki/Hakka_Chinese # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/hak_TW include zh_tw.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/haw.orth000066400000000000000000000024331503113465200243600ustar00rootroot00000000000000# # fontconfig/fc-lang/haw.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Hawaiian (HAW) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 0100-0101 0112-0113 012a-012b 014c-014d 016a-016b 02bb fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/he.orth000066400000000000000000000022461503113465200241770ustar00rootroot00000000000000# # fontconfig/fc-lang/he.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Hebrew (HE) 05d0-05ea fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/hi.orth000066400000000000000000000026621503113465200242050ustar00rootroot00000000000000# # fontconfig/fc-lang/hi.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Hindi (Devanagari script) (HI) # # From Unicode coverage for Devanagari # 0905-0914 # Independent vowels 0915-0939 # Consonants 093f-094c # Dependent vowel signs 094d # virama #0958-095f # Additional consonants #0960-0965 # Generic additions #0966-096f # Digits #0970 # Abbreviation sign fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/hif.orth000066400000000000000000000025151503113465200243500ustar00rootroot00000000000000# # fontconfig/fc-lang/hif.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Fiji Hindi (Devanagari script) (hif) # # See: # https://en.wikipedia.org/wiki/Fiji_Hindi # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/hif_FJ include hi.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/hne.orth000066400000000000000000000024651503113465200243600ustar00rootroot00000000000000# # fontconfig/fc-lang/hne.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Chhattisgarhi (hne) # # The government of India considers this a dialect of Hindi: # including Hindi until further information is found. include hi.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ho.orth000066400000000000000000000026731503113465200242150ustar00rootroot00000000000000# # fontconfig/fc-lang/ho.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Hiri Motu (HO) # # I found one sample of Hiri Motu text, a translation of the first part of # Genesis at # http://rosettaproject.org:8080/live/search/showpages?ethnocode=POM&doctype=gen&version=1&scale=six # # It appears to use only ASCII glyphs, so we'll go with that for now # 0041-005a 0061-007a fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/hr.orth000066400000000000000000000031041503113465200242060ustar00rootroot00000000000000# # fontconfig/fc-lang/hr.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Croatian (HR) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a #00c0 # evertype.com #00c8 # evertype.com #00cc # evertype.com #00d2 # evertype.com #00d9 # evertype.com #00e0 # evertype.com #00e8 # evertype.com #00ec # evertype.com #00f2 # evertype.com #00f9 # evertype.com 0106-0107 010c-010d 0110-0111 0160-0161 017d-017e #01c4-01cc # evertype.com #01f1-01f5 # evertype.com #0200-0217 # evertype.com fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/hsb.orth000066400000000000000000000026541503113465200243620ustar00rootroot00000000000000# # fontconfig/fc-lang/hsb.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Upper Sorbian (hsb) # # Sources: # http://www.omniglot.com/writing/sorbian.htm # http://www.evertype.com/alphabets/upper-sorbian.pdf # # Q, V, and X are not used 0041-005A 0061-007A 00D3 00F3 0106-0107 010C-010D 011A-011B 0141-0144 0158-0159 0160-0161 0179-017A 017D-017E fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ht.orth000066400000000000000000000025521503113465200242160ustar00rootroot00000000000000# # fontconfig/fc-lang/ht.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Haitian/Haitian Creole (ht) # # Sources: # * http://www.omniglot.com/writing/haitiancreole.htm # * http://www.lecorde.com/creole/kreyol/index.php?page=Pronunciation # 0041-005A 0061-007A 00C8 00D2 00E8 00F2 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/hu.orth000066400000000000000000000026611503113465200242200ustar00rootroot00000000000000# # fontconfig/fc-lang/hu.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Hungarian (HU) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a #00C0 # LATIN CAPITAL LETTER A WITH GRAVE evertype.com 00c1 00c9 00cd 00d3 00d6 00da 00dc #00E0 # LATIN SMALL LETTER A WITH GRAVE evertype.com 00e1 00e9 00ed 00f3 00f6 00fa 00fc 0150-0151 0170-0171 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/hy.orth000066400000000000000000000022621503113465200242210ustar00rootroot00000000000000# # fontconfig/fc-lang/hy.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Armenian (HY) 0531-0556 0561-0587 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/hz.orth000066400000000000000000000025041503113465200242210ustar00rootroot00000000000000# # fontconfig/fc-lang/hz.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Herero (hz) # # Source: # * http://www.omniglot.com/writing/herero.php # # C, Q, and X are not used. # 0041-005A 0061-007A 032F # used under S and Z 1E12-1E13 1E4A-1E4B fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ia.orth000066400000000000000000000024111503113465200241660ustar00rootroot00000000000000# # fontconfig/fc-lang/ia.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Interlingua (IA) # # Orthography taken from http://www.geocities.com/linguablau/spelling_main.html # 0041-005a 0061-007a fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/id.orth000066400000000000000000000023561503113465200242010ustar00rootroot00000000000000# # fontconfig/fc-lang/id.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Indonesian (ID) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 00c9 00e9 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ie.orth000066400000000000000000000024441503113465200242000ustar00rootroot00000000000000# # fontconfig/fc-lang/ie.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Interlingue (IE) # # Source: http://interlingue.narod.ru/Haas.htm # 0041-005a 0061-007a 00c1 00c9 00cd 00d3 00da 00dd 00e1 00e9 00ed 00f3 00fa 00fd fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ig.orth000066400000000000000000000023741503113465200242040ustar00rootroot00000000000000# # fontconfig/fc-lang/ig.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Igbo (ig) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 1eca 1ecb 1ecc 1ecd 1ee4 1ee5 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ii.orth000066400000000000000000000027251503113465200242060ustar00rootroot00000000000000# # fontconfig/fc-lang/ii.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Sichuan Yi/Nuosu (ii) # # Sources: # * http://www.babelstone.co.uk/Yi/unicode.html # * http://www.babelstone.co.uk/Yi/script.html # * http://en.wikipedia.org/wiki/Yi_script # # As of Unicode 5.1, every encoded syllable (U+A000..A48C) is used. The # radicals (U+A490..A4C6) are for linguistic use only. # A000-A48C fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ik.orth000066400000000000000000000033401503113465200242020ustar00rootroot00000000000000# # fontconfig/fc-lang/ik.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Coverage taken from TITUS (Thesaurus Indogermanischer Text und # Sprachmaterialien) # # http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm # # Inupiaq (Inupiak, Eskimo) (IK) # # I'm making a guess that this is language is set using Cyrillic # 0401 040e 0410 0411 0412 0413 0414 0415 0416 0417 0418 0419 041a 041b 041c 041d 041e 041f 0420 0421 0422 0423 0424 0425 0426 0427 0428 0429 042a 042b 042c 042d 042e 042f 0430 0431 0432 0433 0434 0435 0436 0437 0438 0439 043a 043b 043c 043d 043e 043f 0440 0441 0442 0443 0444 0445 0446 0447 0448 0449 044a 044b 044c 044d 044e 044f 0451 045e fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/io.orth000066400000000000000000000023641503113465200242130ustar00rootroot00000000000000# # fontconfig/fc-lang/io.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Ido (IO) # # Orthography taken from http://www.homunculus.com/babel/aido.html # 0041-005a 0061-007a fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/is.orth000066400000000000000000000040331503113465200242120ustar00rootroot00000000000000# # fontconfig/fc-lang/is.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Icelandic (IS) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a 00c1 #00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS evertype.com #00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE evertype.com 00c6 00c9 #00CB # LATIN CAPITAL LETTER E WITH DIAERESIS evertype.com 00cd 00d0 00d3 #00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS eki.ee #00D8 # LATIN CAPITAL LETTER O WITH STROKE evertype.com 00da #00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com 00dd 00de 00e1 #00E4 # LATIN SMALL LETTER A WITH DIAERESIS evertype.com #00E5 # LATIN SMALL LETTER A WITH RING ABOVE evertype.com 00e6 00e9 00ed 00f0 00f3 #00F6 # LATIN SMALL LETTER O WITH DIAERESIS eki.ee #00F8 # LATIN SMALL LETTER O WITH STROKE evertype.com 00fa #00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com 00fd 00fe #2018 # single quote #201a # single quote #201c # double quote #201e # double quote fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/iso-3166.txt000066400000000000000000000103161503113465200246320ustar00rootroot00000000000000This list states the country names (official short names in English) in alphabetical order as given in ISO 3166-1 and the corresponding ISO 3166-1-alpha-2 code elements. The list is updated whenever a change to the official code list in ISO 3166-1 is effected by the ISO 3166/MA. It lists 240 official short names and code elements. One line of text contains one entry. A country name and its code element are separated by a semicolon (;). AFGHANISTAN;AF LAND ISLANDS;AX ALBANIA;AL ALGERIA;DZ AMERICAN SAMOA;AS ANDORRA;AD ANGOLA;AO ANGUILLA;AI ANTARCTICA;AQ ANTIGUA AND BARBUDA;AG ARGENTINA;AR ARMENIA;AM ARUBA;AW AUSTRALIA;AU AUSTRIA;AT AZERBAIJAN;AZ BAHAMAS;BS BAHRAIN;BH BANGLADESH;BD BARBADOS;BB BELARUS;BY BELGIUM;BE BELIZE;BZ BENIN;BJ BERMUDA;BM BHUTAN;BT BOLIVIA;BO BOSNIA AND HERZEGOVINA;BA BOTSWANA;BW BOUVET ISLAND;BV BRAZIL;BR BRITISH INDIAN OCEAN TERRITORY;IO BRUNEI DARUSSALAM;BN BULGARIA;BG BURKINA FASO;BF BURUNDI;BI CAMBODIA;KH CAMEROON;CM CANADA;CA CAPE VERDE;CV CAYMAN ISLANDS;KY CENTRAL AFRICAN REPUBLIC;CF CHAD;TD CHILE;CL CHINA;CN CHRISTMAS ISLAND;CX COCOS (KEELING) ISLANDS;CC COLOMBIA;CO COMOROS;KM CONGO;CG CONGO, THE DEMOCRATIC REPUBLIC OF THE;CD COOK ISLANDS;CK COSTA RICA;CR COTE D'IVOIRE;CI CROATIA;HR CUBA;CU CYPRUS;CY CZECH REPUBLIC;CZ DENMARK;DK DJIBOUTI;DJ DOMINICA;DM DOMINICAN REPUBLIC;DO ECUADOR;EC EGYPT;EG EL SALVADOR;SV EQUATORIAL GUINEA;GQ ERITREA;ER ESTONIA;EE ETHIOPIA;ET FALKLAND ISLANDS (MALVINAS);FK FAROE ISLANDS;FO FIJI;FJ FINLAND;FI FRANCE;FR FRENCH GUIANA;GF FRENCH POLYNESIA;PF FRENCH SOUTHERN TERRITORIES;TF GABON;GA GAMBIA;GM GEORGIA;GE GERMANY;DE GHANA;GH GIBRALTAR;GI GREECE;GR GREENLAND;GL GRENADA;GD GUADELOUPE;GP GUAM;GU GUATEMALA;GT GUINEA;GN GUINEA-BISSAU;GW GUYANA;GY HAITI;HT HEARD ISLAND AND MCDONALD ISLANDS;HM HOLY SEE (VATICAN CITY STATE);VA HONDURAS;HN HONG KONG;HK HUNGARY;HU ICELAND;IS INDIA;IN INDONESIA;ID IRAN, ISLAMIC REPUBLIC OF;IR IRAQ;IQ IRELAND;IE ISRAEL;IL ITALY;IT JAMAICA;JM JAPAN;JP JORDAN;JO KAZAKHSTAN;KZ KENYA;KE KIRIBATI;KI KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF;KP KOREA, REPUBLIC OF;KR KUWAIT;KW KYRGYZSTAN;KG LAO PEOPLE'S DEMOCRATIC REPUBLIC;LA LATVIA;LV LEBANON;LB LESOTHO;LS LIBERIA;LR LIBYAN ARAB JAMAHIRIYA;LY LIECHTENSTEIN;LI LITHUANIA;LT LUXEMBOURG;LU MACAO;MO MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF;MK MADAGASCAR;MG MALAWI;MW MALAYSIA;MY MALDIVES;MV MALI;ML MALTA;MT MARSHALL ISLANDS;MH MARTINIQUE;MQ MAURITANIA;MR MAURITIUS;MU MAYOTTE;YT MEXICO;MX MICRONESIA, FEDERATED STATES OF;FM MOLDOVA, REPUBLIC OF;MD MONACO;MC MONGOLIA;MN MONTSERRAT;MS MOROCCO;MA MOZAMBIQUE;MZ MYANMAR;MM NAMIBIA;NA NAURU;NR NEPAL;NP NETHERLANDS;NL NETHERLANDS ANTILLES;AN NEW CALEDONIA;NC NEW ZEALAND;NZ NICARAGUA;NI NIGER;NE NIGERIA;NG NIUE;NU NORFOLK ISLAND;NF NORTHERN MARIANA ISLANDS;MP NORWAY;NO OMAN;OM PAKISTAN;PK PALAU;PW PALESTINIAN TERRITORY, OCCUPIED;PS PANAMA;PA PAPUA NEW GUINEA;PG PARAGUAY;PY PERU;PE PHILIPPINES;PH PITCAIRN;PN POLAND;PL PORTUGAL;PT PUERTO RICO;PR QATAR;QA REUNION;RE ROMANIA;RO RUSSIAN FEDERATION;RU RWANDA;RW SAINT HELENA;SH SAINT KITTS AND NEVIS;KN SAINT LUCIA;LC SAINT PIERRE AND MIQUELON;PM SAINT VINCENT AND THE GRENADINES;VC SAMOA;WS SAN MARINO;SM SAO TOME AND PRINCIPE;ST SAUDI ARABIA;SA SENEGAL;SN SERBIA AND MONTENEGRO;CS SEYCHELLES;SC SIERRA LEONE;SL SINGAPORE;SG SLOVAKIA;SK SLOVENIA;SI SOLOMON ISLANDS;SB SOMALIA;SO SOUTH AFRICA;ZA SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS;GS SPAIN;ES SRI LANKA;LK SUDAN;SD SURINAME;SR SVALBARD AND JAN MAYEN;SJ SWAZILAND;SZ SWEDEN;SE SWITZERLAND;CH SYRIAN ARAB REPUBLIC;SY TAIWAN, PROVINCE OF CHINA;TW TAJIKISTAN;TJ TANZANIA, UNITED REPUBLIC OF;TZ THAILAND;TH TIMOR-LESTE;TL TOGO;TG TOKELAU;TK TONGA;TO TRINIDAD AND TOBAGO;TT TUNISIA;TN TURKEY;TR TURKMENISTAN;TM TURKS AND CAICOS ISLANDS;TC TUVALU;TV UGANDA;UG UKRAINE;UA UNITED ARAB EMIRATES;AE UNITED KINGDOM;GB UNITED STATES;US UNITED STATES MINOR OUTLYING ISLANDS;UM URUGUAY;UY UZBEKISTAN;UZ VANUATU;VU VENEZUELA;VE VIET NAM;VN VIRGIN ISLANDS, BRITISH;VG VIRGIN ISLANDS, U.S.;VI WALLIS AND FUTUNA;WF WESTERN SAHARA;EH YEMEN;YE ZAMBIA;ZM ZIMBABWE;ZW fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/iso639-1000066400000000000000000000245371503113465200240310ustar00rootroot00000000000000AA * Afar Djibouti, N Ethiopia Hamito-Semitic F., Cushitic Br. AB * Abkhazian Abkhazia (Georgia) Caucasian F. AF * Afrikaans South Africa, Namibia Indo-European F., Germanic Br. 10 AM * Amharic Ethiopia Hamito-Semitic F., Semitic Br. 20 AR * Arabic Middle East, N Africa Hamito-Semitic F., Semitic Br. 218 AS * Assamese Assam (India) Indo-European F., Indo-Iranian Br. 23 AY * Aymara Bolivia, Peru Andean-Equatorial F., Andean Br. 2 AZ * Azerbaijani Iran, Azerbaijan Uralo-Altaic F., Turkic Br. 15 BA * Bashkir Bashkir (S Urals, Russia) Uralo-Altaic F., Turkic Br. 1 BE * Byelorussian Byelorussia Indo-European F., Balto-Slavic Br. 10 BG * Bulgarian Bulgaria, Yugoslavia, Greece Indo-European F., Balto-Slavic Br. 9 BH * Bihari Bihar (India) Indo-European F., Indo-Iranian Br. BI * Bislama Vanuatu, New Caledonia English based creole, Pacific BN * Bengali, Bangla Bangladesh, West Bengal (India) Indo-European F., Indo-Iranian Br. 196 BO * Tibetan Tibet, Bhutan, Nepal, India Sino-Tibetan F., Tibeto-Burmese Br. 5 BO from Bodskad BR * Breton Britanny (W France) Indo-European F., Celtic Br. CA * Catalan Catalania (NE Spain), Balearic Islands, Sardinia, S France, Andorra, Argentina Indo-European F., Italic Br. 9 CO * Corsican Corsica (France) Indo-European F., Italic Br. CS * Czech Czech Republic Indo-European F., Balto-Slavic Br. 11 CY * Welsh Wales (United Kingdom) Indo-European F., Celtic Br. DA * Danish Denmark, Germany Indo-European F., Germanic Br. 5 DE * German Germany, Austria, Switzerland, U.S.A. Indo-European F., Germanic Br. 121 DE from Deutsch DZ * Bhutani, Bhutanese Bhutan Sino-Tibetan F., Tibeto-Burmese Br. EL * Greek Greece, Cyprus, Turkey Indo-European F., Hellenic Br. 12 EN * English North America, British Isles, Australia, New Zealand, South Africa Indo-European F., Germanic Br. 470 EO * Esperanto 2 Artificial language ES * Spanish Spain, Latin America, U.S.A. Indo-European F., Italic Br. 381 ET * Estonian Estonia Uralo-Altaic F., Finno-Ugric Br. 1 EU * Basque W Pyrenees (France, Spain) (Isolate) EU from Euskera FA * Persian Iran, Afghanistan Indo-European F., Indo-Iranian Br. 35 FA from Farsi FI * Finnish, Suomi Finland, Russia, Sweden Uralo-Altaic F., Finno-Ugric Br. 6 FJ * Fiji, Fijian Fiji Austric F., Malayo-Polynesian Br. FO * Faroese, Faeroese Faeroe Islands (Denmark) Indo-European F., Germanic Br. FR * French France, Belgium, Canada, U.S.A., Switzerland Indo-European F., Italic Br. 124 FY * Frisian Frisian Islands (Netherlands-Germany) Indo-European F., Germanic Br. GA * Irish Ireland Indo-European F., Celtic Br. GA from Gaeilge GD * Scots Gaelic Scotland Indo-European F., Celtic Br. GL * Galician Spanish Galicia Indo-European F., Italic Br. 4 GN * Guaran? Paraguay, Bolivia, S Brazil Andean-Equatorial F., Equatorial Br. 4 GU * Gujarati, Gujerati Gujarat (India), Bombay, Pakistan, South Africa Indo-European F., Indo-Iranian Br. 40 HA * Hausa N Nigeria, Niger, Cameroun Hamito-Semitic F., Chadic Br. 37 HE * Hebrew Israel Hamito-Semitic F., Semitic Br. 5 Formerly IW from Iwrith. See Note 4. HI * Hindi India, Pakistan, Trinidad, Guyana, Fiji, Mauritius Indo-European F., Indo-Iranian Br. 418 Same as Urdu [UR] except for writing system. See Note 3. HR * Croatian, Croat Croatia Indo-European F., Balto-Slavic Br. HR from Hrvatski. See Note 2. HU * Hungarian, Magyar Hungary, Romania, Yugoslavia, Czechoslovakia Uralo-Altaic F., Finno-Ugric Br. 14 HY * Armenian Armenia, Middle East Indo-European F., Armenian Br. 5 HY from Hayeren IA * Interlingua Artificial language ID * Indonesian, Bahasa Indonesia Indonesia, Malaysia, Thailand, Singapore, Brunei Austric F., Malayo-Polynesian Br. Formerly IN. See Note 4. IE * Interlingue Artificial language. Prototype of Interlingua [IA] IK * Inupiak Greenland, N Canada, Alaska (U.S.A.) Eskimo-Aleut F. IS * Icelandic Iceland Indo-European F., Germanic Br. IS from Islenzk IT * Italian Italy, U.S.A., France, Argentina, Switzerland, Canada, Brazil Indo-European F., Italic Br. 62 IU * Inuktitut NE Canada Eskimo-Aleut F. See Note 5. JA * Japanese, Nihongo Japan, Brazil, California (U.S.A.), Hawaii (U.S.A.) Japanese-Korean F. 126 JW Javanese Java, Malaysia, Surinam Austric F., Malayo-Polynesian Br. 64 JW from Bahasa Jawa KA * Georgian Georgia Caucasian F. 3 KA from Kartuli KK * Kazakh Kazakhstan, Sinkiang (China), Afghanistan Uralo-Altaic F., Turkic Br. 8 KL * Greenlandic Greenland Eskimo-Aleut F. KL from Kalaallisut KM * Cambodian Cambodia, Thailand, Viet Nam Austric F., Austrio-Asiatic Br. 9 KM from Khmer KN * Kannada Karnatuka (India) Dravidian F. 44 KO * Korean, Choson-o South Korea, North Korea, NE China, Japan, Siberia, Hawaii (U.S.A.) Japanese-Korean F. 75 KS * Kashmiri Kashmir (India-Pakistan) Indo-European F., Indo-Iranian Br. 4 KU * Kurdish, Zimany Kurdy Turkey, Iran, Iraq, Syria Indo-European F., Indo-Iranian Br. 11 KY * Kirghiz Kirghiz, Sinkiang (China), Afghanistan Uralo-Altaic F., Turkic Br. 2 KY from Kyrgyz LA * Latin Indo-European F., Italic Br. Ancient language nearing extinction LN * Lingala, liNgala Zaire, Congo Niger-Kordofanian F., Non-Mande Br. 7 LO * Laothian, Pha Xa Lao, Lao Laos, Thailand Sino-Tibetan F., Sino-Siamese Br. 4 LT * Lithuanian Lithuania Indo-European F., Balto-Slavic Br. 3 LV * Latvian, Lettish Latvia Indo-European F., Balto-Slavic Br. 2 MG * Malagasy Madagascar Austric F., Malayo-Polynesian Br. 12 MI * Maori New Zealand Austric F., Malayo-Polynesian Br. MK * Macedonian Macedonia, Bulgaria, Greece Indo-European F., Balto-Slavic Br. 2 ML * Malayalam Kerala (SW India) Dravidian F. 35 MN * Mongolian Mongolia Uralo-Altaic F., Mongolic Br. MO * Moldavian MR * Marathi, Mahrati Maharashtra (W India) Indo-European F., Indo-Iranian Br. 69 MS Malay Malaysia, Indonesia Austric F., Malayo-Polynesian Br. 155 MS from Bahasa Malaysia MT * Maltese Malta Hamito-Semitic F., Semitic Br. MY * Burmese Burma, Bangladesh Sino-Tibetan F., Tibeto-Burmese Br. 30 MY from Myanmasa NA Nauru, Nauruan Nauru Austric F., Malayo-Polynesian Br. NE * Nepali, Nepalese Nepal, Uttar Pradesh (India) Indo-European F., Indo-Iranian Br. 16 NL * Dutch Netherlands, Belgium Indo-European F., Germanic Br. 21 NL from Nederlands NO * Norwegian Norway Indo-European F., Germanic Br. 5 OC * Occitan S France Indo-European F., Italic Br. 4 OM * (Afan) Oromo, Galla Ethiopia, Kenya Hamito-Semitic F., Cushitic Br. 10 OR * Oriya Orissa (E India) Indo-European F., Indo-Iranian Br. 31 PA Punjabi Punjab (India), Pakistan Indo-European F., Indo-Iranian Br. 93 PA from Panjabi PL * Polish Poland, U.S.A. Indo-European F., Balto-Slavic Br. 44 PS Pashto, Pushto, Pushtu Afghanistan, Pakistan Indo-European F., Indo-Iranian Br. 21 PT * Portuguese Brazil, Portugal, Spain, Uruguay, Argentina, Azores, Goa, Madeira Indo-European F., Italic Br. 182 QU Quechua Peru, Ecuador, Bolivia Andean-Equatorial F., Andean Br. 8 RM * Rhaeto-Romance, Rhaeto-Romanic, Romansch S Switzerland, N Italy, Tyrol (Austria) Indo-European F., Italic Br. RN Kirundi, kiRundi Niger-Kordofanian F., Non-Mande Br. RO * Romanian, Rumanian Rumania Indo-European F., Italic Br. 25 RU * Russian Russia, former USSR republics Indo-European F., Balto-Slavic Br. 288 RW Kinyarwanda, kinyaRuanda Rwanda, Burundi, Uganda, Zaire, Tanzania Niger-Kordofanian F., Non-Mande Br. RW from Rwanda SA * Sanskrit India Indo-European F., Indo-Iranian Br. Ancient language SD Sindhi Pakistan, Sind (India) Indo-European F., Indo-Iranian Br. 18 SG Sangho, Sango-Ngbandi Central African Republic, Zaire Niger-Kordofanian F., Non-Mande Br. 4 SH * Serbo-Croatian Croatia Indo-European F., Balto-Slavic Br. 20 See Note 2. SI * Singhalese, Sinhalese Sri Lanka Indo-European F., Indo-Iranian Br. 13 SK * Slovak Slovakia Indo-European F., Balto-Slavic Br. 5 SL * Slovenian, Slovene Slovenia, Italy, Austria Indo-European F., Balto-Slavic Br. 2 SM * Samoan Samoa Austric F., Malayo-Polynesian Br. SN Shona, chiShona Rhodesia, Mozambique Niger-Kordofanian F., Non-Mande Br. 8 SO * Somali Somalia, Ethiopia, Kenya Hamito-Semitic F., Cushitic Br. 5 SQ * Albanian Albania, Kosovo (Yugoslavia), Italy, Greece Indo-European F., Albanian Br. 5 SQ from Shqip SR * Serbian Serbia Indo-European F., Balto-Slavic Br. SR from Srpski. See Note 2. SS * Siswati, siSwati South Africa, Rhodesia, Swaziland Niger-Kordofanian F., Non-Mande Br. ST * Sesotho, siSuthu South Africa, Lesotho, Botswana Niger-Kordofanian F., Non-Mande Br. SU Sundanese West Java Austric F., Malayo-Polynesian Br. 26 SV * Swedish Sweden, Finland Indo-European F., Germanic Br. 9 SV from Svenska SW * Swahili, kiSwahili Tanzania, Comoro Islands, Kenya, Mozambique, Zaire Niger-Kordofanian F., Non-Mande Br. 48 TA * Tamil Tamil Nadu (S India), Sri Lanka, Malaysia, Singapore Dravidian F. 71 TE * Telugu, Telegu Andhra Pradesh (India) Dravidian F. 73 TG * Tajik, Tajiki Tadzhikstan Indo-European F., Indo-Iranian Br. 5 TH * Thai Thailand 50 TI * Tigrinya N Ethiopia Hamito-Semitic F., Semitic Br. 4 TK * Turkmen, Turkoman, Turcoman Turkmenistan, Iran, Afghanistan Uralo-Altaic F., Turkic Br. 3 TL * Tagalog Philippines Austric F., Malayo-Polynesian Br. 54 TN * Setswana South Africa TO * Tonga Niger-Kordofanian F., Non-Mande Br. 7 TR * Turkish Turkey, Bulgaria, Yugoslavia, Cyprus, Greece Uralo-Altaic F., Turkic Br. 59 TS * Tsonga 3 TT * Tatar, Tartar Tatarstan Uralo-Altaic F., Turkic Br. 8 TW * Twi, Tshi W Africa Niger-Kordofanian F., Non-Mande Br. UG * Uigur, Uighur, Uyghur Sinkiang (China), Kazakhstan, Uzbekistan, Afghanistan Uralo-Altaic F., Turkic Br. 8 See Note 5. UK * Ukrainian Ukraine, Canada, U.S.A. Indo-European F., Balto-Slavic Br. 47 UR * Urdu Pakistan, India Indo-European F., Indo-Iranian Br. 102 Same as Hindi [HI] except for writing system. See Note 3. UZ * Uzbek, Uzbeg, Usbek, Usbeg Uzbekstan, Tadzhikstan, Afghanistan Uralo-Altaic F., Turkic Br. 14 VI * Vietnamese Viet Nam, Thailand, Cambodia, Laos, New Caledonia, France, Dakar Sino-Tibetan F., Sino-Siamese Br. 65 VO * Volap?k Artificial language WO * Wolof Senegal, Gambia Niger-Kordofanian F., Non-Mande Br. 7 XH * Xhosa, Xosa, isiXhosa South Africa, Rhodesia, Swaziland Niger-Kordofanian F., Non-Mande Br. 8 YI * Yiddish U.S.A., Israel, former USSR, Latin America, Canada, E Europe Indo-European F., Germanic Br. Formerly JI from Jiddisch. See Note 4. YO * Yoruba Western, Lagos and Kwara States (Nigeria), Benin Niger-Kordofanian F., Non-Mande Br. 20 ZA Zhuang, Chwang, Chuang China 15 See Note 5. ZH * Chinese China Sino-Tibetan F., Sino-Siamese Br. 1,200 ZH from Zhongwen. See Note 1. ZU * Zulu, isiZulu South Africa, Rhodesia, Swaziland Niger-Kordofanian F., Non-Mande Br. 9 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/iso639-2000066400000000000000000000432051503113465200240230ustar00rootroot00000000000000ISO 639-1 is the alpha-2 code. Multiple codes for the same language are to be considered synonyms. Entries marked with '*' have Unicode orthographies built. 639-2 639-1 Language Name (English) Language Name (French) * aar aa Afar afar * abk ab Abkhazian abkhaze ace Achinese aceh ach Acoli acoli ada Adangme adangme afa Afro-Asiatic (Other) afro-asiatiques, autres langues afh Afrihili afrihili * afr af Afrikaans afrikaans aka Akan akan akk Akkadian akkadien * alb/sqi* sq Albanian albanais ale Aleut aléoute alg Algonquian languages algonquines, langues * amh am Amharic amharique ang English, Old (ca.450-1100) anglo-saxon (ca.450-1100) apa Apache languages apache * ara ar Arabic arabe arc Aramaic araméen * arm/hye* hy Armenian arménien arn Araucanian araucan arp Arapaho arapaho art Artificial (Other) artificielles, autres langues arw Arawak arawak asm as Assamese assamais * ast Asturian; Bable asturien; bable ath Athapascan languages athapascanes, langues aus Australian languages australiennes, langues * ava Avaric avar ave ae Avestan avestique awa Awadhi awadhi * aym ay Aymara aymara * aze az Azerbaijani azéri bad Banda banda bai Bamileke languages bamilékés, langues * bak ba Bashkir bachkir bal Baluchi baloutchi * bam Bambara bambara ban Balinese balinais * baq/eus* eu Basque basque bas Basa basa bat Baltic (Other) baltiques, autres langues bej Beja bedja * bel be Belarusian biélorusse bem Bemba bemba * ben bn Bengali bengali ber Berber (Other) berbères, autres langues bho Bhojpuri bhojpuri * bih bh Bihari bihari bik Bikol bikol * bin Bini bini * bis bi Bislama bichlamar bla Siksika blackfoot bnt Bantu (Other) bantoues, autres langues * tib/bod* bo Tibetan tibétain * bos bs Bosnian bosniaque bra Braj braj * bre br Breton breton btk Batak (Indonesia) batak (Indonésie) * bua Buriat bouriate bug Buginese bugi * bul bg Bulgarian bulgare * bur/mya* my Burmese birman cad Caddo caddo cai Central American Indian (Other) indiennes d'Amérique centrale, autres langues car Carib caribe * cat ca Catalan catalan cau Caucasian (Other) caucasiennes, autres langues ceb Cebuano cebuano cel Celtic (Other) celtiques, autres langues * cze/ces* cs Czech tchèque * cha ch Chamorro chamorro chb Chibcha chibcha * che ce Chechen tchétchène chg Chagatai djaghataï * chi/zho* zh Chinese chinois chk Chuukese chuuk * chm Mari mari chn Chinook jargon chinook, jargon cho Choctaw choctaw chp Chipewyan chipewyan * chr Cherokee cherokee * chu cu Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic slavon d'église; vieux slave; slavon liturgique; vieux bulgare * chv cv Chuvash tchouvache chy Cheyenne cheyenne cmc Chamic languages chames, langues cop Coptic copte * cor kw Cornish cornique * cos co Corsican corse cpe Creoles and pidgins, English based (Other) créoles et pidgins anglais, autres cpf Creoles and pidgins, French-based (Other) créoles et pidgins français, autres cpp Creoles and pidgins, Portuguese-based (Other) créoles et pidgins portugais, autres cre Cree cree crp Creoles and pidgins (Other) créoles et pidgins divers cus Cushitic (Other) couchitiques, autres langues * wel/cym* cy Welsh gallois * cze/ces* cs Czech tchèque dak Dakota dakota * dan da Danish danois day Dayak dayak del Delaware delaware den Slave (Athapascan) esclave (athapascan) * ger/deu* de German allemand dgr Dogrib dogrib din Dinka dinka div Divehi maldivien doi Dogri dogri dra Dravidian (Other) dravidiennes, autres langues dua Duala douala dum Dutch, Middle (ca.1050-1350) néerlandais moyen (ca. 1050-1350) * dut/nld* nl Dutch néerlandais dyu Dyula dioula * dzo dz Dzongkha dzongkha efi Efik efik egy Egyptian (Ancient) égyptien eka Ekajuk ekajuk * gre/ell* el Greek, Modern (1453-) grec moderne (après 1453) elx Elamite élamite * eng en English anglais enm English, Middle (1100-1500) anglais moyen (1100-1500) * epo eo Esperanto espéranto * est et Estonian estonien * baq/eus* eu Basque basque ewe Ewe éwé ewo Ewondo éwondo fan Fang fang * fao fo Faroese féroïen * per/fas* fa Persian persan fat Fanti fanti * fij fj Fijian fidjien * fin fi Finnish finnois fiu Finno-Ugrian (Other) finno-ougriennes, autres langues fon Fon fon * fre/fra* fr French français frm French, Middle (ca.1400-1800) français moyen (1400-1800) fro French, Old (842-ca.1400) français ancien (842-ca.1400) * fry fy Frisian frison * ful Fulah peul * fur Friulian frioulan gaa Ga ga gay Gayo gayo gba Gbaya gbaya gem Germanic (Other) germaniques, autres langues * geo/kat* ka Georgian géorgien * ger/deu* de German allemand * gez Geez guèze gil Gilbertese kiribati * gla gd Gaelic; Scottish Gaelic gaélique; gaélique écossais * gle ga Irish irlandais * glg gl Gallegan galicien * glv gv Manx manx; mannois gmh German, Middle High (ca.1050-1500) allemand, moyen haut (ca. 1050-1500) goh German, Old High (ca.750-1050) allemand, vieux haut (ca. 750-1050) gon Gondi gond gor Gorontalo gorontalo got Gothic gothique grb Grebo grebo grc Greek, Ancient (to 1453) grec ancien (jusqu'à 1453) * gre/ell* el Greek, Modern (1453-) grec moderne (après 1453) * grn gn Guarani guarani * guj gu Gujarati goudjrati gwi Gwich´in gwich´in hai Haida haida * hau ha Hausa haoussa * haw Hawaiian hawaïen * heb he Hebrew hébreu her hz Herero herero hil Hiligaynon hiligaynon him Himachali himachali * hin hi Hindi hindi hit Hittite hittite hmn Hmong hmong * hmo ho Hiri Motu hiri motu * scr/hrv* hr Croatian croate * hun hu Hungarian hongrois hup Hupa hupa * arm/hye* hy Armenian arménien iba Iban iban * ibo Igbo igbo * ice/isl* is Icelandic islandais * ido io Ido ido ijo Ijo ijo * iku iu Inuktitut inuktitut * ile ie Interlingue interlingue ilo Iloko ilocano * ina ia Interlingua (International Auxiliary Language Association) interlingua (langue auxiliaire internationale) inc Indic (Other) indo-aryennes, autres langues * ind id Indonesian indonésien ine Indo-European (Other) indo-européennes, autres langues * ipk ik Inupiaq inupiaq ira Iranian (Other) iraniennes, autres langues iro Iroquoian languages iroquoises, langues (famille) * ice/isl* is Icelandic islandais * ita it Italian italien jav jv Javanese javanais * jpn ja Japanese japonais jpr Judeo-Persian judéo-persan jrb Judeo-Arabic judéo-arabe * kaa Kara-Kalpak karakalpak kab Kabyle kabyle kac Kachin kachin * kal kl Kalaallisut groenlandais kam Kamba kamba * kan kn Kannada kannada kar Karen karen * kas ks Kashmiri kashmiri * geo/kat* ka Georgian géorgien kau Kanuri kanouri kaw Kawi kawi * kaz kk Kazakh kazakh kha Khasi khasi khi Khoisan (Other) khoisan, autres langues * khm km Khmer khmer kho Khotanese khotanais * kik ki Kikuyu; Gikuyu kikuyu kin rw Kinyarwanda rwanda * kir ky Kirghiz kirghize kmb Kimbundu kimbundu * kok Konkani konkani * kom kv Komi kom kon Kongo kongo * kor ko Korean coréen kos Kosraean kosrae kpe Kpelle kpellé kro Kru krou kru Kurukh kurukh kua kj Kuanyama; Kwanyama kuanyama; kwanyama * kum Kumyk koumyk * kur ku Kurdish kurde kut Kutenai kutenai lad Ladino judéo-espagnol lah Lahnda lahnda lam Lamba lamba * lao lo Lao lao * lat la Latin latin * lav lv Latvian letton * lez Lezghian lezghien * lin ln Lingala lingala * lit lt Lithuanian lituanien lol Mongo mongo loz Lozi lozi * ltz lb Luxembourgish; Letzeburgesch luxembourgeois lua Luba-Lulua luba-lulua lub Luba-Katanga luba-katanga lug Ganda ganda lui Luiseno luiseno lun Lunda lunda luo Luo (Kenya and Tanzania) luo (Kenya et Tanzanie) lus lushai Lushai * mac/mkd* mk Macedonian macédonien mad Madurese madourais mag Magahi magahi * mah mh Marshallese marshall mai Maithili maithili mak Makasar makassar * mal ml Malayalam malayalam man Mandingo mandingue * mao/mri* mi Maori maori map Austronesian (Other) malayo-polynésiennes, autres langues * mar mr Marathi marathe mas Masai massaï may/msa* ms Malay malais mdr Mandar mandar men Mende mendé mga Irish, Middle (900-1200) irlandais moyen (900-1200) mic Micmac micmac min Minangkabau minangkabau mis Miscellaneous languages diverses, langues * mac/mkd* mk Macedonian macédonien mkh Mon-Khmer (Other) môn-khmer, autres langues * mlg mg Malagasy malgache * mlt mt Maltese maltais mnc Manchu mandchou mni Manipuri manipuri mno Manobo languages manobo, langues moh Mohawk mohawk * mol mo Moldavian moldave * mon mn Mongolian mongol mos Mossi moré * mao/mri* mi Maori maori may/msa* ms Malay malais mul Multiple languages multilingue mun Munda languages mounda, langues mus Creek muskogee mwr Marwari marvari * bur/mya* my Burmese birman myn Mayan languages maya, langues nah Nahuatl nahuatl nai North American Indian indiennes d'Amérique du Nord, autres langues nau na Nauru nauruan nav nv Navajo; Navaho navaho * nbl nr Ndebele, South; South Ndebele ndébélé du Sud nde nd Ndebele, North; North Ndebele ndébélé du Nord ndo ng Ndonga ndonga nds Low German; Low Saxon; German, Low; Saxon, Low bas allemand; bas saxon; allemand, bas; saxon, bas * nep ne Nepali népalais new Newari newari nia Nias nias nic Niger-Kordofanian (Other) nigéro-congolaises, autres langues niu Niuean niué * dut/nld* nl Dutch néerlandais non Norse, Old norrois, vieux * nor no Norwegian norvégien * nno nn Norwegian Nynorsk; Nynorsk, Norwegian norvégien nynorsk; nynorsk, norvégien * nob nb Norwegian Bokmål; Bokmål, Norwegian norvégien bokmål; bokmål, norvégien * nso Sotho, Northern sotho du Nord nub Nubian languages nubiennes, langues * nya ny Chichewa; Chewa; Nyanja chichewa; chewa; nyanja nym Nyamwezi nyamwezi nyn Nyankole nyankolé nyo Nyoro nyoro nzi Nzima nzema * oci oc Occitan (post 1500); Provençal occitan (après 1500); provençal oji Ojibwa ojibwa * ori or Oriya oriya * orm om Oromo galla osa Osage osage * oss os Ossetian; Ossetic ossète ota Turkish, Ottoman (1500-1928) turc ottoman (1500-1928) oto Otomian languages otomangue, langues paa Papuan (Other) papoues, autres langues pag Pangasinan pangasinan pal Pahlavi pahlavi pam Pampanga pampangan pan pa Panjabi pendjabi pap Papiamento papiamento pau Palauan palau peo Persian, Old (ca.600-400 B.C.) perse, vieux (ca. 600-400 av. J.-C.) * per/fas* fa Persian persan phi Philippine (Other) philippines, autres langues phn Phoenician phénicien pli pi Pali pali * pol pl Polish polonais pon Pohnpeian pohnpei * por pt Portuguese portugais pra Prakrit languages prâkrit pro Provençal, Old (to 1500) provençal ancien (jusqu'à 1500) pus ps Pushto pachto qaa-qtz Reserved for local use réservée à l'usage local que qu Quechua quechua raj Rajasthani rajasthani rap Rapanui rapanui rar Rarotongan rarotonga roa Romance (Other) romanes, autres langues * roh rm Raeto-Romance rhéto-roman rom Romany tsigane * rum/ron* ro Romanian roumain run rn Rundi rundi * rus ru Russian russe sad Sandawe sandawe sag sg Sango sango * sah Yakut iakoute sai South American Indian (Other) indiennes d'Amérique du Sud, autres langues sal Salishan languages salish, langues sam Samaritan Aramaic samaritain * san sa Sanskrit sanskrit sas Sasak sasak sat Santali santal * scc/srp* sr Serbian serbe * sco Scots écossais * scr/hrv* hr Croatian croate * sel Selkup selkoupe sem Semitic (Other) sémitiques, autres langues sga Irish, Old (to 900) irlandais ancien (jusqu'à 900) sgn Sign Languages langues des signes shn Shan chan sid Sidamo sidamo * sin si Sinhalese singhalais sio Siouan languages sioux, langues sit Sino-Tibetan (Other) sino-tibétaines, autres langues sla Slavic (Other) slaves, autres langues * slo/slk* sk Slovak slovaque * slv sl Slovenian slovène * sma Southern Sami sami du Sud * sme se Northern Sami sami du Nord smi Sami languages (Other) sami, autres langues * smj Lule Sami sami de Lule * smn Inari Sami sami d'Inari * smo sm Samoan samoan * sms Skolt Sami sami skolt sna sn Shona shona snd sd Sindhi sindhi snk Soninke soninké sog Sogdian sogdien * som so Somali somali son Songhai songhai * sot st Sotho, Southern sotho du Sud * spa es Spanish; Castilian espagnol; castillan * alb/sqi* sq Albanian albanais srd sc Sardinian sarde * scc/srp* sr Serbian serbe * sh Serbo-Croatian serbo-croate srr Serer sérère ssa Nilo-Saharan (Other) nilo-sahariennes, autres langues * ssw ss Swati swati suk Sukuma sukuma sun su Sundanese soundanais sus Susu soussou sux Sumerian sumérien * swa sw Swahili swahili * swe sv Swedish suédois * syr Syriac syriaque tah ty Tahitian tahitien tai Tai (Other) thaïes, autres langues * tam ta Tamil tamoul * tat tt Tatar tatar * tel te Telugu télougou tem Timne temne ter Tereno tereno tet Tetum tetum * tgk tg Tajik tadjik * tgl tl Tagalog tagalog * tha th Thai thaï * tib/bod* bo Tibetan tibétain tig Tigre tigré * tir ti Tigrinya tigrigna tiv Tiv tiv tkl Tokelau tokelau tli Tlingit tlingit tmh Tamashek tamacheq tog Tonga (Nyasa) tonga (Nyasa) * ton to Tonga (Tonga Islands) tongan (Îles Tonga) tpi Tok Pisin tok pisin tsi Tsimshian tsimshian * tsn tn Tswana tswana * tso ts Tsonga tsonga * tuk tk Turkmen turkmène tum Tumbuka tumbuka tup Tupi languages tupi, langues * tur tr Turkish turc tut Altaic (Other) altaïques, autres langues tvl Tuvalu tuvalu * twi tw Twi twi * tyv Tuvinian touva uga Ugaritic ougaritique * uig ug Uighur ouïgour * ukr uk Ukrainian ukrainien umb Umbundu umbundu und Undetermined indéterminée * urd ur Urdu ourdou * uzb uz Uzbek ouszbek vai Vai vaï * ven Venda venda * vie vi Vietnamese vietnamien * vol vo Volapük volapük * vot Votic vote wak Wakashan languages wakashennes, langues wal Walamo walamo war Waray waray was Washo washo * wel/cym* cy Welsh gallois * wen Sorbian languages sorabes, langues * wln wa Walloon wallon * wol wo Wolof wolof * xho xh Xhosa xhosa yao Yao yao * yap Yapese yapois * yid yi Yiddish yiddish * yor yo Yoruba yoruba ypk Yupik languages yupik, langues zap Zapotec zapotèque zen Zenaga zenaga zha za Zhuang; Chuang zhuang; chuang * chi/zho* zh Chinese chinois znd Zande zandé * zul zu Zulu zoulou zun Zuni zuni fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/it.orth000066400000000000000000000025431503113465200242170ustar00rootroot00000000000000# # fontconfig/fc-lang/it.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Italian (IT) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a 00c0 #00c1 00c8-00c9 00cc 00cd #00ce 00cf 00d2-00d3 00d9 00da 00e0 #00e1 00e8-00e9 00ec 00ed #00ee 00ef 00f2-00f3 00f9 00fa fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/iu.orth000066400000000000000000000033001503113465200242100ustar00rootroot00000000000000# # fontconfig/fc-lang/iu.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Inuktitut (IU) # # Taken from alphabetic coverage of the Pigiarniq font as # produced by the legislative assembly of Nunavut # http://www.assembly.nu.ca/unicode/fonts/ # 1401-1406 140a-140b 142f-1434 1438-1439 1449 144c-1451 1455-1456 1466 146b-1470 1472-1473 1483 1489-148e 1490-1491 14a1 14a3-14a8 14aa-14ab 14bb 14c0-14c5 14c7-14c8 14d0 14d3-14d8 14da-14db 14ea 14ed-14f2 14f4-14f5 14fa 14fc 14fe 1500 1502 1505 1526-152b 152d-152e 153e 1542 1545-1549 154b-154c 1550 1553-155a 155d 1575-1577 1579-157c 157e-1585 158b-1596 15a0-15a6 15a8-15ae 166f 1670-1676 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ja.orth000066400000000000000000001136651503113465200242050ustar00rootroot00000000000000# # fontconfig/fc-lang/ja.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Coverage from JIS X 0208 (1997) for non kanji characters, and # Joyo Kanji List (2010, cabinet notification of regular-use chinese characters) # 0x3000 # IDEOGRAPHIC SPACE 0x3001 # IDEOGRAPHIC COMMA 0x3002 # IDEOGRAPHIC FULL STOP 0x3005 # IDEOGRAPHIC ITERATION MARK #0x3006 # IDEOGRAPHIC CLOSING MARK # not in Sawarabi Gothic 0x3007 # IDEOGRAPHIC NUMBER ZERO 0x3041 # HIRAGANA LETTER SMALL A 0x3042 # HIRAGANA LETTER A 0x3043 # HIRAGANA LETTER SMALL I 0x3044 # HIRAGANA LETTER I 0x3045 # HIRAGANA LETTER SMALL U 0x3046 # HIRAGANA LETTER U 0x3047 # HIRAGANA LETTER SMALL E 0x3048 # HIRAGANA LETTER E 0x3049 # HIRAGANA LETTER SMALL O 0x304A # HIRAGANA LETTER O 0x304B # HIRAGANA LETTER KA 0x304C # HIRAGANA LETTER GA 0x304D # HIRAGANA LETTER KI 0x304E # HIRAGANA LETTER GI 0x304F # HIRAGANA LETTER KU 0x3050 # HIRAGANA LETTER GU 0x3051 # HIRAGANA LETTER KE 0x3052 # HIRAGANA LETTER GE 0x3053 # HIRAGANA LETTER KO 0x3054 # HIRAGANA LETTER GO 0x3055 # HIRAGANA LETTER SA 0x3056 # HIRAGANA LETTER ZA 0x3057 # HIRAGANA LETTER SI 0x3058 # HIRAGANA LETTER ZI 0x3059 # HIRAGANA LETTER SU 0x305A # HIRAGANA LETTER ZU 0x305B # HIRAGANA LETTER SE 0x305C # HIRAGANA LETTER ZE 0x305D # HIRAGANA LETTER SO 0x305E # HIRAGANA LETTER ZO 0x305F # HIRAGANA LETTER TA 0x3060 # HIRAGANA LETTER DA 0x3061 # HIRAGANA LETTER TI 0x3062 # HIRAGANA LETTER DI 0x3063 # HIRAGANA LETTER SMALL TU 0x3064 # HIRAGANA LETTER TU 0x3065 # HIRAGANA LETTER DU 0x3066 # HIRAGANA LETTER TE 0x3067 # HIRAGANA LETTER DE 0x3068 # HIRAGANA LETTER TO 0x3069 # HIRAGANA LETTER DO 0x306A # HIRAGANA LETTER NA 0x306B # HIRAGANA LETTER NI 0x306C # HIRAGANA LETTER NU 0x306D # HIRAGANA LETTER NE 0x306E # HIRAGANA LETTER NO 0x306F # HIRAGANA LETTER HA 0x3070 # HIRAGANA LETTER BA 0x3071 # HIRAGANA LETTER PA 0x3072 # HIRAGANA LETTER HI 0x3073 # HIRAGANA LETTER BI 0x3074 # HIRAGANA LETTER PI 0x3075 # HIRAGANA LETTER HU 0x3076 # HIRAGANA LETTER BU 0x3077 # HIRAGANA LETTER PU 0x3078 # HIRAGANA LETTER HE 0x3079 # HIRAGANA LETTER BE 0x307A # HIRAGANA LETTER PE 0x307B # HIRAGANA LETTER HO 0x307C # HIRAGANA LETTER BO 0x307D # HIRAGANA LETTER PO 0x307E # HIRAGANA LETTER MA 0x307F # HIRAGANA LETTER MI 0x3080 # HIRAGANA LETTER MU 0x3081 # HIRAGANA LETTER ME 0x3082 # HIRAGANA LETTER MO 0x3083 # HIRAGANA LETTER SMALL YA 0x3084 # HIRAGANA LETTER YA 0x3085 # HIRAGANA LETTER SMALL YU 0x3086 # HIRAGANA LETTER YU 0x3087 # HIRAGANA LETTER SMALL YO 0x3088 # HIRAGANA LETTER YO 0x3089 # HIRAGANA LETTER RA 0x308A # HIRAGANA LETTER RI 0x308B # HIRAGANA LETTER RU 0x308C # HIRAGANA LETTER RE 0x308D # HIRAGANA LETTER RO 0x308E # HIRAGANA LETTER SMALL WA 0x308F # HIRAGANA LETTER WA 0x3090 # HIRAGANA LETTER WI 0x3091 # HIRAGANA LETTER WE 0x3092 # HIRAGANA LETTER WO 0x3093 # HIRAGANA LETTER N 0x309B # KATAKANA-HIRAGANA VOICED SOUND MARK 0x309C # KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK 0x309D # HIRAGANA ITERATION MARK 0x309E # HIRAGANA VOICED ITERATION MARK 0x30A1 # KATAKANA LETTER SMALL A 0x30A2 # KATAKANA LETTER A 0x30A3 # KATAKANA LETTER SMALL I 0x30A4 # KATAKANA LETTER I 0x30A5 # KATAKANA LETTER SMALL U 0x30A6 # KATAKANA LETTER U 0x30A7 # KATAKANA LETTER SMALL E 0x30A8 # KATAKANA LETTER E 0x30A9 # KATAKANA LETTER SMALL O 0x30AA # KATAKANA LETTER O 0x30AB # KATAKANA LETTER KA 0x30AC # KATAKANA LETTER GA 0x30AD # KATAKANA LETTER KI 0x30AE # KATAKANA LETTER GI 0x30AF # KATAKANA LETTER KU 0x30B0 # KATAKANA LETTER GU 0x30B1 # KATAKANA LETTER KE 0x30B2 # KATAKANA LETTER GE 0x30B3 # KATAKANA LETTER KO 0x30B4 # KATAKANA LETTER GO 0x30B5 # KATAKANA LETTER SA 0x30B6 # KATAKANA LETTER ZA 0x30B7 # KATAKANA LETTER SI 0x30B8 # KATAKANA LETTER ZI 0x30B9 # KATAKANA LETTER SU 0x30BA # KATAKANA LETTER ZU 0x30BB # KATAKANA LETTER SE 0x30BC # KATAKANA LETTER ZE 0x30BD # KATAKANA LETTER SO 0x30BE # KATAKANA LETTER ZO 0x30BF # KATAKANA LETTER TA 0x30C0 # KATAKANA LETTER DA 0x30C1 # KATAKANA LETTER TI 0x30C2 # KATAKANA LETTER DI 0x30C3 # KATAKANA LETTER SMALL TU 0x30C4 # KATAKANA LETTER TU 0x30C5 # KATAKANA LETTER DU 0x30C6 # KATAKANA LETTER TE 0x30C7 # KATAKANA LETTER DE 0x30C8 # KATAKANA LETTER TO 0x30C9 # KATAKANA LETTER DO 0x30CA # KATAKANA LETTER NA 0x30CB # KATAKANA LETTER NI 0x30CC # KATAKANA LETTER NU 0x30CD # KATAKANA LETTER NE 0x30CE # KATAKANA LETTER NO 0x30CF # KATAKANA LETTER HA 0x30D0 # KATAKANA LETTER BA 0x30D1 # KATAKANA LETTER PA 0x30D2 # KATAKANA LETTER HI 0x30D3 # KATAKANA LETTER BI 0x30D4 # KATAKANA LETTER PI 0x30D5 # KATAKANA LETTER HU 0x30D6 # KATAKANA LETTER BU 0x30D7 # KATAKANA LETTER PU 0x30D8 # KATAKANA LETTER HE 0x30D9 # KATAKANA LETTER BE 0x30DA # KATAKANA LETTER PE 0x30DB # KATAKANA LETTER HO 0x30DC # KATAKANA LETTER BO 0x30DD # KATAKANA LETTER PO 0x30DE # KATAKANA LETTER MA 0x30DF # KATAKANA LETTER MI 0x30E0 # KATAKANA LETTER MU 0x30E1 # KATAKANA LETTER ME 0x30E2 # KATAKANA LETTER MO 0x30E3 # KATAKANA LETTER SMALL YA 0x30E4 # KATAKANA LETTER YA 0x30E5 # KATAKANA LETTER SMALL YU 0x30E6 # KATAKANA LETTER YU 0x30E7 # KATAKANA LETTER SMALL YO 0x30E8 # KATAKANA LETTER YO 0x30E9 # KATAKANA LETTER RA 0x30EA # KATAKANA LETTER RI 0x30EB # KATAKANA LETTER RU 0x30EC # KATAKANA LETTER RE 0x30ED # KATAKANA LETTER RO 0x30EE # KATAKANA LETTER SMALL WA 0x30EF # KATAKANA LETTER WA 0x30F0 # KATAKANA LETTER WI 0x30F1 # KATAKANA LETTER WE 0x30F2 # KATAKANA LETTER WO 0x30F3 # KATAKANA LETTER N 0x30F4 # KATAKANA LETTER VU 0x30F5 # KATAKANA LETTER SMALL KA 0x30F6 # KATAKANA LETTER SMALL KE 0x30FB # KATAKANA MIDDLE DOT 0x30FC # KATAKANA-HIRAGANA PROLONGED SOUND MARK 0x30FD # KATAKANA ITERATION MARK 0x30FE # KATAKANA VOICED ITERATION MARK 0x4E00 # 0x4E01 # 0x4E03 # 0x4E07 # 0x4E08 # 0x4E09 # 0x4E0A # 0x4E0B # 0x4E0D # 0x4E0E # 0x4E14 # 0x4E16 # 0x4E18 # 0x4E19 # 0x4E21 # 0x4E26 # 0x4E2D # 0x4E32 # 0x4E38 # 0x4E39 # 0x4E3B # 0x4E3C # 0x4E45 # 0x4E4F # 0x4E57 # 0x4E59 # 0x4E5D # 0x4E5E # 0x4E71 # 0x4E73 # 0x4E7E # 0x4E80 # 0x4E86 # 0x4E88 # 0x4E89 # 0x4E8B # 0x4E8C # 0x4E92 # 0x4E94 # 0x4E95 # 0x4E9C # 0x4EA1 # 0x4EA4 # 0x4EAB # 0x4EAC # 0x4EAD # 0x4EBA # 0x4EC1 # 0x4ECA # 0x4ECB # 0x4ECF # 0x4ED5 # 0x4ED6 # 0x4ED8 # 0x4ED9 # 0x4EE3 # 0x4EE4 # 0x4EE5 # 0x4EEE # 0x4EF0 # 0x4EF2 # 0x4EF6 # 0x4EFB # 0x4F01 # 0x4F0E # 0x4F0F # 0x4F10 # 0x4F11 # 0x4F1A # 0x4F1D # 0x4F2F # 0x4F34 # 0x4F38 # 0x4F3A # 0x4F3C # 0x4F46 # 0x4F4D # 0x4F4E # 0x4F4F # 0x4F50 # 0x4F53 # 0x4F55 # 0x4F59 # 0x4F5C # 0x4F73 # 0x4F75 # 0x4F7F # 0x4F8B # 0x4F8D # 0x4F9B # 0x4F9D # 0x4FA1 # 0x4FAE # 0x4FAF # 0x4FB5 # 0x4FB6 # 0x4FBF # 0x4FC2 # 0x4FC3 # 0x4FCA # 0x4FD7 # 0x4FDD # 0x4FE1 # 0x4FEE # 0x4FF3 # 0x4FF5 # 0x4FF8 # 0x4FFA # 0x5009 # 0x500B # 0x500D # 0x5012 # 0x5019 # 0x501F # 0x5023 # 0x5024 # 0x502B # 0x5039 # 0x5049 # 0x504F # 0x505C # 0x5065 # 0x5074 # 0x5075 # 0x5076 # 0x507D # 0x508D # 0x5091 # 0x5098 # 0x5099 # 0x50AC # 0x50B2 # 0x50B5 # 0x50B7 # 0x50BE # 0x50C5 # 0x50CD # 0x50CF # 0x50D5 # 0x50DA # 0x50E7 # 0x5100 # 0x5104 # 0x5112 # 0x511F # 0x512A # 0x5143 # 0x5144 # 0x5145 # 0x5146 # 0x5148 # 0x5149 # 0x514B # 0x514D # 0x5150 # 0x515A # 0x5165 # 0x5168 # 0x516B # 0x516C # 0x516D # 0x5171 # 0x5175 # 0x5177 # 0x5178 # 0x517C # 0x5185 # 0x5186 # 0x518A # 0x518D # 0x5192 # 0x5197 # 0x5199 # 0x51A0 # 0x51A5 # 0x51AC # 0x51B6 # 0x51B7 # 0x51C4 # 0x51C6 # 0x51CD # 0x51DD # 0x51E1 # 0x51E6 # 0x51F6 # 0x51F8 # 0x51F9 # 0x51FA # 0x5200 # 0x5203 # 0x5206 # 0x5207 # 0x5208 # 0x520A # 0x5211 # 0x5217 # 0x521D # 0x5224 # 0x5225 # 0x5229 # 0x5230 # 0x5236 # 0x5237 # 0x5238 # 0x5239 # 0x523A # 0x523B # 0x5247 # 0x524A # 0x524D # 0x5256 # 0x525B # #0x525D # # not in sazanami gothic/mincho, DroidSansJapanese 0x5263 # 0x5264 # 0x526F # 0x5270 # 0x5272 # 0x5275 # 0x5287 # 0x529B # 0x529F # 0x52A0 # 0x52A3 # 0x52A9 # 0x52AA # 0x52B1 # 0x52B4 # 0x52B9 # 0x52BE # 0x52C3 # 0x52C5 # 0x52C7 # 0x52C9 # 0x52D5 # 0x52D8 # 0x52D9 # 0x52DD # 0x52DF # 0x52E2 # 0x52E4 # 0x52E7 # 0x52F2 # 0x52FE # 0x5302 # 0x5305 # 0x5316 # 0x5317 # 0x5320 # 0x5339 # 0x533A # 0x533B # 0x533F # 0x5341 # 0x5343 # 0x5347 # 0x5348 # 0x534A # 0x5351 # 0x5352 # 0x5353 # 0x5354 # 0x5357 # 0x5358 # 0x535A # 0x5360 # 0x5370 # 0x5371 # 0x5373 # 0x5374 # 0x5375 # 0x5378 # 0x5384 # 0x5398 # 0x539A # 0x539F # 0x53B3 # 0x53BB # 0x53C2 # 0x53C8 # 0x53CA # 0x53CB # 0x53CC # 0x53CD # 0x53CE # 0x53D4 # 0x53D6 # 0x53D7 # 0x53D9 # 0x53E3 # 0x53E4 # 0x53E5 # 0x53EB # 0x53EC # 0x53EF # 0x53F0 # 0x53F2 # 0x53F3 # 0x53F7 # 0x53F8 # 0x5404 # 0x5408 # 0x5409 # 0x540C # 0x540D # 0x540E # 0x540F # 0x5410 # 0x5411 # 0x541B # 0x541F # 0x5426 # 0x542B # 0x5438 # 0x5439 # 0x5442 # 0x5448 # 0x5449 # 0x544A # 0x5468 # 0x546A # 0x5473 # 0x547C # 0x547D # 0x548C # 0x54B2 # 0x54BD # 0x54C0 # 0x54C1 # 0x54E1 # 0x54F2 # 0x54FA # 0x5504 # 0x5506 # 0x5507 # 0x5510 # 0x552F # 0x5531 # 0x553E # 0x5546 # 0x554F # 0x5553 # 0x5584 # 0x5589 # 0x559A # 0x559C # 0x559D # 0x55A9 # 0x55AA # 0x55AB # 0x55B6 # 0x55C5 # 0x55E3 # 0x5606 # 0x5631 # 0x5632 # 0x5668 # 0x5674 # 0x5687 # 0x56DA # 0x56DB # 0x56DE # 0x56E0 # 0x56E3 # 0x56F0 # 0x56F2 # 0x56F3 # 0x56FA # 0x56FD # 0x570F # 0x5712 # 0x571F # 0x5727 # 0x5728 # 0x5730 # 0x5742 # 0x5747 # 0x574A # 0x5751 # 0x576A # 0x5782 # 0x578B # 0x57A3 # 0x57CB # 0x57CE # 0x57DF # 0x57F7 # 0x57F9 # 0x57FA # 0x57FC # 0x5800 # 0x5802 # 0x5805 # 0x5806 # 0x5815 # 0x5824 # 0x582A # 0x5831 # 0x5834 # 0x5840 # 0x5841 # 0x584A # 0x5851 # 0x5854 # 0x5857 # 0x585A # 0x585E # #0x5861 # # not in DroidSansJapanese 0x5869 # 0x587E # 0x5883 # 0x5893 # 0x5897 # 0x589C # 0x58A8 # 0x58B3 # 0x58BE # 0x58C1 # 0x58C7 # 0x58CA # 0x58CC # 0x58EB # 0x58EE # 0x58F0 # 0x58F1 # 0x58F2 # 0x5909 # 0x590F # 0x5915 # 0x5916 # 0x591A # 0x591C # 0x5922 # 0x5927 # 0x5929 # 0x592A # 0x592B # 0x592E # 0x5931 # 0x5947 # 0x5948 # 0x5949 # 0x594F # 0x5951 # 0x5954 # 0x5965 # 0x5968 # 0x596A # 0x596E # 0x5973 # 0x5974 # 0x597D # 0x5982 # 0x5983 # 0x5984 # 0x598A # 0x5996 # 0x5999 # 0x59A5 # 0x59A8 # 0x59AC # 0x59B9 # 0x59BB # 0x59C9 # 0x59CB # 0x59D3 # 0x59D4 # 0x59EB # 0x59FB # 0x59FF # 0x5A01 # 0x5A18 # 0x5A20 # 0x5A2F # 0x5A46 # 0x5A5A # 0x5A66 # 0x5A7F # 0x5A92 # 0x5A9B # 0x5AC1 # 0x5AC9 # 0x5ACC # 0x5AE1 # 0x5B22 # 0x5B50 # 0x5B54 # 0x5B57 # 0x5B58 # 0x5B5D # 0x5B63 # 0x5B64 # 0x5B66 # 0x5B6B # 0x5B85 # 0x5B87 # 0x5B88 # 0x5B89 # 0x5B8C # 0x5B97 # 0x5B98 # 0x5B99 # 0x5B9A # 0x5B9B # 0x5B9C # 0x5B9D # 0x5B9F # 0x5BA2 # 0x5BA3 # 0x5BA4 # 0x5BAE # 0x5BB0 # 0x5BB3 # 0x5BB4 # 0x5BB5 # 0x5BB6 # 0x5BB9 # 0x5BBF # 0x5BC2 # 0x5BC4 # 0x5BC6 # 0x5BCC # 0x5BD2 # 0x5BDB # 0x5BDD # 0x5BDF # 0x5BE1 # 0x5BE7 # 0x5BE9 # 0x5BEE # 0x5BF8 # 0x5BFA # 0x5BFE # 0x5BFF # 0x5C01 # 0x5C02 # 0x5C04 # 0x5C06 # 0x5C09 # 0x5C0A # 0x5C0B # 0x5C0E # 0x5C0F # 0x5C11 # 0x5C1A # 0x5C31 # 0x5C3A # 0x5C3B # 0x5C3C # 0x5C3D # 0x5C3E # 0x5C3F # 0x5C40 # 0x5C45 # 0x5C48 # 0x5C4A # 0x5C4B # 0x5C55 # 0x5C5E # 0x5C64 # 0x5C65 # 0x5C6F # 0x5C71 # 0x5C90 # 0x5CA1 # 0x5CA9 # 0x5CAC # 0x5CB3 # 0x5CB8 # 0x5CE0 # 0x5CE1 # 0x5CF0 # 0x5CF6 # 0x5D07 # 0x5D0E # 0x5D16 # 0x5D29 # 0x5D50 # 0x5DDD # 0x5DDE # 0x5DE1 # 0x5DE3 # 0x5DE5 # 0x5DE6 # 0x5DE7 # 0x5DE8 # 0x5DEE # 0x5DF1 # 0x5DFB # 0x5DFE # 0x5E02 # 0x5E03 # 0x5E06 # 0x5E0C # 0x5E1D # 0x5E25 # 0x5E2B # 0x5E2D # 0x5E2F # 0x5E30 # 0x5E33 # 0x5E38 # 0x5E3D # 0x5E45 # 0x5E55 # 0x5E63 # 0x5E72 # 0x5E73 # 0x5E74 # 0x5E78 # 0x5E79 # 0x5E7B # 0x5E7C # 0x5E7D # 0x5E7E # 0x5E81 # 0x5E83 # 0x5E8A # 0x5E8F # 0x5E95 # 0x5E97 # 0x5E9C # 0x5EA6 # 0x5EA7 # 0x5EAB # 0x5EAD # 0x5EB6 # 0x5EB7 # 0x5EB8 # 0x5EC3 # 0x5EC9 # 0x5ECA # 0x5EF6 # 0x5EF7 # 0x5EFA # 0x5F01 # 0x5F04 # 0x5F0A # 0x5F0F # 0x5F10 # 0x5F13 # 0x5F14 # 0x5F15 # 0x5F1F # 0x5F25 # 0x5F26 # 0x5F27 # 0x5F31 # 0x5F35 # 0x5F37 # 0x5F3E # 0x5F53 # 0x5F59 # 0x5F62 # 0x5F69 # 0x5F6B # 0x5F70 # 0x5F71 # 0x5F79 # 0x5F7C # 0x5F80 # 0x5F81 # 0x5F84 # 0x5F85 # 0x5F8B # 0x5F8C # 0x5F90 # 0x5F92 # 0x5F93 # 0x5F97 # 0x5FA1 # 0x5FA9 # 0x5FAA # 0x5FAE # 0x5FB3 # 0x5FB4 # 0x5FB9 # 0x5FC3 # 0x5FC5 # 0x5FCC # 0x5FCD # 0x5FD7 # 0x5FD8 # 0x5FD9 # 0x5FDC # 0x5FE0 # 0x5FEB # 0x5FF5 # 0x6012 # 0x6016 # 0x601D # 0x6020 # 0x6025 # 0x6027 # 0x6028 # 0x602A # 0x604B # 0x6050 # 0x6052 # 0x6063 # 0x6065 # 0x6068 # 0x6069 # 0x606D # 0x606F # 0x6075 # 0x6094 # 0x609F # 0x60A0 # 0x60A3 # 0x60A6 # 0x60A9 # 0x60AA # 0x60B2 # 0x60BC # 0x60C5 # 0x60D1 # 0x60DC # 0x60E7 # 0x60E8 # 0x60F0 # 0x60F3 # 0x6101 # 0x6109 # 0x610F # 0x611A # 0x611B # 0x611F # 0x6144 # 0x6148 # 0x614B # 0x614C # 0x614E # 0x6155 # 0x6162 # 0x6163 # 0x6168 # 0x616E # 0x6170 # 0x6176 # 0x6182 # 0x618E # 0x61A4 # 0x61A7 # 0x61A9 # 0x61AC # 0x61B2 # 0x61B6 # 0x61BE # 0x61C7 # 0x61D0 # 0x61F2 # 0x61F8 # 0x6210 # 0x6211 # 0x6212 # 0x621A # 0x6226 # 0x622F # 0x6234 # 0x6238 # 0x623B # 0x623F # 0x6240 # 0x6247 # 0x6249 # 0x624B # 0x624D # 0x6253 # 0x6255 # 0x6271 # 0x6276 # 0x6279 # 0x627F # 0x6280 # 0x6284 # 0x628A # 0x6291 # 0x6295 # 0x6297 # 0x6298 # 0x629C # 0x629E # 0x62AB # 0x62B1 # 0x62B5 # 0x62B9 # 0x62BC # 0x62BD # 0x62C5 # 0x62C9 # 0x62CD # 0x62D0 # 0x62D2 # 0x62D3 # 0x62D8 # 0x62D9 # 0x62DB # 0x62DD # 0x62E0 # 0x62E1 # 0x62EC # 0x62ED # 0x62F3 # 0x62F6 # 0x62F7 # 0x62FE # 0x6301 # 0x6307 # 0x6311 # 0x6319 # 0x631F # 0x6328 # 0x632B # 0x632F # 0x633F # 0x6349 # 0x6355 # 0x6357 # 0x635C # 0x6368 # 0x636E # 0x637B # 0x6383 # 0x6388 # 0x638C # 0x6392 # 0x6398 # 0x639B # 0x63A1 # 0x63A2 # 0x63A5 # 0x63A7 # 0x63A8 # 0x63AA # 0x63B2 # 0x63CF # 0x63D0 # 0x63DA # 0x63DB # 0x63E1 # 0x63EE # 0x63F4 # 0x63FA # 0x640D # 0x642C # 0x642D # 0x643A # 0x643E # 0x6442 # 0x6458 # 0x6469 # 0x646F # 0x6483 # 0x64A4 # 0x64AE # 0x64B2 # 0x64C1 # 0x64CD # 0x64E6 # 0x64EC # 0x652F # 0x6539 # 0x653B # 0x653E # 0x653F # 0x6545 # 0x654F # 0x6551 # 0x6557 # 0x6559 # 0x6562 # 0x6563 # 0x656C # 0x6570 # 0x6574 # 0x6575 # 0x6577 # 0x6587 # 0x6589 # 0x658E # 0x6591 # 0x6597 # 0x6599 # 0x659C # 0x65A4 # 0x65A5 # 0x65AC # 0x65AD # 0x65B0 # 0x65B9 # 0x65BD # 0x65C5 # 0x65CB # 0x65CF # 0x65D7 # 0x65E2 # 0x65E5 # 0x65E6 # 0x65E7 # 0x65E8 # 0x65E9 # 0x65EC # 0x65FA # 0x6606 # 0x6607 # 0x660E # 0x6613 # 0x6614 # 0x661F # 0x6620 # 0x6625 # 0x6627 # 0x6628 # 0x662D # 0x662F # 0x663C # 0x6642 # 0x6669 # 0x666E # 0x666F # 0x6674 # 0x6676 # 0x6681 # 0x6687 # 0x6691 # 0x6696 # 0x6697 # 0x66A6 # 0x66AB # 0x66AE # 0x66B4 # 0x66C7 # 0x66D6 # 0x66DC # 0x66F2 # 0x66F4 # 0x66F8 # 0x66F9 # 0x66FD # 0x66FF # 0x6700 # 0x6708 # 0x6709 # 0x670D # 0x6715 # 0x6717 # 0x671B # 0x671D # 0x671F # 0x6728 # 0x672A # 0x672B # 0x672C # 0x672D # 0x6731 # 0x6734 # 0x673A # 0x673D # 0x6749 # 0x6750 # 0x6751 # 0x675F # 0x6761 # 0x6765 # 0x676F # 0x6771 # 0x677E # 0x677F # 0x6790 # 0x6795 # 0x6797 # 0x679A # 0x679C # 0x679D # 0x67A0 # 0x67A2 # 0x67AF # 0x67B6 # 0x67C4 # 0x67D0 # 0x67D3 # 0x67D4 # 0x67F1 # 0x67F3 # 0x67F5 # 0x67FB # 0x67FF # 0x6803 # 0x6804 # 0x6813 # 0x6821 # 0x682A # 0x6838 # 0x6839 # 0x683C # 0x683D # 0x6841 # 0x6843 # 0x6848 # 0x6851 # 0x685C # 0x685F # 0x6885 # 0x6897 # 0x68A8 # 0x68B0 # 0x68C4 # 0x68CB # 0x68D2 # 0x68DA # 0x68DF # 0x68EE # 0x68FA # 0x6905 # 0x690D # 0x690E # 0x691C # 0x696D # 0x6975 # 0x6977 # 0x697C # 0x697D # 0x6982 # 0x69CB # 0x69D8 # 0x69FD # 0x6A19 # 0x6A21 # 0x6A29 # 0x6A2A # 0x6A39 # 0x6A4B # 0x6A5F # 0x6B04 # 0x6B20 # 0x6B21 # 0x6B27 # 0x6B32 # 0x6B3A # 0x6B3E # 0x6B4C # 0x6B53 # 0x6B62 # 0x6B63 # 0x6B66 # 0x6B69 # 0x6B6F # 0x6B73 # 0x6B74 # 0x6B7B # 0x6B89 # 0x6B8A # 0x6B8B # 0x6B96 # 0x6BB4 # 0x6BB5 # 0x6BBA # 0x6BBB # 0x6BBF # 0x6BC0 # 0x6BCD # 0x6BCE # 0x6BD2 # 0x6BD4 # 0x6BDB # 0x6C0F # 0x6C11 # 0x6C17 # 0x6C34 # 0x6C37 # 0x6C38 # 0x6C3E # 0x6C41 # 0x6C42 # 0x6C4E # 0x6C57 # 0x6C5A # 0x6C5F # 0x6C60 # 0x6C70 # 0x6C7A # 0x6C7D # 0x6C83 # 0x6C88 # 0x6C96 # 0x6C99 # 0x6CA1 # 0x6CA2 # 0x6CB3 # 0x6CB8 # 0x6CB9 # 0x6CBB # 0x6CBC # 0x6CBF # 0x6CC1 # 0x6CC9 # 0x6CCA # 0x6CCC # 0x6CD5 # 0x6CE1 # 0x6CE2 # 0x6CE3 # 0x6CE5 # 0x6CE8 # 0x6CF0 # 0x6CF3 # 0x6D0B # 0x6D17 # 0x6D1E # 0x6D25 # 0x6D2A # 0x6D3B # 0x6D3E # 0x6D41 # 0x6D44 # 0x6D45 # 0x6D5C # 0x6D66 # 0x6D6A # 0x6D6E # 0x6D74 # 0x6D77 # 0x6D78 # 0x6D88 # 0x6D99 # 0x6DAF # 0x6DB2 # 0x6DBC # 0x6DD1 # 0x6DE1 # 0x6DEB # 0x6DF1 # 0x6DF7 # 0x6DFB # 0x6E05 # 0x6E07 # 0x6E08 # 0x6E09 # 0x6E0B # 0x6E13 # 0x6E1B # 0x6E21 # 0x6E26 # 0x6E29 # 0x6E2C # 0x6E2F # 0x6E56 # 0x6E67 # 0x6E6F # 0x6E7E # 0x6E7F # 0x6E80 # 0x6E90 # 0x6E96 # 0x6E9D # 0x6EB6 # 0x6EBA # 0x6EC5 # 0x6ECB # 0x6ED1 # 0x6EDD # 0x6EDE # 0x6EF4 # 0x6F01 # 0x6F02 # 0x6F06 # 0x6F0F # 0x6F14 # 0x6F20 # 0x6F22 # 0x6F2B # 0x6F2C # 0x6F38 # 0x6F54 # 0x6F5C # 0x6F5F # 0x6F64 # 0x6F6E # 0x6F70 # 0x6F84 # 0x6FC0 # 0x6FC1 # 0x6FC3 # 0x6FEB # 0x6FEF # 0x702C # 0x706B # 0x706F # 0x7070 # 0x707D # 0x7089 # 0x708A # 0x708E # 0x70AD # 0x70B9 # 0x70BA # 0x70C8 # 0x7121 # 0x7126 # 0x7136 # 0x713C # 0x714E # 0x7159 # 0x7167 # 0x7169 # 0x716E # 0x718A # 0x719F # 0x71B1 # 0x71C3 # 0x71E5 # 0x7206 # 0x722A # 0x7235 # 0x7236 # 0x723D # 0x7247 # 0x7248 # 0x7259 # 0x725B # 0x7267 # 0x7269 # 0x7272 # 0x7279 # 0x72A0 # 0x72AC # 0x72AF # 0x72B6 # 0x72C2 # 0x72D9 # 0x72E9 # 0x72EC # 0x72ED # 0x731B # 0x731F # 0x732B # 0x732E # 0x7336 # 0x733F # 0x7344 # 0x7363 # 0x7372 # 0x7384 # 0x7387 # 0x7389 # 0x738B # 0x73A9 # 0x73CD # 0x73E0 # 0x73ED # 0x73FE # 0x7403 # 0x7406 # 0x7434 # 0x7460 # 0x7483 # 0x74A7 # 0x74B0 # 0x74BD # 0x74E6 # 0x74F6 # 0x7518 # 0x751A # 0x751F # 0x7523 # 0x7528 # 0x7530 # 0x7531 # 0x7532 # 0x7533 # 0x7537 # 0x753A # 0x753B # 0x754C # 0x754F # 0x7551 # 0x7554 # 0x7559 # 0x755C # 0x755D # 0x7565 # 0x756A # 0x7570 # 0x7573 # 0x757F # 0x758E # 0x7591 # 0x75AB # 0x75B2 # 0x75BE # 0x75C5 # 0x75C7 # 0x75D5 # 0x75D8 # 0x75DB # 0x75E2 # 0x75E9 # 0x75F4 # 0x760D # 0x7642 # 0x7652 # 0x7656 # 0x767A # 0x767B # 0x767D # 0x767E # 0x7684 # 0x7686 # 0x7687 # 0x76AE # 0x76BF # 0x76C6 # 0x76CA # 0x76D7 # 0x76DB # 0x76DF # 0x76E3 # 0x76E4 # 0x76EE # 0x76F2 # 0x76F4 # 0x76F8 # 0x76FE # 0x7701 # 0x7709 # 0x770B # 0x770C # 0x771F # 0x7720 # 0x773A # 0x773C # 0x7740 # 0x7761 # 0x7763 # 0x7766 # 0x77AC # 0x77AD # 0x77B3 # 0x77DB # 0x77E2 # 0x77E5 # 0x77ED # 0x77EF # 0x77F3 # 0x7802 # 0x7814 # 0x7815 # 0x7832 # 0x7834 # 0x785D # 0x786B # 0x786C # 0x7881 # 0x7891 # 0x78BA # 0x78C1 # 0x78E8 # 0x7901 # 0x790E # 0x793A # 0x793C # 0x793E # 0x7948 # 0x7949 # 0x7956 # 0x795D # 0x795E # 0x7965 # 0x7968 # 0x796D # 0x7981 # 0x7985 # 0x798D # 0x798F # 0x79C0 # 0x79C1 # 0x79CB # 0x79D1 # 0x79D2 # 0x79D8 # 0x79DF # 0x79E9 # 0x79F0 # 0x79FB # 0x7A0B # 0x7A0E # 0x7A1A # 0x7A2E # 0x7A32 # 0x7A3C # 0x7A3D # 0x7A3F # 0x7A40 # 0x7A42 # 0x7A4D # 0x7A4F # 0x7A6B # 0x7A74 # 0x7A76 # 0x7A7A # 0x7A81 # 0x7A83 # 0x7A92 # 0x7A93 # 0x7A9F # 0x7AAE # 0x7AAF # 0x7ACB # 0x7ADC # 0x7AE0 # 0x7AE5 # 0x7AEF # 0x7AF6 # 0x7AF9 # 0x7B11 # 0x7B1B # 0x7B26 # 0x7B2C # 0x7B46 # 0x7B49 # 0x7B4B # 0x7B52 # 0x7B54 # 0x7B56 # 0x7B87 # 0x7B8B # 0x7B97 # 0x7BA1 # 0x7BB1 # 0x7BB8 # 0x7BC0 # 0x7BC4 # 0x7BC9 # 0x7BE4 # 0x7C21 # 0x7C3F # 0x7C4D # 0x7C60 # 0x7C73 # 0x7C89 # 0x7C8B # 0x7C92 # 0x7C97 # 0x7C98 # 0x7C9B # 0x7CA7 # 0x7CBE # 0x7CD6 # 0x7CE7 # 0x7CF8 # 0x7CFB # 0x7CFE # 0x7D00 # 0x7D04 # 0x7D05 # 0x7D0B # 0x7D0D # 0x7D14 # 0x7D19 # 0x7D1A # 0x7D1B # 0x7D20 # 0x7D21 # 0x7D22 # 0x7D2B # 0x7D2F # 0x7D30 # 0x7D33 # 0x7D39 # 0x7D3A # 0x7D42 # 0x7D44 # 0x7D4C # 0x7D50 # 0x7D5E # 0x7D61 # 0x7D66 # 0x7D71 # 0x7D75 # 0x7D76 # 0x7D79 # 0x7D99 # 0x7D9A # 0x7DAD # 0x7DB1 # 0x7DB2 # 0x7DBB # 0x7DBF # 0x7DCA # 0x7DCF # 0x7DD1 # 0x7DD2 # 0x7DDA # 0x7DE0 # 0x7DE8 # 0x7DE9 # 0x7DEF # 0x7DF4 # 0x7DFB # 0x7E01 # 0x7E04 # 0x7E1B # 0x7E26 # 0x7E2B # 0x7E2E # 0x7E3E # 0x7E41 # 0x7E4A # 0x7E54 # 0x7E55 # 0x7E6D # 0x7E70 # 0x7F36 # 0x7F6A # 0x7F6E # 0x7F70 # 0x7F72 # 0x7F75 # 0x7F77 # 0x7F85 # 0x7F8A # 0x7F8E # 0x7F9E # 0x7FA4 # 0x7FA8 # 0x7FA9 # 0x7FBD # 0x7FC1 # 0x7FCC # 0x7FD2 # 0x7FFB # 0x7FFC # 0x8001 # 0x8003 # 0x8005 # 0x8010 # 0x8015 # 0x8017 # 0x8033 # 0x8056 # 0x805E # 0x8074 # 0x8077 # 0x8089 # 0x808C # 0x8096 # 0x8098 # 0x809D # 0x80A1 # 0x80A2 # 0x80A5 # 0x80A9 # 0x80AA # 0x80AF # 0x80B2 # 0x80BA # 0x80C3 # 0x80C6 # 0x80CC # 0x80CE # 0x80DE # 0x80F4 # 0x80F8 # 0x80FD # 0x8102 # 0x8105 # 0x8107 # 0x8108 # 0x810A # 0x811A # 0x8131 # 0x8133 # 0x814E # 0x8150 # 0x8155 # 0x816B # 0x8170 # 0x8178 # 0x8179 # 0x817A # 0x819A # 0x819C # 0x819D # 0x81A8 # 0x81B3 # 0x81C6 # 0x81D3 # 0x81E3 # 0x81E8 # 0x81EA # 0x81ED # 0x81F3 # 0x81F4 # 0x81FC # 0x8208 # 0x820C # 0x820E # 0x8217 # 0x821E # 0x821F # 0x822A # 0x822C # 0x8236 # 0x8237 # 0x8239 # 0x8247 # 0x8266 # 0x826F # 0x8272 # 0x8276 # 0x828B # 0x829D # 0x82AF # 0x82B1 # 0x82B3 # 0x82B8 # 0x82BD # 0x82D7 # 0x82DB # 0x82E5 # 0x82E6 # 0x82F1 # 0x8302 # 0x830E # 0x8328 # 0x8336 # 0x8349 # 0x8352 # 0x8358 # 0x8377 # 0x83CA # 0x83CC # 0x83D3 # 0x83DC # 0x83EF # 0x840E # 0x843D # 0x8449 # 0x8457 # 0x845B # 0x846C # 0x84B8 # 0x84C4 # 0x84CB # 0x8511 # 0x8535 # 0x853D # 0x8584 # 0x85A6 # 0x85AA # 0x85AB # 0x85AC # 0x85CD # 0x85E4 # 0x85E9 # 0x85FB # 0x864E # 0x8650 # 0x865A # 0x865C # 0x865E # 0x866B # 0x8679 # 0x868A # 0x8695 # 0x86C7 # 0x86CD # 0x86EE # 0x8702 # 0x871C # 0x878D # 0x8840 # 0x8846 # 0x884C # 0x8853 # 0x8857 # 0x885B # 0x885D # 0x8861 # 0x8863 # 0x8868 # 0x8870 # 0x8877 # 0x888B # 0x8896 # 0x88AB # 0x88C1 # 0x88C2 # 0x88C5 # 0x88CF # 0x88D5 # 0x88DC # 0x88F8 # 0x88FD # 0x88FE # 0x8907 # 0x8910 # 0x8912 # 0x895F # 0x8972 # 0x897F # 0x8981 # 0x8986 # 0x8987 # 0x898B # 0x898F # 0x8996 # 0x899A # 0x89A7 # 0x89AA # 0x89B3 # 0x89D2 # 0x89E3 # 0x89E6 # 0x8A00 # 0x8A02 # 0x8A03 # 0x8A08 # 0x8A0E # 0x8A13 # 0x8A17 # 0x8A18 # 0x8A1F # 0x8A2A # 0x8A2D # 0x8A31 # 0x8A33 # 0x8A34 # 0x8A3A # 0x8A3C # 0x8A50 # 0x8A54 # 0x8A55 # 0x8A5E # 0x8A60 # 0x8A63 # 0x8A66 # 0x8A69 # 0x8A6E # 0x8A70 # 0x8A71 # 0x8A72 # 0x8A73 # 0x8A87 # 0x8A89 # 0x8A8C # 0x8A8D # 0x8A93 # 0x8A95 # 0x8A98 # 0x8A9E # 0x8AA0 # 0x8AA4 # 0x8AAC # 0x8AAD # 0x8AB0 # 0x8AB2 # 0x8ABF # 0x8AC7 # 0x8ACB # 0x8AD6 # 0x8AE6 # 0x8AE7 # 0x8AED # 0x8AEE # 0x8AF8 # 0x8AFE # 0x8B00 # 0x8B01 # 0x8B04 # 0x8B0E # 0x8B19 # 0x8B1B # 0x8B1D # 0x8B21 # 0x8B39 # 0x8B58 # 0x8B5C # 0x8B66 # 0x8B70 # 0x8B72 # 0x8B77 # 0x8C37 # 0x8C46 # 0x8C4A # 0x8C5A # 0x8C61 # 0x8C6A # 0x8C8C # 0x8C9D # 0x8C9E # 0x8CA0 # 0x8CA1 # 0x8CA2 # 0x8CA7 # 0x8CA8 # 0x8CA9 # 0x8CAA # 0x8CAB # 0x8CAC # 0x8CAF # 0x8CB4 # 0x8CB7 # 0x8CB8 # 0x8CBB # 0x8CBC # 0x8CBF # 0x8CC0 # 0x8CC2 # 0x8CC3 # 0x8CC4 # 0x8CC7 # 0x8CCA # 0x8CD3 # 0x8CDB # 0x8CDC # 0x8CDE # 0x8CE0 # 0x8CE2 # 0x8CE6 # 0x8CEA # 0x8CED # 0x8CFC # 0x8D08 # 0x8D64 # 0x8D66 # 0x8D70 # 0x8D74 # 0x8D77 # 0x8D85 # 0x8D8A # 0x8DA3 # 0x8DB3 # 0x8DDD # 0x8DE1 # 0x8DEF # 0x8DF3 # 0x8DF5 # 0x8E0A # 0x8E0F # 0x8E2A # 0x8E74 # 0x8E8D # 0x8EAB # 0x8ECA # 0x8ECC # 0x8ECD # 0x8ED2 # 0x8EDF # 0x8EE2 # 0x8EF8 # 0x8EFD # 0x8F03 # 0x8F09 # 0x8F1D # 0x8F29 # 0x8F2A # 0x8F38 # 0x8F44 # 0x8F9B # 0x8F9E # 0x8FA3 # 0x8FB1 # 0x8FB2 # 0x8FBA # 0x8FBC # 0x8FC5 # 0x8FCE # 0x8FD1 # 0x8FD4 # 0x8FEB # 0x8FED # 0x8FF0 # 0x8FF7 # 0x8FFD # 0x9000 # 0x9001 # 0x9003 # 0x9006 # 0x900F # 0x9010 # 0x9013 # 0x9014 # 0x901A # 0x901D # 0x901F # 0x9020 # 0x9023 # 0x902E # 0x9031 # 0x9032 # 0x9038 # 0x9042 # 0x9045 # 0x9047 # 0x904A # 0x904B # 0x904D # 0x904E # 0x9053 # 0x9054 # 0x9055 # 0x905C # 0x9060 # 0x9061 # 0x9063 # 0x9069 # 0x906D # 0x906E # 0x9075 # 0x9077 # 0x9078 # 0x907A # 0x907F # 0x9084 # 0x90A3 # 0x90A6 # 0x90AA # 0x90B8 # 0x90CA # 0x90CE # 0x90E1 # 0x90E8 # 0x90ED # 0x90F5 # 0x90F7 # 0x90FD # 0x914C # 0x914D # 0x914E # 0x9152 # 0x9154 # 0x9162 # 0x916A # 0x916C # 0x9175 # 0x9177 # 0x9178 # 0x9192 # 0x919C # 0x91B8 # 0x91C7 # 0x91C8 # 0x91CC # 0x91CD # 0x91CE # 0x91CF # 0x91D1 # 0x91DC # 0x91DD # 0x91E3 # 0x920D # 0x9234 # 0x9244 # 0x925B # 0x9262 # 0x9271 # 0x9280 # 0x9283 # 0x9285 # 0x9298 # 0x92AD # 0x92ED # 0x92F3 # 0x92FC # 0x9320 # 0x9326 # 0x932C # 0x932E # 0x932F # 0x9332 # 0x934B # 0x935B # 0x9375 # 0x938C # 0x9396 # 0x93AE # 0x93E1 # 0x9418 # 0x9451 # 0x9577 # 0x9580 # 0x9589 # 0x958B # 0x9591 # 0x9593 # 0x95A2 # 0x95A3 # 0x95A5 # 0x95B2 # 0x95C7 # 0x95D8 # 0x961C # 0x962A # 0x9632 # 0x963B # 0x9644 # 0x964D # 0x9650 # 0x965B # 0x9662 # 0x9663 # 0x9664 # 0x9665 # 0x966A # 0x9670 # 0x9673 # 0x9675 # 0x9676 # 0x9678 # 0x967A # 0x967D # 0x9685 # 0x9686 # 0x968A # 0x968E # 0x968F # 0x9694 # 0x9699 # 0x969B # 0x969C # 0x96A0 # 0x96A3 # 0x96B7 # 0x96BB # 0x96C4 # 0x96C5 # 0x96C6 # 0x96C7 # 0x96CC # 0x96D1 # 0x96E2 # 0x96E3 # 0x96E8 # 0x96EA # 0x96F0 # 0x96F2 # 0x96F6 # 0x96F7 # 0x96FB # 0x9700 # 0x9707 # 0x970A # 0x971C # 0x9727 # 0x9732 # 0x9752 # 0x9759 # 0x975E # 0x9762 # 0x9769 # 0x9774 # 0x97D3 # 0x97F3 # 0x97FB # 0x97FF # 0x9802 # 0x9803 # 0x9805 # 0x9806 # 0x9808 # 0x9810 # 0x9811 # 0x9812 # 0x9813 # 0x9818 # 0x982D # #0x9830 # # not in DroidSansJapanese 0x983B # 0x983C # 0x984C # 0x984D # 0x984E # 0x9854 # 0x9855 # 0x9858 # 0x985E # 0x9867 # 0x98A8 # 0x98DB # 0x98DF # 0x98E2 # 0x98EF # 0x98F2 # 0x98FC # 0x98FD # 0x98FE # 0x9905 # 0x990A # 0x990C # 0x9913 # 0x9928 # 0x9996 # 0x9999 # 0x99AC # 0x99C4 # 0x99C5 # 0x99C6 # 0x99D0 # 0x99D2 # 0x9A0E # 0x9A12 # 0x9A13 # 0x9A30 # 0x9A5A # 0x9AA8 # 0x9AB8 # 0x9AC4 # 0x9AD8 # 0x9AEA # 0x9B31 # 0x9B3C # 0x9B42 # 0x9B45 # 0x9B54 # 0x9B5A # 0x9BAE # 0x9BE8 # 0x9CE5 # 0x9CF4 # 0x9D8F # 0x9DB4 # 0x9E7F # 0x9E93 # 0x9E97 # 0x9EA6 # 0x9EBA # 0x9EBB # 0x9EC4 # 0x9ED2 # 0x9ED9 # 0x9F13 # 0x9F3B # 0x9F62 # #0x20B9F # fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/jv.orth000066400000000000000000000026341503113465200242230ustar00rootroot00000000000000# # fontconfig/fc-lang/jv.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Javanese (jv) # # Sources: # http://www.omniglot.com/writing/javanese.htm # http://en.wikipedia.org/wiki/Javanese_language # # The historical Javanese script is not the main script anymore. Latin has # replaced it. # 0041-005A 0061-007A 00C8-00C9 00E8-00E9 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ka.orth000066400000000000000000000027751503113465200242050ustar00rootroot00000000000000# # fontconfig/fc-lang/ka.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Georgian (KA) # 0589 # Armenian full stop (vertsaket) #10a0-10c5 # capital letters, not used in normal writing 10d0-10f0 #10f1-10f6 # Archaic letters not included in modern fonts #10f7-10f8 # additional letters for Mingrelian and Svan #10fb # Ancient Georgian paragraph separator #2018 # single quote #201a # single quote #201c # double quote #201e # double quote fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/kaa.orth000066400000000000000000000035161503113465200243400ustar00rootroot00000000000000# # fontconfig/fc-lang/kaa.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Coverage taken from TITUS (Thesaurus Indogermanischer Text und # Sprachmaterialien) # # http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm # # Kara-Kalpak (Karakalpak) (KAA) # 0401 0410 0411 0412 0413 0414 0415 0416 0417 0418 0419 041a 041b 041c 041d 041e 041f 0420 0421 0422 0423 0424 0425 0426 0427 0428 0429 042a 042b 042c 042d 042e 042f 0430 0431 0432 0433 0434 0435 0436 0437 0438 0439 043a 043b 043c 043d 043e 043f 0440 0441 0442 0443 0444 0445 0446 0447 0448 0449 044a 044b 044c 044d 044e 044f 0451 #0472 # CYRILLIC CAPITAL LETTER FITA (Historic cyrillic letter) #0473 # CYRILLIC SMALL LETTER FITA (Historic cyrillic letter) 0492 0493 049a 049b 04a2 04a3 04ae 04af 04b2 04b3 04d8 04d9 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/kab.orth000066400000000000000000000025701503113465200243400ustar00rootroot00000000000000# # fontconfig/fc-lang/kab.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Kabyle (kab) # # Sources: # http://www.omniglot.com/writing/kabyle.php # http://www.geonames.de/alphkl.html # 0041-005A 0061-007A 010C-010D 0190 0194 01E6-01E7 025B 0263 1E0C-1E0D 1E24-1E25 1E62-1E63 1E6C-1E6D 1E92-1E93 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ki.orth000066400000000000000000000026421503113465200242060ustar00rootroot00000000000000# # fontconfig/fc-lang/ki.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Kikuyu (KI) # # Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf # 0041-005a 0061-007a 0128 # LATIN CAPITAL LETTER I WITH TILDE 0129 # LATIN SMALL LETTER I WITH TILDE 0168 # LATIN CAPITAL LETTER U WITH TILDE 0169 # LATIN SMALL LETTER U WITH TILDE fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/kj.orth000066400000000000000000000026311503113465200242050ustar00rootroot00000000000000# # fontconfig/fc-lang/kj.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Kuanyama/Kwanyama (kj) # # Sources: # * http://www.omniglot.com/writing/oshiwambo.php # * http://www.panafril10n.org/wikidoc/pmwiki.php/PanAfrLoc/Oshiwambo # * http://wingolog.org/pub/hai-ti/hai-ti.pdf # # C, Q, and X are not used. # 0041-005A 0061-007A fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/kk.orth000066400000000000000000000025531503113465200242110ustar00rootroot00000000000000# # fontconfig/fc-lang/kk.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Kazakh (KK) # # Sources: # www.evertype.com # www.eki.ee/letter # #00ab #00bb #0401 #0406 0410-044f #0451 0456 0492-0493 049a-049b 04a2-04a3 #04ae-04af #04b0-04b1 04ba-04bb 04d8-04d9 04e8-04e9 #2039-203a # angle quotes fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/kl.orth000066400000000000000000000026561503113465200242160ustar00rootroot00000000000000# # fontconfig/fc-lang/kl.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Greenlandic (KL) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a #00ab #00bb 00c1 00c2 00c3 00c5 00c6 #00c9 00ca 00cd 00ce 00d4 00d8 00da 00db 00e1 00e2 00e3 00e5 00e6 #00e9 00ea 00ed 00ee 00f4 00f8 00fa 00fb 0128-0129 0138 0168-0169 #2039-203a # angle quotes fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/km.orth000066400000000000000000000027341503113465200242140ustar00rootroot00000000000000# # fontconfig/fc-lang/km.orth # # Copyright © 2002 Keith Packard # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Central Khmer (km) # # Taken from the Unicode coverage of Khmer script and Unicode character # notes # 1780-179C # 179D-179E # Pali/Sanskrit transliteration only 179F-17A2 # 17A3-17A4 # Deprecated/Discouraged 17A5-17A7 # 17A8 # Discouraged 17A9-17B3 # 17B4-17B5 # Discouraged 17B6-17C5 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/kn.orth000066400000000000000000000025331503113465200242120ustar00rootroot00000000000000# # fontconfig/fc-lang/kn.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Kannada (kn) # # Taken from the Unicode coverage of this language # 0c82-0c83 0c85-0c8c 0c8e-0c90 0c92-0ca8 0caa-0cb3 0cb5-0cb9 0cbe-0cc4 0cc6-0cc8 0cca-0ccd 0cd5-0cd6 0cde 0ce0-0ce1 #0ce6-0cef # Digits fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ko.orth000066400000000000000000003150001503113465200242070ustar00rootroot00000000000000# # fontconfig/fc-lang/ko.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Korean (KO) # # Coverage from KS X 1001 # # Does not include any Han characters as many Korean fonts # don't cover them, and modern Korean usage is moving away from them # # Tor Andersson # #0x3000 # IDEOGRAPHIC SPACE #0x3001 # IDEOGRAPHIC COMMA #0x3002 # IDEOGRAPHIC FULL STOP #0x327F # KOREAN STANDARD SYMBOL #0xFFE6 # FULLWIDTH WON SIGN 0x3131 # HANGUL LETTER KIYEOK 0x3132 # HANGUL LETTER SSANGKIYEOK 0x3133 # HANGUL LETTER KIYEOK-SIOS 0x3134 # HANGUL LETTER NIEUN 0x3135 # HANGUL LETTER NIEUN-CIEUC 0x3136 # HANGUL LETTER NIEUN-HIEUH 0x3137 # HANGUL LETTER TIKEUT 0x3138 # HANGUL LETTER SSANGTIKEUT 0x3139 # HANGUL LETTER RIEUL 0x313A # HANGUL LETTER RIEUL-KIYEOK 0x313B # HANGUL LETTER RIEUL-MIEUM 0x313C # HANGUL LETTER RIEUL-PIEUP 0x313D # HANGUL LETTER RIEUL-SIOS 0x313E # HANGUL LETTER RIEUL-THIEUTH 0x313F # HANGUL LETTER RIEUL-PHIEUPH 0x3140 # HANGUL LETTER RIEUL-HIEUH 0x3141 # HANGUL LETTER MIEUM 0x3142 # HANGUL LETTER PIEUP 0x3143 # HANGUL LETTER SSANGPIEUP 0x3144 # HANGUL LETTER PIEUP-SIOS 0x3145 # HANGUL LETTER SIOS 0x3146 # HANGUL LETTER SSANGSIOS 0x3147 # HANGUL LETTER IEUNG 0x3148 # HANGUL LETTER CIEUC 0x3149 # HANGUL LETTER SSANGCIEUC 0x314A # HANGUL LETTER CHIEUCH 0x314B # HANGUL LETTER KHIEUKH 0x314C # HANGUL LETTER THIEUTH 0x314D # HANGUL LETTER PHIEUPH 0x314E # HANGUL LETTER HIEUH 0x314F # HANGUL LETTER A 0x3150 # HANGUL LETTER AE 0x3151 # HANGUL LETTER YA 0x3152 # HANGUL LETTER YAE 0x3153 # HANGUL LETTER EO 0x3154 # HANGUL LETTER E 0x3155 # HANGUL LETTER YEO 0x3156 # HANGUL LETTER YE 0x3157 # HANGUL LETTER O 0x3158 # HANGUL LETTER WA 0x3159 # HANGUL LETTER WAE 0x315A # HANGUL LETTER OE 0x315B # HANGUL LETTER YO 0x315C # HANGUL LETTER U 0x315D # HANGUL LETTER WEO 0x315E # HANGUL LETTER WE 0x315F # HANGUL LETTER WI 0x3160 # HANGUL LETTER YU 0x3161 # HANGUL LETTER EU 0x3162 # HANGUL LETTER YI 0x3163 # HANGUL LETTER I 0x3165 # HANGUL LETTER SSANGNIEUN 0x3166 # HANGUL LETTER NIEUN-TIKEUT 0x3167 # HANGUL LETTER NIEUN-SIOS 0x3168 # HANGUL LETTER NIEUN-PANSIOS 0x3169 # HANGUL LETTER RIEUL-KIYEOK-SIOS 0x316A # HANGUL LETTER RIEUL-TIKEUT 0x316B # HANGUL LETTER RIEUL-PIEUP-SIOS 0x316C # HANGUL LETTER RIEUL-PANSIOS 0x316D # HANGUL LETTER RIEUL-YEORINHIEUH 0x316E # HANGUL LETTER MIEUM-PIEUP 0x316F # HANGUL LETTER MIEUM-SIOS 0x3170 # HANGUL LETTER MIEUM-PANSIOS 0x3171 # HANGUL LETTER KAPYEOUNMIEUM 0x3172 # HANGUL LETTER PIEUP-KIYEOK 0x3173 # HANGUL LETTER PIEUP-TIKEUT 0x3174 # HANGUL LETTER PIEUP-SIOS-KIYEOK 0x3175 # HANGUL LETTER PIEUP-SIOS-TIKEUT 0x3176 # HANGUL LETTER PIEUP-CIEUC 0x3177 # HANGUL LETTER PIEUP-THIEUTH 0x3178 # HANGUL LETTER KAPYEOUNPIEUP 0x3179 # HANGUL LETTER KAPYEOUNSSANGPIEUP 0x317A # HANGUL LETTER SIOS-KIYEOK 0x317B # HANGUL LETTER SIOS-NIEUN 0x317C # HANGUL LETTER SIOS-TIKEUT 0x317D # HANGUL LETTER SIOS-PIEUP 0x317E # HANGUL LETTER SIOS-CIEUC 0x317F # HANGUL LETTER PANSIOS 0x3180 # HANGUL LETTER SSANGIEUNG 0x3181 # HANGUL LETTER YESIEUNG 0x3182 # HANGUL LETTER YESIEUNG-SIOS 0x3183 # HANGUL LETTER YESIEUNG-PANSIOS 0x3184 # HANGUL LETTER KAPYEOUNPHIEUPH 0x3185 # HANGUL LETTER SSANGHIEUH 0x3186 # HANGUL LETTER YEORINHIEUH 0x3187 # HANGUL LETTER YO-YA 0x3188 # HANGUL LETTER YO-YAE 0x3189 # HANGUL LETTER YO-I 0x318A # HANGUL LETTER YU-YEO 0x318B # HANGUL LETTER YU-YE 0x318C # HANGUL LETTER YU-I 0x318D # HANGUL LETTER ARAEA 0x318E # HANGUL LETTER ARAEAE #0x3260 # CIRCLED HANGUL KIYEOK #0x3261 # CIRCLED HANGUL NIEUN #0x3262 # CIRCLED HANGUL TIKEUT #0x3263 # CIRCLED HANGUL RIEUL #0x3264 # CIRCLED HANGUL MIEUM #0x3265 # CIRCLED HANGUL PIEUP #0x3266 # CIRCLED HANGUL SIOS #0x3267 # CIRCLED HANGUL IEUNG #0x3268 # CIRCLED HANGUL CIEUC #0x3269 # CIRCLED HANGUL CHIEUCH #0x326A # CIRCLED HANGUL KHIEUKH #0x326B # CIRCLED HANGUL THIEUTH #0x326C # CIRCLED HANGUL PHIEUPH #0x326D # CIRCLED HANGUL HIEUH #0x326E # CIRCLED HANGUL KIYEOK A #0x326F # CIRCLED HANGUL NIEUN A #0x3270 # CIRCLED HANGUL TIKEUT A #0x3271 # CIRCLED HANGUL RIEUL A #0x3272 # CIRCLED HANGUL MIEUM A #0x3273 # CIRCLED HANGUL PIEUP A #0x3274 # CIRCLED HANGUL SIOS A #0x3275 # CIRCLED HANGUL IEUNG A #0x3276 # CIRCLED HANGUL CIEUC A #0x3277 # CIRCLED HANGUL CHIEUCH A #0x3278 # CIRCLED HANGUL KHIEUKH A #0x3279 # CIRCLED HANGUL THIEUTH A #0x327A # CIRCLED HANGUL PHIEUPH A #0x327B # CIRCLED HANGUL HIEUH A #0x3200 # PARENTHESIZED HANGUL KIYEOK #0x3201 # PARENTHESIZED HANGUL NIEUN #0x3202 # PARENTHESIZED HANGUL TIKEUT #0x3203 # PARENTHESIZED HANGUL RIEUL #0x3204 # PARENTHESIZED HANGUL MIEUM #0x3205 # PARENTHESIZED HANGUL PIEUP #0x3206 # PARENTHESIZED HANGUL SIOS #0x3207 # PARENTHESIZED HANGUL IEUNG #0x3208 # PARENTHESIZED HANGUL CIEUC #0x3209 # PARENTHESIZED HANGUL CHIEUCH #0x320A # PARENTHESIZED HANGUL KHIEUKH #0x320B # PARENTHESIZED HANGUL THIEUTH #0x320C # PARENTHESIZED HANGUL PHIEUPH #0x320D # PARENTHESIZED HANGUL HIEUH #0x320E # PARENTHESIZED HANGUL KIYEOK A #0x320F # PARENTHESIZED HANGUL NIEUN A #0x3210 # PARENTHESIZED HANGUL TIKEUT A #0x3211 # PARENTHESIZED HANGUL RIEUL A #0x3212 # PARENTHESIZED HANGUL MIEUM A #0x3213 # PARENTHESIZED HANGUL PIEUP A #0x3214 # PARENTHESIZED HANGUL SIOS A #0x3215 # PARENTHESIZED HANGUL IEUNG A #0x3216 # PARENTHESIZED HANGUL CIEUC A #0x3217 # PARENTHESIZED HANGUL CHIEUCH A #0x3218 # PARENTHESIZED HANGUL KHIEUKH A #0x3219 # PARENTHESIZED HANGUL THIEUTH A #0x321A # PARENTHESIZED HANGUL PHIEUPH A #0x321B # PARENTHESIZED HANGUL HIEUH A #0x321C # PARENTHESIZED HANGUL CIEUC U 0xAC00 # HANGUL SYLLABLE KIYEOK-A 0xAC01 # HANGUL SYLLABLE KIYEOK-A-KIYEOK 0xAC04 # HANGUL SYLLABLE KIYEOK-A-NIEUN 0xAC07 # HANGUL SYLLABLE KIYEOK-A-TIKEUT 0xAC08 # HANGUL SYLLABLE KIYEOK-A-RIEUL 0xAC09 # HANGUL SYLLABLE KIYEOK-A-RIEULKIYEOK 0xAC0A # HANGUL SYLLABLE KIYEOK-A-RIEULMIEUM 0xAC10 # HANGUL SYLLABLE KIYEOK-A-MIEUM 0xAC11 # HANGUL SYLLABLE KIYEOK-A-PIEUP 0xAC12 # HANGUL SYLLABLE KIYEOK-A-PIEUPSIOS 0xAC13 # HANGUL SYLLABLE KIYEOK-A-SIOS 0xAC14 # HANGUL SYLLABLE KIYEOK-A-SSANGSIOS 0xAC15 # HANGUL SYLLABLE KIYEOK-A-IEUNG 0xAC16 # HANGUL SYLLABLE KIYEOK-A-CIEUC 0xAC17 # HANGUL SYLLABLE KIYEOK-A-CHIEUCH 0xAC19 # HANGUL SYLLABLE KIYEOK-A-THIEUTH 0xAC1A # HANGUL SYLLABLE KIYEOK-A-PHIEUPH 0xAC1B # HANGUL SYLLABLE KIYEOK-A-HIEUH 0xAC1C # HANGUL SYLLABLE KIYEOK-AE 0xAC1D # HANGUL SYLLABLE KIYEOK-AE-KIYEOK 0xAC20 # HANGUL SYLLABLE KIYEOK-AE-NIEUN 0xAC24 # HANGUL SYLLABLE KIYEOK-AE-RIEUL 0xAC2C # HANGUL SYLLABLE KIYEOK-AE-MIEUM 0xAC2D # HANGUL SYLLABLE KIYEOK-AE-PIEUP 0xAC2F # HANGUL SYLLABLE KIYEOK-AE-SIOS 0xAC30 # HANGUL SYLLABLE KIYEOK-AE-SSANGSIOS 0xAC31 # HANGUL SYLLABLE KIYEOK-AE-IEUNG 0xAC38 # HANGUL SYLLABLE KIYEOK-YA 0xAC39 # HANGUL SYLLABLE KIYEOK-YA-KIYEOK 0xAC3C # HANGUL SYLLABLE KIYEOK-YA-NIEUN 0xAC40 # HANGUL SYLLABLE KIYEOK-YA-RIEUL 0xAC4B # HANGUL SYLLABLE KIYEOK-YA-SIOS 0xAC4D # HANGUL SYLLABLE KIYEOK-YA-IEUNG 0xAC54 # HANGUL SYLLABLE KIYEOK-YAE 0xAC58 # HANGUL SYLLABLE KIYEOK-YAE-NIEUN 0xAC5C # HANGUL SYLLABLE KIYEOK-YAE-RIEUL 0xAC70 # HANGUL SYLLABLE KIYEOK-EO 0xAC71 # HANGUL SYLLABLE KIYEOK-EO-KIYEOK 0xAC74 # HANGUL SYLLABLE KIYEOK-EO-NIEUN 0xAC77 # HANGUL SYLLABLE KIYEOK-EO-TIKEUT 0xAC78 # HANGUL SYLLABLE KIYEOK-EO-RIEUL 0xAC7A # HANGUL SYLLABLE KIYEOK-EO-RIEULMIEUM 0xAC80 # HANGUL SYLLABLE KIYEOK-EO-MIEUM 0xAC81 # HANGUL SYLLABLE KIYEOK-EO-PIEUP 0xAC83 # HANGUL SYLLABLE KIYEOK-EO-SIOS 0xAC84 # HANGUL SYLLABLE KIYEOK-EO-SSANGSIOS 0xAC85 # HANGUL SYLLABLE KIYEOK-EO-IEUNG 0xAC86 # HANGUL SYLLABLE KIYEOK-EO-CIEUC 0xAC89 # HANGUL SYLLABLE KIYEOK-EO-THIEUTH 0xAC8A # HANGUL SYLLABLE KIYEOK-EO-PHIEUPH 0xAC8B # HANGUL SYLLABLE KIYEOK-EO-HIEUH 0xAC8C # HANGUL SYLLABLE KIYEOK-E 0xAC90 # HANGUL SYLLABLE KIYEOK-E-NIEUN 0xAC94 # HANGUL SYLLABLE KIYEOK-E-RIEUL 0xAC9C # HANGUL SYLLABLE KIYEOK-E-MIEUM 0xAC9D # HANGUL SYLLABLE KIYEOK-E-PIEUP 0xAC9F # HANGUL SYLLABLE KIYEOK-E-SIOS 0xACA0 # HANGUL SYLLABLE KIYEOK-E-SSANGSIOS 0xACA1 # HANGUL SYLLABLE KIYEOK-E-IEUNG 0xACA8 # HANGUL SYLLABLE KIYEOK-YEO 0xACA9 # HANGUL SYLLABLE KIYEOK-YEO-KIYEOK 0xACAA # HANGUL SYLLABLE KIYEOK-YEO-SSANGKIYEOK 0xACAC # HANGUL SYLLABLE KIYEOK-YEO-NIEUN 0xACAF # HANGUL SYLLABLE KIYEOK-YEO-TIKEUT 0xACB0 # HANGUL SYLLABLE KIYEOK-YEO-RIEUL 0xACB8 # HANGUL SYLLABLE KIYEOK-YEO-MIEUM 0xACB9 # HANGUL SYLLABLE KIYEOK-YEO-PIEUP 0xACBB # HANGUL SYLLABLE KIYEOK-YEO-SIOS 0xACBC # HANGUL SYLLABLE KIYEOK-YEO-SSANGSIOS 0xACBD # HANGUL SYLLABLE KIYEOK-YEO-IEUNG 0xACC1 # HANGUL SYLLABLE KIYEOK-YEO-THIEUTH 0xACC4 # HANGUL SYLLABLE KIYEOK-YE 0xACC8 # HANGUL SYLLABLE KIYEOK-YE-NIEUN 0xACCC # HANGUL SYLLABLE KIYEOK-YE-RIEUL 0xACD5 # HANGUL SYLLABLE KIYEOK-YE-PIEUP 0xACD7 # HANGUL SYLLABLE KIYEOK-YE-SIOS 0xACE0 # HANGUL SYLLABLE KIYEOK-O 0xACE1 # HANGUL SYLLABLE KIYEOK-O-KIYEOK 0xACE4 # HANGUL SYLLABLE KIYEOK-O-NIEUN 0xACE7 # HANGUL SYLLABLE KIYEOK-O-TIKEUT 0xACE8 # HANGUL SYLLABLE KIYEOK-O-RIEUL 0xACEA # HANGUL SYLLABLE KIYEOK-O-RIEULMIEUM 0xACEC # HANGUL SYLLABLE KIYEOK-O-RIEULSIOS 0xACEF # HANGUL SYLLABLE KIYEOK-O-RIEULHIEUH 0xACF0 # HANGUL SYLLABLE KIYEOK-O-MIEUM 0xACF1 # HANGUL SYLLABLE KIYEOK-O-PIEUP 0xACF3 # HANGUL SYLLABLE KIYEOK-O-SIOS 0xACF5 # HANGUL SYLLABLE KIYEOK-O-IEUNG 0xACF6 # HANGUL SYLLABLE KIYEOK-O-CIEUC 0xACFC # HANGUL SYLLABLE KIYEOK-WA 0xACFD # HANGUL SYLLABLE KIYEOK-WA-KIYEOK 0xAD00 # HANGUL SYLLABLE KIYEOK-WA-NIEUN 0xAD04 # HANGUL SYLLABLE KIYEOK-WA-RIEUL 0xAD06 # HANGUL SYLLABLE KIYEOK-WA-RIEULMIEUM 0xAD0C # HANGUL SYLLABLE KIYEOK-WA-MIEUM 0xAD0D # HANGUL SYLLABLE KIYEOK-WA-PIEUP 0xAD0F # HANGUL SYLLABLE KIYEOK-WA-SIOS 0xAD11 # HANGUL SYLLABLE KIYEOK-WA-IEUNG 0xAD18 # HANGUL SYLLABLE KIYEOK-WAE 0xAD1C # HANGUL SYLLABLE KIYEOK-WAE-NIEUN 0xAD20 # HANGUL SYLLABLE KIYEOK-WAE-RIEUL 0xAD29 # HANGUL SYLLABLE KIYEOK-WAE-PIEUP 0xAD2C # HANGUL SYLLABLE KIYEOK-WAE-SSANGSIOS 0xAD2D # HANGUL SYLLABLE KIYEOK-WAE-IEUNG 0xAD34 # HANGUL SYLLABLE KIYEOK-OE 0xAD35 # HANGUL SYLLABLE KIYEOK-OE-KIYEOK 0xAD38 # HANGUL SYLLABLE KIYEOK-OE-NIEUN 0xAD3C # HANGUL SYLLABLE KIYEOK-OE-RIEUL 0xAD44 # HANGUL SYLLABLE KIYEOK-OE-MIEUM 0xAD45 # HANGUL SYLLABLE KIYEOK-OE-PIEUP 0xAD47 # HANGUL SYLLABLE KIYEOK-OE-SIOS 0xAD49 # HANGUL SYLLABLE KIYEOK-OE-IEUNG 0xAD50 # HANGUL SYLLABLE KIYEOK-YO 0xAD54 # HANGUL SYLLABLE KIYEOK-YO-NIEUN 0xAD58 # HANGUL SYLLABLE KIYEOK-YO-RIEUL 0xAD61 # HANGUL SYLLABLE KIYEOK-YO-PIEUP 0xAD63 # HANGUL SYLLABLE KIYEOK-YO-SIOS 0xAD6C # HANGUL SYLLABLE KIYEOK-U 0xAD6D # HANGUL SYLLABLE KIYEOK-U-KIYEOK 0xAD70 # HANGUL SYLLABLE KIYEOK-U-NIEUN 0xAD73 # HANGUL SYLLABLE KIYEOK-U-TIKEUT 0xAD74 # HANGUL SYLLABLE KIYEOK-U-RIEUL 0xAD75 # HANGUL SYLLABLE KIYEOK-U-RIEULKIYEOK 0xAD76 # HANGUL SYLLABLE KIYEOK-U-RIEULMIEUM 0xAD7B # HANGUL SYLLABLE KIYEOK-U-RIEULHIEUH 0xAD7C # HANGUL SYLLABLE KIYEOK-U-MIEUM 0xAD7D # HANGUL SYLLABLE KIYEOK-U-PIEUP 0xAD7F # HANGUL SYLLABLE KIYEOK-U-SIOS 0xAD81 # HANGUL SYLLABLE KIYEOK-U-IEUNG 0xAD82 # HANGUL SYLLABLE KIYEOK-U-CIEUC 0xAD88 # HANGUL SYLLABLE KIYEOK-WEO 0xAD89 # HANGUL SYLLABLE KIYEOK-WEO-KIYEOK 0xAD8C # HANGUL SYLLABLE KIYEOK-WEO-NIEUN 0xAD90 # HANGUL SYLLABLE KIYEOK-WEO-RIEUL 0xAD9C # HANGUL SYLLABLE KIYEOK-WEO-SSANGSIOS 0xAD9D # HANGUL SYLLABLE KIYEOK-WEO-IEUNG 0xADA4 # HANGUL SYLLABLE KIYEOK-WE 0xADB7 # HANGUL SYLLABLE KIYEOK-WE-SIOS 0xADC0 # HANGUL SYLLABLE KIYEOK-WI 0xADC1 # HANGUL SYLLABLE KIYEOK-WI-KIYEOK 0xADC4 # HANGUL SYLLABLE KIYEOK-WI-NIEUN 0xADC8 # HANGUL SYLLABLE KIYEOK-WI-RIEUL 0xADD0 # HANGUL SYLLABLE KIYEOK-WI-MIEUM 0xADD1 # HANGUL SYLLABLE KIYEOK-WI-PIEUP 0xADD3 # HANGUL SYLLABLE KIYEOK-WI-SIOS 0xADDC # HANGUL SYLLABLE KIYEOK-YU 0xADE0 # HANGUL SYLLABLE KIYEOK-YU-NIEUN 0xADE4 # HANGUL SYLLABLE KIYEOK-YU-RIEUL 0xADF8 # HANGUL SYLLABLE KIYEOK-EU 0xADF9 # HANGUL SYLLABLE KIYEOK-EU-KIYEOK 0xADFC # HANGUL SYLLABLE KIYEOK-EU-NIEUN 0xADFF # HANGUL SYLLABLE KIYEOK-EU-TIKEUT 0xAE00 # HANGUL SYLLABLE KIYEOK-EU-RIEUL 0xAE01 # HANGUL SYLLABLE KIYEOK-EU-RIEULKIYEOK 0xAE08 # HANGUL SYLLABLE KIYEOK-EU-MIEUM 0xAE09 # HANGUL SYLLABLE KIYEOK-EU-PIEUP 0xAE0B # HANGUL SYLLABLE KIYEOK-EU-SIOS 0xAE0D # HANGUL SYLLABLE KIYEOK-EU-IEUNG 0xAE14 # HANGUL SYLLABLE KIYEOK-YI 0xAE30 # HANGUL SYLLABLE KIYEOK-I 0xAE31 # HANGUL SYLLABLE KIYEOK-I-KIYEOK 0xAE34 # HANGUL SYLLABLE KIYEOK-I-NIEUN 0xAE37 # HANGUL SYLLABLE KIYEOK-I-TIKEUT 0xAE38 # HANGUL SYLLABLE KIYEOK-I-RIEUL 0xAE3A # HANGUL SYLLABLE KIYEOK-I-RIEULMIEUM 0xAE40 # HANGUL SYLLABLE KIYEOK-I-MIEUM 0xAE41 # HANGUL SYLLABLE KIYEOK-I-PIEUP 0xAE43 # HANGUL SYLLABLE KIYEOK-I-SIOS 0xAE45 # HANGUL SYLLABLE KIYEOK-I-IEUNG 0xAE46 # HANGUL SYLLABLE KIYEOK-I-CIEUC 0xAE4A # HANGUL SYLLABLE KIYEOK-I-PHIEUPH 0xAE4C # HANGUL SYLLABLE SSANGKIYEOK-A 0xAE4D # HANGUL SYLLABLE SSANGKIYEOK-A-KIYEOK 0xAE4E # HANGUL SYLLABLE SSANGKIYEOK-A-SSANGKIYEOK 0xAE50 # HANGUL SYLLABLE SSANGKIYEOK-A-NIEUN 0xAE54 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEUL 0xAE56 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULMIEUM 0xAE5C # HANGUL SYLLABLE SSANGKIYEOK-A-MIEUM 0xAE5D # HANGUL SYLLABLE SSANGKIYEOK-A-PIEUP 0xAE5F # HANGUL SYLLABLE SSANGKIYEOK-A-SIOS 0xAE60 # HANGUL SYLLABLE SSANGKIYEOK-A-SSANGSIOS 0xAE61 # HANGUL SYLLABLE SSANGKIYEOK-A-IEUNG 0xAE65 # HANGUL SYLLABLE SSANGKIYEOK-A-THIEUTH 0xAE68 # HANGUL SYLLABLE SSANGKIYEOK-AE 0xAE69 # HANGUL SYLLABLE SSANGKIYEOK-AE-KIYEOK 0xAE6C # HANGUL SYLLABLE SSANGKIYEOK-AE-NIEUN 0xAE70 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEUL 0xAE78 # HANGUL SYLLABLE SSANGKIYEOK-AE-MIEUM 0xAE79 # HANGUL SYLLABLE SSANGKIYEOK-AE-PIEUP 0xAE7B # HANGUL SYLLABLE SSANGKIYEOK-AE-SIOS 0xAE7C # HANGUL SYLLABLE SSANGKIYEOK-AE-SSANGSIOS 0xAE7D # HANGUL SYLLABLE SSANGKIYEOK-AE-IEUNG 0xAE84 # HANGUL SYLLABLE SSANGKIYEOK-YA 0xAE85 # HANGUL SYLLABLE SSANGKIYEOK-YA-KIYEOK 0xAE8C # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEUL 0xAEBC # HANGUL SYLLABLE SSANGKIYEOK-EO 0xAEBD # HANGUL SYLLABLE SSANGKIYEOK-EO-KIYEOK 0xAEBE # HANGUL SYLLABLE SSANGKIYEOK-EO-SSANGKIYEOK 0xAEC0 # HANGUL SYLLABLE SSANGKIYEOK-EO-NIEUN 0xAEC4 # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEUL 0xAECC # HANGUL SYLLABLE SSANGKIYEOK-EO-MIEUM 0xAECD # HANGUL SYLLABLE SSANGKIYEOK-EO-PIEUP 0xAECF # HANGUL SYLLABLE SSANGKIYEOK-EO-SIOS 0xAED0 # HANGUL SYLLABLE SSANGKIYEOK-EO-SSANGSIOS 0xAED1 # HANGUL SYLLABLE SSANGKIYEOK-EO-IEUNG 0xAED8 # HANGUL SYLLABLE SSANGKIYEOK-E 0xAED9 # HANGUL SYLLABLE SSANGKIYEOK-E-KIYEOK 0xAEDC # HANGUL SYLLABLE SSANGKIYEOK-E-NIEUN 0xAEE8 # HANGUL SYLLABLE SSANGKIYEOK-E-MIEUM 0xAEEB # HANGUL SYLLABLE SSANGKIYEOK-E-SIOS 0xAEED # HANGUL SYLLABLE SSANGKIYEOK-E-IEUNG 0xAEF4 # HANGUL SYLLABLE SSANGKIYEOK-YEO 0xAEF8 # HANGUL SYLLABLE SSANGKIYEOK-YEO-NIEUN 0xAEFC # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEUL 0xAF07 # HANGUL SYLLABLE SSANGKIYEOK-YEO-SIOS 0xAF08 # HANGUL SYLLABLE SSANGKIYEOK-YEO-SSANGSIOS 0xAF0D # HANGUL SYLLABLE SSANGKIYEOK-YEO-THIEUTH 0xAF10 # HANGUL SYLLABLE SSANGKIYEOK-YE 0xAF2C # HANGUL SYLLABLE SSANGKIYEOK-O 0xAF2D # HANGUL SYLLABLE SSANGKIYEOK-O-KIYEOK 0xAF30 # HANGUL SYLLABLE SSANGKIYEOK-O-NIEUN 0xAF32 # HANGUL SYLLABLE SSANGKIYEOK-O-NIEUNHIEUH 0xAF34 # HANGUL SYLLABLE SSANGKIYEOK-O-RIEUL 0xAF3C # HANGUL SYLLABLE SSANGKIYEOK-O-MIEUM 0xAF3D # HANGUL SYLLABLE SSANGKIYEOK-O-PIEUP 0xAF3F # HANGUL SYLLABLE SSANGKIYEOK-O-SIOS 0xAF41 # HANGUL SYLLABLE SSANGKIYEOK-O-IEUNG 0xAF42 # HANGUL SYLLABLE SSANGKIYEOK-O-CIEUC 0xAF43 # HANGUL SYLLABLE SSANGKIYEOK-O-CHIEUCH 0xAF48 # HANGUL SYLLABLE SSANGKIYEOK-WA 0xAF49 # HANGUL SYLLABLE SSANGKIYEOK-WA-KIYEOK 0xAF50 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEUL 0xAF5C # HANGUL SYLLABLE SSANGKIYEOK-WA-SSANGSIOS 0xAF5D # HANGUL SYLLABLE SSANGKIYEOK-WA-IEUNG 0xAF64 # HANGUL SYLLABLE SSANGKIYEOK-WAE 0xAF65 # HANGUL SYLLABLE SSANGKIYEOK-WAE-KIYEOK 0xAF79 # HANGUL SYLLABLE SSANGKIYEOK-WAE-IEUNG 0xAF80 # HANGUL SYLLABLE SSANGKIYEOK-OE 0xAF84 # HANGUL SYLLABLE SSANGKIYEOK-OE-NIEUN 0xAF88 # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEUL 0xAF90 # HANGUL SYLLABLE SSANGKIYEOK-OE-MIEUM 0xAF91 # HANGUL SYLLABLE SSANGKIYEOK-OE-PIEUP 0xAF95 # HANGUL SYLLABLE SSANGKIYEOK-OE-IEUNG 0xAF9C # HANGUL SYLLABLE SSANGKIYEOK-YO 0xAFB8 # HANGUL SYLLABLE SSANGKIYEOK-U 0xAFB9 # HANGUL SYLLABLE SSANGKIYEOK-U-KIYEOK 0xAFBC # HANGUL SYLLABLE SSANGKIYEOK-U-NIEUN 0xAFC0 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEUL 0xAFC7 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULHIEUH 0xAFC8 # HANGUL SYLLABLE SSANGKIYEOK-U-MIEUM 0xAFC9 # HANGUL SYLLABLE SSANGKIYEOK-U-PIEUP 0xAFCB # HANGUL SYLLABLE SSANGKIYEOK-U-SIOS 0xAFCD # HANGUL SYLLABLE SSANGKIYEOK-U-IEUNG 0xAFCE # HANGUL SYLLABLE SSANGKIYEOK-U-CIEUC 0xAFD4 # HANGUL SYLLABLE SSANGKIYEOK-WEO 0xAFDC # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEUL 0xAFE8 # HANGUL SYLLABLE SSANGKIYEOK-WEO-SSANGSIOS 0xAFE9 # HANGUL SYLLABLE SSANGKIYEOK-WEO-IEUNG 0xAFF0 # HANGUL SYLLABLE SSANGKIYEOK-WE 0xAFF1 # HANGUL SYLLABLE SSANGKIYEOK-WE-KIYEOK 0xAFF4 # HANGUL SYLLABLE SSANGKIYEOK-WE-NIEUN 0xAFF8 # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEUL 0xB000 # HANGUL SYLLABLE SSANGKIYEOK-WE-MIEUM 0xB001 # HANGUL SYLLABLE SSANGKIYEOK-WE-PIEUP 0xB004 # HANGUL SYLLABLE SSANGKIYEOK-WE-SSANGSIOS 0xB00C # HANGUL SYLLABLE SSANGKIYEOK-WI 0xB010 # HANGUL SYLLABLE SSANGKIYEOK-WI-NIEUN 0xB014 # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEUL 0xB01C # HANGUL SYLLABLE SSANGKIYEOK-WI-MIEUM 0xB01D # HANGUL SYLLABLE SSANGKIYEOK-WI-PIEUP 0xB028 # HANGUL SYLLABLE SSANGKIYEOK-YU 0xB044 # HANGUL SYLLABLE SSANGKIYEOK-EU 0xB045 # HANGUL SYLLABLE SSANGKIYEOK-EU-KIYEOK 0xB048 # HANGUL SYLLABLE SSANGKIYEOK-EU-NIEUN 0xB04A # HANGUL SYLLABLE SSANGKIYEOK-EU-NIEUNHIEUH 0xB04C # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEUL 0xB04E # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULMIEUM 0xB053 # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULHIEUH 0xB054 # HANGUL SYLLABLE SSANGKIYEOK-EU-MIEUM 0xB055 # HANGUL SYLLABLE SSANGKIYEOK-EU-PIEUP 0xB057 # HANGUL SYLLABLE SSANGKIYEOK-EU-SIOS 0xB059 # HANGUL SYLLABLE SSANGKIYEOK-EU-IEUNG 0xB05D # HANGUL SYLLABLE SSANGKIYEOK-EU-THIEUTH 0xB07C # HANGUL SYLLABLE SSANGKIYEOK-I 0xB07D # HANGUL SYLLABLE SSANGKIYEOK-I-KIYEOK 0xB080 # HANGUL SYLLABLE SSANGKIYEOK-I-NIEUN 0xB084 # HANGUL SYLLABLE SSANGKIYEOK-I-RIEUL 0xB08C # HANGUL SYLLABLE SSANGKIYEOK-I-MIEUM 0xB08D # HANGUL SYLLABLE SSANGKIYEOK-I-PIEUP 0xB08F # HANGUL SYLLABLE SSANGKIYEOK-I-SIOS 0xB091 # HANGUL SYLLABLE SSANGKIYEOK-I-IEUNG 0xB098 # HANGUL SYLLABLE NIEUN-A 0xB099 # HANGUL SYLLABLE NIEUN-A-KIYEOK 0xB09A # HANGUL SYLLABLE NIEUN-A-SSANGKIYEOK 0xB09C # HANGUL SYLLABLE NIEUN-A-NIEUN 0xB09F # HANGUL SYLLABLE NIEUN-A-TIKEUT 0xB0A0 # HANGUL SYLLABLE NIEUN-A-RIEUL 0xB0A1 # HANGUL SYLLABLE NIEUN-A-RIEULKIYEOK 0xB0A2 # HANGUL SYLLABLE NIEUN-A-RIEULMIEUM 0xB0A8 # HANGUL SYLLABLE NIEUN-A-MIEUM 0xB0A9 # HANGUL SYLLABLE NIEUN-A-PIEUP 0xB0AB # HANGUL SYLLABLE NIEUN-A-SIOS 0xB0AC # HANGUL SYLLABLE NIEUN-A-SSANGSIOS 0xB0AD # HANGUL SYLLABLE NIEUN-A-IEUNG 0xB0AE # HANGUL SYLLABLE NIEUN-A-CIEUC 0xB0AF # HANGUL SYLLABLE NIEUN-A-CHIEUCH 0xB0B1 # HANGUL SYLLABLE NIEUN-A-THIEUTH 0xB0B3 # HANGUL SYLLABLE NIEUN-A-HIEUH 0xB0B4 # HANGUL SYLLABLE NIEUN-AE 0xB0B5 # HANGUL SYLLABLE NIEUN-AE-KIYEOK 0xB0B8 # HANGUL SYLLABLE NIEUN-AE-NIEUN 0xB0BC # HANGUL SYLLABLE NIEUN-AE-RIEUL 0xB0C4 # HANGUL SYLLABLE NIEUN-AE-MIEUM 0xB0C5 # HANGUL SYLLABLE NIEUN-AE-PIEUP 0xB0C7 # HANGUL SYLLABLE NIEUN-AE-SIOS 0xB0C8 # HANGUL SYLLABLE NIEUN-AE-SSANGSIOS 0xB0C9 # HANGUL SYLLABLE NIEUN-AE-IEUNG 0xB0D0 # HANGUL SYLLABLE NIEUN-YA 0xB0D1 # HANGUL SYLLABLE NIEUN-YA-KIYEOK 0xB0D4 # HANGUL SYLLABLE NIEUN-YA-NIEUN 0xB0D8 # HANGUL SYLLABLE NIEUN-YA-RIEUL 0xB0E0 # HANGUL SYLLABLE NIEUN-YA-MIEUM 0xB0E5 # HANGUL SYLLABLE NIEUN-YA-IEUNG 0xB108 # HANGUL SYLLABLE NIEUN-EO 0xB109 # HANGUL SYLLABLE NIEUN-EO-KIYEOK 0xB10B # HANGUL SYLLABLE NIEUN-EO-KIYEOKSIOS 0xB10C # HANGUL SYLLABLE NIEUN-EO-NIEUN 0xB110 # HANGUL SYLLABLE NIEUN-EO-RIEUL 0xB112 # HANGUL SYLLABLE NIEUN-EO-RIEULMIEUM 0xB113 # HANGUL SYLLABLE NIEUN-EO-RIEULPIEUP 0xB118 # HANGUL SYLLABLE NIEUN-EO-MIEUM 0xB119 # HANGUL SYLLABLE NIEUN-EO-PIEUP 0xB11B # HANGUL SYLLABLE NIEUN-EO-SIOS 0xB11C # HANGUL SYLLABLE NIEUN-EO-SSANGSIOS 0xB11D # HANGUL SYLLABLE NIEUN-EO-IEUNG 0xB123 # HANGUL SYLLABLE NIEUN-EO-HIEUH 0xB124 # HANGUL SYLLABLE NIEUN-E 0xB125 # HANGUL SYLLABLE NIEUN-E-KIYEOK 0xB128 # HANGUL SYLLABLE NIEUN-E-NIEUN 0xB12C # HANGUL SYLLABLE NIEUN-E-RIEUL 0xB134 # HANGUL SYLLABLE NIEUN-E-MIEUM 0xB135 # HANGUL SYLLABLE NIEUN-E-PIEUP 0xB137 # HANGUL SYLLABLE NIEUN-E-SIOS 0xB138 # HANGUL SYLLABLE NIEUN-E-SSANGSIOS 0xB139 # HANGUL SYLLABLE NIEUN-E-IEUNG 0xB140 # HANGUL SYLLABLE NIEUN-YEO 0xB141 # HANGUL SYLLABLE NIEUN-YEO-KIYEOK 0xB144 # HANGUL SYLLABLE NIEUN-YEO-NIEUN 0xB148 # HANGUL SYLLABLE NIEUN-YEO-RIEUL 0xB150 # HANGUL SYLLABLE NIEUN-YEO-MIEUM 0xB151 # HANGUL SYLLABLE NIEUN-YEO-PIEUP 0xB154 # HANGUL SYLLABLE NIEUN-YEO-SSANGSIOS 0xB155 # HANGUL SYLLABLE NIEUN-YEO-IEUNG 0xB158 # HANGUL SYLLABLE NIEUN-YEO-KHIEUKH 0xB15C # HANGUL SYLLABLE NIEUN-YE 0xB160 # HANGUL SYLLABLE NIEUN-YE-NIEUN 0xB178 # HANGUL SYLLABLE NIEUN-O 0xB179 # HANGUL SYLLABLE NIEUN-O-KIYEOK 0xB17C # HANGUL SYLLABLE NIEUN-O-NIEUN 0xB180 # HANGUL SYLLABLE NIEUN-O-RIEUL 0xB182 # HANGUL SYLLABLE NIEUN-O-RIEULMIEUM 0xB188 # HANGUL SYLLABLE NIEUN-O-MIEUM 0xB189 # HANGUL SYLLABLE NIEUN-O-PIEUP 0xB18B # HANGUL SYLLABLE NIEUN-O-SIOS 0xB18D # HANGUL SYLLABLE NIEUN-O-IEUNG 0xB192 # HANGUL SYLLABLE NIEUN-O-PHIEUPH 0xB193 # HANGUL SYLLABLE NIEUN-O-HIEUH 0xB194 # HANGUL SYLLABLE NIEUN-WA 0xB198 # HANGUL SYLLABLE NIEUN-WA-NIEUN 0xB19C # HANGUL SYLLABLE NIEUN-WA-RIEUL 0xB1A8 # HANGUL SYLLABLE NIEUN-WA-SSANGSIOS 0xB1CC # HANGUL SYLLABLE NIEUN-OE 0xB1D0 # HANGUL SYLLABLE NIEUN-OE-NIEUN 0xB1D4 # HANGUL SYLLABLE NIEUN-OE-RIEUL 0xB1DC # HANGUL SYLLABLE NIEUN-OE-MIEUM 0xB1DD # HANGUL SYLLABLE NIEUN-OE-PIEUP 0xB1DF # HANGUL SYLLABLE NIEUN-OE-SIOS 0xB1E8 # HANGUL SYLLABLE NIEUN-YO 0xB1E9 # HANGUL SYLLABLE NIEUN-YO-KIYEOK 0xB1EC # HANGUL SYLLABLE NIEUN-YO-NIEUN 0xB1F0 # HANGUL SYLLABLE NIEUN-YO-RIEUL 0xB1F9 # HANGUL SYLLABLE NIEUN-YO-PIEUP 0xB1FB # HANGUL SYLLABLE NIEUN-YO-SIOS 0xB1FD # HANGUL SYLLABLE NIEUN-YO-IEUNG 0xB204 # HANGUL SYLLABLE NIEUN-U 0xB205 # HANGUL SYLLABLE NIEUN-U-KIYEOK 0xB208 # HANGUL SYLLABLE NIEUN-U-NIEUN 0xB20B # HANGUL SYLLABLE NIEUN-U-TIKEUT 0xB20C # HANGUL SYLLABLE NIEUN-U-RIEUL 0xB214 # HANGUL SYLLABLE NIEUN-U-MIEUM 0xB215 # HANGUL SYLLABLE NIEUN-U-PIEUP 0xB217 # HANGUL SYLLABLE NIEUN-U-SIOS 0xB219 # HANGUL SYLLABLE NIEUN-U-IEUNG 0xB220 # HANGUL SYLLABLE NIEUN-WEO 0xB234 # HANGUL SYLLABLE NIEUN-WEO-SSANGSIOS 0xB23C # HANGUL SYLLABLE NIEUN-WE 0xB258 # HANGUL SYLLABLE NIEUN-WI 0xB25C # HANGUL SYLLABLE NIEUN-WI-NIEUN 0xB260 # HANGUL SYLLABLE NIEUN-WI-RIEUL 0xB268 # HANGUL SYLLABLE NIEUN-WI-MIEUM 0xB269 # HANGUL SYLLABLE NIEUN-WI-PIEUP 0xB274 # HANGUL SYLLABLE NIEUN-YU 0xB275 # HANGUL SYLLABLE NIEUN-YU-KIYEOK 0xB27C # HANGUL SYLLABLE NIEUN-YU-RIEUL 0xB284 # HANGUL SYLLABLE NIEUN-YU-MIEUM 0xB285 # HANGUL SYLLABLE NIEUN-YU-PIEUP 0xB289 # HANGUL SYLLABLE NIEUN-YU-IEUNG 0xB290 # HANGUL SYLLABLE NIEUN-EU 0xB291 # HANGUL SYLLABLE NIEUN-EU-KIYEOK 0xB294 # HANGUL SYLLABLE NIEUN-EU-NIEUN 0xB298 # HANGUL SYLLABLE NIEUN-EU-RIEUL 0xB299 # HANGUL SYLLABLE NIEUN-EU-RIEULKIYEOK 0xB29A # HANGUL SYLLABLE NIEUN-EU-RIEULMIEUM 0xB2A0 # HANGUL SYLLABLE NIEUN-EU-MIEUM 0xB2A1 # HANGUL SYLLABLE NIEUN-EU-PIEUP 0xB2A3 # HANGUL SYLLABLE NIEUN-EU-SIOS 0xB2A5 # HANGUL SYLLABLE NIEUN-EU-IEUNG 0xB2A6 # HANGUL SYLLABLE NIEUN-EU-CIEUC 0xB2AA # HANGUL SYLLABLE NIEUN-EU-PHIEUPH 0xB2AC # HANGUL SYLLABLE NIEUN-YI 0xB2B0 # HANGUL SYLLABLE NIEUN-YI-NIEUN 0xB2B4 # HANGUL SYLLABLE NIEUN-YI-RIEUL 0xB2C8 # HANGUL SYLLABLE NIEUN-I 0xB2C9 # HANGUL SYLLABLE NIEUN-I-KIYEOK 0xB2CC # HANGUL SYLLABLE NIEUN-I-NIEUN 0xB2D0 # HANGUL SYLLABLE NIEUN-I-RIEUL 0xB2D2 # HANGUL SYLLABLE NIEUN-I-RIEULMIEUM-<3/22/95> 0xB2D8 # HANGUL SYLLABLE NIEUN-I-MIEUM 0xB2D9 # HANGUL SYLLABLE NIEUN-I-PIEUP 0xB2DB # HANGUL SYLLABLE NIEUN-I-SIOS 0xB2DD # HANGUL SYLLABLE NIEUN-I-IEUNG 0xB2E2 # HANGUL SYLLABLE NIEUN-I-PHIEUPH 0xB2E4 # HANGUL SYLLABLE TIKEUT-A 0xB2E5 # HANGUL SYLLABLE TIKEUT-A-KIYEOK 0xB2E6 # HANGUL SYLLABLE TIKEUT-A-SSANGKIYEOK 0xB2E8 # HANGUL SYLLABLE TIKEUT-A-NIEUN 0xB2EB # HANGUL SYLLABLE TIKEUT-A-TIKEUT 0xB2EC # HANGUL SYLLABLE TIKEUT-A-RIEUL 0xB2ED # HANGUL SYLLABLE TIKEUT-A-RIEULKIYEOK 0xB2EE # HANGUL SYLLABLE TIKEUT-A-RIEULMIEUM 0xB2EF # HANGUL SYLLABLE TIKEUT-A-RIEULPIEUP 0xB2F3 # HANGUL SYLLABLE TIKEUT-A-RIEULHIEUH 0xB2F4 # HANGUL SYLLABLE TIKEUT-A-MIEUM 0xB2F5 # HANGUL SYLLABLE TIKEUT-A-PIEUP 0xB2F7 # HANGUL SYLLABLE TIKEUT-A-SIOS 0xB2F8 # HANGUL SYLLABLE TIKEUT-A-SSANGSIOS 0xB2F9 # HANGUL SYLLABLE TIKEUT-A-IEUNG 0xB2FA # HANGUL SYLLABLE TIKEUT-A-CIEUC 0xB2FB # HANGUL SYLLABLE TIKEUT-A-CHIEUCH 0xB2FF # HANGUL SYLLABLE TIKEUT-A-HIEUH 0xB300 # HANGUL SYLLABLE TIKEUT-AE 0xB301 # HANGUL SYLLABLE TIKEUT-AE-KIYEOK 0xB304 # HANGUL SYLLABLE TIKEUT-AE-NIEUN 0xB308 # HANGUL SYLLABLE TIKEUT-AE-RIEUL 0xB310 # HANGUL SYLLABLE TIKEUT-AE-MIEUM 0xB311 # HANGUL SYLLABLE TIKEUT-AE-PIEUP 0xB313 # HANGUL SYLLABLE TIKEUT-AE-SIOS 0xB314 # HANGUL SYLLABLE TIKEUT-AE-SSANGSIOS 0xB315 # HANGUL SYLLABLE TIKEUT-AE-IEUNG 0xB31C # HANGUL SYLLABLE TIKEUT-YA 0xB354 # HANGUL SYLLABLE TIKEUT-EO 0xB355 # HANGUL SYLLABLE TIKEUT-EO-KIYEOK 0xB356 # HANGUL SYLLABLE TIKEUT-EO-SSANGKIYEOK 0xB358 # HANGUL SYLLABLE TIKEUT-EO-NIEUN 0xB35B # HANGUL SYLLABLE TIKEUT-EO-TIKEUT 0xB35C # HANGUL SYLLABLE TIKEUT-EO-RIEUL 0xB35E # HANGUL SYLLABLE TIKEUT-EO-RIEULMIEUM 0xB35F # HANGUL SYLLABLE TIKEUT-EO-RIEULPIEUP 0xB364 # HANGUL SYLLABLE TIKEUT-EO-MIEUM 0xB365 # HANGUL SYLLABLE TIKEUT-EO-PIEUP 0xB367 # HANGUL SYLLABLE TIKEUT-EO-SIOS 0xB369 # HANGUL SYLLABLE TIKEUT-EO-IEUNG 0xB36B # HANGUL SYLLABLE TIKEUT-EO-CHIEUCH 0xB36E # HANGUL SYLLABLE TIKEUT-EO-PHIEUPH 0xB370 # HANGUL SYLLABLE TIKEUT-E 0xB371 # HANGUL SYLLABLE TIKEUT-E-KIYEOK 0xB374 # HANGUL SYLLABLE TIKEUT-E-NIEUN 0xB378 # HANGUL SYLLABLE TIKEUT-E-RIEUL 0xB380 # HANGUL SYLLABLE TIKEUT-E-MIEUM 0xB381 # HANGUL SYLLABLE TIKEUT-E-PIEUP 0xB383 # HANGUL SYLLABLE TIKEUT-E-SIOS 0xB384 # HANGUL SYLLABLE TIKEUT-E-SSANGSIOS 0xB385 # HANGUL SYLLABLE TIKEUT-E-IEUNG 0xB38C # HANGUL SYLLABLE TIKEUT-YEO 0xB390 # HANGUL SYLLABLE TIKEUT-YEO-NIEUN 0xB394 # HANGUL SYLLABLE TIKEUT-YEO-RIEUL 0xB3A0 # HANGUL SYLLABLE TIKEUT-YEO-SSANGSIOS 0xB3A1 # HANGUL SYLLABLE TIKEUT-YEO-IEUNG 0xB3A8 # HANGUL SYLLABLE TIKEUT-YE 0xB3AC # HANGUL SYLLABLE TIKEUT-YE-NIEUN 0xB3C4 # HANGUL SYLLABLE TIKEUT-O 0xB3C5 # HANGUL SYLLABLE TIKEUT-O-KIYEOK 0xB3C8 # HANGUL SYLLABLE TIKEUT-O-NIEUN 0xB3CB # HANGUL SYLLABLE TIKEUT-O-TIKEUT 0xB3CC # HANGUL SYLLABLE TIKEUT-O-RIEUL 0xB3CE # HANGUL SYLLABLE TIKEUT-O-RIEULMIEUM 0xB3D0 # HANGUL SYLLABLE TIKEUT-O-RIEULSIOS 0xB3D4 # HANGUL SYLLABLE TIKEUT-O-MIEUM 0xB3D5 # HANGUL SYLLABLE TIKEUT-O-PIEUP 0xB3D7 # HANGUL SYLLABLE TIKEUT-O-SIOS 0xB3D9 # HANGUL SYLLABLE TIKEUT-O-IEUNG 0xB3DB # HANGUL SYLLABLE TIKEUT-O-CHIEUCH 0xB3DD # HANGUL SYLLABLE TIKEUT-O-THIEUTH 0xB3E0 # HANGUL SYLLABLE TIKEUT-WA 0xB3E4 # HANGUL SYLLABLE TIKEUT-WA-NIEUN 0xB3E8 # HANGUL SYLLABLE TIKEUT-WA-RIEUL 0xB3FC # HANGUL SYLLABLE TIKEUT-WAE 0xB410 # HANGUL SYLLABLE TIKEUT-WAE-SSANGSIOS 0xB418 # HANGUL SYLLABLE TIKEUT-OE 0xB41C # HANGUL SYLLABLE TIKEUT-OE-NIEUN 0xB420 # HANGUL SYLLABLE TIKEUT-OE-RIEUL 0xB428 # HANGUL SYLLABLE TIKEUT-OE-MIEUM 0xB429 # HANGUL SYLLABLE TIKEUT-OE-PIEUP 0xB42B # HANGUL SYLLABLE TIKEUT-OE-SIOS 0xB434 # HANGUL SYLLABLE TIKEUT-YO 0xB450 # HANGUL SYLLABLE TIKEUT-U 0xB451 # HANGUL SYLLABLE TIKEUT-U-KIYEOK 0xB454 # HANGUL SYLLABLE TIKEUT-U-NIEUN 0xB458 # HANGUL SYLLABLE TIKEUT-U-RIEUL 0xB460 # HANGUL SYLLABLE TIKEUT-U-MIEUM 0xB461 # HANGUL SYLLABLE TIKEUT-U-PIEUP 0xB463 # HANGUL SYLLABLE TIKEUT-U-SIOS 0xB465 # HANGUL SYLLABLE TIKEUT-U-IEUNG 0xB46C # HANGUL SYLLABLE TIKEUT-WEO 0xB480 # HANGUL SYLLABLE TIKEUT-WEO-SSANGSIOS 0xB488 # HANGUL SYLLABLE TIKEUT-WE 0xB49D # HANGUL SYLLABLE TIKEUT-WE-IEUNG 0xB4A4 # HANGUL SYLLABLE TIKEUT-WI 0xB4A8 # HANGUL SYLLABLE TIKEUT-WI-NIEUN 0xB4AC # HANGUL SYLLABLE TIKEUT-WI-RIEUL 0xB4B5 # HANGUL SYLLABLE TIKEUT-WI-PIEUP 0xB4B7 # HANGUL SYLLABLE TIKEUT-WI-SIOS 0xB4B9 # HANGUL SYLLABLE TIKEUT-WI-IEUNG 0xB4C0 # HANGUL SYLLABLE TIKEUT-YU 0xB4C4 # HANGUL SYLLABLE TIKEUT-YU-NIEUN 0xB4C8 # HANGUL SYLLABLE TIKEUT-YU-RIEUL 0xB4D0 # HANGUL SYLLABLE TIKEUT-YU-MIEUM 0xB4D5 # HANGUL SYLLABLE TIKEUT-YU-IEUNG 0xB4DC # HANGUL SYLLABLE TIKEUT-EU 0xB4DD # HANGUL SYLLABLE TIKEUT-EU-KIYEOK 0xB4E0 # HANGUL SYLLABLE TIKEUT-EU-NIEUN 0xB4E3 # HANGUL SYLLABLE TIKEUT-EU-TIKEUT 0xB4E4 # HANGUL SYLLABLE TIKEUT-EU-RIEUL 0xB4E6 # HANGUL SYLLABLE TIKEUT-EU-RIEULMIEUM 0xB4EC # HANGUL SYLLABLE TIKEUT-EU-MIEUM 0xB4ED # HANGUL SYLLABLE TIKEUT-EU-PIEUP 0xB4EF # HANGUL SYLLABLE TIKEUT-EU-SIOS 0xB4F1 # HANGUL SYLLABLE TIKEUT-EU-IEUNG 0xB4F8 # HANGUL SYLLABLE TIKEUT-YI 0xB514 # HANGUL SYLLABLE TIKEUT-I 0xB515 # HANGUL SYLLABLE TIKEUT-I-KIYEOK 0xB518 # HANGUL SYLLABLE TIKEUT-I-NIEUN 0xB51B # HANGUL SYLLABLE TIKEUT-I-TIKEUT 0xB51C # HANGUL SYLLABLE TIKEUT-I-RIEUL 0xB524 # HANGUL SYLLABLE TIKEUT-I-MIEUM 0xB525 # HANGUL SYLLABLE TIKEUT-I-PIEUP 0xB527 # HANGUL SYLLABLE TIKEUT-I-SIOS 0xB528 # HANGUL SYLLABLE TIKEUT-I-SSANGSIOS 0xB529 # HANGUL SYLLABLE TIKEUT-I-IEUNG 0xB52A # HANGUL SYLLABLE TIKEUT-I-CIEUC 0xB530 # HANGUL SYLLABLE SSANGTIKEUT-A 0xB531 # HANGUL SYLLABLE SSANGTIKEUT-A-KIYEOK 0xB534 # HANGUL SYLLABLE SSANGTIKEUT-A-NIEUN 0xB538 # HANGUL SYLLABLE SSANGTIKEUT-A-RIEUL 0xB540 # HANGUL SYLLABLE SSANGTIKEUT-A-MIEUM 0xB541 # HANGUL SYLLABLE SSANGTIKEUT-A-PIEUP 0xB543 # HANGUL SYLLABLE SSANGTIKEUT-A-SIOS 0xB544 # HANGUL SYLLABLE SSANGTIKEUT-A-SSANGSIOS 0xB545 # HANGUL SYLLABLE SSANGTIKEUT-A-IEUNG 0xB54B # HANGUL SYLLABLE SSANGTIKEUT-A-HIEUH 0xB54C # HANGUL SYLLABLE SSANGTIKEUT-AE 0xB54D # HANGUL SYLLABLE SSANGTIKEUT-AE-KIYEOK 0xB550 # HANGUL SYLLABLE SSANGTIKEUT-AE-NIEUN 0xB554 # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEUL 0xB55C # HANGUL SYLLABLE SSANGTIKEUT-AE-MIEUM 0xB55D # HANGUL SYLLABLE SSANGTIKEUT-AE-PIEUP 0xB55F # HANGUL SYLLABLE SSANGTIKEUT-AE-SIOS 0xB560 # HANGUL SYLLABLE SSANGTIKEUT-AE-SSANGSIOS 0xB561 # HANGUL SYLLABLE SSANGTIKEUT-AE-IEUNG 0xB5A0 # HANGUL SYLLABLE SSANGTIKEUT-EO 0xB5A1 # HANGUL SYLLABLE SSANGTIKEUT-EO-KIYEOK 0xB5A4 # HANGUL SYLLABLE SSANGTIKEUT-EO-NIEUN 0xB5A8 # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEUL 0xB5AA # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULMIEUM 0xB5AB # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULPIEUP 0xB5B0 # HANGUL SYLLABLE SSANGTIKEUT-EO-MIEUM 0xB5B1 # HANGUL SYLLABLE SSANGTIKEUT-EO-PIEUP 0xB5B3 # HANGUL SYLLABLE SSANGTIKEUT-EO-SIOS 0xB5B4 # HANGUL SYLLABLE SSANGTIKEUT-EO-SSANGSIOS 0xB5B5 # HANGUL SYLLABLE SSANGTIKEUT-EO-IEUNG 0xB5BB # HANGUL SYLLABLE SSANGTIKEUT-EO-HIEUH 0xB5BC # HANGUL SYLLABLE SSANGTIKEUT-E 0xB5BD # HANGUL SYLLABLE SSANGTIKEUT-E-KIYEOK 0xB5C0 # HANGUL SYLLABLE SSANGTIKEUT-E-NIEUN 0xB5C4 # HANGUL SYLLABLE SSANGTIKEUT-E-RIEUL 0xB5CC # HANGUL SYLLABLE SSANGTIKEUT-E-MIEUM 0xB5CD # HANGUL SYLLABLE SSANGTIKEUT-E-PIEUP 0xB5CF # HANGUL SYLLABLE SSANGTIKEUT-E-SIOS 0xB5D0 # HANGUL SYLLABLE SSANGTIKEUT-E-SSANGSIOS 0xB5D1 # HANGUL SYLLABLE SSANGTIKEUT-E-IEUNG 0xB5D8 # HANGUL SYLLABLE SSANGTIKEUT-YEO 0xB5EC # HANGUL SYLLABLE SSANGTIKEUT-YEO-SSANGSIOS 0xB610 # HANGUL SYLLABLE SSANGTIKEUT-O 0xB611 # HANGUL SYLLABLE SSANGTIKEUT-O-KIYEOK 0xB614 # HANGUL SYLLABLE SSANGTIKEUT-O-NIEUN 0xB618 # HANGUL SYLLABLE SSANGTIKEUT-O-RIEUL 0xB625 # HANGUL SYLLABLE SSANGTIKEUT-O-IEUNG 0xB62C # HANGUL SYLLABLE SSANGTIKEUT-WA 0xB634 # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEUL 0xB648 # HANGUL SYLLABLE SSANGTIKEUT-WAE 0xB664 # HANGUL SYLLABLE SSANGTIKEUT-OE 0xB668 # HANGUL SYLLABLE SSANGTIKEUT-OE-NIEUN 0xB69C # HANGUL SYLLABLE SSANGTIKEUT-U 0xB69D # HANGUL SYLLABLE SSANGTIKEUT-U-KIYEOK 0xB6A0 # HANGUL SYLLABLE SSANGTIKEUT-U-NIEUN 0xB6A4 # HANGUL SYLLABLE SSANGTIKEUT-U-RIEUL 0xB6AB # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULHIEUH 0xB6AC # HANGUL SYLLABLE SSANGTIKEUT-U-MIEUM 0xB6B1 # HANGUL SYLLABLE SSANGTIKEUT-U-IEUNG 0xB6D4 # HANGUL SYLLABLE SSANGTIKEUT-WE 0xB6F0 # HANGUL SYLLABLE SSANGTIKEUT-WI 0xB6F4 # HANGUL SYLLABLE SSANGTIKEUT-WI-NIEUN 0xB6F8 # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEUL 0xB700 # HANGUL SYLLABLE SSANGTIKEUT-WI-MIEUM 0xB701 # HANGUL SYLLABLE SSANGTIKEUT-WI-PIEUP 0xB705 # HANGUL SYLLABLE SSANGTIKEUT-WI-IEUNG 0xB728 # HANGUL SYLLABLE SSANGTIKEUT-EU 0xB729 # HANGUL SYLLABLE SSANGTIKEUT-EU-KIYEOK 0xB72C # HANGUL SYLLABLE SSANGTIKEUT-EU-NIEUN 0xB72F # HANGUL SYLLABLE SSANGTIKEUT-EU-TIKEUT 0xB730 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEUL 0xB738 # HANGUL SYLLABLE SSANGTIKEUT-EU-MIEUM 0xB739 # HANGUL SYLLABLE SSANGTIKEUT-EU-PIEUP 0xB73B # HANGUL SYLLABLE SSANGTIKEUT-EU-SIOS 0xB744 # HANGUL SYLLABLE SSANGTIKEUT-YI 0xB748 # HANGUL SYLLABLE SSANGTIKEUT-YI-NIEUN 0xB74C # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEUL 0xB754 # HANGUL SYLLABLE SSANGTIKEUT-YI-MIEUM 0xB755 # HANGUL SYLLABLE SSANGTIKEUT-YI-PIEUP 0xB760 # HANGUL SYLLABLE SSANGTIKEUT-I 0xB764 # HANGUL SYLLABLE SSANGTIKEUT-I-NIEUN 0xB768 # HANGUL SYLLABLE SSANGTIKEUT-I-RIEUL 0xB770 # HANGUL SYLLABLE SSANGTIKEUT-I-MIEUM 0xB771 # HANGUL SYLLABLE SSANGTIKEUT-I-PIEUP 0xB773 # HANGUL SYLLABLE SSANGTIKEUT-I-SIOS 0xB775 # HANGUL SYLLABLE SSANGTIKEUT-I-IEUNG 0xB77C # HANGUL SYLLABLE RIEUL-A 0xB77D # HANGUL SYLLABLE RIEUL-A-KIYEOK 0xB780 # HANGUL SYLLABLE RIEUL-A-NIEUN 0xB784 # HANGUL SYLLABLE RIEUL-A-RIEUL 0xB78C # HANGUL SYLLABLE RIEUL-A-MIEUM 0xB78D # HANGUL SYLLABLE RIEUL-A-PIEUP 0xB78F # HANGUL SYLLABLE RIEUL-A-SIOS 0xB790 # HANGUL SYLLABLE RIEUL-A-SSANGSIOS 0xB791 # HANGUL SYLLABLE RIEUL-A-IEUNG 0xB792 # HANGUL SYLLABLE RIEUL-A-CIEUC 0xB796 # HANGUL SYLLABLE RIEUL-A-PHIEUPH 0xB797 # HANGUL SYLLABLE RIEUL-A-HIEUH 0xB798 # HANGUL SYLLABLE RIEUL-AE 0xB799 # HANGUL SYLLABLE RIEUL-AE-KIYEOK 0xB79C # HANGUL SYLLABLE RIEUL-AE-NIEUN 0xB7A0 # HANGUL SYLLABLE RIEUL-AE-RIEUL 0xB7A8 # HANGUL SYLLABLE RIEUL-AE-MIEUM 0xB7A9 # HANGUL SYLLABLE RIEUL-AE-PIEUP 0xB7AB # HANGUL SYLLABLE RIEUL-AE-SIOS 0xB7AC # HANGUL SYLLABLE RIEUL-AE-SSANGSIOS 0xB7AD # HANGUL SYLLABLE RIEUL-AE-IEUNG 0xB7B4 # HANGUL SYLLABLE RIEUL-YA 0xB7B5 # HANGUL SYLLABLE RIEUL-YA-KIYEOK 0xB7B8 # HANGUL SYLLABLE RIEUL-YA-NIEUN 0xB7C7 # HANGUL SYLLABLE RIEUL-YA-SIOS 0xB7C9 # HANGUL SYLLABLE RIEUL-YA-IEUNG 0xB7EC # HANGUL SYLLABLE RIEUL-EO 0xB7ED # HANGUL SYLLABLE RIEUL-EO-KIYEOK 0xB7F0 # HANGUL SYLLABLE RIEUL-EO-NIEUN 0xB7F4 # HANGUL SYLLABLE RIEUL-EO-RIEUL 0xB7FC # HANGUL SYLLABLE RIEUL-EO-MIEUM 0xB7FD # HANGUL SYLLABLE RIEUL-EO-PIEUP 0xB7FF # HANGUL SYLLABLE RIEUL-EO-SIOS 0xB800 # HANGUL SYLLABLE RIEUL-EO-SSANGSIOS 0xB801 # HANGUL SYLLABLE RIEUL-EO-IEUNG 0xB807 # HANGUL SYLLABLE RIEUL-EO-HIEUH 0xB808 # HANGUL SYLLABLE RIEUL-E 0xB809 # HANGUL SYLLABLE RIEUL-E-KIYEOK 0xB80C # HANGUL SYLLABLE RIEUL-E-NIEUN 0xB810 # HANGUL SYLLABLE RIEUL-E-RIEUL 0xB818 # HANGUL SYLLABLE RIEUL-E-MIEUM 0xB819 # HANGUL SYLLABLE RIEUL-E-PIEUP 0xB81B # HANGUL SYLLABLE RIEUL-E-SIOS 0xB81D # HANGUL SYLLABLE RIEUL-E-IEUNG 0xB824 # HANGUL SYLLABLE RIEUL-YEO 0xB825 # HANGUL SYLLABLE RIEUL-YEO-KIYEOK 0xB828 # HANGUL SYLLABLE RIEUL-YEO-NIEUN 0xB82C # HANGUL SYLLABLE RIEUL-YEO-RIEUL 0xB834 # HANGUL SYLLABLE RIEUL-YEO-MIEUM 0xB835 # HANGUL SYLLABLE RIEUL-YEO-PIEUP 0xB837 # HANGUL SYLLABLE RIEUL-YEO-SIOS 0xB838 # HANGUL SYLLABLE RIEUL-YEO-SSANGSIOS 0xB839 # HANGUL SYLLABLE RIEUL-YEO-IEUNG 0xB840 # HANGUL SYLLABLE RIEUL-YE 0xB844 # HANGUL SYLLABLE RIEUL-YE-NIEUN 0xB851 # HANGUL SYLLABLE RIEUL-YE-PIEUP 0xB853 # HANGUL SYLLABLE RIEUL-YE-SIOS 0xB85C # HANGUL SYLLABLE RIEUL-O 0xB85D # HANGUL SYLLABLE RIEUL-O-KIYEOK 0xB860 # HANGUL SYLLABLE RIEUL-O-NIEUN 0xB864 # HANGUL SYLLABLE RIEUL-O-RIEUL 0xB86C # HANGUL SYLLABLE RIEUL-O-MIEUM 0xB86D # HANGUL SYLLABLE RIEUL-O-PIEUP 0xB86F # HANGUL SYLLABLE RIEUL-O-SIOS 0xB871 # HANGUL SYLLABLE RIEUL-O-IEUNG 0xB878 # HANGUL SYLLABLE RIEUL-WA 0xB87C # HANGUL SYLLABLE RIEUL-WA-NIEUN 0xB88D # HANGUL SYLLABLE RIEUL-WA-IEUNG 0xB8A8 # HANGUL SYLLABLE RIEUL-WAE-SSANGSIOS 0xB8B0 # HANGUL SYLLABLE RIEUL-OE 0xB8B4 # HANGUL SYLLABLE RIEUL-OE-NIEUN 0xB8B8 # HANGUL SYLLABLE RIEUL-OE-RIEUL 0xB8C0 # HANGUL SYLLABLE RIEUL-OE-MIEUM 0xB8C1 # HANGUL SYLLABLE RIEUL-OE-PIEUP 0xB8C3 # HANGUL SYLLABLE RIEUL-OE-SIOS 0xB8C5 # HANGUL SYLLABLE RIEUL-OE-IEUNG 0xB8CC # HANGUL SYLLABLE RIEUL-YO 0xB8D0 # HANGUL SYLLABLE RIEUL-YO-NIEUN 0xB8D4 # HANGUL SYLLABLE RIEUL-YO-RIEUL 0xB8DD # HANGUL SYLLABLE RIEUL-YO-PIEUP 0xB8DF # HANGUL SYLLABLE RIEUL-YO-SIOS 0xB8E1 # HANGUL SYLLABLE RIEUL-YO-IEUNG 0xB8E8 # HANGUL SYLLABLE RIEUL-U 0xB8E9 # HANGUL SYLLABLE RIEUL-U-KIYEOK 0xB8EC # HANGUL SYLLABLE RIEUL-U-NIEUN 0xB8F0 # HANGUL SYLLABLE RIEUL-U-RIEUL 0xB8F8 # HANGUL SYLLABLE RIEUL-U-MIEUM 0xB8F9 # HANGUL SYLLABLE RIEUL-U-PIEUP 0xB8FB # HANGUL SYLLABLE RIEUL-U-SIOS 0xB8FD # HANGUL SYLLABLE RIEUL-U-IEUNG 0xB904 # HANGUL SYLLABLE RIEUL-WEO 0xB918 # HANGUL SYLLABLE RIEUL-WEO-SSANGSIOS 0xB920 # HANGUL SYLLABLE RIEUL-WE 0xB93C # HANGUL SYLLABLE RIEUL-WI 0xB93D # HANGUL SYLLABLE RIEUL-WI-KIYEOK 0xB940 # HANGUL SYLLABLE RIEUL-WI-NIEUN 0xB944 # HANGUL SYLLABLE RIEUL-WI-RIEUL 0xB94C # HANGUL SYLLABLE RIEUL-WI-MIEUM 0xB94F # HANGUL SYLLABLE RIEUL-WI-SIOS 0xB951 # HANGUL SYLLABLE RIEUL-WI-IEUNG 0xB958 # HANGUL SYLLABLE RIEUL-YU 0xB959 # HANGUL SYLLABLE RIEUL-YU-KIYEOK 0xB95C # HANGUL SYLLABLE RIEUL-YU-NIEUN 0xB960 # HANGUL SYLLABLE RIEUL-YU-RIEUL 0xB968 # HANGUL SYLLABLE RIEUL-YU-MIEUM 0xB969 # HANGUL SYLLABLE RIEUL-YU-PIEUP 0xB96B # HANGUL SYLLABLE RIEUL-YU-SIOS 0xB96D # HANGUL SYLLABLE RIEUL-YU-IEUNG 0xB974 # HANGUL SYLLABLE RIEUL-EU 0xB975 # HANGUL SYLLABLE RIEUL-EU-KIYEOK 0xB978 # HANGUL SYLLABLE RIEUL-EU-NIEUN 0xB97C # HANGUL SYLLABLE RIEUL-EU-RIEUL 0xB984 # HANGUL SYLLABLE RIEUL-EU-MIEUM 0xB985 # HANGUL SYLLABLE RIEUL-EU-PIEUP 0xB987 # HANGUL SYLLABLE RIEUL-EU-SIOS 0xB989 # HANGUL SYLLABLE RIEUL-EU-IEUNG 0xB98A # HANGUL SYLLABLE RIEUL-EU-CIEUC 0xB98D # HANGUL SYLLABLE RIEUL-EU-THIEUTH 0xB98E # HANGUL SYLLABLE RIEUL-EU-PHIEUPH 0xB9AC # HANGUL SYLLABLE RIEUL-I 0xB9AD # HANGUL SYLLABLE RIEUL-I-KIYEOK 0xB9B0 # HANGUL SYLLABLE RIEUL-I-NIEUN 0xB9B4 # HANGUL SYLLABLE RIEUL-I-RIEUL 0xB9BC # HANGUL SYLLABLE RIEUL-I-MIEUM 0xB9BD # HANGUL SYLLABLE RIEUL-I-PIEUP 0xB9BF # HANGUL SYLLABLE RIEUL-I-SIOS 0xB9C1 # HANGUL SYLLABLE RIEUL-I-IEUNG 0xB9C8 # HANGUL SYLLABLE MIEUM-A 0xB9C9 # HANGUL SYLLABLE MIEUM-A-KIYEOK 0xB9CC # HANGUL SYLLABLE MIEUM-A-NIEUN 0xB9CE # HANGUL SYLLABLE MIEUM-A-NIEUNHIEUH 0xB9CF # HANGUL SYLLABLE MIEUM-A-TIKEUT 0xB9D0 # HANGUL SYLLABLE MIEUM-A-RIEUL 0xB9D1 # HANGUL SYLLABLE MIEUM-A-RIEULKIYEOK 0xB9D2 # HANGUL SYLLABLE MIEUM-A-RIEULMIEUM 0xB9D8 # HANGUL SYLLABLE MIEUM-A-MIEUM 0xB9D9 # HANGUL SYLLABLE MIEUM-A-PIEUP 0xB9DB # HANGUL SYLLABLE MIEUM-A-SIOS 0xB9DD # HANGUL SYLLABLE MIEUM-A-IEUNG 0xB9DE # HANGUL SYLLABLE MIEUM-A-CIEUC 0xB9E1 # HANGUL SYLLABLE MIEUM-A-THIEUTH 0xB9E3 # HANGUL SYLLABLE MIEUM-A-HIEUH 0xB9E4 # HANGUL SYLLABLE MIEUM-AE 0xB9E5 # HANGUL SYLLABLE MIEUM-AE-KIYEOK 0xB9E8 # HANGUL SYLLABLE MIEUM-AE-NIEUN 0xB9EC # HANGUL SYLLABLE MIEUM-AE-RIEUL 0xB9F4 # HANGUL SYLLABLE MIEUM-AE-MIEUM 0xB9F5 # HANGUL SYLLABLE MIEUM-AE-PIEUP 0xB9F7 # HANGUL SYLLABLE MIEUM-AE-SIOS 0xB9F8 # HANGUL SYLLABLE MIEUM-AE-SSANGSIOS 0xB9F9 # HANGUL SYLLABLE MIEUM-AE-IEUNG 0xB9FA # HANGUL SYLLABLE MIEUM-AE-CIEUC 0xBA00 # HANGUL SYLLABLE MIEUM-YA 0xBA01 # HANGUL SYLLABLE MIEUM-YA-KIYEOK 0xBA08 # HANGUL SYLLABLE MIEUM-YA-RIEUL 0xBA15 # HANGUL SYLLABLE MIEUM-YA-IEUNG 0xBA38 # HANGUL SYLLABLE MIEUM-EO 0xBA39 # HANGUL SYLLABLE MIEUM-EO-KIYEOK 0xBA3C # HANGUL SYLLABLE MIEUM-EO-NIEUN 0xBA40 # HANGUL SYLLABLE MIEUM-EO-RIEUL 0xBA42 # HANGUL SYLLABLE MIEUM-EO-RIEULMIEUM 0xBA48 # HANGUL SYLLABLE MIEUM-EO-MIEUM 0xBA49 # HANGUL SYLLABLE MIEUM-EO-PIEUP 0xBA4B # HANGUL SYLLABLE MIEUM-EO-SIOS 0xBA4D # HANGUL SYLLABLE MIEUM-EO-IEUNG 0xBA4E # HANGUL SYLLABLE MIEUM-EO-CIEUC 0xBA53 # HANGUL SYLLABLE MIEUM-EO-HIEUH 0xBA54 # HANGUL SYLLABLE MIEUM-E 0xBA55 # HANGUL SYLLABLE MIEUM-E-KIYEOK 0xBA58 # HANGUL SYLLABLE MIEUM-E-NIEUN 0xBA5C # HANGUL SYLLABLE MIEUM-E-RIEUL 0xBA64 # HANGUL SYLLABLE MIEUM-E-MIEUM 0xBA65 # HANGUL SYLLABLE MIEUM-E-PIEUP 0xBA67 # HANGUL SYLLABLE MIEUM-E-SIOS 0xBA68 # HANGUL SYLLABLE MIEUM-E-SSANGSIOS 0xBA69 # HANGUL SYLLABLE MIEUM-E-IEUNG 0xBA70 # HANGUL SYLLABLE MIEUM-YEO 0xBA71 # HANGUL SYLLABLE MIEUM-YEO-KIYEOK 0xBA74 # HANGUL SYLLABLE MIEUM-YEO-NIEUN 0xBA78 # HANGUL SYLLABLE MIEUM-YEO-RIEUL 0xBA83 # HANGUL SYLLABLE MIEUM-YEO-SIOS 0xBA84 # HANGUL SYLLABLE MIEUM-YEO-SSANGSIOS 0xBA85 # HANGUL SYLLABLE MIEUM-YEO-IEUNG 0xBA87 # HANGUL SYLLABLE MIEUM-YEO-CHIEUCH 0xBA8C # HANGUL SYLLABLE MIEUM-YE 0xBAA8 # HANGUL SYLLABLE MIEUM-O 0xBAA9 # HANGUL SYLLABLE MIEUM-O-KIYEOK 0xBAAB # HANGUL SYLLABLE MIEUM-O-KIYEOKSIOS 0xBAAC # HANGUL SYLLABLE MIEUM-O-NIEUN 0xBAB0 # HANGUL SYLLABLE MIEUM-O-RIEUL 0xBAB2 # HANGUL SYLLABLE MIEUM-O-RIEULMIEUM 0xBAB8 # HANGUL SYLLABLE MIEUM-O-MIEUM 0xBAB9 # HANGUL SYLLABLE MIEUM-O-PIEUP 0xBABB # HANGUL SYLLABLE MIEUM-O-SIOS 0xBABD # HANGUL SYLLABLE MIEUM-O-IEUNG 0xBAC4 # HANGUL SYLLABLE MIEUM-WA 0xBAC8 # HANGUL SYLLABLE MIEUM-WA-NIEUN 0xBAD8 # HANGUL SYLLABLE MIEUM-WA-SSANGSIOS 0xBAD9 # HANGUL SYLLABLE MIEUM-WA-IEUNG 0xBAFC # HANGUL SYLLABLE MIEUM-OE 0xBB00 # HANGUL SYLLABLE MIEUM-OE-NIEUN 0xBB04 # HANGUL SYLLABLE MIEUM-OE-RIEUL 0xBB0D # HANGUL SYLLABLE MIEUM-OE-PIEUP 0xBB0F # HANGUL SYLLABLE MIEUM-OE-SIOS 0xBB11 # HANGUL SYLLABLE MIEUM-OE-IEUNG 0xBB18 # HANGUL SYLLABLE MIEUM-YO 0xBB1C # HANGUL SYLLABLE MIEUM-YO-NIEUN 0xBB20 # HANGUL SYLLABLE MIEUM-YO-RIEUL 0xBB29 # HANGUL SYLLABLE MIEUM-YO-PIEUP 0xBB2B # HANGUL SYLLABLE MIEUM-YO-SIOS 0xBB34 # HANGUL SYLLABLE MIEUM-U 0xBB35 # HANGUL SYLLABLE MIEUM-U-KIYEOK 0xBB36 # HANGUL SYLLABLE MIEUM-U-SSANGKIYEOK 0xBB38 # HANGUL SYLLABLE MIEUM-U-NIEUN 0xBB3B # HANGUL SYLLABLE MIEUM-U-TIKEUT 0xBB3C # HANGUL SYLLABLE MIEUM-U-RIEUL 0xBB3D # HANGUL SYLLABLE MIEUM-U-RIEULKIYEOK 0xBB3E # HANGUL SYLLABLE MIEUM-U-RIEULMIEUM 0xBB44 # HANGUL SYLLABLE MIEUM-U-MIEUM 0xBB45 # HANGUL SYLLABLE MIEUM-U-PIEUP 0xBB47 # HANGUL SYLLABLE MIEUM-U-SIOS 0xBB49 # HANGUL SYLLABLE MIEUM-U-IEUNG 0xBB4D # HANGUL SYLLABLE MIEUM-U-THIEUTH 0xBB4F # HANGUL SYLLABLE MIEUM-U-HIEUH 0xBB50 # HANGUL SYLLABLE MIEUM-WEO 0xBB54 # HANGUL SYLLABLE MIEUM-WEO-NIEUN 0xBB58 # HANGUL SYLLABLE MIEUM-WEO-RIEUL 0xBB61 # HANGUL SYLLABLE MIEUM-WEO-PIEUP 0xBB63 # HANGUL SYLLABLE MIEUM-WEO-SIOS 0xBB6C # HANGUL SYLLABLE MIEUM-WE 0xBB88 # HANGUL SYLLABLE MIEUM-WI 0xBB8C # HANGUL SYLLABLE MIEUM-WI-NIEUN 0xBB90 # HANGUL SYLLABLE MIEUM-WI-RIEUL 0xBBA4 # HANGUL SYLLABLE MIEUM-YU 0xBBA8 # HANGUL SYLLABLE MIEUM-YU-NIEUN 0xBBAC # HANGUL SYLLABLE MIEUM-YU-RIEUL 0xBBB4 # HANGUL SYLLABLE MIEUM-YU-MIEUM 0xBBB7 # HANGUL SYLLABLE MIEUM-YU-SIOS 0xBBC0 # HANGUL SYLLABLE MIEUM-EU 0xBBC4 # HANGUL SYLLABLE MIEUM-EU-NIEUN 0xBBC8 # HANGUL SYLLABLE MIEUM-EU-RIEUL 0xBBD0 # HANGUL SYLLABLE MIEUM-EU-MIEUM 0xBBD3 # HANGUL SYLLABLE MIEUM-EU-SIOS 0xBBF8 # HANGUL SYLLABLE MIEUM-I 0xBBF9 # HANGUL SYLLABLE MIEUM-I-KIYEOK 0xBBFC # HANGUL SYLLABLE MIEUM-I-NIEUN 0xBBFF # HANGUL SYLLABLE MIEUM-I-TIKEUT 0xBC00 # HANGUL SYLLABLE MIEUM-I-RIEUL 0xBC02 # HANGUL SYLLABLE MIEUM-I-RIEULMIEUM 0xBC08 # HANGUL SYLLABLE MIEUM-I-MIEUM 0xBC09 # HANGUL SYLLABLE MIEUM-I-PIEUP 0xBC0B # HANGUL SYLLABLE MIEUM-I-SIOS 0xBC0C # HANGUL SYLLABLE MIEUM-I-SSANGSIOS 0xBC0D # HANGUL SYLLABLE MIEUM-I-IEUNG 0xBC0F # HANGUL SYLLABLE MIEUM-I-CHIEUCH 0xBC11 # HANGUL SYLLABLE MIEUM-I-THIEUTH 0xBC14 # HANGUL SYLLABLE PIEUP-A 0xBC15 # HANGUL SYLLABLE PIEUP-A-KIYEOK 0xBC16 # HANGUL SYLLABLE PIEUP-A-SSANGKIYEOK 0xBC17 # HANGUL SYLLABLE PIEUP-A-KIYEOKSIOS 0xBC18 # HANGUL SYLLABLE PIEUP-A-NIEUN 0xBC1B # HANGUL SYLLABLE PIEUP-A-TIKEUT 0xBC1C # HANGUL SYLLABLE PIEUP-A-RIEUL 0xBC1D # HANGUL SYLLABLE PIEUP-A-RIEULKIYEOK 0xBC1E # HANGUL SYLLABLE PIEUP-A-RIEULMIEUM 0xBC1F # HANGUL SYLLABLE PIEUP-A-RIEULPIEUP 0xBC24 # HANGUL SYLLABLE PIEUP-A-MIEUM 0xBC25 # HANGUL SYLLABLE PIEUP-A-PIEUP 0xBC27 # HANGUL SYLLABLE PIEUP-A-SIOS 0xBC29 # HANGUL SYLLABLE PIEUP-A-IEUNG 0xBC2D # HANGUL SYLLABLE PIEUP-A-THIEUTH 0xBC30 # HANGUL SYLLABLE PIEUP-AE 0xBC31 # HANGUL SYLLABLE PIEUP-AE-KIYEOK 0xBC34 # HANGUL SYLLABLE PIEUP-AE-NIEUN 0xBC38 # HANGUL SYLLABLE PIEUP-AE-RIEUL 0xBC40 # HANGUL SYLLABLE PIEUP-AE-MIEUM 0xBC41 # HANGUL SYLLABLE PIEUP-AE-PIEUP 0xBC43 # HANGUL SYLLABLE PIEUP-AE-SIOS 0xBC44 # HANGUL SYLLABLE PIEUP-AE-SSANGSIOS 0xBC45 # HANGUL SYLLABLE PIEUP-AE-IEUNG 0xBC49 # HANGUL SYLLABLE PIEUP-AE-THIEUTH 0xBC4C # HANGUL SYLLABLE PIEUP-YA 0xBC4D # HANGUL SYLLABLE PIEUP-YA-KIYEOK 0xBC50 # HANGUL SYLLABLE PIEUP-YA-NIEUN 0xBC5D # HANGUL SYLLABLE PIEUP-YA-PIEUP 0xBC84 # HANGUL SYLLABLE PIEUP-EO 0xBC85 # HANGUL SYLLABLE PIEUP-EO-KIYEOK 0xBC88 # HANGUL SYLLABLE PIEUP-EO-NIEUN 0xBC8B # HANGUL SYLLABLE PIEUP-EO-TIKEUT 0xBC8C # HANGUL SYLLABLE PIEUP-EO-RIEUL 0xBC8E # HANGUL SYLLABLE PIEUP-EO-RIEULMIEUM 0xBC94 # HANGUL SYLLABLE PIEUP-EO-MIEUM 0xBC95 # HANGUL SYLLABLE PIEUP-EO-PIEUP 0xBC97 # HANGUL SYLLABLE PIEUP-EO-SIOS 0xBC99 # HANGUL SYLLABLE PIEUP-EO-IEUNG 0xBC9A # HANGUL SYLLABLE PIEUP-EO-CIEUC 0xBCA0 # HANGUL SYLLABLE PIEUP-E 0xBCA1 # HANGUL SYLLABLE PIEUP-E-KIYEOK 0xBCA4 # HANGUL SYLLABLE PIEUP-E-NIEUN 0xBCA7 # HANGUL SYLLABLE PIEUP-E-TIKEUT 0xBCA8 # HANGUL SYLLABLE PIEUP-E-RIEUL 0xBCB0 # HANGUL SYLLABLE PIEUP-E-MIEUM 0xBCB1 # HANGUL SYLLABLE PIEUP-E-PIEUP 0xBCB3 # HANGUL SYLLABLE PIEUP-E-SIOS 0xBCB4 # HANGUL SYLLABLE PIEUP-E-SSANGSIOS 0xBCB5 # HANGUL SYLLABLE PIEUP-E-IEUNG 0xBCBC # HANGUL SYLLABLE PIEUP-YEO 0xBCBD # HANGUL SYLLABLE PIEUP-YEO-KIYEOK 0xBCC0 # HANGUL SYLLABLE PIEUP-YEO-NIEUN 0xBCC4 # HANGUL SYLLABLE PIEUP-YEO-RIEUL 0xBCCD # HANGUL SYLLABLE PIEUP-YEO-PIEUP 0xBCCF # HANGUL SYLLABLE PIEUP-YEO-SIOS 0xBCD0 # HANGUL SYLLABLE PIEUP-YEO-SSANGSIOS 0xBCD1 # HANGUL SYLLABLE PIEUP-YEO-IEUNG 0xBCD5 # HANGUL SYLLABLE PIEUP-YEO-THIEUTH 0xBCD8 # HANGUL SYLLABLE PIEUP-YE 0xBCDC # HANGUL SYLLABLE PIEUP-YE-NIEUN 0xBCF4 # HANGUL SYLLABLE PIEUP-O 0xBCF5 # HANGUL SYLLABLE PIEUP-O-KIYEOK 0xBCF6 # HANGUL SYLLABLE PIEUP-O-SSANGKIYEOK 0xBCF8 # HANGUL SYLLABLE PIEUP-O-NIEUN 0xBCFC # HANGUL SYLLABLE PIEUP-O-RIEUL 0xBD04 # HANGUL SYLLABLE PIEUP-O-MIEUM 0xBD05 # HANGUL SYLLABLE PIEUP-O-PIEUP 0xBD07 # HANGUL SYLLABLE PIEUP-O-SIOS 0xBD09 # HANGUL SYLLABLE PIEUP-O-IEUNG 0xBD10 # HANGUL SYLLABLE PIEUP-WA 0xBD14 # HANGUL SYLLABLE PIEUP-WA-NIEUN 0xBD24 # HANGUL SYLLABLE PIEUP-WA-SSANGSIOS 0xBD2C # HANGUL SYLLABLE PIEUP-WAE 0xBD40 # HANGUL SYLLABLE PIEUP-WAE-SSANGSIOS 0xBD48 # HANGUL SYLLABLE PIEUP-OE 0xBD49 # HANGUL SYLLABLE PIEUP-OE-KIYEOK 0xBD4C # HANGUL SYLLABLE PIEUP-OE-NIEUN 0xBD50 # HANGUL SYLLABLE PIEUP-OE-RIEUL 0xBD58 # HANGUL SYLLABLE PIEUP-OE-MIEUM 0xBD59 # HANGUL SYLLABLE PIEUP-OE-PIEUP 0xBD64 # HANGUL SYLLABLE PIEUP-YO 0xBD68 # HANGUL SYLLABLE PIEUP-YO-NIEUN 0xBD80 # HANGUL SYLLABLE PIEUP-U 0xBD81 # HANGUL SYLLABLE PIEUP-U-KIYEOK 0xBD84 # HANGUL SYLLABLE PIEUP-U-NIEUN 0xBD87 # HANGUL SYLLABLE PIEUP-U-TIKEUT 0xBD88 # HANGUL SYLLABLE PIEUP-U-RIEUL 0xBD89 # HANGUL SYLLABLE PIEUP-U-RIEULKIYEOK 0xBD8A # HANGUL SYLLABLE PIEUP-U-RIEULMIEUM 0xBD90 # HANGUL SYLLABLE PIEUP-U-MIEUM 0xBD91 # HANGUL SYLLABLE PIEUP-U-PIEUP 0xBD93 # HANGUL SYLLABLE PIEUP-U-SIOS 0xBD95 # HANGUL SYLLABLE PIEUP-U-IEUNG 0xBD99 # HANGUL SYLLABLE PIEUP-U-THIEUTH 0xBD9A # HANGUL SYLLABLE PIEUP-U-PHIEUPH 0xBD9C # HANGUL SYLLABLE PIEUP-WEO 0xBDA4 # HANGUL SYLLABLE PIEUP-WEO-RIEUL 0xBDB0 # HANGUL SYLLABLE PIEUP-WEO-SSANGSIOS 0xBDB8 # HANGUL SYLLABLE PIEUP-WE 0xBDD4 # HANGUL SYLLABLE PIEUP-WI 0xBDD5 # HANGUL SYLLABLE PIEUP-WI-KIYEOK 0xBDD8 # HANGUL SYLLABLE PIEUP-WI-NIEUN 0xBDDC # HANGUL SYLLABLE PIEUP-WI-RIEUL 0xBDE9 # HANGUL SYLLABLE PIEUP-WI-IEUNG 0xBDF0 # HANGUL SYLLABLE PIEUP-YU 0xBDF4 # HANGUL SYLLABLE PIEUP-YU-NIEUN 0xBDF8 # HANGUL SYLLABLE PIEUP-YU-RIEUL 0xBE00 # HANGUL SYLLABLE PIEUP-YU-MIEUM 0xBE03 # HANGUL SYLLABLE PIEUP-YU-SIOS 0xBE05 # HANGUL SYLLABLE PIEUP-YU-IEUNG 0xBE0C # HANGUL SYLLABLE PIEUP-EU 0xBE0D # HANGUL SYLLABLE PIEUP-EU-KIYEOK 0xBE10 # HANGUL SYLLABLE PIEUP-EU-NIEUN 0xBE14 # HANGUL SYLLABLE PIEUP-EU-RIEUL 0xBE1C # HANGUL SYLLABLE PIEUP-EU-MIEUM 0xBE1D # HANGUL SYLLABLE PIEUP-EU-PIEUP 0xBE1F # HANGUL SYLLABLE PIEUP-EU-SIOS 0xBE44 # HANGUL SYLLABLE PIEUP-I 0xBE45 # HANGUL SYLLABLE PIEUP-I-KIYEOK 0xBE48 # HANGUL SYLLABLE PIEUP-I-NIEUN 0xBE4C # HANGUL SYLLABLE PIEUP-I-RIEUL 0xBE4E # HANGUL SYLLABLE PIEUP-I-RIEULMIEUM 0xBE54 # HANGUL SYLLABLE PIEUP-I-MIEUM 0xBE55 # HANGUL SYLLABLE PIEUP-I-PIEUP 0xBE57 # HANGUL SYLLABLE PIEUP-I-SIOS 0xBE59 # HANGUL SYLLABLE PIEUP-I-IEUNG 0xBE5A # HANGUL SYLLABLE PIEUP-I-CIEUC 0xBE5B # HANGUL SYLLABLE PIEUP-I-CHIEUCH 0xBE60 # HANGUL SYLLABLE SSANGPIEUP-A 0xBE61 # HANGUL SYLLABLE SSANGPIEUP-A-KIYEOK 0xBE64 # HANGUL SYLLABLE SSANGPIEUP-A-NIEUN 0xBE68 # HANGUL SYLLABLE SSANGPIEUP-A-RIEUL 0xBE6A # HANGUL SYLLABLE SSANGPIEUP-A-RIEULMIEUM 0xBE70 # HANGUL SYLLABLE SSANGPIEUP-A-MIEUM 0xBE71 # HANGUL SYLLABLE SSANGPIEUP-A-PIEUP 0xBE73 # HANGUL SYLLABLE SSANGPIEUP-A-SIOS 0xBE74 # HANGUL SYLLABLE SSANGPIEUP-A-SSANGSIOS 0xBE75 # HANGUL SYLLABLE SSANGPIEUP-A-IEUNG 0xBE7B # HANGUL SYLLABLE SSANGPIEUP-A-HIEUH 0xBE7C # HANGUL SYLLABLE SSANGPIEUP-AE 0xBE7D # HANGUL SYLLABLE SSANGPIEUP-AE-KIYEOK 0xBE80 # HANGUL SYLLABLE SSANGPIEUP-AE-NIEUN 0xBE84 # HANGUL SYLLABLE SSANGPIEUP-AE-RIEUL 0xBE8C # HANGUL SYLLABLE SSANGPIEUP-AE-MIEUM 0xBE8D # HANGUL SYLLABLE SSANGPIEUP-AE-PIEUP 0xBE8F # HANGUL SYLLABLE SSANGPIEUP-AE-SIOS 0xBE90 # HANGUL SYLLABLE SSANGPIEUP-AE-SSANGSIOS 0xBE91 # HANGUL SYLLABLE SSANGPIEUP-AE-IEUNG 0xBE98 # HANGUL SYLLABLE SSANGPIEUP-YA 0xBE99 # HANGUL SYLLABLE SSANGPIEUP-YA-KIYEOK 0xBEA8 # HANGUL SYLLABLE SSANGPIEUP-YA-MIEUM 0xBED0 # HANGUL SYLLABLE SSANGPIEUP-EO 0xBED1 # HANGUL SYLLABLE SSANGPIEUP-EO-KIYEOK 0xBED4 # HANGUL SYLLABLE SSANGPIEUP-EO-NIEUN 0xBED7 # HANGUL SYLLABLE SSANGPIEUP-EO-TIKEUT 0xBED8 # HANGUL SYLLABLE SSANGPIEUP-EO-RIEUL 0xBEE0 # HANGUL SYLLABLE SSANGPIEUP-EO-MIEUM 0xBEE3 # HANGUL SYLLABLE SSANGPIEUP-EO-SIOS 0xBEE4 # HANGUL SYLLABLE SSANGPIEUP-EO-SSANGSIOS 0xBEE5 # HANGUL SYLLABLE SSANGPIEUP-EO-IEUNG 0xBEEC # HANGUL SYLLABLE SSANGPIEUP-E 0xBF01 # HANGUL SYLLABLE SSANGPIEUP-E-IEUNG 0xBF08 # HANGUL SYLLABLE SSANGPIEUP-YEO 0xBF09 # HANGUL SYLLABLE SSANGPIEUP-YEO-KIYEOK 0xBF18 # HANGUL SYLLABLE SSANGPIEUP-YEO-MIEUM 0xBF19 # HANGUL SYLLABLE SSANGPIEUP-YEO-PIEUP 0xBF1B # HANGUL SYLLABLE SSANGPIEUP-YEO-SIOS 0xBF1C # HANGUL SYLLABLE SSANGPIEUP-YEO-SSANGSIOS 0xBF1D # HANGUL SYLLABLE SSANGPIEUP-YEO-IEUNG 0xBF40 # HANGUL SYLLABLE SSANGPIEUP-O 0xBF41 # HANGUL SYLLABLE SSANGPIEUP-O-KIYEOK 0xBF44 # HANGUL SYLLABLE SSANGPIEUP-O-NIEUN 0xBF48 # HANGUL SYLLABLE SSANGPIEUP-O-RIEUL 0xBF50 # HANGUL SYLLABLE SSANGPIEUP-O-MIEUM 0xBF51 # HANGUL SYLLABLE SSANGPIEUP-O-PIEUP 0xBF55 # HANGUL SYLLABLE SSANGPIEUP-O-IEUNG 0xBF94 # HANGUL SYLLABLE SSANGPIEUP-OE 0xBFB0 # HANGUL SYLLABLE SSANGPIEUP-YO 0xBFC5 # HANGUL SYLLABLE SSANGPIEUP-YO-IEUNG 0xBFCC # HANGUL SYLLABLE SSANGPIEUP-U 0xBFCD # HANGUL SYLLABLE SSANGPIEUP-U-KIYEOK 0xBFD0 # HANGUL SYLLABLE SSANGPIEUP-U-NIEUN 0xBFD4 # HANGUL SYLLABLE SSANGPIEUP-U-RIEUL 0xBFDC # HANGUL SYLLABLE SSANGPIEUP-U-MIEUM 0xBFDF # HANGUL SYLLABLE SSANGPIEUP-U-SIOS 0xBFE1 # HANGUL SYLLABLE SSANGPIEUP-U-IEUNG 0xC03C # HANGUL SYLLABLE SSANGPIEUP-YU 0xC051 # HANGUL SYLLABLE SSANGPIEUP-YU-IEUNG 0xC058 # HANGUL SYLLABLE SSANGPIEUP-EU 0xC05C # HANGUL SYLLABLE SSANGPIEUP-EU-NIEUN 0xC060 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEUL 0xC068 # HANGUL SYLLABLE SSANGPIEUP-EU-MIEUM 0xC069 # HANGUL SYLLABLE SSANGPIEUP-EU-PIEUP 0xC090 # HANGUL SYLLABLE SSANGPIEUP-I 0xC091 # HANGUL SYLLABLE SSANGPIEUP-I-KIYEOK 0xC094 # HANGUL SYLLABLE SSANGPIEUP-I-NIEUN 0xC098 # HANGUL SYLLABLE SSANGPIEUP-I-RIEUL 0xC0A0 # HANGUL SYLLABLE SSANGPIEUP-I-MIEUM 0xC0A1 # HANGUL SYLLABLE SSANGPIEUP-I-PIEUP 0xC0A3 # HANGUL SYLLABLE SSANGPIEUP-I-SIOS 0xC0A5 # HANGUL SYLLABLE SSANGPIEUP-I-IEUNG 0xC0AC # HANGUL SYLLABLE SIOS-A 0xC0AD # HANGUL SYLLABLE SIOS-A-KIYEOK 0xC0AF # HANGUL SYLLABLE SIOS-A-KIYEOKSIOS 0xC0B0 # HANGUL SYLLABLE SIOS-A-NIEUN 0xC0B3 # HANGUL SYLLABLE SIOS-A-TIKEUT 0xC0B4 # HANGUL SYLLABLE SIOS-A-RIEUL 0xC0B5 # HANGUL SYLLABLE SIOS-A-RIEULKIYEOK 0xC0B6 # HANGUL SYLLABLE SIOS-A-RIEULMIEUM 0xC0BC # HANGUL SYLLABLE SIOS-A-MIEUM 0xC0BD # HANGUL SYLLABLE SIOS-A-PIEUP 0xC0BF # HANGUL SYLLABLE SIOS-A-SIOS 0xC0C0 # HANGUL SYLLABLE SIOS-A-SSANGSIOS 0xC0C1 # HANGUL SYLLABLE SIOS-A-IEUNG 0xC0C5 # HANGUL SYLLABLE SIOS-A-THIEUTH 0xC0C8 # HANGUL SYLLABLE SIOS-AE 0xC0C9 # HANGUL SYLLABLE SIOS-AE-KIYEOK 0xC0CC # HANGUL SYLLABLE SIOS-AE-NIEUN 0xC0D0 # HANGUL SYLLABLE SIOS-AE-RIEUL 0xC0D8 # HANGUL SYLLABLE SIOS-AE-MIEUM 0xC0D9 # HANGUL SYLLABLE SIOS-AE-PIEUP 0xC0DB # HANGUL SYLLABLE SIOS-AE-SIOS 0xC0DC # HANGUL SYLLABLE SIOS-AE-SSANGSIOS 0xC0DD # HANGUL SYLLABLE SIOS-AE-IEUNG 0xC0E4 # HANGUL SYLLABLE SIOS-YA 0xC0E5 # HANGUL SYLLABLE SIOS-YA-KIYEOK 0xC0E8 # HANGUL SYLLABLE SIOS-YA-NIEUN 0xC0EC # HANGUL SYLLABLE SIOS-YA-RIEUL 0xC0F4 # HANGUL SYLLABLE SIOS-YA-MIEUM 0xC0F5 # HANGUL SYLLABLE SIOS-YA-PIEUP 0xC0F7 # HANGUL SYLLABLE SIOS-YA-SIOS 0xC0F9 # HANGUL SYLLABLE SIOS-YA-IEUNG 0xC100 # HANGUL SYLLABLE SIOS-YAE 0xC104 # HANGUL SYLLABLE SIOS-YAE-NIEUN 0xC108 # HANGUL SYLLABLE SIOS-YAE-RIEUL 0xC110 # HANGUL SYLLABLE SIOS-YAE-MIEUM 0xC115 # HANGUL SYLLABLE SIOS-YAE-IEUNG 0xC11C # HANGUL SYLLABLE SIOS-EO 0xC11D # HANGUL SYLLABLE SIOS-EO-KIYEOK 0xC11E # HANGUL SYLLABLE SIOS-EO-SSANGKIYEOK 0xC11F # HANGUL SYLLABLE SIOS-EO-KIYEOKSIOS 0xC120 # HANGUL SYLLABLE SIOS-EO-NIEUN 0xC123 # HANGUL SYLLABLE SIOS-EO-TIKEUT 0xC124 # HANGUL SYLLABLE SIOS-EO-RIEUL 0xC126 # HANGUL SYLLABLE SIOS-EO-RIEULMIEUM 0xC127 # HANGUL SYLLABLE SIOS-EO-RIEULPIEUP 0xC12C # HANGUL SYLLABLE SIOS-EO-MIEUM 0xC12D # HANGUL SYLLABLE SIOS-EO-PIEUP 0xC12F # HANGUL SYLLABLE SIOS-EO-SIOS 0xC130 # HANGUL SYLLABLE SIOS-EO-SSANGSIOS 0xC131 # HANGUL SYLLABLE SIOS-EO-IEUNG 0xC136 # HANGUL SYLLABLE SIOS-EO-PHIEUPH 0xC138 # HANGUL SYLLABLE SIOS-E 0xC139 # HANGUL SYLLABLE SIOS-E-KIYEOK 0xC13C # HANGUL SYLLABLE SIOS-E-NIEUN 0xC140 # HANGUL SYLLABLE SIOS-E-RIEUL 0xC148 # HANGUL SYLLABLE SIOS-E-MIEUM 0xC149 # HANGUL SYLLABLE SIOS-E-PIEUP 0xC14B # HANGUL SYLLABLE SIOS-E-SIOS 0xC14C # HANGUL SYLLABLE SIOS-E-SSANGSIOS 0xC14D # HANGUL SYLLABLE SIOS-E-IEUNG 0xC154 # HANGUL SYLLABLE SIOS-YEO 0xC155 # HANGUL SYLLABLE SIOS-YEO-KIYEOK 0xC158 # HANGUL SYLLABLE SIOS-YEO-NIEUN 0xC15C # HANGUL SYLLABLE SIOS-YEO-RIEUL 0xC164 # HANGUL SYLLABLE SIOS-YEO-MIEUM 0xC165 # HANGUL SYLLABLE SIOS-YEO-PIEUP 0xC167 # HANGUL SYLLABLE SIOS-YEO-SIOS 0xC168 # HANGUL SYLLABLE SIOS-YEO-SSANGSIOS 0xC169 # HANGUL SYLLABLE SIOS-YEO-IEUNG 0xC170 # HANGUL SYLLABLE SIOS-YE 0xC174 # HANGUL SYLLABLE SIOS-YE-NIEUN 0xC178 # HANGUL SYLLABLE SIOS-YE-RIEUL 0xC185 # HANGUL SYLLABLE SIOS-YE-IEUNG 0xC18C # HANGUL SYLLABLE SIOS-O 0xC18D # HANGUL SYLLABLE SIOS-O-KIYEOK 0xC18E # HANGUL SYLLABLE SIOS-O-SSANGKIYEOK 0xC190 # HANGUL SYLLABLE SIOS-O-NIEUN 0xC194 # HANGUL SYLLABLE SIOS-O-RIEUL 0xC196 # HANGUL SYLLABLE SIOS-O-RIEULMIEUM 0xC19C # HANGUL SYLLABLE SIOS-O-MIEUM 0xC19D # HANGUL SYLLABLE SIOS-O-PIEUP 0xC19F # HANGUL SYLLABLE SIOS-O-SIOS 0xC1A1 # HANGUL SYLLABLE SIOS-O-IEUNG 0xC1A5 # HANGUL SYLLABLE SIOS-O-THIEUTH 0xC1A8 # HANGUL SYLLABLE SIOS-WA 0xC1A9 # HANGUL SYLLABLE SIOS-WA-KIYEOK 0xC1AC # HANGUL SYLLABLE SIOS-WA-NIEUN 0xC1B0 # HANGUL SYLLABLE SIOS-WA-RIEUL 0xC1BD # HANGUL SYLLABLE SIOS-WA-IEUNG 0xC1C4 # HANGUL SYLLABLE SIOS-WAE 0xC1C8 # HANGUL SYLLABLE SIOS-WAE-NIEUN 0xC1CC # HANGUL SYLLABLE SIOS-WAE-RIEUL 0xC1D4 # HANGUL SYLLABLE SIOS-WAE-MIEUM 0xC1D7 # HANGUL SYLLABLE SIOS-WAE-SIOS 0xC1D8 # HANGUL SYLLABLE SIOS-WAE-SSANGSIOS 0xC1E0 # HANGUL SYLLABLE SIOS-OE 0xC1E4 # HANGUL SYLLABLE SIOS-OE-NIEUN 0xC1E8 # HANGUL SYLLABLE SIOS-OE-RIEUL 0xC1F0 # HANGUL SYLLABLE SIOS-OE-MIEUM 0xC1F1 # HANGUL SYLLABLE SIOS-OE-PIEUP 0xC1F3 # HANGUL SYLLABLE SIOS-OE-SIOS 0xC1FC # HANGUL SYLLABLE SIOS-YO 0xC1FD # HANGUL SYLLABLE SIOS-YO-KIYEOK 0xC200 # HANGUL SYLLABLE SIOS-YO-NIEUN 0xC204 # HANGUL SYLLABLE SIOS-YO-RIEUL 0xC20C # HANGUL SYLLABLE SIOS-YO-MIEUM 0xC20D # HANGUL SYLLABLE SIOS-YO-PIEUP 0xC20F # HANGUL SYLLABLE SIOS-YO-SIOS 0xC211 # HANGUL SYLLABLE SIOS-YO-IEUNG 0xC218 # HANGUL SYLLABLE SIOS-U 0xC219 # HANGUL SYLLABLE SIOS-U-KIYEOK 0xC21C # HANGUL SYLLABLE SIOS-U-NIEUN 0xC21F # HANGUL SYLLABLE SIOS-U-TIKEUT 0xC220 # HANGUL SYLLABLE SIOS-U-RIEUL 0xC228 # HANGUL SYLLABLE SIOS-U-MIEUM 0xC229 # HANGUL SYLLABLE SIOS-U-PIEUP 0xC22B # HANGUL SYLLABLE SIOS-U-SIOS 0xC22D # HANGUL SYLLABLE SIOS-U-IEUNG 0xC22F # HANGUL SYLLABLE SIOS-U-CHIEUCH 0xC231 # HANGUL SYLLABLE SIOS-U-THIEUTH 0xC232 # HANGUL SYLLABLE SIOS-U-PHIEUPH 0xC234 # HANGUL SYLLABLE SIOS-WEO 0xC248 # HANGUL SYLLABLE SIOS-WEO-SSANGSIOS 0xC250 # HANGUL SYLLABLE SIOS-WE 0xC251 # HANGUL SYLLABLE SIOS-WE-KIYEOK 0xC254 # HANGUL SYLLABLE SIOS-WE-NIEUN 0xC258 # HANGUL SYLLABLE SIOS-WE-RIEUL 0xC260 # HANGUL SYLLABLE SIOS-WE-MIEUM 0xC265 # HANGUL SYLLABLE SIOS-WE-IEUNG 0xC26C # HANGUL SYLLABLE SIOS-WI 0xC26D # HANGUL SYLLABLE SIOS-WI-KIYEOK 0xC270 # HANGUL SYLLABLE SIOS-WI-NIEUN 0xC274 # HANGUL SYLLABLE SIOS-WI-RIEUL 0xC27C # HANGUL SYLLABLE SIOS-WI-MIEUM 0xC27D # HANGUL SYLLABLE SIOS-WI-PIEUP 0xC27F # HANGUL SYLLABLE SIOS-WI-SIOS 0xC281 # HANGUL SYLLABLE SIOS-WI-IEUNG 0xC288 # HANGUL SYLLABLE SIOS-YU 0xC289 # HANGUL SYLLABLE SIOS-YU-KIYEOK 0xC290 # HANGUL SYLLABLE SIOS-YU-RIEUL 0xC298 # HANGUL SYLLABLE SIOS-YU-MIEUM 0xC29B # HANGUL SYLLABLE SIOS-YU-SIOS 0xC29D # HANGUL SYLLABLE SIOS-YU-IEUNG 0xC2A4 # HANGUL SYLLABLE SIOS-EU 0xC2A5 # HANGUL SYLLABLE SIOS-EU-KIYEOK 0xC2A8 # HANGUL SYLLABLE SIOS-EU-NIEUN 0xC2AC # HANGUL SYLLABLE SIOS-EU-RIEUL 0xC2AD # HANGUL SYLLABLE SIOS-EU-RIEULKIYEOK 0xC2B4 # HANGUL SYLLABLE SIOS-EU-MIEUM 0xC2B5 # HANGUL SYLLABLE SIOS-EU-PIEUP 0xC2B7 # HANGUL SYLLABLE SIOS-EU-SIOS 0xC2B9 # HANGUL SYLLABLE SIOS-EU-IEUNG 0xC2DC # HANGUL SYLLABLE SIOS-I 0xC2DD # HANGUL SYLLABLE SIOS-I-KIYEOK 0xC2E0 # HANGUL SYLLABLE SIOS-I-NIEUN 0xC2E3 # HANGUL SYLLABLE SIOS-I-TIKEUT 0xC2E4 # HANGUL SYLLABLE SIOS-I-RIEUL 0xC2EB # HANGUL SYLLABLE SIOS-I-RIEULHIEUH 0xC2EC # HANGUL SYLLABLE SIOS-I-MIEUM 0xC2ED # HANGUL SYLLABLE SIOS-I-PIEUP 0xC2EF # HANGUL SYLLABLE SIOS-I-SIOS 0xC2F1 # HANGUL SYLLABLE SIOS-I-IEUNG 0xC2F6 # HANGUL SYLLABLE SIOS-I-PHIEUPH 0xC2F8 # HANGUL SYLLABLE SSANGSIOS-A 0xC2F9 # HANGUL SYLLABLE SSANGSIOS-A-KIYEOK 0xC2FB # HANGUL SYLLABLE SSANGSIOS-A-KIYEOKSIOS 0xC2FC # HANGUL SYLLABLE SSANGSIOS-A-NIEUN 0xC300 # HANGUL SYLLABLE SSANGSIOS-A-RIEUL 0xC308 # HANGUL SYLLABLE SSANGSIOS-A-MIEUM 0xC309 # HANGUL SYLLABLE SSANGSIOS-A-PIEUP 0xC30C # HANGUL SYLLABLE SSANGSIOS-A-SSANGSIOS 0xC30D # HANGUL SYLLABLE SSANGSIOS-A-IEUNG 0xC313 # HANGUL SYLLABLE SSANGSIOS-A-HIEUH 0xC314 # HANGUL SYLLABLE SSANGSIOS-AE 0xC315 # HANGUL SYLLABLE SSANGSIOS-AE-KIYEOK 0xC318 # HANGUL SYLLABLE SSANGSIOS-AE-NIEUN 0xC31C # HANGUL SYLLABLE SSANGSIOS-AE-RIEUL 0xC324 # HANGUL SYLLABLE SSANGSIOS-AE-MIEUM 0xC325 # HANGUL SYLLABLE SSANGSIOS-AE-PIEUP 0xC328 # HANGUL SYLLABLE SSANGSIOS-AE-SSANGSIOS 0xC329 # HANGUL SYLLABLE SSANGSIOS-AE-IEUNG 0xC345 # HANGUL SYLLABLE SSANGSIOS-YA-IEUNG 0xC368 # HANGUL SYLLABLE SSANGSIOS-EO 0xC369 # HANGUL SYLLABLE SSANGSIOS-EO-KIYEOK 0xC36C # HANGUL SYLLABLE SSANGSIOS-EO-NIEUN 0xC370 # HANGUL SYLLABLE SSANGSIOS-EO-RIEUL 0xC372 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULMIEUM 0xC378 # HANGUL SYLLABLE SSANGSIOS-EO-MIEUM 0xC379 # HANGUL SYLLABLE SSANGSIOS-EO-PIEUP 0xC37C # HANGUL SYLLABLE SSANGSIOS-EO-SSANGSIOS 0xC37D # HANGUL SYLLABLE SSANGSIOS-EO-IEUNG 0xC384 # HANGUL SYLLABLE SSANGSIOS-E 0xC388 # HANGUL SYLLABLE SSANGSIOS-E-NIEUN 0xC38C # HANGUL SYLLABLE SSANGSIOS-E-RIEUL # 0xC3C0 # HANGUL SYLLABLE SSANGSIOS-YE-NIEUN # (dotum.ttf, hline.ttf) 0xC3D8 # HANGUL SYLLABLE SSANGSIOS-O 0xC3D9 # HANGUL SYLLABLE SSANGSIOS-O-KIYEOK 0xC3DC # HANGUL SYLLABLE SSANGSIOS-O-NIEUN 0xC3DF # HANGUL SYLLABLE SSANGSIOS-O-TIKEUT 0xC3E0 # HANGUL SYLLABLE SSANGSIOS-O-RIEUL 0xC3E2 # HANGUL SYLLABLE SSANGSIOS-O-RIEULMIEUM 0xC3E8 # HANGUL SYLLABLE SSANGSIOS-O-MIEUM 0xC3E9 # HANGUL SYLLABLE SSANGSIOS-O-PIEUP 0xC3ED # HANGUL SYLLABLE SSANGSIOS-O-IEUNG 0xC3F4 # HANGUL SYLLABLE SSANGSIOS-WA 0xC3F5 # HANGUL SYLLABLE SSANGSIOS-WA-KIYEOK 0xC3F8 # HANGUL SYLLABLE SSANGSIOS-WA-NIEUN 0xC408 # HANGUL SYLLABLE SSANGSIOS-WA-SSANGSIOS 0xC410 # HANGUL SYLLABLE SSANGSIOS-WAE 0xC424 # HANGUL SYLLABLE SSANGSIOS-WAE-SSANGSIOS 0xC42C # HANGUL SYLLABLE SSANGSIOS-OE 0xC430 # HANGUL SYLLABLE SSANGSIOS-OE-NIEUN 0xC434 # HANGUL SYLLABLE SSANGSIOS-OE-RIEUL 0xC43C # HANGUL SYLLABLE SSANGSIOS-OE-MIEUM 0xC43D # HANGUL SYLLABLE SSANGSIOS-OE-PIEUP 0xC448 # HANGUL SYLLABLE SSANGSIOS-YO 0xC464 # HANGUL SYLLABLE SSANGSIOS-U 0xC465 # HANGUL SYLLABLE SSANGSIOS-U-KIYEOK 0xC468 # HANGUL SYLLABLE SSANGSIOS-U-NIEUN 0xC46C # HANGUL SYLLABLE SSANGSIOS-U-RIEUL 0xC474 # HANGUL SYLLABLE SSANGSIOS-U-MIEUM 0xC475 # HANGUL SYLLABLE SSANGSIOS-U-PIEUP 0xC479 # HANGUL SYLLABLE SSANGSIOS-U-IEUNG 0xC480 # HANGUL SYLLABLE SSANGSIOS-WEO 0xC494 # HANGUL SYLLABLE SSANGSIOS-WEO-SSANGSIOS 0xC49C # HANGUL SYLLABLE SSANGSIOS-WE 0xC4B8 # HANGUL SYLLABLE SSANGSIOS-WI 0xC4BC # HANGUL SYLLABLE SSANGSIOS-WI-NIEUN 0xC4E9 # HANGUL SYLLABLE SSANGSIOS-YU-IEUNG 0xC4F0 # HANGUL SYLLABLE SSANGSIOS-EU 0xC4F1 # HANGUL SYLLABLE SSANGSIOS-EU-KIYEOK 0xC4F4 # HANGUL SYLLABLE SSANGSIOS-EU-NIEUN 0xC4F8 # HANGUL SYLLABLE SSANGSIOS-EU-RIEUL 0xC4FA # HANGUL SYLLABLE SSANGSIOS-EU-RIEULMIEUM 0xC4FF # HANGUL SYLLABLE SSANGSIOS-EU-RIEULHIEUH 0xC500 # HANGUL SYLLABLE SSANGSIOS-EU-MIEUM 0xC501 # HANGUL SYLLABLE SSANGSIOS-EU-PIEUP 0xC50C # HANGUL SYLLABLE SSANGSIOS-YI 0xC510 # HANGUL SYLLABLE SSANGSIOS-YI-NIEUN 0xC514 # HANGUL SYLLABLE SSANGSIOS-YI-RIEUL 0xC51C # HANGUL SYLLABLE SSANGSIOS-YI-MIEUM 0xC528 # HANGUL SYLLABLE SSANGSIOS-I 0xC529 # HANGUL SYLLABLE SSANGSIOS-I-KIYEOK 0xC52C # HANGUL SYLLABLE SSANGSIOS-I-NIEUN 0xC530 # HANGUL SYLLABLE SSANGSIOS-I-RIEUL 0xC538 # HANGUL SYLLABLE SSANGSIOS-I-MIEUM 0xC539 # HANGUL SYLLABLE SSANGSIOS-I-PIEUP 0xC53B # HANGUL SYLLABLE SSANGSIOS-I-SIOS 0xC53D # HANGUL SYLLABLE SSANGSIOS-I-IEUNG 0xC544 # HANGUL SYLLABLE IEUNG-A 0xC545 # HANGUL SYLLABLE IEUNG-A-KIYEOK 0xC548 # HANGUL SYLLABLE IEUNG-A-NIEUN 0xC549 # HANGUL SYLLABLE IEUNG-A-NIEUNCIEUC 0xC54A # HANGUL SYLLABLE IEUNG-A-NIEUNHIEUH 0xC54C # HANGUL SYLLABLE IEUNG-A-RIEUL 0xC54D # HANGUL SYLLABLE IEUNG-A-RIEULKIYEOK 0xC54E # HANGUL SYLLABLE IEUNG-A-RIEULMIEUM 0xC553 # HANGUL SYLLABLE IEUNG-A-RIEULHIEUH 0xC554 # HANGUL SYLLABLE IEUNG-A-MIEUM 0xC555 # HANGUL SYLLABLE IEUNG-A-PIEUP 0xC557 # HANGUL SYLLABLE IEUNG-A-SIOS 0xC558 # HANGUL SYLLABLE IEUNG-A-SSANGSIOS 0xC559 # HANGUL SYLLABLE IEUNG-A-IEUNG 0xC55D # HANGUL SYLLABLE IEUNG-A-THIEUTH 0xC55E # HANGUL SYLLABLE IEUNG-A-PHIEUPH 0xC560 # HANGUL SYLLABLE IEUNG-AE 0xC561 # HANGUL SYLLABLE IEUNG-AE-KIYEOK 0xC564 # HANGUL SYLLABLE IEUNG-AE-NIEUN 0xC568 # HANGUL SYLLABLE IEUNG-AE-RIEUL 0xC570 # HANGUL SYLLABLE IEUNG-AE-MIEUM 0xC571 # HANGUL SYLLABLE IEUNG-AE-PIEUP 0xC573 # HANGUL SYLLABLE IEUNG-AE-SIOS 0xC574 # HANGUL SYLLABLE IEUNG-AE-SSANGSIOS 0xC575 # HANGUL SYLLABLE IEUNG-AE-IEUNG 0xC57C # HANGUL SYLLABLE IEUNG-YA 0xC57D # HANGUL SYLLABLE IEUNG-YA-KIYEOK 0xC580 # HANGUL SYLLABLE IEUNG-YA-NIEUN 0xC584 # HANGUL SYLLABLE IEUNG-YA-RIEUL 0xC587 # HANGUL SYLLABLE IEUNG-YA-RIEULPIEUP 0xC58C # HANGUL SYLLABLE IEUNG-YA-MIEUM 0xC58D # HANGUL SYLLABLE IEUNG-YA-PIEUP 0xC58F # HANGUL SYLLABLE IEUNG-YA-SIOS 0xC591 # HANGUL SYLLABLE IEUNG-YA-IEUNG 0xC595 # HANGUL SYLLABLE IEUNG-YA-THIEUTH 0xC597 # HANGUL SYLLABLE IEUNG-YA-HIEUH 0xC598 # HANGUL SYLLABLE IEUNG-YAE 0xC59C # HANGUL SYLLABLE IEUNG-YAE-NIEUN 0xC5A0 # HANGUL SYLLABLE IEUNG-YAE-RIEUL 0xC5A9 # HANGUL SYLLABLE IEUNG-YAE-PIEUP 0xC5B4 # HANGUL SYLLABLE IEUNG-EO 0xC5B5 # HANGUL SYLLABLE IEUNG-EO-KIYEOK 0xC5B8 # HANGUL SYLLABLE IEUNG-EO-NIEUN 0xC5B9 # HANGUL SYLLABLE IEUNG-EO-NIEUNCIEUC 0xC5BB # HANGUL SYLLABLE IEUNG-EO-TIKEUT 0xC5BC # HANGUL SYLLABLE IEUNG-EO-RIEUL 0xC5BD # HANGUL SYLLABLE IEUNG-EO-RIEULKIYEOK 0xC5BE # HANGUL SYLLABLE IEUNG-EO-RIEULMIEUM 0xC5C4 # HANGUL SYLLABLE IEUNG-EO-MIEUM 0xC5C5 # HANGUL SYLLABLE IEUNG-EO-PIEUP 0xC5C6 # HANGUL SYLLABLE IEUNG-EO-PIEUPSIOS 0xC5C7 # HANGUL SYLLABLE IEUNG-EO-SIOS 0xC5C8 # HANGUL SYLLABLE IEUNG-EO-SSANGSIOS 0xC5C9 # HANGUL SYLLABLE IEUNG-EO-IEUNG 0xC5CA # HANGUL SYLLABLE IEUNG-EO-CIEUC 0xC5CC # HANGUL SYLLABLE IEUNG-EO-KHIEUKH 0xC5CE # HANGUL SYLLABLE IEUNG-EO-PHIEUPH 0xC5D0 # HANGUL SYLLABLE IEUNG-E 0xC5D1 # HANGUL SYLLABLE IEUNG-E-KIYEOK 0xC5D4 # HANGUL SYLLABLE IEUNG-E-NIEUN 0xC5D8 # HANGUL SYLLABLE IEUNG-E-RIEUL 0xC5E0 # HANGUL SYLLABLE IEUNG-E-MIEUM 0xC5E1 # HANGUL SYLLABLE IEUNG-E-PIEUP 0xC5E3 # HANGUL SYLLABLE IEUNG-E-SIOS 0xC5E5 # HANGUL SYLLABLE IEUNG-E-IEUNG 0xC5EC # HANGUL SYLLABLE IEUNG-YEO 0xC5ED # HANGUL SYLLABLE IEUNG-YEO-KIYEOK 0xC5EE # HANGUL SYLLABLE IEUNG-YEO-SSANGKIYEOK 0xC5F0 # HANGUL SYLLABLE IEUNG-YEO-NIEUN 0xC5F4 # HANGUL SYLLABLE IEUNG-YEO-RIEUL 0xC5F6 # HANGUL SYLLABLE IEUNG-YEO-RIEULMIEUM 0xC5F7 # HANGUL SYLLABLE IEUNG-YEO-RIEULPIEUP 0xC5FC # HANGUL SYLLABLE IEUNG-YEO-MIEUM 0xC5FD # HANGUL SYLLABLE IEUNG-YEO-PIEUP 0xC5FE # HANGUL SYLLABLE IEUNG-YEO-PIEUPSIOS 0xC5FF # HANGUL SYLLABLE IEUNG-YEO-SIOS 0xC600 # HANGUL SYLLABLE IEUNG-YEO-SSANGSIOS 0xC601 # HANGUL SYLLABLE IEUNG-YEO-IEUNG 0xC605 # HANGUL SYLLABLE IEUNG-YEO-THIEUTH 0xC606 # HANGUL SYLLABLE IEUNG-YEO-PHIEUPH 0xC607 # HANGUL SYLLABLE IEUNG-YEO-HIEUH 0xC608 # HANGUL SYLLABLE IEUNG-YE 0xC60C # HANGUL SYLLABLE IEUNG-YE-NIEUN 0xC610 # HANGUL SYLLABLE IEUNG-YE-RIEUL 0xC618 # HANGUL SYLLABLE IEUNG-YE-MIEUM 0xC619 # HANGUL SYLLABLE IEUNG-YE-PIEUP 0xC61B # HANGUL SYLLABLE IEUNG-YE-SIOS 0xC61C # HANGUL SYLLABLE IEUNG-YE-SSANGSIOS 0xC624 # HANGUL SYLLABLE IEUNG-O 0xC625 # HANGUL SYLLABLE IEUNG-O-KIYEOK 0xC628 # HANGUL SYLLABLE IEUNG-O-NIEUN 0xC62C # HANGUL SYLLABLE IEUNG-O-RIEUL 0xC62D # HANGUL SYLLABLE IEUNG-O-RIEULKIYEOK 0xC62E # HANGUL SYLLABLE IEUNG-O-RIEULMIEUM 0xC630 # HANGUL SYLLABLE IEUNG-O-RIEULSIOS 0xC633 # HANGUL SYLLABLE IEUNG-O-RIEULHIEUH 0xC634 # HANGUL SYLLABLE IEUNG-O-MIEUM 0xC635 # HANGUL SYLLABLE IEUNG-O-PIEUP 0xC637 # HANGUL SYLLABLE IEUNG-O-SIOS 0xC639 # HANGUL SYLLABLE IEUNG-O-IEUNG 0xC63B # HANGUL SYLLABLE IEUNG-O-CHIEUCH 0xC640 # HANGUL SYLLABLE IEUNG-WA 0xC641 # HANGUL SYLLABLE IEUNG-WA-KIYEOK 0xC644 # HANGUL SYLLABLE IEUNG-WA-NIEUN 0xC648 # HANGUL SYLLABLE IEUNG-WA-RIEUL 0xC650 # HANGUL SYLLABLE IEUNG-WA-MIEUM 0xC651 # HANGUL SYLLABLE IEUNG-WA-PIEUP 0xC653 # HANGUL SYLLABLE IEUNG-WA-SIOS 0xC654 # HANGUL SYLLABLE IEUNG-WA-SSANGSIOS 0xC655 # HANGUL SYLLABLE IEUNG-WA-IEUNG 0xC65C # HANGUL SYLLABLE IEUNG-WAE 0xC65D # HANGUL SYLLABLE IEUNG-WAE-KIYEOK 0xC660 # HANGUL SYLLABLE IEUNG-WAE-NIEUN 0xC66C # HANGUL SYLLABLE IEUNG-WAE-MIEUM 0xC66F # HANGUL SYLLABLE IEUNG-WAE-SIOS 0xC671 # HANGUL SYLLABLE IEUNG-WAE-IEUNG 0xC678 # HANGUL SYLLABLE IEUNG-OE 0xC679 # HANGUL SYLLABLE IEUNG-OE-KIYEOK 0xC67C # HANGUL SYLLABLE IEUNG-OE-NIEUN 0xC680 # HANGUL SYLLABLE IEUNG-OE-RIEUL 0xC688 # HANGUL SYLLABLE IEUNG-OE-MIEUM 0xC689 # HANGUL SYLLABLE IEUNG-OE-PIEUP 0xC68B # HANGUL SYLLABLE IEUNG-OE-SIOS 0xC68D # HANGUL SYLLABLE IEUNG-OE-IEUNG 0xC694 # HANGUL SYLLABLE IEUNG-YO 0xC695 # HANGUL SYLLABLE IEUNG-YO-KIYEOK 0xC698 # HANGUL SYLLABLE IEUNG-YO-NIEUN 0xC69C # HANGUL SYLLABLE IEUNG-YO-RIEUL 0xC6A4 # HANGUL SYLLABLE IEUNG-YO-MIEUM 0xC6A5 # HANGUL SYLLABLE IEUNG-YO-PIEUP 0xC6A7 # HANGUL SYLLABLE IEUNG-YO-SIOS 0xC6A9 # HANGUL SYLLABLE IEUNG-YO-IEUNG 0xC6B0 # HANGUL SYLLABLE IEUNG-U 0xC6B1 # HANGUL SYLLABLE IEUNG-U-KIYEOK 0xC6B4 # HANGUL SYLLABLE IEUNG-U-NIEUN 0xC6B8 # HANGUL SYLLABLE IEUNG-U-RIEUL 0xC6B9 # HANGUL SYLLABLE IEUNG-U-RIEULKIYEOK 0xC6BA # HANGUL SYLLABLE IEUNG-U-RIEULMIEUM 0xC6C0 # HANGUL SYLLABLE IEUNG-U-MIEUM 0xC6C1 # HANGUL SYLLABLE IEUNG-U-PIEUP 0xC6C3 # HANGUL SYLLABLE IEUNG-U-SIOS 0xC6C5 # HANGUL SYLLABLE IEUNG-U-IEUNG 0xC6CC # HANGUL SYLLABLE IEUNG-WEO 0xC6CD # HANGUL SYLLABLE IEUNG-WEO-KIYEOK 0xC6D0 # HANGUL SYLLABLE IEUNG-WEO-NIEUN 0xC6D4 # HANGUL SYLLABLE IEUNG-WEO-RIEUL 0xC6DC # HANGUL SYLLABLE IEUNG-WEO-MIEUM 0xC6DD # HANGUL SYLLABLE IEUNG-WEO-PIEUP 0xC6E0 # HANGUL SYLLABLE IEUNG-WEO-SSANGSIOS 0xC6E1 # HANGUL SYLLABLE IEUNG-WEO-IEUNG 0xC6E8 # HANGUL SYLLABLE IEUNG-WE 0xC6E9 # HANGUL SYLLABLE IEUNG-WE-KIYEOK 0xC6EC # HANGUL SYLLABLE IEUNG-WE-NIEUN 0xC6F0 # HANGUL SYLLABLE IEUNG-WE-RIEUL 0xC6F8 # HANGUL SYLLABLE IEUNG-WE-MIEUM 0xC6F9 # HANGUL SYLLABLE IEUNG-WE-PIEUP 0xC6FD # HANGUL SYLLABLE IEUNG-WE-IEUNG 0xC704 # HANGUL SYLLABLE IEUNG-WI 0xC705 # HANGUL SYLLABLE IEUNG-WI-KIYEOK 0xC708 # HANGUL SYLLABLE IEUNG-WI-NIEUN 0xC70C # HANGUL SYLLABLE IEUNG-WI-RIEUL 0xC714 # HANGUL SYLLABLE IEUNG-WI-MIEUM 0xC715 # HANGUL SYLLABLE IEUNG-WI-PIEUP 0xC717 # HANGUL SYLLABLE IEUNG-WI-SIOS 0xC719 # HANGUL SYLLABLE IEUNG-WI-IEUNG 0xC720 # HANGUL SYLLABLE IEUNG-YU 0xC721 # HANGUL SYLLABLE IEUNG-YU-KIYEOK 0xC724 # HANGUL SYLLABLE IEUNG-YU-NIEUN 0xC728 # HANGUL SYLLABLE IEUNG-YU-RIEUL 0xC730 # HANGUL SYLLABLE IEUNG-YU-MIEUM 0xC731 # HANGUL SYLLABLE IEUNG-YU-PIEUP 0xC733 # HANGUL SYLLABLE IEUNG-YU-SIOS 0xC735 # HANGUL SYLLABLE IEUNG-YU-IEUNG 0xC737 # HANGUL SYLLABLE IEUNG-YU-CHIEUCH 0xC73C # HANGUL SYLLABLE IEUNG-EU 0xC73D # HANGUL SYLLABLE IEUNG-EU-KIYEOK 0xC740 # HANGUL SYLLABLE IEUNG-EU-NIEUN 0xC744 # HANGUL SYLLABLE IEUNG-EU-RIEUL 0xC74A # HANGUL SYLLABLE IEUNG-EU-RIEULPHIEUPH 0xC74C # HANGUL SYLLABLE IEUNG-EU-MIEUM 0xC74D # HANGUL SYLLABLE IEUNG-EU-PIEUP 0xC74F # HANGUL SYLLABLE IEUNG-EU-SIOS 0xC751 # HANGUL SYLLABLE IEUNG-EU-IEUNG 0xC752 # HANGUL SYLLABLE IEUNG-EU-CIEUC 0xC753 # HANGUL SYLLABLE IEUNG-EU-CHIEUCH 0xC754 # HANGUL SYLLABLE IEUNG-EU-KHIEUKH 0xC755 # HANGUL SYLLABLE IEUNG-EU-THIEUTH 0xC756 # HANGUL SYLLABLE IEUNG-EU-PHIEUPH 0xC757 # HANGUL SYLLABLE IEUNG-EU-HIEUH 0xC758 # HANGUL SYLLABLE IEUNG-YI 0xC75C # HANGUL SYLLABLE IEUNG-YI-NIEUN 0xC760 # HANGUL SYLLABLE IEUNG-YI-RIEUL 0xC768 # HANGUL SYLLABLE IEUNG-YI-MIEUM 0xC76B # HANGUL SYLLABLE IEUNG-YI-SIOS 0xC774 # HANGUL SYLLABLE IEUNG-I 0xC775 # HANGUL SYLLABLE IEUNG-I-KIYEOK 0xC778 # HANGUL SYLLABLE IEUNG-I-NIEUN 0xC77C # HANGUL SYLLABLE IEUNG-I-RIEUL 0xC77D # HANGUL SYLLABLE IEUNG-I-RIEULKIYEOK 0xC77E # HANGUL SYLLABLE IEUNG-I-RIEULMIEUM 0xC783 # HANGUL SYLLABLE IEUNG-I-RIEULHIEUH 0xC784 # HANGUL SYLLABLE IEUNG-I-MIEUM 0xC785 # HANGUL SYLLABLE IEUNG-I-PIEUP 0xC787 # HANGUL SYLLABLE IEUNG-I-SIOS 0xC788 # HANGUL SYLLABLE IEUNG-I-SSANGSIOS 0xC789 # HANGUL SYLLABLE IEUNG-I-IEUNG 0xC78A # HANGUL SYLLABLE IEUNG-I-CIEUC 0xC78E # HANGUL SYLLABLE IEUNG-I-PHIEUPH 0xC790 # HANGUL SYLLABLE CIEUC-A 0xC791 # HANGUL SYLLABLE CIEUC-A-KIYEOK 0xC794 # HANGUL SYLLABLE CIEUC-A-NIEUN 0xC796 # HANGUL SYLLABLE CIEUC-A-NIEUNHIEUH 0xC797 # HANGUL SYLLABLE CIEUC-A-TIKEUT 0xC798 # HANGUL SYLLABLE CIEUC-A-RIEUL 0xC79A # HANGUL SYLLABLE CIEUC-A-RIEULMIEUM 0xC7A0 # HANGUL SYLLABLE CIEUC-A-MIEUM 0xC7A1 # HANGUL SYLLABLE CIEUC-A-PIEUP 0xC7A3 # HANGUL SYLLABLE CIEUC-A-SIOS 0xC7A4 # HANGUL SYLLABLE CIEUC-A-SSANGSIOS 0xC7A5 # HANGUL SYLLABLE CIEUC-A-IEUNG 0xC7A6 # HANGUL SYLLABLE CIEUC-A-CIEUC 0xC7AC # HANGUL SYLLABLE CIEUC-AE 0xC7AD # HANGUL SYLLABLE CIEUC-AE-KIYEOK 0xC7B0 # HANGUL SYLLABLE CIEUC-AE-NIEUN 0xC7B4 # HANGUL SYLLABLE CIEUC-AE-RIEUL 0xC7BC # HANGUL SYLLABLE CIEUC-AE-MIEUM 0xC7BD # HANGUL SYLLABLE CIEUC-AE-PIEUP 0xC7BF # HANGUL SYLLABLE CIEUC-AE-SIOS 0xC7C0 # HANGUL SYLLABLE CIEUC-AE-SSANGSIOS 0xC7C1 # HANGUL SYLLABLE CIEUC-AE-IEUNG 0xC7C8 # HANGUL SYLLABLE CIEUC-YA 0xC7C9 # HANGUL SYLLABLE CIEUC-YA-KIYEOK 0xC7CC # HANGUL SYLLABLE CIEUC-YA-NIEUN 0xC7CE # HANGUL SYLLABLE CIEUC-YA-NIEUNHIEUH 0xC7D0 # HANGUL SYLLABLE CIEUC-YA-RIEUL 0xC7D8 # HANGUL SYLLABLE CIEUC-YA-MIEUM 0xC7DD # HANGUL SYLLABLE CIEUC-YA-IEUNG 0xC7E4 # HANGUL SYLLABLE CIEUC-YAE 0xC7E8 # HANGUL SYLLABLE CIEUC-YAE-NIEUN 0xC7EC # HANGUL SYLLABLE CIEUC-YAE-RIEUL 0xC800 # HANGUL SYLLABLE CIEUC-EO 0xC801 # HANGUL SYLLABLE CIEUC-EO-KIYEOK 0xC804 # HANGUL SYLLABLE CIEUC-EO-NIEUN 0xC808 # HANGUL SYLLABLE CIEUC-EO-RIEUL 0xC80A # HANGUL SYLLABLE CIEUC-EO-RIEULMIEUM 0xC810 # HANGUL SYLLABLE CIEUC-EO-MIEUM 0xC811 # HANGUL SYLLABLE CIEUC-EO-PIEUP 0xC813 # HANGUL SYLLABLE CIEUC-EO-SIOS 0xC815 # HANGUL SYLLABLE CIEUC-EO-IEUNG 0xC816 # HANGUL SYLLABLE CIEUC-EO-CIEUC 0xC81C # HANGUL SYLLABLE CIEUC-E 0xC81D # HANGUL SYLLABLE CIEUC-E-KIYEOK 0xC820 # HANGUL SYLLABLE CIEUC-E-NIEUN 0xC824 # HANGUL SYLLABLE CIEUC-E-RIEUL 0xC82C # HANGUL SYLLABLE CIEUC-E-MIEUM 0xC82D # HANGUL SYLLABLE CIEUC-E-PIEUP 0xC82F # HANGUL SYLLABLE CIEUC-E-SIOS 0xC831 # HANGUL SYLLABLE CIEUC-E-IEUNG 0xC838 # HANGUL SYLLABLE CIEUC-YEO 0xC83C # HANGUL SYLLABLE CIEUC-YEO-NIEUN 0xC840 # HANGUL SYLLABLE CIEUC-YEO-RIEUL 0xC848 # HANGUL SYLLABLE CIEUC-YEO-MIEUM 0xC849 # HANGUL SYLLABLE CIEUC-YEO-PIEUP 0xC84C # HANGUL SYLLABLE CIEUC-YEO-SSANGSIOS 0xC84D # HANGUL SYLLABLE CIEUC-YEO-IEUNG 0xC854 # HANGUL SYLLABLE CIEUC-YE 0xC870 # HANGUL SYLLABLE CIEUC-O 0xC871 # HANGUL SYLLABLE CIEUC-O-KIYEOK 0xC874 # HANGUL SYLLABLE CIEUC-O-NIEUN 0xC878 # HANGUL SYLLABLE CIEUC-O-RIEUL 0xC87A # HANGUL SYLLABLE CIEUC-O-RIEULMIEUM 0xC880 # HANGUL SYLLABLE CIEUC-O-MIEUM 0xC881 # HANGUL SYLLABLE CIEUC-O-PIEUP 0xC883 # HANGUL SYLLABLE CIEUC-O-SIOS 0xC885 # HANGUL SYLLABLE CIEUC-O-IEUNG 0xC886 # HANGUL SYLLABLE CIEUC-O-CIEUC 0xC887 # HANGUL SYLLABLE CIEUC-O-CHIEUCH 0xC88B # HANGUL SYLLABLE CIEUC-O-HIEUH 0xC88C # HANGUL SYLLABLE CIEUC-WA 0xC88D # HANGUL SYLLABLE CIEUC-WA-KIYEOK 0xC894 # HANGUL SYLLABLE CIEUC-WA-RIEUL 0xC89D # HANGUL SYLLABLE CIEUC-WA-PIEUP 0xC89F # HANGUL SYLLABLE CIEUC-WA-SIOS 0xC8A1 # HANGUL SYLLABLE CIEUC-WA-IEUNG 0xC8A8 # HANGUL SYLLABLE CIEUC-WAE 0xC8BC # HANGUL SYLLABLE CIEUC-WAE-SSANGSIOS 0xC8BD # HANGUL SYLLABLE CIEUC-WAE-IEUNG 0xC8C4 # HANGUL SYLLABLE CIEUC-OE 0xC8C8 # HANGUL SYLLABLE CIEUC-OE-NIEUN 0xC8CC # HANGUL SYLLABLE CIEUC-OE-RIEUL 0xC8D4 # HANGUL SYLLABLE CIEUC-OE-MIEUM 0xC8D5 # HANGUL SYLLABLE CIEUC-OE-PIEUP 0xC8D7 # HANGUL SYLLABLE CIEUC-OE-SIOS 0xC8D9 # HANGUL SYLLABLE CIEUC-OE-IEUNG 0xC8E0 # HANGUL SYLLABLE CIEUC-YO 0xC8E1 # HANGUL SYLLABLE CIEUC-YO-KIYEOK 0xC8E4 # HANGUL SYLLABLE CIEUC-YO-NIEUN 0xC8F5 # HANGUL SYLLABLE CIEUC-YO-IEUNG 0xC8FC # HANGUL SYLLABLE CIEUC-U 0xC8FD # HANGUL SYLLABLE CIEUC-U-KIYEOK 0xC900 # HANGUL SYLLABLE CIEUC-U-NIEUN 0xC904 # HANGUL SYLLABLE CIEUC-U-RIEUL 0xC905 # HANGUL SYLLABLE CIEUC-U-RIEULKIYEOK 0xC906 # HANGUL SYLLABLE CIEUC-U-RIEULMIEUM 0xC90C # HANGUL SYLLABLE CIEUC-U-MIEUM 0xC90D # HANGUL SYLLABLE CIEUC-U-PIEUP 0xC90F # HANGUL SYLLABLE CIEUC-U-SIOS 0xC911 # HANGUL SYLLABLE CIEUC-U-IEUNG 0xC918 # HANGUL SYLLABLE CIEUC-WEO 0xC92C # HANGUL SYLLABLE CIEUC-WEO-SSANGSIOS 0xC934 # HANGUL SYLLABLE CIEUC-WE 0xC950 # HANGUL SYLLABLE CIEUC-WI 0xC951 # HANGUL SYLLABLE CIEUC-WI-KIYEOK 0xC954 # HANGUL SYLLABLE CIEUC-WI-NIEUN 0xC958 # HANGUL SYLLABLE CIEUC-WI-RIEUL 0xC960 # HANGUL SYLLABLE CIEUC-WI-MIEUM 0xC961 # HANGUL SYLLABLE CIEUC-WI-PIEUP 0xC963 # HANGUL SYLLABLE CIEUC-WI-SIOS 0xC96C # HANGUL SYLLABLE CIEUC-YU 0xC970 # HANGUL SYLLABLE CIEUC-YU-NIEUN 0xC974 # HANGUL SYLLABLE CIEUC-YU-RIEUL 0xC97C # HANGUL SYLLABLE CIEUC-YU-MIEUM 0xC988 # HANGUL SYLLABLE CIEUC-EU 0xC989 # HANGUL SYLLABLE CIEUC-EU-KIYEOK 0xC98C # HANGUL SYLLABLE CIEUC-EU-NIEUN 0xC990 # HANGUL SYLLABLE CIEUC-EU-RIEUL 0xC998 # HANGUL SYLLABLE CIEUC-EU-MIEUM 0xC999 # HANGUL SYLLABLE CIEUC-EU-PIEUP 0xC99B # HANGUL SYLLABLE CIEUC-EU-SIOS 0xC99D # HANGUL SYLLABLE CIEUC-EU-IEUNG 0xC9C0 # HANGUL SYLLABLE CIEUC-I 0xC9C1 # HANGUL SYLLABLE CIEUC-I-KIYEOK 0xC9C4 # HANGUL SYLLABLE CIEUC-I-NIEUN 0xC9C7 # HANGUL SYLLABLE CIEUC-I-TIKEUT 0xC9C8 # HANGUL SYLLABLE CIEUC-I-RIEUL 0xC9CA # HANGUL SYLLABLE CIEUC-I-RIEULMIEUM 0xC9D0 # HANGUL SYLLABLE CIEUC-I-MIEUM 0xC9D1 # HANGUL SYLLABLE CIEUC-I-PIEUP 0xC9D3 # HANGUL SYLLABLE CIEUC-I-SIOS 0xC9D5 # HANGUL SYLLABLE CIEUC-I-IEUNG 0xC9D6 # HANGUL SYLLABLE CIEUC-I-CIEUC 0xC9D9 # HANGUL SYLLABLE CIEUC-I-THIEUTH 0xC9DA # HANGUL SYLLABLE CIEUC-I-PHIEUPH 0xC9DC # HANGUL SYLLABLE SSANGCIEUC-A 0xC9DD # HANGUL SYLLABLE SSANGCIEUC-A-KIYEOK 0xC9E0 # HANGUL SYLLABLE SSANGCIEUC-A-NIEUN 0xC9E2 # HANGUL SYLLABLE SSANGCIEUC-A-NIEUNHIEUH 0xC9E4 # HANGUL SYLLABLE SSANGCIEUC-A-RIEUL 0xC9E7 # HANGUL SYLLABLE SSANGCIEUC-A-RIEULPIEUP 0xC9EC # HANGUL SYLLABLE SSANGCIEUC-A-MIEUM 0xC9ED # HANGUL SYLLABLE SSANGCIEUC-A-PIEUP 0xC9EF # HANGUL SYLLABLE SSANGCIEUC-A-SIOS 0xC9F0 # HANGUL SYLLABLE SSANGCIEUC-A-SSANGSIOS 0xC9F1 # HANGUL SYLLABLE SSANGCIEUC-A-IEUNG 0xC9F8 # HANGUL SYLLABLE SSANGCIEUC-AE 0xC9F9 # HANGUL SYLLABLE SSANGCIEUC-AE-KIYEOK 0xC9FC # HANGUL SYLLABLE SSANGCIEUC-AE-NIEUN 0xCA00 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEUL 0xCA08 # HANGUL SYLLABLE SSANGCIEUC-AE-MIEUM 0xCA09 # HANGUL SYLLABLE SSANGCIEUC-AE-PIEUP 0xCA0B # HANGUL SYLLABLE SSANGCIEUC-AE-SIOS 0xCA0C # HANGUL SYLLABLE SSANGCIEUC-AE-SSANGSIOS 0xCA0D # HANGUL SYLLABLE SSANGCIEUC-AE-IEUNG 0xCA14 # HANGUL SYLLABLE SSANGCIEUC-YA 0xCA18 # HANGUL SYLLABLE SSANGCIEUC-YA-NIEUN 0xCA29 # HANGUL SYLLABLE SSANGCIEUC-YA-IEUNG 0xCA4C # HANGUL SYLLABLE SSANGCIEUC-EO 0xCA4D # HANGUL SYLLABLE SSANGCIEUC-EO-KIYEOK 0xCA50 # HANGUL SYLLABLE SSANGCIEUC-EO-NIEUN 0xCA54 # HANGUL SYLLABLE SSANGCIEUC-EO-RIEUL 0xCA5C # HANGUL SYLLABLE SSANGCIEUC-EO-MIEUM 0xCA5D # HANGUL SYLLABLE SSANGCIEUC-EO-PIEUP 0xCA5F # HANGUL SYLLABLE SSANGCIEUC-EO-SIOS 0xCA60 # HANGUL SYLLABLE SSANGCIEUC-EO-SSANGSIOS 0xCA61 # HANGUL SYLLABLE SSANGCIEUC-EO-IEUNG 0xCA68 # HANGUL SYLLABLE SSANGCIEUC-E 0xCA7D # HANGUL SYLLABLE SSANGCIEUC-E-IEUNG 0xCA84 # HANGUL SYLLABLE SSANGCIEUC-YEO 0xCA98 # HANGUL SYLLABLE SSANGCIEUC-YEO-SSANGSIOS 0xCABC # HANGUL SYLLABLE SSANGCIEUC-O 0xCABD # HANGUL SYLLABLE SSANGCIEUC-O-KIYEOK 0xCAC0 # HANGUL SYLLABLE SSANGCIEUC-O-NIEUN 0xCAC4 # HANGUL SYLLABLE SSANGCIEUC-O-RIEUL 0xCACC # HANGUL SYLLABLE SSANGCIEUC-O-MIEUM 0xCACD # HANGUL SYLLABLE SSANGCIEUC-O-PIEUP 0xCACF # HANGUL SYLLABLE SSANGCIEUC-O-SIOS 0xCAD1 # HANGUL SYLLABLE SSANGCIEUC-O-IEUNG 0xCAD3 # HANGUL SYLLABLE SSANGCIEUC-O-CHIEUCH 0xCAD8 # HANGUL SYLLABLE SSANGCIEUC-WA 0xCAD9 # HANGUL SYLLABLE SSANGCIEUC-WA-KIYEOK 0xCAE0 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEUL 0xCAEC # HANGUL SYLLABLE SSANGCIEUC-WA-SSANGSIOS 0xCAF4 # HANGUL SYLLABLE SSANGCIEUC-WAE 0xCB08 # HANGUL SYLLABLE SSANGCIEUC-WAE-SSANGSIOS 0xCB10 # HANGUL SYLLABLE SSANGCIEUC-OE 0xCB14 # HANGUL SYLLABLE SSANGCIEUC-OE-NIEUN 0xCB18 # HANGUL SYLLABLE SSANGCIEUC-OE-RIEUL 0xCB20 # HANGUL SYLLABLE SSANGCIEUC-OE-MIEUM 0xCB21 # HANGUL SYLLABLE SSANGCIEUC-OE-PIEUP 0xCB41 # HANGUL SYLLABLE SSANGCIEUC-YO-IEUNG 0xCB48 # HANGUL SYLLABLE SSANGCIEUC-U 0xCB49 # HANGUL SYLLABLE SSANGCIEUC-U-KIYEOK 0xCB4C # HANGUL SYLLABLE SSANGCIEUC-U-NIEUN 0xCB50 # HANGUL SYLLABLE SSANGCIEUC-U-RIEUL 0xCB58 # HANGUL SYLLABLE SSANGCIEUC-U-MIEUM 0xCB59 # HANGUL SYLLABLE SSANGCIEUC-U-PIEUP 0xCB5D # HANGUL SYLLABLE SSANGCIEUC-U-IEUNG 0xCB64 # HANGUL SYLLABLE SSANGCIEUC-WEO 0xCB78 # HANGUL SYLLABLE SSANGCIEUC-WEO-SSANGSIOS 0xCB79 # HANGUL SYLLABLE SSANGCIEUC-WEO-IEUNG 0xCB9C # HANGUL SYLLABLE SSANGCIEUC-WI 0xCBB8 # HANGUL SYLLABLE SSANGCIEUC-YU 0xCBD4 # HANGUL SYLLABLE SSANGCIEUC-EU 0xCBE4 # HANGUL SYLLABLE SSANGCIEUC-EU-MIEUM 0xCBE7 # HANGUL SYLLABLE SSANGCIEUC-EU-SIOS 0xCBE9 # HANGUL SYLLABLE SSANGCIEUC-EU-IEUNG 0xCC0C # HANGUL SYLLABLE SSANGCIEUC-I 0xCC0D # HANGUL SYLLABLE SSANGCIEUC-I-KIYEOK 0xCC10 # HANGUL SYLLABLE SSANGCIEUC-I-NIEUN 0xCC14 # HANGUL SYLLABLE SSANGCIEUC-I-RIEUL 0xCC1C # HANGUL SYLLABLE SSANGCIEUC-I-MIEUM 0xCC1D # HANGUL SYLLABLE SSANGCIEUC-I-PIEUP 0xCC21 # HANGUL SYLLABLE SSANGCIEUC-I-IEUNG 0xCC22 # HANGUL SYLLABLE SSANGCIEUC-I-CIEUC 0xCC27 # HANGUL SYLLABLE SSANGCIEUC-I-HIEUH 0xCC28 # HANGUL SYLLABLE CHIEUCH-A 0xCC29 # HANGUL SYLLABLE CHIEUCH-A-KIYEOK 0xCC2C # HANGUL SYLLABLE CHIEUCH-A-NIEUN 0xCC2E # HANGUL SYLLABLE CHIEUCH-A-NIEUNHIEUH 0xCC30 # HANGUL SYLLABLE CHIEUCH-A-RIEUL 0xCC38 # HANGUL SYLLABLE CHIEUCH-A-MIEUM 0xCC39 # HANGUL SYLLABLE CHIEUCH-A-PIEUP 0xCC3B # HANGUL SYLLABLE CHIEUCH-A-SIOS 0xCC3C # HANGUL SYLLABLE CHIEUCH-A-SSANGSIOS 0xCC3D # HANGUL SYLLABLE CHIEUCH-A-IEUNG 0xCC3E # HANGUL SYLLABLE CHIEUCH-A-CIEUC 0xCC44 # HANGUL SYLLABLE CHIEUCH-AE 0xCC45 # HANGUL SYLLABLE CHIEUCH-AE-KIYEOK 0xCC48 # HANGUL SYLLABLE CHIEUCH-AE-NIEUN 0xCC4C # HANGUL SYLLABLE CHIEUCH-AE-RIEUL 0xCC54 # HANGUL SYLLABLE CHIEUCH-AE-MIEUM 0xCC55 # HANGUL SYLLABLE CHIEUCH-AE-PIEUP 0xCC57 # HANGUL SYLLABLE CHIEUCH-AE-SIOS 0xCC58 # HANGUL SYLLABLE CHIEUCH-AE-SSANGSIOS 0xCC59 # HANGUL SYLLABLE CHIEUCH-AE-IEUNG 0xCC60 # HANGUL SYLLABLE CHIEUCH-YA 0xCC64 # HANGUL SYLLABLE CHIEUCH-YA-NIEUN 0xCC66 # HANGUL SYLLABLE CHIEUCH-YA-NIEUNHIEUH 0xCC68 # HANGUL SYLLABLE CHIEUCH-YA-RIEUL 0xCC70 # HANGUL SYLLABLE CHIEUCH-YA-MIEUM 0xCC75 # HANGUL SYLLABLE CHIEUCH-YA-IEUNG 0xCC98 # HANGUL SYLLABLE CHIEUCH-EO 0xCC99 # HANGUL SYLLABLE CHIEUCH-EO-KIYEOK 0xCC9C # HANGUL SYLLABLE CHIEUCH-EO-NIEUN 0xCCA0 # HANGUL SYLLABLE CHIEUCH-EO-RIEUL 0xCCA8 # HANGUL SYLLABLE CHIEUCH-EO-MIEUM 0xCCA9 # HANGUL SYLLABLE CHIEUCH-EO-PIEUP 0xCCAB # HANGUL SYLLABLE CHIEUCH-EO-SIOS 0xCCAC # HANGUL SYLLABLE CHIEUCH-EO-SSANGSIOS 0xCCAD # HANGUL SYLLABLE CHIEUCH-EO-IEUNG 0xCCB4 # HANGUL SYLLABLE CHIEUCH-E 0xCCB5 # HANGUL SYLLABLE CHIEUCH-E-KIYEOK 0xCCB8 # HANGUL SYLLABLE CHIEUCH-E-NIEUN 0xCCBC # HANGUL SYLLABLE CHIEUCH-E-RIEUL 0xCCC4 # HANGUL SYLLABLE CHIEUCH-E-MIEUM 0xCCC5 # HANGUL SYLLABLE CHIEUCH-E-PIEUP 0xCCC7 # HANGUL SYLLABLE CHIEUCH-E-SIOS 0xCCC9 # HANGUL SYLLABLE CHIEUCH-E-IEUNG 0xCCD0 # HANGUL SYLLABLE CHIEUCH-YEO 0xCCD4 # HANGUL SYLLABLE CHIEUCH-YEO-NIEUN 0xCCE4 # HANGUL SYLLABLE CHIEUCH-YEO-SSANGSIOS 0xCCEC # HANGUL SYLLABLE CHIEUCH-YE 0xCCF0 # HANGUL SYLLABLE CHIEUCH-YE-NIEUN 0xCD01 # HANGUL SYLLABLE CHIEUCH-YE-IEUNG 0xCD08 # HANGUL SYLLABLE CHIEUCH-O 0xCD09 # HANGUL SYLLABLE CHIEUCH-O-KIYEOK 0xCD0C # HANGUL SYLLABLE CHIEUCH-O-NIEUN 0xCD10 # HANGUL SYLLABLE CHIEUCH-O-RIEUL 0xCD18 # HANGUL SYLLABLE CHIEUCH-O-MIEUM 0xCD19 # HANGUL SYLLABLE CHIEUCH-O-PIEUP 0xCD1B # HANGUL SYLLABLE CHIEUCH-O-SIOS 0xCD1D # HANGUL SYLLABLE CHIEUCH-O-IEUNG 0xCD24 # HANGUL SYLLABLE CHIEUCH-WA 0xCD28 # HANGUL SYLLABLE CHIEUCH-WA-NIEUN 0xCD2C # HANGUL SYLLABLE CHIEUCH-WA-RIEUL 0xCD39 # HANGUL SYLLABLE CHIEUCH-WA-IEUNG 0xCD5C # HANGUL SYLLABLE CHIEUCH-OE 0xCD60 # HANGUL SYLLABLE CHIEUCH-OE-NIEUN 0xCD64 # HANGUL SYLLABLE CHIEUCH-OE-RIEUL 0xCD6C # HANGUL SYLLABLE CHIEUCH-OE-MIEUM 0xCD6D # HANGUL SYLLABLE CHIEUCH-OE-PIEUP 0xCD6F # HANGUL SYLLABLE CHIEUCH-OE-SIOS 0xCD71 # HANGUL SYLLABLE CHIEUCH-OE-IEUNG 0xCD78 # HANGUL SYLLABLE CHIEUCH-YO 0xCD88 # HANGUL SYLLABLE CHIEUCH-YO-MIEUM 0xCD94 # HANGUL SYLLABLE CHIEUCH-U 0xCD95 # HANGUL SYLLABLE CHIEUCH-U-KIYEOK 0xCD98 # HANGUL SYLLABLE CHIEUCH-U-NIEUN 0xCD9C # HANGUL SYLLABLE CHIEUCH-U-RIEUL 0xCDA4 # HANGUL SYLLABLE CHIEUCH-U-MIEUM 0xCDA5 # HANGUL SYLLABLE CHIEUCH-U-PIEUP 0xCDA7 # HANGUL SYLLABLE CHIEUCH-U-SIOS 0xCDA9 # HANGUL SYLLABLE CHIEUCH-U-IEUNG 0xCDB0 # HANGUL SYLLABLE CHIEUCH-WEO 0xCDC4 # HANGUL SYLLABLE CHIEUCH-WEO-SSANGSIOS 0xCDCC # HANGUL SYLLABLE CHIEUCH-WE 0xCDD0 # HANGUL SYLLABLE CHIEUCH-WE-NIEUN 0xCDE8 # HANGUL SYLLABLE CHIEUCH-WI 0xCDEC # HANGUL SYLLABLE CHIEUCH-WI-NIEUN 0xCDF0 # HANGUL SYLLABLE CHIEUCH-WI-RIEUL 0xCDF8 # HANGUL SYLLABLE CHIEUCH-WI-MIEUM 0xCDF9 # HANGUL SYLLABLE CHIEUCH-WI-PIEUP 0xCDFB # HANGUL SYLLABLE CHIEUCH-WI-SIOS 0xCDFD # HANGUL SYLLABLE CHIEUCH-WI-IEUNG 0xCE04 # HANGUL SYLLABLE CHIEUCH-YU 0xCE08 # HANGUL SYLLABLE CHIEUCH-YU-NIEUN 0xCE0C # HANGUL SYLLABLE CHIEUCH-YU-RIEUL 0xCE14 # HANGUL SYLLABLE CHIEUCH-YU-MIEUM 0xCE19 # HANGUL SYLLABLE CHIEUCH-YU-IEUNG 0xCE20 # HANGUL SYLLABLE CHIEUCH-EU 0xCE21 # HANGUL SYLLABLE CHIEUCH-EU-KIYEOK 0xCE24 # HANGUL SYLLABLE CHIEUCH-EU-NIEUN 0xCE28 # HANGUL SYLLABLE CHIEUCH-EU-RIEUL 0xCE30 # HANGUL SYLLABLE CHIEUCH-EU-MIEUM 0xCE31 # HANGUL SYLLABLE CHIEUCH-EU-PIEUP 0xCE33 # HANGUL SYLLABLE CHIEUCH-EU-SIOS 0xCE35 # HANGUL SYLLABLE CHIEUCH-EU-IEUNG 0xCE58 # HANGUL SYLLABLE CHIEUCH-I 0xCE59 # HANGUL SYLLABLE CHIEUCH-I-KIYEOK 0xCE5C # HANGUL SYLLABLE CHIEUCH-I-NIEUN 0xCE5F # HANGUL SYLLABLE CHIEUCH-I-TIKEUT 0xCE60 # HANGUL SYLLABLE CHIEUCH-I-RIEUL 0xCE61 # HANGUL SYLLABLE CHIEUCH-I-RIEULKIYEOK 0xCE68 # HANGUL SYLLABLE CHIEUCH-I-MIEUM 0xCE69 # HANGUL SYLLABLE CHIEUCH-I-PIEUP 0xCE6B # HANGUL SYLLABLE CHIEUCH-I-SIOS 0xCE6D # HANGUL SYLLABLE CHIEUCH-I-IEUNG 0xCE74 # HANGUL SYLLABLE KHIEUKH-A 0xCE75 # HANGUL SYLLABLE KHIEUKH-A-KIYEOK 0xCE78 # HANGUL SYLLABLE KHIEUKH-A-NIEUN 0xCE7C # HANGUL SYLLABLE KHIEUKH-A-RIEUL 0xCE84 # HANGUL SYLLABLE KHIEUKH-A-MIEUM 0xCE85 # HANGUL SYLLABLE KHIEUKH-A-PIEUP 0xCE87 # HANGUL SYLLABLE KHIEUKH-A-SIOS 0xCE89 # HANGUL SYLLABLE KHIEUKH-A-IEUNG 0xCE90 # HANGUL SYLLABLE KHIEUKH-AE 0xCE91 # HANGUL SYLLABLE KHIEUKH-AE-KIYEOK 0xCE94 # HANGUL SYLLABLE KHIEUKH-AE-NIEUN 0xCE98 # HANGUL SYLLABLE KHIEUKH-AE-RIEUL 0xCEA0 # HANGUL SYLLABLE KHIEUKH-AE-MIEUM 0xCEA1 # HANGUL SYLLABLE KHIEUKH-AE-PIEUP 0xCEA3 # HANGUL SYLLABLE KHIEUKH-AE-SIOS 0xCEA4 # HANGUL SYLLABLE KHIEUKH-AE-SSANGSIOS 0xCEA5 # HANGUL SYLLABLE KHIEUKH-AE-IEUNG 0xCEAC # HANGUL SYLLABLE KHIEUKH-YA 0xCEAD # HANGUL SYLLABLE KHIEUKH-YA-KIYEOK 0xCEC1 # HANGUL SYLLABLE KHIEUKH-YA-IEUNG 0xCEE4 # HANGUL SYLLABLE KHIEUKH-EO 0xCEE5 # HANGUL SYLLABLE KHIEUKH-EO-KIYEOK 0xCEE8 # HANGUL SYLLABLE KHIEUKH-EO-NIEUN 0xCEEB # HANGUL SYLLABLE KHIEUKH-EO-TIKEUT 0xCEEC # HANGUL SYLLABLE KHIEUKH-EO-RIEUL 0xCEF4 # HANGUL SYLLABLE KHIEUKH-EO-MIEUM 0xCEF5 # HANGUL SYLLABLE KHIEUKH-EO-PIEUP 0xCEF7 # HANGUL SYLLABLE KHIEUKH-EO-SIOS 0xCEF8 # HANGUL SYLLABLE KHIEUKH-EO-SSANGSIOS 0xCEF9 # HANGUL SYLLABLE KHIEUKH-EO-IEUNG 0xCF00 # HANGUL SYLLABLE KHIEUKH-E 0xCF01 # HANGUL SYLLABLE KHIEUKH-E-KIYEOK 0xCF04 # HANGUL SYLLABLE KHIEUKH-E-NIEUN 0xCF08 # HANGUL SYLLABLE KHIEUKH-E-RIEUL 0xCF10 # HANGUL SYLLABLE KHIEUKH-E-MIEUM 0xCF11 # HANGUL SYLLABLE KHIEUKH-E-PIEUP 0xCF13 # HANGUL SYLLABLE KHIEUKH-E-SIOS 0xCF15 # HANGUL SYLLABLE KHIEUKH-E-IEUNG 0xCF1C # HANGUL SYLLABLE KHIEUKH-YEO 0xCF20 # HANGUL SYLLABLE KHIEUKH-YEO-NIEUN 0xCF24 # HANGUL SYLLABLE KHIEUKH-YEO-RIEUL 0xCF2C # HANGUL SYLLABLE KHIEUKH-YEO-MIEUM 0xCF2D # HANGUL SYLLABLE KHIEUKH-YEO-PIEUP 0xCF2F # HANGUL SYLLABLE KHIEUKH-YEO-SIOS 0xCF30 # HANGUL SYLLABLE KHIEUKH-YEO-SSANGSIOS 0xCF31 # HANGUL SYLLABLE KHIEUKH-YEO-IEUNG 0xCF38 # HANGUL SYLLABLE KHIEUKH-YE 0xCF54 # HANGUL SYLLABLE KHIEUKH-O 0xCF55 # HANGUL SYLLABLE KHIEUKH-O-KIYEOK 0xCF58 # HANGUL SYLLABLE KHIEUKH-O-NIEUN 0xCF5C # HANGUL SYLLABLE KHIEUKH-O-RIEUL 0xCF64 # HANGUL SYLLABLE KHIEUKH-O-MIEUM 0xCF65 # HANGUL SYLLABLE KHIEUKH-O-PIEUP 0xCF67 # HANGUL SYLLABLE KHIEUKH-O-SIOS 0xCF69 # HANGUL SYLLABLE KHIEUKH-O-IEUNG 0xCF70 # HANGUL SYLLABLE KHIEUKH-WA 0xCF71 # HANGUL SYLLABLE KHIEUKH-WA-KIYEOK 0xCF74 # HANGUL SYLLABLE KHIEUKH-WA-NIEUN 0xCF78 # HANGUL SYLLABLE KHIEUKH-WA-RIEUL 0xCF80 # HANGUL SYLLABLE KHIEUKH-WA-MIEUM 0xCF85 # HANGUL SYLLABLE KHIEUKH-WA-IEUNG 0xCF8C # HANGUL SYLLABLE KHIEUKH-WAE 0xCFA1 # HANGUL SYLLABLE KHIEUKH-WAE-IEUNG 0xCFA8 # HANGUL SYLLABLE KHIEUKH-OE 0xCFB0 # HANGUL SYLLABLE KHIEUKH-OE-RIEUL 0xCFC4 # HANGUL SYLLABLE KHIEUKH-YO 0xCFE0 # HANGUL SYLLABLE KHIEUKH-U 0xCFE1 # HANGUL SYLLABLE KHIEUKH-U-KIYEOK 0xCFE4 # HANGUL SYLLABLE KHIEUKH-U-NIEUN 0xCFE8 # HANGUL SYLLABLE KHIEUKH-U-RIEUL 0xCFF0 # HANGUL SYLLABLE KHIEUKH-U-MIEUM 0xCFF1 # HANGUL SYLLABLE KHIEUKH-U-PIEUP 0xCFF3 # HANGUL SYLLABLE KHIEUKH-U-SIOS 0xCFF5 # HANGUL SYLLABLE KHIEUKH-U-IEUNG 0xCFFC # HANGUL SYLLABLE KHIEUKH-WEO 0xD000 # HANGUL SYLLABLE KHIEUKH-WEO-NIEUN 0xD004 # HANGUL SYLLABLE KHIEUKH-WEO-RIEUL 0xD011 # HANGUL SYLLABLE KHIEUKH-WEO-IEUNG 0xD018 # HANGUL SYLLABLE KHIEUKH-WE 0xD02D # HANGUL SYLLABLE KHIEUKH-WE-IEUNG 0xD034 # HANGUL SYLLABLE KHIEUKH-WI 0xD035 # HANGUL SYLLABLE KHIEUKH-WI-KIYEOK 0xD038 # HANGUL SYLLABLE KHIEUKH-WI-NIEUN 0xD03C # HANGUL SYLLABLE KHIEUKH-WI-RIEUL 0xD044 # HANGUL SYLLABLE KHIEUKH-WI-MIEUM 0xD045 # HANGUL SYLLABLE KHIEUKH-WI-PIEUP 0xD047 # HANGUL SYLLABLE KHIEUKH-WI-SIOS 0xD049 # HANGUL SYLLABLE KHIEUKH-WI-IEUNG 0xD050 # HANGUL SYLLABLE KHIEUKH-YU 0xD054 # HANGUL SYLLABLE KHIEUKH-YU-NIEUN 0xD058 # HANGUL SYLLABLE KHIEUKH-YU-RIEUL 0xD060 # HANGUL SYLLABLE KHIEUKH-YU-MIEUM 0xD06C # HANGUL SYLLABLE KHIEUKH-EU 0xD06D # HANGUL SYLLABLE KHIEUKH-EU-KIYEOK 0xD070 # HANGUL SYLLABLE KHIEUKH-EU-NIEUN 0xD074 # HANGUL SYLLABLE KHIEUKH-EU-RIEUL 0xD07C # HANGUL SYLLABLE KHIEUKH-EU-MIEUM 0xD07D # HANGUL SYLLABLE KHIEUKH-EU-PIEUP 0xD081 # HANGUL SYLLABLE KHIEUKH-EU-IEUNG 0xD0A4 # HANGUL SYLLABLE KHIEUKH-I 0xD0A5 # HANGUL SYLLABLE KHIEUKH-I-KIYEOK 0xD0A8 # HANGUL SYLLABLE KHIEUKH-I-NIEUN 0xD0AC # HANGUL SYLLABLE KHIEUKH-I-RIEUL 0xD0B4 # HANGUL SYLLABLE KHIEUKH-I-MIEUM 0xD0B5 # HANGUL SYLLABLE KHIEUKH-I-PIEUP 0xD0B7 # HANGUL SYLLABLE KHIEUKH-I-SIOS 0xD0B9 # HANGUL SYLLABLE KHIEUKH-I-IEUNG 0xD0C0 # HANGUL SYLLABLE THIEUTH-A 0xD0C1 # HANGUL SYLLABLE THIEUTH-A-KIYEOK 0xD0C4 # HANGUL SYLLABLE THIEUTH-A-NIEUN 0xD0C8 # HANGUL SYLLABLE THIEUTH-A-RIEUL 0xD0C9 # HANGUL SYLLABLE THIEUTH-A-RIEULKIYEOK 0xD0D0 # HANGUL SYLLABLE THIEUTH-A-MIEUM 0xD0D1 # HANGUL SYLLABLE THIEUTH-A-PIEUP 0xD0D3 # HANGUL SYLLABLE THIEUTH-A-SIOS 0xD0D4 # HANGUL SYLLABLE THIEUTH-A-SSANGSIOS 0xD0D5 # HANGUL SYLLABLE THIEUTH-A-IEUNG 0xD0DC # HANGUL SYLLABLE THIEUTH-AE 0xD0DD # HANGUL SYLLABLE THIEUTH-AE-KIYEOK 0xD0E0 # HANGUL SYLLABLE THIEUTH-AE-NIEUN 0xD0E4 # HANGUL SYLLABLE THIEUTH-AE-RIEUL 0xD0EC # HANGUL SYLLABLE THIEUTH-AE-MIEUM 0xD0ED # HANGUL SYLLABLE THIEUTH-AE-PIEUP 0xD0EF # HANGUL SYLLABLE THIEUTH-AE-SIOS 0xD0F0 # HANGUL SYLLABLE THIEUTH-AE-SSANGSIOS 0xD0F1 # HANGUL SYLLABLE THIEUTH-AE-IEUNG 0xD0F8 # HANGUL SYLLABLE THIEUTH-YA 0xD10D # HANGUL SYLLABLE THIEUTH-YA-IEUNG 0xD130 # HANGUL SYLLABLE THIEUTH-EO 0xD131 # HANGUL SYLLABLE THIEUTH-EO-KIYEOK 0xD134 # HANGUL SYLLABLE THIEUTH-EO-NIEUN 0xD138 # HANGUL SYLLABLE THIEUTH-EO-RIEUL 0xD13A # HANGUL SYLLABLE THIEUTH-EO-RIEULMIEUM 0xD140 # HANGUL SYLLABLE THIEUTH-EO-MIEUM 0xD141 # HANGUL SYLLABLE THIEUTH-EO-PIEUP 0xD143 # HANGUL SYLLABLE THIEUTH-EO-SIOS 0xD144 # HANGUL SYLLABLE THIEUTH-EO-SSANGSIOS 0xD145 # HANGUL SYLLABLE THIEUTH-EO-IEUNG 0xD14C # HANGUL SYLLABLE THIEUTH-E 0xD14D # HANGUL SYLLABLE THIEUTH-E-KIYEOK 0xD150 # HANGUL SYLLABLE THIEUTH-E-NIEUN 0xD154 # HANGUL SYLLABLE THIEUTH-E-RIEUL 0xD15C # HANGUL SYLLABLE THIEUTH-E-MIEUM 0xD15D # HANGUL SYLLABLE THIEUTH-E-PIEUP 0xD15F # HANGUL SYLLABLE THIEUTH-E-SIOS 0xD161 # HANGUL SYLLABLE THIEUTH-E-IEUNG 0xD168 # HANGUL SYLLABLE THIEUTH-YEO 0xD16C # HANGUL SYLLABLE THIEUTH-YEO-NIEUN 0xD17C # HANGUL SYLLABLE THIEUTH-YEO-SSANGSIOS 0xD184 # HANGUL SYLLABLE THIEUTH-YE 0xD188 # HANGUL SYLLABLE THIEUTH-YE-NIEUN 0xD1A0 # HANGUL SYLLABLE THIEUTH-O 0xD1A1 # HANGUL SYLLABLE THIEUTH-O-KIYEOK 0xD1A4 # HANGUL SYLLABLE THIEUTH-O-NIEUN 0xD1A8 # HANGUL SYLLABLE THIEUTH-O-RIEUL 0xD1B0 # HANGUL SYLLABLE THIEUTH-O-MIEUM 0xD1B1 # HANGUL SYLLABLE THIEUTH-O-PIEUP 0xD1B3 # HANGUL SYLLABLE THIEUTH-O-SIOS 0xD1B5 # HANGUL SYLLABLE THIEUTH-O-IEUNG 0xD1BA # HANGUL SYLLABLE THIEUTH-O-PHIEUPH 0xD1BC # HANGUL SYLLABLE THIEUTH-WA 0xD1C0 # HANGUL SYLLABLE THIEUTH-WA-NIEUN 0xD1D8 # HANGUL SYLLABLE THIEUTH-WAE 0xD1F4 # HANGUL SYLLABLE THIEUTH-OE 0xD1F8 # HANGUL SYLLABLE THIEUTH-OE-NIEUN 0xD207 # HANGUL SYLLABLE THIEUTH-OE-SIOS 0xD209 # HANGUL SYLLABLE THIEUTH-OE-IEUNG 0xD210 # HANGUL SYLLABLE THIEUTH-YO 0xD22C # HANGUL SYLLABLE THIEUTH-U 0xD22D # HANGUL SYLLABLE THIEUTH-U-KIYEOK 0xD230 # HANGUL SYLLABLE THIEUTH-U-NIEUN 0xD234 # HANGUL SYLLABLE THIEUTH-U-RIEUL 0xD23C # HANGUL SYLLABLE THIEUTH-U-MIEUM 0xD23D # HANGUL SYLLABLE THIEUTH-U-PIEUP 0xD23F # HANGUL SYLLABLE THIEUTH-U-SIOS 0xD241 # HANGUL SYLLABLE THIEUTH-U-IEUNG 0xD248 # HANGUL SYLLABLE THIEUTH-WEO 0xD25C # HANGUL SYLLABLE THIEUTH-WEO-SSANGSIOS 0xD264 # HANGUL SYLLABLE THIEUTH-WE 0xD280 # HANGUL SYLLABLE THIEUTH-WI 0xD281 # HANGUL SYLLABLE THIEUTH-WI-KIYEOK 0xD284 # HANGUL SYLLABLE THIEUTH-WI-NIEUN 0xD288 # HANGUL SYLLABLE THIEUTH-WI-RIEUL 0xD290 # HANGUL SYLLABLE THIEUTH-WI-MIEUM 0xD291 # HANGUL SYLLABLE THIEUTH-WI-PIEUP 0xD295 # HANGUL SYLLABLE THIEUTH-WI-IEUNG 0xD29C # HANGUL SYLLABLE THIEUTH-YU 0xD2A0 # HANGUL SYLLABLE THIEUTH-YU-NIEUN 0xD2A4 # HANGUL SYLLABLE THIEUTH-YU-RIEUL 0xD2AC # HANGUL SYLLABLE THIEUTH-YU-MIEUM 0xD2B1 # HANGUL SYLLABLE THIEUTH-YU-IEUNG 0xD2B8 # HANGUL SYLLABLE THIEUTH-EU 0xD2B9 # HANGUL SYLLABLE THIEUTH-EU-KIYEOK 0xD2BC # HANGUL SYLLABLE THIEUTH-EU-NIEUN 0xD2BF # HANGUL SYLLABLE THIEUTH-EU-TIKEUT 0xD2C0 # HANGUL SYLLABLE THIEUTH-EU-RIEUL 0xD2C2 # HANGUL SYLLABLE THIEUTH-EU-RIEULMIEUM 0xD2C8 # HANGUL SYLLABLE THIEUTH-EU-MIEUM 0xD2C9 # HANGUL SYLLABLE THIEUTH-EU-PIEUP 0xD2CB # HANGUL SYLLABLE THIEUTH-EU-SIOS 0xD2D4 # HANGUL SYLLABLE THIEUTH-YI 0xD2D8 # HANGUL SYLLABLE THIEUTH-YI-NIEUN 0xD2DC # HANGUL SYLLABLE THIEUTH-YI-RIEUL 0xD2E4 # HANGUL SYLLABLE THIEUTH-YI-MIEUM 0xD2E5 # HANGUL SYLLABLE THIEUTH-YI-PIEUP 0xD2F0 # HANGUL SYLLABLE THIEUTH-I 0xD2F1 # HANGUL SYLLABLE THIEUTH-I-KIYEOK 0xD2F4 # HANGUL SYLLABLE THIEUTH-I-NIEUN 0xD2F8 # HANGUL SYLLABLE THIEUTH-I-RIEUL 0xD300 # HANGUL SYLLABLE THIEUTH-I-MIEUM 0xD301 # HANGUL SYLLABLE THIEUTH-I-PIEUP 0xD303 # HANGUL SYLLABLE THIEUTH-I-SIOS 0xD305 # HANGUL SYLLABLE THIEUTH-I-IEUNG 0xD30C # HANGUL SYLLABLE PHIEUPH-A 0xD30D # HANGUL SYLLABLE PHIEUPH-A-KIYEOK 0xD30E # HANGUL SYLLABLE PHIEUPH-A-SSANGKIYEOK 0xD310 # HANGUL SYLLABLE PHIEUPH-A-NIEUN 0xD314 # HANGUL SYLLABLE PHIEUPH-A-RIEUL 0xD316 # HANGUL SYLLABLE PHIEUPH-A-RIEULMIEUM 0xD31C # HANGUL SYLLABLE PHIEUPH-A-MIEUM 0xD31D # HANGUL SYLLABLE PHIEUPH-A-PIEUP 0xD31F # HANGUL SYLLABLE PHIEUPH-A-SIOS 0xD320 # HANGUL SYLLABLE PHIEUPH-A-SSANGSIOS 0xD321 # HANGUL SYLLABLE PHIEUPH-A-IEUNG 0xD325 # HANGUL SYLLABLE PHIEUPH-A-THIEUTH 0xD328 # HANGUL SYLLABLE PHIEUPH-AE 0xD329 # HANGUL SYLLABLE PHIEUPH-AE-KIYEOK 0xD32C # HANGUL SYLLABLE PHIEUPH-AE-NIEUN 0xD330 # HANGUL SYLLABLE PHIEUPH-AE-RIEUL 0xD338 # HANGUL SYLLABLE PHIEUPH-AE-MIEUM 0xD339 # HANGUL SYLLABLE PHIEUPH-AE-PIEUP 0xD33B # HANGUL SYLLABLE PHIEUPH-AE-SIOS 0xD33C # HANGUL SYLLABLE PHIEUPH-AE-SSANGSIOS 0xD33D # HANGUL SYLLABLE PHIEUPH-AE-IEUNG 0xD344 # HANGUL SYLLABLE PHIEUPH-YA 0xD345 # HANGUL SYLLABLE PHIEUPH-YA-KIYEOK 0xD37C # HANGUL SYLLABLE PHIEUPH-EO 0xD37D # HANGUL SYLLABLE PHIEUPH-EO-KIYEOK 0xD380 # HANGUL SYLLABLE PHIEUPH-EO-NIEUN 0xD384 # HANGUL SYLLABLE PHIEUPH-EO-RIEUL 0xD38C # HANGUL SYLLABLE PHIEUPH-EO-MIEUM 0xD38D # HANGUL SYLLABLE PHIEUPH-EO-PIEUP 0xD38F # HANGUL SYLLABLE PHIEUPH-EO-SIOS 0xD390 # HANGUL SYLLABLE PHIEUPH-EO-SSANGSIOS 0xD391 # HANGUL SYLLABLE PHIEUPH-EO-IEUNG 0xD398 # HANGUL SYLLABLE PHIEUPH-E 0xD399 # HANGUL SYLLABLE PHIEUPH-E-KIYEOK 0xD39C # HANGUL SYLLABLE PHIEUPH-E-NIEUN 0xD3A0 # HANGUL SYLLABLE PHIEUPH-E-RIEUL 0xD3A8 # HANGUL SYLLABLE PHIEUPH-E-MIEUM 0xD3A9 # HANGUL SYLLABLE PHIEUPH-E-PIEUP 0xD3AB # HANGUL SYLLABLE PHIEUPH-E-SIOS 0xD3AD # HANGUL SYLLABLE PHIEUPH-E-IEUNG 0xD3B4 # HANGUL SYLLABLE PHIEUPH-YEO 0xD3B8 # HANGUL SYLLABLE PHIEUPH-YEO-NIEUN 0xD3BC # HANGUL SYLLABLE PHIEUPH-YEO-RIEUL 0xD3C4 # HANGUL SYLLABLE PHIEUPH-YEO-MIEUM 0xD3C5 # HANGUL SYLLABLE PHIEUPH-YEO-PIEUP 0xD3C8 # HANGUL SYLLABLE PHIEUPH-YEO-SSANGSIOS 0xD3C9 # HANGUL SYLLABLE PHIEUPH-YEO-IEUNG 0xD3D0 # HANGUL SYLLABLE PHIEUPH-YE 0xD3D8 # HANGUL SYLLABLE PHIEUPH-YE-RIEUL 0xD3E1 # HANGUL SYLLABLE PHIEUPH-YE-PIEUP 0xD3E3 # HANGUL SYLLABLE PHIEUPH-YE-SIOS 0xD3EC # HANGUL SYLLABLE PHIEUPH-O 0xD3ED # HANGUL SYLLABLE PHIEUPH-O-KIYEOK 0xD3F0 # HANGUL SYLLABLE PHIEUPH-O-NIEUN 0xD3F4 # HANGUL SYLLABLE PHIEUPH-O-RIEUL 0xD3FC # HANGUL SYLLABLE PHIEUPH-O-MIEUM 0xD3FD # HANGUL SYLLABLE PHIEUPH-O-PIEUP 0xD3FF # HANGUL SYLLABLE PHIEUPH-O-SIOS 0xD401 # HANGUL SYLLABLE PHIEUPH-O-IEUNG 0xD408 # HANGUL SYLLABLE PHIEUPH-WA 0xD41D # HANGUL SYLLABLE PHIEUPH-WA-IEUNG 0xD440 # HANGUL SYLLABLE PHIEUPH-OE 0xD444 # HANGUL SYLLABLE PHIEUPH-OE-NIEUN 0xD45C # HANGUL SYLLABLE PHIEUPH-YO 0xD460 # HANGUL SYLLABLE PHIEUPH-YO-NIEUN 0xD464 # HANGUL SYLLABLE PHIEUPH-YO-RIEUL 0xD46D # HANGUL SYLLABLE PHIEUPH-YO-PIEUP 0xD46F # HANGUL SYLLABLE PHIEUPH-YO-SIOS 0xD478 # HANGUL SYLLABLE PHIEUPH-U 0xD479 # HANGUL SYLLABLE PHIEUPH-U-KIYEOK 0xD47C # HANGUL SYLLABLE PHIEUPH-U-NIEUN 0xD47F # HANGUL SYLLABLE PHIEUPH-U-TIKEUT 0xD480 # HANGUL SYLLABLE PHIEUPH-U-RIEUL 0xD482 # HANGUL SYLLABLE PHIEUPH-U-RIEULMIEUM 0xD488 # HANGUL SYLLABLE PHIEUPH-U-MIEUM 0xD489 # HANGUL SYLLABLE PHIEUPH-U-PIEUP 0xD48B # HANGUL SYLLABLE PHIEUPH-U-SIOS 0xD48D # HANGUL SYLLABLE PHIEUPH-U-IEUNG 0xD494 # HANGUL SYLLABLE PHIEUPH-WEO 0xD4A9 # HANGUL SYLLABLE PHIEUPH-WEO-IEUNG 0xD4CC # HANGUL SYLLABLE PHIEUPH-WI 0xD4D0 # HANGUL SYLLABLE PHIEUPH-WI-NIEUN 0xD4D4 # HANGUL SYLLABLE PHIEUPH-WI-RIEUL 0xD4DC # HANGUL SYLLABLE PHIEUPH-WI-MIEUM 0xD4DF # HANGUL SYLLABLE PHIEUPH-WI-SIOS 0xD4E8 # HANGUL SYLLABLE PHIEUPH-YU 0xD4EC # HANGUL SYLLABLE PHIEUPH-YU-NIEUN 0xD4F0 # HANGUL SYLLABLE PHIEUPH-YU-RIEUL 0xD4F8 # HANGUL SYLLABLE PHIEUPH-YU-MIEUM 0xD4FB # HANGUL SYLLABLE PHIEUPH-YU-SIOS 0xD4FD # HANGUL SYLLABLE PHIEUPH-YU-IEUNG 0xD504 # HANGUL SYLLABLE PHIEUPH-EU 0xD508 # HANGUL SYLLABLE PHIEUPH-EU-NIEUN 0xD50C # HANGUL SYLLABLE PHIEUPH-EU-RIEUL 0xD514 # HANGUL SYLLABLE PHIEUPH-EU-MIEUM 0xD515 # HANGUL SYLLABLE PHIEUPH-EU-PIEUP 0xD517 # HANGUL SYLLABLE PHIEUPH-EU-SIOS 0xD53C # HANGUL SYLLABLE PHIEUPH-I 0xD53D # HANGUL SYLLABLE PHIEUPH-I-KIYEOK 0xD540 # HANGUL SYLLABLE PHIEUPH-I-NIEUN 0xD544 # HANGUL SYLLABLE PHIEUPH-I-RIEUL 0xD54C # HANGUL SYLLABLE PHIEUPH-I-MIEUM 0xD54D # HANGUL SYLLABLE PHIEUPH-I-PIEUP 0xD54F # HANGUL SYLLABLE PHIEUPH-I-SIOS 0xD551 # HANGUL SYLLABLE PHIEUPH-I-IEUNG 0xD558 # HANGUL SYLLABLE HIEUH-A 0xD559 # HANGUL SYLLABLE HIEUH-A-KIYEOK 0xD55C # HANGUL SYLLABLE HIEUH-A-NIEUN 0xD560 # HANGUL SYLLABLE HIEUH-A-RIEUL 0xD565 # HANGUL SYLLABLE HIEUH-A-RIEULTHIEUTH 0xD568 # HANGUL SYLLABLE HIEUH-A-MIEUM 0xD569 # HANGUL SYLLABLE HIEUH-A-PIEUP 0xD56B # HANGUL SYLLABLE HIEUH-A-SIOS 0xD56D # HANGUL SYLLABLE HIEUH-A-IEUNG 0xD574 # HANGUL SYLLABLE HIEUH-AE 0xD575 # HANGUL SYLLABLE HIEUH-AE-KIYEOK 0xD578 # HANGUL SYLLABLE HIEUH-AE-NIEUN 0xD57C # HANGUL SYLLABLE HIEUH-AE-RIEUL 0xD584 # HANGUL SYLLABLE HIEUH-AE-MIEUM 0xD585 # HANGUL SYLLABLE HIEUH-AE-PIEUP 0xD587 # HANGUL SYLLABLE HIEUH-AE-SIOS 0xD588 # HANGUL SYLLABLE HIEUH-AE-SSANGSIOS 0xD589 # HANGUL SYLLABLE HIEUH-AE-IEUNG 0xD590 # HANGUL SYLLABLE HIEUH-YA 0xD5A5 # HANGUL SYLLABLE HIEUH-YA-IEUNG 0xD5C8 # HANGUL SYLLABLE HIEUH-EO 0xD5C9 # HANGUL SYLLABLE HIEUH-EO-KIYEOK 0xD5CC # HANGUL SYLLABLE HIEUH-EO-NIEUN 0xD5D0 # HANGUL SYLLABLE HIEUH-EO-RIEUL 0xD5D2 # HANGUL SYLLABLE HIEUH-EO-RIEULMIEUM 0xD5D8 # HANGUL SYLLABLE HIEUH-EO-MIEUM 0xD5D9 # HANGUL SYLLABLE HIEUH-EO-PIEUP 0xD5DB # HANGUL SYLLABLE HIEUH-EO-SIOS 0xD5DD # HANGUL SYLLABLE HIEUH-EO-IEUNG 0xD5E4 # HANGUL SYLLABLE HIEUH-E 0xD5E5 # HANGUL SYLLABLE HIEUH-E-KIYEOK 0xD5E8 # HANGUL SYLLABLE HIEUH-E-NIEUN 0xD5EC # HANGUL SYLLABLE HIEUH-E-RIEUL 0xD5F4 # HANGUL SYLLABLE HIEUH-E-MIEUM 0xD5F5 # HANGUL SYLLABLE HIEUH-E-PIEUP 0xD5F7 # HANGUL SYLLABLE HIEUH-E-SIOS 0xD5F9 # HANGUL SYLLABLE HIEUH-E-IEUNG 0xD600 # HANGUL SYLLABLE HIEUH-YEO 0xD601 # HANGUL SYLLABLE HIEUH-YEO-KIYEOK 0xD604 # HANGUL SYLLABLE HIEUH-YEO-NIEUN 0xD608 # HANGUL SYLLABLE HIEUH-YEO-RIEUL 0xD610 # HANGUL SYLLABLE HIEUH-YEO-MIEUM 0xD611 # HANGUL SYLLABLE HIEUH-YEO-PIEUP 0xD613 # HANGUL SYLLABLE HIEUH-YEO-SIOS 0xD614 # HANGUL SYLLABLE HIEUH-YEO-SSANGSIOS 0xD615 # HANGUL SYLLABLE HIEUH-YEO-IEUNG 0xD61C # HANGUL SYLLABLE HIEUH-YE 0xD620 # HANGUL SYLLABLE HIEUH-YE-NIEUN 0xD624 # HANGUL SYLLABLE HIEUH-YE-RIEUL 0xD62D # HANGUL SYLLABLE HIEUH-YE-PIEUP 0xD638 # HANGUL SYLLABLE HIEUH-O 0xD639 # HANGUL SYLLABLE HIEUH-O-KIYEOK 0xD63C # HANGUL SYLLABLE HIEUH-O-NIEUN 0xD640 # HANGUL SYLLABLE HIEUH-O-RIEUL 0xD645 # HANGUL SYLLABLE HIEUH-O-RIEULTHIEUTH 0xD648 # HANGUL SYLLABLE HIEUH-O-MIEUM 0xD649 # HANGUL SYLLABLE HIEUH-O-PIEUP 0xD64B # HANGUL SYLLABLE HIEUH-O-SIOS 0xD64D # HANGUL SYLLABLE HIEUH-O-IEUNG 0xD651 # HANGUL SYLLABLE HIEUH-O-THIEUTH 0xD654 # HANGUL SYLLABLE HIEUH-WA 0xD655 # HANGUL SYLLABLE HIEUH-WA-KIYEOK 0xD658 # HANGUL SYLLABLE HIEUH-WA-NIEUN 0xD65C # HANGUL SYLLABLE HIEUH-WA-RIEUL 0xD667 # HANGUL SYLLABLE HIEUH-WA-SIOS 0xD669 # HANGUL SYLLABLE HIEUH-WA-IEUNG 0xD670 # HANGUL SYLLABLE HIEUH-WAE 0xD671 # HANGUL SYLLABLE HIEUH-WAE-KIYEOK 0xD674 # HANGUL SYLLABLE HIEUH-WAE-NIEUN 0xD683 # HANGUL SYLLABLE HIEUH-WAE-SIOS 0xD685 # HANGUL SYLLABLE HIEUH-WAE-IEUNG 0xD68C # HANGUL SYLLABLE HIEUH-OE 0xD68D # HANGUL SYLLABLE HIEUH-OE-KIYEOK 0xD690 # HANGUL SYLLABLE HIEUH-OE-NIEUN 0xD694 # HANGUL SYLLABLE HIEUH-OE-RIEUL 0xD69D # HANGUL SYLLABLE HIEUH-OE-PIEUP 0xD69F # HANGUL SYLLABLE HIEUH-OE-SIOS 0xD6A1 # HANGUL SYLLABLE HIEUH-OE-IEUNG 0xD6A8 # HANGUL SYLLABLE HIEUH-YO 0xD6AC # HANGUL SYLLABLE HIEUH-YO-NIEUN 0xD6B0 # HANGUL SYLLABLE HIEUH-YO-RIEUL 0xD6B9 # HANGUL SYLLABLE HIEUH-YO-PIEUP 0xD6BB # HANGUL SYLLABLE HIEUH-YO-SIOS 0xD6C4 # HANGUL SYLLABLE HIEUH-U 0xD6C5 # HANGUL SYLLABLE HIEUH-U-KIYEOK 0xD6C8 # HANGUL SYLLABLE HIEUH-U-NIEUN 0xD6CC # HANGUL SYLLABLE HIEUH-U-RIEUL 0xD6D1 # HANGUL SYLLABLE HIEUH-U-RIEULTHIEUTH 0xD6D4 # HANGUL SYLLABLE HIEUH-U-MIEUM 0xD6D7 # HANGUL SYLLABLE HIEUH-U-SIOS 0xD6D9 # HANGUL SYLLABLE HIEUH-U-IEUNG 0xD6E0 # HANGUL SYLLABLE HIEUH-WEO 0xD6E4 # HANGUL SYLLABLE HIEUH-WEO-NIEUN 0xD6E8 # HANGUL SYLLABLE HIEUH-WEO-RIEUL 0xD6F0 # HANGUL SYLLABLE HIEUH-WEO-MIEUM 0xD6F5 # HANGUL SYLLABLE HIEUH-WEO-IEUNG 0xD6FC # HANGUL SYLLABLE HIEUH-WE 0xD6FD # HANGUL SYLLABLE HIEUH-WE-KIYEOK 0xD700 # HANGUL SYLLABLE HIEUH-WE-NIEUN 0xD704 # HANGUL SYLLABLE HIEUH-WE-RIEUL 0xD711 # HANGUL SYLLABLE HIEUH-WE-IEUNG 0xD718 # HANGUL SYLLABLE HIEUH-WI 0xD719 # HANGUL SYLLABLE HIEUH-WI-KIYEOK 0xD71C # HANGUL SYLLABLE HIEUH-WI-NIEUN 0xD720 # HANGUL SYLLABLE HIEUH-WI-RIEUL 0xD728 # HANGUL SYLLABLE HIEUH-WI-MIEUM 0xD729 # HANGUL SYLLABLE HIEUH-WI-PIEUP 0xD72B # HANGUL SYLLABLE HIEUH-WI-SIOS 0xD72D # HANGUL SYLLABLE HIEUH-WI-IEUNG 0xD734 # HANGUL SYLLABLE HIEUH-YU 0xD735 # HANGUL SYLLABLE HIEUH-YU-KIYEOK 0xD738 # HANGUL SYLLABLE HIEUH-YU-NIEUN 0xD73C # HANGUL SYLLABLE HIEUH-YU-RIEUL 0xD744 # HANGUL SYLLABLE HIEUH-YU-MIEUM 0xD747 # HANGUL SYLLABLE HIEUH-YU-SIOS 0xD749 # HANGUL SYLLABLE HIEUH-YU-IEUNG 0xD750 # HANGUL SYLLABLE HIEUH-EU 0xD751 # HANGUL SYLLABLE HIEUH-EU-KIYEOK 0xD754 # HANGUL SYLLABLE HIEUH-EU-NIEUN 0xD756 # HANGUL SYLLABLE HIEUH-EU-NIEUNHIEUH 0xD757 # HANGUL SYLLABLE HIEUH-EU-TIKEUT 0xD758 # HANGUL SYLLABLE HIEUH-EU-RIEUL 0xD759 # HANGUL SYLLABLE HIEUH-EU-RIEULKIYEOK 0xD760 # HANGUL SYLLABLE HIEUH-EU-MIEUM 0xD761 # HANGUL SYLLABLE HIEUH-EU-PIEUP 0xD763 # HANGUL SYLLABLE HIEUH-EU-SIOS 0xD765 # HANGUL SYLLABLE HIEUH-EU-IEUNG 0xD769 # HANGUL SYLLABLE HIEUH-EU-THIEUTH 0xD76C # HANGUL SYLLABLE HIEUH-YI 0xD770 # HANGUL SYLLABLE HIEUH-YI-NIEUN 0xD774 # HANGUL SYLLABLE HIEUH-YI-RIEUL 0xD77C # HANGUL SYLLABLE HIEUH-YI-MIEUM 0xD77D # HANGUL SYLLABLE HIEUH-YI-PIEUP 0xD781 # HANGUL SYLLABLE HIEUH-YI-IEUNG 0xD788 # HANGUL SYLLABLE HIEUH-I 0xD789 # HANGUL SYLLABLE HIEUH-I-KIYEOK 0xD78C # HANGUL SYLLABLE HIEUH-I-NIEUN 0xD790 # HANGUL SYLLABLE HIEUH-I-RIEUL 0xD798 # HANGUL SYLLABLE HIEUH-I-MIEUM 0xD799 # HANGUL SYLLABLE HIEUH-I-PIEUP 0xD79B # HANGUL SYLLABLE HIEUH-I-SIOS 0xD79D # HANGUL SYLLABLE HIEUH-I-IEUNG fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/kok.orth000066400000000000000000000023021503113465200243600ustar00rootroot00000000000000# # fontconfig/fc-lang/kok.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Kokani (Devanagari script) (KOK) include hi.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/kr.orth000066400000000000000000000034141503113465200242150ustar00rootroot00000000000000# # fontconfig/fc-lang/kr.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Kanuri (kr) # # Sources: # * http://www.panafril10n.org/wikidoc/pmwiki.php/PanAfrLoc/Kanuri # * http://www.sciences.univ-nantes.fr/info/perso/permanents/enguehard/recherche/Afrique/alphabet_kanuri.htm # * http://sumale.vjf.cnrs.fr/phono/AfficheTableauOrtho2N.php?choixLangue=kanuri # * http://www.rosettaproject.org/archive/kby/ortho-1 # * http://std.dkuug.dk/jtc1/sc2/wg2/docs/n2906.pdf # # This is for Kanuri as written in the Latin script. An Arabic script # orthography is also used (called Ajami), but I could not find much # information about it. # # Q, V, and X are not used. # 0041-005A 0061-007A 018E 01DD 024C-024D fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ks.orth000066400000000000000000000023311503113465200242130ustar00rootroot00000000000000# # fontconfig/fc-lang/ks.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Kashmiri (ks) # include ur.orth 0620 0657 065f 0672 0673 06c4 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ku_am.orth000066400000000000000000000031761503113465200247020ustar00rootroot00000000000000# # fontconfig/fc-lang/ku_am.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Coverage taken from TITUS (Thesaurus Indogermanischer Text und # Sprachmaterialien) # # http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm # # Kurdish in Armenia (ku-AM) # 0410 0411 0412 0413 0414 0415 0416 0417 0418 0419 041a 041b 041c 041d 041e 041f 0420 0421 0422 0423 0424 0425 0427 0428 0429 042a 042d 0430 0431 0432 0433 0434 0435 0436 0437 0438 0439 043a 043b 043c 043d 043e 043f 0440 0441 0442 0443 0444 0445 0447 0448 0449 044a 044d 04ba 04bb 04d8 04d9 04e6 04e7 051a-051d fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ku_iq.orth000066400000000000000000000024211503113465200247060ustar00rootroot00000000000000# # fontconfig/fc-lang/ku_iq.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Kurdish in Iraq (ku-IQ) # # Assuming Iraqi Kurdish uses the same orthography as Iranian Kurdish include ku_ir.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ku_ir.orth000066400000000000000000000030321503113465200247060ustar00rootroot00000000000000# # fontconfig/fc-lang/ku_ir.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Kurdish in Iran (KU-IR) # # Data from Roozbeh Pournader # # Since the Unicode Presentation Forms don't contain some of the Kurdish # letters, we are going with the general forms instead of the Presentation # forms, unlike Arabic, Persian, or Urdu. # 0626-0628 062a 062c-062f 0631-0634 0639-063a 0641-0642 0644-0648 067e 0686 0692 0698 06a4 06a9 06af 06b5 06c6 06cc 06ce fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ku_tr.orth000066400000000000000000000026431503113465200247300ustar00rootroot00000000000000# # fontconfig/fc-lang/ku_tr.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Kurdish in Turkey (ku-TR) # # This is based on the commonly used "Hawar" alphabet # # Sources: # * http://www.omniglot.com/writing/kurdish.htm # * http://www.kurdishacademy.org/?q=node/145 # 0041-005A 0061-007A 00C7 00CA 00CE 00DB 00E7 00EA 00EE 00FB 015E-015F fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/kum.orth000066400000000000000000000032011503113465200243670ustar00rootroot00000000000000# # fontconfig/fc-lang/kum.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Coverage taken from TITUS (Thesaurus Indogermanischer Text und # Sprachmaterialien) # # http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm # # Kumyk (KUM) # 0401 0410 0411 0412 0413 0414 0415 0416 0417 0418 0419 041a 041b 041c 041d 041e 041f 0420 0421 0422 0423 0424 0425 0426 0427 0428 0429 042a 042b 042c 042d 042e 042f 0430 0431 0432 0433 0434 0435 0436 0437 0438 0439 043a 043b 043c 043d 043e 043f 0440 0441 0442 0443 0444 0445 0446 0447 0448 0449 044a 044b 044c 044d 044e 044f 0451 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/kv.orth000066400000000000000000000033531503113465200242230ustar00rootroot00000000000000# # fontconfig/fc-lang/kv.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Coverage taken from TITUS (Thesaurus Indogermanischer Text und # Sprachmaterialien) # # http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm # # Komi (Komi-Permyak/Komi-Siryan) (KV) # # I've taken Komi-Permyak as it contains two extra codepoints 0401 0406 0410 0411 0412 0413 0414 0415 0416 0417 0418 0419 041a 041b 041c 041d 041e 041f 0420 0421 0422 0423 0424 0425 0426 0427 0428 0429 042a 042b 042c 042d 042e 042f 0430 0431 0432 0433 0434 0435 0436 0437 0438 0439 043a 043b 043c 043d 043e 043f 0440 0441 0442 0443 0444 0445 0446 0447 0448 0449 044a 044b 044c 044d 044e 044f 0451 0456 04e6 04e7 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/kw.orth000066400000000000000000000024621503113465200242240ustar00rootroot00000000000000# # fontconfig/fc-lang/kw.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Cornish (KW) # # Orthography from http://www.evertype.com/alphabets/cornish.pdf # 0041-005a 0061-007a 0100-0101 0112-0113 012a-012b 014c-014d 016a-016b 0232-0233 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/kwm.orth000066400000000000000000000024401503113465200243750ustar00rootroot00000000000000# # fontconfig/fc-lang/kwm.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Kwambi (kwm) # # Considered a sister language/dialect to Kuanyama (kj) and Ndonga (ng). # We'll include Kuanyama. # include kj.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ky.orth000066400000000000000000000034221503113465200242230ustar00rootroot00000000000000# # fontconfig/fc-lang/ky.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Coverage taken from TITUS (Thesaurus Indogermanischer Text und # Sprachmaterialien) # # http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm # # Kirgiz (KY) # 0401 0410 0411 0412 0413 0414 0415 0416 0417 0418 0419 041a 041b 041c 041d 041e 041f 0420 0421 0422 0423 0424 0425 0426 0427 0428 0429 042a 042b 042c 042d 042e 042f 0430 0431 0432 0433 0434 0435 0436 0437 0438 0439 043a 043b 043c 043d 043e 043f 0440 0441 0442 0443 0444 0445 0446 0447 0448 0449 044a 044b 044c 044d 044e 044f 0451 #0472 # CYRILLIC CAPITAL LETTER FITA (Historic cyrillic letter) #0473 # CYRILLIC SMALL LETTER FITA (Historic cyrillic letter) 04a2 04a3 04ae 04af fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/la.orth000066400000000000000000000023411503113465200241730ustar00rootroot00000000000000# # fontconfig/fc-lang/la.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Latin (LA) 0041-005a 0061-007a 0100-0101 0112-0113 012a-012d 014c-014f 016a-016d fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/lah.orth000066400000000000000000000032021503113465200243400ustar00rootroot00000000000000# # fontconfig/fc-lang/lah.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Lahnda (lah) # # This is basically Western Panjabi/Punjabi, or Panjabi for Pakistan. It is # written in the Arabic script, also known as Shahmukhi. According to # ISO 639-3, the 'pa/pan' language code does not include Pakistani Panjabi, # but 'lah' does: # http://www.sil.org/iso639-3/documentation.asp?id=lah # http://www.sil.org/iso639-3/documentation.asp?id=pan # # The letter list appears to be identical to Urdu. More research may be # needed for rare letters. include ur.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/lb.orth000066400000000000000000000031731503113465200242000ustar00rootroot00000000000000# # fontconfig/fc-lang/lb.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Luxembourgish (Letzeburgesch) (LB) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a # # Required characters # 00c4 00e4 00c9 00e9 00cb 00eb 00d6 00f6 00dc 00fc # # Important characters # 00c2 00e2 00c8 00e8 00ca 00ea 00ce 00ee #e006 # LATIN CAPITAL LETTER M WITH CIRCUMFLEX (no UCS) #e007 # LATIN SMALL LETTER M WITH CIRCUMFLEX (no UCS) #e008 # LATIN CAPITAL LETTER N WITH CIRCUMFLEX (no UCS) #e009 # LATIN SMALL LETTER N WITH CIRCUMFLEX (no UCS) 00d4 00f4 00db 00fb 00df fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/lez.orth000066400000000000000000000032231503113465200243710ustar00rootroot00000000000000# # fontconfig/fc-lang/lez.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Coverage taken from TITUS (Thesaurus Indogermanischer Text und # Sprachmaterialien) # # http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm # # Lezghian (Lezgian) (LEZ) # 0401 0406 0410 0411 0412 0413 0414 0415 0416 0417 0418 0419 041a 041b 041c 041d 041e 041f 0420 0421 0422 0423 0424 0425 0426 0427 0428 0429 042a 042b 042c 042d 042e 042f 0430 0431 0432 0433 0434 0435 0436 0437 0438 0439 043a 043b 043c 043d 043e 043f 0440 0441 0442 0443 0444 0445 0446 0447 0448 0449 044a 044b 044c 044d 044e 044f 0451 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/lg.orth000066400000000000000000000025721503113465200242070ustar00rootroot00000000000000# # fontconfig/fc-lang/lg.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Ganda (lg) # # Sources: # * http://www.buganda.com/luganda.htm # * http://www.omniglot.com/writing/ganda.php # * http://sumale.vjf.cnrs.fr/phono/AfficheTableauOrtho2N.php?choixLangue=luganda # 0041-005A 0061-007A 014A-014B fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/li.orth000066400000000000000000000027441503113465200242120ustar00rootroot00000000000000# # fontconfig/fc-lang/li.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Limburgan/Limburger/Limburgish (li) # # Sources: # * http://www.limburgsedialecten.nl/pdf/Spellingbook-def.pdf # * http://li.wikipedia.org/wiki/Wikipedia:Sjpellingssjpiekpagina # # There's also an apostrophe-like character that needs more research. U+02BB? # 0041-005A 0061-007A 00C4 00C8 00CB 00D3 00D6 00E4 00E8 00EB 00F3 00F6 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/lij.orth000066400000000000000000000032201503113465200243520ustar00rootroot00000000000000# # fontconfig/fc-lang/lij.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Ligurian (lij) # # See: # https://en.wikipedia.org/wiki/Lower_Sorbian_language # https://en.wikipedia.org/wiki/Sorbian_alphabet' # https://github.com/unicode-org/cldr/blob/main/common/main/lij.xml # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/lij_IT include it.orth 00e2 # â LATIN SMALL LETTER A WITH CIRCUMFLEX 00e4 # ä LATIN SMALL LETTER A WITH DIAERESIS 00e6 # æ LATIN SMALL LETTER AE 00e7 # ç LATIN SMALL LETTER C WITH CEDILLA 00f1 # ñ LATIN SMALL LETTER N WITH TILDE fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ln.orth000066400000000000000000000026771503113465200242240ustar00rootroot00000000000000# # fontconfig/fc-lang/ln.orth # # Copyright © 2006 Danis Jacquerye # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Lingala (LN) 0041-005a # r used in borrowed words, x and q unused. 0061-007a 00c1-00c2 # tonal orthography 00c9-00ca 00cd-00ce 00d3-00d4 00da-00db 00e1-00e2 00e9-00ea 00ed-00ee 00f3-00f4 00fa-00fb 011a-011b 0186 0190 0254 025b 0301-0302 # combining diacritics for accented 0186, 0190, 0254, 025b 030c fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/lo.orth000066400000000000000000000025601503113465200242140ustar00rootroot00000000000000# # fontconfig/fc-lang/lo.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Lao (lo) # # Taken from the Unicode coverage of this language # 0e81-0e82 0e84 0e87-0e88 0e8a 0e8d 0e94-0e97 0e99-0e9f 0ea1-0ea3 0ea5 0ea7 0eaa-0eab 0ead-0eb9 0ebb-0ebd 0ec0-0ec4 0ec6 0ec8-0ecd #0ed0-0ed9 # Digits 0edc-0edd fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/lt.orth000066400000000000000000000026051503113465200242210ustar00rootroot00000000000000# # fontconfig/fc-lang/lt.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Lithuanian (LT) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a 0104-0105 010c-010d #0106-0109 0116-0117 0118-0119 012e-012f 0160-0161 016a-016b 0172-0173 017d-017e #2019-201a # single quotes #201d-201e # double quotes fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/lv.orth000066400000000000000000000025511503113465200242230ustar00rootroot00000000000000# # fontconfig/fc-lang/lv.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Latvian (LV) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a 0100-0101 010c-010d 0112-0113 0122-0123 012a-012b 0136-0137 013b-013c 0145-0146 014c-014d 0156-0157 0160-0161 016a-016b 017d-017e fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/lzh.orth000066400000000000000000000025111503113465200243730ustar00rootroot00000000000000# # fontconfig/fc-lang/lzh.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Literary Chinese (lzh) # # See: # https://en.wikipedia.org/wiki/Classical_Chinese # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/lzh_TW include zh_tw.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/mag.orth000066400000000000000000000025161503113465200243470ustar00rootroot00000000000000# # fontconfig/fc-lang/mag.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Magahi (Devanagari script) (mag) # # See: # https://en.wikipedia.org/wiki/Magahi_language # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/mag_IN include hi.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/mai.orth000066400000000000000000000023041503113465200243440ustar00rootroot00000000000000# # fontconfig/fc-lang/mai.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Maithili (Devanagari script) (MAI) include hi.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/meson.build000066400000000000000000000100441503113465200250420ustar00rootroot00000000000000# Do not reorder, magic orth_files = [ 'aa.orth', 'ab.orth', 'af.orth', 'am.orth', 'ar.orth', 'as.orth', 'ast.orth', 'av.orth', 'ay.orth', 'az_az.orth', 'az_ir.orth', 'ba.orth', 'bm.orth', 'be.orth', 'bg.orth', 'bh.orth', 'bho.orth', 'bi.orth', 'bin.orth', 'bn.orth', 'bo.orth', 'br.orth', 'bs.orth', 'bua.orth', 'ca.orth', 'ce.orth', 'ch.orth', 'chm.orth', 'chr.orth', 'co.orth', 'cs.orth', 'cu.orth', 'cv.orth', 'cy.orth', 'da.orth', 'de.orth', 'dz.orth', 'el.orth', 'en.orth', 'eo.orth', 'es.orth', 'et.orth', 'eu.orth', 'fa.orth', 'fi.orth', 'fj.orth', 'fo.orth', 'fr.orth', 'ff.orth', 'fur.orth', 'fy.orth', 'ga.orth', 'gd.orth', 'gez.orth', 'gl.orth', 'gn.orth', 'gu.orth', 'gv.orth', 'ha.orth', 'haw.orth', 'he.orth', 'hi.orth', 'ho.orth', 'hr.orth', 'hu.orth', 'hy.orth', 'ia.orth', 'ig.orth', 'id.orth', 'ie.orth', 'ik.orth', 'io.orth', 'is.orth', 'it.orth', 'iu.orth', 'ja.orth', 'ka.orth', 'kaa.orth', 'ki.orth', 'kk.orth', 'kl.orth', 'km.orth', 'kn.orth', 'ko.orth', 'kok.orth', 'ks.orth', 'ku_am.orth', 'ku_ir.orth', 'kum.orth', 'kv.orth', 'kw.orth', 'ky.orth', 'la.orth', 'lb.orth', 'lez.orth', 'ln.orth', 'lo.orth', 'lt.orth', 'lv.orth', 'mg.orth', 'mh.orth', 'mi.orth', 'mk.orth', 'ml.orth', 'mn_cn.orth', 'mo.orth', 'mr.orth', 'mt.orth', 'my.orth', 'nb.orth', 'nds.orth', 'ne.orth', 'nl.orth', 'nn.orth', 'no.orth', 'nr.orth', 'nso.orth', 'ny.orth', 'oc.orth', 'om.orth', 'or.orth', 'os.orth', 'pa.orth', 'pl.orth', 'ps_af.orth', 'ps_pk.orth', 'pt.orth', 'rm.orth', 'ro.orth', 'ru.orth', 'sa.orth', 'sah.orth', 'sco.orth', 'se.orth', 'sel.orth', 'sh.orth', 'shs.orth', 'si.orth', 'sk.orth', 'sl.orth', 'sm.orth', 'sma.orth', 'smj.orth', 'smn.orth', 'sms.orth', 'so.orth', 'sq.orth', 'sr.orth', 'ss.orth', 'st.orth', 'sv.orth', 'sw.orth', 'syr.orth', 'ta.orth', 'te.orth', 'tg.orth', 'th.orth', 'ti_er.orth', 'ti_et.orth', 'tig.orth', 'tk.orth', 'tl.orth', 'tn.orth', 'to.orth', 'tr.orth', 'ts.orth', 'tt.orth', 'tw.orth', 'tyv.orth', 'ug.orth', 'uk.orth', 'ur.orth', 'uz.orth', 've.orth', 'vi.orth', 'vo.orth', 'vot.orth', 'wa.orth', 'wen.orth', 'wo.orth', 'xh.orth', 'yap.orth', 'yi.orth', 'yo.orth', 'zh_cn.orth', 'zh_hk.orth', 'zh_mo.orth', 'zh_sg.orth', 'zh_tw.orth', 'zu.orth', 'ak.orth', 'an.orth', 'ber_dz.orth', 'ber_ma.orth', 'byn.orth', 'crh.orth', 'csb.orth', 'dv.orth', 'ee.orth', 'fat.orth', 'fil.orth', 'hne.orth', 'hsb.orth', 'ht.orth', 'hz.orth', 'ii.orth', 'jv.orth', 'kab.orth', 'kj.orth', 'kr.orth', 'ku_iq.orth', 'ku_tr.orth', 'kwm.orth', 'lg.orth', 'li.orth', 'mai.orth', 'mn_mn.orth', 'ms.orth', 'na.orth', 'ng.orth', 'nv.orth', 'ota.orth', 'pa_pk.orth', 'pap_an.orth', 'pap_aw.orth', 'qu.orth', 'quz.orth', 'rn.orth', 'rw.orth', 'sc.orth', 'sd.orth', 'sg.orth', 'sid.orth', 'sn.orth', 'su.orth', 'ty.orth', 'wal.orth', 'za.orth', 'lah.orth', 'nqo.orth', 'brx.orth', 'sat.orth', 'doi.orth', 'mni.orth', 'und_zsye.orth', 'und_zmth.orth', 'anp.orth', 'bhb.orth', 'hif.orth', 'mag.orth', 'raj.orth', 'the.orth', 'agr.orth', 'ayc.orth', 'bem.orth', 'ckb.orth', 'cmn.orth', 'dsb.orth', 'hak.orth', 'lij.orth', 'lzh.orth', 'mfe.orth', 'mhr.orth', 'miq.orth', 'mjw.orth', 'mnw.orth', 'nan.orth', 'nhn.orth', 'niu.orth', 'rif.orth', 'sgs.orth', 'shn.orth', 'szl.orth', 'tcy.orth', 'tpi.orth', 'unm.orth', 'wae.orth', 'yue.orth', 'yuw.orth', 'got.orth', 'cop.orth', ] fclang_h = custom_target('fclang.h', output: ['fclang.h'], input: orth_files, command: [find_program('fc-lang.py'), orth_files, '--template', files('fclang.tmpl.h')[0], '--output', '@OUTPUT@', '--directory', meson.current_source_dir()], build_by_default: true, ) fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/mfe.orth000066400000000000000000000026271503113465200243550ustar00rootroot00000000000000# # fontconfig/fc-lang/mfe.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Mauritian Creole (mfe) # # See: # https://en.wikipedia.org/wiki/Mauritian_Creole#Orthography # https://github.com/unicode-org/cldr/blob/main/common/main/mfe.xml # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/mfe_MU include fr.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/mg.orth000066400000000000000000000025201503113465200242010ustar00rootroot00000000000000# # fontconfig/fc-lang/mg.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Malagasy (MG) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 00c1 00e1 #e010 # LATIN CAPITAL LETTER N WITH DIAERESIS #e011 # LATIN SMALL LETTER N WITH DIAERESIS 00d4 00f4 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/mh.orth000066400000000000000000000031151503113465200242030ustar00rootroot00000000000000# # fontconfig/fc-lang/mh.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Marshallese (MH) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 0100 0101 013b 013c #e00a # LATIN CAPITAL LETTER M WITH CEDILLA (no UCS) #e00b # LATIN SMALL LETTER M WITH CEDILLA (no UCS) #e00c # LATIN CAPITAL LETTER N WITH MACRON (no UCS) #e00d # LATIN SMALL LETTER N WITH MACRON (no UCS) 0145 0146 014c 014d #e00e # LATIN CAPITAL LETTER O WITH CEDILLA (no UCS) #e00f # LATIN SMALL LETTER O WITH CEDILLA (no UCS) 016a 016b fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/mhr.orth000066400000000000000000000025041503113465200243660ustar00rootroot00000000000000# # fontconfig/fc-lang/mhr.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Meadow Mari (mhr) # # See: # https://en.wikipedia.org/wiki/Meadow_Mari_language # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/mhr_RU include ru.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/mi.orth000066400000000000000000000024601503113465200242060ustar00rootroot00000000000000# # fontconfig/fc-lang/mi.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Maori (MI) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 0100-0101 0112-0113 012a-012b 014c-014d 016a-016b 1e34-1e35 # Ngai Tahu specific fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/miq.orth000066400000000000000000000033431503113465200243700ustar00rootroot00000000000000# # fontconfig/fc-lang/miq.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Miskito (miq) # # See: # https://en.wikipedia.org/wiki/Miskito_language#Orthography_and_phonology # # “There is still much controversy about Miskito orthography and it # cannot be considered settled, even with printed Miskito grammars, # Bible translations, and other texts.” # # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/miq_NI include es.orth 00e3 # ã LATIN SMALL LETTER A WITH TILDE 1ebd # ẽ LATIN SMALL LETTER E WITH TILDE 0129 # ĩ LATIN SMALL LETTER I WITH TILDE 00f5 # õ LATIN SMALL LETTER O WITH TILDE 0169 # ũ LATIN SMALL LETTER U WITH TILDE fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/mjw.orth000066400000000000000000000024701503113465200243770ustar00rootroot00000000000000# # fontconfig/fc-lang/mjw.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Karbi (mjw) # # See: # https://en.wikipedia.org/wiki/Karbi_language # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/mjw_IN include en.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/mk.orth000066400000000000000000000026421503113465200242120ustar00rootroot00000000000000# # fontconfig/fc-lang/mk.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Macedonian (MK) 0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE 0403 0405 0408-040a 040c 040d # CYRILLIC CAPITAL LETTER I WITH GRAVE 040f 0410-0418 041a-0428 0450 # CYRILLIC SMALL LETTER IE WITH GRAVE 0453 0455 0458-045a 045c 045d # CYRILLIC SMALL LETTER I WITH GRAVE 045f fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ml.orth000066400000000000000000000025111503113465200242060ustar00rootroot00000000000000# # fontconfig/fc-lang/ml.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Malayalam (ml) # # Taken from the Unicode coverage of this language # 0d02-0d03 0d05-0d0c 0d0e-0d10 0d12-0d28 0d2a-0d39 0d3e-0d43 0d46-0d48 0d4a-0d4d 0d57 0d60-0d61 #0d66-0d6f # Digits fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/mn_cn.orth000066400000000000000000000025741503113465200247010ustar00rootroot00000000000000# # fontconfig/fc-lang/mn_cn.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Mongolian in China (mn-CN) # # Taken from the Unicode coverage of this language # # Basic letters 1820-1842 # Todo letters 1843-185c # Sibe letters 185d-1872 # Manchu letters 1873-1877 # Extensions for Sanskrit and Tibetan 1880-18a9 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/mn_mn.orth000066400000000000000000000026441503113465200247110ustar00rootroot00000000000000# # fontconfig/fc-lang/mn_mn.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Mongolian in Mongolia (mn-MN) # # Sources: # http://www.omniglot.com/writing/mongolian.htm # http://www.viahistoria.com/SilverHorde/main.html?research/MongolScripts.html # http://unicode.org/cldr/data/common/main/mn.xml # 0401 0410-044F 0451 04AE-04AF 04E8-04E9 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/mni.orth000066400000000000000000000027231503113465200243660ustar00rootroot00000000000000# # fontconfig/fc-lang/mni.orth # # Copyright © 2012 Pravin Satpute # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Maniputi (mni) # # Source: Script grammer: http://tdil-dc.in/tdildcMain/articles/283709Script_Grammar_for_Manipuri.pdf 6th page # Characters are encirled in Unicode chart http://pravins.fedorapeople.org/Manipuri-characters.pdf # documents include bn.orth 0964 - 09c4 09bd 09ce 09e6-09ef 09f1 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/mnw.orth000066400000000000000000000024641503113465200244060ustar00rootroot00000000000000# # fontconfig/fc-lang/mnw.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Mon (mnw) # # See: # https://en.wikipedia.org/wiki/Mon_language # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/mnw_MM include my.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/mo.orth000066400000000000000000000025221503113465200242130ustar00rootroot00000000000000# # fontconfig/fc-lang/mo.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Moldavian (MO) 0041-005a 0061-007a 00c2 00ce 00e2 00ee 0102-0103 0218-021b # Comma below forms (preferred over cedilla) 0401 0410-044f 0451 #2019-201a # single quotes #201d-201e # double quotes fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/mr.orth000066400000000000000000000023011503113465200242110ustar00rootroot00000000000000# # fontconfig/fc-lang/mr.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Marathi (Devanagari script) (MR) include hi.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ms.orth000066400000000000000000000025101503113465200242140ustar00rootroot00000000000000# # fontconfig/fc-lang/ms.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Malay (ms) # # Sources: # http://www.omniglot.com/writing/malay.htm # * CLDR exemplar set for Malay: # http://unicode.org/cldr/data/common/main/ms.xml # 0041-005A 0061-007A fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/mt.orth000066400000000000000000000026771503113465200242330ustar00rootroot00000000000000# # fontconfig/fc-lang/mt.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Maltese (MT) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a 00c0 #00c1 #00c2 00c8 #00c9 #00ca 00cc #00cd 00ce 00d2 #00d3 #00d4 00d9 #00da #00db 00e0 #00e1 #00e2 00e8 #00e9 #00ea 00ec #00ed 00ee 00f2 #00f3 #00f4 00f9 #00fa #00fb 010a-010b 0120-0121 0126-0127 017b-017c #02bc # fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/my.orth000066400000000000000000000025551503113465200242330ustar00rootroot00000000000000# # fontconfig/fc-lang/my.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Burmese (Myanmar) (MY) # # Orthography from Unicode range (U+1000-U+1059) # # Consonants 1000-1020 # Independent vowels 1021 1023-1027 1029-102a # Dependent vowel signs 102c-1032 # Pali and Sanskrit extensions #1050-1059 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/na.orth000066400000000000000000000025441503113465200242020ustar00rootroot00000000000000# # fontconfig/fc-lang/na.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Nauru (na) # # Sources: # * http://en.wikipedia.org/wiki/Nauruan_language # * http://www.geonames.de/alphmq.html # # V and X are not used. # 0041-005A 0061-007A 00C3 00D1 00D5 00E3 00F1 00F5 0168-0169 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/nan.orth000066400000000000000000000026551503113465200243630ustar00rootroot00000000000000# # fontconfig/fc-lang/nan.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Min Nan Chinese (nan) # # See: # https://en.wikipedia.org/wiki/Southern_Min # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/nan_TW # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/nan_TW@latin include zh_tw.orth include en.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/nb.orth000066400000000000000000000022671503113465200242050ustar00rootroot00000000000000# # fontconfig/fc-lang/nb.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Norwegian Bokmål (nb) include no.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/nds.orth000066400000000000000000000033201503113465200243610ustar00rootroot00000000000000# # fontconfig/fc-lang/nds.orth # # Copyright © 2004 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Low Saxon (NDS) # # Sources: # Kenneth Rohde Christiansen # ANS - # Algemeyne Neddersassische Schryvwys' (DE) # Algemeyne Nedersaksische Schryvwyse (NL) # 0041-005a # LATIN CAPITAL LETTER A through Z 0061-007a # LATIN SMALL LETTER A through Z 00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS 00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS 00DC # LATIN CAPITAL LETTER U WITH DIAERESIS 00DF # LATIN SMALL LETTER SHARP S (German) 00E4 # LATIN SMALL LETTER A WITH DIAERESIS 00F6 # LATIN SMALL LETTER O WITH DIAERESIS 00FC # LATIN SMALL LETTER U WITH DIAERESIS fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ne.orth000066400000000000000000000034701503113465200242050ustar00rootroot00000000000000# # fontconfig/fc-lang/ne.orth # # Copyright © 2002 Keith Packard # Copyright © 2012 Parag Nemade, Pravin Satpute # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Nepali (ne) # # Source: http://www.panl10n.net/english/Outputs%20Phase%202/CCs/Nepal/MPP/Papers/2007/0702/mpp_reports_pdf/report_character_encoding_constraints_nepali.pdf # 0901-0903 # Various Signs 0905-090b # Independent vowels 090f-0910 # Independent vowels 0913-0914 # Independent vowels 0915-0928 # Consonants 092a-0930 # Consonants 0932 # Consonants 0935-0939 # Consonants 093e-0943 # Various and Dependent vowel signs 0947-0948 # Dependent vowel signs 094b-094d # Dependent vowel signs and virama 0950 # Sign and vedic tone marks 0964-0965 # Punctuations 0966-096F # Digits 0970 # Abbreviation sign fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ng.orth000066400000000000000000000024371503113465200242110ustar00rootroot00000000000000# # fontconfig/fc-lang/ng.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Ndonga (ng) # # Considered a sister language/dialect to Kuanyama (kj) and Kwambi (kwm). # We'll include Kuanyama. # include kj.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/nhn.orth000066400000000000000000000027221503113465200243650ustar00rootroot00000000000000# # fontconfig/fc-lang/nhn.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Tlaxcala-Puebla Nahuatl (nhn) Endonym: Tlahco nāhuatlahtōlli # # See: # https://en.wikipedia.org/wiki/Tlaxcala%E2%80%93Puebla_Nahuatl # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/nhn_MX include es.orth 0101 # ā LATIN SMALL LETTER A WITH MACRON 014d # ō LATIN SMALL LETTER O WITH MACRON fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/niu.orth000066400000000000000000000031611503113465200243730ustar00rootroot00000000000000# # fontconfig/fc-lang/niu.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Niuean (niu) # # See: # https://en.wikipedia.org/wiki/Niuean_language#Orthography # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/niu_NU # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/niu_NZ include en.orth 0101 # ā LATIN SMALL LETTER A WITH MACRON 0113 # ē LATIN SMALL LETTER E WITH MACRON 012b # ī LATIN SMALL LETTER I WITH MACRON 014d # ō LATIN SMALL LETTER O WITH MACRON 016b # ū LATIN SMALL LETTER U WITH MACRON fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/nl.orth000066400000000000000000000026351503113465200242160ustar00rootroot00000000000000# # fontconfig/fc-lang/nl.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Dutch (NL) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a 00c1 00c2 00c4 00c8 00c9 00ca 00cb 00cd 00cf 00d3 00d4 00d6 00da 00db 00dc 00e1 00e2 00e4 00e8 00e9 00ea 00eb 00ed 00ef 00f3 00f4 00f6 00fa 00fb 00fc #0132-0133 # IJ and ij ligatures fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/nn.orth000066400000000000000000000025641503113465200242210ustar00rootroot00000000000000# # fontconfig/fc-lang/nn.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Norwegian Nynorsk (NN) 0041-005a 0061-007a #00ab # double angle quotes #00bb # double angle quotes 00c0 00c4-00c6 00c9-00ca 00d2-00d4 00d6 00d8 00dc 00e0 00e4-00e6 00e9-00ea 00f2-00f4 00f6 00f8 00fc #2039-203a # single quotes fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/no.orth000066400000000000000000000027231503113465200242170ustar00rootroot00000000000000# # fontconfig/fc-lang/no.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Norwegian (Bokmål) (NO) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a #00ab #00bb 00c0 #00c1 #00c2 #00c4 00c5 00c6 #00c7 #00c8 00c9 00ca #00cb 00d2 00d3 00d4 #00d6 00d8 #00dc 00e0 #00e1 #00e2 #00e4 00e5 00e6 #00e7 #00e8 00e9 00ea #00eb 00f2 00f3 00f4 #00f6 00f8 #00fc #2039-203a # angle quotes fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/nqo.orth000066400000000000000000000024141503113465200243750ustar00rootroot00000000000000# # fontconfig/fc-lang/nqo.orth # # Copyright © 2011 Akira TAGOH # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # N'Ko (nqo) # # See: # http://www.unicode.org/charts/PDF/U07C0.pdf # http://en.wikipedia.org/wiki/N'Ko_alphabet # 07c0-07fa fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/nr.orth000066400000000000000000000025741503113465200242260ustar00rootroot00000000000000# # fontconfig/fc-lang/nr.orth # # Copyright © 2007 Dwayne Bailey and Translate.org.za # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of Dwayne Bailey or Translate.org.za not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. Dwayne Bailey and Translate.org.za makes no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL DWAYNE BAILEY OR TRANSLATE.ORG.ZA BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Ndebele, South (NR) # # Orthography taken from http://www.inference.phy.cam.ac.uk/dasher/download/alphabets/alphabet.Ndebele.xml # 0041-005a 0061-007a fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/nso.orth000066400000000000000000000026251503113465200244030ustar00rootroot00000000000000# # fontconfig/fc-lang/nso.orth # # Copyright © 2007 Dwayne Bailey and Translate.org.za # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of Dwayne Bailey or Translate.org.za not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. Dwayne Bailey and Translate.org.za makes no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL DWAYNE BAILEY OR TRANSLATE.ORG.ZA BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Northern Sotho (NSO) # # Orthography from http://www.inference.phy.cam.ac.uk/dasher/download/alphabets/alphabet.Tswana.xml # 0041-005a 0061-007a 00ca 00ea 00d4 00f4 0160-0161 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/nv.orth000066400000000000000000000031031503113465200242170ustar00rootroot00000000000000# # fontconfig/fc-lang/nv.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Navajo/Navaho (nv) # # Sources: # * http://en.wikipedia.org/wiki/Navajo_language # * http://www.omniglot.com/writing/navajo.htm # # F, P, Q, R, U, and V are not used. A vertical glottal stop may be used. # 0041-005A 0061-007A 00C1 00C9 00CD 00D3 00E1 00E9 00ED 00F3 0104-0105 0118-0119 012E-012F 0141-0142 01EA-01EB 02BC # modifier letter apostrophe 0301 # combining acute accent, to be used with ogonek-ed forms of vowels fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ny.orth000066400000000000000000000023541503113465200242310ustar00rootroot00000000000000# # fontconfig/fc-lang/ny.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Chichewa (NY) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 0174-0175 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/oc.orth000066400000000000000000000025311503113465200242010ustar00rootroot00000000000000# # fontconfig/fc-lang/oc.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Occitan (OC) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a 00c0 00c1 00c7 00c8 00c9 #00cb 00cd #00cf 00d2 00d3 00da 00e0 00e1 00e7 00e8 00e9 #00eb 00ed #00ef 00f2 00f3 00fa fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/om.orth000066400000000000000000000024451503113465200242170ustar00rootroot00000000000000# # fontconfig/fc-lang/om.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Oromo or Galla (OM) # # Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf # 0041-005a # Oromo doesn't use v or z 0061-007a fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/or.orth000066400000000000000000000025671503113465200242310ustar00rootroot00000000000000# # fontconfig/fc-lang/or.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Oriya (or) # # Taken from the Unicode coverage of this language # 0b01-0b03 0b05-0b0c 0b0f-0b10 0b13-0b28 0b2a-0b30 0b32-0b33 0b36-0b39 0b3c-0b43 0b47-0b48 0b4b-0b4d 0b56-0b57 0b5c-0b5d 0b5f-0b61 #0b66-0b6f # Digits #0b70 # Symbol fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/os.orth000066400000000000000000000032011503113465200242140ustar00rootroot00000000000000# # fontconfig/fc-lang/os.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Coverage taken from TITUS (Thesaurus Indogermanischer Text und # Sprachmaterialien) # # http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm # # Ossetic (OS) # 0401 0410 0411 0412 0413 0414 0415 0416 0417 0418 0419 041a 041b 041c 041d 041e 041f 0420 0421 0422 0423 0424 0425 0426 0427 0428 0429 042a 042b 042c 042d 042e 042f 0430 0431 0432 0433 0434 0435 0436 0437 0438 0439 043a 043b 043c 043d 043e 043f 0440 0441 0442 0443 0444 0445 0446 0447 0448 0449 044a 044b 044c 044d 044e 044f 0451 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ota.orth000066400000000000000000000030051503113465200243600ustar00rootroot00000000000000# # fontconfig/fc-lang/ota.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Ottoman Turkish (ota) # # Sources: # * Daniels and Bright, “The World’s Writing Systems”, pp. 756–759. # * Library of Congress ALA-LC Romanization Tables: # http://www.loc.gov/catdir/cpso/romanization/ottoman.pdf # # General forms, since presentation forms for one letter is not in Unicode. # 0621-0622 0626-063A 0641-0648 067E 0686 0698 06AD 06AF 06CC fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/pa.orth000066400000000000000000000036141503113465200242030ustar00rootroot00000000000000# # fontconfig/fc-lang/pa.orth # # Copyright © 2004 Red Hat, Inc. # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Panjabi/Punjabi (pa) # # According to ISO 639-3, 'pa/pan' only applies to Panjabi as used in India: # http://www.sil.org/iso639-3/documentation.asp?id=pan # # For Panjabi as used in Pakistan, use 'lah' or 'pa-PK': # http://www.sil.org/iso639-3/documentation.asp?id=lah # # From Unicode coverage for Gurmukhi, with modifications based on # the 'Lohit Punjabi' font # # 0A01-0A03 # Various signs 0A05-0A0A # Independent vowels 0A0F-0A10 0A13-0A14 0A15-0A28 # Consonants 0A2A-0A30 0A32-0A33 0A35-0A36 0A38-0A39 0A3C # Nukta 0A3E-0A42 # Dependent vowel signs 0A47-0A48 0A4B-0A4C 0A4D # Virama 0A59-0A5C # Additional consonants # 0A5E # GURMUKHI LETTER FA # 0A66-0A6F # Digits 0A70-0A74 # Gurmukhi-specific additions fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/pa_pk.orth000066400000000000000000000026001503113465200246670ustar00rootroot00000000000000# # fontconfig/fc-lang/pa_pk.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Panjabi/Punjabi in Pakistan (pa-PK) # # This file is kept for compatibility for glibc: According to ISO 639-3, the # proper code for Pakistani Panjabi is 'lah'. See the file 'lah.orth' for # more information. include lah.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/pap_an.orth000066400000000000000000000030131503113465200250320ustar00rootroot00000000000000# # fontconfig/fc-lang/pap_an.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Papiamento in Netherlands Antilles (pap-AN) # # This is based on Curaçao orthography, also called "Papiamentu". # # Sources: # * http://papiamentu.pbwiki.com/Pronunciation # * http://en.wikipedia.org/wiki/Papiamento # * http://papiamentu.donamaro.nl/ # 0041-005A 0061-007A 00C1 00C8-00C9 00CD 00D1-00D3 00D9-00DA 00DC 00E1 00E8-00E9 00ED 00F1-00F3 00F9-00FA 00FC fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/pap_aw.orth000066400000000000000000000024341503113465200250510ustar00rootroot00000000000000# # fontconfig/fc-lang/pap_aw.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Papiamento in Aruba (pap-AW) # # Sources: studying online newspapers, random wikipedia pages # 0041-005A 0061-007A 00D1 00F1 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/pes.orth000066400000000000000000000022731503113465200243720ustar00rootroot00000000000000# # fontconfig/fc-lang/pes.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Western Farsi (pes) # include fa.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/pl.orth000066400000000000000000000025001503113465200242070ustar00rootroot00000000000000# # fontconfig/fc-lang/pl.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Polish (PL) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a 00d3 00f3 0104-0105 0106-0107 0118-0119 0141-0142 0143-0144 015a-015b 0179-017a 017b-017c fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/prs.orth000066400000000000000000000026171503113465200244110ustar00rootroot00000000000000# # fontconfig/fc-lang/prs.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Dari/Eastern Farsi (prs) # # We assume that Afghan Persian uses the same orthography as Iranian # Persian, although the actual orthography is probably less strict than that # of the Iranian Academy of Persian Language and Literature. include fa.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ps_af.orth000066400000000000000000000031261503113465200246710ustar00rootroot00000000000000# # fontconfig/fc-lang/ps_af.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Pashto in Afghanistan (PS-AF) # # Data from Roozbeh Pournader # # Since the Unicode Presentation Forms don't contain any of the # Pashto-specific letters (that is Pashto letters not in Persian), we are # going with the general forms instead of the Presentation forms, unlike # Arabic, Persian, or Urdu. # 0621-0624 0626-063a 0641-0642 0644-0648 064a 067c 067e 0681 0685-0686 0689 0693 0696 0698 069a 06a9 06ab 06bc 06cc 06cd 06d0 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ps_pk.orth000066400000000000000000000031231503113465200247120ustar00rootroot00000000000000# # fontconfig/fc-lang/ps_pk.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Pashto in Pakistan (PS-PK) # # Data from Roozbeh Pournader # # Since the Unicode Presentation Forms don't contain any of the # Pashto-specific letters (that is Pashto letters not in Persian), we are # going with the general forms instead of the Presentation forms, unlike # Arabic, Persian, or Urdu. # 0621-0624 0626-063a 0641-0642 0644-0648 064a 067c 067e 0681 0685-0686 0689 0693 0696 0698 069a 06a9 06ab 06bc 06cd 06d0 06d2 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/pt.orth000066400000000000000000000026351503113465200242300ustar00rootroot00000000000000# # fontconfig/fc-lang/pt.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Portuguese (PT) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a #00bb 00c0 00c1 00c2 00c3 00c7 00c8 00c9 00ca 00cd 00d2 00d3 00d4 00d5 00da 00dc 00e0 00e1 00e2 00e3 00e7 00e8 00e9 00ea 00ed 00f2 00f3 00f4 00f5 00fa 00fc ##203a # angle quote # fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/qu.orth000066400000000000000000000025701503113465200242300ustar00rootroot00000000000000# # fontconfig/fc-lang/qu.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Quechua (qu) # # Sources: # * http://en.wikipedia.org/wiki/Quechua_alphabet # * http://www.omniglot.com/writing/quechua.htm # # Some basic Latin letters are not used, based on dialect # 0041-005A 0061-007A 00D1 00F1 02C8 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/quz.orth000066400000000000000000000026001503113465200244140ustar00rootroot00000000000000# # fontconfig/fc-lang/quz.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Cusco Quechua (quz) # # Sources: # * http://en.wikipedia.org/wiki/Quechua_alphabet # * http://www.omniglot.com/writing/quechua.htm # # Some basic Latin letters are not used, based on dialect # 0041-005A 0061-007A 00D1 00F1 02C8 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/raj.orth000066400000000000000000000025271503113465200243610ustar00rootroot00000000000000# # fontconfig/fc-lang/raj.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Rajasthani (Devanagari script) (raj) # # See: # https://en.wikipedia.org/wiki/Rajasthani_languages # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/raj_IN include hi.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/rif.orth000066400000000000000000000035131503113465200243610ustar00rootroot00000000000000# # fontconfig/fc-lang/rif.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Riffian (rif) # # See: # https://en.wikipedia.org/wiki/Tarifit # https://en.wikipedia.org/wiki/Berber_Latin_alphabet # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/rif_MA include en.orth 010d # č LATIN SMALL LETTER C WITH CARON 1e0d # ḍ LATIN SMALL LETTER D WITH DOT BELOW 025b # ɛ LATIN SMALL LETTER OPEN E 01e7 # ǧ LATIN SMALL LETTER G WITH CARON 0263 # ɣ LATIN SMALL LETTER GAMMA 1e25 # ḥ LATIN SMALL LETTER H WITH DOT BELOW 0159 # ř LATIN SMALL LETTER R WITH CARON 1e5b # ṛ LATIN SMALL LETTER R WITH DOT BELOW 1e63 # ṣ LATIN SMALL LETTER S WITH DOT BELOW 1e6d # ṭ LATIN SMALL LETTER T WITH DOT BELOW 1e93 # ẓ LATIN SMALL LETTER Z WITH DOT BELOW fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/rm.orth000066400000000000000000000024771503113465200242270ustar00rootroot00000000000000# # fontconfig/fc-lang/rm.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Rhaeto-Romance (Romansch) (RM) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a 00c0 00c8 00c9 00cc 00ce 00d2 00d9 00e0 00e8 00e9 00ec 00ee 00f2 00f9 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/rn.orth000066400000000000000000000024701503113465200242210ustar00rootroot00000000000000# # fontconfig/fc-lang/rn.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Rundi (rn) # # Sources: # http://www.omniglot.com/writing/kirundi.php # # Q and X are not used. An apostrophe-like letter also exists. # 0041-005A 0061-007A fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ro.orth000066400000000000000000000025401503113465200242200ustar00rootroot00000000000000# # fontconfig/fc-lang/ro.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Romanian (RO) # # Sources: # www.eki.ee/letter # 0041-005a 0061-007a 00c2 00ce 00e2 00ee 0102-0103 0218-021b # comma-below forms (preferred over cedilla) #2019-201a # single quotes #201d-201e # double quotes fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ru.orth000066400000000000000000000030211503113465200242210ustar00rootroot00000000000000# # fontconfig/fc-lang/ru.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Russian (RU) #00ab #00bb 0401 #0406 # eliminated in 1918 in favor of 418 0410-044f 0451 #0456 # eliminated in 1918 in favor of 438 #0462 # CYRILLIC CAPITAL LETTER YAT #0463 # CYRILLIC SMALL LETTER YAT #0472 # CYRILLIC CAPITAL LETTER FITA #0473 # CYRILLIC SMALL LETTER FITA #0474 # CYRILLIC CAPITAL LETTER IZHITSA #0475 # CYRILLIC SMALL LETTER IZHITSA #2039-203a # angle quotes fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/rw.orth000066400000000000000000000024301503113465200242260ustar00rootroot00000000000000# # fontconfig/fc-lang/rw.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Kinyarwanda (rw) # # Sources: # http://www.omniglot.com/writing/kinyarwanda.htm # # Q and X are not used 0041-005A 0061-007A fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/sa.orth000066400000000000000000000023021503113465200241770ustar00rootroot00000000000000# # fontconfig/fc-lang/sa.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Sanskrit (Devanagari script) (SA) include hi.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/sah.orth000066400000000000000000000033751503113465200243620ustar00rootroot00000000000000# # fontconfig/fc-lang/sah.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Coverage taken from TITUS (Thesaurus Indogermanischer Text und # Sprachmaterialien) # # http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm # # Yakut (SAH) # 0401 0410 0411 0412 0413 0414 0415 0416 0417 0418 0419 041a 041b 041c 041d 041e 041f 0420 0421 0422 0423 0424 0425 0426 0427 0428 0429 042a 042b 042c 042d 042e 042f 0430 0431 0432 0433 0434 0435 0436 0437 0438 0439 043a 043b 043c 043d 043e 043f 0440 0441 0442 0443 0444 0445 0446 0447 0448 0449 044a 044b 044c 044d 044e 044f 0451 #0472 # CYRILLIC CAPITAL LETTER FITA #0473 # CYRILLIC SMALL LETTER FITA 0494 0495 04a4 04a5 04ae 04af 04ba 04bb 04d8 04d9 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/sat.orth000066400000000000000000000036221503113465200243710ustar00rootroot00000000000000# fontconfig/fc-lang/sat.orth # # Copyright © 2012 Parag Nemade # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of Keith Packard not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. Keith Packard makes no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Santali (Devanagari script) (sat) # # Source: Enhanced inscript: http://pune.cdac.in/html/gist/down/inscript_d.asp # Or # Source: http://malayalam.kerala.gov.in/images/8/80/Qwerty_enhancedinscriptkeyboardlayout.pdf Page No. 86 # 0901-0903 # Various Signs 0905-090a # Independent vowels 090f-0910 # Independent vowels 0913-0914 # Independent vowels 0915-0928 # Consonants 092a-0930 # Consonants 0932-0932 # Consonants 0935 # Consonants 0938-0939 # Consonants 093c-0942 # Various and Dependent vowel signs 0947-0948 # Dependent vowel signs 094b-094d # Dependent vowel signs and virama 0950 # Sign 0964-0965 # Punctuations 0966-096F # Digits 0970 # Abbreviation sign fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/sc.orth000066400000000000000000000026031503113465200242050ustar00rootroot00000000000000# # fontconfig/fc-lang/sc.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Sardinian (sc) # # Sources: # * http://www.omniglot.com/writing/sardinian.htm # * http://www.limbasarda.it/lingui/ling_alfa.html # # K, W, X, and Y are not used. 0041-005A 0061-007A 00C0 00C8 00CC 00D2 00D9 00E0 00E8 00EC 00F2 00F9 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/sco.orth000066400000000000000000000024071503113465200243660ustar00rootroot00000000000000# # fontconfig/fc-lang/sco.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Scots (CU) # # Orthography from http://www.evertype.com/alphabets/scots.pdf # 0041-005a 0061-007a 01b7 021c-021d 0292 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/sd.orth000066400000000000000000000034201503113465200242040ustar00rootroot00000000000000# # fontconfig/fc-lang/sd.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Sindhi (sd) # # Sindhi is mostly written in the Arabic script in both Pakistan and India. # # Sources: # * http://www.user.uni-hannover.de/nhtcapri/sindhi-alphabet.html # * http://www.omniglot.com/writing/sindhi.htm # * http://tdil.mit.gov.in/sindhidesignguideoct02.pdf # # Some of the Sindhi letters are not available as presentation forms in # Unicode, so we go with general-purpose Arabic letters. # 0621-0622 0624 0626-0628 062A-063A 0641-0642 0644-0648 064A 067A-067B 067D-0680 0683-0684 0686-0687 068A 068C-068D 068F 0699 06A6 06A9-06AA 06AF 06B1 06B3 06BB 06BE #06FD-06FD # signs are usually not included in orthographies fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/se.orth000066400000000000000000000024531503113465200242120ustar00rootroot00000000000000# # fontconfig/fc-lang/se.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # North Sámi (SE) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 00c1 00e1 010c-010d 0110-0111 014a-014b 0160-0161 0166-0167 017d-017e fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/sel.orth000066400000000000000000000032231503113465200243620ustar00rootroot00000000000000# # fontconfig/fc-lang/sel.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Coverage taken from TITUS (Thesaurus Indogermanischer Text und # Sprachmaterialien) # # http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm # # Selkup (Ostyak-Samoyed) (SEL) # 0401 0410 0411 0412 0413 0414 0415 0416 0417 0418 0419 041a 041b 041c 041d 041e 041f 0420 0421 0422 0423 0424 0425 0426 0427 0428 0429 042a 042b 042c 042d 042e 042f 0430 0431 0432 0433 0434 0435 0436 0437 0438 0439 043a 043b 043c 043d 043e 043f 0440 0441 0442 0443 0444 0445 0446 0447 0448 0449 044a 044b 044c 044d 044e 044f 0451 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/sg.orth000066400000000000000000000026511503113465200242140ustar00rootroot00000000000000# # fontconfig/fc-lang/sg.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Sango (sg) # # Sources: # * http://en.wikipedia.org/wiki/Sango_language # * http://www.omniglot.com/writing/sango.php # # C, Q, and X are not used. # 0041-005A 0061-007A 00C2 00C4 00CA-00CB 00CE-00CF 00D4 00D6 00DB-00DC 00E2 00E4 00EA-00EB 00EE-00EF 00F4 00F6 00FB-00FC fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/sgs.orth000066400000000000000000000031611503113465200243740ustar00rootroot00000000000000# # fontconfig/fc-lang/sgs.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Samogitian (sgs) # # See: # https://en.wikipedia.org/wiki/Samogitian_language#Writing_system # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/sgs_LT include lt.orth 0101 # ā LATIN SMALL LETTER A WITH MACRON 0113 # ē LATIN SMALL LETTER E WITH MACRON 014d # ō LATIN SMALL LETTER O WITH MACRON 012b # ī LATIN SMALL LETTER I WITH MACRON 0117 # ė LATIN SMALL LETTER E WITH DOT ABOVE 0304 # ̄ COMBINING MACRON 00f5 # õ LATIN SMALL LETTER O WITH TILDE fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/sh.orth000066400000000000000000000027461503113465200242220ustar00rootroot00000000000000# # fontconfig/fc-lang/sh.orth # # Copyright © 2002 Keith Packard # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Serbo-Croatian (sh) # # This tag is deprecated since 2000 in ISO 639-1 and BCP 47. It is kept here # for backward compatibility. Since ISO 639-3 defines this as a # macrolanguage consisting of Bosnian, Croatian, and Serbian, we union # those three. include ba.orth include hr.orth include sr.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/shn.orth000066400000000000000000000024661503113465200243770ustar00rootroot00000000000000# # fontconfig/fc-lang/shn.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Shan (shn) # # See: # https://en.wikipedia.org/wiki/Shan_language # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/shn_MM include my.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/shs.orth000066400000000000000000000026171503113465200244020ustar00rootroot00000000000000# # fontconfig/fc-lang/shs.orth # # Copyright © 2008 Neskie Manuel # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of Neskie Manuel not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. Neskie Manuel makes no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # NESKIE MANUEL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL NESKIE MANUEL BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Secwepemctsin (shs) # # Orthography from A Shuswap Course and # http://www.languagegeek.com/salishan/secwepemctsin.html 0037 0041 0043 0045 0047-0049 004B-0055 0057-0059 0061 0063 0065 0067-0069 006B-0075 0077-0079 00C1 00C9 00CD 00E1 00E9 00ED 0313 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/si.orth000066400000000000000000000051761503113465200242230ustar00rootroot00000000000000# # fontconfig/fc-lang/si.orth # # Copyright © 2002 Keith Packard # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Sinhala/Sinhalese (si) # # The document SINHALA CHARACTER CODE FOR INFORMATION INTERCHANGE, PART 2: # REQUIREMENTS AND METHODS OF TEST (SLS 1134:PART2:2007 UDC 003.035:003.336) # describes three (3) levels of compliance for Unicode Sinhala fonts. The # first level describes the minimum requirements for SLS certification. The # third level includes the first and second level requirements and additional # requirements. # # To get a copy of this document contact the Sri Lanka Standards Institution # (http://www.slsi.lk/). # # The Unicode document: http://unicode.org/charts/PDF/U0D80.PDF # describes the base for level 3 compliance. # # Level 1 compliance can be described as level 3 with the exclusion of: # U+0D8F ILUYANNA (Independent Vowel) # U+0D90 ILUUYANNA (Independent Vowel) # U+0DDF GAYANUKITTA (Dependent Vowel) # U+0DF3 DIGA GAYANUKITTA (Dependent Vowel) # U+0DF4 KUNDDALIYA (Punctuation) # # Sinhala and SLS1134 experts can be contacted at: # sinhala-technical at lists.sourceforge.net # ltrl at ucsc.cmb.ac.lk # # Semi Consonants 0d82-0d83 # Independent Vowels 0d85-0d8d # 0d8e IRUUYANNA (Level 1, but not in modern use) # 0d8f ILUYANNA (Level 3) # 0d90 ILUUYANNA (Level 3) 0d91-0d96 # Consonants 0d9a-0da5 #0da6 SANYAKA JAYANNA (Level 1, but not in modern use) 0da7-0db1 0db3-0dbb 0dbd 0dc0-0dc6 # Dependent Vowels 0dca 0dcf-0dd4 0dd6 0dd8-0dde # 0ddf GAYANUKITTA (Level 3) 0df2 # 0df3 DIGA GAYANUKITTA (Level 3) # Punctuation # 0df4 KUNDDALIYA (Level 3) fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/sid.orth000066400000000000000000000023541503113465200243620ustar00rootroot00000000000000# # fontconfig/fc-lang/sid.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Sidamo (sid) # # Copying Tigrinya of Ethiopia, as does glibc include ti_et.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/sk.orth000066400000000000000000000030401503113465200242110ustar00rootroot00000000000000# # fontconfig/fc-lang/sk.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Slovak (SK) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a 00c1 00c4 00c9 00cd 00d3 00d4 #00d6 # evertype.com 00da #00dc # evertype.com 00dd 00e1 00e4 00e9 00ed 00f3 00f4 #00f6 # evertype.com 00fa #00fc # evertype.com 00fd 010c-010d 010e-010f 0139-013a 013d-013e 0147-0148 #0150-0151 # evertype.com 0154-0155 0160-0161 0164-0165 #0170-0171 # evertype.com 017d-017e # fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/sl.orth000066400000000000000000000062331503113465200242210ustar00rootroot00000000000000# # fontconfig/fc-lang/sl.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Slovenian (SL) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a # # Included in eki.ee # #00C4 LATIN CAPITAL LETTER A WITH DIAERESIS #00D6 LATIN CAPITAL LETTER O WITH DIAERESIS #00DC LATIN CAPITAL LETTER U WITH DIAERESIS #00E4 LATIN SMALL LETTER A WITH DIAERESIS #00F6 LATIN SMALL LETTER O WITH DIAERESIS #00FC LATIN SMALL LETTER U WITH DIAERESIS 0106 LATIN CAPITAL LETTER C WITH ACUTE 0107 LATIN SMALL LETTER C WITH ACUTE 010C LATIN CAPITAL LETTER C WITH CARON 010D LATIN SMALL LETTER C WITH CARON 0110 LATIN CAPITAL LETTER D WITH STROKE 0111 LATIN SMALL LETTER D WITH STROKE 0160 LATIN CAPITAL LETTER S WITH CARON 0161 LATIN SMALL LETTER S WITH CARON 017D LATIN CAPITAL LETTER Z WITH CARON 017E LATIN SMALL LETTER Z WITH CARON # # According to evertype.com: # # In slovenian, these letters are often used to transliterate # Serbian and Macedonian letters # #01C5 LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON #01C6 LATIN SMALL LETTER DZ WITH CARON #01C8 LATIN CAPITAL LETTER L WITH SMALL LETTER J #01C9 LATIN SMALL LETTER LJ #01CB LATIN CAPITAL LETTER N WITH SMALL LETTER J #01CC LATIN SMALL LETTER NJ #01F2 LATIN CAPITAL LETTER D WITH SMALL LETTER Z #01F3 LATIN SMALL LETTER DZ #01F4 LATIN CAPITAL LETTER G WITH ACUTE #01F5 LATIN SMALL LETTER G WITH ACUTE #1E30 LATIN CAPITAL LETTER K WITH ACUTE #1E31 LATIN SMALL LETTER K WITH ACUTE # # These are the transliteration target letters which are # not used in Slovenian at all # #0402 CYRILLIC CAPITAL LETTER DJE (Serbocroatian) #0403 CYRILLIC CAPITAL LETTER GJE #0405 CYRILLIC CAPITAL LETTER DZE #0409 CYRILLIC CAPITAL LETTER LJE #040A CYRILLIC CAPITAL LETTER NJE #040B CYRILLIC CAPITAL LETTER TSHE (Serbocroatian) #040C CYRILLIC CAPITAL LETTER KJE #040F CYRILLIC CAPITAL LETTER DZHE #0452 CYRILLIC SMALL LETTER DJE (Serbocroatian) #0453 CYRILLIC SMALL LETTER GJE #0455 CYRILLIC SMALL LETTER DZE #0459 CYRILLIC SMALL LETTER LJE #045A CYRILLIC SMALL LETTER NJE #045B CYRILLIC SMALL LETTER TSHE (Serbocroatian) #045C CYRILLIC SMALL LETTER KJE #045F CYRILLIC SMALL LETTER DZHE fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/sm.orth000066400000000000000000000023451503113465200242220ustar00rootroot00000000000000# # fontconfig/fc-lang/sm.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Samoan (AF) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 02bb fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/sma.orth000066400000000000000000000024171503113465200243630ustar00rootroot00000000000000# # fontconfig/fc-lang/sma.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # South Sámi (SMA) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 00c4 00e4 00c5 00e5 00d6 00f6 00cf 00ef fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/smj.orth000066400000000000000000000024161503113465200243730ustar00rootroot00000000000000# # fontconfig/fc-lang/smj.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Lule Sámi (SMJ) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 00c1 00e1 00c4 00e4 00c5 00e5 00d1 00f1 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/smn.orth000066400000000000000000000024671503113465200244050ustar00rootroot00000000000000# # fontconfig/fc-lang/smn.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Inari Sámi (SMN) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 00c1 00e1 00c2 00e2 00c4 00e4 010c-010d 0110-0111 014a-014b 0160-0161 017d-017e fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/sms.orth000066400000000000000000000025631503113465200244070ustar00rootroot00000000000000# # fontconfig/fc-lang/sms.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Skolt Sámi (SMJ) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 00c2 00e2 00c4 00e4 00c5 00e5 010c-010d 0110-0111 01b7 0292 01ee-01ef 01e6-01e7 01e4-01e5 01e8-01e9 014a-014b 00d5 00f5 0160-0161 017d-017e fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/sn.orth000066400000000000000000000027151503113465200242240ustar00rootroot00000000000000# # fontconfig/fc-lang/sn.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Shona (sn) # # Sources: # * http://en.wikipedia.org/wiki/Shona_language # * http://www.dokpro.uio.no/allex/gsd/fm/7-Mabhii.htm # * http://www.omniglot.com/writing/shona.php # # Q and X are not used. An apostrophe-like modifier exists, # that is used after N. More research is needed. # 0041-005A 0061-007A fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/so.orth000066400000000000000000000024411503113465200242210ustar00rootroot00000000000000# # fontconfig/fc-lang/so.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Somali (SO) # # Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf # 0041-005a # Somali doesn't use p, v or z 0061-007a fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/sq.orth000066400000000000000000000023741503113465200242300ustar00rootroot00000000000000# # fontconfig/fc-lang/sq.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Albanian (SQ) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a 00c7 00cb 00e7 00eb fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/sr.orth000066400000000000000000000023571503113465200242320ustar00rootroot00000000000000# # fontconfig/fc-lang/sr.orth # # Copyright © 2008 Danilo Šegan # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Serbian (SR) # 0402 0408-040b 040f 0410-0418 041a-0428 0430-0438 043a-0448 0452 0458-045b 045f fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ss.orth000066400000000000000000000025611503113465200242300ustar00rootroot00000000000000# # fontconfig/fc-lang/ss.orth # # Copyright © 2007 Dwayne Bailey and Translate.org.za # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of Dwayne Bailey or Translate.org.za not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. Dwayne Bailey and Translate.org.za makes no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL DWAYNE BAILEY OR TRANSLATE.ORG.ZA BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Swati (SS) # # Orthography taken from http://www.inference.phy.cam.ac.uk/dasher/download/alphabets/alphabet.Swati.xml # 0041-005a 0061-007a fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/st.orth000066400000000000000000000025751503113465200242360ustar00rootroot00000000000000# # fontconfig/fc-lang/st.orth # # Copyright © 2007 Dwayne Bailey and Translate.org.za # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of Dwayne Bailey or Translate.org.za not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. Dwayne Bailey and Translate.org.za makes no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL DWAYNE BAILEY OR TRANSLATE.ORG.ZA BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Sotho, Southern (ST) # # Orthography taken from http://www.inference.phy.cam.ac.uk/dasher/download/alphabets/alphabet.Sesotho.xml # 0041-005a 0061-007a fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/su.orth000066400000000000000000000024751503113465200242360ustar00rootroot00000000000000# # fontconfig/fc-lang/su.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Sundanese (su) # # Sources: # * http://en.wikipedia.org/wiki/Sundanese_language # * http://www.omniglot.com/writing/sundanese.php # 0041-005A 0061-007A 00C9 00E9 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/sv.orth000066400000000000000000000036541503113465200242370ustar00rootroot00000000000000# # fontconfig/fc-lang/sv.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Swedish (SV) # # Sources: # www.evertype.com # www.eki.ee/letter # # evertype.com includes a large number of additional precomposed letters # not marked by eki.ee; I've left those commented out here # 0041-005a 0061-007a #00bb 00c0 00c1 #00c2 #00c3 00c4 00c5 #00c6 #00c7 #00c8 00c9 #00ca 00cb #00cc #00cd #00ce #00cf #00d0 #00d1 #00d2 #00d3 #00d4 00d6 #00d7 #00d8 #00d9 #00da #00db 00dc #00dd 00e0 00e1 #00e2 #00e3 00e4 00e5 #00e6 #00e7 #00e8 00e9 #00ea 00eb #00ec #00ed #00ee #00ef #00f0 #00f1 #00f2 #00f3 #00f4 00f6 #00f8 #00f9 #00fa #00fb 00fc #00fd #0106-0107 # C, c with acute #010c-010d # C, c with caron #0141-0144 # L, l with stroke N, n with acute #0158-015b # R, r with caron S, s with acute #0160-0161 # S, s with caron #2019 # single quote #201d # double quote #203a # angle quote fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/sw.orth000066400000000000000000000025021503113465200242270ustar00rootroot00000000000000# # fontconfig/fc-lang/sw.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Swahili (SW) # # Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf # 0041-005a # Swahili doesn't use f, q or x and uses r only for loan words 0061-007a fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/syr.orth000066400000000000000000000024341503113465200244170ustar00rootroot00000000000000# # fontconfig/fc-lang/syr.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Syriac (SYR) # # Coverage given by Emil Soleyman-Zomalan # 0710-072c # Syriac letters 0730-073f # Syriac points (vowels) fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/szl.orth000066400000000000000000000036401503113465200244120ustar00rootroot00000000000000# # fontconfig/fc-lang/szl.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Silesian (szl) # # See: # https://en.wikipedia.org/wiki/Silesian_language # https://en.wikipedia.org/wiki/Silesian_language#Writing_system # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/szl_PL include pl.orth 00c3 # Ã LATIN CAPITAL LETTER A WITH TILDE 0106 # Ć LATIN CAPITAL LETTER C WITH ACUTE 0141 # Ł LATIN CAPITAL LETTER L WITH STROKE 0143 # Ń LATIN CAPITAL LETTER N WITH ACUTE 014e # Ŏ LATIN CAPITAL LETTER O WITH BREVE 014c # Ō LATIN CAPITAL LETTER O WITH MACRON 00d4 # Ô LATIN CAPITAL LETTER O WITH CIRCUMFLEX 00d5 # Õ LATIN CAPITAL LETTER O WITH TILDE 015a # Ś LATIN CAPITAL LETTER S WITH ACUTE 016e # Ů LATIN CAPITAL LETTER U WITH RING ABOVE 0179 # Ź LATIN CAPITAL LETTER Z WITH ACUTE 017b # Ż LATIN CAPITAL LETTER Z WITH DOT ABOVE fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ta.orth000066400000000000000000000027331503113465200242100ustar00rootroot00000000000000# # fontconfig/fc-lang/ta.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Tamil (TA) # # Taken from the Unicode coverage of this language # # updates from Jungshik Shin # #0b82 # not present in many Tamil fonts 0b83 0b85-0b8a 0b8e-0b90 0b92-0b95 0b99-0b9a 0b9c 0b9e-0b9f 0ba3-0ba4 0ba8-0baa 0bae-0bb5 0bb7-0bb9 0bbe-0bc2 0bc6-0bc8 0bca-0bcd 0bd7 #0be7-0bf2 # Tamil digits and numbers fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/tcy.orth000066400000000000000000000025051503113465200244000ustar00rootroot00000000000000# # fontconfig/fc-lang/tcy.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Tulu (tcy) # # See: # https://en.wikipedia.org/wiki/Tulu_language#Writing_system # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/tcy_IN include kn.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/te.orth000066400000000000000000000025251503113465200242130ustar00rootroot00000000000000# # fontconfig/fc-lang/te.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Telugu (te) # # Taken from the Unicode coverage of this language # 0c01-0c03 0c05-0c0c 0c0e-0c10 0c12-0c28 0c2a-0c33 0c35-0c39 0c3e-0c44 0c46-0c48 0c4a-0c4d 0c55-0c56 0c60-0c61 #0c66-0c6f # Digits fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/tg.orth000066400000000000000000000032731503113465200242160ustar00rootroot00000000000000# # fontconfig/fc-lang/tg.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Coverage taken from TITUS (Thesaurus Indogermanischer Text und # Sprachmaterialien) # # http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm # # Tajik (TG) # 0401 0410 0411 0412 0413 0414 0415 0416 0417 0418 0419 041a 041b 041c 041d 041e 041f 0420 0421 0422 0423 0424 0425 0426 0427 0428 0429 042a 042b 042c 042d 042e 042f 0430 0431 0432 0433 0434 0435 0436 0437 0438 0439 043a 043b 043c 043d 043e 043f 0440 0441 0442 0443 0444 0445 0446 0447 0448 0449 044a 044b 044c 044d 044e 044f 0451 0492 0493 049a 049b 04b2 04b3 04b6 04b7 04e2 04e3 04ee 04ef fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/th.orth000066400000000000000000000023611503113465200242140ustar00rootroot00000000000000# # fontconfig/fc-lang/th.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Thai (th) # 0e01-0e3a 0e3f-0e4e #0e4f # Punctuation #0e50-0e59 # Digits #0e5a-0e5b # Punctuation fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/the.orth000066400000000000000000000025271503113465200243650ustar00rootroot00000000000000# # fontconfig/fc-lang/the.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Chitwania Tharu (Devanagari script) (the) # # See: # https://en.wikipedia.org/wiki/Tharu_languages # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/the_NP include hi.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ti_er.orth000066400000000000000000000034621503113465200247060ustar00rootroot00000000000000# # fontconfig/fc-lang/ti_er.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Eritrean Tigrinya (TI-ER) Ethiopic Convention # # Taken from Unicode coverage (1200-137f) # # Sylables 1200-1206 # he-ho 1208-1216 # le-Ho, skip HWa 1218-121f # me-mWa 1228-1230 # re-sWa 1238-1246 # re-qo 1248 # qWe 124a-124d # qWi-qW 1250-1256 # Qe-Qo 1258 # QWe 125a-125d # QWi-QW 1260-126e # be-vo 1270-127f # te-cWa 1290-12a7 # ne-o 12a8-12ae # ke-ko 12b0 # kWe 12b2-12b5 # kWi-kW 12c8-12ce # Ke-Ko 12c0 # KWe 12c2-12c5 # KWi-KW 12c8-12ce # we-wo 12d0-12d6 # `e-`o 12d8-12ee # ze-yo 12f0-12f7 # de-dWa 1300-130e # je-go 1310 # gWe 1312-1315 # gWi-gW 1320-133f # Te-SWa 1348-1356 # fe-po, skip pWa, rYa, mYa, fYa fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ti_et.orth000066400000000000000000000025241503113465200247060ustar00rootroot00000000000000# # fontconfig/fc-lang/ti_et.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Ethiopian Tigrinya (TI-ET) Ethiopic Convention # # The same as Ethiopic # include ti_er.orth 1220-1226 # `se-`so 1280-1286 # `he-`ho 1288 # hWe 128a-128d # hWi-hW 1340-1346 # `Se-`So fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/tig.orth000066400000000000000000000033301503113465200243610ustar00rootroot00000000000000# # fontconfig/fc-lang/tig.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Tigre (TIG) Ethiopic Convention # # Taken from Unicode coverage (1200-137f) # # Sylables 1200-1206 # he-ho 1208-1216 # le-Ho, skip HWa 1218-121f # me-mWa 1228-1230 # re-sWa 1238-1246 # re-qo 1248 # qWe 124a-124d # qWi-qW 1260-126e # be-vo 1270-127f # te-cWa 1290-1297 # ne-nWa 12a0-12a6 # a-o 12a8-12ae # ke-ko 12b0 # kWe 12b2-12b5 # kWi-kW 12c8-12ce # we-wo 12d0-12d6 # `e-`o 12d8-12df # ze-zWa 12e8-12ee # ye-yo 12f0-12f7 # de-dWa 1300-130e # je-go 1310 # gWe 1312-1315 # gWi-gW 1320-133f # Te-SWa 1348-1356 # fe-po, skip pWa, rYa, mYa, fYa fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/tk.orth000066400000000000000000000026711503113465200242230ustar00rootroot00000000000000# # fontconfig/fc-lang/tk.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Turkmen (tk) # # Sources: # http://www.omniglot.com/writing/turkmen.htm # http://www.itscj.ipsj.or.jp/ISO-IR/230.pdf # http://www.eki.ee/wgrs/rom2_tk.htm # # C, Q, V, and X are not used 0041-005A 0061-007A 00C4 00C7 00D6 00DC-00DD 00E4 00E7 00F6 00FC-00FD 0147-0148 015E-015F 017D-017E fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/tl.orth000066400000000000000000000023721503113465200242220ustar00rootroot00000000000000# # fontconfig/fc-lang/tl.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Tagalog (tl) # # Since Filipino is standardized Tagalog, we just include that include fil.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/tn.orth000066400000000000000000000025251503113465200242240ustar00rootroot00000000000000# # fontconfig/fc-lang/tn.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Tswana (TN) # # Orthography from http://www.eki.ee/letter # and http://www.inference.phy.cam.ac.uk/dasher/download/alphabets/alphabet.Tswana.xml # 0041-005a 0061-007a 00ca 00ea 00d4 00f4 0160-0161 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/to.orth000066400000000000000000000023441503113465200242240ustar00rootroot00000000000000# # fontconfig/fc-lang/to.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Tonga (TO) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 02bb fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/tpi.orth000066400000000000000000000025001503113465200243700ustar00rootroot00000000000000# # fontconfig/fc-lang/tpi.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Tok Pisin (tpi) # # See: # https://en.wikipedia.org/wiki/Tok_Pisin#Alphabet # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/tpi_PG include en.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/tr.orth000066400000000000000000000037161503113465200242330ustar00rootroot00000000000000# # fontconfig/fc-lang/tr.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Turkish (TR) # # Sources: # www.evertype.com # www.eki.ee/letter # 0041-005a 0061-007a 00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX 00C7 LATIN CAPITAL LETTER C WITH CEDILLA 00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX 00D6 LATIN CAPITAL LETTER O WITH DIAERESIS 00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX 00DC LATIN CAPITAL LETTER U WITH DIAERESIS 00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX 00E7 LATIN SMALL LETTER C WITH CEDILLA 00EE LATIN SMALL LETTER I WITH CIRCUMFLEX 00F6 LATIN SMALL LETTER O WITH DIAERESIS 00FB LATIN SMALL LETTER U WITH CIRCUMFLEX 00FC LATIN SMALL LETTER U WITH DIAERESIS 011E LATIN CAPITAL LETTER G WITH BREVE 011F LATIN SMALL LETTER G WITH BREVE 0130 LATIN CAPITAL LETTER I WITH DOT ABOVE 0131 LATIN SMALL LETTER DOTLESS I 015E LATIN CAPITAL LETTER S WITH CEDILLA * 015F LATIN SMALL LETTER S WITH CEDILLA * fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ts.orth000066400000000000000000000023461503113465200242320ustar00rootroot00000000000000# # fontconfig/fc-lang/ts.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Tsonga (TS) # # Orthography taken from http://www.eki.ee/letter # 0041-005a 0061-007a fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/tt.orth000066400000000000000000000033731503113465200242340ustar00rootroot00000000000000# # fontconfig/fc-lang/tt.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Coverage taken from TITUS (Thesaurus Indogermanischer Text und # Sprachmaterialien) # # http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm # # Tatar (TT) # 0401 0410 0411 0412 0413 0414 0415 0416 0417 0418 0419 041a 041b 041c 041d 041e 041f 0420 0421 0422 0423 0424 0425 0426 0427 0428 0429 042a 042b 042c 042d 042e 042f 0430 0431 0432 0433 0434 0435 0436 0437 0438 0439 043a 043b 043c 043d 043e 043f 0440 0441 0442 0443 0444 0445 0446 0447 0448 0449 044a 044b 044c 044d 044e 044f 0451 #0472 # CYRILLIC CAPITAL LETTER FITA #0473 # CYRILLIC SMALL LETTER FITA 0496 0497 04a2 04a3 04ae 04af 04ba 04bb 04d8 04d9 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/tw.orth000066400000000000000000000040231503113465200242300ustar00rootroot00000000000000# # fontconfig/fc-lang/tw.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Twi (tw) # # Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf # 0041-005a 0061-007a 00C3 # LATIN CAPITAL LETTER A WITH TILDE 00E3 # LATIN SMALL LETTER A WITH TILDE 00D1 # LATIN CAPITAL LETTER N WITH TILDE 00D5 # LATIN CAPITAL LETTER O WITH TILDE 00F1 # LATIN SMALL LETTER N WITH TILDE 00F5 # LATIN SMALL LETTER O WITH TILDE 0128 # LATIN CAPITAL LETTER I WITH TILDE 0129 # LATIN SMALL LETTER I WITH TILDE 0168 # LATIN CAPITAL LETTER U WITH TILDE 0169 # LATIN SMALL LETTER U WITH TILDE 0186 # LATIN CAPITAL LETTER OPEN O 0254 # LATIN SMALL LETTER OPEN O 0190 # LATIN CAPITAL LETTER OPEN E 025B # LATIN SMALL LETTER OPEN E 0303 # COMBINING TILDE 0306 # COMBINING BREVE (Vrachy) 0329 # COMBINING VERTICAL LINE BELOW 1EBC # LATIN CAPITAL LETTER E WITH TILDE 1EBD # LATIN SMALL LETTER E WITH TILDE 1EF8 # LATIN CAPITAL LETTER Y WITH TILDE 1EF9 # LATIN SMALL LETTER Y WITH TILDE fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ty.orth000066400000000000000000000027611503113465200242410ustar00rootroot00000000000000# # fontconfig/fc-lang/ty.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Tahitian (ty) # # Sources: # * http://www.omniglot.com/writing/tahitian.htm # * http://en.wikipedia.org/wiki/Tahitian_language # # B, C, D, G, J, K, L, Q, S, W, X, Y and Z are not used. # 0041-005A 0061-007A 00CF # used in one word only? 00EF # used in one word only? 0100-0101 0112-0113 012A-012B 014C-014D 016A-016B 02BC # or possibly 02BB fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/tyv.orth000066400000000000000000000033421503113465200244230ustar00rootroot00000000000000# # fontconfig/fc-lang/tyv.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Coverage taken from TITUS (Thesaurus Indogermanischer Text und # Sprachmaterialien) # # http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm # # Tuvinian (TYV) # 0401 0410 0411 0412 0413 0414 0415 0416 0417 0418 0419 041a 041b 041c 041d 041e 041f 0420 0421 0422 0423 0424 0425 0426 0427 0428 0429 042a 042b 042c 042d 042e 042f 0430 0431 0432 0433 0434 0435 0436 0437 0438 0439 043a 043b 043c 043d 043e 043f 0440 0441 0442 0443 0444 0445 0446 0447 0448 0449 044a 044b 044c 044d 044e 044f 0451 #0472 # CYRILLIC CAPITAL LETTER FITA #0473 # CYRILLIC SMALL LETTER FITA 04a2 04a3 04ae 04af fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ug.orth000066400000000000000000000031601503113465200242120ustar00rootroot00000000000000# # fontconfig/fc-lang/ug.orth # # Copyright © 2010 # UKIJ - Uyghur Computer Science Association (http://www.ukij.org/) # Ubuntu Uyghur Translation Team (https://launchpad.net/~ubuntu-l10n-ug) # Kenjisoft (http://kenjisoft.homelinux.com/) # Bilik (http://www.bilik.cn/) # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors makes no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Uyghur (UG) # # Uyghur is written in a modified Persian-Arabic script. For detailed # information, refer to http://en.wikipedia.org/wiki/Uyghur_language # 0626-0628 062A 062C 062E-062F 0631-0634 063A 0641-0646 0648-064A 067E 0686 0698 06AD 06AF 06BE 06C6-06C8 06CB 06D0 06D5 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/uk.orth000066400000000000000000000025311503113465200242170ustar00rootroot00000000000000# # fontconfig/fc-lang/uk.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Ukrainian (UK) # # Sources: # www.evertype.com # www.eki.ee/letter # #00ab #00bb #0401 # evertype.com 0404 0406 0407 0410-044f #0451 # evertype.com 0454 0456 0457 0490 0491 #2039-203a # angle quotes fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/und_zmth.orth000066400000000000000000000140121503113465200254250ustar00rootroot00000000000000# # fontconfig/fc-lang/emoji.orth # # Copyright © 2002 Keith Packard # Copyright © 2017 Red Hat, Inc. # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Math # # based on # http://www.unicode.org/Public/math/revision-9/MathClass-9.txt # 0020 # S # SPACE 0021 # P # ! EXCLAMATION MARK 0021 # N # ! EXCLAMATION MARK 0023..0026 # N # #..& NUMBER SIGN..AMPERSAND 0028 # O # ( LEFT PARENTHESIS 0029 # C # ) RIGHT PARENTHESIS 002A # N # * ASTERISK 002B # V # + PLUS SIGN 002C # P # , COMMA 002D # R # - HYPHEN-MINUS 002E # P # . FULL STOP 002F # R # / SOLIDUS 0030..0039 # N # 0..9 DIGIT ZERO..NINE 003A..003B # P # :.. # COLON..SEMICOLON 003C..003E # R # <..> LESS-THAN SIGN..GREATER-THAN SIGN 003F # P # ? QUESTION MARK 0040 # N # @ COMMERCIAL AT 0041..005A # A # A..Z LATIN CAPITAL LETTER A..Z 005B # O # [ LEFT SQUARE BRACKET 005C # N # \ REVERSE SOLIDUS 005D # C # ] RIGHT SQUARE BRACKET 005E # X # ^ CIRCUMFLEX ACCENT 0061..007A # A # a..z LATIN SMALL LETTER A..Z 007B # O # { LEFT CURLY BRACKET 007C # F # | VERTICAL LINE 007D # C # } RIGHT CURLY BRACKET 007E # X # ~ TILDE 00A1 # P # ¡ INVERTED EXCLAMATION MARK 00A2..00A7 # N # ¢..§ CENT SIGN..SECTION SIGN 00AC # N # ¬ NOT SIGN 00B0 # N # ° DEGREE SIGN 00B1 # V # ± PLUS-MINUS SIGN 00B5..00B6 # N # µ..¶ MICRO SIGN..PILCROW SIGN 00B7 # B # · MIDDLE DOT 00BF # P # ¿ INVERTED QUESTION MARK 00D7 # B # × MULTIPLICATION SIGN 00F7 # B # ÷ DIVISION SIGN 0131 # A # ı LATIN SMALL LETTER DOTLESS I 0308 # D # ̈ COMBINING DIAERESIS 030A # D # ̊ COMBINING RING ABOVE 030C # D # ̌ COMBINING CARON 0338 # D # ̸ COMBINING LONG SOLIDUS OVERLAY 0391..03A1 # A # Α..Ρ GREEK CAPITAL LETTER ALPHA..RHO 03A3..03A4 # A # Σ..Τ GREEK CAPITAL LETTER SIGMA..TAU 03A6..03A9 # A # Φ..Ω GREEK CAPITAL LETTER PHI..OMEGA 03B1..03C1 # A # α..ρ GREEK SMALL LETTER ALPHA..RHO 03C3..03C9 # A # σ..ω GREEK SMALL LETTER SIGMA..OMEGA 03D5..03D6 # A # ϕ..ϖ GREEK PHI SYMBOL..PI SYMBOL 03F0..03F1 # A # ϰ..ϱ GREEK KAPPA SYMBOL..RHO SYMBOL 2016 # F # ‖ DOUBLE VERTICAL LINE 2020 # R # † DAGGER 2020 # N # † DAGGER 2021 # R # ‡ DOUBLE DAGGER 2021 # N # ‡ DOUBLE DAGGER 2022 # B # • BULLET 2026 # N # … HORIZONTAL ELLIPSIS 2044 # X # ⁄ FRACTION SLASH 2057 # N # ⁗ QUADRUPLE PRIME 20E1 # D # ⃡ COMBINING LEFT RIGHT ARROW ABOVE 2102 # A # ℂ DOUBLE-STRUCK CAPITAL C 210E..210F # N # ℎ..ℏ PLANCK CONSTANT.. OVER TWO PI 2110..2113 # A # ℐ..ℓ SCRIPT CAPITAL I..SMALL L 2115 # A # ℕ DOUBLE-STRUCK CAPITAL N 2118..211D # A # ℘..ℝ SCRIPT CAPITAL P..DOUBLE-STRUCK CAPITAL R 2124 # A # ℤ DOUBLE-STRUCK CAPITAL Z 2200..2201 # U # ∀..∁ FOR ALL..COMPLEMENT 2202 # N # ∂ PARTIAL DIFFERENTIAL 2203..2204 # U # ∃..∄ THERE EXISTS..DOES NOT EXIST 2205 # N # ∅ EMPTY SET 2206..2207 # U # ∆..∇ INCREMENT..NABLA 2208..220D # R # ∈..∍ ELEMENT OF..SMALL CONTAINS AS MEMBER 220F..2211 # L # ∏..∑ N-ARY PRODUCT..SUMMATION 2212..2213 # V # −..∓ MINUS SIGN..MINUS-OR-PLUS SIGN 2214..2219 # B # ∔..∙ DOT PLUS..BULLET OPERATOR 221D # R # ∝ PROPORTIONAL TO 221E..2222 # N # ∞..∢ INFINITY..SPHERICAL ANGLE 2223..2226 # R # ∣..∦ DIVIDES..NOT PARALLEL TO 2227..222A # B # ∧..∪ LOGICAL AND..UNION 2234..2235 # N # ∴..∵ THEREFORE..BECAUSE 2236..2237 # R # ∶..∷ RATIO..PROPORTION 2238 # B # ∸ DOT MINUS 2239..223D # R # ∹..∽ EXCESS..REVERSED TILDE 223E # B # ∾ INVERTED LAZY S 223F # N # ∿ SINE WAVE 2240 # B # ≀ WREATH PRODUCT 228C..228E # B # ⊌..⊎ MULTISET.. UNION 228F..2292 # R # ⊏..⊒ SQUARE IMAGE OF..ORIGINAL OF OR EQUAL TO 2293..22A1 # B # ⊓..⊡ SQUARE CAP..SQUARED DOT OPERATOR 22A2..22A3 # R # ⊢..⊣ RIGHT TACK..LEFT TACK 22A4..22A5 # N # ⊤..⊥ DOWN TACK..UP TACK 22C0..22C3 # L # ⋀..⋃ N-ARY LOGICAL AND..UNION 22C8 # R # ⋈ BOWTIE 22CD # R # ⋍ REVERSED TILDE EQUALS 22CE..22CF # B # ⋎..⋏ CURLY LOGICAL OR..AND 2308 # O # ⌈ LEFT CEILING 2309 # C # ⌉ RIGHT CEILING 230A # O # ⌊ LEFT FLOOR 230B # C # ⌋ RIGHT FLOOR 2322..2323 # R # ⌢..⌣ FROWN..SMILE 25A0..25A1 # N # ■..□ BLACK SQUARE..WHITE SQUARE 27E6 # O # ⟦ MATHEMATICAL LEFT WHITE SQUARE BRACKET 27E7 # C # ⟧ MATHEMATICAL RIGHT WHITE SQUARE BRACKET 27E8 # O # ⟨ MATHEMATICAL LEFT ANGLE BRACKET 27E9 # C # ⟩ MATHEMATICAL RIGHT ANGLE BRACKET 1D400..1D454 # A # 𝐀..𝑔 MATHEMATICAL BOLD CAPITAL A..ITALIC SMALL G 1D456..1D49C # A # 𝑖..𝒜 MATHEMATICAL ITALIC SMALL I..SCRIPT CAPITAL A 1D49E..1D49F # A # 𝒞..𝒟 MATHEMATICAL SCRIPT CAPITAL C..D 1D4A2 # A # 𝒢 MATHEMATICAL SCRIPT CAPITAL G 1D4A5..1D4A6 # A # 𝒥..𝒦 MATHEMATICAL SCRIPT CAPITAL J..K 1D4A9..1D4AC # A # 𝒩..𝒬 MATHEMATICAL SCRIPT CAPITAL N..Q 1D53B..1D53E # A # 𝔻..𝔾 MATHEMATICAL DOUBLE-STRUCK CAPITAL D..G 1D540..1D544 # A # 𝕀..𝕄 MATHEMATICAL DOUBLE-STRUCK CAPITAL I..M 1D546 # A # 𝕆 MATHEMATICAL DOUBLE-STRUCK CAPITAL O 1D54A..1D550 # A # 𝕊..𝕐 MATHEMATICAL DOUBLE-STRUCK CAPITAL S..Y 1D6A4..1D6A5 # A # 𝚤..𝚥 MATHEMATICAL ITALIC SMALL DOTLESS I..J fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/und_zsye.orth000066400000000000000000000223411503113465200254410ustar00rootroot00000000000000# # fontconfig/fc-lang/emoji.orth # # Copyright © 2002 Keith Packard # Copyright © 2017 Red Hat, Inc. # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Emoji # # http://unicode.org/Public/emoji/5.0/emoji-data.txt # with anything after Unicode 6.0 commented out. # ## Emoji Presentation 231A..231B # 1.1 [2] (⌚..⌛) watch..hourglass 23E9..23EC # 6.0 [4] (⏩..⏬) fast-forward button..fast down button 23F0 # 6.0 [1] (⏰) alarm clock 23F3 # 6.0 [1] (⏳) hourglass with flowing sand 25FD..25FE # 3.2 [2] (◽..◾) white medium-small square..black medium-small square 2614..2615 # 4.0 [2] (☔..☕) umbrella with rain drops..hot beverage 2648..2653 # 1.1 [12] (♈..♓) Aries..Pisces 267F # 4.1 [1] (♿) wheelchair symbol 2693 # 4.1 [1] (⚓) anchor 26A1 # 4.0 [1] (⚡) high voltage 26AA..26AB # 4.1 [2] (⚪..⚫) white circle..black circle 26BD..26BE # 5.2 [2] (⚽..⚾) soccer ball..baseball 26C4..26C5 # 5.2 [2] (⛄..⛅) snowman without snow..sun behind cloud 26CE # 6.0 [1] (⛎) Ophiuchus 26D4 # 5.2 [1] (⛔) no entry 26EA # 5.2 [1] (⛪) church 26F2..26F3 # 5.2 [2] (⛲..⛳) fountain..flag in hole 26F5 # 5.2 [1] (⛵) sailboat 26FA # 5.2 [1] (⛺) tent 26FD # 5.2 [1] (⛽) fuel pump 2705 # 6.0 [1] (✅) white heavy check mark 270A..270B # 6.0 [2] (✊..✋) raised fist..raised hand 2728 # 6.0 [1] (✨) sparkles 274C # 6.0 [1] (❌) cross mark 274E # 6.0 [1] (❎) cross mark button 2753..2755 # 6.0 [3] (❓..❕) question mark..white exclamation mark 2757 # 5.2 [1] (❗) exclamation mark 2795..2797 # 6.0 [3] (➕..➗) heavy plus sign..heavy division sign 27B0 # 6.0 [1] (➰) curly loop 27BF # 6.0 [1] (➿) double curly loop 2B1B..2B1C # 5.1 [2] (⬛..⬜) black large square..white large square 2B50 # 5.1 [1] (⭐) white medium star 2B55 # 5.2 [1] (⭕) heavy large circle 1F004 # 5.1 [1] (🀄) mahjong red dragon 1F0CF # 6.0 [1] (🃏) joker 1F18E # 6.0 [1] (🆎) AB button (blood type) 1F191..1F19A # 6.0 [10] (🆑..🆚) CL button..VS button 1F1E6..1F1FF # 6.0 [26] (🇦..🇿) regional indicator symbol letter a..regional indicator symbol letter z 1F201 # 6.0 [1] (🈁) Japanese “here” button 1F21A # 5.2 [1] (🈚) Japanese “free of charge” button 1F22F # 5.2 [1] (🈯) Japanese “reserved” button 1F232..1F236 # 6.0 [5] (🈲..🈶) Japanese “prohibited” button..Japanese “not free of charge” button 1F238..1F23A # 6.0 [3] (🈸..🈺) Japanese “application” button..Japanese “open for business” button 1F250..1F251 # 6.0 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button 1F300..1F320 # 6.0 [33] (🌀..🌠) cyclone..shooting star # 1F32D..1F32F # 8.0 [3] (🌭..🌯) hot dog..burrito 1F330..1F335 # 6.0 [6] (🌰..🌵) chestnut..cactus 1F337..1F37C # 6.0 [70] (🌷..🍼) tulip..baby bottle # 1F37E..1F37F # 8.0 [2] (🍾..🍿) bottle with popping cork..popcorn 1F380..1F393 # 6.0 [20] (🎀..🎓) ribbon..graduation cap 1F3A0..1F3C4 # 6.0 [37] (🎠..🏄) carousel horse..person surfing # 1F3C5 # 7.0 [1] (🏅) sports medal 1F3C6..1F3CA # 6.0 [5] (🏆..🏊) trophy..person swimming # 1F3CF..1F3D3 # 8.0 [5] (🏏..🏓) cricket..ping pong 1F3E0..1F3F0 # 6.0 [17] (🏠..🏰) house..castle # 1F3F4 # 7.0 [1] (🏴) black flag # 1F3F8..1F3FF # 8.0 [8] (🏸..🏿) badminton..dark skin tone # 1F400..1F43E # 6.0 [63] (🐀..🐾) rat..paw prints 1F440 # 6.0 [1] (👀) eyes 1F442..1F4F7 # 6.0[182] (👂..📷) ear..camera # 1F4F8 # 7.0 [1] (📸) camera with flash 1F4F9..1F4FC # 6.0 [4] (📹..📼) video camera..videocassette # 1F4FF # 8.0 [1] (📿) prayer beads 1F500..1F53D # 6.0 [62] (🔀..🔽) shuffle tracks button..down button # 1F54B..1F54E # 8.0 [4] (🕋..🕎) kaaba..menorah 1F550..1F567 # 6.0 [24] (🕐..🕧) one o’clock..twelve-thirty # 1F57A # 9.0 [1] (🕺) man dancing # 1F595..1F596 # 7.0 [2] (🖕..🖖) middle finger..vulcan salute # 1F5A4 # 9.0 [1] (🖤) black heart 1F5FB..1F5FF # 6.0 [5] (🗻..🗿) mount fuji..moai # 1F600 # 6.1 [1] (😀) grinning face 1F601..1F610 # 6.0 [16] (😁..😐) grinning face with smiling eyes..neutral face # 1F611 # 6.1 [1] (😑) expressionless face 1F612..1F614 # 6.0 [3] (😒..😔) unamused face..pensive face # 1F615 # 6.1 [1] (😕) confused face 1F616 # 6.0 [1] (😖) confounded face # 1F617 # 6.1 [1] (😗) kissing face 1F618 # 6.0 [1] (😘) face blowing a kiss # 1F619 # 6.1 [1] (😙) kissing face with smiling eyes 1F61A # 6.0 [1] (😚) kissing face with closed eyes # 1F61B # 6.1 [1] (😛) face with stuck-out tongue 1F61C..1F61E # 6.0 [3] (😜..😞) face with stuck-out tongue & winking eye..disappointed face # 1F61F # 6.1 [1] (😟) worried face 1F620..1F625 # 6.0 [6] (😠..😥) angry face..disappointed but relieved face # 1F626..1F627 # 6.1 [2] (😦..😧) frowning face with open mouth..anguished face 1F628..1F62B # 6.0 [4] (😨..😫) fearful face..tired face # 1F62C # 6.1 [1] (😬) grimacing face 1F62D # 6.0 [1] (😭) loudly crying face # 1F62E..1F62F # 6.1 [2] (😮..😯) face with open mouth..hushed face 1F630..1F633 # 6.0 [4] (😰..😳) face with open mouth & cold sweat..flushed face # 1F634 # 6.1 [1] (😴) sleeping face 1F635..1F640 # 6.0 [12] (😵..🙀) dizzy face..weary cat face # 1F641..1F642 # 7.0 [2] (🙁..🙂) slightly frowning face..slightly smiling face # 1F643..1F644 # 8.0 [2] (🙃..🙄) upside-down face..face with rolling eyes 1F645..1F64F # 6.0 [11] (🙅..🙏) person gesturing NO..folded hands # 1F680..1F6C5 # 6.0 [70] (🚀..🛅) rocket..left luggage # 1F6CC # 7.0 [1] (🛌) person in bed # 1F6D0 # 8.0 [1] (🛐) place of worship # 1F6D1..1F6D2 # 9.0 [2] (🛑..🛒) stop sign..shopping cart # 1F6EB..1F6EC # 7.0 [2] (🛫..🛬) airplane departure..airplane arrival # 1F6F4..1F6F6 # 9.0 [3] (🛴..🛶) kick scooter..canoe # 1F6F7..1F6F8 # 10.0 [2] (🛷..🛸) sled..flying saucer # 1F910..1F918 # 8.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns # 1F919..1F91E # 9.0 [6] (🤙..🤞) call me hand..crossed fingers # 1F91F # 10.0 [1] (🤟) love-you gesture # 1F920..1F927 # 9.0 [8] (🤠..🤧) cowboy hat face..sneezing face # 1F928..1F92F # 10.0 [8] (🤨..🤯) face with raised eyebrow..exploding head # 1F930 # 9.0 [1] (🤰) pregnant woman # 1F931..1F932 # 10.0 [2] (🤱..🤲) breast-feeding..palms up together # 1F933..1F93A # 9.0 [8] (🤳..🤺) selfie..person fencing # 1F93C..1F93E # 9.0 [3] (🤼..🤾) people wrestling..person playing handball # 1F940..1F945 # 9.0 [6] (🥀..🥅) wilted flower..goal net # 1F947..1F94B # 9.0 [5] (🥇..🥋) 1st place medal..martial arts uniform # 1F94C # 10.0 [1] (🥌) curling stone # 1F950..1F95E # 9.0 [15] (🥐..🥞) croissant..pancakes # 1F95F..1F96B # 10.0 [13] (🥟..🥫) dumpling..canned food # 1F980..1F984 # 8.0 [5] (🦀..🦄) crab..unicorn face # 1F985..1F991 # 9.0 [13] (🦅..🦑) eagle..squid # 1F992..1F997 # 10.0 [6] (🦒..🦗) giraffe..cricket # 1F9C0 # 8.0 [1] (🧀) cheese wedge # 1F9D0..1F9E6 # 10.0 [23] (🧐..🧦) face with monocle..socks fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/unm.orth000066400000000000000000000025011503113465200243740ustar00rootroot00000000000000# # fontconfig/fc-lang/unm.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Unami language (unm) # # See: # https://en.wikipedia.org/wiki/Unami_language # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/unm_US include en.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ur.orth000066400000000000000000000035661503113465200242370ustar00rootroot00000000000000# # fontconfig/fc-lang/ur.orth # # Copyright © 2002 Keith Packard # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Urdu (ur) # # We are assuming that: # * Most fonts that claim to support an Arabic letter actually do so; # * Most modern text rendering software use OpenType tables, instead of # directly using presentation forms. # * Some good Arabic fonts do not support codepoints for Arabic presentation # forms. # Thus, we are switching to general forms of Arabic letters. # # General forms: 0621-0624 0626-0628 063a 0641-0642 0644-0646 0648 0679 067e 0686 0688 0691 0698 06a9 06af 06ba 06be 06c3 06cc 06d2 # Presentations forms: #fb56-fb59 #fb66-fb69 #fb7a-fb7d #fb88-fb8d #fb8e-fb95 #fb9e-fb9f #fbfc-fbff #fbaa-fbaf #fe80-fe86 #fe89-fed8 #fedd-feee ##fef5-fef8 # These four happen very rarely #fefb-fefc fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/uz.orth000066400000000000000000000031561503113465200242420ustar00rootroot00000000000000# # fontconfig/fc-lang/uz.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Uzbek (uz) # # Sources: # * http://ru.wikipedia.org/wiki/Узбекская_письменность # * http://unicode.org/cldr/data/common/main/uz_Latn.xml # * http://www.oxuscom.com/New_Uzbek_Latin_Alphabet.pdf # 0041-005A 0061-007A # There are one to three modifier letters too, that are important for the # orthography. But it's impossible to locate them in Unicode with the # information available online. Possible candidates: # U+02BB, U+02BC, U+02BF, U+02C8. fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/ve.orth000066400000000000000000000024211503113465200242100ustar00rootroot00000000000000# # fontconfig/fc-lang/ve.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Venda (ve) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 1e12-1e13 1e3c-1e3d 1e44-1e45 1e4a-1e4b 1e70-1e71 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/vi.orth000066400000000000000000000031151503113465200242150ustar00rootroot00000000000000# # fontconfig/fc-lang/vi.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Vietnamese (VI) # # Information extracted from email sent by Markus Kuhn about the # standard Vietnamese character set (TCVN 6909:2001) # 0041-005a 0061-007a 00c0-00c3 00c8-00ca 00cc-00cd 00d2-00d5 00d9-00da 00dd 00e0-00e3 00e8-00ea 00ec-00ed 00f2-00f5 00f9-00fa 00fd 0102-0103 0110-0111 0128-0129 0168-0169 01a0-01a1 01af-01b0 # diacritical marks 0300-0303 0306 0309 031b 0323 # more precomposed latin 1ea0-1ef9 # double quote marks #201c-201d fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/vo.orth000066400000000000000000000023701503113465200242250ustar00rootroot00000000000000# # fontconfig/fc-lang/vo.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Volapük (VO) 0041-0050 0052-0056 0058-005a 0061-0070 0072-0076 0078-007a 00c4 00d6 00dc 00e4 00f6 00fc fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/vot.orth000066400000000000000000000025071503113465200244130ustar00rootroot00000000000000# # fontconfig/fc-lang/vot.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Orthography from http://www.everytype.com/alphabets/votic.pdf # # Votic (VOT) # # Sources: # www.evertype.com # 0041-005a 0061-007a 00c4 00d6 00dc 00e4 00f6 00fc 0160-0161 017d-017e fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/wa.orth000066400000000000000000000031331503113465200242060ustar00rootroot00000000000000# # fontconfig/fc-lang/wa.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Walloon (WA) # # Data from private communication with Pablo Saratxaga # 0041-005a 0061-007a 00c2 # A circumflex 00c5 # A ring 00c7 # C cedilla 00c8 # E grave 00c9 # E acute 00ca # E circumflex 00ce # I circumflex 00d4 # O circumflex 00db # U circumflex 00e2 # a circumflex 00e5 # a ring 00e7 # c cedilla 00e8 # e grave 00e9 # e acute 00ea # e circumflex 00ee # i circumflex 00f4 # o circumflex 00fb # u circumflex fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/wae.orth000066400000000000000000000025111503113465200243520ustar00rootroot00000000000000# # fontconfig/fc-lang/wae.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Walser German (wae) # # See: # https://en.wikipedia.org/wiki/Walser_German#Phonology # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/wae_CH include de.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/wal.orth000066400000000000000000000023671503113465200243720ustar00rootroot00000000000000# # fontconfig/fc-lang/wal.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Wolaitta/Wolaytta (wal) # # Copying Tigrinya of Ethiopia, as does glibc include ti_et.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/wen.orth000066400000000000000000000025671503113465200244020ustar00rootroot00000000000000# # fontconfig/fc-lang/wen.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Sorbian languages (lower and upper) (WEN) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 0106-0107 010c-010d 011a-011b 0141-0142 0143-0144 00d3 00f3 0154-0155 0158-0159 015a-015b 0160-0161 0179-017a 017d-017e fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/wo.orth000066400000000000000000000024451503113465200242310ustar00rootroot00000000000000# # fontconfig/fc-lang/wo.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Wolof (WO) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 00c0 00e0 00c3 00e3 00c9 00e9 00cb 00eb 00d1 00f1 014a-014b 00d3 00f3 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/xh.orth000066400000000000000000000024011503113465200242130ustar00rootroot00000000000000# # fontconfig/fc-lang/xh.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Xhosa (XH) # # Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf # 0041-005a 0061-007a fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/yap.orth000066400000000000000000000024001503113465200243640ustar00rootroot00000000000000# # fontconfig/fc-lang/yap.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Yapese (YAP) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 00c4 00e4 00cb 00eb 00d6 00f6 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/yi.orth000066400000000000000000000022551503113465200242240ustar00rootroot00000000000000# # fontconfig/fc-lang/yi.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Yiddish (YI) include he.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/yo.orth000066400000000000000000000034231503113465200242300ustar00rootroot00000000000000# # fontconfig/fc-lang/yo.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Yoruba (YO) # # Orthography from http://www.eki.ee/letter # 0041-005a 0061-007a 00c0 00c1 00c2 00c3 00c8 00c9 00ca 00cc 00cd 00ce 00d2 00d3 00d4 00d5 00d9 00da 00db 00e0 00e1 00e2 00e3 00e8 00e9 00ea 00ec 00ed 00ee 00f2 00f3 00f4 00f5 00f9 00fa 00fb 011a-011b 0128-0129 0143-0144 0168-0169 01cd-01ce 01cf-01d0 01d1-01d2 01d3-01d4 01f8-01f9 # LATIN LETTER N WITH GRAVE 0300 0301 0302 0303 030c 1e3e-1e3f 1e62-1e63 1eb8-1eb9 1ebc-1ebd 1ecc-1ecd # LATIN CAPTIAL LETTER M WITH MACRON (no UCS code) # LATIN CAPTIAL LETTER N WITH MACRON (no UCS code) # LATIN SMALL LETTER M WITH MACRON (no UCS code) # LATIN SMALL LETTER N WITH MACRON (no UCS code) fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/yue.orth000066400000000000000000000025641503113465200244100ustar00rootroot00000000000000# # fontconfig/fc-lang/yue.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Yue Chinese, Cantonese (yue) # # See: # https://en.wikipedia.org/wiki/Cantonese # https://en.wikipedia.org/wiki/Yue_Chinese # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/yue_HK include zh_hk.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/yuw.orth000066400000000000000000000025171503113465200244300ustar00rootroot00000000000000# # fontconfig/fc-lang/yuw.orth # # Copyright © 2022 Mike FABIAN # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Yau (yuw) # # See: # https://en.wikipedia.org/wiki/Yau_language_(Trans%E2%80%93New_Guinea) # https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/yuw_PG include en.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/za.orth000066400000000000000000000031471503113465200242160ustar00rootroot00000000000000# # fontconfig/fc-lang/za.orth # # Copyright © 2009 Roozbeh Pournader # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The author(s) make(s) no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Zhuang/Chuang (za) # # Sources: # * http://www.omniglot.com/writing/zhuang.htm # * http://www006.upp.so-net.ne.jp/FFS/zhuangyu_ch01.htm # * http://en.wikipedia.org/wiki/Zhuang_language # # There is an older orthography with several uncommon letters that was # reformed in 1986. In the 1986 orthography, just basic Latin letters are # used. # # Some letters are not used. Apostrophe is used, but usage is comparable to # usage in English. # 0041-005A 0061-007A fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/zh_cn.orth000066400000000000000000003106041503113465200247040ustar00rootroot00000000000000# # fontconfig/fc-lang/zh_cn.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Chinese (simplified) (ZH-CN) # # Coverage computed from GB2312 # 0x02C7 # CARON (Mandarin Chinese third tone) 0x02C9 # MODIFIER LETTER MACRON (Mandarin Chinese first tone) 0x4E00 # 0x4E01 # 0x4E03 # 0x4E07 # 0x4E08 # 0x4E09 # 0x4E0A # 0x4E0B # 0x4E0C # 0x4E0D # 0x4E0E # 0x4E10 # 0x4E11 # 0x4E13 # 0x4E14 # 0x4E15 # 0x4E16 # 0x4E18 # 0x4E19 # 0x4E1A # 0x4E1B # 0x4E1C # 0x4E1D # 0x4E1E # 0x4E22 # 0x4E24 # 0x4E25 # 0x4E27 # 0x4E28 # 0x4E2A # 0x4E2B # 0x4E2C # 0x4E2D # 0x4E30 # 0x4E32 # 0x4E34 # 0x4E36 # 0x4E38 # 0x4E39 # 0x4E3A # 0x4E3B # 0x4E3D # 0x4E3E # 0x4E3F # 0x4E43 # 0x4E45 # 0x4E47 # 0x4E48 # 0x4E49 # 0x4E4B # 0x4E4C # 0x4E4D # 0x4E4E # 0x4E4F # 0x4E50 # 0x4E52 # 0x4E53 # 0x4E54 # 0x4E56 # 0x4E58 # 0x4E59 # 0x4E5C # 0x4E5D # 0x4E5E # 0x4E5F # 0x4E60 # 0x4E61 # 0x4E66 # 0x4E69 # 0x4E70 # 0x4E71 # 0x4E73 # 0x4E7E # 0x4E86 # 0x4E88 # 0x4E89 # 0x4E8B # 0x4E8C # 0x4E8D # 0x4E8E # 0x4E8F # 0x4E91 # 0x4E92 # 0x4E93 # 0x4E94 # 0x4E95 # 0x4E98 # 0x4E9A # 0x4E9B # 0x4E9F # 0x4EA0 # 0x4EA1 # 0x4EA2 # 0x4EA4 # 0x4EA5 # 0x4EA6 # 0x4EA7 # 0x4EA8 # 0x4EA9 # 0x4EAB # 0x4EAC # 0x4EAD # 0x4EAE # 0x4EB2 # 0x4EB3 # 0x4EB5 # 0x4EBA # 0x4EBB # 0x4EBF # 0x4EC0 # 0x4EC1 # 0x4EC2 # 0x4EC3 # 0x4EC4 # 0x4EC5 # 0x4EC6 # 0x4EC7 # 0x4EC9 # 0x4ECA # 0x4ECB # 0x4ECD # 0x4ECE # 0x4ED1 # 0x4ED3 # 0x4ED4 # 0x4ED5 # 0x4ED6 # 0x4ED7 # 0x4ED8 # 0x4ED9 # 0x4EDD # 0x4EDE # 0x4EDF # 0x4EE1 # 0x4EE3 # 0x4EE4 # 0x4EE5 # 0x4EE8 # 0x4EEA # 0x4EEB # 0x4EEC # 0x4EF0 # 0x4EF2 # 0x4EF3 # 0x4EF5 # 0x4EF6 # 0x4EF7 # 0x4EFB # 0x4EFD # 0x4EFF # 0x4F01 # 0x4F09 # 0x4F0A # 0x4F0D # 0x4F0E # 0x4F0F # 0x4F10 # 0x4F11 # 0x4F17 # 0x4F18 # 0x4F19 # 0x4F1A # 0x4F1B # 0x4F1E # 0x4F1F # 0x4F20 # 0x4F22 # 0x4F24 # 0x4F25 # 0x4F26 # 0x4F27 # 0x4F2A # 0x4F2B # 0x4F2F # 0x4F30 # 0x4F32 # 0x4F34 # 0x4F36 # 0x4F38 # 0x4F3A # 0x4F3C # 0x4F3D # 0x4F43 # 0x4F46 # 0x4F4D # 0x4F4E # 0x4F4F # 0x4F50 # 0x4F51 # 0x4F53 # 0x4F55 # 0x4F57 # 0x4F58 # 0x4F59 # 0x4F5A # 0x4F5B # 0x4F5C # 0x4F5D # 0x4F5E # 0x4F5F # 0x4F60 # 0x4F63 # 0x4F64 # 0x4F65 # 0x4F67 # 0x4F69 # 0x4F6C # 0x4F6F # 0x4F70 # 0x4F73 # 0x4F74 # 0x4F76 # 0x4F7B # 0x4F7C # 0x4F7E # 0x4F7F # 0x4F83 # 0x4F84 # 0x4F88 # 0x4F89 # 0x4F8B # 0x4F8D # 0x4F8F # 0x4F91 # 0x4F94 # 0x4F97 # 0x4F9B # 0x4F9D # 0x4FA0 # 0x4FA3 # 0x4FA5 # 0x4FA6 # 0x4FA7 # 0x4FA8 # 0x4FA9 # 0x4FAA # 0x4FAC # 0x4FAE # 0x4FAF # 0x4FB5 # 0x4FBF # 0x4FC3 # 0x4FC4 # 0x4FC5 # 0x4FCA # 0x4FCE # 0x4FCF # 0x4FD0 # 0x4FD1 # 0x4FD7 # 0x4FD8 # 0x4FDA # 0x4FDC # 0x4FDD # 0x4FDE # 0x4FDF # 0x4FE1 # 0x4FE3 # 0x4FE6 # 0x4FE8 # 0x4FE9 # 0x4FEA # 0x4FED # 0x4FEE # 0x4FEF # 0x4FF1 # 0x4FF3 # 0x4FF8 # 0x4FFA # 0x4FFE # 0x500C # 0x500D # 0x500F # 0x5012 # 0x5014 # 0x5018 # 0x5019 # 0x501A # 0x501C # 0x501F # 0x5021 # 0x5025 # 0x5026 # 0x5028 # 0x5029 # 0x502A # 0x502C # 0x502D # 0x502E # 0x503A # 0x503C # 0x503E # 0x5043 # 0x5047 # 0x5048 # 0x504C # 0x504E # 0x504F # 0x5055 # 0x505A # 0x505C # 0x5065 # 0x506C # 0x5076 # 0x5077 # 0x507B # 0x507E # 0x507F # 0x5080 # 0x5085 # 0x5088 # 0x508D # 0x50A3 # 0x50A5 # 0x50A7 # 0x50A8 # 0x50A9 # 0x50AC # 0x50B2 # 0x50BA # 0x50BB # 0x50CF # 0x50D6 # 0x50DA # 0x50E6 # 0x50E7 # 0x50EC # 0x50ED # 0x50EE # 0x50F3 # 0x50F5 # 0x50FB # 0x5106 # 0x5107 # 0x510B # 0x5112 # 0x5121 # 0x513F # 0x5140 # 0x5141 # 0x5143 # 0x5144 # 0x5145 # 0x5146 # 0x5148 # 0x5149 # 0x514B # 0x514D # 0x5151 # 0x5154 # 0x5155 # 0x5156 # 0x515A # 0x515C # 0x5162 # 0x5165 # 0x5168 # 0x516B # 0x516C # 0x516D # 0x516E # 0x5170 # 0x5171 # 0x5173 # 0x5174 # 0x5175 # 0x5176 # 0x5177 # 0x5178 # 0x5179 # 0x517B # 0x517C # 0x517D # 0x5180 # 0x5181 # 0x5182 # 0x5185 # 0x5188 # 0x5189 # 0x518C # 0x518D # 0x5192 # 0x5195 # 0x5196 # 0x5197 # 0x5199 # 0x519B # 0x519C # 0x51A0 # 0x51A2 # 0x51A4 # 0x51A5 # 0x51AB # 0x51AC # 0x51AF # 0x51B0 # 0x51B1 # 0x51B2 # 0x51B3 # 0x51B5 # 0x51B6 # 0x51B7 # 0x51BB # 0x51BC # 0x51BD # 0x51C0 # 0x51C4 # 0x51C6 # 0x51C7 # 0x51C9 # 0x51CB # 0x51CC # 0x51CF # 0x51D1 # 0x51DB # 0x51DD # 0x51E0 # 0x51E1 # 0x51E4 # 0x51EB # 0x51ED # 0x51EF # 0x51F0 # 0x51F3 # 0x51F5 # 0x51F6 # 0x51F8 # 0x51F9 # 0x51FA # 0x51FB # 0x51FC # 0x51FD # 0x51FF # 0x5200 # 0x5201 # 0x5202 # 0x5203 # 0x5206 # 0x5207 # 0x5208 # 0x520A # 0x520D # 0x520E # 0x5211 # 0x5212 # 0x5216 # 0x5217 # 0x5218 # 0x5219 # 0x521A # 0x521B # 0x521D # 0x5220 # 0x5224 # 0x5228 # 0x5229 # 0x522B # 0x522D # 0x522E # 0x5230 # 0x5233 # 0x5236 # 0x5237 # 0x5238 # 0x5239 # 0x523A # 0x523B # 0x523D # 0x523F # 0x5240 # 0x5241 # 0x5242 # 0x5243 # 0x524A # 0x524C # 0x524D # 0x5250 # 0x5251 # 0x5254 # 0x5256 # 0x525C # 0x525E # 0x5261 # 0x5265 # 0x5267 # 0x5269 # 0x526A # 0x526F # 0x5272 # 0x527D # 0x527F # 0x5281 # 0x5282 # 0x5288 # 0x5290 # 0x5293 # 0x529B # 0x529D # 0x529E # 0x529F # 0x52A0 # 0x52A1 # 0x52A2 # 0x52A3 # 0x52A8 # 0x52A9 # 0x52AA # 0x52AB # 0x52AC # 0x52AD # 0x52B1 # 0x52B2 # 0x52B3 # 0x52BE # 0x52BF # 0x52C3 # 0x52C7 # 0x52C9 # 0x52CB # 0x52D0 # 0x52D2 # 0x52D6 # 0x52D8 # 0x52DF # 0x52E4 # 0x52F0 # 0x52F9 # 0x52FA # 0x52FE # 0x52FF # 0x5300 # 0x5305 # 0x5306 # 0x5308 # 0x530D # 0x530F # 0x5310 # 0x5315 # 0x5316 # 0x5317 # 0x5319 # 0x531A # 0x531D # 0x5320 # 0x5321 # 0x5323 # 0x5326 # 0x532A # 0x532E # 0x5339 # 0x533A # 0x533B # 0x533E # 0x533F # 0x5341 # 0x5343 # 0x5345 # 0x5347 # 0x5348 # 0x5349 # 0x534A # 0x534E # 0x534F # 0x5351 # 0x5352 # 0x5353 # 0x5355 # 0x5356 # 0x5357 # 0x535A # 0x535C # 0x535E # 0x535F # 0x5360 # 0x5361 # 0x5362 # 0x5363 # 0x5364 # 0x5366 # 0x5367 # 0x5369 # 0x536B # 0x536E # 0x536F # 0x5370 # 0x5371 # 0x5373 # 0x5374 # 0x5375 # 0x5377 # 0x5378 # 0x537A # 0x537F # 0x5382 # 0x5384 # 0x5385 # 0x5386 # 0x5389 # 0x538B # 0x538C # 0x538D # 0x5395 # 0x5398 # 0x539A # 0x539D # 0x539F # 0x53A2 # 0x53A3 # 0x53A5 # 0x53A6 # 0x53A8 # 0x53A9 # 0x53AE # 0x53B6 # 0x53BB # 0x53BF # 0x53C1 # 0x53C2 # 0x53C8 # 0x53C9 # 0x53CA # 0x53CB # 0x53CC # 0x53CD # 0x53D1 # 0x53D4 # 0x53D6 # 0x53D7 # 0x53D8 # 0x53D9 # 0x53DB # 0x53DF # 0x53E0 # 0x53E3 # 0x53E4 # 0x53E5 # 0x53E6 # 0x53E8 # 0x53E9 # 0x53EA # 0x53EB # 0x53EC # 0x53ED # 0x53EE # 0x53EF # 0x53F0 # 0x53F1 # 0x53F2 # 0x53F3 # 0x53F5 # 0x53F6 # 0x53F7 # 0x53F8 # 0x53F9 # 0x53FB # 0x53FC # 0x53FD # 0x5401 # 0x5403 # 0x5404 # 0x5406 # 0x5408 # 0x5409 # 0x540A # 0x540C # 0x540D # 0x540E # 0x540F # 0x5410 # 0x5411 # 0x5412 # 0x5413 # 0x5415 # 0x5416 # 0x5417 # 0x541B # 0x541D # 0x541E # 0x541F # 0x5420 # 0x5421 # 0x5423 # 0x5426 # 0x5427 # 0x5428 # 0x5429 # 0x542B # 0x542C # 0x542D # 0x542E # 0x542F # 0x5431 # 0x5432 # 0x5434 # 0x5435 # 0x5438 # 0x5439 # 0x543B # 0x543C # 0x543E # 0x5440 # 0x5443 # 0x5446 # 0x5448 # 0x544A # 0x544B # 0x5450 # 0x5452 # 0x5453 # 0x5454 # 0x5455 # 0x5456 # 0x5457 # 0x5458 # 0x5459 # 0x545B # 0x545C # 0x5462 # 0x5464 # 0x5466 # 0x5468 # 0x5471 # 0x5472 # 0x5473 # 0x5475 # 0x5476 # 0x5477 # 0x5478 # 0x547B # 0x547C # 0x547D # 0x5480 # 0x5482 # 0x5484 # 0x5486 # 0x548B # 0x548C # 0x548E # 0x548F # 0x5490 # 0x5492 # 0x5494 # 0x5495 # 0x5496 # 0x5499 # 0x549A # 0x549B # 0x549D # 0x54A3 # 0x54A4 # 0x54A6 # 0x54A7 # 0x54A8 # 0x54A9 # 0x54AA # 0x54AB # 0x54AC # 0x54AD # 0x54AF # 0x54B1 # 0x54B3 # 0x54B4 # 0x54B8 # 0x54BB # 0x54BD # 0x54BF # 0x54C0 # 0x54C1 # 0x54C2 # 0x54C4 # 0x54C6 # 0x54C7 # 0x54C8 # 0x54C9 # 0x54CC # 0x54CD # 0x54CE # 0x54CF # 0x54D0 # 0x54D1 # 0x54D2 # 0x54D3 # 0x54D4 # 0x54D5 # 0x54D7 # 0x54D9 # 0x54DA # 0x54DC # 0x54DD # 0x54DE # 0x54DF # 0x54E5 # 0x54E6 # 0x54E7 # 0x54E8 # 0x54E9 # 0x54EA # 0x54ED # 0x54EE # 0x54F2 # 0x54F3 # 0x54FA # 0x54FC # 0x54FD # 0x54FF # 0x5501 # 0x5506 # 0x5507 # 0x5509 # 0x550F # 0x5510 # 0x5511 # 0x5514 # 0x551B # 0x5520 # 0x5522 # 0x5523 # 0x5524 # 0x5527 # 0x552A # 0x552C # 0x552E # 0x552F # 0x5530 # 0x5531 # 0x5533 # 0x5537 # 0x553C # 0x553E # 0x553F # 0x5541 # 0x5543 # 0x5544 # 0x5546 # 0x5549 # 0x554A # 0x5550 # 0x5555 # 0x5556 # 0x555C # 0x5561 # 0x5564 # 0x5565 # 0x5566 # 0x5567 # 0x556A # 0x556C # 0x556D # 0x556E # 0x5575 # 0x5576 # 0x5577 # 0x5578 # 0x557B # 0x557C # 0x557E # 0x5580 # 0x5581 # 0x5582 # 0x5583 # 0x5584 # 0x5587 # 0x5588 # 0x5589 # 0x558A # 0x558B # 0x558F # 0x5591 # 0x5594 # 0x5598 # 0x5599 # 0x559C # 0x559D # 0x559F # 0x55A7 # 0x55B1 # 0x55B3 # 0x55B5 # 0x55B7 # 0x55B9 # 0x55BB # 0x55BD # 0x55BE # 0x55C4 # 0x55C5 # 0x55C9 # 0x55CC # 0x55CD # 0x55D1 # 0x55D2 # 0x55D3 # 0x55D4 # 0x55D6 # 0x55DC # 0x55DD # 0x55DF # 0x55E1 # 0x55E3 # 0x55E4 # 0x55E5 # 0x55E6 # 0x55E8 # 0x55EA # 0x55EB # 0x55EC # 0x55EF # 0x55F2 # 0x55F3 # 0x55F5 # 0x55F7 # 0x55FD # 0x55FE # 0x5600 # 0x5601 # 0x5608 # 0x5609 # 0x560C # 0x560E # 0x560F # 0x5618 # 0x561B # 0x561E # 0x561F # 0x5623 # 0x5624 # 0x5627 # 0x562C # 0x562D # 0x5631 # 0x5632 # 0x5634 # 0x5636 # 0x5639 # 0x563B # 0x563F # 0x564C # 0x564D # 0x564E # 0x5654 # 0x5657 # 0x5658 # 0x5659 # 0x565C # 0x5662 # 0x5664 # 0x5668 # 0x5669 # 0x566A # 0x566B # 0x566C # 0x5671 # 0x5676 # 0x567B # 0x567C # 0x5685 # 0x5686 # 0x568E # 0x568F # 0x5693 # 0x56A3 # 0x56AF # 0x56B7 # 0x56BC # 0x56CA # 0x56D4 # 0x56D7 # 0x56DA # 0x56DB # 0x56DD # 0x56DE # 0x56DF # 0x56E0 # 0x56E1 # 0x56E2 # 0x56E4 # 0x56EB # 0x56ED # 0x56F0 # 0x56F1 # 0x56F4 # 0x56F5 # 0x56F9 # 0x56FA # 0x56FD # 0x56FE # 0x56FF # 0x5703 # 0x5704 # 0x5706 # 0x5708 # 0x5709 # 0x570A # 0x571C # 0x571F # 0x5723 # 0x5728 # 0x5729 # 0x572A # 0x572C # 0x572D # 0x572E # 0x572F # 0x5730 # 0x5733 # 0x5739 # 0x573A # 0x573B # 0x573E # 0x5740 # 0x5742 # 0x5747 # 0x574A # 0x574C # 0x574D # 0x574E # 0x574F # 0x5750 # 0x5751 # 0x5757 # 0x575A # 0x575B # 0x575C # 0x575D # 0x575E # 0x575F # 0x5760 # 0x5761 # 0x5764 # 0x5766 # 0x5768 # 0x5769 # 0x576A # 0x576B # 0x576D # 0x576F # 0x5773 # 0x5776 # 0x5777 # 0x577B # 0x577C # 0x5782 # 0x5783 # 0x5784 # 0x5785 # 0x5786 # 0x578B # 0x578C # 0x5792 # 0x5793 # 0x579B # 0x57A0 # 0x57A1 # 0x57A2 # 0x57A3 # 0x57A4 # 0x57A6 # 0x57A7 # 0x57A9 # 0x57AB # 0x57AD # 0x57AE # 0x57B2 # 0x57B4 # 0x57B8 # 0x57C2 # 0x57C3 # 0x57CB # 0x57CE # 0x57CF # 0x57D2 # 0x57D4 # 0x57D5 # 0x57D8 # 0x57D9 # 0x57DA # 0x57DD # 0x57DF # 0x57E0 # 0x57E4 # 0x57ED # 0x57EF # 0x57F4 # 0x57F8 # 0x57F9 # 0x57FA # 0x57FD # 0x5800 # 0x5802 # 0x5806 # 0x5807 # 0x580B # 0x580D # 0x5811 # 0x5815 # 0x5819 # 0x581E # 0x5820 # 0x5821 # 0x5824 # 0x582A # 0x5830 # 0x5835 # 0x5844 # 0x584C # 0x584D # 0x5851 # 0x5854 # 0x5858 # 0x585E # 0x5865 # 0x586B # 0x586C # 0x587E # 0x5880 # 0x5881 # 0x5883 # 0x5885 # 0x5889 # 0x5892 # 0x5893 # 0x5899 # 0x589A # 0x589E # 0x589F # 0x58A8 # 0x58A9 # 0x58BC # 0x58C1 # 0x58C5 # 0x58D1 # 0x58D5 # 0x58E4 # 0x58EB # 0x58EC # 0x58EE # 0x58F0 # 0x58F3 # 0x58F6 # 0x58F9 # 0x5902 # 0x5904 # 0x5907 # 0x590D # 0x590F # 0x5914 # 0x5915 # 0x5916 # 0x5919 # 0x591A # 0x591C # 0x591F # 0x5924 # 0x5925 # 0x5927 # 0x5929 # 0x592A # 0x592B # 0x592D # 0x592E # 0x592F # 0x5931 # 0x5934 # 0x5937 # 0x5938 # 0x5939 # 0x593A # 0x593C # 0x5941 # 0x5942 # 0x5944 # 0x5947 # 0x5948 # 0x5949 # 0x594B # 0x594E # 0x594F # 0x5951 # 0x5954 # 0x5955 # 0x5956 # 0x5957 # 0x5958 # 0x595A # 0x5960 # 0x5962 # 0x5965 # 0x5973 # 0x5974 # 0x5976 # 0x5978 # 0x5979 # 0x597D # 0x5981 # 0x5982 # 0x5983 # 0x5984 # 0x5986 # 0x5987 # 0x5988 # 0x598A # 0x598D # 0x5992 # 0x5993 # 0x5996 # 0x5997 # 0x5999 # 0x599E # 0x59A3 # 0x59A4 # 0x59A5 # 0x59A8 # 0x59A9 # 0x59AA # 0x59AB # 0x59AE # 0x59AF # 0x59B2 # 0x59B9 # 0x59BB # 0x59BE # 0x59C6 # 0x59CA # 0x59CB # 0x59D0 # 0x59D1 # 0x59D2 # 0x59D3 # 0x59D4 # 0x59D7 # 0x59D8 # 0x59DA # 0x59DC # 0x59DD # 0x59E3 # 0x59E5 # 0x59E8 # 0x59EC # 0x59F9 # 0x59FB # 0x59FF # 0x5A01 # 0x5A03 # 0x5A04 # 0x5A05 # 0x5A06 # 0x5A07 # 0x5A08 # 0x5A09 # 0x5A0C # 0x5A11 # 0x5A13 # 0x5A18 # 0x5A1C # 0x5A1F # 0x5A20 # 0x5A23 # 0x5A25 # 0x5A29 # 0x5A31 # 0x5A32 # 0x5A34 # 0x5A36 # 0x5A3C # 0x5A40 # 0x5A46 # 0x5A49 # 0x5A4A # 0x5A55 # 0x5A5A # 0x5A62 # 0x5A67 # 0x5A6A # 0x5A74 # 0x5A75 # 0x5A76 # 0x5A77 # 0x5A7A # 0x5A7F # 0x5A92 # 0x5A9A # 0x5A9B # 0x5AAA # 0x5AB2 # 0x5AB3 # 0x5AB5 # 0x5AB8 # 0x5ABE # 0x5AC1 # 0x5AC2 # 0x5AC9 # 0x5ACC # 0x5AD2 # 0x5AD4 # 0x5AD6 # 0x5AD8 # 0x5ADC # 0x5AE0 # 0x5AE1 # 0x5AE3 # 0x5AE6 # 0x5AE9 # 0x5AEB # 0x5AF1 # 0x5B09 # 0x5B16 # 0x5B17 # 0x5B32 # 0x5B34 # 0x5B37 # 0x5B40 # 0x5B50 # 0x5B51 # 0x5B53 # 0x5B54 # 0x5B55 # 0x5B57 # 0x5B58 # 0x5B59 # 0x5B5A # 0x5B5B # 0x5B5C # 0x5B5D # 0x5B5F # 0x5B62 # 0x5B63 # 0x5B64 # 0x5B65 # 0x5B66 # 0x5B69 # 0x5B6A # 0x5B6C # 0x5B70 # 0x5B71 # 0x5B73 # 0x5B75 # 0x5B7A # 0x5B7D # 0x5B80 # 0x5B81 # 0x5B83 # 0x5B84 # 0x5B85 # 0x5B87 # 0x5B88 # 0x5B89 # 0x5B8B # 0x5B8C # 0x5B8F # 0x5B93 # 0x5B95 # 0x5B97 # 0x5B98 # 0x5B99 # 0x5B9A # 0x5B9B # 0x5B9C # 0x5B9D # 0x5B9E # 0x5BA0 # 0x5BA1 # 0x5BA2 # 0x5BA3 # 0x5BA4 # 0x5BA5 # 0x5BA6 # 0x5BAA # 0x5BAB # 0x5BB0 # 0x5BB3 # 0x5BB4 # 0x5BB5 # 0x5BB6 # 0x5BB8 # 0x5BB9 # 0x5BBD # 0x5BBE # 0x5BBF # 0x5BC2 # 0x5BC4 # 0x5BC5 # 0x5BC6 # 0x5BC7 # 0x5BCC # 0x5BD0 # 0x5BD2 # 0x5BD3 # 0x5BDD # 0x5BDE # 0x5BDF # 0x5BE1 # 0x5BE4 # 0x5BE5 # 0x5BE8 # 0x5BEE # 0x5BF0 # 0x5BF8 # 0x5BF9 # 0x5BFA # 0x5BFB # 0x5BFC # 0x5BFF # 0x5C01 # 0x5C04 # 0x5C06 # 0x5C09 # 0x5C0A # 0x5C0F # 0x5C11 # 0x5C14 # 0x5C15 # 0x5C16 # 0x5C18 # 0x5C1A # 0x5C1C # 0x5C1D # 0x5C22 # 0x5C24 # 0x5C25 # 0x5C27 # 0x5C2C # 0x5C31 # 0x5C34 # 0x5C38 # 0x5C39 # 0x5C3A # 0x5C3B # 0x5C3C # 0x5C3D # 0x5C3E # 0x5C3F # 0x5C40 # 0x5C41 # 0x5C42 # 0x5C45 # 0x5C48 # 0x5C49 # 0x5C4A # 0x5C4B # 0x5C4E # 0x5C4F # 0x5C50 # 0x5C51 # 0x5C55 # 0x5C59 # 0x5C5E # 0x5C60 # 0x5C61 # 0x5C63 # 0x5C65 # 0x5C66 # 0x5C6E # 0x5C6F # 0x5C71 # 0x5C79 # 0x5C7A # 0x5C7F # 0x5C81 # 0x5C82 # 0x5C88 # 0x5C8C # 0x5C8D # 0x5C90 # 0x5C91 # 0x5C94 # 0x5C96 # 0x5C97 # 0x5C98 # 0x5C99 # 0x5C9A # 0x5C9B # 0x5C9C # 0x5CA2 # 0x5CA3 # 0x5CA9 # 0x5CAB # 0x5CAC # 0x5CAD # 0x5CB1 # 0x5CB3 # 0x5CB5 # 0x5CB7 # 0x5CB8 # 0x5CBD # 0x5CBF # 0x5CC1 # 0x5CC4 # 0x5CCB # 0x5CD2 # 0x5CD9 # 0x5CE1 # 0x5CE4 # 0x5CE5 # 0x5CE6 # 0x5CE8 # 0x5CEA # 0x5CED # 0x5CF0 # 0x5CFB # 0x5D02 # 0x5D03 # 0x5D06 # 0x5D07 # 0x5D0E # 0x5D14 # 0x5D16 # 0x5D1B # 0x5D1E # 0x5D24 # 0x5D26 # 0x5D27 # 0x5D29 # 0x5D2D # 0x5D2E # 0x5D34 # 0x5D3D # 0x5D3E # 0x5D47 # 0x5D4A # 0x5D4B # 0x5D4C # 0x5D58 # 0x5D5B # 0x5D5D # 0x5D69 # 0x5D6B # 0x5D6C # 0x5D6F # 0x5D74 # 0x5D82 # 0x5D99 # 0x5D9D # 0x5DB7 # 0x5DC5 # 0x5DCD # 0x5DDB # 0x5DDD # 0x5DDE # 0x5DE1 # 0x5DE2 # 0x5DE5 # 0x5DE6 # 0x5DE7 # 0x5DE8 # 0x5DE9 # 0x5DEB # 0x5DEE # 0x5DEF # 0x5DF1 # 0x5DF2 # 0x5DF3 # 0x5DF4 # 0x5DF7 # 0x5DFD # 0x5DFE # 0x5E01 # 0x5E02 # 0x5E03 # 0x5E05 # 0x5E06 # 0x5E08 # 0x5E0C # 0x5E0F # 0x5E10 # 0x5E11 # 0x5E14 # 0x5E15 # 0x5E16 # 0x5E18 # 0x5E19 # 0x5E1A # 0x5E1B # 0x5E1C # 0x5E1D # 0x5E26 # 0x5E27 # 0x5E2D # 0x5E2E # 0x5E31 # 0x5E37 # 0x5E38 # 0x5E3B # 0x5E3C # 0x5E3D # 0x5E42 # 0x5E44 # 0x5E45 # 0x5E4C # 0x5E54 # 0x5E55 # 0x5E5B # 0x5E5E # 0x5E61 # 0x5E62 # 0x5E72 # 0x5E73 # 0x5E74 # 0x5E76 # 0x5E78 # 0x5E7A # 0x5E7B # 0x5E7C # 0x5E7D # 0x5E7F # 0x5E80 # 0x5E84 # 0x5E86 # 0x5E87 # 0x5E8A # 0x5E8B # 0x5E8F # 0x5E90 # 0x5E91 # 0x5E93 # 0x5E94 # 0x5E95 # 0x5E96 # 0x5E97 # 0x5E99 # 0x5E9A # 0x5E9C # 0x5E9E # 0x5E9F # 0x5EA0 # 0x5EA5 # 0x5EA6 # 0x5EA7 # 0x5EAD # 0x5EB3 # 0x5EB5 # 0x5EB6 # 0x5EB7 # 0x5EB8 # 0x5EB9 # 0x5EBE # 0x5EC9 # 0x5ECA # 0x5ED1 # 0x5ED2 # 0x5ED3 # 0x5ED6 # 0x5EDB # 0x5EE8 # 0x5EEA # 0x5EF4 # 0x5EF6 # 0x5EF7 # 0x5EFA # 0x5EFE # 0x5EFF # 0x5F00 # 0x5F01 # 0x5F02 # 0x5F03 # 0x5F04 # 0x5F08 # 0x5F0A # 0x5F0B # 0x5F0F # 0x5F11 # 0x5F13 # 0x5F15 # 0x5F17 # 0x5F18 # 0x5F1B # 0x5F1F # 0x5F20 # 0x5F25 # 0x5F26 # 0x5F27 # 0x5F29 # 0x5F2A # 0x5F2D # 0x5F2F # 0x5F31 # 0x5F39 # 0x5F3A # 0x5F3C # 0x5F40 # 0x5F50 # 0x5F52 # 0x5F53 # 0x5F55 # 0x5F56 # 0x5F57 # 0x5F58 # 0x5F5D # 0x5F61 # 0x5F62 # 0x5F64 # 0x5F66 # 0x5F69 # 0x5F6A # 0x5F6C # 0x5F6D # 0x5F70 # 0x5F71 # 0x5F73 # 0x5F77 # 0x5F79 # 0x5F7B # 0x5F7C # 0x5F80 # 0x5F81 # 0x5F82 # 0x5F84 # 0x5F85 # 0x5F87 # 0x5F88 # 0x5F89 # 0x5F8A # 0x5F8B # 0x5F8C # 0x5F90 # 0x5F92 # 0x5F95 # 0x5F97 # 0x5F98 # 0x5F99 # 0x5F9C # 0x5FA1 # 0x5FA8 # 0x5FAA # 0x5FAD # 0x5FAE # 0x5FB5 # 0x5FB7 # 0x5FBC # 0x5FBD # 0x5FC3 # 0x5FC4 # 0x5FC5 # 0x5FC6 # 0x5FC9 # 0x5FCC # 0x5FCD # 0x5FCF # 0x5FD0 # 0x5FD1 # 0x5FD2 # 0x5FD6 # 0x5FD7 # 0x5FD8 # 0x5FD9 # 0x5FDD # 0x5FE0 # 0x5FE1 # 0x5FE4 # 0x5FE7 # 0x5FEA # 0x5FEB # 0x5FED # 0x5FEE # 0x5FF1 # 0x5FF5 # 0x5FF8 # 0x5FFB # 0x5FFD # 0x5FFE # 0x5FFF # 0x6000 # 0x6001 # 0x6002 # 0x6003 # 0x6004 # 0x6005 # 0x6006 # 0x600A # 0x600D # 0x600E # 0x600F # 0x6012 # 0x6014 # 0x6015 # 0x6016 # 0x6019 # 0x601B # 0x601C # 0x601D # 0x6020 # 0x6021 # 0x6025 # 0x6026 # 0x6027 # 0x6028 # 0x6029 # 0x602A # 0x602B # 0x602F # 0x6035 # 0x603B # 0x603C # 0x603F # 0x6041 # 0x6042 # 0x6043 # 0x604B # 0x604D # 0x6050 # 0x6052 # 0x6055 # 0x6059 # 0x605A # 0x605D # 0x6062 # 0x6063 # 0x6064 # 0x6067 # 0x6068 # 0x6069 # 0x606A # 0x606B # 0x606C # 0x606D # 0x606F # 0x6070 # 0x6073 # 0x6076 # 0x6078 # 0x6079 # 0x607A # 0x607B # 0x607C # 0x607D # 0x607F # 0x6083 # 0x6084 # 0x6089 # 0x608C # 0x608D # 0x6092 # 0x6094 # 0x6096 # 0x609A # 0x609B # 0x609D # 0x609F # 0x60A0 # 0x60A3 # 0x60A6 # 0x60A8 # 0x60AB # 0x60AC # 0x60AD # 0x60AF # 0x60B1 # 0x60B2 # 0x60B4 # 0x60B8 # 0x60BB # 0x60BC # 0x60C5 # 0x60C6 # 0x60CA # 0x60CB # 0x60D1 # 0x60D5 # 0x60D8 # 0x60DA # 0x60DC # 0x60DD # 0x60DF # 0x60E0 # 0x60E6 # 0x60E7 # 0x60E8 # 0x60E9 # 0x60EB # 0x60EC # 0x60ED # 0x60EE # 0x60EF # 0x60F0 # 0x60F3 # 0x60F4 # 0x60F6 # 0x60F9 # 0x60FA # 0x6100 # 0x6101 # 0x6106 # 0x6108 # 0x6109 # 0x610D # 0x610E # 0x610F # 0x6115 # 0x611A # 0x611F # 0x6120 # 0x6123 # 0x6124 # 0x6126 # 0x6127 # 0x612B # 0x613F # 0x6148 # 0x614A # 0x614C # 0x614E # 0x6151 # 0x6155 # 0x615D # 0x6162 # 0x6167 # 0x6168 # 0x6170 # 0x6175 # 0x6177 # 0x618B # 0x618E # 0x6194 # 0x619D # 0x61A7 # 0x61A8 # 0x61A9 # 0x61AC # 0x61B7 # 0x61BE # 0x61C2 # 0x61C8 # 0x61CA # 0x61CB # 0x61D1 # 0x61D2 # 0x61D4 # 0x61E6 # 0x61F5 # 0x61FF # 0x6206 # 0x6208 # 0x620A # 0x620B # 0x620C # 0x620D # 0x620E # 0x620F # 0x6210 # 0x6211 # 0x6212 # 0x6215 # 0x6216 # 0x6217 # 0x6218 # 0x621A # 0x621B # 0x621F # 0x6221 # 0x6222 # 0x6224 # 0x6225 # 0x622A # 0x622C # 0x622E # 0x6233 # 0x6234 # 0x6237 # 0x623D # 0x623E # 0x623F # 0x6240 # 0x6241 # 0x6243 # 0x6247 # 0x6248 # 0x6249 # 0x624B # 0x624C # 0x624D # 0x624E # 0x6251 # 0x6252 # 0x6253 # 0x6254 # 0x6258 # 0x625B # 0x6263 # 0x6266 # 0x6267 # 0x6269 # 0x626A # 0x626B # 0x626C # 0x626D # 0x626E # 0x626F # 0x6270 # 0x6273 # 0x6276 # 0x6279 # 0x627C # 0x627E # 0x627F # 0x6280 # 0x6284 # 0x6289 # 0x628A # 0x6291 # 0x6292 # 0x6293 # 0x6295 # 0x6296 # 0x6297 # 0x6298 # 0x629A # 0x629B # 0x629F # 0x62A0 # 0x62A1 # 0x62A2 # 0x62A4 # 0x62A5 # 0x62A8 # 0x62AB # 0x62AC # 0x62B1 # 0x62B5 # 0x62B9 # 0x62BB # 0x62BC # 0x62BD # 0x62BF # 0x62C2 # 0x62C4 # 0x62C5 # 0x62C6 # 0x62C7 # 0x62C8 # 0x62C9 # 0x62CA # 0x62CC # 0x62CD # 0x62CE # 0x62D0 # 0x62D2 # 0x62D3 # 0x62D4 # 0x62D6 # 0x62D7 # 0x62D8 # 0x62D9 # 0x62DA # 0x62DB # 0x62DC # 0x62DF # 0x62E2 # 0x62E3 # 0x62E5 # 0x62E6 # 0x62E7 # 0x62E8 # 0x62E9 # 0x62EC # 0x62ED # 0x62EE # 0x62EF # 0x62F1 # 0x62F3 # 0x62F4 # 0x62F6 # 0x62F7 # 0x62FC # 0x62FD # 0x62FE # 0x62FF # 0x6301 # 0x6302 # 0x6307 # 0x6308 # 0x6309 # 0x630E # 0x6311 # 0x6316 # 0x631A # 0x631B # 0x631D # 0x631E # 0x631F # 0x6320 # 0x6321 # 0x6322 # 0x6323 # 0x6324 # 0x6325 # 0x6328 # 0x632A # 0x632B # 0x632F # 0x6332 # 0x6339 # 0x633A # 0x633D # 0x6342 # 0x6343 # 0x6345 # 0x6346 # 0x6349 # 0x634B # 0x634C # 0x634D # 0x634E # 0x634F # 0x6350 # 0x6355 # 0x635E # 0x635F # 0x6361 # 0x6362 # 0x6363 # 0x6367 # 0x6369 # 0x636D # 0x636E # 0x6371 # 0x6376 # 0x6377 # 0x637A # 0x637B # 0x6380 # 0x6382 # 0x6387 # 0x6388 # 0x6389 # 0x638A # 0x638C # 0x638E # 0x638F # 0x6390 # 0x6392 # 0x6396 # 0x6398 # 0x63A0 # 0x63A2 # 0x63A3 # 0x63A5 # 0x63A7 # 0x63A8 # 0x63A9 # 0x63AA # 0x63AC # 0x63AD # 0x63AE # 0x63B0 # 0x63B3 # 0x63B4 # 0x63B7 # 0x63B8 # 0x63BA # 0x63BC # 0x63BE # 0x63C4 # 0x63C6 # 0x63C9 # 0x63CD # 0x63CE # 0x63CF # 0x63D0 # 0x63D2 # 0x63D6 # 0x63DE # 0x63E0 # 0x63E1 # 0x63E3 # 0x63E9 # 0x63EA # 0x63ED # 0x63F2 # 0x63F4 # 0x63F6 # 0x63F8 # 0x63FD # 0x63FF # 0x6400 # 0x6401 # 0x6402 # 0x6405 # 0x640B # 0x640C # 0x640F # 0x6410 # 0x6413 # 0x6414 # 0x641B # 0x641C # 0x641E # 0x6420 # 0x6421 # 0x6426 # 0x642A # 0x642C # 0x642D # 0x6434 # 0x643A # 0x643D # 0x643F # 0x6441 # 0x6444 # 0x6445 # 0x6446 # 0x6447 # 0x6448 # 0x644A # 0x6452 # 0x6454 # 0x6458 # 0x645E # 0x6467 # 0x6469 # 0x646D # 0x6478 # 0x6479 # 0x647A # 0x6482 # 0x6484 # 0x6485 # 0x6487 # 0x6491 # 0x6492 # 0x6495 # 0x6496 # 0x6499 # 0x649E # 0x64A4 # 0x64A9 # 0x64AC # 0x64AD # 0x64AE # 0x64B0 # 0x64B5 # 0x64B7 # 0x64B8 # 0x64BA # 0x64BC # 0x64C0 # 0x64C2 # 0x64C5 # 0x64CD # 0x64CE # 0x64D0 # 0x64D2 # 0x64D7 # 0x64D8 # 0x64DE # 0x64E2 # 0x64E4 # 0x64E6 # 0x6500 # 0x6509 # 0x6512 # 0x6518 # 0x6525 # 0x652B # 0x652E # 0x652F # 0x6534 # 0x6535 # 0x6536 # 0x6538 # 0x6539 # 0x653B # 0x653E # 0x653F # 0x6545 # 0x6548 # 0x6549 # 0x654C # 0x654F # 0x6551 # 0x6555 # 0x6556 # 0x6559 # 0x655B # 0x655D # 0x655E # 0x6562 # 0x6563 # 0x6566 # 0x656B # 0x656C # 0x6570 # 0x6572 # 0x6574 # 0x6577 # 0x6587 # 0x658B # 0x658C # 0x6590 # 0x6591 # 0x6593 # 0x6597 # 0x6599 # 0x659B # 0x659C # 0x659F # 0x65A1 # 0x65A4 # 0x65A5 # 0x65A7 # 0x65A9 # 0x65AB # 0x65AD # 0x65AF # 0x65B0 # 0x65B9 # 0x65BC # 0x65BD # 0x65C1 # 0x65C3 # 0x65C4 # 0x65C5 # 0x65C6 # 0x65CB # 0x65CC # 0x65CE # 0x65CF # 0x65D2 # 0x65D6 # 0x65D7 # 0x65E0 # 0x65E2 # 0x65E5 # 0x65E6 # 0x65E7 # 0x65E8 # 0x65E9 # 0x65EC # 0x65ED # 0x65EE # 0x65EF # 0x65F0 # 0x65F1 # 0x65F6 # 0x65F7 # 0x65FA # 0x6600 # 0x6602 # 0x6603 # 0x6606 # 0x660A # 0x660C # 0x660E # 0x660F # 0x6613 # 0x6614 # 0x6615 # 0x6619 # 0x661D # 0x661F # 0x6620 # 0x6625 # 0x6627 # 0x6628 # 0x662D # 0x662F # 0x6631 # 0x6634 # 0x6635 # 0x6636 # 0x663C # 0x663E # 0x6641 # 0x6643 # 0x664B # 0x664C # 0x664F # 0x6652 # 0x6653 # 0x6654 # 0x6655 # 0x6656 # 0x6657 # 0x665A # 0x665F # 0x6661 # 0x6664 # 0x6666 # 0x6668 # 0x666E # 0x666F # 0x6670 # 0x6674 # 0x6676 # 0x6677 # 0x667A # 0x667E # 0x6682 # 0x6684 # 0x6687 # 0x668C # 0x6691 # 0x6696 # 0x6697 # 0x669D # 0x66A7 # 0x66A8 # 0x66AE # 0x66B4 # 0x66B9 # 0x66BE # 0x66D9 # 0x66DB # 0x66DC # 0x66DD # 0x66E6 # 0x66E9 # 0x66F0 # 0x66F2 # 0x66F3 # 0x66F4 # 0x66F7 # 0x66F9 # 0x66FC # 0x66FE # 0x66FF # 0x6700 # 0x6708 # 0x6709 # 0x670A # 0x670B # 0x670D # 0x6710 # 0x6714 # 0x6715 # 0x6717 # 0x671B # 0x671D # 0x671F # 0x6726 # 0x6728 # 0x672A # 0x672B # 0x672C # 0x672D # 0x672F # 0x6731 # 0x6734 # 0x6735 # 0x673A # 0x673D # 0x6740 # 0x6742 # 0x6743 # 0x6746 # 0x6748 # 0x6749 # 0x674C # 0x674E # 0x674F # 0x6750 # 0x6751 # 0x6753 # 0x6756 # 0x675C # 0x675E # 0x675F # 0x6760 # 0x6761 # 0x6765 # 0x6768 # 0x6769 # 0x676A # 0x676D # 0x676F # 0x6770 # 0x6772 # 0x6773 # 0x6775 # 0x6777 # 0x677C # 0x677E # 0x677F # 0x6781 # 0x6784 # 0x6787 # 0x6789 # 0x678B # 0x6790 # 0x6795 # 0x6797 # 0x6798 # 0x679A # 0x679C # 0x679D # 0x679E # 0x67A2 # 0x67A3 # 0x67A5 # 0x67A7 # 0x67A8 # 0x67AA # 0x67AB # 0x67AD # 0x67AF # 0x67B0 # 0x67B3 # 0x67B5 # 0x67B6 # 0x67B7 # 0x67B8 # 0x67C1 # 0x67C3 # 0x67C4 # 0x67CF # 0x67D0 # 0x67D1 # 0x67D2 # 0x67D3 # 0x67D4 # 0x67D8 # 0x67D9 # 0x67DA # 0x67DC # 0x67DD # 0x67DE # 0x67E0 # 0x67E2 # 0x67E5 # 0x67E9 # 0x67EC # 0x67EF # 0x67F0 # 0x67F1 # 0x67F3 # 0x67F4 # 0x67FD # 0x67FF # 0x6800 # 0x6805 # 0x6807 # 0x6808 # 0x6809 # 0x680A # 0x680B # 0x680C # 0x680E # 0x680F # 0x6811 # 0x6813 # 0x6816 # 0x6817 # 0x681D # 0x6821 # 0x6829 # 0x682A # 0x6832 # 0x6833 # 0x6837 # 0x6838 # 0x6839 # 0x683C # 0x683D # 0x683E # 0x6840 # 0x6841 # 0x6842 # 0x6843 # 0x6844 # 0x6845 # 0x6846 # 0x6848 # 0x6849 # 0x684A # 0x684C # 0x684E # 0x6850 # 0x6851 # 0x6853 # 0x6854 # 0x6855 # 0x6860 # 0x6861 # 0x6862 # 0x6863 # 0x6864 # 0x6865 # 0x6866 # 0x6867 # 0x6868 # 0x6869 # 0x686B # 0x6874 # 0x6876 # 0x6877 # 0x6881 # 0x6883 # 0x6885 # 0x6886 # 0x688F # 0x6893 # 0x6897 # 0x68A2 # 0x68A6 # 0x68A7 # 0x68A8 # 0x68AD # 0x68AF # 0x68B0 # 0x68B3 # 0x68B5 # 0x68C0 # 0x68C2 # 0x68C9 # 0x68CB # 0x68CD # 0x68D2 # 0x68D5 # 0x68D8 # 0x68DA # 0x68E0 # 0x68E3 # 0x68EE # 0x68F0 # 0x68F1 # 0x68F5 # 0x68F9 # 0x68FA # 0x68FC # 0x6901 # 0x6905 # 0x690B # 0x690D # 0x690E # 0x6910 # 0x6912 # 0x691F # 0x6920 # 0x6924 # 0x692D # 0x6930 # 0x6934 # 0x6939 # 0x693D # 0x693F # 0x6942 # 0x6954 # 0x6957 # 0x695A # 0x695D # 0x695E # 0x6960 # 0x6963 # 0x6966 # 0x696B # 0x696E # 0x6971 # 0x6977 # 0x6978 # 0x6979 # 0x697C # 0x6980 # 0x6982 # 0x6984 # 0x6986 # 0x6987 # 0x6988 # 0x6989 # 0x698D # 0x6994 # 0x6995 # 0x6998 # 0x699B # 0x699C # 0x69A7 # 0x69A8 # 0x69AB # 0x69AD # 0x69B1 # 0x69B4 # 0x69B7 # 0x69BB # 0x69C1 # 0x69CA # 0x69CC # 0x69CE # 0x69D0 # 0x69D4 # 0x69DB # 0x69DF # 0x69E0 # 0x69ED # 0x69F2 # 0x69FD # 0x69FF # 0x6A0A # 0x6A17 # 0x6A18 # 0x6A1F # 0x6A21 # 0x6A28 # 0x6A2A # 0x6A2F # 0x6A31 # 0x6A35 # 0x6A3D # 0x6A3E # 0x6A44 # 0x6A47 # 0x6A50 # 0x6A58 # 0x6A59 # 0x6A5B # 0x6A61 # 0x6A65 # 0x6A71 # 0x6A79 # 0x6A7C # 0x6A80 # 0x6A84 # 0x6A8E # 0x6A90 # 0x6A91 # 0x6A97 # 0x6AA0 # 0x6AA9 # 0x6AAB # 0x6AAC # 0x6B20 # 0x6B21 # 0x6B22 # 0x6B23 # 0x6B24 # 0x6B27 # 0x6B32 # 0x6B37 # 0x6B39 # 0x6B3A # 0x6B3E # 0x6B43 # 0x6B46 # 0x6B47 # 0x6B49 # 0x6B4C # 0x6B59 # 0x6B62 # 0x6B63 # 0x6B64 # 0x6B65 # 0x6B66 # 0x6B67 # 0x6B6A # 0x6B79 # 0x6B7B # 0x6B7C # 0x6B81 # 0x6B82 # 0x6B83 # 0x6B84 # 0x6B86 # 0x6B87 # 0x6B89 # 0x6B8A # 0x6B8B # 0x6B8D # 0x6B92 # 0x6B93 # 0x6B96 # 0x6B9A # 0x6B9B # 0x6BA1 # 0x6BAA # 0x6BB3 # 0x6BB4 # 0x6BB5 # 0x6BB7 # 0x6BBF # 0x6BC1 # 0x6BC2 # 0x6BC5 # 0x6BCB # 0x6BCD # 0x6BCF # 0x6BD2 # 0x6BD3 # 0x6BD4 # 0x6BD5 # 0x6BD6 # 0x6BD7 # 0x6BD9 # 0x6BDB # 0x6BE1 # 0x6BEA # 0x6BEB # 0x6BEF # 0x6BF3 # 0x6BF5 # 0x6BF9 # 0x6BFD # 0x6C05 # 0x6C06 # 0x6C07 # 0x6C0D # 0x6C0F # 0x6C10 # 0x6C11 # 0x6C13 # 0x6C14 # 0x6C15 # 0x6C16 # 0x6C18 # 0x6C19 # 0x6C1A # 0x6C1B # 0x6C1F # 0x6C21 # 0x6C22 # 0x6C24 # 0x6C26 # 0x6C27 # 0x6C28 # 0x6C29 # 0x6C2A # 0x6C2E # 0x6C2F # 0x6C30 # 0x6C32 # 0x6C34 # 0x6C35 # 0x6C38 # 0x6C3D # 0x6C40 # 0x6C41 # 0x6C42 # 0x6C46 # 0x6C47 # 0x6C49 # 0x6C4A # 0x6C50 # 0x6C54 # 0x6C55 # 0x6C57 # 0x6C5B # 0x6C5C # 0x6C5D # 0x6C5E # 0x6C5F # 0x6C60 # 0x6C61 # 0x6C64 # 0x6C68 # 0x6C69 # 0x6C6A # 0x6C70 # 0x6C72 # 0x6C74 # 0x6C76 # 0x6C79 # 0x6C7D # 0x6C7E # 0x6C81 # 0x6C82 # 0x6C83 # 0x6C85 # 0x6C86 # 0x6C88 # 0x6C89 # 0x6C8C # 0x6C8F # 0x6C90 # 0x6C93 # 0x6C94 # 0x6C99 # 0x6C9B # 0x6C9F # 0x6CA1 # 0x6CA3 # 0x6CA4 # 0x6CA5 # 0x6CA6 # 0x6CA7 # 0x6CA9 # 0x6CAA # 0x6CAB # 0x6CAD # 0x6CAE # 0x6CB1 # 0x6CB2 # 0x6CB3 # 0x6CB8 # 0x6CB9 # 0x6CBB # 0x6CBC # 0x6CBD # 0x6CBE # 0x6CBF # 0x6CC4 # 0x6CC5 # 0x6CC9 # 0x6CCA # 0x6CCC # 0x6CD0 # 0x6CD3 # 0x6CD4 # 0x6CD5 # 0x6CD6 # 0x6CD7 # 0x6CDB # 0x6CDE # 0x6CE0 # 0x6CE1 # 0x6CE2 # 0x6CE3 # 0x6CE5 # 0x6CE8 # 0x6CEA # 0x6CEB # 0x6CEE # 0x6CEF # 0x6CF0 # 0x6CF1 # 0x6CF3 # 0x6CF5 # 0x6CF6 # 0x6CF7 # 0x6CF8 # 0x6CFA # 0x6CFB # 0x6CFC # 0x6CFD # 0x6CFE # 0x6D01 # 0x6D04 # 0x6D07 # 0x6D0B # 0x6D0C # 0x6D0E # 0x6D12 # 0x6D17 # 0x6D19 # 0x6D1A # 0x6D1B # 0x6D1E # 0x6D25 # 0x6D27 # 0x6D2A # 0x6D2B # 0x6D2E # 0x6D31 # 0x6D32 # 0x6D33 # 0x6D35 # 0x6D39 # 0x6D3B # 0x6D3C # 0x6D3D # 0x6D3E # 0x6D41 # 0x6D43 # 0x6D45 # 0x6D46 # 0x6D47 # 0x6D48 # 0x6D4A # 0x6D4B # 0x6D4D # 0x6D4E # 0x6D4F # 0x6D51 # 0x6D52 # 0x6D53 # 0x6D54 # 0x6D59 # 0x6D5A # 0x6D5C # 0x6D5E # 0x6D60 # 0x6D63 # 0x6D66 # 0x6D69 # 0x6D6A # 0x6D6E # 0x6D6F # 0x6D74 # 0x6D77 # 0x6D78 # 0x6D7C # 0x6D82 # 0x6D85 # 0x6D88 # 0x6D89 # 0x6D8C # 0x6D8E # 0x6D91 # 0x6D93 # 0x6D94 # 0x6D95 # 0x6D9B # 0x6D9D # 0x6D9E # 0x6D9F # 0x6DA0 # 0x6DA1 # 0x6DA3 # 0x6DA4 # 0x6DA6 # 0x6DA7 # 0x6DA8 # 0x6DA9 # 0x6DAA # 0x6DAB # 0x6DAE # 0x6DAF # 0x6DB2 # 0x6DB5 # 0x6DB8 # 0x6DBF # 0x6DC0 # 0x6DC4 # 0x6DC5 # 0x6DC6 # 0x6DC7 # 0x6DCB # 0x6DCC # 0x6DD1 # 0x6DD6 # 0x6DD8 # 0x6DD9 # 0x6DDD # 0x6DDE # 0x6DE0 # 0x6DE1 # 0x6DE4 # 0x6DE6 # 0x6DEB # 0x6DEC # 0x6DEE # 0x6DF1 # 0x6DF3 # 0x6DF7 # 0x6DF9 # 0x6DFB # 0x6DFC # 0x6E05 # 0x6E0A # 0x6E0C # 0x6E0D # 0x6E0E # 0x6E10 # 0x6E11 # 0x6E14 # 0x6E16 # 0x6E17 # 0x6E1A # 0x6E1D # 0x6E20 # 0x6E21 # 0x6E23 # 0x6E24 # 0x6E25 # 0x6E29 # 0x6E2B # 0x6E2D # 0x6E2F # 0x6E32 # 0x6E34 # 0x6E38 # 0x6E3A # 0x6E43 # 0x6E44 # 0x6E4D # 0x6E4E # 0x6E53 # 0x6E54 # 0x6E56 # 0x6E58 # 0x6E5B # 0x6E5F # 0x6E6B # 0x6E6E # 0x6E7E # 0x6E7F # 0x6E83 # 0x6E85 # 0x6E86 # 0x6E89 # 0x6E8F # 0x6E90 # 0x6E98 # 0x6E9C # 0x6E9F # 0x6EA2 # 0x6EA5 # 0x6EA7 # 0x6EAA # 0x6EAF # 0x6EB1 # 0x6EB2 # 0x6EB4 # 0x6EB6 # 0x6EB7 # 0x6EBA # 0x6EBB # 0x6EBD # 0x6EC1 # 0x6EC2 # 0x6EC7 # 0x6ECB # 0x6ECF # 0x6ED1 # 0x6ED3 # 0x6ED4 # 0x6ED5 # 0x6ED7 # 0x6EDA # 0x6EDE # 0x6EDF # 0x6EE0 # 0x6EE1 # 0x6EE2 # 0x6EE4 # 0x6EE5 # 0x6EE6 # 0x6EE8 # 0x6EE9 # 0x6EF4 # 0x6EF9 # 0x6F02 # 0x6F06 # 0x6F09 # 0x6F0F # 0x6F13 # 0x6F14 # 0x6F15 # 0x6F20 # 0x6F24 # 0x6F29 # 0x6F2A # 0x6F2B # 0x6F2D # 0x6F2F # 0x6F31 # 0x6F33 # 0x6F36 # 0x6F3E # 0x6F46 # 0x6F47 # 0x6F4B # 0x6F4D # 0x6F58 # 0x6F5C # 0x6F5E # 0x6F62 # 0x6F66 # 0x6F6D # 0x6F6E # 0x6F72 # 0x6F74 # 0x6F78 # 0x6F7A # 0x6F7C # 0x6F84 # 0x6F88 # 0x6F89 # 0x6F8C # 0x6F8D # 0x6F8E # 0x6F9C # 0x6FA1 # 0x6FA7 # 0x6FB3 # 0x6FB6 # 0x6FB9 # 0x6FC0 # 0x6FC2 # 0x6FC9 # 0x6FD1 # 0x6FD2 # 0x6FDE # 0x6FE0 # 0x6FE1 # 0x6FEE # 0x6FEF # 0x7011 # 0x701A # 0x701B # 0x7023 # 0x7035 # 0x7039 # 0x704C # 0x704F # 0x705E # 0x706B # 0x706C # 0x706D # 0x706F # 0x7070 # 0x7075 # 0x7076 # 0x7078 # 0x707C # 0x707E # 0x707F # 0x7080 # 0x7085 # 0x7089 # 0x708A # 0x708E # 0x7092 # 0x7094 # 0x7095 # 0x7096 # 0x7099 # 0x709C # 0x709D # 0x70AB # 0x70AC # 0x70AD # 0x70AE # 0x70AF # 0x70B1 # 0x70B3 # 0x70B7 # 0x70B8 # 0x70B9 # 0x70BB # 0x70BC # 0x70BD # 0x70C0 # 0x70C1 # 0x70C2 # 0x70C3 # 0x70C8 # 0x70CA # 0x70D8 # 0x70D9 # 0x70DB # 0x70DF # 0x70E4 # 0x70E6 # 0x70E7 # 0x70E8 # 0x70E9 # 0x70EB # 0x70EC # 0x70ED # 0x70EF # 0x70F7 # 0x70F9 # 0x70FD # 0x7109 # 0x710A # 0x7110 # 0x7113 # 0x7115 # 0x7116 # 0x7118 # 0x7119 # 0x711A # 0x7126 # 0x712F # 0x7130 # 0x7131 # 0x7136 # 0x7145 # 0x714A # 0x714C # 0x714E # 0x715C # 0x715E # 0x7164 # 0x7166 # 0x7167 # 0x7168 # 0x716E # 0x7172 # 0x7173 # 0x7178 # 0x717A # 0x717D # 0x7184 # 0x718A # 0x718F # 0x7194 # 0x7198 # 0x7199 # 0x719F # 0x71A0 # 0x71A8 # 0x71AC # 0x71B3 # 0x71B5 # 0x71B9 # 0x71C3 # 0x71CE # 0x71D4 # 0x71D5 # 0x71E0 # 0x71E5 # 0x71E7 # 0x71EE # 0x71F9 # 0x7206 # 0x721D # 0x7228 # 0x722A # 0x722C # 0x7230 # 0x7231 # 0x7235 # 0x7236 # 0x7237 # 0x7238 # 0x7239 # 0x723B # 0x723D # 0x723F # 0x7247 # 0x7248 # 0x724C # 0x724D # 0x7252 # 0x7256 # 0x7259 # 0x725B # 0x725D # 0x725F # 0x7261 # 0x7262 # 0x7266 # 0x7267 # 0x7269 # 0x726E # 0x726F # 0x7272 # 0x7275 # 0x7279 # 0x727A # 0x727E # 0x727F # 0x7280 # 0x7281 # 0x7284 # 0x728A # 0x728B # 0x728D # 0x728F # 0x7292 # 0x729F # 0x72AC # 0x72AD # 0x72AF # 0x72B0 # 0x72B4 # 0x72B6 # 0x72B7 # 0x72B8 # 0x72B9 # 0x72C1 # 0x72C2 # 0x72C3 # 0x72C4 # 0x72C8 # 0x72CD # 0x72CE # 0x72D0 # 0x72D2 # 0x72D7 # 0x72D9 # 0x72DE # 0x72E0 # 0x72E1 # 0x72E8 # 0x72E9 # 0x72EC # 0x72ED # 0x72EE # 0x72EF # 0x72F0 # 0x72F1 # 0x72F2 # 0x72F3 # 0x72F4 # 0x72F7 # 0x72F8 # 0x72FA # 0x72FB # 0x72FC # 0x7301 # 0x7303 # 0x730A # 0x730E # 0x7313 # 0x7315 # 0x7316 # 0x7317 # 0x731B # 0x731C # 0x731D # 0x731E # 0x7321 # 0x7322 # 0x7325 # 0x7329 # 0x732A # 0x732B # 0x732C # 0x732E # 0x7331 # 0x7334 # 0x7337 # 0x7338 # 0x7339 # 0x733E # 0x733F # 0x734D # 0x7350 # 0x7352 # 0x7357 # 0x7360 # 0x736C # 0x736D # 0x736F # 0x737E # 0x7384 # 0x7387 # 0x7389 # 0x738B # 0x738E # 0x7391 # 0x7396 # 0x739B # 0x739F # 0x73A2 # 0x73A9 # 0x73AB # 0x73AE # 0x73AF # 0x73B0 # 0x73B2 # 0x73B3 # 0x73B7 # 0x73BA # 0x73BB # 0x73C0 # 0x73C2 # 0x73C8 # 0x73C9 # 0x73CA # 0x73CD # 0x73CF # 0x73D0 # 0x73D1 # 0x73D9 # 0x73DE # 0x73E0 # 0x73E5 # 0x73E7 # 0x73E9 # 0x73ED # 0x73F2 # 0x7403 # 0x7405 # 0x7406 # 0x7409 # 0x740A # 0x740F # 0x7410 # 0x741A # 0x741B # 0x7422 # 0x7425 # 0x7426 # 0x7428 # 0x742A # 0x742C # 0x742E # 0x7430 # 0x7433 # 0x7434 # 0x7435 # 0x7436 # 0x743C # 0x7441 # 0x7455 # 0x7457 # 0x7459 # 0x745A # 0x745B # 0x745C # 0x745E # 0x745F # 0x746D # 0x7470 # 0x7476 # 0x7477 # 0x747E # 0x7480 # 0x7481 # 0x7483 # 0x7487 # 0x748B # 0x748E # 0x7490 # 0x749C # 0x749E # 0x74A7 # 0x74A8 # 0x74A9 # 0x74BA # 0x74D2 # 0x74DC # 0x74DE # 0x74E0 # 0x74E2 # 0x74E3 # 0x74E4 # 0x74E6 # 0x74EE # 0x74EF # 0x74F4 # 0x74F6 # 0x74F7 # 0x74FF # 0x7504 # 0x750D # 0x750F # 0x7511 # 0x7513 # 0x7518 # 0x7519 # 0x751A # 0x751C # 0x751F # 0x7525 # 0x7528 # 0x7529 # 0x752B # 0x752C # 0x752D # 0x752F # 0x7530 # 0x7531 # 0x7532 # 0x7533 # 0x7535 # 0x7537 # 0x7538 # 0x753A # 0x753B # 0x753E # 0x7540 # 0x7545 # 0x7548 # 0x754B # 0x754C # 0x754E # 0x754F # 0x7554 # 0x7559 # 0x755A # 0x755B # 0x755C # 0x7565 # 0x7566 # 0x756A # 0x7572 # 0x7574 # 0x7578 # 0x7579 # 0x757F # 0x7583 # 0x7586 # 0x758B # 0x758F # 0x7591 # 0x7592 # 0x7594 # 0x7596 # 0x7597 # 0x7599 # 0x759A # 0x759D # 0x759F # 0x75A0 # 0x75A1 # 0x75A3 # 0x75A4 # 0x75A5 # 0x75AB # 0x75AC # 0x75AE # 0x75AF # 0x75B0 # 0x75B1 # 0x75B2 # 0x75B3 # 0x75B4 # 0x75B5 # 0x75B8 # 0x75B9 # 0x75BC # 0x75BD # 0x75BE # 0x75C2 # 0x75C3 # 0x75C4 # 0x75C5 # 0x75C7 # 0x75C8 # 0x75C9 # 0x75CA # 0x75CD # 0x75D2 # 0x75D4 # 0x75D5 # 0x75D6 # 0x75D8 # 0x75DB # 0x75DE # 0x75E2 # 0x75E3 # 0x75E4 # 0x75E6 # 0x75E7 # 0x75E8 # 0x75EA # 0x75EB # 0x75F0 # 0x75F1 # 0x75F4 # 0x75F9 # 0x75FC # 0x75FF # 0x7600 # 0x7601 # 0x7603 # 0x7605 # 0x760A # 0x760C # 0x7610 # 0x7615 # 0x7617 # 0x7618 # 0x7619 # 0x761B # 0x761F # 0x7620 # 0x7622 # 0x7624 # 0x7625 # 0x7626 # 0x7629 # 0x762A # 0x762B # 0x762D # 0x7630 # 0x7633 # 0x7634 # 0x7635 # 0x7638 # 0x763C # 0x763E # 0x763F # 0x7640 # 0x7643 # 0x764C # 0x764D # 0x7654 # 0x7656 # 0x765C # 0x765E # 0x7663 # 0x766B # 0x766F # 0x7678 # 0x767B # 0x767D # 0x767E # 0x7682 # 0x7684 # 0x7686 # 0x7687 # 0x7688 # 0x768B # 0x768E # 0x7691 # 0x7693 # 0x7696 # 0x7699 # 0x76A4 # 0x76AE # 0x76B1 # 0x76B2 # 0x76B4 # 0x76BF # 0x76C2 # 0x76C5 # 0x76C6 # 0x76C8 # 0x76CA # 0x76CD # 0x76CE # 0x76CF # 0x76D0 # 0x76D1 # 0x76D2 # 0x76D4 # 0x76D6 # 0x76D7 # 0x76D8 # 0x76DB # 0x76DF # 0x76E5 # 0x76EE # 0x76EF # 0x76F1 # 0x76F2 # 0x76F4 # 0x76F8 # 0x76F9 # 0x76FC # 0x76FE # 0x7701 # 0x7704 # 0x7707 # 0x7708 # 0x7709 # 0x770B # 0x770D # 0x7719 # 0x771A # 0x771F # 0x7720 # 0x7722 # 0x7726 # 0x7728 # 0x7729 # 0x772D # 0x772F # 0x7735 # 0x7736 # 0x7737 # 0x7738 # 0x773A # 0x773C # 0x7740 # 0x7741 # 0x7743 # 0x7747 # 0x7750 # 0x7751 # 0x775A # 0x775B # 0x7761 # 0x7762 # 0x7763 # 0x7765 # 0x7766 # 0x7768 # 0x776B # 0x776C # 0x7779 # 0x777D # 0x777E # 0x777F # 0x7780 # 0x7784 # 0x7785 # 0x778C # 0x778D # 0x778E # 0x7791 # 0x7792 # 0x779F # 0x77A0 # 0x77A2 # 0x77A5 # 0x77A7 # 0x77A9 # 0x77AA # 0x77AC # 0x77B0 # 0x77B3 # 0x77B5 # 0x77BB # 0x77BD # 0x77BF # 0x77CD # 0x77D7 # 0x77DB # 0x77DC # 0x77E2 # 0x77E3 # 0x77E5 # 0x77E7 # 0x77E9 # 0x77EB # 0x77EC # 0x77ED # 0x77EE # 0x77F3 # 0x77F6 # 0x77F8 # 0x77FD # 0x77FE # 0x77FF # 0x7800 # 0x7801 # 0x7802 # 0x7809 # 0x780C # 0x780D # 0x7811 # 0x7812 # 0x7814 # 0x7816 # 0x7817 # 0x7818 # 0x781A # 0x781C # 0x781D # 0x781F # 0x7823 # 0x7825 # 0x7826 # 0x7827 # 0x7829 # 0x782C # 0x782D # 0x7830 # 0x7834 # 0x7837 # 0x7838 # 0x7839 # 0x783A # 0x783B # 0x783C # 0x783E # 0x7840 # 0x7845 # 0x7847 # 0x784C # 0x784E # 0x7850 # 0x7852 # 0x7855 # 0x7856 # 0x7857 # 0x785D # 0x786A # 0x786B # 0x786C # 0x786D # 0x786E # 0x7877 # 0x787C # 0x7887 # 0x7889 # 0x788C # 0x788D # 0x788E # 0x7891 # 0x7893 # 0x7897 # 0x7898 # 0x789A # 0x789B # 0x789C # 0x789F # 0x78A1 # 0x78A3 # 0x78A5 # 0x78A7 # 0x78B0 # 0x78B1 # 0x78B2 # 0x78B3 # 0x78B4 # 0x78B9 # 0x78BE # 0x78C1 # 0x78C5 # 0x78C9 # 0x78CA # 0x78CB # 0x78D0 # 0x78D4 # 0x78D5 # 0x78D9 # 0x78E8 # 0x78EC # 0x78F2 # 0x78F4 # 0x78F7 # 0x78FA # 0x7901 # 0x7905 # 0x7913 # 0x791E # 0x7924 # 0x7934 # 0x793A # 0x793B # 0x793C # 0x793E # 0x7940 # 0x7941 # 0x7946 # 0x7948 # 0x7949 # 0x7953 # 0x7956 # 0x7957 # 0x795A # 0x795B # 0x795C # 0x795D # 0x795E # 0x795F # 0x7960 # 0x7962 # 0x7965 # 0x7967 # 0x7968 # 0x796D # 0x796F # 0x7977 # 0x7978 # 0x797A # 0x7980 # 0x7981 # 0x7984 # 0x7985 # 0x798A # 0x798F # 0x799A # 0x79A7 # 0x79B3 # 0x79B9 # 0x79BA # 0x79BB # 0x79BD # 0x79BE # 0x79C0 # 0x79C1 # 0x79C3 # 0x79C6 # 0x79C9 # 0x79CB # 0x79CD # 0x79D1 # 0x79D2 # 0x79D5 # 0x79D8 # 0x79DF # 0x79E3 # 0x79E4 # 0x79E6 # 0x79E7 # 0x79E9 # 0x79EB # 0x79ED # 0x79EF # 0x79F0 # 0x79F8 # 0x79FB # 0x79FD # 0x7A00 # 0x7A02 # 0x7A03 # 0x7A06 # 0x7A0B # 0x7A0D # 0x7A0E # 0x7A14 # 0x7A17 # 0x7A1A # 0x7A1E # 0x7A20 # 0x7A23 # 0x7A33 # 0x7A37 # 0x7A39 # 0x7A3B # 0x7A3C # 0x7A3D # 0x7A3F # 0x7A46 # 0x7A51 # 0x7A57 # 0x7A70 # 0x7A74 # 0x7A76 # 0x7A77 # 0x7A78 # 0x7A79 # 0x7A7A # 0x7A7F # 0x7A80 # 0x7A81 # 0x7A83 # 0x7A84 # 0x7A86 # 0x7A88 # 0x7A8D # 0x7A91 # 0x7A92 # 0x7A95 # 0x7A96 # 0x7A97 # 0x7A98 # 0x7A9C # 0x7A9D # 0x7A9F # 0x7AA0 # 0x7AA5 # 0x7AA6 # 0x7AA8 # 0x7AAC # 0x7AAD # 0x7AB3 # 0x7ABF # 0x7ACB # 0x7AD6 # 0x7AD9 # 0x7ADE # 0x7ADF # 0x7AE0 # 0x7AE3 # 0x7AE5 # 0x7AE6 # 0x7AED # 0x7AEF # 0x7AF9 # 0x7AFA # 0x7AFD # 0x7AFF # 0x7B03 # 0x7B04 # 0x7B06 # 0x7B08 # 0x7B0A # 0x7B0B # 0x7B0F # 0x7B11 # 0x7B14 # 0x7B15 # 0x7B19 # 0x7B1B # 0x7B1E # 0x7B20 # 0x7B24 # 0x7B25 # 0x7B26 # 0x7B28 # 0x7B2A # 0x7B2B # 0x7B2C # 0x7B2E # 0x7B31 # 0x7B33 # 0x7B38 # 0x7B3A # 0x7B3C # 0x7B3E # 0x7B45 # 0x7B47 # 0x7B49 # 0x7B4B # 0x7B4C # 0x7B4F # 0x7B50 # 0x7B51 # 0x7B52 # 0x7B54 # 0x7B56 # 0x7B58 # 0x7B5A # 0x7B5B # 0x7B5D # 0x7B60 # 0x7B62 # 0x7B6E # 0x7B71 # 0x7B72 # 0x7B75 # 0x7B77 # 0x7B79 # 0x7B7B # 0x7B7E # 0x7B80 # 0x7B85 # 0x7B8D # 0x7B90 # 0x7B94 # 0x7B95 # 0x7B97 # 0x7B9C # 0x7B9D # 0x7BA1 # 0x7BA2 # 0x7BA6 # 0x7BA7 # 0x7BA8 # 0x7BA9 # 0x7BAA # 0x7BAB # 0x7BAC # 0x7BAD # 0x7BB1 # 0x7BB4 # 0x7BB8 # 0x7BC1 # 0x7BC6 # 0x7BC7 # 0x7BCC # 0x7BD1 # 0x7BD3 # 0x7BD9 # 0x7BDA # 0x7BDD # 0x7BE1 # 0x7BE5 # 0x7BE6 # 0x7BEA # 0x7BEE # 0x7BF1 # 0x7BF7 # 0x7BFC # 0x7BFE # 0x7C07 # 0x7C0B # 0x7C0C # 0x7C0F # 0x7C16 # 0x7C1F # 0x7C26 # 0x7C27 # 0x7C2A # 0x7C38 # 0x7C3F # 0x7C40 # 0x7C41 # 0x7C4D # 0x7C73 # 0x7C74 # 0x7C7B # 0x7C7C # 0x7C7D # 0x7C89 # 0x7C91 # 0x7C92 # 0x7C95 # 0x7C97 # 0x7C98 # 0x7C9C # 0x7C9D # 0x7C9E # 0x7C9F # 0x7CA2 # 0x7CA4 # 0x7CA5 # 0x7CAA # 0x7CAE # 0x7CB1 # 0x7CB2 # 0x7CB3 # 0x7CB9 # 0x7CBC # 0x7CBD # 0x7CBE # 0x7CC1 # 0x7CC5 # 0x7CC7 # 0x7CC8 # 0x7CCA # 0x7CCC # 0x7CCD # 0x7CD5 # 0x7CD6 # 0x7CD7 # 0x7CD9 # 0x7CDC # 0x7CDF # 0x7CE0 # 0x7CE8 # 0x7CEF # 0x7CF8 # 0x7CFB # 0x7D0A # 0x7D20 # 0x7D22 # 0x7D27 # 0x7D2B # 0x7D2F # 0x7D6E # 0x7D77 # 0x7DA6 # 0x7DAE # 0x7E3B # 0x7E41 # 0x7E47 # 0x7E82 # 0x7E9B # 0x7E9F # 0x7EA0 # 0x7EA1 # 0x7EA2 # 0x7EA3 # 0x7EA4 # 0x7EA5 # 0x7EA6 # 0x7EA7 # 0x7EA8 # 0x7EA9 # 0x7EAA # 0x7EAB # 0x7EAC # 0x7EAD # 0x7EAF # 0x7EB0 # 0x7EB1 # 0x7EB2 # 0x7EB3 # 0x7EB5 # 0x7EB6 # 0x7EB7 # 0x7EB8 # 0x7EB9 # 0x7EBA # 0x7EBD # 0x7EBE # 0x7EBF # 0x7EC0 # 0x7EC1 # 0x7EC2 # 0x7EC3 # 0x7EC4 # 0x7EC5 # 0x7EC6 # 0x7EC7 # 0x7EC8 # 0x7EC9 # 0x7ECA # 0x7ECB # 0x7ECC # 0x7ECD # 0x7ECE # 0x7ECF # 0x7ED0 # 0x7ED1 # 0x7ED2 # 0x7ED3 # 0x7ED4 # 0x7ED5 # 0x7ED7 # 0x7ED8 # 0x7ED9 # 0x7EDA # 0x7EDB # 0x7EDC # 0x7EDD # 0x7EDE # 0x7EDF # 0x7EE0 # 0x7EE1 # 0x7EE2 # 0x7EE3 # 0x7EE5 # 0x7EE6 # 0x7EE7 # 0x7EE8 # 0x7EE9 # 0x7EEA # 0x7EEB # 0x7EED # 0x7EEE # 0x7EEF # 0x7EF0 # 0x7EF1 # 0x7EF2 # 0x7EF3 # 0x7EF4 # 0x7EF5 # 0x7EF6 # 0x7EF7 # 0x7EF8 # 0x7EFA # 0x7EFB # 0x7EFC # 0x7EFD # 0x7EFE # 0x7EFF # 0x7F00 # 0x7F01 # 0x7F02 # 0x7F03 # 0x7F04 # 0x7F05 # 0x7F06 # 0x7F07 # 0x7F08 # 0x7F09 # 0x7F0B # 0x7F0C # 0x7F0D # 0x7F0E # 0x7F0F # 0x7F11 # 0x7F12 # 0x7F13 # 0x7F14 # 0x7F15 # 0x7F16 # 0x7F17 # 0x7F18 # 0x7F19 # 0x7F1A # 0x7F1B # 0x7F1C # 0x7F1D # 0x7F1F # 0x7F20 # 0x7F21 # 0x7F22 # 0x7F23 # 0x7F24 # 0x7F25 # 0x7F26 # 0x7F27 # 0x7F28 # 0x7F29 # 0x7F2A # 0x7F2B # 0x7F2C # 0x7F2D # 0x7F2E # 0x7F2F # 0x7F30 # 0x7F31 # 0x7F32 # 0x7F33 # 0x7F34 # 0x7F35 # 0x7F36 # 0x7F38 # 0x7F3A # 0x7F42 # 0x7F44 # 0x7F45 # 0x7F50 # 0x7F51 # 0x7F54 # 0x7F55 # 0x7F57 # 0x7F58 # 0x7F5A # 0x7F5F # 0x7F61 # 0x7F62 # 0x7F68 # 0x7F69 # 0x7F6A # 0x7F6E # 0x7F71 # 0x7F72 # 0x7F74 # 0x7F79 # 0x7F7E # 0x7F81 # 0x7F8A # 0x7F8C # 0x7F8E # 0x7F94 # 0x7F9A # 0x7F9D # 0x7F9E # 0x7F9F # 0x7FA1 # 0x7FA4 # 0x7FA7 # 0x7FAF # 0x7FB0 # 0x7FB2 # 0x7FB8 # 0x7FB9 # 0x7FBC # 0x7FBD # 0x7FBF # 0x7FC1 # 0x7FC5 # 0x7FCA # 0x7FCC # 0x7FCE # 0x7FD4 # 0x7FD5 # 0x7FD8 # 0x7FDF # 0x7FE0 # 0x7FE1 # 0x7FE5 # 0x7FE6 # 0x7FE9 # 0x7FEE # 0x7FF0 # 0x7FF1 # 0x7FF3 # 0x7FFB # 0x7FFC # 0x8000 # 0x8001 # 0x8003 # 0x8004 # 0x8005 # 0x8006 # 0x800B # 0x800C # 0x800D # 0x8010 # 0x8012 # 0x8014 # 0x8015 # 0x8016 # 0x8017 # 0x8018 # 0x8019 # 0x801C # 0x8020 # 0x8022 # 0x8025 # 0x8026 # 0x8027 # 0x8028 # 0x8029 # 0x802A # 0x8031 # 0x8033 # 0x8035 # 0x8036 # 0x8037 # 0x8038 # 0x803B # 0x803D # 0x803F # 0x8042 # 0x8043 # 0x8046 # 0x804A # 0x804B # 0x804C # 0x804D # 0x8052 # 0x8054 # 0x8058 # 0x805A # 0x8069 # 0x806A # 0x8071 # 0x807F # 0x8080 # 0x8083 # 0x8084 # 0x8086 # 0x8087 # 0x8089 # 0x808B # 0x808C # 0x8093 # 0x8096 # 0x8098 # 0x809A # 0x809B # 0x809C # 0x809D # 0x809F # 0x80A0 # 0x80A1 # 0x80A2 # 0x80A4 # 0x80A5 # 0x80A9 # 0x80AA # 0x80AB # 0x80AD # 0x80AE # 0x80AF # 0x80B1 # 0x80B2 # 0x80B4 # 0x80B7 # 0x80BA # 0x80BC # 0x80BD # 0x80BE # 0x80BF # 0x80C0 # 0x80C1 # 0x80C2 # 0x80C3 # 0x80C4 # 0x80C6 # 0x80CC # 0x80CD # 0x80CE # 0x80D6 # 0x80D7 # 0x80D9 # 0x80DA # 0x80DB # 0x80DC # 0x80DD # 0x80DE # 0x80E1 # 0x80E4 # 0x80E5 # 0x80E7 # 0x80E8 # 0x80E9 # 0x80EA # 0x80EB # 0x80EC # 0x80ED # 0x80EF # 0x80F0 # 0x80F1 # 0x80F2 # 0x80F3 # 0x80F4 # 0x80F6 # 0x80F8 # 0x80FA # 0x80FC # 0x80FD # 0x8102 # 0x8106 # 0x8109 # 0x810A # 0x810D # 0x810E # 0x810F # 0x8110 # 0x8111 # 0x8112 # 0x8113 # 0x8114 # 0x8116 # 0x8118 # 0x811A # 0x811E # 0x812C # 0x812F # 0x8131 # 0x8132 # 0x8136 # 0x8138 # 0x813E # 0x8146 # 0x8148 # 0x814A # 0x814B # 0x814C # 0x8150 # 0x8151 # 0x8153 # 0x8154 # 0x8155 # 0x8159 # 0x815A # 0x8160 # 0x8165 # 0x8167 # 0x8169 # 0x816D # 0x816E # 0x8170 # 0x8171 # 0x8174 # 0x8179 # 0x817A # 0x817B # 0x817C # 0x817D # 0x817E # 0x817F # 0x8180 # 0x8182 # 0x8188 # 0x818A # 0x818F # 0x8191 # 0x8198 # 0x819B # 0x819C # 0x819D # 0x81A3 # 0x81A6 # 0x81A8 # 0x81AA # 0x81B3 # 0x81BA # 0x81BB # 0x81C0 # 0x81C1 # 0x81C2 # 0x81C3 # 0x81C6 # 0x81CA # 0x81CC # 0x81E3 # 0x81E7 # 0x81EA # 0x81EC # 0x81ED # 0x81F3 # 0x81F4 # 0x81FB # 0x81FC # 0x81FE # 0x8200 # 0x8201 # 0x8202 # 0x8204 # 0x8205 # 0x8206 # 0x820C # 0x820D # 0x8210 # 0x8212 # 0x8214 # 0x821B # 0x821C # 0x821E # 0x821F # 0x8221 # 0x8222 # 0x8223 # 0x8228 # 0x822A # 0x822B # 0x822C # 0x822D # 0x822F # 0x8230 # 0x8231 # 0x8233 # 0x8234 # 0x8235 # 0x8236 # 0x8237 # 0x8238 # 0x8239 # 0x823B # 0x823E # 0x8244 # 0x8247 # 0x8249 # 0x824B # 0x824F # 0x8258 # 0x825A # 0x825F # 0x8268 # 0x826E # 0x826F # 0x8270 # 0x8272 # 0x8273 # 0x8274 # 0x8279 # 0x827A # 0x827D # 0x827E # 0x827F # 0x8282 # 0x8284 # 0x8288 # 0x828A # 0x828B # 0x828D # 0x828E # 0x828F # 0x8291 # 0x8292 # 0x8297 # 0x8298 # 0x8299 # 0x829C # 0x829D # 0x829F # 0x82A1 # 0x82A4 # 0x82A5 # 0x82A6 # 0x82A8 # 0x82A9 # 0x82AA # 0x82AB # 0x82AC # 0x82AD # 0x82AE # 0x82AF # 0x82B0 # 0x82B1 # 0x82B3 # 0x82B4 # 0x82B7 # 0x82B8 # 0x82B9 # 0x82BD # 0x82BE # 0x82C1 # 0x82C4 # 0x82C7 # 0x82C8 # 0x82CA # 0x82CB # 0x82CC # 0x82CD # 0x82CE # 0x82CF # 0x82D1 # 0x82D2 # 0x82D3 # 0x82D4 # 0x82D5 # 0x82D7 # 0x82D8 # 0x82DB # 0x82DC # 0x82DE # 0x82DF # 0x82E0 # 0x82E1 # 0x82E3 # 0x82E4 # 0x82E5 # 0x82E6 # 0x82EB # 0x82EF # 0x82F1 # 0x82F4 # 0x82F7 # 0x82F9 # 0x82FB # 0x8301 # 0x8302 # 0x8303 # 0x8304 # 0x8305 # 0x8306 # 0x8307 # 0x8308 # 0x8309 # 0x830C # 0x830E # 0x830F # 0x8311 # 0x8314 # 0x8315 # 0x8317 # 0x831A # 0x831B # 0x831C # 0x8327 # 0x8328 # 0x832B # 0x832C # 0x832D # 0x832F # 0x8331 # 0x8333 # 0x8334 # 0x8335 # 0x8336 # 0x8338 # 0x8339 # 0x833A # 0x833C # 0x8340 # 0x8343 # 0x8346 # 0x8347 # 0x8349 # 0x834F # 0x8350 # 0x8351 # 0x8352 # 0x8354 # 0x835A # 0x835B # 0x835C # 0x835E # 0x835F # 0x8360 # 0x8361 # 0x8363 # 0x8364 # 0x8365 # 0x8366 # 0x8367 # 0x8368 # 0x8369 # 0x836A # 0x836B # 0x836C # 0x836D # 0x836E # 0x836F # 0x8377 # 0x8378 # 0x837B # 0x837C # 0x837D # 0x8385 # 0x8386 # 0x8389 # 0x838E # 0x8392 # 0x8393 # 0x8398 # 0x839B # 0x839C # 0x839E # 0x83A0 # 0x83A8 # 0x83A9 # 0x83AA # 0x83AB # 0x83B0 # 0x83B1 # 0x83B2 # 0x83B3 # 0x83B4 # 0x83B6 # 0x83B7 # 0x83B8 # 0x83B9 # 0x83BA # 0x83BC # 0x83BD # 0x83C0 # 0x83C1 # 0x83C5 # 0x83C7 # 0x83CA # 0x83CC # 0x83CF # 0x83D4 # 0x83D6 # 0x83D8 # 0x83DC # 0x83DD # 0x83DF # 0x83E0 # 0x83E1 # 0x83E5 # 0x83E9 # 0x83EA # 0x83F0 # 0x83F1 # 0x83F2 # 0x83F8 # 0x83F9 # 0x83FD # 0x8401 # 0x8403 # 0x8404 # 0x8406 # 0x840B # 0x840C # 0x840D # 0x840E # 0x840F # 0x8411 # 0x8418 # 0x841C # 0x841D # 0x8424 # 0x8425 # 0x8426 # 0x8427 # 0x8428 # 0x8431 # 0x8438 # 0x843C # 0x843D # 0x8446 # 0x8451 # 0x8457 # 0x8459 # 0x845A # 0x845B # 0x845C # 0x8461 # 0x8463 # 0x8469 # 0x846B # 0x846C # 0x846D # 0x8471 # 0x8473 # 0x8475 # 0x8476 # 0x8478 # 0x847A # 0x8482 # 0x8487 # 0x8488 # 0x8489 # 0x848B # 0x848C # 0x848E # 0x8497 # 0x8499 # 0x849C # 0x84A1 # 0x84AF # 0x84B2 # 0x84B4 # 0x84B8 # 0x84B9 # 0x84BA # 0x84BD # 0x84BF # 0x84C1 # 0x84C4 # 0x84C9 # 0x84CA # 0x84CD # 0x84D0 # 0x84D1 # 0x84D3 # 0x84D6 # 0x84DD # 0x84DF # 0x84E0 # 0x84E3 # 0x84E5 # 0x84E6 # 0x84EC # 0x84F0 # 0x84FC # 0x84FF # 0x850C # 0x8511 # 0x8513 # 0x8517 # 0x851A # 0x851F # 0x8521 # 0x852B # 0x852C # 0x8537 # 0x8538 # 0x8539 # 0x853A # 0x853B # 0x853C # 0x853D # 0x8543 # 0x8548 # 0x8549 # 0x854A # 0x8556 # 0x8559 # 0x855E # 0x8564 # 0x8568 # 0x8572 # 0x8574 # 0x8579 # 0x857A # 0x857B # 0x857E # 0x8584 # 0x8585 # 0x8587 # 0x858F # 0x859B # 0x859C # 0x85A4 # 0x85A8 # 0x85AA # 0x85AE # 0x85AF # 0x85B0 # 0x85B7 # 0x85B9 # 0x85C1 # 0x85C9 # 0x85CF # 0x85D0 # 0x85D3 # 0x85D5 # 0x85DC # 0x85E4 # 0x85E9 # 0x85FB # 0x85FF # 0x8605 # 0x8611 # 0x8616 # 0x8627 # 0x8629 # 0x8638 # 0x863C # 0x864D # 0x864E # 0x864F # 0x8650 # 0x8651 # 0x8654 # 0x865A # 0x865E # 0x8662 # 0x866B # 0x866C # 0x866E # 0x8671 # 0x8679 # 0x867A # 0x867B # 0x867C # 0x867D # 0x867E # 0x867F # 0x8680 # 0x8681 # 0x8682 # 0x868A # 0x868B # 0x868C # 0x868D # 0x8693 # 0x8695 # 0x869C # 0x869D # 0x86A3 # 0x86A4 # 0x86A7 # 0x86A8 # 0x86A9 # 0x86AA # 0x86AC # 0x86AF # 0x86B0 # 0x86B1 # 0x86B4 # 0x86B5 # 0x86B6 # 0x86BA # 0x86C0 # 0x86C4 # 0x86C6 # 0x86C7 # 0x86C9 # 0x86CA # 0x86CB # 0x86CE # 0x86CF # 0x86D0 # 0x86D1 # 0x86D4 # 0x86D8 # 0x86D9 # 0x86DB # 0x86DE # 0x86DF # 0x86E4 # 0x86E9 # 0x86ED # 0x86EE # 0x86F0 # 0x86F1 # 0x86F2 # 0x86F3 # 0x86F4 # 0x86F8 # 0x86F9 # 0x86FE # 0x8700 # 0x8702 # 0x8703 # 0x8707 # 0x8708 # 0x8709 # 0x870A # 0x870D # 0x8712 # 0x8713 # 0x8715 # 0x8717 # 0x8718 # 0x871A # 0x871C # 0x871E # 0x8721 # 0x8722 # 0x8723 # 0x8725 # 0x8729 # 0x872E # 0x8731 # 0x8734 # 0x8737 # 0x873B # 0x873E # 0x873F # 0x8747 # 0x8748 # 0x8749 # 0x874C # 0x874E # 0x8753 # 0x8757 # 0x8759 # 0x8760 # 0x8763 # 0x8764 # 0x8765 # 0x876E # 0x8770 # 0x8774 # 0x8776 # 0x877B # 0x877C # 0x877D # 0x877E # 0x8782 # 0x8783 # 0x8785 # 0x8788 # 0x878B # 0x878D # 0x8793 # 0x8797 # 0x879F # 0x87A8 # 0x87AB # 0x87AC # 0x87AD # 0x87AF # 0x87B3 # 0x87B5 # 0x87BA # 0x87BD # 0x87C0 # 0x87C6 # 0x87CA # 0x87CB # 0x87D1 # 0x87D2 # 0x87D3 # 0x87DB # 0x87E0 # 0x87E5 # 0x87EA # 0x87EE # 0x87F9 # 0x87FE # 0x8803 # 0x880A # 0x8813 # 0x8815 # 0x8816 # 0x881B # 0x8821 # 0x8822 # 0x8832 # 0x8839 # 0x883C # 0x8840 # 0x8844 # 0x8845 # 0x884C # 0x884D # 0x8854 # 0x8857 # 0x8859 # 0x8861 # 0x8862 # 0x8863 # 0x8864 # 0x8865 # 0x8868 # 0x8869 # 0x886B # 0x886C # 0x886E # 0x8870 # 0x8872 # 0x8877 # 0x887D # 0x887E # 0x887F # 0x8881 # 0x8882 # 0x8884 # 0x8885 # 0x8888 # 0x888B # 0x888D # 0x8892 # 0x8896 # 0x889C # 0x88A2 # 0x88A4 # 0x88AB # 0x88AD # 0x88B1 # 0x88B7 # 0x88BC # 0x88C1 # 0x88C2 # 0x88C5 # 0x88C6 # 0x88C9 # 0x88CE # 0x88D2 # 0x88D4 # 0x88D5 # 0x88D8 # 0x88D9 # 0x88DF # 0x88E2 # 0x88E3 # 0x88E4 # 0x88E5 # 0x88E8 # 0x88F0 # 0x88F1 # 0x88F3 # 0x88F4 # 0x88F8 # 0x88F9 # 0x88FC # 0x88FE # 0x8902 # 0x890A # 0x8910 # 0x8912 # 0x8913 # 0x8919 # 0x891A # 0x891B # 0x8921 # 0x8925 # 0x892A # 0x892B # 0x8930 # 0x8934 # 0x8936 # 0x8941 # 0x8944 # 0x895E # 0x895F # 0x8966 # 0x897B # 0x897F # 0x8981 # 0x8983 # 0x8986 # 0x89C1 # 0x89C2 # 0x89C4 # 0x89C5 # 0x89C6 # 0x89C7 # 0x89C8 # 0x89C9 # 0x89CA # 0x89CB # 0x89CC # 0x89CE # 0x89CF # 0x89D0 # 0x89D1 # 0x89D2 # 0x89D6 # 0x89DA # 0x89DC # 0x89DE # 0x89E3 # 0x89E5 # 0x89E6 # 0x89EB # 0x89EF # 0x89F3 # 0x8A00 # 0x8A07 # 0x8A3E # 0x8A48 # 0x8A79 # 0x8A89 # 0x8A8A # 0x8A93 # 0x8B07 # 0x8B26 # 0x8B66 # 0x8B6C # 0x8BA0 # 0x8BA1 # 0x8BA2 # 0x8BA3 # 0x8BA4 # 0x8BA5 # 0x8BA6 # 0x8BA7 # 0x8BA8 # 0x8BA9 # 0x8BAA # 0x8BAB # 0x8BAD # 0x8BAE # 0x8BAF # 0x8BB0 # 0x8BB2 # 0x8BB3 # 0x8BB4 # 0x8BB5 # 0x8BB6 # 0x8BB7 # 0x8BB8 # 0x8BB9 # 0x8BBA # 0x8BBC # 0x8BBD # 0x8BBE # 0x8BBF # 0x8BC0 # 0x8BC1 # 0x8BC2 # 0x8BC3 # 0x8BC4 # 0x8BC5 # 0x8BC6 # 0x8BC8 # 0x8BC9 # 0x8BCA # 0x8BCB # 0x8BCC # 0x8BCD # 0x8BCE # 0x8BCF # 0x8BD1 # 0x8BD2 # 0x8BD3 # 0x8BD4 # 0x8BD5 # 0x8BD6 # 0x8BD7 # 0x8BD8 # 0x8BD9 # 0x8BDA # 0x8BDB # 0x8BDC # 0x8BDD # 0x8BDE # 0x8BDF # 0x8BE0 # 0x8BE1 # 0x8BE2 # 0x8BE3 # 0x8BE4 # 0x8BE5 # 0x8BE6 # 0x8BE7 # 0x8BE8 # 0x8BE9 # 0x8BEB # 0x8BEC # 0x8BED # 0x8BEE # 0x8BEF # 0x8BF0 # 0x8BF1 # 0x8BF2 # 0x8BF3 # 0x8BF4 # 0x8BF5 # 0x8BF6 # 0x8BF7 # 0x8BF8 # 0x8BF9 # 0x8BFA # 0x8BFB # 0x8BFC # 0x8BFD # 0x8BFE # 0x8BFF # 0x8C00 # 0x8C01 # 0x8C02 # 0x8C03 # 0x8C04 # 0x8C05 # 0x8C06 # 0x8C07 # 0x8C08 # 0x8C0A # 0x8C0B # 0x8C0C # 0x8C0D # 0x8C0E # 0x8C0F # 0x8C10 # 0x8C11 # 0x8C12 # 0x8C13 # 0x8C14 # 0x8C15 # 0x8C16 # 0x8C17 # 0x8C18 # 0x8C19 # 0x8C1A # 0x8C1B # 0x8C1C # 0x8C1D # 0x8C1F # 0x8C20 # 0x8C21 # 0x8C22 # 0x8C23 # 0x8C24 # 0x8C25 # 0x8C26 # 0x8C27 # 0x8C28 # 0x8C29 # 0x8C2A # 0x8C2B # 0x8C2C # 0x8C2D # 0x8C2E # 0x8C2F # 0x8C30 # 0x8C31 # 0x8C32 # 0x8C33 # 0x8C34 # 0x8C35 # 0x8C36 # 0x8C37 # 0x8C41 # 0x8C46 # 0x8C47 # 0x8C49 # 0x8C4C # 0x8C55 # 0x8C5A # 0x8C61 # 0x8C62 # 0x8C6A # 0x8C6B # 0x8C73 # 0x8C78 # 0x8C79 # 0x8C7A # 0x8C82 # 0x8C85 # 0x8C89 # 0x8C8A # 0x8C8C # 0x8C94 # 0x8C98 # 0x8D1D # 0x8D1E # 0x8D1F # 0x8D21 # 0x8D22 # 0x8D23 # 0x8D24 # 0x8D25 # 0x8D26 # 0x8D27 # 0x8D28 # 0x8D29 # 0x8D2A # 0x8D2B # 0x8D2C # 0x8D2D # 0x8D2E # 0x8D2F # 0x8D30 # 0x8D31 # 0x8D32 # 0x8D33 # 0x8D34 # 0x8D35 # 0x8D36 # 0x8D37 # 0x8D38 # 0x8D39 # 0x8D3A # 0x8D3B # 0x8D3C # 0x8D3D # 0x8D3E # 0x8D3F # 0x8D40 # 0x8D41 # 0x8D42 # 0x8D43 # 0x8D44 # 0x8D45 # 0x8D46 # 0x8D47 # 0x8D48 # 0x8D49 # 0x8D4A # 0x8D4B # 0x8D4C # 0x8D4D # 0x8D4E # 0x8D4F # 0x8D50 # 0x8D53 # 0x8D54 # 0x8D55 # 0x8D56 # 0x8D58 # 0x8D59 # 0x8D5A # 0x8D5B # 0x8D5C # 0x8D5D # 0x8D5E # 0x8D60 # 0x8D61 # 0x8D62 # 0x8D63 # 0x8D64 # 0x8D66 # 0x8D67 # 0x8D6B # 0x8D6D # 0x8D70 # 0x8D73 # 0x8D74 # 0x8D75 # 0x8D76 # 0x8D77 # 0x8D81 # 0x8D84 # 0x8D85 # 0x8D8A # 0x8D8B # 0x8D91 # 0x8D94 # 0x8D9F # 0x8DA3 # 0x8DB1 # 0x8DB3 # 0x8DB4 # 0x8DB5 # 0x8DB8 # 0x8DBA # 0x8DBC # 0x8DBE # 0x8DBF # 0x8DC3 # 0x8DC4 # 0x8DC6 # 0x8DCB # 0x8DCC # 0x8DCE # 0x8DCF # 0x8DD1 # 0x8DD6 # 0x8DD7 # 0x8DDA # 0x8DDB # 0x8DDD # 0x8DDE # 0x8DDF # 0x8DE3 # 0x8DE4 # 0x8DE8 # 0x8DEA # 0x8DEB # 0x8DEC # 0x8DEF # 0x8DF3 # 0x8DF5 # 0x8DF7 # 0x8DF8 # 0x8DF9 # 0x8DFA # 0x8DFB # 0x8DFD # 0x8E05 # 0x8E09 # 0x8E0A # 0x8E0C # 0x8E0F # 0x8E14 # 0x8E1D # 0x8E1E # 0x8E1F # 0x8E22 # 0x8E23 # 0x8E29 # 0x8E2A # 0x8E2C # 0x8E2E # 0x8E2F # 0x8E31 # 0x8E35 # 0x8E39 # 0x8E3A # 0x8E3D # 0x8E40 # 0x8E41 # 0x8E42 # 0x8E44 # 0x8E47 # 0x8E48 # 0x8E49 # 0x8E4A # 0x8E4B # 0x8E51 # 0x8E52 # 0x8E59 # 0x8E66 # 0x8E69 # 0x8E6C # 0x8E6D # 0x8E6F # 0x8E70 # 0x8E72 # 0x8E74 # 0x8E76 # 0x8E7C # 0x8E7F # 0x8E81 # 0x8E85 # 0x8E87 # 0x8E8F # 0x8E90 # 0x8E94 # 0x8E9C # 0x8E9E # 0x8EAB # 0x8EAC # 0x8EAF # 0x8EB2 # 0x8EBA # 0x8ECE # 0x8F66 # 0x8F67 # 0x8F68 # 0x8F69 # 0x8F6B # 0x8F6C # 0x8F6D # 0x8F6E # 0x8F6F # 0x8F70 # 0x8F71 # 0x8F72 # 0x8F73 # 0x8F74 # 0x8F75 # 0x8F76 # 0x8F77 # 0x8F78 # 0x8F79 # 0x8F7A # 0x8F7B # 0x8F7C # 0x8F7D # 0x8F7E # 0x8F7F # 0x8F81 # 0x8F82 # 0x8F83 # 0x8F84 # 0x8F85 # 0x8F86 # 0x8F87 # 0x8F88 # 0x8F89 # 0x8F8A # 0x8F8B # 0x8F8D # 0x8F8E # 0x8F8F # 0x8F90 # 0x8F91 # 0x8F93 # 0x8F94 # 0x8F95 # 0x8F96 # 0x8F97 # 0x8F98 # 0x8F99 # 0x8F9A # 0x8F9B # 0x8F9C # 0x8F9E # 0x8F9F # 0x8FA3 # 0x8FA8 # 0x8FA9 # 0x8FAB # 0x8FB0 # 0x8FB1 # 0x8FB6 # 0x8FB9 # 0x8FBD # 0x8FBE # 0x8FC1 # 0x8FC2 # 0x8FC4 # 0x8FC5 # 0x8FC7 # 0x8FC8 # 0x8FCE # 0x8FD0 # 0x8FD1 # 0x8FD3 # 0x8FD4 # 0x8FD5 # 0x8FD8 # 0x8FD9 # 0x8FDB # 0x8FDC # 0x8FDD # 0x8FDE # 0x8FDF # 0x8FE2 # 0x8FE4 # 0x8FE5 # 0x8FE6 # 0x8FE8 # 0x8FE9 # 0x8FEA # 0x8FEB # 0x8FED # 0x8FEE # 0x8FF0 # 0x8FF3 # 0x8FF7 # 0x8FF8 # 0x8FF9 # 0x8FFD # 0x9000 # 0x9001 # 0x9002 # 0x9003 # 0x9004 # 0x9005 # 0x9006 # 0x9009 # 0x900A # 0x900B # 0x900D # 0x900F # 0x9010 # 0x9011 # 0x9012 # 0x9014 # 0x9016 # 0x9017 # 0x901A # 0x901B # 0x901D # 0x901E # 0x901F # 0x9020 # 0x9021 # 0x9022 # 0x9026 # 0x902D # 0x902E # 0x902F # 0x9035 # 0x9036 # 0x9038 # 0x903B # 0x903C # 0x903E # 0x9041 # 0x9042 # 0x9044 # 0x9047 # 0x904D # 0x904F # 0x9050 # 0x9051 # 0x9052 # 0x9053 # 0x9057 # 0x9058 # 0x905B # 0x9062 # 0x9063 # 0x9065 # 0x9068 # 0x906D # 0x906E # 0x9074 # 0x9075 # 0x907D # 0x907F # 0x9080 # 0x9082 # 0x9083 # 0x9088 # 0x908B # 0x9091 # 0x9093 # 0x9095 # 0x9097 # 0x9099 # 0x909B # 0x909D # 0x90A1 # 0x90A2 # 0x90A3 # 0x90A6 # 0x90AA # 0x90AC # 0x90AE # 0x90AF # 0x90B0 # 0x90B1 # 0x90B3 # 0x90B4 # 0x90B5 # 0x90B6 # 0x90B8 # 0x90B9 # 0x90BA # 0x90BB # 0x90BE # 0x90C1 # 0x90C4 # 0x90C5 # 0x90C7 # 0x90CA # 0x90CE # 0x90CF # 0x90D0 # 0x90D1 # 0x90D3 # 0x90D7 # 0x90DB # 0x90DC # 0x90DD # 0x90E1 # 0x90E2 # 0x90E6 # 0x90E7 # 0x90E8 # 0x90EB # 0x90ED # 0x90EF # 0x90F4 # 0x90F8 # 0x90FD # 0x90FE # 0x9102 # 0x9104 # 0x9119 # 0x911E # 0x9122 # 0x9123 # 0x912F # 0x9131 # 0x9139 # 0x9143 # 0x9146 # 0x9149 # 0x914A # 0x914B # 0x914C # 0x914D # 0x914E # 0x914F # 0x9150 # 0x9152 # 0x9157 # 0x915A # 0x915D # 0x915E # 0x9161 # 0x9162 # 0x9163 # 0x9164 # 0x9165 # 0x9169 # 0x916A # 0x916C # 0x916E # 0x916F # 0x9170 # 0x9171 # 0x9172 # 0x9174 # 0x9175 # 0x9176 # 0x9177 # 0x9178 # 0x9179 # 0x917D # 0x917E # 0x917F # 0x9185 # 0x9187 # 0x9189 # 0x918B # 0x918C # 0x918D # 0x9190 # 0x9191 # 0x9192 # 0x919A # 0x919B # 0x91A2 # 0x91A3 # 0x91AA # 0x91AD # 0x91AE # 0x91AF # 0x91B4 # 0x91B5 # 0x91BA # 0x91C7 # 0x91C9 # 0x91CA # 0x91CC # 0x91CD # 0x91CE # 0x91CF # 0x91D1 # 0x91DC # 0x9274 # 0x928E # 0x92AE # 0x92C8 # 0x933E # 0x936A # 0x938F # 0x93CA # 0x93D6 # 0x943E # 0x946B # 0x9485 # 0x9486 # 0x9487 # 0x9488 # 0x9489 # 0x948A # 0x948B # 0x948C # 0x948D # 0x948E # 0x948F # 0x9490 # 0x9492 # 0x9493 # 0x9494 # 0x9495 # 0x9497 # 0x9499 # 0x949A # 0x949B # 0x949C # 0x949D # 0x949E # 0x949F # 0x94A0 # 0x94A1 # 0x94A2 # 0x94A3 # 0x94A4 # 0x94A5 # 0x94A6 # 0x94A7 # 0x94A8 # 0x94A9 # 0x94AA # 0x94AB # 0x94AC # 0x94AD # 0x94AE # 0x94AF # 0x94B0 # 0x94B1 # 0x94B2 # 0x94B3 # 0x94B4 # 0x94B5 # 0x94B6 # 0x94B7 # 0x94B8 # 0x94B9 # 0x94BA # 0x94BB # 0x94BC # 0x94BD # 0x94BE # 0x94BF # 0x94C0 # 0x94C1 # 0x94C2 # 0x94C3 # 0x94C4 # 0x94C5 # 0x94C6 # 0x94C8 # 0x94C9 # 0x94CA # 0x94CB # 0x94CC # 0x94CD # 0x94CE # 0x94D0 # 0x94D1 # 0x94D2 # 0x94D5 # 0x94D6 # 0x94D7 # 0x94D8 # 0x94D9 # 0x94DB # 0x94DC # 0x94DD # 0x94DE # 0x94DF # 0x94E0 # 0x94E1 # 0x94E2 # 0x94E3 # 0x94E4 # 0x94E5 # 0x94E7 # 0x94E8 # 0x94E9 # 0x94EA # 0x94EB # 0x94EC # 0x94ED # 0x94EE # 0x94EF # 0x94F0 # 0x94F1 # 0x94F2 # 0x94F3 # 0x94F4 # 0x94F5 # 0x94F6 # 0x94F7 # 0x94F8 # 0x94F9 # 0x94FA # 0x94FC # 0x94FD # 0x94FE # 0x94FF # 0x9500 # 0x9501 # 0x9502 # 0x9503 # 0x9504 # 0x9505 # 0x9506 # 0x9507 # 0x9508 # 0x9509 # 0x950A # 0x950B # 0x950C # 0x950D # 0x950E # 0x950F # 0x9510 # 0x9511 # 0x9512 # 0x9513 # 0x9514 # 0x9515 # 0x9516 # 0x9517 # 0x9518 # 0x9519 # 0x951A # 0x951B # 0x951D # 0x951E # 0x951F # 0x9521 # 0x9522 # 0x9523 # 0x9524 # 0x9525 # 0x9526 # 0x9528 # 0x9529 # 0x952A # 0x952B # 0x952C # 0x952D # 0x952E # 0x952F # 0x9530 # 0x9531 # 0x9532 # 0x9534 # 0x9535 # 0x9536 # 0x9537 # 0x9538 # 0x9539 # 0x953A # 0x953B # 0x953C # 0x953E # 0x953F # 0x9540 # 0x9541 # 0x9542 # 0x9544 # 0x9545 # 0x9546 # 0x9547 # 0x9549 # 0x954A # 0x954C # 0x954D # 0x954E # 0x954F # 0x9550 # 0x9551 # 0x9552 # 0x9553 # 0x9554 # 0x9556 # 0x9557 # 0x9558 # 0x9559 # 0x955B # 0x955C # 0x955D # 0x955E # 0x955F # 0x9561 # 0x9562 # 0x9563 # 0x9564 # 0x9565 # 0x9566 # 0x9567 # 0x9568 # 0x9569 # 0x956A # 0x956B # 0x956C # 0x956D # 0x956F # 0x9570 # 0x9571 # 0x9572 # 0x9573 # 0x9576 # 0x957F # 0x95E8 # 0x95E9 # 0x95EA # 0x95EB # 0x95ED # 0x95EE # 0x95EF # 0x95F0 # 0x95F1 # 0x95F2 # 0x95F3 # 0x95F4 # 0x95F5 # 0x95F6 # 0x95F7 # 0x95F8 # 0x95F9 # 0x95FA # 0x95FB # 0x95FC # 0x95FD # 0x95FE # 0x9600 # 0x9601 # 0x9602 # 0x9603 # 0x9604 # 0x9605 # 0x9606 # 0x9608 # 0x9609 # 0x960A # 0x960B # 0x960C # 0x960D # 0x960E # 0x960F # 0x9610 # 0x9611 # 0x9612 # 0x9614 # 0x9615 # 0x9616 # 0x9617 # 0x9619 # 0x961A # 0x961C # 0x961D # 0x961F # 0x9621 # 0x9622 # 0x962A # 0x962E # 0x9631 # 0x9632 # 0x9633 # 0x9634 # 0x9635 # 0x9636 # 0x963B # 0x963C # 0x963D # 0x963F # 0x9640 # 0x9642 # 0x9644 # 0x9645 # 0x9646 # 0x9647 # 0x9648 # 0x9649 # 0x964B # 0x964C # 0x964D # 0x9650 # 0x9654 # 0x9655 # 0x965B # 0x965F # 0x9661 # 0x9662 # 0x9664 # 0x9667 # 0x9668 # 0x9669 # 0x966A # 0x966C # 0x9672 # 0x9674 # 0x9675 # 0x9676 # 0x9677 # 0x9685 # 0x9686 # 0x9688 # 0x968B # 0x968D # 0x968F # 0x9690 # 0x9694 # 0x9697 # 0x9698 # 0x9699 # 0x969C # 0x96A7 # 0x96B0 # 0x96B3 # 0x96B6 # 0x96B9 # 0x96BC # 0x96BD # 0x96BE # 0x96C0 # 0x96C1 # 0x96C4 # 0x96C5 # 0x96C6 # 0x96C7 # 0x96C9 # 0x96CC # 0x96CD # 0x96CE # 0x96CF # 0x96D2 # 0x96D5 # 0x96E0 # 0x96E8 # 0x96E9 # 0x96EA # 0x96EF # 0x96F3 # 0x96F6 # 0x96F7 # 0x96F9 # 0x96FE # 0x9700 # 0x9701 # 0x9704 # 0x9706 # 0x9707 # 0x9708 # 0x9709 # 0x970D # 0x970E # 0x970F # 0x9713 # 0x9716 # 0x971C # 0x971E # 0x972A # 0x972D # 0x9730 # 0x9732 # 0x9738 # 0x9739 # 0x973E # 0x9752 # 0x9753 # 0x9756 # 0x9759 # 0x975B # 0x975E # 0x9760 # 0x9761 # 0x9762 # 0x9765 # 0x9769 # 0x9773 # 0x9774 # 0x9776 # 0x977C # 0x9785 # 0x978B # 0x978D # 0x9791 # 0x9792 # 0x9794 # 0x9798 # 0x97A0 # 0x97A3 # 0x97AB # 0x97AD # 0x97AF # 0x97B2 # 0x97B4 # 0x97E6 # 0x97E7 # 0x97E9 # 0x97EA # 0x97EB # 0x97EC # 0x97ED # 0x97F3 # 0x97F5 # 0x97F6 # 0x9875 # 0x9876 # 0x9877 # 0x9878 # 0x9879 # 0x987A # 0x987B # 0x987C # 0x987D # 0x987E # 0x987F # 0x9880 # 0x9881 # 0x9882 # 0x9883 # 0x9884 # 0x9885 # 0x9886 # 0x9887 # 0x9888 # 0x9889 # 0x988A # 0x988C # 0x988D # 0x988F # 0x9890 # 0x9891 # 0x9893 # 0x9894 # 0x9896 # 0x9897 # 0x9898 # 0x989A # 0x989B # 0x989C # 0x989D # 0x989E # 0x989F # 0x98A0 # 0x98A1 # 0x98A2 # 0x98A4 # 0x98A5 # 0x98A6 # 0x98A7 # 0x98CE # 0x98D1 # 0x98D2 # 0x98D3 # 0x98D5 # 0x98D8 # 0x98D9 # 0x98DA # 0x98DE # 0x98DF # 0x98E7 # 0x98E8 # 0x990D # 0x9910 # 0x992E # 0x9954 # 0x9955 # 0x9963 # 0x9965 # 0x9967 # 0x9968 # 0x9969 # 0x996A # 0x996B # 0x996C # 0x996D # 0x996E # 0x996F # 0x9970 # 0x9971 # 0x9972 # 0x9974 # 0x9975 # 0x9976 # 0x9977 # 0x997A # 0x997C # 0x997D # 0x997F # 0x9980 # 0x9981 # 0x9984 # 0x9985 # 0x9986 # 0x9987 # 0x9988 # 0x998A # 0x998B # 0x998D # 0x998F # 0x9990 # 0x9991 # 0x9992 # 0x9993 # 0x9994 # 0x9995 # 0x9996 # 0x9997 # 0x9998 # 0x9999 # 0x99A5 # 0x99A8 # 0x9A6C # 0x9A6D # 0x9A6E # 0x9A6F # 0x9A70 # 0x9A71 # 0x9A73 # 0x9A74 # 0x9A75 # 0x9A76 # 0x9A77 # 0x9A78 # 0x9A79 # 0x9A7A # 0x9A7B # 0x9A7C # 0x9A7D # 0x9A7E # 0x9A7F # 0x9A80 # 0x9A81 # 0x9A82 # 0x9A84 # 0x9A85 # 0x9A86 # 0x9A87 # 0x9A88 # 0x9A8A # 0x9A8B # 0x9A8C # 0x9A8F # 0x9A90 # 0x9A91 # 0x9A92 # 0x9A93 # 0x9A96 # 0x9A97 # 0x9A98 # 0x9A9A # 0x9A9B # 0x9A9C # 0x9A9D # 0x9A9E # 0x9A9F # 0x9AA0 # 0x9AA1 # 0x9AA2 # 0x9AA3 # 0x9AA4 # 0x9AA5 # 0x9AA7 # 0x9AA8 # 0x9AB0 # 0x9AB1 # 0x9AB6 # 0x9AB7 # 0x9AB8 # 0x9ABA # 0x9ABC # 0x9AC0 # 0x9AC1 # 0x9AC2 # 0x9AC5 # 0x9ACB # 0x9ACC # 0x9AD1 # 0x9AD3 # 0x9AD8 # 0x9ADF # 0x9AE1 # 0x9AE6 # 0x9AEB # 0x9AED # 0x9AEF # 0x9AF9 # 0x9AFB # 0x9B03 # 0x9B08 # 0x9B0F # 0x9B13 # 0x9B1F # 0x9B23 # 0x9B2F # 0x9B32 # 0x9B3B # 0x9B3C # 0x9B41 # 0x9B42 # 0x9B43 # 0x9B44 # 0x9B45 # 0x9B47 # 0x9B48 # 0x9B49 # 0x9B4D # 0x9B4F # 0x9B51 # 0x9B54 # 0x9C7C # 0x9C7F # 0x9C81 # 0x9C82 # 0x9C85 # 0x9C86 # 0x9C87 # 0x9C88 # 0x9C8B # 0x9C8D # 0x9C8E # 0x9C90 # 0x9C91 # 0x9C92 # 0x9C94 # 0x9C95 # 0x9C9A # 0x9C9B # 0x9C9C # 0x9C9E # 0x9C9F # 0x9CA0 # 0x9CA1 # 0x9CA2 # 0x9CA3 # 0x9CA4 # 0x9CA5 # 0x9CA6 # 0x9CA7 # 0x9CA8 # 0x9CA9 # 0x9CAB # 0x9CAD # 0x9CAE # 0x9CB0 # 0x9CB1 # 0x9CB2 # 0x9CB3 # 0x9CB4 # 0x9CB5 # 0x9CB6 # 0x9CB7 # 0x9CB8 # 0x9CBA # 0x9CBB # 0x9CBC # 0x9CBD # 0x9CC3 # 0x9CC4 # 0x9CC5 # 0x9CC6 # 0x9CC7 # 0x9CCA # 0x9CCB # 0x9CCC # 0x9CCD # 0x9CCE # 0x9CCF # 0x9CD0 # 0x9CD3 # 0x9CD4 # 0x9CD5 # 0x9CD6 # 0x9CD7 # 0x9CD8 # 0x9CD9 # 0x9CDC # 0x9CDD # 0x9CDE # 0x9CDF # 0x9CE2 # 0x9E1F # 0x9E20 # 0x9E21 # 0x9E22 # 0x9E23 # 0x9E25 # 0x9E26 # 0x9E28 # 0x9E29 # 0x9E2A # 0x9E2B # 0x9E2C # 0x9E2D # 0x9E2F # 0x9E31 # 0x9E32 # 0x9E33 # 0x9E35 # 0x9E36 # 0x9E37 # 0x9E38 # 0x9E39 # 0x9E3A # 0x9E3D # 0x9E3E # 0x9E3F # 0x9E41 # 0x9E42 # 0x9E43 # 0x9E44 # 0x9E45 # 0x9E46 # 0x9E47 # 0x9E48 # 0x9E49 # 0x9E4A # 0x9E4B # 0x9E4C # 0x9E4E # 0x9E4F # 0x9E51 # 0x9E55 # 0x9E57 # 0x9E58 # 0x9E5A # 0x9E5B # 0x9E5C # 0x9E5E # 0x9E63 # 0x9E64 # 0x9E66 # 0x9E67 # 0x9E68 # 0x9E69 # 0x9E6A # 0x9E6B # 0x9E6C # 0x9E6D # 0x9E70 # 0x9E71 # 0x9E73 # 0x9E7E # 0x9E7F # 0x9E82 # 0x9E87 # 0x9E88 # 0x9E8B # 0x9E92 # 0x9E93 # 0x9E9D # 0x9E9F # 0x9EA6 # 0x9EB4 # 0x9EB8 # 0x9EBB # 0x9EBD # 0x9EBE # 0x9EC4 # 0x9EC9 # 0x9ECD # 0x9ECE # 0x9ECF # 0x9ED1 # 0x9ED4 # 0x9ED8 # 0x9EDB # 0x9EDC # 0x9EDD # 0x9EDF # 0x9EE0 # 0x9EE2 # 0x9EE5 # 0x9EE7 # 0x9EE9 # 0x9EEA # 0x9EEF # 0x9EF9 # 0x9EFB # 0x9EFC # 0x9EFE # 0x9F0B # 0x9F0D # 0x9F0E # 0x9F10 # 0x9F13 # 0x9F17 # 0x9F19 # 0x9F20 # 0x9F22 # 0x9F2C # 0x9F2F # 0x9F37 # 0x9F39 # 0x9F3B # 0x9F3D # 0x9F3E # 0x9F44 # 0x9F50 # 0x9F51 # 0x9F7F # 0x9F80 # 0x9F83 # 0x9F84 # 0x9F85 # 0x9F86 # 0x9F87 # 0x9F88 # 0x9F89 # 0x9F8A # 0x9F8B # 0x9F8C # 0x9F99 # 0x9F9A # 0x9F9B # 0x9F9F # 0x9FA0 # fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/zh_hk.orth000066400000000000000000000163271503113465200247130ustar00rootroot00000000000000# # fontconfig/fc-lang/zh_hk.orth # # Copyright © 2002 Keith Packard # Copyright © 2014 Abel Cheung # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Chinese Hong Kong Supplementary Character Set (ZH-HK) # # This list is a concatenation of: # (1) Most frequently used HKSCS characters accounting for ~99.75% usage in: # i. Around 11000 crawled UTF-8 Hong Kong web pages in # http://html5.org/temp/hk-data.tar.gz # ii. Database dump of main content in Cantonese Wikipedia dated 20131228: # http://dumps.wikimedia.org/zh_yuewiki/ # (2) Word recommendation list from a local linguist: # http://founder.acgvlyric.org/iu/doku.php/%E9%80%A0%E5%AD%97:%E5%B8%B8%E7%94%A8%E9%A6%99%E6%B8%AF%E5%A4%96%E5%AD%97%E8%A1%A8 # Level 1-5 characters are taken, excluding non-HKSCS chars. # 3007 344C 3464 3473 347A 347D 347E 3493 3496 34A5 34BC 34C1 34C8 34DF 34E4 34FB 3506 353E 3551 3561 356D 3570 3572 3577 3578 3584 3597 35A1 35A5 35AD 35BF 35C1 35C5 35C7 35CA 35CE 35D2 35D6 35DB 35F1 35F2 35F3 35FB 35FE 3609 361A 3623 362D 3635 3639 3647 3648 3649 364E 365F 367A 3681 36A5 36AA 36AC 36B0 36B1 36B5 36B9 36BC 36C1 36C3 36C4 36C5 36D3 36D4 36D6 36DD 36E5 36E6 36F5 3703 3708 370A 370D 371C 3723 3725 3730 3732 3733 373A 3740 3743 3762 376F 3797 37A0 37B9 37BE 37F2 37F8 37FB 380F 3819 3820 382D 3836 3838 3863 38A0 38C3 38CC 38D1 38FA 3908 3914 3927 3932 393F 394D 3963 3980 3989 398A 3992 399B 39A1 39A4 39B8 39DC 39E2 39E5 39EC 39F8 39FB 39FE 3A01 3A03 3A06 3A17 3A18 3A29 3A2A 3A34 3A4B 3A52 3A57 3A5C 3A5E 3A66 3A67 3A97 3AAB 3ABD 3ADE 3AF0 3AF2 3AFB 3B0E 3B19 3B22 3B2B 3B39 3B42 3B58 3B60 3B71 3B72 3B7B 3B7C 3B80 3B96 3B99 3BA1 3BBE 3BC2 3BC4 3BD7 3BDD 3BEC 3BF2 3BF3 3C0D 3C11 3C15 3C54 3CCB 3CCD 3CD1 3CD6 3CDC 3CEB 3D13 3D1D 3D32 3D46 3D4C 3D4E 3D51 3D5F 3D62 3D69 3D6A 3D6F 3D75 3D7D 3D85 3D8F 3D91 3DA5 3DAD 3DB4 3DBF 3DC6 3DC7 3DCD 3DD3 3DDB 3DEB 3DF3 3DF7 3DFC 3E40 3E43 3E48 3E55 3E74 3EA8 3EA9 3EAA 3EAD 3EB1 3EB8 3EBF 3EC2 3ECA 3ECC 3ED1 3ED6 3ED7 3EDE 3EE1 3EE7 3EEB 3EF0 3EFA 3EFF 3F04 3F0E 3F58 3F59 3F63 3F93 3FC0 3FD7 3FDC 3FE5 3FED 3FF9 3FFA 4004 4039 4045 4053 4057 4062 4065 406A 406F 40BB 40BF 40C8 40D8 40DF 40FA 4103 4104 4109 410E 4132 4167 416C 416E 417F 4190 41B2 41CF 41DB 41EF 41F9 4211 4240 4260 426A 427A 4294 42A2 42B5 42B9 42BC 42F4 42FB 42FC 432B 436E 4397 43BA 43C1 43D9 43DF 43ED 43F2 4401 4402 4413 447A 448F 449F 44A0 44B0 44B7 44DD 44DF 44E4 44EA 44F4 4503 4504 4509 4516 4527 452E 4533 453B 453F 4543 4551 4552 4555 4562 456A 4577 4585 45E9 4603 4606 460F 4615 4617 465B 467A 46CF 46D0 46F5 4718 477C 47D5 47ED 47F4 4800 480B 4871 489B 48AD 48D0 48DD 48ED 48FA 4906 491E 492A 492D 4935 493C 493E 4945 4951 4953 4965 496A 4972 4989 49A7 49DF 49E5 4A0F 4A1D 4A24 4A35 4A96 4AB4 4AB8 4AD1 4AE4 4AFF 4B19 4B2C 4B37 4B6F 4B70 4B72 4B7B 4B7E 4B8E 4B90 4B93 4B96 4B97 4B9D 4BBD 4BBE 4BC0 4C04 4C07 4C0E 4C3B 4C3E 4C5B 4C6D 4C77 4C7B 4C7D 4C81 4CAE 4CB0 4CCD 4CE1 4CED 4D09 4D10 4D34 4D77 4D91 4D9C 4E04 4E21 4E2A 4E5A 4E5B 4E6A 4E78 4E80 4E85 4E98 4ECE 4EEE 4F37 4FE5 4FF9 5008 503B 50CD 510D 510E 516A 5186 519A 51A7 51A8 51B2 51B3 51B4 51B5 51C9 51ED 51F4 520B 5226 5227 5234 523C 5257 528F 52B5 52B9 52C5 52D1 5338 5374 537D 5393 53A0 53A6 53A8 53C1 53CC 53D9 53E0 53F6 53FE 5413 5414 5416 5421 544C 544D 546A 546D 548F 5493 5494 5497 54A4 54B2 54CB 54CD 54E3 5502 5513 551E 5525 5553 555D 5569 556B 5571 5572 5579 5586 5590 55A9 55B0 55BA 55BC 55D7 55DE 55EC 55F0 55F1 55FB 5605 5611 561E 5622 5623 5625 562D 5643 564D 564F 5652 5654 565D 5689 5692 569F 56A1 56A4 56B1 56B9 56BF 56D6 56FD 5742 577A 57C8 57D7 57DE 5803 5826 583A 5840 5869 5872 5873 58AA 58BB 58E0 58F2 58F3 58FB 590A 5975 599F 59AC 59C9 59EB 59F8 5A2B 5A7E 5AF2 5AFA 5B46 5B6D 5B9D 5B9F 5BC3 5BDB 5BF3 5C05 5C4A 5C5E 5CEF 5D8B 5DF5 5E7A 5E83 5ED0 5EF8 5EF9 5EFB 5EFC 5F0C 5F0D 5F0E 5F5C 5FA7 5FDF 6031 6075 609E 60A4 60D7 60E3 6159 6164 617D 6187 61D0 6239 629D 62A6 62C3 62C5 62D5 6331 6379 63B9 63D1 63DE 63E6 63F8 63FC 63FE 6407 6432 643A 647C 648D 6491 64B4 64DD 64E1 64E7 651E 6530 654D 6586 6589 65E3 6630 6644 664B 6667 666B 6673 668E 66F1 6725 6736 6761 6767 67A0 67B1 6803 6804 681E 6822 6898 68B6 6900 6936 6961 6973 698A 69B2 6A0B 6A2B 6AC8 6B35 6B6F 6B74 6B7A 6BE1 6C37 6C39 6C5A 6CA2 6CEA 6D5C 6D72 6D96 6E15 6E29 6E7C 6ED9 6EDB 6EDD 6F16 6F56 6F81 6FBE 6FF6 701E 702C 7081 7089 70B9 70DF 70F1 7105 712B 7140 7145 714A 7151 7171 71F6 7215 7240 7282 7287 732A 732E 7341 7374 73C9 73CF 7439 743C 7448 7460 7505 7534 753B 754A 7551 7553 7560 7567 758D 758E 75B1 75B4 7602 763B 764E 7666 7667 7676 767A 770C 771E 7740 7758 7778 777A 7793 77B9 77CB 7808 7881 788D 78B1 78B8 78D7 7906 792E 7958 7962 7991 79C4 7A93 7AB0 7AC8 7AC9 7ADC 7ADD 7AEA 7B0B 7B39 7B6F 7C15 7CA6 7CA7 7CAE 7CC9 7CCD 7CED 7CF9 7CFC 7D25 7D5D 7D89 7DAB 7DB3 7DCD 7DCF 7DDC 7E6E 7F47 7F49 7F4E 7F78 7F97 7FA3 8061 80B6 80BD 80C6 8107 8117 8137 81A5 81B6 81EF 8218 8226 8276 82A6 82AA 82F7 8318 83D3 8418 8420 8471 84AD 84BD 84E2 8503 8534 8570 8602 862F 86EF 8786 87CE 8804 882D 8846 885E 889C 88C7 88CF 8947 8987 8994 89A5 89A7 8A94 8B4C 8B81 8B83 8B90 8CCD 8CDB 8D03 8D0B 8E0E 8E2A 8E2D 8E4F 8E7E 8E80 8EAD 8EDA 8EE2 8EF2 8F2D 8FB5 8FBA 8FBB 8FBC 8FF9 9033 9056 9061 90A8 9176 9208 920E 922A 9244 9255 925D 9262 926E 92B9 92BE 9307 9340 9345 9348 9369 9384 9385 9387 93AD 93BF 93F0 9404 9426 9427 9454 945B 9465 9599 95A2 95AA 9696 96A3 9721 9751 976D 97EE 97F5 9834 98B7 98C8 98E0 991C 9938 994A 994D 9962 99C5 99E1 9A10 9B2A 9B2D 9B81 9B8B 9B8E 9BED 9BF1 9BFF 9C02 9C0C 9C2F 9C35 9C3A 9C45 9C5D 9C72 9D34 9D50 9D5E 9D93 9DC0 9DC4 9DC9 9DD4 9E0A 9E0C 9E90 9E95 9E96 9EAA 9EAB 9EAF 9EBF 9F08 9F26 9F62 9F8E 200CA 201A4 201A9 20325 20341 2070E 20779 20C41 20C53 20C65 20C78 20C96 20CB5 20CCF 20D31 20D71 20D7E 20D7F 20D9C 20DA7 20E04 20E09 20E4C 20E73 20E76 20E7A 20E9D 20EA2 20ED7 20EF9 20F2D 20F2E 20F3B 20F4C 20FB4 20FEA 21014 2105C 2106F 21075 21076 2107B 210C1 210D3 2113D 21145 2114F 2197C 21A34 21C2A 21DF9 220C7 221A1 22ACF 22B43 22BCA 22C51 22C55 22C62 22CB2 22CC2 22D4C 22D67 22D8D 22DEE 22F74 23231 23595 236BA 23CB7 23E89 23F80 244D3 24DB8 24DEA 24EA7 2512B 25148 2517E 25535 25E49 26258 266DA 267CC 2688A 269F2 269FA 27285 27574 27657 27735 2775E 2789D 2797A 279A0 27A3E 27A59 27D73 28024 280BD 2815D 28207 282E2 2836D 289C0 289DC 28A0F 28B46 28B4E 28CCA 28CCD 28CD2 28D99 28EE7 294E5 29720 298D1 29A4D 29D98 2A632 2A65B fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/zh_mo.orth000066400000000000000000000026571503113465200247250ustar00rootroot00000000000000# # fontconfig/fc-lang/zh_mo.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Chinese in Macau (ZH-MO) # # from Abel Cheung: # # a majority of Macau people speak Cantonese too, and also uses additional # traditional Chinese chars from Hong Kong (there are already some place names # that can't be represented in just chars used in Taiwan). # include zh_hk.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/zh_sg.orth000066400000000000000000000023441503113465200247140ustar00rootroot00000000000000# # fontconfig/fc-lang/zh_sg.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Chinese in Singapore (ZH-SG) # # Just use GB2312 as for ZH-CN include zh_cn.orth fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/zh_tw.orth000066400000000000000000002657101503113465200247450ustar00rootroot00000000000000# # fontconfig/fc-lang/zh_tw.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Chinese (traditional) ZH-TW # # Made by trimming the Big5 -> unicode mapping down to just Chinese glyphs # #0x3000 # ideographic space #0x3001 # ideographic comma #0x3002 # ideographic full stop #0x3003 # ditto mark #0x3005 # ideographic iteration mark #0x3021 # Suzhou numeral 1 #0x3022 # Suzhou numeral 2 #0x3023 # Suzhou numeral 3 #0x3024 # Suzhou numeral 4 #0x3025 # Suzhou numeral 5 #0x3026 # Suzhou numeral 6 #0x3027 # Suzhou numeral 7 #0x3028 # Suzhou numeral 8 #0x3029 # Suzhou numeral 9 # Han 0x4E00 0x4E01 0x4E03 0x4E07 0x4E08 0x4E09 0x4E0A 0x4E0B 0x4E0C 0x4E0D 0x4E0E 0x4E0F 0x4E10 0x4E11 0x4E14 0x4E15 0x4E16 0x4E18 0x4E19 0x4E1E 0x4E1F 0x4E26 0x4E2B 0x4E2D 0x4E2E 0x4E30 0x4E31 0x4E32 0x4E33 0x4E38 0x4E39 0x4E3B 0x4E3C 0x4E42 0x4E43 0x4E45 0x4E47 0x4E48 0x4E4B 0x4E4D 0x4E4E 0x4E4F 0x4E52 0x4E53 0x4E56 0x4E58 0x4E59 0x4E5C 0x4E5D 0x4E5E 0x4E5F 0x4E69 0x4E73 0x4E7E 0x4E7F 0x4E82 0x4E83 0x4E84 0x4E86 0x4E88 0x4E8B 0x4E8C 0x4E8D 0x4E8E 0x4E91 0x4E92 0x4E93 0x4E94 0x4E95 0x4E99 0x4E9B 0x4E9E 0x4E9F 0x4EA1 0x4EA2 0x4EA4 0x4EA5 0x4EA6 0x4EA8 0x4EAB 0x4EAC 0x4EAD 0x4EAE 0x4EB3 0x4EB6 0x4EB9 0x4EBA 0x4EC0 0x4EC1 0x4EC2 0x4EC3 0x4EC4 0x4EC6 0x4EC7 0x4EC8 0x4EC9 0x4ECA 0x4ECB 0x4ECD 0x4ED4 0x4ED5 0x4ED6 0x4ED7 0x4ED8 0x4ED9 0x4EDA 0x4EDC 0x4EDD 0x4EDE 0x4EDF 0x4EE1 0x4EE3 0x4EE4 0x4EE5 0x4EE8 0x4EE9 0x4EF0 0x4EF1 0x4EF2 0x4EF3 0x4EF4 0x4EF5 0x4EF6 0x4EF7 0x4EFB 0x4EFD 0x4EFF 0x4F00 0x4F01 0x4F02 0x4F04 0x4F05 0x4F08 0x4F09 0x4F0A 0x4F0B 0x4F0D 0x4F0E 0x4F0F 0x4F10 0x4F11 0x4F12 0x4F13 0x4F14 0x4F15 0x4F18 0x4F19 0x4F1D 0x4F22 0x4F2C 0x4F2D 0x4F2F 0x4F30 0x4F33 0x4F34 0x4F36 0x4F38 0x4F3A 0x4F3B 0x4F3C 0x4F3D 0x4F3E 0x4F3F 0x4F41 0x4F43 0x4F46 0x4F47 0x4F48 0x4F49 0x4F4C 0x4F4D 0x4F4E 0x4F4F 0x4F50 0x4F51 0x4F52 0x4F53 0x4F54 0x4F55 0x4F56 0x4F57 0x4F58 0x4F59 0x4F5A 0x4F5B 0x4F5C 0x4F5D 0x4F5E 0x4F5F 0x4F60 0x4F61 0x4F62 0x4F63 0x4F64 0x4F67 0x4F69 0x4F6A 0x4F6B 0x4F6C 0x4F6E 0x4F6F 0x4F70 0x4F73 0x4F74 0x4F75 0x4F76 0x4F77 0x4F78 0x4F79 0x4F7A 0x4F7B 0x4F7C 0x4F7D 0x4F7E 0x4F7F 0x4F80 0x4F81 0x4F82 0x4F83 0x4F84 0x4F85 0x4F86 0x4F87 0x4F88 0x4F89 0x4F8B 0x4F8D 0x4F8F 0x4F90 0x4F91 0x4F92 0x4F94 0x4F95 0x4F96 0x4F97 0x4F98 0x4F9A 0x4F9B 0x4F9C 0x4F9D 0x4F9E 0x4FAE 0x4FAF 0x4FB2 0x4FB3 0x4FB5 0x4FB6 0x4FB7 0x4FB9 0x4FBA 0x4FBB 0x4FBF 0x4FC0 0x4FC1 0x4FC2 0x4FC3 0x4FC4 0x4FC5 0x4FC7 0x4FC9 0x4FCA 0x4FCB 0x4FCD 0x4FCE 0x4FCF 0x4FD0 0x4FD1 0x4FD3 0x4FD4 0x4FD6 0x4FD7 0x4FD8 0x4FD9 0x4FDA 0x4FDB 0x4FDC 0x4FDD 0x4FDE 0x4FDF 0x4FE0 0x4FE1 0x4FEC 0x4FEE 0x4FEF 0x4FF1 0x4FF3 0x4FF4 0x4FF5 0x4FF6 0x4FF7 0x4FF8 0x4FFA 0x4FFE 0x5000 0x5005 0x5006 0x5007 0x5009 0x500B 0x500C 0x500D 0x500E 0x500F 0x5011 0x5012 0x5013 0x5014 0x5015 0x5016 0x5017 0x5018 0x5019 0x501A 0x501B 0x501C 0x501E 0x501F 0x5020 0x5021 0x5022 0x5023 0x5025 0x5026 0x5027 0x5028 0x5029 0x502A 0x502B 0x502C 0x502D 0x502F 0x5030 0x5031 0x5033 0x5035 0x5037 0x503C 0x5040 0x5041 0x5043 0x5045 0x5046 0x5047 0x5048 0x5049 0x504A 0x504B 0x504C 0x504D 0x504E 0x504F 0x5051 0x5053 0x5055 0x5057 0x505A 0x505B 0x505C 0x505D 0x505E 0x505F 0x5060 0x5061 0x5062 0x5063 0x5064 0x5065 0x5068 0x5069 0x506A 0x506B 0x506D 0x506E 0x506F 0x5070 0x5072 0x5073 0x5074 0x5075 0x5076 0x5077 0x507A 0x507D 0x5080 0x5082 0x5083 0x5085 0x5087 0x508B 0x508C 0x508D 0x508E 0x5091 0x5092 0x5094 0x5095 0x5096 0x5098 0x5099 0x509A 0x509B 0x509C 0x509D 0x509E 0x50A2 0x50A3 0x50AC 0x50AD 0x50AE 0x50AF 0x50B0 0x50B1 0x50B2 0x50B3 0x50B4 0x50B5 0x50B6 0x50B7 0x50B8 0x50BA 0x50BB 0x50BD 0x50BE 0x50BF 0x50C1 0x50C2 0x50C4 0x50C5 0x50C6 0x50C7 0x50C8 0x50C9 0x50CA 0x50CB 0x50CE 0x50CF 0x50D1 0x50D3 0x50D4 0x50D5 0x50D6 0x50D7 0x50DA 0x50DB 0x50DD 0x50E0 0x50E3 0x50E4 0x50E5 0x50E6 0x50E7 0x50E8 0x50E9 0x50EA 0x50EC 0x50ED 0x50EE 0x50EF 0x50F0 0x50F1 0x50F3 0x50F5 0x50F6 0x50F8 0x50F9 0x50FB 0x50FD 0x50FE 0x50FF 0x5100 0x5102 0x5103 0x5104 0x5105 0x5106 0x5107 0x5108 0x5109 0x510A 0x510B 0x510C 0x5110 0x5111 0x5112 0x5113 0x5114 0x5115 0x5117 0x5118 0x511A 0x511C 0x511F 0x5120 0x5121 0x5122 0x5124 0x5125 0x5126 0x5129 0x512A 0x512D 0x512E 0x5130 0x5131 0x5132 0x5133 0x5134 0x5135 0x5137 0x5138 0x5139 0x513A 0x513B 0x513C 0x513D 0x513F 0x5140 0x5141 0x5143 0x5144 0x5145 0x5146 0x5147 0x5148 0x5149 0x514B 0x514C 0x514D 0x5152 0x5154 0x5155 0x5157 0x5159 0x515A 0x515B 0x515C 0x515D 0x515E 0x515F 0x5161 0x5162 0x5163 0x5165 0x5167 0x5168 0x5169 0x516B 0x516C 0x516D 0x516E 0x5171 0x5175 0x5176 0x5177 0x5178 0x517C 0x5180 0x5187 0x5189 0x518A 0x518D 0x518F 0x5191 0x5192 0x5193 0x5194 0x5195 0x5197 0x5198 0x519E 0x51A0 0x51A2 0x51A4 0x51A5 0x51AA 0x51AC 0x51B0 0x51B1 0x51B6 0x51B7 0x51B9 0x51BC 0x51BD 0x51BE 0x51C4 0x51C5 0x51C6 0x51C8 0x51CA 0x51CB 0x51CC 0x51CD 0x51CE 0x51D0 0x51D4 0x51D7 0x51D8 0x51DC 0x51DD 0x51DE 0x51E0 0x51E1 0x51F0 0x51F1 0x51F3 0x51F5 0x51F6 0x51F8 0x51F9 0x51FA 0x51FD 0x5200 0x5201 0x5203 0x5206 0x5207 0x5208 0x5209 0x520A 0x520C 0x520E 0x5210 0x5211 0x5212 0x5213 0x5216 0x5217 0x521C 0x521D 0x521E 0x5221 0x5224 0x5225 0x5228 0x5229 0x522A 0x522E 0x5230 0x5231 0x5232 0x5233 0x5235 0x5236 0x5237 0x5238 0x523A 0x523B 0x5241 0x5243 0x5244 0x5246 0x5247 0x5249 0x524A 0x524B 0x524C 0x524D 0x524E 0x5252 0x5254 0x5255 0x5256 0x525A 0x525B 0x525C 0x525D 0x525E 0x525F 0x5261 0x5262 0x5269 0x526A 0x526B 0x526C 0x526D 0x526E 0x526F 0x5272 0x5274 0x5275 0x5277 0x5278 0x527A 0x527B 0x527C 0x527D 0x527F 0x5280 0x5281 0x5282 0x5283 0x5284 0x5287 0x5288 0x5289 0x528A 0x528B 0x528C 0x528D 0x5291 0x5293 0x5296 0x5297 0x5298 0x5299 0x529B 0x529F 0x52A0 0x52A3 0x52A6 0x52A9 0x52AA 0x52AB 0x52AC 0x52AD 0x52AE 0x52BB 0x52BC 0x52BE 0x52C0 0x52C1 0x52C2 0x52C3 0x52C7 0x52C9 0x52CD 0x52D2 0x52D3 0x52D5 0x52D6 0x52D7 0x52D8 0x52D9 0x52DB 0x52DD 0x52DE 0x52DF 0x52E2 0x52E3 0x52E4 0x52E6 0x52E9 0x52EB 0x52EF 0x52F0 0x52F1 0x52F3 0x52F4 0x52F5 0x52F7 0x52F8 0x52FA 0x52FB 0x52FC 0x52FE 0x52FF 0x5305 0x5306 0x5308 0x5309 0x530A 0x530B 0x530D 0x530E 0x530F 0x5310 0x5311 0x5312 0x5315 0x5316 0x5317 0x5319 0x531A 0x531C 0x531D 0x531F 0x5320 0x5321 0x5322 0x5323 0x532A 0x532D 0x532F 0x5330 0x5331 0x5334 0x5337 0x5339 0x533C 0x533D 0x533E 0x533F 0x5340 0x5341 0x5343 0x5344 0x5345 0x5347 0x5348 0x5349 0x534A 0x534C 0x534D 0x5351 0x5352 0x5353 0x5354 0x5357 0x535A 0x535C 0x535E 0x5360 0x5361 0x5363 0x5366 0x536C 0x536E 0x536F 0x5370 0x5371 0x5372 0x5373 0x5375 0x5377 0x5378 0x5379 0x537B 0x537C 0x537F 0x5382 0x5384 0x538A 0x538E 0x538F 0x5392 0x5394 0x5396 0x5397 0x5398 0x5399 0x539A 0x539C 0x539D 0x539E 0x539F 0x53A4 0x53A5 0x53A7 0x53AC 0x53AD 0x53B2 0x53B4 0x53B9 0x53BB 0x53C3 0x53C8 0x53C9 0x53CA 0x53CB 0x53CD 0x53D4 0x53D6 0x53D7 0x53DB 0x53DF 0x53E1 0x53E2 0x53E3 0x53E4 0x53E5 0x53E6 0x53E8 0x53E9 0x53EA 0x53EB 0x53EC 0x53ED 0x53EE 0x53EF 0x53F0 0x53F1 0x53F2 0x53F3 0x53F5 0x53F8 0x53FB 0x53FC 0x5401 0x5403 0x5404 0x5406 0x5407 0x5408 0x5409 0x540A 0x540B 0x540C 0x540D 0x540E 0x540F 0x5410 0x5411 0x5412 0x5418 0x5419 0x541B 0x541C 0x541D 0x541E 0x541F 0x5420 0x5424 0x5425 0x5426 0x5427 0x5428 0x5429 0x542A 0x542B 0x542C 0x542D 0x542E 0x5430 0x5431 0x5433 0x5435 0x5436 0x5437 0x5438 0x5439 0x543B 0x543C 0x543D 0x543E 0x5440 0x5441 0x5442 0x5443 0x5445 0x5446 0x5447 0x5448 0x544A 0x544E 0x544F 0x5454 0x5460 0x5461 0x5462 0x5463 0x5464 0x5465 0x5466 0x5467 0x5468 0x546B 0x546C 0x546F 0x5470 0x5471 0x5472 0x5473 0x5474 0x5475 0x5476 0x5477 0x5478 0x547A 0x547B 0x547C 0x547D 0x547E 0x547F 0x5480 0x5481 0x5482 0x5484 0x5486 0x5487 0x5488 0x548B 0x548C 0x548D 0x548E 0x5490 0x5491 0x5492 0x5495 0x5496 0x5498 0x549A 0x54A0 0x54A1 0x54A2 0x54A5 0x54A6 0x54A7 0x54A8 0x54A9 0x54AA 0x54AB 0x54AC 0x54AD 0x54AE 0x54AF 0x54B0 0x54B1 0x54B3 0x54B6 0x54B7 0x54B8 0x54BA 0x54BB 0x54BC 0x54BD 0x54BE 0x54BF 0x54C0 0x54C1 0x54C2 0x54C3 0x54C4 0x54C5 0x54C6 0x54C7 0x54C8 0x54C9 0x54CE 0x54CF 0x54D6 0x54DE 0x54E0 0x54E1 0x54E2 0x54E4 0x54E5 0x54E6 0x54E7 0x54E8 0x54E9 0x54EA 0x54EB 0x54ED 0x54EE 0x54F1 0x54F2 0x54F3 0x54F7 0x54F8 0x54FA 0x54FB 0x54FC 0x54FD 0x54FF 0x5501 0x5503 0x5504 0x5505 0x5506 0x5507 0x5508 0x5509 0x550A 0x550B 0x550C 0x550E 0x550F 0x5510 0x5511 0x5512 0x5514 0x5517 0x551A 0x5526 0x5527 0x552A 0x552C 0x552D 0x552E 0x552F 0x5530 0x5531 0x5532 0x5533 0x5534 0x5535 0x5536 0x5537 0x5538 0x5539 0x553B 0x553C 0x553E 0x5540 0x5541 0x5543 0x5544 0x5545 0x5546 0x5548 0x554A 0x554B 0x554D 0x554E 0x554F 0x5550 0x5551 0x5552 0x5555 0x5556 0x5557 0x555C 0x555E 0x555F 0x5561 0x5562 0x5563 0x5564 0x5565 0x5566 0x556A 0x5575 0x5576 0x5577 0x557B 0x557C 0x557D 0x557E 0x557F 0x5580 0x5581 0x5582 0x5583 0x5584 0x5587 0x5588 0x5589 0x558A 0x558B 0x558C 0x558D 0x558E 0x558F 0x5591 0x5592 0x5593 0x5594 0x5595 0x5598 0x5599 0x559A 0x559C 0x559D 0x559F 0x55A1 0x55A2 0x55A3 0x55A4 0x55A5 0x55A6 0x55A7 0x55A8 0x55AA 0x55AB 0x55AC 0x55AD 0x55AE 0x55B1 0x55B2 0x55B3 0x55B5 0x55BB 0x55BF 0x55C0 0x55C2 0x55C3 0x55C4 0x55C5 0x55C6 0x55C7 0x55C8 0x55C9 0x55CA 0x55CB 0x55CC 0x55CD 0x55CE 0x55CF 0x55D0 0x55D1 0x55D2 0x55D3 0x55D4 0x55D5 0x55D6 0x55D9 0x55DA 0x55DB 0x55DC 0x55DD 0x55DF 0x55E1 0x55E2 0x55E3 0x55E4 0x55E5 0x55E6 0x55E7 0x55E8 0x55E9 0x55EF 0x55F2 0x55F6 0x55F7 0x55F9 0x55FA 0x55FC 0x55FD 0x55FE 0x55FF 0x5600 0x5601 0x5602 0x5604 0x5606 0x5608 0x5609 0x560C 0x560D 0x560E 0x560F 0x5610 0x5612 0x5613 0x5614 0x5615 0x5616 0x5617 0x561B 0x561C 0x561D 0x561F 0x5627 0x5629 0x562A 0x562C 0x562E 0x562F 0x5630 0x5632 0x5633 0x5634 0x5635 0x5636 0x5638 0x5639 0x563A 0x563B 0x563D 0x563E 0x563F 0x5640 0x5641 0x5642 0x5645 0x5646 0x5648 0x5649 0x564A 0x564C 0x564E 0x5653 0x5657 0x5658 0x5659 0x565A 0x565E 0x5660 0x5662 0x5663 0x5664 0x5665 0x5666 0x5668 0x5669 0x566A 0x566B 0x566C 0x566D 0x566E 0x566F 0x5670 0x5671 0x5672 0x5673 0x5674 0x5676 0x5677 0x5678 0x5679 0x567E 0x567F 0x5680 0x5681 0x5682 0x5683 0x5684 0x5685 0x5686 0x5687 0x568C 0x568D 0x568E 0x568F 0x5690 0x5693 0x5695 0x5697 0x5698 0x5699 0x569A 0x569C 0x569D 0x56A5 0x56A6 0x56A7 0x56A8 0x56AA 0x56AB 0x56AC 0x56AD 0x56AE 0x56B2 0x56B3 0x56B4 0x56B5 0x56B6 0x56B7 0x56BC 0x56BD 0x56BE 0x56C0 0x56C1 0x56C2 0x56C3 0x56C5 0x56C6 0x56C8 0x56C9 0x56CA 0x56CB 0x56CC 0x56CD 0x56D1 0x56D3 0x56D4 0x56D7 0x56DA 0x56DB 0x56DD 0x56DE 0x56DF 0x56E0 0x56E1 0x56E4 0x56E5 0x56E7 0x56EA 0x56EB 0x56EE 0x56F0 0x56F7 0x56F9 0x56FA 0x56FF 0x5701 0x5702 0x5703 0x5704 0x5707 0x5708 0x5709 0x570A 0x570B 0x570C 0x570D 0x5712 0x5713 0x5714 0x5716 0x5718 0x571A 0x571B 0x571C 0x571E 0x571F 0x5720 0x5722 0x5723 0x5728 0x5729 0x572A 0x572C 0x572D 0x572E 0x572F 0x5730 0x5733 0x5734 0x573B 0x573E 0x5740 0x5741 0x5745 0x5747 0x5749 0x574A 0x574B 0x574C 0x574D 0x574E 0x574F 0x5750 0x5751 0x5752 0x5761 0x5762 0x5764 0x5766 0x5768 0x5769 0x576A 0x576B 0x576D 0x576F 0x5770 0x5771 0x5772 0x5773 0x5774 0x5775 0x5776 0x5777 0x577B 0x577C 0x577D 0x5780 0x5782 0x5783 0x578B 0x578C 0x578F 0x5793 0x5794 0x5795 0x5797 0x5798 0x5799 0x579A 0x579B 0x579D 0x579E 0x579F 0x57A0 0x57A2 0x57A3 0x57A4 0x57A5 0x57AE 0x57B5 0x57B6 0x57B8 0x57B9 0x57BA 0x57BC 0x57BD 0x57BF 0x57C1 0x57C2 0x57C3 0x57C6 0x57C7 0x57CB 0x57CC 0x57CE 0x57CF 0x57D0 0x57D2 0x57D4 0x57D5 0x57DC 0x57DF 0x57E0 0x57E1 0x57E2 0x57E3 0x57E4 0x57E5 0x57E7 0x57E9 0x57EC 0x57ED 0x57EE 0x57F0 0x57F1 0x57F2 0x57F3 0x57F4 0x57F5 0x57F6 0x57F7 0x57F8 0x57F9 0x57FA 0x57FB 0x57FC 0x57FD 0x5800 0x5801 0x5802 0x5804 0x5805 0x5806 0x5807 0x5808 0x5809 0x580A 0x580B 0x580C 0x580D 0x580E 0x5810 0x5814 0x5819 0x581B 0x581C 0x581D 0x581E 0x5820 0x5821 0x5823 0x5824 0x5825 0x5827 0x5828 0x5829 0x582A 0x582C 0x582D 0x582E 0x582F 0x5830 0x5831 0x5832 0x5833 0x5834 0x5835 0x5836 0x5837 0x5838 0x5839 0x583B 0x583D 0x583F 0x5848 0x5849 0x584A 0x584B 0x584C 0x584D 0x584E 0x584F 0x5851 0x5852 0x5853 0x5854 0x5855 0x5857 0x5858 0x5859 0x585A 0x585B 0x585D 0x585E 0x5862 0x5863 0x5864 0x5865 0x5868 0x586B 0x586D 0x586F 0x5871 0x5874 0x5875 0x5876 0x5879 0x587A 0x587B 0x587C 0x587D 0x587E 0x587F 0x5880 0x5881 0x5882 0x5883 0x5885 0x5886 0x5887 0x5888 0x5889 0x588A 0x588B 0x588E 0x588F 0x5890 0x5891 0x5893 0x5894 0x5898 0x589C 0x589D 0x589E 0x589F 0x58A0 0x58A1 0x58A3 0x58A5 0x58A6 0x58A8 0x58A9 0x58AB 0x58AC 0x58AE 0x58AF 0x58B1 0x58B3 0x58BA 0x58BC 0x58BD 0x58BE 0x58BF 0x58C1 0x58C2 0x58C5 0x58C6 0x58C7 0x58C8 0x58C9 0x58CE 0x58CF 0x58D1 0x58D2 0x58D3 0x58D4 0x58D5 0x58D6 0x58D8 0x58D9 0x58DA 0x58DB 0x58DD 0x58DE 0x58DF 0x58E2 0x58E3 0x58E4 0x58E7 0x58E8 0x58E9 0x58EB 0x58EC 0x58EF 0x58F4 0x58F9 0x58FA 0x58FC 0x58FD 0x58FE 0x58FF 0x5903 0x5906 0x590C 0x590D 0x590E 0x590F 0x5912 0x5914 0x5915 0x5916 0x5917 0x5919 0x591A 0x591C 0x5920 0x5922 0x5924 0x5925 0x5927 0x5929 0x592A 0x592B 0x592C 0x592D 0x592E 0x592F 0x5931 0x5937 0x5938 0x593C 0x593E 0x5940 0x5944 0x5945 0x5947 0x5948 0x5949 0x594A 0x594E 0x594F 0x5950 0x5951 0x5953 0x5954 0x5955 0x5957 0x5958 0x595A 0x595C 0x5960 0x5961 0x5962 0x5967 0x5969 0x596A 0x596B 0x596D 0x596E 0x5970 0x5971 0x5972 0x5973 0x5974 0x5976 0x5977 0x5978 0x5979 0x597B 0x597C 0x597D 0x597E 0x597F 0x5980 0x5981 0x5982 0x5983 0x5984 0x5985 0x598A 0x598D 0x598E 0x598F 0x5990 0x5992 0x5993 0x5996 0x5997 0x5998 0x5999 0x599D 0x599E 0x59A0 0x59A1 0x59A2 0x59A3 0x59A4 0x59A5 0x59A6 0x59A7 0x59A8 0x59AE 0x59AF 0x59B1 0x59B2 0x59B3 0x59B4 0x59B5 0x59B6 0x59B9 0x59BA 0x59BB 0x59BC 0x59BD 0x59BE 0x59C0 0x59C1 0x59C3 0x59C5 0x59C6 0x59C7 0x59C8 0x59CA 0x59CB 0x59CC 0x59CD 0x59CE 0x59CF 0x59D0 0x59D1 0x59D2 0x59D3 0x59D4 0x59D6 0x59D8 0x59DA 0x59DB 0x59DC 0x59DD 0x59DE 0x59E0 0x59E1 0x59E3 0x59E4 0x59E5 0x59E6 0x59E8 0x59E9 0x59EA 0x59EC 0x59ED 0x59EE 0x59F1 0x59F2 0x59F3 0x59F4 0x59F5 0x59F6 0x59F7 0x59FA 0x59FB 0x59FC 0x59FD 0x59FE 0x59FF 0x5A00 0x5A01 0x5A03 0x5A09 0x5A0A 0x5A0C 0x5A0F 0x5A11 0x5A13 0x5A15 0x5A16 0x5A17 0x5A18 0x5A19 0x5A1B 0x5A1C 0x5A1E 0x5A1F 0x5A20 0x5A23 0x5A25 0x5A29 0x5A2D 0x5A2E 0x5A33 0x5A35 0x5A36 0x5A37 0x5A38 0x5A39 0x5A3C 0x5A3E 0x5A40 0x5A41 0x5A42 0x5A43 0x5A44 0x5A46 0x5A47 0x5A48 0x5A49 0x5A4A 0x5A4C 0x5A4D 0x5A50 0x5A51 0x5A52 0x5A53 0x5A55 0x5A56 0x5A57 0x5A58 0x5A5A 0x5A5B 0x5A5C 0x5A5D 0x5A5E 0x5A5F 0x5A60 0x5A62 0x5A64 0x5A65 0x5A66 0x5A67 0x5A69 0x5A6A 0x5A6C 0x5A6D 0x5A70 0x5A77 0x5A78 0x5A7A 0x5A7B 0x5A7C 0x5A7D 0x5A7F 0x5A83 0x5A84 0x5A8A 0x5A8B 0x5A8C 0x5A8E 0x5A8F 0x5A90 0x5A92 0x5A93 0x5A94 0x5A95 0x5A97 0x5A9A 0x5A9B 0x5A9C 0x5A9D 0x5A9E 0x5A9F 0x5AA2 0x5AA5 0x5AA6 0x5AA7 0x5AA9 0x5AAC 0x5AAE 0x5AAF 0x5AB0 0x5AB1 0x5AB2 0x5AB3 0x5AB4 0x5AB5 0x5AB6 0x5AB7 0x5AB8 0x5AB9 0x5ABA 0x5ABB 0x5ABC 0x5ABD 0x5ABE 0x5ABF 0x5AC0 0x5AC1 0x5AC2 0x5AC4 0x5AC6 0x5AC7 0x5AC8 0x5AC9 0x5ACA 0x5ACB 0x5ACC 0x5ACD 0x5AD5 0x5AD6 0x5AD7 0x5AD8 0x5AD9 0x5ADA 0x5ADB 0x5ADC 0x5ADD 0x5ADE 0x5ADF 0x5AE0 0x5AE1 0x5AE2 0x5AE3 0x5AE5 0x5AE6 0x5AE8 0x5AE9 0x5AEA 0x5AEB 0x5AEC 0x5AED 0x5AEE 0x5AF3 0x5AF4 0x5AF5 0x5AF6 0x5AF7 0x5AF8 0x5AF9 0x5AFB 0x5AFD 0x5AFF 0x5B01 0x5B02 0x5B03 0x5B05 0x5B07 0x5B08 0x5B09 0x5B0B 0x5B0C 0x5B0F 0x5B10 0x5B13 0x5B14 0x5B16 0x5B17 0x5B19 0x5B1A 0x5B1B 0x5B1D 0x5B1E 0x5B20 0x5B21 0x5B23 0x5B24 0x5B25 0x5B26 0x5B27 0x5B28 0x5B2A 0x5B2C 0x5B2D 0x5B2E 0x5B2F 0x5B30 0x5B32 0x5B34 0x5B38 0x5B3C 0x5B3D 0x5B3E 0x5B3F 0x5B40 0x5B43 0x5B45 0x5B47 0x5B48 0x5B4B 0x5B4C 0x5B4D 0x5B4E 0x5B50 0x5B51 0x5B53 0x5B54 0x5B55 0x5B56 0x5B57 0x5B58 0x5B5A 0x5B5B 0x5B5C 0x5B5D 0x5B5F 0x5B62 0x5B63 0x5B64 0x5B65 0x5B69 0x5B6B 0x5B6C 0x5B6E 0x5B70 0x5B71 0x5B72 0x5B73 0x5B75 0x5B77 0x5B78 0x5B7A 0x5B7B 0x5B7D 0x5B7F 0x5B81 0x5B83 0x5B84 0x5B85 0x5B87 0x5B88 0x5B89 0x5B8B 0x5B8C 0x5B8E 0x5B8F 0x5B92 0x5B93 0x5B95 0x5B97 0x5B98 0x5B99 0x5B9A 0x5B9B 0x5B9C 0x5BA2 0x5BA3 0x5BA4 0x5BA5 0x5BA6 0x5BA7 0x5BA8 0x5BAC 0x5BAD 0x5BAE 0x5BB0 0x5BB3 0x5BB4 0x5BB5 0x5BB6 0x5BB8 0x5BB9 0x5BBF 0x5BC0 0x5BC1 0x5BC2 0x5BC4 0x5BC5 0x5BC6 0x5BC7 0x5BCA 0x5BCB 0x5BCC 0x5BCD 0x5BCE 0x5BD0 0x5BD1 0x5BD2 0x5BD3 0x5BD4 0x5BD6 0x5BD8 0x5BD9 0x5BDE 0x5BDF 0x5BE0 0x5BE1 0x5BE2 0x5BE3 0x5BE4 0x5BE5 0x5BE6 0x5BE7 0x5BE8 0x5BE9 0x5BEA 0x5BEB 0x5BEC 0x5BEE 0x5BEF 0x5BF0 0x5BF1 0x5BF2 0x5BF5 0x5BF6 0x5BF8 0x5BFA 0x5C01 0x5C03 0x5C04 0x5C07 0x5C08 0x5C09 0x5C0A 0x5C0B 0x5C0C 0x5C0D 0x5C0E 0x5C0F 0x5C10 0x5C11 0x5C12 0x5C15 0x5C16 0x5C1A 0x5C1F 0x5C22 0x5C24 0x5C25 0x5C28 0x5C2A 0x5C2C 0x5C30 0x5C31 0x5C33 0x5C37 0x5C38 0x5C39 0x5C3A 0x5C3B 0x5C3C 0x5C3E 0x5C3F 0x5C40 0x5C41 0x5C44 0x5C45 0x5C46 0x5C47 0x5C48 0x5C4B 0x5C4C 0x5C4D 0x5C4E 0x5C4F 0x5C50 0x5C51 0x5C54 0x5C55 0x5C56 0x5C58 0x5C59 0x5C5C 0x5C5D 0x5C60 0x5C62 0x5C63 0x5C64 0x5C65 0x5C67 0x5C68 0x5C69 0x5C6A 0x5C6C 0x5C6D 0x5C6E 0x5C6F 0x5C71 0x5C73 0x5C74 0x5C79 0x5C7A 0x5C7B 0x5C7C 0x5C7E 0x5C86 0x5C88 0x5C89 0x5C8A 0x5C8B 0x5C8C 0x5C8D 0x5C8F 0x5C90 0x5C91 0x5C92 0x5C93 0x5C94 0x5C95 0x5C9D 0x5C9F 0x5CA0 0x5CA1 0x5CA2 0x5CA3 0x5CA4 0x5CA5 0x5CA6 0x5CA7 0x5CA8 0x5CA9 0x5CAA 0x5CAB 0x5CAC 0x5CAD 0x5CAE 0x5CAF 0x5CB0 0x5CB1 0x5CB3 0x5CB5 0x5CB6 0x5CB7 0x5CB8 0x5CC6 0x5CC7 0x5CC8 0x5CC9 0x5CCA 0x5CCB 0x5CCC 0x5CCE 0x5CCF 0x5CD0 0x5CD2 0x5CD3 0x5CD4 0x5CD6 0x5CD7 0x5CD8 0x5CD9 0x5CDA 0x5CDB 0x5CDE 0x5CDF 0x5CE8 0x5CEA 0x5CEC 0x5CED 0x5CEE 0x5CF0 0x5CF1 0x5CF4 0x5CF6 0x5CF7 0x5CF8 0x5CF9 0x5CFB 0x5CFD 0x5CFF 0x5D00 0x5D01 0x5D06 0x5D07 0x5D0B 0x5D0C 0x5D0D 0x5D0E 0x5D0F 0x5D11 0x5D12 0x5D14 0x5D16 0x5D17 0x5D19 0x5D1A 0x5D1B 0x5D1D 0x5D1E 0x5D1F 0x5D20 0x5D22 0x5D23 0x5D24 0x5D25 0x5D26 0x5D27 0x5D28 0x5D29 0x5D2E 0x5D30 0x5D31 0x5D32 0x5D33 0x5D34 0x5D35 0x5D36 0x5D37 0x5D38 0x5D39 0x5D3A 0x5D3C 0x5D3D 0x5D3F 0x5D40 0x5D41 0x5D42 0x5D43 0x5D45 0x5D47 0x5D49 0x5D4A 0x5D4B 0x5D4C 0x5D4E 0x5D50 0x5D51 0x5D52 0x5D55 0x5D59 0x5D5E 0x5D62 0x5D63 0x5D65 0x5D67 0x5D68 0x5D69 0x5D6B 0x5D6C 0x5D6F 0x5D71 0x5D72 0x5D77 0x5D79 0x5D7A 0x5D7C 0x5D7D 0x5D7E 0x5D7F 0x5D80 0x5D81 0x5D82 0x5D84 0x5D86 0x5D87 0x5D88 0x5D89 0x5D8A 0x5D8D 0x5D92 0x5D93 0x5D94 0x5D95 0x5D97 0x5D99 0x5D9A 0x5D9C 0x5D9D 0x5D9E 0x5D9F 0x5DA0 0x5DA1 0x5DA2 0x5DA7 0x5DA8 0x5DA9 0x5DAA 0x5DAC 0x5DAD 0x5DAE 0x5DAF 0x5DB0 0x5DB1 0x5DB2 0x5DB4 0x5DB5 0x5DB7 0x5DB8 0x5DBA 0x5DBC 0x5DBD 0x5DC0 0x5DC2 0x5DC3 0x5DC6 0x5DC7 0x5DC9 0x5DCB 0x5DCD 0x5DCF 0x5DD1 0x5DD2 0x5DD4 0x5DD5 0x5DD6 0x5DD8 0x5DDD 0x5DDE 0x5DDF 0x5DE0 0x5DE1 0x5DE2 0x5DE5 0x5DE6 0x5DE7 0x5DE8 0x5DEB 0x5DEE 0x5DF0 0x5DF1 0x5DF2 0x5DF3 0x5DF4 0x5DF7 0x5DF9 0x5DFD 0x5DFE 0x5DFF 0x5E02 0x5E03 0x5E04 0x5E06 0x5E0A 0x5E0C 0x5E0E 0x5E11 0x5E14 0x5E15 0x5E16 0x5E17 0x5E18 0x5E19 0x5E1A 0x5E1B 0x5E1D 0x5E1F 0x5E20 0x5E21 0x5E22 0x5E23 0x5E24 0x5E25 0x5E28 0x5E29 0x5E2B 0x5E2D 0x5E33 0x5E34 0x5E36 0x5E37 0x5E38 0x5E3D 0x5E3E 0x5E40 0x5E41 0x5E43 0x5E44 0x5E45 0x5E4A 0x5E4B 0x5E4C 0x5E4D 0x5E4E 0x5E4F 0x5E53 0x5E54 0x5E55 0x5E57 0x5E58 0x5E59 0x5E5B 0x5E5C 0x5E5D 0x5E5F 0x5E60 0x5E61 0x5E62 0x5E63 0x5E66 0x5E67 0x5E68 0x5E69 0x5E6A 0x5E6B 0x5E6C 0x5E6D 0x5E6E 0x5E6F 0x5E70 0x5E72 0x5E73 0x5E74 0x5E75 0x5E76 0x5E78 0x5E79 0x5E7B 0x5E7C 0x5E7D 0x5E7E 0x5E80 0x5E82 0x5E84 0x5E87 0x5E88 0x5E89 0x5E8A 0x5E8B 0x5E8C 0x5E8D 0x5E8F 0x5E95 0x5E96 0x5E97 0x5E9A 0x5E9B 0x5E9C 0x5EA0 0x5EA2 0x5EA3 0x5EA4 0x5EA5 0x5EA6 0x5EA7 0x5EA8 0x5EAA 0x5EAB 0x5EAC 0x5EAD 0x5EAE 0x5EB0 0x5EB1 0x5EB2 0x5EB3 0x5EB4 0x5EB5 0x5EB6 0x5EB7 0x5EB8 0x5EB9 0x5EBE 0x5EC1 0x5EC2 0x5EC4 0x5EC5 0x5EC6 0x5EC7 0x5EC8 0x5EC9 0x5ECA 0x5ECB 0x5ECC 0x5ECE 0x5ED1 0x5ED2 0x5ED3 0x5ED4 0x5ED5 0x5ED6 0x5ED7 0x5ED8 0x5ED9 0x5EDA 0x5EDB 0x5EDC 0x5EDD 0x5EDE 0x5EDF 0x5EE0 0x5EE1 0x5EE2 0x5EE3 0x5EE5 0x5EE6 0x5EE7 0x5EE8 0x5EE9 0x5EEC 0x5EEE 0x5EEF 0x5EF1 0x5EF2 0x5EF3 0x5EF6 0x5EF7 0x5EFA 0x5EFE 0x5EFF 0x5F01 0x5F02 0x5F04 0x5F05 0x5F07 0x5F08 0x5F0A 0x5F0B 0x5F0F 0x5F12 0x5F13 0x5F14 0x5F15 0x5F17 0x5F18 0x5F1A 0x5F1B 0x5F1D 0x5F1F 0x5F22 0x5F23 0x5F24 0x5F26 0x5F27 0x5F28 0x5F29 0x5F2D 0x5F2E 0x5F30 0x5F31 0x5F33 0x5F35 0x5F36 0x5F37 0x5F38 0x5F3C 0x5F40 0x5F43 0x5F44 0x5F46 0x5F48 0x5F49 0x5F4A 0x5F4B 0x5F4C 0x5F4E 0x5F4F 0x5F54 0x5F56 0x5F57 0x5F58 0x5F59 0x5F5D 0x5F62 0x5F64 0x5F65 0x5F67 0x5F69 0x5F6A 0x5F6B 0x5F6C 0x5F6D 0x5F6F 0x5F70 0x5F71 0x5F73 0x5F74 0x5F76 0x5F77 0x5F78 0x5F79 0x5F7C 0x5F7D 0x5F7E 0x5F7F 0x5F80 0x5F81 0x5F82 0x5F85 0x5F86 0x5F87 0x5F88 0x5F89 0x5F8A 0x5F8B 0x5F8C 0x5F90 0x5F91 0x5F92 0x5F96 0x5F97 0x5F98 0x5F99 0x5F9B 0x5F9C 0x5F9E 0x5F9F 0x5FA0 0x5FA1 0x5FA5 0x5FA6 0x5FA8 0x5FA9 0x5FAA 0x5FAB 0x5FAC 0x5FAD 0x5FAE 0x5FAF 0x5FB2 0x5FB5 0x5FB6 0x5FB7 0x5FB9 0x5FBB 0x5FBC 0x5FBD 0x5FBE 0x5FBF 0x5FC0 0x5FC1 0x5FC3 0x5FC5 0x5FC9 0x5FCC 0x5FCD 0x5FCF 0x5FD0 0x5FD1 0x5FD2 0x5FD4 0x5FD5 0x5FD6 0x5FD7 0x5FD8 0x5FD9 0x5FDD 0x5FDE 0x5FE0 0x5FE1 0x5FE3 0x5FE4 0x5FE5 0x5FE8 0x5FEA 0x5FEB 0x5FED 0x5FEE 0x5FEF 0x5FF1 0x5FF3 0x5FF4 0x5FF5 0x5FF7 0x5FF8 0x5FFA 0x5FFB 0x5FFD 0x5FFF 0x6000 0x6009 0x600A 0x600B 0x600C 0x600D 0x600E 0x600F 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6019 0x601A 0x601B 0x601C 0x601D 0x601E 0x6020 0x6021 0x6022 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602A 0x602B 0x602C 0x602D 0x602E 0x602F 0x6032 0x6033 0x6034 0x6035 0x6037 0x6039 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6049 0x604C 0x604D 0x6050 0x6053 0x6054 0x6055 0x6058 0x6059 0x605A 0x605B 0x605D 0x605E 0x605F 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606A 0x606B 0x606C 0x606D 0x606E 0x606F 0x6070 0x6072 0x607F 0x6080 0x6081 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608A 0x608C 0x608D 0x608E 0x6090 0x6092 0x6094 0x6095 0x6096 0x6097 0x609A 0x609B 0x609C 0x609D 0x609F 0x60A0 0x60A2 0x60A3 0x60A8 0x60B0 0x60B1 0x60B2 0x60B4 0x60B5 0x60B6 0x60B7 0x60B8 0x60B9 0x60BA 0x60BB 0x60BC 0x60BD 0x60BE 0x60BF 0x60C0 0x60C1 0x60C3 0x60C4 0x60C5 0x60C6 0x60C7 0x60C8 0x60C9 0x60CA 0x60CB 0x60CC 0x60CD 0x60CE 0x60CF 0x60D1 0x60D3 0x60D4 0x60D5 0x60D8 0x60D9 0x60DA 0x60DB 0x60DC 0x60DD 0x60DF 0x60E0 0x60E1 0x60E2 0x60E4 0x60E6 0x60F0 0x60F1 0x60F2 0x60F3 0x60F4 0x60F5 0x60F6 0x60F7 0x60F8 0x60F9 0x60FA 0x60FB 0x60FC 0x60FE 0x60FF 0x6100 0x6101 0x6103 0x6104 0x6105 0x6106 0x6108 0x6109 0x610A 0x610B 0x610D 0x610E 0x610F 0x6110 0x6112 0x6113 0x6114 0x6115 0x6116 0x6118 0x611A 0x611B 0x611C 0x611D 0x611F 0x6123 0x6127 0x6128 0x6129 0x612B 0x612C 0x612E 0x612F 0x6132 0x6134 0x6136 0x6137 0x613B 0x613E 0x613F 0x6140 0x6141 0x6144 0x6145 0x6146 0x6147 0x6148 0x6149 0x614A 0x614B 0x614C 0x614D 0x614E 0x614F 0x6152 0x6153 0x6154 0x6155 0x6156 0x6158 0x615A 0x615B 0x615D 0x615E 0x615F 0x6161 0x6162 0x6163 0x6165 0x6166 0x6167 0x6168 0x616A 0x616B 0x616C 0x616E 0x6170 0x6171 0x6172 0x6173 0x6174 0x6175 0x6176 0x6177 0x6179 0x617A 0x617C 0x617E 0x6180 0x6182 0x6183 0x6189 0x618A 0x618B 0x618C 0x618D 0x618E 0x6190 0x6191 0x6192 0x6193 0x6194 0x6196 0x619A 0x619B 0x619D 0x619F 0x61A1 0x61A2 0x61A4 0x61A7 0x61A8 0x61A9 0x61AA 0x61AB 0x61AC 0x61AD 0x61AE 0x61AF 0x61B0 0x61B1 0x61B2 0x61B3 0x61B4 0x61B5 0x61B6 0x61B8 0x61BA 0x61BC 0x61BE 0x61BF 0x61C1 0x61C2 0x61C3 0x61C5 0x61C6 0x61C7 0x61C8 0x61C9 0x61CA 0x61CB 0x61CC 0x61CD 0x61D6 0x61D8 0x61DE 0x61DF 0x61E0 0x61E3 0x61E4 0x61E5 0x61E6 0x61E7 0x61E8 0x61E9 0x61EA 0x61EB 0x61ED 0x61EE 0x61F0 0x61F1 0x61F2 0x61F5 0x61F6 0x61F7 0x61F8 0x61F9 0x61FA 0x61FB 0x61FC 0x61FD 0x61FE 0x61FF 0x6200 0x6201 0x6203 0x6204 0x6207 0x6208 0x6209 0x620A 0x620C 0x620D 0x620E 0x6210 0x6211 0x6212 0x6214 0x6215 0x6216 0x6219 0x621A 0x621B 0x621F 0x6220 0x6221 0x6222 0x6223 0x6224 0x6225 0x6227 0x6229 0x622A 0x622B 0x622D 0x622E 0x6230 0x6232 0x6233 0x6234 0x6236 0x623A 0x623D 0x623E 0x623F 0x6240 0x6241 0x6242 0x6243 0x6246 0x6247 0x6248 0x6249 0x624A 0x624B 0x624D 0x624E 0x6250 0x6251 0x6252 0x6253 0x6254 0x6258 0x6259 0x625A 0x625B 0x625C 0x625E 0x6260 0x6261 0x6262 0x6263 0x6264 0x6265 0x6266 0x626D 0x626E 0x626F 0x6270 0x6271 0x6272 0x6273 0x6274 0x6276 0x6277 0x6279 0x627A 0x627B 0x627C 0x627D 0x627E 0x627F 0x6280 0x6281 0x6283 0x6284 0x6286 0x6287 0x6288 0x6289 0x628A 0x628C 0x628E 0x628F 0x6291 0x6292 0x6293 0x6294 0x6295 0x6296 0x6297 0x6298 0x62A8 0x62A9 0x62AA 0x62AB 0x62AC 0x62AD 0x62AE 0x62AF 0x62B0 0x62B1 0x62B3 0x62B4 0x62B5 0x62B6 0x62B8 0x62B9 0x62BB 0x62BC 0x62BD 0x62BE 0x62BF 0x62C2 0x62C4 0x62C6 0x62C7 0x62C8 0x62C9 0x62CA 0x62CB 0x62CC 0x62CD 0x62CE 0x62CF 0x62D0 0x62D1 0x62D2 0x62D3 0x62D4 0x62D6 0x62D7 0x62D8 0x62D9 0x62DA 0x62DB 0x62DC 0x62EB 0x62EC 0x62ED 0x62EE 0x62EF 0x62F0 0x62F1 0x62F2 0x62F3 0x62F4 0x62F5 0x62F6 0x62F7 0x62F8 0x62F9 0x62FA 0x62FB 0x62FC 0x62FD 0x62FE 0x62FF 0x6300 0x6301 0x6302 0x6303 0x6307 0x6308 0x6309 0x630B 0x630C 0x630D 0x630E 0x630F 0x6310 0x6311 0x6313 0x6314 0x6315 0x6316 0x6328 0x6329 0x632A 0x632B 0x632C 0x632D 0x632F 0x6332 0x6333 0x6334 0x6336 0x6338 0x6339 0x633A 0x633B 0x633C 0x633D 0x633E 0x6340 0x6341 0x6342 0x6343 0x6344 0x6345 0x6346 0x6347 0x6348 0x6349 0x634A 0x634B 0x634C 0x634D 0x634E 0x634F 0x6350 0x6351 0x6354 0x6355 0x6356 0x6357 0x6358 0x6359 0x635A 0x6365 0x6367 0x6368 0x6369 0x636B 0x636D 0x636E 0x636F 0x6370 0x6371 0x6372 0x6375 0x6376 0x6377 0x6378 0x637A 0x637B 0x637C 0x637D 0x6380 0x6381 0x6382 0x6383 0x6384 0x6385 0x6387 0x6388 0x6389 0x638A 0x638C 0x638D 0x638E 0x638F 0x6390 0x6391 0x6392 0x6394 0x6396 0x6397 0x6398 0x6399 0x639B 0x639C 0x639D 0x639E 0x639F 0x63A0 0x63A1 0x63A2 0x63A3 0x63A4 0x63A5 0x63A7 0x63A8 0x63A9 0x63AA 0x63AB 0x63AC 0x63AD 0x63AE 0x63AF 0x63B0 0x63B1 0x63BD 0x63BE 0x63C0 0x63C2 0x63C3 0x63C4 0x63C5 0x63C6 0x63C7 0x63C8 0x63C9 0x63CA 0x63CB 0x63CC 0x63CD 0x63CE 0x63CF 0x63D0 0x63D2 0x63D3 0x63D5 0x63D6 0x63D7 0x63D8 0x63D9 0x63DA 0x63DB 0x63DC 0x63DD 0x63DF 0x63E0 0x63E1 0x63E3 0x63E4 0x63E5 0x63E7 0x63E8 0x63E9 0x63EA 0x63EB 0x63ED 0x63EE 0x63EF 0x63F0 0x63F1 0x63F2 0x63F3 0x63F4 0x63F5 0x63F6 0x63F9 0x6406 0x6409 0x640A 0x640B 0x640C 0x640D 0x640E 0x640F 0x6410 0x6412 0x6413 0x6414 0x6415 0x6416 0x6417 0x6418 0x641A 0x641B 0x641C 0x641E 0x641F 0x6420 0x6421 0x6422 0x6423 0x6424 0x6425 0x6426 0x6427 0x6428 0x642A 0x642B 0x642C 0x642D 0x642E 0x642F 0x6430 0x6433 0x6434 0x6435 0x6436 0x6437 0x6439 0x643D 0x643E 0x643F 0x6440 0x6441 0x6443 0x644B 0x644D 0x644E 0x6450 0x6451 0x6452 0x6453 0x6454 0x6458 0x6459 0x645B 0x645C 0x645D 0x645E 0x645F 0x6460 0x6461 0x6465 0x6466 0x6467 0x6468 0x6469 0x646B 0x646C 0x646D 0x646E 0x646F 0x6470 0x6472 0x6473 0x6474 0x6475 0x6476 0x6477 0x6478 0x6479 0x647A 0x647B 0x647D 0x647F 0x6482 0x6485 0x6487 0x6488 0x6489 0x648A 0x648B 0x648C 0x648F 0x6490 0x6492 0x6493 0x6495 0x6496 0x6497 0x6498 0x6499 0x649A 0x649C 0x649D 0x649E 0x649F 0x64A0 0x64A2 0x64A3 0x64A4 0x64A5 0x64A6 0x64A9 0x64AB 0x64AC 0x64AD 0x64AE 0x64B0 0x64B1 0x64B2 0x64B3 0x64BB 0x64BC 0x64BD 0x64BE 0x64BF 0x64C1 0x64C2 0x64C3 0x64C4 0x64C5 0x64C7 0x64C9 0x64CA 0x64CB 0x64CD 0x64CE 0x64CF 0x64D0 0x64D2 0x64D4 0x64D6 0x64D7 0x64D8 0x64D9 0x64DA 0x64DB 0x64E0 0x64E2 0x64E3 0x64E4 0x64E6 0x64E8 0x64E9 0x64EB 0x64EC 0x64ED 0x64EF 0x64F0 0x64F1 0x64F2 0x64F3 0x64F4 0x64F7 0x64F8 0x64FA 0x64FB 0x64FC 0x64FD 0x64FE 0x64FF 0x6500 0x6501 0x6503 0x6504 0x6506 0x6507 0x6509 0x650C 0x650D 0x650E 0x650F 0x6510 0x6513 0x6514 0x6515 0x6516 0x6517 0x6518 0x6519 0x651B 0x651C 0x651D 0x6520 0x6521 0x6522 0x6523 0x6524 0x6525 0x6526 0x6529 0x652A 0x652B 0x652C 0x652D 0x652E 0x652F 0x6532 0x6533 0x6536 0x6537 0x6538 0x6539 0x653B 0x653D 0x653E 0x653F 0x6541 0x6543 0x6545 0x6546 0x6548 0x6549 0x654A 0x654F 0x6551 0x6553 0x6554 0x6555 0x6556 0x6557 0x6558 0x6559 0x655C 0x655D 0x655E 0x6562 0x6563 0x6564 0x6565 0x6566 0x6567 0x6568 0x656A 0x656C 0x656F 0x6572 0x6573 0x6574 0x6575 0x6576 0x6577 0x6578 0x6579 0x657A 0x657B 0x657C 0x657F 0x6580 0x6581 0x6582 0x6583 0x6584 0x6587 0x658C 0x6590 0x6591 0x6592 0x6594 0x6595 0x6596 0x6597 0x6599 0x659B 0x659C 0x659D 0x659E 0x659F 0x65A0 0x65A1 0x65A2 0x65A4 0x65A5 0x65A7 0x65A8 0x65AA 0x65AB 0x65AC 0x65AE 0x65AF 0x65B0 0x65B2 0x65B3 0x65B6 0x65B7 0x65B8 0x65B9 0x65BB 0x65BC 0x65BD 0x65BF 0x65C1 0x65C2 0x65C3 0x65C4 0x65C5 0x65C6 0x65CB 0x65CC 0x65CD 0x65CE 0x65CF 0x65D0 0x65D2 0x65D3 0x65D6 0x65D7 0x65DA 0x65DB 0x65DD 0x65DE 0x65DF 0x65E1 0x65E2 0x65E5 0x65E6 0x65E8 0x65E9 0x65EC 0x65ED 0x65EE 0x65EF 0x65F0 0x65F1 0x65F2 0x65F3 0x65F4 0x65F5 0x65FA 0x65FB 0x65FC 0x65FD 0x6600 0x6602 0x6603 0x6604 0x6605 0x6606 0x6607 0x6608 0x6609 0x660A 0x660B 0x660C 0x660D 0x660E 0x660F 0x6610 0x6611 0x6612 0x6613 0x6614 0x6615 0x661C 0x661D 0x661F 0x6620 0x6621 0x6622 0x6624 0x6625 0x6626 0x6627 0x6628 0x662B 0x662D 0x662E 0x662F 0x6631 0x6632 0x6633 0x6634 0x6635 0x6636 0x6639 0x663A 0x6641 0x6642 0x6643 0x6645 0x6647 0x6649 0x664A 0x664C 0x664F 0x6651 0x6652 0x6659 0x665A 0x665B 0x665C 0x665D 0x665E 0x665F 0x6661 0x6662 0x6664 0x6665 0x6666 0x6668 0x666A 0x666C 0x666E 0x666F 0x6670 0x6671 0x6672 0x6674 0x6676 0x6677 0x6678 0x6679 0x667A 0x667B 0x667C 0x667E 0x6680 0x6684 0x6686 0x6687 0x6688 0x6689 0x668A 0x668B 0x668C 0x668D 0x6690 0x6691 0x6694 0x6695 0x6696 0x6697 0x6698 0x6699 0x669D 0x669F 0x66A0 0x66A1 0x66A2 0x66A8 0x66A9 0x66AA 0x66AB 0x66AE 0x66AF 0x66B0 0x66B1 0x66B2 0x66B4 0x66B5 0x66B7 0x66B8 0x66B9 0x66BA 0x66BB 0x66BD 0x66BE 0x66C0 0x66C4 0x66C6 0x66C7 0x66C8 0x66C9 0x66CA 0x66CB 0x66CC 0x66CF 0x66D2 0x66D6 0x66D8 0x66D9 0x66DA 0x66DB 0x66DC 0x66DD 0x66DE 0x66E0 0x66E3 0x66E4 0x66E6 0x66E8 0x66E9 0x66EB 0x66EC 0x66ED 0x66EE 0x66F0 0x66F2 0x66F3 0x66F4 0x66F6 0x66F7 0x66F8 0x66F9 0x66FC 0x66FE 0x66FF 0x6700 0x6701 0x6703 0x6704 0x6705 0x6708 0x6709 0x670A 0x670B 0x670D 0x670F 0x6710 0x6712 0x6713 0x6714 0x6715 0x6717 0x6718 0x671B 0x671D 0x671F 0x6720 0x6721 0x6722 0x6723 0x6726 0x6727 0x6728 0x672A 0x672B 0x672C 0x672D 0x672E 0x6731 0x6733 0x6734 0x6735 0x6738 0x6739 0x673A 0x673B 0x673C 0x673D 0x673E 0x673F 0x6745 0x6746 0x6747 0x6748 0x6749 0x674B 0x674C 0x674D 0x674E 0x674F 0x6750 0x6751 0x6753 0x6755 0x6756 0x6757 0x6759 0x675A 0x675C 0x675D 0x675E 0x675F 0x6760 0x676A 0x676C 0x676D 0x676F 0x6770 0x6771 0x6772 0x6773 0x6774 0x6775 0x6776 0x6777 0x6778 0x6779 0x677A 0x677B 0x677C 0x677D 0x677E 0x677F 0x6781 0x6783 0x6784 0x6785 0x6786 0x6787 0x6789 0x678B 0x678C 0x678D 0x678E 0x6790 0x6791 0x6792 0x6793 0x6794 0x6795 0x6797 0x6798 0x6799 0x679A 0x679C 0x679D 0x679F 0x67AE 0x67AF 0x67B0 0x67B2 0x67B3 0x67B4 0x67B5 0x67B6 0x67B7 0x67B8 0x67B9 0x67BA 0x67BB 0x67C0 0x67C1 0x67C2 0x67C3 0x67C4 0x67C5 0x67C6 0x67C8 0x67C9 0x67CA 0x67CB 0x67CC 0x67CD 0x67CE 0x67CF 0x67D0 0x67D1 0x67D2 0x67D3 0x67D4 0x67D8 0x67D9 0x67DA 0x67DB 0x67DC 0x67DD 0x67DE 0x67DF 0x67E2 0x67E3 0x67E4 0x67E5 0x67E6 0x67E7 0x67E9 0x67EA 0x67EB 0x67EC 0x67ED 0x67EE 0x67EF 0x67F0 0x67F1 0x67F2 0x67F3 0x67F4 0x67F5 0x67F6 0x67F7 0x67F8 0x67FA 0x67FC 0x67FF 0x6812 0x6813 0x6814 0x6816 0x6817 0x6818 0x681A 0x681C 0x681D 0x681F 0x6820 0x6821 0x6825 0x6826 0x6828 0x6829 0x682A 0x682B 0x682D 0x682E 0x682F 0x6831 0x6832 0x6833 0x6834 0x6835 0x6838 0x6839 0x683A 0x683B 0x683C 0x683D 0x6840 0x6841 0x6842 0x6843 0x6844 0x6845 0x6846 0x6848 0x6849 0x684B 0x684C 0x684D 0x684E 0x684F 0x6850 0x6851 0x6853 0x6854 0x686B 0x686D 0x686E 0x686F 0x6871 0x6872 0x6874 0x6875 0x6876 0x6877 0x6878 0x6879 0x687B 0x687C 0x687D 0x687E 0x687F 0x6880 0x6881 0x6882 0x6883 0x6885 0x6886 0x6887 0x6889 0x688A 0x688B 0x688C 0x688F 0x6890 0x6891 0x6892 0x6893 0x6894 0x6896 0x6897 0x689B 0x689C 0x689D 0x689F 0x68A0 0x68A1 0x68A2 0x68A3 0x68A4 0x68A7 0x68A8 0x68A9 0x68AA 0x68AB 0x68AC 0x68AD 0x68AE 0x68AF 0x68B0 0x68B1 0x68B2 0x68B3 0x68B4 0x68B5 0x68C4 0x68C6 0x68C7 0x68C8 0x68C9 0x68CB 0x68CC 0x68CD 0x68CE 0x68D0 0x68D1 0x68D2 0x68D3 0x68D4 0x68D5 0x68D6 0x68D7 0x68D8 0x68DA 0x68DC 0x68DD 0x68DE 0x68DF 0x68E0 0x68E1 0x68E3 0x68E4 0x68E6 0x68E7 0x68E8 0x68E9 0x68EA 0x68EB 0x68EC 0x68EE 0x68EF 0x68F0 0x68F1 0x68F2 0x68F3 0x68F4 0x68F5 0x68F6 0x68F7 0x68F8 0x68F9 0x68FA 0x68FB 0x68FC 0x68FD 0x6904 0x6905 0x6906 0x6907 0x6908 0x690A 0x690B 0x690C 0x690D 0x690E 0x690F 0x6910 0x6911 0x6912 0x6913 0x6914 0x6915 0x6917 0x6925 0x692A 0x692F 0x6930 0x6932 0x6933 0x6934 0x6935 0x6937 0x6938 0x6939 0x693B 0x693C 0x693D 0x693F 0x6940 0x6941 0x6942 0x6944 0x6945 0x6948 0x6949 0x694A 0x694B 0x694C 0x694E 0x694F 0x6951 0x6952 0x6953 0x6954 0x6956 0x6957 0x6958 0x6959 0x695A 0x695B 0x695C 0x695D 0x695E 0x695F 0x6960 0x6962 0x6963 0x6965 0x6966 0x6968 0x6969 0x696A 0x696B 0x696C 0x696D 0x696E 0x696F 0x6970 0x6971 0x6974 0x6975 0x6976 0x6977 0x6978 0x6979 0x697A 0x697B 0x6982 0x6983 0x6986 0x698D 0x698E 0x6990 0x6991 0x6993 0x6994 0x6995 0x6996 0x6997 0x6999 0x699A 0x699B 0x699C 0x699E 0x69A0 0x69A1 0x69A3 0x69A4 0x69A5 0x69A6 0x69A7 0x69A8 0x69A9 0x69AA 0x69AB 0x69AC 0x69AD 0x69AE 0x69AF 0x69B0 0x69B1 0x69B3 0x69B4 0x69B5 0x69B6 0x69B7 0x69B9 0x69BB 0x69BC 0x69BD 0x69BE 0x69BF 0x69C1 0x69C2 0x69C3 0x69C4 0x69C6 0x69C9 0x69CA 0x69CB 0x69CC 0x69CD 0x69CE 0x69CF 0x69D0 0x69D3 0x69D4 0x69D9 0x69E2 0x69E4 0x69E5 0x69E6 0x69E7 0x69E8 0x69EB 0x69EC 0x69ED 0x69EE 0x69F1 0x69F2 0x69F3 0x69F4 0x69F6 0x69F7 0x69F8 0x69FB 0x69FC 0x69FD 0x69FE 0x69FF 0x6A00 0x6A01 0x6A02 0x6A04 0x6A05 0x6A06 0x6A07 0x6A08 0x6A09 0x6A0A 0x6A0D 0x6A0F 0x6A11 0x6A13 0x6A14 0x6A15 0x6A16 0x6A17 0x6A18 0x6A19 0x6A1B 0x6A1D 0x6A1E 0x6A1F 0x6A20 0x6A21 0x6A23 0x6A25 0x6A26 0x6A27 0x6A28 0x6A32 0x6A34 0x6A35 0x6A38 0x6A39 0x6A3A 0x6A3B 0x6A3C 0x6A3D 0x6A3E 0x6A3F 0x6A40 0x6A41 0x6A44 0x6A46 0x6A47 0x6A48 0x6A49 0x6A4B 0x6A4D 0x6A4E 0x6A4F 0x6A50 0x6A51 0x6A54 0x6A55 0x6A56 0x6A58 0x6A59 0x6A5A 0x6A5B 0x6A5D 0x6A5E 0x6A5F 0x6A60 0x6A61 0x6A62 0x6A64 0x6A66 0x6A67 0x6A68 0x6A69 0x6A6A 0x6A6B 0x6A6D 0x6A6F 0x6A76 0x6A7E 0x6A7F 0x6A80 0x6A81 0x6A83 0x6A84 0x6A85 0x6A87 0x6A89 0x6A8C 0x6A8D 0x6A8E 0x6A90 0x6A91 0x6A92 0x6A93 0x6A94 0x6A95 0x6A96 0x6A97 0x6A9A 0x6A9B 0x6A9C 0x6A9E 0x6A9F 0x6AA0 0x6AA1 0x6AA2 0x6AA3 0x6AA4 0x6AA5 0x6AA6 0x6AA8 0x6AAC 0x6AAD 0x6AAE 0x6AAF 0x6AB3 0x6AB4 0x6AB6 0x6AB7 0x6AB8 0x6AB9 0x6ABA 0x6ABB 0x6ABD 0x6AC2 0x6AC3 0x6AC5 0x6AC6 0x6AC7 0x6ACB 0x6ACC 0x6ACD 0x6ACF 0x6AD0 0x6AD1 0x6AD3 0x6AD9 0x6ADA 0x6ADB 0x6ADC 0x6ADD 0x6ADE 0x6ADF 0x6AE0 0x6AE1 0x6AE5 0x6AE7 0x6AE8 0x6AEA 0x6AEB 0x6AEC 0x6AEE 0x6AEF 0x6AF0 0x6AF1 0x6AF3 0x6AF8 0x6AF9 0x6AFA 0x6AFB 0x6AFC 0x6B00 0x6B02 0x6B03 0x6B04 0x6B08 0x6B09 0x6B0A 0x6B0B 0x6B0F 0x6B10 0x6B11 0x6B12 0x6B13 0x6B16 0x6B17 0x6B18 0x6B19 0x6B1A 0x6B1E 0x6B20 0x6B21 0x6B23 0x6B25 0x6B28 0x6B2C 0x6B2D 0x6B2F 0x6B31 0x6B32 0x6B33 0x6B34 0x6B36 0x6B37 0x6B38 0x6B39 0x6B3A 0x6B3B 0x6B3C 0x6B3D 0x6B3E 0x6B3F 0x6B41 0x6B42 0x6B43 0x6B45 0x6B46 0x6B47 0x6B48 0x6B49 0x6B4A 0x6B4B 0x6B4C 0x6B4D 0x6B4E 0x6B50 0x6B51 0x6B54 0x6B55 0x6B56 0x6B59 0x6B5B 0x6B5C 0x6B5E 0x6B5F 0x6B60 0x6B61 0x6B62 0x6B63 0x6B64 0x6B65 0x6B66 0x6B67 0x6B6A 0x6B6D 0x6B72 0x6B76 0x6B77 0x6B78 0x6B79 0x6B7B 0x6B7E 0x6B7F 0x6B80 0x6B82 0x6B83 0x6B84 0x6B86 0x6B88 0x6B89 0x6B8A 0x6B8C 0x6B8D 0x6B8E 0x6B8F 0x6B91 0x6B94 0x6B95 0x6B96 0x6B97 0x6B98 0x6B99 0x6B9B 0x6B9E 0x6B9F 0x6BA0 0x6BA2 0x6BA3 0x6BA4 0x6BA5 0x6BA6 0x6BA7 0x6BAA 0x6BAB 0x6BAD 0x6BAE 0x6BAF 0x6BB0 0x6BB2 0x6BB3 0x6BB5 0x6BB6 0x6BB7 0x6BBA 0x6BBC 0x6BBD 0x6BBF 0x6BC0 0x6BC3 0x6BC4 0x6BC5 0x6BC6 0x6BC7 0x6BC8 0x6BC9 0x6BCA 0x6BCB 0x6BCC 0x6BCD 0x6BCF 0x6BD0 0x6BD2 0x6BD3 0x6BD4 0x6BD6 0x6BD7 0x6BD8 0x6BDA 0x6BDB 0x6BDE 0x6BE0 0x6BE2 0x6BE3 0x6BE4 0x6BE6 0x6BE7 0x6BE8 0x6BEB 0x6BEC 0x6BEF 0x6BF0 0x6BF2 0x6BF3 0x6BF7 0x6BF8 0x6BF9 0x6BFB 0x6BFC 0x6BFD 0x6BFE 0x6BFF 0x6C00 0x6C01 0x6C02 0x6C03 0x6C04 0x6C05 0x6C06 0x6C08 0x6C09 0x6C0B 0x6C0C 0x6C0D 0x6C0F 0x6C10 0x6C11 0x6C13 0x6C14 0x6C15 0x6C16 0x6C18 0x6C19 0x6C1A 0x6C1B 0x6C1D 0x6C1F 0x6C20 0x6C21 0x6C23 0x6C24 0x6C25 0x6C26 0x6C27 0x6C28 0x6C2A 0x6C2B 0x6C2C 0x6C2E 0x6C2F 0x6C30 0x6C33 0x6C34 0x6C36 0x6C38 0x6C3B 0x6C3E 0x6C3F 0x6C40 0x6C41 0x6C42 0x6C43 0x6C46 0x6C4A 0x6C4B 0x6C4C 0x6C4D 0x6C4E 0x6C4F 0x6C50 0x6C52 0x6C54 0x6C55 0x6C57 0x6C59 0x6C5B 0x6C5C 0x6C5D 0x6C5E 0x6C5F 0x6C60 0x6C61 0x6C65 0x6C66 0x6C67 0x6C68 0x6C69 0x6C6A 0x6C6B 0x6C6D 0x6C6F 0x6C70 0x6C71 0x6C72 0x6C73 0x6C74 0x6C76 0x6C78 0x6C7A 0x6C7B 0x6C7D 0x6C7E 0x6C80 0x6C81 0x6C82 0x6C83 0x6C84 0x6C85 0x6C86 0x6C87 0x6C88 0x6C89 0x6C8A 0x6C8B 0x6C8C 0x6C8D 0x6C8E 0x6C8F 0x6C90 0x6C92 0x6C93 0x6C94 0x6C95 0x6C96 0x6C98 0x6C99 0x6C9A 0x6C9B 0x6C9C 0x6C9D 0x6CAB 0x6CAC 0x6CAD 0x6CAE 0x6CB0 0x6CB1 0x6CB3 0x6CB4 0x6CB6 0x6CB7 0x6CB8 0x6CB9 0x6CBA 0x6CBB 0x6CBC 0x6CBD 0x6CBE 0x6CBF 0x6CC0 0x6CC1 0x6CC2 0x6CC3 0x6CC4 0x6CC5 0x6CC6 0x6CC7 0x6CC9 0x6CCA 0x6CCC 0x6CCD 0x6CCF 0x6CD0 0x6CD1 0x6CD2 0x6CD3 0x6CD4 0x6CD5 0x6CD6 0x6CD7 0x6CD9 0x6CDA 0x6CDB 0x6CDC 0x6CDD 0x6CDE 0x6CE0 0x6CE1 0x6CE2 0x6CE3 0x6CE5 0x6CE7 0x6CE8 0x6CE9 0x6CEB 0x6CEC 0x6CED 0x6CEE 0x6CEF 0x6CF0 0x6CF1 0x6CF2 0x6CF3 0x6CF5 0x6CF9 0x6D00 0x6D01 0x6D03 0x6D04 0x6D07 0x6D08 0x6D09 0x6D0A 0x6D0B 0x6D0C 0x6D0D 0x6D0E 0x6D0F 0x6D10 0x6D11 0x6D12 0x6D16 0x6D17 0x6D18 0x6D19 0x6D1A 0x6D1B 0x6D1D 0x6D1E 0x6D1F 0x6D20 0x6D22 0x6D25 0x6D27 0x6D28 0x6D29 0x6D2A 0x6D2B 0x6D2C 0x6D2D 0x6D2E 0x6D2F 0x6D30 0x6D31 0x6D32 0x6D33 0x6D34 0x6D35 0x6D36 0x6D37 0x6D38 0x6D39 0x6D3A 0x6D3B 0x6D3C 0x6D3D 0x6D3E 0x6D3F 0x6D40 0x6D41 0x6D42 0x6D58 0x6D59 0x6D5A 0x6D5E 0x6D5F 0x6D60 0x6D61 0x6D62 0x6D63 0x6D64 0x6D65 0x6D66 0x6D67 0x6D68 0x6D69 0x6D6A 0x6D6C 0x6D6D 0x6D6E 0x6D6F 0x6D70 0x6D74 0x6D75 0x6D76 0x6D77 0x6D78 0x6D79 0x6D7A 0x6D7B 0x6D7C 0x6D7D 0x6D7E 0x6D7F 0x6D80 0x6D82 0x6D83 0x6D84 0x6D85 0x6D86 0x6D87 0x6D88 0x6D89 0x6D8A 0x6D8B 0x6D8C 0x6D8D 0x6D8E 0x6D90 0x6D91 0x6D92 0x6D93 0x6D94 0x6D95 0x6D97 0x6D98 0x6DAA 0x6DAB 0x6DAC 0x6DAE 0x6DAF 0x6DB2 0x6DB3 0x6DB4 0x6DB5 0x6DB7 0x6DB8 0x6DBA 0x6DBB 0x6DBC 0x6DBD 0x6DBE 0x6DBF 0x6DC0 0x6DC2 0x6DC4 0x6DC5 0x6DC6 0x6DC7 0x6DC8 0x6DC9 0x6DCA 0x6DCB 0x6DCC 0x6DCD 0x6DCF 0x6DD0 0x6DD1 0x6DD2 0x6DD3 0x6DD4 0x6DD5 0x6DD6 0x6DD7 0x6DD8 0x6DD9 0x6DDA 0x6DDB 0x6DDC 0x6DDD 0x6DDE 0x6DDF 0x6DE0 0x6DE1 0x6DE2 0x6DE3 0x6DE4 0x6DE5 0x6DE6 0x6DE8 0x6DE9 0x6DEA 0x6DEB 0x6DEC 0x6DED 0x6DEE 0x6DEF 0x6DF0 0x6DF1 0x6DF2 0x6DF3 0x6DF4 0x6DF5 0x6DF6 0x6DF7 0x6DF9 0x6DFA 0x6DFB 0x6DFC 0x6DFD 0x6E00 0x6E03 0x6E05 0x6E19 0x6E1A 0x6E1B 0x6E1C 0x6E1D 0x6E1F 0x6E20 0x6E21 0x6E22 0x6E23 0x6E24 0x6E25 0x6E26 0x6E27 0x6E28 0x6E2B 0x6E2C 0x6E2D 0x6E2E 0x6E2F 0x6E30 0x6E31 0x6E32 0x6E33 0x6E34 0x6E35 0x6E36 0x6E38 0x6E39 0x6E3A 0x6E3B 0x6E3C 0x6E3D 0x6E3E 0x6E3F 0x6E40 0x6E41 0x6E43 0x6E44 0x6E45 0x6E46 0x6E47 0x6E49 0x6E4A 0x6E4B 0x6E4D 0x6E4E 0x6E51 0x6E52 0x6E53 0x6E54 0x6E55 0x6E56 0x6E58 0x6E5A 0x6E5B 0x6E5C 0x6E5D 0x6E5E 0x6E5F 0x6E60 0x6E61 0x6E62 0x6E63 0x6E64 0x6E65 0x6E66 0x6E67 0x6E68 0x6E69 0x6E6B 0x6E6E 0x6E6F 0x6E71 0x6E72 0x6E73 0x6E74 0x6E77 0x6E78 0x6E79 0x6E88 0x6E89 0x6E8D 0x6E8E 0x6E8F 0x6E90 0x6E92 0x6E93 0x6E94 0x6E96 0x6E97 0x6E98 0x6E99 0x6E9B 0x6E9C 0x6E9D 0x6E9E 0x6E9F 0x6EA0 0x6EA1 0x6EA2 0x6EA3 0x6EA4 0x6EA5 0x6EA6 0x6EA7 0x6EAA 0x6EAB 0x6EAE 0x6EAF 0x6EB0 0x6EB1 0x6EB2 0x6EB3 0x6EB4 0x6EB6 0x6EB7 0x6EB9 0x6EBA 0x6EBC 0x6EBD 0x6EBE 0x6EBF 0x6EC0 0x6EC1 0x6EC2 0x6EC3 0x6EC4 0x6EC5 0x6EC6 0x6EC7 0x6EC8 0x6EC9 0x6ECA 0x6ECB 0x6ECC 0x6ECD 0x6ECE 0x6ECF 0x6ED0 0x6ED1 0x6ED2 0x6ED3 0x6ED4 0x6ED5 0x6ED6 0x6ED8 0x6EDC 0x6EEB 0x6EEC 0x6EED 0x6EEE 0x6EEF 0x6EF1 0x6EF2 0x6EF4 0x6EF5 0x6EF6 0x6EF7 0x6EF8 0x6EF9 0x6EFB 0x6EFC 0x6EFD 0x6EFE 0x6EFF 0x6F00 0x6F01 0x6F02 0x6F03 0x6F05 0x6F06 0x6F07 0x6F08 0x6F09 0x6F0A 0x6F0D 0x6F0E 0x6F0F 0x6F12 0x6F13 0x6F14 0x6F15 0x6F18 0x6F19 0x6F1A 0x6F1C 0x6F1E 0x6F1F 0x6F20 0x6F21 0x6F22 0x6F23 0x6F25 0x6F26 0x6F27 0x6F29 0x6F2A 0x6F2B 0x6F2C 0x6F2D 0x6F2E 0x6F2F 0x6F30 0x6F31 0x6F32 0x6F33 0x6F35 0x6F36 0x6F37 0x6F38 0x6F39 0x6F3A 0x6F3B 0x6F3C 0x6F3E 0x6F3F 0x6F40 0x6F41 0x6F43 0x6F4E 0x6F4F 0x6F50 0x6F51 0x6F52 0x6F53 0x6F54 0x6F55 0x6F57 0x6F58 0x6F5A 0x6F5B 0x6F5D 0x6F5E 0x6F5F 0x6F60 0x6F61 0x6F62 0x6F63 0x6F64 0x6F66 0x6F67 0x6F69 0x6F6A 0x6F6B 0x6F6C 0x6F6D 0x6F6E 0x6F6F 0x6F70 0x6F72 0x6F73 0x6F76 0x6F77 0x6F78 0x6F7A 0x6F7B 0x6F7C 0x6F7D 0x6F7E 0x6F7F 0x6F80 0x6F82 0x6F84 0x6F85 0x6F86 0x6F87 0x6F88 0x6F89 0x6F8B 0x6F8C 0x6F8D 0x6F8E 0x6F90 0x6F92 0x6F93 0x6F94 0x6F95 0x6F96 0x6F97 0x6F9E 0x6FA0 0x6FA1 0x6FA2 0x6FA3 0x6FA4 0x6FA5 0x6FA6 0x6FA7 0x6FA8 0x6FA9 0x6FAA 0x6FAB 0x6FAC 0x6FAD 0x6FAE 0x6FAF 0x6FB0 0x6FB1 0x6FB2 0x6FB3 0x6FB4 0x6FB6 0x6FB8 0x6FB9 0x6FBA 0x6FBC 0x6FBD 0x6FBF 0x6FC0 0x6FC1 0x6FC2 0x6FC3 0x6FC4 0x6FC6 0x6FC7 0x6FC8 0x6FC9 0x6FCA 0x6FCB 0x6FCC 0x6FCD 0x6FCE 0x6FCF 0x6FD4 0x6FD5 0x6FD8 0x6FDB 0x6FDC 0x6FDD 0x6FDE 0x6FDF 0x6FE0 0x6FE1 0x6FE2 0x6FE3 0x6FE4 0x6FE6 0x6FE7 0x6FE8 0x6FE9 0x6FEB 0x6FEC 0x6FED 0x6FEE 0x6FEF 0x6FF0 0x6FF1 0x6FF2 0x6FF4 0x6FF7 0x6FFA 0x6FFB 0x6FFC 0x6FFE 0x6FFF 0x7000 0x7001 0x7004 0x7005 0x7006 0x7007 0x7009 0x700A 0x700B 0x700C 0x700D 0x700E 0x700F 0x7011 0x7014 0x7015 0x7016 0x7017 0x7018 0x7019 0x701A 0x701B 0x701C 0x701D 0x701F 0x7020 0x7021 0x7022 0x7023 0x7024 0x7026 0x7027 0x7028 0x7029 0x702A 0x702B 0x702F 0x7030 0x7031 0x7032 0x7033 0x7034 0x7035 0x7037 0x7038 0x7039 0x703A 0x703B 0x703C 0x703E 0x703F 0x7040 0x7041 0x7042 0x7043 0x7044 0x7045 0x7046 0x7048 0x7049 0x704A 0x704C 0x7051 0x7052 0x7055 0x7056 0x7057 0x7058 0x705A 0x705B 0x705D 0x705E 0x705F 0x7060 0x7061 0x7062 0x7063 0x7064 0x7065 0x7066 0x7068 0x7069 0x706A 0x706B 0x7070 0x7071 0x7074 0x7076 0x7078 0x707A 0x707C 0x707D 0x7082 0x7083 0x7084 0x7085 0x7086 0x708A 0x708E 0x7091 0x7092 0x7093 0x7094 0x7095 0x7096 0x7098 0x7099 0x709A 0x709F 0x70A1 0x70A4 0x70A9 0x70AB 0x70AC 0x70AD 0x70AE 0x70AF 0x70B0 0x70B1 0x70B3 0x70B4 0x70B5 0x70B7 0x70B8 0x70BA 0x70BE 0x70C5 0x70C6 0x70C7 0x70C8 0x70CA 0x70CB 0x70CD 0x70CE 0x70CF 0x70D1 0x70D2 0x70D3 0x70D4 0x70D7 0x70D8 0x70D9 0x70DA 0x70DC 0x70DD 0x70DE 0x70E0 0x70E1 0x70E2 0x70E4 0x70EF 0x70F0 0x70F3 0x70F4 0x70F6 0x70F7 0x70F8 0x70F9 0x70FA 0x70FB 0x70FC 0x70FD 0x70FF 0x7100 0x7102 0x7104 0x7106 0x7109 0x710A 0x710B 0x710C 0x710D 0x710E 0x7110 0x7113 0x7117 0x7119 0x711A 0x711B 0x711C 0x711E 0x711F 0x7120 0x7121 0x7122 0x7123 0x7125 0x7126 0x7128 0x712E 0x712F 0x7130 0x7131 0x7132 0x7136 0x713A 0x7141 0x7142 0x7143 0x7144 0x7146 0x7147 0x7149 0x714B 0x714C 0x714D 0x714E 0x7150 0x7152 0x7153 0x7154 0x7156 0x7158 0x7159 0x715A 0x715C 0x715D 0x715E 0x715F 0x7160 0x7161 0x7162 0x7163 0x7164 0x7165 0x7166 0x7167 0x7168 0x7169 0x716A 0x716C 0x716E 0x7170 0x7172 0x7178 0x717B 0x717D 0x7180 0x7181 0x7182 0x7184 0x7185 0x7186 0x7187 0x7189 0x718A 0x718F 0x7190 0x7192 0x7194 0x7197 0x7199 0x719A 0x719B 0x719C 0x719D 0x719E 0x719F 0x71A0 0x71A1 0x71A4 0x71A5 0x71A7 0x71A8 0x71A9 0x71AA 0x71AC 0x71AF 0x71B0 0x71B1 0x71B2 0x71B3 0x71B5 0x71B8 0x71B9 0x71BC 0x71BD 0x71BE 0x71BF 0x71C0 0x71C1 0x71C2 0x71C3 0x71C4 0x71C5 0x71C6 0x71C7 0x71C8 0x71C9 0x71CA 0x71CB 0x71CE 0x71CF 0x71D0 0x71D2 0x71D4 0x71D5 0x71D6 0x71D8 0x71D9 0x71DA 0x71DB 0x71DC 0x71DF 0x71E0 0x71E1 0x71E2 0x71E4 0x71E5 0x71E6 0x71E7 0x71E8 0x71EC 0x71ED 0x71EE 0x71F0 0x71F1 0x71F2 0x71F4 0x71F8 0x71F9 0x71FB 0x71FC 0x71FD 0x71FE 0x71FF 0x7201 0x7202 0x7203 0x7205 0x7206 0x7207 0x720A 0x720C 0x720D 0x7210 0x7213 0x7214 0x7219 0x721A 0x721B 0x721D 0x721E 0x721F 0x7222 0x7223 0x7226 0x7227 0x7228 0x7229 0x722A 0x722C 0x722D 0x7230 0x7235 0x7236 0x7238 0x7239 0x723A 0x723B 0x723D 0x723E 0x723F 0x7241 0x7242 0x7244 0x7246 0x7247 0x7248 0x7249 0x724A 0x724B 0x724C 0x724F 0x7252 0x7253 0x7256 0x7258 0x7259 0x725A 0x725B 0x725D 0x725E 0x725F 0x7260 0x7261 0x7262 0x7263 0x7267 0x7269 0x726A 0x726C 0x726E 0x726F 0x7270 0x7272 0x7273 0x7274 0x7276 0x7277 0x7278 0x7279 0x727B 0x727C 0x727D 0x727E 0x727F 0x7280 0x7281 0x7284 0x7285 0x7286 0x7288 0x7289 0x728B 0x728C 0x728D 0x728E 0x7290 0x7291 0x7292 0x7293 0x7295 0x7296 0x7297 0x7298 0x729A 0x729B 0x729D 0x729E 0x72A1 0x72A2 0x72A3 0x72A4 0x72A5 0x72A6 0x72A7 0x72A8 0x72A9 0x72AA 0x72AC 0x72AE 0x72AF 0x72B0 0x72B4 0x72B5 0x72BA 0x72BD 0x72BF 0x72C0 0x72C1 0x72C2 0x72C3 0x72C4 0x72C5 0x72C6 0x72C9 0x72CA 0x72CB 0x72CC 0x72CE 0x72D0 0x72D1 0x72D2 0x72D4 0x72D6 0x72D7 0x72D8 0x72D9 0x72DA 0x72DC 0x72DF 0x72E0 0x72E1 0x72E3 0x72E4 0x72E6 0x72E8 0x72E9 0x72EA 0x72EB 0x72F3 0x72F4 0x72F6 0x72F7 0x72F8 0x72F9 0x72FA 0x72FB 0x72FC 0x72FD 0x72FE 0x72FF 0x7300 0x7301 0x7307 0x7308 0x730A 0x730B 0x730C 0x730F 0x7311 0x7312 0x7313 0x7316 0x7317 0x7318 0x7319 0x731B 0x731C 0x731D 0x731E 0x7322 0x7323 0x7325 0x7326 0x7327 0x7329 0x732D 0x7330 0x7331 0x7332 0x7333 0x7334 0x7335 0x7336 0x7337 0x733A 0x733B 0x733C 0x733E 0x733F 0x7340 0x7342 0x7343 0x7344 0x7345 0x7349 0x734A 0x734C 0x734D 0x734E 0x7350 0x7351 0x7352 0x7357 0x7358 0x7359 0x735A 0x735B 0x735D 0x735E 0x735F 0x7360 0x7361 0x7362 0x7365 0x7366 0x7367 0x7368 0x7369 0x736A 0x736B 0x736C 0x736E 0x736F 0x7370 0x7372 0x7373 0x7375 0x7376 0x7377 0x7378 0x737A 0x737B 0x737C 0x737D 0x737E 0x737F 0x7380 0x7381 0x7382 0x7383 0x7384 0x7385 0x7386 0x7387 0x7388 0x7389 0x738A 0x738B 0x738E 0x7392 0x7393 0x7394 0x7395 0x7396 0x7397 0x739D 0x739F 0x73A0 0x73A1 0x73A2 0x73A4 0x73A5 0x73A6 0x73A8 0x73A9 0x73AB 0x73AC 0x73AD 0x73B2 0x73B3 0x73B4 0x73B5 0x73B6 0x73B7 0x73B8 0x73B9 0x73BB 0x73BC 0x73BE 0x73BF 0x73C0 0x73C2 0x73C3 0x73C5 0x73C6 0x73C7 0x73C8 0x73CA 0x73CB 0x73CC 0x73CD 0x73D2 0x73D3 0x73D4 0x73D6 0x73D7 0x73D8 0x73D9 0x73DA 0x73DB 0x73DC 0x73DD 0x73DE 0x73E0 0x73E3 0x73E5 0x73E7 0x73E8 0x73E9 0x73EA 0x73EB 0x73ED 0x73EE 0x73F4 0x73F5 0x73F6 0x73F8 0x73FA 0x73FC 0x73FD 0x73FE 0x73FF 0x7400 0x7401 0x7403 0x7404 0x7405 0x7406 0x7407 0x7408 0x7409 0x740A 0x740B 0x740C 0x740D 0x7416 0x741A 0x741B 0x741D 0x7420 0x7421 0x7422 0x7423 0x7424 0x7425 0x7426 0x7428 0x7429 0x742A 0x742B 0x742C 0x742D 0x742E 0x742F 0x7430 0x7431 0x7432 0x7433 0x7434 0x7435 0x7436 0x743A 0x743F 0x7440 0x7441 0x7442 0x7444 0x7446 0x744A 0x744B 0x744D 0x744E 0x744F 0x7450 0x7451 0x7452 0x7454 0x7455 0x7457 0x7459 0x745A 0x745B 0x745C 0x745E 0x745F 0x7462 0x7463 0x7464 0x7467 0x7469 0x746A 0x746D 0x746E 0x746F 0x7470 0x7471 0x7472 0x7473 0x7475 0x7479 0x747C 0x747D 0x747E 0x747F 0x7480 0x7481 0x7483 0x7485 0x7486 0x7487 0x7488 0x7489 0x748A 0x748B 0x7490 0x7492 0x7494 0x7495 0x7497 0x7498 0x749A 0x749C 0x749E 0x749F 0x74A0 0x74A1 0x74A3 0x74A5 0x74A6 0x74A7 0x74A8 0x74A9 0x74AA 0x74AB 0x74AD 0x74AF 0x74B0 0x74B1 0x74B2 0x74B5 0x74B6 0x74B7 0x74B8 0x74BA 0x74BB 0x74BD 0x74BE 0x74BF 0x74C0 0x74C1 0x74C2 0x74C3 0x74C5 0x74CA 0x74CB 0x74CF 0x74D4 0x74D5 0x74D6 0x74D7 0x74D8 0x74D9 0x74DA 0x74DB 0x74DC 0x74DD 0x74DE 0x74DF 0x74E0 0x74E1 0x74E2 0x74E3 0x74E4 0x74E5 0x74E6 0x74E8 0x74E9 0x74EC 0x74EE 0x74F4 0x74F5 0x74F6 0x74F7 0x74FB 0x74FD 0x74FE 0x74FF 0x7500 0x7502 0x7503 0x7504 0x7507 0x7508 0x750B 0x750C 0x750D 0x750F 0x7510 0x7511 0x7512 0x7513 0x7514 0x7515 0x7516 0x7517 0x7518 0x751A 0x751C 0x751D 0x751F 0x7521 0x7522 0x7525 0x7526 0x7528 0x7529 0x752A 0x752B 0x752C 0x752D 0x752E 0x752F 0x7530 0x7531 0x7532 0x7533 0x7537 0x7538 0x7539 0x753A 0x753D 0x753E 0x753F 0x7540 0x7547 0x7548 0x754B 0x754C 0x754E 0x754F 0x7554 0x7559 0x755A 0x755B 0x755C 0x755D 0x755F 0x7562 0x7563 0x7564 0x7565 0x7566 0x756A 0x756B 0x756C 0x756F 0x7570 0x7576 0x7577 0x7578 0x7579 0x757D 0x757E 0x757F 0x7580 0x7584 0x7586 0x7587 0x758A 0x758B 0x758C 0x758F 0x7590 0x7591 0x7594 0x7595 0x7598 0x7599 0x759A 0x759D 0x75A2 0x75A3 0x75A4 0x75A5 0x75A7 0x75AA 0x75AB 0x75B0 0x75B2 0x75B3 0x75B5 0x75B6 0x75B8 0x75B9 0x75BA 0x75BB 0x75BC 0x75BD 0x75BE 0x75BF 0x75C0 0x75C1 0x75C2 0x75C4 0x75C5 0x75C7 0x75CA 0x75CB 0x75CC 0x75CD 0x75CE 0x75CF 0x75D0 0x75D1 0x75D2 0x75D4 0x75D5 0x75D7 0x75D8 0x75D9 0x75DA 0x75DB 0x75DD 0x75DE 0x75DF 0x75E0 0x75E1 0x75E2 0x75E3 0x75E4 0x75E6 0x75E7 0x75ED 0x75EF 0x75F0 0x75F1 0x75F2 0x75F3 0x75F4 0x75F5 0x75F6 0x75F7 0x75F8 0x75F9 0x75FA 0x75FB 0x75FC 0x75FD 0x75FE 0x75FF 0x7600 0x7601 0x7603 0x7608 0x7609 0x760A 0x760B 0x760C 0x760D 0x760F 0x7610 0x7611 0x7613 0x7614 0x7615 0x7616 0x7619 0x761A 0x761B 0x761C 0x761D 0x761E 0x761F 0x7620 0x7621 0x7622 0x7623 0x7624 0x7625 0x7626 0x7627 0x7628 0x7629 0x762D 0x762F 0x7630 0x7631 0x7632 0x7633 0x7634 0x7635 0x7638 0x763A 0x763C 0x763D 0x7642 0x7643 0x7646 0x7647 0x7648 0x7649 0x764C 0x7650 0x7652 0x7653 0x7656 0x7657 0x7658 0x7659 0x765A 0x765C 0x765F 0x7660 0x7661 0x7662 0x7664 0x7665 0x7669 0x766A 0x766C 0x766D 0x766E 0x7670 0x7671 0x7672 0x7675 0x7678 0x7679 0x767B 0x767C 0x767D 0x767E 0x767F 0x7681 0x7682 0x7684 0x7686 0x7687 0x7688 0x7689 0x768A 0x768B 0x768E 0x768F 0x7692 0x7693 0x7695 0x7696 0x7699 0x769A 0x769B 0x769C 0x769D 0x769E 0x76A4 0x76A6 0x76AA 0x76AB 0x76AD 0x76AE 0x76AF 0x76B0 0x76B4 0x76B5 0x76B8 0x76BA 0x76BB 0x76BD 0x76BE 0x76BF 0x76C2 0x76C3 0x76C4 0x76C5 0x76C6 0x76C8 0x76C9 0x76CA 0x76CD 0x76CE 0x76D2 0x76D3 0x76D4 0x76DA 0x76DB 0x76DC 0x76DD 0x76DE 0x76DF 0x76E1 0x76E3 0x76E4 0x76E5 0x76E6 0x76E7 0x76E9 0x76EA 0x76EC 0x76ED 0x76EE 0x76EF 0x76F0 0x76F1 0x76F2 0x76F3 0x76F4 0x76F5 0x76F7 0x76F8 0x76F9 0x76FA 0x76FB 0x76FC 0x76FE 0x7701 0x7703 0x7704 0x7705 0x7707 0x7708 0x7709 0x770A 0x770B 0x7710 0x7711 0x7712 0x7713 0x7715 0x7719 0x771A 0x771B 0x771D 0x771F 0x7720 0x7722 0x7723 0x7725 0x7727 0x7728 0x7729 0x772D 0x772F 0x7731 0x7732 0x7733 0x7734 0x7735 0x7736 0x7737 0x7738 0x7739 0x773A 0x773B 0x773C 0x773D 0x773E 0x7744 0x7745 0x7746 0x7747 0x774A 0x774B 0x774C 0x774D 0x774E 0x774F 0x7752 0x7754 0x7755 0x7756 0x7759 0x775A 0x775B 0x775C 0x775E 0x775F 0x7760 0x7761 0x7762 0x7763 0x7765 0x7766 0x7767 0x7768 0x7769 0x776A 0x776B 0x776C 0x776D 0x776E 0x776F 0x7779 0x777C 0x777D 0x777E 0x777F 0x7780 0x7781 0x7782 0x7783 0x7784 0x7785 0x7787 0x7788 0x7789 0x778B 0x778C 0x778D 0x778E 0x778F 0x7791 0x7795 0x7797 0x7799 0x779A 0x779B 0x779C 0x779D 0x779E 0x779F 0x77A0 0x77A1 0x77A2 0x77A3 0x77A5 0x77A7 0x77A8 0x77AA 0x77AB 0x77AC 0x77AD 0x77B0 0x77B1 0x77B2 0x77B3 0x77B4 0x77B5 0x77B6 0x77B7 0x77BA 0x77BB 0x77BC 0x77BD 0x77BF 0x77C2 0x77C4 0x77C7 0x77C9 0x77CA 0x77CC 0x77CD 0x77CE 0x77CF 0x77D0 0x77D3 0x77D4 0x77D5 0x77D7 0x77D8 0x77D9 0x77DA 0x77DB 0x77DC 0x77DE 0x77E0 0x77E2 0x77E3 0x77E5 0x77E7 0x77E8 0x77E9 0x77EC 0x77ED 0x77EE 0x77EF 0x77F0 0x77F1 0x77F2 0x77F3 0x77F7 0x77F8 0x77F9 0x77FA 0x77FB 0x77FC 0x77FD 0x7802 0x7803 0x7805 0x7806 0x7809 0x780C 0x780D 0x780E 0x780F 0x7810 0x7811 0x7812 0x7813 0x7814 0x781D 0x781F 0x7820 0x7821 0x7822 0x7823 0x7825 0x7826 0x7827 0x7828 0x7829 0x782A 0x782B 0x782C 0x782D 0x782E 0x782F 0x7830 0x7831 0x7832 0x7833 0x7834 0x7835 0x7837 0x7838 0x7843 0x7845 0x7848 0x7849 0x784A 0x784C 0x784D 0x784E 0x7850 0x7852 0x785C 0x785D 0x785E 0x7860 0x7862 0x7864 0x7865 0x7868 0x7869 0x786A 0x786B 0x786C 0x786D 0x786E 0x786F 0x7870 0x7871 0x7879 0x787B 0x787C 0x787E 0x787F 0x7880 0x7883 0x7884 0x7885 0x7886 0x7887 0x7889 0x788C 0x788E 0x788F 0x7891 0x7893 0x7894 0x7895 0x7896 0x7897 0x7898 0x7899 0x789A 0x789E 0x789F 0x78A0 0x78A1 0x78A2 0x78A3 0x78A4 0x78A5 0x78A7 0x78A8 0x78A9 0x78AA 0x78AB 0x78AC 0x78AD 0x78B0 0x78B2 0x78B3 0x78B4 0x78BA 0x78BB 0x78BC 0x78BE 0x78C1 0x78C3 0x78C4 0x78C5 0x78C8 0x78C9 0x78CA 0x78CB 0x78CC 0x78CD 0x78CE 0x78CF 0x78D0 0x78D1 0x78D4 0x78D5 0x78DA 0x78DB 0x78DD 0x78DE 0x78DF 0x78E0 0x78E1 0x78E2 0x78E3 0x78E5 0x78E7 0x78E8 0x78E9 0x78EA 0x78EC 0x78ED 0x78EF 0x78F2 0x78F3 0x78F4 0x78F7 0x78F9 0x78FA 0x78FB 0x78FC 0x78FD 0x78FE 0x78FF 0x7901 0x7902 0x7904 0x7905 0x7909 0x790C 0x790E 0x7910 0x7911 0x7912 0x7913 0x7914 0x7917 0x7919 0x791B 0x791C 0x791D 0x791E 0x7921 0x7923 0x7924 0x7925 0x7926 0x7927 0x7928 0x7929 0x792A 0x792B 0x792C 0x792D 0x792F 0x7931 0x7935 0x7938 0x7939 0x793A 0x793D 0x793E 0x793F 0x7940 0x7941 0x7942 0x7944 0x7945 0x7946 0x7947 0x7948 0x7949 0x794A 0x794B 0x794C 0x794F 0x7950 0x7951 0x7952 0x7953 0x7954 0x7955 0x7956 0x7957 0x795A 0x795B 0x795C 0x795D 0x795E 0x795F 0x7960 0x7961 0x7963 0x7964 0x7965 0x7967 0x7968 0x7969 0x796A 0x796B 0x796D 0x7970 0x7972 0x7973 0x7974 0x7979 0x797A 0x797C 0x797D 0x797F 0x7981 0x7982 0x7988 0x798A 0x798B 0x798D 0x798E 0x798F 0x7990 0x7992 0x7993 0x7994 0x7995 0x7996 0x7997 0x7998 0x799A 0x799B 0x799C 0x79A0 0x79A1 0x79A2 0x79A4 0x79A6 0x79A7 0x79A8 0x79AA 0x79AB 0x79AC 0x79AD 0x79AE 0x79B0 0x79B1 0x79B2 0x79B3 0x79B4 0x79B6 0x79B7 0x79B8 0x79B9 0x79BA 0x79BB 0x79BD 0x79BE 0x79BF 0x79C0 0x79C1 0x79C5 0x79C8 0x79C9 0x79CB 0x79CD 0x79CE 0x79CF 0x79D1 0x79D2 0x79D5 0x79D6 0x79D8 0x79DC 0x79DD 0x79DE 0x79DF 0x79E0 0x79E3 0x79E4 0x79E6 0x79E7 0x79E9 0x79EA 0x79EB 0x79EC 0x79ED 0x79EE 0x79F6 0x79F7 0x79F8 0x79FA 0x79FB 0x7A00 0x7A02 0x7A03 0x7A04 0x7A05 0x7A08 0x7A0A 0x7A0B 0x7A0C 0x7A0D 0x7A10 0x7A11 0x7A12 0x7A13 0x7A14 0x7A15 0x7A17 0x7A18 0x7A19 0x7A1A 0x7A1B 0x7A1C 0x7A1E 0x7A1F 0x7A20 0x7A22 0x7A26 0x7A28 0x7A2B 0x7A2E 0x7A2F 0x7A30 0x7A31 0x7A37 0x7A39 0x7A3B 0x7A3C 0x7A3D 0x7A3F 0x7A40 0x7A44 0x7A46 0x7A47 0x7A48 0x7A4A 0x7A4B 0x7A4C 0x7A4D 0x7A4E 0x7A54 0x7A56 0x7A57 0x7A58 0x7A5A 0x7A5B 0x7A5C 0x7A5F 0x7A60 0x7A61 0x7A62 0x7A67 0x7A68 0x7A69 0x7A6B 0x7A6C 0x7A6D 0x7A6E 0x7A70 0x7A71 0x7A74 0x7A75 0x7A76 0x7A78 0x7A79 0x7A7A 0x7A7B 0x7A7E 0x7A7F 0x7A80 0x7A81 0x7A84 0x7A85 0x7A86 0x7A87 0x7A88 0x7A89 0x7A8A 0x7A8B 0x7A8C 0x7A8F 0x7A90 0x7A92 0x7A94 0x7A95 0x7A96 0x7A97 0x7A98 0x7A99 0x7A9E 0x7A9F 0x7AA0 0x7AA2 0x7AA3 0x7AA8 0x7AA9 0x7AAA 0x7AAB 0x7AAC 0x7AAE 0x7AAF 0x7AB1 0x7AB2 0x7AB3 0x7AB4 0x7AB5 0x7AB6 0x7AB7 0x7AB8 0x7ABA 0x7ABE 0x7ABF 0x7AC0 0x7AC1 0x7AC4 0x7AC5 0x7AC7 0x7ACA 0x7ACB 0x7AD1 0x7AD8 0x7AD9 0x7ADF 0x7AE0 0x7AE3 0x7AE4 0x7AE5 0x7AE6 0x7AEB 0x7AED 0x7AEE 0x7AEF 0x7AF6 0x7AF7 0x7AF9 0x7AFA 0x7AFB 0x7AFD 0x7AFF 0x7B00 0x7B01 0x7B04 0x7B05 0x7B06 0x7B08 0x7B09 0x7B0A 0x7B0E 0x7B0F 0x7B10 0x7B11 0x7B12 0x7B13 0x7B18 0x7B19 0x7B1A 0x7B1B 0x7B1D 0x7B1E 0x7B20 0x7B22 0x7B23 0x7B24 0x7B25 0x7B26 0x7B28 0x7B2A 0x7B2B 0x7B2C 0x7B2D 0x7B2E 0x7B2F 0x7B30 0x7B31 0x7B32 0x7B33 0x7B34 0x7B35 0x7B38 0x7B3B 0x7B40 0x7B44 0x7B45 0x7B46 0x7B47 0x7B48 0x7B49 0x7B4A 0x7B4B 0x7B4C 0x7B4D 0x7B4E 0x7B4F 0x7B50 0x7B51 0x7B52 0x7B54 0x7B56 0x7B58 0x7B60 0x7B61 0x7B63 0x7B64 0x7B65 0x7B66 0x7B67 0x7B69 0x7B6D 0x7B6E 0x7B70 0x7B71 0x7B72 0x7B73 0x7B74 0x7B75 0x7B76 0x7B77 0x7B78 0x7B82 0x7B84 0x7B85 0x7B87 0x7B88 0x7B8A 0x7B8B 0x7B8C 0x7B8D 0x7B8E 0x7B8F 0x7B90 0x7B91 0x7B94 0x7B95 0x7B96 0x7B97 0x7B98 0x7B99 0x7B9B 0x7B9C 0x7B9D 0x7BA0 0x7BA1 0x7BA4 0x7BAC 0x7BAD 0x7BAF 0x7BB1 0x7BB4 0x7BB5 0x7BB7 0x7BB8 0x7BB9 0x7BBE 0x7BC0 0x7BC1 0x7BC4 0x7BC6 0x7BC7 0x7BC9 0x7BCA 0x7BCB 0x7BCC 0x7BCE 0x7BD4 0x7BD5 0x7BD8 0x7BD9 0x7BDA 0x7BDB 0x7BDC 0x7BDD 0x7BDE 0x7BDF 0x7BE0 0x7BE1 0x7BE2 0x7BE3 0x7BE4 0x7BE5 0x7BE6 0x7BE7 0x7BE8 0x7BE9 0x7BEA 0x7BEB 0x7BF0 0x7BF1 0x7BF2 0x7BF3 0x7BF4 0x7BF7 0x7BF8 0x7BF9 0x7BFB 0x7BFD 0x7BFE 0x7BFF 0x7C00 0x7C01 0x7C02 0x7C03 0x7C05 0x7C06 0x7C07 0x7C09 0x7C0A 0x7C0B 0x7C0C 0x7C0D 0x7C0E 0x7C0F 0x7C10 0x7C11 0x7C19 0x7C1C 0x7C1D 0x7C1E 0x7C1F 0x7C20 0x7C21 0x7C22 0x7C23 0x7C25 0x7C26 0x7C27 0x7C28 0x7C29 0x7C2A 0x7C2B 0x7C2C 0x7C2D 0x7C30 0x7C33 0x7C37 0x7C38 0x7C39 0x7C3B 0x7C3C 0x7C3D 0x7C3E 0x7C3F 0x7C40 0x7C43 0x7C45 0x7C47 0x7C48 0x7C49 0x7C4A 0x7C4C 0x7C4D 0x7C50 0x7C53 0x7C54 0x7C57 0x7C59 0x7C5A 0x7C5B 0x7C5C 0x7C5F 0x7C60 0x7C63 0x7C64 0x7C65 0x7C66 0x7C67 0x7C69 0x7C6A 0x7C6B 0x7C6C 0x7C6E 0x7C6F 0x7C72 0x7C73 0x7C75 0x7C78 0x7C79 0x7C7A 0x7C7D 0x7C7F 0x7C80 0x7C81 0x7C84 0x7C85 0x7C88 0x7C89 0x7C8A 0x7C8C 0x7C8D 0x7C91 0x7C92 0x7C94 0x7C95 0x7C96 0x7C97 0x7C98 0x7C9E 0x7C9F 0x7CA1 0x7CA2 0x7CA3 0x7CA5 0x7CA8 0x7CAF 0x7CB1 0x7CB2 0x7CB3 0x7CB4 0x7CB5 0x7CB9 0x7CBA 0x7CBB 0x7CBC 0x7CBD 0x7CBE 0x7CBF 0x7CC5 0x7CC8 0x7CCA 0x7CCB 0x7CCC 0x7CCE 0x7CD0 0x7CD1 0x7CD2 0x7CD4 0x7CD5 0x7CD6 0x7CD7 0x7CD9 0x7CDC 0x7CDD 0x7CDE 0x7CDF 0x7CE0 0x7CE2 0x7CE7 0x7CE8 0x7CEA 0x7CEC 0x7CEE 0x7CEF 0x7CF0 0x7CF1 0x7CF2 0x7CF4 0x7CF6 0x7CF7 0x7CF8 0x7CFB 0x7CFD 0x7CFE 0x7D00 0x7D01 0x7D02 0x7D03 0x7D04 0x7D05 0x7D06 0x7D07 0x7D08 0x7D09 0x7D0A 0x7D0B 0x7D0C 0x7D0D 0x7D0E 0x7D0F 0x7D10 0x7D11 0x7D12 0x7D13 0x7D14 0x7D15 0x7D16 0x7D17 0x7D18 0x7D19 0x7D1A 0x7D1B 0x7D1C 0x7D1D 0x7D1E 0x7D1F 0x7D20 0x7D21 0x7D22 0x7D28 0x7D29 0x7D2B 0x7D2C 0x7D2E 0x7D2F 0x7D30 0x7D31 0x7D32 0x7D33 0x7D35 0x7D36 0x7D38 0x7D39 0x7D3A 0x7D3B 0x7D3C 0x7D3D 0x7D3E 0x7D3F 0x7D40 0x7D41 0x7D42 0x7D43 0x7D44 0x7D45 0x7D46 0x7D47 0x7D4A 0x7D4E 0x7D4F 0x7D50 0x7D51 0x7D52 0x7D53 0x7D54 0x7D55 0x7D56 0x7D58 0x7D5B 0x7D5C 0x7D5E 0x7D5F 0x7D61 0x7D62 0x7D63 0x7D66 0x7D67 0x7D68 0x7D69 0x7D6A 0x7D6B 0x7D6D 0x7D6E 0x7D6F 0x7D70 0x7D71 0x7D72 0x7D73 0x7D79 0x7D7A 0x7D7B 0x7D7C 0x7D7D 0x7D7F 0x7D80 0x7D81 0x7D83 0x7D84 0x7D85 0x7D86 0x7D88 0x7D8C 0x7D8D 0x7D8E 0x7D8F 0x7D91 0x7D92 0x7D93 0x7D94 0x7D96 0x7D9C 0x7D9D 0x7D9E 0x7D9F 0x7DA0 0x7DA1 0x7DA2 0x7DA3 0x7DA6 0x7DA7 0x7DA9 0x7DAA 0x7DAC 0x7DAD 0x7DAE 0x7DAF 0x7DB0 0x7DB1 0x7DB2 0x7DB4 0x7DB5 0x7DB7 0x7DB8 0x7DB9 0x7DBA 0x7DBB 0x7DBC 0x7DBD 0x7DBE 0x7DBF 0x7DC0 0x7DC1 0x7DC2 0x7DC4 0x7DC5 0x7DC6 0x7DC7 0x7DC9 0x7DCA 0x7DCB 0x7DCC 0x7DCE 0x7DD2 0x7DD7 0x7DD8 0x7DD9 0x7DDA 0x7DDB 0x7DDD 0x7DDE 0x7DDF 0x7DE0 0x7DE1 0x7DE3 0x7DE6 0x7DE7 0x7DE8 0x7DE9 0x7DEA 0x7DEC 0x7DEE 0x7DEF 0x7DF0 0x7DF1 0x7DF2 0x7DF3 0x7DF4 0x7DF6 0x7DF7 0x7DF9 0x7DFA 0x7DFB 0x7E03 0x7E08 0x7E09 0x7E0A 0x7E0B 0x7E0C 0x7E0D 0x7E0E 0x7E0F 0x7E10 0x7E11 0x7E12 0x7E13 0x7E14 0x7E15 0x7E16 0x7E17 0x7E1A 0x7E1B 0x7E1C 0x7E1D 0x7E1E 0x7E1F 0x7E20 0x7E21 0x7E22 0x7E23 0x7E24 0x7E25 0x7E29 0x7E2A 0x7E2B 0x7E2D 0x7E2E 0x7E2F 0x7E30 0x7E31 0x7E32 0x7E33 0x7E34 0x7E35 0x7E36 0x7E37 0x7E38 0x7E39 0x7E3A 0x7E3B 0x7E3C 0x7E3D 0x7E3E 0x7E3F 0x7E40 0x7E41 0x7E42 0x7E43 0x7E44 0x7E45 0x7E46 0x7E47 0x7E48 0x7E49 0x7E4C 0x7E50 0x7E51 0x7E52 0x7E53 0x7E54 0x7E55 0x7E56 0x7E57 0x7E58 0x7E59 0x7E5A 0x7E5C 0x7E5E 0x7E5F 0x7E60 0x7E61 0x7E62 0x7E63 0x7E68 0x7E69 0x7E6A 0x7E6B 0x7E6D 0x7E6F 0x7E70 0x7E72 0x7E73 0x7E74 0x7E75 0x7E76 0x7E77 0x7E78 0x7E79 0x7E7A 0x7E7B 0x7E7C 0x7E7D 0x7E7E 0x7E80 0x7E81 0x7E82 0x7E86 0x7E87 0x7E88 0x7E8A 0x7E8B 0x7E8C 0x7E8D 0x7E8F 0x7E91 0x7E93 0x7E94 0x7E95 0x7E96 0x7E97 0x7E98 0x7E99 0x7E9A 0x7E9B 0x7E9C 0x7F36 0x7F38 0x7F39 0x7F3A 0x7F3D 0x7F3E 0x7F3F 0x7F43 0x7F44 0x7F45 0x7F48 0x7F4A 0x7F4B 0x7F4C 0x7F4D 0x7F4F 0x7F50 0x7F51 0x7F54 0x7F55 0x7F58 0x7F5B 0x7F5C 0x7F5D 0x7F5E 0x7F5F 0x7F60 0x7F61 0x7F63 0x7F65 0x7F66 0x7F67 0x7F68 0x7F69 0x7F6A 0x7F6B 0x7F6C 0x7F6D 0x7F6E 0x7F70 0x7F72 0x7F73 0x7F75 0x7F76 0x7F77 0x7F79 0x7F7A 0x7F7B 0x7F7C 0x7F7D 0x7F7E 0x7F7F 0x7F83 0x7F85 0x7F86 0x7F87 0x7F88 0x7F89 0x7F8A 0x7F8B 0x7F8C 0x7F8D 0x7F8E 0x7F91 0x7F92 0x7F94 0x7F95 0x7F96 0x7F9A 0x7F9B 0x7F9C 0x7F9D 0x7F9E 0x7FA0 0x7FA1 0x7FA2 0x7FA4 0x7FA5 0x7FA6 0x7FA7 0x7FA8 0x7FA9 0x7FAC 0x7FAD 0x7FAF 0x7FB0 0x7FB1 0x7FB2 0x7FB3 0x7FB5 0x7FB6 0x7FB7 0x7FB8 0x7FB9 0x7FBA 0x7FBB 0x7FBC 0x7FBD 0x7FBE 0x7FBF 0x7FC0 0x7FC1 0x7FC2 0x7FC3 0x7FC5 0x7FC7 0x7FC9 0x7FCA 0x7FCB 0x7FCC 0x7FCD 0x7FCE 0x7FCF 0x7FD0 0x7FD1 0x7FD2 0x7FD4 0x7FD5 0x7FD7 0x7FDB 0x7FDC 0x7FDE 0x7FDF 0x7FE0 0x7FE1 0x7FE2 0x7FE3 0x7FE5 0x7FE6 0x7FE8 0x7FE9 0x7FEA 0x7FEB 0x7FEC 0x7FED 0x7FEE 0x7FEF 0x7FF0 0x7FF1 0x7FF2 0x7FF3 0x7FF4 0x7FF5 0x7FF7 0x7FF8 0x7FF9 0x7FFB 0x7FFC 0x7FFD 0x7FFE 0x7FFF 0x8000 0x8001 0x8003 0x8004 0x8005 0x8006 0x8007 0x800B 0x800C 0x800D 0x800E 0x800F 0x8010 0x8011 0x8012 0x8014 0x8015 0x8016 0x8017 0x8018 0x8019 0x801B 0x801C 0x801E 0x801F 0x8021 0x8024 0x8026 0x8028 0x8029 0x802A 0x802C 0x8030 0x8033 0x8034 0x8035 0x8036 0x8037 0x8039 0x803D 0x803E 0x803F 0x8043 0x8046 0x8047 0x8048 0x804A 0x804F 0x8050 0x8051 0x8052 0x8056 0x8058 0x805A 0x805C 0x805D 0x805E 0x8064 0x8067 0x806C 0x806F 0x8070 0x8071 0x8072 0x8073 0x8075 0x8076 0x8077 0x8078 0x8079 0x807D 0x807E 0x807F 0x8082 0x8084 0x8085 0x8086 0x8087 0x8089 0x808A 0x808B 0x808C 0x808F 0x8090 0x8092 0x8093 0x8095 0x8096 0x8098 0x8099 0x809A 0x809B 0x809C 0x809D 0x80A1 0x80A2 0x80A3 0x80A5 0x80A9 0x80AA 0x80AB 0x80AD 0x80AE 0x80AF 0x80B1 0x80B2 0x80B4 0x80B5 0x80B8 0x80BA 0x80C2 0x80C3 0x80C4 0x80C5 0x80C7 0x80C8 0x80C9 0x80CA 0x80CC 0x80CD 0x80CE 0x80CF 0x80D0 0x80D1 0x80D4 0x80D5 0x80D6 0x80D7 0x80D8 0x80D9 0x80DA 0x80DB 0x80DC 0x80DD 0x80DE 0x80E0 0x80E1 0x80E3 0x80E4 0x80E5 0x80E6 0x80ED 0x80EF 0x80F0 0x80F1 0x80F2 0x80F3 0x80F4 0x80F5 0x80F8 0x80F9 0x80FA 0x80FB 0x80FC 0x80FD 0x80FE 0x8100 0x8101 0x8102 0x8105 0x8106 0x8108 0x810A 0x8115 0x8116 0x8118 0x8119 0x811B 0x811D 0x811E 0x811F 0x8121 0x8122 0x8123 0x8124 0x8125 0x8127 0x8129 0x812B 0x812C 0x812D 0x812F 0x8130 0x8139 0x813A 0x813D 0x813E 0x8143 0x8144 0x8146 0x8147 0x814A 0x814B 0x814C 0x814D 0x814E 0x814F 0x8150 0x8151 0x8152 0x8153 0x8154 0x8155 0x815B 0x815C 0x815E 0x8160 0x8161 0x8162 0x8164 0x8165 0x8166 0x8167 0x8169 0x816B 0x816E 0x816F 0x8170 0x8171 0x8172 0x8173 0x8174 0x8176 0x8177 0x8178 0x8179 0x817A 0x817F 0x8180 0x8182 0x8183 0x8186 0x8187 0x8188 0x8189 0x818A 0x818B 0x818C 0x818D 0x818F 0x8195 0x8197 0x8198 0x8199 0x819A 0x819B 0x819C 0x819D 0x819E 0x819F 0x81A0 0x81A2 0x81A3 0x81A6 0x81A7 0x81A8 0x81A9 0x81AB 0x81AC 0x81AE 0x81B0 0x81B1 0x81B2 0x81B3 0x81B4 0x81B5 0x81B7 0x81B9 0x81BA 0x81BB 0x81BC 0x81BD 0x81BE 0x81BF 0x81C0 0x81C2 0x81C3 0x81C4 0x81C5 0x81C6 0x81C7 0x81C9 0x81CA 0x81CC 0x81CD 0x81CF 0x81D0 0x81D1 0x81D2 0x81D5 0x81D7 0x81D8 0x81D9 0x81DA 0x81DB 0x81DD 0x81DE 0x81DF 0x81E0 0x81E1 0x81E2 0x81E3 0x81E5 0x81E6 0x81E7 0x81E8 0x81E9 0x81EA 0x81EC 0x81ED 0x81EE 0x81F2 0x81F3 0x81F4 0x81F7 0x81F8 0x81F9 0x81FA 0x81FB 0x81FC 0x81FE 0x81FF 0x8200 0x8201 0x8202 0x8204 0x8205 0x8207 0x8208 0x8209 0x820A 0x820B 0x820C 0x820D 0x8210 0x8211 0x8212 0x8214 0x8215 0x8216 0x821B 0x821C 0x821D 0x821E 0x821F 0x8220 0x8221 0x8222 0x8225 0x8228 0x822A 0x822B 0x822C 0x822F 0x8232 0x8233 0x8234 0x8235 0x8236 0x8237 0x8238 0x8239 0x823A 0x823C 0x823D 0x823F 0x8240 0x8242 0x8244 0x8245 0x8247 0x8249 0x824B 0x824E 0x824F 0x8250 0x8251 0x8252 0x8253 0x8255 0x8256 0x8257 0x8258 0x8259 0x825A 0x825B 0x825C 0x825E 0x825F 0x8261 0x8263 0x8264 0x8266 0x8268 0x8269 0x826B 0x826C 0x826D 0x826E 0x826F 0x8271 0x8272 0x8274 0x8275 0x8277 0x8278 0x827C 0x827D 0x827E 0x827F 0x8280 0x8283 0x8284 0x8285 0x828A 0x828B 0x828D 0x828E 0x828F 0x8290 0x8291 0x8292 0x8293 0x8294 0x8298 0x8299 0x829A 0x829B 0x829D 0x829E 0x829F 0x82A0 0x82A1 0x82A2 0x82A3 0x82A4 0x82A5 0x82A7 0x82A8 0x82A9 0x82AB 0x82AC 0x82AD 0x82AE 0x82AF 0x82B0 0x82B1 0x82B3 0x82B4 0x82B5 0x82B6 0x82B7 0x82B8 0x82B9 0x82BA 0x82BB 0x82BC 0x82BD 0x82BE 0x82C0 0x82C2 0x82C3 0x82D1 0x82D2 0x82D3 0x82D4 0x82D5 0x82D6 0x82D7 0x82D9 0x82DB 0x82DC 0x82DE 0x82DF 0x82E0 0x82E1 0x82E3 0x82E4 0x82E5 0x82E6 0x82E7 0x82E8 0x82EA 0x82EB 0x82EC 0x82ED 0x82EF 0x82F0 0x82F1 0x82F2 0x82F3 0x82F4 0x82F5 0x82F6 0x82F9 0x82FA 0x82FB 0x82FE 0x8300 0x8301 0x8302 0x8303 0x8304 0x8305 0x8306 0x8307 0x8308 0x8309 0x830C 0x830D 0x8316 0x8317 0x8319 0x831B 0x831C 0x831E 0x8320 0x8322 0x8324 0x8325 0x8326 0x8327 0x8328 0x8329 0x832A 0x832B 0x832C 0x832D 0x832F 0x8331 0x8332 0x8333 0x8334 0x8335 0x8336 0x8337 0x8338 0x8339 0x833A 0x833B 0x833C 0x833F 0x8340 0x8341 0x8342 0x8343 0x8344 0x8345 0x8347 0x8348 0x8349 0x834A 0x834B 0x834C 0x834D 0x834E 0x834F 0x8350 0x8351 0x8352 0x8353 0x8354 0x8356 0x8373 0x8374 0x8375 0x8376 0x8377 0x8378 0x837A 0x837B 0x837C 0x837D 0x837E 0x837F 0x8381 0x8383 0x8386 0x8387 0x8388 0x8389 0x838A 0x838B 0x838C 0x838D 0x838E 0x838F 0x8390 0x8392 0x8393 0x8394 0x8395 0x8396 0x8397 0x8398 0x8399 0x839A 0x839B 0x839D 0x839E 0x83A0 0x83A2 0x83A3 0x83A4 0x83A5 0x83A6 0x83A7 0x83A8 0x83A9 0x83AA 0x83AB 0x83AE 0x83AF 0x83B0 0x83BD 0x83BF 0x83C0 0x83C1 0x83C2 0x83C3 0x83C4 0x83C5 0x83C6 0x83C7 0x83C8 0x83C9 0x83CA 0x83CB 0x83CC 0x83CE 0x83CF 0x83D1 0x83D4 0x83D5 0x83D6 0x83D7 0x83D8 0x83D9 0x83DB 0x83DC 0x83DD 0x83DE 0x83DF 0x83E0 0x83E1 0x83E2 0x83E3 0x83E4 0x83E5 0x83E7 0x83E8 0x83E9 0x83EA 0x83EB 0x83EC 0x83EE 0x83EF 0x83F0 0x83F1 0x83F2 0x83F3 0x83F4 0x83F5 0x83F6 0x83F8 0x83F9 0x83FA 0x83FB 0x83FC 0x83FD 0x83FE 0x83FF 0x8401 0x8403 0x8404 0x8406 0x8407 0x8409 0x840A 0x840B 0x840C 0x840D 0x840E 0x840F 0x8410 0x8411 0x8412 0x8413 0x841B 0x8423 0x8429 0x842B 0x842C 0x842D 0x842F 0x8430 0x8431 0x8432 0x8433 0x8434 0x8435 0x8436 0x8437 0x8438 0x8439 0x843A 0x843B 0x843C 0x843D 0x843F 0x8440 0x8442 0x8443 0x8444 0x8445 0x8446 0x8447 0x8449 0x844B 0x844C 0x844D 0x844E 0x8450 0x8451 0x8452 0x8454 0x8456 0x8457 0x8459 0x845A 0x845B 0x845D 0x845E 0x845F 0x8460 0x8461 0x8463 0x8465 0x8466 0x8467 0x8468 0x8469 0x846B 0x846C 0x846D 0x846E 0x846F 0x8470 0x8473 0x8474 0x8475 0x8476 0x8477 0x8478 0x8479 0x847A 0x847D 0x847E 0x8482 0x8486 0x848D 0x848E 0x848F 0x8490 0x8491 0x8494 0x8497 0x8498 0x8499 0x849A 0x849B 0x849C 0x849D 0x849E 0x849F 0x84A0 0x84A1 0x84A2 0x84A4 0x84A7 0x84A8 0x84A9 0x84AA 0x84AB 0x84AC 0x84AE 0x84AF 0x84B0 0x84B1 0x84B2 0x84B4 0x84B6 0x84B8 0x84B9 0x84BA 0x84BB 0x84BC 0x84BF 0x84C0 0x84C1 0x84C2 0x84C4 0x84C5 0x84C6 0x84C7 0x84C9 0x84CA 0x84CB 0x84CC 0x84CD 0x84CE 0x84CF 0x84D0 0x84D1 0x84D2 0x84D3 0x84D4 0x84D6 0x84D7 0x84DB 0x84E7 0x84E8 0x84E9 0x84EA 0x84EB 0x84EC 0x84EE 0x84EF 0x84F0 0x84F1 0x84F2 0x84F3 0x84F4 0x84F6 0x84F7 0x84F9 0x84FA 0x84FB 0x84FC 0x84FD 0x84FE 0x84FF 0x8500 0x8502 0x8506 0x8507 0x8508 0x8509 0x850A 0x850B 0x850C 0x850D 0x850E 0x850F 0x8511 0x8512 0x8513 0x8514 0x8515 0x8516 0x8517 0x8518 0x8519 0x851A 0x851C 0x851D 0x851E 0x851F 0x8520 0x8521 0x8523 0x8524 0x8525 0x8526 0x8527 0x8528 0x8529 0x852A 0x852B 0x852C 0x852D 0x852E 0x852F 0x8530 0x8531 0x853B 0x853D 0x853E 0x8540 0x8541 0x8543 0x8544 0x8545 0x8546 0x8547 0x8548 0x8549 0x854A 0x854D 0x854E 0x8551 0x8553 0x8554 0x8555 0x8556 0x8557 0x8558 0x8559 0x855B 0x855D 0x855E 0x8560 0x8561 0x8562 0x8563 0x8564 0x8565 0x8566 0x8567 0x8568 0x8569 0x856A 0x856B 0x856C 0x856D 0x856E 0x8571 0x8575 0x8576 0x8577 0x8578 0x8579 0x857A 0x857B 0x857C 0x857E 0x8580 0x8581 0x8582 0x8583 0x8584 0x8585 0x8586 0x8587 0x8588 0x8589 0x858A 0x858B 0x858C 0x858D 0x858E 0x858F 0x8590 0x8591 0x8594 0x8595 0x8596 0x8598 0x8599 0x859A 0x859B 0x859C 0x859D 0x859E 0x859F 0x85A0 0x85A1 0x85A2 0x85A3 0x85A4 0x85A6 0x85A7 0x85A8 0x85A9 0x85AA 0x85AF 0x85B0 0x85B1 0x85B3 0x85B4 0x85B5 0x85B6 0x85B7 0x85B8 0x85B9 0x85BA 0x85BD 0x85BE 0x85BF 0x85C0 0x85C2 0x85C3 0x85C4 0x85C5 0x85C6 0x85C7 0x85C8 0x85C9 0x85CB 0x85CD 0x85CE 0x85CF 0x85D0 0x85D1 0x85D2 0x85D5 0x85D7 0x85D8 0x85D9 0x85DA 0x85DC 0x85DD 0x85DE 0x85DF 0x85E1 0x85E2 0x85E3 0x85E4 0x85E5 0x85E6 0x85E8 0x85E9 0x85EA 0x85EB 0x85EC 0x85ED 0x85EF 0x85F0 0x85F1 0x85F2 0x85F6 0x85F7 0x85F8 0x85F9 0x85FA 0x85FB 0x85FD 0x85FE 0x85FF 0x8600 0x8601 0x8604 0x8605 0x8606 0x8607 0x8609 0x860A 0x860B 0x860C 0x8611 0x8617 0x8618 0x8619 0x861A 0x861B 0x861C 0x861E 0x861F 0x8620 0x8621 0x8622 0x8623 0x8624 0x8625 0x8626 0x8627 0x8629 0x862A 0x862C 0x862D 0x862E 0x8631 0x8632 0x8633 0x8634 0x8635 0x8636 0x8638 0x8639 0x863A 0x863B 0x863C 0x863E 0x863F 0x8640 0x8643 0x8646 0x8647 0x8648 0x864B 0x864C 0x864D 0x864E 0x8650 0x8652 0x8653 0x8654 0x8655 0x8656 0x8659 0x865B 0x865C 0x865E 0x865F 0x8661 0x8662 0x8663 0x8664 0x8665 0x8667 0x8668 0x8669 0x866A 0x866B 0x866D 0x866E 0x866F 0x8670 0x8671 0x8673 0x8674 0x8677 0x8679 0x867A 0x867B 0x867C 0x8685 0x8686 0x8687 0x868A 0x868B 0x868C 0x868D 0x868E 0x8690 0x8691 0x8693 0x8694 0x8695 0x8696 0x8697 0x8698 0x8699 0x869A 0x869C 0x869D 0x869E 0x86A1 0x86A2 0x86A3 0x86A4 0x86A5 0x86A7 0x86A8 0x86A9 0x86AA 0x86AF 0x86B0 0x86B1 0x86B3 0x86B4 0x86B5 0x86B6 0x86B7 0x86B8 0x86B9 0x86BA 0x86BB 0x86BC 0x86BD 0x86BE 0x86BF 0x86C0 0x86C1 0x86C2 0x86C3 0x86C4 0x86C5 0x86C6 0x86C7 0x86C8 0x86C9 0x86CB 0x86CC 0x86D0 0x86D1 0x86D3 0x86D4 0x86D6 0x86D7 0x86D8 0x86D9 0x86DA 0x86DB 0x86DC 0x86DD 0x86DE 0x86DF 0x86E2 0x86E3 0x86E4 0x86E6 0x86E8 0x86E9 0x86EA 0x86EB 0x86EC 0x86ED 0x86F5 0x86F6 0x86F7 0x86F8 0x86F9 0x86FA 0x86FB 0x86FE 0x8700 0x8701 0x8702 0x8703 0x8704 0x8705 0x8706 0x8707 0x8708 0x8709 0x870A 0x870B 0x870C 0x870D 0x870E 0x8711 0x8712 0x8713 0x8718 0x8719 0x871A 0x871B 0x871C 0x871E 0x8720 0x8721 0x8722 0x8723 0x8724 0x8725 0x8726 0x8727 0x8728 0x8729 0x872A 0x872C 0x872D 0x872E 0x8730 0x8731 0x8732 0x8733 0x8734 0x8735 0x8737 0x8738 0x873A 0x873B 0x873C 0x873E 0x873F 0x8740 0x8741 0x8742 0x8743 0x8746 0x874C 0x874D 0x874E 0x874F 0x8750 0x8751 0x8752 0x8753 0x8754 0x8755 0x8756 0x8757 0x8758 0x8759 0x875A 0x875B 0x875C 0x875D 0x875E 0x875F 0x8760 0x8761 0x8762 0x8763 0x8764 0x8765 0x8766 0x8767 0x8768 0x8769 0x876A 0x876B 0x876C 0x876D 0x876E 0x876F 0x8773 0x8774 0x8775 0x8776 0x8777 0x8778 0x8779 0x877A 0x877B 0x8781 0x8782 0x8783 0x8784 0x8785 0x8787 0x8788 0x8789 0x878D 0x878F 0x8790 0x8791 0x8792 0x8793 0x8794 0x8796 0x8797 0x8798 0x879A 0x879B 0x879C 0x879D 0x879E 0x879F 0x87A2 0x87A3 0x87A4 0x87AA 0x87AB 0x87AC 0x87AD 0x87AE 0x87AF 0x87B0 0x87B2 0x87B3 0x87B4 0x87B5 0x87B6 0x87B7 0x87B8 0x87B9 0x87BA 0x87BB 0x87BC 0x87BD 0x87BE 0x87BF 0x87C0 0x87C2 0x87C3 0x87C4 0x87C5 0x87C6 0x87C8 0x87C9 0x87CA 0x87CB 0x87CC 0x87D1 0x87D2 0x87D3 0x87D4 0x87D7 0x87D8 0x87D9 0x87DB 0x87DC 0x87DD 0x87DE 0x87DF 0x87E0 0x87E1 0x87E2 0x87E3 0x87E4 0x87E5 0x87E6 0x87E7 0x87E8 0x87EA 0x87EB 0x87EC 0x87ED 0x87EF 0x87F2 0x87F3 0x87F4 0x87F6 0x87F7 0x87F9 0x87FA 0x87FB 0x87FC 0x87FE 0x87FF 0x8800 0x8801 0x8802 0x8803 0x8805 0x8806 0x8808 0x8809 0x880A 0x880B 0x880C 0x880D 0x8810 0x8811 0x8813 0x8814 0x8815 0x8816 0x8817 0x8819 0x881B 0x881C 0x881D 0x881F 0x8820 0x8821 0x8822 0x8823 0x8824 0x8825 0x8826 0x8828 0x8829 0x882A 0x882B 0x882C 0x882E 0x882F 0x8830 0x8831 0x8832 0x8833 0x8835 0x8836 0x8837 0x8838 0x8839 0x883B 0x883C 0x883D 0x883E 0x883F 0x8840 0x8841 0x8843 0x8844 0x8848 0x884A 0x884B 0x884C 0x884D 0x884E 0x8852 0x8853 0x8855 0x8856 0x8857 0x8859 0x885A 0x885B 0x885D 0x8861 0x8862 0x8863 0x8867 0x8868 0x8869 0x886A 0x886B 0x886D 0x886F 0x8870 0x8871 0x8872 0x8874 0x8875 0x8876 0x8877 0x8879 0x887C 0x887D 0x887E 0x887F 0x8880 0x8881 0x8882 0x8883 0x8888 0x8889 0x888B 0x888C 0x888D 0x888E 0x8891 0x8892 0x8893 0x8895 0x8896 0x8897 0x8898 0x8899 0x889A 0x889B 0x889E 0x889F 0x88A1 0x88A2 0x88A4 0x88A7 0x88A8 0x88AA 0x88AB 0x88AC 0x88B1 0x88B2 0x88B6 0x88B7 0x88B8 0x88B9 0x88BA 0x88BC 0x88BD 0x88BE 0x88C0 0x88C1 0x88C2 0x88C9 0x88CA 0x88CB 0x88CC 0x88CD 0x88CE 0x88D0 0x88D2 0x88D4 0x88D5 0x88D6 0x88D7 0x88D8 0x88D9 0x88DA 0x88DB 0x88DC 0x88DD 0x88DE 0x88DF 0x88E1 0x88E7 0x88E8 0x88EB 0x88EC 0x88EE 0x88EF 0x88F0 0x88F1 0x88F2 0x88F3 0x88F4 0x88F6 0x88F7 0x88F8 0x88F9 0x88FA 0x88FB 0x88FC 0x88FD 0x88FE 0x8901 0x8902 0x8905 0x8906 0x8907 0x8909 0x890A 0x890B 0x890C 0x890E 0x8910 0x8911 0x8912 0x8913 0x8914 0x8915 0x8916 0x8917 0x8918 0x8919 0x891A 0x891E 0x891F 0x8921 0x8922 0x8923 0x8925 0x8926 0x8927 0x8929 0x892A 0x892B 0x892C 0x892D 0x892E 0x892F 0x8930 0x8931 0x8932 0x8933 0x8935 0x8936 0x8937 0x8938 0x893B 0x893C 0x893D 0x893E 0x8941 0x8942 0x8944 0x8946 0x8949 0x894B 0x894C 0x894F 0x8950 0x8951 0x8952 0x8953 0x8956 0x8957 0x8958 0x8959 0x895A 0x895B 0x895C 0x895D 0x895E 0x895F 0x8960 0x8961 0x8962 0x8963 0x8964 0x8966 0x8969 0x896A 0x896B 0x896C 0x896D 0x896E 0x896F 0x8971 0x8972 0x8973 0x8974 0x8976 0x8979 0x897A 0x897B 0x897C 0x897E 0x897F 0x8981 0x8982 0x8983 0x8985 0x8986 0x8988 0x898B 0x898F 0x8993 0x8995 0x8996 0x8997 0x8998 0x899B 0x899C 0x899D 0x899E 0x899F 0x89A1 0x89A2 0x89A3 0x89A4 0x89A6 0x89AA 0x89AC 0x89AD 0x89AE 0x89AF 0x89B2 0x89B6 0x89B7 0x89B9 0x89BA 0x89BD 0x89BE 0x89BF 0x89C0 0x89D2 0x89D3 0x89D4 0x89D5 0x89D6 0x89D9 0x89DA 0x89DB 0x89DC 0x89DD 0x89DF 0x89E0 0x89E1 0x89E2 0x89E3 0x89E4 0x89E5 0x89E6 0x89E8 0x89E9 0x89EB 0x89EC 0x89ED 0x89F0 0x89F1 0x89F2 0x89F3 0x89F4 0x89F6 0x89F7 0x89F8 0x89FA 0x89FB 0x89FC 0x89FE 0x89FF 0x8A00 0x8A02 0x8A03 0x8A04 0x8A07 0x8A08 0x8A0A 0x8A0C 0x8A0E 0x8A0F 0x8A10 0x8A11 0x8A12 0x8A13 0x8A15 0x8A16 0x8A17 0x8A18 0x8A1B 0x8A1D 0x8A1E 0x8A1F 0x8A22 0x8A23 0x8A25 0x8A27 0x8A2A 0x8A2C 0x8A2D 0x8A30 0x8A31 0x8A34 0x8A36 0x8A39 0x8A3A 0x8A3B 0x8A3C 0x8A3E 0x8A3F 0x8A40 0x8A41 0x8A44 0x8A45 0x8A46 0x8A48 0x8A4A 0x8A4C 0x8A4D 0x8A4E 0x8A4F 0x8A50 0x8A51 0x8A52 0x8A54 0x8A55 0x8A56 0x8A57 0x8A58 0x8A59 0x8A5B 0x8A5E 0x8A60 0x8A61 0x8A62 0x8A63 0x8A66 0x8A68 0x8A69 0x8A6B 0x8A6C 0x8A6D 0x8A6E 0x8A70 0x8A71 0x8A72 0x8A73 0x8A74 0x8A75 0x8A76 0x8A77 0x8A79 0x8A7A 0x8A7B 0x8A7C 0x8A7F 0x8A81 0x8A82 0x8A83 0x8A84 0x8A85 0x8A86 0x8A87 0x8A8B 0x8A8C 0x8A8D 0x8A8F 0x8A91 0x8A92 0x8A93 0x8A95 0x8A96 0x8A98 0x8A99 0x8A9A 0x8A9E 0x8AA0 0x8AA1 0x8AA3 0x8AA4 0x8AA5 0x8AA6 0x8AA7 0x8AA8 0x8AAA 0x8AAB 0x8AB0 0x8AB2 0x8AB6 0x8AB8 0x8AB9 0x8ABA 0x8ABB 0x8ABC 0x8ABD 0x8ABE 0x8ABF 0x8AC0 0x8AC2 0x8AC3 0x8AC4 0x8AC5 0x8AC6 0x8AC7 0x8AC8 0x8AC9 0x8ACB 0x8ACD 0x8ACF 0x8AD1 0x8AD2 0x8AD3 0x8AD4 0x8AD5 0x8AD6 0x8AD7 0x8AD8 0x8AD9 0x8ADB 0x8ADC 0x8ADD 0x8ADE 0x8ADF 0x8AE0 0x8AE1 0x8AE2 0x8AE4 0x8AE6 0x8AE7 0x8AE8 0x8AEB 0x8AED 0x8AEE 0x8AEF 0x8AF0 0x8AF1 0x8AF2 0x8AF3 0x8AF4 0x8AF5 0x8AF6 0x8AF7 0x8AF8 0x8AFA 0x8AFB 0x8AFC 0x8AFE 0x8AFF 0x8B00 0x8B01 0x8B02 0x8B04 0x8B05 0x8B06 0x8B07 0x8B08 0x8B0A 0x8B0B 0x8B0D 0x8B0E 0x8B0F 0x8B10 0x8B11 0x8B12 0x8B13 0x8B14 0x8B15 0x8B16 0x8B17 0x8B18 0x8B19 0x8B1A 0x8B1B 0x8B1C 0x8B1D 0x8B1E 0x8B20 0x8B22 0x8B23 0x8B24 0x8B25 0x8B26 0x8B27 0x8B28 0x8B2A 0x8B2B 0x8B2C 0x8B2E 0x8B2F 0x8B30 0x8B31 0x8B33 0x8B35 0x8B36 0x8B37 0x8B39 0x8B3A 0x8B3B 0x8B3C 0x8B3D 0x8B3E 0x8B40 0x8B41 0x8B42 0x8B45 0x8B46 0x8B47 0x8B48 0x8B49 0x8B4A 0x8B4B 0x8B4E 0x8B4F 0x8B50 0x8B51 0x8B52 0x8B53 0x8B54 0x8B55 0x8B56 0x8B57 0x8B58 0x8B59 0x8B5A 0x8B5C 0x8B5D 0x8B5F 0x8B60 0x8B63 0x8B65 0x8B66 0x8B67 0x8B68 0x8B6A 0x8B6B 0x8B6C 0x8B6D 0x8B6F 0x8B70 0x8B74 0x8B77 0x8B78 0x8B79 0x8B7A 0x8B7B 0x8B7D 0x8B7E 0x8B7F 0x8B80 0x8B82 0x8B84 0x8B85 0x8B86 0x8B88 0x8B8A 0x8B8B 0x8B8C 0x8B8E 0x8B92 0x8B93 0x8B94 0x8B95 0x8B96 0x8B98 0x8B99 0x8B9A 0x8B9C 0x8B9E 0x8B9F 0x8C37 0x8C39 0x8C3B 0x8C3C 0x8C3D 0x8C3E 0x8C3F 0x8C41 0x8C42 0x8C43 0x8C45 0x8C46 0x8C47 0x8C48 0x8C49 0x8C4A 0x8C4B 0x8C4C 0x8C4D 0x8C4E 0x8C4F 0x8C50 0x8C54 0x8C55 0x8C56 0x8C57 0x8C5A 0x8C5C 0x8C5D 0x8C5F 0x8C61 0x8C62 0x8C64 0x8C65 0x8C66 0x8C68 0x8C69 0x8C6A 0x8C6B 0x8C6C 0x8C6D 0x8C6F 0x8C70 0x8C71 0x8C72 0x8C73 0x8C75 0x8C76 0x8C77 0x8C78 0x8C79 0x8C7A 0x8C7B 0x8C7D 0x8C80 0x8C81 0x8C82 0x8C84 0x8C85 0x8C86 0x8C89 0x8C8A 0x8C8C 0x8C8D 0x8C8F 0x8C90 0x8C91 0x8C92 0x8C93 0x8C94 0x8C95 0x8C97 0x8C98 0x8C99 0x8C9A 0x8C9C 0x8C9D 0x8C9E 0x8CA0 0x8CA1 0x8CA2 0x8CA3 0x8CA4 0x8CA5 0x8CA7 0x8CA8 0x8CA9 0x8CAA 0x8CAB 0x8CAC 0x8CAF 0x8CB0 0x8CB2 0x8CB3 0x8CB4 0x8CB5 0x8CB6 0x8CB7 0x8CB8 0x8CB9 0x8CBA 0x8CBB 0x8CBC 0x8CBD 0x8CBE 0x8CBF 0x8CC0 0x8CC1 0x8CC2 0x8CC3 0x8CC4 0x8CC5 0x8CC7 0x8CC8 0x8CCA 0x8CCC 0x8CCF 0x8CD1 0x8CD2 0x8CD3 0x8CD5 0x8CD7 0x8CD9 0x8CDA 0x8CDC 0x8CDD 0x8CDE 0x8CDF 0x8CE0 0x8CE1 0x8CE2 0x8CE3 0x8CE4 0x8CE5 0x8CE6 0x8CE7 0x8CE8 0x8CEA 0x8CEC 0x8CED 0x8CEE 0x8CF0 0x8CF1 0x8CF3 0x8CF4 0x8CF5 0x8CF8 0x8CF9 0x8CFA 0x8CFB 0x8CFC 0x8CFD 0x8CFE 0x8D00 0x8D02 0x8D04 0x8D05 0x8D06 0x8D07 0x8D08 0x8D09 0x8D0A 0x8D0D 0x8D0F 0x8D10 0x8D13 0x8D14 0x8D15 0x8D16 0x8D17 0x8D19 0x8D1B 0x8D64 0x8D66 0x8D67 0x8D68 0x8D69 0x8D6B 0x8D6C 0x8D6D 0x8D6E 0x8D6F 0x8D70 0x8D72 0x8D73 0x8D74 0x8D76 0x8D77 0x8D78 0x8D79 0x8D7B 0x8D7D 0x8D80 0x8D81 0x8D84 0x8D85 0x8D89 0x8D8A 0x8D8C 0x8D8D 0x8D8E 0x8D8F 0x8D90 0x8D91 0x8D92 0x8D93 0x8D94 0x8D95 0x8D96 0x8D99 0x8D9B 0x8D9C 0x8D9F 0x8DA0 0x8DA1 0x8DA3 0x8DA5 0x8DA7 0x8DA8 0x8DAA 0x8DAB 0x8DAC 0x8DAD 0x8DAE 0x8DAF 0x8DB2 0x8DB3 0x8DB4 0x8DB5 0x8DB6 0x8DB7 0x8DB9 0x8DBA 0x8DBC 0x8DBE 0x8DBF 0x8DC1 0x8DC2 0x8DC5 0x8DC6 0x8DC7 0x8DC8 0x8DCB 0x8DCC 0x8DCD 0x8DCE 0x8DCF 0x8DD0 0x8DD1 0x8DD3 0x8DD5 0x8DD6 0x8DD7 0x8DD8 0x8DD9 0x8DDA 0x8DDB 0x8DDC 0x8DDD 0x8DDF 0x8DE0 0x8DE1 0x8DE2 0x8DE3 0x8DE4 0x8DE6 0x8DE7 0x8DE8 0x8DE9 0x8DEA 0x8DEB 0x8DEC 0x8DEE 0x8DEF 0x8DF0 0x8DF1 0x8DF2 0x8DF3 0x8DF4 0x8DFA 0x8DFC 0x8DFD 0x8DFE 0x8DFF 0x8E00 0x8E02 0x8E03 0x8E04 0x8E05 0x8E06 0x8E07 0x8E09 0x8E0A 0x8E0D 0x8E0F 0x8E10 0x8E11 0x8E12 0x8E13 0x8E14 0x8E15 0x8E16 0x8E17 0x8E18 0x8E19 0x8E1A 0x8E1B 0x8E1C 0x8E1D 0x8E1E 0x8E1F 0x8E20 0x8E21 0x8E22 0x8E23 0x8E24 0x8E25 0x8E26 0x8E27 0x8E29 0x8E2B 0x8E2E 0x8E30 0x8E31 0x8E33 0x8E34 0x8E35 0x8E36 0x8E38 0x8E39 0x8E3C 0x8E3D 0x8E3E 0x8E3F 0x8E40 0x8E41 0x8E42 0x8E44 0x8E45 0x8E47 0x8E48 0x8E49 0x8E4A 0x8E4B 0x8E4C 0x8E4D 0x8E4E 0x8E50 0x8E53 0x8E54 0x8E55 0x8E56 0x8E57 0x8E59 0x8E5A 0x8E5B 0x8E5C 0x8E5D 0x8E5E 0x8E5F 0x8E60 0x8E61 0x8E62 0x8E63 0x8E64 0x8E65 0x8E66 0x8E67 0x8E69 0x8E6A 0x8E6C 0x8E6D 0x8E6F 0x8E72 0x8E73 0x8E74 0x8E76 0x8E78 0x8E7A 0x8E7B 0x8E7C 0x8E81 0x8E82 0x8E84 0x8E85 0x8E86 0x8E87 0x8E88 0x8E89 0x8E8A 0x8E8B 0x8E8C 0x8E8D 0x8E8E 0x8E90 0x8E91 0x8E92 0x8E93 0x8E94 0x8E95 0x8E96 0x8E97 0x8E98 0x8E9A 0x8E9D 0x8E9E 0x8E9F 0x8EA0 0x8EA1 0x8EA3 0x8EA4 0x8EA5 0x8EA6 0x8EA8 0x8EA9 0x8EAA 0x8EAB 0x8EAC 0x8EB2 0x8EBA 0x8EBD 0x8EC0 0x8EC2 0x8EC9 0x8ECA 0x8ECB 0x8ECC 0x8ECD 0x8ECF 0x8ED1 0x8ED2 0x8ED3 0x8ED4 0x8ED7 0x8ED8 0x8EDB 0x8EDC 0x8EDD 0x8EDE 0x8EDF 0x8EE0 0x8EE1 0x8EE5 0x8EE6 0x8EE7 0x8EE8 0x8EE9 0x8EEB 0x8EEC 0x8EEE 0x8EEF 0x8EF1 0x8EF4 0x8EF5 0x8EF6 0x8EF7 0x8EF8 0x8EF9 0x8EFA 0x8EFB 0x8EFC 0x8EFE 0x8EFF 0x8F00 0x8F01 0x8F02 0x8F03 0x8F05 0x8F06 0x8F07 0x8F08 0x8F09 0x8F0A 0x8F0B 0x8F0D 0x8F0E 0x8F10 0x8F11 0x8F12 0x8F13 0x8F14 0x8F15 0x8F16 0x8F17 0x8F18 0x8F1A 0x8F1B 0x8F1C 0x8F1D 0x8F1E 0x8F1F 0x8F20 0x8F23 0x8F24 0x8F25 0x8F26 0x8F29 0x8F2A 0x8F2C 0x8F2E 0x8F2F 0x8F32 0x8F33 0x8F34 0x8F35 0x8F36 0x8F37 0x8F38 0x8F39 0x8F3B 0x8F3E 0x8F3F 0x8F40 0x8F42 0x8F43 0x8F44 0x8F45 0x8F46 0x8F47 0x8F48 0x8F49 0x8F4B 0x8F4D 0x8F4E 0x8F4F 0x8F50 0x8F51 0x8F52 0x8F53 0x8F54 0x8F55 0x8F56 0x8F57 0x8F58 0x8F59 0x8F5A 0x8F5B 0x8F5D 0x8F5E 0x8F5F 0x8F60 0x8F61 0x8F62 0x8F63 0x8F64 0x8F9B 0x8F9C 0x8F9F 0x8FA3 0x8FA6 0x8FA8 0x8FAD 0x8FAE 0x8FAF 0x8FB0 0x8FB1 0x8FB2 0x8FB4 0x8FBF 0x8FC2 0x8FC4 0x8FC5 0x8FC6 0x8FC9 0x8FCB 0x8FCD 0x8FCE 0x8FD1 0x8FD2 0x8FD3 0x8FD4 0x8FD5 0x8FD6 0x8FD7 0x8FE0 0x8FE1 0x8FE2 0x8FE3 0x8FE4 0x8FE5 0x8FE6 0x8FE8 0x8FEA 0x8FEB 0x8FED 0x8FEE 0x8FF0 0x8FF4 0x8FF5 0x8FF6 0x8FF7 0x8FF8 0x8FFA 0x8FFB 0x8FFC 0x8FFD 0x8FFE 0x8FFF 0x9000 0x9001 0x9002 0x9003 0x9004 0x9005 0x9006 0x900B 0x900C 0x900D 0x900F 0x9010 0x9011 0x9014 0x9015 0x9016 0x9017 0x9019 0x901A 0x901B 0x901C 0x901D 0x901E 0x901F 0x9020 0x9021 0x9022 0x9023 0x9024 0x902D 0x902E 0x902F 0x9031 0x9032 0x9034 0x9035 0x9036 0x9038 0x903C 0x903D 0x903E 0x903F 0x9041 0x9042 0x9044 0x9047 0x9049 0x904A 0x904B 0x904D 0x904E 0x904F 0x9050 0x9051 0x9052 0x9053 0x9054 0x9055 0x9058 0x9059 0x905B 0x905C 0x905D 0x905E 0x9060 0x9062 0x9063 0x9067 0x9068 0x9069 0x906B 0x906D 0x906E 0x906F 0x9070 0x9072 0x9073 0x9074 0x9075 0x9076 0x9077 0x9078 0x9079 0x907A 0x907B 0x907C 0x907D 0x907E 0x907F 0x9080 0x9081 0x9082 0x9083 0x9084 0x9085 0x9086 0x9087 0x9088 0x908A 0x908B 0x908D 0x908F 0x9090 0x9091 0x9094 0x9095 0x9097 0x9098 0x9099 0x909B 0x909E 0x909F 0x90A0 0x90A1 0x90A2 0x90A3 0x90A5 0x90A6 0x90A7 0x90AA 0x90AF 0x90B0 0x90B1 0x90B2 0x90B3 0x90B4 0x90B5 0x90B6 0x90B8 0x90BD 0x90BE 0x90BF 0x90C1 0x90C3 0x90C5 0x90C7 0x90C8 0x90CA 0x90CB 0x90CE 0x90D4 0x90D5 0x90D6 0x90D7 0x90D8 0x90D9 0x90DA 0x90DB 0x90DC 0x90DD 0x90DF 0x90E0 0x90E1 0x90E2 0x90E3 0x90E4 0x90E5 0x90E8 0x90E9 0x90EA 0x90EB 0x90EC 0x90ED 0x90EF 0x90F0 0x90F1 0x90F2 0x90F3 0x90F4 0x90F5 0x90F9 0x90FA 0x90FB 0x90FC 0x90FD 0x90FE 0x90FF 0x9100 0x9101 0x9102 0x9103 0x9104 0x9105 0x9106 0x9107 0x9108 0x9109 0x910B 0x910D 0x910E 0x910F 0x9110 0x9111 0x9112 0x9114 0x9116 0x9117 0x9118 0x9119 0x911A 0x911B 0x911C 0x911D 0x911E 0x911F 0x9120 0x9121 0x9122 0x9123 0x9124 0x9126 0x9127 0x9128 0x9129 0x912A 0x912B 0x912C 0x912D 0x912E 0x912F 0x9130 0x9131 0x9132 0x9133 0x9134 0x9135 0x9136 0x9138 0x9139 0x913A 0x913B 0x913E 0x913F 0x9140 0x9141 0x9143 0x9144 0x9145 0x9146 0x9147 0x9148 0x9149 0x914A 0x914B 0x914C 0x914D 0x914E 0x914F 0x9150 0x9152 0x9153 0x9155 0x9156 0x9157 0x9158 0x915A 0x915F 0x9160 0x9161 0x9162 0x9163 0x9164 0x9165 0x9168 0x9169 0x916A 0x916C 0x916E 0x916F 0x9172 0x9173 0x9174 0x9175 0x9177 0x9178 0x9179 0x917A 0x9180 0x9181 0x9182 0x9183 0x9184 0x9185 0x9186 0x9187 0x9189 0x918A 0x918B 0x918D 0x918F 0x9190 0x9191 0x9192 0x9193 0x9199 0x919A 0x919B 0x919C 0x919D 0x919E 0x919F 0x91A0 0x91A1 0x91A2 0x91A3 0x91A5 0x91A7 0x91A8 0x91AA 0x91AB 0x91AC 0x91AD 0x91AE 0x91AF 0x91B0 0x91B1 0x91B2 0x91B3 0x91B4 0x91B5 0x91B7 0x91B9 0x91BA 0x91BC 0x91BD 0x91BE 0x91C0 0x91C1 0x91C2 0x91C3 0x91C5 0x91C6 0x91C7 0x91C9 0x91CB 0x91CC 0x91CD 0x91CE 0x91CF 0x91D0 0x91D1 0x91D3 0x91D4 0x91D5 0x91D7 0x91D8 0x91D9 0x91DA 0x91DC 0x91DD 0x91E2 0x91E3 0x91E4 0x91E6 0x91E7 0x91E8 0x91E9 0x91EA 0x91EB 0x91EC 0x91ED 0x91EE 0x91F1 0x91F3 0x91F4 0x91F5 0x91F7 0x91F8 0x91F9 0x91FD 0x91FF 0x9200 0x9201 0x9202 0x9203 0x9204 0x9205 0x9206 0x9207 0x9209 0x920A 0x920C 0x920D 0x920F 0x9210 0x9211 0x9212 0x9214 0x9215 0x9216 0x9217 0x9219 0x921A 0x921C 0x921E 0x9223 0x9224 0x9225 0x9226 0x9227 0x922D 0x922E 0x9230 0x9231 0x9232 0x9233 0x9234 0x9236 0x9237 0x9238 0x9239 0x923A 0x923D 0x923E 0x923F 0x9240 0x9245 0x9246 0x9248 0x9249 0x924A 0x924B 0x924C 0x924D 0x924E 0x924F 0x9250 0x9251 0x9252 0x9253 0x9254 0x9256 0x9257 0x925A 0x925B 0x925E 0x9260 0x9261 0x9263 0x9264 0x9265 0x9266 0x9267 0x926C 0x926D 0x926F 0x9270 0x9272 0x9276 0x9278 0x9279 0x927A 0x927B 0x927C 0x927D 0x927E 0x927F 0x9280 0x9282 0x9283 0x9285 0x9286 0x9287 0x9288 0x928A 0x928B 0x928C 0x928D 0x928E 0x9291 0x9293 0x9294 0x9295 0x9296 0x9297 0x9298 0x9299 0x929A 0x929B 0x929C 0x929D 0x92A0 0x92A1 0x92A2 0x92A3 0x92A4 0x92A5 0x92A6 0x92A7 0x92A8 0x92A9 0x92AA 0x92AB 0x92AC 0x92B2 0x92B3 0x92B4 0x92B5 0x92B6 0x92B7 0x92BB 0x92BC 0x92C0 0x92C1 0x92C2 0x92C3 0x92C4 0x92C5 0x92C6 0x92C7 0x92C8 0x92C9 0x92CA 0x92CB 0x92CC 0x92CD 0x92CE 0x92CF 0x92D0 0x92D1 0x92D2 0x92D3 0x92D5 0x92D7 0x92D8 0x92D9 0x92DD 0x92DE 0x92DF 0x92E0 0x92E1 0x92E4 0x92E6 0x92E7 0x92E8 0x92E9 0x92EA 0x92EE 0x92EF 0x92F0 0x92F1 0x92F7 0x92F8 0x92F9 0x92FA 0x92FB 0x92FC 0x92FE 0x92FF 0x9300 0x9301 0x9302 0x9304 0x9306 0x9308 0x9309 0x930B 0x930C 0x930D 0x930E 0x930F 0x9310 0x9312 0x9313 0x9314 0x9315 0x9316 0x9318 0x9319 0x931A 0x931B 0x931D 0x931E 0x931F 0x9320 0x9321 0x9322 0x9323 0x9324 0x9325 0x9326 0x9327 0x9328 0x9329 0x932A 0x932B 0x932D 0x932E 0x932F 0x9333 0x9334 0x9335 0x9336 0x9338 0x9339 0x933C 0x9346 0x9347 0x9349 0x934A 0x934B 0x934C 0x934D 0x934E 0x934F 0x9350 0x9351 0x9352 0x9354 0x9355 0x9356 0x9357 0x9358 0x9359 0x935A 0x935B 0x935C 0x935E 0x9360 0x9361 0x9363 0x9364 0x9365 0x9367 0x936A 0x936C 0x936D 0x9370 0x9371 0x9375 0x9376 0x9377 0x9379 0x937A 0x937B 0x937C 0x937E 0x9380 0x9382 0x9383 0x9388 0x9389 0x938A 0x938C 0x938D 0x938E 0x938F 0x9391 0x9392 0x9394 0x9395 0x9396 0x9397 0x9398 0x9399 0x939A 0x939B 0x939D 0x939E 0x939F 0x93A1 0x93A2 0x93A3 0x93A4 0x93A5 0x93A6 0x93A7 0x93A8 0x93A9 0x93AA 0x93AC 0x93AE 0x93AF 0x93B0 0x93B1 0x93B2 0x93B3 0x93B4 0x93B5 0x93B7 0x93C0 0x93C2 0x93C3 0x93C4 0x93C7 0x93C8 0x93CA 0x93CC 0x93CD 0x93CE 0x93CF 0x93D0 0x93D1 0x93D2 0x93D4 0x93D5 0x93D6 0x93D7 0x93D8 0x93D9 0x93DA 0x93DC 0x93DD 0x93DE 0x93DF 0x93E1 0x93E2 0x93E3 0x93E4 0x93E6 0x93E7 0x93E8 0x93EC 0x93EE 0x93F5 0x93F6 0x93F7 0x93F8 0x93F9 0x93FA 0x93FB 0x93FC 0x93FD 0x93FE 0x93FF 0x9400 0x9403 0x9406 0x9407 0x9409 0x940A 0x940B 0x940C 0x940D 0x940E 0x940F 0x9410 0x9411 0x9412 0x9413 0x9414 0x9415 0x9416 0x9418 0x9419 0x9420 0x9428 0x9429 0x942A 0x942B 0x942C 0x942E 0x9430 0x9431 0x9432 0x9433 0x9435 0x9436 0x9437 0x9438 0x9439 0x943A 0x943B 0x943C 0x943D 0x943F 0x9440 0x9444 0x9445 0x9446 0x9447 0x9448 0x9449 0x944A 0x944B 0x944C 0x944F 0x9450 0x9451 0x9452 0x9455 0x9457 0x945D 0x945E 0x9460 0x9462 0x9463 0x9464 0x9468 0x9469 0x946A 0x946B 0x946D 0x946E 0x946F 0x9470 0x9471 0x9472 0x9473 0x9474 0x9475 0x9476 0x9477 0x9478 0x947C 0x947D 0x947E 0x947F 0x9480 0x9481 0x9482 0x9483 0x9577 0x957A 0x957B 0x957C 0x957D 0x9580 0x9582 0x9583 0x9586 0x9588 0x9589 0x958B 0x958C 0x958D 0x958E 0x958F 0x9590 0x9591 0x9592 0x9593 0x9594 0x9598 0x959B 0x959C 0x959E 0x959F 0x95A1 0x95A3 0x95A4 0x95A5 0x95A8 0x95A9 0x95AB 0x95AC 0x95AD 0x95AE 0x95B0 0x95B1 0x95B5 0x95B6 0x95B7 0x95B9 0x95BA 0x95BB 0x95BC 0x95BD 0x95BE 0x95BF 0x95C0 0x95C3 0x95C5 0x95C6 0x95C7 0x95C8 0x95C9 0x95CA 0x95CB 0x95CC 0x95CD 0x95D0 0x95D1 0x95D2 0x95D3 0x95D4 0x95D5 0x95D6 0x95DA 0x95DB 0x95DC 0x95DE 0x95DF 0x95E0 0x95E1 0x95E2 0x95E3 0x95E4 0x95E5 0x961C 0x961E 0x9620 0x9621 0x9622 0x9623 0x9624 0x9628 0x962A 0x962C 0x962D 0x962E 0x962F 0x9630 0x9631 0x9632 0x9639 0x963A 0x963B 0x963C 0x963D 0x963F 0x9640 0x9642 0x9643 0x9644 0x964A 0x964B 0x964C 0x964D 0x964E 0x964F 0x9650 0x9651 0x9653 0x9654 0x9658 0x965B 0x965C 0x965D 0x965E 0x965F 0x9661 0x9662 0x9663 0x9664 0x966A 0x966B 0x966C 0x966D 0x966F 0x9670 0x9671 0x9672 0x9673 0x9674 0x9675 0x9676 0x9677 0x9678 0x967C 0x967D 0x967E 0x9680 0x9683 0x9684 0x9685 0x9686 0x9687 0x9688 0x9689 0x968A 0x968B 0x968D 0x968E 0x9691 0x9692 0x9693 0x9694 0x9695 0x9697 0x9698 0x9699 0x969B 0x969C 0x969E 0x96A1 0x96A2 0x96A4 0x96A7 0x96A8 0x96A9 0x96AA 0x96AC 0x96AE 0x96B0 0x96B1 0x96B3 0x96B4 0x96B8 0x96B9 0x96BB 0x96BC 0x96BF 0x96C0 0x96C1 0x96C2 0x96C3 0x96C4 0x96C5 0x96C6 0x96C7 0x96C8 0x96C9 0x96CA 0x96CB 0x96CC 0x96CD 0x96CE 0x96D2 0x96D3 0x96D4 0x96D5 0x96D6 0x96D7 0x96D8 0x96D9 0x96DA 0x96DB 0x96DC 0x96DD 0x96DE 0x96DF 0x96E1 0x96E2 0x96E3 0x96E5 0x96E8 0x96E9 0x96EA 0x96EF 0x96F0 0x96F1 0x96F2 0x96F5 0x96F6 0x96F7 0x96F8 0x96F9 0x96FA 0x96FB 0x96FD 0x96FF 0x9700 0x9702 0x9704 0x9705 0x9706 0x9707 0x9708 0x9709 0x970B 0x970D 0x970E 0x970F 0x9710 0x9711 0x9712 0x9713 0x9716 0x9718 0x9719 0x971C 0x971D 0x971E 0x971F 0x9720 0x9722 0x9723 0x9724 0x9725 0x9726 0x9727 0x9728 0x9729 0x972A 0x972B 0x972C 0x972E 0x972F 0x9730 0x9732 0x9735 0x9738 0x9739 0x973A 0x973D 0x973E 0x973F 0x9742 0x9743 0x9744 0x9746 0x9747 0x9748 0x9749 0x974B 0x9752 0x9756 0x9758 0x975A 0x975B 0x975C 0x975E 0x9760 0x9761 0x9762 0x9766 0x9768 0x9769 0x976A 0x976C 0x976E 0x9770 0x9772 0x9773 0x9774 0x9776 0x9777 0x9778 0x977A 0x977B 0x977C 0x977D 0x977E 0x977F 0x9780 0x9781 0x9782 0x9783 0x9784 0x9785 0x9788 0x978A 0x978B 0x978D 0x978E 0x978F 0x9794 0x9797 0x9798 0x9799 0x979A 0x979C 0x979D 0x979E 0x97A0 0x97A1 0x97A2 0x97A3 0x97A4 0x97A5 0x97A6 0x97A8 0x97AA 0x97AB 0x97AC 0x97AD 0x97AE 0x97B3 0x97B6 0x97B7 0x97B9 0x97BB 0x97BF 0x97C1 0x97C3 0x97C4 0x97C5 0x97C6 0x97C7 0x97C9 0x97CB 0x97CC 0x97CD 0x97CE 0x97CF 0x97D0 0x97D3 0x97D4 0x97D5 0x97D6 0x97D7 0x97D8 0x97D9 0x97DC 0x97DD 0x97DE 0x97DF 0x97E1 0x97E3 0x97E5 0x97ED 0x97F0 0x97F1 0x97F3 0x97F6 0x97F8 0x97F9 0x97FA 0x97FB 0x97FD 0x97FE 0x97FF 0x9800 0x9801 0x9802 0x9803 0x9804 0x9805 0x9806 0x9807 0x9808 0x980A 0x980C 0x980D 0x980E 0x980F 0x9810 0x9811 0x9812 0x9813 0x9816 0x9817 0x9818 0x981B 0x981C 0x981D 0x981E 0x9820 0x9821 0x9824 0x9826 0x9827 0x9828 0x9829 0x982B 0x982D 0x982F 0x9830 0x9832 0x9835 0x9837 0x9838 0x9839 0x983B 0x9841 0x9843 0x9844 0x9845 0x9846 0x9848 0x9849 0x984A 0x984C 0x984D 0x984E 0x984F 0x9850 0x9851 0x9852 0x9853 0x9857 0x9858 0x9859 0x985B 0x985C 0x985D 0x985E 0x985F 0x9860 0x9862 0x9863 0x9864 0x9865 0x9867 0x9869 0x986A 0x986B 0x986F 0x9870 0x9871 0x9872 0x9873 0x9874 0x98A8 0x98A9 0x98AC 0x98AD 0x98AE 0x98AF 0x98B1 0x98B2 0x98B3 0x98B6 0x98B8 0x98BA 0x98BB 0x98BC 0x98BD 0x98BE 0x98BF 0x98C0 0x98C1 0x98C2 0x98C4 0x98C6 0x98C9 0x98CB 0x98CC 0x98DB 0x98DF 0x98E2 0x98E3 0x98E5 0x98E7 0x98E9 0x98EA 0x98EB 0x98ED 0x98EF 0x98F2 0x98F4 0x98F6 0x98F9 0x98FA 0x98FC 0x98FD 0x98FE 0x9900 0x9902 0x9903 0x9905 0x9907 0x9908 0x9909 0x990A 0x990C 0x9910 0x9911 0x9912 0x9913 0x9914 0x9915 0x9916 0x9917 0x9918 0x991A 0x991B 0x991E 0x991F 0x9921 0x9924 0x9925 0x9927 0x9928 0x9929 0x992A 0x992B 0x992C 0x992D 0x992E 0x992F 0x9930 0x9931 0x9932 0x9933 0x9935 0x993A 0x993C 0x993D 0x993E 0x993F 0x9941 0x9943 0x9945 0x9947 0x9948 0x9949 0x994B 0x994C 0x994E 0x9950 0x9951 0x9952 0x9953 0x9954 0x9955 0x9956 0x9957 0x9958 0x9959 0x995B 0x995C 0x995E 0x995F 0x9961 0x9996 0x9997 0x9998 0x9999 0x999C 0x999D 0x999E 0x99A1 0x99A3 0x99A5 0x99A6 0x99A7 0x99A8 0x99AB 0x99AC 0x99AD 0x99AE 0x99AF 0x99B0 0x99B1 0x99B2 0x99B3 0x99B4 0x99B5 0x99B9 0x99BA 0x99BB 0x99BD 0x99C1 0x99C2 0x99C3 0x99C7 0x99C9 0x99CB 0x99CC 0x99CD 0x99CE 0x99CF 0x99D0 0x99D1 0x99D2 0x99D3 0x99D4 0x99D5 0x99D6 0x99D7 0x99D8 0x99D9 0x99DB 0x99DC 0x99DD 0x99DF 0x99E2 0x99E3 0x99E4 0x99E5 0x99E7 0x99E9 0x99EA 0x99EC 0x99ED 0x99EE 0x99F0 0x99F1 0x99F4 0x99F6 0x99F7 0x99F8 0x99F9 0x99FA 0x99FB 0x99FC 0x99FD 0x99FE 0x99FF 0x9A01 0x9A02 0x9A03 0x9A04 0x9A05 0x9A06 0x9A07 0x9A09 0x9A0A 0x9A0B 0x9A0D 0x9A0E 0x9A0F 0x9A11 0x9A14 0x9A15 0x9A16 0x9A19 0x9A1A 0x9A1B 0x9A1C 0x9A1D 0x9A1E 0x9A20 0x9A22 0x9A23 0x9A24 0x9A25 0x9A27 0x9A29 0x9A2A 0x9A2B 0x9A2C 0x9A2D 0x9A2E 0x9A30 0x9A31 0x9A32 0x9A34 0x9A35 0x9A36 0x9A37 0x9A38 0x9A39 0x9A3A 0x9A3D 0x9A3E 0x9A3F 0x9A40 0x9A41 0x9A42 0x9A43 0x9A44 0x9A45 0x9A46 0x9A48 0x9A49 0x9A4A 0x9A4C 0x9A4D 0x9A4E 0x9A4F 0x9A50 0x9A52 0x9A53 0x9A54 0x9A55 0x9A56 0x9A57 0x9A59 0x9A5A 0x9A5B 0x9A5E 0x9A5F 0x9A60 0x9A62 0x9A64 0x9A65 0x9A66 0x9A67 0x9A68 0x9A69 0x9A6A 0x9A6B 0x9AA8 0x9AAB 0x9AAD 0x9AAF 0x9AB0 0x9AB1 0x9AB3 0x9AB4 0x9AB7 0x9AB8 0x9AB9 0x9ABB 0x9ABC 0x9ABE 0x9ABF 0x9AC0 0x9AC1 0x9AC2 0x9AC6 0x9AC7 0x9ACA 0x9ACD 0x9ACF 0x9AD0 0x9AD1 0x9AD2 0x9AD3 0x9AD4 0x9AD5 0x9AD6 0x9AD8 0x9ADC 0x9ADF 0x9AE1 0x9AE3 0x9AE6 0x9AE7 0x9AEB 0x9AEC 0x9AED 0x9AEE 0x9AEF 0x9AF1 0x9AF2 0x9AF3 0x9AF6 0x9AF7 0x9AF9 0x9AFA 0x9AFB 0x9AFC 0x9AFD 0x9AFE 0x9B01 0x9B03 0x9B04 0x9B05 0x9B06 0x9B08 0x9B0A 0x9B0B 0x9B0C 0x9B0D 0x9B0E 0x9B10 0x9B11 0x9B12 0x9B15 0x9B16 0x9B17 0x9B18 0x9B19 0x9B1A 0x9B1E 0x9B1F 0x9B20 0x9B22 0x9B23 0x9B24 0x9B25 0x9B27 0x9B28 0x9B29 0x9B2B 0x9B2E 0x9B2F 0x9B31 0x9B32 0x9B33 0x9B35 0x9B37 0x9B3A 0x9B3B 0x9B3C 0x9B3E 0x9B3F 0x9B41 0x9B42 0x9B43 0x9B44 0x9B45 0x9B46 0x9B48 0x9B4A 0x9B4B 0x9B4C 0x9B4D 0x9B4E 0x9B4F 0x9B51 0x9B52 0x9B54 0x9B55 0x9B56 0x9B58 0x9B59 0x9B5A 0x9B5B 0x9B5F 0x9B60 0x9B61 0x9B64 0x9B66 0x9B67 0x9B68 0x9B6C 0x9B6F 0x9B70 0x9B71 0x9B74 0x9B75 0x9B76 0x9B77 0x9B7A 0x9B7B 0x9B7C 0x9B7D 0x9B7E 0x9B80 0x9B82 0x9B85 0x9B86 0x9B87 0x9B88 0x9B90 0x9B91 0x9B92 0x9B93 0x9B95 0x9B9A 0x9B9B 0x9B9E 0x9BA0 0x9BA1 0x9BA2 0x9BA4 0x9BA5 0x9BA6 0x9BA8 0x9BAA 0x9BAB 0x9BAD 0x9BAE 0x9BAF 0x9BB5 0x9BB6 0x9BB8 0x9BB9 0x9BBD 0x9BBF 0x9BC0 0x9BC1 0x9BC3 0x9BC4 0x9BC6 0x9BC7 0x9BC8 0x9BC9 0x9BCA 0x9BD3 0x9BD4 0x9BD5 0x9BD6 0x9BD7 0x9BD9 0x9BDA 0x9BDB 0x9BDC 0x9BDE 0x9BE0 0x9BE1 0x9BE2 0x9BE4 0x9BE5 0x9BE6 0x9BE7 0x9BE8 0x9BEA 0x9BEB 0x9BEC 0x9BF0 0x9BF7 0x9BF8 0x9BFD 0x9C05 0x9C06 0x9C07 0x9C08 0x9C09 0x9C0B 0x9C0D 0x9C0E 0x9C12 0x9C13 0x9C14 0x9C17 0x9C1C 0x9C1D 0x9C21 0x9C23 0x9C24 0x9C25 0x9C28 0x9C29 0x9C2B 0x9C2C 0x9C2D 0x9C31 0x9C32 0x9C33 0x9C34 0x9C36 0x9C37 0x9C39 0x9C3B 0x9C3C 0x9C3D 0x9C3E 0x9C3F 0x9C40 0x9C41 0x9C44 0x9C46 0x9C48 0x9C49 0x9C4A 0x9C4B 0x9C4C 0x9C4D 0x9C4E 0x9C50 0x9C52 0x9C54 0x9C55 0x9C56 0x9C57 0x9C58 0x9C59 0x9C5E 0x9C5F 0x9C60 0x9C62 0x9C63 0x9C66 0x9C67 0x9C68 0x9C6D 0x9C6E 0x9C71 0x9C73 0x9C74 0x9C75 0x9C77 0x9C78 0x9C79 0x9C7A 0x9CE5 0x9CE6 0x9CE7 0x9CE9 0x9CEA 0x9CED 0x9CF1 0x9CF2 0x9CF3 0x9CF4 0x9CF5 0x9CF6 0x9CF7 0x9CF9 0x9CFA 0x9CFB 0x9CFC 0x9CFD 0x9CFF 0x9D00 0x9D03 0x9D04 0x9D05 0x9D06 0x9D07 0x9D08 0x9D09 0x9D10 0x9D12 0x9D14 0x9D15 0x9D17 0x9D18 0x9D19 0x9D1B 0x9D1D 0x9D1E 0x9D1F 0x9D20 0x9D22 0x9D23 0x9D25 0x9D26 0x9D28 0x9D29 0x9D2D 0x9D2E 0x9D2F 0x9D30 0x9D31 0x9D33 0x9D36 0x9D37 0x9D38 0x9D3B 0x9D3D 0x9D3E 0x9D3F 0x9D40 0x9D41 0x9D42 0x9D43 0x9D45 0x9D4A 0x9D4B 0x9D4C 0x9D4F 0x9D51 0x9D52 0x9D53 0x9D54 0x9D56 0x9D57 0x9D58 0x9D59 0x9D5A 0x9D5B 0x9D5C 0x9D5D 0x9D5F 0x9D60 0x9D61 0x9D67 0x9D68 0x9D69 0x9D6A 0x9D6B 0x9D6C 0x9D6F 0x9D70 0x9D71 0x9D72 0x9D73 0x9D74 0x9D75 0x9D77 0x9D78 0x9D79 0x9D7B 0x9D7D 0x9D7F 0x9D80 0x9D81 0x9D82 0x9D84 0x9D85 0x9D86 0x9D87 0x9D88 0x9D89 0x9D8A 0x9D8B 0x9D8C 0x9D90 0x9D92 0x9D94 0x9D96 0x9D97 0x9D98 0x9D99 0x9D9A 0x9D9B 0x9D9C 0x9D9D 0x9D9E 0x9D9F 0x9DA0 0x9DA1 0x9DA2 0x9DA3 0x9DA4 0x9DA6 0x9DA7 0x9DA8 0x9DA9 0x9DAA 0x9DAC 0x9DAD 0x9DAF 0x9DB1 0x9DB2 0x9DB3 0x9DB4 0x9DB5 0x9DB6 0x9DB7 0x9DB8 0x9DB9 0x9DBA 0x9DBB 0x9DBC 0x9DBE 0x9DBF 0x9DC1 0x9DC2 0x9DC3 0x9DC5 0x9DC7 0x9DC8 0x9DCA 0x9DCB 0x9DCC 0x9DCD 0x9DCE 0x9DCF 0x9DD0 0x9DD1 0x9DD2 0x9DD3 0x9DD5 0x9DD6 0x9DD7 0x9DD8 0x9DD9 0x9DDA 0x9DDB 0x9DDC 0x9DDD 0x9DDE 0x9DDF 0x9DE1 0x9DE2 0x9DE3 0x9DE4 0x9DE5 0x9DE6 0x9DE8 0x9DE9 0x9DEB 0x9DEC 0x9DED 0x9DEE 0x9DEF 0x9DF0 0x9DF2 0x9DF3 0x9DF4 0x9DF5 0x9DF6 0x9DF7 0x9DF8 0x9DF9 0x9DFA 0x9DFB 0x9DFD 0x9DFE 0x9DFF 0x9E00 0x9E01 0x9E02 0x9E03 0x9E04 0x9E05 0x9E06 0x9E07 0x9E09 0x9E0B 0x9E0D 0x9E0F 0x9E10 0x9E11 0x9E12 0x9E13 0x9E14 0x9E15 0x9E17 0x9E19 0x9E1A 0x9E1B 0x9E1D 0x9E1E 0x9E75 0x9E79 0x9E7A 0x9E7C 0x9E7D 0x9E7F 0x9E80 0x9E82 0x9E83 0x9E86 0x9E87 0x9E88 0x9E89 0x9E8A 0x9E8B 0x9E8C 0x9E8D 0x9E8E 0x9E91 0x9E92 0x9E93 0x9E94 0x9E97 0x9E99 0x9E9A 0x9E9B 0x9E9C 0x9E9D 0x9E9F 0x9EA0 0x9EA1 0x9EA4 0x9EA5 0x9EA7 0x9EA9 0x9EAD 0x9EAE 0x9EB0 0x9EB4 0x9EB5 0x9EB6 0x9EB7 0x9EBB 0x9EBC 0x9EBE 0x9EC0 0x9EC2 0x9EC3 0x9EC8 0x9ECC 0x9ECD 0x9ECE 0x9ECF 0x9ED0 0x9ED1 0x9ED3 0x9ED4 0x9ED5 0x9ED6 0x9ED8 0x9EDA 0x9EDB 0x9EDC 0x9EDD 0x9EDE 0x9EDF 0x9EE0 0x9EE4 0x9EE5 0x9EE6 0x9EE7 0x9EE8 0x9EEB 0x9EED 0x9EEE 0x9EEF 0x9EF0 0x9EF2 0x9EF3 0x9EF4 0x9EF5 0x9EF6 0x9EF7 0x9EF9 0x9EFA 0x9EFB 0x9EFC 0x9EFD 0x9EFF 0x9F00 0x9F01 0x9F06 0x9F07 0x9F09 0x9F0A 0x9F0E 0x9F0F 0x9F10 0x9F12 0x9F13 0x9F15 0x9F16 0x9F18 0x9F19 0x9F1A 0x9F1B 0x9F1C 0x9F1E 0x9F20 0x9F22 0x9F23 0x9F24 0x9F25 0x9F28 0x9F29 0x9F2A 0x9F2B 0x9F2C 0x9F2D 0x9F2E 0x9F2F 0x9F30 0x9F31 0x9F32 0x9F33 0x9F34 0x9F35 0x9F36 0x9F37 0x9F38 0x9F3B 0x9F3D 0x9F3E 0x9F40 0x9F41 0x9F42 0x9F43 0x9F46 0x9F47 0x9F48 0x9F49 0x9F4A 0x9F4B 0x9F4C 0x9F4D 0x9F4E 0x9F4F 0x9F52 0x9F54 0x9F55 0x9F56 0x9F57 0x9F58 0x9F59 0x9F5B 0x9F5C 0x9F5D 0x9F5E 0x9F5F 0x9F60 0x9F61 0x9F63 0x9F64 0x9F65 0x9F66 0x9F67 0x9F6A 0x9F6B 0x9F6C 0x9F6E 0x9F6F 0x9F70 0x9F71 0x9F72 0x9F74 0x9F75 0x9F76 0x9F77 0x9F78 0x9F79 0x9F7A 0x9F7B 0x9F7E 0x9F8D 0x9F90 0x9F91 0x9F92 0x9F94 0x9F95 0x9F98 0x9F9C 0x9FA0 0x9FA2 0x9FA4 0xFA0C 0xFA0D fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-lang/zu.orth000066400000000000000000000024001503113465200242310ustar00rootroot00000000000000# # fontconfig/fc-lang/zu.orth # # Copyright © 2002 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Zulu (zu) # # Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf # 0041-005a 0061-007a fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-list/000077500000000000000000000000001503113465200227335ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-list/Makefile.am000066400000000000000000000033021503113465200247650ustar00rootroot00000000000000# # fontconfig/fc-list/Makefile.am # # Copyright © 2003 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. DOC2MAN = docbook2man FC_LIST_SRC=${top_srcdir}/fc-list SGML = ${FC_LIST_SRC}/fc-list.sgml bin_PROGRAMS=fc-list AM_CPPFLAGS=-I${top_srcdir} $(WARN_CFLAGS) BUILT_MANS=fc-list.1 if ENABLE_DOCS man_MANS=${BUILT_MANS} endif EXTRA_DIST=fc-list.sgml $(BUILT_MANS) CLEANFILES = fc_list_LDADD = ${top_builddir}/src/libfontconfig.la if USEDOCBOOK ${man_MANS}: ${SGML} $(AM_V_GEN) $(RM) $@; \ $(DOC2MAN) ${SGML}; \ $(RM) manpage.* all-local: $(man_MANS) CLEANFILES += ${man_MANS} else all-local: endif -include $(top_srcdir)/git.mk fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-list/fc-list.c000066400000000000000000000136561503113465200244530ustar00rootroot00000000000000/* * fontconfig/fc-list/fc-list.c * * Copyright © 2002 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_CONFIG_H # include #else # ifdef linux # define HAVE_GETOPT_LONG 1 # endif # define HAVE_GETOPT 1 #endif #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #ifdef ENABLE_NLS # include # define _(x) (dgettext (GETTEXT_PACKAGE, x)) #else # define dgettext(d, s) (s) # define _(x) (x) #endif #ifndef HAVE_GETOPT # define HAVE_GETOPT 0 #endif #ifndef HAVE_GETOPT_LONG # define HAVE_GETOPT_LONG 0 #endif #if HAVE_GETOPT_LONG # undef _GNU_SOURCE # define _GNU_SOURCE # include const struct option longopts[] = { { "verbose", 0, 0, 'v' }, { "brief", 0, 0, 'b' }, { "format", 1, 0, 'f' }, { "quiet", 0, 0, 'q' }, { "version", 0, 0, 'V' }, { "help", 0, 0, 'h' }, { NULL, 0, 0, 0 }, }; #else # if HAVE_GETOPT extern char *optarg; extern int optind, opterr, optopt; # endif #endif static void usage (char *program, int error) { FILE *file = error ? stderr : stdout; #if HAVE_GETOPT_LONG fprintf (file, _("usage: %s [-vbqVh] [-f FORMAT] [--verbose] [--brief] [--format=FORMAT] [--quiet] [--version] [--help] [pattern] {element ...} \n"), program); #else fprintf (file, _("usage: %s [-vbqVh] [-f FORMAT] [pattern] {element ...} \n"), program); #endif fprintf (file, _("List fonts matching [pattern]\n")); fprintf (file, "\n"); #if HAVE_GETOPT_LONG fprintf (file, _(" -v, --verbose display entire font pattern verbosely\n")); fprintf (file, _(" -b, --brief display entire font pattern briefly\n")); fprintf (file, _(" -f, --format=FORMAT use the given output format\n")); fprintf (file, _(" -q, --quiet suppress all normal output, exit 1 if no fonts matched\n")); fprintf (file, _(" -V, --version display font config version and exit\n")); fprintf (file, _(" -h, --help display this help and exit\n")); #else fprintf (file, _(" -v (verbose) display entire font pattern verbosely\n")); fprintf (file, _(" -b (brief) display entire font pattern briefly\n")); fprintf (file, _(" -f FORMAT (format) use the given output format\n")); fprintf (file, _(" -q, (quiet) suppress all normal output, exit 1 if no fonts matched\n")); fprintf (file, _(" -V (version) display font config version and exit\n")); fprintf (file, _(" -h (help) display this help and exit\n")); #endif exit (error); } int main (int argc, char **argv) { int verbose = 0; int brief = 0; int quiet = 0; const FcChar8 *format = NULL; const FcChar8 *format_optarg = NULL; int nfont = 0; int i; FcObjectSet *os = 0; FcFontSet *fs; FcPattern *pat; #if HAVE_GETOPT_LONG || HAVE_GETOPT int c; setlocale (LC_ALL, ""); # if HAVE_GETOPT_LONG while ((c = getopt_long (argc, argv, "vbf:qVh", longopts, NULL)) != -1) # else while ((c = getopt (argc, argv, "vbf:qVh")) != -1) # endif { switch (c) { case 'v': verbose = 1; break; case 'b': brief = 1; break; case 'f': format_optarg = format = (FcChar8 *)strdup (optarg); break; case 'q': quiet = 1; break; case 'V': fprintf (stderr, "fontconfig version %d.%d.%d\n", FC_MAJOR, FC_MINOR, FC_REVISION); exit (0); case 'h': usage (argv[0], 0); default: usage (argv[0], 1); } } i = optind; #else i = 1; #endif if (argv[i]) { pat = FcNameParse ((FcChar8 *)argv[i]); if (!pat) { fprintf (stderr, _("Unable to parse the pattern\n")); return 1; } while (argv[++i]) { if (!os) os = FcObjectSetCreate(); FcObjectSetAdd (os, argv[i]); } } else pat = FcPatternCreate(); if (quiet && !os) os = FcObjectSetCreate(); if (!verbose && !brief && !format && !os) os = FcObjectSetBuild (FC_FAMILY, FC_STYLE, FC_FILE, (char *)0); if (!format) format = (const FcChar8 *)"%{=fclist}\n"; fs = FcFontList (0, pat, os); if (os) FcObjectSetDestroy (os); if (pat) FcPatternDestroy (pat); if (!quiet && fs) { int j; for (j = 0; j < fs->nfont; j++) { if (verbose || brief) { if (brief) { FcPatternDel (fs->fonts[j], FC_CHARSET); FcPatternDel (fs->fonts[j], FC_LANG); } FcPatternPrint (fs->fonts[j]); } else { FcChar8 *s; s = FcPatternFormat (fs->fonts[j], format); if (s) { printf ("%s", s); FcStrFree (s); } } } } if (fs) { nfont = fs->nfont; FcFontSetDestroy (fs); } if (format_optarg) { free ((void *)format_optarg); } FcFini(); return quiet ? (nfont == 0 ? 1 : 0) : 0; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-list/fc-list.sgml000066400000000000000000000156161503113465200251710ustar00rootroot00000000000000 manpage.1'. You may view the manual page with: `docbook-to-man manpage.sgml | nroff -man | less'. A typical entry in a Makefile or Makefile.am is: manpage.1: manpage.sgml docbook-to-man $< > $@ The docbook-to-man binary is found in the docbook-to-man package. Please remember that if you create the nroff version in one of the debian/rules file targets (such as build), you will need to include docbook-to-man in your Build-Depends control field. --> Josselin"> Mouette"> Aug 13, 2008"> 1"> joss@debian.org"> fc-list"> Debian"> GNU"> GPL"> ]>
&dhemail;
&dhfirstname; &dhsurname; 2003 &dhusername; &dhdate;
&dhucpackage; &dhsection; &dhpackage; list available fonts &dhpackage; DESCRIPTION &dhpackage; lists fonts and styles available on the system for applications using fontconfig. If any elements are specified, only those are printed. Otherwise family and style are printed, unless verbose output is requested. OPTIONS This program follows the usual &gnu; command line syntax, with long options starting with two dashes (`-'). A summary of options is included below. Print verbose output of the whole font pattern for each match, or elements if any is provided. Format output according to the format specifier format. Suppress all normal output. returns 1 as the error code if no fonts matched. Show version of the program and exit. Show summary of options. If this argument is set, only fonts matching pattern are displayed. If set, the element property is displayed for matching fonts. EXAMPLES fc-list Lists all font faces. fc-list :lang=hi Lists font faces that cover Hindi. fc-list : family style file spacing Lists the filename and spacing value for each font face. : is an empty pattern that matches all fonts. SEE ALSO fc-match(1) FcFontList(3) FcPatternFormat(3) fc-cat(1) fc-cache(1) fc-pattern(1) fc-query(1) fc-scan(1) The fontconfig user's guide AUTHOR This manual page was written by Keith Packard keithp@keithp.com and &dhusername; &dhemail;.
fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-list/meson.build000066400000000000000000000004351503113465200250770ustar00rootroot00000000000000fclist = executable('fc-list', ['fc-list.c', fcstdint_h, alias_headers, ft_alias_headers], include_directories: [incbase, incsrc], dependencies: [libintl_dep], link_with: [libfontconfig], c_args: c_args, install: true, install_tag: 'tools') tools_man_pages += ['fc-list'] fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-match/000077500000000000000000000000001503113465200230545ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-match/Makefile.am000066400000000000000000000033131503113465200251100ustar00rootroot00000000000000# # fontconfig/fc-match/Makefile.am # # Copyright © 2003 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. bin_PROGRAMS=fc-match DOC2MAN = docbook2man FC_MATCH_SRC=${top_srcdir}/fc-match SGML = ${FC_MATCH_SRC}/fc-match.sgml AM_CPPFLAGS=-I${top_srcdir} $(WARN_CFLAGS) BUILT_MANS=fc-match.1 if ENABLE_DOCS man_MANS=${BUILT_MANS} endif EXTRA_DIST=fc-match.sgml $(BUILT_MANS) CLEANFILES = fc_match_LDADD = ${top_builddir}/src/libfontconfig.la if USEDOCBOOK ${man_MANS}: ${SGML} $(AM_V_GEN) $(RM) $@; \ $(DOC2MAN) ${SGML}; \ $(RM) manpage.* all-local: $(man_MANS) CLEANFILES += ${man_MANS} else all-local: endif -include $(top_srcdir)/git.mk fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-match/fc-match.c000066400000000000000000000154751503113465200247160ustar00rootroot00000000000000/* * fontconfig/fc-match/fc-match.c * * Copyright © 2003 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_CONFIG_H # include #else # ifdef linux # define HAVE_GETOPT_LONG 1 # endif # define HAVE_GETOPT 1 #endif #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #ifdef ENABLE_NLS # include # define _(x) (dgettext (GETTEXT_PACKAGE, x)) #else # define dgettext(d, s) (s) # define _(x) (x) #endif #ifndef HAVE_GETOPT # define HAVE_GETOPT 0 #endif #ifndef HAVE_GETOPT_LONG # define HAVE_GETOPT_LONG 0 #endif #if HAVE_GETOPT_LONG # undef _GNU_SOURCE # define _GNU_SOURCE # include static const struct option longopts[] = { { "sort", 0, 0, 's' }, { "all", 0, 0, 'a' }, { "verbose", 0, 0, 'v' }, { "brief", 0, 0, 'b' }, { "format", 1, 0, 'f' }, { "version", 0, 0, 'V' }, { "help", 0, 0, 'h' }, { NULL, 0, 0, 0 }, }; #else # if HAVE_GETOPT extern char *optarg; extern int optind, opterr, optopt; # endif #endif static void usage (char *program, int error) { FILE *file = error ? stderr : stdout; #if HAVE_GETOPT_LONG fprintf (file, _("usage: %s [-savbVh] [-f FORMAT] [--sort] [--all] [--verbose] [--brief] [--format=FORMAT] [--version] [--help] [pattern] {element...}\n"), program); #else fprintf (file, _("usage: %s [-savVh] [-f FORMAT] [pattern] {element...}\n"), program); #endif fprintf (file, _("List best font matching [pattern]\n")); fprintf (file, "\n"); #if HAVE_GETOPT_LONG fprintf (file, _(" -s, --sort display sorted list of matches\n")); fprintf (file, _(" -a, --all display unpruned sorted list of matches\n")); fprintf (file, _(" -v, --verbose display entire font pattern verbosely\n")); fprintf (file, _(" -b, --brief display entire font pattern briefly\n")); fprintf (file, _(" -f, --format=FORMAT use the given output format\n")); fprintf (file, _(" -V, --version display font config version and exit\n")); fprintf (file, _(" -h, --help display this help and exit\n")); #else fprintf (file, _(" -s, (sort) display sorted list of matches\n")); fprintf (file, _(" -a (all) display unpruned sorted list of matches\n")); fprintf (file, _(" -v (verbose) display entire font pattern verbosely\n")); fprintf (file, _(" -b (brief) display entire font pattern briefly\n")); fprintf (file, _(" -f FORMAT (format) use the given output format\n")); fprintf (file, _(" -V (version) display font config version and exit\n")); fprintf (file, _(" -h (help) display this help and exit\n")); #endif exit (error); } int main (int argc, char **argv) { int verbose = 0; int brief = 0; int sort = 0, all = 0; const FcChar8 *format = NULL; const FcChar8 *format_optarg = NULL; int i; FcObjectSet *os = 0; FcFontSet *fs; FcPattern *pat; FcResult result; #if HAVE_GETOPT_LONG || HAVE_GETOPT int c; setlocale (LC_ALL, ""); # if HAVE_GETOPT_LONG while ((c = getopt_long (argc, argv, "asvbf:Vh", longopts, NULL)) != -1) # else while ((c = getopt (argc, argv, "asvbf:Vh")) != -1) # endif { switch (c) { case 'a': all = 1; break; case 's': sort = 1; break; case 'v': verbose = 1; break; case 'b': brief = 1; break; case 'f': format = format_optarg = (FcChar8 *)strdup (optarg); break; case 'V': fprintf (stderr, "fontconfig version %d.%d.%d\n", FC_MAJOR, FC_MINOR, FC_REVISION); exit (0); case 'h': usage (argv[0], 0); default: usage (argv[0], 1); } } i = optind; #else i = 1; #endif if (argv[i]) { pat = FcNameParse ((FcChar8 *)argv[i]); if (!pat) { fprintf (stderr, _("Unable to parse the pattern\n")); return 1; } while (argv[++i]) { if (!os) os = FcObjectSetCreate(); FcObjectSetAdd (os, argv[i]); } } else pat = FcPatternCreate(); if (!pat) return 1; FcConfigSubstitute (0, pat, FcMatchPattern); FcConfigSetDefaultSubstitute (0, pat); fs = FcFontSetCreate(); if (sort || all) { FcFontSet *font_patterns; int j; font_patterns = FcFontSort (0, pat, all ? FcFalse : FcTrue, 0, &result); if (!font_patterns || font_patterns->nfont == 0) { fprintf (stderr, _("No fonts installed on the system\n")); return 1; } for (j = 0; j < font_patterns->nfont; j++) { FcPattern *font_pattern; font_pattern = FcFontRenderPrepare (NULL, pat, font_patterns->fonts[j]); if (font_pattern) FcFontSetAdd (fs, font_pattern); } FcFontSetSortDestroy (font_patterns); } else { FcPattern *match; match = FcFontMatch (0, pat, &result); if (match) FcFontSetAdd (fs, match); } FcPatternDestroy (pat); if (!format) { if (os) format = (const FcChar8 *)"%{=unparse}\n"; else format = (const FcChar8 *)"%{=fcmatch}\n"; } if (fs) { int j; for (j = 0; j < fs->nfont; j++) { FcPattern *font; font = FcPatternFilter (fs->fonts[j], os); if (verbose || brief) { if (brief) { FcPatternDel (font, FC_CHARSET); FcPatternDel (font, FC_LANG); } FcPatternPrint (font); } else { FcChar8 *s; s = FcPatternFormat (font, format); if (s) { printf ("%s", s); FcStrFree (s); } } FcPatternDestroy (font); } FcFontSetDestroy (fs); } if (os) FcObjectSetDestroy (os); FcFini(); if (format_optarg) { free ((void *)format_optarg); format_optarg = NULL; } return 0; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-match/fc-match.sgml000066400000000000000000000212421503113465200254230ustar00rootroot00000000000000 Patrick"> Lam"> Aug 13, 2008"> 1"> plam@csail.mit.edu"> fc-match"> Debian"> GNU"> GPL"> ]>
&dhemail;
&dhfirstname; &dhsurname; 2003 &dhusername; &dhdate;
&dhucpackage; &dhsection; &dhpackage; match available fonts &dhpackage; DESCRIPTION &dhpackage; matches pattern (empty pattern by default) using the normal fontconfig matching rules to find the best font available. If is given, the sorted list of best matching fonts is displayed. The option works like except that no pruning is done on the list of fonts. If any elements are specified, only those are printed. Otherwise short file name, family, and style are printed, unless verbose output is requested. OPTIONS This program follows the usual &gnu; command line syntax, with long options starting with two dashes (`-'). A summary of options is included below. Displays sorted list of best matching fonts, but do not do any pruning on the list. Displays sorted list of best matching fonts. Print verbose output of the whole font pattern for each match, or elements if any is provided. Format output according to the format specifier format. Show version of the program and exit. Show summary of options. Displays fonts matching pattern (uses empty pattern by default). If set, the element property is displayed for matching fonts. EXAMPLES fc-match sans Display the best matching font categorized into sans-serif generic family, filtered by current locale fc-match sans:lang=en Display the best matching font categorized into sans-serif generic family, filtered by English language fc-match sans:lang=en:weight=bold Display the best matching font categorized into sans-serif generic family, filtered by English language and weight is bold. SEE ALSO fc-list(1) FcFontMatch(3) FcFontSort(3) FcPatternFormat(3) fc-cat(1) fc-cache(1) fc-pattern(1) fc-query(1) fc-scan(1) The fontconfig user's guide AUTHOR This manual page was updated by &dhusername; &dhemail;.
fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-match/meson.build000066400000000000000000000004411503113465200252150ustar00rootroot00000000000000fcmatch = executable('fc-match', ['fc-match.c', fcstdint_h, alias_headers, ft_alias_headers], include_directories: [incbase, incsrc], dependencies: [libintl_dep], link_with: [libfontconfig], c_args: c_args, install: true, install_tag: 'tools') tools_man_pages += ['fc-match'] fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-pattern/000077500000000000000000000000001503113465200234355ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-pattern/Makefile.am000066400000000000000000000033351503113465200254750ustar00rootroot00000000000000# # fontconfig/fc-pattern/Makefile.am # # Copyright © 2003 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. bin_PROGRAMS=fc-pattern DOC2MAN = docbook2man FC_PATTERN_SRC=${top_srcdir}/fc-pattern SGML = ${FC_PATTERN_SRC}/fc-pattern.sgml AM_CPPFLAGS=-I${top_srcdir} $(WARN_CFLAGS) BUILT_MANS=fc-pattern.1 if ENABLE_DOCS man_MANS=${BUILT_MANS} endif EXTRA_DIST=fc-pattern.sgml $(BUILT_MANS) CLEANFILES = fc_pattern_LDADD = ${top_builddir}/src/libfontconfig.la if USEDOCBOOK ${man_MANS}: ${SGML} $(AM_V_GEN) $(RM) $@; \ $(DOC2MAN) ${SGML}; \ $(RM) manpage.* all-local: $(man_MANS) CLEANFILES += ${man_MANS} else all-local: endif -include $(top_srcdir)/git.mk fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-pattern/fc-pattern.c000066400000000000000000000122201503113465200256410ustar00rootroot00000000000000/* * fontconfig/fc-pattern/fc-pattern.c * * Copyright © 2003 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_CONFIG_H # include #else # ifdef linux # define HAVE_GETOPT_LONG 1 # endif # define HAVE_GETOPT 1 #endif #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #ifdef ENABLE_NLS # include # define _(x) (dgettext (GETTEXT_PACKAGE, x)) #else # define dgettext(d, s) (s) # define _(x) (x) #endif #ifndef HAVE_GETOPT # define HAVE_GETOPT 0 #endif #ifndef HAVE_GETOPT_LONG # define HAVE_GETOPT_LONG 0 #endif #if HAVE_GETOPT_LONG # undef _GNU_SOURCE # define _GNU_SOURCE # include static const struct option longopts[] = { { "config", 0, 0, 'c' }, { "default", 0, 0, 'd' }, { "format", 1, 0, 'f' }, { "version", 0, 0, 'V' }, { "help", 0, 0, 'h' }, { NULL, 0, 0, 0 }, }; #else # if HAVE_GETOPT extern char *optarg; extern int optind, opterr, optopt; # endif #endif static void usage (char *program, int error) { FILE *file = error ? stderr : stdout; #if HAVE_GETOPT_LONG fprintf (file, _("usage: %s [-cdVh] [-f FORMAT] [--config] [--default] [--verbose] [--format=FORMAT] [--version] [--help] [pattern] {element...}\n"), program); #else fprintf (file, _("usage: %s [-cdVh] [-f FORMAT] [pattern] {element...}\n"), program); #endif fprintf (file, _("List best font matching [pattern]\n")); fprintf (file, "\n"); #if HAVE_GETOPT_LONG fprintf (file, _(" -c, --config perform config substitution on pattern\n")); fprintf (file, _(" -d, --default perform default substitution on pattern\n")); fprintf (file, _(" -f, --format=FORMAT use the given output format\n")); fprintf (file, _(" -V, --version display font config version and exit\n")); fprintf (file, _(" -h, --help display this help and exit\n")); #else fprintf (file, _(" -c, (config) perform config substitution on pattern\n")); fprintf (file, _(" -d, (default) perform default substitution on pattern\n")); fprintf (file, _(" -f FORMAT (format) use the given output format\n")); fprintf (file, _(" -V (version) display font config version and exit\n")); fprintf (file, _(" -h (help) display this help and exit\n")); #endif exit (error); } int main (int argc, char **argv) { int do_config = 0, do_default = 0; FcChar8 *format = NULL; int i; FcObjectSet *os = 0; FcPattern *pat; #if HAVE_GETOPT_LONG || HAVE_GETOPT int c; setlocale (LC_ALL, ""); # if HAVE_GETOPT_LONG while ((c = getopt_long (argc, argv, "cdf:Vh", longopts, NULL)) != -1) # else while ((c = getopt (argc, argv, "cdf:Vh")) != -1) # endif { switch (c) { case 'c': do_config = 1; break; case 'd': do_default = 1; break; case 'f': format = (FcChar8 *)strdup (optarg); break; case 'V': fprintf (stderr, "fontconfig version %d.%d.%d\n", FC_MAJOR, FC_MINOR, FC_REVISION); exit (0); case 'h': usage (argv[0], 0); default: usage (argv[0], 1); } } i = optind; #else i = 1; #endif if (argv[i]) { pat = FcNameParse ((FcChar8 *)argv[i]); if (!pat) { fprintf (stderr, _("Unable to parse the pattern\n")); return 1; } while (argv[++i]) { if (!os) os = FcObjectSetCreate(); FcObjectSetAdd (os, argv[i]); } } else pat = FcPatternCreate(); if (!pat) return 1; if (do_config) FcConfigSubstitute (0, pat, FcMatchPattern); if (do_default) FcConfigSetDefaultSubstitute (0, pat); if (os) { FcPattern *new; new = FcPatternFilter (pat, os); FcPatternDestroy (pat); pat = new; } if (format) { FcChar8 *s; s = FcPatternFormat (pat, format); if (s) { printf ("%s", s); FcStrFree (s); } } else { FcPatternPrint (pat); } FcPatternDestroy (pat); if (os) FcObjectSetDestroy (os); FcFini(); return 0; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-pattern/fc-pattern.sgml000066400000000000000000000143631503113465200263730ustar00rootroot00000000000000 manpage.1'. You may view the manual page with: `docbook-to-man manpage.sgml | nroff -man | less'. A typical entry in a Makefile or Makefile.am is: manpage.1: manpage.sgml docbook-to-man $< > $@ The docbook-to-man binary is found in the docbook-to-man package. Please remember that if you create the nroff version in one of the debian/rules file targets (such as build), you will need to include docbook-to-man in your Build-Depends control field. --> Behdad"> Esfahbod"> Apr 20, 2010"> 1"> behdad@behdad.org"> fc-pattern"> Debian"> GNU"> GPL"> ]>
&dhemail;
&dhfirstname; &dhsurname; 2010 &dhusername; &dhdate;
&dhucpackage; &dhsection; &dhpackage; parse and show pattern &dhpackage; DESCRIPTION &dhpackage; parses pattern (empty pattern by default) and shows the parsed result. If is given, config substitution is performed on the pattern before being displayed. If is given, default substitution is performed on the pattern before being displayed. If any elements are specified, only those are printed. OPTIONS This program follows the usual &gnu; command line syntax, with long options starting with two dashes (`-'). A summary of options is included below. Perform config substitution on pattern. Perform default substitution on pattern. Format output according to the format specifier format. Show version of the program and exit. Show summary of options. Parses and displays pattern (uses empty pattern by default). If set, the element property is displayed for parsed pattern. SEE ALSO FcNameParse(3) FcConfigSubstitute(3) FcDefaultSubstitute(3) FcPatternPrint(3) FcPatternFormat(3) fc-cat(1) fc-cache(1) fc-list(1) fc-match(1) fc-query(1) fc-scan(1) The fontconfig user's guide AUTHOR This manual page was updated by &dhusername; &dhemail;.
fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-pattern/meson.build000066400000000000000000000004511503113465200255770ustar00rootroot00000000000000fcpattern = executable('fc-pattern', ['fc-pattern.c', fcstdint_h, alias_headers, ft_alias_headers], include_directories: [incbase, incsrc], dependencies: [libintl_dep], link_with: [libfontconfig], c_args: c_args, install: true, install_tag: 'tools') tools_man_pages += ['fc-pattern'] fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-query/000077500000000000000000000000001503113465200231255ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-query/Makefile.am000066400000000000000000000033321503113465200251620ustar00rootroot00000000000000# # fontconfig/fc-query/Makefile.am # # Copyright © 2003 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. bin_PROGRAMS=fc-query DOC2MAN = docbook2man FC_QUERY_SRC=${top_srcdir}/fc-query SGML = ${FC_QUERY_SRC}/fc-query.sgml AM_CPPFLAGS=-I${top_srcdir} $(FREETYPE_CFLAGS) $(WARN_CFLAGS) BUILT_MANS=fc-query.1 if ENABLE_DOCS man_MANS=${BUILT_MANS} endif EXTRA_DIST=fc-query.sgml $(BUILT_MANS) CLEANFILES = fc_query_LDADD = ${top_builddir}/src/libfontconfig.la if USEDOCBOOK ${man_MANS}: ${SGML} $(AM_V_GEN) $(RM) $@; \ $(DOC2MAN) ${SGML}; \ $(RM) manpage.* all-local: $(man_MANS) CLEANFILES += ${man_MANS} else all-local: endif -include $(top_srcdir)/git.mk fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-query/fc-query.c000066400000000000000000000130361503113465200250270ustar00rootroot00000000000000/* * fontconfig/fc-query/fc-query.c * * Copyright © 2003 Keith Packard * Copyright © 2008 Red Hat, Inc. * Red Hat Author(s): Behdad Esfahbod * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_CONFIG_H # include #else # ifdef linux # define HAVE_GETOPT_LONG 1 # endif # define HAVE_GETOPT 1 #endif #include #include #if ENABLE_FONTATIONS # include #endif #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #ifdef ENABLE_NLS # include # define _(x) (dgettext (GETTEXT_PACKAGE, x)) #else # define dgettext(d, s) (s) # define _(x) (x) #endif #ifndef HAVE_GETOPT # define HAVE_GETOPT 0 #endif #ifndef HAVE_GETOPT_LONG # define HAVE_GETOPT_LONG 0 #endif #if HAVE_GETOPT_LONG # undef _GNU_SOURCE # define _GNU_SOURCE # include static const struct option longopts[] = { { "index", 1, 0, 'i' }, { "brief", 0, 0, 'b' }, { "format", 1, 0, 'f' }, { "version", 0, 0, 'V' }, { "help", 0, 0, 'h' }, { NULL, 0, 0, 0 }, }; #else # if HAVE_GETOPT extern char *optarg; extern int optind, opterr, optopt; # endif #endif static void usage (char *program, int error) { FILE *file = error ? stderr : stdout; #if HAVE_GETOPT_LONG fprintf (file, _("usage: %s [-bVh] [-i index] [-f FORMAT] [--index index] [--brief] [--format FORMAT] [--version] [--help] font-file...\n"), program); #else fprintf (file, _("usage: %s [-bVh] [-i index] [-f FORMAT] font-file...\n"), program); #endif fprintf (file, _("Query font files and print resulting pattern(s)\n")); fprintf (file, "\n"); #if HAVE_GETOPT_LONG fprintf (file, _(" -i, --index INDEX display the INDEX face of each font file only\n")); fprintf (file, _(" -b, --brief display font pattern briefly\n")); fprintf (file, _(" -f, --format=FORMAT use the given output format\n")); fprintf (file, _(" -V, --version display font config version and exit\n")); fprintf (file, _(" -h, --help display this help and exit\n")); #else fprintf (file, _(" -i INDEX (index) display the INDEX face of each font file only\n")); fprintf (file, _(" -b (brief) display font pattern briefly\n")); fprintf (file, _(" -f FORMAT (format) use the given output format\n")); fprintf (file, _(" -V (version) display font config version and exit\n")); fprintf (file, _(" -h (help) display this help and exit\n")); #endif exit (error); } int main (int argc, char **argv) { unsigned int id = (unsigned int)-1; int brief = 0; FcFontSet *fs; FcChar8 *format = NULL; int err = 0; int i; #if HAVE_GETOPT_LONG || HAVE_GETOPT int c; setlocale (LC_ALL, ""); # if HAVE_GETOPT_LONG while ((c = getopt_long (argc, argv, "i:bf:Vh", longopts, NULL)) != -1) # else while ((c = getopt (argc, argv, "i:bf:Vh")) != -1) # endif { switch (c) { case 'i': id = (unsigned int)strtol (optarg, NULL, 0); /* strtol() To handle -1. */ break; case 'b': brief = 1; break; case 'f': format = (FcChar8 *)strdup (optarg); break; case 'V': fprintf (stderr, "fontconfig version %d.%d.%d\n", FC_MAJOR, FC_MINOR, FC_REVISION); exit (0); case 'h': usage (argv[0], 0); default: usage (argv[0], 1); } } i = optind; #else i = 1; #endif if (i == argc) usage (argv[0], 1); fs = FcFontSetCreate(); unsigned int (*query_function) (const FcChar8 *, unsigned int, FcBlanks *, int *, FcFontSet *) = FcFreeTypeQueryAll; #if ENABLE_FONTATIONS if (getenv ("FC_FONTATIONS") != NULL) { query_function = FcFontationsQueryAll; } #endif for (; i < argc; i++) { if (!query_function ((FcChar8 *)argv[i], id, NULL, NULL, fs)) { fprintf (stderr, _("Can't query face %u of font file %s\n"), id, argv[i]); err = 1; } } for (i = 0; i < fs->nfont; i++) { FcPattern *pat = fs->fonts[i]; if (brief) { FcPatternDel (pat, FC_CHARSET); FcPatternDel (pat, FC_LANG); } if (format) { FcChar8 *s; s = FcPatternFormat (pat, format); if (s) { printf ("%s", s); FcStrFree (s); } } else { FcPatternPrint (pat); } } FcFontSetDestroy (fs); if (format) free (format); FcFini(); return err; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-query/fc-query.sgml000066400000000000000000000141521503113465200255470ustar00rootroot00000000000000 manpage.1'. You may view the manual page with: `docbook-to-man manpage.sgml | nroff -man | less'. A typical entry in a Makefile or Makefile.am is: manpage.1: manpage.sgml docbook-to-man $< > $@ The docbook-to-man binary is found in the docbook-to-man package. Please remember that if you create the nroff version in one of the debian/rules file targets (such as build), you will need to include docbook-to-man in your Build-Depends control field. --> Behdad"> Esfahbod"> Aug 13, 2008"> 1"> behdad@behdad.org"> fc-query"> GNU"> GPL"> ]>
&dhemail;
&dhfirstname; &dhsurname; 2008 &dhusername; &dhdate;
&dhucpackage; &dhsection; &dhpackage; query font files &dhpackage; DESCRIPTION &dhpackage; queries font-file(s) using the normal fontconfig rules and prints out font pattern for each face found. If is given, only one face of each file is queried, otherwise all faces are queried. OPTIONS This program follows the usual &gnu; command line syntax, with long options starting with two dashes (`-'). A summary of options is included below. Ignore blanks to compute languages Only query face indexed index of each file. Format output according to the format specifier format. Show version of the program and exit. Show summary of options. Query font-file for font faces. RETURN CODES fc-query returns error code 0 for successful parsing, or 1 if any errors occurred or if at least one font face could not be opened. SEE ALSO fc-scan(1) FcFreeTypeQuery(3) FcPatternFormat(3) fc-cat(1) fc-cache(1) fc-list(1) fc-match(1) fc-pattern(1) The fontconfig user's guide AUTHOR This manual page was updated by &dhusername; &dhemail;.
fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-query/meson.build000066400000000000000000000004571503113465200252750ustar00rootroot00000000000000fcquery = executable('fc-query', ['fc-query.c', fcstdint_h, alias_headers, ft_alias_headers], include_directories: [incbase, incsrc], dependencies: [freetype_dep, libintl_dep], link_with: [libfontconfig], c_args: c_args, install: true, install_tag: 'tools') tools_man_pages += ['fc-query'] fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-scan/000077500000000000000000000000001503113465200227045ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-scan/Makefile.am000066400000000000000000000033211503113465200247370ustar00rootroot00000000000000# # fontconfig/fc-scan/Makefile.am # # Copyright © 2003 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. bin_PROGRAMS=fc-scan DOC2MAN = docbook2man FC_SCAN_SRC=${top_srcdir}/fc-scan SGML = ${FC_SCAN_SRC}/fc-scan.sgml AM_CPPFLAGS=-I${top_srcdir} $(FREETYPE_CFLAGS) $(WARN_CFLAGS) BUILT_MANS=fc-scan.1 if ENABLE_DOCS man_MANS=${BUILT_MANS} endif EXTRA_DIST=fc-scan.sgml $(BUILT_MANS) CLEANFILES = fc_scan_LDADD = ${top_builddir}/src/libfontconfig.la if USEDOCBOOK ${man_MANS}: ${SGML} $(AM_V_GEN) $(RM) $@; \ $(DOC2MAN) ${SGML}; \ $(RM) manpage.* all-local: $(man_MANS) CLEANFILES += ${man_MANS} else all-local: endif -include $(top_srcdir)/git.mk fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-scan/fc-scan.c000066400000000000000000000130441503113465200243640ustar00rootroot00000000000000/* * fontconfig/fc-scan/fc-scan.c * * Copyright © 2003 Keith Packard * Copyright © 2008 Red Hat, Inc. * Red Hat Author(s): Behdad Esfahbod * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_CONFIG_H # include #else # ifdef linux # define HAVE_GETOPT_LONG 1 # endif # define HAVE_GETOPT 1 #endif #include #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #ifdef ENABLE_NLS # include # define _(x) (dgettext (GETTEXT_PACKAGE, x)) #else # define dgettext(d, s) (s) # define _(x) (x) #endif #ifndef HAVE_GETOPT # define HAVE_GETOPT 0 #endif #ifndef HAVE_GETOPT_LONG # define HAVE_GETOPT_LONG 0 #endif #if HAVE_GETOPT_LONG # undef _GNU_SOURCE # define _GNU_SOURCE # include static const struct option longopts[] = { { "brief", 0, 0, 'b' }, { "format", 1, 0, 'f' }, { "sysroot", required_argument, 0, 'y' }, { "version", 0, 0, 'V' }, { "help", 0, 0, 'h' }, { NULL, 0, 0, 0 }, }; #else # if HAVE_GETOPT extern char *optarg; extern int optind, opterr, optopt; # endif #endif static void usage (char *program, int error) { FILE *file = error ? stderr : stdout; #if HAVE_GETOPT_LONG fprintf (file, _("usage: %s [-bcVh] [-f FORMAT] [-y SYSROOT] [--brief] [--format FORMAT] [--version] [--help] font-file...\n"), program); #else fprintf (file, _("usage: %s [-bcVh] [-f FORMAT] [-y SYSROOT] font-file...\n"), program); #endif fprintf (file, _("Scan font files and directories, and print resulting pattern(s)\n")); fprintf (file, "\n"); #if HAVE_GETOPT_LONG fprintf (file, _(" -b, --brief display font pattern briefly\n")); fprintf (file, _(" -f, --format=FORMAT use the given output format\n")); fprintf (file, _(" -y, --sysroot=SYSROOT prepend SYSROOT to all paths for scanning\n")); fprintf (file, _(" -V, --version display font config version and exit\n")); fprintf (file, _(" -h, --help display this help and exit\n")); #else fprintf (file, _(" -b (brief) display font pattern briefly\n")); fprintf (file, _(" -f FORMAT (format) use the given output format\n")); fprintf (file, _(" -y SYSROOT (sysroot) prepend SYSROOT to all paths for scanning\n")); fprintf (file, _(" -V (version) display font config version and exit\n")); fprintf (file, _(" -h (help) display this help and exit\n")); #endif exit (error); } int main (int argc, char **argv) { int brief = 0; FcChar8 *format = NULL, *sysroot = NULL; int i; FcFontSet *fs; #if HAVE_GETOPT_LONG || HAVE_GETOPT int c; setlocale (LC_ALL, ""); # if HAVE_GETOPT_LONG while ((c = getopt_long (argc, argv, "bf:y:Vh", longopts, NULL)) != -1) # else while ((c = getopt (argc, argv, "bf:y:Vh")) != -1) # endif { switch (c) { case 'b': brief = 1; break; case 'f': format = (FcChar8 *)strdup (optarg); break; case 'y': sysroot = FcStrCopy ((const FcChar8 *)optarg); break; case 'V': fprintf (stderr, "fontconfig version %d.%d.%d\n", FC_MAJOR, FC_MINOR, FC_REVISION); exit (0); case 'h': usage (argv[0], 0); default: usage (argv[0], 1); } } i = optind; #else i = 1; #endif if (i == argc) usage (argv[0], 1); if (sysroot) { FcConfigSetSysRoot (NULL, sysroot); FcStrFree (sysroot); } fs = FcFontSetCreate(); for (; i < argc; i++) { const FcChar8 *file = (FcChar8 *)argv[i]; if (!FcFileIsDir (file)) FcFileScan (fs, NULL, NULL, NULL, file, FcTrue); else { FcStrSet *dirs = FcStrSetCreate(); FcStrList *strlist = FcStrListCreate (dirs); do { FcDirScan (fs, dirs, NULL, NULL, file, FcTrue); } while ((file = FcStrListNext (strlist))); FcStrListDone (strlist); FcStrSetDestroy (dirs); } } for (i = 0; i < fs->nfont; i++) { FcPattern *pat = fs->fonts[i]; if (brief) { FcPatternDel (pat, FC_CHARSET); FcPatternDel (pat, FC_LANG); } if (format) { FcChar8 *s; s = FcPatternFormat (pat, format); if (s) { printf ("%s", s); FcStrFree (s); } } else { FcPatternPrint (pat); } } FcFontSetDestroy (fs); if (format) free (format); FcFini(); return i > 0 ? 0 : 1; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-scan/fc-scan.sgml000066400000000000000000000121131503113465200251000ustar00rootroot00000000000000 manpage.1'. You may view the manual page with: `docbook-to-man manpage.sgml | nroff -man | less'. A typical entry in a Makefile or Makefile.am is: manpage.1: manpage.sgml docbook-to-man $< > $@ The docbook-to-man binary is found in the docbook-to-man package. Please remember that if you create the nroff version in one of the debian/rules file targets (such as build), you will need to include docbook-to-man in your Build-Depends control field. --> Behdad"> Esfahbod"> Jan 15, 2009"> 1"> behdad@behdad.org"> fc-scan"> GNU"> GPL"> ]>
&dhemail;
&dhfirstname; &dhsurname; 2008 &dhusername; &dhdate;
&dhucpackage; &dhsection; &dhpackage; scan font files or directories &dhpackage; DESCRIPTION &dhpackage; scans file(s) recursively and prints out font pattern for each face found. OPTIONS This program follows the usual &gnu; command line syntax, with long options starting with two dashes (`-'). A summary of options is included below. Format output according to the format specifier format. Show version of the program and exit. Show summary of options. Scan file recursively for font faces. RETURN CODES fc-scan returns error code 0 if at least one font was found or 1 otherwise. SEE ALSO fc-query(1) FcFileScan(3) FcDirScan(3) FcPatternFormat(3) fc-cat(1) fc-cache(1) fc-list(1) fc-match(1) fc-pattern(1) The fontconfig user's guide AUTHOR This manual page was updated by &dhusername; &dhemail;.
fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-scan/meson.build000066400000000000000000000004531503113465200250500ustar00rootroot00000000000000fcscan = executable('fc-scan', ['fc-scan.c', fcstdint_h, alias_headers, ft_alias_headers], include_directories: [incbase, incsrc], dependencies: [freetype_dep, libintl_dep], link_with: [libfontconfig], c_args: c_args, install: true, install_tag: 'tools') tools_man_pages += ['fc-scan'] fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-validate/000077500000000000000000000000001503113465200235515ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-validate/Makefile.am000066400000000000000000000034061503113465200256100ustar00rootroot00000000000000# # fontconfig/fc-validate/Makefile.am # # Copyright © 2003 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. bin_PROGRAMS=fc-validate DOC2MAN = docbook2man FC_VALIDATE_SRC=${top_srcdir}/fc-validate SGML = ${FC_VALIDATE_SRC}/fc-validate.sgml AM_CPPFLAGS=-I${top_srcdir} $(FREETYPE_CFLAGS) $(WARN_CFLAGS) BUILT_MANS=fc-validate.1 if ENABLE_DOCS man_MANS=${BUILT_MANS} endif EXTRA_DIST=fc-validate.sgml $(BUILT_MANS) CLEANFILES = fc_validate_LDADD = ${top_builddir}/src/libfontconfig.la $(FREETYPE_LIBS) if USEDOCBOOK ${man_MANS}: ${SGML} $(AM_V_GEN) $(RM) $@; \ $(DOC2MAN) ${SGML}; \ $(RM) manpage.* all-local: $(man_MANS) CLEANFILES += $(man_MANS) else all-local: endif -include $(top_srcdir)/git.mk fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-validate/fc-validate.c000066400000000000000000000146111503113465200260770ustar00rootroot00000000000000/* * fontconfig/fc-validate/fc-validate.c * * Copyright © 2003 Keith Packard * Copyright © 2012 Red Hat, Inc. * Red Hat Author(s): Akira TAGOH * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_CONFIG_H # include #else # ifdef linux # define HAVE_GETOPT_LONG 1 # endif # define HAVE_GETOPT 1 #endif #include #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #ifdef ENABLE_NLS # include # define _(x) (dgettext (GETTEXT_PACKAGE, x)) #else # define dgettext(d, s) (s) # define _(x) (x) #endif #ifndef HAVE_GETOPT # define HAVE_GETOPT 0 #endif #ifndef HAVE_GETOPT_LONG # define HAVE_GETOPT_LONG 0 #endif #if HAVE_GETOPT_LONG # undef _GNU_SOURCE # define _GNU_SOURCE # include static const struct option longopts[] = { { "index", 1, 0, 'i' }, { "lang", 1, 0, 'l' }, { "verbose", 0, 0, 'v' }, { "version", 0, 0, 'V' }, { "help", 0, 0, 'h' }, { NULL, 0, 0, 0 }, }; #else # if HAVE_GETOPT extern char *optarg; extern int optind, opterr, optopt; # endif #endif static void usage (char *program, int error) { FILE *file = error ? stderr : stdout; #if HAVE_GETOPT_LONG fprintf (file, _("usage: %s [-Vhv] [-i index] [-l LANG] [--index index] [--lang LANG] [--verbose] [--version] [--help] font-file...\n"), program); #else fprintf (file, _("usage: %s [-Vhv] [-i index] [-l LANG] font-file...\n"), program); #endif fprintf (file, _("Validate font files and print result\n")); fprintf (file, "\n"); #if HAVE_GETOPT_LONG fprintf (file, _(" -i, --index INDEX display the INDEX face of each font file only\n")); fprintf (file, _(" -l, --lang=LANG set LANG instead of current locale\n")); fprintf (file, _(" -v, --verbose show more detailed information\n")); fprintf (file, _(" -V, --version display font config version and exit\n")); fprintf (file, _(" -h, --help display this help and exit\n")); #else fprintf (file, _(" -i INDEX (index) display the INDEX face of each font file only\n")); fprintf (file, _(" -l LANG (lang) set LANG instead of current locale\n")); fprintf (file, _(" -v (verbose) show more detailed information\n")); fprintf (file, _(" -V (version) display font config version and exit\n")); fprintf (file, _(" -h (help) display this help and exit\n")); #endif exit (error); } int main (int argc, char **argv) { int index_set = 0; int set_index = 0; FcChar8 *lang = NULL; const FcCharSet *fcs_lang = NULL; int err = 0; int i; FT_Library ftlib; FcBool verbose = FcFalse; #if HAVE_GETOPT_LONG || HAVE_GETOPT int c; setlocale (LC_ALL, ""); # if HAVE_GETOPT_LONG while ((c = getopt_long (argc, argv, "i:l:mVhv", longopts, NULL)) != -1) # else while ((c = getopt (argc, argv, "i:l:mVhv")) != -1) # endif { switch (c) { case 'i': index_set = 1; set_index = atoi (optarg); break; case 'l': lang = (FcChar8 *)FcLangNormalize ((const FcChar8 *)optarg); break; case 'v': verbose = FcTrue; break; case 'V': fprintf (stderr, "fontconfig version %d.%d.%d\n", FC_MAJOR, FC_MINOR, FC_REVISION); exit (0); case 'h': usage (argv[0], 0); default: usage (argv[0], 1); } } i = optind; #else i = 1; verbose = FcTrue; #endif if (i == argc) usage (argv[0], 1); if (!lang) lang = FcLangNormalize ((const FcChar8 *)setlocale (LC_CTYPE, NULL)); if (lang) fcs_lang = FcLangGetCharSet (lang); if (FT_Init_FreeType (&ftlib)) { fprintf (stderr, _("Can't initialize FreeType library\n")); return 1; } for (; i < argc; i++) { int index; index = set_index; do { FT_Face face; FcCharSet *fcs, *fcs_sub; if (FT_New_Face (ftlib, argv[i], index, &face)) { if (!index_set && index > 0) break; fprintf (stderr, _("Unable to open %s\n"), argv[i]); err = 1; } else { FcChar32 count; fcs = FcFreeTypeCharSet (face, NULL); fcs_sub = FcCharSetSubtract (fcs_lang, fcs); count = FcCharSetCount (fcs_sub); if (count > 0) { FcChar32 ucs4, pos, map[FC_CHARSET_MAP_SIZE]; err = 1; printf (_("%s:%d Missing %d glyph(s) to satisfy the coverage for %s language\n"), argv[i], index, count, lang); if (verbose) { for (ucs4 = FcCharSetFirstPage (fcs_sub, map, &pos); ucs4 != FC_CHARSET_DONE; ucs4 = FcCharSetNextPage (fcs_sub, map, &pos)) { int j; for (j = 0; j < FC_CHARSET_MAP_SIZE; j++) { FcChar32 bits = map[j]; FcChar32 base = ucs4 + j * 32; int b = 0; while (bits) { if (bits & 1) printf (" 0x%04x\n", base + b); bits >>= 1; b++; } } } } } else { printf (_("%s:%d Satisfy the coverage for %s language\n"), argv[i], index, lang); } FcCharSetDestroy (fcs); FcCharSetDestroy (fcs_sub); FT_Done_Face (face); } index++; } while (index_set == 0); } FT_Done_FreeType (ftlib); if (lang) FcStrFree (lang); FcFini(); return err; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-validate/fc-validate.sgml000066400000000000000000000151651503113465200266240ustar00rootroot00000000000000 Akira"> TAGOH"> Sep 10, 2012"> 1"> akira@tagoh.org"> fc-validate"> GNU"> GPL"> ]>
&dhemail;
&dhfirstname; &dhsurname; 2012 &dhusername; &dhdate;
&dhucpackage; &dhsection; &dhpackage; validate font files &dhpackage; DESCRIPTION &dhpackage; validates font-file(s) if each fonts satisfies the language coverage according to the orthography files in fontconfig. If is given, only one face of each file is validated, otherwise all faces are validated. OPTIONS This program follows the usual &gnu; command line syntax, with long options starting with two dashes (`-'). A summary of options is included below. Only query face indexed index of each file. Set lang as a language instead of current locale. this is used for . Show more detailed information. Show version of the program and exit. Show summary of options. Query font-file for font faces. RETURN CODES fc-validate returns error code 0 for successful parsing, or 1 if any errors occurred or if at least one font face could not be opened. AUTHOR This manual page was updated by &dhusername; &dhemail;.
fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fc-validate/meson.build000066400000000000000000000004731503113465200257170ustar00rootroot00000000000000fcvalidate = executable('fc-validate', ['fc-validate.c', fcstdint_h, alias_headers, ft_alias_headers], include_directories: [incbase, incsrc], dependencies: [freetype_dep, libintl_dep], link_with: [libfontconfig], c_args: c_args, install: true, install_tag: 'tools') tools_man_pages += ['fc-validate'] fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fontconfig-zip.in000077500000000000000000000011321503113465200246560ustar00rootroot00000000000000#!/bin/sh # Build distribution zipfiles for fontconfig on Win32. (This script # obviously needs to be run in Cygwin or similar.) Separate runtime # and developer zipfiles. ZIP=/tmp/fontconfig-@VERSION@.zip DEVZIP=/tmp/fontconfig-dev-@VERSION@.zip cd @prefix@ rm -f $ZIP zip $ZIP -@ < _FCFUNCPROTOBEGIN FcPublic unsigned int FcFontationsQueryAll (const FcChar8 *file, unsigned int id, FcBlanks *blanks, int *count, FcFontSet *set); _FCFUNCPROTOEND #endiffontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fontconfig/fcfreetype.h000066400000000000000000000037161503113465200260420ustar00rootroot00000000000000/* * fontconfig/fontconfig/fcfreetype.h * * Copyright © 2001 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifndef _FCFREETYPE_H_ #define _FCFREETYPE_H_ #include #include FT_FREETYPE_H #ifndef FcPublic # define FcPublic #endif _FCFUNCPROTOBEGIN FcPublic FT_UInt FcFreeTypeCharIndex (FT_Face face, FcChar32 ucs4); FcPublic FcCharSet * FcFreeTypeCharSetAndSpacing (FT_Face face, FcBlanks *blanks, int *spacing); FcPublic FcCharSet * FcFreeTypeCharSet (FT_Face face, FcBlanks *blanks); FcPublic FcResult FcPatternGetFTFace (const FcPattern *p, const char *object, int n, FT_Face *f); FcPublic FcBool FcPatternAddFTFace (FcPattern *p, const char *object, const FT_Face f); FcPublic FcPattern * FcFreeTypeQueryFace (const FT_Face face, const FcChar8 *file, unsigned int id, FcBlanks *blanks); _FCFUNCPROTOEND #endif fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fontconfig/fcprivate.h000066400000000000000000000137371503113465200256750ustar00rootroot00000000000000/* * fontconfig/fontconfig/fcprivate.h * * Copyright © 2001 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifndef _FCPRIVATE_H_ #define _FCPRIVATE_H_ /* * I tried this with functions that took va_list* arguments * but portability concerns made me change these functions * into macros (sigh). */ #define FcPatternVapBuild(result, orig, va) \ { \ FcPattern *__p__ = (orig); \ const char *__o__; \ FcValue __v__; \ \ if (!__p__) { \ __p__ = FcPatternCreate(); \ if (!__p__) \ goto _FcPatternVapBuild_bail0; \ } \ for (;;) { \ __o__ = va_arg (va, const char *); \ if (!__o__) \ break; \ __v__.type = va_arg (va, int); \ switch (__v__.type) { \ case FcTypeUnknown: \ case FcTypeVoid: \ goto _FcPatternVapBuild_bail1; \ case FcTypeInteger: \ __v__.u.i = va_arg (va, int); \ break; \ case FcTypeDouble: \ __v__.u.d = va_arg (va, double); \ break; \ case FcTypeString: \ __v__.u.s = va_arg (va, const FcChar8 *); \ break; \ case FcTypeBool: \ __v__.u.b = va_arg (va, FcBool); \ break; \ case FcTypeMatrix: \ __v__.u.m = va_arg (va, const FcMatrix *); \ break; \ case FcTypeCharSet: \ __v__.u.c = va_arg (va, const FcCharSet *); \ break; \ case FcTypeFTFace: \ __v__.u.f = va_arg (va, FT_Face); \ break; \ case FcTypeLangSet: \ __v__.u.l = va_arg (va, const FcLangSet *); \ break; \ case FcTypeRange: \ __v__.u.r = va_arg (va, const FcRange *); \ break; \ } \ if (!FcPatternAdd (__p__, __o__, __v__, FcTrue)) \ goto _FcPatternVapBuild_bail1; \ } \ result = __p__; \ goto _FcPatternVapBuild_return; \ \ _FcPatternVapBuild_bail1: \ if (!orig) \ FcPatternDestroy (__p__); \ _FcPatternVapBuild_bail0: \ result = (void *)0; \ \ _FcPatternVapBuild_return:; \ } #define FcObjectSetVapBuild(__ret__, __first__, __va__) \ { \ FcObjectSet *__os__; \ const char *__ob__; \ \ __ret__ = 0; \ __os__ = FcObjectSetCreate(); \ if (!__os__) \ goto _FcObjectSetVapBuild_bail0; \ __ob__ = __first__; \ while (__ob__) { \ if (!FcObjectSetAdd (__os__, __ob__)) \ goto _FcObjectSetVapBuild_bail1; \ __ob__ = va_arg (__va__, const char *); \ } \ __ret__ = __os__; \ \ _FcObjectSetVapBuild_bail1: \ if (!__ret__ && __os__) \ FcObjectSetDestroy (__os__); \ _FcObjectSetVapBuild_bail0:; \ } #ifndef FC_ATTRIBUTE_VISIBILITY_HIDDEN # define FC_ATTRIBUTE_VISIBILITY_HIDDEN __attribute ((visibility ("hidden"))) #endif #ifndef FC_ATTRIBUTE_VISIBILITY_EXPORT # define FC_ATTRIBUTE_VISIBILITY_EXPORT __attribute ((visibility ("default"))) #endif #endif /* _FCPRIVATE_H_ */ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fontconfig/fontconfig.h.in000066400000000000000000000766131503113465200264550ustar00rootroot00000000000000/* * fontconfig/fontconfig/fontconfig.h * * Copyright © 2001 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifndef _FONTCONFIG_H_ #define _FONTCONFIG_H_ #include #include #include #include #if defined(__GNUC__) && (__GNUC__ >= 4) # define FC_ATTRIBUTE_SENTINEL(x) __attribute__ ((__sentinel__ (0))) # define FC_ATTRIBUTE_MAY_ALIAS __attribute__ ((may_alias)) #else # define FC_ATTRIBUTE_SENTINEL(x) # define FC_ATTRIBUTE_MAY_ALIAS #endif #ifndef FcPublic # define FcPublic #endif typedef unsigned char FcChar8; typedef unsigned short FcChar16; typedef unsigned int FcChar32; typedef int FcBool; /* * Current Fontconfig version number. This same number * must appear in the fontconfig configure.in file. Yes, * it'a a pain to synchronize version numbers like this. */ #define FC_MAJOR 2 #define FC_MINOR 17 #define FC_REVISION 1 #define FC_VERSION ((FC_MAJOR * 10000) + (FC_MINOR * 100) + (FC_REVISION)) /* * Current font cache file format version * This is appended to the cache files so that multiple * versions of the library will peacefully coexist * * Change this value whenever the disk format for the cache file * changes in any non-compatible way. Try to avoid such changes as * it means multiple copies of the font information. */ #define FC_CACHE_VERSION_NUMBER @CACHE_VERSION@ #define _FC_STRINGIFY_(s) #s #define _FC_STRINGIFY(s) _FC_STRINGIFY_ (s) #define FC_CACHE_VERSION _FC_STRINGIFY (FC_CACHE_VERSION_NUMBER) #define FcFalse 0 #define FcTrue 1 #define FcDontCare 2 #define FC_FAMILY "family" /* String */ #define FC_STYLE "style" /* String */ #define FC_SLANT "slant" /* Int */ #define FC_WEIGHT "weight" /* Int */ #define FC_SIZE "size" /* Range (double) */ #define FC_ASPECT "aspect" /* Double */ #define FC_PIXEL_SIZE "pixelsize" /* Double */ #define FC_SPACING "spacing" /* Int */ #define FC_FOUNDRY "foundry" /* String */ #define FC_ANTIALIAS "antialias" /* Bool (depends) */ #define FC_HINTING "hinting" /* Bool (true) */ #define FC_HINT_STYLE "hintstyle" /* Int */ #define FC_VERTICAL_LAYOUT "verticallayout" /* Bool (false) */ #define FC_AUTOHINT "autohint" /* Bool (false) */ /* FC_GLOBAL_ADVANCE is deprecated. this is simply ignored on freetype 2.4.5 or later */ #define FC_GLOBAL_ADVANCE "globaladvance" /* Bool (true) */ #define FC_WIDTH "width" /* Int */ #define FC_FILE "file" /* String */ #define FC_INDEX "index" /* Int */ #define FC_FT_FACE "ftface" /* FT_Face */ #define FC_RASTERIZER "rasterizer" /* String (deprecated) */ #define FC_OUTLINE "outline" /* Bool */ #define FC_SCALABLE "scalable" /* Bool */ #define FC_COLOR "color" /* Bool */ #define FC_VARIABLE "variable" /* Bool */ #define FC_SCALE "scale" /* double (deprecated) */ #define FC_SYMBOL "symbol" /* Bool */ #define FC_DPI "dpi" /* double */ #define FC_RGBA "rgba" /* Int */ #define FC_MINSPACE "minspace" /* Bool use minimum line spacing */ #define FC_SOURCE "source" /* String (deprecated) */ #define FC_CHARSET "charset" /* CharSet */ #define FC_LANG "lang" /* LangSet Set of RFC 3066 langs */ #define FC_FONTVERSION "fontversion" /* Int from 'head' table */ #define FC_FULLNAME "fullname" /* String */ #define FC_FAMILYLANG "familylang" /* String RFC 3066 langs */ #define FC_STYLELANG "stylelang" /* String RFC 3066 langs */ #define FC_FULLNAMELANG "fullnamelang" /* String RFC 3066 langs */ #define FC_CAPABILITY "capability" /* String */ #define FC_FONTFORMAT "fontformat" /* String */ #define FC_EMBOLDEN "embolden" /* Bool - true if emboldening needed*/ #define FC_EMBEDDED_BITMAP "embeddedbitmap" /* Bool - true to enable embedded bitmaps */ #define FC_DECORATIVE "decorative" /* Bool - true if style is a decorative variant */ #define FC_LCD_FILTER "lcdfilter" /* Int */ #define FC_FONT_FEATURES "fontfeatures" /* String */ #define FC_FONT_VARIATIONS "fontvariations" /* String */ #define FC_NAMELANG "namelang" /* String RFC 3866 langs */ #define FC_PRGNAME "prgname" /* String */ #define FC_HASH "hash" /* String (deprecated) */ #define FC_POSTSCRIPT_NAME "postscriptname" /* String */ #define FC_FONT_HAS_HINT "fonthashint" /* Bool - true if font has hinting */ #define FC_ORDER "order" /* Integer */ #define FC_DESKTOP_NAME "desktop" /* String */ #define FC_NAMED_INSTANCE "namedinstance" /* Bool - true if font is named instance */ #define FC_FONT_WRAPPER "fontwrapper" /* String */ #define FC_CACHE_SUFFIX ".cache-" FC_CACHE_VERSION #define FC_DIR_CACHE_FILE "fonts.cache-" FC_CACHE_VERSION #define FC_USER_CACHE_FILE ".fonts.cache-" FC_CACHE_VERSION /* Adjust outline rasterizer */ #define FC_CHARWIDTH "charwidth" /* Int */ #define FC_CHAR_WIDTH FC_CHARWIDTH #define FC_CHAR_HEIGHT "charheight" /* Int */ #define FC_MATRIX "matrix" /* FcMatrix */ #define FC_WEIGHT_THIN 0 #define FC_WEIGHT_EXTRALIGHT 40 #define FC_WEIGHT_ULTRALIGHT FC_WEIGHT_EXTRALIGHT #define FC_WEIGHT_LIGHT 50 #define FC_WEIGHT_DEMILIGHT 55 #define FC_WEIGHT_SEMILIGHT FC_WEIGHT_DEMILIGHT #define FC_WEIGHT_BOOK 75 #define FC_WEIGHT_REGULAR 80 #define FC_WEIGHT_NORMAL FC_WEIGHT_REGULAR #define FC_WEIGHT_MEDIUM 100 #define FC_WEIGHT_DEMIBOLD 180 #define FC_WEIGHT_SEMIBOLD FC_WEIGHT_DEMIBOLD #define FC_WEIGHT_BOLD 200 #define FC_WEIGHT_EXTRABOLD 205 #define FC_WEIGHT_ULTRABOLD FC_WEIGHT_EXTRABOLD #define FC_WEIGHT_BLACK 210 #define FC_WEIGHT_HEAVY FC_WEIGHT_BLACK #define FC_WEIGHT_EXTRABLACK 215 #define FC_WEIGHT_ULTRABLACK FC_WEIGHT_EXTRABLACK #define FC_SLANT_ROMAN 0 #define FC_SLANT_ITALIC 100 #define FC_SLANT_OBLIQUE 110 #define FC_WIDTH_ULTRACONDENSED 50 #define FC_WIDTH_EXTRACONDENSED 63 #define FC_WIDTH_CONDENSED 75 #define FC_WIDTH_SEMICONDENSED 87 #define FC_WIDTH_NORMAL 100 #define FC_WIDTH_SEMIEXPANDED 113 #define FC_WIDTH_EXPANDED 125 #define FC_WIDTH_EXTRAEXPANDED 150 #define FC_WIDTH_ULTRAEXPANDED 200 #define FC_PROPORTIONAL 0 #define FC_DUAL 90 #define FC_MONO 100 #define FC_CHARCELL 110 /* sub-pixel order */ #define FC_RGBA_UNKNOWN 0 #define FC_RGBA_RGB 1 #define FC_RGBA_BGR 2 #define FC_RGBA_VRGB 3 #define FC_RGBA_VBGR 4 #define FC_RGBA_NONE 5 /* hinting style */ #define FC_HINT_NONE 0 #define FC_HINT_SLIGHT 1 #define FC_HINT_MEDIUM 2 #define FC_HINT_FULL 3 /* LCD filter */ #define FC_LCD_NONE 0 #define FC_LCD_DEFAULT 1 #define FC_LCD_LIGHT 2 #define FC_LCD_LEGACY 3 typedef enum _FcType { FcTypeUnknown = -1, FcTypeVoid, FcTypeInteger, FcTypeDouble, FcTypeString, FcTypeBool, FcTypeMatrix, FcTypeCharSet, FcTypeFTFace, FcTypeLangSet, FcTypeRange } FcType; typedef struct _FcMatrix { double xx, xy, yx, yy; } FcMatrix; #define FcMatrixInit(m) ((m)->xx = (m)->yy = 1, \ (m)->xy = (m)->yx = 0) /* * A data structure to represent the available glyphs in a font. * This is represented as a sparse boolean btree. */ typedef struct _FcCharSet FcCharSet; typedef struct _FcObjectType { char *object; FcType type; } FcObjectType; typedef struct _FcConstant { const FcChar8 *name; const char *object; int value; } FcConstant; typedef enum _FcResult { FcResultMatch, FcResultNoMatch, FcResultTypeMismatch, FcResultNoId, FcResultOutOfMemory } FcResult; typedef enum _FcValueBinding { FcValueBindingWeak, FcValueBindingStrong, FcValueBindingSame, /* to make sure sizeof (FcValueBinding) == 4 even with -fshort-enums */ FcValueBindingEnd = INT_MAX } FcValueBinding; typedef struct _FcPattern FcPattern; typedef struct FC_ATTRIBUTE_MAY_ALIAS _FcPatternIter { void *dummy1; void *dummy2; } FcPatternIter; typedef struct _FcLangSet FcLangSet; typedef struct _FcRange FcRange; typedef struct _FcValue { FcType type; union { const FcChar8 *s; int i; FcBool b; double d; const FcMatrix *m; const FcCharSet *c; void *f; const FcLangSet *l; const FcRange *r; } u; } FcValue; typedef struct _FcFontSet { int nfont; int sfont; FcPattern **fonts; } FcFontSet; typedef struct _FcObjectSet { int nobject; int sobject; const char **objects; } FcObjectSet; typedef enum _FcMatchKind { FcMatchPattern, FcMatchFont, FcMatchScan, FcMatchKindEnd, FcMatchKindBegin = FcMatchPattern } FcMatchKind; typedef enum _FcLangResult { FcLangEqual = 0, FcLangDifferentCountry = 1, FcLangDifferentTerritory = 1, FcLangDifferentLang = 2 } FcLangResult; typedef enum _FcSetName { FcSetSystem = 0, FcSetApplication = 1 } FcSetName; typedef struct _FcConfigFileInfoIter { void *dummy1; void *dummy2; void *dummy3; } FcConfigFileInfoIter; typedef struct _FcAtomic FcAtomic; #if defined(__cplusplus) || defined(c_plusplus) /* for C++ V2.0 */ # define _FCFUNCPROTOBEGIN extern "C" { /* do not leave open across includes */ # define _FCFUNCPROTOEND } #else # define _FCFUNCPROTOBEGIN # define _FCFUNCPROTOEND #endif typedef enum { FcEndianBig, FcEndianLittle } FcEndian; typedef struct _FcConfig FcConfig; typedef struct _FcGlobalCache FcFileCache; typedef struct _FcBlanks FcBlanks; typedef struct _FcStrList FcStrList; typedef struct _FcStrSet FcStrSet; typedef struct _FcCache FcCache; typedef void (*FcDestroyFunc) (void *data); typedef FcBool (*FcFilterFontSetFunc) (const FcPattern *font, void *user_data); _FCFUNCPROTOBEGIN /* fcblanks.c */ FcPublic FcBlanks * FcBlanksCreate (void); FcPublic void FcBlanksDestroy (FcBlanks *b); FcPublic FcBool FcBlanksAdd (FcBlanks *b, FcChar32 ucs4); FcPublic FcBool FcBlanksIsMember (FcBlanks *b, FcChar32 ucs4); /* fccache.c */ FcPublic const FcChar8 * FcCacheDir (const FcCache *c); FcPublic FcFontSet * FcCacheCopySet (const FcCache *c); FcPublic const FcChar8 * FcCacheSubdir (const FcCache *c, int i); FcPublic int FcCacheNumSubdir (const FcCache *c); FcPublic int FcCacheNumFont (const FcCache *c); FcPublic FcBool FcDirCacheUnlink (const FcChar8 *dir, FcConfig *config); FcPublic FcBool FcDirCacheValid (const FcChar8 *cache_file); FcPublic FcBool FcDirCacheClean (const FcChar8 *cache_dir, FcBool verbose); FcPublic void FcCacheCreateTagFile (FcConfig *config); FcPublic FcBool FcDirCacheCreateUUID (FcChar8 *dir, FcBool force, FcConfig *config); FcPublic FcBool FcDirCacheDeleteUUID (const FcChar8 *dir, FcConfig *config); /* fccfg.c */ FcPublic FcChar8 * FcConfigHome (void); FcPublic FcBool FcConfigEnableHome (FcBool enable); FcPublic FcChar8 * FcConfigGetFilename (FcConfig *config, const FcChar8 *url); FcPublic FcChar8 * FcConfigFilename (const FcChar8 *url); FcPublic FcConfig * FcConfigCreate (void); FcPublic FcConfig * FcConfigReference (FcConfig *config); FcPublic void FcConfigDestroy (FcConfig *config); FcPublic FcBool FcConfigSetCurrent (FcConfig *config); FcPublic FcConfig * FcConfigGetCurrent (void); FcPublic FcBool FcConfigUptoDate (FcConfig *config); FcPublic FcBool FcConfigBuildFonts (FcConfig *config); FcPublic FcStrList * FcConfigGetFontDirs (FcConfig *config); FcPublic FcStrList * FcConfigGetConfigDirs (FcConfig *config); FcPublic FcStrList * FcConfigGetConfigFiles (FcConfig *config); FcPublic FcChar8 * FcConfigGetCache (FcConfig *config); FcPublic FcBlanks * FcConfigGetBlanks (FcConfig *config); FcPublic FcStrList * FcConfigGetCacheDirs (FcConfig *config); FcPublic int FcConfigGetRescanInterval (FcConfig *config); FcPublic FcBool FcConfigSetRescanInterval (FcConfig *config, int rescanInterval); FcPublic FcFontSet * FcConfigGetFonts (FcConfig *config, FcSetName set); FcPublic FcBool FcConfigAcceptFont (FcConfig *config, const FcPattern *font); FcPublic FcBool FcConfigAcceptFilter (FcConfig *config, const FcPattern *font); FcPublic FcBool FcConfigAppFontAddFile (FcConfig *config, const FcChar8 *file); FcPublic FcBool FcConfigAppFontAddDir (FcConfig *config, const FcChar8 *dir); FcPublic void FcConfigAppFontClear (FcConfig *config); FcPublic void FcConfigPreferAppFont (FcConfig *config, FcBool flag); FcPublic FcBool FcConfigSubstituteWithPat (FcConfig *config, FcPattern *p, FcPattern *p_pat, FcMatchKind kind); FcPublic FcBool FcConfigSubstitute (FcConfig *config, FcPattern *p, FcMatchKind kind); FcPublic const FcChar8 * FcConfigGetSysRoot (const FcConfig *config); FcPublic void FcConfigSetSysRoot (FcConfig *config, const FcChar8 *sysroot); FcPublic FcConfig * FcConfigSetFontSetFilter (FcConfig *config, FcFilterFontSetFunc filter_func, FcDestroyFunc destroy_data_func, void *user_data); FcPublic void FcConfigFileInfoIterInit (FcConfig *config, FcConfigFileInfoIter *iter); FcPublic FcBool FcConfigFileInfoIterNext (FcConfig *config, FcConfigFileInfoIter *iter); FcPublic FcBool FcConfigFileInfoIterGet (FcConfig *config, FcConfigFileInfoIter *iter, FcChar8 **name, FcChar8 **description, FcBool *enabled); /* fccharset.c */ FcPublic FcCharSet * FcCharSetCreate (void); /* deprecated alias for FcCharSetCreate */ FcPublic FcCharSet * FcCharSetNew (void); FcPublic void FcCharSetDestroy (FcCharSet *fcs); FcPublic FcBool FcCharSetAddChar (FcCharSet *fcs, FcChar32 ucs4); FcPublic FcBool FcCharSetDelChar (FcCharSet *fcs, FcChar32 ucs4); FcPublic FcCharSet * FcCharSetCopy (FcCharSet *src); FcPublic FcBool FcCharSetEqual (const FcCharSet *a, const FcCharSet *b); FcPublic FcCharSet * FcCharSetIntersect (const FcCharSet *a, const FcCharSet *b); FcPublic FcCharSet * FcCharSetUnion (const FcCharSet *a, const FcCharSet *b); FcPublic FcCharSet * FcCharSetSubtract (const FcCharSet *a, const FcCharSet *b); FcPublic FcBool FcCharSetMerge (FcCharSet *a, const FcCharSet *b, FcBool *changed); FcPublic FcBool FcCharSetHasChar (const FcCharSet *fcs, FcChar32 ucs4); FcPublic FcChar32 FcCharSetCount (const FcCharSet *a); FcPublic FcChar32 FcCharSetIntersectCount (const FcCharSet *a, const FcCharSet *b); FcPublic FcChar32 FcCharSetSubtractCount (const FcCharSet *a, const FcCharSet *b); FcPublic FcBool FcCharSetIsSubset (const FcCharSet *a, const FcCharSet *b); #define FC_CHARSET_MAP_SIZE (256 / 32) #define FC_CHARSET_DONE ((FcChar32) - 1) FcPublic FcChar32 FcCharSetFirstPage (const FcCharSet *a, FcChar32 map[FC_CHARSET_MAP_SIZE], FcChar32 *next); FcPublic FcChar32 FcCharSetNextPage (const FcCharSet *a, FcChar32 map[FC_CHARSET_MAP_SIZE], FcChar32 *next); /* * old coverage API, rather hard to use correctly */ FcPublic FcChar32 FcCharSetCoverage (const FcCharSet *a, FcChar32 page, FcChar32 *result); /* fcdbg.c */ FcPublic void FcValuePrint (const FcValue v); FcPublic void FcPatternPrint (const FcPattern *p); FcPublic void FcFontSetPrint (const FcFontSet *s); /* fcdefault.c */ FcPublic FcStrSet * FcConfigGetDefaultLangs (FcConfig *config); FcPublic FcStrSet * FcGetDefaultLangs (void); FcPublic void FcConfigSetDefaultSubstitute (FcConfig *config, FcPattern *pattern); FcPublic void FcDefaultSubstitute (FcPattern *pattern); /* fcdir.c */ FcPublic FcBool FcFileIsDir (const FcChar8 *file); FcPublic FcBool FcFileScan (FcFontSet *set, FcStrSet *dirs, FcFileCache *cache, FcBlanks *blanks, const FcChar8 *file, FcBool force); FcPublic FcBool FcDirScan (FcFontSet *set, FcStrSet *dirs, FcFileCache *cache, FcBlanks *blanks, const FcChar8 *dir, FcBool force); FcPublic FcBool FcDirSave (FcFontSet *set, FcStrSet *dirs, const FcChar8 *dir); FcPublic FcCache * FcDirCacheLoad (const FcChar8 *dir, FcConfig *config, FcChar8 **cache_file); FcPublic FcCache * FcDirCacheRescan (const FcChar8 *dir, FcConfig *config); FcPublic FcCache * FcDirCacheRead (const FcChar8 *dir, FcBool force, FcConfig *config); FcPublic FcCache * FcDirCacheLoadFile (const FcChar8 *cache_file, struct stat *file_stat); FcPublic void FcDirCacheUnload (FcCache *cache); /* fcfreetype.c */ FcPublic FcPattern * FcFreeTypeQuery (const FcChar8 *file, unsigned int id, FcBlanks *blanks, int *count); FcPublic unsigned int FcFreeTypeQueryAll (const FcChar8 *file, unsigned int id, FcBlanks *blanks, int *count, FcFontSet *set); /* fcfs.c */ FcPublic FcFontSet * FcFontSetCreate (void); FcPublic void FcFontSetDestroy (FcFontSet *s); FcPublic FcBool FcFontSetAdd (FcFontSet *s, FcPattern *font); /* fcinit.c */ FcPublic FcConfig * FcInitLoadConfig (void); FcPublic FcConfig * FcInitLoadConfigAndFonts (void); FcPublic FcBool FcInit (void); FcPublic void FcFini (void); FcPublic int FcGetVersion (void); FcPublic FcBool FcInitReinitialize (void); FcPublic FcBool FcInitBringUptoDate (void); /* fclang.c */ FcPublic FcStrSet * FcGetLangs (void); FcPublic FcChar8 * FcLangNormalize (const FcChar8 *lang); FcPublic const FcCharSet * FcLangGetCharSet (const FcChar8 *lang); FcPublic FcLangSet * FcLangSetCreate (void); FcPublic void FcLangSetDestroy (FcLangSet *ls); FcPublic FcLangSet * FcLangSetCopy (const FcLangSet *ls); FcPublic FcBool FcLangSetAdd (FcLangSet *ls, const FcChar8 *lang); FcPublic FcBool FcLangSetDel (FcLangSet *ls, const FcChar8 *lang); FcPublic FcLangResult FcLangSetHasLang (const FcLangSet *ls, const FcChar8 *lang); FcPublic FcLangResult FcLangSetCompare (const FcLangSet *lsa, const FcLangSet *lsb); FcPublic FcBool FcLangSetContains (const FcLangSet *lsa, const FcLangSet *lsb); FcPublic FcBool FcLangSetEqual (const FcLangSet *lsa, const FcLangSet *lsb); FcPublic FcChar32 FcLangSetHash (const FcLangSet *ls); FcPublic FcStrSet * FcLangSetGetLangs (const FcLangSet *ls); FcPublic FcLangSet * FcLangSetUnion (const FcLangSet *a, const FcLangSet *b); FcPublic FcLangSet * FcLangSetSubtract (const FcLangSet *a, const FcLangSet *b); /* fclist.c */ FcPublic FcObjectSet * FcObjectSetCreate (void); FcPublic FcBool FcObjectSetAdd (FcObjectSet *os, const char *object); FcPublic void FcObjectSetDestroy (FcObjectSet *os); FcPublic FcObjectSet * FcObjectSetVaBuild (const char *first, va_list va); FcPublic FcObjectSet * FcObjectSetBuild (const char *first, ...) FC_ATTRIBUTE_SENTINEL (0); FcPublic FcFontSet * FcFontSetList (FcConfig *config, FcFontSet **sets, int nsets, FcPattern *p, FcObjectSet *os); FcPublic FcFontSet * FcFontList (FcConfig *config, FcPattern *p, FcObjectSet *os); /* fcatomic.c */ FcPublic FcAtomic * FcAtomicCreate (const FcChar8 *file); FcPublic FcBool FcAtomicLock (FcAtomic *atomic); FcPublic FcChar8 * FcAtomicNewFile (FcAtomic *atomic); FcPublic FcChar8 * FcAtomicOrigFile (FcAtomic *atomic); FcPublic FcBool FcAtomicReplaceOrig (FcAtomic *atomic); FcPublic void FcAtomicDeleteNew (FcAtomic *atomic); FcPublic void FcAtomicUnlock (FcAtomic *atomic); FcPublic void FcAtomicDestroy (FcAtomic *atomic); /* fcmatch.c */ FcPublic FcPattern * FcFontSetMatch (FcConfig *config, FcFontSet **sets, int nsets, FcPattern *p, FcResult *result); FcPublic FcPattern * FcFontMatch (FcConfig *config, FcPattern *p, FcResult *result); FcPublic FcPattern * FcFontRenderPrepare (FcConfig *config, FcPattern *pat, FcPattern *font); FcPublic FcFontSet * FcFontSetSort (FcConfig *config, FcFontSet **sets, int nsets, FcPattern *p, FcBool trim, FcCharSet **csp, FcResult *result); FcPublic FcFontSet * FcFontSort (FcConfig *config, FcPattern *p, FcBool trim, FcCharSet **csp, FcResult *result); FcPublic void FcFontSetSortDestroy (FcFontSet *fs); /* fcmatrix.c */ FcPublic FcMatrix * FcMatrixCopy (const FcMatrix *mat); FcPublic FcBool FcMatrixEqual (const FcMatrix *mat1, const FcMatrix *mat2); FcPublic void FcMatrixMultiply (FcMatrix *result, const FcMatrix *a, const FcMatrix *b); FcPublic void FcMatrixRotate (FcMatrix *m, double c, double s); FcPublic void FcMatrixScale (FcMatrix *m, double sx, double sy); FcPublic void FcMatrixShear (FcMatrix *m, double sh, double sv); /* fcname.c */ /* Deprecated. Does nothing. Returns FcFalse. */ FcPublic FcBool FcNameRegisterObjectTypes (const FcObjectType *types, int ntype); /* Deprecated. Does nothing. Returns FcFalse. */ FcPublic FcBool FcNameUnregisterObjectTypes (const FcObjectType *types, int ntype); FcPublic const FcObjectType * FcNameGetObjectType (const char *object); /* Deprecated. Does nothing. Returns FcFalse. */ FcPublic FcBool FcNameRegisterConstants (const FcConstant *consts, int nconsts); /* Deprecated. Does nothing. Returns FcFalse. */ FcPublic FcBool FcNameUnregisterConstants (const FcConstant *consts, int nconsts); FcPublic const FcConstant * FcNameGetConstant (const FcChar8 *string); FcPublic const FcConstant * FcNameGetConstantFor (const FcChar8 *string, const char *object); FcPublic FcBool FcNameConstant (const FcChar8 *string, int *result); FcPublic FcPattern * FcNameParse (const FcChar8 *name); FcPublic FcChar8 * FcNameUnparse (FcPattern *pat); /* fcpat.c */ FcPublic FcPattern * FcPatternCreate (void); FcPublic FcPattern * FcPatternDuplicate (const FcPattern *p); FcPublic void FcPatternReference (FcPattern *p); FcPublic FcPattern * FcPatternFilter (FcPattern *p, const FcObjectSet *os); FcPublic void FcValueDestroy (FcValue v); FcPublic FcBool FcValueEqual (FcValue va, FcValue vb); FcPublic FcValue FcValueSave (FcValue v); FcPublic void FcPatternDestroy (FcPattern *p); int FcPatternObjectCount (const FcPattern *pat); FcPublic FcBool FcPatternEqual (const FcPattern *pa, const FcPattern *pb); FcPublic FcBool FcPatternEqualSubset (const FcPattern *pa, const FcPattern *pb, const FcObjectSet *os); FcPublic FcChar32 FcPatternHash (const FcPattern *p); FcPublic FcBool FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append); FcPublic FcBool FcPatternAddWeak (FcPattern *p, const char *object, FcValue value, FcBool append); FcPublic FcResult FcPatternGet (const FcPattern *p, const char *object, int id, FcValue *v); FcPublic FcResult FcPatternGetWithBinding (const FcPattern *p, const char *object, int id, FcValue *v, FcValueBinding *b); FcPublic FcBool FcPatternDel (FcPattern *p, const char *object); FcPublic FcBool FcPatternRemove (FcPattern *p, const char *object, int id); FcPublic FcBool FcPatternAddInteger (FcPattern *p, const char *object, int i); FcPublic FcBool FcPatternAddDouble (FcPattern *p, const char *object, double d); FcPublic FcBool FcPatternAddString (FcPattern *p, const char *object, const FcChar8 *s); FcPublic FcBool FcPatternAddMatrix (FcPattern *p, const char *object, const FcMatrix *s); FcPublic FcBool FcPatternAddCharSet (FcPattern *p, const char *object, const FcCharSet *c); FcPublic FcBool FcPatternAddBool (FcPattern *p, const char *object, FcBool b); FcPublic FcBool FcPatternAddLangSet (FcPattern *p, const char *object, const FcLangSet *ls); FcPublic FcBool FcPatternAddRange (FcPattern *p, const char *object, const FcRange *r); FcPublic FcResult FcPatternGetInteger (const FcPattern *p, const char *object, int n, int *i); FcPublic FcResult FcPatternGetDouble (const FcPattern *p, const char *object, int n, double *d); FcPublic FcResult FcPatternGetString (const FcPattern *p, const char *object, int n, FcChar8 **s); FcPublic FcResult FcPatternGetMatrix (const FcPattern *p, const char *object, int n, FcMatrix **s); FcPublic FcResult FcPatternGetCharSet (const FcPattern *p, const char *object, int n, FcCharSet **c); FcPublic FcResult FcPatternGetBool (const FcPattern *p, const char *object, int n, FcBool *b); FcPublic FcResult FcPatternGetLangSet (const FcPattern *p, const char *object, int n, FcLangSet **ls); FcPublic FcResult FcPatternGetRange (const FcPattern *p, const char *object, int id, FcRange **r); FcPublic FcPattern * FcPatternVaBuild (FcPattern *p, va_list va); FcPublic FcPattern * FcPatternBuild (FcPattern *p, ...) FC_ATTRIBUTE_SENTINEL (0); FcPublic FcChar8 * FcPatternFormat (FcPattern *pat, const FcChar8 *format); /* fcrange.c */ FcPublic FcRange * FcRangeCreateDouble (double begin, double end); FcPublic FcRange * FcRangeCreateInteger (FcChar32 begin, FcChar32 end); FcPublic void FcRangeDestroy (FcRange *range); FcPublic FcRange * FcRangeCopy (const FcRange *r); FcPublic FcBool FcRangeGetDouble (const FcRange *range, double *begin, double *end); FcPublic void FcPatternIterStart (const FcPattern *pat, FcPatternIter *iter); FcPublic FcBool FcPatternIterNext (const FcPattern *pat, FcPatternIter *iter); FcPublic FcBool FcPatternIterEqual (const FcPattern *p1, FcPatternIter *i1, const FcPattern *p2, FcPatternIter *i2); FcPublic FcBool FcPatternFindIter (const FcPattern *pat, FcPatternIter *iter, const char *object); FcPublic FcBool FcPatternIterIsValid (const FcPattern *pat, FcPatternIter *iter); FcPublic const char * FcPatternIterGetObject (const FcPattern *pat, FcPatternIter *iter); FcPublic int FcPatternIterValueCount (const FcPattern *pat, FcPatternIter *iter); FcPublic FcResult FcPatternIterGetValue (const FcPattern *pat, FcPatternIter *iter, int id, FcValue *v, FcValueBinding *b); /* fcweight.c */ FcPublic int FcWeightFromOpenType (int ot_weight); FcPublic double FcWeightFromOpenTypeDouble (double ot_weight); FcPublic int FcWeightToOpenType (int fc_weight); FcPublic double FcWeightToOpenTypeDouble (double fc_weight); /* fcstr.c */ FcPublic FcChar8 * FcStrCopy (const FcChar8 *s); FcPublic FcChar8 * FcStrCopyFilename (const FcChar8 *s); FcPublic FcChar8 * FcStrPlus (const FcChar8 *s1, const FcChar8 *s2); FcPublic void FcStrFree (FcChar8 *s); /* These are ASCII only, suitable only for pattern element names */ #define FcIsUpper(c) ((0101 <= (c) && (c) <= 0132)) #define FcIsLower(c) ((0141 <= (c) && (c) <= 0172)) #define FcToLower(c) (FcIsUpper (c) ? (c) - 0101 + 0141 : (c)) FcPublic FcChar8 * FcStrDowncase (const FcChar8 *s); FcPublic int FcStrCmpIgnoreCase (const FcChar8 *s1, const FcChar8 *s2); FcPublic int FcStrCmp (const FcChar8 *s1, const FcChar8 *s2); FcPublic const FcChar8 * FcStrStrIgnoreCase (const FcChar8 *s1, const FcChar8 *s2); FcPublic const FcChar8 * FcStrStr (const FcChar8 *s1, const FcChar8 *s2); FcPublic int FcUtf8ToUcs4 (const FcChar8 *src_orig, FcChar32 *dst, int len); FcPublic FcBool FcUtf8Len (const FcChar8 *string, int len, int *nchar, int *wchar); #define FC_UTF8_MAX_LEN 6 FcPublic int FcUcs4ToUtf8 (FcChar32 ucs4, FcChar8 dest[FC_UTF8_MAX_LEN]); FcPublic int FcUtf16ToUcs4 (const FcChar8 *src_orig, FcEndian endian, FcChar32 *dst, int len); /* in bytes */ FcPublic FcBool FcUtf16Len (const FcChar8 *string, FcEndian endian, int len, /* in bytes */ int *nchar, int *wchar); FcPublic FcChar8 * FcStrBuildFilename (const FcChar8 *path, ...); FcPublic FcChar8 * FcStrDirname (const FcChar8 *file); FcPublic FcChar8 * FcStrBasename (const FcChar8 *file); FcPublic FcStrSet * FcStrSetCreate (void); FcPublic FcBool FcStrSetMember (FcStrSet *set, const FcChar8 *s); FcPublic FcBool FcStrSetEqual (FcStrSet *sa, FcStrSet *sb); FcPublic FcBool FcStrSetAdd (FcStrSet *set, const FcChar8 *s); FcPublic FcBool FcStrSetAddFilename (FcStrSet *set, const FcChar8 *s); FcPublic FcBool FcStrSetDel (FcStrSet *set, const FcChar8 *s); FcPublic void FcStrSetDestroy (FcStrSet *set); FcPublic FcStrList * FcStrListCreate (FcStrSet *set); FcPublic void FcStrListFirst (FcStrList *list); FcPublic FcChar8 * FcStrListNext (FcStrList *list); FcPublic void FcStrListDone (FcStrList *list); /* fcxml.c */ FcPublic FcBool FcConfigParseAndLoad (FcConfig *config, const FcChar8 *file, FcBool complain); FcPublic FcBool FcConfigParseAndLoadFromMemory (FcConfig *config, const FcChar8 *buffer, FcBool complain); _FCFUNCPROTOEND #undef FC_ATTRIBUTE_SENTINEL #undef FC_ATTRIBUTE_MAY_ALIAS #ifndef _FCINT_H_ /* * Deprecated functions are placed here to help users fix their code without * digging through documentation */ # define FcConfigGetRescanInverval FcConfigGetRescanInverval_REPLACE_BY_FcConfigGetRescanInterval # define FcConfigSetRescanInverval FcConfigSetRescanInverval_REPLACE_BY_FcConfigSetRescanInterval #endif #endif /* _FONTCONFIG_H_ */ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fontconfig/meson.build000066400000000000000000000004141503113465200256670ustar00rootroot00000000000000fontconfig_h_conf = configuration_data() fontconfig_h_conf.set('CACHE_VERSION', cacheversion) fontconfig_h = configure_file(output: 'fontconfig.h', input: 'fontconfig.h.in', configuration: fontconfig_h_conf) fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fonts.conf.in000066400000000000000000000051501503113465200240000ustar00rootroot00000000000000 Default configuration file @FC_DEFAULT_FONTS@ @FC_FONTPATH@ fonts ~/.fonts mono monospace sans serif sans-serif sans sans-serif system ui system-ui @CONFIGDIR@ @FC_CACHEDIR@ fontconfig ~/.fontconfig 30 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/fonts.dtd000066400000000000000000000200761503113465200232250ustar00rootroot00000000000000 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/git.mk000066400000000000000000000167611503113465200225210ustar00rootroot00000000000000# git.mk # # Copyright 2009, Red Hat, Inc. # Copyright 2010,2011 Behdad Esfahbod # Written by Behdad Esfahbod # # Copying and distribution of this file, with or without modification, # is permitted in any medium without royalty provided the copyright # notice and this notice are preserved. # # The latest version of this file can be downloaded from: # https://raw.github.com/behdad/git.mk/master/git.mk # Bugs, etc, should be reported upstream at: # https://github.com/behdad/git.mk # # To use in your project, import this file in your git repo's toplevel, # then do "make -f git.mk". This modifies all Makefile.am files in # your project to -include git.mk. Remember to add that line to new # Makefile.am files you create in your project, or just rerun the # "make -f git.mk". # # This enables automatic .gitignore generation. If you need to ignore # more files, add them to the GITIGNOREFILES variable in your Makefile.am. # But think twice before doing that. If a file has to be in .gitignore, # chances are very high that it's a generated file and should be in one # of MOSTLYCLEANFILES, CLEANFILES, DISTCLEANFILES, or MAINTAINERCLEANFILES. # # The only case that you need to manually add a file to GITIGNOREFILES is # when remove files in one of mostlyclean-local, clean-local, distclean-local, # or maintainer-clean-local make targets. # # Note that for files like editor backup, etc, there are better places to # ignore them. See "man gitignore". # # If "make maintainer-clean" removes the files but they are not recognized # by this script (that is, if "git status" shows untracked files still), send # me the output of "git status" as well as your Makefile.am and Makefile for # the directories involved and I'll diagnose. # # For a list of toplevel files that should be in MAINTAINERCLEANFILES, see # Makefile.am.sample in the git.mk git repo. # # Don't EXTRA_DIST this file. It is supposed to only live in git clones, # not tarballs. It serves no useful purpose in tarballs and clutters the # build dir. # # This file knows how to handle autoconf, automake, libtool, gtk-doc, # gnome-doc-utils, yelp.m4, mallard, intltool, gsettings, dejagnu. # # This makefile provides the following targets: # # - all: "make all" will build all gitignore files. # - gitignore: makes all gitignore files in the current dir and subdirs. # - .gitignore: make gitignore file for the current dir. # - gitignore-recurse: makes all gitignore files in the subdirs. # # KNOWN ISSUES: # # - Recursive configure doesn't work as $(top_srcdir)/git.mk inside the # submodule doesn't find us. If you have configure.{in,ac} files in # subdirs, add a proxy git.mk file in those dirs that simply does: # "include $(top_srcdir)/../git.mk". Add more ..'s to your taste. # And add those files to git. See vte/gnome-pty-helper/git.mk for # example. # git-all: git-mk-install git-mk-install: @echo Installing git makefile @any_failed=; \ find "`test -z "$(top_srcdir)" && echo . || echo "$(top_srcdir)"`" -name Makefile.am | while read x; do \ if grep 'include .*/git.mk' $$x >/dev/null; then \ echo $$x already includes git.mk; \ else \ failed=; \ echo "Updating $$x"; \ { cat $$x; \ echo ''; \ echo '-include $$(top_srcdir)/git.mk'; \ } > $$x.tmp || failed=1; \ if test x$$failed = x; then \ mv $$x.tmp $$x || failed=1; \ fi; \ if test x$$failed = x; then : else \ echo Failed updating $$x; >&2 \ any_failed=1; \ fi; \ fi; done; test -z "$$any_failed" .PHONY: git-all git-mk-install ### .gitignore generation $(srcdir)/.gitignore: Makefile.am $(top_srcdir)/git.mk $(AM_V_GEN) \ { \ if test "x$(DOC_MODULE)" = x -o "x$(DOC_MAIN_SGML_FILE)" = x; then :; else \ for x in \ $(DOC_MODULE)-decl-list.txt \ $(DOC_MODULE)-decl.txt \ tmpl/$(DOC_MODULE)-unused.sgml \ "tmpl/*.bak" \ xml html \ ; do echo /$$x; done; \ fi; \ if test "x$(DOC_MODULE)$(DOC_ID)" = x -o "x$(DOC_LINGUAS)" = x; then :; else \ for lc in $(DOC_LINGUAS); do \ for x in \ $(if $(DOC_MODULE),$(DOC_MODULE).xml) \ $(DOC_PAGES) \ $(DOC_INCLUDES) \ ; do echo /$$lc/$$x; done; \ done; \ for x in \ $(_DOC_OMF_ALL) \ $(_DOC_DSK_ALL) \ $(_DOC_HTML_ALL) \ $(_DOC_MOFILES) \ $(DOC_H_FILE) \ "*/.xml2po.mo" \ "*/*.omf.out" \ ; do echo /$$x; done; \ fi; \ if test "x$(HELP_ID)" = x -o "x$(HELP_LINGUAS)" = x; then :; else \ for lc in $(HELP_LINGUAS); do \ for x in \ $(HELP_FILES) \ "$$lc.stamp" \ "$$lc.mo" \ ; do echo /$$lc/$$x; done; \ done; \ fi; \ if test "x$(gsettings_SCHEMAS)" = x; then :; else \ for x in \ $(gsettings_SCHEMAS:.xml=.valid) \ $(gsettings__enum_file) \ ; do echo /$$x; done; \ fi; \ if test -f $(srcdir)/po/Makefile.in.in; then \ for x in \ po/Makefile.in.in \ po/Makefile.in \ po/Makefile \ po/Makevars.template \ po/POTFILES \ po/Rules-quot \ po/stamp-it \ po/stamp-po \ po/.intltool-merge-cache \ "po/*~" \ "po/*.header" \ "po/*.gmo" \ "po/*.mo" \ "po/*.sed" \ "po/*.sin" \ po/$(GETTEXT_PACKAGE).pot \ intltool-extract.in \ intltool-merge.in \ intltool-update.in \ ; do echo /$$x; done; \ fi; \ if test -f $(srcdir)/po-conf/Makefile.in.in; then \ for x in \ po-conf/Makefile.in.in \ po-conf/Makefile.in \ po-conf/Makefile \ po-conf/Makevars.template \ po-conf/POTFILES \ po-conf/Rules-quot \ po-conf/stamp-it \ po-conf/stamp-po \ "po-conf/*~" \ "po-conf/*.header" \ "po-conf/*.gmo" \ "po-conf/*.mo" \ "po-conf/*.sed" \ "po-conf/*.sin" \ po-conf/$(GETTEXT_PACKAGE)-conf.pot \ ; do echo /$$x; done; \ fi; \ if test -f $(srcdir)/configure; then \ for x in \ autom4te.cache \ configure \ config.h \ stamp-h1 \ libtool \ config.lt \ config.rpath \ ; do echo /$$x; done; \ fi; \ if test "x$(DEJATOOL)" = x; then :; else \ for x in \ $(DEJATOOL) \ ; do echo /$$x.sum; echo /$$x.log; done; \ echo /site.exp; \ fi; \ for x in \ .gitignore \ $(GITIGNOREFILES) \ $(CLEANFILES) \ $(PROGRAMS) $(check_PROGRAMS) $(EXTRA_PROGRAMS) \ $(LIBRARIES) $(check_LIBRARIES) $(EXTRA_LIBRARIES) \ $(LTLIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LTLIBRARIES) \ so_locations \ .libs _libs \ $(MOSTLYCLEANFILES) \ "*.$(OBJEXT)" \ "*.lo" \ $(DISTCLEANFILES) \ $(am__CONFIG_DISTCLEAN_FILES) \ $(CONFIG_CLEAN_FILES) \ TAGS ID GTAGS GRTAGS GSYMS GPATH tags \ "*.tab.c" \ $(MAINTAINERCLEANFILES) \ $(BUILT_SOURCES) \ $(DEPDIR) \ Makefile \ Makefile.in \ "*.orig" \ "*.rej" \ "*.bak" \ "*~" \ ".*.sw[nop]" \ ".dirstamp" \ ; do echo /$$x; done; \ } | \ sed "s@^/`echo "$(srcdir)" | sed 's/\(.\)/[\1]/g'`/@/@" | \ sed 's@/[.]/@/@g' | \ LC_ALL=C sort | uniq > $@.tmp && \ mv $@.tmp $@; all: $(srcdir)/.gitignore gitignore-recurse-maybe gitignore: $(srcdir)/.gitignore gitignore-recurse gitignore-recurse-maybe: @for subdir in $(DIST_SUBDIRS); do \ case " $(SUBDIRS) " in \ *" $$subdir "*) :;; \ *) test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) .gitignore gitignore-recurse-maybe || echo "Skipping $$subdir");; \ esac; \ done gitignore-recurse: @for subdir in $(DIST_SUBDIRS); do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) .gitignore gitignore-recurse || echo "Skipping $$subdir"); \ done maintainer-clean: gitignore-clean gitignore-clean: -rm -f $(srcdir)/.gitignore .PHONY: gitignore-clean gitignore gitignore-recurse gitignore-recurse-maybe fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/its/000077500000000000000000000000001503113465200221715ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/its/Makefile.am000066400000000000000000000025231503113465200242270ustar00rootroot00000000000000# # fontconfig/Makefile.am # # Copyright © 2003 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. NULL = EXTRA_DIST = \ $(gettextits_DATA) \ $(NULL) gettextitsdir = $(datadir)/gettext/its gettextits_DATA = \ fontconfig.its \ fontconfig.loc -include $(top_srcdir)/git.mk fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/its/fontconfig.its000066400000000000000000000024151503113465200250500ustar00rootroot00000000000000 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/its/fontconfig.loc000066400000000000000000000024151503113465200250260ustar00rootroot00000000000000 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/its/meson.build000066400000000000000000000003101503113465200243250ustar00rootroot00000000000000gettext_files = [ 'fontconfig.its', 'fontconfig.loc', ] install_data(gettext_files, install_dir: join_paths(get_option('datadir'), 'gettext/its'), install_tag: 'devel') fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/local.conf000066400000000000000000000017441503113465200233410ustar00rootroot00000000000000 local customizations false fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/m4/000077500000000000000000000000001503113465200217125ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/m4/.gitkeep000066400000000000000000000000001503113465200233310ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/m4/ac_check_symbol.m4000066400000000000000000000025651503113465200252710ustar00rootroot00000000000000dnl @synopsis AC_CHECK_SYMBOL(SYMBOL, HEADER... [,ACTION-IF-FOUND [,ACTION-IF-NOT-FOUND]]) dnl dnl a wrapper around AC_EGREP_HEADER the shellvar $ac_found will hold dnl the HEADER-name that had been containing the symbol. This value is dnl shown to the user. dnl dnl @category C dnl @author Guido U. Draheim dnl @version 2006-10-13 dnl @license GPLWithACException AC_DEFUN([AC_CHECK_SYMBOL], [AC_MSG_CHECKING([for $1 in $2]) AC_CACHE_VAL(ac_cv_func_$1, [AC_REQUIRE_CPP()dnl changequote(, )dnl symbol="[^a-zA-Z_0-9]$1[^a-zA-Z_0-9]" changequote([, ])dnl ac_found=no for ac_header in $2 ; do ac_safe=`echo "$ac_header" | sed 'y%./+-%__p_%' ` if test $ac_found != "yes" ; then if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then AC_EGREP_HEADER( $symbol, $ac_header, [ac_found="$ac_header"] ) fi fi done if test "$ac_found" != "no" ; then AC_MSG_RESULT($ac_found) ifelse([$3], , :, [$3]) else AC_MSG_RESULT(no) ifelse([$4], , , [$4 ])dnl fi ])]) dnl AC_CHECK_SYMBOLS( symbol..., header... [, action-if-found [, action-if-not-found]]) AC_DEFUN([AC_CHECK_SYMBOLS], [for ac_func in $1 do P4_CHECK_SYMBOL($ac_func, $2, [changequote(, )dnl ac_tr_func=HAVE_`echo $ac_func | sed -e 'y:abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:' -e 's:[[^A-Z0-9]]:_:'` changequote([, ])dnl AC_DEFINE_UNQUOTED($ac_tr_func) $2], $3)dnl done ]) fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/m4/ax_cc_for_build.m4000066400000000000000000000057061503113465200252660ustar00rootroot00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_cc_for_build.html # =========================================================================== # # SYNOPSIS # # AX_CC_FOR_BUILD # # DESCRIPTION # # Find a build-time compiler. Sets CC_FOR_BUILD and EXEEXT_FOR_BUILD. # # LICENSE # # Copyright (c) 2010 Reuben Thomas # Copyright (c) 1999 Richard Henderson # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 2 dnl Get a default for CC_FOR_BUILD to put into Makefile. AC_DEFUN([AX_CC_FOR_BUILD], [# Put a plausible default for CC_FOR_BUILD in Makefile. if test -z "$CC_FOR_BUILD"; then if test "x$cross_compiling" = "xno"; then CC_FOR_BUILD='$(CC)' else CC_FOR_BUILD=gcc fi fi AC_SUBST(CC_FOR_BUILD) # Also set EXEEXT_FOR_BUILD. if test "x$cross_compiling" = "xno"; then EXEEXT_FOR_BUILD='$(EXEEXT)' else AC_CACHE_CHECK([for build system executable suffix], bfd_cv_build_exeext, [rm -f conftest* echo 'int main () { return 0; }' > conftest.c bfd_cv_build_exeext= ${CC_FOR_BUILD} -o conftest conftest.c 1>&5 2>&5 for file in conftest.*; do case $file in *.c | *.o | *.obj | *.ilk | *.pdb) ;; *) bfd_cv_build_exeext=`echo $file | sed -e s/conftest//` ;; esac done rm -f conftest* test x"${bfd_cv_build_exeext}" = x && bfd_cv_build_exeext=no]) EXEEXT_FOR_BUILD="" test x"${bfd_cv_build_exeext}" != xno && EXEEXT_FOR_BUILD=${bfd_cv_build_exeext} fi AC_SUBST(EXEEXT_FOR_BUILD)])dnl fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/m4/ax_create_stdint_h.m4000066400000000000000000000564011503113465200260110ustar00rootroot00000000000000dnl @synopsis AX_CREATE_STDINT_H [( HEADER-TO-GENERATE [, HEDERS-TO-CHECK])] dnl dnl the "ISO C9X: 7.18 Integer types " section requires the dnl existence of an include file that defines a set of dnl typedefs, especially uint8_t,int32_t,uintptr_t. Many older dnl installations will not provide this file, but some will have the dnl very same definitions in . In other enviroments we can dnl use the inet-types in which would define the typedefs dnl int8_t and u_int8_t respectivly. dnl dnl This macros will create a local "_stdint.h" or the headerfile given dnl as an argument. In many cases that file will just "#include dnl " or "#include ", while in other environments dnl it will provide the set of basic 'stdint's definitions/typedefs: dnl dnl int8_t,uint8_t,int16_t,uint16_t,int32_t,uint32_t,intptr_t,uintptr_t dnl int_least32_t.. int_fast32_t.. intmax_t dnl dnl which may or may not rely on the definitions of other files, or dnl using the AC_CHECK_SIZEOF macro to determine the actual sizeof each dnl type. dnl dnl if your header files require the stdint-types you will want to dnl create an installable file mylib-int.h that all your other dnl installable header may include. So if you have a library package dnl named "mylib", just use dnl dnl AX_CREATE_STDINT_H(mylib-int.h) dnl dnl in configure.ac and go to install that very header file in dnl Makefile.am along with the other headers (mylib.h) - and the dnl mylib-specific headers can simply use "#include " to dnl obtain the stdint-types. dnl dnl Remember, if the system already had a valid , the dnl generated file will include it directly. No need for fuzzy dnl HAVE_STDINT_H things... (oops, GCC 4.2.x has deliberatly dnl disabled its stdint.h for non-c99 compilation and the c99-mode dnl is not the default. Therefore this macro will not use the dnl compiler's stdint.h - please complain to the GCC developers). dnl dnl @category C dnl @author Guido U. Draheim dnl @version 2003-12-07 dnl @license GPLWithACException AC_DEFUN([AX_CHECK_DATA_MODEL],[ AC_CHECK_SIZEOF(char) AC_CHECK_SIZEOF(short) AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(void*) ac_cv_char_data_model="" ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_char" ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_short" ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_int" ac_cv_long_data_model="" ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_int" ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_long" ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_voidp" AC_MSG_CHECKING([data model]) case "$ac_cv_char_data_model/$ac_cv_long_data_model" in 122/242) ac_cv_data_model="IP16" ; n="standard 16bit machine" ;; 122/244) ac_cv_data_model="LP32" ; n="standard 32bit machine" ;; 122/*) ac_cv_data_model="i16" ; n="unusual int16 model" ;; 124/444) ac_cv_data_model="ILP32" ; n="standard 32bit unixish" ;; 124/488) ac_cv_data_model="LP64" ; n="standard 64bit unixish" ;; 124/448) ac_cv_data_model="LLP64" ; n="unusual 64bit unixish" ;; 124/*) ac_cv_data_model="i32" ; n="unusual int32 model" ;; 128/888) ac_cv_data_model="ILP64" ; n="unusual 64bit numeric" ;; 128/*) ac_cv_data_model="i64" ; n="unusual int64 model" ;; 222/*2) ac_cv_data_model="DSP16" ; n="strict 16bit dsptype" ;; 333/*3) ac_cv_data_model="DSP24" ; n="strict 24bit dsptype" ;; 444/*4) ac_cv_data_model="DSP32" ; n="strict 32bit dsptype" ;; 666/*6) ac_cv_data_model="DSP48" ; n="strict 48bit dsptype" ;; 888/*8) ac_cv_data_model="DSP64" ; n="strict 64bit dsptype" ;; 222/*|333/*|444/*|666/*|888/*) : ac_cv_data_model="iDSP" ; n="unusual dsptype" ;; *) ac_cv_data_model="none" ; n="very unusual model" ;; esac AC_MSG_RESULT([$ac_cv_data_model ($ac_cv_long_data_model, $n)]) ]) dnl AX_CHECK_HEADER_STDINT_X([HEADERLIST][,ACTION-IF]) AC_DEFUN([AX_CHECK_HEADER_STDINT_X],[ AC_CACHE_CHECK([for stdint uintptr_t], [ac_cv_header_stdint_x],[ ac_cv_header_stdint_x="" # the 1997 typedefs (inttypes.h) AC_MSG_RESULT([(..)]) for i in m4_ifval([$1],[$1],[stdint.h inttypes.h sys/inttypes.h sys/types.h]) do unset ac_cv_type_uintptr_t unset ac_cv_type_uint64_t AC_CHECK_TYPE(uintptr_t,[ac_cv_header_stdint_x=$i],continue,[#include <$i>]) AC_CHECK_TYPE(uint64_t,[and64="/uint64_t"],[and64=""],[#include<$i>]) m4_ifvaln([$2],[$2]) break done AC_MSG_CHECKING([for stdint uintptr_t]) ]) ]) AC_DEFUN([AX_CHECK_HEADER_STDINT_O],[ AC_CACHE_CHECK([for stdint uint32_t], [ac_cv_header_stdint_o],[ ac_cv_header_stdint_o="" # the 1995 typedefs (sys/inttypes.h) AC_MSG_RESULT([(..)]) for i in m4_ifval([$1],[$1],[inttypes.h sys/inttypes.h sys/types.h stdint.h]) do unset ac_cv_type_uint32_t unset ac_cv_type_uint64_t AC_CHECK_TYPE(uint32_t,[ac_cv_header_stdint_o=$i],continue,[#include <$i>]) AC_CHECK_TYPE(uint64_t,[and64="/uint64_t"],[and64=""],[#include<$i>]) m4_ifvaln([$2],[$2]) break break; done AC_MSG_CHECKING([for stdint uint32_t]) ]) ]) AC_DEFUN([AX_CHECK_HEADER_STDINT_U],[ AC_CACHE_CHECK([for stdint u_int32_t], [ac_cv_header_stdint_u],[ ac_cv_header_stdint_u="" # the BSD typedefs (sys/types.h) AC_MSG_RESULT([(..)]) for i in m4_ifval([$1],[$1],[sys/types.h inttypes.h sys/inttypes.h]) ; do unset ac_cv_type_u_int32_t unset ac_cv_type_u_int64_t AC_CHECK_TYPE(u_int32_t,[ac_cv_header_stdint_u=$i],continue,[#include <$i>]) AC_CHECK_TYPE(u_int64_t,[and64="/u_int64_t"],[and64=""],[#include<$i>]) m4_ifvaln([$2],[$2]) break break; done AC_MSG_CHECKING([for stdint u_int32_t]) ]) ]) AC_DEFUN([AX_CREATE_STDINT_H], [# ------ AX CREATE STDINT H ------------------------------------- AC_MSG_CHECKING([for stdint types]) ac_stdint_h=`echo ifelse($1, , _stdint.h, $1)` # try to shortcircuit - if the default include path of the compiler # can find a "stdint.h" header then we assume that all compilers can. AC_CACHE_VAL([ac_cv_header_stdint_t],[ old_CXXFLAGS="$CXXFLAGS" ; CXXFLAGS="" old_CPPFLAGS="$CPPFLAGS" ; CPPFLAGS="" old_CFLAGS="$CFLAGS" ; CFLAGS="" AC_TRY_COMPILE([#include ],[int_least32_t v = 0;], [ac_cv_stdint_result="(assuming C99 compatible system)" ac_cv_header_stdint_t="stdint.h"; ], [ac_cv_header_stdint_t=""]) if test "$GCC" = "yes" && test ".$ac_cv_header_stdint_t" = "."; then CFLAGS="-std=c99" AC_TRY_COMPILE([#include ],[int_least32_t v = 0;], [AC_MSG_WARN(your GCC compiler has a defunct stdint.h for its default-mode)]) fi CXXFLAGS="$old_CXXFLAGS" CPPFLAGS="$old_CPPFLAGS" CFLAGS="$old_CFLAGS" ]) v="... $ac_cv_header_stdint_h" if test "$ac_stdint_h" = "stdint.h" ; then AC_MSG_RESULT([(are you sure you want them in ./stdint.h?)]) elif test "$ac_stdint_h" = "inttypes.h" ; then AC_MSG_RESULT([(are you sure you want them in ./inttypes.h?)]) elif test "_$ac_cv_header_stdint_t" = "_" ; then AC_MSG_RESULT([(putting them into $ac_stdint_h)$v]) else ac_cv_header_stdint="$ac_cv_header_stdint_t" AC_MSG_RESULT([$ac_cv_header_stdint (shortcircuit)]) fi if test "_$ac_cv_header_stdint_t" = "_" ; then # can not shortcircuit.. dnl .....intro message done, now do a few system checks..... dnl btw, all old CHECK_TYPE macros do automatically "DEFINE" a type, dnl therefore we use the autoconf implementation detail CHECK_TYPE_NEW dnl instead that is triggered with 3 or more arguments (see types.m4) inttype_headers=`echo $2 | sed -e 's/,/ /g'` ac_cv_stdint_result="(no helpful system typedefs seen)" AX_CHECK_HEADER_STDINT_X(dnl stdint.h inttypes.h sys/inttypes.h $inttype_headers, ac_cv_stdint_result="(seen uintptr_t$and64 in $i)") if test "_$ac_cv_header_stdint_x" = "_" ; then AX_CHECK_HEADER_STDINT_O(dnl, inttypes.h sys/inttypes.h stdint.h $inttype_headers, ac_cv_stdint_result="(seen uint32_t$and64 in $i)") fi if test "_$ac_cv_header_stdint_x" = "_" ; then if test "_$ac_cv_header_stdint_o" = "_" ; then AX_CHECK_HEADER_STDINT_U(dnl, sys/types.h inttypes.h sys/inttypes.h $inttype_headers, ac_cv_stdint_result="(seen u_int32_t$and64 in $i)") fi fi dnl if there was no good C99 header file, do some typedef checks... if test "_$ac_cv_header_stdint_x" = "_" ; then AC_MSG_CHECKING([for stdint datatype model]) AC_MSG_RESULT([(..)]) AX_CHECK_DATA_MODEL fi if test "_$ac_cv_header_stdint_x" != "_" ; then ac_cv_header_stdint="$ac_cv_header_stdint_x" elif test "_$ac_cv_header_stdint_o" != "_" ; then ac_cv_header_stdint="$ac_cv_header_stdint_o" elif test "_$ac_cv_header_stdint_u" != "_" ; then ac_cv_header_stdint="$ac_cv_header_stdint_u" else ac_cv_header_stdint="stddef.h" fi AC_MSG_CHECKING([for extra inttypes in chosen header]) AC_MSG_RESULT([($ac_cv_header_stdint)]) dnl see if int_least and int_fast types are present in _this_ header. unset ac_cv_type_int_least32_t unset ac_cv_type_int_fast32_t AC_CHECK_TYPE(int_least32_t,,,[#include <$ac_cv_header_stdint>]) AC_CHECK_TYPE(int_fast32_t,,,[#include<$ac_cv_header_stdint>]) AC_CHECK_TYPE(intmax_t,,,[#include <$ac_cv_header_stdint>]) fi # shortcircut to system "stdint.h" # ------------------ PREPARE VARIABLES ------------------------------ if test "$GCC" = "yes" ; then ac_cv_stdint_message="using gnu compiler "`$CC --version | head -1` else ac_cv_stdint_message="using $CC" fi AC_MSG_RESULT([make use of $ac_cv_header_stdint in $ac_stdint_h dnl $ac_cv_stdint_result]) dnl ----------------------------------------------------------------- # ----------------- DONE inttypes.h checks START header ------------- AC_CONFIG_COMMANDS([$ac_stdint_h],[ AC_MSG_NOTICE(creating $ac_stdint_h : $_ac_stdint_h) ac_stdint=$tmp/_stdint.h echo "#ifndef" $_ac_stdint_h >$ac_stdint echo "#define" $_ac_stdint_h "1" >>$ac_stdint echo "#ifndef" _GENERATED_STDINT_H >>$ac_stdint echo "#define" _GENERATED_STDINT_H '"'$PACKAGE $VERSION'"' >>$ac_stdint echo "/* generated $ac_cv_stdint_message */" >>$ac_stdint if test "_$ac_cv_header_stdint_t" != "_" ; then echo "#define _STDINT_HAVE_STDINT_H" "1" >>$ac_stdint echo "#include " >>$ac_stdint echo "#endif" >>$ac_stdint echo "#endif" >>$ac_stdint else cat >>$ac_stdint < #else #include /* .................... configured part ............................ */ STDINT_EOF echo "/* whether we have a C99 compatible stdint header file */" >>$ac_stdint if test "_$ac_cv_header_stdint_x" != "_" ; then ac_header="$ac_cv_header_stdint_x" echo "#define _STDINT_HEADER_INTPTR" '"'"$ac_header"'"' >>$ac_stdint else echo "/* #undef _STDINT_HEADER_INTPTR */" >>$ac_stdint fi echo "/* whether we have a C96 compatible inttypes header file */" >>$ac_stdint if test "_$ac_cv_header_stdint_o" != "_" ; then ac_header="$ac_cv_header_stdint_o" echo "#define _STDINT_HEADER_UINT32" '"'"$ac_header"'"' >>$ac_stdint else echo "/* #undef _STDINT_HEADER_UINT32 */" >>$ac_stdint fi echo "/* whether we have a BSD compatible inet types header */" >>$ac_stdint if test "_$ac_cv_header_stdint_u" != "_" ; then ac_header="$ac_cv_header_stdint_u" echo "#define _STDINT_HEADER_U_INT32" '"'"$ac_header"'"' >>$ac_stdint else echo "/* #undef _STDINT_HEADER_U_INT32 */" >>$ac_stdint fi echo "" >>$ac_stdint if test "_$ac_header" != "_" ; then if test "$ac_header" != "stddef.h" ; then echo "#include <$ac_header>" >>$ac_stdint echo "" >>$ac_stdint fi fi echo "/* which 64bit typedef has been found */" >>$ac_stdint if test "$ac_cv_type_uint64_t" = "yes" ; then echo "#define _STDINT_HAVE_UINT64_T" "1" >>$ac_stdint else echo "/* #undef _STDINT_HAVE_UINT64_T */" >>$ac_stdint fi if test "$ac_cv_type_u_int64_t" = "yes" ; then echo "#define _STDINT_HAVE_U_INT64_T" "1" >>$ac_stdint else echo "/* #undef _STDINT_HAVE_U_INT64_T */" >>$ac_stdint fi echo "" >>$ac_stdint echo "/* which type model has been detected */" >>$ac_stdint if test "_$ac_cv_char_data_model" != "_" ; then echo "#define _STDINT_CHAR_MODEL" "$ac_cv_char_data_model" >>$ac_stdint echo "#define _STDINT_LONG_MODEL" "$ac_cv_long_data_model" >>$ac_stdint else echo "/* #undef _STDINT_CHAR_MODEL // skipped */" >>$ac_stdint echo "/* #undef _STDINT_LONG_MODEL // skipped */" >>$ac_stdint fi echo "" >>$ac_stdint echo "/* whether int_least types were detected */" >>$ac_stdint if test "$ac_cv_type_int_least32_t" = "yes"; then echo "#define _STDINT_HAVE_INT_LEAST32_T" "1" >>$ac_stdint else echo "/* #undef _STDINT_HAVE_INT_LEAST32_T */" >>$ac_stdint fi echo "/* whether int_fast types were detected */" >>$ac_stdint if test "$ac_cv_type_int_fast32_t" = "yes"; then echo "#define _STDINT_HAVE_INT_FAST32_T" "1" >>$ac_stdint else echo "/* #undef _STDINT_HAVE_INT_FAST32_T */" >>$ac_stdint fi echo "/* whether intmax_t type was detected */" >>$ac_stdint if test "$ac_cv_type_intmax_t" = "yes"; then echo "#define _STDINT_HAVE_INTMAX_T" "1" >>$ac_stdint else echo "/* #undef _STDINT_HAVE_INTMAX_T */" >>$ac_stdint fi echo "" >>$ac_stdint cat >>$ac_stdint <= 199901L #define _HAVE_UINT64_T #define _HAVE_LONGLONG_UINT64_T typedef long long int64_t; typedef unsigned long long uint64_t; #elif !defined __STRICT_ANSI__ #if defined _MSC_VER || defined __WATCOMC__ || defined __BORLANDC__ #define _HAVE_UINT64_T typedef __int64 int64_t; typedef unsigned __int64 uint64_t; #elif defined __GNUC__ || defined __MWERKS__ || defined __ELF__ /* note: all ELF-systems seem to have loff-support which needs 64-bit */ #if !defined _NO_LONGLONG #define _HAVE_UINT64_T #define _HAVE_LONGLONG_UINT64_T typedef long long int64_t; typedef unsigned long long uint64_t; #endif #elif defined __alpha || (defined __mips && defined _ABIN32) #if !defined _NO_LONGLONG typedef long int64_t; typedef unsigned long uint64_t; #endif /* compiler/cpu type to define int64_t */ #endif #endif #endif #if defined _STDINT_HAVE_U_INT_TYPES /* int8_t int16_t int32_t defined by inet code, redeclare the u_intXX types */ typedef u_int8_t uint8_t; typedef u_int16_t uint16_t; typedef u_int32_t uint32_t; /* glibc compatibility */ #ifndef __int8_t_defined #define __int8_t_defined #endif #endif #ifdef _STDINT_NEED_INT_MODEL_T /* we must guess all the basic types. Apart from byte-adressable system, */ /* there a few 32-bit-only dsp-systems that we guard with BYTE_MODEL 8-} */ /* (btw, those nibble-addressable systems are way off, or so we assume) */ dnl /* have a look at "64bit and data size neutrality" at */ dnl /* http://unix.org/version2/whatsnew/login_64bit.html */ dnl /* (the shorthand "ILP" types always have a "P" part) */ #if defined _STDINT_BYTE_MODEL #if _STDINT_LONG_MODEL+0 == 242 /* 2:4:2 = IP16 = a normal 16-bit system */ typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned long uint32_t; #ifndef __int8_t_defined #define __int8_t_defined typedef char int8_t; typedef short int16_t; typedef long int32_t; #endif #elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL == 444 /* 2:4:4 = LP32 = a 32-bit system derived from a 16-bit */ /* 4:4:4 = ILP32 = a normal 32-bit system */ typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; #ifndef __int8_t_defined #define __int8_t_defined typedef char int8_t; typedef short int16_t; typedef int int32_t; #endif #elif _STDINT_LONG_MODEL+0 == 484 || _STDINT_LONG_MODEL+0 == 488 /* 4:8:4 = IP32 = a 32-bit system prepared for 64-bit */ /* 4:8:8 = LP64 = a normal 64-bit system */ typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; #ifndef __int8_t_defined #define __int8_t_defined typedef char int8_t; typedef short int16_t; typedef int int32_t; #endif /* this system has a "long" of 64bit */ #ifndef _HAVE_UINT64_T #define _HAVE_UINT64_T typedef unsigned long uint64_t; typedef long int64_t; #endif #elif _STDINT_LONG_MODEL+0 == 448 /* LLP64 a 64-bit system derived from a 32-bit system */ typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; #ifndef __int8_t_defined #define __int8_t_defined typedef char int8_t; typedef short int16_t; typedef int int32_t; #endif /* assuming the system has a "long long" */ #ifndef _HAVE_UINT64_T #define _HAVE_UINT64_T #define _HAVE_LONGLONG_UINT64_T typedef unsigned long long uint64_t; typedef long long int64_t; #endif #else #define _STDINT_NO_INT32_T #endif #else #define _STDINT_NO_INT8_T #define _STDINT_NO_INT32_T #endif #endif /* * quote from SunOS-5.8 sys/inttypes.h: * Use at your own risk. As of February 1996, the committee is squarely * behind the fixed sized types; the "least" and "fast" types are still being * discussed. The probability that the "fast" types may be removed before * the standard is finalized is high enough that they are not currently * implemented. */ #if defined _STDINT_NEED_INT_LEAST_T typedef int8_t int_least8_t; typedef int16_t int_least16_t; typedef int32_t int_least32_t; #ifdef _HAVE_UINT64_T typedef int64_t int_least64_t; #endif typedef uint8_t uint_least8_t; typedef uint16_t uint_least16_t; typedef uint32_t uint_least32_t; #ifdef _HAVE_UINT64_T typedef uint64_t uint_least64_t; #endif /* least types */ #endif #if defined _STDINT_NEED_INT_FAST_T typedef int8_t int_fast8_t; typedef int int_fast16_t; typedef int32_t int_fast32_t; #ifdef _HAVE_UINT64_T typedef int64_t int_fast64_t; #endif typedef uint8_t uint_fast8_t; typedef unsigned uint_fast16_t; typedef uint32_t uint_fast32_t; #ifdef _HAVE_UINT64_T typedef uint64_t uint_fast64_t; #endif /* fast types */ #endif #ifdef _STDINT_NEED_INTMAX_T #ifdef _HAVE_UINT64_T typedef int64_t intmax_t; typedef uint64_t uintmax_t; #else typedef long intmax_t; typedef unsigned long uintmax_t; #endif #endif #ifdef _STDINT_NEED_INTPTR_T #ifndef __intptr_t_defined #define __intptr_t_defined /* we encourage using "long" to store pointer values, never use "int" ! */ #if _STDINT_LONG_MODEL+0 == 242 || _STDINT_LONG_MODEL+0 == 484 typedef unsigned int uintptr_t; typedef int intptr_t; #elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL+0 == 444 typedef unsigned long uintptr_t; typedef long intptr_t; #elif _STDINT_LONG_MODEL+0 == 448 && defined _HAVE_UINT64_T typedef uint64_t uintptr_t; typedef int64_t intptr_t; #else /* matches typical system types ILP32 and LP64 - but not IP16 or LLP64 */ typedef unsigned long uintptr_t; typedef long intptr_t; #endif #endif #endif /* The ISO C99 standard specifies that in C++ implementations these should only be defined if explicitly requested. */ #if !defined __cplusplus || defined __STDC_CONSTANT_MACROS #ifndef UINT32_C /* Signed. */ # define INT8_C(c) c # define INT16_C(c) c # define INT32_C(c) c # ifdef _HAVE_LONGLONG_UINT64_T # define INT64_C(c) c ## L # else # define INT64_C(c) c ## LL # endif /* Unsigned. */ # define UINT8_C(c) c ## U # define UINT16_C(c) c ## U # define UINT32_C(c) c ## U # ifdef _HAVE_LONGLONG_UINT64_T # define UINT64_C(c) c ## UL # else # define UINT64_C(c) c ## ULL # endif /* Maximal type. */ # ifdef _HAVE_LONGLONG_UINT64_T # define INTMAX_C(c) c ## L # define UINTMAX_C(c) c ## UL # else # define INTMAX_C(c) c ## LL # define UINTMAX_C(c) c ## ULL # endif /* literalnumbers */ #endif #endif /* These limits are merily those of a two complement byte-oriented system */ /* Minimum of signed integral types. */ # define INT8_MIN (-128) # define INT16_MIN (-32767-1) # define INT32_MIN (-2147483647-1) # define INT64_MIN (-__INT64_C(9223372036854775807)-1) /* Maximum of signed integral types. */ # define INT8_MAX (127) # define INT16_MAX (32767) # define INT32_MAX (2147483647) # define INT64_MAX (__INT64_C(9223372036854775807)) /* Maximum of unsigned integral types. */ # define UINT8_MAX (255) # define UINT16_MAX (65535) # define UINT32_MAX (4294967295U) # define UINT64_MAX (__UINT64_C(18446744073709551615)) /* Minimum of signed integral types having a minimum size. */ # define INT_LEAST8_MIN INT8_MIN # define INT_LEAST16_MIN INT16_MIN # define INT_LEAST32_MIN INT32_MIN # define INT_LEAST64_MIN INT64_MIN /* Maximum of signed integral types having a minimum size. */ # define INT_LEAST8_MAX INT8_MAX # define INT_LEAST16_MAX INT16_MAX # define INT_LEAST32_MAX INT32_MAX # define INT_LEAST64_MAX INT64_MAX /* Maximum of unsigned integral types having a minimum size. */ # define UINT_LEAST8_MAX UINT8_MAX # define UINT_LEAST16_MAX UINT16_MAX # define UINT_LEAST32_MAX UINT32_MAX # define UINT_LEAST64_MAX UINT64_MAX /* shortcircuit*/ #endif /* once */ #endif #endif STDINT_EOF fi if cmp -s $ac_stdint_h $ac_stdint 2>/dev/null; then AC_MSG_NOTICE([$ac_stdint_h is unchanged]) else ac_dir=`AS_DIRNAME(["$ac_stdint_h"])` AS_MKDIR_P(["$ac_dir"]) rm -f $ac_stdint_h mv $ac_stdint $ac_stdint_h fi ],[# variables for create stdint.h replacement PACKAGE="$PACKAGE" VERSION="$VERSION" ac_stdint_h="$ac_stdint_h" _ac_stdint_h=AS_TR_CPP(_$PACKAGE-$ac_stdint_h) ac_cv_stdint_message="$ac_cv_stdint_message" ac_cv_header_stdint_t="$ac_cv_header_stdint_t" ac_cv_header_stdint_x="$ac_cv_header_stdint_x" ac_cv_header_stdint_o="$ac_cv_header_stdint_o" ac_cv_header_stdint_u="$ac_cv_header_stdint_u" ac_cv_type_uint64_t="$ac_cv_type_uint64_t" ac_cv_type_u_int64_t="$ac_cv_type_u_int64_t" ac_cv_char_data_model="$ac_cv_char_data_model" ac_cv_long_data_model="$ac_cv_long_data_model" ac_cv_type_int_least32_t="$ac_cv_type_int_least32_t" ac_cv_type_int_fast32_t="$ac_cv_type_int_fast32_t" ac_cv_type_intmax_t="$ac_cv_type_intmax_t" ]) ]) fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/m4/ax_pthread.m4000066400000000000000000000330571503113465200243030ustar00rootroot00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_pthread.html # =========================================================================== # # SYNOPSIS # # AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro figures out how to build C programs using POSIX threads. It # sets the PTHREAD_LIBS output variable to the threads library and linker # flags, and the PTHREAD_CFLAGS output variable to any special C compiler # flags that are needed. (The user can also force certain compiler # flags/libs to be tested by setting these environment variables.) # # Also sets PTHREAD_CC to any special C compiler that is needed for # multi-threaded programs (defaults to the value of CC otherwise). (This # is necessary on AIX to use the special cc_r compiler alias.) # # NOTE: You are assumed to not only compile your program with these flags, # but also link it with them as well. e.g. you should link with # $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS # # If you are only building threads programs, you may wish to use these # variables in your default LIBS, CFLAGS, and CC: # # LIBS="$PTHREAD_LIBS $LIBS" # CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # CC="$PTHREAD_CC" # # In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant # has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name # (e.g. PTHREAD_CREATE_UNDETACHED on AIX). # # Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the # PTHREAD_PRIO_INHERIT symbol is defined when compiling with # PTHREAD_CFLAGS. # # ACTION-IF-FOUND is a list of shell commands to run if a threads library # is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it # is not found. If ACTION-IF-FOUND is not specified, the default action # will define HAVE_PTHREAD. # # Please let the authors know if this macro fails on any platform, or if # you have any other suggestions or comments. This macro was based on work # by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help # from M. Frigo), as well as ac_pthread and hb_pthread macros posted by # Alejandro Forero Cuervo to the autoconf macro repository. We are also # grateful for the helpful feedback of numerous users. # # Updated for Autoconf 2.68 by Daniel Richard G. # # LICENSE # # Copyright (c) 2008 Steven G. Johnson # Copyright (c) 2011 Daniel Richard G. # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 21 AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) AC_DEFUN([AX_PTHREAD], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_PUSH([C]) ax_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) AC_TRY_LINK_FUNC([pthread_join], [ax_pthread_ok=yes]) AC_MSG_RESULT([$ax_pthread_ok]) if test x"$ax_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # ... -mt is also the pthreads flag for HP/aCC # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case ${host_os} in solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthreads/-mt/ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags" ;; darwin*) ax_pthread_flags="-pthread $ax_pthread_flags" ;; netbsd*) # use libc stubs, don't link against libpthread, to allow # dynamic loading ax_pthread_flags="" ;; esac # Clang doesn't consider unrecognized options an error unless we specify # -Werror. We throw in some extra Clang-specific options to ensure that # this doesn't happen for GCC, which also accepts -Werror. AC_MSG_CHECKING([if compiler needs -Werror to reject unknown flags]) save_CFLAGS="$CFLAGS" ax_pthread_extra_flags="-Werror" CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int foo(void);],[foo()])], [AC_MSG_RESULT([yes])], [ax_pthread_extra_flags= AC_MSG_RESULT([no])]) CFLAGS="$save_CFLAGS" if test x"$ax_pthread_ok" = xno; then for flag in $ax_pthread_flags; do case $flag in none) AC_MSG_CHECKING([whether pthreads work without any flags]) ;; -*) AC_MSG_CHECKING([whether pthreads work with $flag]) PTHREAD_CFLAGS="$flag" ;; pthread-config) AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no]) if test x"$ax_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) AC_MSG_CHECKING([for the pthreads library -l$flag]) PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. AC_LINK_IFELSE([AC_LANG_PROGRAM([#include static void routine(void *a) { a = 0; } static void *start_routine(void *a) { return a; }], [pthread_t th; pthread_attr_t attr; pthread_create(&th, 0, start_routine, 0); pthread_join(th, 0); pthread_attr_init(&attr); pthread_cleanup_push(routine, 0); pthread_cleanup_pop(0) /* ; */])], [ax_pthread_ok=yes], []) LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" AC_MSG_RESULT([$ax_pthread_ok]) if test "x$ax_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$ax_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. AC_MSG_CHECKING([for joinable pthread attribute]) attr_name=unknown for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [int attr = $attr; return attr /* ; */])], [attr_name=$attr; break], []) done AC_MSG_RESULT([$attr_name]) if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], [$attr_name], [Define to necessary symbol if this constant uses a non-standard name on your system.]) fi AC_MSG_CHECKING([if more special flags are required for pthreads]) flag=no case ${host_os} in aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";; osf* | hpux*) flag="-D_REENTRANT";; solaris*) if test "$GCC" = "yes"; then flag="-D_REENTRANT" else # TODO: What about Clang on Solaris? flag="-mt -D_REENTRANT" fi ;; esac AC_MSG_RESULT([$flag]) if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], [ax_cv_PTHREAD_PRIO_INHERIT], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[int i = PTHREAD_PRIO_INHERIT;]])], [ax_cv_PTHREAD_PRIO_INHERIT=yes], [ax_cv_PTHREAD_PRIO_INHERIT=no]) ]) AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"], [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])]) LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: compile with *_r variant if test "x$GCC" != xyes; then case $host_os in aix*) AS_CASE(["x/$CC"], [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6], [#handle absolute path differently from PATH based program lookup AS_CASE(["x$CC"], [x/*], [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])], [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])]) ;; esac fi fi test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" AC_SUBST([PTHREAD_LIBS]) AC_SUBST([PTHREAD_CFLAGS]) AC_SUBST([PTHREAD_CC]) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$ax_pthread_ok" = xyes; then ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1]) : else ax_pthread_ok=no $2 fi AC_LANG_POP ])dnl AX_PTHREAD fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/m4/pkg.m4000066400000000000000000000171671503113465200227510ustar00rootroot00000000000000# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 1 (pkg-config-0.24) # # Copyright © 2004 Scott James Remnant . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) # only at the first occurence in configure.ac, so if the first place # it's called might be skipped (such as if it is within an "if", you # have to call PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])# PKG_CHECK_MODULES # PKG_INSTALLDIR(DIRECTORY) # ------------------------- # Substitutes the variable pkgconfigdir as the location where a module # should install pkg-config .pc files. By default the directory is # $libdir/pkgconfig, but the default can be changed by passing # DIRECTORY. The user can override through the --with-pkgconfigdir # parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ]) dnl PKG_INSTALLDIR # PKG_NOARCH_INSTALLDIR(DIRECTORY) # ------------------------- # Substitutes the variable noarch_pkgconfigdir as the location where a # module should install arch-independent pkg-config .pc files. By # default the directory is $datadir/pkgconfig, but the default can be # changed by passing DIRECTORY. The user can override through the # --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ]) dnl PKG_NOARCH_INSTALLDIR # PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, # [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ------------------------------------------- # Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])# PKG_CHECK_VAR fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/meson-cc-tests/000077500000000000000000000000001503113465200242365ustar00rootroot00000000000000flexible-array-member-test.c000066400000000000000000000004311503113465200314510ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/meson-cc-tests#include #include #include struct s { int n; double d[]; }; int main (void) { int m = getchar(); struct s *p = malloc (offsetof (struct s, d) + m * sizeof (double)); p->d[0] = 0.0; return p->d != (double *)NULL; } freetype-pcf-long-family-names.c000066400000000000000000000002651503113465200322340ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/meson-cc-tests#include #include FT_CONFIG_OPTIONS_H #ifndef PCF_CONFIG_OPTION_LONG_FAMILY_NAMES # error "No pcf long family names support" #endif int main (void) { return 0; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/meson-cc-tests/gperf.txt000066400000000000000000000000101503113465200260710ustar00rootroot00000000000000foo,bar intel-atomic-primitives-test.c000066400000000000000000000004471503113465200320630ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/meson-cc-testsvoid memory_barrier (void) { __sync_synchronize(); } int atomic_add (int *i) { return __sync_fetch_and_add (i, 1); } int mutex_trylock (int *m) { return __sync_lock_test_and_set (m, 1); } void mutex_unlock (int *m) { __sync_lock_release (m); } int main (void) { return 0; } pthread-prio-inherit-test.c000066400000000000000000000001331503113465200313330ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/meson-cc-tests#include int main (void) { int i = PTHREAD_PRIO_INHERIT; return 0; } solaris-atomic-operations.c000066400000000000000000000006121503113465200314310ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/meson-cc-tests#include /* This requires Solaris Studio 12.2 or newer: */ #include void memory_barrier (void) { __machine_rw_barrier(); } int atomic_add (volatile unsigned *i) { return atomic_add_int_nv (i, 1); } void * atomic_ptr_cmpxchg (volatile void **target, void *cmp, void *newval) { return atomic_cas_ptr (target, cmp, newval); } int main (void) { return 0; } stdatomic-primitives-test.c000066400000000000000000000007001503113465200314550ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/meson-cc-tests#include void memory_barrier (void) { atomic_thread_fence (memory_order_acq_rel); } int atomic_add (atomic_int *i) { return atomic_fetch_add_explicit (i, 1, memory_order_relaxed); } int mutex_trylock (atomic_flag *m) { return atomic_flag_test_and_set_explicit (m, memory_order_acquire); } void mutex_unlock (atomic_flag *m) { atomic_flag_clear_explicit (m, memory_order_release); } int main (void) { return 0; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/meson-config.h.in000066400000000000000000000002051503113465200245310ustar00rootroot00000000000000/* Copyright (C) 2025 fontconfig Authors */ /* SPDX-License-Identifier: HPND */ #include "meson-config.h" #include "config-fixups.h" fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/meson.build000066400000000000000000000441541503113465200235440ustar00rootroot00000000000000project('fontconfig', 'c', version: '2.17.1', meson_version : '>= 1.6.1', default_options: [ 'c_std=c11,c99', 'buildtype=debugoptimized', 'rust_std=2021', ] ) fs = import('fs') fc_version = meson.project_version() version_arr = fc_version.split('.') fc_version_major = version_arr[0].to_int() fc_version_minor = version_arr[1].to_int() fc_version_micro = version_arr[2].to_int() # Try and maintain compatibility with the previous libtool versioning # (this is a bit of a hack, but it should work fine for our case where # API is added, in which case LT_AGE and LIBT_CURRENT are both increased) soversion = fc_version_major - 1 curversion = fc_version_minor - 1 libversion = '@0@.@1@.0'.format(soversion, curversion) defversion = '@0@.@1@'.format(curversion, fc_version_micro) osxversion = curversion + 1 cacheversion = '9' freetype_req = '>= 21.0.15' freetype_req_cmake = '>= 2.8.1' cc = meson.get_compiler('c') math_dep = cc.find_library('m', required: false) conf = configuration_data() freetype_dep = dependency('freetype2', method: 'pkg-config', version: freetype_req, required: false) # Give another shot using CMake if not freetype_dep.found() freetype_dep = dependency('freetype', method: 'cmake', version: freetype_req_cmake, fallback: ['freetype2', 'freetype_dep'], default_options: 'werror=false') endif if freetype_dep.type_name() == 'internal' conf.set('FREETYPE_PCF_LONG_FAMILY_NAMES', false) else if cc.compiles(files('meson-cc-tests/freetype-pcf-long-family-names.c'), dependencies: freetype_dep) conf.set('FREETYPE_PCF_LONG_FAMILY_NAMES', true) else conf.set('FREETYPE_PCF_LONG_FAMILY_NAMES', false) endif endif jsonc_dep = dependency('json-c', required: false) xml_dep = dependency('', required: false) xmlbackend = get_option('xml-backend') xmltype = '' if xmlbackend == 'auto' or xmlbackend == 'expat' # Linking expat should not be so difficult... see: https://github.com/mesonbuild/meson/issues/10516 xml_dep = dependency('expat', required: false) if not xml_dep.found() xml_dep = cc.find_library('expat', required : false) if not xml_dep.found() and xmlbackend == 'expat' xml_dep = dependency('expat', method: 'system', required: true, fallback: ['expat', 'expat_dep']) else xmltype = 'expat' endif endif endif if (xmlbackend == 'auto' and not xml_dep.found()) or xmlbackend == 'libxml2' xml_dep = dependency('libxml-2.0', required: true) conf.set('ENABLE_LIBXML2', 1) endif if xmltype == '' xmltype = xml_dep.name() endif fontations = get_option('fontations') if (fontations.enabled()) conf.set('ENABLE_FONTATIONS', 1) add_languages(['rust'], native: false, required : true) endif pkgmod = import('pkgconfig') python3 = import('python').find_installation() pytest = find_program('pytest', required: false) check_headers = [ ['dirent.h'], ['dlfcn.h'], ['fcntl.h'], ['inttypes.h'], ['stdint.h'], ['stdio.h'], ['stdlib.h'], ['strings.h'], ['string.h'], ['unistd.h'], ['sys/statvfs.h'], ['sys/vfs.h'], ['sys/statfs.h'], ['sys/stat.h'], ['sys/types.h'], ['sys/param.h'], ['sys/mount.h'], ['time.h'], ['wchar.h'], ] check_funcs = [ ['link'], ['mkstemp'], ['mkostemp'], ['_mktemp_s'], ['mkdtemp'], ['getopt'], ['getopt_long'], ['getprogname'], ['getexecname'], ['rand'], ['random'], ['lrand48'], ['random_r'], ['rand_r'], ['readlink'], ['fstatvfs'], ['fstatfs'], ['lstat'], ['strerror'], ['strerror_r'], ['mmap'], ['vprintf'], ['vsnprintf'], ['vsprintf'], ['getpagesize'], ['getpid'], ['dcgettext'], ['gettext'], ['localtime_r'], ] check_freetype_funcs = [ ['FT_Get_BDF_Property', {'dependencies': freetype_dep}], ['FT_Get_PS_Font_Info', {'dependencies': freetype_dep}], ['FT_Has_PS_Glyph_Names', {'dependencies': freetype_dep}], ['FT_Get_X11_Font_Format', {'dependencies': freetype_dep}], ['FT_Done_MM_Var', {'dependencies': freetype_dep}], ] check_header_symbols = [ ['posix_fadvise', 'fcntl.h'] ] check_struct_members = [ ['struct statvfs', 'f_basetype', ['sys/statvfs.h']], ['struct statvfs', 'f_fstypename', ['sys/statvfs.h']], ['struct statfs', 'f_flags', ['sys/vfs.h', 'sys/statfs.h', 'sys/param.h', 'sys/mount.h']], ['struct statfs', 'f_fstypename', ['sys/vfs.h', 'sys/statfs.h', 'sys/param.h', 'sys/mount.h']], ['struct stat', 'st_mtim', ['sys/stat.h']], ['struct dirent', 'd_type', ['sys/types.h', 'dirent.h']], ] check_sizeofs = [ ['void *', {'conf-name': 'SIZEOF_VOID_P'}], ] check_alignofs = [ ['void *', {'conf-name': 'ALIGNOF_VOID_P'}], ['double'], ] add_project_arguments('-DHAVE_CONFIG_H', language: 'c') c_args = [] deps = [freetype_dep, xml_dep] incbase = include_directories('.', 'fc-lang') # For compatibility to autoconf (regardless of the usage in fontconfig) conf.set_quoted('PACKAGE_NAME', meson.project_name()) conf.set_quoted('PACKAGE_TARNAME', meson.project_name()) conf.set_quoted('PACKAGE_VERSION', meson.project_version()) conf.set_quoted('PACKAGE_STRING', '@0@ @1@'.format(meson.project_name(), meson.project_version())) conf.set_quoted('PACKAGE_BUGREPORT', 'https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/new') conf.set_quoted('PACKAGE_URL', '') conf.set('WORDS_BIGENDIAN', (host_machine.endian() == 'big').to_int()) if host_machine.system() == 'windows' conf.set('EXEEXT', '.exe') else conf.set('EXEEXT', '') endif i18n = import('i18n') gettext_args = [ '--msgid-bugs-address=@0@'.format(conf.get('PACKAGE_BUGREPORT')) ] # Check for libintl.h opt_nls = get_option('nls') libintl_dep = dependency('intl', required: opt_nls, fallback: ['libintl', 'libintl_dep']) if libintl_dep.found() conf.set('ENABLE_NLS', opt_nls.allowed().to_int()) deps += [libintl_dep] else opt_nls = opt_nls.require(false) endif # Check iconv support iconv = get_option('iconv') iconv_dep = dependency('', required: false) found_iconv = 0 if iconv.allowed() iconv_dep = cc.find_library('iconv', required: false) if cc.has_header_symbol('iconv.h', 'libiconv_open', dependencies: libintl_dep) conf.set('LIBICONV_PLUG', 1) found_iconv = 1 elif cc.has_header('iconv.h') and cc.has_function('iconv_open', dependencies: iconv_dep) found_iconv = 1 else iconv.require(false) endif endif conf.set('USE_ICONV', found_iconv) deps += [iconv_dep] # We cannot try compiling against an internal dependency if freetype_dep.type_name() == 'internal' foreach func: check_freetype_funcs name = func[0] conf.set('HAVE_@0@'.format(name.to_upper()), 1) endforeach else check_funcs += check_freetype_funcs endif foreach check : check_headers name = check[0] if cc.has_header(name) conf.set('HAVE_@0@'.format(name.to_upper().underscorify()), 1) endif endforeach foreach check : check_funcs name = check[0] opts = check.length() > 1 ? check[1] : {} extra_deps = opts.get('dependencies', []) if cc.has_function(name, dependencies: extra_deps) conf.set('HAVE_@0@'.format(name.to_upper()), 1) endif endforeach foreach check : check_header_symbols name = check[0] header = check[1] if cc.has_header_symbol(header, name) conf.set('HAVE_@0@'.format(name.to_upper()), 1) endif endforeach foreach check : check_struct_members struct_name = check[0] member_name = check[1] headers = check[2] prefix = '' foreach header : headers prefix += '#include <@0@>\n'.format(header) endforeach if cc.has_member(struct_name, member_name, prefix: prefix) conf.set('HAVE_@0@_@1@'.format(struct_name, member_name).to_upper().underscorify(), 1) endif endforeach foreach check : check_sizeofs type = check[0] opts = check.length() > 1 ? check[1] : {} conf_name = opts.get('conf-name', 'SIZEOF_@0@'.format(type.to_upper())) conf.set(conf_name, cc.sizeof(type)) endforeach foreach check : check_alignofs type = check[0] opts = check.length() > 1 ? check[1] : {} conf_name = opts.get('conf-name', 'ALIGNOF_@0@'.format(type.to_upper())) conf.set(conf_name, cc.alignment(type)) endforeach if cc.compiles(files('meson-cc-tests/flexible-array-member-test.c')) conf.set('FLEXIBLE_ARRAY_MEMBER', '/**/') else conf.set('FLEXIBLE_ARRAY_MEMBER', 1) endif if cc.compiles(files('meson-cc-tests/pthread-prio-inherit-test.c')) conf.set('HAVE_PTHREAD_PRIO_INHERIT', 1) endif if cc.links(files('meson-cc-tests/stdatomic-primitives-test.c'), name: 'stdatomic.h atomics') conf.set('HAVE_STDATOMIC_PRIMITIVES', 1) endif if cc.links(files('meson-cc-tests/intel-atomic-primitives-test.c'), name: 'Intel atomics') conf.set('HAVE_INTEL_ATOMIC_PRIMITIVES', 1) endif if cc.links(files('meson-cc-tests/solaris-atomic-operations.c'), name: 'Solaris atomic ops') conf.set('HAVE_SOLARIS_ATOMIC_OPS', 1) endif prefix = get_option('prefix') fonts_conf = configuration_data() default_fonts_dirs = get_option('default-fonts-dirs') if default_fonts_dirs == ['yes'] if host_machine.system() == 'windows' fc_fonts_paths = ['WINDOWSFONTDIR', 'WINDOWSUSERFONTDIR'] elif host_machine.system() == 'darwin' fc_fonts_paths = ['/System/Library/Fonts', '/Library/Fonts', '~/Library/Fonts', '/System/Library/Assets/com_apple_MobileAsset_Font3', '/System/Library/Assets/com_apple_MobileAsset_Font4'] elif host_machine.system() == 'android' fc_fonts_paths = ['/system/fonts/', '/product/fonts/'] else fc_fonts_paths = ['/usr/share/fonts', '/usr/local/share/fonts'] endif else fc_fonts_paths = default_fonts_dirs endif xml_path = '' escaped_xml_path = '' foreach p : fc_fonts_paths s = '\t' + p + '\n' xml_path += s # No substitution method for string s = '\\t' + p + '\\n' escaped_xml_path += s endforeach conf.set_quoted('FC_DEFAULT_FONTS', escaped_xml_path) fonts_conf.set('FC_DEFAULT_FONTS', xml_path) # Add more fonts if available. By default, add only the directories # with outline fonts; those with bitmaps can be added as desired in # local.conf or ~/.fonts.conf fc_add_fonts = [] additional_fonts_dirs = get_option('additional-fonts-dirs') if additional_fonts_dirs == ['yes'] fs = import('fs') foreach dir : ['/usr/X11R6/lib/X11', '/usr/X11/lib/X11', '/usr/lib/X11'] if fs.is_dir(dir / 'fonts') fc_add_fonts += [dir / 'fonts'] endif endforeach elif additional_fonts_dirs == ['no'] # nothing to do else fc_add_fonts = additional_fonts_dirs endif xml_path = '' escaped_xml_path = '' foreach p : fc_add_fonts s = '' + p + '\n\t' xml_path += s # No substitution method for string s = '' + p + '\\n\\t' escaped_xml_path += s endforeach conf.set_quoted('FC_FONTPATH', escaped_xml_path) fonts_conf.set('FC_FONTPATH', xml_path) fc_cachedir = get_option('cache-dir') if fc_cachedir in ['yes', 'no', 'default'] if host_machine.system() == 'windows' fc_cachedir = 'LOCAL_APPDATA_FONTCONFIG_CACHE' else fc_cachedir = join_paths(prefix, get_option('localstatedir'), 'cache', meson.project_name()) endif endif if host_machine.system() != 'windows' thread_dep = dependency('threads') if thread_dep.found() and cc.has_header('pthread.h') conf.set('HAVE_PTHREAD', 1) deps += [thread_dep] endif endif fc_templatedir = get_option('template-dir') if fc_templatedir in ['default', 'yes', 'no'] fc_templatedir = prefix / get_option('datadir') / 'fontconfig/conf.avail' endif fc_baseconfigdir = get_option('baseconfig-dir') if fc_baseconfigdir in ['default', 'yes', 'no'] fc_baseconfigdir = prefix / get_option('sysconfdir') / 'fonts' endif fc_configdir = get_option('config-dir') if fc_configdir in ['default', 'yes', 'no'] fc_configdir = fc_baseconfigdir / 'conf.d' endif fc_xmldir = get_option('xml-dir') if fc_xmldir in ['default', 'yes', 'no'] fc_xmldir = prefix / get_option('datadir') / 'xml/fontconfig' endif conf.set_quoted('CONFIGDIR', fc_configdir) conf.set_quoted('FC_CACHEDIR', fc_cachedir) conf.set_quoted('FC_TEMPLATEDIR', fc_templatedir) conf.set_quoted('FONTCONFIG_PATH', fc_baseconfigdir) fonts_conf.set('FC_CACHEDIR', fc_cachedir) fonts_conf.set('CONFIGDIR', fc_configdir) # strip off fc_baseconfigdir prefix if that is the prefix if fc_configdir.startswith(fc_baseconfigdir + '/') fonts_conf.set('CONFIGDIR', fc_configdir.split(fc_baseconfigdir + '/')[1]) endif gperf = find_program('gperf', required: false) gperf_len_type = '' if gperf.found() and get_option('wrap_mode') != 'forcefallback' gperf_test_format = ''' #include const char * in_word_set(const char *, @0@); @1@ ''' gperf_snippet = run_command(gperf, '-L', 'ANSI-C', files('meson-cc-tests/gperf.txt'), check: true).stdout() foreach type : ['size_t', 'unsigned'] if cc.compiles(gperf_test_format.format(type, gperf_snippet)) gperf_len_type = type break endif endforeach if gperf_len_type == '' error('unable to determine gperf len type') endif else # Fallback to subproject gperf = find_program('gperf') # assume if we are compiling from the wrap, the size is just size_t gperf_len_type = 'size_t' endif message('gperf len type is @0@'.format(gperf_len_type)) conf.set('FC_GPERF_SIZE_T', gperf_len_type, description : 'The type of gperf "len" parameter') conf.set('_GNU_SOURCE', true) conf.set_quoted('GETTEXT_PACKAGE', meson.project_name()) incsrc = include_directories('src') # We assume stdint.h is available foreach t : ['uint64_t', 'int32_t', 'uintptr_t', 'intptr_t'] if not cc.has_type(t, prefix: '#include ') error('Sanity check failed: type @0@ not provided via stdint.h'.format(t)) endif endforeach fcstdint_h = fs.copyfile('src/fcstdint.h.in', 'fcstdint.h') makealias = files('src/makealias.py')[0] subdir('fontconfig') alias_input_headers = [fontconfig_h, 'src/fcdeprecate.h', 'fontconfig/fcprivate.h'] if get_option('fontations').enabled() alias_input_headers += ['fontconfig/fcfontations.h'] endif alias_headers = custom_target('alias_headers', output: ['fcalias.h', 'fcaliastail.h'], input: alias_input_headers, command: [python3, makealias, join_paths(meson.current_source_dir(), 'src'), '@OUTPUT@', '@INPUT@'], ) ft_alias_headers = custom_target('ft_alias_headers', output: ['fcftalias.h', 'fcftaliastail.h'], input: ['fontconfig/fcfreetype.h'], command: [python3, makealias, join_paths(meson.current_source_dir(), 'src'), '@OUTPUT@', '@INPUT@'] ) tools_man_pages = [] # Do not reorder subdir('fc-case') subdir('fc-lang') subdir('src') if get_option('fontations').enabled() subdir('fc-fontations') lib_fontconfig_kwargs = lib_fontconfig_kwargs + { 'link_with' : lib_fontconfig_kwargs['link_with'] + [fc_fontations, fontations_query_lib]} endif libfontconfig = library('fontconfig', lib_fontconfig_sources, c_shared_args: win_export_args, soversion: soversion, version: libversion, darwin_versions: osxversion, install: true, kwargs: lib_fontconfig_kwargs) if get_option('default_library') == 'both' libfontconfig_internal = libfontconfig.get_static_lib() elif get_option('default_library') == 'static' libfontconfig_internal = libfontconfig else libfontconfig_internal = static_library('fontconfig', lib_fontconfig_sources, kwargs: lib_fontconfig_kwargs) endif fontconfig_dep = declare_dependency(link_with: libfontconfig, include_directories: incbase, dependencies: deps, ) pkgmod.generate(libfontconfig, description: 'Font configuration and customization library', filebase: 'fontconfig', name: 'Fontconfig', requires_private: ['freetype2 ' + freetype_req], version: fc_version, variables: [ 'sysconfdir=@0@'.format(join_paths(prefix, get_option('sysconfdir'))), 'localstatedir=@0@'.format(join_paths(prefix, get_option('localstatedir'))), 'confdir=@0@'.format(fc_baseconfigdir), 'cachedir=@0@'.format(fc_cachedir), ]) if not get_option('tools').disabled() subdir('fc-cache') subdir('fc-cat') subdir('fc-conflist') subdir('fc-list') subdir('fc-match') subdir('fc-pattern') subdir('fc-query') subdir('fc-scan') subdir('fc-validate') endif if not get_option('tests').disabled() subdir('test') endif subdir('conf.d') subdir('its') # xgettext is optional (on Windows for instance) if find_program('xgettext', required : opt_nls).found() subdir('po') subdir('po-conf') endif if not get_option('doc').disabled() subdir('doc') endif configure_file(output: 'meson-config.h', configuration: conf) configure_file(input: 'meson-config.h.in', output: 'config.h', copy: true) configure_file(output: 'fonts.conf', input: 'fonts.conf.in', configuration: fonts_conf, install_dir: fc_baseconfigdir, install: true, install_tag: 'runtime') install_data('fonts.dtd', install_dir: join_paths(get_option('prefix'), get_option('datadir'), 'xml/fontconfig'), install_tag: 'runtime') fc_headers = [ fontconfig_h, 'fontconfig/fcfreetype.h', 'fontconfig/fcprivate.h', ] install_headers(fc_headers, subdir: meson.project_name()) if not meson.is_subproject() meson.add_dist_script('build-aux/meson-dist-docs.py') meson.add_dist_script('build-aux/meson-dist-autotools.py') endif if host_machine.system() != 'windows' install_emptydir(fc_cachedir, install_tag: 'runtime') endif # Summary doc_targets = get_variable('doc_targets', []) summary({ 'Documentation': (doc_targets.length() > 0 ? doc_targets : false), 'NLS': not opt_nls.disabled(), 'Tests': not get_option('tests').disabled(), 'Pytest': pytest.found(), 'Tools': not get_option('tools').disabled(), 'iconv': found_iconv == 1, 'XML backend': xmltype, 'Fontations support' : fontations }, section: 'General', bool_yn: true, list_sep: ', ') summary({ 'Hinting': preferred_hinting, 'Sub Pixel Rendering': preferred_sub_pixel_rendering, 'Bitmap': preferred_bitmap, 'Font directories': fc_fonts_paths, 'Additional font directories': fc_add_fonts, }, section: 'Defaults', bool_yn: true, list_sep: ', ') summary({ 'Cache directory': fc_cachedir, 'Template directory': fc_templatedir, 'Base config directory': fc_baseconfigdir, 'Config directory': fc_configdir, 'XML directory': fc_xmldir, }, section: 'Paths', bool_yn: true, list_sep: ', ') fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/meson.options000066400000000000000000000054321503113465200241340ustar00rootroot00000000000000# Common feature options option('doc', type : 'feature', value : 'auto', yield: true, description: 'Build documentation') option('doc-txt', type: 'feature', value: 'auto') option('doc-man', type: 'feature', value: 'auto') option('doc-pdf', type: 'feature', value: 'auto') option('doc-html', type: 'feature', value: 'auto') option('nls', type : 'feature', value : 'auto', yield: true, description : 'Enable native language support (translations)') option('tests', type : 'feature', value : 'auto', yield : true, description: 'Enable unit tests') option('tools', type : 'feature', value : 'auto', yield : true, description: 'Build command-line tools (fc-list, fc-query, etc.)') option('cache-build', type : 'feature', value : 'enabled', description: 'Run fc-cache on install') option('iconv', type: 'feature', value: 'disabled') option('xml-backend', type: 'combo', choices: ['auto', 'expat', 'libxml2'], value: 'auto', description: 'Select xml backend to read config') option('fontations', type: 'feature', value: 'disabled', description: 'Use Fontations (https://github.com/googlefonts/fontations) for indexing.') # Defaults option('default-hinting', type: 'combo', choices: ['noinstall', 'none', 'slight', 'medium', 'full'], value: 'slight', description: 'Preferred hinting configuration') option('default-sub-pixel-rendering', type: 'combo', choices: ['noinstall', 'none', 'bgr', 'rgb', 'vbgr', 'vrgb'], value: 'none', description: 'Preferred sub-pixel rendering configuration') option('bitmap-conf', type: 'combo', choices: ['noinstall', 'yes', 'no', 'no-except-emoji'], value: 'no-except-emoji', description: 'What bitmap font related config file enabled by default: See 70-*bitmaps*.conf') option('default-fonts-dirs', type: 'array', value: ['yes'], description: 'Use fonts from DIR1,DIR2,... when config is busted (set to "yes" for generic system-specific defaults)') option('additional-fonts-dirs', type: 'array', value: ['yes'], description: 'Find additional fonts in DIR1,DIR2,... (set to "yes" for generic system-specific defaults)') # Configuration paths option('cache-dir', type: 'string', value: 'default', description: 'Use DIR to store cache files (default=LOCALSTATEDIR/cache/fontconfig)') option('template-dir', type: 'string', value: 'default', description: 'Use DIR to store the configuration template files (default=DATADIR/fontconfig/conf.avail)') option('baseconfig-dir', type: 'string', value: 'default', description: 'Use DIR to store the base configuration files (default=SYSCONFDIR/fonts)') option('config-dir', type: 'string', value: 'default', description: 'Use DIR to store active configuration files (default=BASECONFIGDIR/conf.d)') option('xml-dir', type: 'string', value: 'default', description: 'Use DIR to store XML schema files (default=DATADIR/xml/fontconfig)') fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/new-version.sh000066400000000000000000000065001503113465200242030ustar00rootroot00000000000000#!/bin/sh # fontconfig/new-version.sh # # Copyright © 2000 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. if [ "x`git status -s -uno`" != "x" ]; then echo 'Uncommited changes in repository' 1>&2 exit 1 fi version="$1" case "$version" in 2.[0-9.]*) ;; *) echo 'Invalid version number:' "$version" 1>&2 exit 1 ;; esac eval `echo $version | awk -F. '{ printf ("major=%d\nminor=%d\nrevision=%d\n", $1, $2, $3); }'` # Update the version numbers sed -i configure.ac -e "/^AC_INIT(/s/2\.[0-9.]*/$version/" sed -i fontconfig/fontconfig.h.in \ -e "/^#define FC_MAJOR/s/[0-9][0-9]*/$major/" \ -e "/^#define FC_MINOR/s/[0-9][0-9]*/$minor/" \ -e "/^#define FC_REVISION/s/[0-9][0-9]*/$revision/" sed -i meson.build -e "/version: /s/2\.[0-9.]*/$version/" # # Compute pretty form of new version number # version_note=`echo $version | awk -F. '{ if ($3 > 90) printf ("%d.%d.%d (%d.%d RC%d)\n", $1, $2, $3, $1, $2 + 1, $3 - 90); else if ($3 == 0) printf ("%d.%d\n", $1, $2); else printf ("%d.%d.%d\n", $1, $2, $3); }'` # # Find previous version in NEWS # last_note=`grep '^2\.[0-9.]*' NEWS | head -1 | sed 's/ (2\.[0-9]* RC[0-9]*)//'` case $last_note in 2.*.*) last=$last_note ;; 2.*) last="$last_note.0" ;; *) echo 'cannot find previous changelog' 1>&2 exit 1 esac # # Format the current date for the NEWS header # date=`date '+%Y-%m-%d'` # # Update the readme file # if [ $version != $last ]; then # # header # (sed '/^2\.[0-9.]*/,$d' NEWS | sed -r -e "s/Version.*/Version $version_note/" \ -e "s/[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/$date/" | awk ' /^[ \t]/ { gsub ("^[ \t]*", ""); gsub ("[ \t]*$", ""); space=(70 - length) / 2; for (i = 0; i < space; i++) printf (" "); print next } { print }' # # changelog # echo $version_note echo git log --no-merges --pretty=short $last.. | git shortlog | cat # # previous changelogs # sed -n '/^2\.[0-9.]*/,$p' NEWS) > NEWS.tmp || (echo "NEWS update failed"; exit 1) mv NEWS.tmp NEWS fi $test git commit -m"Bump version to $version" \ configure.ac \ fontconfig/fontconfig.h.in \ meson.build \ NEWS # tag the tree $test git tag -s -m "Version $version" $version # Make distributed change log git log --stat $last.. > ChangeLog-$version fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/po-conf/000077500000000000000000000000001503113465200227335ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/po-conf/ChangeLog000066400000000000000000000007361503113465200245130ustar00rootroot000000000000002015-01-28 gettextize * Makefile.in.in: New file, from gettext-0.19.4. * Rules-quot: New file, from gettext-0.19.4. * boldquot.sed: New file, from gettext-0.19.4. * en@boldquot.header: New file, from gettext-0.19.4. * en@quot.header: New file, from gettext-0.19.4. * insert-header.sin: New file, from gettext-0.19.4. * quot.sed: New file, from gettext-0.19.4. * remove-potcdate.sin: New file, from gettext-0.19.4. * POTFILES.in: New file. fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/po-conf/LINGUAS000066400000000000000000000000701503113465200237550ustar00rootroot00000000000000# Please keep this list sorted alphabetically. ka zh_CN fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/po-conf/Makevars000066400000000000000000000066601503113465200244370ustar00rootroot00000000000000# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE)-conf # These two variables depend on the location of this directory. subdir = po-conf top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Fontconfig Author(s) # This tells whether or not to prepend "GNU " prefix to the package # name that gets inserted into the header of the $(DOMAIN).pot file. # Possible values are "yes", "no", or empty. If it is empty, try to # detect it automatically by scanning the files in $(top_srcdir) for # "GNU packagename" string. PACKAGE_GNU = no # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/new # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = # This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt' # context. Possible values are "yes" and "no". Set this to yes if the # package uses functions taking also a message context, like pgettext(), or # if in $(XGETTEXT_OPTIONS) you define keywords with a context argument. USE_MSGCTXT = no # These options get passed to msgmerge. # Useful options are in particular: # --previous to keep previous msgids of translated messages, # --quiet to reduce the verbosity. MSGMERGE_OPTIONS = # These options get passed to msginit. # If you want to disable line wrapping when writing PO files, add # --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and # MSGINIT_OPTIONS. MSGINIT_OPTIONS = # This tells whether or not to regenerate a PO file when $(DOMAIN).pot # has changed. Possible values are "yes" and "no". Set this to no if # the POT file is checked in the repository and the version control # program ignores timestamps. PO_DEPENDS_ON_POT = yes # This tells whether or not to forcibly update $(DOMAIN).pot and # regenerate PO files on "make dist". Possible values are "yes" and # "no". Set this to no if the POT file and PO files are maintained # externally. DIST_DEPENDS_ON_UPDATE_PO = yes $(DOMAIN).pot-update: export GETTEXTDATADIR = $(top_srcdir) fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/po-conf/POTFILES.in000066400000000000000000000020101503113465200245010ustar00rootroot00000000000000conf.d/09-autohint-if-no-hinting.conf conf.d/10-autohint.conf conf.d/10-hinting-full.conf conf.d/10-hinting-medium.conf conf.d/10-hinting-none.conf conf.d/10-hinting-slight.conf conf.d/10-no-antialias.conf conf.d/10-scale-bitmap-fonts.conf conf.d/10-sub-pixel-bgr.conf conf.d/10-sub-pixel-none.conf conf.d/10-sub-pixel-rgb.conf conf.d/10-sub-pixel-vbgr.conf conf.d/10-sub-pixel-vrgb.conf conf.d/10-unhinted.conf conf.d/10-yes-antialias.conf conf.d/11-lcdfilter-default.conf conf.d/11-lcdfilter-legacy.conf conf.d/11-lcdfilter-light.conf conf.d/20-unhint-small-vera.conf conf.d/25-unhint-nonlatin.conf conf.d/30-metric-aliases.conf conf.d/40-nonlatin.conf conf.d/45-generic.conf conf.d/45-latin.conf conf.d/48-spacing.conf conf.d/49-sansserif.conf conf.d/50-user.conf conf.d/51-local.conf conf.d/60-generic.conf conf.d/60-latin.conf conf.d/65-fonts-persian.conf conf.d/65-khmer.conf conf.d/65-nonlatin.conf conf.d/69-unifont.conf conf.d/70-no-bitmaps.conf conf.d/70-yes-bitmaps.conf conf.d/80-delicious.conf conf.d/90-synthetic.conf fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/po-conf/ka.po000066400000000000000000000145761503113465200237030ustar00rootroot00000000000000# fontconfig-conf translation to Georgian. # Copyright (C) 2022 Fontconfig Author(s) # This file is distributed under the same license as the fontconfig package. # Temuri Doghonadze , 2022. # msgid "" msgstr "" "Project-Id-Version: fontconfig 2.14.0\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/fontconfig/fontconfig/" "issues/new\n" "POT-Creation-Date: 2022-10-01 10:16+0200\n" "PO-Revision-Date: 2022-10-01 11:01+0200\n" "Last-Translator: Temuri Doghonadze \n" "Language-Team: Georgian <(nothing)>\n" "Language: ka\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.1.1\n" #: conf.d/10-autohint.conf:4 msgid "Enable autohinter" msgstr "autohinter-ის ჩართვა" #: conf.d/10-hinting-full.conf:4 msgid "Set hintfull to hintstyle" msgstr "hintstyle-ის hintfull -ზე დაყენება" #: conf.d/10-hinting-medium.conf:4 msgid "Set hintmedium to hintstyle" msgstr "hintstyle-ის hintmedium-ზე დაყენება" #: conf.d/10-hinting-none.conf:4 msgid "Set hintnone to hintstyle" msgstr "hintstyle-ის hintnone-ზე დაყენება" #: conf.d/10-hinting-slight.conf:4 msgid "Set hintslight to hintstyle" msgstr "hintstyle-ის hintslight-ზე დაყენება" #: conf.d/10-no-sub-pixel.conf:4 msgid "Disable sub-pixel rendering" msgstr "ქვეპიქსელის რენდერის გამორთვა" #: conf.d/10-scale-bitmap-fonts.conf:4 msgid "Bitmap scaling" msgstr "ბიტური რუკის მასშტაბირება" #: conf.d/10-sub-pixel-bgr.conf:4 msgid "Enable sub-pixel rendering with the BGR stripes layout" msgstr "ქვეპიქსელების რენდერის ჩართვა BGR ზოლების განლაგებით" #: conf.d/10-sub-pixel-rgb.conf:4 msgid "Enable sub-pixel rendering with the RGB stripes layout" msgstr "ქვეპიქსელების რენდერის ჩართვა RGB ზოლების განლაგებით" #: conf.d/10-sub-pixel-vbgr.conf:4 msgid "Enable sub-pixel rendering with the vertical BGR stripes layout" msgstr "ქვეპიქსელების რენდერის ჩართვა ვერტიკალური BGR ზოლების განლაგებით" #: conf.d/10-sub-pixel-vrgb.conf:4 msgid "Enable sub-pixel rendering with the vertical RGB stripes layout" msgstr "ქვეპიქსელების რენდერის ჩართვა ვერტიკალური RGB ზოლების განლაგებით" #: conf.d/10-unhinted.conf:4 msgid "Disable hinting" msgstr "მომრგვალების გამორთვა" #: conf.d/11-lcdfilter-default.conf:4 msgid "Use lcddefault as default for LCD filter" msgstr "ნაგულისხმებ LCD ფილტრად lcddefault -ის გამოყენება" #: conf.d/11-lcdfilter-legacy.conf:4 msgid "Use lcdlegacy as default for LCD filter" msgstr "ნაგულისხმებ LCD ფილტრად lcdlegacy -ის გამოყენება" #: conf.d/11-lcdfilter-light.conf:4 msgid "Use lcdlight as default for LCD filter" msgstr "ნაგულისხმებ LCD ფილტრად lcdlight -ის გამოყენება" #: conf.d/20-unhint-small-vera.conf:4 msgid "" "Disable hinting for Bitstream Vera fonts when the size is less than 8ppem" msgstr "" "მომრგვალების გამორთვა Bitsream Vera-ის ფონტებისთვის, როცა ზომა 8ppem-ზე " "მცირეა" #: conf.d/25-unhint-nonlatin.conf:4 msgid "Disable hinting for CJK fonts" msgstr "CJK ფონტების მომრგვალების გამორთვა" #: conf.d/30-metric-aliases.conf:4 msgid "Set substitutions for similar/metric-compatible families" msgstr "მსგავსი/მეტრულთან-თავსებადი ოჯახების ჩანაცვლებების დაყენება" #: conf.d/40-nonlatin.conf:4 msgid "Set substitutions for non-Latin fonts" msgstr "არა-Latn ფონტების ჩანაცვლებების დაყენება" #: conf.d/45-generic.conf:4 msgid "Set substitutions for emoji/math fonts" msgstr "ემოჯი/მათემატიკური ფონტების ჩანაცვლებების დაყენება" #: conf.d/45-latin.conf:4 msgid "Set substitutions for Latin fonts" msgstr "Latin ფონტების ჩამნაცვლებლების დაყენება" #: conf.d/49-sansserif.conf:4 msgid "Add sans-serif to the family when no generic name" msgstr "როცა ზოგადი სახელი არ არსებობს, ოჯახისთვის sans-serif-ის დამატება" #: conf.d/50-user.conf:4 msgid "Load per-user customization files" msgstr "მომხმარებლების საკუთარი კონფიგურაციის ფაილების ჩატვირთვა" #: conf.d/51-local.conf:4 msgid "Load local customization file" msgstr "ლოკალური კონფიგურაციის ფაილის ჩაატვირთვა" #: conf.d/60-generic.conf:4 msgid "Set preferable fonts for emoji/math fonts" msgstr "ემოჯი/მათემატიკური ფონტებისთვის უმჯობესი ფონტების დაყენება" #: conf.d/60-latin.conf:4 msgid "Set preferable fonts for Latin" msgstr "Latin-სთვის უმჯობესი ფონტების დაყენება" #: conf.d/65-nonlatin.conf:4 msgid "Set preferable fonts for non-Latin" msgstr "არა-Latin-სთვის უმჯობესი ფონტების დაყენება" #: conf.d/70-no-bitmaps.conf:4 msgid "Reject bitmap fonts" msgstr "ბიტური რუკების ფონტების უარყოფა" #: conf.d/70-yes-bitmaps.conf:4 msgid "Accept bitmap fonts" msgstr "ბიტური რუკების ფონტების მიღება" fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/po-conf/meson.build000066400000000000000000000001671503113465200251010ustar00rootroot00000000000000i18n.gettext(meson.project_name() + '-conf', args: gettext_args + ['--directory=' + meson.project_source_root()] ) fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/po-conf/zh_CN.po000066400000000000000000000105301503113465200242730ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Fontconfig Author(s) # This file is distributed under the same license as the fontconfig package. # # Dingyuan Wang , 2018. # Mingcong Bai , 2018. # Mingye Wang , 2018. # msgid "" msgstr "" "Project-Id-Version: fontconfig 2.12.92\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/fontconfig/" "fontconfig/issues/new\n" "POT-Creation-Date: 2018-02-14 21:06-0600\n" "PO-Revision-Date: 2018-02-16 01:19-0600\n" "Language-Team: AOSC\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.0.5\n" "Last-Translator: Mingcong Bai \n" "Plural-Forms: nplurals=1; plural=0;\n" "Language: zh_CN\n" #: conf.d/10-autohint.conf:8 msgid "Enable autohinter" msgstr "启用自动微调" #: conf.d/10-hinting-full.conf:8 msgid "Set hintfull to hintstyle" msgstr "设置微调风格为“完全 (hintfull)”" #: conf.d/10-hinting-medium.conf:8 msgid "Set hintmedium to hintstyle" msgstr "设置微调风格为“中等 (hintmedium)”" #: conf.d/10-hinting-none.conf:8 msgid "Set hintnone to hintstyle" msgstr "设置微调风格为“无 (hintnone)”" #: conf.d/10-hinting-slight.conf:8 msgid "Set hintslight to hintstyle" msgstr "设置微调风格为“轻微 (hintslight)”" #: conf.d/10-no-sub-pixel.conf:8 msgid "Disable sub-pixel rendering" msgstr "禁用次像素渲染" #: conf.d/10-scale-bitmap-fonts.conf:8 msgid "Bitmap scaling" msgstr "位图缩放" #: conf.d/10-sub-pixel-bgr.conf:8 msgid "Enable sub-pixel rendering with the BGR stripes layout" msgstr "启用蓝绿红 (BGR) 像素布局的次像素渲染" #: conf.d/10-sub-pixel-rgb.conf:8 msgid "Enable sub-pixel rendering with the RGB stripes layout" msgstr "启用红绿蓝 (RGB) 像素布局的次像素渲染" #: conf.d/10-sub-pixel-vbgr.conf:8 msgid "Enable sub-pixel rendering with the vertical BGR stripes layout" msgstr "启用垂直蓝绿红 (BGR) 像素布局的次像素渲染" #: conf.d/10-sub-pixel-vrgb.conf:8 msgid "Enable sub-pixel rendering with the vertical RGB stripes layout" msgstr "启用垂直红绿蓝 (RGB) 像素布局的次像素渲染" #: conf.d/10-unhinted.conf:8 msgid "Disable hinting" msgstr "禁用微调" #: conf.d/11-lcdfilter-default.conf:8 msgid "Use lcddefault as default for LCD filter" msgstr "将 lcddefault 设为默认 LCD 滤镜" #: conf.d/11-lcdfilter-legacy.conf:8 msgid "Use lcdlegacy as default for LCD filter" msgstr "将 lcdlegacy 设为默认 LCD 滤镜" #: conf.d/11-lcdfilter-light.conf:8 msgid "Use lcdlight as default for LCD filter" msgstr "将 lcdlight 设为默认 LCD 滤镜" #: conf.d/20-unhint-small-vera.conf:8 msgid "" "Disable hinting for Bitstream Vera fonts when the size is less than 8ppem" msgstr "为大小小于 8ppem 的 Bitstream Vera 字体禁用微调" #: conf.d/25-unhint-nonlatin.conf:8 msgid "Disable hinting for CJK fonts" msgstr "为中日韩 (CJK) 字体禁用微调" #: conf.d/30-metric-aliases.conf:8 msgid "Set substitutions for similar/metric-compatible families" msgstr "为相似或规格兼容的字体家族设置替换" #: conf.d/40-nonlatin.conf:8 msgid "Set substitutions for non-Latin fonts" msgstr "为非拉丁语言字体设置替换" #: conf.d/45-generic.conf:8 msgid "Set substitutions for emoji/math fonts" msgstr "为绘文字 (Emoji) 或数学字体设置替换" #: conf.d/45-latin.conf:8 msgid "Set substitutions for Latin fonts" msgstr "为拉丁语言字体设置替换" #: conf.d/49-sansserif.conf:8 msgid "Add sans-serif to the family when no generic name" msgstr "在没有通用名称时添加 sans-serif 到字体家族" #: conf.d/50-user.conf:8 msgid "Load per-user customization files" msgstr "载入用户自定义文件" #: conf.d/51-local.conf:8 msgid "Load local customization file" msgstr "载入本地自定义文件" #: conf.d/60-generic.conf:8 msgid "Set preferable fonts for emoji/math fonts" msgstr "设置首选绘文字 (Emoji) 或数学字体" #: conf.d/60-latin.conf:8 msgid "Set preferable fonts for Latin" msgstr "设置首选拉丁语言字体" #: conf.d/65-nonlatin.conf:8 msgid "Set preferable fonts for non-Latin" msgstr "设置首选非拉丁语言字体" #: conf.d/70-no-bitmaps.conf:8 msgid "Reject bitmap fonts" msgstr "排除点阵字体" #: conf.d/70-yes-bitmaps.conf:8 msgid "Accept bitmap fonts" msgstr "接受点阵字体" fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/po/000077500000000000000000000000001503113465200220105ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/po/ChangeLog000066400000000000000000000007361503113465200235700ustar00rootroot000000000000002015-01-28 gettextize * Makefile.in.in: New file, from gettext-0.19.4. * Rules-quot: New file, from gettext-0.19.4. * boldquot.sed: New file, from gettext-0.19.4. * en@boldquot.header: New file, from gettext-0.19.4. * en@quot.header: New file, from gettext-0.19.4. * insert-header.sin: New file, from gettext-0.19.4. * quot.sed: New file, from gettext-0.19.4. * remove-potcdate.sin: New file, from gettext-0.19.4. * POTFILES.in: New file. fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/po/LINGUAS000066400000000000000000000000701503113465200230320ustar00rootroot00000000000000# Please keep this list sorted alphabetically. ka zh_CN fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/po/Makevars000066400000000000000000000065511503113465200235130ustar00rootroot00000000000000# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Fontconfig Author(s) # This tells whether or not to prepend "GNU " prefix to the package # name that gets inserted into the header of the $(DOMAIN).pot file. # Possible values are "yes", "no", or empty. If it is empty, try to # detect it automatically by scanning the files in $(top_srcdir) for # "GNU packagename" string. PACKAGE_GNU = no # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/new # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = # This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt' # context. Possible values are "yes" and "no". Set this to yes if the # package uses functions taking also a message context, like pgettext(), or # if in $(XGETTEXT_OPTIONS) you define keywords with a context argument. USE_MSGCTXT = no # These options get passed to msgmerge. # Useful options are in particular: # --previous to keep previous msgids of translated messages, # --quiet to reduce the verbosity. MSGMERGE_OPTIONS = # These options get passed to msginit. # If you want to disable line wrapping when writing PO files, add # --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and # MSGINIT_OPTIONS. MSGINIT_OPTIONS = # This tells whether or not to regenerate a PO file when $(DOMAIN).pot # has changed. Possible values are "yes" and "no". Set this to no if # the POT file is checked in the repository and the version control # program ignores timestamps. PO_DEPENDS_ON_POT = yes # This tells whether or not to forcibly update $(DOMAIN).pot and # regenerate PO files on "make dist". Possible values are "yes" and # "no". Set this to no if the POT file and PO files are maintained # externally. DIST_DEPENDS_ON_UPDATE_PO = yes fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/po/POTFILES.in000066400000000000000000000004031503113465200235620ustar00rootroot00000000000000# List of source files which contain translatable strings. fc-cache/fc-cache.c fc-cat/fc-cat.c fc-conflist/fc-conflist.c fc-list/fc-list.c fc-match/fc-match.c fc-pattern/fc-pattern.c fc-query/fc-query.c fc-scan/fc-scan.c fc-validate/fc-validate.c src/fccfg.c fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/po/ka.po000066400000000000000000000706371503113465200227600ustar00rootroot00000000000000# fontconfig translation to Georgian. # Copyright (C) 2022 Fontconfig Author(s) # This file is distributed under the same license as the fontconfig package. # Temuri Doghonadze , 2022. # msgid "" msgstr "" "Project-Id-Version: fontconfig 2.14.0\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/fontconfig/fontconfig/" "issues/new\n" "POT-Creation-Date: 2022-10-01 10:16+0200\n" "PO-Revision-Date: 2022-10-01 10:53+0200\n" "Last-Translator: Temuri Doghonadze \n" "Language-Team: Georgian <(none)>\n" "Language: ka\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.1.1\n" #: fc-cache/fc-cache.c:107 #, c-format msgid "" "usage: %s [-EfrsvVh] [-y SYSROOT] [--error-on-no-fonts] [--force|--really-" "force] [--sysroot=SYSROOT] [--system-only] [--verbose] [--version] [--help] " "[dirs]\n" msgstr "" "გამოყენება: %s [-EfrsvVh] [-y SYSROOT] [--error-on-no-fonts] [--force|--" "really-force] [--sysroot=SYSROOT] [--system-only] [--verbose] [--version] " "[--help] [საქაღალდეები]\n" #: fc-cache/fc-cache.c:110 #, c-format msgid "usage: %s [-EfrsvVh] [-y SYSROOT] [dirs]\n" msgstr "გამოყენება: %s [-EfrsvVh] [-y SYSROOT] [საქაღალდეები]\n" #: fc-cache/fc-cache.c:113 #, c-format msgid "" "Build font information caches in [dirs]\n" "(all directories in font configuration by default).\n" msgstr "" "საქაღალდეებში ფონტის ინფორმაციის ქეშის აშენება\n" "(ნაგულისხმებად - ყველა კონფიგურაციის ფაილში მოხსენებულ საქაღალდეში).\n" #: fc-cache/fc-cache.c:117 #, c-format msgid " -E, --error-on-no-fonts raise an error if no fonts in a directory\n" msgstr " -E, --error-on-no-fonts შეცდომა, თუ საქაღალდეში ფონტები არაა\n" #: fc-cache/fc-cache.c:118 #, c-format msgid "" " -f, --force scan directories with apparently valid caches\n" msgstr "" " -f, --force საქაღალდეების სკანირება იმის მიუხედავად, რომ " "მათი ქეში სწორია\n" #: fc-cache/fc-cache.c:119 #, c-format msgid " -r, --really-force erase all existing caches, then rescan\n" msgstr " -r, --really-force ქეშის წაშლა და თავიდან სკანირება\n" #: fc-cache/fc-cache.c:120 #, c-format msgid " -s, --system-only scan system-wide directories only\n" msgstr "" " -s, --system-only მხოლოდ სისტემისთვის გლობალური საქაღალდეების " "სკანირება\n" #: fc-cache/fc-cache.c:121 #, c-format msgid " -y, --sysroot=SYSROOT prepend SYSROOT to all paths for scanning\n" msgstr "" " -y, --sysroot=SYSROOT სკანირებისას ყველა ბილიკისთვის თავში SYSROOT -ის " "მიწერა\n" #: fc-cache/fc-cache.c:122 #, c-format msgid " -v, --verbose display status information while busy\n" msgstr " -v, --verbose მუშაობისას სტატუსის ინფორმაციის გამოტანა\n" #: fc-cache/fc-cache.c:123 #, c-format msgid " -V, --version display font config version and exit\n" msgstr " -V, --version font config -ის ვერსიის გამოტანა და გასვლა\n" #: fc-cache/fc-cache.c:124 #, c-format msgid " -h, --help display this help and exit\n" msgstr " -h, --help ამ დახმარების გამოტანა და გასვლა\n" #: fc-cache/fc-cache.c:126 #, c-format msgid " -E (error-on-no-fonts)\n" msgstr " -E (error-on-no-fonts)\n" #: fc-cache/fc-cache.c:127 #, c-format msgid " raise an error if no fonts in a directory\n" msgstr " შეცდომა, თუ საქაღალდეში ფონტები არაა\n" #: fc-cache/fc-cache.c:128 #, c-format msgid " -f (force) scan directories with apparently valid caches\n" msgstr "" " -f, (ძალით) საქაღალდეების სკანირება იმის მიუხედავად, რომ " "მათი ქეში სწორია\n" #: fc-cache/fc-cache.c:129 #, c-format msgid " -r, (really force) erase all existing caches, then rescan\n" msgstr " -r (სრულად ძალით ქეშის წაშლა და თავიდან სკანირება\n" #: fc-cache/fc-cache.c:130 #, c-format msgid " -s (system) scan system-wide directories only\n" msgstr "" " -s (სისტემური) მხოლოდ სისტემისთვის გლობალური საქაღალდეების " "სკანირება\n" #: fc-cache/fc-cache.c:131 #, c-format msgid " -y SYSROOT (sysroot) prepend SYSROOT to all paths for scanning\n" msgstr "" " -y SYSROOT (sysroot) სკანირებისას ყველა ბილიკისთვის თავში SYSROOT -ის " "მიწერა\n" #: fc-cache/fc-cache.c:132 #, c-format msgid " -v (verbose) display status information while busy\n" msgstr " -v (verbose) მუშაობისას სტატუსის ინფორმაციის გამოტანა\n" #: fc-cache/fc-cache.c:133 fc-cat/fc-cat.c:181 fc-list/fc-list.c:103 #: fc-match/fc-match.c:107 fc-pattern/fc-pattern.c:101 #, c-format msgid " -V (version) display font config version and exit\n" msgstr " -V (version) font config -ის ვერსიის გამოტანა და გასვლა\n" #: fc-cache/fc-cache.c:134 fc-cat/fc-cat.c:182 fc-list/fc-list.c:104 #: fc-match/fc-match.c:108 fc-pattern/fc-pattern.c:102 #, c-format msgid " -h (help) display this help and exit\n" msgstr " -h (help) ამ დახმარების გამოტანა და გასვლა\n" #: fc-cache/fc-cache.c:171 #, c-format msgid "skipping, looped directory detected\n" msgstr "გამოტოვება. აღმოჩენილია საქაღალდეების მარყუჟი\n" #: fc-cache/fc-cache.c:190 #, c-format msgid "skipping, no such directory\n" msgstr "გამოტოვება. საქაღალდე არ არსებობს\n" #: fc-cache/fc-cache.c:208 #, c-format msgid "\"%s\": not a directory, skipping\n" msgstr "\"%s\": საქაღალდეს არ წარმოადგენს. გამოტოვება\n" #: fc-cache/fc-cache.c:232 #, c-format msgid "\"%s\": scanning error\n" msgstr "\"%s\": სკანირების შეცდომა\n" #: fc-cache/fc-cache.c:241 #, c-format msgid "skipping, existing cache is valid: %d fonts, %d dirs\n" msgstr "გამოტოვება. არსებული ქეში სწორია: %d ფონტი, %d საქაღალდე\n" #: fc-cache/fc-cache.c:247 #, c-format msgid "caching, new cache contents: %d fonts, %d dirs\n" msgstr "ქეშირება. ახალი ქეშის შემცველობა: %d ფონტი, %d საქაღალდე\n" #: fc-cache/fc-cache.c:252 #, c-format msgid "%s: failed to write cache\n" msgstr "%s ქეშის ჩაწერის შეცდომა\n" #: fc-cache/fc-cache.c:261 #, c-format msgid "%s: Can't create subdir set\n" msgstr "%s: ქვესაქაღალდეების ნაკრების შექმნის შეცდომა\n" #: fc-cache/fc-cache.c:275 #, c-format msgid "%s: Can't create subdir list\n" msgstr "%s: ქვესაქაღალდეების სიის შექმნის შეცდომა\n" #: fc-cache/fc-cache.c:383 fc-cat/fc-cat.c:309 #, c-format msgid "%s: Can't initialize font config library\n" msgstr "%s: fontconfig-ის ბიბლიოთეკის ინიციალიზაციის შეცდომა\n" #: fc-cache/fc-cache.c:393 #, c-format msgid "%s: Can't create list of directories\n" msgstr "%s: საქაღალდეების სიის შექმნის შეცდომა\n" #: fc-cache/fc-cache.c:401 #, c-format msgid "%s: Can't add directory\n" msgstr "%s: საქაღალდის დამატების შეცდომა\n" #: fc-cache/fc-cache.c:413 #, c-format msgid "Out of Memory\n" msgstr "არასაკმარისი მეხსიერება\n" #: fc-cache/fc-cache.c:456 msgid "failed" msgstr "შეცდომა" #: fc-cache/fc-cache.c:456 msgid "succeeded" msgstr "წარმატებული" #: fc-cat/fc-cat.c:162 #, c-format msgid "usage: %s [-rv] [--recurse] [--verbose] [*-%s" msgstr "გამოყენება: %s [-rv] [--recurse] [--verbose] [*-%s" #: fc-cat/fc-cat.c:166 #, c-format msgid "usage: %s [-rvVh] [*-%s" msgstr "გამოყენება: %s [-rvVh] [*-%s" #: fc-cat/fc-cat.c:169 #, c-format msgid "Reads font information cache from:\n" msgstr "ფონტის ფორმაციის ქეში წაიკითხება:\n" #: fc-cat/fc-cat.c:170 #, c-format msgid " 1) specified fontconfig cache file\n" msgstr " 1) მითითებული fontconfig-ის ქეშის ფაილიდან\n" #: fc-cat/fc-cat.c:171 #, c-format msgid " 2) related to a particular font directory\n" msgstr " 2) მითითებული ფონტის საქაღალდიდან\n" #: fc-cat/fc-cat.c:174 #, c-format msgid " -r, --recurse recurse into subdirectories\n" msgstr " -r, --recurse რეკურსია ქვესაქაღალდეებში\n" #: fc-cat/fc-cat.c:175 #, c-format msgid " -v, --verbose be verbose\n" msgstr " -v, --verbose მეტი შეტყობინების გამოტანა\n" #: fc-cat/fc-cat.c:176 fc-conflist/fc-conflist.c:90 fc-list/fc-list.c:96 #: fc-match/fc-match.c:99 fc-pattern/fc-pattern.c:95 fc-query/fc-query.c:98 #: fc-validate/fc-validate.c:98 #, c-format msgid " -V, --version display font config version and exit\n" msgstr " -V, --version font config -ის ვერსიის გამოტანა და გასვლა\n" #: fc-cat/fc-cat.c:177 fc-conflist/fc-conflist.c:91 fc-list/fc-list.c:97 #: fc-match/fc-match.c:100 fc-pattern/fc-pattern.c:96 fc-query/fc-query.c:99 #: fc-validate/fc-validate.c:99 #, c-format msgid " -h, --help display this help and exit\n" msgstr " -h, --help ამ დახმარების გამოტანა და გასვლა\n" #: fc-cat/fc-cat.c:179 #, c-format msgid " -r (recurse) recurse into subdirectories\n" msgstr " -r (recurse) რეკურსია ქვესაქაღალდეებში\n" #: fc-cat/fc-cat.c:180 #, c-format msgid " -v (verbose) be verbose\n" msgstr " -v (verbose) მეტი შეტყობინების გამოტანა\n" #: fc-cat/fc-cat.c:318 fc-cat/fc-cat.c:327 fc-cat/fc-cat.c:339 #: fc-cat/fc-cat.c:347 #, c-format msgid "%s: malloc failure\n" msgstr "%s: malloc -ის შეცდომა\n" #: fc-cat/fc-cat.c:387 #, c-format msgid "" "Directory: %s\n" "Cache: %s\n" "--------\n" msgstr "" "საქაღალდე: %s\n" "ქეში: %s\n" "--------\n" #: fc-conflist/fc-conflist.c:81 #, c-format msgid "usage: %s [-Vh] [--version] [--help]\n" msgstr "გამოყენება: %s [-Vh] [--version] [--help]\n" #: fc-conflist/fc-conflist.c:84 #, c-format msgid "usage: %s [-Vh]\n" msgstr "გამოყენება: %s [-Vh]\n" #: fc-conflist/fc-conflist.c:87 #, c-format msgid "Show the ruleset files information on the system\n" msgstr "სისტემაში პოლიტიკის ფაილების ინფორმაციის ჩვენება\n" #: fc-conflist/fc-conflist.c:93 fc-validate/fc-validate.c:104 #, c-format msgid " -V (version) display font config version and exit\n" msgstr "" " -V (version) font config -ის ვერსიის გამოტანა და გასვლა\n" #: fc-conflist/fc-conflist.c:94 fc-validate/fc-validate.c:105 #, c-format msgid " -h (help) display this help and exit\n" msgstr " -h (help) ამ დახმარების გამოტანა და გასვლა\n" #: fc-list/fc-list.c:83 #, c-format msgid "" "usage: %s [-vbqVh] [-f FORMAT] [--verbose] [--brief] [--format=FORMAT] [--" "quiet] [--version] [--help] [pattern] {element ...} \n" msgstr "" "გამოყენება: %s [-vbqVh] [-f ფორმატი] [--verbose] [--brief] [--" "format=ფორატი] [--quiet] [--version] [--help] [pattern] {element ...} \n" #: fc-list/fc-list.c:86 #, c-format msgid "usage: %s [-vbqVh] [-f FORMAT] [pattern] {element ...} \n" msgstr "გამოყენება: %s [-vbqVh] [-f ფორმატი] [შაბლონი] {ელემენტი ...} \n" #: fc-list/fc-list.c:89 #, c-format msgid "List fonts matching [pattern]\n" msgstr "ფონტები, რომლებიც ემთხვევა [შაბლონი]\n" #: fc-list/fc-list.c:92 fc-match/fc-match.c:96 #, c-format msgid " -v, --verbose display entire font pattern verbosely\n" msgstr " -v, --verbose მთელი ფონტის შაბლონის ჩვენება\n" #: fc-list/fc-list.c:93 fc-match/fc-match.c:97 #, c-format msgid " -b, --brief display entire font pattern briefly\n" msgstr " -b, --brief მთელი ფონტის შაბლონის მოკლედ ჩვენება\n" #: fc-list/fc-list.c:94 fc-match/fc-match.c:98 fc-pattern/fc-pattern.c:94 #: fc-query/fc-query.c:97 #, c-format msgid " -f, --format=FORMAT use the given output format\n" msgstr " -f, --format=ფორმატი მითითებული ფორმატის გამოყენება\n" #: fc-list/fc-list.c:95 #, c-format msgid "" " -q, --quiet suppress all normal output, exit 1 if no fonts " "matched\n" msgstr "" " -q, --quiet ეკრანზე არაფერი გამოჩნდება. თუ ფონტები არ დაემთხვა, " "გამოსვლის კოდი 1-ის ტოლი იქნება\n" #: fc-list/fc-list.c:99 fc-match/fc-match.c:104 #, c-format msgid " -v (verbose) display entire font pattern verbosely\n" msgstr " -v (verbose) მთელი ფონტის შაბლონის დიდად ჩვენება\n" #: fc-list/fc-list.c:100 fc-match/fc-match.c:105 #, c-format msgid " -b (brief) display entire font pattern briefly\n" msgstr " -b (brief) მთელი ფონტის შაბლონის მოკლედ ჩვენება\n" #: fc-list/fc-list.c:101 fc-match/fc-match.c:106 fc-pattern/fc-pattern.c:100 #, c-format msgid " -f FORMAT (format) use the given output format\n" msgstr " -f ფორმატი (format) მითითებული გამოტანის ფორმატის გამოყენება\n" #: fc-list/fc-list.c:102 #, c-format msgid "" " -q, (quiet) suppress all normal output, exit 1 if no fonts " "matched\n" msgstr "" " -q, (quiet) ეკრანზე არაფერი გამოჩნდება. თუ ფონტები არ დაემთხვა, " "გამოსვლის კოდი 1-ის ტოლი იქნება\n" #: fc-list/fc-list.c:164 fc-match/fc-match.c:172 fc-pattern/fc-pattern.c:155 #, c-format msgid "Unable to parse the pattern\n" msgstr "შაბლონის დამუშავების შეცდომა\n" #: fc-match/fc-match.c:85 #, c-format msgid "" "usage: %s [-savbVh] [-f FORMAT] [--sort] [--all] [--verbose] [--brief] [--" "format=FORMAT] [--version] [--help] [pattern] {element...}\n" msgstr "" "გამოყენება: %s [-savbVh] [-f ფორმატი] [--sort] [--all] [--verbose] [--" "brief] [--format=ფორმატი] [--version] [--help] [შაბლონი] {ელემენტი...}\n" #: fc-match/fc-match.c:88 #, c-format msgid "usage: %s [-savVh] [-f FORMAT] [pattern] {element...}\n" msgstr "გამოყენება: %s [-savVh] [-f ფორმატი] [შაბლონი] {ელემენტი...}\n" #: fc-match/fc-match.c:91 fc-pattern/fc-pattern.c:89 #, c-format msgid "List best font matching [pattern]\n" msgstr "ფონტების საუკეთესო დამთხვევების სია [შაბლონი]\n" #: fc-match/fc-match.c:94 #, c-format msgid " -s, --sort display sorted list of matches\n" msgstr " -s, --sort დამთხვევების დალაგებული სიის ჩვენება\n" #: fc-match/fc-match.c:95 #, c-format msgid " -a, --all display unpruned sorted list of matches\n" msgstr "" " -a, --all დამთხვევების წაუკვეთავი დალაგებული სიის ჩვენება\n" #: fc-match/fc-match.c:102 #, c-format msgid " -s, (sort) display sorted list of matches\n" msgstr " -s, (sort) დამთხვევების დალაგებული სიის ჩვენება\n" #: fc-match/fc-match.c:103 #, c-format msgid " -a (all) display unpruned sorted list of matches\n" msgstr "" " -a (all) დამთხვევების წაუკვეთავი დალაგებული სიის ჩვენება\n" #: fc-match/fc-match.c:201 #, c-format msgid "No fonts installed on the system\n" msgstr "სისტემაში ფონტები დაყენებული არაა\n" #: fc-pattern/fc-pattern.c:83 #, c-format msgid "" "usage: %s [-cdVh] [-f FORMAT] [--config] [--default] [--verbose] [--" "format=FORMAT] [--version] [--help] [pattern] {element...}\n" msgstr "" "გამოყენება: %s [-cdVh] [-f ფორმატი] [--config] [--default] [--verbose] [--" "format=ფორმატი] [--version] [--help] [შაბლონი] {ელემენტი...}\n" #: fc-pattern/fc-pattern.c:86 #, c-format msgid "usage: %s [-cdVh] [-f FORMAT] [pattern] {element...}\n" msgstr "გამოყენება: %s [-cdVh] [-f ფორმატი] [შაბლონი] {ელემენტი...}\n" #: fc-pattern/fc-pattern.c:92 #, c-format msgid " -c, --config perform config substitution on pattern\n" msgstr " -c, --config შაბლონზე კონფიგურაციის ჩანაცვლების ჩატარება\n" #: fc-pattern/fc-pattern.c:93 #, c-format msgid " -d, --default perform default substitution on pattern\n" msgstr " -d, --default შაბლონზე ნაგულისხმები ჩანაცვლების ჩატარება\n" #: fc-pattern/fc-pattern.c:98 #, c-format msgid " -c, (config) perform config substitution on pattern\n" msgstr " -c, (config) შაბლონზე კონფიგურაციის ჩანაცვლების ჩატარება\n" #: fc-pattern/fc-pattern.c:99 #, c-format msgid " -d, (default) perform default substitution on pattern\n" msgstr " -d, (default) შაბლონზე ნაგულისხმები ჩანაცვლების ჩატარება\n" #: fc-query/fc-query.c:86 #, c-format msgid "" "usage: %s [-bVh] [-i index] [-f FORMAT] [--index index] [--brief] [--format " "FORMAT] [--version] [--help] font-file...\n" msgstr "" "გამოყენება: %s [-bVh] [-i index] [-f ფორმატი] [--index index] [--brief] [--" "format ფორმატი] [--version] [--help] ფონტის-ფაილი...\n" #: fc-query/fc-query.c:89 #, c-format msgid "usage: %s [-bVh] [-i index] [-f FORMAT] font-file...\n" msgstr "გამოყენება: %s [-bVh] [-i index] [-f ფორმატი] ფონტის-ფაილი...\n" #: fc-query/fc-query.c:92 #, c-format msgid "Query font files and print resulting pattern(s)\n" msgstr "ფონტის ფაილების გადამოწმება და დამთხვევების გამოტანა\n" #: fc-query/fc-query.c:95 fc-validate/fc-validate.c:95 #, c-format msgid " -i, --index INDEX display the INDEX face of each font file only\n" msgstr " -i, --index INDEX თითოეული ფონტის მხოლოდ INDEX სახის ჩვენება\n" #: fc-query/fc-query.c:96 #, c-format msgid " -b, --brief display font pattern briefly\n" msgstr " -b, --brief ფონტის შაბლონის მოკლედ ჩვენება\n" #: fc-query/fc-query.c:101 #, c-format msgid "" " -i INDEX (index) display the INDEX face of each font file only\n" msgstr "" " -i INDEX (index) თითოეული ფონტის მხოლოდ INDEX სახის ჩვენება\n" #: fc-query/fc-query.c:102 fc-scan/fc-scan.c:101 #, c-format msgid " -b (brief) display font pattern briefly\n" msgstr " -b (brief) ფონტის შაბლონის მოკლედ ჩვენება\n" #: fc-query/fc-query.c:103 fc-scan/fc-scan.c:102 #, c-format msgid " -f FORMAT (format) use the given output format\n" msgstr " -f ფორმატი მითითებული გამოტანის ფორმატის გამოყენება\n" #: fc-query/fc-query.c:104 fc-scan/fc-scan.c:104 #, c-format msgid " -V (version) display font config version and exit\n" msgstr "" " -V (version) font config -ის ვერსიის გამოტანა და გასვლა\n" #: fc-query/fc-query.c:105 fc-scan/fc-scan.c:105 #, c-format msgid " -h (help) display this help and exit\n" msgstr " -h (help) ამ დახმარების გამოტანა და გასვლა\n" #: fc-query/fc-query.c:163 #, c-format msgid "Can't query face %u of font file %s\n" msgstr "შეცდომა %u-ე სახის გამოთხოვის შეცდომა ფონტის ფაილიდან %s\n" #: fc-scan/fc-scan.c:86 #, c-format msgid "" "usage: %s [-bcVh] [-f FORMAT] [-y SYSROOT] [--brief] [--format FORMAT] [--" "version] [--help] font-file...\n" msgstr "" "გამოყენება: %s [-bcVh] [-f ფორმატი] [-y SYSROOT] [--brief] [--format " "ფორმატი] [--version] [--help] ფონტის-ფაილი...\n" #: fc-scan/fc-scan.c:89 #, c-format msgid "usage: %s [-bcVh] [-f FORMAT] [-y SYSROOT] font-file...\n" msgstr "გამოყენება: %s [-bcVh] [-f ფორმატი] [-y SYSROOT] ფონტის-ფაილი...\n" #: fc-scan/fc-scan.c:92 #, c-format msgid "Scan font files and directories, and print resulting pattern(s)\n" msgstr "ფონტის ფაილებისა და საქაღლდეების გადამოწმება და შაბლონების გამოტანა\n" #: fc-scan/fc-scan.c:95 #, c-format msgid " -b, --brief display font pattern briefly\n" msgstr " -b, --brief ფონტის შაბლონის მოკლედ ჩვენება\n" #: fc-scan/fc-scan.c:96 #, c-format msgid " -f, --format=FORMAT use the given output format\n" msgstr " -f, --format=ფორმატი მითითებული გამოტანის ფორმატის გამოყენება\n" #: fc-scan/fc-scan.c:97 #, c-format msgid " -y, --sysroot=SYSROOT prepend SYSROOT to all paths for scanning\n" msgstr "" " -y, --sysroot=SYSROOT სკანირებისას ყველა ბილიკისთვის თავში SYSROOT -ის " "მიწერა\n" #: fc-scan/fc-scan.c:98 #, c-format msgid " -V, --version display font config version and exit\n" msgstr " -V, --version font config -ის ვერსიის გამოტანა და გასვლა\n" #: fc-scan/fc-scan.c:99 #, c-format msgid " -h, --help display this help and exit\n" msgstr " -h, --help ამ დახმარების გამოტანა და გასვლა\n" #: fc-scan/fc-scan.c:103 #, c-format msgid "" " -y SYSROOT (sysroot) prepend SYSROOT to all paths for scanning\n" msgstr "" " -y SYSROOT (sysroot) სკანირებისას ყველა ბილიკისთვის თავში SYSROOT -" "ის მიწერა\n" #: fc-validate/fc-validate.c:86 #, c-format msgid "" "usage: %s [-Vhv] [-i index] [-l LANG] [--index index] [--lang LANG] [--" "verbose] [--version] [--help] font-file...\n" msgstr "" "გამოყენება: %s [-Vhv] [-i index] [-l ენა] [--index ინდექსი] [--lang ენა] [--" "verbose] [--version] [--help] ფონტის-ფაილი...\n" #: fc-validate/fc-validate.c:89 #, c-format msgid "usage: %s [-Vhv] [-i index] [-l LANG] font-file...\n" msgstr "გამოყენება: %s [-Vhv] [-i ინდექსი] [-l ენა] ფონტის-ფაილი...\n" #: fc-validate/fc-validate.c:92 #, c-format msgid "Validate font files and print result\n" msgstr "ფონტის ფაილების გადამოწმება და შედეგების გამოტანა\n" #: fc-validate/fc-validate.c:96 #, c-format msgid " -l, --lang=LANG set LANG instead of current locale\n" msgstr " -l, --lang=LANG მიმდინარე ენის მაგიერ LANG-ის გამოყენება\n" #: fc-validate/fc-validate.c:97 #, c-format msgid " -v, --verbose show more detailed information\n" msgstr " -v, --verbose უფრო მეტად დეტალური ინფორმაციის ჩვენება\n" #: fc-validate/fc-validate.c:101 #, c-format msgid "" " -i INDEX (index) display the INDEX face of each font file only\n" msgstr "" " -i INDEX (index) თითოეული ფონტის მხოლოდ INDEX სახის ჩვენება\n" #: fc-validate/fc-validate.c:102 #, c-format msgid " -l LANG (lang) set LANG instead of current locale\n" msgstr "" " -l LANG (lang) მიმდინარე ენის მაგიერ LANG-ის გამოყენება\n" #: fc-validate/fc-validate.c:103 #, c-format msgid " -v (verbose) show more detailed information\n" msgstr " -v (verbose) უფრო მეტად დეტალური ინფორმაციის ჩვენება\n" #: fc-validate/fc-validate.c:170 #, c-format msgid "Can't initialize FreeType library\n" msgstr "შეცდომა FreeType ბიბლიოთეკის ინიციალიზაციისას\n" #: fc-validate/fc-validate.c:188 #, c-format msgid "Unable to open %s\n" msgstr "%s-ის გახსნის შეცდომა\n" #: fc-validate/fc-validate.c:204 #, c-format msgid "%s:%d Missing %d glyph(s) to satisfy the coverage for %s language\n" msgstr "%s:%d აკლია %d გლიფი, რომ დააკმაყოფილოს დაფარვა ენისთვის: %s\n" #: fc-validate/fc-validate.c:234 #, c-format msgid "%s:%d Satisfy the coverage for %s language\n" msgstr "%s:%d აკმაყოფილებს დაფარვას ენისთვის: %s\n" #: src/fccfg.c:3243 msgid "No description" msgstr "აღწერის გარეშე" fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/po/meson.build000066400000000000000000000001551503113465200241530ustar00rootroot00000000000000i18n.gettext(meson.project_name(), args: gettext_args + ['--directory=' + meson.project_source_root()] ) fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/po/zh_CN.po000066400000000000000000000473671503113465200233720ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Fontconfig Author(s) # This file is distributed under the same license as the fontconfig package. # # Dingyuan Wang , 2018. # Mingcong Bai , 2018. # Mingye Wang , 2018. # # msgid "" msgstr "" "Project-Id-Version: fontconfig 2.12.92\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/fontconfig/" "fontconfig/issues/new\n" "POT-Creation-Date: 2018-02-14 21:06-0600\n" "PO-Revision-Date: 2018-02-16 01:41-0600\n" "Language-Team: AOSC\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.0.5\n" "Last-Translator: Mingcong Bai \n" "Plural-Forms: nplurals=1; plural=0;\n" "Language: zh_CN\n" #: fc-cache/fc-cache.c:98 #, c-format msgid "" "usage: %s [-EfrsvVh] [-y SYSROOT] [--error-on-no-fonts] [--force|--really-" "force] [--sysroot=SYSROOT] [--system-only] [--verbose] [--version] [--help] " "[dirs]\n" msgstr "" "用法:%s [-EfrsvVh] [-y <系统根>] [--error-on-no-fonts] [--force|--really-" "force] [--sysroot=<系统根>] [--system-only] [--verbose] [--version] [--" "help] [目录]\n" #: fc-cache/fc-cache.c:101 #, c-format msgid "usage: %s [-EfrsvVh] [-y SYSROOT] [dirs]\n" msgstr "用法:%s [-EfrsvVh] [-y <系统根>] [目录]\n" #: fc-cache/fc-cache.c:104 #, c-format msgid "" "Build font information caches in [dirs]\n" "(all directories in font configuration by default).\n" msgstr "" "在 [目录] 构建字体信息缓存\n" "(默认为所有字体配置中定义的目录)。\n" #: fc-cache/fc-cache.c:108 #, c-format msgid " -E, --error-on-no-fonts raise an error if no fonts in a directory\n" msgstr " -E, --error-on-no-fonts 在目录中无字体时报错\n" #: fc-cache/fc-cache.c:109 #, c-format msgid "" " -f, --force scan directories with apparently valid caches\n" msgstr " -f, --force 强制扫描已有有效缓存的目录\n" #: fc-cache/fc-cache.c:110 #, c-format msgid " -r, --really-force erase all existing caches, then rescan\n" msgstr " -r, --really-force 清空所有缓存并重新扫描\n" #: fc-cache/fc-cache.c:111 #, c-format msgid " -s, --system-only scan system-wide directories only\n" msgstr " -s, --system-only 仅扫描系统全局目录\n" #: fc-cache/fc-cache.c:112 #, c-format msgid " -y, --sysroot=SYSROOT prepend SYSROOT to all paths for scanning\n" msgstr " -y, --sysroot=<系统根> 扫描时将 <系统根> 值附加到路径开头\n" #: fc-cache/fc-cache.c:113 #, c-format msgid " -v, --verbose display status information while busy\n" msgstr " -v, --verbose 在程序工作时显示状态信息\n" #: fc-cache/fc-cache.c:114 #, c-format msgid " -V, --version display font config version and exit\n" msgstr " -V, --version 显示 Fontconfig 版本并退出\n" #: fc-cache/fc-cache.c:115 #, c-format msgid " -h, --help display this help and exit\n" msgstr " -h, --help 显示该帮助信息并退出\n" #: fc-cache/fc-cache.c:117 #, c-format msgid " -E (error-on-no-fonts)\n" msgstr " -E (error-on-no-fonts)\n" #: fc-cache/fc-cache.c:118 #, c-format msgid " raise an error if no fonts in a directory\n" msgstr " 在目录中无字体时报错\n" #: fc-cache/fc-cache.c:119 #, c-format msgid " -f (force) scan directories with apparently valid caches\n" msgstr " -f (force) 强制扫描带有有效缓存的目录\n" #: fc-cache/fc-cache.c:120 #, c-format msgid " -r, (really force) erase all existing caches, then rescan\n" msgstr " -r, (really-force) 清空所有缓存并重新扫描\n" #: fc-cache/fc-cache.c:121 #, c-format msgid " -s (system) scan system-wide directories only\n" msgstr " -s (system) 仅扫描系统全局目录\n" #: fc-cache/fc-cache.c:122 #, c-format msgid " -y SYSROOT (sysroot) prepend SYSROOT to all paths for scanning\n" msgstr " -y <系统根> (sysroot) 扫描时将 <系统根> 值附加到路径开头\n" #: fc-cache/fc-cache.c:123 #, c-format msgid " -v (verbose) display status information while busy\n" msgstr " -v (verbose) 在程序工作时显示状态信息\n" #: fc-cache/fc-cache.c:124 fc-cat/fc-cat.c:178 fc-list/fc-list.c:99 #: fc-match/fc-match.c:103 fc-pattern/fc-pattern.c:97 #, c-format msgid " -V (version) display font config version and exit\n" msgstr " -V (version) 显示 Fontconfig 版本并退出\n" #: fc-cache/fc-cache.c:125 fc-cat/fc-cat.c:179 fc-list/fc-list.c:100 #: fc-match/fc-match.c:104 fc-pattern/fc-pattern.c:98 #, c-format msgid " -h (help) display this help and exit\n" msgstr " -h (help) 显示该帮助信息并退出\n" #: fc-cache/fc-cache.c:162 #, c-format msgid "skipping, looped directory detected\n" msgstr "跳过,探测到循环目录\n" #: fc-cache/fc-cache.c:172 #, c-format msgid "skipping, no such directory\n" msgstr "跳过,无此目录\n" #: fc-cache/fc-cache.c:185 #, c-format msgid "\"%s\": not a directory, skipping\n" msgstr "“%s”:不是一个目录,跳过\n" #: fc-cache/fc-cache.c:210 #, c-format msgid "\"%s\": scanning error\n" msgstr "“%s”:扫描错误\n" #: fc-cache/fc-cache.c:219 #, c-format msgid "skipping, existing cache is valid: %d fonts, %d dirs\n" msgstr "跳过,当前缓存有效:%d 个字体,%d 个目录\n" #: fc-cache/fc-cache.c:225 #, c-format msgid "caching, new cache contents: %d fonts, %d dirs\n" msgstr "正在生成缓存,新增缓存内容:%d 个字体,%d 个目录\n" #: fc-cache/fc-cache.c:230 #, c-format msgid "%s: failed to write cache\n" msgstr "%s:无法写入缓存\n" #: fc-cache/fc-cache.c:239 #, c-format msgid "%s: Can't create subdir set\n" msgstr "%s:无法创建子目录集\n" #: fc-cache/fc-cache.c:253 #, c-format msgid "%s: Can't create subdir list\n" msgstr "%s:无法创建子目录列表\n" #: fc-cache/fc-cache.c:359 fc-cat/fc-cat.c:305 #, c-format msgid "%s: Can't initialize font config library\n" msgstr "%s:无法初始化 Fontconfig 库\n" #: fc-cache/fc-cache.c:369 #, c-format msgid "%s: Can't create list of directories\n" msgstr "%s:无法创建目录列表\n" #: fc-cache/fc-cache.c:377 #, c-format msgid "%s: Can't add directory\n" msgstr "%s:无法添加目录\n" #: fc-cache/fc-cache.c:389 #, c-format msgid "Out of Memory\n" msgstr "内存耗尽\n" #: fc-cache/fc-cache.c:421 msgid "failed" msgstr "缓存生成失败" #: fc-cache/fc-cache.c:421 msgid "succeeded" msgstr "缓存生成成功" #: fc-cat/fc-cat.c:159 #, c-format msgid "usage: %s [-rv] [--recurse] [--verbose] [*-%s" msgstr "用法:%s [-rv] [--recurse] [--verbose] [*-%s" #: fc-cat/fc-cat.c:163 #, c-format msgid "usage: %s [-rvVh] [*-%s" msgstr "用法:%s [-rvVh] [*-%s" #: fc-cat/fc-cat.c:166 #, c-format msgid "Reads font information cache from:\n" msgstr "从此处读取字体信息缓存:\n" #: fc-cat/fc-cat.c:167 #, c-format msgid " 1) specified fontconfig cache file\n" msgstr "1. 指定的 Fontconfig 缓存文件\n" #: fc-cat/fc-cat.c:168 #, c-format msgid " 2) related to a particular font directory\n" msgstr "2. 相对于某个字体目录\n" #: fc-cat/fc-cat.c:171 #, c-format msgid " -r, --recurse recurse into subdirectories\n" msgstr " -r, --recurse 递归进入子目录\n" #: fc-cat/fc-cat.c:172 #, c-format msgid " -v, --verbose be verbose\n" msgstr " -v, --verbose 输出详尽信息\n" #: fc-cat/fc-cat.c:173 fc-conflist/fc-conflist.c:87 fc-list/fc-list.c:92 #: fc-match/fc-match.c:95 fc-pattern/fc-pattern.c:91 fc-query/fc-query.c:94 #: fc-scan/fc-scan.c:92 fc-validate/fc-validate.c:95 #, c-format msgid " -V, --version display font config version and exit\n" msgstr " -V, --version 显示 Fontconfig 版本并退出\n" #: fc-cat/fc-cat.c:174 fc-conflist/fc-conflist.c:88 fc-list/fc-list.c:93 #: fc-match/fc-match.c:96 fc-pattern/fc-pattern.c:92 fc-query/fc-query.c:95 #: fc-scan/fc-scan.c:93 fc-validate/fc-validate.c:96 #, c-format msgid " -h, --help display this help and exit\n" msgstr " -h, --help 显示该帮助信息并退出\n" #: fc-cat/fc-cat.c:176 #, c-format msgid " -r (recurse) recurse into subdirectories\n" msgstr " -r (recurse) 递归进入子目录\n" #: fc-cat/fc-cat.c:177 #, c-format msgid " -v (verbose) be verbose\n" msgstr " -v (verbose) 输出详尽信息\n" #: fc-cat/fc-cat.c:314 fc-cat/fc-cat.c:323 fc-cat/fc-cat.c:335 #: fc-cat/fc-cat.c:343 #, c-format msgid "%s: malloc failure\n" msgstr "%s:无法分配内存 (malloc)\n" #: fc-cat/fc-cat.c:383 #, c-format msgid "" "Directory: %s\n" "Cache: %s\n" "--------\n" msgstr "" "目录:%s\n" "缓存:%s\n" "--------\n" #: fc-conflist/fc-conflist.c:78 #, c-format msgid "usage: %s [-Vh] [--version] [--help]\n" msgstr "用法:%s [-Vh] [--version] [--help]\n" #: fc-conflist/fc-conflist.c:81 #, c-format msgid "usage: %s [-Vh]\n" msgstr "用法:%s [-Vh]\n" #: fc-conflist/fc-conflist.c:84 #, c-format msgid "Show the ruleset files information on the system\n" msgstr "显示当前系统中的规则集文件\n" #: fc-conflist/fc-conflist.c:90 fc-validate/fc-validate.c:101 #, c-format msgid " -V (version) display font config version and exit\n" msgstr " -V (版本) 显示 Fontconfig 版本并退出\n" #: fc-conflist/fc-conflist.c:91 fc-validate/fc-validate.c:102 #, c-format msgid " -h (help) display this help and exit\n" msgstr " -h (帮助) 显示该帮助信息并退出\n" #: fc-list/fc-list.c:79 #, c-format msgid "" "usage: %s [-vbqVh] [-f FORMAT] [--verbose] [--brief] [--format=FORMAT] [--" "quiet] [--version] [--help] [pattern] {element ...} \n" msgstr "" "用法:%s [-vbqVh] [-f <输出格式>] [--verbose] [--brief] [--format=<输出格式" ">] [--quiet] [--version] [--help] [匹配模式] {元素 …} \n" #: fc-list/fc-list.c:82 #, c-format msgid "usage: %s [-vbqVh] [-f FORMAT] [pattern] {element ...} \n" msgstr "用法:%s [-vbqVh] [-f <输出格式>] [匹配模式] {元素 …} \n" #: fc-list/fc-list.c:85 #, c-format msgid "List fonts matching [pattern]\n" msgstr "列出符合 [匹配模式] 的字体\n" #: fc-list/fc-list.c:88 fc-match/fc-match.c:92 #, c-format msgid " -v, --verbose display entire font pattern verbosely\n" msgstr " -v, --verbose 详尽显示整个字体匹配模式\n" #: fc-list/fc-list.c:89 fc-match/fc-match.c:93 #, c-format msgid " -b, --brief display entire font pattern briefly\n" msgstr " -b, --brief 简略显示整个字体匹配模式\n" #: fc-list/fc-list.c:90 fc-match/fc-match.c:94 fc-pattern/fc-pattern.c:90 #: fc-query/fc-query.c:93 fc-scan/fc-scan.c:91 #, c-format msgid " -f, --format=FORMAT use the given output format\n" msgstr " -f, --format=<输出格式> 使用指定的输出格式\n" #: fc-list/fc-list.c:91 #, c-format msgid "" " -q, --quiet suppress all normal output, exit 1 if no fonts " "matched\n" msgstr " -q, --quiet 静默所有正常输出,无匹配字体时返回退出代码 1\n" #: fc-list/fc-list.c:95 fc-match/fc-match.c:100 #, c-format msgid " -v (verbose) display entire font pattern verbosely\n" msgstr " -v (verbose) 详尽显示整个字体匹配模式\n" #: fc-list/fc-list.c:96 fc-match/fc-match.c:101 #, c-format msgid " -b (brief) display entire font pattern briefly\n" msgstr " -b (brief) 简略显示整个字体匹配模式\n" #: fc-list/fc-list.c:97 fc-match/fc-match.c:102 fc-pattern/fc-pattern.c:96 #, c-format msgid " -f FORMAT (format) use the given output format\n" msgstr " -f <输出格式> (format) 使用指定的输出格式\n" #: fc-list/fc-list.c:98 #, c-format msgid "" " -q, (quiet) suppress all normal output, exit 1 if no fonts " "matched\n" msgstr " -q, (quiet) 静默所有正常输出,无匹配字体时返回退出代码 1\n" #: fc-list/fc-list.c:159 fc-match/fc-match.c:166 fc-pattern/fc-pattern.c:150 #, c-format msgid "Unable to parse the pattern\n" msgstr "无法解析匹配模式\n" #: fc-match/fc-match.c:81 #, c-format msgid "" "usage: %s [-savbVh] [-f FORMAT] [--sort] [--all] [--verbose] [--brief] [--" "format=FORMAT] [--version] [--help] [pattern] {element...}\n" msgstr "" "用法:%s [-savbVh] [-f <输出格式>] [--sort] [--all] [--verbose] [--brief] " "[--format=<输出格式>] [--version] [--help] [匹配模式] {元素…}\n" #: fc-match/fc-match.c:84 #, c-format msgid "usage: %s [-savVh] [-f FORMAT] [pattern] {element...}\n" msgstr "用法:%s [-savVh] [-f <输出格式>] [匹配模式] {元素…}\n" #: fc-match/fc-match.c:87 fc-pattern/fc-pattern.c:85 #, c-format msgid "List best font matching [pattern]\n" msgstr "列出符合 [匹配模式] 的最佳字体\n" #: fc-match/fc-match.c:90 #, c-format msgid " -s, --sort display sorted list of matches\n" msgstr " -s, --sort 显示已排序的匹配列表\n" #: fc-match/fc-match.c:91 #, c-format msgid " -a, --all display unpruned sorted list of matches\n" msgstr " -a, --all 显示未修剪而已排序的匹配列表\n" #: fc-match/fc-match.c:98 #, c-format msgid " -s, (sort) display sorted list of matches\n" msgstr " -s, (sort) 显示已排序的匹配列表\n" #: fc-match/fc-match.c:99 #, c-format msgid " -a (all) display unpruned sorted list of matches\n" msgstr " -a (all) 显示未修剪而已排序的匹配列表\n" #: fc-match/fc-match.c:195 #, c-format msgid "No fonts installed on the system\n" msgstr "系统中未安装任何字体\n" #: fc-pattern/fc-pattern.c:79 #, c-format msgid "" "usage: %s [-cdVh] [-f FORMAT] [--config] [--default] [--verbose] [--" "format=FORMAT] [--version] [--help] [pattern] {element...}\n" msgstr "" "用法:%s [-cdVh] [-f <输出格式>] [--config] [--default] [--verbose] [--" "format=<输出格式>] [--version] [--help] [匹配模式] {元素…}\n" #: fc-pattern/fc-pattern.c:82 #, c-format msgid "usage: %s [-cdVh] [-f FORMAT] [pattern] {element...}\n" msgstr "用法:%s [-cdVh] [-f <输出格式>] [匹配模式] {元素…}\n" #: fc-pattern/fc-pattern.c:88 #, c-format msgid " -c, --config perform config substitution on pattern\n" msgstr " -c, --config 根据匹配模式进行配置替换\n" #: fc-pattern/fc-pattern.c:89 #, c-format msgid " -d, --default perform default substitution on pattern\n" msgstr " -d, --default 根据匹配模式进行默认值替换\n" #: fc-pattern/fc-pattern.c:94 #, c-format msgid " -c, (config) perform config substitution on pattern\n" msgstr " -c, (config) 根据匹配模式进行配置替换\n" #: fc-pattern/fc-pattern.c:95 #, c-format msgid " -d, (default) perform default substitution on pattern\n" msgstr " -d, (default) 根据匹配模式进行默认值替换\n" #: fc-query/fc-query.c:82 #, c-format msgid "" "usage: %s [-bVh] [-i index] [-f FORMAT] [--index index] [--brief] [--format " "FORMAT] [--version] [--help] font-file...\n" msgstr "" "用法:%s [-bVh] [-i index] [-f <输出格式>] [--index index] [--brief] [--" "format <输出格式>] [--version] [--help] 字体文件…\n" #: fc-query/fc-query.c:85 #, c-format msgid "usage: %s [-bVh] [-i index] [-f FORMAT] font-file...\n" msgstr "用法:%s [-bVh] [-i index] [-f <输出格式>] 字体文件…\n" #: fc-query/fc-query.c:88 #, c-format msgid "Query font files and print resulting pattern(s)\n" msgstr "" "查询字体文件并输出匹配模式\n" "\n" #: fc-query/fc-query.c:91 fc-validate/fc-validate.c:92 #, c-format msgid " -i, --index INDEX display the INDEX face of each font file only\n" msgstr " -i, --index <编号> 仅显示每个字体文件的 <编号> 样式\n" #: fc-query/fc-query.c:92 fc-scan/fc-scan.c:90 #, c-format msgid " -b, --brief display font pattern briefly\n" msgstr " -b, --brief 简略显示字体匹配模式\n" #: fc-query/fc-query.c:97 #, c-format msgid "" " -i INDEX (index) display the INDEX face of each font file only\n" msgstr " -i <编号> (index) 仅显示每个字体文件的 <编号> 样式\n" #: fc-query/fc-query.c:98 fc-scan/fc-scan.c:95 #, c-format msgid " -b (brief) display font pattern briefly\n" msgstr " -b (brief) 简略显示字体匹配模式\n" #: fc-query/fc-query.c:99 fc-scan/fc-scan.c:96 #, c-format msgid " -f FORMAT (format) use the given output format\n" msgstr " -f <输出格式> (format) 使用指定的输出格式\n" #: fc-query/fc-query.c:100 fc-scan/fc-scan.c:97 #, c-format msgid " -V (version) display font config version and exit\n" msgstr " -V (version) 显示 Fontconfig 版本并退出\n" #: fc-query/fc-query.c:101 fc-scan/fc-scan.c:98 #, c-format msgid " -h (help) display this help and exit\n" msgstr " -h (help) 显示此帮助信息并退出\n" #: fc-query/fc-query.c:158 #, c-format msgid "Can't query face %u of font file %s\n" msgstr "无法查询字体文件 %2$s 的样式 %1$u\n" #: fc-scan/fc-scan.c:81 #, c-format msgid "" "usage: %s [-bVh] [-f FORMAT] [--brief] [--format FORMAT] [--version] [--" "help] font-file...\n" msgstr "" "用法:%s [-bVh] [-f <输出格式>] [--brief] [--format <输出格式>] [--version] " "[--help] 字体文件…\n" #: fc-scan/fc-scan.c:84 #, c-format msgid "usage: %s [-bVh] [-f FORMAT] font-file...\n" msgstr "用法:%s [-bVh] [-f <输出格式>] 字体文件…\n" #: fc-scan/fc-scan.c:87 #, c-format msgid "Scan font files and directories, and print resulting pattern(s)\n" msgstr "扫描字体文件和目录并输出匹配模式\n" #: fc-validate/fc-validate.c:83 #, c-format msgid "" "usage: %s [-Vhv] [-i index] [-l LANG] [--index index] [--lang LANG] [--" "verbose] [--version] [--help] font-file...\n" msgstr "" "用法:%s [-Vhv] [-i index] [-l LANG] [--index index] [--lang LANG] [--" "verbose] [--version] [--help] 字体文件…\n" #: fc-validate/fc-validate.c:86 #, c-format msgid "usage: %s [-Vhv] [-i index] [-l LANG] font-file...\n" msgstr "用法:%s [-Vhv] [-i index] [-l LANG] 字体文件…\n" #: fc-validate/fc-validate.c:89 #, c-format msgid "Validate font files and print result\n" msgstr "验证字体文件并输出结果\n" #: fc-validate/fc-validate.c:93 #, c-format msgid " -l, --lang=LANG set LANG instead of current locale\n" msgstr " -l, --lang=LANG 使用 LANG 值替换当前区域设置\n" #: fc-validate/fc-validate.c:94 #, c-format msgid " -v, --verbose show more detailed information\n" msgstr " -v, --verbose 显示详尽信息\n" #: fc-validate/fc-validate.c:98 #, c-format msgid "" " -i INDEX (index) display the INDEX face of each font file only\n" msgstr " -i <编号> (index) 仅显示每个字体的 <编号> 字形\n" #: fc-validate/fc-validate.c:99 #, c-format msgid " -l LANG (lang) set LANG instead of current locale\n" msgstr " -l LANG (lang) 使用 LANG 值替换当前区域设置\n" #: fc-validate/fc-validate.c:100 #, c-format msgid " -v (verbose) show more detailed information\n" msgstr " -v (详尽) 显示详尽信息\n" #: fc-validate/fc-validate.c:167 #, c-format msgid "Can't initalize FreeType library\n" msgstr "无法初始化 FreeType 库\n" #: fc-validate/fc-validate.c:185 #, c-format msgid "Unable to open %s\n" msgstr "无法打开 %s\n" #: fc-validate/fc-validate.c:200 #, c-format msgid "%s:%d Missing %d glyph(s) to satisfy the coverage for %s language\n" msgstr "%s:%d 尚需 %d 个字形以满足 %s 语言的覆盖需求\n" #: fc-validate/fc-validate.c:230 #, c-format msgid "%s:%d Satisfy the coverage for %s language\n" msgstr "%s:%d 完全满足 %s 语言的覆盖需求\n" #: src/fccfg.c:2654 msgid "No description" msgstr "无描述" fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/000077500000000000000000000000001503113465200221615ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/Makefile.am000066400000000000000000000137121503113465200242210ustar00rootroot00000000000000# # fontconfig/src/Makefile.am # # Copyright © 2003 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. EXTRA_DIST = if OS_WIN32 export_symbols = -export-symbols fontconfig.def fontconfig_def_dependency = fontconfig.def # gcc import library install/uninstall install-libtool-import-lib: libfontconfig.la $(MKDIR_P) $(DESTDIR)$(libdir) $(INSTALL) .libs/libfontconfig.dll.a $(DESTDIR)$(libdir)/libfontconfig.dll.a $(INSTALL) fontconfig.def $(DESTDIR)$(libdir)/fontconfig.def uninstall-libtool-import-lib: $(RM) $(DESTDIR)$(libdir)/libfontconfig.dll.a $(DESTDIR)$(libdir)/fontconfig.def else install-libtool-import-lib: uninstall-libtool-import-lib: fontconfig_def_dependency = endif if MS_LIB_AVAILABLE # Microsoft import library install/uninstall noinst_DATA = fontconfig.lib fontconfig.lib : libfontconfig.la lib -name:libfontconfig-@LIBT_CURRENT_MINUS_AGE@.dll -def:fontconfig.def -out:$@ install-ms-import-lib: $(INSTALL) fontconfig.lib $(DESTDIR)$(libdir) uninstall-ms-import-lib: $(RM) $(DESTDIR)$(libdir)/fontconfig.lib else install-ms-import-lib: uninstall-ms-import-lib: endif AM_CPPFLAGS = \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/src \ -I$(top_builddir)/fc-lang \ $(FREETYPE_CFLAGS) \ $(ICONV_CFLAGS) \ $(LIBXML2_CFLAGS) \ $(EXPAT_CFLAGS) \ $(WARN_CFLAGS) \ -DFC_CACHEDIR='"$(FC_CACHEDIR)"' \ -DCONFIGDIR='"$(CONFIGDIR)"' \ -DFONTCONFIG_PATH='"$(BASECONFIGDIR)"' \ -DFC_TEMPLATEDIR='"$(TEMPLATEDIR)"' LDADD = $(LIBINTL) EXTRA_DIST += makealias noinst_HEADERS=fcint.h fcftint.h fcdeprecate.h fcfoundry.h fcmd5.h fcstdint.h ALIAS_FILES = fcalias.h fcaliastail.h fcftalias.h fcftaliastail.h BUILT_SOURCES = $(ALIAS_FILES) \ ../fc-case/fccase.h \ ../fc-lang/fclang.h \ stamp-fcstdint \ $(builddir)/fcobjshash.h \ fcobjshash.gperf noinst_PROGRAMS = fcarch ../fc-case/fccase.h: cd ../fc-case && $(MAKE) $(AM_MAKEFLAGS) fccase.h ../fc-lang/fclang.h: cd ../fc-lang && $(MAKE) $(AM_MAKEFLAGS) fclang.h fcobjshash.gperf: Makefile stamp-fcobjshash.gperf -@$(RM) stamp-fcobjshash.gperf @$(MAKE) stamp-fcobjshash.gperf @touch -r stamp-fcobjshash.gperf $@ stamp-fcobjshash.gperf: fcobjshash.gperf.h fcobjs.h $(AM_V_GEN) $(CPP) -I$(top_builddir) -I$(top_srcdir) $(CPPFLAGS) $< | \ $(SED) 's/^ *//;s/ *, */,/' | \ awk ' \ /CUT_OUT_BEGIN/ { no_write=1; next; }; \ /CUT_OUT_END/ { no_write=0; next; }; \ /^$$/||/^#/ { next; }; \ { if (!no_write) print; next; }; \ ' - > $@.tmp && \ mv -f $@.tmp fcobjshash.gperf && touch $@ || ( $(RM) $@.tmp && false ) $(builddir)/fcobjshash.h: Makefile fcobjshash.gperf $(AM_V_GEN) $(GPERF) --pic -m 100 fcobjshash.gperf > $@.tmp && \ mv -f $@.tmp $@ || ( $(RM) $@.tmp && false ) EXTRA_DIST += \ fcobjshash.gperf.h libfontconfig_la_SOURCES = \ fcarch.h \ fcatomic.c \ fcatomic.h \ fccache.c \ fccfg.c \ fccharset.c \ fccompat.c \ fcdbg.c \ fcdefault.c \ fcdir.c \ fcformat.c \ fcfreetype.c \ fcfs.c \ fcptrlist.c \ fchash.c \ fcinit.c \ fclang.c \ fclist.c \ fcmatch.c \ fcmatrix.c \ fcmutex.h \ fcname.c \ fcobjs.c \ fcobjs.h \ fcpat.c \ fcrange.c \ fcserialize.c \ fcstat.c \ fcstr.c \ fcweight.c \ fcwindows.h \ fcxml.c \ ftglue.h \ ftglue.c lib_LTLIBRARIES = libfontconfig.la libfontconfig_la_LDFLAGS = \ -version-info @LIBT_VERSION_INFO@ -no-undefined $(export_symbols) libfontconfig_la_LIBADD = $(ICONV_LIBS) $(FREETYPE_LIBS) $(LIBXML2_LIBS) $(EXPAT_LIBS) $(LTLIBINTL) libfontconfig_la_DEPENDENCIES = $(fontconfig_def_dependency) if ENABLE_SHARED install-data-local: install-ms-import-lib install-libtool-import-lib uninstall-local: uninstall-ms-import-lib uninstall-libtool-import-lib endif PUBLIC_FILES = \ $(top_builddir)/fontconfig/fontconfig.h \ $(top_srcdir)/src/fcdeprecate.h \ $(top_srcdir)/fontconfig/fcprivate.h PUBLIC_FT_FILES = \ $(top_srcdir)/fontconfig/fcfreetype.h fcaliastail.h: fcalias.h fcalias.h: $(top_srcdir)/src/makealias $(PUBLIC_FILES) $(AM_V_GEN) sh $(top_srcdir)/src/makealias "$(top_srcdir)/src" fcalias.h fcaliastail.h $(PUBLIC_FILES) fcftaliastail.h: fcftalias.h fcftalias.h: $(top_srcdir)/src/makealias $(PUBLIC_FT_FILES) $(AM_V_GEN) sh $(top_srcdir)/src/makealias "$(top_srcdir)/src" fcftalias.h fcftaliastail.h $(PUBLIC_FT_FILES) stamp-fcstdint: $(top_builddir)/config.status $(AM_V_GEN) cd $(top_builddir) && \ $(SHELL) ./config.status src/fcstdint.h @touch $@ CLEANFILES = \ $(ALIAS_FILES) \ fontconfig.def \ $(builddir)/fcobjshash.h DISTCLEANFILES = \ stamp-fcstdint \ fcstdint.h \ stamp-fcobjshash.gperf \ fcobjshash.gperf fontconfig.def: $(PUBLIC_FILES) $(PUBLIC_FT_FILES) echo Generating $@ (echo EXPORTS; \ (cat $(PUBLIC_FILES) $(PUBLIC_FT_FILES) || echo 'FcERROR ()' ) | \ $(GREP) '^Fc[^ ]* *(' | $(SED) -e 's/ *(.*$$//' -e 's/^/ /' | \ sort; \ echo LIBRARY libfontconfig-@LIBT_CURRENT_MINUS_AGE@.dll; \ echo VERSION @LIBT_CURRENT@.@LIBT_REVISION@) >$@ @ ! $(GREP) -q FcERROR $@ || ($(RM) $@; false) -include $(top_srcdir)/git.mk fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/cutout.py000077500000000000000000000014711503113465200240640ustar00rootroot00000000000000#!/usr/bin/env python3 from pathlib import Path import argparse import re if __name__== '__main__': parser = argparse.ArgumentParser() parser.add_argument('input') parser.add_argument('output') args = parser.parse_args() input_lines = Path(args.input).read_text(encoding='utf-8').splitlines() with Path(args.output).open('w', encoding='utf-8') as out: write = True for l in input_lines: if l.startswith('CUT_OUT_BEGIN'): write = False if write and l: stripped = re.sub(r'^\s+', '', l) stripped = re.sub(r'\s*,\s*', ',', stripped) if not stripped.isspace() and stripped: out.write('%s\n' % stripped) if l.startswith('CUT_OUT_END'): write = True fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcarch.c000066400000000000000000000050551503113465200235600ustar00rootroot00000000000000/* * Copyright © 2002 Keith Packard * Copyright © 2010 Behdad Esfahbod * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" #include "fcarch.h" #include FC_ASSERT_STATIC (1 == sizeof (char)); FC_ASSERT_STATIC (2 == sizeof (FcChar16)); FC_ASSERT_STATIC (4 == sizeof (int)); FC_ASSERT_STATIC (4 == sizeof (FcChar32)); FC_ASSERT_STATIC (4 == sizeof (FcObject)); FC_ASSERT_STATIC (4 == sizeof (FcValueBinding)); FC_ASSERT_STATIC (8 == sizeof (FcAlign)); FC_ASSERT_STATIC (0x20 == sizeof (FcCharLeaf)); FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (intptr_t)); FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcPatternEltPtr)); FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcValueListPtr)); FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (char *)); FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (struct FcPatternElt *)); FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcValueList *)); FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcStrSet *)); FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcCharLeaf **)); FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcChar16 *)); FC_ASSERT_STATIC (0x08 + 1 * FC_MAX (SIZEOF_VOID_P, ALIGNOF_DOUBLE) == sizeof (FcValue)); FC_ASSERT_STATIC (0x00 + 2 * SIZEOF_VOID_P == sizeof (FcPatternElt)); FC_ASSERT_STATIC (0x08 + 2 * SIZEOF_VOID_P == sizeof (FcPattern)); FC_ASSERT_STATIC (0x08 + 2 * SIZEOF_VOID_P == sizeof (FcCharSet)); FC_ASSERT_STATIC (0x10 + 6 * SIZEOF_VOID_P == sizeof (FcCache)); int main (int argc FC_UNUSED, char **argv FC_UNUSED) { printf ("%s\n", FC_ARCHITECTURE); return 0; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcarch.h000066400000000000000000000052471503113465200235700ustar00rootroot00000000000000/* * Copyright © 2006 Keith Packard * Copyright © 2010 Behdad Esfahbod * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifndef _FCARCH_H_ #define _FCARCH_H_ #ifdef HAVE_CONFIG_H # include #endif /* * Each unique machine architecture needs an entry in this file * So far the differences boil down to: endianness, 32 vs 64 bit pointers, * and on 32bit ones, whether double is aligned to one word or two words. * Those result in the 6 formats listed below. * * If any of the assertion errors in fcarch.c fail, you need to add a new * architecture. Contact the fontconfig mailing list in that case. * * name endianness pointer-size double-alignment * * le32d4 4321 4 4 * le32d8 4321 4 8 * le64 4321 8 8 * be32d4 1234 4 4 * be32d8 1234 4 8 * be64 1234 8 8 */ #if defined(__DARWIN_BYTE_ORDER) && __DARWIN_BYTE_ORDER == __DARWIN_LITTLE_ENDIAN # define FC_ARCH_ENDIAN "le" #elif defined(__DARWIN_BYTE_ORDER) && __DARWIN_BYTE_ORDER == __DARWIN_BIG_ENDIAN # define FC_ARCH_ENDIAN "be" #elif defined(__DARWIN_BYTE_ORDER) && __DARWIN_BYTE_ORDER == __DARWIN_PDP_ENDIAN # define FC_ARCH_ENDIAN "pe" #elif defined(WORDS_BIGENDIAN) && WORDS_BIGENDIAN # define FC_ARCH_ENDIAN "be" #else # define FC_ARCH_ENDIAN "le" #endif #if SIZEOF_VOID_P == 4 # if ALIGNOF_DOUBLE == 4 # define FC_ARCH_SIZE_ALIGN "32d4" # else /* ALIGNOF_DOUBLE != 4 */ # define FC_ARCH_SIZE_ALIGN "32d8" # endif #else /* SIZEOF_VOID_P != 4 */ # define FC_ARCH_SIZE_ALIGN "64" #endif /* config.h might override this */ #ifndef FC_ARCHITECTURE # define FC_ARCHITECTURE FC_ARCH_ENDIAN FC_ARCH_SIZE_ALIGN #endif #endif /* _FCARCH_H_ */ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcatomic.c000066400000000000000000000133551503113465200241210ustar00rootroot00000000000000/* * fontconfig/src/fcatomic.c * * Copyright © 2002 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ /* * fcatomic.c * * Lock cache and configuration files for atomic update * * Uses only regular filesystem calls so it should * work even in the absense of functioning file locking * * On Unix, four files are used: * file - the data file accessed by other apps. * new - a new version of the data file while it's being written * lck - the lock file * tmp - a temporary file made unique with mkstemp * * Here's how it works: * Create 'tmp' and store our PID in it * Attempt to link it to 'lck' * Unlink 'tmp' * If the link succeeded, the lock is held * * On Windows, where there are no links, no tmp file is used, and lck * is a directory that's mkdir'ed. If the mkdir succeeds, the lock is * held. */ #ifdef HAVE_CONFIG_H # include #endif #include "fcint.h" #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #ifdef _WIN32 # include # define mkdir(path, mode) _mkdir (path) #endif #define NEW_NAME ".NEW" #define LCK_NAME ".LCK" #define TMP_NAME ".TMP-XXXXXX" FcAtomic * FcAtomicCreate (const FcChar8 *file) { int file_len = strlen ((char *)file); int new_len = file_len + sizeof (NEW_NAME); int lck_len = file_len + sizeof (LCK_NAME); int tmp_len = file_len + sizeof (TMP_NAME); int total_len = (sizeof (FcAtomic) + file_len + 1 + new_len + 1 + lck_len + 1 + tmp_len + 1); FcAtomic *atomic = malloc (total_len); if (!atomic) return 0; atomic->file = (FcChar8 *)(atomic + 1); strcpy ((char *)atomic->file, (char *)file); atomic->new = atomic->file + file_len + 1; strcpy ((char *)atomic->new, (char *)file); strcat ((char *)atomic->new, NEW_NAME); atomic->lck = atomic->new + new_len + 1; strcpy ((char *)atomic->lck, (char *)file); strcat ((char *)atomic->lck, LCK_NAME); atomic->tmp = atomic->lck + lck_len + 1; return atomic; } FcBool FcAtomicLock (FcAtomic *atomic) { int ret; struct stat lck_stat; #ifdef HAVE_LINK int fd = -1; FILE *f = 0; FcBool no_link = FcFalse; strcpy ((char *)atomic->tmp, (char *)atomic->file); strcat ((char *)atomic->tmp, TMP_NAME); fd = FcMakeTempfile ((char *)atomic->tmp); if (fd < 0) return FcFalse; f = fdopen (fd, "w"); if (!f) { close (fd); unlink ((char *)atomic->tmp); return FcFalse; } ret = fprintf (f, "%ld\n", (long)getpid()); if (ret <= 0) { fclose (f); unlink ((char *)atomic->tmp); return FcFalse; } if (fclose (f) == EOF) { unlink ((char *)atomic->tmp); return FcFalse; } ret = link ((char *)atomic->tmp, (char *)atomic->lck); if (ret < 0 && (errno == EPERM || errno == ENOTSUP || errno == EACCES)) { /* the filesystem where atomic->lck points to may not supports * the hard link. so better try to fallback */ ret = mkdir ((char *)atomic->lck, 0600); no_link = FcTrue; } (void)unlink ((char *)atomic->tmp); #else ret = mkdir ((char *)atomic->lck, 0600); #endif if (ret < 0) { /* * If the file is around and old (> 10 minutes), * assume the lock is stale. This assumes that any * machines sharing the same filesystem will have clocks * reasonably close to each other. */ if (FcStat (atomic->lck, &lck_stat) >= 0) { time_t now = time (0); if ((long int)(now - lck_stat.st_mtime) > 10 * 60) { #ifdef HAVE_LINK if (no_link) { if (rmdir ((char *)atomic->lck) == 0) return FcAtomicLock (atomic); } else { if (unlink ((char *)atomic->lck) == 0) return FcAtomicLock (atomic); } #else if (rmdir ((char *)atomic->lck) == 0) return FcAtomicLock (atomic); #endif } } return FcFalse; } (void)unlink ((char *)atomic->new); return FcTrue; } FcChar8 * FcAtomicNewFile (FcAtomic *atomic) { return atomic->new; } FcChar8 * FcAtomicOrigFile (FcAtomic *atomic) { return atomic->file; } FcBool FcAtomicReplaceOrig (FcAtomic *atomic) { #ifdef _WIN32 unlink ((const char *)atomic->file); #endif if (rename ((char *)atomic->new, (char *)atomic->file) < 0) return FcFalse; return FcTrue; } void FcAtomicDeleteNew (FcAtomic *atomic) { unlink ((char *)atomic->new); } void FcAtomicUnlock (FcAtomic *atomic) { #ifdef HAVE_LINK if (unlink ((char *)atomic->lck) == -1) rmdir ((char *)atomic->lck); #else rmdir ((char *)atomic->lck); #endif } void FcAtomicDestroy (FcAtomic *atomic) { if (atomic) free (atomic); } #define __fcatomic__ #include "fcaliastail.h" #undef __fcatomic__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcatomic.h000066400000000000000000000152631503113465200241260ustar00rootroot00000000000000/* * Mutex operations. Originally copied from HarfBuzz. * * Copyright © 2007 Chris Wilson * Copyright © 2009,2010 Red Hat, Inc. * Copyright © 2011,2012,2013 Google, Inc. * * Permission is hereby granted, without written agreement and without * license or royalty fees, to use, copy, modify, and distribute this * software and its documentation for any purpose, provided that the * above copyright notice and the following two paragraphs appear in * all copies of this software. * * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. * * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. * * Contributor(s): * Chris Wilson * Red Hat Author(s): Behdad Esfahbod * Google Author(s): Behdad Esfahbod */ #ifndef _FCATOMIC_H_ #define _FCATOMIC_H_ #ifdef HAVE_CONFIG_H # include #endif /* atomic_int */ /* We need external help for these */ #if 0 typedef fc_atomic_int_t; # define FC_ATOMIC_INT_FORMAT "" # define fc_atomic_int_add(AI, V) o = (AI), (AI) += (V), o // atomic acquire/release # define fc_atomic_ptr_get(P) *(P) // atomic acquire # define fc_atomic_ptr_cmpexch(P, O, N) *(P) == (O) ? (*(P) = (N), FcTrue) : FcFalse // atomic release #elif !defined(FC_NO_MT) && defined(HAVE_STDATOMIC_PRIMITIVES) # include typedef atomic_int fc_atomic_int_t; # define FC_ATOMIC_INT_FORMAT "d" # define fc_atomic_int_add(AI, V) atomic_fetch_add_explicit (&(AI), (V), memory_order_acq_rel) # define fc_atomic_ptr_get(P) atomic_load_explicit ((_Atomic (void *) *)(P), memory_order_acquire) static inline FcBool _fc_atomic_ptr_cmpexch (_Atomic (void *) *P, void *O, _Atomic (void *) N) { return atomic_compare_exchange_strong_explicit (P, &O, N, memory_order_release, memory_order_relaxed); } # define fc_atomic_ptr_cmpexch(P, O, N) _fc_atomic_ptr_cmpexch ((_Atomic (void *) *)(P), (O), (N)) /* Casting -1 to _Atomic(int) produces a compiler error with Clang (but not GCC) * so we have to override FC_REF_CONSTANT_VALUE for stdatomic.h atomics. * See https://bugs.llvm.org/show_bug.cgi?id=40249. */ # define FC_REF_CONSTANT_VALUE (-1) #elif !defined(FC_NO_MT) && defined(_MSC_VER) || defined(__MINGW32__) # include "fcwindows.h" typedef LONG fc_atomic_int_t; # define FC_ATOMIC_INT_FORMAT "ld" # define fc_atomic_int_add(AI, V) InterlockedExchangeAdd (&(AI), (V)) # define fc_atomic_ptr_get(P) (InterlockedCompareExchangePointerAcquire ((void **)(P), NULL, NULL)) # define fc_atomic_ptr_cmpexch(P, O, N) (InterlockedCompareExchangePointer ((void **)(P), (void *)(N), (void *)(O)) == (void *)(O)) #elif !defined(FC_NO_MT) && defined(__APPLE__) # include # include typedef int fc_atomic_int_t; # define FC_ATOMIC_INT_FORMAT "d" # define fc_atomic_int_add(AI, V) (OSAtomicAdd32Barrier ((V), &(AI)) - (V)) # if SIZEOF_VOID_P == 8 # define fc_atomic_ptr_get(P) OSAtomicAdd64Barrier (0, (int64_t *)(P)) # elif SIZEOF_VOID_P == 4 # define fc_atomic_ptr_get(P) OSAtomicAdd32Barrier (0, (int32_t *)(P)) # else # error "SIZEOF_VOID_P not 4 or 8 (assumes CHAR_BIT is 8)" # endif # if (MAC_OS_X_VERSION_MIN_REQUIRED >= 1050 || __IPHONE_OS_VERSION_MIN_REQUIRED >= 20100) # define fc_atomic_ptr_cmpexch(P, O, N) OSAtomicCompareAndSwapPtrBarrier ((void *)(O), (void *)(N), (void **)(P)) # else # if __LP64__ # define fc_atomic_ptr_cmpexch(P, O, N) OSAtomicCompareAndSwap64Barrier ((int64_t)(O), (int64_t)(N), (int64_t *)(P)) # else # define fc_atomic_ptr_cmpexch(P, O, N) OSAtomicCompareAndSwap32Barrier ((int32_t)(O), (int32_t)(N), (int32_t *)(P)) # endif # endif #elif !defined(FC_NO_MT) && defined(HAVE_INTEL_ATOMIC_PRIMITIVES) typedef int fc_atomic_int_t; # define FC_ATOMIC_INT_FORMAT "d" # define fc_atomic_int_add(AI, V) __sync_fetch_and_add (&(AI), (V)) # define fc_atomic_ptr_get(P) (void *)(__sync_fetch_and_add ((P), 0)) # define fc_atomic_ptr_cmpexch(P, O, N) __sync_bool_compare_and_swap ((P), (O), (N)) #elif !defined(FC_NO_MT) && defined(HAVE_SOLARIS_ATOMIC_OPS) # include # include typedef unsigned int fc_atomic_int_t; # define FC_ATOMIC_INT_FORMAT "u" # define fc_atomic_int_add(AI, V) (({ __machine_rw_barrier(); }), atomic_add_int_nv (&(AI), (V)) - (V)) # define fc_atomic_ptr_get(P) (({ __machine_rw_barrier(); }), (void *)*(P)) # define fc_atomic_ptr_cmpexch(P, O, N) (({ __machine_rw_barrier(); }), atomic_cas_ptr ((P), (O), (N)) == (void *)(O) ? FcTrue : FcFalse) #elif !defined(FC_NO_MT) # define FC_ATOMIC_INT_NIL 1 /* Warn that fallback implementation is in use. */ typedef volatile int fc_atomic_int_t; # define FC_ATOMIC_INT_FORMAT "d" # define fc_atomic_int_add(AI, V) (((AI) += (V)) - (V)) # define fc_atomic_ptr_get(P) ((void *)*(P)) # define fc_atomic_ptr_cmpexch(P, O, N) (*(void *volatile *)(P) == (void *)(O) ? (*(void *volatile *)(P) = (void *)(N), FcTrue) : FcFalse) #else /* FC_NO_MT */ typedef int fc_atomic_int_t; # define FC_ATOMIC_INT_FORMAT "d" # define fc_atomic_int_add(AI, V) (((AI) += (V)) - (V)) # define fc_atomic_ptr_get(P) ((void *)*(P)) # define fc_atomic_ptr_cmpexch(P, O, N) (*(void **)(P) == (void *)(O) ? (*(void **)(P) = (void *)(N), FcTrue) : FcFalse) #endif /* reference count */ #ifndef FC_REF_CONSTANT_VALUE # define FC_REF_CONSTANT_VALUE ((fc_atomic_int_t) - 1) #endif #define FC_REF_CONSTANT { FC_REF_CONSTANT_VALUE } typedef struct _FcRef { fc_atomic_int_t count; } FcRef; static inline void FcRefInit (FcRef *r, int v) { r->count = v; } static inline int FcRefInc (FcRef *r) { return fc_atomic_int_add (r->count, +1); } static inline int FcRefDec (FcRef *r) { return fc_atomic_int_add (r->count, -1); } static inline int FcRefAdd (FcRef *r, int v) { return fc_atomic_int_add (r->count, v); } static inline void FcRefSetConst (FcRef *r) { r->count = FC_REF_CONSTANT_VALUE; } static inline FcBool FcRefIsConst (const FcRef *r) { return r->count == FC_REF_CONSTANT_VALUE; } #endif /* _FCATOMIC_H_ */ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fccache.c000066400000000000000000001316521503113465200237110ustar00rootroot00000000000000/* * Copyright © 2000 Keith Packard * Copyright © 2005 Patrick Lam * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" #include "fcarch.h" #include "fcmd5.h" #include #include #include #ifdef HAVE_DIRENT_H # include #endif #include #include #include #include #ifndef _WIN32 # include #else # include /* for struct timeval */ #endif #include #if defined(HAVE_MMAP) || defined(__CYGWIN__) # include # include #endif #if defined(_WIN32) # include #endif #ifndef O_BINARY # define O_BINARY 0 #endif FcBool FcDirCacheCreateUUID (FcChar8 *dir, FcBool force, FcConfig *config) { return FcTrue; } FcBool FcDirCacheDeleteUUID (const FcChar8 *dir, FcConfig *config) { FcBool ret = FcTrue; #ifndef _WIN32 const FcChar8 *sysroot; FcChar8 *target, *d; struct stat statb; struct timeval times[2]; config = FcConfigReference (config); if (!config) return FcFalse; sysroot = FcConfigGetSysRoot (config); if (sysroot) d = FcStrBuildFilename (sysroot, dir, NULL); else d = FcStrBuildFilename (dir, NULL); if (FcStat (d, &statb) != 0) { ret = FcFalse; goto bail; } target = FcStrBuildFilename (d, ".uuid", NULL); ret = unlink ((char *)target) == 0; if (ret) { times[0].tv_sec = statb.st_atime; times[1].tv_sec = statb.st_mtime; # ifdef HAVE_STRUCT_STAT_ST_MTIM times[0].tv_usec = statb.st_atim.tv_nsec / 1000; times[1].tv_usec = statb.st_mtim.tv_nsec / 1000; # else times[0].tv_usec = 0; times[1].tv_usec = 0; # endif if (utimes ((const char *)d, times) != 0) { fprintf (stderr, "Unable to revert mtime: %s\n", d); } } FcStrFree (target); bail: FcStrFree (d); FcConfigDestroy (config); #endif return ret; } #define CACHEBASE_LEN (1 + 36 + 1 + sizeof (FC_ARCHITECTURE) + sizeof (FC_CACHE_SUFFIX)) static FcBool FcCacheIsMmapSafe (int fd) { enum { MMAP_NOT_INITIALIZED = 0, MMAP_USE, MMAP_DONT_USE, MMAP_CHECK_FS, } status; static void *static_status; status = (intptr_t)fc_atomic_ptr_get (&static_status); if (status == MMAP_NOT_INITIALIZED) { const char *env = getenv ("FONTCONFIG_USE_MMAP"); FcBool use; if (env && FcNameBool ((const FcChar8 *)env, &use)) status = use ? MMAP_USE : MMAP_DONT_USE; else status = MMAP_CHECK_FS; (void)fc_atomic_ptr_cmpexch (&static_status, NULL, (void *)(intptr_t)status); } if (status == MMAP_CHECK_FS) return FcIsFsMmapSafe (fd); else return status == MMAP_USE; } static const char bin2hex[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; static FcChar8 * FcDirCacheBasenameMD5 (FcConfig *config, const FcChar8 *dir, FcChar8 cache_base[CACHEBASE_LEN]) { FcChar8 *mapped_dir = NULL; unsigned char hash[16]; FcChar8 *hex_hash, *key = NULL; int cnt; struct MD5Context ctx; const FcChar8 *salt, *orig_dir = NULL; salt = FcConfigMapSalt (config, dir); /* Obtain a path where "dir" is mapped to. * In case: * /run/host/fonts * * FcConfigMapFontPath (config, "/run/host/fonts") will returns "/usr/share/fonts". */ mapped_dir = FcConfigMapFontPath (config, dir); if (mapped_dir) { orig_dir = dir; dir = mapped_dir; } if (salt) { size_t dl = strlen ((const char *)dir); size_t sl = strlen ((const char *)salt); key = (FcChar8 *)malloc (dl + sl + 1); memcpy (key, dir, dl); memcpy (key + dl, salt, sl + 1); key[dl + sl] = 0; if (!orig_dir) orig_dir = dir; dir = key; } MD5Init (&ctx); MD5Update (&ctx, (const unsigned char *)dir, strlen ((const char *)dir)); MD5Final (hash, &ctx); if (key) FcStrFree (key); hex_hash = cache_base; for (cnt = 0; cnt < 16; ++cnt) { hex_hash[2 * cnt] = bin2hex[hash[cnt] >> 4]; hex_hash[2 * cnt + 1] = bin2hex[hash[cnt] & 0xf]; } hex_hash[2 * cnt] = 0; strcat ((char *)cache_base, "-" FC_ARCHITECTURE FC_CACHE_SUFFIX); if (FcDebug() & FC_DBG_CACHE) { printf ("cache: %s (dir: %s%s%s%s%s%s)\n", cache_base, orig_dir ? orig_dir : dir, mapped_dir ? " (mapped to " : "", mapped_dir ? (char *)mapped_dir : "", mapped_dir ? ")" : "", salt ? ", salt: " : "", salt ? (char *)salt : ""); } if (mapped_dir) FcStrFree (mapped_dir); return cache_base; } #ifndef _WIN32 static FcChar8 * FcDirCacheBasenameUUID (FcConfig *config, const FcChar8 *dir, FcChar8 cache_base[CACHEBASE_LEN]) { FcChar8 *target, *fuuid; const FcChar8 *sysroot = FcConfigGetSysRoot (config); int fd; /* We don't need to apply remapping here. because .uuid was created at that very directory * to determine the cache name no matter where it was mapped to. */ cache_base[0] = 0; if (sysroot) target = FcStrBuildFilename (sysroot, dir, NULL); else target = FcStrdup (dir); fuuid = FcStrBuildFilename (target, ".uuid", NULL); if ((fd = FcOpen ((char *)fuuid, O_RDONLY)) != -1) { char suuid[37]; ssize_t len; memset (suuid, 0, sizeof (suuid)); len = read (fd, suuid, 36); suuid[36] = 0; close (fd); if (len < 0) goto bail; cache_base[0] = '/'; strcpy ((char *)&cache_base[1], suuid); strcat ((char *)cache_base, "-" FC_ARCHITECTURE FC_CACHE_SUFFIX); if (FcDebug() & FC_DBG_CACHE) { printf ("cache fallbacks to: %s (dir: %s)\n", cache_base, dir); } } bail: FcStrFree (fuuid); FcStrFree (target); return cache_base; } #endif FcBool FcDirCacheUnlink (const FcChar8 *dir, FcConfig *config) { FcChar8 *cache_hashed = NULL; FcChar8 cache_base[CACHEBASE_LEN]; #ifndef _WIN32 FcChar8 uuid_cache_base[CACHEBASE_LEN]; #endif FcStrList *list; FcChar8 *cache_dir; const FcChar8 *sysroot; FcBool ret = FcTrue; config = FcConfigReference (config); if (!config) return FcFalse; sysroot = FcConfigGetSysRoot (config); FcDirCacheBasenameMD5 (config, dir, cache_base); #ifndef _WIN32 FcDirCacheBasenameUUID (config, dir, uuid_cache_base); #endif list = FcStrListCreate (config->cacheDirs); if (!list) { ret = FcFalse; goto bail; } while ((cache_dir = FcStrListNext (list))) { if (sysroot) cache_hashed = FcStrBuildFilename (sysroot, cache_dir, cache_base, NULL); else cache_hashed = FcStrBuildFilename (cache_dir, cache_base, NULL); if (!cache_hashed) break; (void)unlink ((char *)cache_hashed); FcStrFree (cache_hashed); #ifndef _WIN32 if (uuid_cache_base[0] != 0) { if (sysroot) cache_hashed = FcStrBuildFilename (sysroot, cache_dir, uuid_cache_base, NULL); else cache_hashed = FcStrBuildFilename (cache_dir, uuid_cache_base, NULL); if (!cache_hashed) break; (void)unlink ((char *)cache_hashed); FcStrFree (cache_hashed); } #endif } FcStrListDone (list); FcDirCacheDeleteUUID (dir, config); /* return FcFalse if something went wrong */ if (cache_dir) ret = FcFalse; bail: FcConfigDestroy (config); return ret; } static int FcDirCacheOpenFile (const FcChar8 *cache_file, struct stat *file_stat) { int fd; #ifdef _WIN32 if (FcStat (cache_file, file_stat) < 0) return -1; #endif fd = FcOpen ((char *)cache_file, O_RDONLY | O_BINARY); if (fd < 0) return fd; #ifndef _WIN32 if (fstat (fd, file_stat) < 0) { close (fd); return -1; } #endif return fd; } /* * Look for a cache file for the specified dir. Attempt * to use each one we find, stopping when the callback * indicates success */ static FcBool FcDirCacheProcess (FcConfig *config, const FcChar8 *dir, FcBool (*callback) (FcConfig *config, int fd, struct stat *fd_stat, struct stat *dir_stat, struct timeval *cache_mtime, void *closure), void *closure, FcChar8 **cache_file_ret) { int fd = -1; FcChar8 cache_base[CACHEBASE_LEN]; FcStrList *list; FcChar8 *cache_dir, *d; struct stat file_stat, dir_stat; FcBool ret = FcFalse; const FcChar8 *sysroot = FcConfigGetSysRoot (config); struct timeval latest_mtime = (struct timeval){ 0 }; if (sysroot) d = FcStrBuildFilename (sysroot, dir, NULL); else d = FcStrdup (dir); if (FcStatChecksum (d, &dir_stat) < 0) { FcStrFree (d); return FcFalse; } FcStrFree (d); FcDirCacheBasenameMD5 (config, dir, cache_base); list = FcStrListCreate (config->cacheDirs); if (!list) return FcFalse; while ((cache_dir = FcStrListNext (list))) { FcChar8 *cache_hashed; #ifndef _WIN32 FcBool retried = FcFalse; #endif if (sysroot) cache_hashed = FcStrBuildFilename (sysroot, cache_dir, cache_base, NULL); else cache_hashed = FcStrBuildFilename (cache_dir, cache_base, NULL); if (!cache_hashed) break; #ifndef _WIN32 retry: #endif fd = FcDirCacheOpenFile (cache_hashed, &file_stat); if (fd >= 0) { ret = (*callback) (config, fd, &file_stat, &dir_stat, &latest_mtime, closure); close (fd); if (ret) { if (cache_file_ret) { if (*cache_file_ret) FcStrFree (*cache_file_ret); *cache_file_ret = cache_hashed; } else FcStrFree (cache_hashed); } else FcStrFree (cache_hashed); } #ifndef _WIN32 else if (!retried) { FcChar8 uuid_cache_base[CACHEBASE_LEN]; retried = FcTrue; FcDirCacheBasenameUUID (config, dir, uuid_cache_base); if (uuid_cache_base[0] != 0) { FcStrFree (cache_hashed); if (sysroot) cache_hashed = FcStrBuildFilename (sysroot, cache_dir, uuid_cache_base, NULL); else cache_hashed = FcStrBuildFilename (cache_dir, uuid_cache_base, NULL); if (!cache_hashed) break; goto retry; } else FcStrFree (cache_hashed); } #endif else FcStrFree (cache_hashed); } FcStrListDone (list); if (closure) return !!(*((FcCache **)closure) != NULL); return ret; } #define FC_CACHE_MIN_MMAP 1024 /* * Skip list element, make sure the 'next' pointer is the last thing * in the structure, it will be allocated large enough to hold all * of the necessary pointers */ typedef struct _FcCacheSkip FcCacheSkip; struct _FcCacheSkip { FcCache *cache; FcRef ref; intptr_t size; void *allocated; dev_t cache_dev; ino_t cache_ino; time_t cache_mtime; long cache_mtime_nano; FcCacheSkip *next[1]; }; /* * The head of the skip list; pointers for every possible level * in the skip list, plus the largest level in the list */ #define FC_CACHE_MAX_LEVEL 16 /* Protected by cache_lock below */ static FcCacheSkip *fcCacheChains[FC_CACHE_MAX_LEVEL]; static int fcCacheMaxLevel; static FcMutex *cache_lock; static void lock_cache (void) { FcMutex *lock; retry: lock = fc_atomic_ptr_get (&cache_lock); if (!lock) { lock = (FcMutex *)malloc (sizeof (FcMutex)); FcMutexInit (lock); if (!fc_atomic_ptr_cmpexch (&cache_lock, NULL, lock)) { FcMutexFinish (lock); free (lock); goto retry; } FcMutexLock (lock); /* Initialize random state */ FcRandom(); return; } FcMutexLock (lock); } static void unlock_cache (void) { FcMutex *lock; lock = fc_atomic_ptr_get (&cache_lock); FcMutexUnlock (lock); } static void free_lock (void) { FcMutex *lock; lock = fc_atomic_ptr_get (&cache_lock); if (lock && fc_atomic_ptr_cmpexch (&cache_lock, lock, NULL)) { FcMutexFinish (lock); free (lock); } } /* * Generate a random level number, distributed * so that each level is 1/4 as likely as the one before * * Note that level numbers run 1 <= level <= MAX_LEVEL */ static int random_level (void) { /* tricky bit -- each bit is '1' 75% of the time */ long int bits = FcRandom() | FcRandom(); int level = 0; while (++level < FC_CACHE_MAX_LEVEL) { if (bits & 1) break; bits >>= 1; } return level; } /* * Insert cache into the list */ static FcBool FcCacheInsert (FcCache *cache, struct stat *cache_stat) { FcCacheSkip **update[FC_CACHE_MAX_LEVEL]; FcCacheSkip *s, **next; int i, level; lock_cache(); /* * Find links along each chain */ next = fcCacheChains; for (i = fcCacheMaxLevel; --i >= 0;) { for (; (s = next[i]); next = s->next) if (s->cache > cache) break; update[i] = &next[i]; } /* * Create new list element */ level = random_level(); if (level > fcCacheMaxLevel) { level = fcCacheMaxLevel + 1; update[fcCacheMaxLevel] = &fcCacheChains[fcCacheMaxLevel]; fcCacheMaxLevel = level; } s = malloc (sizeof (FcCacheSkip) + (level - 1) * sizeof (FcCacheSkip *)); if (!s) { unlock_cache(); return FcFalse; } s->cache = cache; s->size = cache->size; s->allocated = NULL; FcRefInit (&s->ref, 1); if (cache_stat) { s->cache_dev = cache_stat->st_dev; s->cache_ino = cache_stat->st_ino; s->cache_mtime = cache_stat->st_mtime; #ifdef HAVE_STRUCT_STAT_ST_MTIM s->cache_mtime_nano = cache_stat->st_mtim.tv_nsec; #else s->cache_mtime_nano = 0; #endif } else { s->cache_dev = 0; s->cache_ino = 0; s->cache_mtime = 0; s->cache_mtime_nano = 0; } /* * Insert into all fcCacheChains */ for (i = 0; i < level; i++) { s->next[i] = *update[i]; *update[i] = s; } unlock_cache(); return FcTrue; } static FcCacheSkip * FcCacheFindByAddrUnlocked (void *object) { int i; FcCacheSkip **next = fcCacheChains; FcCacheSkip *s; if (!object) return NULL; /* * Walk chain pointers one level at a time */ for (i = fcCacheMaxLevel; --i >= 0;) while (next[i] && (char *)object >= ((char *)next[i]->cache + next[i]->size)) next = next[i]->next; /* * Here we are */ s = next[0]; if (s && (char *)object < ((char *)s->cache + s->size)) return s; return NULL; } static FcCacheSkip * FcCacheFindByAddr (void *object) { FcCacheSkip *ret; lock_cache(); ret = FcCacheFindByAddrUnlocked (object); unlock_cache(); return ret; } static void FcCacheRemoveUnlocked (FcCache *cache) { FcCacheSkip **update[FC_CACHE_MAX_LEVEL]; FcCacheSkip *s, **next; int i; void *allocated; /* * Find links along each chain */ next = fcCacheChains; for (i = fcCacheMaxLevel; --i >= 0;) { for (; (s = next[i]); next = s->next) if (s->cache >= cache) break; update[i] = &next[i]; } s = next[0]; for (i = 0; i < fcCacheMaxLevel && *update[i] == s; i++) *update[i] = s->next[i]; while (fcCacheMaxLevel > 0 && fcCacheChains[fcCacheMaxLevel - 1] == NULL) fcCacheMaxLevel--; if (s) { allocated = s->allocated; while (allocated) { /* First element in allocated chunk is the free list */ next = *(void **)allocated; free (allocated); allocated = next; } free (s); } } static FcCache * FcCacheFindByStat (struct stat *cache_stat) { FcCacheSkip *s; lock_cache(); for (s = fcCacheChains[0]; s; s = s->next[0]) if (s->cache_dev == cache_stat->st_dev && s->cache_ino == cache_stat->st_ino && s->cache_mtime == cache_stat->st_mtime) { #ifdef HAVE_STRUCT_STAT_ST_MTIM if (s->cache_mtime_nano != cache_stat->st_mtim.tv_nsec) continue; #endif FcRefInc (&s->ref); unlock_cache(); return s->cache; } unlock_cache(); return NULL; } static void FcDirCacheDisposeUnlocked (FcCache *cache) { FcCacheRemoveUnlocked (cache); switch (cache->magic) { case FC_CACHE_MAGIC_ALLOC: free (cache); break; case FC_CACHE_MAGIC_MMAP: #if defined(HAVE_MMAP) || defined(__CYGWIN__) munmap (cache, cache->size); #elif defined(_WIN32) UnmapViewOfFile (cache); #endif break; } } void FcCacheObjectReference (void *object) { FcCacheSkip *skip = FcCacheFindByAddr (object); if (skip) FcRefInc (&skip->ref); } void FcCacheObjectDereference (void *object) { FcCacheSkip *skip; lock_cache(); skip = FcCacheFindByAddrUnlocked (object); if (skip) { if (FcRefDec (&skip->ref) == 1) FcDirCacheDisposeUnlocked (skip->cache); } unlock_cache(); } void * FcCacheAllocate (FcCache *cache, size_t len) { FcCacheSkip *skip; void *allocated = NULL; lock_cache(); skip = FcCacheFindByAddrUnlocked (cache); if (skip) { void *chunk = malloc (sizeof (void *) + len); if (chunk) { /* First element in allocated chunk is the free list */ *(void **)chunk = skip->allocated; skip->allocated = chunk; /* Return the rest */ allocated = ((FcChar8 *)chunk) + sizeof (void *); } } unlock_cache(); return allocated; } void FcCacheFini (void) { int i; FcBool res = FcTrue; for (i = 0; i < FC_CACHE_MAX_LEVEL; i++) { if (fcCacheChains[i] != NULL) { res = FcFalse; if (FcDebug() & FC_DBG_CACHE) { FcCacheSkip *s = fcCacheChains[i]; fprintf (stderr, "Fontconfig error: not freed %p (dir: %s, refcount %" FC_ATOMIC_INT_FORMAT ")\n", s->cache, FcCacheDir (s->cache), s->ref.count); } } } if (res) free_lock(); } static FcBool FcCacheTimeValid (FcConfig *config, FcCache *cache, struct stat *dir_stat) { struct stat dir_static; FcBool fnano = FcTrue; if (!dir_stat) { const FcChar8 *sysroot = FcConfigGetSysRoot (config); FcChar8 *d; if (sysroot) d = FcStrBuildFilename (sysroot, FcCacheDir (cache), NULL); else d = FcStrdup (FcCacheDir (cache)); if (FcStatChecksum (d, &dir_static) < 0) { FcStrFree (d); return FcFalse; } FcStrFree (d); dir_stat = &dir_static; } #ifdef HAVE_STRUCT_STAT_ST_MTIM fnano = (cache->checksum_nano == dir_stat->st_mtim.tv_nsec); if (FcDebug() & FC_DBG_CACHE) printf ("FcCacheTimeValid dir \"%s\" cache checksum %d.%ld dir checksum %d.%ld\n", FcCacheDir (cache), cache->checksum, (long)cache->checksum_nano, (int)dir_stat->st_mtime, dir_stat->st_mtim.tv_nsec); #else if (FcDebug() & FC_DBG_CACHE) printf ("FcCacheTimeValid dir \"%s\" cache checksum %d dir checksum %d\n", FcCacheDir (cache), cache->checksum, (int)dir_stat->st_mtime); #endif return dir_stat->st_mtime == 0 || (cache->checksum == (int)dir_stat->st_mtime && fnano); } static FcBool FcCacheOffsetsValid (FcCache *cache) { char *base = (char *)cache; char *end = base + cache->size; intptr_t *dirs; FcFontSet *fs; int i, j; if (cache->dir < 0 || cache->dir > cache->size - sizeof (intptr_t) || memchr (base + cache->dir, '\0', cache->size - cache->dir) == NULL) return FcFalse; if (cache->dirs < 0 || cache->dirs >= cache->size || cache->dirs_count < 0 || cache->dirs_count > (cache->size - cache->dirs) / sizeof (intptr_t)) return FcFalse; dirs = FcCacheDirs (cache); if (dirs) { for (i = 0; i < cache->dirs_count; i++) { FcChar8 *dir; if (dirs[i] < 0 || dirs[i] > end - (char *)dirs - sizeof (intptr_t)) return FcFalse; dir = FcOffsetToPtr (dirs, dirs[i], FcChar8); if (memchr (dir, '\0', end - (char *)dir) == NULL) return FcFalse; } } if (cache->set < 0 || cache->set > cache->size - sizeof (FcFontSet)) return FcFalse; fs = FcCacheSet (cache); if (fs) { if (fs->nfont > (end - (char *)fs) / sizeof (FcPattern)) return FcFalse; if (!FcIsEncodedOffset (fs->fonts)) return FcFalse; for (i = 0; i < fs->nfont; i++) { FcPattern *font = FcFontSetFont (fs, i); FcPatternElt *e; FcValueListPtr l; char *last_offset; const FcLangSet *ls; const FcRange *r; const FcChar8 *s; if ((char *)font < base || (char *)font > end - sizeof (FcFontSet) || font->elts_offset < 0 || font->elts_offset > end - (char *)font || font->num > (end - (char *)font - font->elts_offset) / sizeof (FcPatternElt) || !FcRefIsConst (&font->ref)) return FcFalse; e = FcPatternElts (font); if (e->values != 0 && !FcIsEncodedOffset (e->values)) return FcFalse; for (j = 0; j < font->num; j++) { last_offset = (char *)font + font->elts_offset; for (l = FcPatternEltValues (&e[j]); l; l = FcValueListNext (l)) { if ((char *)l < last_offset || (char *)l > end - sizeof (*l) || (l->next != NULL && !FcIsEncodedOffset (l->next))) return FcFalse; switch (l->value.type) { case FcTypeVoid: case FcTypeInteger: case FcTypeDouble: case FcTypeBool: case FcTypeMatrix: case FcTypeFTFace: break; /* nop */ case FcTypeString: s = FcValueString (&l->value); if ((intptr_t)s < (intptr_t)&e[j] || (intptr_t)&l->value > (intptr_t)end - sizeof (*l) || !FcIsEncodedOffset (l->value.u.s)) { if (FcDebug() & FC_DBG_CACHE) { fprintf (stderr, "Fontconfig warning: invalid cache: broken string pointer\n"); } return FcFalse; } break; case FcTypeCharSet: /* FcCharSet might be re-used by FcCharSetFindFrozen * which would means a pointer might be out of Elts */ if ((intptr_t)&l->value > (intptr_t)end - sizeof (*l) || !FcIsEncodedOffset (l->value.u.c)) { if (FcDebug() & FC_DBG_CACHE) { fprintf (stderr, "Fontconfig warning: invalid cache: broken charset\n"); } return FcFalse; } break; case FcTypeLangSet: ls = FcValueLangSet (&l->value); if ((intptr_t)ls < (intptr_t)&e[j] || (intptr_t)&l->value > (intptr_t)end - sizeof (*l) || !FcIsEncodedOffset (l->value.u.l)) { if (FcDebug() & FC_DBG_CACHE) { fprintf (stderr, "Fontconfig warning: invalid cache: broken langset\n"); } return FcFalse; } /* ls->extra isn't serialized. it must be null */ if (ls->extra != NULL) { if (FcDebug() & FC_DBG_CACHE) { fprintf (stderr, "Fontconfig warning: invalid cache: broken langset\n"); } return FcFalse; } break; case FcTypeRange: r = FcValueRange (&l->value); if ((intptr_t)r < (intptr_t)&e[j] || (intptr_t)&l->value > (intptr_t)end - sizeof (*l) || !FcIsEncodedOffset (l->value.u.r)) { if (FcDebug() & FC_DBG_CACHE) { fprintf (stderr, "Fontconfig warning: invalid cache: broken range\n"); } return FcFalse; } break; default: /* just ignore unknown object type for upper-compatible in the future */ if (FcDebug() & FC_DBG_CACHEV) { fprintf (stderr, "Fontconfig warning: invalid cache: unknown object type in pattern: %d\n", l->value.type); } break; } last_offset = (char *)l + 1; } } } } return FcTrue; } /* * Map a cache file into memory */ static FcCache * FcDirCacheMapFd (FcConfig *config, int fd, struct stat *fd_stat, struct stat *dir_stat) { FcCache *cache; FcBool allocated = FcFalse; if (fd_stat->st_size > INTPTR_MAX || fd_stat->st_size < (int)sizeof (FcCache)) return NULL; cache = FcCacheFindByStat (fd_stat); if (cache) { if (FcCacheTimeValid (config, cache, dir_stat)) return cache; FcDirCacheUnload (cache); cache = NULL; } /* * Large cache files are mmap'ed, smaller cache files are read. This * balances the system cost of mmap against per-process memory usage. */ if (FcCacheIsMmapSafe (fd) && fd_stat->st_size >= FC_CACHE_MIN_MMAP) { #if defined(HAVE_MMAP) || defined(__CYGWIN__) cache = mmap (0, fd_stat->st_size, PROT_READ, MAP_SHARED, fd, 0); # if defined(HAVE_POSIX_FADVISE) && defined(POSIX_FADV_WILLNEED) posix_fadvise (fd, 0, fd_stat->st_size, POSIX_FADV_WILLNEED); # endif if (cache == MAP_FAILED) cache = NULL; #elif defined(_WIN32) { HANDLE hFileMap; cache = NULL; hFileMap = CreateFileMapping ((HANDLE)_get_osfhandle (fd), NULL, PAGE_READONLY, 0, 0, NULL); if (hFileMap != NULL) { cache = MapViewOfFile (hFileMap, FILE_MAP_READ, 0, 0, fd_stat->st_size); CloseHandle (hFileMap); } } #endif } if (!cache) { cache = malloc (fd_stat->st_size); if (!cache) return NULL; if (read (fd, cache, fd_stat->st_size) != fd_stat->st_size) { free (cache); return NULL; } allocated = FcTrue; } if (cache->magic != FC_CACHE_MAGIC_MMAP || cache->version < FC_CACHE_VERSION_NUMBER || cache->size != (intptr_t)fd_stat->st_size || !FcCacheOffsetsValid (cache) || !FcCacheTimeValid (config, cache, dir_stat) || !FcCacheInsert (cache, fd_stat)) { if (allocated) free (cache); else { #if defined(HAVE_MMAP) || defined(__CYGWIN__) munmap (cache, fd_stat->st_size); #elif defined(_WIN32) UnmapViewOfFile (cache); #endif } return NULL; } /* Mark allocated caches so they're freed rather than unmapped */ if (allocated) cache->magic = FC_CACHE_MAGIC_ALLOC; return cache; } void FcDirCacheReference (FcCache *cache, int nref) { FcCacheSkip *skip = FcCacheFindByAddr (cache); if (skip) FcRefAdd (&skip->ref, nref); } void FcDirCacheUnload (FcCache *cache) { FcCacheObjectDereference (cache); } static FcBool FcDirCacheMapHelper (FcConfig *config, int fd, struct stat *fd_stat, struct stat *dir_stat, struct timeval *latest_cache_mtime, void *closure) { FcCache *cache = FcDirCacheMapFd (config, fd, fd_stat, dir_stat); struct timeval cache_mtime, zero_mtime = { 0, 0 }, dir_mtime; if (!cache) return FcFalse; cache_mtime.tv_sec = fd_stat->st_mtime; dir_mtime.tv_sec = dir_stat->st_mtime; #ifdef HAVE_STRUCT_STAT_ST_MTIM cache_mtime.tv_usec = fd_stat->st_mtim.tv_nsec / 1000; dir_mtime.tv_usec = dir_stat->st_mtim.tv_nsec / 1000; #else cache_mtime.tv_usec = 0; dir_mtime.tv_usec = 0; #endif /* special take care of OSTree */ if (!timercmp (&zero_mtime, &dir_mtime, !=)) { if (!timercmp (&zero_mtime, &cache_mtime, !=)) { if (*((FcCache **)closure)) FcDirCacheUnload (*((FcCache **)closure)); } else if (*((FcCache **)closure) && !timercmp (&zero_mtime, latest_cache_mtime, !=)) { FcDirCacheUnload (cache); return FcFalse; } else if (timercmp (latest_cache_mtime, &cache_mtime, <)) { if (*((FcCache **)closure)) FcDirCacheUnload (*((FcCache **)closure)); } } else if (timercmp (latest_cache_mtime, &cache_mtime, <)) { if (*((FcCache **)closure)) FcDirCacheUnload (*((FcCache **)closure)); } else { FcDirCacheUnload (cache); return FcFalse; } latest_cache_mtime->tv_sec = cache_mtime.tv_sec; latest_cache_mtime->tv_usec = cache_mtime.tv_usec; *((FcCache **)closure) = cache; return FcTrue; } FcCache * FcDirCacheLoad (const FcChar8 *dir, FcConfig *config, FcChar8 **cache_file) { FcCache *cache = NULL; config = FcConfigReference (config); if (!config) return NULL; if (!FcDirCacheProcess (config, dir, FcDirCacheMapHelper, &cache, cache_file)) cache = NULL; FcConfigDestroy (config); return cache; } FcCache * FcDirCacheLoadFile (const FcChar8 *cache_file, struct stat *file_stat) { int fd; FcCache *cache = NULL; struct stat my_file_stat; FcConfig *config; if (!file_stat) file_stat = &my_file_stat; config = FcConfigReference (NULL); if (!config) return NULL; fd = FcDirCacheOpenFile (cache_file, file_stat); if (fd >= 0) { cache = FcDirCacheMapFd (config, fd, file_stat, NULL); close (fd); } FcConfigDestroy (config); return cache; } static int FcDirChecksum (struct stat *statb) { int ret = (int)statb->st_mtime; char *endptr; char *source_date_epoch; unsigned long long epoch; source_date_epoch = getenv ("SOURCE_DATE_EPOCH"); if (source_date_epoch) { errno = 0; epoch = strtoull (source_date_epoch, &endptr, 10); if (endptr == source_date_epoch) fprintf (stderr, "Fontconfig: SOURCE_DATE_EPOCH invalid\n"); else if ((errno == ERANGE && (epoch == ULLONG_MAX || epoch == 0)) || (errno != 0 && epoch == 0)) fprintf (stderr, "Fontconfig: SOURCE_DATE_EPOCH: strtoull: %s: %" FC_UINT64_FORMAT "\n", strerror (errno), epoch); else if (*endptr != '\0') fprintf (stderr, "Fontconfig: SOURCE_DATE_EPOCH has trailing garbage\n"); else if (epoch > ULONG_MAX) fprintf (stderr, "Fontconfig: SOURCE_DATE_EPOCH must be <= %lu but saw: %" FC_UINT64_FORMAT "\n", ULONG_MAX, epoch); else if (epoch < ret) /* Only override if directory is newer */ ret = (int)epoch; } return ret; } static int64_t FcDirChecksumNano (struct stat *statb) { #ifdef HAVE_STRUCT_STAT_ST_MTIM /* No nanosecond component to parse */ if (getenv ("SOURCE_DATE_EPOCH")) return 0; return statb->st_mtim.tv_nsec; #else return 0; #endif } /* * Validate a cache file by reading the header and checking * the magic number and the size field */ static FcBool FcDirCacheValidateHelper (FcConfig *config, int fd, struct stat *fd_stat, struct stat *dir_stat, struct timeval *latest_cache_mtime, void *closure FC_UNUSED) { FcBool ret = FcTrue; FcCache c; if (read (fd, &c, sizeof (FcCache)) != sizeof (FcCache)) ret = FcFalse; else if (c.magic != FC_CACHE_MAGIC_MMAP) ret = FcFalse; else if (c.version < FC_CACHE_VERSION_NUMBER) ret = FcFalse; else if (fd_stat->st_size != c.size) ret = FcFalse; else if (c.checksum != FcDirChecksum (dir_stat)) ret = FcFalse; #ifdef HAVE_STRUCT_STAT_ST_MTIM else if (c.checksum_nano != FcDirChecksumNano (dir_stat)) ret = FcFalse; #endif return ret; } static FcBool FcDirCacheValidConfig (const FcChar8 *dir, FcConfig *config) { return FcDirCacheProcess (config, dir, FcDirCacheValidateHelper, NULL, NULL); } FcBool FcDirCacheValid (const FcChar8 *dir) { FcConfig *config; FcBool ret; config = FcConfigReference (NULL); if (!config) return FcFalse; ret = FcDirCacheValidConfig (dir, config); FcConfigDestroy (config); return ret; } /* * Build a cache structure from the given contents */ FcCache * FcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, struct stat *dir_stat, FcStrSet *dirs) { FcSerialize *serialize = FcSerializeCreate(); FcCache *cache; int i; FcChar8 *dir_serialize; intptr_t *dirs_serialize; FcFontSet *set_serialize; if (!serialize) return NULL; /* * Space for cache structure */ FcSerializeReserve (serialize, sizeof (FcCache)); /* * Directory name */ if (!FcStrSerializeAlloc (serialize, dir)) goto bail1; /* * Subdirs */ FcSerializeAlloc (serialize, dirs, dirs->num * sizeof (FcChar8 *)); for (i = 0; i < dirs->num; i++) if (!FcStrSerializeAlloc (serialize, dirs->strs[i])) goto bail1; /* * Patterns */ if (!FcFontSetSerializeAlloc (serialize, set)) goto bail1; /* Serialize layout complete. Now allocate space and fill it */ cache = malloc (serialize->size); if (!cache) goto bail1; /* shut up valgrind */ memset (cache, 0, serialize->size); serialize->linear = cache; cache->magic = FC_CACHE_MAGIC_ALLOC; cache->version = FC_CACHE_VERSION_NUMBER; cache->size = serialize->size; cache->checksum = FcDirChecksum (dir_stat); cache->checksum_nano = FcDirChecksumNano (dir_stat); /* * Serialize directory name */ dir_serialize = FcStrSerialize (serialize, dir); if (!dir_serialize) goto bail2; cache->dir = FcPtrToOffset (cache, dir_serialize); /* * Serialize sub dirs */ dirs_serialize = FcSerializePtr (serialize, dirs); if (!dirs_serialize) goto bail2; cache->dirs = FcPtrToOffset (cache, dirs_serialize); cache->dirs_count = dirs->num; for (i = 0; i < dirs->num; i++) { FcChar8 *d_serialize = FcStrSerialize (serialize, dirs->strs[i]); if (!d_serialize) goto bail2; dirs_serialize[i] = FcPtrToOffset (dirs_serialize, d_serialize); } /* * Serialize font set */ set_serialize = FcFontSetSerialize (serialize, set); if (!set_serialize) goto bail2; cache->set = FcPtrToOffset (cache, set_serialize); FcSerializeDestroy (serialize); FcCacheInsert (cache, NULL); return cache; bail2: free (cache); bail1: FcSerializeDestroy (serialize); return NULL; } FcCache * FcDirCacheRebuild (FcCache *cache, struct stat *dir_stat, FcStrSet *dirs) { FcCache *newp; FcFontSet *set = FcFontSetDeserialize (FcCacheSet (cache)); const FcChar8 *dir = FcCacheDir (cache); newp = FcDirCacheBuild (set, dir, dir_stat, dirs); FcFontSetDestroy (set); return newp; } /* write serialized state to the cache file */ FcBool FcDirCacheWrite (FcCache *cache, FcConfig *config) { FcChar8 *dir = FcCacheDir (cache); FcChar8 cache_base[CACHEBASE_LEN]; FcChar8 *cache_hashed; int fd; FcAtomic *atomic; FcStrList *list; FcChar8 *cache_dir = NULL; FcChar8 *test_dir, *d = NULL; FcCacheSkip *skip; struct stat cache_stat; unsigned int magic; int written; const FcChar8 *sysroot = FcConfigGetSysRoot (config); FcStrSet *cpath; /* * Write it to the first directory in the list which is writable */ cpath = FcStrSetCreateEx (FCSS_GROW_BY_64); if (!cpath) return FcFalse; list = FcStrListCreate (config->cacheDirs); if (!list) { FcStrSetDestroy (cpath); return FcFalse; } while ((test_dir = FcStrListNext (list))) { if (d) FcStrFree (d); if (sysroot) d = FcStrBuildFilename (sysroot, test_dir, NULL); else d = FcStrCopyFilename (test_dir); if (access ((char *)d, W_OK) == 0) { cache_dir = FcStrCopyFilename (d); break; } else { /* * If the directory doesn't exist, try to create it */ if (access ((char *)d, F_OK) == -1) { if (FcMakeDirectory (d)) { cache_dir = FcStrCopyFilename (d); /* Create CACHEDIR.TAG */ FcDirCacheCreateTagFile (d); break; } } /* * Otherwise, try making it writable */ else if (chmod ((char *)d, 0755) == 0) { cache_dir = FcStrCopyFilename (d); /* Try to create CACHEDIR.TAG too */ FcDirCacheCreateTagFile (d); break; } /* Record a path that was supposed to be a cache directory */ FcStrSetAdd (cpath, d); } } if (!test_dir) { FcStrList *l; FcChar8 *s; l = FcStrListCreate (cpath); fprintf (stderr, "\nFontconfig error: No writable cache directories\n"); while ((s = FcStrListNext (l))) { fprintf (stderr, "\t%s\n", s); } FcStrListDone (l); } if (d) FcStrFree (d); FcStrSetDestroy (cpath); FcStrListDone (list); if (!cache_dir) return FcFalse; FcDirCacheBasenameMD5 (config, dir, cache_base); cache_hashed = FcStrBuildFilename (cache_dir, cache_base, NULL); FcStrFree (cache_dir); if (!cache_hashed) return FcFalse; if (FcDebug() & FC_DBG_CACHE) printf ("FcDirCacheWriteDir dir \"%s\" file \"%s\"\n", dir, cache_hashed); atomic = FcAtomicCreate ((FcChar8 *)cache_hashed); if (!atomic) goto bail1; if (!FcAtomicLock (atomic)) goto bail3; fd = FcOpen ((char *)FcAtomicNewFile (atomic), O_RDWR | O_CREAT | O_BINARY, 0666); if (fd == -1) goto bail4; /* Temporarily switch magic to MMAP while writing to file */ magic = cache->magic; if (magic != FC_CACHE_MAGIC_MMAP) cache->magic = FC_CACHE_MAGIC_MMAP; /* * Write cache contents to file */ written = write (fd, cache, cache->size); /* Switch magic back */ if (magic != FC_CACHE_MAGIC_MMAP) cache->magic = magic; if (written != cache->size) { perror ("write cache"); goto bail5; } close (fd); if (!FcAtomicReplaceOrig (atomic)) goto bail4; /* If the file is small, update the cache chain entry such that the * new cache file is not read again. If it's large, we don't do that * such that we reload it, using mmap, which is shared across processes. */ if (cache->size < FC_CACHE_MIN_MMAP && FcStat (cache_hashed, &cache_stat)) { lock_cache(); if ((skip = FcCacheFindByAddrUnlocked (cache))) { skip->cache_dev = cache_stat.st_dev; skip->cache_ino = cache_stat.st_ino; skip->cache_mtime = cache_stat.st_mtime; #ifdef HAVE_STRUCT_STAT_ST_MTIM skip->cache_mtime_nano = cache_stat.st_mtim.tv_nsec; #else skip->cache_mtime_nano = 0; #endif } unlock_cache(); } FcStrFree (cache_hashed); FcAtomicUnlock (atomic); FcAtomicDestroy (atomic); return FcTrue; bail5: close (fd); bail4: FcAtomicUnlock (atomic); bail3: FcAtomicDestroy (atomic); bail1: FcStrFree (cache_hashed); return FcFalse; } FcBool FcDirCacheClean (const FcChar8 *cache_dir, FcBool verbose) { DIR *d; struct dirent *ent; FcChar8 *dir; FcBool ret = FcTrue; FcBool remove; FcCache *cache; struct stat target_stat; const FcChar8 *sysroot; FcConfig *config; config = FcConfigReference (NULL); if (!config) return FcFalse; /* FIXME: this API needs to support non-current FcConfig */ sysroot = FcConfigGetSysRoot (config); if (sysroot) dir = FcStrBuildFilename (sysroot, cache_dir, NULL); else dir = FcStrCopyFilename (cache_dir); if (!dir) { fprintf (stderr, "Fontconfig error: %s: out of memory\n", cache_dir); ret = FcFalse; goto bail; } if (access ((char *)dir, W_OK) != 0) { if (verbose || FcDebug() & FC_DBG_CACHE) printf ("%s: not cleaning %s cache directory\n", dir, access ((char *)dir, F_OK) == 0 ? "unwritable" : "non-existent"); goto bail0; } if (verbose || FcDebug() & FC_DBG_CACHE) printf ("%s: cleaning cache directory\n", dir); d = opendir ((char *)dir); if (!d) { perror ((char *)dir); ret = FcFalse; goto bail0; } while ((ent = readdir (d))) { FcChar8 *file_name; const FcChar8 *target_dir; if (ent->d_name[0] == '.') continue; /* skip cache files for different architectures and */ /* files which are not cache files at all */ if (strlen (ent->d_name) != 32 + strlen ("-" FC_ARCHITECTURE FC_CACHE_SUFFIX) || strcmp (ent->d_name + 32, "-" FC_ARCHITECTURE FC_CACHE_SUFFIX)) continue; file_name = FcStrBuildFilename (dir, (FcChar8 *)ent->d_name, NULL); if (!file_name) { fprintf (stderr, "Fontconfig error: %s: allocation failure\n", dir); ret = FcFalse; break; } remove = FcFalse; cache = FcDirCacheLoadFile (file_name, NULL); if (!cache) { if (verbose || FcDebug() & FC_DBG_CACHE) printf ("%s: invalid cache file: %s\n", dir, ent->d_name); remove = FcTrue; } else { FcChar8 *s; target_dir = FcCacheDir (cache); if (sysroot) s = FcStrBuildFilename (sysroot, target_dir, NULL); else s = FcStrdup (target_dir); if (stat ((char *)s, &target_stat) < 0) { if (verbose || FcDebug() & FC_DBG_CACHE) printf ("%s: %s: missing directory: %s \n", dir, ent->d_name, s); remove = FcTrue; } FcDirCacheUnload (cache); FcStrFree (s); } if (remove) { if (unlink ((char *)file_name) < 0) { perror ((char *)file_name); ret = FcFalse; } } FcStrFree (file_name); } closedir (d); bail0: FcStrFree (dir); bail: FcConfigDestroy (config); return ret; } int FcDirCacheLock (const FcChar8 *dir, FcConfig *config) { FcChar8 *cache_hashed = NULL; FcChar8 cache_base[CACHEBASE_LEN]; FcStrList *list; FcChar8 *cache_dir; const FcChar8 *sysroot = FcConfigGetSysRoot (config); int fd = -1; FcDirCacheBasenameMD5 (config, dir, cache_base); list = FcStrListCreate (config->cacheDirs); if (!list) return -1; while ((cache_dir = FcStrListNext (list))) { if (sysroot) cache_hashed = FcStrBuildFilename (sysroot, cache_dir, cache_base, NULL); else cache_hashed = FcStrBuildFilename (cache_dir, cache_base, NULL); if (!cache_hashed) break; fd = FcOpen ((const char *)cache_hashed, O_RDWR); FcStrFree (cache_hashed); /* No caches in that directory. simply retry with another one */ if (fd != -1) { #if defined(_WIN32) if (_locking (fd, _LK_LOCK, 1) == -1) goto bail; #else struct flock fl; fl.l_type = F_WRLCK; fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 0; fl.l_pid = getpid(); if (fcntl (fd, F_SETLKW, &fl) == -1) goto bail; #endif break; } } FcStrListDone (list); return fd; bail: FcStrListDone (list); if (fd != -1) close (fd); return -1; } void FcDirCacheUnlock (int fd) { if (fd != -1) { #if defined(_WIN32) _locking (fd, _LK_UNLCK, 1); #else struct flock fl; fl.l_type = F_UNLCK; fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 0; fl.l_pid = getpid(); fcntl (fd, F_SETLK, &fl); #endif close (fd); } } /* * Hokey little macro trick to permit the definitions of C functions * with the same name as CPP macros */ #define args1(x) (x) #define args2(x, y) (x, y) const FcChar8 * FcCacheDir args1 (const FcCache *c) { return FcCacheDir (c); } FcFontSet * FcCacheCopySet args1 (const FcCache *c) { FcFontSet *old = FcCacheSet (c); FcFontSet *newp = FcFontSetCreate(); int i; if (!newp) return NULL; for (i = 0; i < old->nfont; i++) { FcPattern *font = FcFontSetFont (old, i); FcPatternReference (font); if (!FcFontSetAdd (newp, font)) { FcFontSetDestroy (newp); return NULL; } } return newp; } const FcChar8 * FcCacheSubdir args2 (const FcCache *c, int i) { return FcCacheSubdir (c, i); } int FcCacheNumSubdir args1 (const FcCache *c) { return c->dirs_count; } int FcCacheNumFont args1 (const FcCache *c) { return FcCacheSet (c)->nfont; } FcBool FcDirCacheCreateTagFile (const FcChar8 *cache_dir) { FcChar8 *cache_tag; int fd; FILE *fp; FcAtomic *atomic; static const FcChar8 cache_tag_contents[] = "Signature: 8a477f597d28d172789f06886806bc55\n" "# This file is a cache directory tag created by fontconfig.\n" "# For information about cache directory tags, see:\n" "# http://www.brynosaurus.com/cachedir/\n"; static size_t cache_tag_contents_size = sizeof (cache_tag_contents) - 1; FcBool ret = FcFalse; if (!cache_dir) return FcFalse; if (access ((char *)cache_dir, W_OK) == 0) { /* Create CACHEDIR.TAG */ cache_tag = FcStrBuildFilename (cache_dir, "CACHEDIR.TAG", NULL); if (!cache_tag) return FcFalse; atomic = FcAtomicCreate ((FcChar8 *)cache_tag); if (!atomic) goto bail1; if (!FcAtomicLock (atomic)) goto bail2; fd = FcOpen ((char *)FcAtomicNewFile (atomic), O_RDWR | O_CREAT, 0644); if (fd == -1) goto bail3; fp = fdopen (fd, "wb"); if (fp == NULL) goto bail3; fwrite (cache_tag_contents, cache_tag_contents_size, sizeof (FcChar8), fp); fclose (fp); if (!FcAtomicReplaceOrig (atomic)) goto bail3; ret = FcTrue; bail3: FcAtomicUnlock (atomic); bail2: FcAtomicDestroy (atomic); bail1: FcStrFree (cache_tag); } if (FcDebug() & FC_DBG_CACHE) { if (ret) printf ("Created CACHEDIR.TAG at %s\n", cache_dir); else printf ("Unable to create CACHEDIR.TAG at %s\n", cache_dir); } return ret; } void FcCacheCreateTagFile (FcConfig *config) { FcChar8 *cache_dir = NULL, *d = NULL; FcStrList *list; const FcChar8 *sysroot; config = FcConfigReference (config); if (!config) return; sysroot = FcConfigGetSysRoot (config); list = FcConfigGetCacheDirs (config); if (!list) goto bail; while ((cache_dir = FcStrListNext (list))) { if (d) FcStrFree (d); if (sysroot) d = FcStrBuildFilename (sysroot, cache_dir, NULL); else d = FcStrCopyFilename (cache_dir); if (FcDirCacheCreateTagFile (d)) break; } if (d) FcStrFree (d); FcStrListDone (list); bail: FcConfigDestroy (config); } #define __fccache__ #include "fcaliastail.h" #undef __fccache__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fccfg.c000066400000000000000000002170631503113465200234060ustar00rootroot00000000000000/* * fontconfig/src/fccfg.c * * Copyright © 2000 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ /* Objects MT-safe for readonly access. */ #include "fcint.h" #include "fontconfig/fontconfig.h" #ifdef HAVE_DIRENT_H # include #endif #include #if defined(_WIN32) && !defined(R_OK) # define R_OK 4 #endif #if defined(_WIN32) && !defined(S_ISFIFO) # define S_ISFIFO(m) 0 #endif static FcConfig *_fcConfig; /* MT-safe */ static FcMutex *_lock; static void lock_config (void) { FcMutex *lock; retry: lock = fc_atomic_ptr_get (&_lock); if (!lock) { lock = (FcMutex *)malloc (sizeof (FcMutex)); FcMutexInit (lock); if (!fc_atomic_ptr_cmpexch (&_lock, NULL, lock)) { FcMutexFinish (lock); free (lock); goto retry; } FcMutexLock (lock); /* Initialize random state */ FcRandom(); return; } FcMutexLock (lock); } static void unlock_config (void) { FcMutex *lock; lock = fc_atomic_ptr_get (&_lock); if (lock) FcMutexUnlock (lock); } static void free_lock (void) { FcMutex *lock; lock = fc_atomic_ptr_get (&_lock); if (lock && fc_atomic_ptr_cmpexch (&_lock, lock, NULL)) { FcMutexFinish (lock); free (lock); } } static FcConfig * FcConfigEnsure (void) { FcConfig *config; retry: config = fc_atomic_ptr_get (&_fcConfig); if (!config) { config = FcInitLoadConfigAndFonts(); if (!config || !fc_atomic_ptr_cmpexch (&_fcConfig, NULL, config)) { if (config) FcConfigDestroy (config); goto retry; } } return config; } static void FcDestroyAsRule (void *data) { FcRuleDestroy (data); } static void FcDestroyAsRuleSet (void *data) { FcRuleSetDestroy (data); } FcBool FcConfigInit (void) { FcBool is_new = !!(_fcConfig == NULL); FcBool ret; ret = FcConfigEnsure() ? FcTrue : FcFalse; if (ret && !is_new) FcConfigReference (_fcConfig); return ret; } void FcConfigFini (void) { FcConfig *cfg; FcConfigDestroy (_fcConfig); cfg = fc_atomic_ptr_get (&_fcConfig); if (!cfg) free_lock(); } FcConfig * FcConfigCreate (void) { FcSetName set; FcConfig *config; FcMatchKind k; FcBool err = FcFalse; config = malloc (sizeof (FcConfig)); if (!config) goto bail0; config->configDirs = FcStrSetCreate(); if (!config->configDirs) goto bail1; config->configFiles = FcStrSetCreate(); if (!config->configFiles) goto bail2; config->fontDirs = FcStrSetCreate(); if (!config->fontDirs) goto bail3; config->acceptGlobs = FcStrSetCreate(); if (!config->acceptGlobs) goto bail4; config->rejectGlobs = FcStrSetCreate(); if (!config->rejectGlobs) goto bail5; config->acceptPatterns = FcFontSetCreate(); if (!config->acceptPatterns) goto bail6; config->rejectPatterns = FcFontSetCreate(); if (!config->rejectPatterns) goto bail7; config->cacheDirs = FcStrSetCreate(); if (!config->cacheDirs) goto bail8; for (k = FcMatchKindBegin; k < FcMatchKindEnd; k++) { config->subst[k] = FcPtrListCreate (FcDestroyAsRuleSet); if (!config->subst[k]) err = FcTrue; } if (err) goto bail9; config->maxObjects = 0; for (set = FcSetSystem; set <= FcSetApplication; set++) config->fonts[set] = 0; config->rescanTime = time (0); config->rescanInterval = 30; config->expr_pool = NULL; config->sysRoot = FcStrRealPath ((const FcChar8 *)getenv ("FONTCONFIG_SYSROOT")); config->rulesetList = FcPtrListCreate (FcDestroyAsRuleSet); if (!config->rulesetList) goto bail9; config->availConfigFiles = FcStrSetCreate(); if (!config->availConfigFiles) goto bail10; config->filter_func = NULL; config->filter_data = NULL; config->destroy_data_func = NULL; config->default_lang = NULL; config->default_langs = NULL; config->prgname = NULL; config->desktop_name = NULL; config->prefer_app_fonts = FcFalse; FcRefInit (&config->ref, 1); FcObjectInit(); return config; bail10: FcPtrListDestroy (config->rulesetList); bail9: for (k = FcMatchKindBegin; k < FcMatchKindEnd; k++) if (config->subst[k]) FcPtrListDestroy (config->subst[k]); FcStrSetDestroy (config->cacheDirs); bail8: FcFontSetDestroy (config->rejectPatterns); bail7: FcFontSetDestroy (config->acceptPatterns); bail6: FcStrSetDestroy (config->rejectGlobs); bail5: FcStrSetDestroy (config->acceptGlobs); bail4: FcStrSetDestroy (config->fontDirs); bail3: FcStrSetDestroy (config->configFiles); bail2: FcStrSetDestroy (config->configDirs); bail1: free (config); bail0: return 0; } static FcFileTime FcConfigNewestFile (FcStrSet *files) { FcStrList *list = FcStrListCreate (files); FcFileTime newest = { 0, FcFalse }; FcChar8 *file; struct stat statb; if (list) { while ((file = FcStrListNext (list))) if (FcStat (file, &statb) == 0) if (!newest.set || statb.st_mtime - newest.time > 0) { newest.set = FcTrue; newest.time = statb.st_mtime; } FcStrListDone (list); } return newest; } FcBool FcConfigUptoDate (FcConfig *config) { FcFileTime config_time, config_dir_time, font_time; time_t now = time (0); FcBool ret = FcTrue; config = FcConfigReference (config); if (!config) return FcFalse; config_time = FcConfigNewestFile (config->configFiles); config_dir_time = FcConfigNewestFile (config->configDirs); font_time = FcConfigNewestFile (config->fontDirs); if ((config_time.set && config_time.time - config->rescanTime > 0) || (config_dir_time.set && (config_dir_time.time - config->rescanTime) > 0) || (font_time.set && (font_time.time - config->rescanTime) > 0)) { /* We need to check for potential clock problems here (OLPC ticket #6046) */ if ((config_time.set && (config_time.time - now) > 0) || (config_dir_time.set && (config_dir_time.time - now) > 0) || (font_time.set && (font_time.time - now) > 0)) { fprintf (stderr, "Fontconfig warning: Directory/file mtime in the future. New fonts may not be detected.\n"); config->rescanTime = now; goto bail; } else { ret = FcFalse; goto bail; } } config->rescanTime = now; bail: FcConfigDestroy (config); return ret; } FcExpr * FcConfigAllocExpr (FcConfig *config) { if (!config->expr_pool || config->expr_pool->next == config->expr_pool->end) { FcExprPage *new_page; new_page = malloc (sizeof (FcExprPage)); if (!new_page) return 0; new_page->next_page = config->expr_pool; new_page->next = new_page->exprs; config->expr_pool = new_page; } return config->expr_pool->next++; } FcConfig * FcConfigReference (FcConfig *config) { if (!config) { /* lock during obtaining the value from _fcConfig and count up refcount there, * there are the race between them. */ lock_config(); retry: config = fc_atomic_ptr_get (&_fcConfig); if (!config) { unlock_config(); config = FcInitLoadConfigAndFonts(); lock_config(); if (!config) goto retry; if (!fc_atomic_ptr_cmpexch (&_fcConfig, NULL, config)) { FcConfigDestroy (config); goto retry; } } FcRefInc (&config->ref); unlock_config(); } else FcRefInc (&config->ref); return config; } void FcConfigDestroy (FcConfig *config) { FcSetName set; FcExprPage *page; FcMatchKind k; if (config) { if (FcRefDec (&config->ref) != 1) return; FcObjectFini(); (void)fc_atomic_ptr_cmpexch (&_fcConfig, config, NULL); FcStrSetDestroy (config->configDirs); FcStrSetDestroy (config->fontDirs); FcStrSetDestroy (config->cacheDirs); FcStrSetDestroy (config->configFiles); FcStrSetDestroy (config->acceptGlobs); FcStrSetDestroy (config->rejectGlobs); FcFontSetDestroy (config->acceptPatterns); FcFontSetDestroy (config->rejectPatterns); for (k = FcMatchKindBegin; k < FcMatchKindEnd; k++) FcPtrListDestroy (config->subst[k]); FcPtrListDestroy (config->rulesetList); FcStrSetDestroy (config->availConfigFiles); for (set = FcSetSystem; set <= FcSetApplication; set++) if (config->fonts[set]) FcFontSetDestroy (config->fonts[set]); page = config->expr_pool; while (page) { FcExprPage *next = page->next_page; free (page); page = next; } if (config->sysRoot) FcStrFree (config->sysRoot); if (config->filter_data && config->destroy_data_func) config->destroy_data_func (config->filter_data); if (config->default_lang) FcStrFree (config->default_lang); if (config->default_langs) { FcRefInit (&config->default_langs->ref, 1); FcStrSetDestroy (config->default_langs); } if (config->prgname) FcStrFree (config->prgname); if (config->desktop_name) FcStrFree (config->desktop_name); free (config); } } /* * Add cache to configuration, adding fonts and directories */ FcBool FcConfigAddCache (FcConfig *config, FcCache *cache, FcSetName set, FcStrSet *dirSet, FcChar8 *forDir) { FcFontSet *fs; intptr_t *dirs; int i; FcBool relocated = FcFalse; if (strcmp ((char *)FcCacheDir (cache), (char *)forDir) != 0) relocated = FcTrue; /* * Add fonts */ fs = FcCacheSet (cache); if (fs) { int nref = 0; for (i = 0; i < fs->nfont; i++) { FcPattern *font = FcFontSetFont (fs, i); FcChar8 *font_file; FcChar8 *relocated_font_file = NULL; if (FcPatternObjectGetString (font, FC_FILE_OBJECT, 0, &font_file) == FcResultMatch) { if (relocated) { FcChar8 *slash = FcStrLastSlash (font_file); relocated_font_file = FcStrBuildFilename (forDir, slash + 1, NULL); font_file = relocated_font_file; } /* * Check to see if font is banned by filename */ if (!FcConfigAcceptFilename (config, font_file)) { free (relocated_font_file); continue; } } /* * Check to see if font is banned by pattern */ if (!FcConfigAcceptFont (config, font)) { free (relocated_font_file); continue; } /* * Check to see if font is banned by client */ if (!FcConfigAcceptFilter (config, font)) { free (relocated_font_file); continue; } if (relocated_font_file) { font = FcPatternCacheRewriteFile (font, cache, relocated_font_file); free (relocated_font_file); } if (FcFontSetAdd (config->fonts[set], font)) nref++; } FcDirCacheReference (cache, nref); } /* * Add directories */ dirs = FcCacheDirs (cache); if (dirs) { for (i = 0; i < cache->dirs_count; i++) { const FcChar8 *dir = FcCacheSubdir (cache, i); FcChar8 *s = NULL; if (relocated) { FcChar8 *base = FcStrBasename (dir); dir = s = FcStrBuildFilename (forDir, base, NULL); FcStrFree (base); } if (FcConfigAcceptFilename (config, dir)) FcStrSetAddFilename (dirSet, dir); if (s) FcStrFree (s); } } return FcTrue; } static FcBool FcConfigAddDirList (FcConfig *config, FcSetName set, FcStrSet *dirSet) { FcStrList *dirlist; FcChar8 *dir; FcCache *cache; dirlist = FcStrListCreate (dirSet); if (!dirlist) return FcFalse; while ((dir = FcStrListNext (dirlist))) { if (FcDebug() & FC_DBG_FONTSET) printf ("adding fonts from %s\n", dir); cache = FcDirCacheRead (dir, FcFalse, config); if (!cache) continue; FcConfigAddCache (config, cache, set, dirSet, dir); FcDirCacheUnload (cache); } FcStrListDone (dirlist); return FcTrue; } /* * Scan the current list of directories in the configuration * and build the set of available fonts. */ FcBool FcConfigBuildFonts (FcConfig *config) { FcFontSet *fonts; FcBool ret = FcTrue; config = FcConfigReference (config); if (!config) return FcFalse; fonts = FcFontSetCreate(); if (!fonts) { ret = FcFalse; goto bail; } FcConfigSetFonts (config, fonts, FcSetSystem); if (!FcConfigAddDirList (config, FcSetSystem, config->fontDirs)) { ret = FcFalse; goto bail; } if (FcDebug() & FC_DBG_FONTSET) FcFontSetPrint (fonts); bail: FcConfigDestroy (config); return ret; } FcBool FcConfigSetCurrent (FcConfig *config) { FcConfig *cfg; if (config) { if (!config->fonts[FcSetSystem]) if (!FcConfigBuildFonts (config)) return FcFalse; FcRefInc (&config->ref); } lock_config(); retry: cfg = fc_atomic_ptr_get (&_fcConfig); if (config == cfg) { unlock_config(); if (config) FcConfigDestroy (config); return FcTrue; } if (!fc_atomic_ptr_cmpexch (&_fcConfig, cfg, config)) goto retry; unlock_config(); if (cfg) FcConfigDestroy (cfg); return FcTrue; } FcConfig * FcConfigGetCurrent (void) { return FcConfigEnsure(); } FcBool FcConfigAddConfigDir (FcConfig *config, const FcChar8 *d) { return FcStrSetAddFilename (config->configDirs, d); } FcStrList * FcConfigGetConfigDirs (FcConfig *config) { FcStrList *ret; config = FcConfigReference (config); if (!config) return NULL; ret = FcStrListCreate (config->configDirs); FcConfigDestroy (config); return ret; } FcBool FcConfigAddFontDir (FcConfig *config, const FcChar8 *d, const FcChar8 *m, const FcChar8 *salt) { if (FcDebug() & FC_DBG_CACHE) { if (m) { printf ("%s -> %s%s%s%s\n", d, m, salt ? " (salt: " : "", salt ? (const char *)salt : "", salt ? ")" : ""); } else if (salt) { printf ("%s%s%s%s\n", d, salt ? " (salt: " : "", salt ? (const char *)salt : "", salt ? ")" : ""); } } return FcStrSetAddFilenamePairWithSalt (config->fontDirs, d, m, salt); } FcBool FcConfigResetFontDirs (FcConfig *config) { if (FcDebug() & FC_DBG_CACHE) { printf ("Reset font directories!\n"); } return FcStrSetDeleteAll (config->fontDirs); } FcStrList * FcConfigGetFontDirs (FcConfig *config) { FcStrList *ret; config = FcConfigReference (config); if (!config) return NULL; ret = FcStrListCreate (config->fontDirs); FcConfigDestroy (config); return ret; } static FcBool FcConfigPathStartsWith (const FcChar8 *path, const FcChar8 *start) { int len = strlen ((char *)start); if (strncmp ((char *)path, (char *)start, len) != 0) return FcFalse; switch (path[len]) { case '\0': case FC_DIR_SEPARATOR: return FcTrue; default: return FcFalse; } } FcChar8 * FcConfigMapFontPath (FcConfig *config, const FcChar8 *path) { FcStrList *list; FcChar8 *dir; const FcChar8 *map, *rpath; FcChar8 *retval; list = FcConfigGetFontDirs (config); if (!list) return 0; while ((dir = FcStrListNext (list))) if (FcConfigPathStartsWith (path, dir)) break; FcStrListDone (list); if (!dir) return 0; map = FcStrTripleSecond (dir); if (!map) return 0; rpath = path + strlen ((char *)dir); while (*rpath == '/') rpath++; retval = FcStrBuildFilename (map, rpath, NULL); if (retval) { size_t len = strlen ((const char *)retval); while (len > 0 && retval[len - 1] == '/') len--; /* trim the last slash */ retval[len] = 0; } return retval; } const FcChar8 * FcConfigMapSalt (FcConfig *config, const FcChar8 *path) { FcStrList *list; FcChar8 *dir; list = FcConfigGetFontDirs (config); if (!list) return NULL; while ((dir = FcStrListNext (list))) if (FcConfigPathStartsWith (path, dir)) break; FcStrListDone (list); if (!dir) return NULL; return FcStrTripleThird (dir); } FcBool FcConfigAddCacheDir (FcConfig *config, const FcChar8 *d) { return FcStrSetAddFilename (config->cacheDirs, d); } FcStrList * FcConfigGetCacheDirs (FcConfig *config) { FcStrList *ret; config = FcConfigReference (config); if (!config) return NULL; ret = FcStrListCreate (config->cacheDirs); FcConfigDestroy (config); return ret; } FcBool FcConfigAddConfigFile (FcConfig *config, const FcChar8 *f) { FcBool ret; FcChar8 *file = FcConfigGetFilename (config, f); if (!file) return FcFalse; ret = FcStrSetAdd (config->configFiles, file); FcStrFree (file); return ret; } FcStrList * FcConfigGetConfigFiles (FcConfig *config) { FcStrList *ret; config = FcConfigReference (config); if (!config) return NULL; ret = FcStrListCreate (config->configFiles); FcConfigDestroy (config); return ret; } FcChar8 * FcConfigGetCache (FcConfig *config FC_UNUSED) { return NULL; } FcFontSet * FcConfigGetFonts (FcConfig *config, FcSetName set) { if (!config) { config = FcConfigGetCurrent(); if (!config) return 0; } return config->fonts[set]; } void FcConfigSetFonts (FcConfig *config, FcFontSet *fonts, FcSetName set) { if (config->fonts[set]) FcFontSetDestroy (config->fonts[set]); config->fonts[set] = fonts; } FcConfig * FcConfigSetFontSetFilter (FcConfig *config, FcFilterFontSetFunc filter_func, FcDestroyFunc destroy_data_func, void *user_data) { FcBool rebuild = FcFalse; if (!config) { /* Do not use FcConfigEnsure() here for optimization */ retry: config = fc_atomic_ptr_get (&_fcConfig); if (!config) config = FcConfigCreate(); else rebuild = FcTrue; } else rebuild = FcTrue; if (config->filter_data == user_data && config->filter_func == filter_func) { /* No need to update */ rebuild = FcFalse; } else { if (config->filter_data && config->destroy_data_func) { config->destroy_data_func (config->filter_data); } config->filter_func = filter_func; config->destroy_data_func = destroy_data_func; config->filter_data = user_data; } if (rebuild) { /* Rebuild FontSet */ FcConfigBuildFonts (config); } else { /* Initialize FcConfig with regular procedure */ config = FcInitLoadOwnConfigAndFonts (config); if (!config || !fc_atomic_ptr_cmpexch (&_fcConfig, NULL, config)) { if (config) FcConfigDestroy (config); goto retry; } } return config; } FcBlanks * FcBlanksCreate (void) { /* Deprecated. */ return NULL; } void FcBlanksDestroy (FcBlanks *b FC_UNUSED) { /* Deprecated. */ } FcBool FcBlanksAdd (FcBlanks *b FC_UNUSED, FcChar32 ucs4 FC_UNUSED) { /* Deprecated. */ return FcFalse; } FcBool FcBlanksIsMember (FcBlanks *b FC_UNUSED, FcChar32 ucs4 FC_UNUSED) { /* Deprecated. */ return FcFalse; } FcBlanks * FcConfigGetBlanks (FcConfig *config FC_UNUSED) { /* Deprecated. */ return NULL; } FcBool FcConfigAddBlank (FcConfig *config FC_UNUSED, FcChar32 blank FC_UNUSED) { /* Deprecated. */ return FcFalse; } int FcConfigGetRescanInterval (FcConfig *config) { int ret; config = FcConfigReference (config); if (!config) return 0; ret = config->rescanInterval; FcConfigDestroy (config); return ret; } FcBool FcConfigSetRescanInterval (FcConfig *config, int rescanInterval) { config = FcConfigReference (config); if (!config) return FcFalse; config->rescanInterval = rescanInterval; FcConfigDestroy (config); return FcTrue; } /* * A couple of typos escaped into the library */ int FcConfigGetRescanInverval (FcConfig *config) { return FcConfigGetRescanInterval (config); } FcBool FcConfigSetRescanInverval (FcConfig *config, int rescanInterval) { return FcConfigSetRescanInterval (config, rescanInterval); } FcBool FcConfigAddRule (FcConfig *config, FcRule *rule, FcMatchKind kind) { /* deprecated */ return FcFalse; } static FcValue FcConfigPromote (FcValue v, FcValue u, FcValuePromotionBuffer *buf) { switch (v.type) { case FcTypeInteger: v.type = FcTypeDouble; v.u.d = (double)v.u.i; /* Fallthrough */ case FcTypeDouble: if (u.type == FcTypeRange && buf) { v.u.r = FcRangePromote (v.u.d, buf); v.type = FcTypeRange; } break; case FcTypeVoid: if (u.type == FcTypeMatrix) { v.u.m = &FcIdentityMatrix; v.type = FcTypeMatrix; } else if (u.type == FcTypeLangSet && buf) { v.u.l = FcLangSetPromote (NULL, buf); v.type = FcTypeLangSet; } else if (u.type == FcTypeCharSet && buf) { v.u.c = FcCharSetPromote (buf); v.type = FcTypeCharSet; } break; case FcTypeString: if (u.type == FcTypeLangSet && buf) { v.u.l = FcLangSetPromote (v.u.s, buf); v.type = FcTypeLangSet; } break; default: break; } return v; } FcBool FcConfigCompareValue (const FcValue *left_o, unsigned int op_, const FcValue *right_o) { FcValue left; FcValue right; FcBool ret = FcFalse; FcOp op = FC_OP_GET_OP (op_); int flags = FC_OP_GET_FLAGS (op_); FcValuePromotionBuffer buf1, buf2; if (left_o->type != right_o->type) { left = FcValueCanonicalize (left_o); right = FcValueCanonicalize (right_o); left = FcConfigPromote (left, right, &buf1); right = FcConfigPromote (right, left, &buf2); left_o = &left; right_o = &right; if (left_o->type != right_o->type) { if (op == FcOpNotEqual || op == FcOpNotContains) ret = FcTrue; return ret; } } switch (left_o->type) { case FcTypeUnknown: break; /* No way to guess how to compare for this object */ case FcTypeInteger: { int l = left_o->u.i; int r = right_o->u.i; switch ((int)op) { case FcOpEqual: case FcOpContains: case FcOpListing: ret = l == r; break; case FcOpNotEqual: case FcOpNotContains: ret = l != r; break; case FcOpLess: ret = l < r; break; case FcOpLessEqual: ret = l <= r; break; case FcOpMore: ret = l > r; break; case FcOpMoreEqual: ret = l >= r; break; default: break; } break; } case FcTypeDouble: { double l = left_o->u.d; double r = right_o->u.d; switch ((int)op) { case FcOpEqual: case FcOpContains: case FcOpListing: ret = l == r; break; case FcOpNotEqual: case FcOpNotContains: ret = l != r; break; case FcOpLess: ret = l < r; break; case FcOpLessEqual: ret = l <= r; break; case FcOpMore: ret = l > r; break; case FcOpMoreEqual: ret = l >= r; break; default: break; } break; } case FcTypeBool: { FcBool l = left_o->u.b; FcBool r = right_o->u.b; switch ((int)op) { case FcOpEqual: ret = l == r; break; case FcOpContains: case FcOpListing: ret = l == r || l >= FcDontCare; break; case FcOpNotEqual: ret = l != r; break; case FcOpNotContains: ret = !(l == r || l >= FcDontCare); break; case FcOpLess: ret = l != r && r >= FcDontCare; break; case FcOpLessEqual: ret = l == r || r >= FcDontCare; break; case FcOpMore: ret = l != r && l >= FcDontCare; break; case FcOpMoreEqual: ret = l == r || l >= FcDontCare; break; default: break; } break; } case FcTypeString: { const FcChar8 *l = FcValueString (left_o); const FcChar8 *r = FcValueString (right_o); switch ((int)op) { case FcOpEqual: case FcOpListing: if (flags & FcOpFlagIgnoreBlanks) ret = FcStrCmpIgnoreBlanksAndCase (l, r) == 0; else ret = FcStrCmpIgnoreCase (l, r) == 0; break; case FcOpContains: ret = FcStrStrIgnoreCase (l, r) != 0; break; case FcOpNotEqual: if (flags & FcOpFlagIgnoreBlanks) ret = FcStrCmpIgnoreBlanksAndCase (l, r) != 0; else ret = FcStrCmpIgnoreCase (l, r) != 0; break; case FcOpNotContains: ret = FcStrStrIgnoreCase (l, r) == 0; break; default: break; } break; } case FcTypeMatrix: { switch ((int)op) { case FcOpEqual: case FcOpContains: case FcOpListing: ret = FcMatrixEqual (left_o->u.m, right_o->u.m); break; case FcOpNotEqual: case FcOpNotContains: ret = !FcMatrixEqual (left_o->u.m, right_o->u.m); break; default: break; } break; } case FcTypeCharSet: { const FcCharSet *l = FcValueCharSet (left_o); const FcCharSet *r = FcValueCharSet (right_o); switch ((int)op) { case FcOpContains: case FcOpListing: /* left contains right if right is a subset of left */ ret = FcCharSetIsSubset (r, l); break; case FcOpNotContains: /* left contains right if right is a subset of left */ ret = !FcCharSetIsSubset (r, l); break; case FcOpEqual: ret = FcCharSetEqual (l, r); break; case FcOpNotEqual: ret = !FcCharSetEqual (l, r); break; default: break; } break; } case FcTypeLangSet: { const FcLangSet *l = FcValueLangSet (left_o); const FcLangSet *r = FcValueLangSet (right_o); switch ((int)op) { case FcOpContains: case FcOpListing: ret = FcLangSetContains (l, r); break; case FcOpNotContains: ret = !FcLangSetContains (l, r); break; case FcOpEqual: ret = FcLangSetEqual (l, r); break; case FcOpNotEqual: ret = !FcLangSetEqual (l, r); break; default: break; } break; } case FcTypeVoid: switch ((int)op) { case FcOpEqual: case FcOpContains: case FcOpListing: ret = FcTrue; break; default: break; } break; case FcTypeFTFace: switch ((int)op) { case FcOpEqual: case FcOpContains: case FcOpListing: ret = left_o->u.f == right_o->u.f; break; case FcOpNotEqual: case FcOpNotContains: ret = left_o->u.f != right_o->u.f; break; default: break; } break; case FcTypeRange: { const FcRange *l = FcValueRange (left_o); const FcRange *r = FcValueRange (right_o); ret = FcRangeCompare (op, l, r); break; } } return ret; } #define _FcDoubleFloor(d) ((int)(d)) #define _FcDoubleCeil(d) ((double)(int)(d) == (d) ? (int)(d) : (int)((d) + 1)) #define FcDoubleFloor(d) ((d) >= 0 ? _FcDoubleFloor (d) : -_FcDoubleCeil (-(d))) #define FcDoubleCeil(d) ((d) >= 0 ? _FcDoubleCeil (d) : -_FcDoubleFloor (-(d))) #define FcDoubleRound(d) FcDoubleFloor ((d) + 0.5) #define FcDoubleTrunc(d) ((d) >= 0 ? _FcDoubleFloor (d) : -_FcDoubleFloor (-(d))) static FcValue FcConfigEvaluate (FcPattern *p, FcPattern *p_pat, FcMatchKind kind, FcExpr *e) { FcValue v, vl, vr, vle, vre; FcMatrix *m; FcChar8 *str; FcOp op = FC_OP_GET_OP (e->op); FcValuePromotionBuffer buf1, buf2; switch ((int)op) { case FcOpInteger: v.type = FcTypeInteger; v.u.i = e->u.ival; break; case FcOpDouble: v.type = FcTypeDouble; v.u.d = e->u.dval; break; case FcOpString: v.type = FcTypeString; v.u.s = e->u.sval; v = FcValueSave (v); break; case FcOpMatrix: { FcMatrix m; FcValue xx, xy, yx, yy; v.type = FcTypeMatrix; xx = FcConfigPromote (FcConfigEvaluate (p, p_pat, kind, e->u.mexpr->xx), v, NULL); xy = FcConfigPromote (FcConfigEvaluate (p, p_pat, kind, e->u.mexpr->xy), v, NULL); yx = FcConfigPromote (FcConfigEvaluate (p, p_pat, kind, e->u.mexpr->yx), v, NULL); yy = FcConfigPromote (FcConfigEvaluate (p, p_pat, kind, e->u.mexpr->yy), v, NULL); if (xx.type == FcTypeDouble && xy.type == FcTypeDouble && yx.type == FcTypeDouble && yy.type == FcTypeDouble) { m.xx = xx.u.d; m.xy = xy.u.d; m.yx = yx.u.d; m.yy = yy.u.d; v.u.m = &m; } else v.type = FcTypeVoid; v = FcValueSave (v); } break; case FcOpCharSet: v.type = FcTypeCharSet; v.u.c = e->u.cval; v = FcValueSave (v); break; case FcOpLangSet: v.type = FcTypeLangSet; v.u.l = e->u.lval; v = FcValueSave (v); break; case FcOpRange: v.type = FcTypeRange; v.u.r = e->u.rval; v = FcValueSave (v); break; case FcOpBool: v.type = FcTypeBool; v.u.b = e->u.bval; break; case FcOpField: if (kind == FcMatchFont && e->u.name.kind == FcMatchPattern) { if (FcResultMatch != FcPatternObjectGet (p_pat, e->u.name.object, 0, &v)) v.type = FcTypeVoid; } else if (kind == FcMatchPattern && e->u.name.kind == FcMatchFont) { fprintf (stderr, "Fontconfig warning: tag has target=\"font\" in a .\n"); v.type = FcTypeVoid; } else { if (FcResultMatch != FcPatternObjectGet (p, e->u.name.object, 0, &v)) v.type = FcTypeVoid; } v = FcValueSave (v); break; case FcOpConst: if (FcNameConstant (e->u.constant, &v.u.i)) v.type = FcTypeInteger; else v.type = FcTypeVoid; break; case FcOpQuest: vl = FcConfigEvaluate (p, p_pat, kind, e->u.tree.left); if (vl.type == FcTypeBool) { if (vl.u.b) v = FcConfigEvaluate (p, p_pat, kind, e->u.tree.right->u.tree.left); else v = FcConfigEvaluate (p, p_pat, kind, e->u.tree.right->u.tree.right); } else v.type = FcTypeVoid; FcValueDestroy (vl); break; case FcOpEqual: case FcOpNotEqual: case FcOpLess: case FcOpLessEqual: case FcOpMore: case FcOpMoreEqual: case FcOpContains: case FcOpNotContains: case FcOpListing: vl = FcConfigEvaluate (p, p_pat, kind, e->u.tree.left); vr = FcConfigEvaluate (p, p_pat, kind, e->u.tree.right); v.type = FcTypeBool; v.u.b = FcConfigCompareValue (&vl, e->op, &vr); FcValueDestroy (vl); FcValueDestroy (vr); break; case FcOpOr: case FcOpAnd: case FcOpPlus: case FcOpMinus: case FcOpTimes: case FcOpDivide: vl = FcConfigEvaluate (p, p_pat, kind, e->u.tree.left); vr = FcConfigEvaluate (p, p_pat, kind, e->u.tree.right); vle = FcConfigPromote (vl, vr, &buf1); vre = FcConfigPromote (vr, vle, &buf2); if (vle.type == vre.type) { switch ((int)vle.type) { case FcTypeDouble: switch ((int)op) { case FcOpPlus: v.type = FcTypeDouble; v.u.d = vle.u.d + vre.u.d; break; case FcOpMinus: v.type = FcTypeDouble; v.u.d = vle.u.d - vre.u.d; break; case FcOpTimes: v.type = FcTypeDouble; v.u.d = vle.u.d * vre.u.d; break; case FcOpDivide: v.type = FcTypeDouble; v.u.d = vle.u.d / vre.u.d; break; default: v.type = FcTypeVoid; break; } if (v.type == FcTypeDouble && v.u.d == (double)(int)v.u.d) { v.type = FcTypeInteger; v.u.i = (int)v.u.d; } break; case FcTypeBool: switch ((int)op) { case FcOpOr: v.type = FcTypeBool; v.u.b = vle.u.b || vre.u.b; break; case FcOpAnd: v.type = FcTypeBool; v.u.b = vle.u.b && vre.u.b; break; default: v.type = FcTypeVoid; break; } break; case FcTypeString: switch ((int)op) { case FcOpPlus: v.type = FcTypeString; str = FcStrPlus (vle.u.s, vre.u.s); v.u.s = FcStrdup (str); FcStrFree (str); if (!v.u.s) v.type = FcTypeVoid; break; default: v.type = FcTypeVoid; break; } break; case FcTypeMatrix: switch ((int)op) { case FcOpTimes: v.type = FcTypeMatrix; m = malloc (sizeof (FcMatrix)); if (m) { FcMatrixMultiply (m, vle.u.m, vre.u.m); v.u.m = m; } else { v.type = FcTypeVoid; } break; default: v.type = FcTypeVoid; break; } break; case FcTypeCharSet: switch ((int)op) { case FcOpPlus: v.type = FcTypeCharSet; v.u.c = FcCharSetUnion (vle.u.c, vre.u.c); if (!v.u.c) v.type = FcTypeVoid; break; case FcOpMinus: v.type = FcTypeCharSet; v.u.c = FcCharSetSubtract (vle.u.c, vre.u.c); if (!v.u.c) v.type = FcTypeVoid; break; default: v.type = FcTypeVoid; break; } break; case FcTypeLangSet: switch ((int)op) { case FcOpPlus: v.type = FcTypeLangSet; v.u.l = FcLangSetUnion (vle.u.l, vre.u.l); if (!v.u.l) v.type = FcTypeVoid; break; case FcOpMinus: v.type = FcTypeLangSet; v.u.l = FcLangSetSubtract (vle.u.l, vre.u.l); if (!v.u.l) v.type = FcTypeVoid; break; default: v.type = FcTypeVoid; break; } break; default: v.type = FcTypeVoid; break; } } else v.type = FcTypeVoid; FcValueDestroy (vl); FcValueDestroy (vr); break; case FcOpNot: vl = FcConfigEvaluate (p, p_pat, kind, e->u.tree.left); switch ((int)vl.type) { case FcTypeBool: v.type = FcTypeBool; v.u.b = !vl.u.b; break; default: v.type = FcTypeVoid; break; } FcValueDestroy (vl); break; case FcOpFloor: vl = FcConfigEvaluate (p, p_pat, kind, e->u.tree.left); switch ((int)vl.type) { case FcTypeInteger: v = vl; break; case FcTypeDouble: v.type = FcTypeInteger; v.u.i = FcDoubleFloor (vl.u.d); break; default: v.type = FcTypeVoid; break; } FcValueDestroy (vl); break; case FcOpCeil: vl = FcConfigEvaluate (p, p_pat, kind, e->u.tree.left); switch ((int)vl.type) { case FcTypeInteger: v = vl; break; case FcTypeDouble: v.type = FcTypeInteger; v.u.i = FcDoubleCeil (vl.u.d); break; default: v.type = FcTypeVoid; break; } FcValueDestroy (vl); break; case FcOpRound: vl = FcConfigEvaluate (p, p_pat, kind, e->u.tree.left); switch ((int)vl.type) { case FcTypeInteger: v = vl; break; case FcTypeDouble: v.type = FcTypeInteger; v.u.i = FcDoubleRound (vl.u.d); break; default: v.type = FcTypeVoid; break; } FcValueDestroy (vl); break; case FcOpTrunc: vl = FcConfigEvaluate (p, p_pat, kind, e->u.tree.left); switch ((int)vl.type) { case FcTypeInteger: v = vl; break; case FcTypeDouble: v.type = FcTypeInteger; v.u.i = FcDoubleTrunc (vl.u.d); break; default: v.type = FcTypeVoid; break; } FcValueDestroy (vl); break; default: v.type = FcTypeVoid; break; } return v; } /* The bulk of the time in FcConfigSubstitute is spent walking * lists of family names. We speed this up with a hash table. * Since we need to take the ignore-blanks option into account, * we use two separate hash tables. */ typedef struct { int count; } FamilyTableEntry; typedef struct { FcHashTable *family_blank_hash; FcHashTable *family_hash; } FamilyTable; static FcBool FamilyTableLookup (FamilyTable *table, FcOp _op, const FcChar8 *s) { FamilyTableEntry *fe; int flags = FC_OP_GET_FLAGS (_op); FcHashTable *hash; if (flags & FcOpFlagIgnoreBlanks) hash = table->family_blank_hash; else hash = table->family_hash; return FcHashTableFind (hash, (const void *)s, (void **)&fe); } static void FamilyTableAdd (FamilyTable *table, FcValueListPtr values) { FcValueListPtr ll; for (ll = values; ll; ll = FcValueListNext (ll)) { const FcChar8 *s = FcValueString (&ll->value); FamilyTableEntry *fe; if (!FcHashTableFind (table->family_hash, (const void *)s, (void **)&fe)) { fe = malloc (sizeof (FamilyTableEntry)); fe->count = 0; FcHashTableAdd (table->family_hash, (void *)s, fe); } fe->count++; if (!FcHashTableFind (table->family_blank_hash, (const void *)s, (void **)&fe)) { fe = malloc (sizeof (FamilyTableEntry)); fe->count = 0; FcHashTableAdd (table->family_blank_hash, (void *)s, fe); } fe->count++; } } static void FamilyTableDel (FamilyTable *table, const FcChar8 *s) { FamilyTableEntry *fe; if (FcHashTableFind (table->family_hash, (void *)s, (void **)&fe)) { fe->count--; if (fe->count == 0) FcHashTableRemove (table->family_hash, (void *)s); } if (FcHashTableFind (table->family_blank_hash, (void *)s, (void **)&fe)) { fe->count--; if (fe->count == 0) FcHashTableRemove (table->family_blank_hash, (void *)s); } } static FcBool copy_string (const void *src, void **dest) { *dest = strdup ((char *)src); return FcTrue; } static void FamilyTableInit (FamilyTable *table, FcPattern *p) { FcPatternElt *e; table->family_blank_hash = FcHashTableCreate ((FcHashFunc)FcStrHashIgnoreBlanksAndCase, (FcCompareFunc)FcStrCmpIgnoreBlanksAndCase, (FcCopyFunc)copy_string, NULL, free, free); table->family_hash = FcHashTableCreate ((FcHashFunc)FcStrHashIgnoreCase, (FcCompareFunc)FcStrCmpIgnoreCase, (FcCopyFunc)copy_string, NULL, free, free); e = FcPatternObjectFindElt (p, FC_FAMILY_OBJECT); if (e) FamilyTableAdd (table, FcPatternEltValues (e)); } static void FamilyTableClear (FamilyTable *table) { if (table->family_blank_hash) FcHashTableDestroy (table->family_blank_hash); if (table->family_hash) FcHashTableDestroy (table->family_hash); } static FcValueList * FcConfigMatchValueList (FcPattern *p, FcPattern *p_pat, FcMatchKind kind, FcTest *t, FcValueList *values, FamilyTable *table) { FcValueList *ret = 0; FcExpr *e = t->expr; FcValue value; FcValueList *v; FcOp op; while (e) { /* Compute the value of the match expression */ if (FC_OP_GET_OP (e->op) == FcOpComma) { value = FcConfigEvaluate (p, p_pat, kind, e->u.tree.left); e = e->u.tree.right; } else { value = FcConfigEvaluate (p, p_pat, kind, e); e = 0; } if (t->object == FC_FAMILY_OBJECT && table) { op = FC_OP_GET_OP (t->op); if (op == FcOpEqual || op == FcOpListing) { if (!FamilyTableLookup (table, t->op, FcValueString (&value))) { ret = 0; goto done; } } if (op == FcOpNotEqual && t->qual == FcQualAll) { ret = 0; if (!FamilyTableLookup (table, t->op, FcValueString (&value))) { ret = values; } goto done; } } for (v = values; v; v = FcValueListNext (v)) { /* Compare the pattern value to the match expression value */ if (FcConfigCompareValue (&v->value, t->op, &value)) { if (!ret) ret = v; if (t->qual != FcQualAll) break; } else { if (t->qual == FcQualAll) { ret = 0; break; } } } done: FcValueDestroy (value); } return ret; } static FcValueList * FcConfigValues (FcPattern *p, FcPattern *p_pat, FcMatchKind kind, FcExpr *e, FcValueBinding binding) { FcValueList *l; if (!e) return 0; l = (FcValueList *)malloc (sizeof (FcValueList)); if (!l) return 0; if (FC_OP_GET_OP (e->op) == FcOpComma) { l->value = FcConfigEvaluate (p, p_pat, kind, e->u.tree.left); l->next = FcConfigValues (p, p_pat, kind, e->u.tree.right, binding); } else { l->value = FcConfigEvaluate (p, p_pat, kind, e); l->next = NULL; } l->binding = binding; if (l->value.type == FcTypeVoid) { FcValueList *next = FcValueListNext (l); free (l); l = next; } return l; } static FcBool FcConfigAdd (FcValueListPtr *head, FcValueList *position, FcBool append, FcValueList *newp, FcObject object, FamilyTable *table) { FcValueListPtr *prev, l, last, v; FcValueBinding sameBinding; /* * Make sure the stored type is valid for built-in objects */ for (l = newp; l != NULL; l = FcValueListNext (l)) { if (!FcObjectValidType (object, l->value.type)) { fprintf (stderr, "Fontconfig warning: FcPattern object %s does not accept value", FcObjectName (object)); FcValuePrintFile (stderr, l->value); fprintf (stderr, "\n"); if (FcDebug() & FC_DBG_EDIT) { printf ("Not adding\n"); } return FcFalse; } } if (object == FC_FAMILY_OBJECT && table) { FamilyTableAdd (table, newp); } if (position) sameBinding = position->binding; else sameBinding = FcValueBindingWeak; for (v = newp; v != NULL; v = FcValueListNext (v)) if (v->binding == FcValueBindingSame) v->binding = sameBinding; if (append) { if (position) prev = &position->next; else for (prev = head; *prev != NULL; prev = &(*prev)->next) ; } else { if (position) { for (prev = head; *prev != NULL; prev = &(*prev)->next) { if (*prev == position) break; } } else prev = head; if (FcDebug() & FC_DBG_EDIT) { if (*prev == NULL) printf ("position not on list\n"); } } if (FcDebug() & FC_DBG_EDIT) { printf ("%s list before ", append ? "Append" : "Prepend"); FcValueListPrintWithPosition (*head, *prev); printf ("\n"); } if (newp) { last = newp; while (last->next != NULL) last = last->next; last->next = *prev; *prev = newp; } if (FcDebug() & FC_DBG_EDIT) { printf ("%s list after ", append ? "Append" : "Prepend"); FcValueListPrint (*head); printf ("\n"); } return FcTrue; } static void FcConfigDel (FcValueListPtr *head, FcValueList *position, FcObject object, FamilyTable *table) { FcValueListPtr *prev; if (object == FC_FAMILY_OBJECT && table) { FamilyTableDel (table, FcValueString (&position->value)); } for (prev = head; *prev != NULL; prev = &(*prev)->next) { if (*prev == position) { *prev = position->next; position->next = NULL; FcValueListDestroy (position); break; } } } static void FcConfigPatternAdd (FcPattern *p, FcObject object, FcValueList *list, FcBool append, FamilyTable *table) { if (list) { FcPatternElt *e = FcPatternObjectInsertElt (p, object); if (!e) return; FcConfigAdd (&e->values, 0, append, list, object, table); } } /* * Delete all values associated with a field */ static void FcConfigPatternDel (FcPattern *p, FcObject object, FamilyTable *table) { FcPatternElt *e = FcPatternObjectFindElt (p, object); if (!e) return; while (e->values != NULL) FcConfigDel (&e->values, e->values, object, table); } static void FcConfigPatternCanon (FcPattern *p, FcObject object) { FcPatternElt *e = FcPatternObjectFindElt (p, object); if (!e) return; if (e->values == NULL) FcPatternObjectDel (p, object); } FcBool FcConfigSubstituteWithPat (FcConfig *config, FcPattern *p, FcPattern *p_pat, FcMatchKind kind) { FcValue v; FcPtrList *s; FcPtrListIter iter, iter2; FcRule *r; FcRuleSet *rs; FcValueList *l, **value = NULL, *vl; FcPattern *m; FcStrSet *strs; FcObject object = FC_INVALID_OBJECT; FcPatternElt **elt = NULL, *e; int i, nobjs; FcBool retval = FcTrue; FcTest **tst = NULL; FamilyTable data; FamilyTable *table = &data; if (kind < FcMatchKindBegin || kind >= FcMatchKindEnd) return FcFalse; config = FcConfigReference (config); if (!config) return FcFalse; s = config->subst[kind]; if (kind == FcMatchPattern) { strs = FcConfigGetDefaultLangs (config); if (strs) { FcStrList *l = FcStrListCreate (strs); FcChar8 *lang; FcValue v; FcLangSet *lsund = FcLangSetCreate(); FcLangSetAdd (lsund, (const FcChar8 *)"und"); FcStrSetDestroy (strs); while (l && (lang = FcStrListNext (l))) { FcPatternElt *e = FcPatternObjectFindElt (p, FC_LANG_OBJECT); if (e) { FcValueListPtr ll; for (ll = FcPatternEltValues (e); ll; ll = FcValueListNext (ll)) { FcValue vv = FcValueCanonicalize (&ll->value); if (vv.type == FcTypeLangSet) { FcLangSet *ls = FcLangSetCreate(); FcBool b; FcLangSetAdd (ls, lang); b = FcLangSetContains (vv.u.l, ls); FcLangSetDestroy (ls); if (b) goto bail_lang; if (FcLangSetContains (vv.u.l, lsund)) goto bail_lang; } else { if (FcStrCmpIgnoreCase (vv.u.s, lang) == 0) goto bail_lang; if (FcStrCmpIgnoreCase (vv.u.s, (const FcChar8 *)"und") == 0) goto bail_lang; } } } v.type = FcTypeString; v.u.s = lang; FcPatternObjectAddWithBinding (p, FC_LANG_OBJECT, v, FcValueBindingWeak, FcTrue); } bail_lang: FcStrListDone (l); FcLangSetDestroy (lsund); } if (FcPatternObjectGet (p, FC_PRGNAME_OBJECT, 0, &v) == FcResultNoMatch) { FcChar8 *prgname = FcConfigGetPrgname (config); if (prgname) FcPatternObjectAddString (p, FC_PRGNAME_OBJECT, prgname); } } nobjs = FC_MAX_BASE_OBJECT + config->maxObjects + 2; value = (FcValueList **)malloc (SIZEOF_VOID_P * nobjs); if (!value) { retval = FcFalse; goto bail1; } elt = (FcPatternElt **)malloc (SIZEOF_VOID_P * nobjs); if (!elt) { retval = FcFalse; goto bail1; } tst = (FcTest **)malloc (SIZEOF_VOID_P * nobjs); if (!tst) { retval = FcFalse; goto bail1; } if (FcDebug() & FC_DBG_EDIT) { printf ("FcConfigSubstitute "); FcPatternPrint (p); } FamilyTableInit (&data, p); FcPtrListIterInit (s, &iter); for (; FcPtrListIterIsValid (s, &iter); FcPtrListIterNext (s, &iter)) { rs = (FcRuleSet *)FcPtrListIterGetValue (s, &iter); if (FcDebug() & FC_DBG_EDIT) { printf ("\nRule Set: %s\n", rs->name); } FcPtrListIterInit (rs->subst[kind], &iter2); for (; FcPtrListIterIsValid (rs->subst[kind], &iter2); FcPtrListIterNext (rs->subst[kind], &iter2)) { r = (FcRule *)FcPtrListIterGetValue (rs->subst[kind], &iter2); for (i = 0; i < nobjs; i++) { elt[i] = NULL; value[i] = NULL; tst[i] = NULL; } for (; r; r = r->next) { switch (r->type) { case FcRuleUnknown: /* shouldn't be reached */ break; case FcRuleTest: object = FC_OBJ_ID (r->u.test->object); /* * Check the tests to see if * they all match the pattern */ if (FcDebug() & FC_DBG_EDIT) { printf ("FcConfigSubstitute test "); FcTestPrint (r->u.test); } if (kind == FcMatchFont && r->u.test->kind == FcMatchPattern) { m = p_pat; table = NULL; } else { m = p; table = &data; } if (m) e = FcPatternObjectFindElt (m, r->u.test->object); else e = NULL; /* different 'kind' won't be the target of edit */ if (!elt[object] && kind == r->u.test->kind) { elt[object] = e; tst[object] = r->u.test; } /* * If there's no such field in the font, * then FcQualAll matches while FcQualAny does not */ if (!e) { if (r->u.test->qual == FcQualAll) { value[object] = NULL; continue; } else { if (FcDebug() & FC_DBG_EDIT) printf ("No match\n"); goto bail; } } /* * Check to see if there is a match, mark the location * to apply match-relative edits */ vl = FcConfigMatchValueList (m, p_pat, kind, r->u.test, e->values, table); /* different 'kind' won't be the target of edit */ if (!value[object] && kind == r->u.test->kind) value[object] = vl; if (!vl || (r->u.test->qual == FcQualFirst && vl != e->values) || (r->u.test->qual == FcQualNotFirst && vl == e->values)) { if (FcDebug() & FC_DBG_EDIT) printf ("No match\n"); goto bail; } break; case FcRuleEdit: object = FC_OBJ_ID (r->u.edit->object); if (FcDebug() & FC_DBG_EDIT) { printf ("Substitute "); FcEditPrint (r->u.edit); printf ("\n\n"); } /* * Evaluate the list of expressions */ l = FcConfigValues (p, p_pat, kind, r->u.edit->expr, r->u.edit->binding); if (tst[object] && (tst[object]->kind == FcMatchFont || kind == FcMatchPattern)) elt[object] = FcPatternObjectFindElt (p, tst[object]->object); switch (FC_OP_GET_OP (r->u.edit->op)) { case FcOpAssign: /* * If there was a test, then replace the matched * value with the new list of values */ if (value[object]) { FcValueList *thisValue = value[object]; FcValueList *nextValue = l; /* * Append the new list of values after the current value */ FcConfigAdd (&elt[object]->values, thisValue, FcTrue, l, r->u.edit->object, table); /* * Delete the marked value */ if (thisValue) FcConfigDel (&elt[object]->values, thisValue, object, table); /* * Adjust a pointer into the value list to ensure * future edits occur at the same place */ value[object] = nextValue; break; } /* fall through ... */ case FcOpAssignReplace: /* * Delete all of the values and insert * the new set */ FcConfigPatternDel (p, r->u.edit->object, table); FcConfigPatternAdd (p, r->u.edit->object, l, FcTrue, table); /* * Adjust a pointer into the value list as they no * longer point to anything valid */ value[object] = NULL; break; case FcOpPrepend: if (value[object]) { FcConfigAdd (&elt[object]->values, value[object], FcFalse, l, r->u.edit->object, table); break; } /* fall through ... */ case FcOpPrependFirst: FcConfigPatternAdd (p, r->u.edit->object, l, FcFalse, table); break; case FcOpAppend: if (value[object]) { FcConfigAdd (&elt[object]->values, value[object], FcTrue, l, r->u.edit->object, table); break; } /* fall through ... */ case FcOpAppendLast: FcConfigPatternAdd (p, r->u.edit->object, l, FcTrue, table); break; case FcOpDelete: if (value[object]) { FcConfigDel (&elt[object]->values, value[object], object, table); FcValueListDestroy (l); break; } /* fall through ... */ case FcOpDeleteAll: FcConfigPatternDel (p, r->u.edit->object, table); FcValueListDestroy (l); break; default: FcValueListDestroy (l); break; } /* * Now go through the pattern and eliminate * any properties without data */ FcConfigPatternCanon (p, r->u.edit->object); if (FcDebug() & FC_DBG_EDIT) { printf ("FcConfigSubstitute edit"); FcPatternPrint (p); } break; } } bail:; } } if (FcDebug() & FC_DBG_EDIT) { printf ("FcConfigSubstitute done"); FcPatternPrint (p); } FamilyTableClear (&data); bail1: if (elt) free (elt); if (value) free (value); if (tst) free (tst); FcConfigDestroy (config); return retval; } FcBool FcConfigSubstitute (FcConfig *config, FcPattern *p, FcMatchKind kind) { return FcConfigSubstituteWithPat (config, p, 0, kind); } #if defined(_WIN32) static FcChar8 fontconfig_path[1000] = ""; /* MT-dontcare */ FcChar8 fontconfig_instprefix[1000] = ""; /* MT-dontcare */ # if (defined(PIC) || defined(DLL_EXPORT)) BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved); BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { FcChar8 *p; switch (fdwReason) { case DLL_PROCESS_ATTACH: if (!GetModuleFileName ((HMODULE)hinstDLL, (LPCH)fontconfig_path, sizeof (fontconfig_path))) break; /* If the fontconfig DLL is in a "bin" or "lib" subfolder, * assume it's a Unix-style installation tree, and use * "etc/fonts" in there as FONTCONFIG_PATH. Otherwise use the * folder where the DLL is as FONTCONFIG_PATH. */ p = (FcChar8 *)strrchr ((const char *)fontconfig_path, '\\'); if (p) { *p = '\0'; p = (FcChar8 *)strrchr ((const char *)fontconfig_path, '\\'); if (p && (FcStrCmpIgnoreCase (p + 1, (const FcChar8 *)"bin") == 0 || FcStrCmpIgnoreCase (p + 1, (const FcChar8 *)"lib") == 0)) *p = '\0'; strcat ((char *)fontconfig_instprefix, (char *)fontconfig_path); strcat ((char *)fontconfig_path, "\\etc\\fonts"); } else fontconfig_path[0] = '\0'; break; } return TRUE; } # endif /* !PIC */ # undef FONTCONFIG_PATH # define FONTCONFIG_PATH fontconfig_path #endif /* !_WIN32 */ #ifndef FONTCONFIG_FILE # define FONTCONFIG_FILE "fonts.conf" #endif static FcChar8 * FcConfigFileExists (const FcChar8 *dir, const FcChar8 *file) { FcChar8 *path; int size, osize; if (!dir) dir = (FcChar8 *)""; osize = strlen ((char *)dir) + 1 + strlen ((char *)file) + 1; /* * workaround valgrind warning because glibc takes advantage of how it knows memory is * allocated to implement strlen by reading in groups of 4 */ size = (osize + 3) & ~3; path = malloc (size); if (!path) return 0; strcpy ((char *)path, (const char *)dir); /* make sure there's a single separator */ #ifdef _WIN32 if ((!path[0] || (path[strlen ((char *)path) - 1] != '/' && path[strlen ((char *)path) - 1] != '\\')) && !(file[0] == '/' || file[0] == '\\' || (isalpha (file[0]) && file[1] == ':' && (file[2] == '/' || file[2] == '\\')))) strcat ((char *)path, "\\"); #else if ((!path[0] || path[strlen ((char *)path) - 1] != '/') && file[0] != '/') strcat ((char *)path, "/"); else osize--; #endif strcat ((char *)path, (char *)file); if (access ((char *)path, R_OK) == 0) return path; FcStrFree (path); return 0; } static FcChar8 ** FcConfigGetPath (void) { FcChar8 **path; FcChar8 *env, *e, *colon; FcChar8 *dir; int npath; int i; npath = 2; /* default dir + null */ env = (FcChar8 *)getenv ("FONTCONFIG_PATH"); if (env) { e = env; npath++; while (*e) if (*e++ == FC_SEARCH_PATH_SEPARATOR) npath++; } path = calloc (npath, sizeof (FcChar8 *)); if (!path) goto bail0; i = 0; if (env) { e = env; while (*e) { colon = (FcChar8 *)strchr ((char *)e, FC_SEARCH_PATH_SEPARATOR); if (!colon) colon = e + strlen ((char *)e); path[i] = malloc (colon - e + 1); if (!path[i]) goto bail1; strncpy ((char *)path[i], (const char *)e, colon - e); path[i][colon - e] = '\0'; if (*colon) e = colon + 1; else e = colon; i++; } } #ifdef _WIN32 if (fontconfig_path[0] == '\0') { char *p; if (!GetModuleFileName (NULL, (LPCH)fontconfig_path, sizeof (fontconfig_path))) goto bail1; p = strrchr ((const char *)fontconfig_path, '\\'); if (p) *p = '\0'; strcat ((char *)fontconfig_path, "\\fonts"); } #endif dir = (FcChar8 *)FONTCONFIG_PATH; path[i] = malloc (strlen ((char *)dir) + 1); if (!path[i]) goto bail1; strcpy ((char *)path[i], (const char *)dir); return path; bail1: for (i = 0; path[i]; i++) free (path[i]); free (path); bail0: return 0; } static void FcConfigFreePath (FcChar8 **path) { FcChar8 **p; for (p = path; *p; p++) free (*p); free (path); } static FcBool _FcConfigHomeEnabled = FcTrue; /* MT-goodenough */ FcChar8 * FcConfigHome (void) { if (_FcConfigHomeEnabled) { char *home = getenv ("HOME"); #ifdef _WIN32 if (home == NULL) home = getenv ("USERPROFILE"); #endif return (FcChar8 *)home; } return 0; } FcChar8 * FcConfigXdgCacheHome (void) { const char *env = getenv ("XDG_CACHE_HOME"); FcChar8 *ret = NULL; if (!_FcConfigHomeEnabled) return NULL; if (env && env[0]) ret = FcStrCopy ((const FcChar8 *)env); else { const FcChar8 *home = FcConfigHome(); size_t len = home ? strlen ((const char *)home) : 0; ret = malloc (len + 7 + 1); if (ret) { if (home) memcpy (ret, home, len); memcpy (&ret[len], FC_DIR_SEPARATOR_S ".cache", 7); ret[len + 7] = 0; } } return ret; } FcChar8 * FcConfigXdgConfigHome (void) { const char *env = getenv ("XDG_CONFIG_HOME"); FcChar8 *ret = NULL; if (!_FcConfigHomeEnabled) return NULL; if (env) ret = FcStrCopy ((const FcChar8 *)env); else { const FcChar8 *home = FcConfigHome(); size_t len = home ? strlen ((const char *)home) : 0; ret = malloc (len + 8 + 1); if (ret) { if (home) memcpy (ret, home, len); memcpy (&ret[len], FC_DIR_SEPARATOR_S ".config", 8); ret[len + 8] = 0; } } return ret; } FcChar8 * FcConfigXdgDataHome (void) { const char *env = getenv ("XDG_DATA_HOME"); FcChar8 *ret = NULL; if (!_FcConfigHomeEnabled) return NULL; if (env) ret = FcStrCopy ((const FcChar8 *)env); else { const FcChar8 *home = FcConfigHome(); size_t len = home ? strlen ((const char *)home) : 0; ret = malloc (len + 13 + 1); if (ret) { if (home) memcpy (ret, home, len); memcpy (&ret[len], FC_DIR_SEPARATOR_S ".local" FC_DIR_SEPARATOR_S "share", 13); ret[len + 13] = 0; } } return ret; } FcStrSet * FcConfigXdgDataDirs (void) { const char *env = getenv ("XDG_DATA_DIRS"); FcStrSet *ret = FcStrSetCreate(); if (env && *env) { FcChar8 *ee, *e = ee = FcStrCopy ((const FcChar8 *)env); /* We don't intentionally use FC_SEARCH_PATH_SEPARATOR here because of: * The directories in $XDG_DATA_DIRS should be seperated with a colon ':'. * in doc. */ while (e) { FcChar8 *p = (FcChar8 *)strchr ((const char *)e, ':'); FcChar8 *s; size_t len; if (!p) { s = FcStrCopy (e); e = NULL; } else { *p = 0; s = FcStrCopy (e); e = p + 1; } len = strlen ((const char *)s); if (len == 0) { FcStrFree (s); continue; } if (s[len - 1] == FC_DIR_SEPARATOR) { do { len--; } while (len > 1 && s[len - 1] == FC_DIR_SEPARATOR); s[len] = 0; } FcStrSetAdd (ret, s); FcStrFree (s); } FcStrFree (ee); } else { /* From spec doc at https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html#variables * * If $XDG_DATA_DIRS is either not set or empty, a value equal to /usr/local/share/:/usr/share/ should be used. */ FcStrSetAdd (ret, (const FcChar8 *)"/usr/local/share"); FcStrSetAdd (ret, (const FcChar8 *)"/usr/share"); } return ret; } FcBool FcConfigEnableHome (FcBool enable) { FcBool prev = _FcConfigHomeEnabled; _FcConfigHomeEnabled = enable; return prev; } FcChar8 * FcConfigGetFilename (FcConfig *config, const FcChar8 *url) { FcChar8 *file, *dir, **path, **p; const FcChar8 *sysroot; config = FcConfigReference (config); if (!config) return NULL; sysroot = FcConfigGetSysRoot (config); if (!url || !*url) { url = (FcChar8 *)getenv ("FONTCONFIG_FILE"); if (!url) url = (FcChar8 *)FONTCONFIG_FILE; } file = 0; if (FcStrIsAbsoluteFilename (url)) { if (sysroot) { size_t len = strlen ((const char *)sysroot); /* Workaround to avoid adding sysroot repeatedly */ if (strncmp ((const char *)url, (const char *)sysroot, len) == 0) sysroot = NULL; } file = FcConfigFileExists (sysroot, url); goto bail; } if (*url == '~') { dir = FcConfigHome(); if (dir) { FcChar8 *s; if (sysroot) s = FcStrBuildFilename (sysroot, dir, NULL); else s = dir; file = FcConfigFileExists (s, url + 1); if (sysroot) FcStrFree (s); } else file = 0; } else { path = FcConfigGetPath(); if (!path) { file = NULL; goto bail; } for (p = path; *p; p++) { FcChar8 *s; if (sysroot) s = FcStrBuildFilename (sysroot, *p, NULL); else s = *p; file = FcConfigFileExists (s, url); if (sysroot) FcStrFree (s); if (file) break; } FcConfigFreePath (path); } bail: FcConfigDestroy (config); return file; } FcChar8 * FcConfigFilename (const FcChar8 *url) { return FcConfigGetFilename (NULL, url); } FcChar8 * FcConfigRealFilename (FcConfig *config, const FcChar8 *url) { FcChar8 *n = FcConfigGetFilename (config, url); if (n) { FcChar8 buf[FC_PATH_MAX]; ssize_t len; struct stat sb; if ((len = FcReadLink (n, buf, sizeof (buf) - 1)) != -1) { buf[len] = 0; /* We try to pick up a config from FONTCONFIG_FILE * when url is null. don't try to address the real filename * if it is a named pipe. */ if (!url && FcStat (n, &sb) == 0 && S_ISFIFO (sb.st_mode)) return n; else if (!FcStrIsAbsoluteFilename (buf)) { FcChar8 *dirname = FcStrDirname (n); FcStrFree (n); if (!dirname) return NULL; FcChar8 *path = FcStrBuildFilename (dirname, buf, NULL); FcStrFree (dirname); if (!path) return NULL; n = FcStrCanonFilename (path); FcStrFree (path); } else { FcStrFree (n); n = FcStrdup (buf); } } } return n; } /* * Manage the application-specific fonts */ FcBool FcConfigAppFontAddFile (FcConfig *config, const FcChar8 *file) { FcFontSet *set; FcStrSet *subdirs; FcStrList *sublist; FcChar8 *subdir; FcBool ret = FcTrue; config = FcConfigReference (config); if (!config) return FcFalse; subdirs = FcStrSetCreateEx (FCSS_GROW_BY_64); if (!subdirs) { ret = FcFalse; goto bail; } set = FcConfigGetFonts (config, FcSetApplication); if (!set) { set = FcFontSetCreate(); if (!set) { FcStrSetDestroy (subdirs); ret = FcFalse; goto bail; } FcConfigSetFonts (config, set, FcSetApplication); } if (!FcFileScanConfig (set, subdirs, file, config)) { FcStrSetDestroy (subdirs); ret = FcFalse; goto bail; } if ((sublist = FcStrListCreate (subdirs))) { while ((subdir = FcStrListNext (sublist))) { FcConfigAppFontAddDir (config, subdir); } FcStrListDone (sublist); } FcStrSetDestroy (subdirs); bail: FcConfigDestroy (config); return ret; } FcBool FcConfigAppFontAddDir (FcConfig *config, const FcChar8 *dir) { FcFontSet *set; FcStrSet *dirs; FcBool ret = FcTrue; config = FcConfigReference (config); if (!config) return FcFalse; dirs = FcStrSetCreateEx (FCSS_GROW_BY_64); if (!dirs) { ret = FcFalse; goto bail; } set = FcConfigGetFonts (config, FcSetApplication); if (!set) { set = FcFontSetCreate(); if (!set) { FcStrSetDestroy (dirs); ret = FcFalse; goto bail; } FcConfigSetFonts (config, set, FcSetApplication); } FcStrSetAddFilename (dirs, dir); if (!FcConfigAddDirList (config, FcSetApplication, dirs)) { FcStrSetDestroy (dirs); ret = FcFalse; goto bail; } FcStrSetDestroy (dirs); bail: FcConfigDestroy (config); return ret; } void FcConfigAppFontClear (FcConfig *config) { config = FcConfigReference (config); if (!config) return; FcConfigSetFonts (config, 0, FcSetApplication); FcConfigDestroy (config); } void FcConfigPreferAppFont (FcConfig *config, FcBool flag) { config = FcConfigReference (config); if (!config) return; config->prefer_app_fonts = flag; FcConfigDestroy (config); } /* * Manage filename-based font source selectors */ FcBool FcConfigGlobAdd (FcConfig *config, const FcChar8 *glob, FcBool accept) { FcStrSet *set = accept ? config->acceptGlobs : config->rejectGlobs; FcChar8 *realglob = FcStrCopyFilename (glob); FcChar8 *cwd = FcStrCopyFilename ((const FcChar8 *)"."); const FcChar8 *s; FcBool ret; size_t len = 0; /* * FcStrCopyFilename canonicalize a path string and prepend * current directory name if no path included in a string. * This isn't a desired behavior here. * So drop the extra path name if they have. Otherwise use it as it is. */ if (cwd == NULL) s = glob; else { len = strlen ((const char *)cwd); /* No need to use FC_DIR_SEPARATOR because '\\' will be * replaced with / by FcConvertDosPath in FcStrCanonFilename */ if (strncmp ((const char *)cwd, (const char *)realglob, len) == 0 && realglob[len] == '/') s = &realglob[len + 1]; else s = realglob; } if (!s) return FcFalse; ret = FcStrSetAdd (set, s); FcStrFree (realglob); FcStrFree (cwd); return ret; } static FcBool FcConfigGlobsMatch (const FcStrSet *globs, const FcChar8 *string) { int i; for (i = 0; i < globs->num; i++) if (FcStrGlobMatch (globs->strs[i], string)) return FcTrue; return FcFalse; } FcBool FcConfigAcceptFilename (FcConfig *config, const FcChar8 *filename) { if (FcConfigGlobsMatch (config->acceptGlobs, filename)) return FcTrue; if (FcConfigGlobsMatch (config->rejectGlobs, filename)) return FcFalse; return FcTrue; } /* * Manage font-pattern based font source selectors */ FcBool FcConfigPatternsAdd (FcConfig *config, FcPattern *pattern, FcBool accept) { FcFontSet *set = accept ? config->acceptPatterns : config->rejectPatterns; return FcFontSetAdd (set, pattern); } static FcBool FcConfigPatternsMatch (const FcFontSet *patterns, const FcPattern *font) { int i; for (i = 0; i < patterns->nfont; i++) if (FcListPatternMatchAny (patterns->fonts[i], font)) return FcTrue; return FcFalse; } FcBool FcConfigAcceptFont (FcConfig *config, const FcPattern *font) { if (FcConfigPatternsMatch (config->acceptPatterns, font)) return FcTrue; if (FcConfigPatternsMatch (config->rejectPatterns, font)) return FcFalse; return FcTrue; } FcBool FcConfigAcceptFilter (FcConfig *config, const FcPattern *font) { if (config && config->filter_func) { return config->filter_func (font, config->filter_data); } return FcTrue; } const FcChar8 * FcConfigGetSysRoot (const FcConfig *config) { if (!config) { config = FcConfigGetCurrent(); if (!config) return NULL; } return config->sysRoot; } void FcConfigSetSysRoot (FcConfig *config, const FcChar8 *sysroot) { FcChar8 *s = NULL; FcBool init = FcFalse; int nretry = 3; retry: if (!config) { /* We can't use FcConfigGetCurrent() here to ensure * the sysroot is set prior to initialize FcConfig, * to avoid loading caches from non-sysroot dirs. * So postpone the initialization later. */ config = fc_atomic_ptr_get (&_fcConfig); if (!config) { config = FcConfigCreate(); if (!config) return; init = FcTrue; } } if (sysroot) { s = FcStrRealPath (sysroot); if (!s) return; } if (config->sysRoot) FcStrFree (config->sysRoot); config->sysRoot = s; if (init) { config = FcInitLoadOwnConfigAndFonts (config); if (!config) { /* Something failed. this is usually unlikely. so retrying */ init = FcFalse; if (--nretry == 0) { fprintf (stderr, "Fontconfig warning: Unable to initialize config and retry limit exceeded. sysroot functionality may not work as expected.\n"); return; } goto retry; } FcConfigSetCurrent (config); /* FcConfigSetCurrent() increases the refcount. * decrease it here to avoid the memory leak. */ FcConfigDestroy (config); } } FcRuleSet * FcRuleSetCreate (const FcChar8 *name) { FcRuleSet *ret = (FcRuleSet *)malloc (sizeof (FcRuleSet)); FcMatchKind k; const FcChar8 *p; if (!name) p = (const FcChar8 *)""; else p = name; if (ret) { ret->name = FcStrdup (p); ret->description = NULL; ret->domain = NULL; for (k = FcMatchKindBegin; k < FcMatchKindEnd; k++) ret->subst[k] = FcPtrListCreate (FcDestroyAsRule); FcRefInit (&ret->ref, 1); } return ret; } void FcRuleSetDestroy (FcRuleSet *rs) { FcMatchKind k; if (!rs) return; if (FcRefDec (&rs->ref) != 1) return; if (rs->name) FcStrFree (rs->name); if (rs->description) FcStrFree (rs->description); if (rs->domain) FcStrFree (rs->domain); for (k = FcMatchKindBegin; k < FcMatchKindEnd; k++) FcPtrListDestroy (rs->subst[k]); free (rs); } void FcRuleSetReference (FcRuleSet *rs) { if (!FcRefIsConst (&rs->ref)) FcRefInc (&rs->ref); } void FcRuleSetEnable (FcRuleSet *rs, FcBool flag) { if (rs) { rs->enabled = flag; /* XXX: we may want to provide a feature * to enable/disable rulesets through API * in the future? */ } } void FcRuleSetAddDescription (FcRuleSet *rs, const FcChar8 *domain, const FcChar8 *description) { if (rs->domain) FcStrFree (rs->domain); if (rs->description) FcStrFree (rs->description); rs->domain = domain ? FcStrdup (domain) : NULL; rs->description = description ? FcStrdup (description) : NULL; } int FcRuleSetAdd (FcRuleSet *rs, FcRule *rule, FcMatchKind kind) { FcPtrListIter iter; FcRule *r; int n = 0, ret; if (!rs || kind < FcMatchKindBegin || kind >= FcMatchKindEnd) return -1; FcPtrListIterInitAtLast (rs->subst[kind], &iter); if (!FcPtrListIterAdd (rs->subst[kind], &iter, rule)) return -1; for (r = rule; r; r = r->next) { switch (r->type) { case FcRuleTest: if (r->u.test) { if (r->u.test->kind == FcMatchDefault) r->u.test->kind = kind; if (n < r->u.test->object) n = r->u.test->object; } break; case FcRuleEdit: if (n < r->u.edit->object) n = r->u.edit->object; break; default: break; } } if (FcDebug() & FC_DBG_EDIT) { printf ("Add Rule(kind:%d, name: %s) ", kind, rs->name); FcRulePrint (rule); } ret = FC_OBJ_ID (n) - FC_MAX_BASE_OBJECT; return ret < 0 ? 0 : ret; } void FcConfigFileInfoIterInit (FcConfig *config, FcConfigFileInfoIter *iter) { FcConfig *c; FcPtrListIter *i = (FcPtrListIter *)iter; if (!config) c = FcConfigGetCurrent(); else c = config; FcPtrListIterInit (c->rulesetList, i); } FcBool FcConfigFileInfoIterNext (FcConfig *config, FcConfigFileInfoIter *iter) { FcConfig *c; FcPtrListIter *i = (FcPtrListIter *)iter; if (!config) c = FcConfigGetCurrent(); else c = config; if (FcPtrListIterIsValid (c->rulesetList, i)) { FcPtrListIterNext (c->rulesetList, i); } else return FcFalse; return FcTrue; } FcBool FcConfigFileInfoIterGet (FcConfig *config, FcConfigFileInfoIter *iter, FcChar8 **name, FcChar8 **description, FcBool *enabled) { FcConfig *c; FcRuleSet *r; FcPtrListIter *i = (FcPtrListIter *)iter; if (!config) c = FcConfigGetCurrent(); else c = config; if (!FcPtrListIterIsValid (c->rulesetList, i)) return FcFalse; r = FcPtrListIterGetValue (c->rulesetList, i); if (name) *name = FcStrdup (r->name && r->name[0] ? r->name : (const FcChar8 *)"fonts.conf"); if (description) *description = FcStrdup (!r->description ? _ ("No description") : dgettext (r->domain ? (const char *)r->domain : GETTEXT_PACKAGE "-conf", (const char *)r->description)); if (enabled) *enabled = r->enabled; return FcTrue; } #define __fccfg__ #include "fcaliastail.h" #undef __fccfg__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fccharset.c000066400000000000000000000735231503113465200243010ustar00rootroot00000000000000/* * fontconfig/src/fccharset.c * * Copyright © 2001 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" #include /* #define CHECK */ FcCharSet * FcCharSetCreate (void) { FcCharSet *fcs; fcs = (FcCharSet *)malloc (sizeof (FcCharSet)); if (!fcs) return 0; FcRefInit (&fcs->ref, 1); fcs->num = 0; fcs->leaves_offset = 0; fcs->numbers_offset = 0; return fcs; } FcCharSet * FcCharSetPromote (FcValuePromotionBuffer *vbuf) { FcCharSet *fcs = (FcCharSet *)vbuf; FC_ASSERT_STATIC (sizeof (FcCharSet) <= sizeof (FcValuePromotionBuffer)); FcRefSetConst (&fcs->ref); fcs->num = 0; fcs->leaves_offset = 0; fcs->numbers_offset = 0; return fcs; } FcCharSet * FcCharSetNew (void) { return FcCharSetCreate(); } void FcCharSetDestroy (FcCharSet *fcs) { int i; if (fcs) { if (FcRefIsConst (&fcs->ref)) { FcCacheObjectDereference (fcs); return; } if (FcRefDec (&fcs->ref) != 1) return; for (i = 0; i < fcs->num; i++) free (FcCharSetLeaf (fcs, i)); if (fcs->num) { free (FcCharSetLeaves (fcs)); free (FcCharSetNumbers (fcs)); } free (fcs); } } /* * Search for the leaf containing with the specified num. * Return its index if it exists, otherwise return negative of * the (position + 1) where it should be inserted */ static int FcCharSetFindLeafForward (const FcCharSet *fcs, int start, FcChar16 num) { FcChar16 *numbers = FcCharSetNumbers (fcs); FcChar16 page; int low = start; int high = fcs->num - 1; if (!numbers) return -1; while (low <= high) { int mid = (low + high) >> 1; page = numbers[mid]; if (page == num) return mid; if (page < num) low = mid + 1; else high = mid - 1; } if (high < 0 || (high < fcs->num && numbers[high] < num)) high++; return -(high + 1); } /* * Locate the leaf containing the specified char, return * its index if it exists, otherwise return negative of * the (position + 1) where it should be inserted */ static int FcCharSetFindLeafPos (const FcCharSet *fcs, FcChar32 ucs4) { return FcCharSetFindLeafForward (fcs, 0, ucs4 >> 8); } static FcCharLeaf * FcCharSetFindLeaf (const FcCharSet *fcs, FcChar32 ucs4) { int pos = FcCharSetFindLeafPos (fcs, ucs4); if (pos >= 0) return FcCharSetLeaf (fcs, pos); return 0; } #define FC_IS_ZERO_OR_POWER_OF_TWO(x) (!((x) & ((x) - 1))) static FcBool FcCharSetPutLeaf (FcCharSet *fcs, FcChar32 ucs4, FcCharLeaf *leaf, int pos) { intptr_t *leaves = FcCharSetLeaves (fcs); FcChar16 *numbers = FcCharSetNumbers (fcs); ucs4 >>= 8; if (ucs4 >= 0x10000) return FcFalse; if (FC_IS_ZERO_OR_POWER_OF_TWO (fcs->num)) { if (!fcs->num) { unsigned int alloced = 8; leaves = malloc (alloced * sizeof (*leaves)); numbers = malloc (alloced * sizeof (*numbers)); if (!leaves || !numbers) { if (leaves) free (leaves); if (numbers) free (numbers); return FcFalse; } } else { int i; unsigned int alloced = fcs->num; intptr_t *new_leaves; alloced *= 2; numbers = realloc (numbers, alloced * sizeof (*numbers)); if (!numbers) return FcFalse; new_leaves = realloc (leaves, alloced * sizeof (*leaves)); if (!new_leaves) { /* * Revert the reallocation of numbers. We update numbers_offset * first in case realloc() fails. */ fcs->numbers_offset = FcPtrToOffset (fcs, numbers); numbers = realloc (numbers, (alloced / 2) * sizeof (*numbers)); /* unlikely to fail though */ if (!numbers) return FcFalse; fcs->numbers_offset = FcPtrToOffset (fcs, numbers); return FcFalse; } for (i = 0; i < fcs->num; i++) { // Reconstruct FcCharLeaf* from offset, similar to how FcCharSetLeaf() macro operates FcCharLeaf *leaf = FcOffsetToPtr (leaves, new_leaves[i], FcCharLeaf); new_leaves[i] = FcPtrToOffset (new_leaves, leaf); } leaves = new_leaves; } fcs->leaves_offset = FcPtrToOffset (fcs, leaves); fcs->numbers_offset = FcPtrToOffset (fcs, numbers); } memmove (leaves + pos + 1, leaves + pos, (fcs->num - pos) * sizeof (*leaves)); memmove (numbers + pos + 1, numbers + pos, (fcs->num - pos) * sizeof (*numbers)); numbers[pos] = (FcChar16)ucs4; leaves[pos] = FcPtrToOffset (leaves, leaf); fcs->num++; return FcTrue; } /* * Locate the leaf containing the specified char, creating it * if desired */ FcCharLeaf * FcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4) { int pos; FcCharLeaf *leaf; pos = FcCharSetFindLeafPos (fcs, ucs4); if (pos >= 0) return FcCharSetLeaf (fcs, pos); leaf = calloc (1, sizeof (FcCharLeaf)); if (!leaf) return 0; pos = -pos - 1; if (!FcCharSetPutLeaf (fcs, ucs4, leaf, pos)) { free (leaf); return 0; } return leaf; } static FcBool FcCharSetInsertLeaf (FcCharSet *fcs, FcChar32 ucs4, FcCharLeaf *leaf) { int pos; pos = FcCharSetFindLeafPos (fcs, ucs4); if (pos >= 0) { free (FcCharSetLeaf (fcs, pos)); FcCharSetLeaves (fcs)[pos] = FcPtrToOffset (FcCharSetLeaves (fcs), leaf); return FcTrue; } pos = -pos - 1; return FcCharSetPutLeaf (fcs, ucs4, leaf, pos); } FcBool FcCharSetAddChar (FcCharSet *fcs, FcChar32 ucs4) { FcCharLeaf *leaf; FcChar32 *b; if (fcs == NULL || FcRefIsConst (&fcs->ref)) return FcFalse; leaf = FcCharSetFindLeafCreate (fcs, ucs4); if (!leaf) return FcFalse; b = &leaf->map[(ucs4 & 0xff) >> 5]; *b |= (1U << (ucs4 & 0x1f)); return FcTrue; } FcBool FcCharSetDelChar (FcCharSet *fcs, FcChar32 ucs4) { FcCharLeaf *leaf; FcChar32 *b; if (fcs == NULL || FcRefIsConst (&fcs->ref)) return FcFalse; leaf = FcCharSetFindLeaf (fcs, ucs4); if (!leaf) return FcTrue; b = &leaf->map[(ucs4 & 0xff) >> 5]; *b &= ~(1U << (ucs4 & 0x1f)); /* We don't bother removing the leaf if it's empty */ return FcTrue; } /* * An iterator for the leaves of a charset */ typedef struct _fcCharSetIter { FcCharLeaf *leaf; FcChar32 ucs4; int pos; } FcCharSetIter; /* * Set iter->leaf to the leaf containing iter->ucs4 or higher */ static void FcCharSetIterSet (const FcCharSet *fcs, FcCharSetIter *iter) { int pos = FcCharSetFindLeafPos (fcs, iter->ucs4); if (pos < 0) { pos = -pos - 1; if (pos == fcs->num) { iter->ucs4 = ~0; iter->leaf = 0; return; } iter->ucs4 = (FcChar32)FcCharSetNumbers (fcs)[pos] << 8; } iter->leaf = FcCharSetLeaf (fcs, pos); iter->pos = pos; } static void FcCharSetIterNext (const FcCharSet *fcs, FcCharSetIter *iter) { int pos = iter->pos + 1; if (pos >= fcs->num) { iter->ucs4 = ~0; iter->leaf = 0; } else { iter->ucs4 = (FcChar32)FcCharSetNumbers (fcs)[pos] << 8; iter->leaf = FcCharSetLeaf (fcs, pos); iter->pos = pos; } } static void FcCharSetIterStart (const FcCharSet *fcs, FcCharSetIter *iter) { iter->ucs4 = 0; iter->pos = 0; FcCharSetIterSet (fcs, iter); } FcCharSet * FcCharSetCopy (FcCharSet *src) { if (src) { if (!FcRefIsConst (&src->ref)) FcRefInc (&src->ref); else FcCacheObjectReference (src); } return src; } FcBool FcCharSetEqual (const FcCharSet *a, const FcCharSet *b) { FcCharSetIter ai, bi; int i; if (a == b) return FcTrue; if (!a || !b) return FcFalse; for (FcCharSetIterStart (a, &ai), FcCharSetIterStart (b, &bi); ai.leaf && bi.leaf; FcCharSetIterNext (a, &ai), FcCharSetIterNext (b, &bi)) { if (ai.ucs4 != bi.ucs4) return FcFalse; for (i = 0; i < 256 / 32; i++) if (ai.leaf->map[i] != bi.leaf->map[i]) return FcFalse; } return ai.leaf == bi.leaf; } static FcBool FcCharSetAddLeaf (FcCharSet *fcs, FcChar32 ucs4, FcCharLeaf *leaf) { FcCharLeaf *newp = FcCharSetFindLeafCreate (fcs, ucs4); if (!newp) return FcFalse; *newp = *leaf; return FcTrue; } static FcCharSet * FcCharSetOperate (const FcCharSet *a, const FcCharSet *b, FcBool (*overlap) (FcCharLeaf *result, const FcCharLeaf *al, const FcCharLeaf *bl), FcBool aonly, FcBool bonly) { FcCharSet *fcs; FcCharSetIter ai, bi; if (!a || !b) goto bail0; fcs = FcCharSetCreate(); if (!fcs) goto bail0; FcCharSetIterStart (a, &ai); FcCharSetIterStart (b, &bi); while ((ai.leaf || (bonly && bi.leaf)) && (bi.leaf || (aonly && ai.leaf))) { if (ai.ucs4 < bi.ucs4) { if (aonly) { if (!FcCharSetAddLeaf (fcs, ai.ucs4, ai.leaf)) goto bail1; FcCharSetIterNext (a, &ai); } else { ai.ucs4 = bi.ucs4; FcCharSetIterSet (a, &ai); } } else if (bi.ucs4 < ai.ucs4) { if (bonly) { if (!FcCharSetAddLeaf (fcs, bi.ucs4, bi.leaf)) goto bail1; FcCharSetIterNext (b, &bi); } else { bi.ucs4 = ai.ucs4; FcCharSetIterSet (b, &bi); } } else { FcCharLeaf leaf; if ((*overlap) (&leaf, ai.leaf, bi.leaf)) { if (!FcCharSetAddLeaf (fcs, ai.ucs4, &leaf)) goto bail1; } FcCharSetIterNext (a, &ai); FcCharSetIterNext (b, &bi); } } return fcs; bail1: FcCharSetDestroy (fcs); bail0: return 0; } static FcBool FcCharSetIntersectLeaf (FcCharLeaf *result, const FcCharLeaf *al, const FcCharLeaf *bl) { int i; FcBool nonempty = FcFalse; for (i = 0; i < 256 / 32; i++) if ((result->map[i] = al->map[i] & bl->map[i])) nonempty = FcTrue; return nonempty; } FcCharSet * FcCharSetIntersect (const FcCharSet *a, const FcCharSet *b) { return FcCharSetOperate (a, b, FcCharSetIntersectLeaf, FcFalse, FcFalse); } static FcBool FcCharSetUnionLeaf (FcCharLeaf *result, const FcCharLeaf *al, const FcCharLeaf *bl) { int i; for (i = 0; i < 256 / 32; i++) result->map[i] = al->map[i] | bl->map[i]; return FcTrue; } FcCharSet * FcCharSetUnion (const FcCharSet *a, const FcCharSet *b) { return FcCharSetOperate (a, b, FcCharSetUnionLeaf, FcTrue, FcTrue); } FcBool FcCharSetMerge (FcCharSet *a, const FcCharSet *b, FcBool *changed) { int ai = 0, bi = 0; FcChar16 an, bn; if (!a || !b) return FcFalse; if (FcRefIsConst (&a->ref)) { if (changed) *changed = FcFalse; return FcFalse; } if (changed) { *changed = !FcCharSetIsSubset (b, a); if (!*changed) return FcTrue; } while (bi < b->num) { an = ai < a->num ? FcCharSetNumbers (a)[ai] : ~0; bn = FcCharSetNumbers (b)[bi]; if (an < bn) { ai = FcCharSetFindLeafForward (a, ai + 1, bn); if (ai < 0) ai = -ai - 1; } else { FcCharLeaf *bl = FcCharSetLeaf (b, bi); if (bn < an) { if (!FcCharSetAddLeaf (a, bn << 8, bl)) return FcFalse; } else { FcCharLeaf *al = FcCharSetLeaf (a, ai); FcCharSetUnionLeaf (al, al, bl); } ai++; bi++; } } return FcTrue; } static FcBool FcCharSetSubtractLeaf (FcCharLeaf *result, const FcCharLeaf *al, const FcCharLeaf *bl) { int i; FcBool nonempty = FcFalse; for (i = 0; i < 256 / 32; i++) if ((result->map[i] = al->map[i] & ~bl->map[i])) nonempty = FcTrue; return nonempty; } FcCharSet * FcCharSetSubtract (const FcCharSet *a, const FcCharSet *b) { return FcCharSetOperate (a, b, FcCharSetSubtractLeaf, FcTrue, FcFalse); } FcBool FcCharSetHasChar (const FcCharSet *fcs, FcChar32 ucs4) { FcCharLeaf *leaf; if (!fcs) return FcFalse; leaf = FcCharSetFindLeaf (fcs, ucs4); if (!leaf) return FcFalse; return (leaf->map[(ucs4 & 0xff) >> 5] & (1U << (ucs4 & 0x1f))) != 0; } static FcChar32 FcCharSetPopCount (FcChar32 c1) { #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) return __builtin_popcount (c1); #else /* hackmem 169 */ FcChar32 c2 = (c1 >> 1) & 033333333333; c2 = c1 - c2 - ((c2 >> 1) & 033333333333); return (((c2 + (c2 >> 3)) & 030707070707) % 077); #endif } FcChar32 FcCharSetIntersectCount (const FcCharSet *a, const FcCharSet *b) { FcCharSetIter ai, bi; FcChar32 count = 0; if (a && b) { FcCharSetIterStart (a, &ai); FcCharSetIterStart (b, &bi); while (ai.leaf && bi.leaf) { if (ai.ucs4 == bi.ucs4) { FcChar32 *am = ai.leaf->map; FcChar32 *bm = bi.leaf->map; int i = 256 / 32; while (i--) count += FcCharSetPopCount (*am++ & *bm++); FcCharSetIterNext (a, &ai); } else if (ai.ucs4 < bi.ucs4) { ai.ucs4 = bi.ucs4; FcCharSetIterSet (a, &ai); } if (bi.ucs4 < ai.ucs4) { bi.ucs4 = ai.ucs4; FcCharSetIterSet (b, &bi); } } } return count; } FcChar32 FcCharSetCount (const FcCharSet *a) { FcCharSetIter ai; FcChar32 count = 0; if (a) { for (FcCharSetIterStart (a, &ai); ai.leaf; FcCharSetIterNext (a, &ai)) { int i = 256 / 32; FcChar32 *am = ai.leaf->map; while (i--) count += FcCharSetPopCount (*am++); } } return count; } FcChar32 FcCharSetSubtractCount (const FcCharSet *a, const FcCharSet *b) { FcCharSetIter ai, bi; FcChar32 count = 0; if (a && b) { FcCharSetIterStart (a, &ai); FcCharSetIterStart (b, &bi); while (ai.leaf) { if (ai.ucs4 <= bi.ucs4) { FcChar32 *am = ai.leaf->map; int i = 256 / 32; if (ai.ucs4 == bi.ucs4) { FcChar32 *bm = bi.leaf->map; while (i--) count += FcCharSetPopCount (*am++ & ~*bm++); } else { while (i--) count += FcCharSetPopCount (*am++); } FcCharSetIterNext (a, &ai); } else if (bi.leaf) { bi.ucs4 = ai.ucs4; FcCharSetIterSet (b, &bi); } } } return count; } /* * return FcTrue iff a is a subset of b */ FcBool FcCharSetIsSubset (const FcCharSet *a, const FcCharSet *b) { int ai, bi; FcChar16 an, bn; if (a == b) return FcTrue; if (!a || !b) return FcFalse; bi = 0; ai = 0; while (ai < a->num && bi < b->num) { an = FcCharSetNumbers (a)[ai]; bn = FcCharSetNumbers (b)[bi]; /* * Check matching pages */ if (an == bn) { FcChar32 *am = FcCharSetLeaf (a, ai)->map; FcChar32 *bm = FcCharSetLeaf (b, bi)->map; if (am != bm) { int i = 256 / 32; /* * Does am have any bits not in bm? */ while (i--) if (*am++ & ~*bm++) return FcFalse; } ai++; bi++; } /* * Does a have any pages not in b? */ else if (an < bn) return FcFalse; else { bi = FcCharSetFindLeafForward (b, bi + 1, an); if (bi < 0) bi = -bi - 1; } } /* * did we look at every page? */ return ai >= a->num; } /* * These two functions efficiently walk the entire charmap for * other software (like pango) that want their own copy */ FcChar32 FcCharSetNextPage (const FcCharSet *a, FcChar32 map[FC_CHARSET_MAP_SIZE], FcChar32 *next) { FcCharSetIter ai; FcChar32 page; if (!a) return FC_CHARSET_DONE; ai.ucs4 = *next; FcCharSetIterSet (a, &ai); if (!ai.leaf) return FC_CHARSET_DONE; /* * Save current information */ page = ai.ucs4; memcpy (map, ai.leaf->map, sizeof (ai.leaf->map)); /* * Step to next page */ FcCharSetIterNext (a, &ai); *next = ai.ucs4; return page; } FcChar32 FcCharSetFirstPage (const FcCharSet *a, FcChar32 map[FC_CHARSET_MAP_SIZE], FcChar32 *next) { *next = 0; return FcCharSetNextPage (a, map, next); } /* * old coverage API, rather hard to use correctly */ FcChar32 FcCharSetCoverage (const FcCharSet *a, FcChar32 page, FcChar32 *result) { FcCharSetIter ai; ai.ucs4 = page; FcCharSetIterSet (a, &ai); if (!ai.leaf) { memset (result, '\0', 256 / 8); page = 0; } else { memcpy (result, ai.leaf->map, sizeof (ai.leaf->map)); FcCharSetIterNext (a, &ai); page = ai.ucs4; } return page; } static FcBool FcNameParseRange (FcChar8 **string, FcChar32 *pfirst, FcChar32 *plast) { char *s = (char *)*string; char *t; long first, last; while (isspace ((unsigned char)*s)) s++; t = s; errno = 0; first = last = strtol (s, &s, 16); if (errno) return FcFalse; while (isspace ((unsigned char)*s)) s++; if (*s == '-') { s++; errno = 0; last = strtol (s, &s, 16); if (errno) return FcFalse; } if (s == t || first < 0 || last < 0 || last < first || last > 0x10ffff) return FcFalse; *string = (FcChar8 *)s; *pfirst = first; *plast = last; return FcTrue; } FcCharSet * FcNameParseCharSet (FcChar8 *string) { FcCharSet *c; FcChar32 first, last; c = FcCharSetCreate(); if (!c) goto bail0; while (*string) { FcChar32 u; if (!FcNameParseRange (&string, &first, &last)) goto bail1; for (u = first; u < last + 1; u++) FcCharSetAddChar (c, u); } return c; bail1: FcCharSetDestroy (c); bail0: return NULL; } static void FcNameUnparseUnicode (FcStrBuf *buf, FcChar32 u) { FcChar8 buf_static[64]; snprintf ((char *)buf_static, sizeof (buf_static), "%x", u); FcStrBufString (buf, buf_static); } FcBool FcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c) { FcCharSetIter ci; FcChar32 first, last; int i; #ifdef CHECK int len = buf->len; #endif first = last = 0x7FFFFFFF; for (FcCharSetIterStart (c, &ci); ci.leaf; FcCharSetIterNext (c, &ci)) { for (i = 0; i < 256 / 32; i++) { FcChar32 bits = ci.leaf->map[i]; FcChar32 u = ci.ucs4 + i * 32; while (bits) { if (bits & 1) { if (u != last + 1) { if (last != first) { FcStrBufChar (buf, '-'); FcNameUnparseUnicode (buf, last); } if (last != 0x7FFFFFFF) FcStrBufChar (buf, ' '); /* Start new range. */ first = u; FcNameUnparseUnicode (buf, u); } last = u; } bits >>= 1; u++; } } } if (last != first) { FcStrBufChar (buf, '-'); FcNameUnparseUnicode (buf, last); } #ifdef CHECK { FcCharSet *check; FcChar32 missing; FcCharSetIter ci, checki; /* null terminate for parser */ FcStrBufChar (buf, '\0'); /* step back over null for life after test */ buf->len--; check = FcNameParseCharSet (buf->buf + len); FcCharSetIterStart (c, &ci); FcCharSetIterStart (check, &checki); while (ci.leaf || checki.leaf) { if (ci.ucs4 < checki.ucs4) { printf ("Missing leaf node at 0x%x\n", ci.ucs4); FcCharSetIterNext (c, &ci); } else if (checki.ucs4 < ci.ucs4) { printf ("Extra leaf node at 0x%x\n", checki.ucs4); FcCharSetIterNext (check, &checki); } else { int i = 256 / 32; FcChar32 *cm = ci.leaf->map; FcChar32 *checkm = checki.leaf->map; for (i = 0; i < 256; i += 32) { if (*cm != *checkm) printf ("Mismatching sets at 0x%08x: 0x%08x != 0x%08x\n", ci.ucs4 + i, *cm, *checkm); cm++; checkm++; } FcCharSetIterNext (c, &ci); FcCharSetIterNext (check, &checki); } } if ((missing = FcCharSetSubtractCount (c, check))) printf ("%d missing in reparsed result\n", missing); if ((missing = FcCharSetSubtractCount (check, c))) printf ("%d extra in reparsed result\n", missing); FcCharSetDestroy (check); } #endif return FcTrue; } typedef struct _FcCharLeafEnt FcCharLeafEnt; struct _FcCharLeafEnt { FcCharLeafEnt *next; FcChar32 hash; FcCharLeaf leaf; }; #define FC_CHAR_LEAF_BLOCK (4096 / sizeof (FcCharLeafEnt)) #define FC_CHAR_LEAF_HASH_SIZE 257 typedef struct _FcCharSetEnt FcCharSetEnt; struct _FcCharSetEnt { FcCharSetEnt *next; FcChar32 hash; FcCharSet set; }; typedef struct _FcCharSetOrigEnt FcCharSetOrigEnt; struct _FcCharSetOrigEnt { FcCharSetOrigEnt *next; const FcCharSet *orig; const FcCharSet *frozen; }; #define FC_CHAR_SET_HASH_SIZE 67 struct _FcCharSetFreezer { FcCharLeafEnt *leaf_hash_table[FC_CHAR_LEAF_HASH_SIZE]; FcCharLeafEnt **leaf_blocks; int leaf_block_count; FcCharSetEnt *set_hash_table[FC_CHAR_SET_HASH_SIZE]; FcCharSetOrigEnt *orig_hash_table[FC_CHAR_SET_HASH_SIZE]; FcCharLeafEnt *current_block; int leaf_remain; int leaves_seen; int charsets_seen; int leaves_allocated; int charsets_allocated; }; static FcCharLeafEnt * FcCharLeafEntCreate (FcCharSetFreezer *freezer) { if (!freezer->leaf_remain) { FcCharLeafEnt **newBlocks; freezer->leaf_block_count++; newBlocks = realloc (freezer->leaf_blocks, freezer->leaf_block_count * sizeof (FcCharLeafEnt *)); if (!newBlocks) return 0; freezer->leaf_blocks = newBlocks; freezer->current_block = freezer->leaf_blocks[freezer->leaf_block_count - 1] = malloc (FC_CHAR_LEAF_BLOCK * sizeof (FcCharLeafEnt)); if (!freezer->current_block) return 0; freezer->leaf_remain = FC_CHAR_LEAF_BLOCK; } freezer->leaf_remain--; freezer->leaves_allocated++; return freezer->current_block++; } static FcChar32 FcCharLeafHash (FcCharLeaf *leaf) { FcChar32 hash = 0; int i; for (i = 0; i < 256 / 32; i++) hash = ((hash << 1) | (hash >> 31)) ^ leaf->map[i]; return hash; } static FcCharLeaf * FcCharSetFreezeLeaf (FcCharSetFreezer *freezer, FcCharLeaf *leaf) { FcChar32 hash = FcCharLeafHash (leaf); FcCharLeafEnt **bucket = &freezer->leaf_hash_table[hash % FC_CHAR_LEAF_HASH_SIZE]; FcCharLeafEnt *ent; for (ent = *bucket; ent; ent = ent->next) { if (ent->hash == hash && !memcmp (&ent->leaf, leaf, sizeof (FcCharLeaf))) return &ent->leaf; } ent = FcCharLeafEntCreate (freezer); if (!ent) return 0; ent->leaf = *leaf; ent->hash = hash; ent->next = *bucket; *bucket = ent; return &ent->leaf; } static FcChar32 FcCharSetHash (FcCharSet *fcs) { FcChar32 hash = 0; int i; /* hash in leaves */ for (i = 0; i < fcs->num; i++) hash = ((hash << 1) | (hash >> 31)) ^ FcCharLeafHash (FcCharSetLeaf (fcs, i)); /* hash in numbers */ for (i = 0; i < fcs->num; i++) hash = ((hash << 1) | (hash >> 31)) ^ FcCharSetNumbers (fcs)[i]; return hash; } static FcBool FcCharSetFreezeOrig (FcCharSetFreezer *freezer, const FcCharSet *orig, const FcCharSet *frozen) { FcCharSetOrigEnt **bucket = &freezer->orig_hash_table[((uintptr_t)orig) % FC_CHAR_SET_HASH_SIZE]; FcCharSetOrigEnt *ent; ent = malloc (sizeof (FcCharSetOrigEnt)); if (!ent) return FcFalse; ent->orig = orig; ent->frozen = frozen; ent->next = *bucket; *bucket = ent; return FcTrue; } static FcCharSet * FcCharSetFreezeBase (FcCharSetFreezer *freezer, FcCharSet *fcs) { FcChar32 hash = FcCharSetHash (fcs); FcCharSetEnt **bucket = &freezer->set_hash_table[hash % FC_CHAR_SET_HASH_SIZE]; FcCharSetEnt *ent; int size; int i; for (ent = *bucket; ent; ent = ent->next) { if (ent->hash == hash && ent->set.num == fcs->num && !memcmp (FcCharSetNumbers (&ent->set), FcCharSetNumbers (fcs), fcs->num * sizeof (FcChar16))) { FcBool ok = FcTrue; int i; for (i = 0; i < fcs->num; i++) if (FcCharSetLeaf (&ent->set, i) != FcCharSetLeaf (fcs, i)) ok = FcFalse; if (ok) return &ent->set; } } size = (sizeof (FcCharSetEnt) + fcs->num * sizeof (FcCharLeaf *) + fcs->num * sizeof (FcChar16)); ent = malloc (size); if (!ent) return 0; freezer->charsets_allocated++; FcRefSetConst (&ent->set.ref); ent->set.num = fcs->num; if (fcs->num) { intptr_t *ent_leaves; ent->set.leaves_offset = sizeof (ent->set); ent->set.numbers_offset = (ent->set.leaves_offset + fcs->num * sizeof (intptr_t)); ent_leaves = FcCharSetLeaves (&ent->set); for (i = 0; i < fcs->num; i++) ent_leaves[i] = FcPtrToOffset (ent_leaves, FcCharSetLeaf (fcs, i)); memcpy (FcCharSetNumbers (&ent->set), FcCharSetNumbers (fcs), fcs->num * sizeof (FcChar16)); } else { ent->set.leaves_offset = 0; ent->set.numbers_offset = 0; } ent->hash = hash; ent->next = *bucket; *bucket = ent; return &ent->set; } static const FcCharSet * FcCharSetFindFrozen (FcCharSetFreezer *freezer, const FcCharSet *orig) { FcCharSetOrigEnt **bucket = &freezer->orig_hash_table[((uintptr_t)orig) % FC_CHAR_SET_HASH_SIZE]; FcCharSetOrigEnt *ent; for (ent = *bucket; ent; ent = ent->next) if (ent->orig == orig) return ent->frozen; return NULL; } const FcCharSet * FcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs) { FcCharSet *b; const FcCharSet *n = 0; FcCharLeaf *l; int i; b = FcCharSetCreate(); if (!b) goto bail0; for (i = 0; i < fcs->num; i++) { l = FcCharSetFreezeLeaf (freezer, FcCharSetLeaf (fcs, i)); if (!l) goto bail1; if (!FcCharSetInsertLeaf (b, FcCharSetNumbers (fcs)[i] << 8, l)) goto bail1; } n = FcCharSetFreezeBase (freezer, b); if (!FcCharSetFreezeOrig (freezer, fcs, n)) { n = NULL; goto bail1; } freezer->charsets_seen++; freezer->leaves_seen += fcs->num; bail1: if (b->num) free (FcCharSetLeaves (b)); if (b->num) free (FcCharSetNumbers (b)); free (b); bail0: return n; } FcCharSetFreezer * FcCharSetFreezerCreate (void) { FcCharSetFreezer *freezer; freezer = calloc (1, sizeof (FcCharSetFreezer)); return freezer; } void FcCharSetFreezerDestroy (FcCharSetFreezer *freezer) { int i; if (FcDebug() & FC_DBG_CACHE) { printf ("\ncharsets %d -> %d leaves %d -> %d\n", freezer->charsets_seen, freezer->charsets_allocated, freezer->leaves_seen, freezer->leaves_allocated); } for (i = 0; i < FC_CHAR_SET_HASH_SIZE; i++) { FcCharSetEnt *ent, *next; for (ent = freezer->set_hash_table[i]; ent; ent = next) { next = ent->next; free (ent); } } for (i = 0; i < FC_CHAR_SET_HASH_SIZE; i++) { FcCharSetOrigEnt *ent, *next; for (ent = freezer->orig_hash_table[i]; ent; ent = next) { next = ent->next; free (ent); } } for (i = 0; i < freezer->leaf_block_count; i++) free (freezer->leaf_blocks[i]); free (freezer->leaf_blocks); free (freezer); } FcBool FcCharSetSerializeAlloc (FcSerialize *serialize, const FcCharSet *cs) { intptr_t *leaves; FcChar16 *numbers; int i; if (!FcRefIsConst (&cs->ref)) { if (!serialize->cs_freezer) { serialize->cs_freezer = FcCharSetFreezerCreate(); if (!serialize->cs_freezer) return FcFalse; } if (FcCharSetFindFrozen (serialize->cs_freezer, cs)) return FcTrue; cs = FcCharSetFreeze (serialize->cs_freezer, cs); } leaves = FcCharSetLeaves (cs); numbers = FcCharSetNumbers (cs); if (!FcSerializeAlloc (serialize, cs, sizeof (FcCharSet))) return FcFalse; if (!FcSerializeAlloc (serialize, leaves, cs->num * sizeof (intptr_t))) return FcFalse; if (!FcSerializeAlloc (serialize, numbers, cs->num * sizeof (FcChar16))) return FcFalse; for (i = 0; i < cs->num; i++) if (!FcSerializeAlloc (serialize, FcCharSetLeaf (cs, i), sizeof (FcCharLeaf))) return FcFalse; return FcTrue; } FcCharSet * FcCharSetSerialize (FcSerialize *serialize, const FcCharSet *cs) { FcCharSet *cs_serialized; intptr_t *leaves, *leaves_serialized; FcChar16 *numbers, *numbers_serialized; FcCharLeaf *leaf, *leaf_serialized; int i; if (!FcRefIsConst (&cs->ref) && serialize->cs_freezer) { cs = FcCharSetFindFrozen (serialize->cs_freezer, cs); if (!cs) return NULL; } cs_serialized = FcSerializePtr (serialize, cs); if (!cs_serialized) return NULL; FcRefSetConst (&cs_serialized->ref); cs_serialized->num = cs->num; if (cs->num) { leaves = FcCharSetLeaves (cs); leaves_serialized = FcSerializePtr (serialize, leaves); if (!leaves_serialized) return NULL; cs_serialized->leaves_offset = FcPtrToOffset (cs_serialized, leaves_serialized); numbers = FcCharSetNumbers (cs); numbers_serialized = FcSerializePtr (serialize, numbers); if (!numbers) return NULL; cs_serialized->numbers_offset = FcPtrToOffset (cs_serialized, numbers_serialized); for (i = 0; i < cs->num; i++) { leaf = FcCharSetLeaf (cs, i); leaf_serialized = FcSerializePtr (serialize, leaf); if (!leaf_serialized) return NULL; *leaf_serialized = *leaf; leaves_serialized[i] = FcPtrToOffset (leaves_serialized, leaf_serialized); numbers_serialized[i] = numbers[i]; } } else { cs_serialized->leaves_offset = 0; cs_serialized->numbers_offset = 0; } return cs_serialized; } #define __fccharset__ #include "fcaliastail.h" #undef __fccharset__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fccompat.c000066400000000000000000000177511503113465200241340ustar00rootroot00000000000000/* * fontconfig/src/fccompat.c * * Copyright © 2012 Red Hat, Inc. * * Author(s): * Akira TAGOH * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if HAVE_FCNTL_H # include #endif #if HAVE_UNISTD_H # include #endif #include #include #include #include #ifdef O_CLOEXEC # define FC_O_CLOEXEC O_CLOEXEC #else # define FC_O_CLOEXEC 0 #endif #ifdef O_LARGEFILE # define FC_O_LARGEFILE O_LARGEFILE #else # define FC_O_LARGEFILE 0 #endif #ifdef O_BINARY # define FC_O_BINARY O_BINARY #else # define FC_O_BINARY 0 #endif #ifdef O_TEMPORARY # define FC_O_TEMPORARY O_TEMPORARY #else # define FC_O_TEMPORARY 0 #endif #ifdef O_NOINHERIT # define FC_O_NOINHERIT O_NOINHERIT #else # define FC_O_NOINHERIT 0 #endif #ifndef HAVE_UNISTD_H /* Values for the second argument to access. These may be OR'd together. */ # ifndef R_OK # define R_OK 4 /* Test for read permission. */ # endif # ifndef W_OK # define W_OK 2 /* Test for write permission. */ # endif # ifndef F_OK # define F_OK 0 /* Test for existence. */ # endif typedef int mode_t; #endif /* !HAVE_UNISTD_H */ #if !defined(HAVE_MKOSTEMP) && !defined(HAVE_MKSTEMP) && !defined(HAVE__MKTEMP_S) static int mkstemp (char *template) { static const char s[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; int fd, i; size_t l; if (template == NULL) { errno = EINVAL; return -1; } l = strlen (template); if (l < 6 || strcmp (&template[l - 6], "XXXXXX") != 0) { errno = EINVAL; return -1; } do { errno = 0; for (i = l - 6; i < l; i++) { int r = FcRandom(); template[i] = s[r % 62]; } fd = FcOpen (template, FC_O_BINARY | O_CREAT | O_EXCL | FC_O_TEMPORARY | FC_O_NOINHERIT | O_RDWR, 0600); } while (fd < 0 && errno == EEXIST); if (fd >= 0) errno = 0; return fd; } # define HAVE_MKSTEMP 1 #endif int FcOpen (const char *pathname, int flags, ...) { int fd = -1; if (flags & O_CREAT) { va_list ap; mode_t mode; va_start (ap, flags); mode = (mode_t)va_arg (ap, int); va_end (ap); fd = open (pathname, flags | FC_O_CLOEXEC | FC_O_LARGEFILE, mode); } else { fd = open (pathname, flags | FC_O_CLOEXEC | FC_O_LARGEFILE); } return fd; } int FcMakeTempfile (char *template) { int fd = -1; #if HAVE_MKOSTEMP fd = mkostemp (template, FC_O_CLOEXEC); #elif HAVE_MKSTEMP fd = mkstemp (template); # ifdef F_DUPFD_CLOEXEC if (fd != -1) { int newfd = fcntl (fd, F_DUPFD_CLOEXEC, STDIN_FILENO); close (fd); fd = newfd; } # elif defined(FD_CLOEXEC) if (fd != -1) { fcntl (fd, F_SETFD, fcntl (fd, F_GETFD) | FD_CLOEXEC); } # endif #elif HAVE__MKTEMP_S if (_mktemp_s (template, strlen (template) + 1) != 0) return -1; fd = FcOpen (template, O_RDWR | O_EXCL | O_CREAT, 0600); #endif return fd; } int32_t FcRandom (void) { int32_t result; #if HAVE_RANDOM_R static struct random_data fcrandbuf; static char statebuf[256]; static FcBool initialized = FcFalse; # ifdef _AIX static char *retval; long res; # endif if (initialized != FcTrue) { # ifdef _AIX initstate_r (time (NULL), statebuf, 256, &retval, &fcrandbuf); # else initstate_r (time (NULL), statebuf, 256, &fcrandbuf); # endif initialized = FcTrue; } # ifdef _AIX random_r (&res, &fcrandbuf); result = (int32_t)res; # else random_r (&fcrandbuf, &result); # endif #elif HAVE_RANDOM static char statebuf[256]; char *state; static FcBool initialized = FcFalse; if (initialized != FcTrue) { state = initstate (time (NULL), statebuf, 256); initialized = FcTrue; } else state = setstate (statebuf); result = random(); setstate (state); #elif HAVE_LRAND48 result = lrand48(); #elif HAVE_RAND_R static unsigned int seed; seed = time (NULL); result = rand_r (&seed); #elif HAVE_RAND static FcBool initialized = FcFalse; if (initialized != FcTrue) { srand (time (NULL)); initialized = FcTrue; } result = rand(); #else # error no random number generator function available. #endif return result; } #ifdef _WIN32 # include # define mkdir(path, mode) _mkdir (path) #endif FcBool FcMakeDirectory (const FcChar8 *dir) { FcChar8 *parent; FcBool ret; if (strlen ((char *)dir) == 0) return FcFalse; parent = FcStrDirname (dir); if (!parent) return FcFalse; if (access ((char *)parent, F_OK) == 0) ret = mkdir ((char *)dir, 0755) == 0 && chmod ((char *)dir, 0755) == 0; else if (access ((char *)parent, F_OK) == -1) ret = FcMakeDirectory (parent) && (mkdir ((char *)dir, 0755) == 0) && chmod ((char *)dir, 0755) == 0; else ret = FcFalse; FcStrFree (parent); return ret; } ssize_t FcReadLink (const FcChar8 *pathname, FcChar8 *buf, size_t bufsiz) { #ifdef HAVE_READLINK return readlink ((const char *)pathname, (char *)buf, bufsiz); #else /* XXX: this function is only used for FcConfigRealFilename() so far * and returning -1 as an error still just works. */ errno = ENOSYS; return -1; #endif } /* On Windows MingW provides dirent.h / openddir(), but MSVC does not */ #ifndef HAVE_DIRENT_H struct DIR { struct dirent d_ent; HANDLE handle; WIN32_FIND_DATA fdata; FcBool valid; }; FcPrivate DIR * FcCompatOpendirWin32 (const char *dirname) { size_t len; char *name; DIR *dir; dir = calloc (1, sizeof (struct DIR)); if (dir == NULL) return NULL; len = strlen (dirname); name = malloc (len + 3); if (name == NULL) { free (dir); return NULL; } memcpy (name, dirname, len); name[len++] = FC_DIR_SEPARATOR; name[len++] = '*'; name[len] = '\0'; dir->handle = FindFirstFileEx (name, FindExInfoBasic, &dir->fdata, FindExSearchNameMatch, NULL, 0); free (name); if (!dir->handle) { free (dir); dir = NULL; if (GetLastError() == ERROR_FILE_NOT_FOUND) errno = ENOENT; else errno = EACCES; } dir->valid = FcTrue; return dir; } FcPrivate struct dirent * FcCompatReaddirWin32 (DIR *dir) { if (dir->valid != FcTrue) return NULL; dir->d_ent.d_name = dir->fdata.cFileName; if ((dir->fdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0) dir->d_ent.d_type = DT_DIR; else if (dir->fdata.dwFileAttributes == FILE_ATTRIBUTE_NORMAL) dir->d_ent.d_type = DT_REG; else dir->d_ent.d_type = DT_UNKNOWN; if (!FindNextFile (dir->handle, &dir->fdata)) dir->valid = FcFalse; return &dir->d_ent; } FcPrivate int FcCompatClosedirWin32 (DIR *dir) { if (dir != NULL && dir->handle != NULL) { FindClose (dir->handle); free (dir); } return 0; } #endif /* HAVE_DIRENT_H */ #define __fccompat__ #include "fcaliastail.h" #undef __fccompat__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcdbg.c000066400000000000000000000345031503113465200233770ustar00rootroot00000000000000/* * fontconfig/src/fcdbg.c * * Copyright © 2000 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" #include #include static void _FcValuePrintFile (FILE *f, const FcValue v) { switch (v.type) { case FcTypeUnknown: fprintf (f, ""); break; case FcTypeVoid: fprintf (f, ""); break; case FcTypeInteger: fprintf (f, "%d(i)", v.u.i); break; case FcTypeDouble: fprintf (f, "%g(f)", v.u.d); break; case FcTypeString: fprintf (f, "\"%s\"", v.u.s); break; case FcTypeBool: fprintf (f, v.u.b == FcTrue ? "True" : v.u.b == FcFalse ? "False" : "DontCare"); break; case FcTypeMatrix: fprintf (f, "[%g %g; %g %g]", v.u.m->xx, v.u.m->xy, v.u.m->yx, v.u.m->yy); break; case FcTypeCharSet: /* XXX */ if (f == stdout) FcCharSetPrint (v.u.c); break; case FcTypeLangSet: FcLangSetPrint (v.u.l); break; case FcTypeFTFace: fprintf (f, "face"); break; case FcTypeRange: fprintf (f, "[%g %g]", v.u.r->begin, v.u.r->end); break; } } void FcValuePrintFile (FILE *f, const FcValue v) { fprintf (f, " "); _FcValuePrintFile (f, v); } void FcValuePrint (const FcValue v) { printf (" "); _FcValuePrintFile (stdout, v); } void FcValuePrintWithPosition (const FcValue v, FcBool show_pos_mark) { if (show_pos_mark) printf (" [marker] "); else printf (" "); _FcValuePrintFile (stdout, v); } static void FcValueBindingPrint (const FcValueListPtr l) { switch (l->binding) { case FcValueBindingWeak: printf ("(w)"); break; case FcValueBindingStrong: printf ("(s)"); break; case FcValueBindingSame: printf ("(=)"); break; default: /* shouldn't be reached */ printf ("(?)"); break; } } void FcValueListPrintWithPosition (FcValueListPtr l, const FcValueListPtr pos) { for (; l != NULL; l = FcValueListNext (l)) { FcValuePrintWithPosition (FcValueCanonicalize (&l->value), pos != NULL && l == pos); FcValueBindingPrint (l); } if (!pos) printf (" [marker]"); } void FcValueListPrint (FcValueListPtr l) { for (; l != NULL; l = FcValueListNext (l)) { FcValuePrint (FcValueCanonicalize (&l->value)); FcValueBindingPrint (l); } } void FcLangSetPrint (const FcLangSet *ls) { FcStrBuf buf; FcChar8 init_buf[1024]; FcStrBufInit (&buf, init_buf, sizeof (init_buf)); if (FcNameUnparseLangSet (&buf, ls) && FcStrBufChar (&buf, '\0')) printf ("%s", buf.buf); else printf ("langset (alloc error)"); FcStrBufDestroy (&buf); } void FcCharSetPrint (const FcCharSet *c) { int i, j; intptr_t *leaves = FcCharSetLeaves (c); FcChar16 *numbers = FcCharSetNumbers (c); #if 0 printf ("CharSet 0x%x\n", (intptr_t) c); printf ("Leaves: +%d = 0x%x\n", c->leaves_offset, (intptr_t) leaves); printf ("Numbers: +%d = 0x%x\n", c->numbers_offset, (intptr_t) numbers); for (i = 0; i < c->num; i++) { printf ("Page %d: %04x +%d = 0x%x\n", i, numbers[i], leaves[i], (intptr_t) FcOffsetToPtr (leaves, leaves[i], FcCharLeaf)); } #endif printf ("\n"); for (i = 0; i < c->num; i++) { intptr_t leaf_offset = leaves[i]; FcCharLeaf *leaf = FcOffsetToPtr (leaves, leaf_offset, FcCharLeaf); printf ("\t"); printf ("%04x:", numbers[i]); for (j = 0; j < 256 / 32; j++) printf (" %08x", leaf->map[j]); printf ("\n"); } } void FcPatternPrint (const FcPattern *p) { FcPatternIter iter; if (!p) { printf ("Null pattern\n"); return; } printf ("Pattern has %d elts (size %d)\n", FcPatternObjectCount (p), p->size); FcPatternIterStart (p, &iter); do { printf ("\t%s:", FcPatternIterGetObject (p, &iter)); FcValueListPrint (FcPatternIterGetValues (p, &iter)); printf ("\n"); } while (FcPatternIterNext (p, &iter)); printf ("\n"); } #define FcOpFlagsPrint(_o_) \ { \ int f = FC_OP_GET_FLAGS (_o_); \ if (f & FcOpFlagIgnoreBlanks) \ printf ("(ignore blanks)"); \ } void FcPatternPrint2 (FcPattern *pp1, FcPattern *pp2, const FcObjectSet *os) { int i, j, k, pos; FcPatternElt *e1, *e2; FcPattern *p1, *p2; if (os) { p1 = FcPatternFilter (pp1, os); p2 = FcPatternFilter (pp2, os); } else { p1 = pp1; p2 = pp2; } printf ("Pattern has %d elts (size %d), %d elts (size %d)\n", p1->num, p1->size, p2->num, p2->size); for (i = 0, j = 0; i < p1->num; i++) { e1 = &FcPatternElts (p1)[i]; e2 = &FcPatternElts (p2)[j]; if (!e2 || e1->object != e2->object) { pos = FcPatternPosition (p2, FcObjectName (e1->object)); if (pos >= 0) { for (k = j; k < pos; k++) { e2 = &FcPatternElts (p2)[k]; printf ("\t%s: (None) -> ", FcObjectName (e2->object)); FcValueListPrint (FcPatternEltValues (e2)); printf ("\n"); } j = pos; goto cont; } else { printf ("\t%s:", FcObjectName (e1->object)); FcValueListPrint (FcPatternEltValues (e1)); printf (" -> (None)\n"); } } else { cont: printf ("\t%s:", FcObjectName (e1->object)); FcValueListPrint (FcPatternEltValues (e1)); printf (" -> "); e2 = &FcPatternElts (p2)[j]; FcValueListPrint (FcPatternEltValues (e2)); printf ("\n"); j++; } } if (j < p2->num) { for (k = j; k < p2->num; k++) { e2 = &FcPatternElts (p2)[k]; if (FcObjectName (e2->object)) { printf ("\t%s: (None) -> ", FcObjectName (e2->object)); FcValueListPrint (FcPatternEltValues (e2)); printf ("\n"); } } } if (p1 != pp1) FcPatternDestroy (p1); if (p2 != pp2) FcPatternDestroy (p2); } void FcOpPrint (FcOp op_) { FcOp op = FC_OP_GET_OP (op_); switch (op) { case FcOpInteger: printf ("Integer"); break; case FcOpDouble: printf ("Double"); break; case FcOpString: printf ("String"); break; case FcOpMatrix: printf ("Matrix"); break; case FcOpRange: printf ("Range"); break; case FcOpBool: printf ("Bool"); break; case FcOpCharSet: printf ("CharSet"); break; case FcOpLangSet: printf ("LangSet"); break; case FcOpField: printf ("Field"); break; case FcOpConst: printf ("Const"); break; case FcOpAssign: printf ("Assign"); break; case FcOpAssignReplace: printf ("AssignReplace"); break; case FcOpPrepend: printf ("Prepend"); break; case FcOpPrependFirst: printf ("PrependFirst"); break; case FcOpAppend: printf ("Append"); break; case FcOpAppendLast: printf ("AppendLast"); break; case FcOpDelete: printf ("Delete"); break; case FcOpDeleteAll: printf ("DeleteAll"); break; case FcOpQuest: printf ("Quest"); break; case FcOpOr: printf ("Or"); break; case FcOpAnd: printf ("And"); break; case FcOpEqual: printf ("Equal"); FcOpFlagsPrint (op_); break; case FcOpNotEqual: printf ("NotEqual"); FcOpFlagsPrint (op_); break; case FcOpLess: printf ("Less"); break; case FcOpLessEqual: printf ("LessEqual"); break; case FcOpMore: printf ("More"); break; case FcOpMoreEqual: printf ("MoreEqual"); break; case FcOpContains: printf ("Contains"); break; case FcOpNotContains: printf ("NotContains"); break; case FcOpPlus: printf ("Plus"); break; case FcOpMinus: printf ("Minus"); break; case FcOpTimes: printf ("Times"); break; case FcOpDivide: printf ("Divide"); break; case FcOpNot: printf ("Not"); break; case FcOpNil: printf ("Nil"); break; case FcOpComma: printf ("Comma"); break; case FcOpFloor: printf ("Floor"); break; case FcOpCeil: printf ("Ceil"); break; case FcOpRound: printf ("Round"); break; case FcOpTrunc: printf ("Trunc"); break; case FcOpListing: printf ("Listing"); FcOpFlagsPrint (op_); break; case FcOpInvalid: printf ("Invalid"); break; } } void FcExprPrint (const FcExpr *expr) { if (!expr) printf ("none"); else switch (FC_OP_GET_OP (expr->op)) { case FcOpInteger: printf ("%d", expr->u.ival); break; case FcOpDouble: printf ("%g", expr->u.dval); break; case FcOpString: printf ("\"%s\"", expr->u.sval); break; case FcOpMatrix: printf ("["); FcExprPrint (expr->u.mexpr->xx); printf (" "); FcExprPrint (expr->u.mexpr->xy); printf ("; "); FcExprPrint (expr->u.mexpr->yx); printf (" "); FcExprPrint (expr->u.mexpr->yy); printf ("]"); break; case FcOpRange: printf ("(%g, %g)", expr->u.rval->begin, expr->u.rval->end); break; case FcOpBool: printf ("%s", expr->u.bval ? "true" : "false"); break; case FcOpCharSet: printf ("charset\n"); break; case FcOpLangSet: printf ("langset:"); FcLangSetPrint (expr->u.lval); printf ("\n"); break; case FcOpNil: printf ("nil\n"); break; case FcOpField: printf ("%s ", FcObjectName (expr->u.name.object)); switch ((int)expr->u.name.kind) { case FcMatchPattern: printf ("(pattern) "); break; case FcMatchFont: printf ("(font) "); break; } break; case FcOpConst: printf ("%s", expr->u.constant); break; case FcOpQuest: FcExprPrint (expr->u.tree.left); printf (" quest "); FcExprPrint (expr->u.tree.right->u.tree.left); printf (" colon "); FcExprPrint (expr->u.tree.right->u.tree.right); break; case FcOpAssign: case FcOpAssignReplace: case FcOpPrependFirst: case FcOpPrepend: case FcOpAppend: case FcOpAppendLast: case FcOpOr: case FcOpAnd: case FcOpEqual: case FcOpNotEqual: case FcOpLess: case FcOpLessEqual: case FcOpMore: case FcOpMoreEqual: case FcOpContains: case FcOpListing: case FcOpNotContains: case FcOpPlus: case FcOpMinus: case FcOpTimes: case FcOpDivide: case FcOpComma: FcExprPrint (expr->u.tree.left); printf (" "); switch (FC_OP_GET_OP (expr->op)) { case FcOpAssign: printf ("Assign"); break; case FcOpAssignReplace: printf ("AssignReplace"); break; case FcOpPrependFirst: printf ("PrependFirst"); break; case FcOpPrepend: printf ("Prepend"); break; case FcOpAppend: printf ("Append"); break; case FcOpAppendLast: printf ("AppendLast"); break; case FcOpOr: printf ("Or"); break; case FcOpAnd: printf ("And"); break; case FcOpEqual: printf ("Equal"); FcOpFlagsPrint (expr->op); break; case FcOpNotEqual: printf ("NotEqual"); FcOpFlagsPrint (expr->op); break; case FcOpLess: printf ("Less"); break; case FcOpLessEqual: printf ("LessEqual"); break; case FcOpMore: printf ("More"); break; case FcOpMoreEqual: printf ("MoreEqual"); break; case FcOpContains: printf ("Contains"); break; case FcOpListing: printf ("Listing"); FcOpFlagsPrint (expr->op); break; case FcOpNotContains: printf ("NotContains"); break; case FcOpPlus: printf ("Plus"); break; case FcOpMinus: printf ("Minus"); break; case FcOpTimes: printf ("Times"); break; case FcOpDivide: printf ("Divide"); break; case FcOpComma: printf ("Comma"); break; default: break; } printf (" "); FcExprPrint (expr->u.tree.right); break; case FcOpNot: printf ("Not "); FcExprPrint (expr->u.tree.left); break; case FcOpFloor: printf ("Floor "); FcExprPrint (expr->u.tree.left); break; case FcOpCeil: printf ("Ceil "); FcExprPrint (expr->u.tree.left); break; case FcOpRound: printf ("Round "); FcExprPrint (expr->u.tree.left); break; case FcOpTrunc: printf ("Trunc "); FcExprPrint (expr->u.tree.left); break; case FcOpInvalid: printf ("Invalid"); break; } } void FcTestPrint (const FcTest *test) { switch (test->kind) { case FcMatchPattern: printf ("pattern "); break; case FcMatchFont: printf ("font "); break; case FcMatchScan: printf ("scan "); break; case FcMatchKindEnd: /* shouldn't be reached */ return; } switch (test->qual) { case FcQualAny: printf ("any "); break; case FcQualAll: printf ("all "); break; case FcQualFirst: printf ("first "); break; case FcQualNotFirst: printf ("not_first "); break; } printf ("%s ", FcObjectName (test->object)); FcOpPrint (test->op); printf (" "); FcExprPrint (test->expr); printf ("\n"); } void FcEditPrint (const FcEdit *edit) { printf ("Edit %s ", FcObjectName (edit->object)); FcOpPrint (edit->op); printf (" "); FcExprPrint (edit->expr); } void FcRulePrint (const FcRule *rule) { FcRuleType last_type = FcRuleUnknown; const FcRule *r; for (r = rule; r; r = r->next) { if (last_type != r->type) { switch (r->type) { case FcRuleTest: printf ("[test]\n"); break; case FcRuleEdit: printf ("[edit]\n"); break; default: break; } last_type = r->type; } printf ("\t"); switch (r->type) { case FcRuleTest: FcTestPrint (r->u.test); break; case FcRuleEdit: FcEditPrint (r->u.edit); printf (";\n"); break; default: break; } } printf ("\n"); } void FcFontSetPrint (const FcFontSet *s) { int i; printf ("FontSet %d of %d\n", s->nfont, s->sfont); for (i = 0; i < s->nfont; i++) { printf ("Font %d ", i); FcPatternPrint (s->fonts[i]); } } int FcDebugVal; void FcInitDebug (void) { if (!FcDebugVal) { char *e; e = getenv ("FC_DEBUG"); if (e) { printf ("FC_DEBUG=%s\n", e); FcDebugVal = atoi (e); if (FcDebugVal < 0) FcDebugVal = 0; } } } #define __fcdbg__ #include "fcaliastail.h" #undef __fcdbg__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcdefault.c000066400000000000000000000263471503113465200242760ustar00rootroot00000000000000/* * fontconfig/src/fcdefault.c * * Copyright © 2001 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" #include #include /* MT-safe */ static const struct { FcObject field; FcBool value; } FcBoolDefaults[] = { { FC_HINTING_OBJECT, FcTrue }, /* !FT_LOAD_NO_HINTING */ { FC_VERTICAL_LAYOUT_OBJECT, FcFalse }, /* FC_LOAD_VERTICAL_LAYOUT */ { FC_AUTOHINT_OBJECT, FcFalse }, /* FC_LOAD_FORCE_AUTOHINT */ { FC_GLOBAL_ADVANCE_OBJECT, FcTrue }, /* !FC_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH */ { FC_EMBEDDED_BITMAP_OBJECT, FcTrue }, /* !FC_LOAD_NO_BITMAP */ { FC_DECORATIVE_OBJECT, FcFalse }, { FC_SYMBOL_OBJECT, FcFalse }, { FC_VARIABLE_OBJECT, FcFalse }, }; #define NUM_FC_BOOL_DEFAULTS (int)(sizeof FcBoolDefaults / sizeof FcBoolDefaults[0]) FcStrSet *default_langs; FcStrSet * FcConfigGetDefaultLangs (FcConfig *config) { FcStrSet *result; if (!config) { config = FcConfigGetCurrent(); } FcConfigReference (config); retry: result = (FcStrSet *)fc_atomic_ptr_get (&config->default_langs); if (!result) { char *langs; result = FcStrSetCreate(); langs = getenv ("FC_LANG"); if (!langs || !langs[0]) langs = getenv ("LC_ALL"); if (!langs || !langs[0]) { langs = getenv ("LC_CTYPE"); // On some macOS systems, LC_CTYPE is set to "UTF-8", which doesn't // give any languge information. In this case, ignore LC_CTYPE and // continue the search with LANG. if (langs && (FcStrCmpIgnoreCase ((const FcChar8 *)langs, (const FcChar8 *)"UTF-8") == 0)) { langs = NULL; } } if (!langs || !langs[0]) langs = getenv ("LANG"); if (langs && langs[0]) { if (!FcStrSetAddLangs (result, langs)) FcStrSetAdd (result, (const FcChar8 *)"en"); } else FcStrSetAdd (result, (const FcChar8 *)"en"); FcRefSetConst (&result->ref); if (!fc_atomic_ptr_cmpexch (&config->default_langs, NULL, result)) { FcRefInit (&result->ref, 1); FcStrSetDestroy (result); goto retry; } } FcConfigDestroy (config); return result; } FcStrSet * FcGetDefaultLangs (void) { return FcConfigGetDefaultLangs (NULL); } FcChar8 * FcConfigGetDefaultLang (FcConfig *config) { FcChar8 *lang; if (!config) { config = FcConfigGetCurrent(); } FcConfigReference (config); retry: lang = fc_atomic_ptr_get (&config->default_lang); if (!lang) { FcStrSet *langs = FcConfigGetDefaultLangs (config); lang = FcStrdup (langs->strs[0]); if (!fc_atomic_ptr_cmpexch (&config->default_lang, NULL, lang)) { free (lang); goto retry; } } FcConfigDestroy (config); return lang; } FcChar8 * FcGetDefaultLang (void) { return FcConfigGetDefaultLang (NULL); } FcChar8 * FcConfigGetPrgname (FcConfig *config) { FcChar8 *prgname; if (!config) { config = FcConfigGetCurrent(); } FcConfigReference (config); retry: prgname = fc_atomic_ptr_get (&config->prgname); if (!prgname) { #ifdef _WIN32 char buf[MAX_PATH + 1]; /* TODO This is ASCII-only; fix it. */ if (GetModuleFileNameA (GetModuleHandle (NULL), buf, sizeof (buf) / sizeof (buf[0])) > 0) { char *p; unsigned int len; p = strrchr (buf, '\\'); if (p) p++; else p = buf; len = strlen (p); if (len > 4 && 0 == strcmp (p + len - 4, ".exe")) { len -= 4; buf[len] = '\0'; } prgname = FcStrdup (p); } #elif defined(HAVE_GETPROGNAME) const char *q = getprogname(); if (q) prgname = FcStrdup (q); else prgname = FcStrdup (""); #else # if defined(HAVE_GETEXECNAME) char *p = FcStrdup (getexecname()); # elif defined(HAVE_READLINK) size_t size = FC_PATH_MAX; char *p = NULL; while (1) { char *buf = malloc (size); ssize_t len; if (!buf) break; len = readlink ("/proc/self/exe", buf, size - 1); if (len < 0) { free (buf); break; } if (len < size - 1) { buf[len] = 0; p = buf; break; } free (buf); size *= 2; } # else char *p = NULL; # endif if (p) { char *r = strrchr (p, '/'); if (r) r++; else r = p; prgname = FcStrdup (r); } if (!prgname) prgname = FcStrdup (""); if (p) free (p); #endif if (!fc_atomic_ptr_cmpexch (&config->prgname, NULL, prgname)) { free (prgname); goto retry; } } if (prgname && !prgname[0]) { prgname = NULL; } FcConfigDestroy (config); return prgname; } FcChar8 * FcGetPrgname (void) { return FcConfigGetPrgname (NULL); } FcChar8 * FcConfigGetDesktopName (FcConfig *config) { FcChar8 *desktop_name; if (!config) { config = FcConfigGetCurrent(); } FcConfigReference (config); retry: desktop_name = fc_atomic_ptr_get (&config->desktop_name); if (!desktop_name) { char *s = getenv ("XDG_CURRENT_DESKTOP"); if (!s) desktop_name = FcStrdup (""); else desktop_name = FcStrdup (s); if (!desktop_name) { fprintf (stderr, "Fontconfig error: out of memory in %s\n", __FUNCTION__); return NULL; } if (!fc_atomic_ptr_cmpexch (&config->desktop_name, NULL, desktop_name)) { free (desktop_name); goto retry; } } if (desktop_name && !desktop_name[0]) { desktop_name = NULL; } FcConfigDestroy (config); return desktop_name; } FcChar8 * FcGetDesktopName (void) { return FcConfigGetDesktopName (NULL); } void FcConfigSetDefaultSubstitute (FcConfig *config, FcPattern *pattern) { FcPatternIter iter; FcValue v, namelang, v2; int i; double dpi, size, scale, pixelsize; config = FcConfigReference (config); if (!FcPatternFindObjectIter (pattern, &iter, FC_WEIGHT_OBJECT)) FcPatternObjectAddInteger (pattern, FC_WEIGHT_OBJECT, FC_WEIGHT_NORMAL); if (!FcPatternFindObjectIter (pattern, &iter, FC_SLANT_OBJECT)) FcPatternObjectAddInteger (pattern, FC_SLANT_OBJECT, FC_SLANT_ROMAN); if (!FcPatternFindObjectIter (pattern, &iter, FC_WIDTH_OBJECT)) FcPatternObjectAddInteger (pattern, FC_WIDTH_OBJECT, FC_WIDTH_NORMAL); for (i = 0; i < NUM_FC_BOOL_DEFAULTS; i++) if (!FcPatternFindObjectIter (pattern, &iter, FcBoolDefaults[i].field)) FcPatternObjectAddBool (pattern, FcBoolDefaults[i].field, FcBoolDefaults[i].value); if (FcPatternObjectGetDouble (pattern, FC_SIZE_OBJECT, 0, &size) != FcResultMatch) { FcRange *r; double b, e; if (FcPatternObjectGetRange (pattern, FC_SIZE_OBJECT, 0, &r) == FcResultMatch && FcRangeGetDouble (r, &b, &e)) size = (b + e) * .5; else size = 12.0L; } if (FcPatternObjectGetDouble (pattern, FC_SCALE_OBJECT, 0, &scale) != FcResultMatch) scale = 1.0; if (FcPatternObjectGetDouble (pattern, FC_DPI_OBJECT, 0, &dpi) != FcResultMatch) dpi = 75.0; if (!FcPatternFindObjectIter (pattern, &iter, FC_PIXEL_SIZE_OBJECT)) { (void)FcPatternObjectDel (pattern, FC_SCALE_OBJECT); FcPatternObjectAddDouble (pattern, FC_SCALE_OBJECT, scale); pixelsize = size * scale; (void)FcPatternObjectDel (pattern, FC_DPI_OBJECT); FcPatternObjectAddDouble (pattern, FC_DPI_OBJECT, dpi); pixelsize *= dpi / 72.0; FcPatternObjectAddDouble (pattern, FC_PIXEL_SIZE_OBJECT, pixelsize); } else { FcPatternIterGetValue (pattern, &iter, 0, &v, NULL); if (v.type == FcTypeInteger) size = (double)v.u.i; else size = v.u.d; size = size / dpi * 72.0 / scale; } (void)FcPatternObjectDel (pattern, FC_SIZE_OBJECT); FcPatternObjectAddDouble (pattern, FC_SIZE_OBJECT, size); if (!FcPatternFindObjectIter (pattern, &iter, FC_FONTVERSION_OBJECT)) FcPatternObjectAddInteger (pattern, FC_FONTVERSION_OBJECT, 0x7fffffff); if (!FcPatternFindObjectIter (pattern, &iter, FC_HINT_STYLE_OBJECT)) FcPatternObjectAddInteger (pattern, FC_HINT_STYLE_OBJECT, FC_HINT_FULL); if (!FcPatternFindObjectIter (pattern, &iter, FC_NAMELANG_OBJECT)) FcPatternObjectAddString (pattern, FC_NAMELANG_OBJECT, FcConfigGetDefaultLang (config)); /* shouldn't be failed. */ FcPatternObjectGet (pattern, FC_NAMELANG_OBJECT, 0, &namelang); /* Add a fallback to ensure the english name when the requested language * isn't available. this would helps for the fonts that have non-English * name at the beginning. */ /* Set "en-us" instead of "en" to avoid giving higher score to "en". * This is a hack for the case that the orth is not like ll-cc, because, * if no namelang isn't explicitly set, it will has something like ll-cc * according to current locale. which may causes FcLangDifferentTerritory * at FcLangCompare(). thus, the English name is selected so that * exact matched "en" has higher score than ll-cc. */ v2.type = FcTypeString; v2.u.s = (FcChar8 *)"en-us"; if (!FcPatternFindObjectIter (pattern, &iter, FC_FAMILYLANG_OBJECT)) { FcPatternObjectAdd (pattern, FC_FAMILYLANG_OBJECT, namelang, FcTrue); FcPatternObjectAddWithBinding (pattern, FC_FAMILYLANG_OBJECT, v2, FcValueBindingWeak, FcTrue); } if (!FcPatternFindObjectIter (pattern, &iter, FC_STYLELANG_OBJECT)) { FcPatternObjectAdd (pattern, FC_STYLELANG_OBJECT, namelang, FcTrue); FcPatternObjectAddWithBinding (pattern, FC_STYLELANG_OBJECT, v2, FcValueBindingWeak, FcTrue); } if (!FcPatternFindObjectIter (pattern, &iter, FC_FULLNAMELANG_OBJECT)) { FcPatternObjectAdd (pattern, FC_FULLNAMELANG_OBJECT, namelang, FcTrue); FcPatternObjectAddWithBinding (pattern, FC_FULLNAMELANG_OBJECT, v2, FcValueBindingWeak, FcTrue); } if (FcPatternObjectGet (pattern, FC_PRGNAME_OBJECT, 0, &v) == FcResultNoMatch) { FcChar8 *prgname = FcConfigGetPrgname (config); if (prgname) FcPatternObjectAddString (pattern, FC_PRGNAME_OBJECT, prgname); } if (FcPatternObjectGet (pattern, FC_DESKTOP_NAME_OBJECT, 0, &v) == FcResultNoMatch) { FcChar8 *desktop = FcConfigGetDesktopName (config); if (desktop) FcPatternObjectAddString (pattern, FC_DESKTOP_NAME_OBJECT, desktop); } if (!FcPatternFindObjectIter (pattern, &iter, FC_ORDER_OBJECT)) FcPatternObjectAddInteger (pattern, FC_ORDER_OBJECT, 0); FcConfigDestroy (config); } void FcDefaultSubstitute (FcPattern *pattern) { FcConfigSetDefaultSubstitute (NULL, pattern); } #define __fcdefault__ #include "fcaliastail.h" #undef __fcdefault__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcdeprecate.h000066400000000000000000000027661503113465200246120ustar00rootroot00000000000000/* * Copyright © 2007 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that copyright * notice and this permission notice appear in supporting documentation, and * that the name of the copyright holders not be used in advertising or * publicity pertaining to distribution of the software without specific, * written prior permission. The copyright holders make no representations * about the suitability of this software for any purpose. It is provided "as * is" without express or implied warranty. * * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE * OF THIS SOFTWARE. */ /* * These APIs are deprecated; still exported by the library, but not * declared in the public header file */ #ifndef _FCDEPRECATE_H_ #define _FCDEPRECATE_H_ FcPublic int FcConfigGetRescanInverval (FcConfig *config); FcPublic FcBool FcConfigSetRescanInverval (FcConfig *config, int rescanInterval); #endif /* _FCDEPRECATE_H_ */ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcdir.c000066400000000000000000000255671503113465200234330ustar00rootroot00000000000000/* * fontconfig/src/fcdir.c * * Copyright © 2000 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" #ifdef HAVE_DIRENT_H # include #endif #if ENABLE_FONTATIONS # include "fontconfig/fcfontations.h" #endif FcBool FcFileIsDir (const FcChar8 *file) { struct stat statb; if (FcStat (file, &statb) != 0) return FcFalse; return S_ISDIR (statb.st_mode); } FcBool FcFileIsLink (const FcChar8 *file) { #if HAVE_LSTAT struct stat statb; if (lstat ((const char *)file, &statb) != 0) return FcFalse; return S_ISLNK (statb.st_mode); #else return FcFalse; #endif } FcBool FcFileIsFile (const FcChar8 *file) { struct stat statb; if (FcStat (file, &statb) != 0) return FcFalse; return S_ISREG (statb.st_mode); } static FcBool FcFileScanFontConfig (FcFontSet *set, const FcChar8 *file, FcConfig *config) { int i; FcBool ret = FcTrue; int old_nfont = set->nfont; const FcChar8 *sysroot = FcConfigGetSysRoot (config); if (FcDebug() & FC_DBG_SCAN) { printf ("\tScanning file %s...", file); fflush (stdout); } unsigned int (*query_function) (const FcChar8 *, unsigned int, FcBlanks *, int *, FcFontSet *) = FcFreeTypeQueryAll; #if ENABLE_FONTATIONS if (getenv ("FC_FONTATIONS")) { query_function = FcFontationsQueryAll; } #endif if (!query_function (file, -1, NULL, NULL, set)) return FcFalse; if (FcDebug() & FC_DBG_SCAN) printf ("done\n"); for (i = old_nfont; i < set->nfont; i++) { FcPattern *font = set->fonts[i]; /* * Get rid of sysroot here so that targeting scan rule may contains FC_FILE pattern * and they should usually expect without sysroot. */ if (sysroot) { size_t len = strlen ((const char *)sysroot); FcChar8 *f = NULL; if (FcPatternObjectGetString (font, FC_FILE_OBJECT, 0, &f) == FcResultMatch && strncmp ((const char *)f, (const char *)sysroot, len) == 0) { FcChar8 *s = FcStrdup (f); FcPatternObjectDel (font, FC_FILE_OBJECT); if (s[len] != '/') len--; else if (s[len + 1] == '/') len++; FcPatternObjectAddString (font, FC_FILE_OBJECT, &s[len]); FcStrFree (s); } } /* * Edit pattern with user-defined rules */ if (config && !FcConfigSubstitute (config, font, FcMatchScan)) ret = FcFalse; if (FcDebug() & FC_DBG_SCANV) { printf ("Final font pattern:\n"); FcPatternPrint (font); } } return ret; } FcBool FcFileScanConfig (FcFontSet *set, FcStrSet *dirs, const FcChar8 *file, FcConfig *config) { if (FcFileIsDir (file)) { const FcChar8 *sysroot = FcConfigGetSysRoot (config); const FcChar8 *d = file; size_t len; if (sysroot) { len = strlen ((const char *)sysroot); if (strncmp ((const char *)file, (const char *)sysroot, len) == 0) { if (file[len] != '/') len--; else if (file[len + 1] == '/') len++; d = &file[len]; } } return FcStrSetAdd (dirs, d); } else { if (set) return FcFileScanFontConfig (set, file, config); else return FcTrue; } } FcBool FcFileScan (FcFontSet *set, FcStrSet *dirs, FcFileCache *cache FC_UNUSED, FcBlanks *blanks FC_UNUSED, const FcChar8 *file, FcBool force FC_UNUSED) { FcConfig *config; FcBool ret; config = FcConfigReference (NULL); if (!config) return FcFalse; ret = FcFileScanConfig (set, dirs, file, config); FcConfigDestroy (config); return ret; } /* * Strcmp helper that takes pointers to pointers, copied from qsort(3) manpage */ static int cmpstringp (const void *p1, const void *p2) { return strcmp (*(char **)p1, *(char **)p2); } FcBool FcDirScanConfig (FcFontSet *set, FcStrSet *dirs, const FcChar8 *dir, FcBool force, /* XXX unused */ FcConfig *config) { DIR *d; struct dirent *e; FcStrSet *files; FcChar8 *file_prefix = NULL, *s_dir = NULL; FcChar8 *base; const FcChar8 *sysroot = FcConfigGetSysRoot (config); FcBool ret = FcTrue; int i; if (!force) return FcFalse; if (!set && !dirs) return FcTrue; if (sysroot) s_dir = FcStrBuildFilename (sysroot, dir, NULL); else s_dir = FcStrdup (dir); if (!s_dir) { ret = FcFalse; goto bail; } /* freed below */ file_prefix = (FcChar8 *)malloc (strlen ((char *)s_dir) + 1 + FC_MAX_FILE_LEN + 1); if (!file_prefix) { ret = FcFalse; goto bail; } strcpy ((char *)file_prefix, (char *)s_dir); strcat ((char *)file_prefix, FC_DIR_SEPARATOR_S); base = file_prefix + strlen ((char *)file_prefix); if (FcDebug() & FC_DBG_SCAN) printf ("\tScanning dir %s\n", s_dir); d = opendir ((char *)s_dir); if (!d) { /* Don't complain about missing directories */ if (errno != ENOENT) ret = FcFalse; goto bail; } files = FcStrSetCreateEx (FCSS_ALLOW_DUPLICATES | FCSS_GROW_BY_64); if (!files) { ret = FcFalse; goto bail1; } while ((e = readdir (d))) { /* Ignore . and .. */ if (e->d_name[0] == '.' && (e->d_name[1] == 0 || (e->d_name[1] == '.' && e->d_name[2] == 0))) continue; if (strlen (e->d_name) < FC_MAX_FILE_LEN) { strcpy ((char *)base, (char *)e->d_name); if (!FcStrSetAdd (files, file_prefix)) { ret = FcFalse; goto bail2; } } } /* * Sort files to make things prettier */ if (files->num) qsort (files->strs, files->num, sizeof (FcChar8 *), cmpstringp); /* * Scan file files to build font patterns */ for (i = 0; i < files->num; i++) FcFileScanConfig (set, dirs, files->strs[i], config); bail2: FcStrSetDestroy (files); bail1: closedir (d); bail: if (s_dir) free (s_dir); if (file_prefix) free (file_prefix); return ret; } FcBool FcDirScan (FcFontSet *set, FcStrSet *dirs, FcFileCache *cache FC_UNUSED, FcBlanks *blanks FC_UNUSED, const FcChar8 *dir, FcBool force FC_UNUSED) { FcConfig *config; FcBool ret; if (cache || !force) return FcFalse; config = FcConfigReference (NULL); if (!config) return FcFalse; ret = FcDirScanConfig (set, dirs, dir, force, config); FcConfigDestroy (config); return ret; } /* * Scan the specified directory and construct a cache of its contents */ FcCache * FcDirCacheScan (const FcChar8 *dir, FcConfig *config) { FcStrSet *dirs; FcFontSet *set; FcCache *cache = NULL; struct stat dir_stat; const FcChar8 *sysroot = FcConfigGetSysRoot (config); FcChar8 *d; #ifndef _WIN32 int fd = -1; #endif if (sysroot) d = FcStrBuildFilename (sysroot, dir, NULL); else d = FcStrdup (dir); if (FcDebug() & FC_DBG_FONTSET) printf ("cache scan dir %s\n", d); if (FcStatChecksum (d, &dir_stat) < 0) goto bail; set = FcFontSetCreate(); if (!set) goto bail; dirs = FcStrSetCreateEx (FCSS_GROW_BY_64); if (!dirs) goto bail1; #ifndef _WIN32 fd = FcDirCacheLock (dir, config); #endif /* * Scan the dir */ /* Do not pass sysroot here. FcDirScanConfig() do take care of it */ if (!FcDirScanConfig (set, dirs, dir, FcTrue, config)) goto bail2; /* * Build the cache object */ cache = FcDirCacheBuild (set, dir, &dir_stat, dirs); if (!cache) goto bail2; /* * Write out the cache file, ignoring any troubles */ FcDirCacheWrite (cache, config); bail2: #ifndef _WIN32 FcDirCacheUnlock (fd); #endif FcStrSetDestroy (dirs); bail1: FcFontSetDestroy (set); bail: FcStrFree (d); return cache; } FcCache * FcDirCacheRescan (const FcChar8 *dir, FcConfig *config) { FcCache *cache; FcCache *newp = NULL; struct stat dir_stat; FcStrSet *dirs; const FcChar8 *sysroot; FcChar8 *d = NULL; #ifndef _WIN32 int fd = -1; #endif config = FcConfigReference (config); if (!config) return NULL; sysroot = FcConfigGetSysRoot (config); cache = FcDirCacheLoad (dir, config, NULL); if (!cache) goto bail; if (sysroot) d = FcStrBuildFilename (sysroot, dir, NULL); else d = FcStrdup (dir); if (FcStatChecksum (d, &dir_stat) < 0) goto bail; dirs = FcStrSetCreateEx (FCSS_GROW_BY_64); if (!dirs) goto bail; #ifndef _WIN32 fd = FcDirCacheLock (dir, config); #endif /* * Scan the dir */ /* Do not pass sysroot here. FcDirScanConfig() do take care of it */ if (!FcDirScanConfig (NULL, dirs, dir, FcTrue, config)) goto bail1; /* * Rebuild the cache object */ newp = FcDirCacheRebuild (cache, &dir_stat, dirs); if (!newp) goto bail1; FcDirCacheUnload (cache); /* * Write out the cache file, ignoring any troubles */ FcDirCacheWrite (newp, config); bail1: #ifndef _WIN32 FcDirCacheUnlock (fd); #endif FcStrSetDestroy (dirs); bail: if (d) FcStrFree (d); FcConfigDestroy (config); return newp; } /* * Read (or construct) the cache for a directory */ FcCache * FcDirCacheRead (const FcChar8 *dir, FcBool force, FcConfig *config) { FcCache *cache = NULL; config = FcConfigReference (config); /* Try to use existing cache file */ if (!force) cache = FcDirCacheLoad (dir, config, NULL); /* Not using existing cache file, construct new cache */ if (!cache) { FcDirCacheDeleteUUID (dir, config); cache = FcDirCacheScan (dir, config); } FcConfigDestroy (config); return cache; } FcBool FcDirSave (FcFontSet *set FC_UNUSED, FcStrSet *dirs FC_UNUSED, const FcChar8 *dir FC_UNUSED) { return FcFalse; /* XXX deprecated */ } #define __fcdir__ #include "fcaliastail.h" #undef __fcdir__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcfontations.c000066400000000000000000000033321503113465200250230ustar00rootroot00000000000000/* * fontconfig/src/fcfontations.c * * Copyright 2025 Google LLC. * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" #if ENABLE_FONTATIONS extern int add_patterns_to_fontset (const FcChar8 *file, FcFontSet *set); unsigned int FcFontationsQueryAll (const FcChar8 *file, unsigned int id, FcBlanks *blanks, int *count, FcFontSet *set) { // TODO(#163): For exposing this as API this should handle the passed id. return add_patterns_to_fontset (file, set); } # define __fcfontations__ # include "fcaliastail.h" # undef __fcfontations__ #endif fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcformat.c000066400000000000000000000613221503113465200241320ustar00rootroot00000000000000/* * Copyright © 2008,2009 Red Hat, Inc. * * Red Hat Author(s): Behdad Esfahbod * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" #include #include #include /* The language is documented in doc/fcformat.fncs * These are the features implemented: * * simple %{elt} * width %width{elt} * index %{elt[idx]} * name= %{elt=} * :name= %{:elt} * default %{elt:-word} * count %{#elt} * subexpr %{{expr}} * filter-out %{-elt1,elt2,elt3{expr}} * filter-in %{+elt1,elt2,elt3{expr}} * conditional %{?elt1,elt2,!elt3{}{}} * enumerate %{[]elt1,elt2{expr}} * langset langset enumeration using the same syntax * builtin %{=blt} * convert %{elt|conv1|conv2|conv3} * * converters: * basename FcStrBasename * dirname FcStrDirname * downcase FcStrDowncase * shescape * cescape * xmlescape * delete delete chars * escape escape chars * translate translate chars * * builtins: * unparse FcNameUnparse * fcmatch fc-match default * fclist fc-list default * fccat fc-cat default * pkgkit PackageKit package tag format * * * Some ideas for future syntax extensions: * * - verbose builtin that is like FcPatternPrint * - allow indexing subexprs using '%{[idx]elt1,elt2{subexpr}}' * - allow indexing in +, -, ? filtering? * - conditional/filtering/deletion on binding (using '(w)'/'(s)'/'(=)' notation) */ #define FCCAT_FORMAT "\"%{file|basename|cescape}\" %{index} \"%{-file{%{=unparse|cescape}}}\"" #define FCMATCH_FORMAT "%{file:-|basename}: \"%{family[0]:-}\" \"%{style[0]:-}\"" #define FCLIST_FORMAT "%{?file{%{file}: }}%{-file{%{=unparse}}}" #define PKGKIT_FORMAT "%{[]family{font(%{family|downcase|delete( )})\n}}%{[]lang{font(:lang=%{lang|downcase|translate(_,-)})\n}}" static void message (const char *fmt, ...) { va_list args; va_start (args, fmt); fprintf (stderr, "Fontconfig: Pattern format error: "); vfprintf (stderr, fmt, args); fprintf (stderr, ".\n"); va_end (args); } typedef struct _FcFormatContext { const FcChar8 *format_orig; const FcChar8 *format; int format_len; FcChar8 *word; FcBool word_allocated; } FcFormatContext; static FcBool FcFormatContextInit (FcFormatContext *c, const FcChar8 *format, FcChar8 *scratch, int scratch_len) { c->format_orig = c->format = format; c->format_len = strlen ((const char *)format); if (c->format_len < scratch_len) { c->word = scratch; c->word_allocated = FcFalse; } else { c->word = malloc (c->format_len + 1); c->word_allocated = FcTrue; } return c->word != NULL; } static void FcFormatContextDone (FcFormatContext *c) { if (c && c->word_allocated) { free (c->word); } } static FcBool consume_char (FcFormatContext *c, FcChar8 term) { if (*c->format != term) return FcFalse; c->format++; return FcTrue; } static FcBool expect_char (FcFormatContext *c, FcChar8 term) { FcBool res = consume_char (c, term); if (!res) { if (c->format == c->format_orig + c->format_len) message ("format ended while expecting '%c'", term); else message ("expected '%c' at %d", term, c->format - c->format_orig + 1); } return res; } static FcBool FcCharIsPunct (const FcChar8 c) { if (c < '0') return FcTrue; if (c <= '9') return FcFalse; if (c < 'A') return FcTrue; if (c <= 'Z') return FcFalse; if (c < 'a') return FcTrue; if (c <= 'z') return FcFalse; if (c <= '~') return FcTrue; return FcFalse; } static char escaped_char (const char ch) { switch (ch) { case 'a': return '\a'; case 'b': return '\b'; case 'f': return '\f'; case 'n': return '\n'; case 'r': return '\r'; case 't': return '\t'; case 'v': return '\v'; default: return ch; } } static FcBool read_word (FcFormatContext *c) { FcChar8 *p; p = c->word; while (*c->format) { if (*c->format == '\\') { c->format++; if (*c->format) *p++ = escaped_char (*c->format++); continue; } else if (FcCharIsPunct (*c->format)) break; *p++ = *c->format++; } *p = '\0'; if (p == c->word) { message ("expected identifier at %d", c->format - c->format_orig + 1); return FcFalse; } return FcTrue; } static FcBool read_chars (FcFormatContext *c, FcChar8 term) { FcChar8 *p; p = c->word; while (*c->format && *c->format != '}' && *c->format != term) { if (*c->format == '\\') { c->format++; if (*c->format) *p++ = escaped_char (*c->format++); continue; } *p++ = *c->format++; } *p = '\0'; if (p == c->word) { message ("expected character data at %d", c->format - c->format_orig + 1); return FcFalse; } return FcTrue; } static FcBool FcPatternFormatToBuf (FcPattern *pat, const FcChar8 *format, FcStrBuf *buf); static FcBool interpret_builtin (FcFormatContext *c, FcPattern *pat, FcStrBuf *buf) { FcChar8 *new_str; FcBool ret; if (!expect_char (c, '=') || !read_word (c)) return FcFalse; /* try simple builtins first */ if (0) { } #define BUILTIN(name, func) \ else if (0 == strcmp ((const char *)c->word, name)) do \ { \ new_str = func (pat); \ ret = FcTrue; \ } \ while (0) BUILTIN ("unparse", FcNameUnparse); /* BUILTIN ("verbose", FcPatternPrint); XXX */ #undef BUILTIN else ret = FcFalse; if (ret) { if (new_str) { FcStrBufString (buf, new_str); FcStrFree (new_str); return FcTrue; } else return FcFalse; } /* now try our custom formats */ if (0) { } #define BUILTIN(name, format) \ else if (0 == strcmp ((const char *)c->word, name)) \ ret = FcPatternFormatToBuf (pat, (const FcChar8 *)format, buf) BUILTIN ("fccat", FCCAT_FORMAT); BUILTIN ("fcmatch", FCMATCH_FORMAT); BUILTIN ("fclist", FCLIST_FORMAT); BUILTIN ("pkgkit", PKGKIT_FORMAT); #undef BUILTIN else ret = FcFalse; if (!ret) message ("unknown builtin \"%s\"", c->word); return ret; } static FcBool interpret_expr (FcFormatContext *c, FcPattern *pat, FcStrBuf *buf, FcChar8 term); static FcBool interpret_subexpr (FcFormatContext *c, FcPattern *pat, FcStrBuf *buf) { return expect_char (c, '{') && interpret_expr (c, pat, buf, '}') && expect_char (c, '}'); } static FcBool maybe_interpret_subexpr (FcFormatContext *c, FcPattern *pat, FcStrBuf *buf) { return (*c->format == '{') ? interpret_subexpr (c, pat, buf) : FcTrue; } static FcBool skip_subexpr (FcFormatContext *c); static FcBool skip_percent (FcFormatContext *c) { if (!expect_char (c, '%')) return FcFalse; /* skip an optional width specifier */ if (strtol ((const char *)c->format, (char **)&c->format, 10)) { /* don't care */ } if (!expect_char (c, '{')) return FcFalse; while (*c->format && *c->format != '}') { switch (*c->format) { case '\\': c->format++; /* skip over '\\' */ if (*c->format) c->format++; continue; case '{': if (!skip_subexpr (c)) return FcFalse; continue; } c->format++; } return expect_char (c, '}'); } static FcBool skip_expr (FcFormatContext *c) { while (*c->format && *c->format != '}') { switch (*c->format) { case '\\': c->format++; /* skip over '\\' */ if (*c->format) c->format++; continue; case '%': if (!skip_percent (c)) return FcFalse; continue; } c->format++; } return FcTrue; } static FcBool skip_subexpr (FcFormatContext *c) { return expect_char (c, '{') && skip_expr (c) && expect_char (c, '}'); } static FcBool maybe_skip_subexpr (FcFormatContext *c) { return (*c->format == '{') ? skip_subexpr (c) : FcTrue; } static FcBool interpret_filter_in (FcFormatContext *c, FcPattern *pat, FcStrBuf *buf) { FcObjectSet *os; FcPattern *subpat; if (!expect_char (c, '+')) return FcFalse; os = FcObjectSetCreate(); if (!os) return FcFalse; do { /* XXX binding */ if (!read_word (c) || !FcObjectSetAdd (os, (const char *)c->word)) { FcObjectSetDestroy (os); return FcFalse; } } while (consume_char (c, ',')); subpat = FcPatternFilter (pat, os); FcObjectSetDestroy (os); if (!subpat || !interpret_subexpr (c, subpat, buf)) return FcFalse; FcPatternDestroy (subpat); return FcTrue; } static FcBool interpret_filter_out (FcFormatContext *c, FcPattern *pat, FcStrBuf *buf) { FcPattern *subpat; if (!expect_char (c, '-')) return FcFalse; subpat = FcPatternDuplicate (pat); if (!subpat) return FcFalse; do { if (!read_word (c)) { FcPatternDestroy (subpat); return FcFalse; } FcPatternDel (subpat, (const char *)c->word); } while (consume_char (c, ',')); if (!interpret_subexpr (c, subpat, buf)) return FcFalse; FcPatternDestroy (subpat); return FcTrue; } static FcBool interpret_cond (FcFormatContext *c, FcPattern *pat, FcStrBuf *buf) { FcBool pass; if (!expect_char (c, '?')) return FcFalse; pass = FcTrue; do { FcBool negate; FcValue v; negate = consume_char (c, '!'); if (!read_word (c)) return FcFalse; pass = pass && (negate ^ (FcResultMatch == FcPatternGet (pat, (const char *)c->word, 0, &v))); } while (consume_char (c, ',')); if (pass) { if (!interpret_subexpr (c, pat, buf) || !maybe_skip_subexpr (c)) return FcFalse; } else { if (!skip_subexpr (c) || !maybe_interpret_subexpr (c, pat, buf)) return FcFalse; } return FcTrue; } static FcBool interpret_count (FcFormatContext *c, FcPattern *pat, FcStrBuf *buf) { int count; FcPatternIter iter; FcChar8 buf_static[64]; if (!expect_char (c, '#')) return FcFalse; if (!read_word (c)) return FcFalse; count = 0; if (FcPatternFindIter (pat, &iter, (const char *)c->word)) { count = FcPatternIterValueCount (pat, &iter); } snprintf ((char *)buf_static, sizeof (buf_static), "%d", count); FcStrBufString (buf, buf_static); return FcTrue; } static FcBool interpret_enumerate (FcFormatContext *c, FcPattern *pat, FcStrBuf *buf) { FcObjectSet *os; FcPattern *subpat; const FcChar8 *format_save; int idx; FcBool ret, done; FcStrList *lang_strs; if (!expect_char (c, '[') || !expect_char (c, ']')) return FcFalse; os = FcObjectSetCreate(); if (!os) return FcFalse; ret = FcTrue; do { if (!read_word (c) || !FcObjectSetAdd (os, (const char *)c->word)) { FcObjectSetDestroy (os); return FcFalse; } } while (consume_char (c, ',')); /* If we have one element and it's of type FcLangSet, we want * to enumerate the languages in it. */ lang_strs = NULL; if (os->nobject == 1) { FcLangSet *langset; if (FcResultMatch == FcPatternGetLangSet (pat, os->objects[0], 0, &langset)) { FcStrSet *ss; if (!(ss = FcLangSetGetLangs (langset)) || !(lang_strs = FcStrListCreate (ss))) goto bail0; } } subpat = FcPatternDuplicate (pat); if (!subpat) goto bail0; format_save = c->format; idx = 0; do { int i; done = FcTrue; if (lang_strs) { FcChar8 *lang; FcPatternDel (subpat, os->objects[0]); if ((lang = FcStrListNext (lang_strs))) { /* XXX binding? */ FcPatternAddString (subpat, os->objects[0], lang); done = FcFalse; } } else { for (i = 0; i < os->nobject; i++) { FcValue v; /* XXX this can be optimized by accessing valuelist linked lists * directly and remembering where we were. Most (all) value lists * in normal uses are pretty short though (language tags are * stored as a LangSet, not separate values.). */ FcPatternDel (subpat, os->objects[i]); if (FcResultMatch == FcPatternGet (pat, os->objects[i], idx, &v)) { /* XXX binding */ FcPatternAdd (subpat, os->objects[i], v, FcFalse); done = FcFalse; } } } if (!done) { c->format = format_save; ret = interpret_subexpr (c, subpat, buf); if (!ret) goto bail; } idx++; } while (!done); if (c->format == format_save) skip_subexpr (c); bail: FcPatternDestroy (subpat); bail0: if (lang_strs) FcStrListDone (lang_strs); FcObjectSetDestroy (os); return ret; } static FcBool interpret_simple (FcFormatContext *c, FcPattern *pat, FcStrBuf *buf) { FcPatternIter iter; FcBool add_colon = FcFalse; FcBool add_elt_name = FcFalse; int idx; FcChar8 *else_string; if (consume_char (c, ':')) add_colon = FcTrue; if (!read_word (c)) return FcFalse; idx = -1; if (consume_char (c, '[')) { idx = strtol ((const char *)c->format, (char **)&c->format, 10); if (idx < 0) { message ("expected non-negative number at %d", c->format - 1 - c->format_orig + 1); return FcFalse; } if (!expect_char (c, ']')) return FcFalse; } if (consume_char (c, '=')) add_elt_name = FcTrue; /* modifiers */ else_string = NULL; if (consume_char (c, ':')) { FcChar8 *orig; /* divert the c->word for now */ orig = c->word; c->word = c->word + strlen ((const char *)c->word) + 1; /* for now we just support 'default value' */ if (!expect_char (c, '-') || !read_chars (c, '|')) { c->word = orig; return FcFalse; } else_string = c->word; c->word = orig; } if (FcPatternFindIter (pat, &iter, (const char *)c->word) || else_string) { FcValueListPtr l = NULL; if (add_colon) FcStrBufChar (buf, ':'); if (add_elt_name) { FcStrBufString (buf, c->word); FcStrBufChar (buf, '='); } l = FcPatternIterGetValues (pat, &iter); if (idx != -1) { while (l && idx > 0) { l = FcValueListNext (l); idx--; } if (l && idx == 0) { if (!FcNameUnparseValue (buf, &l->value, NULL)) return FcFalse; } else goto notfound; } else if (l) { FcNameUnparseValueList (buf, l, NULL); } else { notfound: if (else_string) FcStrBufString (buf, else_string); } } return FcTrue; } static FcBool cescape (FcFormatContext *c FC_UNUSED, const FcChar8 *str, FcStrBuf *buf) { /* XXX escape \n etc? */ while (*str) { switch (*str) { case '\\': case '"': FcStrBufChar (buf, '\\'); break; } FcStrBufChar (buf, *str++); } return FcTrue; } static FcBool shescape (FcFormatContext *c FC_UNUSED, const FcChar8 *str, FcStrBuf *buf) { FcStrBufChar (buf, '\''); while (*str) { if (*str == '\'') FcStrBufString (buf, (const FcChar8 *)"'\\''"); else FcStrBufChar (buf, *str); str++; } FcStrBufChar (buf, '\''); return FcTrue; } static FcBool xmlescape (FcFormatContext *c FC_UNUSED, const FcChar8 *str, FcStrBuf *buf) { /* XXX escape \n etc? */ while (*str) { switch (*str) { case '&': FcStrBufString (buf, (const FcChar8 *)"&"); break; case '<': FcStrBufString (buf, (const FcChar8 *)"<"); break; case '>': FcStrBufString (buf, (const FcChar8 *)">"); break; default: FcStrBufChar (buf, *str); break; } str++; } return FcTrue; } static FcBool delete_chars (FcFormatContext *c, const FcChar8 *str, FcStrBuf *buf) { /* XXX not UTF-8 aware */ if (!expect_char (c, '(') || !read_chars (c, ')') || !expect_char (c, ')')) return FcFalse; while (*str) { FcChar8 *p; p = (FcChar8 *)strpbrk ((const char *)str, (const char *)c->word); if (p) { FcStrBufData (buf, str, p - str); str = p + 1; } else { FcStrBufString (buf, str); break; } } return FcTrue; } static FcBool escape_chars (FcFormatContext *c, const FcChar8 *str, FcStrBuf *buf) { /* XXX not UTF-8 aware */ if (!expect_char (c, '(') || !read_chars (c, ')') || !expect_char (c, ')')) return FcFalse; while (*str) { FcChar8 *p; p = (FcChar8 *)strpbrk ((const char *)str, (const char *)c->word); if (p) { FcStrBufData (buf, str, p - str); FcStrBufChar (buf, c->word[0]); FcStrBufChar (buf, *p); str = p + 1; } else { FcStrBufString (buf, str); break; } } return FcTrue; } static FcBool translate_chars (FcFormatContext *c, const FcChar8 *str, FcStrBuf *buf) { char *from, *to, repeat; int from_len, to_len; /* XXX not UTF-8 aware */ if (!expect_char (c, '(') || !read_chars (c, ',') || !expect_char (c, ',')) return FcFalse; from = (char *)c->word; from_len = strlen (from); to = from + from_len + 1; /* hack: we temporarily divert c->word */ c->word = (FcChar8 *)to; if (!read_chars (c, ')')) { c->word = (FcChar8 *)from; return FcFalse; } c->word = (FcChar8 *)from; to_len = strlen (to); repeat = to[to_len - 1]; if (!expect_char (c, ')')) return FcFalse; while (*str) { FcChar8 *p; p = (FcChar8 *)strpbrk ((const char *)str, (const char *)from); if (p) { int i; FcStrBufData (buf, str, p - str); i = strchr (from, *p) - from; FcStrBufChar (buf, i < to_len ? to[i] : repeat); str = p + 1; } else { FcStrBufString (buf, str); break; } } return FcTrue; } static FcBool interpret_convert (FcFormatContext *c, FcStrBuf *buf, int start) { const FcChar8 *str; FcChar8 *new_str; FcStrBuf new_buf; FcChar8 buf_static[8192]; FcBool ret; if (!expect_char (c, '|') || !read_word (c)) return FcFalse; /* prepare the buffer */ FcStrBufChar (buf, '\0'); if (buf->failed) return FcFalse; str = buf->buf + start; buf->len = start; /* try simple converters first */ if (0) { } #define CONVERTER(name, func) \ else if (0 == strcmp ((const char *)c->word, name)) do \ { \ new_str = func (str); \ ret = FcTrue; \ } \ while (0) CONVERTER ("downcase", FcStrDowncase); CONVERTER ("basename", FcStrBasename); CONVERTER ("dirname", FcStrDirname); #undef CONVERTER else ret = FcFalse; if (ret) { if (new_str) { FcStrBufString (buf, new_str); FcStrFree (new_str); return FcTrue; } else return FcFalse; } FcStrBufInit (&new_buf, buf_static, sizeof (buf_static)); /* now try our custom converters */ if (0) { } #define CONVERTER(name, func) \ else if (0 == strcmp ((const char *)c->word, name)) \ ret = func (c, str, &new_buf) CONVERTER ("cescape", cescape); CONVERTER ("shescape", shescape); CONVERTER ("xmlescape", xmlescape); CONVERTER ("delete", delete_chars); CONVERTER ("escape", escape_chars); CONVERTER ("translate", translate_chars); #undef CONVERTER else ret = FcFalse; if (ret) { FcStrBufChar (&new_buf, '\0'); FcStrBufString (buf, new_buf.buf); } else message ("unknown converter \"%s\"", c->word); FcStrBufDestroy (&new_buf); return ret; } static FcBool maybe_interpret_converts (FcFormatContext *c, FcStrBuf *buf, int start) { while (*c->format == '|') if (!interpret_convert (c, buf, start)) return FcFalse; return FcTrue; } static FcBool align_to_width (FcStrBuf *buf, int start, int width) { int len; if (buf->failed) return FcFalse; len = buf->len - start; if (len < -width) { /* left align */ while (len++ < -width) FcStrBufChar (buf, ' '); } else if (len < width) { int old_len; old_len = len; /* right align */ while (len++ < width) FcStrBufChar (buf, ' '); if (buf->failed) return FcFalse; len = old_len; memmove (buf->buf + buf->len - len, buf->buf + buf->len - width, len); memset (buf->buf + buf->len - width, ' ', width - len); } return !buf->failed; } static FcBool interpret_percent (FcFormatContext *c, FcPattern *pat, FcStrBuf *buf) { int width, start; FcBool ret; if (!expect_char (c, '%')) return FcFalse; if (consume_char (c, '%')) /* "%%" */ { FcStrBufChar (buf, '%'); return FcTrue; } /* parse an optional width specifier */ width = strtol ((const char *)c->format, (char **)&c->format, 10); if (!expect_char (c, '{')) return FcFalse; start = buf->len; switch (*c->format) { case '=': ret = interpret_builtin (c, pat, buf); break; case '{': ret = interpret_subexpr (c, pat, buf); break; case '+': ret = interpret_filter_in (c, pat, buf); break; case '-': ret = interpret_filter_out (c, pat, buf); break; case '?': ret = interpret_cond (c, pat, buf); break; case '#': ret = interpret_count (c, pat, buf); break; case '[': ret = interpret_enumerate (c, pat, buf); break; default: ret = interpret_simple (c, pat, buf); break; } return ret && maybe_interpret_converts (c, buf, start) && align_to_width (buf, start, width) && expect_char (c, '}'); } static FcBool interpret_expr (FcFormatContext *c, FcPattern *pat, FcStrBuf *buf, FcChar8 term) { while (*c->format && *c->format != term) { switch (*c->format) { case '\\': c->format++; /* skip over '\\' */ if (*c->format) FcStrBufChar (buf, escaped_char (*c->format++)); continue; case '%': if (!interpret_percent (c, pat, buf)) return FcFalse; continue; } FcStrBufChar (buf, *c->format++); } return FcTrue; } static FcBool FcPatternFormatToBuf (FcPattern *pat, const FcChar8 *format, FcStrBuf *buf) { FcFormatContext c; FcChar8 word_static[1024]; FcBool ret; if (!FcFormatContextInit (&c, format, word_static, sizeof (word_static))) return FcFalse; ret = interpret_expr (&c, pat, buf, '\0'); FcFormatContextDone (&c); return ret; } FcChar8 * FcPatternFormat (FcPattern *pat, const FcChar8 *format) { FcStrBuf buf; FcChar8 buf_static[8192 - 1024]; FcPattern *alloced = NULL; FcBool ret; if (!pat) alloced = pat = FcPatternCreate(); FcStrBufInit (&buf, buf_static, sizeof (buf_static)); ret = FcPatternFormatToBuf (pat, format, &buf); if (alloced) FcPatternDestroy (alloced); if (ret) return FcStrBufDone (&buf); else { FcStrBufDestroy (&buf); return NULL; } } #define __fcformat__ #include "fcaliastail.h" #undef __fcformat__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcfoundry.h000066400000000000000000000041211503113465200243270ustar00rootroot00000000000000/* Copyright © 2002-2003 by Juliusz Chroboczek Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* Order is significant. For example, some B&H fonts are hinted by URW++, and both strings appear in the notice. */ static const char *FcNoticeFoundries[][2] = { { "Adobe", "adobe" }, { "Bigelow", "b&h" }, { "Bitstream", "bitstream" }, { "Gnat", "culmus" }, { "Iorsh", "culmus" }, { "HanYang System", "hanyang" }, { "Font21", "hwan" }, { "IBM", "ibm" }, { "International Typeface Corporation", "itc" }, { "Linotype", "linotype" }, { "LINOTYPE-HELL", "linotype" }, { "Microsoft", "microsoft" }, { "Monotype", "monotype" }, { "Omega", "omega" }, { "Tiro Typeworks", "tiro" }, { "URW", "urw" }, { "XFree86", "xfree86" }, { "Xorg", "xorg" }, }; #define NUM_NOTICE_FOUNDRIES (int)(sizeof (FcNoticeFoundries) / sizeof (FcNoticeFoundries[0])) fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcfreetype.c000066400000000000000000003051251503113465200244670ustar00rootroot00000000000000/* * fontconfig/src/fcfreetype.c * * Copyright © 2001 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" #include "fcftint.h" #include #include #include #include #include #include FT_FREETYPE_H #include FT_ADVANCES_H #include FT_TRUETYPE_TABLES_H #include FT_TRUETYPE_TAGS_H #include FT_SFNT_NAMES_H #include FT_TRUETYPE_IDS_H #include FT_TYPE1_TABLES_H #if HAVE_FT_GET_X11_FONT_FORMAT # include FT_XFREE86_H #endif #if HAVE_FT_GET_BDF_PROPERTY # include FT_BDF_H # include FT_MODULE_H #endif #include FT_MULTIPLE_MASTERS_H #include "fcfoundry.h" #include "ftglue.h" typedef struct { const FT_UShort platform_id; const FT_UShort encoding_id; const char fromcode[12]; } FcFtEncoding; #define TT_ENCODING_DONT_CARE 0xffff #define FC_ENCODING_MAC_ROMAN "MACINTOSH" static const FcFtEncoding fcFtEncoding[] = { { TT_PLATFORM_APPLE_UNICODE, TT_ENCODING_DONT_CARE, "UTF-16BE" }, { TT_PLATFORM_MACINTOSH, TT_MAC_ID_ROMAN, "MACINTOSH" }, { TT_PLATFORM_MACINTOSH, TT_MAC_ID_JAPANESE, "SJIS" }, { TT_PLATFORM_MICROSOFT, TT_MS_ID_SYMBOL_CS, "UTF-16BE" }, { TT_PLATFORM_MICROSOFT, TT_MS_ID_UNICODE_CS, "UTF-16BE" }, { TT_PLATFORM_MICROSOFT, TT_MS_ID_SJIS, "SJIS-WIN" }, { TT_PLATFORM_MICROSOFT, TT_MS_ID_PRC, "GB18030" }, { TT_PLATFORM_MICROSOFT, TT_MS_ID_BIG_5, "BIG-5" }, { TT_PLATFORM_MICROSOFT, TT_MS_ID_WANSUNG, "Wansung" }, { TT_PLATFORM_MICROSOFT, TT_MS_ID_JOHAB, "Johab" }, { TT_PLATFORM_MICROSOFT, TT_MS_ID_UCS_4, "UTF-16BE" }, { TT_PLATFORM_ISO, TT_ISO_ID_7BIT_ASCII, "ASCII" }, { TT_PLATFORM_ISO, TT_ISO_ID_10646, "UTF-16BE" }, { TT_PLATFORM_ISO, TT_ISO_ID_8859_1, "ISO-8859-1" }, }; #define NUM_FC_FT_ENCODING (int)(sizeof (fcFtEncoding) / sizeof (fcFtEncoding[0])) typedef struct { const FT_UShort platform_id; const FT_UShort language_id; const char lang[8]; } FcFtLanguage; #define TT_LANGUAGE_DONT_CARE 0xffff static const FcFtLanguage fcFtLanguage[] = { { TT_PLATFORM_APPLE_UNICODE, TT_LANGUAGE_DONT_CARE, "" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ENGLISH, "en" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_FRENCH, "fr" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GERMAN, "de" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ITALIAN, "it" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_DUTCH, "nl" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SWEDISH, "sv" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SPANISH, "es" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_DANISH, "da" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_PORTUGUESE, "pt" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_NORWEGIAN, "no" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_HEBREW, "he" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_JAPANESE, "ja" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ARABIC, "ar" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_FINNISH, "fi" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GREEK, "el" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ICELANDIC, "is" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MALTESE, "mt" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TURKISH, "tr" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CROATIAN, "hr" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CHINESE_TRADITIONAL, "zh-tw" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_URDU, "ur" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_HINDI, "hi" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_THAI, "th" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KOREAN, "ko" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_LITHUANIAN, "lt" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_POLISH, "pl" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_HUNGARIAN, "hu" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ESTONIAN, "et" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_LETTISH, "lv" }, /* { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SAAMISK, ??? */ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_FAEROESE, "fo" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_FARSI, "fa" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_RUSSIAN, "ru" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CHINESE_SIMPLIFIED, "zh-cn" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_FLEMISH, "nl" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_IRISH, "ga" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ALBANIAN, "sq" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ROMANIAN, "ro" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CZECH, "cs" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SLOVAK, "sk" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SLOVENIAN, "sl" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_YIDDISH, "yi" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SERBIAN, "sr" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MACEDONIAN, "mk" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BULGARIAN, "bg" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_UKRAINIAN, "uk" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BYELORUSSIAN, "be" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_UZBEK, "uz" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KAZAKH, "kk" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AZERBAIJANI, "az" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AZERBAIJANI_CYRILLIC_SCRIPT, "az" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AZERBAIJANI_ARABIC_SCRIPT, "ar" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ARMENIAN, "hy" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GEORGIAN, "ka" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MOLDAVIAN, "mo" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KIRGHIZ, "ky" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TAJIKI, "tg" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TURKMEN, "tk" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MONGOLIAN, "mn" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MONGOLIAN_MONGOLIAN_SCRIPT, "mn" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MONGOLIAN_CYRILLIC_SCRIPT, "mn" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_PASHTO, "ps" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KURDISH, "ku" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KASHMIRI, "ks" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SINDHI, "sd" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TIBETAN, "bo" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_NEPALI, "ne" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SANSKRIT, "sa" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MARATHI, "mr" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BENGALI, "bn" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ASSAMESE, "as" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GUJARATI, "gu" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_PUNJABI, "pa" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ORIYA, "or" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MALAYALAM, "ml" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KANNADA, "kn" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TAMIL, "ta" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TELUGU, "te" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SINHALESE, "si" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BURMESE, "my" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KHMER, "km" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_LAO, "lo" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_VIETNAMESE, "vi" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_INDONESIAN, "id" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TAGALOG, "tl" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MALAY_ROMAN_SCRIPT, "ms" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MALAY_ARABIC_SCRIPT, "ms" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AMHARIC, "am" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TIGRINYA, "ti" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GALLA, "om" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SOMALI, "so" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SWAHILI, "sw" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_RUANDA, "rw" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_RUNDI, "rn" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CHEWA, "ny" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MALAGASY, "mg" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ESPERANTO, "eo" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_WELSH, "cy" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BASQUE, "eu" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CATALAN, "ca" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_LATIN, "la" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_QUECHUA, "qu" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GUARANI, "gn" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AYMARA, "ay" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TATAR, "tt" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_UIGHUR, "ug" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_DZONGKHA, "dz" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_JAVANESE, "jw" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SUNDANESE, "su" }, #if 0 /* these seem to be errors that have been dropped */ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SCOTTISH_GAELIC }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_IRISH_GAELIC }, #endif /* The following codes are new as of 2000-03-10 */ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GALICIAN, "gl" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AFRIKAANS, "af" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BRETON, "br" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_INUKTITUT, "iu" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SCOTTISH_GAELIC, "gd" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MANX_GAELIC, "gv" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_IRISH_GAELIC, "ga" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TONGAN, "to" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GREEK_POLYTONIC, "el" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GREELANDIC, "ik" }, { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AZERBAIJANI_ROMAN_SCRIPT, "az" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_SAUDI_ARABIA, "ar" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_IRAQ, "ar" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_EGYPT, "ar" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_LIBYA, "ar" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_ALGERIA, "ar" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_MOROCCO, "ar" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_TUNISIA, "ar" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_OMAN, "ar" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_YEMEN, "ar" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_SYRIA, "ar" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_JORDAN, "ar" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_LEBANON, "ar" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_KUWAIT, "ar" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_UAE, "ar" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_BAHRAIN, "ar" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_QATAR, "ar" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BULGARIAN_BULGARIA, "bg" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CATALAN_SPAIN, "ca" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_TAIWAN, "zh-tw" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_PRC, "zh-cn" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_HONG_KONG, "zh-hk" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_SINGAPORE, "zh-sg" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_MACAU, "zh-mo" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CZECH_CZECH_REPUBLIC, "cs" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_DANISH_DENMARK, "da" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GERMAN_GERMANY, "de" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GERMAN_SWITZERLAND, "de" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GERMAN_AUSTRIA, "de" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GERMAN_LUXEMBOURG, "de" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GERMAN_LIECHTENSTEI, "de" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GREEK_GREECE, "el" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_UNITED_STATES, "en" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_UNITED_KINGDOM, "en" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_AUSTRALIA, "en" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_CANADA, "en" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_NEW_ZEALAND, "en" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_IRELAND, "en" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_SOUTH_AFRICA, "en" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_JAMAICA, "en" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_CARIBBEAN, "en" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_BELIZE, "en" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_TRINIDAD, "en" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_ZIMBABWE, "en" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_PHILIPPINES, "en" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_SPAIN_TRADITIONAL_SORT, "es" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_MEXICO, "es" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_SPAIN_INTERNATIONAL_SORT, "es" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_GUATEMALA, "es" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_COSTA_RICA, "es" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_PANAMA, "es" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_DOMINICAN_REPUBLIC, "es" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_VENEZUELA, "es" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_COLOMBIA, "es" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_PERU, "es" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_ARGENTINA, "es" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_ECUADOR, "es" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_CHILE, "es" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_URUGUAY, "es" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_PARAGUAY, "es" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_BOLIVIA, "es" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_EL_SALVADOR, "es" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_HONDURAS, "es" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_NICARAGUA, "es" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_PUERTO_RICO, "es" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FINNISH_FINLAND, "fi" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_FRANCE, "fr" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_BELGIUM, "fr" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_CANADA, "fr" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_SWITZERLAND, "fr" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_LUXEMBOURG, "fr" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_MONACO, "fr" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_HEBREW_ISRAEL, "he" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_HUNGARIAN_HUNGARY, "hu" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ICELANDIC_ICELAND, "is" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ITALIAN_ITALY, "it" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ITALIAN_SWITZERLAND, "it" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_JAPANESE_JAPAN, "ja" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KOREAN_EXTENDED_WANSUNG_KOREA, "ko" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KOREAN_JOHAB_KOREA, "ko" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_DUTCH_NETHERLANDS, "nl" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_DUTCH_BELGIUM, "nl" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_NORWEGIAN_NORWAY_BOKMAL, "no" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_NORWEGIAN_NORWAY_NYNORSK, "nn" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_POLISH_POLAND, "pl" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PORTUGUESE_BRAZIL, "pt" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PORTUGUESE_PORTUGAL, "pt" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_RHAETO_ROMANIC_SWITZERLAND, "rm" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ROMANIAN_ROMANIA, "ro" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MOLDAVIAN_MOLDAVIA, "mo" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_RUSSIAN_RUSSIA, "ru" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_RUSSIAN_MOLDAVIA, "ru" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CROATIAN_CROATIA, "hr" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SERBIAN_SERBIA_LATIN, "sr" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SERBIAN_SERBIA_CYRILLIC, "sr" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SLOVAK_SLOVAKIA, "sk" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ALBANIAN_ALBANIA, "sq" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SWEDISH_SWEDEN, "sv" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SWEDISH_FINLAND, "sv" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_THAI_THAILAND, "th" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TURKISH_TURKEY, "tr" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_URDU_PAKISTAN, "ur" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_INDONESIAN_INDONESIA, "id" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_UKRAINIAN_UKRAINE, "uk" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BELARUSIAN_BELARUS, "be" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SLOVENE_SLOVENIA, "sl" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ESTONIAN_ESTONIA, "et" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_LATVIAN_LATVIA, "lv" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_LITHUANIAN_LITHUANIA, "lt" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CLASSIC_LITHUANIAN_LITHUANIA, "lt" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MAORI_NEW_ZEALAND, "mi" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FARSI_IRAN, "fa" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_VIETNAMESE_VIET_NAM, "vi" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARMENIAN_ARMENIA, "hy" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_AZERI_AZERBAIJAN_LATIN, "az" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_AZERI_AZERBAIJAN_CYRILLIC, "az" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BASQUE_SPAIN, "eu" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SORBIAN_GERMANY, "wen" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MACEDONIAN_MACEDONIA, "mk" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SUTU_SOUTH_AFRICA, "st" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TSONGA_SOUTH_AFRICA, "ts" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TSWANA_SOUTH_AFRICA, "tn" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_VENDA_SOUTH_AFRICA, "ven" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_XHOSA_SOUTH_AFRICA, "xh" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ZULU_SOUTH_AFRICA, "zu" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_AFRIKAANS_SOUTH_AFRICA, "af" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GEORGIAN_GEORGIA, "ka" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FAEROESE_FAEROE_ISLANDS, "fo" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_HINDI_INDIA, "hi" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MALTESE_MALTA, "mt" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SAAMI_LAPONIA, "se" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SCOTTISH_GAELIC_UNITED_KINGDOM, "gd" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_IRISH_GAELIC_IRELAND, "ga" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MALAY_MALAYSIA, "ms" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MALAY_BRUNEI_DARUSSALAM, "ms" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KAZAK_KAZAKSTAN, "kk" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SWAHILI_KENYA, "sw" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_UZBEK_UZBEKISTAN_LATIN, "uz" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_UZBEK_UZBEKISTAN_CYRILLIC, "uz" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TATAR_TATARSTAN, "tt" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BENGALI_INDIA, "bn" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PUNJABI_INDIA, "pa" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GUJARATI_INDIA, "gu" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ORIYA_INDIA, "or" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TAMIL_INDIA, "ta" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TELUGU_INDIA, "te" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KANNADA_INDIA, "kn" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MALAYALAM_INDIA, "ml" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ASSAMESE_INDIA, "as" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MARATHI_INDIA, "mr" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SANSKRIT_INDIA, "sa" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KONKANI_INDIA, "kok" }, /* new as of 2001-01-01 */ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_GENERAL, "ar" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_GENERAL, "zh" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_GENERAL, "en" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_WEST_INDIES, "fr" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_REUNION, "fr" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_CONGO, "fr" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_SENEGAL, "fr" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_CAMEROON, "fr" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_COTE_D_IVOIRE, "fr" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_MALI, "fr" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA, "bs" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_URDU_INDIA, "ur" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TAJIK_TAJIKISTAN, "tg" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_YIDDISH_GERMANY, "yi" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KIRGHIZ_KIRGHIZSTAN, "ky" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TURKMEN_TURKMENISTAN, "tk" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MONGOLIAN_MONGOLIA, "mn" }, /* the following seems to be inconsistent; here is the current "official" way: */ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TIBETAN_BHUTAN, "bo" }, /* and here is what is used by Passport SDK */ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TIBETAN_CHINA, "bo" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_DZONGHKA_BHUTAN, "dz" }, /* end of inconsistency */ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_WELSH_WALES, "cy" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KHMER_CAMBODIA, "km" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_LAO_LAOS, "lo" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BURMESE_MYANMAR, "my" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GALICIAN_SPAIN, "gl" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MANIPURI_INDIA, "mni" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SINDHI_INDIA, "sd" }, /* the following one is only encountered in Microsoft RTF specification */ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KASHMIRI_PAKISTAN, "ks" }, /* the following one is not in the Passport list, looks like an omission */ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KASHMIRI_INDIA, "ks" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_NEPALI_NEPAL, "ne" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_NEPALI_INDIA, "ne" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRISIAN_NETHERLANDS, "fy" }, /* new as of 2001-03-01 (from Office Xp) */ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_HONG_KONG, "en" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_INDIA, "en" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_MALAYSIA, "en" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_SINGAPORE, "en" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SYRIAC_SYRIA, "syr" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SINHALESE_SRI_LANKA, "si" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHEROKEE_UNITED_STATES, "chr" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_INUKTITUT_CANADA, "iu" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_AMHARIC_ETHIOPIA, "am" }, #if 0 { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TAMAZIGHT_MOROCCO }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TAMAZIGHT_MOROCCO_LATIN }, #endif { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PASHTO_AFGHANISTAN, "ps" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FILIPINO_PHILIPPINES, "phi" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_DHIVEHI_MALDIVES, "div" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_OROMO_ETHIOPIA, "om" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TIGRIGNA_ETHIOPIA, "ti" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TIGRIGNA_ERYTHREA, "ti" }, /* New additions from Windows Xp/Passport SDK 2001-11-10. */ /* don't ask what this one means... It is commented out currently. */ #if 0 { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GREEK_GREECE2 }, #endif { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_UNITED_STATES, "es" }, /* The following two IDs blatantly violate MS specs by using a */ /* sublanguage >,. */ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_LATIN_AMERICA, "es" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_NORTH_AFRICA, "fr" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_MOROCCO, "fr" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_HAITI, "fr" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BENGALI_BANGLADESH, "bn" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PUNJABI_ARABIC_PAKISTAN, "ar" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MONGOLIAN_MONGOLIA_MONGOLIAN, "mn" }, #if 0 { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_EDO_NIGERIA }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FULFULDE_NIGERIA }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_IBIBIO_NIGERIA }, #endif { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_HAUSA_NIGERIA, "ha" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_YORUBA_NIGERIA, "yo" }, /* language codes from, to, are (still) unknown. */ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_IGBO_NIGERIA, "ibo" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KANURI_NIGERIA, "kau" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GUARANI_PARAGUAY, "gn" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_HAWAIIAN_UNITED_STATES, "haw" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_LATIN, "la" }, { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SOMALI_SOMALIA, "so" }, #if 0 /* Note: Yi does not have a (proper) ISO 639-2 code, since it is mostly */ /* not written (but OTOH the peculiar writing system is worth */ /* studying). */ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_YI_CHINA }, #endif { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PAPIAMENTU_NETHERLANDS_ANTILLES, "pap" }, }; #define NUM_FC_FT_LANGUAGE (int)(sizeof (fcFtLanguage) / sizeof (fcFtLanguage[0])) typedef struct { FT_UShort language_id; char fromcode[12]; } FcMacRomanFake; static const FcMacRomanFake fcMacRomanFake[] = { { TT_MS_LANGID_JAPANESE_JAPAN, "SJIS-WIN" }, { TT_MS_LANGID_ENGLISH_UNITED_STATES, "ASCII" }, }; static const char fcSilfCapability[] = "ttable:Silf"; static FcChar8 * FcFontCapabilities (FT_Face face); static FcBool FcFontHasHint (FT_Face face); static int FcFreeTypeSpacing (FT_Face face); #define NUM_FC_MAC_ROMAN_FAKE (int)(sizeof (fcMacRomanFake) / sizeof (fcMacRomanFake[0])) /* From http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/ROMAN.TXT */ static const FcChar16 fcMacRomanNonASCIIToUnicode[128] = { /*0x80*/ 0x00C4, /* LATIN CAPITAL LETTER A WITH DIAERESIS */ /*0x81*/ 0x00C5, /* LATIN CAPITAL LETTER A WITH RING ABOVE */ /*0x82*/ 0x00C7, /* LATIN CAPITAL LETTER C WITH CEDILLA */ /*0x83*/ 0x00C9, /* LATIN CAPITAL LETTER E WITH ACUTE */ /*0x84*/ 0x00D1, /* LATIN CAPITAL LETTER N WITH TILDE */ /*0x85*/ 0x00D6, /* LATIN CAPITAL LETTER O WITH DIAERESIS */ /*0x86*/ 0x00DC, /* LATIN CAPITAL LETTER U WITH DIAERESIS */ /*0x87*/ 0x00E1, /* LATIN SMALL LETTER A WITH ACUTE */ /*0x88*/ 0x00E0, /* LATIN SMALL LETTER A WITH GRAVE */ /*0x89*/ 0x00E2, /* LATIN SMALL LETTER A WITH CIRCUMFLEX */ /*0x8A*/ 0x00E4, /* LATIN SMALL LETTER A WITH DIAERESIS */ /*0x8B*/ 0x00E3, /* LATIN SMALL LETTER A WITH TILDE */ /*0x8C*/ 0x00E5, /* LATIN SMALL LETTER A WITH RING ABOVE */ /*0x8D*/ 0x00E7, /* LATIN SMALL LETTER C WITH CEDILLA */ /*0x8E*/ 0x00E9, /* LATIN SMALL LETTER E WITH ACUTE */ /*0x8F*/ 0x00E8, /* LATIN SMALL LETTER E WITH GRAVE */ /*0x90*/ 0x00EA, /* LATIN SMALL LETTER E WITH CIRCUMFLEX */ /*0x91*/ 0x00EB, /* LATIN SMALL LETTER E WITH DIAERESIS */ /*0x92*/ 0x00ED, /* LATIN SMALL LETTER I WITH ACUTE */ /*0x93*/ 0x00EC, /* LATIN SMALL LETTER I WITH GRAVE */ /*0x94*/ 0x00EE, /* LATIN SMALL LETTER I WITH CIRCUMFLEX */ /*0x95*/ 0x00EF, /* LATIN SMALL LETTER I WITH DIAERESIS */ /*0x96*/ 0x00F1, /* LATIN SMALL LETTER N WITH TILDE */ /*0x97*/ 0x00F3, /* LATIN SMALL LETTER O WITH ACUTE */ /*0x98*/ 0x00F2, /* LATIN SMALL LETTER O WITH GRAVE */ /*0x99*/ 0x00F4, /* LATIN SMALL LETTER O WITH CIRCUMFLEX */ /*0x9A*/ 0x00F6, /* LATIN SMALL LETTER O WITH DIAERESIS */ /*0x9B*/ 0x00F5, /* LATIN SMALL LETTER O WITH TILDE */ /*0x9C*/ 0x00FA, /* LATIN SMALL LETTER U WITH ACUTE */ /*0x9D*/ 0x00F9, /* LATIN SMALL LETTER U WITH GRAVE */ /*0x9E*/ 0x00FB, /* LATIN SMALL LETTER U WITH CIRCUMFLEX */ /*0x9F*/ 0x00FC, /* LATIN SMALL LETTER U WITH DIAERESIS */ /*0xA0*/ 0x2020, /* DAGGER */ /*0xA1*/ 0x00B0, /* DEGREE SIGN */ /*0xA2*/ 0x00A2, /* CENT SIGN */ /*0xA3*/ 0x00A3, /* POUND SIGN */ /*0xA4*/ 0x00A7, /* SECTION SIGN */ /*0xA5*/ 0x2022, /* BULLET */ /*0xA6*/ 0x00B6, /* PILCROW SIGN */ /*0xA7*/ 0x00DF, /* LATIN SMALL LETTER SHARP S */ /*0xA8*/ 0x00AE, /* REGISTERED SIGN */ /*0xA9*/ 0x00A9, /* COPYRIGHT SIGN */ /*0xAA*/ 0x2122, /* TRADE MARK SIGN */ /*0xAB*/ 0x00B4, /* ACUTE ACCENT */ /*0xAC*/ 0x00A8, /* DIAERESIS */ /*0xAD*/ 0x2260, /* NOT EQUAL TO */ /*0xAE*/ 0x00C6, /* LATIN CAPITAL LETTER AE */ /*0xAF*/ 0x00D8, /* LATIN CAPITAL LETTER O WITH STROKE */ /*0xB0*/ 0x221E, /* INFINITY */ /*0xB1*/ 0x00B1, /* PLUS-MINUS SIGN */ /*0xB2*/ 0x2264, /* LESS-THAN OR EQUAL TO */ /*0xB3*/ 0x2265, /* GREATER-THAN OR EQUAL TO */ /*0xB4*/ 0x00A5, /* YEN SIGN */ /*0xB5*/ 0x00B5, /* MICRO SIGN */ /*0xB6*/ 0x2202, /* PARTIAL DIFFERENTIAL */ /*0xB7*/ 0x2211, /* N-ARY SUMMATION */ /*0xB8*/ 0x220F, /* N-ARY PRODUCT */ /*0xB9*/ 0x03C0, /* GREEK SMALL LETTER PI */ /*0xBA*/ 0x222B, /* INTEGRAL */ /*0xBB*/ 0x00AA, /* FEMININE ORDINAL INDICATOR */ /*0xBC*/ 0x00BA, /* MASCULINE ORDINAL INDICATOR */ /*0xBD*/ 0x03A9, /* GREEK CAPITAL LETTER OMEGA */ /*0xBE*/ 0x00E6, /* LATIN SMALL LETTER AE */ /*0xBF*/ 0x00F8, /* LATIN SMALL LETTER O WITH STROKE */ /*0xC0*/ 0x00BF, /* INVERTED QUESTION MARK */ /*0xC1*/ 0x00A1, /* INVERTED EXCLAMATION MARK */ /*0xC2*/ 0x00AC, /* NOT SIGN */ /*0xC3*/ 0x221A, /* SQUARE ROOT */ /*0xC4*/ 0x0192, /* LATIN SMALL LETTER F WITH HOOK */ /*0xC5*/ 0x2248, /* ALMOST EQUAL TO */ /*0xC6*/ 0x2206, /* INCREMENT */ /*0xC7*/ 0x00AB, /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */ /*0xC8*/ 0x00BB, /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */ /*0xC9*/ 0x2026, /* HORIZONTAL ELLIPSIS */ /*0xCA*/ 0x00A0, /* NO-BREAK SPACE */ /*0xCB*/ 0x00C0, /* LATIN CAPITAL LETTER A WITH GRAVE */ /*0xCC*/ 0x00C3, /* LATIN CAPITAL LETTER A WITH TILDE */ /*0xCD*/ 0x00D5, /* LATIN CAPITAL LETTER O WITH TILDE */ /*0xCE*/ 0x0152, /* LATIN CAPITAL LIGATURE OE */ /*0xCF*/ 0x0153, /* LATIN SMALL LIGATURE OE */ /*0xD0*/ 0x2013, /* EN DASH */ /*0xD1*/ 0x2014, /* EM DASH */ /*0xD2*/ 0x201C, /* LEFT DOUBLE QUOTATION MARK */ /*0xD3*/ 0x201D, /* RIGHT DOUBLE QUOTATION MARK */ /*0xD4*/ 0x2018, /* LEFT SINGLE QUOTATION MARK */ /*0xD5*/ 0x2019, /* RIGHT SINGLE QUOTATION MARK */ /*0xD6*/ 0x00F7, /* DIVISION SIGN */ /*0xD7*/ 0x25CA, /* LOZENGE */ /*0xD8*/ 0x00FF, /* LATIN SMALL LETTER Y WITH DIAERESIS */ /*0xD9*/ 0x0178, /* LATIN CAPITAL LETTER Y WITH DIAERESIS */ /*0xDA*/ 0x2044, /* FRACTION SLASH */ /*0xDB*/ 0x20AC, /* EURO SIGN */ /*0xDC*/ 0x2039, /* SINGLE LEFT-POINTING ANGLE QUOTATION MARK */ /*0xDD*/ 0x203A, /* SINGLE RIGHT-POINTING ANGLE QUOTATION MARK */ /*0xDE*/ 0xFB01, /* LATIN SMALL LIGATURE FI */ /*0xDF*/ 0xFB02, /* LATIN SMALL LIGATURE FL */ /*0xE0*/ 0x2021, /* DOUBLE DAGGER */ /*0xE1*/ 0x00B7, /* MIDDLE DOT */ /*0xE2*/ 0x201A, /* SINGLE LOW-9 QUOTATION MARK */ /*0xE3*/ 0x201E, /* DOUBLE LOW-9 QUOTATION MARK */ /*0xE4*/ 0x2030, /* PER MILLE SIGN */ /*0xE5*/ 0x00C2, /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX */ /*0xE6*/ 0x00CA, /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX */ /*0xE7*/ 0x00C1, /* LATIN CAPITAL LETTER A WITH ACUTE */ /*0xE8*/ 0x00CB, /* LATIN CAPITAL LETTER E WITH DIAERESIS */ /*0xE9*/ 0x00C8, /* LATIN CAPITAL LETTER E WITH GRAVE */ /*0xEA*/ 0x00CD, /* LATIN CAPITAL LETTER I WITH ACUTE */ /*0xEB*/ 0x00CE, /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX */ /*0xEC*/ 0x00CF, /* LATIN CAPITAL LETTER I WITH DIAERESIS */ /*0xED*/ 0x00CC, /* LATIN CAPITAL LETTER I WITH GRAVE */ /*0xEE*/ 0x00D3, /* LATIN CAPITAL LETTER O WITH ACUTE */ /*0xEF*/ 0x00D4, /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX */ /*0xF0*/ 0xF8FF, /* Apple logo */ /*0xF1*/ 0x00D2, /* LATIN CAPITAL LETTER O WITH GRAVE */ /*0xF2*/ 0x00DA, /* LATIN CAPITAL LETTER U WITH ACUTE */ /*0xF3*/ 0x00DB, /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX */ /*0xF4*/ 0x00D9, /* LATIN CAPITAL LETTER U WITH GRAVE */ /*0xF5*/ 0x0131, /* LATIN SMALL LETTER DOTLESS I */ /*0xF6*/ 0x02C6, /* MODIFIER LETTER CIRCUMFLEX ACCENT */ /*0xF7*/ 0x02DC, /* SMALL TILDE */ /*0xF8*/ 0x00AF, /* MACRON */ /*0xF9*/ 0x02D8, /* BREVE */ /*0xFA*/ 0x02D9, /* DOT ABOVE */ /*0xFB*/ 0x02DA, /* RING ABOVE */ /*0xFC*/ 0x00B8, /* CEDILLA */ /*0xFD*/ 0x02DD, /* DOUBLE ACUTE ACCENT */ /*0xFE*/ 0x02DB, /* OGONEK */ /*0xFF*/ 0x02C7, /* CARON */ }; #if USE_ICONV # include # ifdef _WIN32 # ifdef WINICONV_CONST # define FC_ICONV_CONST WINICONV_CONST # endif # endif # ifndef FC_ICONV_CONST # define FC_ICONV_CONST # endif #endif /* * A shift-JIS will have many high bits turned on */ static FcBool FcLooksLikeSJIS (FcChar8 *string, int len) { int nhigh = 0, nlow = 0; while (len-- > 0) { if (*string++ & 0x80) nhigh++; else nlow++; } /* * Heuristic -- if more than 1/3 of the bytes have the high-bit set, * this is likely to be SJIS and not ROMAN */ if (nhigh * 2 > nlow) return FcTrue; return FcFalse; } static FcChar8 * FcSfntNameTranscode (FT_SfntName *sname) { int i; const char *fromcode; #if USE_ICONV iconv_t cd; #endif FcChar8 *utf8; FcBool redecoded = FcFalse; for (i = 0; i < NUM_FC_FT_ENCODING; i++) if (fcFtEncoding[i].platform_id == sname->platform_id && (fcFtEncoding[i].encoding_id == TT_ENCODING_DONT_CARE || fcFtEncoding[i].encoding_id == sname->encoding_id)) break; if (i == NUM_FC_FT_ENCODING) return 0; fromcode = fcFtEncoding[i].fromcode; #if USE_ICONV retry: #endif /* * Many names encoded for TT_PLATFORM_MACINTOSH are broken * in various ways. Kludge around them. */ if (!strcmp (fromcode, FC_ENCODING_MAC_ROMAN)) { if (sname->language_id == TT_MAC_LANGID_ENGLISH && FcLooksLikeSJIS (sname->string, sname->string_len)) { fromcode = "SJIS"; } else if (sname->language_id == TT_MAC_LANGID_JAPANESE) { fromcode = "SJIS"; } else if (sname->language_id >= 0x100) { /* * "real" Mac language IDs are all less than 150. * Names using one of the MS language IDs are assumed * to use an associated encoding (Yes, this is a kludge) */ int f; fromcode = NULL; for (f = 0; f < NUM_FC_MAC_ROMAN_FAKE; f++) if (fcMacRomanFake[f].language_id == sname->language_id) { fromcode = fcMacRomanFake[f].fromcode; break; } if (!fromcode) return 0; } } if (!strcmp (fromcode, "UCS-2BE") || !strcmp (fromcode, "UTF-16BE")) { FcChar8 *src = sname->string; int src_len = sname->string_len; int len; int wchar; int ilen, olen; FcChar8 *u8; FcChar32 ucs4; /* * Convert Utf16 to Utf8 */ if (!FcUtf16Len (src, FcEndianBig, src_len, &len, &wchar)) return 0; /* * Allocate plenty of space. Freed below */ utf8 = malloc (len * FC_UTF8_MAX_LEN + 1); if (!utf8) return 0; u8 = utf8; while ((ilen = FcUtf16ToUcs4 (src, FcEndianBig, &ucs4, src_len)) > 0) { src_len -= ilen; src += ilen; olen = FcUcs4ToUtf8 (ucs4, u8); u8 += olen; } *u8 = '\0'; goto done; } if (!strcmp (fromcode, "ASCII") || !strcmp (fromcode, "ISO-8859-1")) { FcChar8 *src = sname->string; int src_len = sname->string_len; int olen; FcChar8 *u8; FcChar32 ucs4; /* * Convert Latin1 to Utf8. Freed below */ utf8 = malloc (src_len * 2 + 1); if (!utf8) return 0; u8 = utf8; while (src_len > 0) { ucs4 = *src++; src_len--; olen = FcUcs4ToUtf8 (ucs4, u8); u8 += olen; } *u8 = '\0'; goto done; } if (!strcmp (fromcode, FC_ENCODING_MAC_ROMAN)) { FcChar8 *src = sname->string; int src_len = sname->string_len; int olen; FcChar8 *u8; FcChar32 ucs4; /* * Convert Latin1 to Utf8. Freed below */ utf8 = malloc (src_len * 3 + 1); if (!utf8) return 0; u8 = utf8; while (src_len > 0) { ucs4 = *src++; if (ucs4 >= 128) ucs4 = fcMacRomanNonASCIIToUnicode[ucs4 - 128]; src_len--; olen = FcUcs4ToUtf8 (ucs4, u8); u8 += olen; } *u8 = '\0'; goto done; } #if USE_ICONV cd = iconv_open ("UTF-8", fromcode); if (cd && cd != (iconv_t)(-1)) { size_t in_bytes_left = sname->string_len; size_t out_bytes_left = sname->string_len * FC_UTF8_MAX_LEN; char *inbuf, *outbuf; utf8 = malloc (out_bytes_left + 1); if (!utf8) { iconv_close (cd); return 0; } outbuf = (char *)utf8; inbuf = (char *)sname->string; while (in_bytes_left) { size_t did = iconv (cd, (FC_ICONV_CONST char **)&inbuf, &in_bytes_left, &outbuf, &out_bytes_left); if (did == (size_t)(-1)) { iconv_close (cd); free (utf8); if (!redecoded) { /* Regard the encoding as UTF-16BE and try again. */ redecoded = FcTrue; fromcode = "UTF-16BE"; goto retry; } return 0; } } iconv_close (cd); *outbuf = '\0'; goto done; } #endif return 0; done: if (FcStrCmpIgnoreBlanksAndCase (utf8, (FcChar8 *)"") == 0) { free (utf8); return 0; } return utf8; } static const FcChar8 * FcSfntNameLanguage (FT_SfntName *sname) { int i; FT_UShort platform_id = sname->platform_id; FT_UShort language_id = sname->language_id; /* * Many names encoded for TT_PLATFORM_MACINTOSH are broken * in various ways. Kludge around them. */ if (platform_id == TT_PLATFORM_MACINTOSH && sname->encoding_id == TT_MAC_ID_ROMAN && FcLooksLikeSJIS (sname->string, sname->string_len)) { language_id = TT_MAC_LANGID_JAPANESE; } for (i = 0; i < NUM_FC_FT_LANGUAGE; i++) if (fcFtLanguage[i].platform_id == platform_id && (fcFtLanguage[i].language_id == TT_LANGUAGE_DONT_CARE || fcFtLanguage[i].language_id == language_id)) { if (fcFtLanguage[i].lang[0] == '\0') return NULL; else return (FcChar8 *)fcFtLanguage[i].lang; } return 0; } static const FcChar8 * FcNoticeFoundry (const FT_String *notice) { int i; if (notice) for (i = 0; i < NUM_NOTICE_FOUNDRIES; i++) { const char *n = FcNoticeFoundries[i][0]; const char *f = FcNoticeFoundries[i][1]; if (strstr ((const char *)notice, n)) return (const FcChar8 *)f; } return 0; } typedef struct _FcStringConst { const FcChar8 *name; int value; } FcStringConst; static int FcStringIsConst (const FcChar8 *string, const FcStringConst *c, int nc) { int i; for (i = 0; i < nc; i++) if (FcStrCmpIgnoreBlanksAndCase (string, c[i].name) == 0) return c[i].value; return -1; } static int FcStringContainsConst (const FcChar8 *string, const FcStringConst *c, int nc) { int i; for (i = 0; i < nc; i++) { if (c[i].name[0] == '<') { if (FcStrContainsWord (string, c[i].name + 1)) return c[i].value; } else { if (FcStrContainsIgnoreBlanksAndCase (string, c[i].name)) return c[i].value; } } return -1; } typedef FcChar8 *FC8; static const FcStringConst weightConsts[] = { { (FC8) "thin", FC_WEIGHT_THIN }, { (FC8) "extralight", FC_WEIGHT_EXTRALIGHT }, { (FC8) "ultralight", FC_WEIGHT_ULTRALIGHT }, { (FC8) "demilight", FC_WEIGHT_DEMILIGHT }, { (FC8) "semilight", FC_WEIGHT_SEMILIGHT }, { (FC8) "light", FC_WEIGHT_LIGHT }, { (FC8) "book", FC_WEIGHT_BOOK }, { (FC8) "regular", FC_WEIGHT_REGULAR }, { (FC8) "normal", FC_WEIGHT_NORMAL }, { (FC8) "medium", FC_WEIGHT_MEDIUM }, { (FC8) "demibold", FC_WEIGHT_DEMIBOLD }, { (FC8) "demi", FC_WEIGHT_DEMIBOLD }, { (FC8) "semibold", FC_WEIGHT_SEMIBOLD }, { (FC8) "extrabold", FC_WEIGHT_EXTRABOLD }, { (FC8) "superbold", FC_WEIGHT_EXTRABOLD }, { (FC8) "ultrabold", FC_WEIGHT_ULTRABOLD }, { (FC8) "bold", FC_WEIGHT_BOLD }, { (FC8) "ultrablack", FC_WEIGHT_ULTRABLACK }, { (FC8) "superblack", FC_WEIGHT_EXTRABLACK }, { (FC8) "extrablack", FC_WEIGHT_EXTRABLACK }, { (FC8) "num_fixed_sizes == 1) { BDF_PropertyRec prop; int rc; rc = FT_Get_BDF_Property (face, "PIXEL_SIZE", &prop); if (rc == 0 && prop.type == BDF_PROPERTY_TYPE_INTEGER) return (double)prop.u.integer; } #endif return (double)face->available_sizes[i].y_ppem / 64.0; } static FcBool FcStringInPatternElement (FcPattern *pat, FcObject obj, const FcChar8 *string) { FcPatternIter iter; FcValueListPtr l; FcPatternIterStart (pat, &iter); if (!FcPatternFindObjectIter (pat, &iter, obj)) return FcFalse; for (l = FcPatternIterGetValues (pat, &iter); l; l = FcValueListNext (l)) { FcValue v = FcValueCanonicalize (&l->value); if (v.type != FcTypeString) break; if (!FcStrCmpIgnoreBlanksAndCase (v.u.s, string)) return FcTrue; } return FcFalse; } static const FT_UShort platform_order[] = { TT_PLATFORM_MICROSOFT, TT_PLATFORM_APPLE_UNICODE, TT_PLATFORM_MACINTOSH, TT_PLATFORM_ISO, }; #define NUM_PLATFORM_ORDER (sizeof (platform_order) / sizeof (platform_order[0])) static const FT_UShort nameid_order[] = { TT_NAME_ID_WWS_FAMILY, TT_NAME_ID_TYPOGRAPHIC_FAMILY, TT_NAME_ID_FONT_FAMILY, TT_NAME_ID_MAC_FULL_NAME, TT_NAME_ID_FULL_NAME, TT_NAME_ID_WWS_SUBFAMILY, TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY, TT_NAME_ID_FONT_SUBFAMILY, TT_NAME_ID_TRADEMARK, TT_NAME_ID_MANUFACTURER, }; #define NUM_NAMEID_ORDER (sizeof (nameid_order) / sizeof (nameid_order[0])) typedef struct { unsigned int platform_id; unsigned int name_id; unsigned int encoding_id; unsigned int language_id; unsigned int idx; } FcNameMapping; static FcBool _is_english (int platform, int language) { FcBool ret = FcFalse; switch (platform) { case TT_PLATFORM_MACINTOSH: ret = language == TT_MAC_LANGID_ENGLISH; break; case TT_PLATFORM_MICROSOFT: ret = language == TT_MS_LANGID_ENGLISH_UNITED_STATES; break; } return ret; } static int name_mapping_cmp (const void *pa, const void *pb) { const FcNameMapping *a = (const FcNameMapping *)pa; const FcNameMapping *b = (const FcNameMapping *)pb; if (a->platform_id != b->platform_id) return (int)a->platform_id - (int)b->platform_id; if (a->name_id != b->name_id) return (int)a->name_id - (int)b->name_id; if (a->encoding_id != b->encoding_id) return (int)a->encoding_id - (int)b->encoding_id; if (a->language_id != b->language_id) return _is_english (a->platform_id, a->language_id) ? -1 : _is_english (b->platform_id, b->language_id) ? 1 : (int)a->language_id - (int)b->language_id; if (a->idx != b->idx) return (int)a->idx - (int)b->idx; return 0; } static int FcFreeTypeGetFirstName (const FT_Face face, unsigned int platform, unsigned int nameid, FcNameMapping *mapping, unsigned int count, FT_SfntName *sname) { int min = 0, max = (int)count - 1; while (min <= max) { int mid = (min + max) / 2; if (FT_Get_Sfnt_Name (face, mapping[mid].idx, sname) != 0) return FcFalse; if (platform < sname->platform_id || (platform == sname->platform_id && (nameid < sname->name_id || (nameid == sname->name_id && (mid && platform == mapping[mid - 1].platform_id && nameid == mapping[mid - 1].name_id))))) max = mid - 1; else if (platform > sname->platform_id || (platform == sname->platform_id && nameid > sname->name_id)) min = mid + 1; else return mid; } return -1; } static FcPattern * FcFreeTypeQueryFaceInternal (const FT_Face face, const FcChar8 *file, unsigned int id, FcCharSet **cs_share, FcLangSet **ls_share, FcNameMapping **nm_share) { FcPattern *pat; int slant = -1; double weight = -1; double width = -1; FcBool decorative = FcFalse; FcBool variable = FcFalse; FcBool variable_weight = FcFalse; FcBool variable_width = FcFalse; FcBool variable_size = FcFalse; FcCharSet *cs; FcLangSet *ls; FcNameMapping *name_mapping = NULL; #if 0 FcChar8 *family = 0; #endif FcChar8 *complex_, *foundry_ = NULL; const FcChar8 *foundry = 0; int spacing; /* Support for glyph-variation named-instances. */ FT_MM_Var *mmvar = NULL; FT_Var_Named_Style *instance = NULL; double weight_mult = 1.0; double width_mult = 1.0; TT_OS2 *os2; #if HAVE_FT_GET_PS_FONT_INFO PS_FontInfoRec psfontinfo; #endif #if HAVE_FT_GET_BDF_PROPERTY BDF_PropertyRec prop; #endif TT_Header *head; const FcChar8 *exclusiveLang = 0; int name_count = 0; int nfamily = 0; int nfamily_lang = 0; int nstyle = 0; int nstyle_lang = 0; int nfullname = 0; int nfullname_lang = 0; unsigned int p, n; FcChar8 *style = 0; int st; FcBool symbol = FcFalse; FT_Error ftresult; FcInitDebug(); /* We might be called with no initizalization whatsoever. */ pat = FcPatternCreate(); if (!pat) goto bail0; { int has_outline = !!(face->face_flags & FT_FACE_FLAG_SCALABLE); int has_color = 0; if (!FcPatternObjectAddBool (pat, FC_OUTLINE_OBJECT, has_outline)) goto bail1; has_color = !!FT_HAS_COLOR (face); if (!FcPatternObjectAddBool (pat, FC_COLOR_OBJECT, has_color)) goto bail1; /* All color fonts are designed to be scaled, even if they only have * bitmap strikes. Client is responsible to scale the bitmaps. This * is in contrast to non-color strikes... */ if (!FcPatternObjectAddBool (pat, FC_SCALABLE_OBJECT, has_outline || has_color)) goto bail1; } ftresult = FT_Get_MM_Var (face, &mmvar); if (id >> 16) { if (ftresult) goto bail1; if (id >> 16 == 0x8000) { /* Query variable font itself. */ unsigned int i; for (i = 0; i < mmvar->num_axis; i++) { double min_value = mmvar->axis[i].minimum / (double)(1U << 16); double def_value = mmvar->axis[i].def / (double)(1U << 16); double max_value = mmvar->axis[i].maximum / (double)(1U << 16); FcObject obj = FC_INVALID_OBJECT; if (min_value > def_value || def_value > max_value || min_value == max_value) continue; switch (mmvar->axis[i].tag) { case FT_MAKE_TAG ('w', 'g', 'h', 't'): obj = FC_WEIGHT_OBJECT; min_value = FcWeightFromOpenTypeDouble (min_value); max_value = FcWeightFromOpenTypeDouble (max_value); variable_weight = FcTrue; weight = 0; /* To stop looking for weight. */ break; case FT_MAKE_TAG ('w', 'd', 't', 'h'): obj = FC_WIDTH_OBJECT; /* Values in 'wdth' match Fontconfig FC_WIDTH_* scheme directly. */ variable_width = FcTrue; width = 0; /* To stop looking for width. */ break; case FT_MAKE_TAG ('o', 'p', 's', 'z'): obj = FC_SIZE_OBJECT; /* Values in 'opsz' match Fontconfig FC_SIZE, both are in points. */ variable_size = FcTrue; break; } if (obj != FC_INVALID_OBJECT) { FcRange *r = FcRangeCreateDouble (min_value, max_value); if (!FcPatternObjectAddRange (pat, obj, r)) { FcRangeDestroy (r); goto bail1; } FcRangeDestroy (r); variable = FcTrue; } } if (!variable) goto bail1; id &= 0xFFFF; } else if ((id >> 16) - 1 < mmvar->num_namedstyles) { /* Pull out weight and width from named-instance. */ unsigned int i; instance = &mmvar->namedstyle[(id >> 16) - 1]; for (i = 0; i < mmvar->num_axis; i++) { double value = instance->coords[i] / (double)(1U << 16); double default_value = mmvar->axis[i].def / (double)(1U << 16); double mult = default_value ? value / default_value : 1; // printf ("named-instance, axis %d tag %lx value %g\n", i, mmvar->axis[i].tag, value); switch (mmvar->axis[i].tag) { case FT_MAKE_TAG ('w', 'g', 'h', 't'): weight_mult = mult; break; case FT_MAKE_TAG ('w', 'd', 't', 'h'): width_mult = mult; break; case FT_MAKE_TAG ('o', 'p', 's', 'z'): if (!FcPatternObjectAddDouble (pat, FC_SIZE_OBJECT, value)) goto bail1; break; } } } else goto bail1; } else { if (!ftresult) { unsigned int i; for (i = 0; i < mmvar->num_axis; i++) { switch (mmvar->axis[i].tag) { case FT_MAKE_TAG ('o', 'p', 's', 'z'): if (!FcPatternObjectAddDouble (pat, FC_SIZE_OBJECT, mmvar->axis[i].def / (double)(1U << 16))) goto bail1; variable_size = FcTrue; break; } } } else { /* ignore an error of FT_Get_MM_Var() */ } } if (!FcPatternObjectAddBool (pat, FC_VARIABLE_OBJECT, variable)) goto bail1; /* * Get the OS/2 table */ os2 = (TT_OS2 *)FT_Get_Sfnt_Table (face, FT_SFNT_OS2); /* * Look first in the OS/2 table for the foundry, if * not found here, the various notices will be searched for * that information, either from the sfnt name tables or * the Postscript FontInfo dictionary. Finally, the * BDF properties will queried. */ if (os2 && os2->version != 0xffff) { if (os2->achVendID[0] != 0) { foundry_ = (FcChar8 *)malloc (sizeof (os2->achVendID) + 1); memcpy ((void *)foundry_, os2->achVendID, sizeof (os2->achVendID)); foundry_[sizeof (os2->achVendID)] = 0; foundry = foundry_; } } if (FcDebug() & FC_DBG_SCANV) printf ("\n"); /* * Grub through the name table looking for family * and style names. FreeType makes quite a hash * of them */ name_count = FT_Get_Sfnt_Name_Count (face); if (nm_share) name_mapping = *nm_share; if (!name_mapping) { int i = 0; name_mapping = malloc (name_count * sizeof (FcNameMapping)); if (!name_mapping) name_count = 0; for (i = 0; i < name_count; i++) { FcNameMapping *p = &name_mapping[i]; FT_SfntName sname; if (FT_Get_Sfnt_Name (face, i, &sname) == 0) { p->platform_id = sname.platform_id; p->name_id = sname.name_id; p->encoding_id = sname.encoding_id; p->language_id = sname.language_id; p->idx = i; } else { p->platform_id = p->name_id = p->encoding_id = p->language_id = p->idx = (unsigned int)-1; } } qsort (name_mapping, name_count, sizeof (FcNameMapping), name_mapping_cmp); if (nm_share) *nm_share = name_mapping; } for (p = 0; p < NUM_PLATFORM_ORDER; p++) { int platform = platform_order[p]; /* * Order nameids so preferred names appear first * in the resulting list */ for (n = 0; n < NUM_NAMEID_ORDER; n++) { FT_SfntName sname; int nameidx; const FcChar8 *lang; int *np = 0, *nlangp = 0; size_t len; int nameid, lookupid; FcObject obj = FC_INVALID_OBJECT, objlang = FC_INVALID_OBJECT; nameid = lookupid = nameid_order[n]; if (instance) { /* For named-instances, we skip regular style nameIDs, * and treat the instance's nameid as FONT_SUBFAMILY. * Postscript name is automatically handled by FreeType. */ if (nameid == TT_NAME_ID_WWS_SUBFAMILY || nameid == TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY || nameid == TT_NAME_ID_FULL_NAME) continue; if (nameid == TT_NAME_ID_FONT_SUBFAMILY) lookupid = instance->strid; } nameidx = FcFreeTypeGetFirstName (face, platform, lookupid, name_mapping, name_count, &sname); if (nameidx == -1) continue; do { switch (nameid) { case TT_NAME_ID_WWS_FAMILY: case TT_NAME_ID_TYPOGRAPHIC_FAMILY: case TT_NAME_ID_FONT_FAMILY: #if 0 case TT_NAME_ID_UNIQUE_ID: #endif if (FcDebug() & FC_DBG_SCANV) printf ("found family (n %2d p %d e %d l 0x%04x)", sname.name_id, sname.platform_id, sname.encoding_id, sname.language_id); obj = FC_FAMILY_OBJECT; objlang = FC_FAMILYLANG_OBJECT; np = &nfamily; nlangp = &nfamily_lang; break; case TT_NAME_ID_MAC_FULL_NAME: case TT_NAME_ID_FULL_NAME: if (variable) break; if (FcDebug() & FC_DBG_SCANV) printf ("found full (n %2d p %d e %d l 0x%04x)", sname.name_id, sname.platform_id, sname.encoding_id, sname.language_id); obj = FC_FULLNAME_OBJECT; objlang = FC_FULLNAMELANG_OBJECT; np = &nfullname; nlangp = &nfullname_lang; break; case TT_NAME_ID_WWS_SUBFAMILY: case TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY: case TT_NAME_ID_FONT_SUBFAMILY: if (variable) break; if (FcDebug() & FC_DBG_SCANV) printf ("found style (n %2d p %d e %d l 0x%04x) ", sname.name_id, sname.platform_id, sname.encoding_id, sname.language_id); obj = FC_STYLE_OBJECT; objlang = FC_STYLELANG_OBJECT; np = &nstyle; nlangp = &nstyle_lang; break; case TT_NAME_ID_TRADEMARK: case TT_NAME_ID_MANUFACTURER: /* If the foundry wasn't found in the OS/2 table, look here */ if (!foundry) { FcChar8 *utf8; utf8 = FcSfntNameTranscode (&sname); foundry = FcNoticeFoundry ((FT_String *)utf8); free (utf8); } break; } if (obj != FC_INVALID_OBJECT) { FcChar8 *utf8, *pp; utf8 = FcSfntNameTranscode (&sname); lang = FcSfntNameLanguage (&sname); if (FcDebug() & FC_DBG_SCANV) printf ("%s\n", utf8 ? (char *)utf8 : "(null)"); if (!utf8) continue; /* Trim surrounding whitespace. */ pp = utf8; while (*pp == ' ') pp++; len = strlen ((const char *)pp); memmove (utf8, pp, len + 1); pp = utf8 + len; while (pp > utf8 && (*(pp - 1) == ' ' || *(pp - 1) == '\r' || *(pp - 1) == '\n')) pp--; *pp = 0; if (FcStringInPatternElement (pat, obj, utf8)) { free (utf8); continue; } /* add new element */ if (!FcPatternObjectAddString (pat, obj, utf8)) { free (utf8); goto bail1; } free (utf8); if (lang) { if (!FcPatternObjectAddString (pat, objlang, lang)) goto bail1; ++*nlangp; } else { /* Add und as a fallback */ if (!FcPatternObjectAddString (pat, objlang, (FcChar8 *)"und")) goto bail1; ++*nlangp; } ++*np; } } while (++nameidx < name_count && FT_Get_Sfnt_Name (face, name_mapping[nameidx].idx, &sname) == 0 && platform == sname.platform_id && lookupid == sname.name_id); } } if (!nm_share) { free (name_mapping); name_mapping = NULL; } if (!nfamily && face->family_name && FcStrCmpIgnoreBlanksAndCase ((FcChar8 *)face->family_name, (FcChar8 *)"") != 0) { if (FcDebug() & FC_DBG_SCANV) printf ("using FreeType family \"%s\"\n", face->family_name); if (!FcPatternObjectAddString (pat, FC_FAMILY_OBJECT, (FcChar8 *)face->family_name)) goto bail1; if (!FcPatternObjectAddString (pat, FC_FAMILYLANG_OBJECT, (FcChar8 *)"en")) goto bail1; ++nfamily; } if (!variable && !nstyle) { const FcChar8 *style_regular = (const FcChar8 *)"Regular"; const FcChar8 *ss; if (face->style_name && FcStrCmpIgnoreBlanksAndCase ((FcChar8 *)face->style_name, (FcChar8 *)"") != 0) { if (FcDebug() & FC_DBG_SCANV) printf ("using FreeType style \"%s\"\n", face->style_name); ss = (const FcChar8 *)face->style_name; } else { if (FcDebug() & FC_DBG_SCANV) printf ("applying default style Regular\n"); ss = style_regular; } if (!FcPatternObjectAddString (pat, FC_STYLE_OBJECT, ss)) goto bail1; if (!FcPatternObjectAddString (pat, FC_STYLELANG_OBJECT, (FcChar8 *)"en")) goto bail1; ++nstyle; } if (!nfamily && file && *file) { FcChar8 *start, *end; FcChar8 *family; start = (FcChar8 *)strrchr ((char *)file, '/'); if (start) start++; else start = (FcChar8 *)file; end = (FcChar8 *)strrchr ((char *)start, '.'); if (!end) end = start + strlen ((char *)start); /* freed below */ family = malloc (end - start + 1); strncpy ((char *)family, (char *)start, end - start); family[end - start] = '\0'; if (FcDebug() & FC_DBG_SCANV) printf ("using filename for family %s\n", family); if (!FcPatternObjectAddString (pat, FC_FAMILY_OBJECT, family)) { free (family); goto bail1; } if (!FcPatternObjectAddString (pat, FC_FAMILYLANG_OBJECT, (FcChar8 *)"en")) { free (family); goto bail1; } free (family); ++nfamily; } /* Add the fullname into the cache */ if (!variable && !nfullname) { FcChar8 *family, *style, *lang = NULL; int n = 0; size_t len, i; FcStrBuf sbuf; while (FcPatternObjectGetString (pat, FC_FAMILYLANG_OBJECT, n, &lang) == FcResultMatch) { if (FcStrCmp (lang, (const FcChar8 *)"en") == 0) break; n++; lang = NULL; } if (!lang) n = 0; if (FcPatternObjectGetString (pat, FC_FAMILY_OBJECT, n, &family) != FcResultMatch) goto bail1; len = strlen ((const char *)family); for (i = len; i > 0; i--) { if (!isspace (family[i - 1])) break; } family[i] = 0; n = 0; while (FcPatternObjectGetString (pat, FC_STYLELANG_OBJECT, n, &lang) == FcResultMatch) { if (FcStrCmp (lang, (const FcChar8 *)"en") == 0) break; n++; lang = NULL; } if (!lang) n = 0; if (FcPatternObjectGetString (pat, FC_STYLE_OBJECT, n, &style) != FcResultMatch) goto bail1; len = strlen ((const char *)style); for (i = 0; style[i] != 0 && isspace (style[i]); i++) ; memmove (style, &style[i], len - i); FcStrBufInit (&sbuf, NULL, 0); FcStrBufString (&sbuf, family); FcStrBufChar (&sbuf, ' '); FcStrBufString (&sbuf, style); if (!FcPatternObjectAddString (pat, FC_FULLNAME_OBJECT, FcStrBufDoneStatic (&sbuf))) { FcStrBufDestroy (&sbuf); goto bail1; } FcStrBufDestroy (&sbuf); if (!FcPatternObjectAddString (pat, FC_FULLNAMELANG_OBJECT, (const FcChar8 *)"en")) goto bail1; ++nfullname; } /* Add the PostScript name into the cache */ if (!variable) { char psname[256]; const char *tmp; if (instance) FT_Set_Named_Instance (face, id >> 16); tmp = FT_Get_Postscript_Name (face); if (!tmp) { unsigned int i; FcChar8 *family, *familylang = NULL; size_t len; int n = 0; /* Workaround when FT_Get_Postscript_Name didn't give any name. * try to find out the English family name and convert. */ while (FcPatternObjectGetString (pat, FC_FAMILYLANG_OBJECT, n, &familylang) == FcResultMatch) { if (FcStrCmp (familylang, (const FcChar8 *)"en") == 0) break; n++; familylang = NULL; } if (!familylang) n = 0; if (FcPatternObjectGetString (pat, FC_FAMILY_OBJECT, n, &family) != FcResultMatch) goto bail1; len = strlen ((const char *)family); /* the literal name in PostScript Language is limited to 127 characters though, * It is the architectural limit. so assuming 255 characters may works enough. */ for (i = 0; i < len && i < 255; i++) { /* those characters are not allowed to be the literal name in PostScript */ static const char exclusive_chars[] = "\x04()/<>[]{}\t\f\r\n "; if (strchr (exclusive_chars, family[i]) != NULL) psname[i] = '-'; else psname[i] = family[i]; } psname[i] = 0; } else { strncpy (psname, tmp, 255); psname[255] = 0; } if (!FcPatternObjectAddString (pat, FC_POSTSCRIPT_NAME_OBJECT, (const FcChar8 *)psname)) goto bail1; } if (file && *file && !FcPatternObjectAddString (pat, FC_FILE_OBJECT, file)) goto bail1; if (!FcPatternObjectAddInteger (pat, FC_INDEX_OBJECT, id)) goto bail1; #if 0 /* * don't even try this -- CJK 'monospace' fonts are really * dual width, and most other fonts don't bother to set * the attribute. Sigh. */ if ((face->face_flags & FT_FACE_FLAG_FIXED_WIDTH) != 0) if (!FcPatternObjectAddInteger (pat, FC_SPACING_OBJECT, FC_MONO)) goto bail1; #endif /* * Find the font revision (if available) */ head = (TT_Header *)FT_Get_Sfnt_Table (face, ft_sfnt_head); if (head) { if (!FcPatternObjectAddInteger (pat, FC_FONTVERSION_OBJECT, head->Font_Revision)) goto bail1; } else { if (!FcPatternObjectAddInteger (pat, FC_FONTVERSION_OBJECT, 0)) goto bail1; } if (!FcPatternObjectAddInteger (pat, FC_ORDER_OBJECT, 0)) goto bail1; if (os2 && os2->version >= 0x0001 && os2->version != 0xffff) { exclusiveLang = FcLangIsExclusiveFromOs2 (os2->ulCodePageRange1, os2->ulCodePageRange2); } if (os2 && os2->version != 0xffff) { weight = os2->usWeightClass; weight = FcWeightFromOpenTypeDouble (weight * weight_mult); if ((FcDebug() & FC_DBG_SCANV) && weight != -1) printf ("\tos2 weight class %d multiplier %g maps to weight %g\n", os2->usWeightClass, weight_mult, weight); switch (os2->usWidthClass) { case 1: width = FC_WIDTH_ULTRACONDENSED; break; case 2: width = FC_WIDTH_EXTRACONDENSED; break; case 3: width = FC_WIDTH_CONDENSED; break; case 4: width = FC_WIDTH_SEMICONDENSED; break; case 5: width = FC_WIDTH_NORMAL; break; case 6: width = FC_WIDTH_SEMIEXPANDED; break; case 7: width = FC_WIDTH_EXPANDED; break; case 8: width = FC_WIDTH_EXTRAEXPANDED; break; case 9: width = FC_WIDTH_ULTRAEXPANDED; break; } width *= width_mult; if ((FcDebug() & FC_DBG_SCANV) && width != -1) printf ("\tos2 width class %d multiplier %g maps to width %g\n", os2->usWidthClass, width_mult, width); } if (os2 && (complex_ = FcFontCapabilities (face))) { if (!FcPatternObjectAddString (pat, FC_CAPABILITY_OBJECT, complex_)) { free (complex_); goto bail1; } free (complex_); } if (!FcPatternObjectAddBool (pat, FC_FONT_HAS_HINT_OBJECT, FcFontHasHint (face))) goto bail1; if (!variable_size && os2 && os2->version >= 0x0005 && os2->version != 0xffff) { double lower_size, upper_size; FcRange *r; /* usLowerPointSize and usUpperPointSize is actually twips */ lower_size = os2->usLowerOpticalPointSize / 20.0L; upper_size = os2->usUpperOpticalPointSize / 20.0L; if (lower_size == upper_size) { if (!FcPatternObjectAddDouble (pat, FC_SIZE_OBJECT, lower_size)) goto bail1; } else { r = FcRangeCreateDouble (lower_size, upper_size); if (!FcPatternObjectAddRange (pat, FC_SIZE_OBJECT, r)) { FcRangeDestroy (r); goto bail1; } FcRangeDestroy (r); } } /* * Type 1: Check for FontInfo dictionary information * Code from g2@magestudios.net (Gerard Escalante) */ #if HAVE_FT_GET_PS_FONT_INFO if (FT_Get_PS_Font_Info (face, &psfontinfo) == 0) { if (weight == -1 && psfontinfo.weight) { weight = FcIsWeight ((FcChar8 *)psfontinfo.weight); if (FcDebug() & FC_DBG_SCANV) printf ("\tType1 weight %s maps to %g\n", psfontinfo.weight, weight); } # if 0 /* * Don't bother with italic_angle; FreeType already extracts that * information for us and sticks it into style_flags */ if (psfontinfo.italic_angle) slant = FC_SLANT_ITALIC; else slant = FC_SLANT_ROMAN; # endif if (!foundry) foundry = FcNoticeFoundry (psfontinfo.notice); } #endif /* HAVE_FT_GET_PS_FONT_INFO */ #if HAVE_FT_GET_BDF_PROPERTY /* * Finally, look for a FOUNDRY BDF property if no other * mechanism has managed to locate a foundry */ if (!foundry) { int rc; rc = FT_Get_BDF_Property (face, "FOUNDRY", &prop); if (rc == 0 && prop.type == BDF_PROPERTY_TYPE_ATOM) foundry = (FcChar8 *)prop.u.atom; } if (width == -1) { if (FT_Get_BDF_Property (face, "RELATIVE_SETWIDTH", &prop) == 0 && (prop.type == BDF_PROPERTY_TYPE_INTEGER || prop.type == BDF_PROPERTY_TYPE_CARDINAL)) { FT_Int32 value; if (prop.type == BDF_PROPERTY_TYPE_INTEGER) value = prop.u.integer; else value = (FT_Int32)prop.u.cardinal; switch ((value + 5) / 10) { case 1: width = FC_WIDTH_ULTRACONDENSED; break; case 2: width = FC_WIDTH_EXTRACONDENSED; break; case 3: width = FC_WIDTH_CONDENSED; break; case 4: width = FC_WIDTH_SEMICONDENSED; break; case 5: width = FC_WIDTH_NORMAL; break; case 6: width = FC_WIDTH_SEMIEXPANDED; break; case 7: width = FC_WIDTH_EXPANDED; break; case 8: width = FC_WIDTH_EXTRAEXPANDED; break; case 9: width = FC_WIDTH_ULTRAEXPANDED; break; } } if (width == -1 && FT_Get_BDF_Property (face, "SETWIDTH_NAME", &prop) == 0 && prop.type == BDF_PROPERTY_TYPE_ATOM && prop.u.atom != NULL) { width = FcIsWidth ((FcChar8 *)prop.u.atom); if (FcDebug() & FC_DBG_SCANV) printf ("\tsetwidth %s maps to %g\n", prop.u.atom, width); } } #endif /* * Look for weight, width and slant names in the style value */ for (st = 0; FcPatternGetString (pat, FC_STYLE, st, &style) == FcResultMatch; st++) { if (weight == -1) { weight = FcContainsWeight (style); if (FcDebug() & FC_DBG_SCANV) printf ("\tStyle %s maps to weight %g\n", style, weight); } if (width == -1) { width = FcContainsWidth (style); if (FcDebug() & FC_DBG_SCANV) printf ("\tStyle %s maps to width %g\n", style, width); } if (slant == -1) { slant = FcContainsSlant (style); if (FcDebug() & FC_DBG_SCANV) printf ("\tStyle %s maps to slant %d\n", style, slant); } if (decorative == FcFalse) { decorative = FcContainsDecorative (style) > 0; if (FcDebug() & FC_DBG_SCANV) printf ("\tStyle %s maps to decorative %d\n", style, decorative); } } /* * Pull default values from the FreeType flags if more * specific values not found above */ if (slant == -1) { slant = FC_SLANT_ROMAN; if (face->style_flags & FT_STYLE_FLAG_ITALIC) slant = FC_SLANT_ITALIC; } if (weight == -1) { weight = FC_WEIGHT_MEDIUM; if (face->style_flags & FT_STYLE_FLAG_BOLD) weight = FC_WEIGHT_BOLD; } if (width == -1) width = FC_WIDTH_NORMAL; if (foundry == 0) foundry = (FcChar8 *)"unknown"; if (!FcPatternObjectAddInteger (pat, FC_SLANT_OBJECT, slant)) goto bail1; if (!variable_weight && !FcPatternObjectAddDouble (pat, FC_WEIGHT_OBJECT, weight)) goto bail1; if (!variable_width && !FcPatternObjectAddDouble (pat, FC_WIDTH_OBJECT, width)) goto bail1; if (!FcPatternObjectAddString (pat, FC_FOUNDRY_OBJECT, foundry)) goto bail1; if (!FcPatternObjectAddBool (pat, FC_DECORATIVE_OBJECT, decorative)) goto bail1; /* * Compute the unicode coverage for the font */ if (cs_share && *cs_share) cs = FcCharSetCopy (*cs_share); else { cs = FcFreeTypeCharSet (face, NULL); if (cs_share) *cs_share = FcCharSetCopy (cs); } if (!cs) goto bail1; /* The FcFreeTypeCharSet() chose the encoding; test it for symbol. */ symbol = face->charmap && face->charmap->encoding == FT_ENCODING_MS_SYMBOL; if (!FcPatternObjectAddBool (pat, FC_SYMBOL_OBJECT, symbol)) goto bail1; spacing = FcFreeTypeSpacing (face); #if HAVE_FT_GET_BDF_PROPERTY /* For PCF fonts, override the computed spacing with the one from the property */ if (FT_Get_BDF_Property (face, "SPACING", &prop) == 0 && prop.type == BDF_PROPERTY_TYPE_ATOM && prop.u.atom != NULL) { if (!strcmp (prop.u.atom, "c") || !strcmp (prop.u.atom, "C")) spacing = FC_CHARCELL; else if (!strcmp (prop.u.atom, "m") || !strcmp (prop.u.atom, "M")) spacing = FC_MONO; else if (!strcmp (prop.u.atom, "p") || !strcmp (prop.u.atom, "P")) spacing = FC_PROPORTIONAL; } #endif /* * Skip over PCF fonts that have no encoded characters; they're * usually just Unicode fonts transcoded to some legacy encoding * FT forces us to approximate whether a font is a PCF font * or not by whether it has any BDF properties. Try PIXEL_SIZE; * I don't know how to get a list of BDF properties on the font. -PL */ if (FcCharSetCount (cs) == 0) { #if HAVE_FT_GET_BDF_PROPERTY if (FT_Get_BDF_Property (face, "PIXEL_SIZE", &prop) == 0) goto bail2; #endif } if (!FcPatternObjectAddCharSet (pat, FC_CHARSET_OBJECT, cs)) goto bail2; if (!symbol) { if (ls_share && *ls_share) ls = FcLangSetCopy (*ls_share); else { ls = FcLangSetFromCharSet (cs, exclusiveLang); if (ls_share) *ls_share = FcLangSetCopy (ls); } if (!ls) goto bail2; } else { /* Symbol fonts don't cover any language, even though they * claim to support Latin1 range. */ ls = FcLangSetCreate(); } if (!FcPatternObjectAddLangSet (pat, FC_LANG_OBJECT, ls)) { FcLangSetDestroy (ls); goto bail2; } FcLangSetDestroy (ls); if (spacing != FC_PROPORTIONAL) if (!FcPatternObjectAddInteger (pat, FC_SPACING_OBJECT, spacing)) goto bail2; if (!(face->face_flags & FT_FACE_FLAG_SCALABLE)) { int i; for (i = 0; i < face->num_fixed_sizes; i++) if (!FcPatternObjectAddDouble (pat, FC_PIXEL_SIZE_OBJECT, FcGetPixelSize (face, i))) goto bail2; if (!FcPatternObjectAddBool (pat, FC_ANTIALIAS_OBJECT, FcFalse)) goto bail2; } FcChar8 *wrapper = NULL; #if HAVE_FT_GET_X11_FONT_FORMAT /* * Use the (not well documented or supported) X-specific function * from FreeType to figure out the font format */ { const char *font_format = FT_Get_X11_Font_Format (face); if (font_format) { if (!FcPatternObjectAddString (pat, FC_FONTFORMAT_OBJECT, (FcChar8 *)font_format)) goto bail2; /* If this is not a SFNT font and format is CFF, then it is a standlone CFF font */ if (!FT_IS_SFNT (face) && !strcmp (font_format, "CFF")) wrapper = (FcChar8 *)"CFF"; } } #endif if (!FcPatternObjectAddBool (pat, FC_NAMED_INSTANCE_OBJECT, !!(id > 0xffff))) goto bail2; if (FT_IS_SFNT (face)) { /* If this is an SFNT wrapper, try to sniff the SFNT tag which is the * first 4 bytes, to see if it is a WOFF or WOFF2 wrapper. */ wrapper = (FcChar8 *)"SFNT"; char buf[4]; int fd = FcOpen ((char *)file, O_RDONLY); if (fd != -1 && read (fd, buf, 4)) { if (buf[0] == 'w' && buf[1] == 'O' && buf[2] == 'F') { if (buf[3] == 'F') wrapper = (FcChar8 *)"WOFF"; else if (buf[3] == '2') wrapper = (FcChar8 *)"WOFF2"; } } close (fd); } if (wrapper) if (!FcPatternObjectAddString (pat, FC_FONT_WRAPPER_OBJECT, wrapper)) goto bail2; /* * Drop our reference to the charset */ FcCharSetDestroy (cs); if (foundry_) free (foundry_); if (mmvar) { #ifdef HAVE_FT_DONE_MM_VAR if (face->glyph) FT_Done_MM_Var (face->glyph->library, mmvar); #else free (mmvar); #endif } return pat; bail2: FcCharSetDestroy (cs); bail1: FcPatternDestroy (pat); if (mmvar) { #ifdef HAVE_FT_DONE_MM_VAR if (face->glyph) FT_Done_MM_Var (face->glyph->library, mmvar); #else free (mmvar); #endif } if (!nm_share && name_mapping) free (name_mapping); if (foundry_) free (foundry_); bail0: return NULL; } FcPattern * FcFreeTypeQueryFace (const FT_Face face, const FcChar8 *file, unsigned int id, FcBlanks *blanks FC_UNUSED) { return FcFreeTypeQueryFaceInternal (face, file, id, NULL, NULL, NULL); } FcPattern * FcFreeTypeQuery (const FcChar8 *file, unsigned int id, FcBlanks *blanks FC_UNUSED, int *count) { FT_Face face; FT_Library ftLibrary; FcPattern *pat = NULL; if (FT_Init_FreeType (&ftLibrary)) return NULL; if (FT_New_Face (ftLibrary, (char *)file, id & 0x7FFFFFFF, &face)) goto bail; if (count) *count = face->num_faces; pat = FcFreeTypeQueryFaceInternal (face, file, id, NULL, NULL, NULL); FT_Done_Face (face); bail: FT_Done_FreeType (ftLibrary); return pat; } unsigned int FcFreeTypeQueryAll (const FcChar8 *file, unsigned int id, FcBlanks *blanks, int *count, FcFontSet *set) { FT_Face face = NULL; FT_Library ftLibrary = NULL; FcCharSet *cs = NULL; FcLangSet *ls = NULL; FcNameMapping *nm = NULL; FT_MM_Var *mm_var = NULL; FcBool index_set = id != (unsigned int)-1; unsigned int set_face_num = index_set ? id & 0xFFFF : 0; unsigned int set_instance_num = index_set ? id >> 16 : 0; unsigned int face_num = set_face_num; unsigned int instance_num = set_instance_num; unsigned int num_faces = 0; unsigned int num_instances = 0; unsigned int ret = 0; int err = 0; if (count) *count = 0; if (FT_Init_FreeType (&ftLibrary)) return 0; if (FT_New_Face (ftLibrary, (const char *)file, face_num, &face)) goto bail; num_faces = face->num_faces; num_instances = face->style_flags >> 16; if (num_instances && (!index_set || instance_num)) { FT_Get_MM_Var (face, &mm_var); if (!mm_var) num_instances = 0; } if (count) *count = num_faces; do { FcPattern *pat = NULL; if (instance_num == 0x8000 || instance_num > num_instances) FT_Set_Var_Design_Coordinates (face, 0, NULL); /* Reset variations. */ else if (instance_num) { FT_Var_Named_Style *instance = &mm_var->namedstyle[instance_num - 1]; FT_Fixed *coords = instance->coords; FcBool nonzero; unsigned int i; /* Skip named-instance that coincides with base instance. */ nonzero = FcFalse; for (i = 0; i < mm_var->num_axis; i++) if (coords[i] != mm_var->axis[i].def) { nonzero = FcTrue; break; } if (!nonzero) goto skip; FT_Set_Var_Design_Coordinates (face, mm_var->num_axis, coords); } id = ((instance_num << 16) + face_num); pat = FcFreeTypeQueryFaceInternal (face, (const FcChar8 *)file, id, &cs, &ls, &nm); if (pat) { ret++; if (!set || !FcFontSetAdd (set, pat)) FcPatternDestroy (pat); } else if (instance_num != 0x8000) err = 1; skip: if (!index_set && instance_num < num_instances) instance_num++; else if (!index_set && instance_num == num_instances) instance_num = 0x8000; /* variable font */ else { free (nm); nm = NULL; FcLangSetDestroy (ls); ls = NULL; FcCharSetDestroy (cs); cs = NULL; FT_Done_Face (face); face = NULL; #ifdef HAVE_FT_DONE_MM_VAR FT_Done_MM_Var (ftLibrary, mm_var); #else free (mm_var); #endif mm_var = NULL; face_num++; instance_num = set_instance_num; if (FT_New_Face (ftLibrary, (const char *)file, face_num, &face)) break; num_instances = face->style_flags >> 16; if (num_instances && (!index_set || instance_num)) { FT_Get_MM_Var (face, &mm_var); if (!mm_var) num_instances = 0; } } } while (!err && (!index_set || face_num == set_face_num) && face_num < num_faces); bail: #ifdef HAVE_FT_DONE_MM_VAR FT_Done_MM_Var (ftLibrary, mm_var); #else free (mm_var); #endif FcLangSetDestroy (ls); FcCharSetDestroy (cs); if (face) FT_Done_Face (face); FT_Done_FreeType (ftLibrary); if (nm) free (nm); return ret; } static const FT_Encoding fcFontEncodings[] = { FT_ENCODING_UNICODE, FT_ENCODING_MS_SYMBOL }; #define NUM_DECODE (int)(sizeof (fcFontEncodings) / sizeof (fcFontEncodings[0])) /* * Map a UCS4 glyph to a glyph index. Use all available encoding * tables to try and find one that works. This information is expected * to be cached by higher levels, so performance isn't critical */ FT_UInt FcFreeTypeCharIndex (FT_Face face, FcChar32 ucs4) { int initial, offset, decode; FT_UInt glyphindex; initial = 0; if (!face) return 0; /* * Find the current encoding */ if (face->charmap) { for (; initial < NUM_DECODE; initial++) if (fcFontEncodings[initial] == face->charmap->encoding) break; if (initial == NUM_DECODE) initial = 0; } /* * Check each encoding for the glyph, starting with the current one */ for (offset = 0; offset < NUM_DECODE; offset++) { decode = (initial + offset) % NUM_DECODE; if (!face->charmap || face->charmap->encoding != fcFontEncodings[decode]) if (FT_Select_Charmap (face, fcFontEncodings[decode]) != 0) continue; glyphindex = FT_Get_Char_Index (face, (FT_ULong)ucs4); if (glyphindex) return glyphindex; if (ucs4 < 0x100 && face->charmap && face->charmap->encoding == FT_ENCODING_MS_SYMBOL) { /* For symbol-encoded OpenType fonts, we duplicate the * U+F000..F0FF range at U+0000..U+00FF. That's what * Windows seems to do, and that's hinted about at: * http://www.microsoft.com/typography/otspec/recom.htm * under "Non-Standard (Symbol) Fonts". * * See thread with subject "Webdings and other MS symbol * fonts don't display" on mailing list from May 2015. */ glyphindex = FT_Get_Char_Index (face, (FT_ULong)ucs4 + 0xF000); if (glyphindex) return glyphindex; } } return 0; } static inline int fc_min (int a, int b) { return a <= b ? a : b; } static inline int fc_max (int a, int b) { return a >= b ? a : b; } static inline FcBool fc_approximately_equal (int x, int y) { return abs (x - y) * 33 <= fc_max (abs (x), abs (y)); } static int FcFreeTypeSpacing (FT_Face face) { FT_Int load_flags = FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH | FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING; FT_Pos advances[3] = { 0 }; unsigned int num_advances = 0; int o; /* When using scalable fonts, only report those glyphs * which can be scaled; otherwise those fonts will * only be available at some sizes, and never when * transformed. Avoid this by simply reporting bitmap-only * glyphs as missing */ if (face->face_flags & FT_FACE_FLAG_SCALABLE) load_flags |= FT_LOAD_NO_BITMAP; if (!(face->face_flags & FT_FACE_FLAG_SCALABLE) && face->num_fixed_sizes > 0 && FT_Get_Sfnt_Table (face, ft_sfnt_head)) { FT_Int strike_index = 0, i; /* Select the face closest to 16 pixels tall */ for (i = 1; i < face->num_fixed_sizes; i++) { if (abs (face->available_sizes[i].height - 16) < abs (face->available_sizes[strike_index].height - 16)) strike_index = i; } FT_Select_Size (face, strike_index); } for (o = 0; o < NUM_DECODE; o++) { FcChar32 ucs4; FT_UInt glyph; if (FT_Select_Charmap (face, fcFontEncodings[o]) != 0) continue; ucs4 = FT_Get_First_Char (face, &glyph); while (glyph != 0 && num_advances < 3) { FT_Pos advance = 0; if (!FT_Get_Advance (face, glyph, load_flags, &advance) && advance) { unsigned int j; for (j = 0; j < num_advances; j++) if (fc_approximately_equal (advance, advances[j])) break; if (j == num_advances) advances[num_advances++] = advance; } ucs4 = FT_Get_Next_Char (face, ucs4, &glyph); } break; } if (num_advances <= 1) return FC_MONO; else if (num_advances == 2 && fc_approximately_equal (fc_min (advances[0], advances[1]) * 2, fc_max (advances[0], advances[1]))) return FC_DUAL; else return FC_PROPORTIONAL; } FcCharSet * FcFreeTypeCharSet (FT_Face face, FcBlanks *blanks FC_UNUSED) { const FT_Int load_flags = FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH | FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING; FcCharSet *fcs; int o; fcs = FcCharSetCreate(); if (!fcs) goto bail; #ifdef CHECK printf ("Family %s style %s\n", face->family_name, face->style_name); #endif for (o = 0; o < NUM_DECODE; o++) { FcChar32 ucs4; FT_UInt glyph; if (FT_Select_Charmap (face, fcFontEncodings[o]) != 0) continue; ucs4 = FT_Get_First_Char (face, &glyph); while (glyph != 0) { FcBool good = FcTrue; /* CID fonts built by Adobe used to make ASCII control chars to cid1 * (space glyph). As such, always check contour for those characters. */ if (ucs4 <= 0x001F) { if (FT_Load_Glyph (face, glyph, load_flags) || (face->glyph->format == FT_GLYPH_FORMAT_OUTLINE && face->glyph->outline.n_contours == 0)) good = FcFalse; } if (good) FcCharSetAddChar (fcs, ucs4); ucs4 = FT_Get_Next_Char (face, ucs4, &glyph); } if (fcFontEncodings[o] == FT_ENCODING_MS_SYMBOL) { /* For symbol-encoded OpenType fonts, we duplicate the * U+F000..F0FF range at U+0000..U+00FF. That's what * Windows seems to do, and that's hinted about at: * http://www.microsoft.com/typography/otspec/recom.htm * under "Non-Standard (Symbol) Fonts". * * See thread with subject "Webdings and other MS symbol * fonts don't display" on mailing list from May 2015. */ for (ucs4 = 0xF000; ucs4 < 0xF100; ucs4++) { if (FcCharSetHasChar (fcs, ucs4)) FcCharSetAddChar (fcs, ucs4 - 0xF000); } } #ifdef CHECK for (ucs4 = 0x0020; ucs4 < 0x10000; ucs4++) { FcBool FT_Has, FC_Has; FT_Has = FT_Get_Char_Index (face, ucs4) != 0; FC_Has = FcCharSetHasChar (fcs, ucs4); if (FT_Has != FC_Has) { printf ("0x%08x FT says %d FC says %d\n", ucs4, FT_Has, FC_Has); } } #endif break; } return fcs; bail: FcCharSetDestroy (fcs); return 0; } FcCharSet * FcFreeTypeCharSetAndSpacing (FT_Face face, FcBlanks *blanks FC_UNUSED, int *spacing) { if (spacing) *spacing = FcFreeTypeSpacing (face); return FcFreeTypeCharSet (face, blanks); } /* Graphite Rules Table */ #define TTAG_SILF FT_MAKE_TAG ('S', 'i', 'l', 'f') #define OTLAYOUT_HEAD "otlayout:" #define OTLAYOUT_HEAD_LEN 9 #define OTLAYOUT_ID_LEN 4 /* space + head + id */ #define OTLAYOUT_LEN (1 + OTLAYOUT_HEAD_LEN + OTLAYOUT_ID_LEN) /* * This is a bit generous; the registry has only lower case and space * except for 'DFLT'. */ #define FcIsSpace(x) (040 == (x)) #define FcIsDigit(c) (('0' <= (c) && (c) <= '9')) #define FcIsValidScript(x) (FcIsLower (x) || FcIsUpper (x) || FcIsDigit (x) || FcIsSpace (x)) static void addtag (FcChar8 *complex_, FT_ULong tag) { FcChar8 tagstring[OTLAYOUT_ID_LEN + 1]; tagstring[0] = (FcChar8)(tag >> 24), tagstring[1] = (FcChar8)(tag >> 16), tagstring[2] = (FcChar8)(tag >> 8), tagstring[3] = (FcChar8)(tag); tagstring[4] = '\0'; /* skip tags which aren't alphanumeric, under the assumption that * they're probably broken */ if (!FcIsValidScript (tagstring[0]) || !FcIsValidScript (tagstring[1]) || !FcIsValidScript (tagstring[2]) || !FcIsValidScript (tagstring[3])) return; if (*complex_ != '\0') strcat ((char *)complex_, " "); strcat ((char *)complex_, OTLAYOUT_HEAD); strcat ((char *)complex_, (char *)tagstring); } static int compareulong (const void *a, const void *b) { const FT_ULong *ua = (const FT_ULong *)a; const FT_ULong *ub = (const FT_ULong *)b; return *ua - *ub; } static FcBool FindTable (FT_Face face, FT_ULong tabletag, FT_ULong *tablesize) { FT_Stream stream = face->stream; FT_Error error; if (!stream) return FcFalse; if ((error = ftglue_face_goto_table (face, tabletag, stream, tablesize))) return FcFalse; return FcTrue; } static int GetScriptTags (FT_Face face, FT_ULong tabletag, FT_ULong **stags) { FT_ULong cur_offset, new_offset, base_offset; FT_Stream stream = face->stream; FT_Error error; FT_UShort n, p; int script_count; if (!stream) return 0; if ((error = ftglue_face_goto_table (face, tabletag, stream, NULL))) return 0; base_offset = ftglue_stream_pos (stream); /* skip version */ if (ftglue_stream_seek (stream, base_offset + 4L) || ftglue_stream_frame_enter (stream, 2L)) return 0; new_offset = GET_UShort() + base_offset; ftglue_stream_frame_exit (stream); cur_offset = ftglue_stream_pos (stream); if (ftglue_stream_seek (stream, new_offset) != FT_Err_Ok) return 0; base_offset = ftglue_stream_pos (stream); if (ftglue_stream_frame_enter (stream, 2L)) return 0; script_count = GET_UShort(); ftglue_stream_frame_exit (stream); *stags = malloc (script_count * sizeof (FT_ULong)); if (!*stags) return 0; p = 0; for (n = 0; n < script_count; n++) { if (ftglue_stream_frame_enter (stream, 6L)) goto Fail; (*stags)[p] = GET_ULong(); new_offset = GET_UShort() + base_offset; ftglue_stream_frame_exit (stream); cur_offset = ftglue_stream_pos (stream); error = ftglue_stream_seek (stream, new_offset); if (error == FT_Err_Ok) p++; (void)ftglue_stream_seek (stream, cur_offset); } if (!p) goto Fail; /* sort the tag list before returning it */ qsort (*stags, p, sizeof (FT_ULong), compareulong); return p; Fail: free (*stags); *stags = NULL; return 0; } static FcChar8 * FcFontCapabilities (FT_Face face) { FcBool issilgraphitefont = 0; FT_Error err; FT_ULong len = 0; FT_ULong *gsubtags = NULL, *gpostags = NULL; FT_UShort gsub_count = 0, gpos_count = 0; FT_ULong maxsize; FcChar8 *complex_ = NULL; int indx1 = 0, indx2 = 0; err = FT_Load_Sfnt_Table (face, TTAG_SILF, 0, 0, &len); issilgraphitefont = (err == FT_Err_Ok); gpos_count = GetScriptTags (face, TTAG_GPOS, &gpostags); gsub_count = GetScriptTags (face, TTAG_GSUB, &gsubtags); if (!issilgraphitefont && !gsub_count && !gpos_count) goto bail; maxsize = (((FT_ULong)gpos_count + (FT_ULong)gsub_count) * OTLAYOUT_LEN + (issilgraphitefont ? strlen(fcSilfCapability) + 1: 0)); complex_ = malloc (sizeof (FcChar8) * maxsize); if (!complex_) goto bail; complex_[0] = '\0'; if (issilgraphitefont) strcpy ((char *)complex_, fcSilfCapability); while ((indx1 < gsub_count) || (indx2 < gpos_count)) { if (indx1 == gsub_count) { addtag (complex_, gpostags[indx2]); indx2++; } else if ((indx2 == gpos_count) || (gsubtags[indx1] < gpostags[indx2])) { addtag (complex_, gsubtags[indx1]); indx1++; } else if (gsubtags[indx1] == gpostags[indx2]) { addtag (complex_, gsubtags[indx1]); indx1++; indx2++; } else { addtag (complex_, gpostags[indx2]); indx2++; } } if (FcDebug() & FC_DBG_SCANV) printf ("complex_ features in this font: %s\n", complex_); bail: free (gsubtags); free (gpostags); return complex_; } static FcBool FcFontHasHint (FT_Face face) { FT_ULong size; /* For a workaround of gttools fix-nonhinting. * See https://gitlab.freedesktop.org/fontconfig/fontconfig/-/issues/426 */ if (FcDebug() & FC_DBG_SCANV) { FT_ULong ret; fprintf (stderr, "*** Has hint:\n"); fprintf (stderr, " fpgm table: %s\n", FindTable (face, TTAG_fpgm, NULL) ? "True" : "False"); fprintf (stderr, " cvt table: %s\n", FindTable (face, TTAG_cvt, NULL) ? "True" : "False"); fprintf (stderr, " prep table: %s\n", FindTable (face, TTAG_prep, &ret) ? "True" : "False"); fprintf (stderr, " prep size: %lu\n", ret); } return FindTable (face, TTAG_fpgm, NULL) || FindTable (face, TTAG_cvt, NULL) || (FindTable (face, TTAG_prep, &size) && size > 7); } #define __fcfreetype__ #include "fcaliastail.h" #include "fcftaliastail.h" #undef __fcfreetype__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcfs.c000066400000000000000000000073161503113465200232550ustar00rootroot00000000000000/* * fontconfig/src/fcfs.c * * Copyright © 2000 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" #include FcFontSet * FcFontSetCreate (void) { FcFontSet *s; s = (FcFontSet *)malloc (sizeof (FcFontSet)); if (!s) return 0; s->nfont = 0; s->sfont = 0; s->fonts = 0; return s; } void FcFontSetDestroy (FcFontSet *s) { if (s) { int i; for (i = 0; i < s->nfont; i++) FcPatternDestroy (s->fonts[i]); if (s->fonts) free (s->fonts); free (s); } } FcBool FcFontSetAdd (FcFontSet *s, FcPattern *font) { FcPattern **f; int sfont; if (s->nfont == s->sfont) { sfont = s->sfont + 32; if (s->fonts) f = (FcPattern **)realloc (s->fonts, sfont * sizeof (FcPattern *)); else f = (FcPattern **)malloc (sfont * sizeof (FcPattern *)); if (!f) return FcFalse; s->sfont = sfont; s->fonts = f; } s->fonts[s->nfont++] = font; return FcTrue; } FcBool FcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s) { int i; if (!FcSerializeAlloc (serialize, s, sizeof (FcFontSet))) return FcFalse; if (!FcSerializeAlloc (serialize, s->fonts, s->nfont * sizeof (FcPattern *))) return FcFalse; for (i = 0; i < s->nfont; i++) { if (!FcPatternSerializeAlloc (serialize, s->fonts[i])) return FcFalse; } return FcTrue; } FcFontSet * FcFontSetSerialize (FcSerialize *serialize, const FcFontSet *s) { int i; FcFontSet *s_serialize; FcPattern **fonts_serialize; FcPattern *p_serialize; s_serialize = FcSerializePtr (serialize, s); if (!s_serialize) return NULL; *s_serialize = *s; s_serialize->sfont = s_serialize->nfont; fonts_serialize = FcSerializePtr (serialize, s->fonts); if (!fonts_serialize) return NULL; s_serialize->fonts = FcPtrToEncodedOffset (s_serialize, fonts_serialize, FcPattern *); for (i = 0; i < s->nfont; i++) { p_serialize = FcPatternSerialize (serialize, s->fonts[i]); if (!p_serialize) return NULL; fonts_serialize[i] = FcPtrToEncodedOffset (s_serialize, p_serialize, FcPattern); } return s_serialize; } FcFontSet * FcFontSetDeserialize (const FcFontSet *set) { int i; FcFontSet *newp = FcFontSetCreate(); if (!newp) return NULL; for (i = 0; i < set->nfont; i++) { if (!FcFontSetAdd (newp, FcPatternDuplicate (FcFontSetFont (set, i)))) goto bail; } return newp; bail: FcFontSetDestroy (newp); return NULL; } #define __fcfs__ #include "fcaliastail.h" #undef __fcfs__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcftint.h000066400000000000000000000037531503113465200237770ustar00rootroot00000000000000/* * Copyright © 2007 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that copyright * notice and this permission notice appear in supporting documentation, and * that the name of the copyright holders not be used in advertising or * publicity pertaining to distribution of the software without specific, * written prior permission. The copyright holders make no representations * about the suitability of this software for any purpose. It is provided "as * is" without express or implied warranty. * * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE * OF THIS SOFTWARE. */ #ifndef _FCFTINT_H_ #define _FCFTINT_H_ #include #if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) && !defined(__sun) # define FcPrivate __attribute__ ((__visibility__ ("hidden"))) # define HAVE_GNUC_ATTRIBUTE 1 # include "fcftalias.h" #elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) # define FcPrivate __hidden #else /* not gcc >= 3.3 and not Sun Studio >= 8 */ # define FcPrivate #endif /* fcfreetype.c */ FcPrivate FcBool FcFreeTypeHasLang (FcPattern *pattern, const FcChar8 *lang); FcPrivate FcChar32 FcFreeTypeUcs4ToPrivate (FcChar32 ucs4, const FcCharMap *map); FcPrivate FcChar32 FcFreeTypePrivateToUcs4 (FcChar32 private, const FcCharMap *map); FcPrivate const FcCharMap * FcFreeTypeGetPrivateMap (FT_Encoding encoding); #endif /* _FCFTINT_H_ */ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fchash.c000066400000000000000000000134151503113465200235650ustar00rootroot00000000000000/* * Copyright © 2000 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" #define FC_HASH_SIZE 227 typedef struct _FcHashBucket { struct _FcHashBucket *next; void *key; void *value; } FcHashBucket; struct _FcHashTable { FcHashBucket *buckets[FC_HASH_SIZE]; FcHashFunc hash_func; FcCompareFunc compare_func; FcCopyFunc key_copy_func; FcCopyFunc value_copy_func; FcDestroyFunc key_destroy_func; FcDestroyFunc value_destroy_func; }; FcBool FcHashStrCopy (const void *src, void **dest) { *dest = FcStrdup (src); return *dest != NULL; } FcHashTable * FcHashTableCreate (FcHashFunc hash_func, FcCompareFunc compare_func, FcCopyFunc key_copy_func, FcCopyFunc value_copy_func, FcDestroyFunc key_destroy_func, FcDestroyFunc value_destroy_func) { FcHashTable *ret = malloc (sizeof (FcHashTable)); if (ret) { memset (ret->buckets, 0, sizeof (FcHashBucket *) * FC_HASH_SIZE); ret->hash_func = hash_func; ret->compare_func = compare_func; ret->key_copy_func = key_copy_func; ret->value_copy_func = value_copy_func; ret->key_destroy_func = key_destroy_func; ret->value_destroy_func = value_destroy_func; } return ret; } void FcHashTableDestroy (FcHashTable *table) { int i; for (i = 0; i < FC_HASH_SIZE; i++) { FcHashBucket *bucket = table->buckets[i], *prev; while (bucket) { if (table->key_destroy_func) table->key_destroy_func (bucket->key); if (table->value_destroy_func) table->value_destroy_func (bucket->value); prev = bucket; bucket = bucket->next; free (prev); } table->buckets[i] = NULL; } free (table); } FcBool FcHashTableFind (FcHashTable *table, const void *key, void **value) { FcHashBucket *bucket; FcChar32 hash = table->hash_func (key); for (bucket = table->buckets[hash % FC_HASH_SIZE]; bucket; bucket = bucket->next) { if (!table->compare_func (bucket->key, key)) { if (table->value_copy_func) { if (!table->value_copy_func (bucket->value, value)) return FcFalse; } else *value = bucket->value; return FcTrue; } } return FcFalse; } static FcBool FcHashTableAddInternal (FcHashTable *table, void *key, void *value, FcBool replace) { FcHashBucket **prev, *bucket, *b; FcChar32 hash = table->hash_func (key); FcBool ret = FcFalse; bucket = (FcHashBucket *)malloc (sizeof (FcHashBucket)); if (!bucket) return FcFalse; memset (bucket, 0, sizeof (FcHashBucket)); if (table->key_copy_func) ret |= !table->key_copy_func (key, &bucket->key); else bucket->key = key; if (table->value_copy_func) ret |= !table->value_copy_func (value, &bucket->value); else bucket->value = value; if (ret) { destroy: if (bucket->key && table->key_destroy_func) table->key_destroy_func (bucket->key); if (bucket->value && table->value_destroy_func) table->value_destroy_func (bucket->value); free (bucket); return !ret; } retry: for (prev = &table->buckets[hash % FC_HASH_SIZE]; (b = fc_atomic_ptr_get (prev)); prev = &(b->next)) { if (!table->compare_func (b->key, key)) { if (replace) { bucket->next = b->next; if (!fc_atomic_ptr_cmpexch (prev, b, bucket)) goto retry; bucket = b; } else ret = FcTrue; goto destroy; } } bucket->next = NULL; if (!fc_atomic_ptr_cmpexch (prev, b, bucket)) goto retry; return FcTrue; } FcBool FcHashTableAdd (FcHashTable *table, void *key, void *value) { return FcHashTableAddInternal (table, key, value, FcFalse); } FcBool FcHashTableReplace (FcHashTable *table, void *key, void *value) { return FcHashTableAddInternal (table, key, value, FcTrue); } FcBool FcHashTableRemove (FcHashTable *table, void *key) { FcHashBucket **prev, *bucket; FcChar32 hash = table->hash_func (key); FcBool ret = FcFalse; retry: for (prev = &table->buckets[hash % FC_HASH_SIZE]; (bucket = fc_atomic_ptr_get (prev)); prev = &(bucket->next)) { if (!table->compare_func (bucket->key, key)) { if (!fc_atomic_ptr_cmpexch (prev, bucket, bucket->next)) goto retry; if (table->key_destroy_func) table->key_destroy_func (bucket->key); if (table->value_destroy_func) table->value_destroy_func (bucket->value); free (bucket); ret = FcTrue; break; } } return ret; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcinit.c000066400000000000000000000153421503113465200236060ustar00rootroot00000000000000/* * fontconfig/src/fcinit.c * * Copyright © 2001 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" #include #if defined(FC_ATOMIC_INT_NIL) # pragma message("Could not find any system to define atomic_int macros, library may NOT be thread-safe.") #endif #if defined(FC_MUTEX_IMPL_NIL) # pragma message("Could not find any system to define mutex macros, library may NOT be thread-safe.") #endif #if defined(FC_ATOMIC_INT_NIL) || defined(FC_MUTEX_IMPL_NIL) # pragma message("To suppress these warnings, define FC_NO_MT.") #endif static FcConfig * FcInitFallbackConfig (const FcChar8 *sysroot) { FcConfig *config; const FcChar8 *fallback = (const FcChar8 *) "" "" FC_DEFAULT_FONTS " fonts" " " FC_CACHEDIR "" " fontconfig" " " CONFIGDIR "" " fontconfig/conf.d" " fontconfig/fonts.conf" ""; config = FcConfigCreate(); if (!config) goto bail0; FcConfigSetSysRoot (config, sysroot); if (!FcConfigParseAndLoadFromMemory (config, fallback, FcFalse)) goto bail1; return config; bail1: FcConfigDestroy (config); bail0: return 0; } static FcConfig * FcInitFallbackConfigWithFilter (FcConfig *config, const FcChar8 *sysroot) { FcConfig *fallback = FcInitFallbackConfig (sysroot); /* Copy filter data */ fallback->filter_func = config->filter_func; fallback->filter_data = config->filter_data; fallback->destroy_data_func = config->destroy_data_func; config->filter_func = NULL; config->filter_data = NULL; config->destroy_data_func = NULL; /* Rebuild fontset */ FcConfigBuildFonts (fallback); FcConfigDestroy (config); return fallback; } int FcGetVersion (void) { return FC_VERSION; } /* * Load the configuration files */ FcConfig * FcInitLoadOwnConfig (FcConfig *config) { if (!config) { config = FcConfigCreate(); if (!config) return NULL; } FcInitDebug(); if (!FcConfigParseAndLoad (config, 0, FcTrue)) { const FcChar8 *sysroot = FcConfigGetSysRoot (config); FcConfig *fallback = FcInitFallbackConfigWithFilter (config, sysroot); return fallback; } (void)FcConfigParseOnly (config, (const FcChar8 *)FC_TEMPLATEDIR, FcFalse); if (config->cacheDirs && config->cacheDirs->num == 0) { FcChar8 *prefix, *p; size_t plen; FcBool have_own = FcFalse; char *env_file, *env_path; env_file = getenv ("FONTCONFIG_FILE"); env_path = getenv ("FONTCONFIG_PATH"); if ((env_file != NULL && env_file[0] != 0) || (env_path != NULL && env_path[0] != 0)) have_own = FcTrue; if (!have_own) { fprintf (stderr, "Fontconfig warning: no elements found. Check configuration.\n"); fprintf (stderr, "Fontconfig warning: adding %s\n", FC_CACHEDIR); } prefix = FcConfigXdgCacheHome(); if (!prefix) goto bail; plen = strlen ((const char *)prefix); p = realloc (prefix, plen + 12); if (!p) goto bail; prefix = p; memcpy (&prefix[plen], FC_DIR_SEPARATOR_S "fontconfig", 11); prefix[plen + 11] = 0; if (!have_own) fprintf (stderr, "Fontconfig warning: adding fontconfig\n"); if (!FcConfigAddCacheDir (config, (FcChar8 *)FC_CACHEDIR) || !FcConfigAddCacheDir (config, (FcChar8 *)prefix)) { FcConfig *fallback; const FcChar8 *sysroot; bail: sysroot = FcConfigGetSysRoot (config); fprintf (stderr, "Fontconfig error: out of memory"); if (prefix) FcStrFree (prefix); fallback = FcInitFallbackConfigWithFilter (config, sysroot); return fallback; } FcStrFree (prefix); } return config; } FcConfig * FcInitLoadConfig (void) { return FcInitLoadOwnConfig (NULL); } /* * Load the configuration files and scan for available fonts */ FcConfig * FcInitLoadOwnConfigAndFonts (FcConfig *config) { config = FcInitLoadOwnConfig (config); if (!config) return 0; if (!FcConfigBuildFonts (config)) { FcConfigDestroy (config); return 0; } return config; } FcConfig * FcInitLoadConfigAndFonts (void) { return FcInitLoadOwnConfigAndFonts (NULL); } /* * Initialize the default library configuration */ FcBool FcInit (void) { return FcConfigInit(); } /* * Free all library-allocated data structures. */ void FcFini (void) { FcConfigFini(); FcCacheFini(); } /* * Reread the configuration and available font lists */ FcBool FcInitReinitialize (void) { FcConfig *config; FcBool ret; config = FcInitLoadConfigAndFonts(); if (!config) return FcFalse; ret = FcConfigSetCurrent (config); /* FcConfigSetCurrent() increases the refcount. * decrease it here to avoid the memory leak. */ FcConfigDestroy (config); return ret; } FcBool FcInitBringUptoDate (void) { FcConfig *config = FcConfigReference (NULL); FcBool ret = FcTrue; time_t now; if (!config) return FcFalse; /* * rescanInterval == 0 disables automatic up to date */ if (config->rescanInterval == 0) goto bail; /* * Check no more often than rescanInterval seconds */ now = time (0); if (config->rescanTime + config->rescanInterval - now > 0) goto bail; /* * If up to date, don't reload configuration */ if (FcConfigUptoDate (0)) goto bail; ret = FcInitReinitialize(); bail: FcConfigDestroy (config); return ret; } #define __fcinit__ #include "fcaliastail.h" #undef __fcinit__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcint.h000066400000000000000000001156041503113465200234440ustar00rootroot00000000000000/* * fontconfig/src/fcint.h * * Copyright © 2000 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifndef _FCINT_H_ #define _FCINT_H_ #ifdef HAVE_CONFIG_H # include #endif #include "fcstdint.h" #include #include #include #include #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #if ENABLE_FONTATIONS # include #endif #include #include #include #include #include "fcatomic.h" #include "fcdeprecate.h" #include "fcmutex.h" #ifndef FC_CONFIG_PATH # define FC_CONFIG_PATH "fonts.conf" #endif #ifdef _WIN32 # define FC_LIKELY(expr) (expr) # define FC_UNLIKELY(expr) (expr) #else # define FC_LIKELY(expr) (__builtin_expect (((expr) ? 1 : 0), 1)) # define FC_UNLIKELY(expr) (__builtin_expect (((expr) ? 1 : 0), 0)) #endif #ifdef _WIN32 # include "fcwindows.h" typedef UINT (WINAPI *pfnGetSystemWindowsDirectory) (LPSTR, UINT); typedef HRESULT (WINAPI *pfnSHGetFolderPathA) (HWND, int, HANDLE, DWORD, LPSTR); extern pfnGetSystemWindowsDirectory pGetSystemWindowsDirectory; extern pfnSHGetFolderPathA pSHGetFolderPathA; # define FC_SEARCH_PATH_SEPARATOR ';' # define FC_DIR_SEPARATOR '\\' # define FC_DIR_SEPARATOR_S "\\" #else # define FC_SEARCH_PATH_SEPARATOR ':' # define FC_DIR_SEPARATOR '/' # define FC_DIR_SEPARATOR_S "/" #endif #ifdef PATH_MAX # define FC_PATH_MAX PATH_MAX #else # define FC_PATH_MAX 128 #endif #if __GNUC__ >= 4 # define FC_UNUSED __attribute__ ((unused)) #else # define FC_UNUSED #endif #ifndef FC_UINT64_FORMAT # define FC_UINT64_FORMAT "llu" #endif #define FC_DBG_MATCH 1 #define FC_DBG_MATCHV 2 #define FC_DBG_EDIT 4 #define FC_DBG_FONTSET 8 #define FC_DBG_CACHE 16 #define FC_DBG_CACHEV 32 #define FC_DBG_PARSE 64 #define FC_DBG_SCAN 128 #define FC_DBG_SCANV 256 #define FC_DBG_CONFIG 1024 #define FC_DBG_LANGSET 2048 #define FC_DBG_MATCH2 4096 #define _FC_ASSERT_STATIC1(_line, _cond) typedef int _static_assert_on_line_##_line##_failed[(_cond) ? 1 : -1] FC_UNUSED #define _FC_ASSERT_STATIC0(_line, _cond) _FC_ASSERT_STATIC1 (_line, (_cond)) #define FC_ASSERT_STATIC(_cond) _FC_ASSERT_STATIC0 (__LINE__, (_cond)) #define FC_MIN(a, b) ((a) < (b) ? (a) : (b)) #define FC_MAX(a, b) ((a) > (b) ? (a) : (b)) /* slim_internal.h */ #if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) && !defined(__sun) && !defined(BINDGEN_IGNORE_VISIBILITY) # define FcPrivate __attribute__ ((__visibility__ ("hidden"))) # define HAVE_GNUC_ATTRIBUTE 1 # include "fcalias.h" #elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) # define FcPrivate __hidden #else /* not gcc >= 3.3 and not Sun Studio >= 8 */ # define FcPrivate #endif /* NLS */ #ifdef ENABLE_NLS # include # define _(x) (dgettext (GETTEXT_PACKAGE, x)) #else /* dgettext macro must be defined after existing declarations */ # include # define dgettext(d, s) (s) # define _(x) (x) #endif #define N_(x) x FC_ASSERT_STATIC (sizeof (FcRef) == sizeof (int)); #define FcStrdup(s) ((FcChar8 *)strdup ((const char *)(s))) #define FcFree(s) (free ((FcChar8 *)(s))) /* * Serialized data structures use only offsets instead of pointers * A low bit of 1 indicates an offset. */ /* Is the provided pointer actually an offset? */ #define FcIsEncodedOffset(p) ((((intptr_t)(p)) & 1) != 0) /* Encode offset in a pointer of type t */ #define FcOffsetEncode(o, t) ((t *)(intptr_t)((o) | 1)) /* Decode a pointer into an offset */ #define FcOffsetDecode(p) (((intptr_t)(p)) & ~1) /* Compute pointer offset */ #define FcPtrToOffset(b, p) ((ptrdiff_t)((intptr_t)(p) - (intptr_t)(b))) /* Given base address, offset and type, return a pointer */ #define FcOffsetToPtr(b, o, t) ((t *)((intptr_t)(b) + (ptrdiff_t)(o))) /* Given base address, encoded offset and type, return a pointer */ #define FcEncodedOffsetToPtr(b, p, t) FcOffsetToPtr (b, FcOffsetDecode (p), t) /* Given base address, pointer and type, return an encoded offset */ #define FcPtrToEncodedOffset(b, p, t) FcOffsetEncode (FcPtrToOffset (b, p), t) /* Given a structure, offset member and type, return pointer */ #define FcOffsetMember(s, m, t) FcOffsetToPtr (s, (s)->m, t) /* Given a structure, encoded offset member and type, return pointer to member */ #define FcEncodedOffsetMember(s, m, t) FcOffsetToPtr (s, FcOffsetDecode ((s)->m), t) /* Given a structure, member and type, convert the member to a pointer */ #define FcPointerMember(s, m, t) (FcIsEncodedOffset ((s)->m) ? FcEncodedOffsetMember (s, m, t) : (s)->m) /* * Serialized values may hold strings, charsets and langsets as pointers, * unfortunately FcValue is an exposed type so we can't just always use * offsets */ #define FcValueString(v) FcPointerMember (v, u.s, FcChar8) #define FcValueCharSet(v) FcPointerMember (v, u.c, const FcCharSet) #define FcValueLangSet(v) FcPointerMember (v, u.l, const FcLangSet) #define FcValueRange(v) FcPointerMember (v, u.r, const FcRange) typedef struct _FcValueList *FcValueListPtr; typedef struct _FcValueList { struct _FcValueList *next; FcValue value; FcValueBinding binding; } FcValueList; #define FcValueListNext(vl) FcPointerMember (vl, next, FcValueList) typedef int FcObject; /* The 1024 is to leave some room for future added internal objects, such * that caches from newer fontconfig can still be used with older fontconfig * without getting confused. */ #define FC_EXT_OBJ_INDEX 1024 #define FC_OBJ_ID(_n_) ((_n_) & (~FC_EXT_OBJ_INDEX)) typedef struct _FcPatternElt *FcPatternEltPtr; /* * Pattern elts are stuck in a structure connected to the pattern, * so they get moved around when the pattern is resized. Hence, the * values field must be a pointer/offset instead of just an offset */ typedef struct _FcPatternElt { FcObject object; FcValueList *values; } FcPatternElt; #define FcPatternEltValues(pe) FcPointerMember (pe, values, FcValueList) struct _FcPattern { int num; int size; intptr_t elts_offset; FcRef ref; }; #define FcPatternElts(p) FcOffsetMember (p, elts_offset, FcPatternElt) #define FcFontSetFonts(fs) FcPointerMember (fs, fonts, FcPattern *) #define FcFontSetFont(fs, i) (FcIsEncodedOffset ((fs)->fonts) ? FcEncodedOffsetToPtr (fs, \ FcFontSetFonts (fs)[i], \ FcPattern) \ : fs->fonts[i]) typedef enum _FcOp { FcOpInteger, FcOpDouble, FcOpString, FcOpMatrix, FcOpRange, FcOpBool, FcOpCharSet, FcOpLangSet, FcOpNil, FcOpField, FcOpConst, FcOpAssign, FcOpAssignReplace, FcOpPrependFirst, FcOpPrepend, FcOpAppend, FcOpAppendLast, FcOpDelete, FcOpDeleteAll, FcOpQuest, FcOpOr, FcOpAnd, FcOpEqual, FcOpNotEqual, FcOpContains, FcOpListing, FcOpNotContains, FcOpLess, FcOpLessEqual, FcOpMore, FcOpMoreEqual, FcOpPlus, FcOpMinus, FcOpTimes, FcOpDivide, FcOpNot, FcOpComma, FcOpFloor, FcOpCeil, FcOpRound, FcOpTrunc, FcOpInvalid } FcOp; typedef enum _FcOpFlags { FcOpFlagIgnoreBlanks = 1U << 0 } FcOpFlags; #define FC_OP_GET_OP(_x_) ((_x_) & 0xffff) #define FC_OP_GET_FLAGS(_x_) (((_x_) & 0xffff0000) >> 16) #define FC_OP(_x_, _f_) (FC_OP_GET_OP (_x_) | ((_f_) << 16)) typedef struct _FcExprMatrix { struct _FcExpr *xx, *xy, *yx, *yy; } FcExprMatrix; typedef struct _FcExprName { FcObject object; FcMatchKind kind; } FcExprName; struct _FcRange { double begin; double end; }; typedef struct _FcExpr { FcOp op; union { int ival; double dval; const FcChar8 *sval; FcExprMatrix *mexpr; FcBool bval; FcCharSet *cval; FcLangSet *lval; FcRange *rval; FcExprName name; const FcChar8 *constant; struct { struct _FcExpr *left, *right; } tree; } u; } FcExpr; typedef struct _FcExprPage FcExprPage; struct _FcExprPage { FcExprPage *next_page; FcExpr *next; FcExpr exprs[(1024 - 2 /* two pointers */ - 2 /* malloc overhead */) * sizeof (void *) / sizeof (FcExpr)]; FcExpr end[FLEXIBLE_ARRAY_MEMBER]; }; typedef enum _FcQual { FcQualAny, FcQualAll, FcQualFirst, FcQualNotFirst } FcQual; #define FcMatchDefault ((FcMatchKind) - 1) typedef struct _FcTest { FcMatchKind kind; FcQual qual; FcObject object; FcOp op; FcExpr *expr; } FcTest; typedef struct _FcEdit { FcObject object; FcOp op; FcExpr *expr; FcValueBinding binding; } FcEdit; typedef struct _FcPtrList FcPtrList; /* need to sync with FcConfigFileInfoIter at fontconfig.h */ typedef struct _FcPtrListIter { void *dummy1; void *dummy2; void *dummy3; } FcPtrListIter; typedef enum _FcRuleType { FcRuleUnknown, FcRuleTest, FcRuleEdit } FcRuleType; typedef struct _FcRule { struct _FcRule *next; FcRuleType type; union { FcTest *test; FcEdit *edit; } u; } FcRule; typedef struct _FcRuleSet { FcRef ref; FcChar8 *name; FcChar8 *description; FcChar8 *domain; FcBool enabled; FcPtrList *subst[FcMatchKindEnd]; } FcRuleSet; typedef struct _FcCharLeaf { FcChar32 map[256 / 32]; } FcCharLeaf; struct _FcCharSet { FcRef ref; /* reference count */ int num; /* size of leaves and numbers arrays */ intptr_t leaves_offset; intptr_t numbers_offset; }; #define FcCharSetLeaves(c) FcOffsetMember (c, leaves_offset, intptr_t) #define FcCharSetLeaf(c, i) (FcOffsetToPtr (FcCharSetLeaves (c), \ FcCharSetLeaves (c)[i], \ FcCharLeaf)) #define FcCharSetNumbers(c) FcOffsetMember (c, numbers_offset, FcChar16) #define FCSS_DEFAULT 0 /* default behavior */ #define FCSS_ALLOW_DUPLICATES 1 /* allows for duplicate strings in the set */ #define FCSS_GROW_BY_64 2 /* grows buffer by 64 elements instead of 1 */ #define FcStrSetHasControlBit(s, c) (s->control & c) #define FcStrSetHasControlBits(s, c) ((c) == (s->control & (c))) struct _FcStrSet { FcRef ref; /* reference count */ int num; int size; FcChar8 **strs; unsigned int control; /* control bits for set behavior */ }; struct _FcStrList { FcStrSet *set; int n; }; typedef struct _FcStrBuf { FcChar8 *buf; FcBool allocated; FcBool failed; int len; int size; FcChar8 buf_static[16 * sizeof (void *)]; } FcStrBuf; typedef struct _FcHashTable FcHashTable; typedef FcChar32 (*FcHashFunc) (const FcChar8 *data); typedef int (*FcCompareFunc) (const FcChar8 *v1, const FcChar8 *v2); typedef FcBool (*FcCopyFunc) (const void *src, void **dest); struct _FcCache { unsigned int magic; /* FC_CACHE_MAGIC_MMAP or FC_CACHE_ALLOC */ int version; /* FC_CACHE_VERSION_NUMBER */ intptr_t size; /* size of file */ intptr_t dir; /* offset to dir name */ intptr_t dirs; /* offset to subdirs */ int dirs_count; /* number of subdir strings */ intptr_t set; /* offset to font set */ int checksum; /* checksum of directory state */ int64_t checksum_nano; /* checksum of directory state */ }; #undef FcCacheDir #undef FcCacheSubdir #define FcCacheDir(c) FcOffsetMember (c, dir, FcChar8) #define FcCacheDirs(c) FcOffsetMember (c, dirs, intptr_t) #define FcCacheSet(c) FcOffsetMember (c, set, FcFontSet) #define FcCacheSubdir(c, i) FcOffsetToPtr (FcCacheDirs (c), \ FcCacheDirs (c)[i], \ FcChar8) /* * Used while constructing a directory cache object */ typedef union _FcAlign { double d; int i; intptr_t ip; FcBool b; void *p; } FcAlign; typedef struct _FcSerializeBucket { const void *object; /* key */ uintptr_t hash; /* hash of key */ intptr_t offset; /* value */ } FcSerializeBucket; typedef struct _FcCharSetFreezer FcCharSetFreezer; typedef struct _FcSerialize { intptr_t size; FcCharSetFreezer *cs_freezer; void *linear; FcSerializeBucket *buckets; size_t buckets_count; size_t buckets_used; size_t buckets_used_max; } FcSerialize; /* * To map adobe glyph names to unicode values, a precomputed hash * table is used */ typedef struct _FcGlyphName { FcChar32 ucs; /* unicode value */ FcChar8 name[1]; /* name extends beyond struct */ } FcGlyphName; /* * To perform case-insensitive string comparisons, a table * is used which holds three different kinds of folding data. * * The first is a range of upper case values mapping to a range * of their lower case equivalents. Within each range, the offset * between upper and lower case is constant. * * The second is a range of upper case values which are interleaved * with their lower case equivalents. * * The third is a set of raw unicode values mapping to a list * of unicode values for comparison purposes. This allows conversion * of ß to "ss" so that SS, ss and ß all match. A separate array * holds the list of unicode values for each entry. * * These are packed into a single table. Using a binary search, * the appropriate entry can be located. */ #define FC_CASE_FOLD_RANGE 0 #define FC_CASE_FOLD_EVEN_ODD 1 #define FC_CASE_FOLD_FULL 2 typedef struct _FcCaseFold { FcChar32 upper; FcChar16 method : 2; FcChar16 count : 14; short offset; /* lower - upper for RANGE, table id for FULL */ } FcCaseFold; #define FC_MAX_FILE_LEN 4096 #define FC_CACHE_MAGIC_MMAP 0xFC02FC04 #define FC_CACHE_MAGIC_ALLOC 0xFC02FC05 struct _FcAtomic { FcChar8 *file; /* original file name */ FcChar8 *new; /* temp file name -- write data here */ FcChar8 *lck; /* lockfile name (used for locking) */ FcChar8 *tmp; /* tmpfile name (used for locking) */ }; struct _FcConfig { /* * File names loaded from the configuration -- saved here as the * cache file must be consulted before the directories are scanned, * and those directives may occur in any order */ FcStrSet *configDirs; /* directories to scan for fonts */ /* * List of directories containing fonts, * built by recursively scanning the set * of configured directories */ FcStrSet *fontDirs; /* * List of directories containing cache files. */ FcStrSet *cacheDirs; /* * Names of all of the configuration files used * to create this configuration */ FcStrSet *configFiles; /* config files loaded */ /* * Substitution instructions for patterns and fonts; * maxObjects is used to allocate appropriate intermediate storage * while performing a whole set of substitutions * * 0.. substitutions for patterns * 1.. substitutions for fonts * 2.. substitutions for scanned fonts */ FcPtrList *subst[FcMatchKindEnd]; int maxObjects; /* maximum number of tests in all substs */ /* * List of patterns used to control font file selection */ FcStrSet *acceptGlobs; FcStrSet *rejectGlobs; FcFontSet *acceptPatterns; FcFontSet *rejectPatterns; /* * The set of fonts loaded from the listed directories; the * order within the set does not determine the font selection, * except in the case of identical matches in which case earlier fonts * match preferrentially */ FcFontSet *fonts[FcSetApplication + 1]; /* * Fontconfig can periodically rescan the system configuration * and font directories. This rescanning occurs when font * listing requests are made, but no more often than rescanInterval * seconds apart. */ time_t rescanTime; /* last time information was scanned */ int rescanInterval; /* interval between scans */ FcRef ref; /* reference count */ FcExprPage *expr_pool; /* pool of FcExpr's */ FcChar8 *sysRoot; /* override the system root directory */ FcStrSet *availConfigFiles; /* config files available */ FcPtrList *rulesetList; /* List of rulesets being installed */ FcFilterFontSetFunc filter_func; /* A predicate function to filter out config->fonts */ FcDestroyFunc destroy_data_func; /* A callback function to destroy config->filter_data */ void *filter_data; /* An user data to be used for filter_func */ FcBool prefer_app_fonts; /* Whether FcSetApplication has a priority than FcSetSystem for lookup */ FcChar8 *default_lang; /* Primary language in default_langs */ FcStrSet *default_langs; /* String sets of the default languages */ FcChar8 *prgname; /* Program name of current process */ FcChar8 *desktop_name; /* Current desktop name */ }; typedef struct _FcFileTime { time_t time; FcBool set; } FcFileTime; typedef struct _FcCharMap FcCharMap; typedef struct _FcStatFS FcStatFS; struct _FcStatFS { FcBool is_remote_fs; FcBool is_mtime_broken; }; typedef struct _FcValuePromotionBuffer FcValuePromotionBuffer; struct _FcValuePromotionBuffer { union { double d; int i; long l; char c[256]; /* Enlarge as needed */ } u; }; /* fccache.c */ FcPrivate FcCache * FcDirCacheScan (const FcChar8 *dir, FcConfig *config); FcPrivate FcCache * FcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, struct stat *dir_stat, FcStrSet *dirs); FcPrivate FcCache * FcDirCacheRebuild (FcCache *cache, struct stat *dir_stat, FcStrSet *dirs); FcPrivate FcBool FcDirCacheWrite (FcCache *cache, FcConfig *config); FcPrivate FcBool FcDirCacheCreateTagFile (const FcChar8 *cache_dir); FcPrivate void FcCacheObjectReference (void *object); FcPrivate void FcCacheObjectDereference (void *object); FcPrivate void * FcCacheAllocate (FcCache *cache, size_t len); FcPrivate void FcCacheFini (void); FcPrivate void FcDirCacheReference (FcCache *cache, int nref); FcPrivate int FcDirCacheLock (const FcChar8 *dir, FcConfig *config); FcPrivate void FcDirCacheUnlock (int fd); /* fccfg.c */ FcPrivate FcBool FcConfigInit (void); FcPrivate void FcConfigFini (void); FcPrivate FcChar8 * FcConfigXdgCacheHome (void); FcPrivate FcChar8 * FcConfigXdgConfigHome (void); FcPrivate FcChar8 * FcConfigXdgDataHome (void); FcPrivate FcStrSet * FcConfigXdgDataDirs (void); FcPrivate FcExpr * FcConfigAllocExpr (FcConfig *config); FcPrivate FcBool FcConfigAddConfigDir (FcConfig *config, const FcChar8 *d); FcPrivate FcBool FcConfigAddFontDir (FcConfig *config, const FcChar8 *d, const FcChar8 *m, const FcChar8 *salt); FcPrivate FcBool FcConfigResetFontDirs (FcConfig *config); FcPrivate FcChar8 * FcConfigMapFontPath (FcConfig *config, const FcChar8 *path); FcPrivate const FcChar8 * FcConfigMapSalt (FcConfig *config, const FcChar8 *path); FcPrivate FcBool FcConfigAddCacheDir (FcConfig *config, const FcChar8 *d); FcPrivate FcBool FcConfigAddConfigFile (FcConfig *config, const FcChar8 *f); FcPrivate FcBool FcConfigAddBlank (FcConfig *config, FcChar32 blank); FcBool FcConfigAddRule (FcConfig *config, FcRule *rule, FcMatchKind kind); FcPrivate void FcConfigSetFonts (FcConfig *config, FcFontSet *fonts, FcSetName set); FcPrivate FcBool FcConfigCompareValue (const FcValue *m, unsigned int op_, const FcValue *v); FcPrivate FcBool FcConfigGlobAdd (FcConfig *config, const FcChar8 *glob, FcBool accept); FcPrivate FcBool FcConfigAcceptFilename (FcConfig *config, const FcChar8 *filename); FcPrivate FcBool FcConfigPatternsAdd (FcConfig *config, FcPattern *pattern, FcBool accept); FcPrivate FcFileTime FcConfigModifiedTime (FcConfig *config); FcPrivate FcBool FcConfigAddCache (FcConfig *config, FcCache *cache, FcSetName set, FcStrSet *dirSet, FcChar8 *forDir); FcPrivate FcRuleSet * FcRuleSetCreate (const FcChar8 *name); FcPrivate void FcRuleSetDestroy (FcRuleSet *rs); FcPrivate void FcRuleSetReference (FcRuleSet *rs); FcPrivate void FcRuleSetEnable (FcRuleSet *rs, FcBool flag); FcPrivate void FcRuleSetAddDescription (FcRuleSet *rs, const FcChar8 *domain, const FcChar8 *description); FcPrivate int FcRuleSetAdd (FcRuleSet *rs, FcRule *rule, FcMatchKind kind); /* fcserialize.c */ FcPrivate intptr_t FcAlignSize (intptr_t size); FcPrivate FcSerialize * FcSerializeCreate (void); FcPrivate void FcSerializeDestroy (FcSerialize *serialize); FcPrivate FcBool FcSerializeAlloc (FcSerialize *serialize, const void *object, int size); FcPrivate intptr_t FcSerializeReserve (FcSerialize *serialize, int size); FcPrivate intptr_t FcSerializeOffset (FcSerialize *serialize, const void *object); FcPrivate void * FcSerializePtr (FcSerialize *serialize, const void *object); FcPrivate FcBool FcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l); FcPrivate FcLangSet * FcLangSetSerialize (FcSerialize *serialize, const FcLangSet *l); /* fccharset.c */ FcPrivate FcCharSet * FcCharSetPromote (FcValuePromotionBuffer *vbuf); FcPrivate void FcLangCharSetPopulate (void); FcPrivate FcBool FcLangIsExclusive (const FcChar8 *lang); FcPrivate const FcChar8 * FcLangIsExclusiveFromOs2 (unsigned long os2ulUnicodeRange1, unsigned long os2ulUnicodeRange2); FcPrivate FcCharSetFreezer * FcCharSetFreezerCreate (void); FcPrivate const FcCharSet * FcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs); FcPrivate void FcCharSetFreezerDestroy (FcCharSetFreezer *freezer); FcPrivate FcBool FcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c); FcPrivate FcCharSet * FcNameParseCharSet (FcChar8 *string); FcPrivate FcBool FcNameUnparseValue (FcStrBuf *buf, FcValue *v0, FcChar8 *escape); FcPrivate FcBool FcNameUnparseValueList (FcStrBuf *buf, FcValueListPtr v, FcChar8 *escape); FcPrivate FcCharLeaf * FcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4); FcPrivate FcBool FcCharSetSerializeAlloc (FcSerialize *serialize, const FcCharSet *cs); FcPrivate FcCharSet * FcCharSetSerialize (FcSerialize *serialize, const FcCharSet *cs); FcPrivate FcChar16 * FcCharSetGetNumbers (const FcCharSet *c); /* fccompat.c */ FcPrivate int FcOpen (const char *pathname, int flags, ...); FcPrivate int FcMakeTempfile (char *template); FcPrivate int32_t FcRandom (void); FcPrivate FcBool FcMakeDirectory (const FcChar8 *dir); FcPrivate ssize_t FcReadLink (const FcChar8 *pathname, FcChar8 *buf, size_t bufsiz); /* fcdbg.c */ FcPrivate void FcValuePrintFile (FILE *f, const FcValue v); FcPrivate void FcValuePrintWithPosition (const FcValue v, FcBool show_pos_mark); FcPrivate void FcValueListPrintWithPosition (FcValueListPtr l, const FcValueListPtr pos); FcPrivate void FcValueListPrint (FcValueListPtr l); FcPrivate void FcLangSetPrint (const FcLangSet *ls); FcPrivate void FcOpPrint (FcOp op); FcPrivate void FcTestPrint (const FcTest *test); FcPrivate void FcExprPrint (const FcExpr *expr); FcPrivate void FcEditPrint (const FcEdit *edit); FcPrivate void FcRulePrint (const FcRule *rule); FcPrivate void FcCharSetPrint (const FcCharSet *c); FcPrivate void FcPatternPrint2 (FcPattern *p1, FcPattern *p2, const FcObjectSet *os); extern FcPrivate int FcDebugVal; #define FcDebug() (FcDebugVal) FcPrivate void FcInitDebug (void); /* fcdefault.c */ FcPrivate FcChar8 * FcConfigGetDefaultLang (FcConfig *config); FcPrivate FcChar8 * FcGetDefaultLang (void); FcPrivate FcChar8 * FcConfigGetPrgname (FcConfig *config); FcPrivate FcChar8 * FcGetPrgname (void); FcPrivate FcChar8 * FcConfigGetDesktopName (FcConfig *config); FcPrivate FcChar8 * FcGetDesktopName (void); /* fcdir.c */ FcPrivate FcBool FcFileIsLink (const FcChar8 *file); FcPrivate FcBool FcFileIsFile (const FcChar8 *file); FcPrivate FcBool FcFileScanConfig (FcFontSet *set, FcStrSet *dirs, const FcChar8 *file, FcConfig *config); FcPrivate FcBool FcDirScanConfig (FcFontSet *set, FcStrSet *dirs, const FcChar8 *dir, FcBool force, FcConfig *config); /* fcfont.c */ FcPrivate int FcFontDebug (void); /* fcfs.c */ FcPrivate FcBool FcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s); FcPrivate FcFontSet * FcFontSetSerialize (FcSerialize *serialize, const FcFontSet *s); FcPrivate FcFontSet * FcFontSetDeserialize (const FcFontSet *set); /* fcplist.c */ FcPrivate FcPtrList * FcPtrListCreate (FcDestroyFunc func); FcPrivate void FcPtrListDestroy (FcPtrList *list); FcPrivate void FcPtrListIterInit (const FcPtrList *list, FcPtrListIter *iter); FcPrivate void FcPtrListIterInitAtLast (FcPtrList *list, FcPtrListIter *iter); FcPrivate FcBool FcPtrListIterNext (const FcPtrList *list, FcPtrListIter *iter); FcPrivate FcBool FcPtrListIterIsValid (const FcPtrList *list, const FcPtrListIter *iter); FcPrivate void * FcPtrListIterGetValue (const FcPtrList *list, const FcPtrListIter *iter); FcPrivate FcBool FcPtrListIterAdd (FcPtrList *list, FcPtrListIter *iter, void *data); FcPrivate FcBool FcPtrListIterRemove (FcPtrList *list, FcPtrListIter *iter); /* fcinit.c */ FcPrivate FcConfig * FcInitLoadOwnConfig (FcConfig *config); FcPrivate FcConfig * FcInitLoadOwnConfigAndFonts (FcConfig *config); /* fcxml.c */ FcPrivate void FcConfigPathFini (void); FcPrivate void FcTestDestroy (FcTest *test); FcPrivate void FcEditDestroy (FcEdit *e); void FcRuleDestroy (FcRule *rule); /* fclang.c */ typedef struct { const FcChar8 lang[16]; const FcCharSet charset; } FcLangCharSet; typedef struct { int begin; int end; } FcLangCharSetRange; #include "fclang.h" struct _FcLangSet { FcStrSet *extra; FcChar32 map_size; FcChar32 map[NUM_LANG_SET_MAP]; }; FcPrivate FcLangSet * FcLangSetFromCharSet (const FcCharSet *charset, const FcChar8 *exclusiveLang); FcPrivate FcLangResult FcLangCompare (const FcChar8 *s1, const FcChar8 *s2); FcPrivate FcLangSet * FcLangSetPromote (const FcChar8 *lang, FcValuePromotionBuffer *buf); FcPrivate FcLangSet * FcNameParseLangSet (const FcChar8 *string); FcPrivate FcBool FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls); FcPrivate FcChar8 * FcNameUnparseEscaped (FcPattern *pat, FcBool escape); FcPrivate FcBool FcConfigParseOnly (FcConfig *config, const FcChar8 *name, FcBool complain); FcPrivate FcChar8 * FcConfigRealFilename (FcConfig *config, const FcChar8 *url); /* fclist.c */ FcPrivate FcBool FcListPatternMatchAny (const FcPattern *p, const FcPattern *font); /* fcmatch.c */ /* fcname.c */ enum { FC_INVALID_OBJECT = 0, #define FC_OBJECT(NAME, Type, Cmp) FC_##NAME##_OBJECT, #include "fcobjs.h" #undef FC_OBJECT FC_ONE_AFTER_MAX_BASE_OBJECT #define FC_MAX_BASE_OBJECT (FC_ONE_AFTER_MAX_BASE_OBJECT - 1) }; FcPrivate FcBool FcNameConstantWithObjectCheck (const FcChar8 *string, const char *object, int *result); FcPrivate FcBool FcNameBool (const FcChar8 *v, FcBool *result); FcPrivate FcBool FcObjectValidType (FcObject object, FcType type); FcPrivate FcObject FcObjectFromName (const char *name); FcPrivate const char * FcObjectName (FcObject object); FcPrivate FcObjectSet * FcObjectGetSet (void); #define FcObjectCompare(a, b) ((int)a - (int)b) /* fcpat.c */ FcPrivate FcValue FcValueCanonicalize (const FcValue *v); FcPrivate FcValueListPtr FcValueListCreate (void); FcPrivate void FcValueListDestroy (FcValueListPtr l); FcPrivate FcValueListPtr FcValueListPrepend (FcValueListPtr vallist, FcValue value, FcValueBinding binding); FcPrivate FcValueListPtr FcValueListAppend (FcValueListPtr vallist, FcValue value, FcValueBinding binding); FcPrivate FcValueListPtr FcValueListDuplicate (FcValueListPtr orig); FcPrivate FcPatternElt * FcPatternObjectFindElt (const FcPattern *p, FcObject object); FcPrivate FcPatternElt * FcPatternObjectInsertElt (FcPattern *p, FcObject object); FcPrivate FcBool FcPatternObjectListAdd (FcPattern *p, FcObject object, FcValueListPtr list, FcBool append); FcPrivate FcBool FcPatternObjectAddWithBinding (FcPattern *p, FcObject object, FcValue value, FcValueBinding binding, FcBool append); FcPrivate FcBool FcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append); FcPrivate FcBool FcPatternObjectAddWeak (FcPattern *p, FcObject object, FcValue value, FcBool append); FcPrivate FcResult FcPatternObjectGetWithBinding (const FcPattern *p, FcObject object, int id, FcValue *v, FcValueBinding *b); FcPrivate FcResult FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v); FcPrivate FcBool FcPatternObjectDel (FcPattern *p, FcObject object); FcPrivate FcBool FcPatternObjectRemove (FcPattern *p, FcObject object, int id); FcPrivate FcBool FcPatternObjectAddInteger (FcPattern *p, FcObject object, int i); FcPrivate FcBool FcPatternObjectAddDouble (FcPattern *p, FcObject object, double d); FcPrivate FcBool FcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s); FcPrivate FcBool FcPatternObjectAddMatrix (FcPattern *p, FcObject object, const FcMatrix *s); FcPrivate FcBool FcPatternObjectAddCharSet (FcPattern *p, FcObject object, const FcCharSet *c); FcPrivate FcBool FcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b); FcPrivate FcBool FcPatternObjectAddLangSet (FcPattern *p, FcObject object, const FcLangSet *ls); FcPrivate FcBool FcPatternObjectAddRange (FcPattern *p, FcObject object, const FcRange *r); FcPrivate FcResult FcPatternObjectGetInteger (const FcPattern *p, FcObject object, int n, int *i); FcPrivate FcResult FcPatternObjectGetDouble (const FcPattern *p, FcObject object, int n, double *d); FcPrivate FcResult FcPatternObjectGetString (const FcPattern *p, FcObject object, int n, FcChar8 **s); FcPrivate FcResult FcPatternObjectGetMatrix (const FcPattern *p, FcObject object, int n, FcMatrix **s); FcPrivate FcResult FcPatternObjectGetCharSet (const FcPattern *p, FcObject object, int n, FcCharSet **c); FcPrivate FcResult FcPatternObjectGetBool (const FcPattern *p, FcObject object, int n, FcBool *b); FcPrivate FcResult FcPatternObjectGetLangSet (const FcPattern *p, FcObject object, int n, FcLangSet **ls); FcPrivate FcResult FcPatternObjectGetRange (const FcPattern *p, FcObject object, int id, FcRange **r); FcPrivate FcBool FcPatternAppend (FcPattern *p, FcPattern *s); FcPrivate int FcPatternPosition (const FcPattern *p, const char *object); FcPrivate FcBool FcPatternFindObjectIter (const FcPattern *pat, FcPatternIter *iter, FcObject object); FcPrivate FcObject FcPatternIterGetObjectId (const FcPattern *pat, FcPatternIter *iter); FcPrivate FcValueListPtr FcPatternIterGetValues (const FcPattern *pat, FcPatternIter *iter); FcPrivate FcPattern * FcPatternCacheRewriteFile (const FcPattern *pat, FcCache *cache, const FcChar8 *relocated_font_file); FcPrivate FcChar32 FcStringHash (const FcChar8 *s); FcPrivate FcBool FcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat); FcPrivate FcPattern * FcPatternSerialize (FcSerialize *serialize, const FcPattern *pat); FcPrivate FcBool FcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *pat); FcPrivate FcValueList * FcValueListSerialize (FcSerialize *serialize, const FcValueList *pat); /* fcrender.c */ /* fcmatrix.c */ extern FcPrivate const FcMatrix FcIdentityMatrix; FcPrivate void FcMatrixFree (FcMatrix *mat); /* fcrange.c */ FcPrivate FcRange * FcRangePromote (double v, FcValuePromotionBuffer *vbuf); FcPrivate FcBool FcRangeIsInRange (const FcRange *a, const FcRange *b); FcPrivate FcBool FcRangeCompare (FcOp op, const FcRange *a, const FcRange *b); FcPrivate FcChar32 FcRangeHash (const FcRange *r); FcPrivate FcBool FcRangeSerializeAlloc (FcSerialize *serialize, const FcRange *r); FcPrivate FcRange * FcRangeSerialize (FcSerialize *serialize, const FcRange *r); /* fcstat.c */ FcPrivate int FcStat (const FcChar8 *file, struct stat *statb); FcPrivate int FcStatChecksum (const FcChar8 *file, struct stat *statb); FcPrivate FcBool FcIsFsMmapSafe (int fd); FcPrivate FcBool FcIsFsMtimeBroken (const FcChar8 *dir); /* fcstr.c */ FcPrivate FcStrSet * FcStrSetCreateEx (unsigned int control); FcPrivate FcBool FcStrSetInsert (FcStrSet *set, const FcChar8 *s, int pos); FcPrivate FcBool FcStrSetAddLangs (FcStrSet *strs, const char *languages); FcPrivate void FcStrSetSort (FcStrSet *set); FcPrivate FcBool FcStrSetMemberAB (FcStrSet *set, const FcChar8 *a, FcChar8 *b, FcChar8 **ret); FcPrivate FcBool FcStrSetAddTriple (FcStrSet *set, const FcChar8 *a, const FcChar8 *b, const FcChar8 *c); FcPrivate const FcChar8 * FcStrTripleSecond (FcChar8 *s); FcPrivate const FcChar8 * FcStrTripleThird (FcChar8 *str); FcPrivate FcBool FcStrSetAddFilenamePairWithSalt (FcStrSet *strs, const FcChar8 *d, const FcChar8 *m, const FcChar8 *salt); FcPrivate FcBool FcStrSetDeleteAll (FcStrSet *set); FcPrivate void FcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size); FcPrivate void FcStrBufDestroy (FcStrBuf *buf); FcPrivate FcChar8 * FcStrBufDone (FcStrBuf *buf); FcPrivate FcChar8 * FcStrBufDoneStatic (FcStrBuf *buf); FcPrivate FcBool FcStrBufChar (FcStrBuf *buf, FcChar8 c); FcPrivate FcBool FcStrBufString (FcStrBuf *buf, const FcChar8 *s); FcPrivate FcBool FcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len); FcPrivate int FcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2); FcPrivate int FcStrCmpIgnoreCaseAndDelims (const FcChar8 *s1, const FcChar8 *s2, const FcChar8 *delims); FcPrivate const FcChar8 * FcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2); FcPrivate const FcChar8 * FcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2); FcPrivate const FcChar8 * FcStrContainsWord (const FcChar8 *s1, const FcChar8 *s2); FcPrivate int FcStrMatchIgnoreCaseAndDelims (const FcChar8 *s1, const FcChar8 *s2, const FcChar8 *delims); FcPrivate FcBool FcStrGlobMatch (const FcChar8 *glob, const FcChar8 *string); FcPrivate FcBool FcStrUsesHome (const FcChar8 *s); FcPrivate FcBool FcStrIsAbsoluteFilename (const FcChar8 *s); FcPrivate FcChar8 * FcStrLastSlash (const FcChar8 *path); FcPrivate FcChar32 FcStrHashIgnoreCase (const FcChar8 *s); FcPrivate FcChar32 FcStrHashIgnoreBlanksAndCase (const FcChar8 *s); FcPrivate FcChar8 * FcStrRealPath (const FcChar8 *path); FcPrivate FcChar8 * FcStrCanonFilename (const FcChar8 *s); FcPrivate FcBool FcStrSerializeAlloc (FcSerialize *serialize, const FcChar8 *str); FcPrivate FcChar8 * FcStrSerialize (FcSerialize *serialize, const FcChar8 *str); /* fcobjs.c */ FcPrivate void FcObjectInit (void); FcPrivate void FcObjectFini (void); FcPrivate FcObject FcObjectLookupIdByName (const char *str); FcPrivate FcObject FcObjectLookupBuiltinIdByName (const char *str); FcPrivate const char * FcObjectLookupOtherNameById (FcObject id); FcPrivate const FcObjectType * FcObjectLookupOtherTypeById (FcObject id); FcPrivate const FcObjectType * FcObjectLookupOtherTypeByName (const char *str); /* fchash.c */ FcPrivate FcBool FcHashStrCopy (const void *src, void **dest); FcPrivate FcBool FcHashUuidCopy (const void *src, void **dest); FcPrivate void FcHashUuidFree (void *data); FcPrivate FcHashTable * FcHashTableCreate (FcHashFunc hash_func, FcCompareFunc compare_func, FcCopyFunc key_copy_func, FcCopyFunc value_copy_func, FcDestroyFunc key_destroy_func, FcDestroyFunc value_destroy_func); FcPrivate void FcHashTableDestroy (FcHashTable *table); FcPrivate FcBool FcHashTableFind (FcHashTable *table, const void *key, void **value); FcPrivate FcBool FcHashTableAdd (FcHashTable *table, void *key, void *value); FcPrivate FcBool FcHashTableReplace (FcHashTable *table, void *key, void *value); FcPrivate FcBool FcHashTableRemove (FcHashTable *table, void *key); #endif /* _FC_INT_H_ */ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fclang.c000066400000000000000000000616631503113465200235730ustar00rootroot00000000000000/* * fontconfig/src/fclang.c * * Copyright © 2002 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" #include "fcftint.h" /* Objects MT-safe for readonly access. */ /* * Keep Han languages separated by eliminating languages * that the codePageRange bits says aren't supported */ static const struct { char bit; const FcChar8 lang[6]; } FcCodePageRange[] = { { 17, "ja" }, { 18, "zh-cn" }, { 19, "ko" }, { 20, "zh-tw" }, }; #define NUM_CODE_PAGE_RANGE (int)(sizeof FcCodePageRange / sizeof FcCodePageRange[0]) static int FcLangSetIndex (const FcChar8 *lang); static void FcLangSetBitSet (FcLangSet *ls, unsigned int id) { unsigned int bucket; id = fcLangCharSetIndices[id]; bucket = id >> 5; if (bucket >= ls->map_size) return; /* shouldn't happen really */ ls->map[bucket] |= ((FcChar32)1U << (id & 0x1f)); } static FcBool FcLangSetBitGet (const FcLangSet *ls, unsigned int id) { unsigned int bucket; id = fcLangCharSetIndices[id]; bucket = id >> 5; if (bucket >= ls->map_size) return FcFalse; return ((ls->map[bucket] >> (id & 0x1f)) & 1) ? FcTrue : FcFalse; } static void FcLangSetBitReset (FcLangSet *ls, unsigned int id) { unsigned int bucket; id = fcLangCharSetIndices[id]; bucket = id >> 5; if (bucket >= ls->map_size) return; /* shouldn't happen really */ ls->map[bucket] &= ~((FcChar32)1U << (id & 0x1f)); } FcLangSet * FcLangSetFromCharSet (const FcCharSet *charset, const FcChar8 *exclusiveLang) { int i, j; FcChar32 missing; const FcCharSet *exclusiveCharset = 0; FcLangSet *ls; if (exclusiveLang) exclusiveCharset = FcLangGetCharSet (exclusiveLang); ls = FcLangSetCreate(); if (!ls) return 0; if (FcDebug() & FC_DBG_LANGSET) { printf ("font charset"); FcCharSetPrint (charset); printf ("\n"); } for (i = 0; i < NUM_LANG_CHAR_SET; i++) { if (FcDebug() & FC_DBG_LANGSET) { printf ("%s charset", fcLangCharSets[i].lang); FcCharSetPrint (&fcLangCharSets[i].charset); printf ("\n"); } /* * Check for Han charsets to make fonts * which advertise support for a single language * not support other Han languages */ if (exclusiveCharset && FcLangIsExclusive (fcLangCharSets[i].lang)) { if (fcLangCharSets[i].charset.num != exclusiveCharset->num) continue; for (j = 0; j < fcLangCharSets[i].charset.num; j++) if (FcCharSetLeaf (&fcLangCharSets[i].charset, j) != FcCharSetLeaf (exclusiveCharset, j)) continue; } missing = FcCharSetSubtractCount (&fcLangCharSets[i].charset, charset); if (FcDebug() & FC_DBG_SCANV) { if (missing && missing < 10) { FcCharSet *missed = FcCharSetSubtract (&fcLangCharSets[i].charset, charset); FcChar32 ucs4; FcChar32 map[FC_CHARSET_MAP_SIZE]; FcChar32 next; printf ("\n%s(%u) ", fcLangCharSets[i].lang, missing); printf ("{"); for (ucs4 = FcCharSetFirstPage (missed, map, &next); ucs4 != FC_CHARSET_DONE; ucs4 = FcCharSetNextPage (missed, map, &next)) { int i, j; for (i = 0; i < FC_CHARSET_MAP_SIZE; i++) if (map[i]) { for (j = 0; j < 32; j++) if (map[i] & (1U << j)) printf (" %04x", ucs4 + i * 32 + j); } } printf (" }\n\t"); FcCharSetDestroy (missed); } else printf ("%s(%u) ", fcLangCharSets[i].lang, missing); } if (!missing) FcLangSetBitSet (ls, i); } if (FcDebug() & FC_DBG_SCANV) printf ("\n"); return ls; } FcChar8 * FcLangNormalize (const FcChar8 *lang) { FcChar8 *result = NULL, *s, *orig; char *territory, *encoding, *modifier; size_t llen, tlen = 0, mlen = 0; if (!lang || !*lang) return NULL; /* might be called without initialization */ FcInitDebug(); if (FcStrCmpIgnoreCase (lang, (const FcChar8 *)"C") == 0 || FcStrCmpIgnoreCase (lang, (const FcChar8 *)"C.UTF-8") == 0 || FcStrCmpIgnoreCase (lang, (const FcChar8 *)"C.utf8") == 0 || FcStrCmpIgnoreCase (lang, (const FcChar8 *)"POSIX") == 0) { result = FcStrCopy ((const FcChar8 *)"en"); goto bail; } s = FcStrCopy (lang); if (!s) goto bail; /* from the comments in glibc: * * LOCALE can consist of up to four recognized parts for the XPG syntax: * * language[_territory[.codeset]][@modifier] * * Beside the first all of them are allowed to be missing. If the * full specified locale is not found, the less specific one are * looked for. The various part will be stripped off according to * the following order: * (1) codeset * (2) normalized codeset * (3) territory * (4) modifier * * So since we don't take care of the codeset part here, what patterns * we need to deal with is: * * 1. language_territory@modifier * 2. language@modifier * 3. language * * then. and maybe no need to try language_territory here. */ modifier = strchr ((const char *)s, '@'); if (modifier) { *modifier = 0; modifier++; mlen = strlen (modifier); } encoding = strchr ((const char *)s, '.'); if (encoding) { *encoding = 0; encoding++; if (modifier) { memmove (encoding, modifier, mlen + 1); modifier = encoding; } } territory = strchr ((const char *)s, '_'); if (!territory) territory = strchr ((const char *)s, '-'); if (territory) { *territory = 0; territory++; tlen = strlen (territory); } llen = strlen ((const char *)s); if (llen < 2 || llen > 3) { fprintf (stderr, "Fontconfig warning: ignoring %s: not a valid language tag\n", lang); goto bail0; } if (territory && (tlen < 2 || tlen > 3) && !(territory[0] == 'z' && tlen < 5)) { fprintf (stderr, "Fontconfig warning: ignoring %s: not a valid region tag\n", lang); goto bail0; } if (territory) territory[-1] = '-'; if (modifier) modifier[-1] = '@'; orig = FcStrDowncase (s); if (!orig) goto bail0; if (territory) { if (FcDebug() & FC_DBG_LANGSET) printf ("Checking the existence of %s.orth\n", s); if (FcLangSetIndex (s) < 0) { memmove (territory - 1, territory + tlen, (mlen > 0 ? mlen + 1 : 0) + 1); if (modifier) modifier = territory; } else { result = s; /* we'll miss the opportunity to reduce the correct size * of the allocated memory for the string after that. */ s = NULL; goto bail1; } } if (modifier) { if (FcDebug() & FC_DBG_LANGSET) printf ("Checking the existence of %s.orth\n", s); if (FcLangSetIndex (s) < 0) modifier[-1] = 0; else { result = s; /* we'll miss the opportunity to reduce the correct size * of the allocated memory for the string after that. */ s = NULL; goto bail1; } } if (FcDebug() & FC_DBG_LANGSET) printf ("Checking the existence of %s.orth\n", s); if (FcLangSetIndex (s) < 0) { /* there seems no languages matched in orth. * add the language as is for fallback. */ result = orig; orig = NULL; } else { result = s; /* we'll miss the opportunity to reduce the correct size * of the allocated memory for the string after that. */ s = NULL; } bail1: if (orig) FcStrFree (orig); bail0: if (s) free (s); bail: if (FcDebug() & FC_DBG_LANGSET) { if (result) printf ("normalized: %s -> %s\n", lang, result); else printf ("Unable to normalize %s\n", lang); } return result; } #define FcLangEnd(c) ((c) == '-' || (c) == '\0') FcLangResult FcLangCompare (const FcChar8 *s1, const FcChar8 *s2) { FcChar8 c1, c2; FcLangResult result = FcLangDifferentLang; const FcChar8 *s1_orig = s1; FcBool is_und; is_und = FcToLower (s1[0]) == 'u' && FcToLower (s1[1]) == 'n' && FcToLower (s1[2]) == 'd' && FcLangEnd (s1[3]); for (;;) { c1 = *s1++; c2 = *s2++; c1 = FcToLower (c1); c2 = FcToLower (c2); if (c1 != c2) { if (!is_und && FcLangEnd (c1) && FcLangEnd (c2)) result = FcLangDifferentTerritory; return result; } else if (!c1) { return is_und ? result : FcLangEqual; } else if (c1 == '-') { if (!is_und) result = FcLangDifferentTerritory; } /* If we parsed past "und-", then do not consider it undefined anymore, * as there's *something* specified. */ if (is_und && s1 - s1_orig == 4) is_und = FcFalse; } } /* * Return FcTrue when super contains sub. * * super contains sub if super and sub have the same * language and either the same country or one * is missing the country */ static FcBool FcLangContains (const FcChar8 *super, const FcChar8 *sub) { FcChar8 c1, c2; for (;;) { c1 = *super++; c2 = *sub++; c1 = FcToLower (c1); c2 = FcToLower (c2); if (c1 != c2) { /* see if super has a country while sub is missing one */ if (c1 == '-' && c2 == '\0') return FcTrue; /* see if sub has a country while super is missing one */ if (c1 == '\0' && c2 == '-') return FcTrue; return FcFalse; } else if (!c1) return FcTrue; } } const FcCharSet * FcLangGetCharSet (const FcChar8 *lang) { int i; int country = -1; for (i = 0; i < NUM_LANG_CHAR_SET; i++) { switch (FcLangCompare (lang, fcLangCharSets[i].lang)) { case FcLangEqual: return &fcLangCharSets[i].charset; case FcLangDifferentTerritory: if (country == -1) country = i; case FcLangDifferentLang: default: break; } } if (country == -1) return 0; return &fcLangCharSets[country].charset; } FcStrSet * FcGetLangs (void) { FcStrSet *langs; int i; langs = FcStrSetCreate(); if (!langs) return 0; for (i = 0; i < NUM_LANG_CHAR_SET; i++) FcStrSetAdd (langs, fcLangCharSets[i].lang); return langs; } FcLangSet * FcLangSetCreate (void) { FcLangSet *ls; ls = malloc (sizeof (FcLangSet)); if (!ls) return 0; memset (ls->map, '\0', sizeof (ls->map)); ls->map_size = NUM_LANG_SET_MAP; ls->extra = 0; return ls; } void FcLangSetDestroy (FcLangSet *ls) { if (!ls) return; if (ls->extra) FcStrSetDestroy (ls->extra); free (ls); } FcLangSet * FcLangSetCopy (const FcLangSet *ls) { FcLangSet *newp; if (!ls) return NULL; newp = FcLangSetCreate(); if (!newp) goto bail0; memset (newp->map, '\0', sizeof (newp->map)); memcpy (newp->map, ls->map, FC_MIN (sizeof (newp->map), ls->map_size * sizeof (ls->map[0]))); if (ls->extra) { FcStrList *list; FcChar8 *extra; newp->extra = FcStrSetCreate(); if (!newp->extra) goto bail1; list = FcStrListCreate (ls->extra); if (!list) goto bail1; while ((extra = FcStrListNext (list))) if (!FcStrSetAdd (newp->extra, extra)) { FcStrListDone (list); goto bail1; } FcStrListDone (list); } return newp; bail1: FcLangSetDestroy (newp); bail0: return 0; } /* When the language isn't found, the return value r is such that: * 1) r < 0 * 2) -r -1 is the index of the first language in fcLangCharSets that comes * after the 'lang' argument in lexicographic order. * * The -1 is necessary to avoid problems with language id 0 (otherwise, we * wouldn't be able to distinguish between “language found, id is 0” and * “language not found, sorts right before the language with id 0”). */ static int FcLangSetIndex (const FcChar8 *lang) { int low, high, mid = 0; int cmp = 0; FcChar8 firstChar = FcToLower (lang[0]); FcChar8 secondChar = firstChar ? FcToLower (lang[1]) : '\0'; if (firstChar < 'a') { low = 0; high = fcLangCharSetRanges[0].begin; } else if (firstChar > 'z') { low = fcLangCharSetRanges[25].begin; high = NUM_LANG_CHAR_SET - 1; } else { low = fcLangCharSetRanges[firstChar - 'a'].begin; high = fcLangCharSetRanges[firstChar - 'a'].end; /* no matches */ if (low > high) return -(low + 1); /* one past next entry after where it would be */ } while (low <= high) { mid = (high + low) >> 1; if (fcLangCharSets[mid].lang[0] != firstChar) cmp = FcStrCmpIgnoreCase (fcLangCharSets[mid].lang, lang); else { /* fast path for resolving 2-letter languages (by far the most common) after * finding the first char (probably already true because of the hash table) */ cmp = fcLangCharSets[mid].lang[1] - secondChar; if (cmp == 0 && (fcLangCharSets[mid].lang[2] != '\0' || lang[2] != '\0')) { cmp = FcStrCmpIgnoreCase (fcLangCharSets[mid].lang + 2, lang + 2); } } if (cmp == 0) return mid; if (cmp < 0) low = mid + 1; else high = mid - 1; } if (cmp < 0) mid++; return -(mid + 1); } FcBool FcLangSetAdd (FcLangSet *ls, const FcChar8 *lang) { int id; id = FcLangSetIndex (lang); if (id >= 0) { FcLangSetBitSet (ls, id); return FcTrue; } if (!ls->extra) { ls->extra = FcStrSetCreate(); if (!ls->extra) return FcFalse; } return FcStrSetAdd (ls->extra, lang); } FcBool FcLangSetDel (FcLangSet *ls, const FcChar8 *lang) { int id; id = FcLangSetIndex (lang); if (id >= 0) { FcLangSetBitReset (ls, id); } else if (ls->extra) { FcStrSetDel (ls->extra, lang); } return FcTrue; } FcLangResult FcLangSetHasLang (const FcLangSet *ls, const FcChar8 *lang) { int id; FcLangResult best, r; int i; id = FcLangSetIndex (lang); if (id < 0) id = -id - 1; else if (FcLangSetBitGet (ls, id)) return FcLangEqual; best = FcLangDifferentLang; for (i = id - 1; i >= 0; i--) { r = FcLangCompare (lang, fcLangCharSets[i].lang); if (r == FcLangDifferentLang) break; if (FcLangSetBitGet (ls, i) && r < best) best = r; } for (i = id; i < NUM_LANG_CHAR_SET; i++) { r = FcLangCompare (lang, fcLangCharSets[i].lang); if (r == FcLangDifferentLang) break; if (FcLangSetBitGet (ls, i) && r < best) best = r; } if (ls->extra) { FcStrList *list = FcStrListCreate (ls->extra); FcChar8 *extra; if (list) { while (best > FcLangEqual && (extra = FcStrListNext (list))) { r = FcLangCompare (lang, extra); if (r < best) best = r; } FcStrListDone (list); } } return best; } static FcLangResult FcLangSetCompareStrSet (const FcLangSet *ls, FcStrSet *set) { FcStrList *list = FcStrListCreate (set); FcLangResult r, best = FcLangDifferentLang; FcChar8 *extra; if (list) { while (best > FcLangEqual && (extra = FcStrListNext (list))) { r = FcLangSetHasLang (ls, extra); if (r < best) best = r; } FcStrListDone (list); } return best; } FcLangResult FcLangSetCompare (const FcLangSet *lsa, const FcLangSet *lsb) { int i, j, count; FcLangResult best, r; FcChar32 aInCountrySet, bInCountrySet; count = FC_MIN (lsa->map_size, lsb->map_size); count = FC_MIN (NUM_LANG_SET_MAP, count); for (i = 0; i < count; i++) if (lsa->map[i] & lsb->map[i]) return FcLangEqual; best = FcLangDifferentLang; for (j = 0; j < NUM_COUNTRY_SET; j++) { aInCountrySet = 0; bInCountrySet = 0; for (i = 0; i < count; i++) { aInCountrySet |= lsa->map[i] & fcLangCountrySets[j][i]; bInCountrySet |= lsb->map[i] & fcLangCountrySets[j][i]; if (aInCountrySet && bInCountrySet) { best = FcLangDifferentTerritory; break; } } } if (lsa->extra) { r = FcLangSetCompareStrSet (lsb, lsa->extra); if (r < best) best = r; } if (best > FcLangEqual && lsb->extra) { r = FcLangSetCompareStrSet (lsa, lsb->extra); if (r < best) best = r; } return best; } /* * Used in computing values -- mustn't allocate any storage */ FcLangSet * FcLangSetPromote (const FcChar8 *lang, FcValuePromotionBuffer *vbuf) { int id; typedef struct { FcLangSet ls; FcStrSet strs; FcChar8 *str; } FcLangSetPromotionBuffer; FcLangSetPromotionBuffer *buf = (FcLangSetPromotionBuffer *)vbuf; FC_ASSERT_STATIC (sizeof (FcLangSetPromotionBuffer) <= sizeof (FcValuePromotionBuffer)); memset (buf->ls.map, '\0', sizeof (buf->ls.map)); buf->ls.map_size = NUM_LANG_SET_MAP; buf->ls.extra = 0; if (lang) { id = FcLangSetIndex (lang); if (id >= 0) { FcLangSetBitSet (&buf->ls, id); } else { buf->ls.extra = &buf->strs; buf->strs.num = 1; buf->strs.size = 1; buf->strs.strs = &buf->str; FcRefInit (&buf->strs.ref, 1); buf->str = (FcChar8 *)lang; } } return &buf->ls; } FcChar32 FcLangSetHash (const FcLangSet *ls) { FcChar32 h = 0; int i, count; count = FC_MIN (ls->map_size, NUM_LANG_SET_MAP); for (i = 0; i < count; i++) h ^= ls->map[i]; if (ls->extra) h ^= ls->extra->num; return h; } FcLangSet * FcNameParseLangSet (const FcChar8 *string) { FcChar8 lang[32], c = 0; int i; FcLangSet *ls; ls = FcLangSetCreate(); if (!ls) goto bail0; for (;;) { for (i = 0; i < 31; i++) { c = *string++; if (c == '\0' || c == '|') break; /* end of this code */ lang[i] = c; } lang[i] = '\0'; if (!FcLangSetAdd (ls, lang)) goto bail1; if (c == '\0') break; } return ls; bail1: FcLangSetDestroy (ls); bail0: return 0; } FcBool FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls) { int i, bit, count; FcChar32 bits; FcBool first = FcTrue; count = FC_MIN (ls->map_size, NUM_LANG_SET_MAP); for (i = 0; i < count; i++) { if ((bits = ls->map[i])) { for (bit = 0; bit <= 31; bit++) if (bits & (1U << bit)) { int id = (i << 5) | bit; if (!first) if (!FcStrBufChar (buf, '|')) return FcFalse; if (!FcStrBufString (buf, fcLangCharSets[fcLangCharSetIndicesInv[id]].lang)) return FcFalse; first = FcFalse; } } } if (ls->extra) { FcStrList *list = FcStrListCreate (ls->extra); FcChar8 *extra; if (!list) return FcFalse; while ((extra = FcStrListNext (list))) { if (!first) if (!FcStrBufChar (buf, '|')) { FcStrListDone (list); return FcFalse; } if (!FcStrBufString (buf, extra)) { FcStrListDone (list); return FcFalse; } first = FcFalse; } FcStrListDone (list); } return FcTrue; } FcBool FcLangSetEqual (const FcLangSet *lsa, const FcLangSet *lsb) { int i, count; count = FC_MIN (lsa->map_size, lsb->map_size); count = FC_MIN (NUM_LANG_SET_MAP, count); for (i = 0; i < count; i++) { if (lsa->map[i] != lsb->map[i]) return FcFalse; } if (!lsa->extra && !lsb->extra) return FcTrue; if (lsa->extra && lsb->extra) return FcStrSetEqual (lsa->extra, lsb->extra); return FcFalse; } static FcBool FcLangSetContainsLang (const FcLangSet *ls, const FcChar8 *lang) { int id; int i; id = FcLangSetIndex (lang); if (id < 0) id = -id - 1; else if (FcLangSetBitGet (ls, id)) return FcTrue; /* * search up and down among equal languages for a match */ for (i = id - 1; i >= 0; i--) { if (FcLangCompare (fcLangCharSets[i].lang, lang) == FcLangDifferentLang) break; if (FcLangSetBitGet (ls, i) && FcLangContains (fcLangCharSets[i].lang, lang)) return FcTrue; } for (i = id; i < NUM_LANG_CHAR_SET; i++) { if (FcLangCompare (fcLangCharSets[i].lang, lang) == FcLangDifferentLang) break; if (FcLangSetBitGet (ls, i) && FcLangContains (fcLangCharSets[i].lang, lang)) return FcTrue; } if (ls->extra) { FcStrList *list = FcStrListCreate (ls->extra); FcChar8 *extra; if (list) { while ((extra = FcStrListNext (list))) { if (FcLangContains (extra, lang)) break; } FcStrListDone (list); if (extra) return FcTrue; } } return FcFalse; } /* * return FcTrue if lsa contains every language in lsb */ FcBool FcLangSetContains (const FcLangSet *lsa, const FcLangSet *lsb) { int i, j, count; FcChar32 missing; if (FcDebug() & FC_DBG_MATCHV) { printf ("FcLangSet "); FcLangSetPrint (lsa); printf (" contains "); FcLangSetPrint (lsb); printf ("\n"); } /* * check bitmaps for missing language support */ count = FC_MIN (lsa->map_size, lsb->map_size); count = FC_MIN (NUM_LANG_SET_MAP, count); for (i = 0; i < count; i++) { missing = lsb->map[i] & ~lsa->map[i]; if (missing) { for (j = 0; j < 32; j++) if (missing & (1U << j)) { if (!FcLangSetContainsLang (lsa, fcLangCharSets[fcLangCharSetIndicesInv[i * 32 + j]].lang)) { if (FcDebug() & FC_DBG_MATCHV) printf ("\tMissing bitmap %s\n", fcLangCharSets[fcLangCharSetIndicesInv[i * 32 + j]].lang); return FcFalse; } } } } if (lsb->extra) { FcStrList *list = FcStrListCreate (lsb->extra); FcChar8 *extra; if (list) { while ((extra = FcStrListNext (list))) { if (!FcLangSetContainsLang (lsa, extra)) { if (FcDebug() & FC_DBG_MATCHV) printf ("\tMissing string %s\n", extra); break; } } FcStrListDone (list); if (extra) return FcFalse; } } return FcTrue; } FcBool FcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l) { if (!FcSerializeAlloc (serialize, l, sizeof (FcLangSet))) return FcFalse; return FcTrue; } FcLangSet * FcLangSetSerialize (FcSerialize *serialize, const FcLangSet *l) { FcLangSet *l_serialize = FcSerializePtr (serialize, l); if (!l_serialize) return NULL; memset (l_serialize->map, '\0', sizeof (l_serialize->map)); memcpy (l_serialize->map, l->map, FC_MIN (sizeof (l_serialize->map), l->map_size * sizeof (l->map[0]))); l_serialize->map_size = NUM_LANG_SET_MAP; l_serialize->extra = NULL; /* We don't serialize ls->extra */ return l_serialize; } FcStrSet * FcLangSetGetLangs (const FcLangSet *ls) { FcStrSet *langs; int i; langs = FcStrSetCreate(); if (!langs) return 0; for (i = 0; i < NUM_LANG_CHAR_SET; i++) if (FcLangSetBitGet (ls, i)) FcStrSetAdd (langs, fcLangCharSets[i].lang); if (ls->extra) { FcStrList *list = FcStrListCreate (ls->extra); FcChar8 *extra; if (list) { while ((extra = FcStrListNext (list))) FcStrSetAdd (langs, extra); FcStrListDone (list); } } return langs; } static FcLangSet * FcLangSetOperate (const FcLangSet *a, const FcLangSet *b, FcBool (*func) (FcLangSet *ls, const FcChar8 *s)) { FcLangSet *langset = FcLangSetCopy (a); FcStrSet *set = FcLangSetGetLangs (b); FcStrList *sl = FcStrListCreate (set); FcChar8 *str; FcStrSetDestroy (set); while ((str = FcStrListNext (sl))) { func (langset, str); } FcStrListDone (sl); return langset; } FcLangSet * FcLangSetUnion (const FcLangSet *a, const FcLangSet *b) { return FcLangSetOperate (a, b, FcLangSetAdd); } FcLangSet * FcLangSetSubtract (const FcLangSet *a, const FcLangSet *b) { return FcLangSetOperate (a, b, FcLangSetDel); } FcBool FcLangIsExclusive (const FcChar8 *lang) { int i; for (i = 0; i < NUM_CODE_PAGE_RANGE; i++) { if (FcLangCompare (lang, FcCodePageRange[i].lang) == FcLangEqual) return FcTrue; } return FcFalse; } const FcChar8 * FcLangIsExclusiveFromOs2 (unsigned long os2ulUnicodeRange1, unsigned long os2ulUnicodeRange2) { unsigned int i; const FcChar8 *exclusiveLang = 0; for (i = 0; i < NUM_CODE_PAGE_RANGE; i++) { unsigned long bits; int bit; if (FcCodePageRange[i].bit < 32) { bits = os2ulUnicodeRange1; bit = FcCodePageRange[i].bit; } else { bits = os2ulUnicodeRange2; bit = FcCodePageRange[i].bit - 32; } if (bits & (1U << bit)) { /* * If the font advertises support for multiple * "exclusive" languages, then include support * for any language found to have coverage */ if (exclusiveLang) { exclusiveLang = 0; break; } exclusiveLang = FcCodePageRange[i].lang; } } return exclusiveLang; } #define __fclang__ #include "fcaliastail.h" #include "fcftaliastail.h" #undef __fclang__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fclist.c000066400000000000000000000340061503113465200236140ustar00rootroot00000000000000/* * fontconfig/src/fclist.c * * Copyright © 2000 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" #include FcObjectSet * FcObjectSetCreate (void) { FcObjectSet *os; os = (FcObjectSet *)malloc (sizeof (FcObjectSet)); if (!os) return 0; os->nobject = 0; os->sobject = 0; os->objects = 0; return os; } FcBool FcObjectSetAdd (FcObjectSet *os, const char *object) { int s; const char **objects; int high, low, mid, c; if (os->nobject == os->sobject) { s = os->sobject + 4; if (os->objects) objects = (const char **)realloc ((void *)os->objects, s * sizeof (const char *)); else objects = (const char **)malloc (s * sizeof (const char *)); if (!objects) return FcFalse; os->objects = objects; os->sobject = s; } high = os->nobject - 1; low = 0; mid = 0; c = 1; object = strdup (object); while (low <= high) { mid = (low + high) >> 1; c = os->objects[mid] - object; if (c == 0) { FcFree (object); return FcTrue; } if (c < 0) low = mid + 1; else high = mid - 1; } if (c < 0) mid++; memmove (os->objects + mid + 1, os->objects + mid, (os->nobject - mid) * sizeof (const char *)); os->objects[mid] = object; os->nobject++; return FcTrue; } void FcObjectSetDestroy (FcObjectSet *os) { int i; if (os) { if (os->objects) { for (i = 0; i < os->nobject; i++) FcFree (os->objects[i]); free ((void *)os->objects); } free (os); } } FcObjectSet * FcObjectSetVaBuild (const char *first, va_list va) { FcObjectSet *ret; FcObjectSetVapBuild (ret, first, va); return ret; } FcObjectSet * FcObjectSetBuild (const char *first, ...) { va_list va; FcObjectSet *os; va_start (va, first); FcObjectSetVapBuild (os, first, va); va_end (va); return os; } /* * Font must have a containing value for every value in the pattern */ static FcBool FcListValueListMatchAny (FcValueListPtr patOrig, /* pattern */ FcValueListPtr fntOrig) /* font */ { FcValueListPtr pat, fnt; for (pat = patOrig; pat != NULL; pat = FcValueListNext (pat)) { for (fnt = fntOrig; fnt != NULL; fnt = FcValueListNext (fnt)) { /* * make sure the font 'contains' the pattern. * (OpListing is OpContains except for strings * where it requires an exact match) */ if (FcConfigCompareValue (&fnt->value, FC_OP (FcOpListing, FcOpFlagIgnoreBlanks), &pat->value)) break; } if (fnt == NULL) return FcFalse; } return FcTrue; } static FcBool FcListValueListEqual (FcValueListPtr v1orig, FcValueListPtr v2orig) { FcValueListPtr v1, v2; for (v1 = v1orig; v1 != NULL; v1 = FcValueListNext (v1)) { for (v2 = v2orig; v2 != NULL; v2 = FcValueListNext (v2)) if (FcValueEqual (FcValueCanonicalize (&(v1)->value), FcValueCanonicalize (&(v2)->value))) break; if (v2 == NULL) return FcFalse; } for (v2 = v2orig; v2 != NULL; v2 = FcValueListNext (v2)) { for (v1 = v1orig; v1 != NULL; v1 = FcValueListNext (v1)) if (FcValueEqual (FcValueCanonicalize (&v1->value), FcValueCanonicalize (&v2->value))) break; if (v1 == NULL) return FcFalse; } return FcTrue; } static FcBool FcListPatternEqual (FcPattern *p1, FcPattern *p2, FcObjectSet *os) { int i; FcPatternElt *e1, *e2; for (i = 0; i < os->nobject; i++) { e1 = FcPatternObjectFindElt (p1, FcObjectFromName (os->objects[i])); e2 = FcPatternObjectFindElt (p2, FcObjectFromName (os->objects[i])); if (!e1 && !e2) continue; if (!e1 || !e2) return FcFalse; if (!FcListValueListEqual (FcPatternEltValues (e1), FcPatternEltValues (e2))) return FcFalse; } return FcTrue; } /* * FcTrue iff all objects in "p" match "font" */ FcBool FcListPatternMatchAny (const FcPattern *p, const FcPattern *font) { int i; if (!p) return FcFalse; for (i = 0; i < p->num; i++) { FcPatternElt *pe = &FcPatternElts (p)[i]; FcPatternElt *fe; if (pe->object == FC_NAMELANG_OBJECT) { /* "namelang" object is the alias object to change "familylang", * "stylelang" and "fullnamelang" object all together. it won't be * available on the font pattern. so checking its availability * causes no results. we should ignore it here. */ continue; } fe = FcPatternObjectFindElt (font, pe->object); if (!fe) return FcFalse; if (!FcListValueListMatchAny (FcPatternEltValues (pe), /* pat elts */ FcPatternEltValues (fe))) /* font elts */ return FcFalse; } return FcTrue; } static FcChar32 FcListMatrixHash (const FcMatrix *m) { int xx = (int)(m->xx * 100), xy = (int)(m->xy * 100), yx = (int)(m->yx * 100), yy = (int)(m->yy * 100); return ((FcChar32)xx) ^ ((FcChar32)xy) ^ ((FcChar32)yx) ^ ((FcChar32)yy); } static FcChar32 FcListValueHash (FcValue *value) { FcValue v = FcValueCanonicalize (value); switch (v.type) { case FcTypeUnknown: case FcTypeVoid: return 0; case FcTypeInteger: return (FcChar32)v.u.i; case FcTypeDouble: return (FcChar32)(int)v.u.d; case FcTypeString: return FcStrHashIgnoreCase (v.u.s); case FcTypeBool: return (FcChar32)v.u.b; case FcTypeMatrix: return FcListMatrixHash (v.u.m); case FcTypeCharSet: return FcCharSetCount (v.u.c); case FcTypeFTFace: return (intptr_t)v.u.f; case FcTypeLangSet: return FcLangSetHash (v.u.l); case FcTypeRange: return FcRangeHash (v.u.r); } return 0; } static FcChar32 FcListValueListHash (FcValueListPtr list) { FcChar32 h = 0; while (list != NULL) { h = h ^ FcListValueHash (&list->value); list = FcValueListNext (list); } return h; } static FcChar32 FcListPatternHash (FcPattern *font, FcObjectSet *os) { int n; FcPatternElt *e; FcChar32 h = 0; for (n = 0; n < os->nobject; n++) { e = FcPatternObjectFindElt (font, FcObjectFromName (os->objects[n])); if (e) h = h ^ FcListValueListHash (FcPatternEltValues (e)); } return h; } typedef struct _FcListBucket { struct _FcListBucket *next; FcChar32 hash; FcPattern *pattern; } FcListBucket; #define FC_LIST_HASH_SIZE 4099 typedef struct _FcListHashTable { int entries; FcListBucket *buckets[FC_LIST_HASH_SIZE]; } FcListHashTable; static void FcListHashTableInit (FcListHashTable *table) { table->entries = 0; memset (table->buckets, '\0', sizeof (table->buckets)); } static void FcListHashTableCleanup (FcListHashTable *table) { int i; FcListBucket *bucket, *next; for (i = 0; i < FC_LIST_HASH_SIZE; i++) { for (bucket = table->buckets[i]; bucket; bucket = next) { next = bucket->next; FcPatternDestroy (bucket->pattern); free (bucket); } table->buckets[i] = 0; } table->entries = 0; } static int FcGetDefaultObjectLangIndex (FcPattern *font, FcObject object, const FcChar8 *lang) { FcPatternElt *e = FcPatternObjectFindElt (font, object); FcValueListPtr v; FcValue value; int idx = -1; int defidx = -1; int i; if (e) { for (v = FcPatternEltValues (e), i = 0; v; v = FcValueListNext (v), ++i) { value = FcValueCanonicalize (&v->value); if (value.type == FcTypeString) { FcLangResult res = FcLangCompare (value.u.s, lang); if (res == FcLangEqual) return i; if (res == FcLangDifferentCountry && idx < 0) idx = i; if (defidx < 0) { /* workaround for fonts that has non-English value * at the head of values. */ res = FcLangCompare (value.u.s, (FcChar8 *)"en"); if (res == FcLangEqual) defidx = i; } } } } return (idx > 0) ? idx : (defidx > 0) ? defidx : 0; } static FcBool FcListAppend (FcListHashTable *table, FcPattern *font, FcObjectSet *os, const FcChar8 *lang) { int o; FcPatternElt *e; FcValueListPtr v; FcChar32 hash; FcListBucket **prev, *bucket; int familyidx = -1; int fullnameidx = -1; int styleidx = -1; int defidx = 0; int idx; hash = FcListPatternHash (font, os); for (prev = &table->buckets[hash % FC_LIST_HASH_SIZE]; (bucket = *prev); prev = &(bucket->next)) { if (bucket->hash == hash && FcListPatternEqual (bucket->pattern, font, os)) return FcTrue; } bucket = (FcListBucket *)malloc (sizeof (FcListBucket)); if (!bucket) goto bail0; bucket->next = 0; bucket->hash = hash; bucket->pattern = FcPatternCreate(); if (!bucket->pattern) goto bail1; for (o = 0; o < os->nobject; o++) { if (!strcmp (os->objects[o], FC_FAMILY) || !strcmp (os->objects[o], FC_FAMILYLANG)) { if (familyidx < 0) familyidx = FcGetDefaultObjectLangIndex (font, FC_FAMILYLANG_OBJECT, lang); defidx = familyidx; } else if (!strcmp (os->objects[o], FC_FULLNAME) || !strcmp (os->objects[o], FC_FULLNAMELANG)) { if (fullnameidx < 0) fullnameidx = FcGetDefaultObjectLangIndex (font, FC_FULLNAMELANG_OBJECT, lang); defidx = fullnameidx; } else if (!strcmp (os->objects[o], FC_STYLE) || !strcmp (os->objects[o], FC_STYLELANG)) { if (styleidx < 0) styleidx = FcGetDefaultObjectLangIndex (font, FC_STYLELANG_OBJECT, lang); defidx = styleidx; } else defidx = 0; e = FcPatternObjectFindElt (font, FcObjectFromName (os->objects[o])); if (e) { for (v = FcPatternEltValues (e), idx = 0; v; v = FcValueListNext (v), ++idx) { if (!FcPatternAdd (bucket->pattern, os->objects[o], FcValueCanonicalize (&v->value), defidx != idx)) goto bail2; } } } *prev = bucket; ++table->entries; return FcTrue; bail2: FcPatternDestroy (bucket->pattern); bail1: free (bucket); bail0: return FcFalse; } FcFontSet * FcFontSetList (FcConfig *config, FcFontSet **sets, int nsets, FcPattern *p, FcObjectSet *os) { FcFontSet *ret; FcFontSet *s; int f; int set; FcListHashTable table; int i; FcListBucket *bucket; int destroy_os = 0; if (!config) { if (!FcInitBringUptoDate()) goto bail0; } config = FcConfigReference (config); if (!config) goto bail0; FcListHashTableInit (&table); if (!os) { os = FcObjectGetSet(); destroy_os = 1; } /* * Walk all available fonts adding those that * match to the hash table */ for (set = 0; set < nsets; set++) { s = sets[set]; if (!s) continue; for (f = 0; f < s->nfont; f++) if (FcListPatternMatchAny (p, /* pattern */ s->fonts[f])) /* font */ { FcChar8 *lang; if (FcPatternObjectGetString (p, FC_NAMELANG_OBJECT, 0, &lang) != FcResultMatch) { lang = FcConfigGetDefaultLang (config); } if (!FcListAppend (&table, s->fonts[f], os, lang)) goto bail1; } } #if 0 { int max = 0; int full = 0; int ents = 0; int len; for (i = 0; i < FC_LIST_HASH_SIZE; i++) { if ((bucket = table.buckets[i])) { len = 0; for (; bucket; bucket = bucket->next) { ents++; len++; } if (len > max) max = len; full++; } } printf ("used: %d max: %d avg: %g\n", full, max, (double) ents / FC_LIST_HASH_SIZE); } #endif /* * Walk the hash table and build * a font set */ ret = FcFontSetCreate(); if (!ret) goto bail1; for (i = 0; i < FC_LIST_HASH_SIZE; i++) while ((bucket = table.buckets[i])) { if (!FcFontSetAdd (ret, bucket->pattern)) goto bail2; table.buckets[i] = bucket->next; free (bucket); } if (destroy_os) FcObjectSetDestroy (os); FcConfigDestroy (config); return ret; bail2: FcFontSetDestroy (ret); bail1: FcListHashTableCleanup (&table); FcConfigDestroy (config); bail0: if (destroy_os) FcObjectSetDestroy (os); return 0; } FcFontSet * FcFontList (FcConfig *config, FcPattern *p, FcObjectSet *os) { FcFontSet *sets[2], *ret; int nsets; if (!config) { if (!FcInitBringUptoDate()) return 0; } config = FcConfigReference (config); if (!config) return NULL; nsets = 0; if (config->fonts[FcSetSystem]) sets[nsets++] = config->fonts[FcSetSystem]; if (config->fonts[FcSetApplication]) sets[nsets++] = config->fonts[FcSetApplication]; ret = FcFontSetList (config, sets, nsets, p, os); FcConfigDestroy (config); return ret; } #define __fclist__ #include "fcaliastail.h" #undef __fclist__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcmatch.c000066400000000000000000001011131503113465200237270ustar00rootroot00000000000000/* * fontconfig/src/fcmatch.c * * Copyright © 2000 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" static double FcCompareNumber (const FcValue *value1, const FcValue *value2, FcValue *bestValue) { double v1, v2, v; switch ((int)value1->type) { case FcTypeInteger: v1 = (double)value1->u.i; break; case FcTypeDouble: v1 = value1->u.d; break; default: return -1.0; } switch ((int)value2->type) { case FcTypeInteger: v2 = (double)value2->u.i; break; case FcTypeDouble: v2 = value2->u.d; break; default: return -1.0; } v = v2 - v1; if (v < 0) v = -v; *bestValue = FcValueCanonicalize (value2); return v; } static double FcCompareString (const FcValue *v1, const FcValue *v2, FcValue *bestValue) { *bestValue = FcValueCanonicalize (v2); return (double)FcStrCmpIgnoreCase (FcValueString (v1), FcValueString (v2)) != 0; } static double FcCompareFamily (const FcValue *v1, const FcValue *v2, FcValue *bestValue) { /* rely on the guarantee in FcPatternObjectAddWithBinding that * families are always FcTypeString. */ const FcChar8 *v1_string = FcValueString (v1); const FcChar8 *v2_string = FcValueString (v2); *bestValue = FcValueCanonicalize (v2); if (FcToLower (*v1_string) != FcToLower (*v2_string) && *v1_string != ' ' && *v2_string != ' ') return 1.0; return (double)FcStrCmpIgnoreBlanksAndCase (v1_string, v2_string) != 0; } static double FcComparePostScript (const FcValue *v1, const FcValue *v2, FcValue *bestValue) { const FcChar8 *v1_string = FcValueString (v1); const FcChar8 *v2_string = FcValueString (v2); int n; size_t len1, len2, mlen; *bestValue = FcValueCanonicalize (v2); if (FcToLower (*v1_string) != FcToLower (*v2_string) && *v1_string != ' ' && *v2_string != ' ') return 1.0; n = FcStrMatchIgnoreCaseAndDelims (v1_string, v2_string, (const FcChar8 *)" -,"); len1 = strlen ((const char *)v1_string); len2 = strlen ((const char *)v2_string); mlen = FC_MAX (len1, len2); return (double)(mlen - n) / (double)mlen; } static double FcCompareLang (const FcValue *v1, const FcValue *v2, FcValue *bestValue) { FcLangResult result; switch ((int)v1->type) { case FcTypeLangSet: switch ((int)v2->type) { case FcTypeLangSet: result = FcLangSetCompare (FcValueLangSet (v1), FcValueLangSet (v2)); break; case FcTypeString: result = FcLangSetHasLang (FcValueLangSet (v1), FcValueString (v2)); break; default: return -1.0; } break; case FcTypeString: switch ((int)v2->type) { case FcTypeLangSet: result = FcLangSetHasLang (FcValueLangSet (v2), FcValueString (v1)); break; case FcTypeString: result = FcLangCompare (FcValueString (v1), FcValueString (v2)); break; default: return -1.0; } break; default: return -1.0; } *bestValue = FcValueCanonicalize (v2); switch (result) { case FcLangEqual: return 0; case FcLangDifferentCountry: return 1; case FcLangDifferentLang: default: return 2; } } static double FcCompareBool (const FcValue *v1, const FcValue *v2, FcValue *bestValue) { if (v2->type != FcTypeBool || v1->type != FcTypeBool) return -1.0; bestValue->type = FcTypeBool; if (v2->u.b != FcDontCare) bestValue->u.b = v2->u.b; else bestValue->u.b = v1->u.b; return (double)((v2->u.b ^ v1->u.b) == 1); } static double FcCompareCharSet (const FcValue *v1, const FcValue *v2, FcValue *bestValue) { *bestValue = FcValueCanonicalize (v2); /* TODO Improve. */ return (double)FcCharSetSubtractCount (FcValueCharSet (v1), FcValueCharSet (v2)); } static double FcCompareRange (const FcValue *v1, const FcValue *v2, FcValue *bestValue) { FcValue value1 = FcValueCanonicalize (v1); FcValue value2 = FcValueCanonicalize (v2); double b1, e1, b2, e2, d; switch ((int)value1.type) { case FcTypeInteger: b1 = e1 = value1.u.i; break; case FcTypeDouble: b1 = e1 = value1.u.d; break; case FcTypeRange: b1 = value1.u.r->begin; e1 = value1.u.r->end; break; default: return -1; } switch ((int)value2.type) { case FcTypeInteger: b2 = e2 = value2.u.i; break; case FcTypeDouble: b2 = e2 = value2.u.d; break; case FcTypeRange: b2 = value2.u.r->begin; e2 = value2.u.r->end; break; default: return -1; } if (e1 < b2) d = b2; else if (e2 < b1) d = e2; else d = (FC_MAX (b1, b2) + FC_MIN (e1, e2)) * .5; bestValue->type = FcTypeDouble; bestValue->u.d = d; /* If the ranges overlap, it's a match, otherwise return closest distance. */ if (e1 < b2 || e2 < b1) return FC_MIN (fabs (b2 - e1), fabs (b1 - e2)); else return 0.0; } static double FcCompareSize (const FcValue *v1, const FcValue *v2, FcValue *bestValue) { FcValue value1 = FcValueCanonicalize (v1); FcValue value2 = FcValueCanonicalize (v2); double b1, e1, b2, e2; switch ((int)value1.type) { case FcTypeInteger: b1 = e1 = value1.u.i; break; case FcTypeDouble: b1 = e1 = value1.u.d; break; case FcTypeRange: b1 = value1.u.r->begin; e1 = value1.u.r->end; break; default: return -1; } switch ((int)value2.type) { case FcTypeInteger: b2 = e2 = value2.u.i; break; case FcTypeDouble: b2 = e2 = value2.u.d; break; case FcTypeRange: b2 = value2.u.r->begin; e2 = value2.u.r->end; break; default: return -1; } bestValue->type = FcTypeDouble; bestValue->u.d = (b1 + e1) * .5; /* If the ranges overlap, it's a match, otherwise return closest distance. */ if (e1 < b2 || e2 < b1) return FC_MIN (fabs (b2 - e1), fabs (b1 - e2)); if (b2 != e2 && b1 == e2) /* Semi-closed interval. */ return 1e-15; else return 0.0; } static double FcCompareFilename (const FcValue *v1, const FcValue *v2, FcValue *bestValue) { const FcChar8 *s1 = FcValueString (v1), *s2 = FcValueString (v2); *bestValue = FcValueCanonicalize (v2); if (FcStrCmp (s1, s2) == 0) return 0.0; else if (FcStrCmpIgnoreCase (s1, s2) == 0) return 1.0; else if (FcStrGlobMatch (s1, s2)) return 2.0; else return 3.0; } /* Define priorities to -1 for objects that don't have a compare function. */ #define PRI_NULL(n) \ PRI_##n##_STRONG = -1, \ PRI_##n##_WEAK = -1, #define PRI1(n) #define PRI_FcCompareFamily(n) PRI1 (n) #define PRI_FcCompareString(n) PRI1 (n) #define PRI_FcCompareNumber(n) PRI1 (n) #define PRI_FcCompareBool(n) PRI1 (n) #define PRI_FcCompareFilename(n) PRI1 (n) #define PRI_FcCompareCharSet(n) PRI1 (n) #define PRI_FcCompareLang(n) PRI1 (n) #define PRI_FcComparePostScript(n) PRI1 (n) #define PRI_FcCompareRange(n) PRI1 (n) #define PRI_FcCompareSize(n) PRI1 (n) #define FC_OBJECT(NAME, Type, Cmp) PRI_##Cmp (NAME) typedef enum _FcMatcherPriorityDummy { #include "fcobjs.h" } FcMatcherPriorityDummy; #undef FC_OBJECT /* Canonical match priority order. */ #undef PRI1 #define PRI1(n) \ PRI_##n, \ PRI_##n##_STRONG = PRI_##n, \ PRI_##n##_WEAK = PRI_##n typedef enum _FcMatcherPriority { PRI1 (FILE), PRI1 (FONT_WRAPPER), PRI1 (FONTFORMAT), PRI1 (VARIABLE), PRI1 (NAMED_INSTANCE), PRI1 (SCALABLE), PRI1 (COLOR), PRI1 (FOUNDRY), PRI1 (CHARSET), PRI_FAMILY_STRONG, PRI_POSTSCRIPT_NAME_STRONG, PRI1 (LANG), PRI_FAMILY_WEAK, PRI_POSTSCRIPT_NAME_WEAK, PRI1 (SYMBOL), PRI1 (SPACING), PRI1 (SIZE), PRI1 (PIXEL_SIZE), PRI1 (STYLE), PRI1 (SLANT), PRI1 (WEIGHT), PRI1 (WIDTH), PRI1 (FONT_HAS_HINT), PRI1 (DECORATIVE), PRI1 (ANTIALIAS), PRI1 (RASTERIZER), PRI1 (OUTLINE), PRI1 (ORDER), PRI1 (FONTVERSION), PRI_END } FcMatcherPriority; #undef PRI1 typedef struct _FcMatcher { FcObject object; double (*compare) (const FcValue *v1, const FcValue *v2, FcValue *bestValue); int strong, weak; } FcMatcher; /* * Order is significant, it defines the precedence of * each value, earlier values are more significant than * later values */ #define FC_OBJECT(NAME, Type, Cmp) { FC_##NAME##_OBJECT, Cmp, PRI_##NAME##_STRONG, PRI_##NAME##_WEAK }, static const FcMatcher _FcMatchers[] = { { FC_INVALID_OBJECT, NULL, -1, -1 }, #include "fcobjs.h" }; #undef FC_OBJECT static const FcMatcher * FcObjectToMatcher (FcObject object, FcBool include_lang) { if (include_lang) { switch (object) { case FC_FAMILYLANG_OBJECT: case FC_STYLELANG_OBJECT: case FC_FULLNAMELANG_OBJECT: object = FC_LANG_OBJECT; break; } } if (object > FC_MAX_BASE_OBJECT || !_FcMatchers[object].compare || _FcMatchers[object].strong == -1 || _FcMatchers[object].weak == -1) return NULL; return _FcMatchers + object; } static FcBool FcCompareValueList (FcObject object, const FcMatcher *match, FcValueListPtr v1orig, /* pattern */ FcValueListPtr v2orig, /* target */ FcValue *bestValue, double *value, int *n, FcResult *result) { FcValueListPtr v1, v2; double v, best, bestStrong, bestWeak; int j, k, pos = 0; int weak, strong; if (!match) { if (bestValue) *bestValue = FcValueCanonicalize (&v2orig->value); if (n) *n = 0; return FcTrue; } weak = match->weak; strong = match->strong; best = 1e99; bestStrong = 1e99; bestWeak = 1e99; for (v1 = v1orig, j = 0; v1; v1 = FcValueListNext (v1), j++) { for (v2 = v2orig, k = 0; v2; v2 = FcValueListNext (v2), k++) { FcValue matchValue; v = (match->compare) (&v1->value, &v2->value, &matchValue); if (v < 0) { *result = FcResultTypeMismatch; return FcFalse; } v = v * 1000 + j * 100 + k * (v2->value.type == FcTypeString ? 1 : 0); if (v < best) { if (bestValue) *bestValue = matchValue; best = v; pos = k; } if (weak == strong) { /* found the best possible match */ if (best < 1000) goto done; } else if (v1->binding == FcValueBindingStrong) { if (v < bestStrong) bestStrong = v; } else { if (v < bestWeak) bestWeak = v; } } } done: if (FcDebug() & FC_DBG_MATCHV) { printf (" %s: %g ", FcObjectName (object), best); FcValueListPrint (v1orig); printf (", "); FcValueListPrint (v2orig); printf ("\n"); } if (value) { if (weak == strong) value[strong] += best; else { value[weak] += bestWeak; value[strong] += bestStrong; } } if (n) *n = pos; return FcTrue; } /* The bulk of the time in FcFontMatch and FcFontSort goes to * walking long lists of family names. We speed this up with a * hash table. */ typedef struct { double strong_value; double weak_value; } FamilyEntry; typedef struct { FcHashTable *family_hash; } FcCompareData; static void FcCompareDataClear (FcCompareData *data) { FcHashTableDestroy (data->family_hash); } static void FcCompareDataInit (FcPattern *pat, FcCompareData *data) { FcHashTable *table; FcPatternElt *elt; FcValueListPtr l; int i; const void *key; FamilyEntry *e; table = FcHashTableCreate ((FcHashFunc)FcStrHashIgnoreBlanksAndCase, (FcCompareFunc)FcStrCmpIgnoreBlanksAndCase, NULL, NULL, NULL, free); elt = FcPatternObjectFindElt (pat, FC_FAMILY_OBJECT); if (elt) { for (l = FcPatternEltValues (elt), i = 0; l; l = FcValueListNext (l), i++) { key = FcValueString (&l->value); if (!FcHashTableFind (table, key, (void **)&e)) { e = malloc (sizeof (FamilyEntry)); e->strong_value = 1e99; e->weak_value = 1e99; FcHashTableAdd (table, (void *)key, e); } if (l->binding == FcValueBindingWeak) { if (i < e->weak_value) e->weak_value = i; } else { if (i < e->strong_value) e->strong_value = i; } } } data->family_hash = table; } static FcBool FcCompareFamilies (FcPattern *pat, FcValueListPtr v1orig, FcPattern *fnt, FcValueListPtr v2orig, double *value, FcResult *result, FcHashTable *table) { FcValueListPtr v2; double strong_value; double weak_value; const void *key; FamilyEntry *e; assert (table != NULL); strong_value = 1e99; weak_value = 1e99; for (v2 = v2orig; v2; v2 = FcValueListNext (v2)) { key = FcValueString (&v2->value); if (FcHashTableFind (table, key, (void **)&e)) { if (e->strong_value < strong_value) strong_value = e->strong_value; if (e->weak_value < weak_value) weak_value = e->weak_value; } } if (FcDebug() & FC_DBG_MATCHV) { printf ("%s: %g (%g) ", FcObjectName (FC_FAMILY_OBJECT), strong_value, weak_value); FcValueListPrint (v1orig); printf (", "); FcValueListPrint (v2orig); printf ("\n"); } value[PRI_FAMILY_STRONG] = strong_value; value[PRI_FAMILY_WEAK] = weak_value; return FcTrue; } /* * Return a value indicating the distance between the two lists of * values */ static FcBool FcCompare (FcPattern *pat, FcPattern *fnt, double *value, FcResult *result, FcCompareData *data) { int i, i1, i2; for (i = 0; i < PRI_END; i++) value[i] = 0.0; i1 = 0; i2 = 0; while (i1 < pat->num && i2 < fnt->num) { FcPatternElt *elt_i1 = &FcPatternElts (pat)[i1]; FcPatternElt *elt_i2 = &FcPatternElts (fnt)[i2]; i = FcObjectCompare (elt_i1->object, elt_i2->object); if (i > 0) i2++; else if (i < 0) i1++; else if (elt_i1->object == FC_FAMILY_OBJECT && data->family_hash) { if (!FcCompareFamilies (pat, FcPatternEltValues (elt_i1), fnt, FcPatternEltValues (elt_i2), value, result, data->family_hash)) return FcFalse; i1++; i2++; } else { const FcMatcher *match = FcObjectToMatcher (elt_i1->object, FcFalse); if (!FcCompareValueList (elt_i1->object, match, FcPatternEltValues (elt_i1), FcPatternEltValues (elt_i2), NULL, value, NULL, result)) return FcFalse; i1++; i2++; } } return FcTrue; } FcPattern * FcFontRenderPrepare (FcConfig *config, FcPattern *pat, FcPattern *font) { FcPattern *newp; int i; FcPatternElt *fe, *pe; FcValue v; FcResult result; FcBool variable = FcFalse; FcStrBuf variations; assert (pat != NULL); assert (font != NULL); FcPatternObjectGetBool (font, FC_VARIABLE_OBJECT, 0, &variable); assert (variable != FcDontCare); if (variable) FcStrBufInit (&variations, NULL, 0); newp = FcPatternCreate(); if (!newp) return NULL; for (i = 0; i < font->num; i++) { fe = &FcPatternElts (font)[i]; if (fe->object == FC_FAMILYLANG_OBJECT || fe->object == FC_STYLELANG_OBJECT || fe->object == FC_FULLNAMELANG_OBJECT) { /* ignore those objects. we need to deal with them * another way */ continue; } if (fe->object == FC_FAMILY_OBJECT || fe->object == FC_STYLE_OBJECT || fe->object == FC_FULLNAME_OBJECT) { FcPatternElt *fel, *pel; FC_ASSERT_STATIC ((FC_FAMILY_OBJECT + 1) == FC_FAMILYLANG_OBJECT); FC_ASSERT_STATIC ((FC_STYLE_OBJECT + 1) == FC_STYLELANG_OBJECT); FC_ASSERT_STATIC ((FC_FULLNAME_OBJECT + 1) == FC_FULLNAMELANG_OBJECT); fel = FcPatternObjectFindElt (font, fe->object + 1); pel = FcPatternObjectFindElt (pat, fe->object + 1); if (fel && pel) { /* The font has name languages, and pattern asks for specific language(s). * Match on language and and prefer that result. * Note: Currently the code only give priority to first matching language. */ int n = 1, j; FcValueListPtr l1, l2, ln = NULL, ll = NULL; const FcMatcher *match = FcObjectToMatcher (pel->object, FcTrue); if (!FcCompareValueList (pel->object, match, FcPatternEltValues (pel), FcPatternEltValues (fel), NULL, NULL, &n, &result)) { FcPatternDestroy (newp); return NULL; } for (j = 0, l1 = FcPatternEltValues (fe), l2 = FcPatternEltValues (fel); l1 != NULL || l2 != NULL; j++, l1 = l1 ? FcValueListNext (l1) : NULL, l2 = l2 ? FcValueListNext (l2) : NULL) { FcValueListPtr (*func) (FcValueListPtr, FcValue, FcValueBinding); FcValueBinding binding = FcValueBindingEnd; if (j == n) { binding = FcValueBindingStrong; func = FcValueListPrepend; } else func = FcValueListAppend; if (l1) { ln = func (ln, FcValueCanonicalize (&l1->value), l1->binding); } if (l2) { if (binding == FcValueBindingEnd) binding = l2->binding; ll = func (ll, FcValueCanonicalize (&l2->value), binding); } } FcPatternObjectListAdd (newp, fe->object, ln, FcFalse); FcPatternObjectListAdd (newp, fel->object, ll, FcFalse); continue; } else if (fel) { /* Pattern doesn't ask for specific language. Copy all for name and * lang. */ FcValueListPtr l1, l2; l1 = FcValueListDuplicate (FcPatternEltValues (fe)); l2 = FcValueListDuplicate (FcPatternEltValues (fel)); FcPatternObjectListAdd (newp, fe->object, l1, FcFalse); FcPatternObjectListAdd (newp, fel->object, l2, FcFalse); continue; } } pe = FcPatternObjectFindElt (pat, fe->object); if (pe) { const FcMatcher *match = FcObjectToMatcher (pe->object, FcFalse); if (!FcCompareValueList (pe->object, match, FcPatternEltValues (pe), FcPatternEltValues (fe), &v, NULL, NULL, &result)) { FcPatternDestroy (newp); return NULL; } FcPatternObjectAdd (newp, fe->object, v, FcFalse); /* Set font-variations settings for standard axes in variable fonts. */ if (variable && FcPatternEltValues (fe)->value.type == FcTypeRange && (fe->object == FC_WEIGHT_OBJECT || fe->object == FC_WIDTH_OBJECT || fe->object == FC_SIZE_OBJECT)) { double num; FcChar8 temp[128]; const char *tag = " "; assert (v.type == FcTypeDouble); num = v.u.d; if (variations.len) FcStrBufChar (&variations, ','); switch (fe->object) { case FC_WEIGHT_OBJECT: tag = "wght"; num = FcWeightToOpenType (num); break; case FC_WIDTH_OBJECT: tag = "wdth"; break; case FC_SIZE_OBJECT: tag = "opsz"; break; } sprintf ((char *)temp, "%4s=%g", tag, num); FcStrBufString (&variations, temp); } } else { FcPatternObjectListAdd (newp, fe->object, FcValueListDuplicate (FcPatternEltValues (fe)), FcTrue); } } for (i = 0; i < pat->num; i++) { pe = &FcPatternElts (pat)[i]; fe = FcPatternObjectFindElt (font, pe->object); if (!fe && pe->object != FC_FAMILYLANG_OBJECT && pe->object != FC_STYLELANG_OBJECT && pe->object != FC_FULLNAMELANG_OBJECT) { FcPatternObjectListAdd (newp, pe->object, FcValueListDuplicate (FcPatternEltValues (pe)), FcFalse); } } if (variable && variations.len) { FcChar8 *vars = NULL; if (FcPatternObjectGetString (newp, FC_FONT_VARIATIONS_OBJECT, 0, &vars) == FcResultMatch) { FcStrBufChar (&variations, ','); FcStrBufString (&variations, vars); FcPatternObjectDel (newp, FC_FONT_VARIATIONS_OBJECT); } FcPatternObjectAddString (newp, FC_FONT_VARIATIONS_OBJECT, FcStrBufDoneStatic (&variations)); FcStrBufDestroy (&variations); } FcConfigSubstituteWithPat (config, newp, pat, FcMatchFont); return newp; } static FcPattern * FcFontSetMatchInternal (FcFontSet **sets, int nsets, FcPattern *p, FcResult *result) { double score[PRI_END], bestscore[PRI_END]; int f; FcFontSet *s; FcPattern *best, *pat = NULL; int i; int set; FcCompareData data; const FcPatternElt *elt; for (i = 0; i < PRI_END; i++) bestscore[i] = 0; best = 0; if (FcDebug() & FC_DBG_MATCH) { printf ("Match "); FcPatternPrint (p); } FcCompareDataInit (p, &data); for (set = 0; set < nsets; set++) { s = sets[set]; if (!s) continue; for (f = 0; f < s->nfont; f++) { if (FcDebug() & FC_DBG_MATCHV) { printf ("Font %d ", f); FcPatternPrint (s->fonts[f]); } if (!FcCompare (p, s->fonts[f], score, result, &data)) { FcCompareDataClear (&data); return 0; } if (FcDebug() & FC_DBG_MATCHV) { printf ("Score"); for (i = 0; i < PRI_END; i++) { printf (" %g", score[i]); } printf ("\n"); } for (i = 0; i < PRI_END; i++) { if (best && bestscore[i] < score[i]) break; if (!best || score[i] < bestscore[i]) { for (i = 0; i < PRI_END; i++) bestscore[i] = score[i]; best = s->fonts[f]; break; } } } } FcCompareDataClear (&data); /* Update the binding according to the score to indicate how exactly values matches on. */ if (best) { pat = FcPatternCreate(); elt = FcPatternElts (best); for (i = 0; i < FcPatternObjectCount (best); i++) { const FcMatcher *match = FcObjectToMatcher (elt[i].object, FcFalse); FcValueListPtr l = FcPatternEltValues (&elt[i]); if (!match) FcPatternObjectListAdd (pat, elt[i].object, FcValueListDuplicate (l), FcTrue); else { FcValueBinding binding = FcValueBindingWeak; FcValueListPtr newp = NULL, ll, t = NULL; FcValue v; /* If the value was matched exactly, update the binding to Strong. */ if (bestscore[match->strong] < 1000) binding = FcValueBindingStrong; for (ll = l; ll != NULL; ll = FcValueListNext (ll)) { if (!newp) { t = newp = FcValueListCreate(); } else { t->next = FcValueListCreate(); t = FcValueListNext (t); } v = FcValueCanonicalize (&ll->value); t->value = FcValueSave (v); t->binding = binding; t->next = NULL; } FcPatternObjectListAdd (pat, elt[i].object, newp, FcTrue); } } } if (FcDebug() & FC_DBG_MATCH) { printf ("Best score"); for (i = 0; i < PRI_END; i++) printf (" %g", bestscore[i]); printf ("\n"); FcPatternPrint (pat); } if (FcDebug() & FC_DBG_MATCH2) { char *env = getenv ("FC_DBG_MATCH_FILTER"); FcObjectSet *os = NULL; if (env) { char *ss, *s; char *p; FcBool f = FcTrue; ss = s = strdup (env); os = FcObjectSetCreate(); while (f) { size_t len; char *x; if (!(p = strchr (s, ','))) { f = FcFalse; len = strlen (s); } else { len = (p - s); } x = malloc (sizeof (char) * (len + 1)); if (x) { strcpy (x, s); if (FcObjectFromName (x) > 0) FcObjectSetAdd (os, x); s = p + 1; free (x); } } free (ss); } FcPatternPrint2 (p, pat, os); if (os) FcObjectSetDestroy (os); } /* assuming that 'result' is initialized with FcResultNoMatch * outside this function */ if (pat) *result = FcResultMatch; return pat; } FcPattern * FcFontSetMatch (FcConfig *config, FcFontSet **sets, int nsets, FcPattern *p, FcResult *result) { FcPattern *best, *ret = NULL; assert (sets != NULL); assert (p != NULL); assert (result != NULL); *result = FcResultNoMatch; config = FcConfigReference (config); if (!config) return NULL; best = FcFontSetMatchInternal (sets, nsets, p, result); if (best) { ret = FcFontRenderPrepare (config, p, best); FcPatternDestroy (best); } FcConfigDestroy (config); return ret; } FcPattern * FcFontMatch (FcConfig *config, FcPattern *p, FcResult *result) { FcFontSet *sets[2]; int nsets; FcPattern *best, *ret = NULL; assert (p != NULL); assert (result != NULL); *result = FcResultNoMatch; config = FcConfigReference (config); if (!config) return NULL; nsets = 0; if (config->fonts[FcSetSystem]) sets[nsets++] = config->fonts[FcSetSystem]; if (config->fonts[FcSetApplication]) sets[nsets++] = config->fonts[FcSetApplication]; best = FcFontSetMatchInternal (sets, nsets, p, result); if (best) { ret = FcFontRenderPrepare (config, p, best); FcPatternDestroy (best); } FcConfigDestroy (config); return ret; } typedef struct _FcSortNode { FcPattern *pattern; double score[PRI_END]; } FcSortNode; static int FcSortCompare (const void *aa, const void *ab) { FcSortNode *a = *(FcSortNode **)aa; FcSortNode *b = *(FcSortNode **)ab; double *as = &a->score[0]; double *bs = &b->score[0]; double ad = 0, bd = 0; int i; i = PRI_END; while (i-- && (ad = *as++) == (bd = *bs++)) ; return ad < bd ? -1 : ad > bd ? 1 : 0; } static FcBool FcSortWalk (FcSortNode **n, int nnode, FcFontSet *fs, FcCharSet **csp, FcBool trim) { FcBool ret = FcFalse; FcCharSet *cs; int i; cs = 0; if (trim || csp) { cs = FcCharSetCreate(); if (cs == NULL) goto bail; } for (i = 0; i < nnode; i++) { FcSortNode *node = *n++; FcBool adds_chars = FcFalse; /* * Only fetch node charset if we'd need it */ if (cs) { FcCharSet *ncs; if (FcPatternGetCharSet (node->pattern, FC_CHARSET, 0, &ncs) != FcResultMatch) continue; if (!FcCharSetMerge (cs, ncs, &adds_chars)) goto bail; } /* * If this font isn't a subset of the previous fonts, * add it to the list */ if (!i || !trim || adds_chars) { FcPatternReference (node->pattern); if (FcDebug() & FC_DBG_MATCHV) { printf ("Add "); FcPatternPrint (node->pattern); } if (!FcFontSetAdd (fs, node->pattern)) { FcPatternDestroy (node->pattern); goto bail; } } } if (csp) { *csp = cs; cs = 0; } ret = FcTrue; bail: if (cs) FcCharSetDestroy (cs); return ret; } void FcFontSetSortDestroy (FcFontSet *fs) { FcFontSetDestroy (fs); } FcFontSet * FcFontSetSort (FcConfig *config, FcFontSet **sets, int nsets, FcPattern *p, FcBool trim, FcCharSet **csp, FcResult *result) { FcFontSet *ret; FcFontSet *s; FcSortNode *nodes; FcSortNode **nodeps, **nodep; int nnodes; FcSortNode *newp; int set; int f; int i; int nPatternLang; FcBool *patternLangSat; FcValue patternLang; FcCompareData data; assert (sets != NULL); assert (p != NULL); assert (result != NULL); /* There are some implementation that relying on the result of * "result" to check if the return value of FcFontSetSort * is valid or not. * So we should initialize it to the conservative way since * this function doesn't return NULL anymore. */ if (result) *result = FcResultNoMatch; if (FcDebug() & FC_DBG_MATCH) { printf ("Sort "); FcPatternPrint (p); } nnodes = 0; for (set = 0; set < nsets; set++) { s = sets[set]; if (!s) continue; nnodes += s->nfont; } if (!nnodes) return FcFontSetCreate(); for (nPatternLang = 0; FcPatternGet (p, FC_LANG, nPatternLang, &patternLang) == FcResultMatch; nPatternLang++) ; /* freed below */ nodes = malloc (nnodes * sizeof (FcSortNode) + nnodes * sizeof (FcSortNode *) + nPatternLang * sizeof (FcBool)); if (!nodes) goto bail0; nodeps = (FcSortNode **)(nodes + nnodes); patternLangSat = (FcBool *)(nodeps + nnodes); FcCompareDataInit (p, &data); newp = nodes; nodep = nodeps; for (set = 0; set < nsets; set++) { s = sets[set]; if (!s) continue; for (f = 0; f < s->nfont; f++) { if (FcDebug() & FC_DBG_MATCHV) { printf ("Font %d ", f); FcPatternPrint (s->fonts[f]); } newp->pattern = s->fonts[f]; if (!FcCompare (p, newp->pattern, newp->score, result, &data)) goto bail1; /* TODO: Should we check a FcPattern in FcFontSet? * This way may not work if someone has own list of application fonts * That said, just to reduce the cost for lookup so far. */ if (config->prefer_app_fonts && s != config->fonts[FcSetApplication]) { newp->score[PRI_ORDER] += 1000; } if (FcDebug() & FC_DBG_MATCHV) { printf ("Score"); for (i = 0; i < PRI_END; i++) { printf (" %g", newp->score[i]); } printf ("\n"); } *nodep = newp; newp++; nodep++; } } FcCompareDataClear (&data); nnodes = newp - nodes; qsort (nodeps, nnodes, sizeof (FcSortNode *), FcSortCompare); for (i = 0; i < nPatternLang; i++) patternLangSat[i] = FcFalse; for (f = 0; f < nnodes; f++) { FcBool satisfies = FcFalse; /* * If this node matches any language, go check * which ones and satisfy those entries */ if (nodeps[f]->score[PRI_LANG] < 2000) { for (i = 0; i < nPatternLang; i++) { FcValue nodeLang; if (!patternLangSat[i] && FcPatternGet (p, FC_LANG, i, &patternLang) == FcResultMatch && FcPatternGet (nodeps[f]->pattern, FC_LANG, 0, &nodeLang) == FcResultMatch) { FcValue matchValue; double compare = FcCompareLang (&patternLang, &nodeLang, &matchValue); if (compare >= 0 && compare < 2) { if (FcDebug() & FC_DBG_MATCHV) { FcChar8 *family; FcChar8 *style; if (FcPatternGetString (nodeps[f]->pattern, FC_FAMILY, 0, &family) == FcResultMatch && FcPatternGetString (nodeps[f]->pattern, FC_STYLE, 0, &style) == FcResultMatch) printf ("Font %s:%s matches language %d\n", family, style, i); } patternLangSat[i] = FcTrue; satisfies = FcTrue; break; } } } } if (!satisfies) { nodeps[f]->score[PRI_LANG] = 10000.0; } } /* * Re-sort once the language issues have been settled */ qsort (nodeps, nnodes, sizeof (FcSortNode *), FcSortCompare); ret = FcFontSetCreate(); if (!ret) goto bail1; if (!FcSortWalk (nodeps, nnodes, ret, csp, trim)) goto bail2; free (nodes); if (ret->nfont > 0) { *result = FcResultMatch; if (FcDebug() & FC_DBG_MATCH) { printf ("First font "); FcPatternPrint (ret->fonts[0]); } } return ret; bail2: FcFontSetDestroy (ret); bail1: free (nodes); bail0: return 0; } FcFontSet * FcFontSort (FcConfig *config, FcPattern *p, FcBool trim, FcCharSet **csp, FcResult *result) { FcFontSet *sets[2], *ret; int nsets; assert (p != NULL); assert (result != NULL); *result = FcResultNoMatch; config = FcConfigReference (config); if (!config) return NULL; nsets = 0; if (config->fonts[FcSetSystem]) sets[nsets++] = config->fonts[FcSetSystem]; if (config->fonts[FcSetApplication]) sets[nsets++] = config->fonts[FcSetApplication]; ret = FcFontSetSort (config, sets, nsets, p, trim, csp, result); FcConfigDestroy (config); return ret; } #define __fcmatch__ #include "fcaliastail.h" #undef __fcmatch__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcmatrix.c000066400000000000000000000054371503113465200241530ustar00rootroot00000000000000/* * fontconfig/src/fcmatrix.c * * Copyright © 2000 Tuomas J. Lukka * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of Tuomas Lukka not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. Tuomas Lukka makes no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * TUOMAS LUKKA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL TUOMAS LUKKA BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" #include #include #include const FcMatrix FcIdentityMatrix = { 1, 0, 0, 1 }; FcMatrix * FcMatrixCopy (const FcMatrix *mat) { FcMatrix *r; if (!mat) return 0; r = (FcMatrix *)malloc (sizeof (*r)); if (!r) return 0; *r = *mat; return r; } void FcMatrixFree (FcMatrix *mat) { if (mat != &FcIdentityMatrix) free (mat); } FcBool FcMatrixEqual (const FcMatrix *mat1, const FcMatrix *mat2) { if (mat1 == mat2) return FcTrue; if (mat1 == 0 || mat2 == 0) return FcFalse; return mat1->xx == mat2->xx && mat1->xy == mat2->xy && mat1->yx == mat2->yx && mat1->yy == mat2->yy; } void FcMatrixMultiply (FcMatrix *result, const FcMatrix *a, const FcMatrix *b) { FcMatrix r; r.xx = a->xx * b->xx + a->xy * b->yx; r.xy = a->xx * b->xy + a->xy * b->yy; r.yx = a->yx * b->xx + a->yy * b->yx; r.yy = a->yx * b->xy + a->yy * b->yy; *result = r; } void FcMatrixRotate (FcMatrix *m, double c, double s) { FcMatrix r; /* * X Coordinate system is upside down, swap to make * rotations counterclockwise */ r.xx = c; r.xy = -s; r.yx = s; r.yy = c; FcMatrixMultiply (m, &r, m); } void FcMatrixScale (FcMatrix *m, double sx, double sy) { FcMatrix r; r.xx = sx; r.xy = 0; r.yx = 0; r.yy = sy; FcMatrixMultiply (m, &r, m); } void FcMatrixShear (FcMatrix *m, double sh, double sv) { FcMatrix r; r.xx = 1; r.xy = sh; r.yx = sv; r.yy = 1; FcMatrixMultiply (m, &r, m); } #define __fcmatrix__ #include "fcaliastail.h" #undef __fcmatrix__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcmd5.h000066400000000000000000000204211503113465200233270ustar00rootroot00000000000000/* * This code implements the MD5 message-digest algorithm. * The algorithm is due to Ron Rivest. This code was * written by Colin Plumb in 1993, no copyright is claimed. * This code is in the public domain; do with it what you wish. * * Equivalent code is available from RSA Data Security, Inc. * This code has been tested against that, and is equivalent, * except that you don't need to include two pages of legalese * with every copy. * * To compute the message digest of a chunk of bytes, declare an * MD5Context structure, pass it to MD5Init, call MD5Update as * needed on buffers full of bytes, and then call MD5Final, which * will fill a supplied 16-byte array with the digest. */ #include "fcint.h" struct MD5Context { FcChar32 buf[4]; FcChar32 bits[2]; unsigned char in[64]; }; static void MD5Init (struct MD5Context *ctx); static void MD5Update (struct MD5Context *ctx, const unsigned char *buf, unsigned len); static void MD5Final (unsigned char digest[16], struct MD5Context *ctx); static void MD5Transform (FcChar32 buf[4], FcChar32 in[16]); #if !defined(WORDS_BIGENDIAN) || !WORDS_BIGENDIAN # define byteReverse(buf, len) /* Nothing */ #else /* * Note: this code is harmless on little-endian machines. */ void byteReverse (unsigned char *buf, unsigned longs) { FcChar32 t; do { t = (FcChar32)((unsigned)buf[3] << 8 | buf[2]) << 16 | ((unsigned)buf[1] << 8 | buf[0]); *(FcChar32 *)buf = t; buf += 4; } while (--longs); } #endif /* * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious * initialization constants. */ static void MD5Init (struct MD5Context *ctx) { ctx->buf[0] = 0x67452301; ctx->buf[1] = 0xefcdab89; ctx->buf[2] = 0x98badcfe; ctx->buf[3] = 0x10325476; ctx->bits[0] = 0; ctx->bits[1] = 0; } /* * Update context to reflect the concatenation of another buffer full * of bytes. */ static void MD5Update (struct MD5Context *ctx, const unsigned char *buf, unsigned len) { FcChar32 t; /* Update bitcount */ t = ctx->bits[0]; if ((ctx->bits[0] = t + ((FcChar32)len << 3)) < t) ctx->bits[1]++; /* Carry from low to high */ ctx->bits[1] += len >> 29; t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */ /* Handle any leading odd-sized chunks */ if (t) { unsigned char *p = (unsigned char *)ctx->in + t; t = 64 - t; if (len < t) { memcpy (p, buf, len); return; } memcpy (p, buf, t); byteReverse (ctx->in, 16); MD5Transform (ctx->buf, (FcChar32 *)ctx->in); buf += t; len -= t; } /* Process data in 64-byte chunks */ while (len >= 64) { memcpy (ctx->in, buf, 64); byteReverse (ctx->in, 16); MD5Transform (ctx->buf, (FcChar32 *)ctx->in); buf += 64; len -= 64; } /* Handle any remaining bytes of data. */ memcpy (ctx->in, buf, len); } /* * Final wrapup - pad to 64-byte boundary with the bit pattern * 1 0* (64-bit count of bits processed, MSB-first) */ static void MD5Final (unsigned char digest[16], struct MD5Context *ctx) { unsigned count; unsigned char *p; /* Compute number of bytes mod 64 */ count = (ctx->bits[0] >> 3) & 0x3F; /* Set the first char of padding to 0x80. This is safe since there is always at least one byte free */ p = ctx->in + count; *p++ = 0x80; /* Bytes of padding needed to make 64 bytes */ count = 64 - 1 - count; /* Pad out to 56 mod 64 */ if (count < 8) { /* Two lots of padding: Pad the first block to 64 bytes */ memset (p, 0, count); byteReverse (ctx->in, 16); MD5Transform (ctx->buf, (FcChar32 *)ctx->in); /* Now fill the next block with 56 bytes */ memset (ctx->in, 0, 56); } else { /* Pad block to 56 bytes */ memset (p, 0, count - 8); } byteReverse (ctx->in, 14); /* Append length in bits and transform */ ((FcChar32 *)ctx->in)[14] = ctx->bits[0]; ((FcChar32 *)ctx->in)[15] = ctx->bits[1]; MD5Transform (ctx->buf, (FcChar32 *)ctx->in); byteReverse ((unsigned char *)ctx->buf, 4); memcpy (digest, ctx->buf, 16); memset (ctx, 0, sizeof (*ctx)); /* In case it's sensitive */ } /* The four core functions - F1 is optimized somewhat */ /* #define F1(x, y, z) (x & y | ~x & z) */ #define F1(x, y, z) (z ^ (x & (y ^ z))) #define F2(x, y, z) F1 (z, x, y) #define F3(x, y, z) (x ^ y ^ z) #define F4(x, y, z) (y ^ (x | ~z)) /* This is the central step in the MD5 algorithm. */ #define MD5STEP(f, w, x, y, z, data, s) \ (w += f (x, y, z) + data, w = w << s | w >> (32 - s), w += x) /* * The core of the MD5 algorithm, this alters an existing MD5 hash to * reflect the addition of 16 longwords of new data. MD5Update blocks * the data and converts bytes into longwords for this routine. */ static void MD5Transform (FcChar32 buf[4], FcChar32 in[16]) { register FcChar32 a, b, c, d; a = buf[0]; b = buf[1]; c = buf[2]; d = buf[3]; MD5STEP (F1, a, b, c, d, in[0] + 0xd76aa478, 7); MD5STEP (F1, d, a, b, c, in[1] + 0xe8c7b756, 12); MD5STEP (F1, c, d, a, b, in[2] + 0x242070db, 17); MD5STEP (F1, b, c, d, a, in[3] + 0xc1bdceee, 22); MD5STEP (F1, a, b, c, d, in[4] + 0xf57c0faf, 7); MD5STEP (F1, d, a, b, c, in[5] + 0x4787c62a, 12); MD5STEP (F1, c, d, a, b, in[6] + 0xa8304613, 17); MD5STEP (F1, b, c, d, a, in[7] + 0xfd469501, 22); MD5STEP (F1, a, b, c, d, in[8] + 0x698098d8, 7); MD5STEP (F1, d, a, b, c, in[9] + 0x8b44f7af, 12); MD5STEP (F1, c, d, a, b, in[10] + 0xffff5bb1, 17); MD5STEP (F1, b, c, d, a, in[11] + 0x895cd7be, 22); MD5STEP (F1, a, b, c, d, in[12] + 0x6b901122, 7); MD5STEP (F1, d, a, b, c, in[13] + 0xfd987193, 12); MD5STEP (F1, c, d, a, b, in[14] + 0xa679438e, 17); MD5STEP (F1, b, c, d, a, in[15] + 0x49b40821, 22); MD5STEP (F2, a, b, c, d, in[1] + 0xf61e2562, 5); MD5STEP (F2, d, a, b, c, in[6] + 0xc040b340, 9); MD5STEP (F2, c, d, a, b, in[11] + 0x265e5a51, 14); MD5STEP (F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); MD5STEP (F2, a, b, c, d, in[5] + 0xd62f105d, 5); MD5STEP (F2, d, a, b, c, in[10] + 0x02441453, 9); MD5STEP (F2, c, d, a, b, in[15] + 0xd8a1e681, 14); MD5STEP (F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); MD5STEP (F2, a, b, c, d, in[9] + 0x21e1cde6, 5); MD5STEP (F2, d, a, b, c, in[14] + 0xc33707d6, 9); MD5STEP (F2, c, d, a, b, in[3] + 0xf4d50d87, 14); MD5STEP (F2, b, c, d, a, in[8] + 0x455a14ed, 20); MD5STEP (F2, a, b, c, d, in[13] + 0xa9e3e905, 5); MD5STEP (F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); MD5STEP (F2, c, d, a, b, in[7] + 0x676f02d9, 14); MD5STEP (F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); MD5STEP (F3, a, b, c, d, in[5] + 0xfffa3942, 4); MD5STEP (F3, d, a, b, c, in[8] + 0x8771f681, 11); MD5STEP (F3, c, d, a, b, in[11] + 0x6d9d6122, 16); MD5STEP (F3, b, c, d, a, in[14] + 0xfde5380c, 23); MD5STEP (F3, a, b, c, d, in[1] + 0xa4beea44, 4); MD5STEP (F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); MD5STEP (F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); MD5STEP (F3, b, c, d, a, in[10] + 0xbebfbc70, 23); MD5STEP (F3, a, b, c, d, in[13] + 0x289b7ec6, 4); MD5STEP (F3, d, a, b, c, in[0] + 0xeaa127fa, 11); MD5STEP (F3, c, d, a, b, in[3] + 0xd4ef3085, 16); MD5STEP (F3, b, c, d, a, in[6] + 0x04881d05, 23); MD5STEP (F3, a, b, c, d, in[9] + 0xd9d4d039, 4); MD5STEP (F3, d, a, b, c, in[12] + 0xe6db99e5, 11); MD5STEP (F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); MD5STEP (F3, b, c, d, a, in[2] + 0xc4ac5665, 23); MD5STEP (F4, a, b, c, d, in[0] + 0xf4292244, 6); MD5STEP (F4, d, a, b, c, in[7] + 0x432aff97, 10); MD5STEP (F4, c, d, a, b, in[14] + 0xab9423a7, 15); MD5STEP (F4, b, c, d, a, in[5] + 0xfc93a039, 21); MD5STEP (F4, a, b, c, d, in[12] + 0x655b59c3, 6); MD5STEP (F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); MD5STEP (F4, c, d, a, b, in[10] + 0xffeff47d, 15); MD5STEP (F4, b, c, d, a, in[1] + 0x85845dd1, 21); MD5STEP (F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); MD5STEP (F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); MD5STEP (F4, c, d, a, b, in[6] + 0xa3014314, 15); MD5STEP (F4, b, c, d, a, in[13] + 0x4e0811a1, 21); MD5STEP (F4, a, b, c, d, in[4] + 0xf7537e82, 6); MD5STEP (F4, d, a, b, c, in[11] + 0xbd3af235, 10); MD5STEP (F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); MD5STEP (F4, b, c, d, a, in[9] + 0xeb86d391, 21); buf[0] += a; buf[1] += b; buf[2] += c; buf[3] += d; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcmutex.h000066400000000000000000000116051503113465200240100ustar00rootroot00000000000000/* * Atomic int and pointer operations. Originally copied from HarfBuzz. * * Copyright © 2007 Chris Wilson * Copyright © 2009,2010 Red Hat, Inc. * Copyright © 2011,2012,2013 Google, Inc. * * Permission is hereby granted, without written agreement and without * license or royalty fees, to use, copy, modify, and distribute this * software and its documentation for any purpose, provided that the * above copyright notice and the following two paragraphs appear in * all copies of this software. * * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. * * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. * * Contributor(s): * Chris Wilson * Red Hat Author(s): Behdad Esfahbod * Google Author(s): Behdad Esfahbod */ #ifndef _FCMUTEX_H_ #define _FCMUTEX_H_ #ifdef HAVE_CONFIG_H # include #endif #define FC_STMT_START do #define FC_STMT_END while (0) /* mutex */ /* We need external help for these */ #if 0 #elif !defined(FC_NO_MT) && defined(_MSC_VER) || defined(__MINGW32__) # include "fcwindows.h" typedef CRITICAL_SECTION fc_mutex_impl_t; # define FC_MUTEX_IMPL_INIT { NULL, 0, 0, NULL, NULL, 0 } # define fc_mutex_impl_init(M) InitializeCriticalSection (M) # define fc_mutex_impl_lock(M) EnterCriticalSection (M) # define fc_mutex_impl_unlock(M) LeaveCriticalSection (M) # define fc_mutex_impl_finish(M) DeleteCriticalSection (M) #elif !defined(FC_NO_MT) && (defined(HAVE_PTHREAD) || defined(__APPLE__)) # include typedef pthread_mutex_t fc_mutex_impl_t; # define FC_MUTEX_IMPL_INIT PTHREAD_MUTEX_INITIALIZER # define fc_mutex_impl_init(M) pthread_mutex_init (M, NULL) # define fc_mutex_impl_lock(M) pthread_mutex_lock (M) # define fc_mutex_impl_unlock(M) pthread_mutex_unlock (M) # define fc_mutex_impl_finish(M) pthread_mutex_destroy (M) #elif !defined(FC_NO_MT) && defined(HAVE_INTEL_ATOMIC_PRIMITIVES) # if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_YIELD) # include # define FC_SCHED_YIELD() sched_yield() # else # define FC_SCHED_YIELD() \ FC_STMT_START {} \ FC_STMT_END # endif /* This actually is not a totally awful implementation. */ typedef volatile int fc_mutex_impl_t; # define FC_MUTEX_IMPL_INIT 0 # define fc_mutex_impl_init(M) *(M) = 0 # define fc_mutex_impl_lock(M) \ FC_STMT_START \ { \ while (__sync_lock_test_and_set ((M), 1)) \ FC_SCHED_YIELD(); \ } \ FC_STMT_END # define fc_mutex_impl_unlock(M) __sync_lock_release (M) # define fc_mutex_impl_finish(M) \ FC_STMT_START {} \ FC_STMT_END #elif !defined(FC_NO_MT) # if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_YIELD) # include # define FC_SCHED_YIELD() sched_yield() # else # define FC_SCHED_YIELD() \ FC_STMT_START {} \ FC_STMT_END # endif # define FC_MUTEX_INT_NIL 1 /* Warn that fallback implementation is in use. */ typedef volatile int fc_mutex_impl_t; # define FC_MUTEX_IMPL_INIT 0 # define fc_mutex_impl_init(M) *(M) = 0 # define fc_mutex_impl_lock(M) \ FC_STMT_START \ { \ while (*(M)) \ FC_SCHED_YIELD(); \ (*(M))++; \ } \ FC_STMT_END # define fc_mutex_impl_unlock(M) (*(M))--; # define fc_mutex_impl_finish(M) \ FC_STMT_START {} \ FC_STMT_END #else /* FC_NO_MT */ typedef int fc_mutex_impl_t; # define FC_MUTEX_IMPL_INIT 0 # define fc_mutex_impl_init(M) \ FC_STMT_START {} \ FC_STMT_END # define fc_mutex_impl_lock(M) \ FC_STMT_START {} \ FC_STMT_END # define fc_mutex_impl_unlock(M) \ FC_STMT_START {} \ FC_STMT_END # define fc_mutex_impl_finish(M) \ FC_STMT_START {} \ FC_STMT_END #endif #define FC_MUTEX_INIT { FC_MUTEX_IMPL_INIT } typedef fc_mutex_impl_t FcMutex; static inline void FcMutexInit (FcMutex *m) { fc_mutex_impl_init (m); } static inline void FcMutexLock (FcMutex *m) { fc_mutex_impl_lock (m); } static inline void FcMutexUnlock (FcMutex *m) { fc_mutex_impl_unlock (m); } static inline void FcMutexFinish (FcMutex *m) { fc_mutex_impl_finish (m); } #endif /* _FCMUTEX_H_ */ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcname.c000066400000000000000000000444271503113465200235710ustar00rootroot00000000000000/* * fontconfig/src/fcname.c * * Copyright © 2000 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" #include #include #include #include static const FcObjectType FcObjects[] = { #define FC_OBJECT(NAME, Type, Cmp) { FC_##NAME, Type }, #include "fcobjs.h" #undef FC_OBJECT }; #define NUM_OBJECT_TYPES ((int)(sizeof FcObjects / sizeof FcObjects[0])) static const FcObjectType * FcObjectFindById (FcObject object) { if (1 <= object && object <= NUM_OBJECT_TYPES) return &FcObjects[object - 1]; return FcObjectLookupOtherTypeById (object); } FcBool FcNameRegisterObjectTypes (const FcObjectType *types, int ntypes) { /* Deprecated. */ return FcFalse; } FcBool FcNameUnregisterObjectTypes (const FcObjectType *types, int ntypes) { /* Deprecated. */ return FcFalse; } const FcObjectType * FcNameGetObjectType (const char *object) { int id = FcObjectLookupBuiltinIdByName (object); if (!id) return FcObjectLookupOtherTypeByName (object); return &FcObjects[id - 1]; } FcBool FcObjectValidType (FcObject object, FcType type) { const FcObjectType *t = FcObjectFindById (object); if (t) { switch ((int)t->type) { case FcTypeUnknown: return FcTrue; case FcTypeDouble: case FcTypeInteger: if (type == FcTypeDouble || type == FcTypeInteger) return FcTrue; break; case FcTypeLangSet: if (type == FcTypeLangSet || type == FcTypeString) return FcTrue; break; case FcTypeRange: if (type == FcTypeRange || type == FcTypeDouble || type == FcTypeInteger) return FcTrue; break; default: if (type == t->type) return FcTrue; break; } return FcFalse; } return FcTrue; } FcObject FcObjectFromName (const char *name) { return FcObjectLookupIdByName (name); } FcObjectSet * FcObjectGetSet (void) { int i; FcObjectSet *os = NULL; os = FcObjectSetCreate(); for (i = 0; i < NUM_OBJECT_TYPES; i++) FcObjectSetAdd (os, FcObjects[i].object); return os; } const char * FcObjectName (FcObject object) { const FcObjectType *o = FcObjectFindById (object); if (o) return o->object; return FcObjectLookupOtherNameById (object); } typedef FcChar8 *FC8; static const FcConstant _FcBaseConstants[] = { { (FC8) "thin", "weight", FC_WEIGHT_THIN }, { (FC8) "extralight", "weight", FC_WEIGHT_EXTRALIGHT }, { (FC8) "ultralight", "weight", FC_WEIGHT_EXTRALIGHT }, { (FC8) "demilight", "weight", FC_WEIGHT_DEMILIGHT }, { (FC8) "semilight", "weight", FC_WEIGHT_DEMILIGHT }, { (FC8) "light", "weight", FC_WEIGHT_LIGHT }, { (FC8) "book", "weight", FC_WEIGHT_BOOK }, { (FC8) "regular", "weight", FC_WEIGHT_REGULAR }, { (FC8) "normal", "weight", FC_WEIGHT_NORMAL }, { (FC8) "medium", "weight", FC_WEIGHT_MEDIUM }, { (FC8) "demibold", "weight", FC_WEIGHT_DEMIBOLD }, { (FC8) "semibold", "weight", FC_WEIGHT_DEMIBOLD }, { (FC8) "bold", "weight", FC_WEIGHT_BOLD }, { (FC8) "extrabold", "weight", FC_WEIGHT_EXTRABOLD }, { (FC8) "ultrabold", "weight", FC_WEIGHT_EXTRABOLD }, { (FC8) "black", "weight", FC_WEIGHT_BLACK }, { (FC8) "heavy", "weight", FC_WEIGHT_HEAVY }, { (FC8) "extrablack", "weight", FC_WEIGHT_EXTRABLACK }, { (FC8) "ultrablack", "weight", FC_WEIGHT_ULTRABLACK }, { (FC8) "roman", "slant", FC_SLANT_ROMAN }, { (FC8) "italic", "slant", FC_SLANT_ITALIC }, { (FC8) "oblique", "slant", FC_SLANT_OBLIQUE }, { (FC8) "ultracondensed", "width", FC_WIDTH_ULTRACONDENSED }, { (FC8) "extracondensed", "width", FC_WIDTH_EXTRACONDENSED }, { (FC8) "condensed", "width", FC_WIDTH_CONDENSED }, { (FC8) "semicondensed", "width", FC_WIDTH_SEMICONDENSED }, { (FC8) "normal", "width", FC_WIDTH_NORMAL }, { (FC8) "semiexpanded", "width", FC_WIDTH_SEMIEXPANDED }, { (FC8) "expanded", "width", FC_WIDTH_EXPANDED }, { (FC8) "extraexpanded", "width", FC_WIDTH_EXTRAEXPANDED }, { (FC8) "ultraexpanded", "width", FC_WIDTH_ULTRAEXPANDED }, { (FC8) "proportional", "spacing", FC_PROPORTIONAL }, { (FC8) "dual", "spacing", FC_DUAL }, { (FC8) "mono", "spacing", FC_MONO }, { (FC8) "charcell", "spacing", FC_CHARCELL }, { (FC8) "unknown", "rgba", FC_RGBA_UNKNOWN }, { (FC8) "rgb", "rgba", FC_RGBA_RGB }, { (FC8) "bgr", "rgba", FC_RGBA_BGR }, { (FC8) "vrgb", "rgba", FC_RGBA_VRGB }, { (FC8) "vbgr", "rgba", FC_RGBA_VBGR }, { (FC8) "none", "rgba", FC_RGBA_NONE }, { (FC8) "hintnone", "hintstyle", FC_HINT_NONE }, { (FC8) "hintslight", "hintstyle", FC_HINT_SLIGHT }, { (FC8) "hintmedium", "hintstyle", FC_HINT_MEDIUM }, { (FC8) "hintfull", "hintstyle", FC_HINT_FULL }, { (FC8) "antialias", "antialias", FcTrue }, { (FC8) "hinting", "hinting", FcTrue }, { (FC8) "verticallayout", "verticallayout", FcTrue }, { (FC8) "autohint", "autohint", FcTrue }, { (FC8) "globaladvance", "globaladvance", FcTrue }, /* deprecated */ { (FC8) "outline", "outline", FcTrue }, { (FC8) "scalable", "scalable", FcTrue }, { (FC8) "minspace", "minspace", FcTrue }, { (FC8) "embolden", "embolden", FcTrue }, { (FC8) "embeddedbitmap", "embeddedbitmap", FcTrue }, { (FC8) "decorative", "decorative", FcTrue }, { (FC8) "lcdnone", "lcdfilter", FC_LCD_NONE }, { (FC8) "lcddefault", "lcdfilter", FC_LCD_DEFAULT }, { (FC8) "lcdlight", "lcdfilter", FC_LCD_LIGHT }, { (FC8) "lcdlegacy", "lcdfilter", FC_LCD_LEGACY }, }; #define NUM_FC_CONSTANTS (sizeof _FcBaseConstants / sizeof _FcBaseConstants[0]) FcBool FcNameRegisterConstants (const FcConstant *consts, int nconsts) { /* Deprecated. */ return FcFalse; } FcBool FcNameUnregisterConstants (const FcConstant *consts, int nconsts) { /* Deprecated. */ return FcFalse; } const FcConstant * FcNameGetConstant (const FcChar8 *string) { unsigned int i; for (i = 0; i < NUM_FC_CONSTANTS; i++) if (!FcStrCmpIgnoreCase (string, _FcBaseConstants[i].name)) return &_FcBaseConstants[i]; return 0; } const FcConstant * FcNameGetConstantFor (const FcChar8 *string, const char *object) { unsigned int i; for (i = 0; i < NUM_FC_CONSTANTS; i++) if (!FcStrCmpIgnoreCase (string, _FcBaseConstants[i].name) && !FcStrCmpIgnoreCase ((const FcChar8 *)object, (const FcChar8 *)_FcBaseConstants[i].object)) return &_FcBaseConstants[i]; return 0; } FcBool FcNameConstant (const FcChar8 *string, int *result) { const FcConstant *c; if ((c = FcNameGetConstant (string))) { *result = c->value; return FcTrue; } return FcFalse; } FcBool FcNameConstantWithObjectCheck (const FcChar8 *string, const char *object, int *result) { const FcConstant *c; if ((c = FcNameGetConstantFor (string, object))) { *result = c->value; return FcTrue; } else if ((c = FcNameGetConstant (string))) { if (strcmp (c->object, object) != 0) { fprintf (stderr, "Fontconfig error: Unexpected constant name `%s' used for object `%s': should be `%s'\n", string, object, c->object); return FcFalse; } /* Unlikely to reach out */ *result = c->value; return FcTrue; } return FcFalse; } FcBool FcNameBool (const FcChar8 *v, FcBool *result) { char c0, c1; c0 = *v; c0 = FcToLower (c0); if (c0 == 't' || c0 == 'y' || c0 == '1') { *result = FcTrue; return FcTrue; } if (c0 == 'f' || c0 == 'n' || c0 == '0') { *result = FcFalse; return FcTrue; } if (c0 == 'd' || c0 == 'x' || c0 == '2') { *result = FcDontCare; return FcTrue; } if (c0 == 'o') { c1 = v[1]; c1 = FcToLower (c1); if (c1 == 'n') { *result = FcTrue; return FcTrue; } if (c1 == 'f') { *result = FcFalse; return FcTrue; } if (c1 == 'r') { *result = FcDontCare; return FcTrue; } } return FcFalse; } static FcValue FcNameConvert (FcType type, const char *object, FcChar8 *string) { FcValue v; FcMatrix m; double b, e; char *p; v.type = type; switch ((int)v.type) { case FcTypeInteger: if (!FcNameConstantWithObjectCheck (string, object, &v.u.i)) v.u.i = atoi ((char *)string); break; case FcTypeString: v.u.s = FcStrdup (string); if (!v.u.s) v.type = FcTypeVoid; break; case FcTypeBool: if (!FcNameBool (string, &v.u.b)) v.u.b = FcFalse; break; case FcTypeDouble: v.u.d = strtod ((char *)string, 0); break; case FcTypeMatrix: FcMatrixInit (&m); sscanf ((char *)string, "%lg %lg %lg %lg", &m.xx, &m.xy, &m.yx, &m.yy); v.u.m = FcMatrixCopy (&m); break; case FcTypeCharSet: v.u.c = FcNameParseCharSet (string); if (!v.u.c) v.type = FcTypeVoid; break; case FcTypeLangSet: v.u.l = FcNameParseLangSet (string); if (!v.u.l) v.type = FcTypeVoid; break; case FcTypeRange: if (sscanf ((char *)string, "[%lg %lg]", &b, &e) != 2) { char *sc, *ec; size_t len = strlen ((const char *)string); int si, ei; sc = malloc (len + 1); ec = malloc (len + 1); if (sc && ec && sscanf ((char *)string, "[%s %[^]]]", sc, ec) == 2) { if (FcNameConstantWithObjectCheck ((const FcChar8 *)sc, object, &si) && FcNameConstantWithObjectCheck ((const FcChar8 *)ec, object, &ei)) v.u.r = FcRangeCreateDouble (si, ei); else goto bail1; } else { bail1: v.type = FcTypeDouble; if (FcNameConstantWithObjectCheck (string, object, &si)) { v.u.d = (double)si; } else { v.u.d = strtod ((char *)string, &p); if (p != NULL && p[0] != 0) v.type = FcTypeVoid; } } if (sc) free (sc); if (ec) free (ec); } else v.u.r = FcRangeCreateDouble (b, e); break; default: /* No valid type to convert */ v.type = FcTypeVoid; break; } return v; } static const FcChar8 * FcNameFindNext (const FcChar8 *cur, const char *delim, FcChar8 *save, FcChar8 *last) { FcChar8 c; while ((c = *cur)) { if (!isspace (c)) break; ++cur; } while ((c = *cur)) { if (c == '\\') { ++cur; if (!(c = *cur)) break; } else if (strchr (delim, c)) break; ++cur; *save++ = c; } *save = 0; *last = *cur; if (*cur) cur++; return cur; } FcPattern * FcNameParse (const FcChar8 *name) { FcChar8 *save; FcPattern *pat; double d; FcChar8 *e; FcChar8 delim; FcValue v; const FcObjectType *t; const FcConstant *c; /* freed below */ save = malloc (strlen ((char *)name) + 1); if (!save) goto bail0; pat = FcPatternCreate(); if (!pat) goto bail1; for (;;) { name = FcNameFindNext (name, "-,:", save, &delim); if (save[0]) { if (!FcPatternObjectAddString (pat, FC_FAMILY_OBJECT, save)) goto bail2; } if (delim != ',') break; } if (delim == '-') { for (;;) { name = FcNameFindNext (name, "-,:", save, &delim); d = strtod ((char *)save, (char **)&e); if (e != save) { if (!FcPatternObjectAddDouble (pat, FC_SIZE_OBJECT, d)) goto bail2; } if (delim != ',') break; } } while (delim == ':') { name = FcNameFindNext (name, "=_:", save, &delim); if (save[0]) { if (delim == '=' || delim == '_') { t = FcNameGetObjectType ((char *)save); for (;;) { name = FcNameFindNext (name, ":,", save, &delim); if (t) { v = FcNameConvert (t->type, t->object, save); if (!FcPatternAdd (pat, t->object, v, FcTrue)) { FcValueDestroy (v); goto bail2; } FcValueDestroy (v); } if (delim != ',') break; } } else { if ((c = FcNameGetConstant (save))) { t = FcNameGetObjectType ((char *)c->object); if (t == NULL) goto bail2; switch ((int)t->type) { case FcTypeInteger: case FcTypeDouble: if (!FcPatternAddInteger (pat, c->object, c->value)) goto bail2; break; case FcTypeBool: if (!FcPatternAddBool (pat, c->object, c->value)) goto bail2; break; case FcTypeRange: if (!FcPatternAddInteger (pat, c->object, c->value)) goto bail2; break; default: break; } } } } } free (save); return pat; bail2: FcPatternDestroy (pat); bail1: free (save); bail0: return 0; } static FcBool FcNameUnparseString (FcStrBuf *buf, const FcChar8 *string, const FcChar8 *escape) { FcChar8 c; while ((c = *string++)) { if (escape && strchr ((char *)escape, (char)c)) { if (!FcStrBufChar (buf, escape[0])) return FcFalse; } if (!FcStrBufChar (buf, c)) return FcFalse; } return FcTrue; } FcBool FcNameUnparseValue (FcStrBuf *buf, FcValue *v0, FcChar8 *escape) { FcChar8 temp[1024]; FcValue v = FcValueCanonicalize (v0); switch (v.type) { case FcTypeUnknown: case FcTypeVoid: return FcTrue; case FcTypeInteger: sprintf ((char *)temp, "%d", v.u.i); return FcNameUnparseString (buf, temp, 0); case FcTypeDouble: sprintf ((char *)temp, "%g", v.u.d); return FcNameUnparseString (buf, temp, 0); case FcTypeString: return FcNameUnparseString (buf, v.u.s, escape); case FcTypeBool: return FcNameUnparseString (buf, v.u.b == FcTrue ? (FcChar8 *)"True" : v.u.b == FcFalse ? (FcChar8 *)"False" : (FcChar8 *)"DontCare", 0); case FcTypeMatrix: sprintf ((char *)temp, "%g %g %g %g", v.u.m->xx, v.u.m->xy, v.u.m->yx, v.u.m->yy); return FcNameUnparseString (buf, temp, 0); case FcTypeCharSet: return FcNameUnparseCharSet (buf, v.u.c); case FcTypeLangSet: return FcNameUnparseLangSet (buf, v.u.l); case FcTypeFTFace: return FcTrue; case FcTypeRange: sprintf ((char *)temp, "[%g %g]", v.u.r->begin, v.u.r->end); return FcNameUnparseString (buf, temp, 0); } return FcFalse; } FcBool FcNameUnparseValueList (FcStrBuf *buf, FcValueListPtr v, FcChar8 *escape) { while (v) { if (!FcNameUnparseValue (buf, &v->value, escape)) return FcFalse; if ((v = FcValueListNext (v)) != NULL) if (!FcNameUnparseString (buf, (FcChar8 *)",", 0)) return FcFalse; } return FcTrue; } #define FC_ESCAPE_FIXED "\\-:," #define FC_ESCAPE_VARIABLE "\\=_:," FcChar8 * FcNameUnparse (FcPattern *pat) { return FcNameUnparseEscaped (pat, FcTrue); } FcChar8 * FcNameUnparseEscaped (FcPattern *pat, FcBool escape) { FcStrBuf buf, buf2; FcChar8 buf_static[8192], buf2_static[256]; int i; FcPatternElt *e; FcStrBufInit (&buf, buf_static, sizeof (buf_static)); FcStrBufInit (&buf2, buf2_static, sizeof (buf2_static)); e = FcPatternObjectFindElt (pat, FC_FAMILY_OBJECT); if (e) { if (!FcNameUnparseValueList (&buf, FcPatternEltValues (e), escape ? (FcChar8 *)FC_ESCAPE_FIXED : 0)) goto bail0; } e = FcPatternObjectFindElt (pat, FC_SIZE_OBJECT); if (e) { FcChar8 *p; if (!FcNameUnparseString (&buf2, (FcChar8 *)"-", 0)) goto bail0; if (!FcNameUnparseValueList (&buf2, FcPatternEltValues (e), escape ? (FcChar8 *)FC_ESCAPE_FIXED : 0)) goto bail0; p = FcStrBufDoneStatic (&buf2); FcStrBufDestroy (&buf2); if (strlen ((const char *)p) > 1) if (!FcStrBufString (&buf, p)) goto bail0; } for (i = 0; i < NUM_OBJECT_TYPES; i++) { FcObject id = i + 1; const FcObjectType *o; o = &FcObjects[i]; if (!strcmp (o->object, FC_FAMILY) || !strcmp (o->object, FC_SIZE)) continue; e = FcPatternObjectFindElt (pat, id); if (e) { if (!FcNameUnparseString (&buf, (FcChar8 *)":", 0)) goto bail0; if (!FcNameUnparseString (&buf, (FcChar8 *)o->object, escape ? (FcChar8 *)FC_ESCAPE_VARIABLE : 0)) goto bail0; if (!FcNameUnparseString (&buf, (FcChar8 *)"=", 0)) goto bail0; if (!FcNameUnparseValueList (&buf, FcPatternEltValues (e), escape ? (FcChar8 *)FC_ESCAPE_VARIABLE : 0)) goto bail0; } } return FcStrBufDone (&buf); bail0: FcStrBufDestroy (&buf); return 0; } #define __fcname__ #include "fcaliastail.h" #undef __fcname__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcobjs.c000066400000000000000000000111351503113465200235740ustar00rootroot00000000000000/* * fontconfig/src/fclist.c * * Copyright © 2000 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" static unsigned int FcObjectTypeHash (register const char *str, register FC_GPERF_SIZE_T len); static const struct FcObjectTypeInfo * FcObjectTypeLookup (register const char *str, register FC_GPERF_SIZE_T len); #include "fcobjshash.h" #include /* The 1000 is to leave some room for future added internal objects, such * that caches from newer fontconfig can still be used with older fontconfig * without getting confused. */ static fc_atomic_int_t next_id = FC_MAX_BASE_OBJECT + FC_EXT_OBJ_INDEX; struct FcObjectOtherTypeInfo { struct FcObjectOtherTypeInfo *next; FcObjectType object; FcObject id; } *other_types; static FcRef obj_ref = { .count = 0 }; void FcObjectInit (void) { FcRefInc (&obj_ref); } void FcObjectFini (void) { struct FcObjectOtherTypeInfo *ots, *ot; retry: if (obj_ref.count < 1) fprintf (stderr, "Fontconfig warning: too many caller of FcObjectFini()\n"); if (obj_ref.count >= 1 && FcRefDec (&obj_ref) != 1) return; ots = fc_atomic_ptr_get (&other_types); if (!ots) return; if (!fc_atomic_ptr_cmpexch (&other_types, ots, NULL)) { FcRefInc (&obj_ref); goto retry; } while (ots) { ot = ots->next; if (ots->object.object) free (ots->object.object); free (ots); ots = ot; } } static FcObjectType * _FcObjectLookupOtherTypeByName (const char *str, FcObject *id) { struct FcObjectOtherTypeInfo *ots, *ot; static FcBool warn = FcFalse; retry: ots = fc_atomic_ptr_get (&other_types); if (obj_ref.count < 1) { if (!warn) { fprintf (stderr, "Fontconfig warning: using without calling FcInit()\n"); warn = FcTrue; } FcObjectInit(); } for (ot = ots; ot; ot = ot->next) if (0 == strcmp (ot->object.object, str)) break; if (!ot) { ot = malloc (sizeof (*ot)); if (!ot) return NULL; ot->object.object = (char *)FcStrdup (str); ot->object.type = FcTypeUnknown; ot->id = fc_atomic_int_add (next_id, +1); if (ot->id < (FC_MAX_BASE_OBJECT + FC_EXT_OBJ_INDEX)) { fprintf (stderr, "Fontconfig error: No object ID to assign\n"); abort(); } ot->next = ots; if (!fc_atomic_ptr_cmpexch (&other_types, ots, ot)) { if (ot->object.object) free (ot->object.object); free (ot); goto retry; } } if (id) *id = ot->id; return &ot->object; } FcObject FcObjectLookupBuiltinIdByName (const char *str) { const struct FcObjectTypeInfo *o = FcObjectTypeLookup (str, strlen (str)); if (o) return o->id; return 0; } FcObject FcObjectLookupIdByName (const char *str) { const struct FcObjectTypeInfo *o = FcObjectTypeLookup (str, strlen (str)); FcObject id; if (o) return o->id; if (_FcObjectLookupOtherTypeByName (str, &id)) return id; return 0; } const char * FcObjectLookupOtherNameById (FcObject id) { struct FcObjectOtherTypeInfo *ot; for (ot = fc_atomic_ptr_get (&other_types); ot; ot = ot->next) if (ot->id == id) return ot->object.object; return NULL; } const FcObjectType * FcObjectLookupOtherTypeByName (const char *str) { return _FcObjectLookupOtherTypeByName (str, NULL); } FcPrivate const FcObjectType * FcObjectLookupOtherTypeById (FcObject id) { struct FcObjectOtherTypeInfo *ot; for (ot = fc_atomic_ptr_get (&other_types); ot; ot = ot->next) if (ot->id == id) return &ot->object; return NULL; } #include "fcaliastail.h" #undef __fcobjs__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcobjs.h000066400000000000000000000075301503113465200236050ustar00rootroot00000000000000/* * fontconfig/src/fcobjs.h * * Copyright © 2000 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ /* DON'T REORDER! The order is part of the cache signature. */ FC_OBJECT (FAMILY, FcTypeString, FcCompareFamily) FC_OBJECT (FAMILYLANG, FcTypeString, NULL) FC_OBJECT (STYLE, FcTypeString, FcCompareString) FC_OBJECT (STYLELANG, FcTypeString, NULL) FC_OBJECT (FULLNAME, FcTypeString, NULL) FC_OBJECT (FULLNAMELANG, FcTypeString, NULL) FC_OBJECT (SLANT, FcTypeInteger, FcCompareNumber) FC_OBJECT (WEIGHT, FcTypeRange, FcCompareRange) FC_OBJECT (WIDTH, FcTypeRange, FcCompareRange) FC_OBJECT (SIZE, FcTypeRange, FcCompareSize) FC_OBJECT (ASPECT, FcTypeDouble, NULL) FC_OBJECT (PIXEL_SIZE, FcTypeDouble, FcCompareNumber) FC_OBJECT (SPACING, FcTypeInteger, FcCompareNumber) FC_OBJECT (FOUNDRY, FcTypeString, FcCompareString) FC_OBJECT (ANTIALIAS, FcTypeBool, FcCompareBool) FC_OBJECT (HINT_STYLE, FcTypeInteger, NULL) FC_OBJECT (HINTING, FcTypeBool, NULL) FC_OBJECT (VERTICAL_LAYOUT, FcTypeBool, NULL) FC_OBJECT (AUTOHINT, FcTypeBool, NULL) FC_OBJECT (GLOBAL_ADVANCE, FcTypeBool, NULL) /* deprecated */ FC_OBJECT (FILE, FcTypeString, FcCompareFilename) FC_OBJECT (INDEX, FcTypeInteger, NULL) FC_OBJECT (RASTERIZER, FcTypeString, FcCompareString) /* deprecated */ FC_OBJECT (OUTLINE, FcTypeBool, FcCompareBool) FC_OBJECT (SCALABLE, FcTypeBool, FcCompareBool) FC_OBJECT (DPI, FcTypeDouble, NULL) FC_OBJECT (RGBA, FcTypeInteger, NULL) FC_OBJECT (SCALE, FcTypeDouble, NULL) FC_OBJECT (MINSPACE, FcTypeBool, NULL) FC_OBJECT (CHARWIDTH, FcTypeInteger, NULL) FC_OBJECT (CHAR_HEIGHT, FcTypeInteger, NULL) FC_OBJECT (MATRIX, FcTypeMatrix, NULL) FC_OBJECT (CHARSET, FcTypeCharSet, FcCompareCharSet) FC_OBJECT (LANG, FcTypeLangSet, FcCompareLang) FC_OBJECT (FONTVERSION, FcTypeInteger, FcCompareNumber) FC_OBJECT (CAPABILITY, FcTypeString, NULL) FC_OBJECT (FONTFORMAT, FcTypeString, FcCompareString) FC_OBJECT (EMBOLDEN, FcTypeBool, NULL) FC_OBJECT (EMBEDDED_BITMAP, FcTypeBool, NULL) FC_OBJECT (DECORATIVE, FcTypeBool, FcCompareBool) FC_OBJECT (LCD_FILTER, FcTypeInteger, NULL) FC_OBJECT (NAMELANG, FcTypeString, NULL) FC_OBJECT (FONT_FEATURES, FcTypeString, NULL) FC_OBJECT (PRGNAME, FcTypeString, NULL) FC_OBJECT (HASH, FcTypeString, NULL) /* deprecated */ FC_OBJECT (POSTSCRIPT_NAME, FcTypeString, FcComparePostScript) FC_OBJECT (COLOR, FcTypeBool, FcCompareBool) FC_OBJECT (SYMBOL, FcTypeBool, FcCompareBool) FC_OBJECT (FONT_VARIATIONS, FcTypeString, NULL) FC_OBJECT (VARIABLE, FcTypeBool, FcCompareBool) FC_OBJECT (FONT_HAS_HINT, FcTypeBool, FcCompareBool) FC_OBJECT (ORDER, FcTypeInteger, FcCompareNumber) FC_OBJECT (DESKTOP_NAME, FcTypeString, NULL) FC_OBJECT (NAMED_INSTANCE, FcTypeBool, FcCompareBool) FC_OBJECT (FONT_WRAPPER, FcTypeString, FcCompareString) /* ^-------------- Add new objects here. */ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcobjshash.gperf.h000066400000000000000000000031621503113465200255500ustar00rootroot00000000000000/* * fontconfig/src/fcobjshash.gperf.h * * Copyright © 2000 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ %{ CUT_OUT_BEGIN #include CUT_OUT_END %} %struct-type %language=ANSI-C %includes %enum %readonly-tables %define slot-name name %define hash-function-name FcObjectTypeHash %define lookup-function-name FcObjectTypeLookup %pic %define string-pool-name FcObjectTypeNamePool struct FcObjectTypeInfo { int name; int id; }; %% #define FC_OBJECT(NAME, Type, Cmp) FC_##NAME, FC_##NAME##_OBJECT #include "fcobjs.h" #undef FC_OBJECT fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcpat.c000066400000000000000000001102171503113465200234240ustar00rootroot00000000000000/* * Copyright © 2000 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" #include "fcftint.h" /* Objects MT-safe for readonly access. */ FcPattern * FcPatternCreate (void) { FcPattern *p; p = (FcPattern *)malloc (sizeof (FcPattern)); if (!p) return 0; memset (p, 0, sizeof (FcPattern)); p->num = 0; p->size = 0; p->elts_offset = FcPtrToOffset (p, NULL); FcRefInit (&p->ref, 1); return p; } void FcValueDestroy (FcValue v) { switch ((int)v.type) { case FcTypeString: FcFree (v.u.s); break; case FcTypeMatrix: FcMatrixFree ((FcMatrix *)v.u.m); break; case FcTypeCharSet: FcCharSetDestroy ((FcCharSet *)v.u.c); break; case FcTypeLangSet: FcLangSetDestroy ((FcLangSet *)v.u.l); break; case FcTypeRange: FcRangeDestroy ((FcRange *)v.u.r); break; default: break; } } FcValue FcValueCanonicalize (const FcValue *v) { FcValue newp; switch ((int)v->type) { case FcTypeString: newp.u.s = FcValueString (v); newp.type = FcTypeString; break; case FcTypeCharSet: newp.u.c = FcValueCharSet (v); newp.type = FcTypeCharSet; break; case FcTypeLangSet: newp.u.l = FcValueLangSet (v); newp.type = FcTypeLangSet; break; case FcTypeRange: newp.u.r = FcValueRange (v); newp.type = FcTypeRange; break; default: newp = *v; break; } return newp; } FcValue FcValueSave (FcValue v) { switch ((int)v.type) { case FcTypeString: v.u.s = FcStrdup (v.u.s); if (!v.u.s) v.type = FcTypeVoid; break; case FcTypeMatrix: v.u.m = FcMatrixCopy (v.u.m); if (!v.u.m) v.type = FcTypeVoid; break; case FcTypeCharSet: v.u.c = FcCharSetCopy ((FcCharSet *)v.u.c); if (!v.u.c) v.type = FcTypeVoid; break; case FcTypeLangSet: v.u.l = FcLangSetCopy (v.u.l); if (!v.u.l) v.type = FcTypeVoid; break; case FcTypeRange: v.u.r = FcRangeCopy (v.u.r); if (!v.u.r) v.type = FcTypeVoid; break; default: break; } return v; } FcValueListPtr FcValueListCreate (void) { return calloc (1, sizeof (FcValueList)); } void FcValueListDestroy (FcValueListPtr l) { FcValueListPtr next; for (; l; l = next) { FcValueDestroy (l->value); next = FcValueListNext (l); free (l); } } FcValueListPtr FcValueListPrepend (FcValueListPtr vallist, FcValue value, FcValueBinding binding) { FcValueListPtr newp; if (value.type == FcTypeVoid) return vallist; newp = FcValueListCreate(); if (!newp) return vallist; newp->value = FcValueSave (value); newp->binding = binding; newp->next = vallist; return newp; } FcValueListPtr FcValueListAppend (FcValueListPtr vallist, FcValue value, FcValueBinding binding) { FcValueListPtr newp, last; if (value.type == FcTypeVoid) return vallist; newp = FcValueListCreate(); if (!newp) return vallist; newp->value = FcValueSave (value); newp->binding = binding; newp->next = NULL; if (vallist) { for (last = vallist; FcValueListNext (last); last = FcValueListNext (last)) ; last->next = newp; } else vallist = newp; return vallist; } FcValueListPtr FcValueListDuplicate (FcValueListPtr orig) { FcValueListPtr newp = NULL, l, t = NULL; FcValue v; for (l = orig; l != NULL; l = FcValueListNext (l)) { if (!newp) { t = newp = FcValueListCreate(); } else { t->next = FcValueListCreate(); t = FcValueListNext (t); } v = FcValueCanonicalize (&l->value); t->value = FcValueSave (v); t->binding = l->binding; t->next = NULL; } return newp; } FcBool FcValueEqual (FcValue va, FcValue vb) { if (va.type != vb.type) { if (va.type == FcTypeInteger) { va.type = FcTypeDouble; va.u.d = va.u.i; } if (vb.type == FcTypeInteger) { vb.type = FcTypeDouble; vb.u.d = vb.u.i; } if (va.type != vb.type) return FcFalse; } switch (va.type) { case FcTypeUnknown: return FcFalse; /* don't know how to compare this object */ case FcTypeVoid: return FcTrue; case FcTypeInteger: return va.u.i == vb.u.i; case FcTypeDouble: return va.u.d == vb.u.d; case FcTypeString: return FcStrCmpIgnoreCase (va.u.s, vb.u.s) == 0; case FcTypeBool: return va.u.b == vb.u.b; case FcTypeMatrix: return FcMatrixEqual (va.u.m, vb.u.m); case FcTypeCharSet: return FcCharSetEqual (va.u.c, vb.u.c); case FcTypeFTFace: return va.u.f == vb.u.f; case FcTypeLangSet: return FcLangSetEqual (va.u.l, vb.u.l); case FcTypeRange: return FcRangeIsInRange (va.u.r, vb.u.r); } return FcFalse; } static FcChar32 FcDoubleHash (double d) { if (d < 0) d = -d; if (d > 0xffffffff) d = 0xffffffff; return (FcChar32)d; } FcChar32 FcStringHash (const FcChar8 *s) { FcChar8 c; FcChar32 h = 0; if (s) while ((c = *s++)) h = ((h << 1) | (h >> 31)) ^ c; return h; } static FcChar32 FcValueHash (const FcValue *v) { switch (v->type) { case FcTypeUnknown: case FcTypeVoid: return 0; case FcTypeInteger: return (FcChar32)v->u.i; case FcTypeDouble: return FcDoubleHash (v->u.d); case FcTypeString: return FcStringHash (FcValueString (v)); case FcTypeBool: return (FcChar32)v->u.b; case FcTypeMatrix: return (FcDoubleHash (v->u.m->xx) ^ FcDoubleHash (v->u.m->xy) ^ FcDoubleHash (v->u.m->yx) ^ FcDoubleHash (v->u.m->yy)); case FcTypeCharSet: return (FcChar32)FcValueCharSet (v)->num; case FcTypeFTFace: return FcStringHash ((const FcChar8 *)((FT_Face)v->u.f)->family_name) ^ FcStringHash ((const FcChar8 *)((FT_Face)v->u.f)->style_name); case FcTypeLangSet: return FcLangSetHash (FcValueLangSet (v)); case FcTypeRange: return FcRangeHash (FcValueRange (v)); } return 0; } static FcBool FcValueListEqual (FcValueListPtr la, FcValueListPtr lb) { if (la == lb) return FcTrue; while (la && lb) { if (!FcValueEqual (la->value, lb->value)) return FcFalse; la = FcValueListNext (la); lb = FcValueListNext (lb); } if (la || lb) return FcFalse; return FcTrue; } static FcChar32 FcValueListHash (FcValueListPtr l) { FcChar32 hash = 0; for (; l; l = FcValueListNext (l)) { hash = ((hash << 1) | (hash >> 31)) ^ FcValueHash (&l->value); } return hash; } static void * FcPatternGetCacheObject (FcPattern *p) { /* We use a value to find the cache, instead of the FcPattern object * because the pattern itself may be a cache allocation if we rewrote the path, * so the p may not be in the cached region. */ return FcPatternEltValues (&FcPatternElts (p)[0]); } FcPattern * FcPatternCacheRewriteFile (const FcPattern *p, FcCache *cache, const FcChar8 *relocated_font_file) { FcPatternElt *elts = FcPatternElts (p); size_t i, j; FcChar8 *data; FcPattern *new_p; FcPatternElt *new_elts; FcValueList *new_value_list; size_t new_path_len = strlen ((char *)relocated_font_file); FcChar8 *new_path; /* Allocate space for the patter, the PatternElt headers and * the FC_FILE FcValueList and path that will be freed with the * cache */ data = FcCacheAllocate (cache, sizeof (FcPattern) + p->num * sizeof (FcPatternElt) + sizeof (FcValueList) + new_path_len + 1); new_p = (FcPattern *)data; data += sizeof (FcPattern); new_elts = (FcPatternElt *)(data); data += p->num * sizeof (FcPatternElt); new_value_list = (FcValueList *)data; data += sizeof (FcValueList); new_path = data; *new_p = *p; new_p->elts_offset = FcPtrToOffset (new_p, new_elts); /* Copy all but the FILE values from the cache */ for (i = 0, j = 0; i < p->num; i++) { FcPatternElt *elt = &elts[i]; new_elts[j].object = elt->object; if (elt->object != FC_FILE_OBJECT) new_elts[j++].values = FcPatternEltValues (elt); else new_elts[j++].values = new_value_list; } new_value_list->next = NULL; new_value_list->value.type = FcTypeString; new_value_list->value.u.s = new_path; new_value_list->binding = FcValueBindingWeak; /* Add rewritten path at the end */ strcpy ((char *)new_path, (char *)relocated_font_file); return new_p; } void FcPatternDestroy (FcPattern *p) { int i; FcPatternElt *elts; if (!p) return; if (FcRefIsConst (&p->ref)) { FcCacheObjectDereference (FcPatternGetCacheObject (p)); return; } if (FcRefDec (&p->ref) != 1) return; elts = FcPatternElts (p); for (i = 0; i < FcPatternObjectCount (p); i++) FcValueListDestroy (FcPatternEltValues (&elts[i])); free (elts); free (p); } int FcPatternObjectCount (const FcPattern *pat) { if (pat) return pat->num; return 0; } static int FcPatternObjectPosition (const FcPattern *p, FcObject object) { int low, high, mid, c; FcPatternElt *elts = FcPatternElts (p); low = 0; high = FcPatternObjectCount (p) - 1; c = 1; mid = 0; while (low <= high) { mid = (low + high) >> 1; c = elts[mid].object - object; if (c == 0) return mid; if (c < 0) low = mid + 1; else high = mid - 1; } if (c < 0) mid++; return -(mid + 1); } int FcPatternPosition (const FcPattern *p, const char *object) { return FcPatternObjectPosition (p, FcObjectFromName (object)); } FcPatternElt * FcPatternObjectFindElt (const FcPattern *p, FcObject object) { int i = FcPatternObjectPosition (p, object); if (i < 0) return 0; return &FcPatternElts (p)[i]; } FcPatternElt * FcPatternObjectInsertElt (FcPattern *p, FcObject object) { int i; FcPatternElt *e; i = FcPatternObjectPosition (p, object); if (i < 0) { i = -i - 1; /* reallocate array */ if (FcPatternObjectCount (p) + 1 >= p->size) { int s = p->size + 16; if (p->size) { FcPatternElt *e0 = FcPatternElts (p); e = (FcPatternElt *)realloc (e0, s * sizeof (FcPatternElt)); if (!e) /* maybe it was mmapped */ { e = malloc (s * sizeof (FcPatternElt)); if (e) memcpy (e, e0, FcPatternObjectCount (p) * sizeof (FcPatternElt)); } } else e = (FcPatternElt *)malloc (s * sizeof (FcPatternElt)); if (!e) return FcFalse; p->elts_offset = FcPtrToOffset (p, e); while (p->size < s) { e[p->size].object = 0; e[p->size].values = NULL; p->size++; } } e = FcPatternElts (p); /* move elts up */ memmove (e + i + 1, e + i, sizeof (FcPatternElt) * (FcPatternObjectCount (p) - i)); /* bump count */ p->num++; e[i].object = object; e[i].values = NULL; } return FcPatternElts (p) + i; } FcBool FcPatternEqual (const FcPattern *pa, const FcPattern *pb) { FcPatternIter ia, ib; if (pa == pb) return FcTrue; if (FcPatternObjectCount (pa) != FcPatternObjectCount (pb)) return FcFalse; FcPatternIterStart (pa, &ia); FcPatternIterStart (pb, &ib); do { FcBool ra, rb; if (!FcPatternIterEqual (pa, &ia, pb, &ib)) return FcFalse; ra = FcPatternIterNext (pa, &ia); rb = FcPatternIterNext (pb, &ib); if (!ra && !rb) break; } while (1); return FcTrue; } FcChar32 FcPatternHash (const FcPattern *p) { int i; FcChar32 h = 0; FcPatternElt *pe = FcPatternElts (p); for (i = 0; i < FcPatternObjectCount (p); i++) { h = (((h << 1) | (h >> 31)) ^ pe[i].object ^ FcValueListHash (FcPatternEltValues (&pe[i]))); } return h; } FcBool FcPatternEqualSubset (const FcPattern *pai, const FcPattern *pbi, const FcObjectSet *os) { FcPatternElt *ea, *eb; int i; for (i = 0; i < os->nobject; i++) { FcObject object = FcObjectFromName (os->objects[i]); ea = FcPatternObjectFindElt (pai, object); eb = FcPatternObjectFindElt (pbi, object); if (ea) { if (!eb) return FcFalse; if (!FcValueListEqual (FcPatternEltValues (ea), FcPatternEltValues (eb))) return FcFalse; } else { if (eb) return FcFalse; } } return FcTrue; } FcBool FcPatternObjectListAdd (FcPattern *p, FcObject object, FcValueListPtr list, FcBool append) { FcPatternElt *e; FcValueListPtr l, *prev; if (FcRefIsConst (&p->ref)) goto bail0; /* * Make sure the stored type is valid for built-in objects */ for (l = list; l != NULL; l = FcValueListNext (l)) { if (!FcObjectValidType (object, l->value.type)) { fprintf (stderr, "Fontconfig warning: FcPattern object %s does not accept value", FcObjectName (object)); FcValuePrintFile (stderr, l->value); fprintf (stderr, "\n"); goto bail0; } } e = FcPatternObjectInsertElt (p, object); if (!e) goto bail0; if (append) { for (prev = &e->values; *prev; prev = &(*prev)->next) ; *prev = list; } else { for (prev = &list; *prev; prev = &(*prev)->next) ; *prev = e->values; e->values = list; } return FcTrue; bail0: return FcFalse; } FcBool FcPatternObjectAddWithBinding (FcPattern *p, FcObject object, FcValue value, FcValueBinding binding, FcBool append) { FcPatternElt *e; FcValueListPtr newp, *prev; if (FcRefIsConst (&p->ref)) goto bail0; newp = FcValueListCreate(); if (!newp) goto bail0; newp->value = FcValueSave (value); newp->binding = binding; newp->next = NULL; if (newp->value.type == FcTypeVoid) goto bail1; /* * Make sure the stored type is valid for built-in objects */ if (!FcObjectValidType (object, newp->value.type)) { fprintf (stderr, "Fontconfig warning: FcPattern object %s does not accept value", FcObjectName (object)); FcValuePrintFile (stderr, newp->value); fprintf (stderr, "\n"); goto bail1; } e = FcPatternObjectInsertElt (p, object); if (!e) goto bail1; if (append) { for (prev = &e->values; *prev; prev = &(*prev)->next) ; *prev = newp; } else { newp->next = e->values; e->values = newp; } return FcTrue; bail1: FcValueListDestroy (newp); bail0: return FcFalse; } FcBool FcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append) { return FcPatternObjectAddWithBinding (p, object, value, FcValueBindingStrong, append); } FcBool FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append) { return FcPatternObjectAddWithBinding (p, FcObjectFromName (object), value, FcValueBindingStrong, append); } FcBool FcPatternAddWeak (FcPattern *p, const char *object, FcValue value, FcBool append) { return FcPatternObjectAddWithBinding (p, FcObjectFromName (object), value, FcValueBindingWeak, append); } FcBool FcPatternObjectDel (FcPattern *p, FcObject object) { FcPatternElt *e; e = FcPatternObjectFindElt (p, object); if (!e) return FcFalse; /* destroy value */ FcValueListDestroy (e->values); /* shuffle existing ones down */ memmove (e, e + 1, (FcPatternElts (p) + FcPatternObjectCount (p) - (e + 1)) * sizeof (FcPatternElt)); p->num--; e = FcPatternElts (p) + FcPatternObjectCount (p); e->object = 0; e->values = NULL; return FcTrue; } FcBool FcPatternDel (FcPattern *p, const char *object) { return FcPatternObjectDel (p, FcObjectFromName (object)); } FcBool FcPatternRemove (FcPattern *p, const char *object, int id) { FcPatternElt *e; FcValueListPtr *prev, l; e = FcPatternObjectFindElt (p, FcObjectFromName (object)); if (!e) return FcFalse; for (prev = &e->values; (l = *prev); prev = &l->next) { if (!id) { *prev = l->next; l->next = NULL; FcValueListDestroy (l); if (!e->values) FcPatternDel (p, object); return FcTrue; } id--; } return FcFalse; } FcBool FcPatternObjectAddInteger (FcPattern *p, FcObject object, int i) { FcValue v; v.type = FcTypeInteger; v.u.i = i; return FcPatternObjectAdd (p, object, v, FcTrue); } FcBool FcPatternAddInteger (FcPattern *p, const char *object, int i) { return FcPatternObjectAddInteger (p, FcObjectFromName (object), i); } FcBool FcPatternObjectAddDouble (FcPattern *p, FcObject object, double d) { FcValue v; v.type = FcTypeDouble; v.u.d = d; return FcPatternObjectAdd (p, object, v, FcTrue); } FcBool FcPatternAddDouble (FcPattern *p, const char *object, double d) { return FcPatternObjectAddDouble (p, FcObjectFromName (object), d); } FcBool FcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s) { FcValue v; if (!s) { v.type = FcTypeVoid; v.u.s = 0; return FcPatternObjectAdd (p, object, v, FcTrue); } v.type = FcTypeString; v.u.s = s; return FcPatternObjectAdd (p, object, v, FcTrue); } FcBool FcPatternAddString (FcPattern *p, const char *object, const FcChar8 *s) { return FcPatternObjectAddString (p, FcObjectFromName (object), s); } FcBool FcPatternAddMatrix (FcPattern *p, const char *object, const FcMatrix *s) { FcValue v; v.type = FcTypeMatrix; v.u.m = s; return FcPatternAdd (p, object, v, FcTrue); } FcBool FcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b) { FcValue v; v.type = FcTypeBool; v.u.b = b; return FcPatternObjectAdd (p, object, v, FcTrue); } FcBool FcPatternAddBool (FcPattern *p, const char *object, FcBool b) { return FcPatternObjectAddBool (p, FcObjectFromName (object), b); } FcBool FcPatternObjectAddCharSet (FcPattern *p, FcObject object, const FcCharSet *c) { FcValue v; v.type = FcTypeCharSet; v.u.c = (FcCharSet *)c; return FcPatternObjectAdd (p, object, v, FcTrue); } FcBool FcPatternAddCharSet (FcPattern *p, const char *object, const FcCharSet *c) { return FcPatternObjectAddCharSet (p, FcObjectFromName (object), c); } FcBool FcPatternAddFTFace (FcPattern *p, const char *object, const FT_Face f) { FcValue v; v.type = FcTypeFTFace; v.u.f = (void *)f; return FcPatternAdd (p, object, v, FcTrue); } FcBool FcPatternObjectAddLangSet (FcPattern *p, FcObject object, const FcLangSet *ls) { FcValue v; v.type = FcTypeLangSet; v.u.l = (FcLangSet *)ls; return FcPatternObjectAdd (p, object, v, FcTrue); } FcBool FcPatternAddLangSet (FcPattern *p, const char *object, const FcLangSet *ls) { return FcPatternObjectAddLangSet (p, FcObjectFromName (object), ls); } FcBool FcPatternObjectAddRange (FcPattern *p, FcObject object, const FcRange *r) { FcValue v; v.type = FcTypeRange; v.u.r = (FcRange *)r; return FcPatternObjectAdd (p, object, v, FcTrue); } FcBool FcPatternAddRange (FcPattern *p, const char *object, const FcRange *r) { return FcPatternObjectAddRange (p, FcObjectFromName (object), r); } FcResult FcPatternObjectGetWithBinding (const FcPattern *p, FcObject object, int id, FcValue *v, FcValueBinding *b) { FcPatternElt *e; FcValueListPtr l; if (!p) return FcResultNoMatch; e = FcPatternObjectFindElt (p, object); if (!e) return FcResultNoMatch; for (l = FcPatternEltValues (e); l; l = FcValueListNext (l)) { if (!id) { *v = FcValueCanonicalize (&l->value); if (b) *b = l->binding; return FcResultMatch; } id--; } return FcResultNoId; } FcResult FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v) { return FcPatternObjectGetWithBinding (p, object, id, v, NULL); } FcResult FcPatternGetWithBinding (const FcPattern *p, const char *object, int id, FcValue *v, FcValueBinding *b) { return FcPatternObjectGetWithBinding (p, FcObjectFromName (object), id, v, b); } FcResult FcPatternGet (const FcPattern *p, const char *object, int id, FcValue *v) { return FcPatternObjectGetWithBinding (p, FcObjectFromName (object), id, v, NULL); } FcResult FcPatternObjectGetInteger (const FcPattern *p, FcObject object, int id, int *i) { FcValue v; FcResult r; r = FcPatternObjectGet (p, object, id, &v); if (r != FcResultMatch) return r; switch ((int)v.type) { case FcTypeDouble: *i = (int)v.u.d; break; case FcTypeInteger: *i = v.u.i; break; default: return FcResultTypeMismatch; } return FcResultMatch; } FcResult FcPatternGetInteger (const FcPattern *p, const char *object, int id, int *i) { return FcPatternObjectGetInteger (p, FcObjectFromName (object), id, i); } FcResult FcPatternObjectGetDouble (const FcPattern *p, FcObject object, int id, double *d) { FcValue v; FcResult r; r = FcPatternObjectGet (p, object, id, &v); if (r != FcResultMatch) return r; switch ((int)v.type) { case FcTypeDouble: *d = v.u.d; break; case FcTypeInteger: *d = (double)v.u.i; break; default: return FcResultTypeMismatch; } return FcResultMatch; } FcResult FcPatternGetDouble (const FcPattern *p, const char *object, int id, double *d) { return FcPatternObjectGetDouble (p, FcObjectFromName (object), id, d); } FcResult FcPatternObjectGetString (const FcPattern *p, FcObject object, int id, FcChar8 **s) { FcValue v; FcResult r; r = FcPatternObjectGet (p, object, id, &v); if (r != FcResultMatch) return r; if (v.type != FcTypeString) return FcResultTypeMismatch; *s = (FcChar8 *)v.u.s; return FcResultMatch; } FcResult FcPatternGetString (const FcPattern *p, const char *object, int id, FcChar8 **s) { return FcPatternObjectGetString (p, FcObjectFromName (object), id, s); } FcResult FcPatternGetMatrix (const FcPattern *p, const char *object, int id, FcMatrix **m) { FcValue v; FcResult r; r = FcPatternGet (p, object, id, &v); if (r != FcResultMatch) return r; if (v.type != FcTypeMatrix) return FcResultTypeMismatch; *m = (FcMatrix *)v.u.m; return FcResultMatch; } FcResult FcPatternObjectGetBool (const FcPattern *p, FcObject object, int id, FcBool *b) { FcValue v; FcResult r; r = FcPatternObjectGet (p, object, id, &v); if (r != FcResultMatch) return r; if (v.type != FcTypeBool) return FcResultTypeMismatch; *b = v.u.b; return FcResultMatch; } FcResult FcPatternGetBool (const FcPattern *p, const char *object, int id, FcBool *b) { return FcPatternObjectGetBool (p, FcObjectFromName (object), id, b); } FcResult FcPatternGetCharSet (const FcPattern *p, const char *object, int id, FcCharSet **c) { return FcPatternObjectGetCharSet (p, FcObjectFromName (object), id, c); } FcResult FcPatternObjectGetCharSet (const FcPattern *p, FcObject object, int id, FcCharSet **c) { FcValue v; FcResult r; r = FcPatternObjectGet (p, object, id, &v); if (r != FcResultMatch) return r; if (v.type != FcTypeCharSet) return FcResultTypeMismatch; *c = (FcCharSet *)v.u.c; return FcResultMatch; } FcResult FcPatternGetFTFace (const FcPattern *p, const char *object, int id, FT_Face *f) { FcValue v; FcResult r; r = FcPatternGet (p, object, id, &v); if (r != FcResultMatch) return r; if (v.type != FcTypeFTFace) return FcResultTypeMismatch; *f = (FT_Face)v.u.f; return FcResultMatch; } FcResult FcPatternGetLangSet (const FcPattern *p, const char *object, int id, FcLangSet **ls) { return FcPatternObjectGetLangSet (p, FcObjectFromName (object), id, ls); } FcResult FcPatternObjectGetLangSet (const FcPattern *p, FcObject object, int id, FcLangSet **ls) { FcValue v; FcResult r; r = FcPatternObjectGet (p, object, id, &v); if (r != FcResultMatch) return r; if (v.type != FcTypeLangSet) return FcResultTypeMismatch; *ls = (FcLangSet *)v.u.l; return FcResultMatch; } FcResult FcPatternObjectGetRange (const FcPattern *p, FcObject object, int id, FcRange **r) { FcValue v; FcResult res; res = FcPatternObjectGet (p, object, id, &v); if (res != FcResultMatch) return res; switch ((int)v.type) { case FcTypeRange: *r = (FcRange *)v.u.r; break; default: return FcResultTypeMismatch; } return FcResultMatch; } FcResult FcPatternGetRange (const FcPattern *p, const char *object, int id, FcRange **r) { return FcPatternObjectGetRange (p, FcObjectFromName (object), id, r); } FcPattern * FcPatternDuplicate (const FcPattern *orig) { FcPattern *newp; FcPatternIter iter; FcValueListPtr l; if (!orig) return NULL; newp = FcPatternCreate(); if (!newp) goto bail0; FcPatternIterStart (orig, &iter); do { for (l = FcPatternIterGetValues (orig, &iter); l; l = FcValueListNext (l)) { if (!FcPatternObjectAddWithBinding (newp, FcPatternIterGetObjectId (orig, &iter), FcValueCanonicalize (&l->value), l->binding, FcTrue)) goto bail1; } } while (FcPatternIterNext (orig, &iter)); return newp; bail1: FcPatternDestroy (newp); bail0: return 0; } void FcPatternReference (FcPattern *p) { if (!FcRefIsConst (&p->ref)) FcRefInc (&p->ref); else FcCacheObjectReference (FcPatternGetCacheObject (p)); } FcPattern * FcPatternVaBuild (FcPattern *p, va_list va) { FcPattern *ret; FcPatternVapBuild (ret, p, va); return ret; } FcPattern * FcPatternBuild (FcPattern *p, ...) { va_list va; va_start (va, p); FcPatternVapBuild (p, p, va); va_end (va); return p; } /* * Add all of the elements in 's' to 'p' */ FcBool FcPatternAppend (FcPattern *p, FcPattern *s) { FcPatternIter iter; FcValueListPtr v; FcPatternIterStart (s, &iter); do { for (v = FcPatternIterGetValues (s, &iter); v; v = FcValueListNext (v)) { if (!FcPatternObjectAddWithBinding (p, FcPatternIterGetObjectId (s, &iter), FcValueCanonicalize (&v->value), v->binding, FcTrue)) return FcFalse; } } while (FcPatternIterNext (s, &iter)); return FcTrue; } FcPattern * FcPatternFilter (FcPattern *p, const FcObjectSet *os) { int i; FcPattern *ret; FcPatternElt *e; FcValueListPtr v; if (!os) return FcPatternDuplicate (p); ret = FcPatternCreate(); if (!ret) return NULL; for (i = 0; i < os->nobject; i++) { FcObject object = FcObjectFromName (os->objects[i]); e = FcPatternObjectFindElt (p, object); if (e) { for (v = FcPatternEltValues (e); v; v = FcValueListNext (v)) { if (!FcPatternObjectAddWithBinding (ret, e->object, FcValueCanonicalize (&v->value), v->binding, FcTrue)) goto bail0; } } } return ret; bail0: FcPatternDestroy (ret); return NULL; } typedef struct _FcPatternPrivateIter { FcPatternElt *elt; int pos; } FcPatternPrivateIter; static void FcPatternIterSet (const FcPattern *pat, FcPatternPrivateIter *iter) { iter->elt = FcPatternObjectCount (pat) > 0 && iter->pos < FcPatternObjectCount (pat) ? &FcPatternElts (pat)[iter->pos] : NULL; } void FcPatternIterStart (const FcPattern *pat, FcPatternIter *iter) { FcPatternPrivateIter *priv = (FcPatternPrivateIter *)iter; priv->pos = 0; FcPatternIterSet (pat, priv); } FcBool FcPatternIterNext (const FcPattern *pat, FcPatternIter *iter) { FcPatternPrivateIter *priv = (FcPatternPrivateIter *)iter; priv->pos++; if (priv->pos >= FcPatternObjectCount (pat)) return FcFalse; FcPatternIterSet (pat, priv); return FcTrue; } FcBool FcPatternIterEqual (const FcPattern *p1, FcPatternIter *i1, const FcPattern *p2, FcPatternIter *i2) { FcBool b1 = FcPatternIterIsValid (p1, i1); FcBool b2 = FcPatternIterIsValid (p2, i2); if (!i1 && !i2) return FcTrue; if (!b1 || !b2) return FcFalse; if (FcPatternIterGetObjectId (p1, i1) != FcPatternIterGetObjectId (p2, i2)) return FcFalse; return FcValueListEqual (FcPatternIterGetValues (p1, i1), FcPatternIterGetValues (p2, i2)); } FcBool FcPatternFindObjectIter (const FcPattern *pat, FcPatternIter *iter, FcObject object) { FcPatternPrivateIter *priv = (FcPatternPrivateIter *)iter; int i = FcPatternObjectPosition (pat, object); priv->elt = NULL; if (i < 0) return FcFalse; priv->pos = i; FcPatternIterSet (pat, priv); return FcTrue; } FcBool FcPatternFindIter (const FcPattern *pat, FcPatternIter *iter, const char *object) { return FcPatternFindObjectIter (pat, iter, FcObjectFromName (object)); } FcBool FcPatternIterIsValid (const FcPattern *pat, FcPatternIter *iter) { FcPatternPrivateIter *priv = (FcPatternPrivateIter *)iter; if (priv && priv->elt) return FcTrue; return FcFalse; } FcObject FcPatternIterGetObjectId (const FcPattern *pat, FcPatternIter *iter) { FcPatternPrivateIter *priv = (FcPatternPrivateIter *)iter; if (priv && priv->elt) return priv->elt->object; return 0; } const char * FcPatternIterGetObject (const FcPattern *pat, FcPatternIter *iter) { return FcObjectName (FcPatternIterGetObjectId (pat, iter)); } FcValueListPtr FcPatternIterGetValues (const FcPattern *pat, FcPatternIter *iter) { FcPatternPrivateIter *priv = (FcPatternPrivateIter *)iter; if (priv && priv->elt) return FcPatternEltValues (priv->elt); return NULL; } int FcPatternIterValueCount (const FcPattern *pat, FcPatternIter *iter) { int count = 0; FcValueListPtr l; for (l = FcPatternIterGetValues (pat, iter); l; l = FcValueListNext (l)) count++; return count; } FcResult FcPatternIterGetValue (const FcPattern *pat, FcPatternIter *iter, int id, FcValue *v, FcValueBinding *b) { FcValueListPtr l; for (l = FcPatternIterGetValues (pat, iter); l; l = FcValueListNext (l)) { if (id == 0) { *v = FcValueCanonicalize (&l->value); if (b) *b = l->binding; return FcResultMatch; } id--; } return FcResultNoId; } FcBool FcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat) { int i; FcPatternElt *elts = FcPatternElts (pat); if (!FcSerializeAlloc (serialize, pat, sizeof (FcPattern))) return FcFalse; if (!FcSerializeAlloc (serialize, elts, FcPatternObjectCount (pat) * sizeof (FcPatternElt))) return FcFalse; for (i = 0; i < FcPatternObjectCount (pat); i++) if (!FcValueListSerializeAlloc (serialize, FcPatternEltValues (elts + i))) return FcFalse; return FcTrue; } FcPattern * FcPatternSerialize (FcSerialize *serialize, const FcPattern *pat) { FcPattern *pat_serialized; FcPatternElt *elts = FcPatternElts (pat); FcPatternElt *elts_serialized; FcValueList *values_serialized; int i; pat_serialized = FcSerializePtr (serialize, pat); if (!pat_serialized) return NULL; *pat_serialized = *pat; pat_serialized->size = FcPatternObjectCount (pat); FcRefSetConst (&pat_serialized->ref); elts_serialized = FcSerializePtr (serialize, elts); if (!elts_serialized) return NULL; pat_serialized->elts_offset = FcPtrToOffset (pat_serialized, elts_serialized); for (i = 0; i < FcPatternObjectCount (pat); i++) { values_serialized = FcValueListSerialize (serialize, FcPatternEltValues (elts + i)); if (!values_serialized) return NULL; elts_serialized[i].object = elts[i].object; elts_serialized[i].values = FcPtrToEncodedOffset (&elts_serialized[i], values_serialized, FcValueList); } if (FcDebug() & FC_DBG_CACHEV) { printf ("Raw pattern:\n"); FcPatternPrint (pat); printf ("Serialized pattern:\n"); FcPatternPrint (pat_serialized); printf ("\n"); } return pat_serialized; } FcBool FcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *vl) { while (vl) { if (!FcSerializeAlloc (serialize, vl, sizeof (FcValueList))) return FcFalse; switch ((int)vl->value.type) { case FcTypeString: if (!FcStrSerializeAlloc (serialize, vl->value.u.s)) return FcFalse; break; case FcTypeCharSet: if (!FcCharSetSerializeAlloc (serialize, vl->value.u.c)) return FcFalse; break; case FcTypeLangSet: if (!FcLangSetSerializeAlloc (serialize, vl->value.u.l)) return FcFalse; break; case FcTypeRange: if (!FcRangeSerializeAlloc (serialize, vl->value.u.r)) return FcFalse; break; default: break; } vl = vl->next; } return FcTrue; } FcValueList * FcValueListSerialize (FcSerialize *serialize, const FcValueList *vl) { FcValueList *vl_serialized; FcChar8 *s_serialized; FcCharSet *c_serialized; FcLangSet *l_serialized; FcRange *r_serialized; FcValueList *head_serialized = NULL; FcValueList *prev_serialized = NULL; while (vl) { vl_serialized = FcSerializePtr (serialize, vl); if (!vl_serialized) return NULL; if (prev_serialized) prev_serialized->next = FcPtrToEncodedOffset (prev_serialized, vl_serialized, FcValueList); else head_serialized = vl_serialized; vl_serialized->next = NULL; vl_serialized->value.type = vl->value.type; switch ((int)vl->value.type) { case FcTypeInteger: vl_serialized->value.u.i = vl->value.u.i; break; case FcTypeDouble: vl_serialized->value.u.d = vl->value.u.d; break; case FcTypeString: s_serialized = FcStrSerialize (serialize, vl->value.u.s); if (!s_serialized) return NULL; vl_serialized->value.u.s = FcPtrToEncodedOffset (&vl_serialized->value, s_serialized, FcChar8); break; case FcTypeBool: vl_serialized->value.u.b = vl->value.u.b; break; case FcTypeMatrix: /* can't happen */ break; case FcTypeCharSet: c_serialized = FcCharSetSerialize (serialize, vl->value.u.c); if (!c_serialized) return NULL; vl_serialized->value.u.c = FcPtrToEncodedOffset (&vl_serialized->value, c_serialized, FcCharSet); break; case FcTypeFTFace: /* can't happen */ break; case FcTypeLangSet: l_serialized = FcLangSetSerialize (serialize, vl->value.u.l); if (!l_serialized) return NULL; vl_serialized->value.u.l = FcPtrToEncodedOffset (&vl_serialized->value, l_serialized, FcLangSet); break; case FcTypeRange: r_serialized = FcRangeSerialize (serialize, vl->value.u.r); if (!r_serialized) return NULL; vl_serialized->value.u.r = FcPtrToEncodedOffset (&vl_serialized->value, r_serialized, FcRange); break; default: break; } prev_serialized = vl_serialized; vl = vl->next; } return head_serialized; } #define __fcpat__ #include "fcaliastail.h" #include "fcftaliastail.h" #undef __fcpat__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcptrlist.c000066400000000000000000000112271503113465200243420ustar00rootroot00000000000000/* * fontconfig/src/fcptrlist.c * * Copyright © 2000 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" typedef struct _FcPtrListEntry { struct _FcPtrListEntry *next; void *data; } FcPtrListEntry; struct _FcPtrList { FcDestroyFunc destroy_func; FcPtrListEntry *list; FcPtrListEntry *last; }; typedef struct _FcPtrListIterPrivate { const FcPtrList *list; FcPtrListEntry *entry; FcPtrListEntry *prev; } FcPtrListIterPrivate; FcPtrList * FcPtrListCreate (FcDestroyFunc func) { FcPtrList *ret = (FcPtrList *)malloc (sizeof (FcPtrList)); if (ret) { ret->destroy_func = func; ret->list = NULL; ret->last = NULL; } return ret; } void FcPtrListDestroy (FcPtrList *list) { FcPtrListIter iter; if (list) { FcPtrListIterInit (list, &iter); do { if (FcPtrListIterGetValue (list, &iter)) if (list->destroy_func) list->destroy_func (FcPtrListIterGetValue (list, &iter)); FcPtrListIterRemove (list, &iter); } while (FcPtrListIterIsValid (list, &iter)); free (list); } } void FcPtrListIterInit (const FcPtrList *list, FcPtrListIter *iter) { FcPtrListIterPrivate *priv = (FcPtrListIterPrivate *)iter; priv->list = list; priv->entry = list->list; priv->prev = NULL; } void FcPtrListIterInitAtLast (FcPtrList *list, FcPtrListIter *iter) { FcPtrListIterPrivate *priv = (FcPtrListIterPrivate *)iter; priv->list = list; priv->entry = NULL; priv->prev = list->last; } FcBool FcPtrListIterNext (const FcPtrList *list, FcPtrListIter *iter) { FcPtrListIterPrivate *priv = (FcPtrListIterPrivate *)iter; if (list != priv->list) return FcFalse; priv->prev = priv->entry; priv->entry = priv->entry->next; return priv->entry != NULL; } FcBool FcPtrListIterIsValid (const FcPtrList *list, const FcPtrListIter *iter) { FcPtrListIterPrivate *priv = (FcPtrListIterPrivate *)iter; return list == priv->list && priv->entry; } void * FcPtrListIterGetValue (const FcPtrList *list, const FcPtrListIter *iter) { FcPtrListIterPrivate *priv = (FcPtrListIterPrivate *)iter; if (list != priv->list || !priv->entry) return NULL; return priv->entry->data; } FcBool FcPtrListIterAdd (FcPtrList *list, FcPtrListIter *iter, void *data) { FcPtrListEntry *e; FcPtrListIterPrivate *priv = (FcPtrListIterPrivate *)iter; if (list != priv->list) return FcFalse; e = (FcPtrListEntry *)malloc (sizeof (FcPtrListEntry)); if (!e) return FcFalse; e->data = data; if (priv->entry) { e->next = priv->entry->next; priv->entry->next = e; } else { e->next = NULL; list->last = e; if (priv->prev) { priv->prev->next = e; priv->entry = priv->prev; } else { list->list = e; priv->entry = e; return FcTrue; } } return FcPtrListIterNext (list, iter); } FcBool FcPtrListIterRemove (FcPtrList *list, FcPtrListIter *iter) { FcPtrListIterPrivate *priv = (FcPtrListIterPrivate *)iter; FcPtrListEntry *e; if (list != priv->list) return FcFalse; if (!priv->entry) return FcTrue; if (list->list == priv->entry) list->list = list->list->next; e = priv->entry; if (priv->prev) priv->prev->next = priv->entry->next; priv->entry = priv->entry->next; free (e); if (!priv->entry) list->last = priv->prev; return FcTrue; } #define __fcplist__ #include "fcaliastail.h" #undef __fcplist__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcrange.c000066400000000000000000000071551503113465200237420ustar00rootroot00000000000000/* * fontconfig/src/fcrange.c * * Copyright © 2002 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" FcRange * FcRangeCreateDouble (double begin, double end) { FcRange *ret = malloc (sizeof (FcRange)); if (ret) { ret->begin = begin; ret->end = end; } return ret; } FcRange * FcRangeCreateInteger (FcChar32 begin, FcChar32 end) { FcRange *ret = malloc (sizeof (FcRange)); if (ret) { ret->begin = begin; ret->end = end; } return ret; } void FcRangeDestroy (FcRange *range) { if (range) free (range); } FcRange * FcRangeCopy (const FcRange *range) { return FcRangeCreateDouble (range->begin, range->end); } FcBool FcRangeGetDouble (const FcRange *range, double *begin, double *end) { if (!range) return FcFalse; if (begin) *begin = range->begin; if (end) *end = range->end; return FcTrue; } FcRange * FcRangePromote (double v, FcValuePromotionBuffer *vbuf) { typedef struct { FcRange r; } FcRangePromotionBuffer; FcRangePromotionBuffer *buf = (FcRangePromotionBuffer *)vbuf; FC_ASSERT_STATIC (sizeof (FcRangePromotionBuffer) <= sizeof (FcValuePromotionBuffer)); buf->r.begin = v; buf->r.end = v; return &buf->r; } FcBool FcRangeIsInRange (const FcRange *a, const FcRange *b) { return a->begin >= b->begin && a->end <= b->end; } FcBool FcRangeCompare (FcOp op, const FcRange *a, const FcRange *b) { switch ((int)op) { case FcOpEqual: return a->begin == b->begin && a->end == b->end; case FcOpContains: case FcOpListing: return FcRangeIsInRange (a, b); case FcOpNotEqual: return a->begin != b->begin || a->end != b->end; case FcOpNotContains: return !FcRangeIsInRange (a, b); case FcOpLess: return a->end < b->begin; case FcOpLessEqual: return a->end <= b->begin; case FcOpMore: return a->begin > b->end; case FcOpMoreEqual: return a->begin >= b->end; default: break; } return FcFalse; } FcChar32 FcRangeHash (const FcRange *r) { int b = (int)(r->begin * 100); int e = (int)(r->end * 100); return b ^ (b << 1) ^ (e << 9); } FcBool FcRangeSerializeAlloc (FcSerialize *serialize, const FcRange *r) { if (!FcSerializeAlloc (serialize, r, sizeof (FcRange))) return FcFalse; return FcTrue; } FcRange * FcRangeSerialize (FcSerialize *serialize, const FcRange *r) { FcRange *r_serialize = FcSerializePtr (serialize, r); if (!r_serialize) return NULL; memcpy (r_serialize, r, sizeof (FcRange)); return r_serialize; } #define __fcrange__ #include "fcaliastail.h" #undef __fcrange__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcserialize.c000066400000000000000000000174541503113465200246400ustar00rootroot00000000000000/* * Copyright © 2006 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that copyright * notice and this permission notice appear in supporting documentation, and * that the name of the copyright holders not be used in advertising or * publicity pertaining to distribution of the software without specific, * written prior permission. The copyright holders make no representations * about the suitability of this software for any purpose. It is provided "as * is" without express or implied warranty. * * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE * OF THIS SOFTWARE. */ #include "fcint.h" intptr_t FcAlignSize (intptr_t size) { intptr_t rem = size % sizeof (FcAlign); if (rem) size += sizeof (FcAlign) - rem; return size; } /* * Serialization helper object -- allocate space in the * yet-to-be-created linear array for a serialized font set */ FcSerialize * FcSerializeCreate (void) { FcSerialize *serialize; serialize = malloc (sizeof (FcSerialize)); if (!serialize) return NULL; serialize->size = 0; serialize->linear = NULL; serialize->cs_freezer = NULL; serialize->buckets = NULL; serialize->buckets_count = 0; serialize->buckets_used = 0; serialize->buckets_used_max = 0; return serialize; } void FcSerializeDestroy (FcSerialize *serialize) { free (serialize->buckets); if (serialize->cs_freezer) FcCharSetFreezerDestroy (serialize->cs_freezer); free (serialize); } static size_t FcSerializeNextBucketIndex (const FcSerialize *serialize, size_t index) { if (index == 0) index = serialize->buckets_count; --index; return index; } #if ((SIZEOF_VOID_P) * (CHAR_BIT)) == 32 /* * Based on triple32 * https://github.com/skeeto/hash-prospector */ static uintptr_t FcSerializeHashPtr (const void *object) { uintptr_t x = (uintptr_t)object; x ^= x >> 17; x *= 0xed5ad4bbU; x ^= x >> 11; x *= 0xac4c1b51U; x ^= x >> 15; x *= 0x31848babU; x ^= x >> 14; return x ? x : 1; /* 0 reserved to mark empty, x starts out 0 */ } #elif ((SIZEOF_VOID_P) * (CHAR_BIT)) == 64 /* * Based on splittable64/splitmix64 from Mix13 * https://zimbry.blogspot.com/2011/09/better-bit-mixing-improving-on.html * https://prng.di.unimi.it/splitmix64.c */ static uintptr_t FcSerializeHashPtr (const void *object) { uintptr_t x = (uintptr_t)object; x ^= x >> 30; x *= 0xbf58476d1ce4e5b9U; x ^= x >> 27; x *= 0x94d049bb133111ebU; x ^= x >> 31; return x ? x : 1; /* 0 reserved to mark empty, x starts out 0 */ } #endif static FcSerializeBucket * FcSerializeFind (const FcSerialize *serialize, const void *object) { uintptr_t hash = FcSerializeHashPtr (object); size_t buckets_count = serialize->buckets_count; size_t index = hash & (buckets_count - 1); for (size_t n = 0; n < buckets_count; ++n) { FcSerializeBucket *bucket = &serialize->buckets[index]; if (bucket->hash == 0) { return NULL; } if (object == bucket->object) { return bucket; } index = FcSerializeNextBucketIndex (serialize, index); } return NULL; } static FcSerializeBucket * FcSerializeUncheckedSet (FcSerialize *serialize, FcSerializeBucket *insert) { const void *object = insert->object; size_t buckets_count = serialize->buckets_count; size_t index = insert->hash & (buckets_count - 1); for (size_t n = 0; n < buckets_count; ++n) { FcSerializeBucket *bucket = &serialize->buckets[index]; if (bucket->hash == 0) { *bucket = *insert; ++serialize->buckets_used; return bucket; } if (object == bucket->object) { /* FcSerializeAlloc should not allow this to happen. */ assert (0); *bucket = *insert; return bucket; } index = FcSerializeNextBucketIndex (serialize, index); } assert (0); return NULL; } static FcBool FcSerializeResize (FcSerialize *serialize, size_t new_count) { size_t old_used = serialize->buckets_used; size_t old_count = serialize->buckets_count; FcSerializeBucket *old_buckets = serialize->buckets; FcSerializeBucket *old_buckets_end = old_buckets ? old_buckets + old_count : NULL; FcSerializeBucket *new_buckets = malloc (new_count * sizeof (*old_buckets)); if (!new_buckets) return FcFalse; FcSerializeBucket *new_buckets_end = new_buckets + new_count; for (FcSerializeBucket *b = new_buckets; b < new_buckets_end; ++b) b->hash = 0; serialize->buckets = new_buckets; serialize->buckets_count = new_count; serialize->buckets_used = 0; for (FcSerializeBucket *b = old_buckets; b < old_buckets_end; ++b) if (b->hash != 0 && !FcSerializeUncheckedSet (serialize, b)) { serialize->buckets = old_buckets; serialize->buckets_count = old_count; serialize->buckets_used = old_used; free (new_buckets); return FcFalse; } free (old_buckets); return FcTrue; } static FcSerializeBucket * FcSerializeSet (FcSerialize *serialize, const void *object, intptr_t offset) { if (serialize->buckets_used >= serialize->buckets_used_max) { size_t capacity = serialize->buckets_count; if (capacity == 0) capacity = 4; else if (capacity > SIZE_MAX / 2u) return NULL; else capacity *= 2; if (!FcSerializeResize (serialize, capacity)) return NULL; serialize->buckets_used_max = capacity / 4u * 3u; } FcSerializeBucket bucket; bucket.object = object; bucket.offset = offset; bucket.hash = FcSerializeHashPtr (object); return FcSerializeUncheckedSet (serialize, &bucket); } /* * Allocate space for an object in the serialized array. Keep track * of where the object is placed and only allocate one copy of each object */ FcBool FcSerializeAlloc (FcSerialize *serialize, const void *object, int size) { FcSerializeBucket *bucket = FcSerializeFind (serialize, object); if (bucket) return FcTrue; if (!FcSerializeSet (serialize, object, serialize->size)) return FcFalse; serialize->size += FcAlignSize (size); return FcTrue; } /* * Reserve space in the serialization array */ intptr_t FcSerializeReserve (FcSerialize *serialize, int size) { intptr_t offset = serialize->size; serialize->size += FcAlignSize (size); return offset; } /* * Given an object, return the offset in the serialized array where * the serialized copy of the object is stored */ intptr_t FcSerializeOffset (FcSerialize *serialize, const void *object) { FcSerializeBucket *bucket = FcSerializeFind (serialize, object); return bucket ? bucket->offset : 0; } /* * Given a cache and an object, return a pointer to where * the serialized copy of the object is stored */ void * FcSerializePtr (FcSerialize *serialize, const void *object) { intptr_t offset = FcSerializeOffset (serialize, object); if (!offset) return NULL; return (void *)((char *)serialize->linear + offset); } FcBool FcStrSerializeAlloc (FcSerialize *serialize, const FcChar8 *str) { return FcSerializeAlloc (serialize, str, strlen ((const char *)str) + 1); } FcChar8 * FcStrSerialize (FcSerialize *serialize, const FcChar8 *str) { FcChar8 *str_serialize = FcSerializePtr (serialize, str); if (!str_serialize) return NULL; strcpy ((char *)str_serialize, (const char *)str); return str_serialize; } #include "fcaliastail.h" #undef __fcserialize__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcstat.c000066400000000000000000000247521503113465200236230ustar00rootroot00000000000000/* * Copyright © 2000 Keith Packard * Copyright © 2005 Patrick Lam * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" #include "fcarch.h" #ifdef HAVE_DIRENT_H # include #endif #include #include #include #include #ifdef HAVE_SYS_VFS_H # include #endif #ifdef HAVE_SYS_STATVFS_H # include #endif #ifdef HAVE_SYS_STATFS_H # include #endif #ifdef HAVE_SYS_PARAM_H # include #endif #ifdef HAVE_SYS_MOUNT_H # include #endif #include #ifdef _WIN32 # ifdef __GNUC__ typedef long long INT64; # define EPOCH_OFFSET 11644473600ll # else # define EPOCH_OFFSET 11644473600i64 typedef __int64 INT64; # endif /* Workaround for problems in the stat() in the Microsoft C library: * * 1) stat() uses FindFirstFile() to get the file * attributes. Unfortunately this API doesn't return correct values * for modification time of a directory until some time after a file * or subdirectory has been added to the directory. (This causes * run-test.sh to fail, for instance.) GetFileAttributesEx() is * better, it returns the updated timestamp right away. * * 2) stat() does some strange things related to backward * compatibility with the local time timestamps on FAT volumes and * daylight saving time. This causes problems after the switches * to/from daylight saving time. See * http://bugzilla.gnome.org/show_bug.cgi?id=154968 , especially * comment #30, and http://www.codeproject.com/datetime/dstbugs.asp . * We don't need any of that, FAT and Win9x are as good as dead. So * just use the UTC timestamps from NTFS, converted to the Unix epoch. */ int FcStat (const FcChar8 *file, struct stat *statb) { WIN32_FILE_ATTRIBUTE_DATA wfad; char full_path_name[MAX_PATH]; char *basename; DWORD rc; if (!GetFileAttributesEx ((LPCSTR)file, GetFileExInfoStandard, &wfad)) return -1; statb->st_dev = 0; /* Calculate a pseudo inode number as a hash of the full path name. * Call GetLongPathName() to get the spelling of the path name as it * is on disk. */ rc = GetFullPathName ((LPCSTR)file, sizeof (full_path_name), full_path_name, &basename); if (rc == 0 || rc > sizeof (full_path_name)) return -1; rc = GetLongPathName (full_path_name, full_path_name, sizeof (full_path_name)); statb->st_ino = FcStringHash ((const FcChar8 *)full_path_name); statb->st_mode = _S_IREAD | _S_IWRITE; statb->st_mode |= (statb->st_mode >> 3) | (statb->st_mode >> 6); if (wfad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) statb->st_mode |= _S_IFDIR; else statb->st_mode |= _S_IFREG; statb->st_nlink = 1; statb->st_uid = statb->st_gid = 0; statb->st_rdev = 0; if (wfad.nFileSizeHigh > 0) return -1; statb->st_size = wfad.nFileSizeLow; statb->st_atime = (*(INT64 *)&wfad.ftLastAccessTime) / 10000000 - EPOCH_OFFSET; statb->st_mtime = (*(INT64 *)&wfad.ftLastWriteTime) / 10000000 - EPOCH_OFFSET; statb->st_ctime = statb->st_mtime; return 0; } #else int FcStat (const FcChar8 *file, struct stat *statb) { return stat ((char *)file, statb); } /* Adler-32 checksum implementation */ struct Adler32 { int a; int b; }; static void Adler32Init (struct Adler32 *ctx) { ctx->a = 1; ctx->b = 0; } static void Adler32Update (struct Adler32 *ctx, const char *data, int data_len) { while (data_len--) { ctx->a = (ctx->a + *data++) % 65521; ctx->b = (ctx->b + ctx->a) % 65521; } } static int Adler32Finish (struct Adler32 *ctx) { return ctx->a + (ctx->b << 16); } # ifdef HAVE_STRUCT_DIRENT_D_TYPE /* dirent.d_type can be relied upon on FAT filesystem */ static FcBool FcDirChecksumScandirFilter (const struct dirent *entry) { return entry->d_type != DT_DIR; } # endif static int FcDirChecksumScandirSorter (const struct dirent **lhs, const struct dirent **rhs) { return strcmp ((*lhs)->d_name, (*rhs)->d_name); } static void free_dirent (struct dirent **p) { struct dirent **x; for (x = p; *x != NULL; x++) free (*x); free (p); } int FcScandir (const char *dirp, struct dirent ***namelist, int (*filter) (const struct dirent *), int (*compar) (const struct dirent **, const struct dirent **)); int FcScandir (const char *dirp, struct dirent ***namelist, int (*filter) (const struct dirent *), int (*compar) (const struct dirent **, const struct dirent **)) { DIR *d; struct dirent *dent, *p, **dlist, **dlp; size_t lsize = 128, n = 0; d = opendir (dirp); if (!d) return -1; dlist = (struct dirent **)malloc (sizeof (struct dirent *) * lsize); if (!dlist) { closedir (d); errno = ENOMEM; return -1; } *dlist = NULL; while ((dent = readdir (d))) { if (!filter || (filter)(dent)) { size_t dentlen = FcPtrToOffset (dent, dent->d_name) + strlen (dent->d_name) + 1; dentlen = ((dentlen + ALIGNOF_VOID_P - 1) & ~(ALIGNOF_VOID_P - 1)); p = (struct dirent *)malloc (dentlen); if (!p) { free_dirent (dlist); closedir (d); errno = ENOMEM; return -1; } memcpy (p, dent, dentlen); if ((n + 1) >= lsize) { lsize += 128; dlp = (struct dirent **)realloc (dlist, sizeof (struct dirent *) * lsize); if (!dlp) { free (p); free_dirent (dlist); closedir (d); errno = ENOMEM; return -1; } dlist = dlp; } dlist[n++] = p; dlist[n] = NULL; } } closedir (d); qsort (dlist, n, sizeof (struct dirent *), (int (*) (const void *, const void *))compar); *namelist = dlist; return n; } static int FcDirChecksum (const FcChar8 *dir, time_t *checksum) { struct Adler32 ctx; struct dirent **files; int n; int ret = 0; size_t len = strlen ((const char *)dir); Adler32Init (&ctx); n = FcScandir ((const char *)dir, &files, # ifdef HAVE_STRUCT_DIRENT_D_TYPE &FcDirChecksumScandirFilter, # else NULL, # endif &FcDirChecksumScandirSorter); if (n == -1) return -1; while (n--) { size_t dlen = strlen (files[n]->d_name); int dtype; # ifdef HAVE_STRUCT_DIRENT_D_TYPE dtype = files[n]->d_type; if (dtype == DT_UNKNOWN) { # endif struct stat statb; char *f = malloc (len + 1 + dlen + 1); if (!f) { ret = -1; goto bail; } memcpy (f, dir, len); f[len] = FC_DIR_SEPARATOR; memcpy (&f[len + 1], files[n]->d_name, dlen); f[len + 1 + dlen] = 0; if (lstat (f, &statb) < 0) { ret = -1; free (f); goto bail; } if (S_ISDIR (statb.st_mode)) { free (f); goto bail; } free (f); dtype = statb.st_mode; # ifdef HAVE_STRUCT_DIRENT_D_TYPE } # endif Adler32Update (&ctx, files[n]->d_name, dlen + 1); Adler32Update (&ctx, (char *)&dtype, sizeof (int)); bail: free (files[n]); } free (files); if (ret == -1) return -1; *checksum = Adler32Finish (&ctx); return 0; } #endif /* _WIN32 */ int FcStatChecksum (const FcChar8 *file, struct stat *statb) { if (FcStat (file, statb) == -1) return -1; #ifndef _WIN32 /* We have a workaround of the broken stat() in FcStat() for Win32. * No need to do something further more. */ if (FcIsFsMtimeBroken (file)) { if (FcDirChecksum (file, &statb->st_mtime) == -1) return -1; } #endif return 0; } static int FcFStatFs (int fd, FcStatFS *statb) { const char *p = NULL; int ret = -1; FcBool flag = FcFalse; #if defined(HAVE_FSTATVFS) && (defined(HAVE_STRUCT_STATVFS_F_BASETYPE) || defined(HAVE_STRUCT_STATVFS_F_FSTYPENAME)) struct statvfs buf; memset (statb, 0, sizeof (FcStatFS)); if ((ret = fstatvfs (fd, &buf)) == 0) { # if defined(HAVE_STRUCT_STATVFS_F_BASETYPE) p = buf.f_basetype; # elif defined(HAVE_STRUCT_STATVFS_F_FSTYPENAME) p = buf.f_fstypename; # endif } #elif defined(HAVE_FSTATFS) && (defined(HAVE_STRUCT_STATFS_F_FLAGS) || defined(HAVE_STRUCT_STATFS_F_FSTYPENAME) || defined(__linux__)) struct statfs buf; memset (statb, 0, sizeof (FcStatFS)); if ((ret = fstatfs (fd, &buf)) == 0) { # if defined(HAVE_STRUCT_STATFS_F_FLAGS) && defined(MNT_LOCAL) statb->is_remote_fs = !(buf.f_flags & MNT_LOCAL); flag = FcTrue; # endif # if defined(HAVE_STRUCT_STATFS_F_FSTYPENAME) p = buf.f_fstypename; # elif defined(__linux__) || defined(__EMSCRIPTEN__) switch (buf.f_type) { case 0x6969: /* nfs */ statb->is_remote_fs = FcTrue; break; case 0x4d44: /* fat */ statb->is_mtime_broken = FcTrue; break; default: break; } return ret; # else # error "BUG: No way to figure out with fstatfs()" # endif } #endif if (p) { if (!flag && strcmp (p, "nfs") == 0) statb->is_remote_fs = FcTrue; if (strcmp (p, "msdosfs") == 0 || strcmp (p, "pcfs") == 0) statb->is_mtime_broken = FcTrue; } return ret; } FcBool FcIsFsMmapSafe (int fd) { FcStatFS statb; if (FcFStatFs (fd, &statb) < 0) return FcTrue; return !statb.is_remote_fs; } FcBool FcIsFsMtimeBroken (const FcChar8 *dir) { int fd = FcOpen ((const char *)dir, O_RDONLY); if (fd != -1) { FcStatFS statb; int ret = FcFStatFs (fd, &statb); close (fd); if (ret < 0) return FcFalse; return statb.is_mtime_broken; } return FcFalse; } #define __fcstat__ #include "fcaliastail.h" #undef __fcstat__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcstdint.h.in000066400000000000000000000000241503113465200245510ustar00rootroot00000000000000#include fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcstr.c000066400000000000000000000717631503113465200234640ustar00rootroot00000000000000/* * fontconfig/src/fcstr.c * * Copyright © 2000 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" #include #include #include /* Objects MT-safe for readonly access. */ FcChar8 * FcStrCopy (const FcChar8 *s) { return FcStrdup (s); } static FcChar8 * FcStrMakeTriple (const FcChar8 *s1, const FcChar8 *s2, const FcChar8 *s3) { int s1l = s1 ? strlen ((char *)s1) : 0; int s2l = s2 ? strlen ((char *)s2) : 0; int s3l = s3 ? strlen ((char *)s3) : 0; int l = s1l + 1 + s2l + 1 + s3l + 1; FcChar8 *s = malloc (l); if (!s) return 0; if (s1) memcpy (s, s1, s1l + 1); else s[0] = '\0'; if (s2) memcpy (s + s1l + 1, s2, s2l + 1); else s[s1l + 1] = '\0'; if (s3) memcpy (s + s1l + 1 + s2l + 1, s3, s3l + 1); else s[s1l + 1 + s2l + 1] = '\0'; return s; } FcChar8 * FcStrPlus (const FcChar8 *s1, const FcChar8 *s2) { int s1l = strlen ((char *)s1); int s2l = strlen ((char *)s2); int l = s1l + s2l + 1; FcChar8 *s = malloc (l); if (!s) return 0; memcpy (s, s1, s1l); memcpy (s + s1l, s2, s2l + 1); return s; } void FcStrFree (FcChar8 *s) { free (s); } #include "../fc-case/fccase.h" #define FcCaseFoldUpperCount(cf) \ ((cf)->method == FC_CASE_FOLD_FULL ? 1 : (cf)->count) typedef struct _FcCaseWalker { const FcChar8 *read; const FcChar8 *src; FcChar8 utf8[FC_MAX_CASE_FOLD_CHARS + 1]; } FcCaseWalker; static void FcStrCaseWalkerInit (const FcChar8 *src, FcCaseWalker *w) { w->src = src; w->read = 0; } static FcChar8 FcStrCaseWalkerLong (FcCaseWalker *w, FcChar8 r) { FcChar32 ucs4; int slen; int len = strlen ((char *)w->src); slen = FcUtf8ToUcs4 (w->src - 1, &ucs4, len + 1); if (slen <= 0) return r; if (FC_MIN_FOLD_CHAR <= ucs4 && ucs4 <= FC_MAX_FOLD_CHAR) { int min = 0; int max = FC_NUM_CASE_FOLD; while (min <= max) { int mid = (min + max) >> 1; FcChar32 low = fcCaseFold[mid].upper; FcChar32 high = low + FcCaseFoldUpperCount (&fcCaseFold[mid]); if (high <= ucs4) min = mid + 1; else if (ucs4 < low) max = mid - 1; else { const FcCaseFold *fold = &fcCaseFold[mid]; int dlen; switch (fold->method) { case FC_CASE_FOLD_EVEN_ODD: if ((ucs4 & 1) != (fold->upper & 1)) return r; /* fall through ... */ default: dlen = FcUcs4ToUtf8 (ucs4 + fold->offset, w->utf8); break; case FC_CASE_FOLD_FULL: dlen = fold->count; memcpy (w->utf8, fcCaseFoldChars + fold->offset, dlen); break; } /* consume rest of src utf-8 bytes */ w->src += slen - 1; /* read from temp buffer */ w->utf8[dlen] = '\0'; w->read = w->utf8; return *w->read++; } } } return r; } static FcChar8 FcStrCaseWalkerNextNonDelim (FcCaseWalker *w, const char *delims) { FcChar8 r; if (FC_UNLIKELY (w->read != NULL)) { if ((r = *w->read++)) return r; w->read = 0; } do { r = *w->src++; } while (r != 0 && delims && strchr (delims, r)); if (FC_UNLIKELY ((r & 0xc0) == 0xc0)) return FcStrCaseWalkerLong (w, r); if ('A' <= r && r <= 'Z') r = r - 'A' + 'a'; return r; } static FcChar8 FcStrCaseWalkerNextNonBlank (FcCaseWalker *w) { FcChar8 r; if (FC_UNLIKELY (w->read != NULL)) { if ((r = *w->read++)) return r; w->read = 0; } do { r = *w->src++; } while (r == ' '); if (FC_UNLIKELY ((r & 0xc0) == 0xc0)) return FcStrCaseWalkerLong (w, r); if ('A' <= r && r <= 'Z') r = r - 'A' + 'a'; return r; } static FcChar8 FcStrCaseWalkerNext (FcCaseWalker *w) { FcChar8 r; if (FC_UNLIKELY (w->read != NULL)) { if ((r = *w->read++)) return r; w->read = 0; } r = *w->src++; if (FC_UNLIKELY ((r & 0xc0) == 0xc0)) return FcStrCaseWalkerLong (w, r); if ('A' <= r && r <= 'Z') r = r - 'A' + 'a'; return r; } FcChar8 * FcStrDowncase (const FcChar8 *s) { FcCaseWalker w; int len = 0; FcChar8 *dst, *d; FcStrCaseWalkerInit (s, &w); while (FcStrCaseWalkerNext (&w)) len++; d = dst = malloc (len + 1); if (!d) return 0; FcStrCaseWalkerInit (s, &w); while ((*d++ = FcStrCaseWalkerNext (&w))) ; return dst; } int FcStrCmpIgnoreCase (const FcChar8 *s1, const FcChar8 *s2) { FcCaseWalker w1, w2; FcChar8 c1, c2; if (s1 == s2) return 0; FcStrCaseWalkerInit (s1, &w1); FcStrCaseWalkerInit (s2, &w2); for (;;) { c1 = FcStrCaseWalkerNext (&w1); c2 = FcStrCaseWalkerNext (&w2); if (!c1 || (c1 != c2)) break; } return (int)c1 - (int)c2; } int FcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2) { FcCaseWalker w1, w2; FcChar8 c1, c2; if (s1 == s2) return 0; FcStrCaseWalkerInit (s1, &w1); FcStrCaseWalkerInit (s2, &w2); for (;;) { c1 = FcStrCaseWalkerNextNonBlank (&w1); c2 = FcStrCaseWalkerNextNonBlank (&w2); if (!c1 || (c1 != c2)) break; } return (int)c1 - (int)c2; } int FcStrCmp (const FcChar8 *s1, const FcChar8 *s2) { FcChar8 c1, c2; if (s1 == s2) return 0; for (;;) { c1 = *s1++; c2 = *s2++; if (!c1 || c1 != c2) break; } return (int)c1 - (int)c2; } /* * Return a hash value for a string */ FcChar32 FcStrHashIgnoreCase (const FcChar8 *s) { FcChar32 h = 0; FcCaseWalker w; FcChar8 c; FcStrCaseWalkerInit (s, &w); while ((c = FcStrCaseWalkerNext (&w))) h = ((h << 3) ^ (h >> 3)) ^ c; return h; } FcChar32 FcStrHashIgnoreBlanksAndCase (const FcChar8 *s) { FcChar32 h = 0; FcCaseWalker w; FcChar8 c; FcStrCaseWalkerInit (s, &w); while ((c = FcStrCaseWalkerNextNonBlank (&w))) h = ((h << 3) ^ (h >> 3)) ^ c; return h; } /* * Is the head of s1 equal to s2? */ static FcBool FcStrIsAtIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2) { FcCaseWalker w1, w2; FcChar8 c1, c2; FcStrCaseWalkerInit (s1, &w1); FcStrCaseWalkerInit (s2, &w2); for (;;) { c1 = FcStrCaseWalkerNextNonBlank (&w1); c2 = FcStrCaseWalkerNextNonBlank (&w2); if (!c1 || (c1 != c2)) break; } return c1 == c2 || !c2; } /* * Does s1 contain an instance of s2 (ignoring blanks and case)? */ const FcChar8 * FcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2) { while (*s1) { if (FcStrIsAtIgnoreBlanksAndCase (s1, s2)) return s1; s1++; } return 0; } static FcBool FcCharIsPunct (const FcChar8 c) { if (c < '0') return FcTrue; if (c <= '9') return FcFalse; if (c < 'A') return FcTrue; if (c <= 'Z') return FcFalse; if (c < 'a') return FcTrue; if (c <= 'z') return FcFalse; if (c <= '~') return FcTrue; return FcFalse; } /* * Is the head of s1 equal to s2? */ static FcBool FcStrIsAtIgnoreCase (const FcChar8 *s1, const FcChar8 *s2) { FcCaseWalker w1, w2; FcChar8 c1, c2; FcStrCaseWalkerInit (s1, &w1); FcStrCaseWalkerInit (s2, &w2); for (;;) { c1 = FcStrCaseWalkerNext (&w1); c2 = FcStrCaseWalkerNext (&w2); if (!c1 || (c1 != c2)) break; } return c1 == c2 || !c2; } /* * Does s1 contain an instance of s2 (ignoring blanks and case)? */ const FcChar8 * FcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2) { while (*s1) { if (FcStrIsAtIgnoreCase (s1, s2)) return s1; s1++; } return 0; } /* * Does s1 contain an instance of s2 on a word boundary (ignoring case)? */ const FcChar8 * FcStrContainsWord (const FcChar8 *s1, const FcChar8 *s2) { FcBool wordStart = FcTrue; int s1len = strlen ((char *)s1); int s2len = strlen ((char *)s2); while (s1len >= s2len) { if (wordStart && FcStrIsAtIgnoreCase (s1, s2) && (s1len == s2len || FcCharIsPunct (s1[s2len]))) { return s1; } wordStart = FcFalse; if (FcCharIsPunct (*s1)) wordStart = FcTrue; s1++; s1len--; } return 0; } /* * returns the number of strings (ignoring delimiters and case) being matched */ int FcStrMatchIgnoreCaseAndDelims (const FcChar8 *s1, const FcChar8 *s2, const FcChar8 *delims) { FcCaseWalker w1, w2; FcChar8 c1, c2; if (s1 == s2) return 0; FcStrCaseWalkerInit (s1, &w1); FcStrCaseWalkerInit (s2, &w2); for (;;) { c1 = FcStrCaseWalkerNextNonDelim (&w1, (const char *)delims); c2 = FcStrCaseWalkerNextNonDelim (&w2, (const char *)delims); if (!c1 || (c1 != c2)) break; } return w1.src - s1 - 1; } FcBool FcStrGlobMatch (const FcChar8 *glob, const FcChar8 *string) { FcChar8 c; while ((c = *glob++)) { switch (c) { case '*': /* short circuit common case */ if (!*glob) return FcTrue; /* short circuit another common case */ if (strchr ((char *)glob, '*') == 0) { size_t l1, l2; l1 = strlen ((char *)string); l2 = strlen ((char *)glob); if (l1 < l2) return FcFalse; string += (l1 - l2); } while (*string) { if (FcStrGlobMatch (glob, string)) return FcTrue; string++; } return FcFalse; case '?': if (*string++ == '\0') return FcFalse; break; default: if (*string++ != c) return FcFalse; break; } } return *string == '\0'; } const FcChar8 * FcStrStrIgnoreCase (const FcChar8 *s1, const FcChar8 *s2) { FcCaseWalker w1, w2; FcChar8 c1, c2; const FcChar8 *cur; if (!s1 || !s2) return 0; if (s1 == s2) return s1; FcStrCaseWalkerInit (s1, &w1); FcStrCaseWalkerInit (s2, &w2); c2 = FcStrCaseWalkerNext (&w2); for (;;) { cur = w1.src; c1 = FcStrCaseWalkerNext (&w1); if (!c1) break; if (c1 == c2) { FcCaseWalker w1t = w1; FcCaseWalker w2t = w2; FcChar8 c1t, c2t; for (;;) { c1t = FcStrCaseWalkerNext (&w1t); c2t = FcStrCaseWalkerNext (&w2t); if (!c2t) return cur; if (c2t != c1t) break; } } } return 0; } const FcChar8 * FcStrStr (const FcChar8 *s1, const FcChar8 *s2) { FcChar8 c1, c2; const FcChar8 *p = s1; const FcChar8 *b = s2; if (!s1 || !s2) return 0; if (s1 == s2) return s1; again: c2 = *s2++; if (!c2) return 0; for (;;) { p = s1; c1 = *s1++; if (!c1 || c1 == c2) break; } if (c1 != c2) return 0; for (;;) { c1 = *s1; c2 = *s2; if (c1 && c2 && c1 != c2) { s1 = p + 1; s2 = b; goto again; } if (!c2) return p; if (!c1) return 0; ++s1; ++s2; } /* never reached. */ } int FcUtf8ToUcs4 (const FcChar8 *src_orig, FcChar32 *dst, int len) { const FcChar8 *src = src_orig; FcChar8 s; int extra; FcChar32 result; if (len == 0) return 0; s = *src++; len--; if (!(s & 0x80)) { result = s; extra = 0; } else if (!(s & 0x40)) { return -1; } else if (!(s & 0x20)) { result = s & 0x1f; extra = 1; } else if (!(s & 0x10)) { result = s & 0xf; extra = 2; } else if (!(s & 0x08)) { result = s & 0x07; extra = 3; } else if (!(s & 0x04)) { result = s & 0x03; extra = 4; } else if (!(s & 0x02)) { result = s & 0x01; extra = 5; } else { return -1; } if (extra > len) return -1; while (extra--) { result <<= 6; s = *src++; if ((s & 0xc0) != 0x80) return -1; result |= s & 0x3f; } *dst = result; return src - src_orig; } FcBool FcUtf8Len (const FcChar8 *string, int len, int *nchar, int *wchar) { int n; int clen; FcChar32 c; FcChar32 max; n = 0; max = 0; while (len) { clen = FcUtf8ToUcs4 (string, &c, len); if (clen <= 0) /* malformed UTF8 string */ return FcFalse; if (c > max) max = c; string += clen; len -= clen; n++; } *nchar = n; if (max >= 0x10000) *wchar = 4; else if (max > 0x100) *wchar = 2; else *wchar = 1; return FcTrue; } int FcUcs4ToUtf8 (FcChar32 ucs4, FcChar8 dest[FC_UTF8_MAX_LEN]) { int bits; FcChar8 *d = dest; if (ucs4 < 0x80) { *d++ = ucs4; bits = -6; } else if (ucs4 < 0x800) { *d++ = ((ucs4 >> 6) & 0x1F) | 0xC0; bits = 0; } else if (ucs4 < 0x10000) { *d++ = ((ucs4 >> 12) & 0x0F) | 0xE0; bits = 6; } else if (ucs4 < 0x200000) { *d++ = ((ucs4 >> 18) & 0x07) | 0xF0; bits = 12; } else if (ucs4 < 0x4000000) { *d++ = ((ucs4 >> 24) & 0x03) | 0xF8; bits = 18; } else if (ucs4 < 0x80000000) { *d++ = ((ucs4 >> 30) & 0x01) | 0xFC; bits = 24; } else return 0; for (; bits >= 0; bits -= 6) { *d++ = ((ucs4 >> bits) & 0x3F) | 0x80; } return d - dest; } #define GetUtf16(src, endian) \ ((FcChar16)((src)[endian == FcEndianBig ? 0 : 1] << 8) | \ (FcChar16)((src)[endian == FcEndianBig ? 1 : 0])) int FcUtf16ToUcs4 (const FcChar8 *src_orig, FcEndian endian, FcChar32 *dst, int len) /* in bytes */ { const FcChar8 *src = src_orig; FcChar16 a, b; FcChar32 result; if (len < 2) return 0; a = GetUtf16 (src, endian); src += 2; len -= 2; /* * Check for surrogate */ if ((a & 0xfc00) == 0xd800) { if (len < 2) return 0; b = GetUtf16 (src, endian); src += 2; len -= 2; /* * Check for invalid surrogate sequence */ if ((b & 0xfc00) != 0xdc00) return 0; result = ((((FcChar32)a & 0x3ff) << 10) | ((FcChar32)b & 0x3ff)) + 0x10000; } else result = a; *dst = result; return src - src_orig; } FcBool FcUtf16Len (const FcChar8 *string, FcEndian endian, int len, /* in bytes */ int *nchar, int *wchar) { int n; int clen; FcChar32 c; FcChar32 max; n = 0; max = 0; while (len) { clen = FcUtf16ToUcs4 (string, endian, &c, len); if (clen <= 0) /* malformed UTF8 string */ return FcFalse; if (c > max) max = c; string += clen; len -= clen; n++; } *nchar = n; if (max >= 0x10000) *wchar = 4; else if (max > 0x100) *wchar = 2; else *wchar = 1; return FcTrue; } void FcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size) { if (init) { buf->buf = init; buf->size = size; } else { buf->buf = buf->buf_static; buf->size = sizeof (buf->buf_static); } buf->allocated = FcFalse; buf->failed = FcFalse; buf->len = 0; } void FcStrBufDestroy (FcStrBuf *buf) { if (buf->allocated) { free (buf->buf); FcStrBufInit (buf, 0, 0); } } FcChar8 * FcStrBufDone (FcStrBuf *buf) { FcChar8 *ret; if (buf->failed) ret = NULL; else ret = malloc (buf->len + 1); if (ret) { memcpy (ret, buf->buf, buf->len); ret[buf->len] = '\0'; } FcStrBufDestroy (buf); return ret; } FcChar8 * FcStrBufDoneStatic (FcStrBuf *buf) { FcStrBufChar (buf, '\0'); if (buf->failed) return NULL; return buf->buf; } FcBool FcStrBufChar (FcStrBuf *buf, FcChar8 c) { if (buf->len == buf->size) { FcChar8 *newp; int size; if (buf->failed) return FcFalse; if (buf->allocated) { size = buf->size * 2; newp = realloc (buf->buf, size); } else { size = buf->size + 64; newp = malloc (size); if (newp) { buf->allocated = FcTrue; memcpy (newp, buf->buf, buf->len); } } if (!newp) { buf->failed = FcTrue; return FcFalse; } buf->size = size; buf->buf = newp; } buf->buf[buf->len++] = c; return FcTrue; } FcBool FcStrBufString (FcStrBuf *buf, const FcChar8 *s) { FcChar8 c; while ((c = *s++)) if (!FcStrBufChar (buf, c)) return FcFalse; return FcTrue; } FcBool FcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len) { while (len-- > 0) if (!FcStrBufChar (buf, *s++)) return FcFalse; return FcTrue; } FcBool FcStrUsesHome (const FcChar8 *s) { return *s == '~'; } FcBool FcStrIsAbsoluteFilename (const FcChar8 *s) { #ifdef _WIN32 if (*s == '\\' || (isalpha (*s) && s[1] == ':' && (s[2] == '/' || s[2] == '\\'))) return FcTrue; #endif return *s == '/'; } FcChar8 * FcStrBuildFilename (const FcChar8 *path, ...) { va_list ap; FcStrSet *sset; FcStrList *list; FcChar8 *s, *ret = NULL, *p; size_t len = 0; if (!path) return NULL; sset = FcStrSetCreateEx (FCSS_ALLOW_DUPLICATES | FCSS_GROW_BY_64); if (!sset) return NULL; if (!FcStrSetAdd (sset, path)) goto bail0; va_start (ap, path); while (1) { s = (FcChar8 *)va_arg (ap, FcChar8 *); if (!s) break; if (!FcStrSetAdd (sset, s)) goto bail1; } list = FcStrListCreate (sset); while ((s = FcStrListNext (list))) { len += strlen ((const char *)s) + 1; } list->n = 0; ret = malloc (sizeof (FcChar8) * (len + 1)); if (!ret) goto bail2; p = ret; while ((s = FcStrListNext (list))) { if (p != ret) { p[0] = FC_DIR_SEPARATOR; p++; } len = strlen ((const char *)s); memcpy (p, s, len); p += len; } *p = 0; bail2: FcStrListDone (list); bail1: va_end (ap); bail0: FcStrSetDestroy (sset); return ret; } FcChar8 * FcStrCopyFilename (const FcChar8 *s) { FcChar8 *newp; if (*s == '~') { FcChar8 *home = FcConfigHome(); FcChar8 *full; int size; if (!home) return NULL; size = strlen ((char *)home) + strlen ((char *)s); full = (FcChar8 *)malloc (size + 1); if (!full) return NULL; strcpy ((char *)full, (char *)home); strcat ((char *)full, (char *)s + 1); newp = FcStrCanonFilename (full); free (full); } else newp = FcStrCanonFilename (s); return newp; } FcChar8 * FcStrLastSlash (const FcChar8 *path) { FcChar8 *slash; slash = (FcChar8 *)strrchr ((const char *)path, '/'); #ifdef _WIN32 { FcChar8 *backslash; backslash = (FcChar8 *)strrchr ((const char *)path, '\\'); if (!slash || (backslash && backslash > slash)) slash = backslash; } #endif return slash; } FcChar8 * FcStrDirname (const FcChar8 *file) { FcChar8 *slash; FcChar8 *dir; slash = FcStrLastSlash (file); if (!slash) return FcStrCopy ((FcChar8 *)"."); dir = malloc ((slash - file) + 1); if (!dir) return 0; strncpy ((char *)dir, (const char *)file, slash - file); dir[slash - file] = '\0'; return dir; } FcChar8 * FcStrBasename (const FcChar8 *file) { FcChar8 *slash; slash = FcStrLastSlash (file); if (!slash) return FcStrCopy (file); return FcStrCopy (slash + 1); } FcChar8 * FcStrRealPath (const FcChar8 *path) { char resolved_name[FC_PATH_MAX + 1]; char *resolved_ret; if (!path) return NULL; #ifndef _WIN32 resolved_ret = realpath ((const char *)path, resolved_name); #else if (GetFullPathNameA ((LPCSTR)path, FC_PATH_MAX, resolved_name, NULL) == 0) { fprintf (stderr, "Fontconfig warning: GetFullPathNameA failed.\n"); return NULL; } resolved_ret = resolved_name; #endif if (resolved_ret) path = (FcChar8 *)resolved_ret; return FcStrCopyFilename (path); } static FcChar8 * FcStrCanonAbsoluteFilename (const FcChar8 *s) { FcChar8 *file; FcChar8 *f; const FcChar8 *slash; int size; size = strlen ((char *)s) + 1; file = malloc (size); if (!file) return NULL; slash = NULL; f = file; #ifdef _WIN32 if (*s == '/' && *(s + 1) == '/') /* Network path, do not squash // */ *f++ = *s++; #endif for (;;) { if (*s == '/' || *s == '\0') { if (slash) { switch (s - slash) { case 1: f -= 1; /* squash // and trim final / from file */ break; case 2: if (!strncmp ((char *)slash, "/.", 2)) { f -= 2; /* trim /. from file */ } break; case 3: if (!strncmp ((char *)slash, "/..", 3)) { f -= 3; /* trim /.. from file */ while (f > file) { if (*--f == '/') break; } } break; } } slash = s; } if (!(*f++ = *s++)) break; } return file; } #ifdef _WIN32 /* * Convert '\\' to '/' , remove double '/' */ static void FcConvertDosPath (char *str) { size_t len = strlen (str); char *p = str; char *dest = str; char *end = str + len; char last = 0; if (*p == '\\') { *p = '/'; p++; dest++; } while (p < end) { if (*p == '\\') *p = '/'; if (*p != '/' || last != '/') { *dest++ = *p; } last = *p; p++; } *dest = 0; } #endif FcChar8 * FcStrCanonFilename (const FcChar8 *s) { #ifdef _WIN32 FcChar8 full[FC_MAX_FILE_LEN + 2]; int size = GetFullPathName ((LPCSTR)s, sizeof (full) - 1, (LPSTR)full, NULL); if (size == 0) perror ("GetFullPathName"); FcConvertDosPath ((char *)full); return FcStrCanonAbsoluteFilename (full); #else if (s[0] == '/') return FcStrCanonAbsoluteFilename (s); else { FcChar8 *full; FcChar8 *file; FcChar8 cwd[FC_MAX_FILE_LEN + 2]; if (getcwd ((char *)cwd, FC_MAX_FILE_LEN) == NULL) return NULL; full = FcStrBuildFilename (cwd, s, NULL); file = FcStrCanonAbsoluteFilename (full); FcStrFree (full); return file; } #endif } FcStrSet * FcStrSetCreate (void) { return FcStrSetCreateEx (FCSS_DEFAULT); } FcStrSet * FcStrSetCreateEx (unsigned int control) { FcStrSet *set = malloc (sizeof (FcStrSet)); if (!set) return 0; FcRefInit (&set->ref, 1); set->num = 0; set->size = 0; set->strs = 0; set->control = control; return set; } static FcBool _FcStrSetGrow (FcStrSet *set, int growElements) { /* accommodate an additional NULL entry at the end of the array */ FcChar8 **strs = malloc ((set->size + growElements + 1) * sizeof (FcChar8 *)); if (!strs) return FcFalse; if (set->num) memcpy (strs, set->strs, set->num * sizeof (FcChar8 *)); if (set->strs) free (set->strs); set->size = set->size + growElements; set->strs = strs; return FcTrue; } static FcBool _FcStrSetInsert (FcStrSet *set, FcChar8 *s, int pos) { if (!FcStrSetHasControlBit (set, FCSS_ALLOW_DUPLICATES)) { if (FcStrSetMember (set, s)) { FcStrFree (s); return FcTrue; } } if (set->num == set->size) { int growElements = FcStrSetHasControlBit (set, FCSS_GROW_BY_64) ? 64 : 1; if (!_FcStrSetGrow (set, growElements)) return FcFalse; } if (pos >= set->num) { set->strs[set->num++] = s; set->strs[set->num] = 0; } else { int i; set->num++; set->strs[set->num] = 0; for (i = set->num - 1; i > pos; i--) set->strs[i] = set->strs[i - 1]; set->strs[pos] = s; } return FcTrue; } FcBool FcStrSetMember (FcStrSet *set, const FcChar8 *s) { int i; for (i = 0; i < set->num; i++) if (!FcStrCmp (set->strs[i], s)) return FcTrue; return FcFalse; } static int fc_strcmp_r (const FcChar8 *s1, const FcChar8 *s2, const FcChar8 **ret) { FcChar8 c1, c2; if (s1 == s2) { if (ret) *ret = NULL; return 0; } for (;;) { if (s1) c1 = *s1++; else c1 = 0; if (s2) c2 = *s2++; else c2 = 0; if (!c1 || c1 != c2) break; } if (ret) *ret = s1; return (int)c1 - (int)c2; } FcBool FcStrSetMemberAB (FcStrSet *set, const FcChar8 *a, FcChar8 *b, FcChar8 **ret) { int i; const FcChar8 *s = NULL; for (i = 0; i < set->num; i++) { if (!fc_strcmp_r (set->strs[i], a, &s) && s) { if (!fc_strcmp_r (s, b, NULL)) { if (ret) *ret = set->strs[i]; return FcTrue; } } } if (ret) *ret = NULL; return FcFalse; } FcBool FcStrSetEqual (FcStrSet *sa, FcStrSet *sb) { int i; if (sa->num != sb->num) return FcFalse; for (i = 0; i < sa->num; i++) if (!FcStrSetMember (sb, sa->strs[i])) return FcFalse; return FcTrue; } FcBool FcStrSetAdd (FcStrSet *set, const FcChar8 *s) { FcChar8 *newp = FcStrCopy (s); if (!newp) return FcFalse; if (!_FcStrSetInsert (set, newp, set->num)) { FcStrFree (newp); return FcFalse; } return FcTrue; } FcBool FcStrSetInsert (FcStrSet *set, const FcChar8 *s, int pos) { FcChar8 *newp = FcStrCopy (s); if (!newp) return FcFalse; if (!_FcStrSetInsert (set, newp, pos)) { FcStrFree (newp); return FcFalse; } return FcTrue; } FcBool FcStrSetAddTriple (FcStrSet *set, const FcChar8 *a, const FcChar8 *b, const FcChar8 *c) { FcChar8 *newp = FcStrMakeTriple (a, b, c); if (!newp) return FcFalse; if (!_FcStrSetInsert (set, newp, set->num)) { FcStrFree (newp); return FcFalse; } return FcTrue; } const FcChar8 * FcStrTripleSecond (FcChar8 *str) { FcChar8 *second = str + strlen ((char *)str) + 1; if (*second == '\0') return 0; return second; } const FcChar8 * FcStrTripleThird (FcChar8 *str) { FcChar8 *second = str + strlen ((char *)str) + 1; FcChar8 *third = second + strlen ((char *)second) + 1; if (*third == '\0') return 0; return third; } FcBool FcStrSetAddFilename (FcStrSet *set, const FcChar8 *s) { FcChar8 *newp = FcStrCopyFilename (s); if (!newp) return FcFalse; if (!_FcStrSetInsert (set, newp, set->num)) { FcStrFree (newp); return FcFalse; } return FcTrue; } FcBool FcStrSetAddFilenamePairWithSalt (FcStrSet *set, const FcChar8 *a, const FcChar8 *b, const FcChar8 *salt) { FcChar8 *new_a = NULL; FcChar8 *new_b = NULL; FcBool ret; if (a) { new_a = FcStrCopyFilename (a); if (!new_a) return FcFalse; } if (b) { new_b = FcStrCopyFilename (b); if (!new_b) { if (new_a) FcStrFree (new_a); return FcFalse; } } /* Override maps with new one if exists */ FcStrSetDel (set, new_a); ret = FcStrSetAddTriple (set, new_a, new_b, salt); if (new_a) FcStrFree (new_a); if (new_b) FcStrFree (new_b); return ret; } FcBool FcStrSetAddLangs (FcStrSet *strs, const char *languages) { const char *p = languages, *next; FcChar8 lang[128] = { 0 }, *normalized_lang; size_t len; FcBool ret = FcFalse; if (!languages) return FcFalse; while ((next = strchr (p, ':'))) { len = next - p; len = FC_MIN (len, 127); strncpy ((char *)lang, p, len); lang[len] = 0; /* ignore an empty item */ if (*lang) { normalized_lang = FcLangNormalize ((const FcChar8 *)lang); if (normalized_lang) { FcStrSetAdd (strs, normalized_lang); FcStrFree (normalized_lang); ret = FcTrue; } } p = next + 1; } if (*p) { normalized_lang = FcLangNormalize ((const FcChar8 *)p); if (normalized_lang) { FcStrSetAdd (strs, normalized_lang); FcStrFree (normalized_lang); ret = FcTrue; } } return ret; } FcBool FcStrSetDel (FcStrSet *set, const FcChar8 *s) { int i; for (i = 0; i < set->num; i++) if (!FcStrCmp (set->strs[i], s)) { FcStrFree (set->strs[i]); /* * copy remaining string pointers and trailing * NULL */ memmove (&set->strs[i], &set->strs[i + 1], (set->num - i) * sizeof (FcChar8 *)); set->num--; return FcTrue; } return FcFalse; } FcBool FcStrSetDeleteAll (FcStrSet *set) { int i; if (FcRefIsConst (&set->ref)) return FcFalse; for (i = set->num; i > 0; i--) { FcStrFree (set->strs[i - 1]); set->num--; } return FcTrue; } /* TODO Make public */ static FcStrSet * FcStrSetReference (FcStrSet *set) { if (FcRefIsConst (&set->ref)) return set; FcRefInc (&set->ref); return set; } void FcStrSetDestroy (FcStrSet *set) { if (set) { int i; /* We rely on this in FcGetDefaultLangs for caching. */ if (FcRefIsConst (&set->ref)) return; if (FcRefDec (&set->ref) != 1) return; for (i = 0; i < set->num; i++) FcStrFree (set->strs[i]); if (set->strs) free (set->strs); free (set); } } FcStrList * FcStrListCreate (FcStrSet *set) { FcStrList *list; list = malloc (sizeof (FcStrList)); if (!list) return 0; list->set = set; FcStrSetReference (set); list->n = 0; return list; } void FcStrListFirst (FcStrList *list) { list->n = 0; } FcChar8 * FcStrListNext (FcStrList *list) { if (list->n >= list->set->num) return 0; return list->set->strs[list->n++]; } void FcStrListDone (FcStrList *list) { FcStrSetDestroy (list->set); free (list); } #define __fcstr__ #include "fcaliastail.h" #undef __fcstr__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcweight.c000066400000000000000000000055751503113465200241410ustar00rootroot00000000000000/* * fontconfig/src/fcweight.c * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" static const struct { int ot; int fc; } map[] = { { 0, FC_WEIGHT_THIN }, { 100, FC_WEIGHT_THIN }, { 200, FC_WEIGHT_EXTRALIGHT }, { 300, FC_WEIGHT_LIGHT }, { 350, FC_WEIGHT_DEMILIGHT }, { 380, FC_WEIGHT_BOOK }, { 400, FC_WEIGHT_REGULAR }, { 500, FC_WEIGHT_MEDIUM }, { 600, FC_WEIGHT_DEMIBOLD }, { 700, FC_WEIGHT_BOLD }, { 800, FC_WEIGHT_EXTRABOLD }, { 900, FC_WEIGHT_BLACK }, { 1000, FC_WEIGHT_EXTRABLACK }, }; static double lerp (double x, int x1, int x2, int y1, int y2) { int dx = x2 - x1; int dy = y2 - y1; assert (dx > 0 && dy >= 0 && x1 <= x && x <= x2); return y1 + (x - x1) * dy / dx; } double FcWeightFromOpenTypeDouble (double ot_weight) { int i; if (ot_weight < 0) return -1; ot_weight = FC_MIN (ot_weight, map[(sizeof (map) / sizeof (map[0])) - 1].ot); for (i = 1; ot_weight > map[i].ot; i++) ; if (ot_weight == map[i].ot) return map[i].fc; /* Interpolate between two items. */ return lerp (ot_weight, map[i - 1].ot, map[i].ot, map[i - 1].fc, map[i].fc); } double FcWeightToOpenTypeDouble (double fc_weight) { int i; if (fc_weight < 0 || fc_weight > FC_WEIGHT_EXTRABLACK) return -1; for (i = 1; fc_weight > map[i].fc; i++) ; if (fc_weight == map[i].fc) return map[i].ot; /* Interpolate between two items. */ return lerp (fc_weight, map[i - 1].fc, map[i].fc, map[i - 1].ot, map[i].ot); } int FcWeightFromOpenType (int ot_weight) { return FcWeightFromOpenTypeDouble (ot_weight) + .5; } int FcWeightToOpenType (int fc_weight) { return FcWeightToOpenTypeDouble (fc_weight) + .5; } #define __fcweight__ #include "fcaliastail.h" #undef __fcweight__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcwindows.h000066400000000000000000000054561503113465200243470ustar00rootroot00000000000000/* * fontconfig/src/fcwindows.h * * Copyright © 2013 Google, Inc. * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. * * Google Author(s): Behdad Esfahbod */ #ifndef _FCWINDOWS_H_ #define _FCWINDOWS_H_ #ifdef HAVE_CONFIG_H # include #endif #ifdef _WIN32 /* Request Windows Vista for building. This is required to * get MemoryBarrier on mingw32... */ # if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0600 # undef _WIN32_WINNT # endif # ifndef _WIN32_WINNT # define _WIN32_WINNT 0x0600 # endif # define WIN32_LEAN_AND_MEAN # define WIN32_EXTRA_LEAN # define STRICT # include # include # if defined(_MSC_VER) # include typedef SSIZE_T ssize_t; # endif # define FC_UINT64_FORMAT "I64u" # define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) # ifndef S_ISDIR # define S_ISDIR(m) (((m) & _S_IFMT) == _S_IFDIR) # endif # ifndef F_OK # define F_OK 0 # endif # ifndef X_OK # define X_OK 0 /* no execute bit on windows */ # endif # ifndef W_OK # define W_OK 2 # endif # ifndef R_OK # define R_OK 4 # endif /* MingW provides dirent.h / openddir(), but MSVC does not */ # ifndef HAVE_DIRENT_H # define HAVE_STRUCT_DIRENT_D_TYPE 1 typedef struct DIR DIR; typedef enum { DT_UNKNOWN = 0, DT_DIR, DT_REG, } DIR_TYPE; typedef struct dirent { const char *d_name; DIR_TYPE d_type; } dirent; # define opendir(dirname) FcCompatOpendirWin32 (dirname) # define closedir(d) FcCompatClosedirWin32 (d) # define readdir(d) FcCompatReaddirWin32 (d) DIR * FcCompatOpendirWin32 (const char *dirname); struct dirent * FcCompatReaddirWin32 (DIR *dir); int FcCompatClosedirWin32 (DIR *dir); # endif /* HAVE_DIRENT_H */ #endif /* _WIN32 */ #endif /* _FCWINDOWS_H_ */ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fcxml.c000066400000000000000000002444511503113465200234500ustar00rootroot00000000000000/* * fontconfig/src/fcxml.c * * Copyright © 2002 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "fcint.h" #include #include #include #ifdef HAVE_DIRENT_H # include #endif #ifdef ENABLE_LIBXML2 # include # define XML_Char xmlChar # define XML_Parser xmlParserCtxtPtr # define XML_ParserFree xmlFreeParserCtxt # define XML_GetCurrentLineNumber xmlSAX2GetLineNumber # define XML_GetErrorCode xmlCtxtGetLastError # define XML_ErrorString(Error) (Error)->message #else /* ENABLE_LIBXML2 */ # ifndef HAVE_XMLPARSE_H # define HAVE_XMLPARSE_H 0 # endif # if HAVE_XMLPARSE_H # include # else # include # endif #endif /* ENABLE_LIBXML2 */ #ifdef _WIN32 # include extern FcChar8 fontconfig_instprefix[]; pfnGetSystemWindowsDirectory pGetSystemWindowsDirectory = NULL; pfnSHGetFolderPathA pSHGetFolderPathA = NULL; static void _ensureWin32GettersReady (); #endif static void FcExprDestroy (FcExpr *e); static FcBool _FcConfigParse (FcConfig *config, const FcChar8 *name, FcBool complain, FcBool load); void FcTestDestroy (FcTest *test) { FcExprDestroy (test->expr); free (test); } void FcRuleDestroy (FcRule *rule) { FcRule *n = rule->next; switch (rule->type) { case FcRuleTest: FcTestDestroy (rule->u.test); break; case FcRuleEdit: FcEditDestroy (rule->u.edit); break; case FcRuleUnknown: default: break; } free (rule); if (n) FcRuleDestroy (n); } static FcExpr * FcExprCreateInteger (FcConfig *config, int i) { FcExpr *e = FcConfigAllocExpr (config); if (e) { e->op = FcOpInteger; e->u.ival = i; } return e; } static FcExpr * FcExprCreateDouble (FcConfig *config, double d) { FcExpr *e = FcConfigAllocExpr (config); if (e) { e->op = FcOpDouble; e->u.dval = d; } return e; } static FcExpr * FcExprCreateString (FcConfig *config, const FcChar8 *s) { FcExpr *e = FcConfigAllocExpr (config); if (e) { e->op = FcOpString; e->u.sval = FcStrdup (s); } return e; } static FcExprMatrix * FcExprMatrixCopyShallow (const FcExprMatrix *matrix) { FcExprMatrix *m = malloc (sizeof (FcExprMatrix)); if (m) { *m = *matrix; } return m; } static void FcExprMatrixFreeShallow (FcExprMatrix *m) { if (!m) return; free (m); } static void FcExprMatrixFree (FcExprMatrix *m) { if (!m) return; FcExprDestroy (m->xx); FcExprDestroy (m->xy); FcExprDestroy (m->yx); FcExprDestroy (m->yy); free (m); } static FcExpr * FcExprCreateMatrix (FcConfig *config, const FcExprMatrix *matrix) { FcExpr *e = FcConfigAllocExpr (config); if (e) { e->op = FcOpMatrix; e->u.mexpr = FcExprMatrixCopyShallow (matrix); } return e; } static FcExpr * FcExprCreateRange (FcConfig *config, FcRange *range) { FcExpr *e = FcConfigAllocExpr (config); if (e) { e->op = FcOpRange; e->u.rval = FcRangeCopy (range); } return e; } static FcExpr * FcExprCreateBool (FcConfig *config, FcBool b) { FcExpr *e = FcConfigAllocExpr (config); if (e) { e->op = FcOpBool; e->u.bval = b; } return e; } static FcExpr * FcExprCreateCharSet (FcConfig *config, FcCharSet *charset) { FcExpr *e = FcConfigAllocExpr (config); if (e) { e->op = FcOpCharSet; e->u.cval = FcCharSetCopy (charset); } return e; } static FcExpr * FcExprCreateLangSet (FcConfig *config, FcLangSet *langset) { FcExpr *e = FcConfigAllocExpr (config); if (e) { e->op = FcOpLangSet; e->u.lval = FcLangSetCopy (langset); } return e; } static FcExpr * FcExprCreateName (FcConfig *config, FcExprName name) { FcExpr *e = FcConfigAllocExpr (config); if (e) { e->op = FcOpField; e->u.name = name; } return e; } static FcExpr * FcExprCreateConst (FcConfig *config, const FcChar8 *constant) { FcExpr *e = FcConfigAllocExpr (config); if (e) { e->op = FcOpConst; e->u.constant = FcStrdup (constant); } return e; } static FcExpr * FcExprCreateOp (FcConfig *config, FcExpr *left, FcOp op, FcExpr *right) { FcExpr *e = FcConfigAllocExpr (config); if (e) { e->op = op; e->u.tree.left = left; e->u.tree.right = right; } return e; } static void FcExprDestroy (FcExpr *e) { if (!e) return; switch (FC_OP_GET_OP (e->op)) { case FcOpInteger: break; case FcOpDouble: break; case FcOpString: FcFree (e->u.sval); break; case FcOpMatrix: FcExprMatrixFree (e->u.mexpr); break; case FcOpRange: FcRangeDestroy (e->u.rval); break; case FcOpCharSet: FcCharSetDestroy (e->u.cval); break; case FcOpLangSet: FcLangSetDestroy (e->u.lval); break; case FcOpBool: break; case FcOpField: break; case FcOpConst: FcFree (e->u.constant); break; case FcOpAssign: case FcOpAssignReplace: case FcOpPrepend: case FcOpPrependFirst: case FcOpAppend: case FcOpAppendLast: case FcOpDelete: case FcOpDeleteAll: break; case FcOpOr: case FcOpAnd: case FcOpEqual: case FcOpNotEqual: case FcOpLess: case FcOpLessEqual: case FcOpMore: case FcOpMoreEqual: case FcOpContains: case FcOpListing: case FcOpNotContains: case FcOpPlus: case FcOpMinus: case FcOpTimes: case FcOpDivide: case FcOpQuest: case FcOpComma: FcExprDestroy (e->u.tree.right); /* fall through */ case FcOpNot: case FcOpFloor: case FcOpCeil: case FcOpRound: case FcOpTrunc: FcExprDestroy (e->u.tree.left); break; case FcOpNil: case FcOpInvalid: break; } e->op = FcOpNil; } void FcEditDestroy (FcEdit *e) { if (e->expr) FcExprDestroy (e->expr); free (e); } typedef enum _FcElement { FcElementNone, FcElementFontconfig, FcElementDir, FcElementCacheDir, FcElementCache, FcElementInclude, FcElementConfig, FcElementMatch, FcElementAlias, FcElementDescription, FcElementRemapDir, FcElementResetDirs, FcElementRescan, FcElementPrefer, FcElementAccept, FcElementDefault, FcElementFamily, FcElementSelectfont, FcElementAcceptfont, FcElementRejectfont, FcElementGlob, FcElementPattern, FcElementPatelt, FcElementTest, FcElementEdit, FcElementInt, FcElementDouble, FcElementString, FcElementMatrix, FcElementRange, FcElementBool, FcElementCharSet, FcElementLangSet, FcElementName, FcElementConst, FcElementOr, FcElementAnd, FcElementEq, FcElementNotEq, FcElementLess, FcElementLessEq, FcElementMore, FcElementMoreEq, FcElementContains, FcElementNotContains, FcElementPlus, FcElementMinus, FcElementTimes, FcElementDivide, FcElementNot, FcElementIf, FcElementFloor, FcElementCeil, FcElementRound, FcElementTrunc, FcElementUnknown } FcElement; static const struct { const char name[16]; FcElement element; } fcElementMap[] = { { "fontconfig", FcElementFontconfig }, { "dir", FcElementDir }, { "cachedir", FcElementCacheDir }, { "cache", FcElementCache }, { "include", FcElementInclude }, { "config", FcElementConfig }, { "match", FcElementMatch }, { "alias", FcElementAlias }, { "description", FcElementDescription }, { "remap-dir", FcElementRemapDir }, { "reset-dirs", FcElementResetDirs }, { "rescan", FcElementRescan }, { "prefer", FcElementPrefer }, { "accept", FcElementAccept }, { "default", FcElementDefault }, { "family", FcElementFamily }, { "selectfont", FcElementSelectfont }, { "acceptfont", FcElementAcceptfont }, { "rejectfont", FcElementRejectfont }, { "glob", FcElementGlob }, { "pattern", FcElementPattern }, { "patelt", FcElementPatelt }, { "test", FcElementTest }, { "edit", FcElementEdit }, { "int", FcElementInt }, { "double", FcElementDouble }, { "string", FcElementString }, { "matrix", FcElementMatrix }, { "range", FcElementRange }, { "bool", FcElementBool }, { "charset", FcElementCharSet }, { "langset", FcElementLangSet }, { "name", FcElementName }, { "const", FcElementConst }, { "or", FcElementOr }, { "and", FcElementAnd }, { "eq", FcElementEq }, { "not_eq", FcElementNotEq }, { "less", FcElementLess }, { "less_eq", FcElementLessEq }, { "more", FcElementMore }, { "more_eq", FcElementMoreEq }, { "contains", FcElementContains }, { "not_contains", FcElementNotContains }, { "plus", FcElementPlus }, { "minus", FcElementMinus }, { "times", FcElementTimes }, { "divide", FcElementDivide }, { "not", FcElementNot }, { "if", FcElementIf }, { "floor", FcElementFloor }, { "ceil", FcElementCeil }, { "round", FcElementRound }, { "trunc", FcElementTrunc }, }; #define NUM_ELEMENT_MAPS (int)(sizeof fcElementMap / sizeof fcElementMap[0]) static const char *fcElementIgnoreName[16] = { "its:", NULL }; static FcElement FcElementMap (const XML_Char *name) { int i; for (i = 0; i < NUM_ELEMENT_MAPS; i++) if (!strcmp ((char *)name, fcElementMap[i].name)) return fcElementMap[i].element; for (i = 0; fcElementIgnoreName[i] != NULL; i++) if (!strncmp ((char *)name, fcElementIgnoreName[i], strlen (fcElementIgnoreName[i]))) return FcElementNone; return FcElementUnknown; } static const char * FcElementReverseMap (FcElement e) { int i; for (i = 0; i < NUM_ELEMENT_MAPS; i++) if (fcElementMap[i].element == e) return fcElementMap[i].name; return NULL; } typedef struct _FcPStack { struct _FcPStack *prev; FcElement element; FcChar8 **attr; FcStrBuf str; FcChar8 *attr_buf_static[16]; } FcPStack; typedef enum _FcVStackTag { FcVStackNone, FcVStackString, FcVStackFamily, FcVStackConstant, FcVStackGlob, FcVStackName, FcVStackPattern, FcVStackPrefer, FcVStackAccept, FcVStackDefault, FcVStackInteger, FcVStackDouble, FcVStackMatrix, FcVStackRange, FcVStackBool, FcVStackCharSet, FcVStackLangSet, FcVStackTest, FcVStackExpr, FcVStackEdit } FcVStackTag; typedef struct _FcVStack { struct _FcVStack *prev; FcPStack *pstack; /* related parse element */ FcVStackTag tag; union { FcChar8 *string; int integer; double _double; FcExprMatrix *matrix; FcRange *range; FcBool bool_; FcCharSet *charset; FcLangSet *langset; FcExprName name; FcTest *test; FcQual qual; FcOp op; FcExpr *expr; FcEdit *edit; FcPattern *pattern; } u; } FcVStack; typedef struct _FcConfigParse { FcPStack *pstack; FcVStack *vstack; FcBool error; const FcChar8 *name; FcConfig *config; FcRuleSet *ruleset; XML_Parser parser; unsigned int pstack_static_used; FcPStack pstack_static[8]; unsigned int vstack_static_used; FcVStack vstack_static[64]; FcBool scanOnly; } FcConfigParse; typedef enum _FcConfigSeverity { FcSevereInfo, FcSevereWarning, FcSevereError } FcConfigSeverity; static void FcConfigMessage (FcConfigParse *parse, FcConfigSeverity severe, const char *fmt, ...) { const char *s = "unknown"; va_list args; va_start (args, fmt); switch (severe) { case FcSevereInfo: s = "info"; break; case FcSevereWarning: s = "warning"; break; case FcSevereError: s = "error"; break; } if (parse) { if (parse->name) fprintf (stderr, "Fontconfig %s: \"%s\", line %d: ", s, parse->name, (int)XML_GetCurrentLineNumber (parse->parser)); else fprintf (stderr, "Fontconfig %s: line %d: ", s, (int)XML_GetCurrentLineNumber (parse->parser)); if (severe >= FcSevereError) parse->error = FcTrue; } else fprintf (stderr, "Fontconfig %s: ", s); vfprintf (stderr, fmt, args); fprintf (stderr, "\n"); va_end (args); } static FcExpr * FcPopExpr (FcConfigParse *parse); static const char * FcTypeName (FcType type) { switch (type) { case FcTypeVoid: return "void"; case FcTypeInteger: case FcTypeDouble: return "number"; case FcTypeString: return "string"; case FcTypeBool: return "bool"; case FcTypeMatrix: return "matrix"; case FcTypeCharSet: return "charset"; case FcTypeFTFace: return "FT_Face"; case FcTypeLangSet: return "langset"; case FcTypeRange: return "range"; case FcTypeUnknown: default: return "unknown"; } } static void FcTypecheckValue (FcConfigParse *parse, FcType value, FcType type) { if (value == FcTypeInteger) value = FcTypeDouble; if (type == FcTypeInteger) type = FcTypeDouble; if (value != type) { if ((value == FcTypeLangSet && type == FcTypeString) || (value == FcTypeString && type == FcTypeLangSet) || (value == FcTypeDouble && type == FcTypeRange)) return; if (type == FcTypeUnknown) return; /* It's perfectly fine to use user-define elements in expressions, * so don't warn in that case. */ if (value == FcTypeUnknown) return; FcConfigMessage (parse, FcSevereWarning, "saw %s, expected %s", FcTypeName (value), FcTypeName (type)); } } static void FcTypecheckExpr (FcConfigParse *parse, FcExpr *expr, FcType type) { const FcObjectType *o; const FcConstant *c; /* If parsing the expression failed, some nodes may be NULL */ if (!expr) return; switch (FC_OP_GET_OP (expr->op)) { case FcOpInteger: case FcOpDouble: FcTypecheckValue (parse, FcTypeDouble, type); break; case FcOpString: FcTypecheckValue (parse, FcTypeString, type); break; case FcOpMatrix: FcTypecheckValue (parse, FcTypeMatrix, type); break; case FcOpBool: FcTypecheckValue (parse, FcTypeBool, type); break; case FcOpCharSet: FcTypecheckValue (parse, FcTypeCharSet, type); break; case FcOpLangSet: FcTypecheckValue (parse, FcTypeLangSet, type); break; case FcOpRange: FcTypecheckValue (parse, FcTypeRange, type); break; case FcOpNil: break; case FcOpField: o = FcNameGetObjectType (FcObjectName (expr->u.name.object)); if (o) FcTypecheckValue (parse, o->type, type); break; case FcOpConst: c = FcNameGetConstant (expr->u.constant); if (c) { o = FcNameGetObjectType (c->object); if (o) FcTypecheckValue (parse, o->type, type); } else FcConfigMessage (parse, FcSevereWarning, "invalid constant used : %s", expr->u.constant); break; case FcOpQuest: FcTypecheckExpr (parse, expr->u.tree.left, FcTypeBool); FcTypecheckExpr (parse, expr->u.tree.right->u.tree.left, type); FcTypecheckExpr (parse, expr->u.tree.right->u.tree.right, type); break; case FcOpAssign: case FcOpAssignReplace: break; case FcOpEqual: case FcOpNotEqual: case FcOpLess: case FcOpLessEqual: case FcOpMore: case FcOpMoreEqual: case FcOpContains: case FcOpNotContains: case FcOpListing: FcTypecheckValue (parse, FcTypeBool, type); break; case FcOpComma: case FcOpOr: case FcOpAnd: case FcOpPlus: case FcOpMinus: case FcOpTimes: case FcOpDivide: FcTypecheckExpr (parse, expr->u.tree.left, type); FcTypecheckExpr (parse, expr->u.tree.right, type); break; case FcOpNot: FcTypecheckValue (parse, FcTypeBool, type); FcTypecheckExpr (parse, expr->u.tree.left, FcTypeBool); break; case FcOpFloor: case FcOpCeil: case FcOpRound: case FcOpTrunc: FcTypecheckValue (parse, FcTypeDouble, type); FcTypecheckExpr (parse, expr->u.tree.left, FcTypeDouble); break; default: break; } } static FcTest * FcTestCreate (FcConfigParse *parse, FcMatchKind kind, FcQual qual, const FcChar8 *field, unsigned int compare, FcExpr *expr) { FcTest *test = (FcTest *)malloc (sizeof (FcTest)); if (test) { const FcObjectType *o; test->kind = kind; test->qual = qual; test->object = FcObjectFromName ((const char *)field); test->op = compare; test->expr = expr; o = FcNameGetObjectType (FcObjectName (test->object)); if (o) FcTypecheckExpr (parse, expr, o->type); } return test; } static FcEdit * FcEditCreate (FcConfigParse *parse, FcObject object, FcOp op, FcExpr *expr, FcValueBinding binding) { FcEdit *e = (FcEdit *)malloc (sizeof (FcEdit)); if (e) { const FcObjectType *o; e->object = object; e->op = op; e->expr = expr; e->binding = binding; o = FcNameGetObjectType (FcObjectName (e->object)); if (o) FcTypecheckExpr (parse, expr, o->type); } return e; } static FcRule * FcRuleCreate (FcRuleType type, void *p) { FcRule *r = (FcRule *)malloc (sizeof (FcRule)); if (!r) return NULL; r->next = NULL; r->type = type; switch (type) { case FcRuleTest: r->u.test = (FcTest *)p; break; case FcRuleEdit: r->u.edit = (FcEdit *)p; break; case FcRuleUnknown: default: free (r); r = NULL; break; } return r; } static FcVStack * FcVStackCreateAndPush (FcConfigParse *parse) { FcVStack *newp; if (parse->vstack_static_used < sizeof (parse->vstack_static) / sizeof (parse->vstack_static[0])) newp = &parse->vstack_static[parse->vstack_static_used++]; else { newp = malloc (sizeof (FcVStack)); if (!newp) return 0; } newp->tag = FcVStackNone; newp->prev = 0; newp->prev = parse->vstack; newp->pstack = parse->pstack ? parse->pstack->prev : 0; parse->vstack = newp; return newp; } static FcBool FcVStackPushString (FcConfigParse *parse, FcVStackTag tag, FcChar8 *string) { FcVStack *vstack = FcVStackCreateAndPush (parse); if (!vstack) return FcFalse; vstack->u.string = string; vstack->tag = tag; return FcTrue; } static FcBool FcVStackPushInteger (FcConfigParse *parse, int integer) { FcVStack *vstack = FcVStackCreateAndPush (parse); if (!vstack) return FcFalse; vstack->u.integer = integer; vstack->tag = FcVStackInteger; return FcTrue; } static FcBool FcVStackPushDouble (FcConfigParse *parse, double _double) { FcVStack *vstack = FcVStackCreateAndPush (parse); if (!vstack) return FcFalse; vstack->u._double = _double; vstack->tag = FcVStackDouble; return FcTrue; } static FcBool FcVStackPushMatrix (FcConfigParse *parse, FcExprMatrix *matrix) { FcVStack *vstack; vstack = FcVStackCreateAndPush (parse); if (!vstack) return FcFalse; vstack->u.matrix = FcExprMatrixCopyShallow (matrix); vstack->tag = FcVStackMatrix; return FcTrue; } static FcBool FcVStackPushRange (FcConfigParse *parse, FcRange *range) { FcVStack *vstack = FcVStackCreateAndPush (parse); if (!vstack) return FcFalse; vstack->u.range = range; vstack->tag = FcVStackRange; return FcTrue; } static FcBool FcVStackPushBool (FcConfigParse *parse, FcBool bool_) { FcVStack *vstack = FcVStackCreateAndPush (parse); if (!vstack) return FcFalse; vstack->u.bool_ = bool_; vstack->tag = FcVStackBool; return FcTrue; } static FcBool FcVStackPushCharSet (FcConfigParse *parse, FcCharSet *charset) { FcVStack *vstack; if (!charset) return FcFalse; vstack = FcVStackCreateAndPush (parse); if (!vstack) return FcFalse; vstack->u.charset = charset; vstack->tag = FcVStackCharSet; return FcTrue; } static FcBool FcVStackPushLangSet (FcConfigParse *parse, FcLangSet *langset) { FcVStack *vstack; if (!langset) return FcFalse; vstack = FcVStackCreateAndPush (parse); if (!vstack) return FcFalse; vstack->u.langset = langset; vstack->tag = FcVStackLangSet; return FcTrue; } static FcBool FcVStackPushName (FcConfigParse *parse, FcMatchKind kind, FcObject object) { FcVStack *vstack = FcVStackCreateAndPush (parse); if (!vstack) return FcFalse; vstack->u.name.object = object; vstack->u.name.kind = kind; vstack->tag = FcVStackName; return FcTrue; } static FcBool FcVStackPushTest (FcConfigParse *parse, FcTest *test) { FcVStack *vstack = FcVStackCreateAndPush (parse); if (!vstack) return FcFalse; vstack->u.test = test; vstack->tag = FcVStackTest; return FcTrue; } static FcBool FcVStackPushExpr (FcConfigParse *parse, FcVStackTag tag, FcExpr *expr) { FcVStack *vstack = FcVStackCreateAndPush (parse); if (!vstack) return FcFalse; vstack->u.expr = expr; vstack->tag = tag; return FcTrue; } static FcBool FcVStackPushEdit (FcConfigParse *parse, FcEdit *edit) { FcVStack *vstack = FcVStackCreateAndPush (parse); if (!vstack) return FcFalse; vstack->u.edit = edit; vstack->tag = FcVStackEdit; return FcTrue; } static FcBool FcVStackPushPattern (FcConfigParse *parse, FcPattern *pattern) { FcVStack *vstack = FcVStackCreateAndPush (parse); if (!vstack) return FcFalse; vstack->u.pattern = pattern; vstack->tag = FcVStackPattern; return FcTrue; } static FcVStack * FcVStackFetch (FcConfigParse *parse, int off) { FcVStack *vstack; for (vstack = parse->vstack; vstack && off-- > 0; vstack = vstack->prev) ; return vstack; } static FcVStack * FcVStackPeek (FcConfigParse *parse) { FcVStack *vstack = parse->vstack; return vstack && vstack->pstack == parse->pstack ? vstack : 0; } static void FcVStackPopAndDestroy (FcConfigParse *parse) { FcVStack *vstack = parse->vstack; if (!vstack || vstack->pstack != parse->pstack) return; parse->vstack = vstack->prev; switch (vstack->tag) { case FcVStackNone: break; case FcVStackName: break; case FcVStackFamily: break; case FcVStackString: case FcVStackConstant: case FcVStackGlob: FcStrFree (vstack->u.string); break; case FcVStackPattern: FcPatternDestroy (vstack->u.pattern); break; case FcVStackInteger: case FcVStackDouble: break; case FcVStackMatrix: FcExprMatrixFreeShallow (vstack->u.matrix); break; case FcVStackBool: break; case FcVStackRange: FcRangeDestroy (vstack->u.range); break; case FcVStackCharSet: FcCharSetDestroy (vstack->u.charset); break; case FcVStackLangSet: FcLangSetDestroy (vstack->u.langset); break; case FcVStackTest: FcTestDestroy (vstack->u.test); break; case FcVStackExpr: case FcVStackPrefer: case FcVStackAccept: case FcVStackDefault: FcExprDestroy (vstack->u.expr); break; case FcVStackEdit: FcEditDestroy (vstack->u.edit); break; } if (vstack == &parse->vstack_static[parse->vstack_static_used - 1]) parse->vstack_static_used--; else free (vstack); } static void FcVStackClear (FcConfigParse *parse) { while (FcVStackPeek (parse)) FcVStackPopAndDestroy (parse); } static int FcVStackElements (FcConfigParse *parse) { int h = 0; FcVStack *vstack = parse->vstack; while (vstack && vstack->pstack == parse->pstack) { h++; vstack = vstack->prev; } return h; } static FcChar8 ** FcConfigSaveAttr (const XML_Char **attr, FcChar8 **buf, int size_bytes) { int slen; int i; FcChar8 **newp; FcChar8 *s; if (!attr) return 0; slen = 0; for (i = 0; attr[i]; i++) slen += strlen ((char *)attr[i]) + 1; if (i == 0) return 0; slen += (i + 1) * sizeof (FcChar8 *); if (slen <= size_bytes) newp = buf; else { newp = malloc (slen); if (!newp) { FcConfigMessage (0, FcSevereError, "out of memory"); return 0; } } s = (FcChar8 *)(newp + (i + 1)); for (i = 0; attr[i]; i++) { newp[i] = s; strcpy ((char *)s, (char *)attr[i]); s += strlen ((char *)s) + 1; } newp[i] = 0; return newp; } static FcBool FcPStackPush (FcConfigParse *parse, FcElement element, const XML_Char **attr) { FcPStack *newp; if (parse->pstack_static_used < sizeof (parse->pstack_static) / sizeof (parse->pstack_static[0])) newp = &parse->pstack_static[parse->pstack_static_used++]; else { newp = malloc (sizeof (FcPStack)); if (!newp) return FcFalse; } newp->prev = parse->pstack; newp->element = element; newp->attr = FcConfigSaveAttr (attr, newp->attr_buf_static, sizeof (newp->attr_buf_static)); FcStrBufInit (&newp->str, 0, 0); parse->pstack = newp; return FcTrue; } static FcBool FcPStackPop (FcConfigParse *parse) { FcPStack *old; if (!parse->pstack) { FcConfigMessage (parse, FcSevereError, "mismatching element"); return FcFalse; } /* Don't check the attributes for FcElementNone */ if (parse->pstack->element != FcElementNone && parse->pstack->attr) { /* Warn about unused attrs. */ FcChar8 **attrs = parse->pstack->attr; while (*attrs) { if (attrs[0][0]) { FcConfigMessage (parse, FcSevereWarning, "invalid attribute '%s'", attrs[0]); } attrs += 2; } } FcVStackClear (parse); old = parse->pstack; parse->pstack = old->prev; FcStrBufDestroy (&old->str); if (old->attr && old->attr != old->attr_buf_static) free (old->attr); if (old == &parse->pstack_static[parse->pstack_static_used - 1]) parse->pstack_static_used--; else free (old); return FcTrue; } static FcBool FcConfigParseInit (FcConfigParse *parse, const FcChar8 *name, FcConfig *config, XML_Parser parser, FcBool enabled) { parse->pstack = 0; parse->pstack_static_used = 0; parse->vstack = 0; parse->vstack_static_used = 0; parse->error = FcFalse; parse->name = name; parse->config = config; parse->ruleset = FcRuleSetCreate (name); parse->parser = parser; parse->scanOnly = !enabled; FcRuleSetEnable (parse->ruleset, enabled); return FcTrue; } static void FcConfigCleanup (FcConfigParse *parse) { while (parse->pstack) FcPStackPop (parse); FcRuleSetDestroy (parse->ruleset); parse->ruleset = NULL; } static const FcChar8 * FcConfigGetAttribute (FcConfigParse *parse, const char *attr) { FcChar8 **attrs; if (!parse->pstack) return 0; attrs = parse->pstack->attr; if (!attrs) return 0; while (*attrs) { if (!strcmp ((char *)*attrs, attr)) { attrs[0][0] = '\0'; /* Mark as used. */ return attrs[1]; } attrs += 2; } return 0; } static FcStrSet * _get_real_paths_from_prefix (FcConfigParse *parse, const FcChar8 *path, const FcChar8 *prefix) { #ifdef _WIN32 FcChar8 buffer[1000] = { 0 }; #endif FcChar8 *parent = NULL, *retval = NULL; FcStrSet *e = NULL; if (prefix) { if (FcStrCmp (prefix, (const FcChar8 *)"xdg") == 0) { parent = FcConfigXdgDataHome(); if (!parent) { /* Home directory might be disabled */ return NULL; } e = FcConfigXdgDataDirs(); if (!e) { FcStrFree (parent); return NULL; } } else if (FcStrCmp (prefix, (const FcChar8 *)"default") == 0 || FcStrCmp (prefix, (const FcChar8 *)"cwd") == 0) { /* Nothing to do */ } else if (FcStrCmp (prefix, (const FcChar8 *)"relative") == 0) { FcChar8 *p = FcStrRealPath (parse->name); if (!p) return NULL; parent = FcStrDirname (p); FcStrFree (p); if (!parent) return NULL; } } #ifndef _WIN32 /* For Win32, check this later for dealing with special cases */ else { if (!FcStrIsAbsoluteFilename (path) && path[0] != '~') FcConfigMessage (parse, FcSevereWarning, "Use of ambiguous path in <%s> element. please add prefix=\"cwd\" if current behavior is desired.", FcElementReverseMap (parse->pstack->element)); } #else if (strcmp ((const char *)path, "CUSTOMFONTDIR") == 0) { FcChar8 *p; path = buffer; if (!GetModuleFileName (NULL, (LPCH)buffer, sizeof (buffer) - 20)) { FcConfigMessage (parse, FcSevereError, "GetModuleFileName failed"); return NULL; } /* * Must use the multi-byte aware function to search * for backslash because East Asian double-byte code * pages have characters with backslash as the second * byte. */ p = _mbsrchr (path, '\\'); if (p) *p = '\0'; strcat ((char *)path, "\\fonts"); } else if (strcmp ((const char *)path, "APPSHAREFONTDIR") == 0) { FcChar8 *p; path = buffer; if (!GetModuleFileName (NULL, (LPCH)buffer, sizeof (buffer) - 20)) { FcConfigMessage (parse, FcSevereError, "GetModuleFileName failed"); return NULL; } p = _mbsrchr (path, '\\'); if (p) *p = '\0'; strcat ((char *)path, "\\..\\share\\fonts"); } else if (strcmp ((const char *)path, "WINDOWSUSERFONTDIR") == 0) { path = buffer; if (!(pSHGetFolderPathA && SUCCEEDED (pSHGetFolderPathA (NULL, /* CSIDL_LOCAL_APPDATA */ 28, NULL, 0, (char *)buffer)))) { FcConfigMessage (parse, FcSevereError, "SHGetFolderPathA failed"); return NULL; } strcat ((char *)path, "\\Microsoft\\Windows\\Fonts"); } else if (strcmp ((const char *)path, "WINDOWSFONTDIR") == 0) { int rc; path = buffer; _ensureWin32GettersReady(); rc = pGetSystemWindowsDirectory ((LPSTR)buffer, sizeof (buffer) - 20); if (rc == 0 || rc > sizeof (buffer) - 20) { FcConfigMessage (parse, FcSevereError, "GetSystemWindowsDirectory failed"); return NULL; } if (path[strlen ((const char *)path) - 1] != '\\') strcat ((char *)path, "\\"); strcat ((char *)path, "fonts"); } else { if (!prefix) { if (!FcStrIsAbsoluteFilename (path) && path[0] != '~') FcConfigMessage (parse, FcSevereWarning, "Use of ambiguous path in <%s> element. please add prefix=\"cwd\" if current behavior is desired.", FcElementReverseMap (parse->pstack->element)); } } #endif if (parent) { retval = FcStrBuildFilename (parent, path, NULL); FcStrFree (parent); } else { retval = FcStrdup (path); } if (!e) e = FcStrSetCreate(); else { FcChar8 *s; int i; for (i = 0; i < e->num; i++) { s = FcStrBuildFilename (e->strs[i], path, NULL); FcStrFree (e->strs[i]); e->strs[i] = s; } } if (!FcStrSetInsert (e, retval, 0)) { FcStrSetDestroy (e); e = NULL; } FcStrFree (retval); return e; } static void FcStartElement (void *userData, const XML_Char *name, const XML_Char **attr) { FcConfigParse *parse = userData; FcElement element; element = FcElementMap (name); if (element == FcElementUnknown) FcConfigMessage (parse, FcSevereWarning, "unknown element \"%s\"", name); if (!FcPStackPush (parse, element, attr)) { FcConfigMessage (parse, FcSevereError, "out of memory"); return; } return; } static void FcParseRescan (FcConfigParse *parse) { int n = FcVStackElements (parse); while (n-- > 0) { FcVStack *v = FcVStackFetch (parse, n); if (v->tag != FcVStackInteger) FcConfigMessage (parse, FcSevereWarning, "non-integer rescan"); else parse->config->rescanInterval = v->u.integer; } } static void FcParseInt (FcConfigParse *parse) { FcChar8 *s, *end; int l; if (!parse->pstack) return; s = FcStrBufDoneStatic (&parse->pstack->str); if (!s) { FcConfigMessage (parse, FcSevereError, "out of memory"); return; } end = 0; l = (int)strtol ((char *)s, (char **)&end, 0); if (end != s + strlen ((char *)s)) FcConfigMessage (parse, FcSevereError, "\"%s\": not a valid integer", s); else FcVStackPushInteger (parse, l); FcStrBufDestroy (&parse->pstack->str); } /* * idea copied from glib g_ascii_strtod with * permission of the author (Alexander Larsson) */ #include static double FcStrtod (char *s, char **end) { #ifndef __BIONIC__ struct lconv *locale_data; #endif const char *decimal_point; int dlen; char *dot; double v; /* * Have to swap the decimal point to match the current locale * if that locale doesn't use 0x2e */ #ifndef __BIONIC__ locale_data = localeconv(); decimal_point = locale_data->decimal_point; dlen = strlen (decimal_point); #else decimal_point = "."; dlen = 1; #endif if ((dot = strchr (s, 0x2e)) && (decimal_point[0] != 0x2e || decimal_point[1] != 0)) { char buf[128]; int slen = strlen (s); if (slen + dlen > (int)sizeof (buf)) { if (end) *end = s; v = 0; } else { char *buf_end; /* mantissa */ strncpy (buf, s, dot - s); /* decimal point */ strcpy (buf + (dot - s), decimal_point); /* rest of number */ strcpy (buf + (dot - s) + dlen, dot + 1); buf_end = 0; v = strtod (buf, &buf_end); if (buf_end) { buf_end = s + (buf_end - buf); if (buf_end > dot) buf_end -= dlen - 1; } if (end) *end = buf_end; } } else v = strtod (s, end); return v; } static void FcParseDouble (FcConfigParse *parse) { FcChar8 *s, *end; double d; if (!parse->pstack) return; s = FcStrBufDoneStatic (&parse->pstack->str); if (!s) { FcConfigMessage (parse, FcSevereError, "out of memory"); return; } end = 0; d = FcStrtod ((char *)s, (char **)&end); if (end != s + strlen ((char *)s)) FcConfigMessage (parse, FcSevereError, "\"%s\": not a valid double", s); else FcVStackPushDouble (parse, d); FcStrBufDestroy (&parse->pstack->str); } static void FcParseString (FcConfigParse *parse, FcVStackTag tag) { FcChar8 *s; if (!parse->pstack) return; s = FcStrBufDone (&parse->pstack->str); if (!s) { FcConfigMessage (parse, FcSevereError, "out of memory"); return; } if (!FcVStackPushString (parse, tag, s)) FcStrFree (s); } static void FcParseName (FcConfigParse *parse) { const FcChar8 *kind_string; FcMatchKind kind; FcChar8 *s; FcObject object; kind_string = FcConfigGetAttribute (parse, "target"); if (!kind_string) kind = FcMatchDefault; else { if (!strcmp ((char *)kind_string, "pattern")) kind = FcMatchPattern; else if (!strcmp ((char *)kind_string, "font")) kind = FcMatchFont; else if (!strcmp ((char *)kind_string, "default")) kind = FcMatchDefault; else { FcConfigMessage (parse, FcSevereWarning, "invalid name target \"%s\"", kind_string); return; } } if (!parse->pstack) return; s = FcStrBufDone (&parse->pstack->str); if (!s) { FcConfigMessage (parse, FcSevereError, "out of memory"); return; } object = FcObjectFromName ((const char *)s); FcVStackPushName (parse, kind, object); FcStrFree (s); } static void FcParseMatrix (FcConfigParse *parse) { FcExprMatrix m; m.yy = FcPopExpr (parse); m.yx = FcPopExpr (parse); m.xy = FcPopExpr (parse); m.xx = FcPopExpr (parse); if (!m.yy || !m.yx || !m.xy || !m.xx) { FcConfigMessage (parse, FcSevereWarning, "Missing values in matrix element"); return; } if (FcPopExpr (parse)) FcConfigMessage (parse, FcSevereError, "wrong number of matrix elements"); else FcVStackPushMatrix (parse, &m); } static void FcParseRange (FcConfigParse *parse) { FcVStack *vstack; FcRange *r; FcChar32 n[2] = { 0, 0 }; int count = 1; double d[2] = { 0.0L, 0.0L }; FcBool dflag = FcFalse; while ((vstack = FcVStackPeek (parse))) { if (count < 0) { FcConfigMessage (parse, FcSevereError, "too many elements in range"); return; } switch ((int)vstack->tag) { case FcVStackInteger: if (dflag) d[count] = (double)vstack->u.integer; else n[count] = vstack->u.integer; break; case FcVStackDouble: if (count == 0 && !dflag) d[1] = (double)n[1]; d[count] = vstack->u._double; dflag = FcTrue; break; default: FcConfigMessage (parse, FcSevereError, "invalid element in range"); if (dflag) d[count] = 0.0L; else n[count] = 0; break; } count--; FcVStackPopAndDestroy (parse); } if (count >= 0) { FcConfigMessage (parse, FcSevereError, "invalid range"); return; } if (dflag) { if (d[0] > d[1]) { FcConfigMessage (parse, FcSevereError, "invalid range"); return; } r = FcRangeCreateDouble (d[0], d[1]); } else { if (n[0] > n[1]) { FcConfigMessage (parse, FcSevereError, "invalid range"); return; } r = FcRangeCreateInteger (n[0], n[1]); } FcVStackPushRange (parse, r); } static FcBool FcConfigLexBool (FcConfigParse *parse, const FcChar8 *bool_) { FcBool result = FcFalse; if (!FcNameBool (bool_, &result)) FcConfigMessage (parse, FcSevereWarning, "\"%s\" is not known boolean", bool_); return result; } static void FcParseBool (FcConfigParse *parse) { FcChar8 *s; if (!parse->pstack) return; s = FcStrBufDoneStatic (&parse->pstack->str); if (!s) { FcConfigMessage (parse, FcSevereError, "out of memory"); return; } FcVStackPushBool (parse, FcConfigLexBool (parse, s)); FcStrBufDestroy (&parse->pstack->str); } static void FcParseCharSet (FcConfigParse *parse) { FcVStack *vstack; FcCharSet *charset = FcCharSetCreate(); FcChar32 i, begin, end; int n = 0; while ((vstack = FcVStackPeek (parse))) { switch ((int)vstack->tag) { case FcVStackInteger: if (!FcCharSetAddChar (charset, vstack->u.integer)) { FcConfigMessage (parse, FcSevereWarning, "invalid character: 0x%04x", vstack->u.integer); } else n++; break; case FcVStackRange: begin = (FcChar32)vstack->u.range->begin; end = (FcChar32)vstack->u.range->end; if (begin <= end) { for (i = begin; i <= end; i++) { if (!FcCharSetAddChar (charset, i)) { FcConfigMessage (parse, FcSevereWarning, "invalid character: 0x%04x", i); } else n++; } } break; default: FcConfigMessage (parse, FcSevereError, "invalid element in charset"); break; } FcVStackPopAndDestroy (parse); } if (n > 0) FcVStackPushCharSet (parse, charset); else FcCharSetDestroy (charset); } static void FcParseLangSet (FcConfigParse *parse) { FcVStack *vstack; FcLangSet *langset = FcLangSetCreate(); int n = 0; while ((vstack = FcVStackPeek (parse))) { switch ((int)vstack->tag) { case FcVStackString: if (!FcLangSetAdd (langset, vstack->u.string)) { FcConfigMessage (parse, FcSevereWarning, "invalid langset: %s", vstack->u.string); } else n++; break; default: FcConfigMessage (parse, FcSevereError, "invalid element in langset"); break; } FcVStackPopAndDestroy (parse); } if (n > 0) FcVStackPushLangSet (parse, langset); else FcLangSetDestroy (langset); } static FcBool FcConfigLexBinding (FcConfigParse *parse, const FcChar8 *binding_string, FcValueBinding *binding_ret) { FcValueBinding binding; if (!binding_string) binding = FcValueBindingWeak; else { if (!strcmp ((char *)binding_string, "weak")) binding = FcValueBindingWeak; else if (!strcmp ((char *)binding_string, "strong")) binding = FcValueBindingStrong; else if (!strcmp ((char *)binding_string, "same")) binding = FcValueBindingSame; else { FcConfigMessage (parse, FcSevereWarning, "invalid binding \"%s\"", binding_string); return FcFalse; } } *binding_ret = binding; return FcTrue; } static void FcParseFamilies (FcConfigParse *parse, FcVStackTag tag) { FcVStack *vstack; FcExpr *left, *expr = 0, *newp; while ((vstack = FcVStackPeek (parse))) { if (vstack->tag != FcVStackFamily) { FcConfigMessage (parse, FcSevereWarning, "non-family"); FcVStackPopAndDestroy (parse); continue; } left = vstack->u.expr; vstack->tag = FcVStackNone; FcVStackPopAndDestroy (parse); if (expr) { newp = FcExprCreateOp (parse->config, left, FcOpComma, expr); if (!newp) { FcConfigMessage (parse, FcSevereError, "out of memory"); FcExprDestroy (left); FcExprDestroy (expr); break; } expr = newp; } else expr = left; } if (expr) { if (!FcVStackPushExpr (parse, tag, expr)) { FcConfigMessage (parse, FcSevereError, "out of memory"); FcExprDestroy (expr); } } } static void FcParseFamily (FcConfigParse *parse) { FcChar8 *s; FcExpr *expr; if (!parse->pstack) return; s = FcStrBufDoneStatic (&parse->pstack->str); if (!s) { FcConfigMessage (parse, FcSevereError, "out of memory"); return; } expr = FcExprCreateString (parse->config, s); FcStrBufDestroy (&parse->pstack->str); if (expr) FcVStackPushExpr (parse, FcVStackFamily, expr); } static void FcParseAlias (FcConfigParse *parse) { FcExpr *family = 0, *accept = 0, *prefer = 0, *def = 0, *newp = 0; FcEdit *edit = 0; FcVStack *vstack; FcRule *rule = NULL, *r; FcValueBinding binding; int n; if (!FcConfigLexBinding (parse, FcConfigGetAttribute (parse, "binding"), &binding)) return; while ((vstack = FcVStackPeek (parse))) { switch ((int)vstack->tag) { case FcVStackFamily: if (family) { FcConfigMessage (parse, FcSevereWarning, "Having multiple in isn't supported and may not work as expected"); newp = FcExprCreateOp (parse->config, vstack->u.expr, FcOpComma, family); if (!newp) FcConfigMessage (parse, FcSevereError, "out of memory"); else family = newp; } else newp = vstack->u.expr; if (newp) { family = newp; vstack->tag = FcVStackNone; } break; case FcVStackPrefer: if (prefer) FcExprDestroy (prefer); prefer = vstack->u.expr; vstack->tag = FcVStackNone; break; case FcVStackAccept: if (accept) FcExprDestroy (accept); accept = vstack->u.expr; vstack->tag = FcVStackNone; break; case FcVStackDefault: if (def) FcExprDestroy (def); def = vstack->u.expr; vstack->tag = FcVStackNone; break; case FcVStackTest: if (rule) { r = FcRuleCreate (FcRuleTest, vstack->u.test); r->next = rule; rule = r; } else rule = FcRuleCreate (FcRuleTest, vstack->u.test); vstack->tag = FcVStackNone; break; default: FcConfigMessage (parse, FcSevereWarning, "bad alias"); break; } FcVStackPopAndDestroy (parse); } if (!family) { FcConfigMessage (parse, FcSevereError, "missing family in alias"); if (prefer) FcExprDestroy (prefer); if (accept) FcExprDestroy (accept); if (def) FcExprDestroy (def); if (rule) FcRuleDestroy (rule); return; } if (!prefer && !accept && !def) { FcExprDestroy (family); if (rule) FcRuleDestroy (rule); return; } else { FcTest *t = FcTestCreate (parse, FcMatchPattern, FcQualAny, (FcChar8 *)FC_FAMILY, FC_OP (FcOpEqual, FcOpFlagIgnoreBlanks), family); if (rule) { for (r = rule; r->next; r = r->next) ; r->next = FcRuleCreate (FcRuleTest, t); r = r->next; } else { r = rule = FcRuleCreate (FcRuleTest, t); } } if (prefer) { edit = FcEditCreate (parse, FC_FAMILY_OBJECT, FcOpPrepend, prefer, binding); if (!edit) FcExprDestroy (prefer); else { r->next = FcRuleCreate (FcRuleEdit, edit); r = r->next; } } if (accept) { edit = FcEditCreate (parse, FC_FAMILY_OBJECT, FcOpAppend, accept, binding); if (!edit) FcExprDestroy (accept); else { r->next = FcRuleCreate (FcRuleEdit, edit); r = r->next; } } if (def) { edit = FcEditCreate (parse, FC_FAMILY_OBJECT, FcOpAppendLast, def, binding); if (!edit) FcExprDestroy (def); else { r->next = FcRuleCreate (FcRuleEdit, edit); r = r->next; } } if ((n = FcRuleSetAdd (parse->ruleset, rule, FcMatchPattern)) == -1) FcRuleDestroy (rule); else if (parse->config->maxObjects < n) parse->config->maxObjects = n; } static void FcParseDescription (FcConfigParse *parse) { const FcChar8 *domain; FcChar8 *desc; domain = FcConfigGetAttribute (parse, "domain"); desc = FcStrBufDone (&parse->pstack->str); if (!desc) { FcConfigMessage (parse, FcSevereError, "out of memory"); return; } FcRuleSetAddDescription (parse->ruleset, domain, desc); FcStrFree (desc); } static void FcParseRemapDir (FcConfigParse *parse) { const FcChar8 *path, *attr, *data, *salt; FcStrSet *prefix_dirs = NULL; data = FcStrBufDoneStatic (&parse->pstack->str); if (!data) { FcConfigMessage (parse, FcSevereError, "out of memory"); return; } if (data[0] == 0) { FcConfigMessage (parse, FcSevereWarning, "empty font directory name for remap ignored"); return; } path = FcConfigGetAttribute (parse, "as-path"); if (!path) { FcConfigMessage (parse, FcSevereWarning, "Missing as-path in remap-dir"); return; } attr = FcConfigGetAttribute (parse, "prefix"); salt = FcConfigGetAttribute (parse, "salt"); prefix_dirs = _get_real_paths_from_prefix (parse, data, attr); if (prefix_dirs) { FcStrList *l = FcStrListCreate (prefix_dirs); FcChar8 *prefix; FcStrSetDestroy (prefix_dirs); while ((prefix = FcStrListNext (l))) { if (!prefix || prefix[0] == 0) { /* nop */ } else if (!parse->scanOnly && (!FcStrUsesHome (prefix) || FcConfigHome())) { if (!FcConfigAddFontDir (parse->config, prefix, path, salt)) FcConfigMessage (parse, FcSevereError, "out of memory; cannot create remap data for %s as %s", prefix, path); } FcStrBufDestroy (&parse->pstack->str); } FcStrListDone (l); } } static void FcParseResetDirs (FcConfigParse *parse) { if (!parse->scanOnly) { if (!FcConfigResetFontDirs (parse->config)) FcConfigMessage (parse, FcSevereError, "Unable to reset fonts dirs"); } } static FcExpr * FcPopExpr (FcConfigParse *parse) { FcVStack *vstack = FcVStackPeek (parse); FcExpr *expr = 0; if (!vstack) return 0; switch ((int)vstack->tag) { case FcVStackNone: break; case FcVStackString: case FcVStackFamily: expr = FcExprCreateString (parse->config, vstack->u.string); break; case FcVStackName: expr = FcExprCreateName (parse->config, vstack->u.name); break; case FcVStackConstant: expr = FcExprCreateConst (parse->config, vstack->u.string); break; case FcVStackGlob: /* XXX: What's the correct action here? (CDW) */ break; case FcVStackPrefer: case FcVStackAccept: case FcVStackDefault: expr = vstack->u.expr; vstack->tag = FcVStackNone; break; case FcVStackInteger: expr = FcExprCreateInteger (parse->config, vstack->u.integer); break; case FcVStackDouble: expr = FcExprCreateDouble (parse->config, vstack->u._double); break; case FcVStackMatrix: expr = FcExprCreateMatrix (parse->config, vstack->u.matrix); break; case FcVStackRange: expr = FcExprCreateRange (parse->config, vstack->u.range); break; case FcVStackBool: expr = FcExprCreateBool (parse->config, vstack->u.bool_); break; case FcVStackCharSet: expr = FcExprCreateCharSet (parse->config, vstack->u.charset); break; case FcVStackLangSet: expr = FcExprCreateLangSet (parse->config, vstack->u.langset); break; case FcVStackTest: break; case FcVStackExpr: expr = vstack->u.expr; vstack->tag = FcVStackNone; break; case FcVStackEdit: break; default: break; } FcVStackPopAndDestroy (parse); return expr; } /* * This builds a tree of binary operations. Note * that every operator is defined so that if only * a single operand is contained, the value of the * whole expression is the value of the operand. * * This code reduces in that case to returning that * operand. */ static FcExpr * FcPopBinary (FcConfigParse *parse, FcOp op) { FcExpr *left, *expr = 0, *newp; while ((left = FcPopExpr (parse))) { if (expr) { newp = FcExprCreateOp (parse->config, left, op, expr); if (!newp) { FcConfigMessage (parse, FcSevereError, "out of memory"); FcExprDestroy (left); FcExprDestroy (expr); return 0; } expr = newp; } else expr = left; } return expr; } static void FcParseBinary (FcConfigParse *parse, FcOp op) { FcExpr *expr = FcPopBinary (parse, op); if (expr) FcVStackPushExpr (parse, FcVStackExpr, expr); } /* * This builds a a unary operator, it consumes only * a single operand */ static FcExpr * FcPopUnary (FcConfigParse *parse, FcOp op) { FcExpr *operand, *newp = 0; if ((operand = FcPopExpr (parse))) { newp = FcExprCreateOp (parse->config, operand, op, 0); if (!newp) { FcExprDestroy (operand); FcConfigMessage (parse, FcSevereError, "out of memory"); } } return newp; } static void FcParseUnary (FcConfigParse *parse, FcOp op) { FcExpr *expr = FcPopUnary (parse, op); if (expr) FcVStackPushExpr (parse, FcVStackExpr, expr); } static void FcParseDir (FcConfigParse *parse) { const FcChar8 *attr, *data, *salt; FcStrSet *prefix_dirs = NULL; data = FcStrBufDoneStatic (&parse->pstack->str); if (!data) { FcConfigMessage (parse, FcSevereError, "out of memory"); return; } if (data[0] == 0) { FcConfigMessage (parse, FcSevereWarning, "empty font directory name ignored"); return; } attr = FcConfigGetAttribute (parse, "prefix"); salt = FcConfigGetAttribute (parse, "salt"); prefix_dirs = _get_real_paths_from_prefix (parse, data, attr); if (prefix_dirs) { FcStrList *l = FcStrListCreate (prefix_dirs); FcChar8 *prefix; FcStrSetDestroy (prefix_dirs); while ((prefix = FcStrListNext (l))) { if (!prefix || prefix[0] == 0) { /* nop */ } else if (!parse->scanOnly && (!FcStrUsesHome (prefix) || FcConfigHome())) { if (!FcConfigAddFontDir (parse->config, prefix, NULL, salt)) FcConfigMessage (parse, FcSevereError, "out of memory; cannot add directory %s", prefix); } FcStrBufDestroy (&parse->pstack->str); } FcStrListDone (l); } } static void FcParseCacheDir (FcConfigParse *parse) { const FcChar8 *attr; FcChar8 *prefix = NULL, *p, *data = NULL; attr = FcConfigGetAttribute (parse, "prefix"); if (attr && FcStrCmp (attr, (const FcChar8 *)"xdg") == 0) { prefix = FcConfigXdgCacheHome(); /* home directory might be disabled. * simply ignore this element. */ if (!prefix) goto bail; } data = FcStrBufDone (&parse->pstack->str); if (!data) { FcConfigMessage (parse, FcSevereError, "out of memory"); data = prefix; goto bail; } if (data[0] == 0) { FcConfigMessage (parse, FcSevereWarning, "empty cache directory name ignored"); FcStrFree (data); data = prefix; goto bail; } if (prefix) { size_t plen = strlen ((const char *)prefix); size_t dlen = strlen ((const char *)data); p = realloc (prefix, plen + 1 + dlen + 1); if (!p) { FcConfigMessage (parse, FcSevereError, "out of memory"); FcStrFree (prefix); goto bail; } prefix = p; prefix[plen] = FC_DIR_SEPARATOR; memcpy (&prefix[plen + 1], data, dlen); prefix[plen + 1 + dlen] = 0; FcStrFree (data); data = prefix; } #ifdef _WIN32 else if (data[0] == '/' && fontconfig_instprefix[0] != '\0') { size_t plen = strlen ((const char *)fontconfig_instprefix); size_t dlen = strlen ((const char *)data); prefix = malloc (plen + 1 + dlen + 1); if (!prefix) { FcConfigMessage (parse, FcSevereError, "out of memory"); goto bail; } strcpy ((char *)prefix, (char *)fontconfig_instprefix); prefix[plen] = FC_DIR_SEPARATOR; memcpy (&prefix[plen + 1], data, dlen); prefix[plen + 1 + dlen] = 0; FcStrFree (data); data = prefix; } else if (strcmp ((const char *)data, "WINDOWSTEMPDIR_FONTCONFIG_CACHE") == 0) { int rc; FcStrFree (data); data = malloc (1000); if (!data) { FcConfigMessage (parse, FcSevereError, "out of memory"); goto bail; } rc = GetTempPath (800, (LPSTR)data); if (rc == 0 || rc > 800) { FcConfigMessage (parse, FcSevereError, "GetTempPath failed"); goto bail; } if (data[strlen ((const char *)data) - 1] != '\\') strcat ((char *)data, "\\"); strcat ((char *)data, "fontconfig\\cache"); } else if (strcmp ((const char *)data, "LOCAL_APPDATA_FONTCONFIG_CACHE") == 0) { char szFPath[MAX_PATH + 1]; size_t len; if (!(pSHGetFolderPathA && SUCCEEDED (pSHGetFolderPathA (NULL, /* CSIDL_LOCAL_APPDATA */ 28, NULL, 0, szFPath)))) { FcConfigMessage (parse, FcSevereError, "SHGetFolderPathA failed"); goto bail; } strncat (szFPath, "\\fontconfig\\cache", MAX_PATH - 1 - strlen (szFPath)); len = strlen (szFPath) + 1; FcStrFree (data); data = malloc (len); if (!data) { FcConfigMessage (parse, FcSevereError, "out of memory"); goto bail; } strncpy ((char *)data, szFPath, len); } #endif if (strlen ((char *)data) == 0) FcConfigMessage (parse, FcSevereWarning, "empty cache directory name ignored"); else if (!parse->scanOnly && (!FcStrUsesHome (data) || FcConfigHome())) { if (!FcConfigAddCacheDir (parse->config, data)) FcConfigMessage (parse, FcSevereError, "out of memory; cannot add cache directory %s", data); } FcStrBufDestroy (&parse->pstack->str); bail: if (data) FcStrFree (data); } static void FcParseInclude (FcConfigParse *parse) { FcChar8 *s; const FcChar8 *attr; FcBool ignore_missing = FcFalse; FcChar8 *prefix = NULL, *p; FcRuleSet *ruleset; FcMatchKind k; s = FcStrBufDoneStatic (&parse->pstack->str); if (!s) { FcConfigMessage (parse, FcSevereError, "out of memory"); goto bail; } attr = FcConfigGetAttribute (parse, "ignore_missing"); if (attr && FcConfigLexBool (parse, (FcChar8 *)attr) == FcTrue) ignore_missing = FcTrue; /* deprecated attribute has ever been used to mark * old configuration path as deprecated. * We don't have any code for it but just keep it for * backward compatibility. */ attr = FcConfigGetAttribute (parse, "deprecated"); attr = FcConfigGetAttribute (parse, "prefix"); if (attr && FcStrCmp (attr, (const FcChar8 *)"xdg") == 0) { prefix = FcConfigXdgConfigHome(); /* home directory might be disabled. * simply ignore this element. */ if (!prefix) goto bail; } if (prefix) { size_t plen = strlen ((const char *)prefix); size_t dlen = strlen ((const char *)s); p = realloc (prefix, plen + 1 + dlen + 1); if (!p) { FcConfigMessage (parse, FcSevereError, "out of memory"); goto bail; } prefix = p; prefix[plen] = FC_DIR_SEPARATOR; memcpy (&prefix[plen + 1], s, dlen); prefix[plen + 1 + dlen] = 0; s = prefix; } /* flush the ruleset into the queue */ ruleset = parse->ruleset; parse->ruleset = FcRuleSetCreate (ruleset->name); FcRuleSetEnable (parse->ruleset, ruleset->enabled); FcRuleSetAddDescription (parse->ruleset, ruleset->domain, ruleset->description); for (k = FcMatchKindBegin; k < FcMatchKindEnd; k++) { FcPtrListIter iter; FcPtrListIterInit (ruleset->subst[k], &iter); if (FcPtrListIterIsValid (ruleset->subst[k], &iter)) { FcPtrListIterInitAtLast (parse->config->subst[k], &iter); FcRuleSetReference (ruleset); FcPtrListIterAdd (parse->config->subst[k], &iter, ruleset); } } FcRuleSetDestroy (ruleset); if (!_FcConfigParse (parse->config, s, !ignore_missing, !parse->scanOnly)) parse->error = FcTrue; FcStrBufDestroy (&parse->pstack->str); bail: if (prefix) FcStrFree (prefix); } typedef struct _FcOpMap { char name[16]; FcOp op; } FcOpMap; static FcOp FcConfigLexOp (const FcChar8 *op, const FcOpMap *map, int nmap) { int i; for (i = 0; i < nmap; i++) if (!strcmp ((char *)op, map[i].name)) return map[i].op; return FcOpInvalid; } static const FcOpMap fcCompareOps[] = { { "eq", FcOpEqual }, { "not_eq", FcOpNotEqual }, { "less", FcOpLess }, { "less_eq", FcOpLessEqual }, { "more", FcOpMore }, { "more_eq", FcOpMoreEqual }, { "contains", FcOpContains }, { "not_contains", FcOpNotContains } }; #define NUM_COMPARE_OPS (int)(sizeof fcCompareOps / sizeof fcCompareOps[0]) static FcOp FcConfigLexCompare (const FcChar8 *compare) { return FcConfigLexOp (compare, fcCompareOps, NUM_COMPARE_OPS); } static void FcParseTest (FcConfigParse *parse) { const FcChar8 *kind_string; FcMatchKind kind; const FcChar8 *qual_string; FcQual qual; const FcChar8 *name; const FcChar8 *compare_string; FcOp compare; FcExpr *expr; FcTest *test; const FcChar8 *iblanks_string; int flags = 0; kind_string = FcConfigGetAttribute (parse, "target"); if (!kind_string) kind = FcMatchDefault; else { if (!strcmp ((char *)kind_string, "pattern")) kind = FcMatchPattern; else if (!strcmp ((char *)kind_string, "font")) kind = FcMatchFont; else if (!strcmp ((char *)kind_string, "scan")) kind = FcMatchScan; else if (!strcmp ((char *)kind_string, "default")) kind = FcMatchDefault; else { FcConfigMessage (parse, FcSevereWarning, "invalid test target \"%s\"", kind_string); return; } } qual_string = FcConfigGetAttribute (parse, "qual"); if (!qual_string) qual = FcQualAny; else { if (!strcmp ((char *)qual_string, "any")) qual = FcQualAny; else if (!strcmp ((char *)qual_string, "all")) qual = FcQualAll; else if (!strcmp ((char *)qual_string, "first")) qual = FcQualFirst; else if (!strcmp ((char *)qual_string, "not_first")) qual = FcQualNotFirst; else { FcConfigMessage (parse, FcSevereWarning, "invalid test qual \"%s\"", qual_string); return; } } name = FcConfigGetAttribute (parse, "name"); if (!name) { FcConfigMessage (parse, FcSevereWarning, "missing test name"); return; } compare_string = FcConfigGetAttribute (parse, "compare"); if (!compare_string) compare = FcOpEqual; else { compare = FcConfigLexCompare (compare_string); if (compare == FcOpInvalid) { FcConfigMessage (parse, FcSevereWarning, "invalid test compare \"%s\"", compare_string); return; } } iblanks_string = FcConfigGetAttribute (parse, "ignore-blanks"); if (iblanks_string) { FcBool f = FcFalse; if (!FcNameBool (iblanks_string, &f)) { FcConfigMessage (parse, FcSevereWarning, "invalid test ignore-blanks \"%s\"", iblanks_string); } if (f) flags |= FcOpFlagIgnoreBlanks; } expr = FcPopBinary (parse, FcOpComma); if (!expr) { FcConfigMessage (parse, FcSevereWarning, "missing test expression"); return; } if (expr->op == FcOpComma) { FcConfigMessage (parse, FcSevereWarning, "Having multiple values in isn't supported and may not work as expected"); } test = FcTestCreate (parse, kind, qual, name, FC_OP (compare, flags), expr); if (!test) { FcConfigMessage (parse, FcSevereError, "out of memory"); return; } FcVStackPushTest (parse, test); } static const FcOpMap fcModeOps[] = { { "assign", FcOpAssign }, { "assign_replace", FcOpAssignReplace }, { "prepend", FcOpPrepend }, { "prepend_first", FcOpPrependFirst }, { "append", FcOpAppend }, { "append_last", FcOpAppendLast }, { "delete", FcOpDelete }, { "delete_all", FcOpDeleteAll }, }; #define NUM_MODE_OPS (int)(sizeof fcModeOps / sizeof fcModeOps[0]) static FcOp FcConfigLexMode (const FcChar8 *mode) { return FcConfigLexOp (mode, fcModeOps, NUM_MODE_OPS); } static void FcParseEdit (FcConfigParse *parse) { const FcChar8 *name; const FcChar8 *mode_string; FcOp mode; FcValueBinding binding; FcExpr *expr; FcEdit *edit; name = FcConfigGetAttribute (parse, "name"); if (!name) { FcConfigMessage (parse, FcSevereWarning, "missing edit name"); return; } mode_string = FcConfigGetAttribute (parse, "mode"); if (!mode_string) mode = FcOpAssign; else { mode = FcConfigLexMode (mode_string); if (mode == FcOpInvalid) { FcConfigMessage (parse, FcSevereWarning, "invalid edit mode \"%s\"", mode_string); return; } } if (!FcConfigLexBinding (parse, FcConfigGetAttribute (parse, "binding"), &binding)) return; expr = FcPopBinary (parse, FcOpComma); if ((mode == FcOpDelete || mode == FcOpDeleteAll) && expr != NULL) { FcConfigMessage (parse, FcSevereWarning, "Expression doesn't take any effects for delete and delete_all"); FcExprDestroy (expr); expr = NULL; } edit = FcEditCreate (parse, FcObjectFromName ((char *)name), mode, expr, binding); if (!edit) { FcConfigMessage (parse, FcSevereError, "out of memory"); FcExprDestroy (expr); return; } if (!FcVStackPushEdit (parse, edit)) FcEditDestroy (edit); } static void FcParseMatch (FcConfigParse *parse) { const FcChar8 *kind_name; FcMatchKind kind; FcVStack *vstack; FcRule *rule = NULL, *r; int n; kind_name = FcConfigGetAttribute (parse, "target"); if (!kind_name) kind = FcMatchPattern; else { if (!strcmp ((char *)kind_name, "pattern")) kind = FcMatchPattern; else if (!strcmp ((char *)kind_name, "font")) kind = FcMatchFont; else if (!strcmp ((char *)kind_name, "scan")) kind = FcMatchScan; else { FcConfigMessage (parse, FcSevereWarning, "invalid match target \"%s\"", kind_name); return; } } while ((vstack = FcVStackPeek (parse))) { switch ((int)vstack->tag) { case FcVStackTest: r = FcRuleCreate (FcRuleTest, vstack->u.test); if (rule) r->next = rule; rule = r; vstack->tag = FcVStackNone; break; case FcVStackEdit: if (kind == FcMatchScan && vstack->u.edit->object > FC_MAX_BASE_OBJECT) { FcConfigMessage (parse, FcSevereError, " cannot edit user-defined object \"%s\"", FcObjectName (vstack->u.edit->object)); if (rule) FcRuleDestroy (rule); return; } r = FcRuleCreate (FcRuleEdit, vstack->u.edit); if (rule) r->next = rule; rule = r; vstack->tag = FcVStackNone; break; default: FcConfigMessage (parse, FcSevereWarning, "invalid match element"); break; } FcVStackPopAndDestroy (parse); } if (!rule) { FcConfigMessage (parse, FcSevereWarning, "No nor elements in "); return; } if ((n = FcRuleSetAdd (parse->ruleset, rule, kind)) == -1) { FcConfigMessage (parse, FcSevereError, "out of memory"); FcRuleDestroy (rule); } else if (parse->config->maxObjects < n) parse->config->maxObjects = n; } static void FcParseAcceptRejectFont (FcConfigParse *parse, FcElement element) { FcVStack *vstack; while ((vstack = FcVStackPeek (parse))) { switch ((int)vstack->tag) { case FcVStackGlob: if (!parse->scanOnly && !FcConfigGlobAdd (parse->config, vstack->u.string, element == FcElementAcceptfont)) { if (FcStrUsesHome (vstack->u.string) && FcConfigHome() == NULL) FcConfigMessage (parse, FcSevereWarning, "Home is disabled"); else FcConfigMessage (parse, FcSevereError, "out of memory"); } else { if (parse->scanOnly && vstack->u.string) { FcStrFree (vstack->u.string); vstack->tag = FcVStackNone; } } break; case FcVStackPattern: if (!parse->scanOnly && !FcConfigPatternsAdd (parse->config, vstack->u.pattern, element == FcElementAcceptfont)) { FcConfigMessage (parse, FcSevereError, "out of memory"); } else { if (parse->scanOnly && vstack->u.pattern) FcPatternDestroy (vstack->u.pattern); vstack->tag = FcVStackNone; } break; default: FcConfigMessage (parse, FcSevereWarning, "bad font selector"); break; } FcVStackPopAndDestroy (parse); } } static FcValue FcPopValue (FcConfigParse *parse) { FcVStack *vstack = FcVStackPeek (parse); FcValue value; value.type = FcTypeVoid; if (!vstack) return value; switch ((int)vstack->tag) { case FcVStackString: value.u.s = FcStrdup (vstack->u.string); if (value.u.s) value.type = FcTypeString; break; case FcVStackConstant: if (FcNameConstant (vstack->u.string, &value.u.i)) value.type = FcTypeInteger; break; case FcVStackInteger: value.u.i = vstack->u.integer; value.type = FcTypeInteger; break; case FcVStackDouble: value.u.d = vstack->u._double; value.type = FcTypeDouble; break; case FcVStackBool: value.u.b = vstack->u.bool_; value.type = FcTypeBool; break; case FcVStackCharSet: value.u.c = FcCharSetCopy (vstack->u.charset); if (value.u.c) value.type = FcTypeCharSet; break; case FcVStackLangSet: value.u.l = FcLangSetCopy (vstack->u.langset); if (value.u.l) value.type = FcTypeLangSet; break; case FcVStackRange: value.u.r = FcRangeCopy (vstack->u.range); if (value.u.r) value.type = FcTypeRange; break; default: FcConfigMessage (parse, FcSevereWarning, "unknown pattern element %d", vstack->tag); break; } FcVStackPopAndDestroy (parse); return value; } static void FcParsePatelt (FcConfigParse *parse) { FcValue value; FcPattern *pattern = FcPatternCreate(); const char *name; if (!pattern) { FcConfigMessage (parse, FcSevereError, "out of memory"); return; } name = (char *)FcConfigGetAttribute (parse, "name"); if (!name) { FcConfigMessage (parse, FcSevereWarning, "missing pattern element name"); FcPatternDestroy (pattern); return; } for (;;) { value = FcPopValue (parse); if (value.type == FcTypeVoid) break; if (!FcPatternAdd (pattern, name, value, FcTrue)) { FcConfigMessage (parse, FcSevereError, "out of memory"); FcValueDestroy (value); break; } FcValueDestroy (value); } FcVStackPushPattern (parse, pattern); } static void FcParsePattern (FcConfigParse *parse) { FcVStack *vstack; FcPattern *pattern = FcPatternCreate(); if (!pattern) { FcConfigMessage (parse, FcSevereError, "out of memory"); return; } while ((vstack = FcVStackPeek (parse))) { switch ((int)vstack->tag) { case FcVStackPattern: if (!FcPatternAppend (pattern, vstack->u.pattern)) { FcConfigMessage (parse, FcSevereError, "out of memory"); FcPatternDestroy (pattern); return; } break; default: FcConfigMessage (parse, FcSevereWarning, "unknown pattern element"); break; } FcVStackPopAndDestroy (parse); } FcVStackPushPattern (parse, pattern); } static void FcEndElement (void *userData, const XML_Char *name FC_UNUSED) { FcConfigParse *parse = userData; FcChar8 *data; if (!parse->pstack) return; switch (parse->pstack->element) { case FcElementNone: break; case FcElementFontconfig: break; case FcElementDir: FcParseDir (parse); break; case FcElementCacheDir: FcParseCacheDir (parse); break; case FcElementCache: data = FcStrBufDoneStatic (&parse->pstack->str); if (!data) { FcConfigMessage (parse, FcSevereError, "out of memory"); break; } /* discard this data; no longer used */ FcStrBufDestroy (&parse->pstack->str); break; case FcElementInclude: FcParseInclude (parse); break; case FcElementConfig: break; case FcElementMatch: FcParseMatch (parse); break; case FcElementAlias: FcParseAlias (parse); break; case FcElementDescription: FcParseDescription (parse); break; case FcElementRemapDir: FcParseRemapDir (parse); break; case FcElementResetDirs: FcParseResetDirs (parse); break; case FcElementRescan: FcParseRescan (parse); break; case FcElementPrefer: FcParseFamilies (parse, FcVStackPrefer); break; case FcElementAccept: FcParseFamilies (parse, FcVStackAccept); break; case FcElementDefault: FcParseFamilies (parse, FcVStackDefault); break; case FcElementFamily: FcParseFamily (parse); break; case FcElementTest: FcParseTest (parse); break; case FcElementEdit: FcParseEdit (parse); break; case FcElementInt: FcParseInt (parse); break; case FcElementDouble: FcParseDouble (parse); break; case FcElementString: FcParseString (parse, FcVStackString); break; case FcElementMatrix: FcParseMatrix (parse); break; case FcElementRange: FcParseRange (parse); break; case FcElementBool: FcParseBool (parse); break; case FcElementCharSet: FcParseCharSet (parse); break; case FcElementLangSet: FcParseLangSet (parse); break; case FcElementSelectfont: break; case FcElementAcceptfont: case FcElementRejectfont: FcParseAcceptRejectFont (parse, parse->pstack->element); break; case FcElementGlob: FcParseString (parse, FcVStackGlob); break; case FcElementPattern: FcParsePattern (parse); break; case FcElementPatelt: FcParsePatelt (parse); break; case FcElementName: FcParseName (parse); break; case FcElementConst: FcParseString (parse, FcVStackConstant); break; case FcElementOr: FcParseBinary (parse, FcOpOr); break; case FcElementAnd: FcParseBinary (parse, FcOpAnd); break; case FcElementEq: FcParseBinary (parse, FcOpEqual); break; case FcElementNotEq: FcParseBinary (parse, FcOpNotEqual); break; case FcElementLess: FcParseBinary (parse, FcOpLess); break; case FcElementLessEq: FcParseBinary (parse, FcOpLessEqual); break; case FcElementMore: FcParseBinary (parse, FcOpMore); break; case FcElementMoreEq: FcParseBinary (parse, FcOpMoreEqual); break; case FcElementContains: FcParseBinary (parse, FcOpContains); break; case FcElementNotContains: FcParseBinary (parse, FcOpNotContains); break; case FcElementPlus: FcParseBinary (parse, FcOpPlus); break; case FcElementMinus: FcParseBinary (parse, FcOpMinus); break; case FcElementTimes: FcParseBinary (parse, FcOpTimes); break; case FcElementDivide: FcParseBinary (parse, FcOpDivide); break; case FcElementNot: FcParseUnary (parse, FcOpNot); break; case FcElementIf: FcParseBinary (parse, FcOpQuest); break; case FcElementFloor: FcParseUnary (parse, FcOpFloor); break; case FcElementCeil: FcParseUnary (parse, FcOpCeil); break; case FcElementRound: FcParseUnary (parse, FcOpRound); break; case FcElementTrunc: FcParseUnary (parse, FcOpTrunc); break; case FcElementUnknown: break; } (void)FcPStackPop (parse); } static void FcCharacterData (void *userData, const XML_Char *s, int len) { FcConfigParse *parse = userData; if (!parse->pstack) return; if (!FcStrBufData (&parse->pstack->str, (FcChar8 *)s, len)) FcConfigMessage (parse, FcSevereError, "out of memory"); } static void FcStartDoctypeDecl (void *userData, const XML_Char *doctypeName, const XML_Char *sysid FC_UNUSED, const XML_Char *pubid FC_UNUSED, int has_internal_subset FC_UNUSED) { FcConfigParse *parse = userData; if (strcmp ((char *)doctypeName, "fontconfig") != 0) FcConfigMessage (parse, FcSevereError, "invalid doctype \"%s\"", doctypeName); } #ifdef ENABLE_LIBXML2 static void FcInternalSubsetDecl (void *userData, const XML_Char *doctypeName, const XML_Char *sysid, const XML_Char *pubid) { FcStartDoctypeDecl (userData, doctypeName, sysid, pubid, 1); } static void FcExternalSubsetDecl (void *userData, const XML_Char *doctypeName, const XML_Char *sysid, const XML_Char *pubid) { FcStartDoctypeDecl (userData, doctypeName, sysid, pubid, 0); } #else /* ENABLE_LIBXML2 */ static void FcEndDoctypeDecl (void *userData FC_UNUSED) { } #endif /* ENABLE_LIBXML2 */ static int FcSortCmpStr (const void *a, const void *b) { const FcChar8 *as = *((FcChar8 **)a); const FcChar8 *bs = *((FcChar8 **)b); return FcStrCmp (as, bs); } static FcBool FcConfigParseAndLoadDir (FcConfig *config, const FcChar8 *name, const FcChar8 *dir, FcBool complain, FcBool load) { DIR *d; struct dirent *e; FcBool ret = FcTrue; FcChar8 *file; FcChar8 *base; FcStrSet *files; d = opendir ((char *)dir); if (!d) { if (complain) FcConfigMessage (0, FcSevereError, "Cannot open config dir \"%s\"", name); ret = FcFalse; goto bail0; } /* freed below */ file = (FcChar8 *)malloc (strlen ((char *)dir) + 1 + FC_MAX_FILE_LEN + 1); if (!file) { ret = FcFalse; goto bail1; } strcpy ((char *)file, (char *)dir); strcat ((char *)file, "/"); base = file + strlen ((char *)file); files = FcStrSetCreateEx (FCSS_GROW_BY_64); if (!files) { ret = FcFalse; goto bail2; } if (FcDebug() & FC_DBG_CONFIG) printf ("\tScanning config dir %s\n", dir); if (load) FcConfigAddConfigDir (config, dir); while (ret && (e = readdir (d))) { int d_len; #define TAIL ".conf" #define TAIL_LEN 5 /* * Add all files of the form [0-9]*.conf */ d_len = strlen (e->d_name); if ('0' <= e->d_name[0] && e->d_name[0] <= '9' && d_len > TAIL_LEN && strcmp (e->d_name + d_len - TAIL_LEN, TAIL) == 0) { strcpy ((char *)base, (char *)e->d_name); if (!FcStrSetAdd (files, file)) { ret = FcFalse; goto bail3; } } } if (ret) { int i; qsort (files->strs, files->num, sizeof (FcChar8 *), (int (*) (const void *, const void *))FcSortCmpStr); for (i = 0; ret && i < files->num; i++) ret = _FcConfigParse (config, files->strs[i], complain, load); } bail3: FcStrSetDestroy (files); bail2: free (file); bail1: closedir (d); bail0: return ret || !complain; } static FcBool FcConfigParseAndLoadFromMemoryInternal (FcConfig *config, const FcChar8 *filename, const FcChar8 *buffer, FcBool complain, FcBool load) { XML_Parser p; size_t len; FcConfigParse parse; FcBool error = FcTrue; FcMatchKind k; FcPtrListIter liter; #ifdef ENABLE_LIBXML2 xmlSAXHandler sax; #else void *buf; const FcChar8 *s; size_t buflen; #endif FcInitDebug(); if (!buffer) return FcFalse; len = strlen ((const char *)buffer); if (FcDebug() & FC_DBG_CONFIG) printf ("\t%s config file from %s\n", load ? "Loading" : "Scanning", filename); #ifdef ENABLE_LIBXML2 memset (&sax, 0, sizeof (sax)); sax.internalSubset = FcInternalSubsetDecl; sax.externalSubset = FcExternalSubsetDecl; sax.startElement = FcStartElement; sax.endElement = FcEndElement; sax.characters = FcCharacterData; p = xmlCreatePushParserCtxt (&sax, &parse, NULL, 0, (const char *)filename); #else p = XML_ParserCreate ("UTF-8"); #endif if (!p) goto bail1; if (!FcConfigParseInit (&parse, filename, config, p, load)) goto bail2; #ifndef ENABLE_LIBXML2 XML_SetUserData (p, &parse); XML_SetDoctypeDeclHandler (p, FcStartDoctypeDecl, FcEndDoctypeDecl); XML_SetElementHandler (p, FcStartElement, FcEndElement); XML_SetCharacterDataHandler (p, FcCharacterData); #endif /* ENABLE_LIBXML2 */ #ifndef ENABLE_LIBXML2 s = buffer; do { buf = XML_GetBuffer (p, BUFSIZ); if (!buf) { FcConfigMessage (&parse, FcSevereError, "cannot get parse buffer"); goto bail3; } if (len > BUFSIZ) { buflen = BUFSIZ; len -= BUFSIZ; } else { buflen = len; len = 0; } memcpy (buf, s, buflen); s = s + buflen; #endif #ifdef ENABLE_LIBXML2 if (xmlParseChunk (p, (const char *)buffer, len, len == 0)) #else if (!XML_ParseBuffer (p, buflen, buflen == 0)) #endif { FcConfigMessage (&parse, FcSevereError, "%s", XML_ErrorString (XML_GetErrorCode (p))); goto bail3; } #ifndef ENABLE_LIBXML2 } while (buflen != 0); #endif error = parse.error; if (load) { for (k = FcMatchKindBegin; k < FcMatchKindEnd; k++) { FcPtrListIter iter; FcPtrListIterInit (parse.ruleset->subst[k], &iter); if (FcPtrListIterIsValid (parse.ruleset->subst[k], &iter)) { FcPtrListIterInitAtLast (parse.config->subst[k], &iter); FcRuleSetReference (parse.ruleset); FcPtrListIterAdd (parse.config->subst[k], &iter, parse.ruleset); } } } FcPtrListIterInitAtLast (parse.config->rulesetList, &liter); FcRuleSetReference (parse.ruleset); FcPtrListIterAdd (parse.config->rulesetList, &liter, parse.ruleset); bail3: FcConfigCleanup (&parse); bail2: XML_ParserFree (p); bail1: if (error && complain) { FcConfigMessage (0, FcSevereError, "Cannot %s config file from %s", load ? "load" : "scan", filename); return FcFalse; } if (FcDebug() & FC_DBG_CONFIG) printf ("\t%s config file from %s done\n", load ? "Loading" : "Scanning", filename); return FcTrue; } static FcBool _FcConfigParse (FcConfig *config, const FcChar8 *name, FcBool complain, FcBool load) { FcChar8 *filename = NULL, *realfilename = NULL; int fd; int len; FcStrBuf sbuf; char buf[BUFSIZ]; FcBool ret = FcFalse, complain_again = complain; FcStrBuf reason; FcStrBufInit (&reason, NULL, 0); #ifdef _WIN32 _ensureWin32GettersReady(); #endif filename = FcConfigGetFilename (config, name); if (!filename) { FcStrBufString (&reason, (FcChar8 *)"No such file: "); FcStrBufString (&reason, name ? name : (FcChar8 *)"(null)"); goto bail0; } realfilename = FcConfigRealFilename (config, name); if (!realfilename) { FcStrBufString (&reason, (FcChar8 *)"No such realfile: "); FcStrBufString (&reason, name ? name : (FcChar8 *)"(null)"); goto bail0; } if (FcStrSetMember (config->availConfigFiles, realfilename)) { FcStrFree (filename); FcStrFree (realfilename); return FcTrue; } if (load) { if (!FcStrSetAdd (config->configFiles, filename)) goto bail0; } if (!FcStrSetAdd (config->availConfigFiles, realfilename)) goto bail0; if (FcFileIsDir (realfilename)) { ret = FcConfigParseAndLoadDir (config, name, realfilename, complain, load); FcStrFree (filename); FcStrFree (realfilename); return ret; } FcStrBufInit (&sbuf, NULL, 0); fd = FcOpen ((char *)realfilename, O_RDONLY); if (fd == -1) { FcStrBufString (&reason, (FcChar8 *)"Unable to open "); FcStrBufString (&reason, realfilename); goto bail1; } do { len = read (fd, buf, BUFSIZ); if (len < 0) { int errno_ = errno; char ebuf[BUFSIZ + 1]; #if HAVE_STRERROR_R strerror_r (errno_, ebuf, BUFSIZ); #elif HAVE_STRERROR char *tmp = strerror (errno_); size_t len = strlen (tmp); memcpy (ebuf, tmp, FC_MIN (BUFSIZ, len)); ebuf[FC_MIN (BUFSIZ, len)] = 0; #else ebuf[0] = 0; #endif FcConfigMessage (0, FcSevereError, "failed reading config file: %s: %s (errno %d)", realfilename, ebuf, errno_); close (fd); goto bail1; } FcStrBufData (&sbuf, (const FcChar8 *)buf, len); } while (len != 0); close (fd); ret = FcConfigParseAndLoadFromMemoryInternal (config, filename, FcStrBufDoneStatic (&sbuf), complain, load); complain_again = FcFalse; /* no need to reclaim here */ bail1: FcStrBufDestroy (&sbuf); bail0: if (filename) FcStrFree (filename); if (realfilename) FcStrFree (realfilename); if (!complain) { FcStrBufDestroy (&reason); return FcTrue; } if (!ret && complain_again) { if (name) FcConfigMessage (0, FcSevereError, "Cannot %s config file \"%s\": %s", load ? "load" : "scan", name, FcStrBufDoneStatic (&reason)); else FcConfigMessage (0, FcSevereError, "Cannot %s default config file: %s", load ? "load" : "scan", FcStrBufDoneStatic (&reason)); FcStrBufDestroy (&reason); return FcFalse; } FcStrBufDestroy (&reason); return ret; } FcBool FcConfigParseOnly (FcConfig *config, const FcChar8 *name, FcBool complain) { return _FcConfigParse (config, name, complain, FcFalse); } FcBool FcConfigParseAndLoad (FcConfig *config, const FcChar8 *name, FcBool complain) { return _FcConfigParse (config, name, complain, FcTrue); } FcBool FcConfigParseAndLoadFromMemory (FcConfig *config, const FcChar8 *buffer, FcBool complain) { return FcConfigParseAndLoadFromMemoryInternal (config, (const FcChar8 *)"memory", buffer, complain, FcTrue); } #ifdef _WIN32 static void _ensureWin32GettersReady () { if (!pGetSystemWindowsDirectory) { HMODULE hk32 = GetModuleHandleA ("kernel32.dll"); if (!(pGetSystemWindowsDirectory = (pfnGetSystemWindowsDirectory)GetProcAddress (hk32, "GetSystemWindowsDirectoryA"))) pGetSystemWindowsDirectory = (pfnGetSystemWindowsDirectory)GetWindowsDirectory; } if (!pSHGetFolderPathA) { HMODULE hSh = LoadLibraryA ("shfolder.dll"); /* the check is done later, because there is no provided fallback */ if (hSh) pSHGetFolderPathA = (pfnSHGetFolderPathA)GetProcAddress (hSh, "SHGetFolderPathA"); } } #endif // _WIN32 #define __fcxml__ #include "fcaliastail.h" #undef __fcxml__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/fontconfig.def.in000066400000000000000000000102341503113465200254020ustar00rootroot00000000000000EXPORTS FcAtomicCreate FcAtomicDeleteNew FcAtomicDestroy FcAtomicLock FcAtomicNewFile FcAtomicOrigFile FcAtomicReplaceOrig FcAtomicUnlock FcBlanksAdd FcBlanksCreate FcBlanksDestroy FcBlanksIsMember FcCacheCopySet FcCacheCreateTagFile FcCacheDir FcCacheNumFont FcCacheNumSubdir FcCacheSubdir FcCharSetAddChar FcCharSetCopy FcCharSetCount FcCharSetCoverage FcCharSetCreate FcCharSetDelChar FcCharSetDestroy FcCharSetEqual FcCharSetFirstPage FcCharSetHasChar FcCharSetIntersect FcCharSetIntersectCount FcCharSetIsSubset FcCharSetMerge FcCharSetNew FcCharSetNextPage FcCharSetSubtract FcCharSetSubtractCount FcCharSetUnion FcConfigAppFontAddDir FcConfigAppFontAddFile FcConfigAppFontClear FcConfigBuildFonts FcConfigCreate FcConfigDestroy FcConfigEnableHome FcConfigFileInfoIterGet FcConfigFileInfoIterInit FcConfigFileInfoIterNext FcConfigFilename FcConfigGetBlanks FcConfigGetCache FcConfigGetCacheDirs FcConfigGetConfigDirs FcConfigGetConfigFiles FcConfigGetCurrent FcConfigGetFontDirs FcConfigGetFonts FcConfigGetRescanInterval FcConfigGetRescanInverval FcConfigGetSysRoot FcConfigHome FcConfigParseAndLoad FcConfigParseAndLoadFromMemory FcConfigReference FcConfigSetCurrent FcConfigSetRescanInterval FcConfigSetRescanInverval FcConfigSetSysRoot FcConfigSubstitute FcConfigSubstituteWithPat FcConfigUptoDate FcDefaultSubstitute FcDirCacheClean FcDirCacheCreateUUID FcDirCacheDeleteUUID FcDirCacheLoad FcDirCacheLoadFile FcDirCacheRead FcDirCacheRescan FcDirCacheUnlink FcDirCacheUnload FcDirCacheValid FcDirSave FcDirScan FcFileIsDir FcFileScan FcFini FcFontList FcFontMatch FcFontRenderPrepare FcFontSetAdd FcFontSetCreate FcFontSetDestroy FcFontSetList FcFontSetMatch FcFontSetPrint FcFontSetSort FcFontSetSortDestroy FcFontSort FcFreeTypeCharIndex FcFreeTypeCharSet FcFreeTypeCharSetAndSpacing FcFreeTypeQuery FcFreeTypeQueryAll FcFreeTypeQueryFace FcGetDefaultLangs FcGetLangs FcGetVersion FcInit FcInitBringUptoDate FcInitLoadConfig FcInitLoadConfigAndFonts FcInitReinitialize FcLangGetCharSet FcLangNormalize FcLangSetAdd FcLangSetCompare FcLangSetContains FcLangSetCopy FcLangSetCreate FcLangSetDel FcLangSetDestroy FcLangSetEqual FcLangSetGetLangs FcLangSetHash FcLangSetHasLang FcLangSetSubtract FcLangSetUnion FcMatrixCopy FcMatrixEqual FcMatrixMultiply FcMatrixRotate FcMatrixScale FcMatrixShear FcNameConstant FcNameGetConstant FcNameGetObjectType FcNameParse FcNameRegisterConstants FcNameRegisterObjectTypes FcNameUnparse FcNameUnregisterConstants FcNameUnregisterObjectTypes FcObjectSetAdd FcObjectSetBuild FcObjectSetCreate FcObjectSetDestroy FcObjectSetVaBuild FcPatternAdd FcPatternAddBool FcPatternAddCharSet FcPatternAddDouble FcPatternAddFTFace FcPatternAddInteger FcPatternAddLangSet FcPatternAddMatrix FcPatternAddRange FcPatternAddString FcPatternAddWeak FcPatternBuild FcPatternCreate FcPatternDel FcPatternDestroy FcPatternDuplicate FcPatternEqual FcPatternEqualSubset FcPatternFilter FcPatternFindIter FcPatternFormat FcPatternGet FcPatternGetBool FcPatternGetCharSet FcPatternGetDouble FcPatternGetFTFace FcPatternGetInteger FcPatternGetLangSet FcPatternGetMatrix FcPatternGetRange FcPatternGetString FcPatternGetWithBinding FcPatternHash FcPatternIterEqual FcPatternIterGetObject FcPatternIterGetValue FcPatternIterIsValid FcPatternIterNext FcPatternIterStart FcPatternIterValueCount FcPatternObjectCount FcPatternPrint FcPatternReference FcPatternRemove FcPatternVaBuild FcRangeCopy FcRangeCreateDouble FcRangeCreateInteger FcRangeDestroy FcRangeGetDouble FcStrBasename FcStrBuildFilename FcStrCmp FcStrCmpIgnoreCase FcStrCopy FcStrCopyFilename FcStrDirname FcStrDowncase FcStrFree FcStrListCreate FcStrListDone FcStrListFirst FcStrListNext FcStrPlus FcStrSetAdd FcStrSetAddFilename FcStrSetCreate FcStrSetDel FcStrSetDestroy FcStrSetEqual FcStrSetMember FcStrStr FcStrStrIgnoreCase FcUcs4ToUtf8 FcUtf16Len FcUtf16ToUcs4 FcUtf8Len FcUtf8ToUcs4 FcValueDestroy FcValueEqual FcValuePrint FcValueSave FcWeightFromOpenType FcWeightFromOpenTypeDouble FcWeightToOpenType FcWeightToOpenTypeDouble fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/ftglue.c000066400000000000000000000122601503113465200236140ustar00rootroot00000000000000/* ftglue.c: Glue code for compiling the OpenType code from * FreeType 1 using only the public API of FreeType 2 * * By David Turner, The FreeType Project (www.freetype.org) * * This code is explicitely put in the public domain * * See ftglue.h for more information. */ #include "ftglue.h" #if 0 # include # define LOG(x) ftglue_log x static void ftglue_log( const char* format, ... ) { va_list ap; va_start( ap, format ); vfprintf( stderr, format, ap ); va_end( ap ); } #else # define LOG(x) \ do { \ } while (0) #endif /* only used internally */ static FT_Pointer ftglue_qalloc (FT_Memory memory, FT_ULong size, FT_Error *perror) { FT_Error error = 0; FT_Pointer block = NULL; if (size > 0) { block = memory->alloc (memory, size); if (!block) error = FT_Err_Out_Of_Memory; } *perror = error; return block; } #undef QALLOC /* just in case */ #define QALLOC(ptr, size) ((ptr) = ftglue_qalloc (memory, (size), &error), error != 0) #define FREE(_ptr) \ do { \ if ((_ptr)) { \ ftglue_free (memory, _ptr); \ _ptr = NULL; \ } \ } while (0) static void ftglue_free (FT_Memory memory, FT_Pointer block) { if (block) memory->free (memory, block); } FTGLUE_APIDEF (FT_Long) ftglue_stream_pos (FT_Stream stream) { LOG (("ftglue:stream:pos() -> %ld\n", stream->pos)); return stream->pos; } FTGLUE_APIDEF (FT_Error) ftglue_stream_seek (FT_Stream stream, FT_Long pos) { FT_Error error = 0; if (stream->read) { if (stream->read (stream, pos, 0, 0)) error = FT_Err_Invalid_Stream_Operation; } else if (pos < 0 || (FT_ULong)pos > stream->size) error = FT_Err_Invalid_Stream_Operation; if (!error) stream->pos = pos; LOG (("ftglue:stream:seek(%ld) -> %d\n", pos, error)); return error; } FTGLUE_APIDEF (FT_Error) ftglue_stream_frame_enter (FT_Stream stream, FT_ULong count) { FT_Error error = FT_Err_Ok; FT_ULong read_bytes; if (stream->read) { /* allocate the frame in memory */ FT_Memory memory = stream->memory; if (QALLOC (stream->base, count)) goto Exit; /* read it */ read_bytes = stream->read (stream, stream->pos, stream->base, count); if (read_bytes < count) { FREE (stream->base); error = FT_Err_Invalid_Stream_Operation; } stream->cursor = stream->base; stream->limit = stream->cursor + count; stream->pos += read_bytes; } else { /* check current and new position */ if (stream->pos >= stream->size || stream->pos + count > stream->size) { error = FT_Err_Invalid_Stream_Operation; goto Exit; } /* set cursor */ stream->cursor = stream->base + stream->pos; stream->limit = stream->cursor + count; stream->pos += count; } Exit: LOG (("ftglue:stream:frame_enter(%ld) -> %d\n", count, error)); return error; } FTGLUE_APIDEF (void) ftglue_stream_frame_exit (FT_Stream stream) { if (stream->read) { FT_Memory memory = stream->memory; FREE (stream->base); } stream->cursor = 0; stream->limit = 0; LOG (("ftglue:stream:frame_exit()\n")); } FTGLUE_APIDEF (FT_Error) ftglue_face_goto_table (FT_Face face, FT_ULong the_tag, FT_Stream stream, FT_ULong *table_size) { FT_Error error; LOG (("ftglue_face_goto_table( %p, %c%c%c%c, %p )\n", face, (int)((the_tag >> 24) & 0xFF), (int)((the_tag >> 16) & 0xFF), (int)((the_tag >> 8) & 0xFF), (int)(the_tag & 0xFF), stream)); if (!FT_IS_SFNT (face)) { LOG (("not a SFNT face !!\n")); error = FT_Err_Invalid_Face_Handle; } else { /* parse the directory table directly, without using * FreeType's built-in data structures */ FT_ULong offset = 0, sig; FT_UInt count, nn; if (FILE_Seek (0) || ACCESS_Frame (4)) goto Exit; sig = GET_Tag4(); FORGET_Frame(); if (sig == FT_MAKE_TAG ('t', 't', 'c', 'f')) { /* deal with TrueType collections */ LOG ((">> This is a TrueType Collection\n")); if (FILE_Seek (12 + face->face_index * 4) || ACCESS_Frame (4)) goto Exit; offset = GET_ULong(); FORGET_Frame(); } LOG (("TrueType offset = %ld\n", offset)); if (FILE_Seek (offset + 4) || ACCESS_Frame (2)) goto Exit; count = GET_UShort(); FORGET_Frame(); if (FILE_Seek (offset + 12) || ACCESS_Frame (count * 16)) goto Exit; for (nn = 0; nn < count; nn++) { FT_ULong tag = GET_ULong(); FT_ULong checksum FC_UNUSED = GET_ULong(); FT_ULong start = GET_ULong(); FT_ULong size FC_UNUSED = GET_ULong(); if (tag == the_tag) { LOG (("TrueType table (start: %ld) (size: %ld)\n", start, size)); error = ftglue_stream_seek (stream, start); if (table_size) *table_size = size; goto FoundIt; } } error = FT_Err_Table_Missing; FoundIt: FORGET_Frame(); } Exit: LOG (("TrueType error=%d\n", error)); return error; } #undef QALLOC #include "fcaliastail.h" #undef __ftglue__ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/ftglue.h000066400000000000000000000077251503113465200236330ustar00rootroot00000000000000/* ftglue.c: Glue code for compiling the OpenType code from * FreeType 1 using only the public API of FreeType 2 * * By David Turner, The FreeType Project (www.freetype.org) * * This code is explicitely put in the public domain * * ========================================================================== * * the OpenType parser codes was originally written as an extension to * FreeType 1.x. As such, its source code was embedded within the library, * and used many internal FreeType functions to deal with memory and * stream i/o. * * When it was 'salvaged' for Pango and Qt, the code was "ported" to FreeType 2, * which basically means that some macro tricks were performed in order to * directly access FT2 _internal_ functions. * * these functions were never part of FT2 public API, and _did_ change between * various releases. This created chaos for many users: when they upgraded the * FreeType library on their system, they couldn't run Gnome anymore since * Pango refused to link. * * Very fortunately, it's possible to completely avoid this problem because * the FT_StreamRec and FT_MemoryRec structure types, which describe how * memory and stream implementations interface with the rest of the font * library, have always been part of the public API, and never changed. * * What we do thus is re-implement, within the OpenType parser, the few * functions that depend on them. This only adds one or two kilobytes of * code, and ensures that the parser can work with _any_ version * of FreeType installed on your system. How sweet... ! * * Note that we assume that Pango doesn't use any other internal functions * from FreeType. It used to in old versions, but this should no longer * be the case. (crossing my fingers). * * - David Turner * - The FreeType Project (www.freetype.org) * * PS: This "glue" code is explicitely put in the public domain */ #ifndef __OPENTYPE_FTGLUE_H__ #define __OPENTYPE_FTGLUE_H__ #include "fcint.h" #include #include FT_FREETYPE_H FT_BEGIN_HEADER #define SET_ERR(c) ((error = (c)) != 0) #ifndef FTGLUE_API # define FTGLUE_API(x) extern FcPrivate x #endif #ifndef FTGLUE_APIDEF # define FTGLUE_APIDEF(x) x #endif /* stream macros used by the OpenType parser */ #define FILE_Pos() ftglue_stream_pos (stream) #define FILE_Seek(pos) SET_ERR (ftglue_stream_seek (stream, pos)) #define ACCESS_Frame(size) SET_ERR (ftglue_stream_frame_enter (stream, size)) #define FORGET_Frame() ftglue_stream_frame_exit (stream) #define GET_Byte() (*stream->cursor++) #define GET_Short() (stream->cursor += 2, (FT_Short)(((FT_ULong) * (((FT_Byte *)stream->cursor) - 2) << 8) | \ (FT_ULong) * (((FT_Byte *)stream->cursor) - 1))) #define GET_Long() (stream->cursor += 4, (FT_Long)(((FT_ULong) * (((FT_Byte *)stream->cursor) - 4) << 24) | \ ((FT_ULong) * (((FT_Byte *)stream->cursor) - 3) << 16) | \ ((FT_ULong) * (((FT_Byte *)stream->cursor) - 2) << 8) | \ (FT_ULong) * (((FT_Byte *)stream->cursor) - 1))) #define GET_Char() ((FT_Char)GET_Byte()) #define GET_UShort() ((FT_UShort)GET_Short()) #define GET_ULong() ((FT_ULong)GET_Long()) #define GET_Tag4() GET_ULong() #define FT_SET_ERROR(expression) \ ((error = (expression)) != 0) FTGLUE_API (FT_Long) ftglue_stream_pos (FT_Stream stream); FTGLUE_API (FT_Error) ftglue_stream_seek (FT_Stream stream, FT_Long pos); FTGLUE_API (FT_Error) ftglue_stream_frame_enter (FT_Stream stream, FT_ULong size); FTGLUE_API (void) ftglue_stream_frame_exit (FT_Stream stream); FTGLUE_API (FT_Error) ftglue_face_goto_table (FT_Face face, FT_ULong tag, FT_Stream stream, FT_ULong *table_size); FT_END_HEADER #endif /* __OPENTYPE_FTGLUE_H__ */ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/makealias000077500000000000000000000017761503113465200240510ustar00rootroot00000000000000#!/bin/sh SRCDIR=$1 shift HEAD=$1 shift TAIL=$1 shift rm -f $HEAD $TAIL echo "#if HAVE_GNUC_ATTRIBUTE" >> $TAIL cat "$@" | grep '^Fc[^ ]* *(' | sed -e 's/ *(.*$//' | while read name; do case $name in FcCacheDir|FcCacheSubdir) ;; *) alias="IA__$name" hattr='FC_ATTRIBUTE_VISIBILITY_HIDDEN' echo "extern __typeof ($name) $alias $hattr;" >> $HEAD echo "#define $name $alias" >> $HEAD ifdef=`grep -l '^'$name'[ (]' "$SRCDIR"/*.c | sed -n 1p | sed -e 's/^.*\/\([^.]*\)\.c/__\1__/'` if [ -z "$ifdef" ] ; then echo "error: could not locate $name in src/*.c" 1>&2 exit 1 fi if [ "$ifdef" != "$last" ] ; then [ -n "$last" ] && echo "#endif /* $last */" >> $TAIL echo "#ifdef $ifdef" >> $TAIL last=$ifdef fi echo "# undef $name" >> $TAIL cattr='__attribute((alias("'$alias'"))) FC_ATTRIBUTE_VISIBILITY_EXPORT' echo "extern __typeof ($name) $name $cattr;" >> $TAIL ;; esac done [ $? -ne 0 ] && exit 1 echo "#endif /* $ifdef */" >> $TAIL echo "#endif /* HAVE_GNUC_ATTRIBUTE */" >> $TAIL fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/makealias.py000077500000000000000000000046411503113465200244720ustar00rootroot00000000000000#!/usr/bin/env python3 import os import re import sys import argparse from collections import OrderedDict # cat fontconfig/fontconfig.h | grep '^Fc[^ ]* *(' | sed -e 's/ *(.*$//' def extract(fname): with open(fname, 'r', encoding='utf-8') as f: for l in f.readlines(): l = l.rstrip() m = re.match(r'^(Fc[^ ]*)[\s\w]*\(.*', l) if m and m.group(1) not in ['FcCacheDir', 'FcCacheSubdir']: yield m.group(1) if __name__=='__main__': parser = argparse.ArgumentParser() parser.add_argument('srcdir') parser.add_argument('head') parser.add_argument('tail') parser.add_argument('headers', nargs='+') args = parser.parse_args() definitions = {} for fname in os.listdir(args.srcdir): define_name, ext = os.path.splitext(fname) if ext != '.c': continue define_name = '__%s__' % os.path.basename(define_name) for definition in extract(os.path.join(args.srcdir, fname)): definitions[definition] = define_name declarations = OrderedDict() for fname in args.headers: for declaration in extract(fname): try: define_name = definitions[declaration] except KeyError: print ('error: could not locate %s in src/*.c' % declaration) sys.exit(1) declarations[declaration] = define_name with open(args.head, 'w') as head: with open(args.tail, 'w') as tail: tail.write('#if HAVE_GNUC_ATTRIBUTE\n') last = None for name, define_name in declarations.items(): alias = 'IA__%s' % name hattr = 'FC_ATTRIBUTE_VISIBILITY_HIDDEN' head.write('extern __typeof (%s) %s %s;\n' % (name, alias, hattr)) head.write('#define %s %s\n' % (name, alias)) if define_name != last: if last is not None: tail.write('#endif /* %s */\n' % last) tail.write('#ifdef %s\n' % define_name) last = define_name tail.write('# undef %s\n' % name) cattr = '__attribute((alias("%s"))) FC_ATTRIBUTE_VISIBILITY_EXPORT' % alias tail.write('extern __typeof (%s) %s %s;\n' % (name, name, cattr)) tail.write('#endif /* %s */\n' % last) tail.write('#endif /* HAVE_GNUC_ATTRIBUTE */\n') fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/src/meson.build000066400000000000000000000034551503113465200243320ustar00rootroot00000000000000 win_export_args = [] # Define FcPublic appropriately for exports on windows if host_machine.system() == 'windows' win_export_args += '-DFcPublic=__declspec(dllexport)' win_export_args += '-DDLL_EXPORT' endif # Factor our pattern manipulation code into its own library # to break the depedency cycle: # FontConfig pattern handling - Fontations code - FontConfig. pattern_sources = [ 'fcpat.c', fcstdint_h, fclang_h ] pattern_lib = static_library('patternlib_internal', pattern_sources, include_directories: incbase, dependencies: [deps], c_args: win_export_args ) fc_sources = files([ 'fcatomic.c', 'fccache.c', 'fccfg.c', 'fccharset.c', 'fccompat.c', 'fcdbg.c', 'fcdefault.c', 'fcdir.c', 'fcformat.c', 'fcfreetype.c', 'fcfs.c', 'fcptrlist.c', 'fchash.c', 'fcinit.c', 'fclang.c', 'fclist.c', 'fcmatch.c', 'fcmatrix.c', 'fcname.c', 'fcobjs.c', 'fcrange.c', 'fcserialize.c', 'fcstat.c', 'fcstr.c', 'fcweight.c', 'fcxml.c', 'ftglue.c', ]) fcobjshash_h = cc.preprocess('fcobjshash.gperf.h', include_directories: incbase) fcobjshash_gperf = custom_target( input: fcobjshash_h, output: 'fcobjshash.gperf', command: ['cutout.py', '@INPUT@', '@OUTPUT@'], build_by_default: true, ) fcobjshash_h = custom_target('fcobjshash.h', input: fcobjshash_gperf, output: 'fcobjshash.h', command: [gperf, '--pic', '-m', '100', '@INPUT@', '--output-file', '@OUTPUT@'] ) lib_fontconfig_sources = [fc_sources, alias_headers, ft_alias_headers, fccase_h, fclang_h, fcobjshash_h, fcstdint_h] lib_fontconfig_kwargs = { 'include_directories': incbase, 'dependencies': [deps, math_dep], 'link_with': [pattern_lib], } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/subprojects/000077500000000000000000000000001503113465200237355ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/subprojects/.gitignore000066400000000000000000000000731503113465200257250ustar00rootroot00000000000000/expat-* /freetype2 /gperf /zlib-* /libpng-* /packagecache fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/subprojects/expat.wrap000066400000000000000000000006751503113465200257610ustar00rootroot00000000000000[wrap-file] directory = expat-2.2.6 source_url = https://github.com/libexpat/libexpat/releases/download/R_2_2_6/expat-2.2.6.tar.bz2 source_filename = expat-2.2.6.tar.bz2 source_hash = 17b43c2716d521369f82fc2dc70f359860e90fa440bea65b3b85f0b246ea81f2 patch_url = https://wrapdb.mesonbuild.com/v1/projects/expat/2.2.6/1/get_zip patch_filename = expat-2.2.6-1-wrap.zip patch_hash = b8312fae757c7bff6f0cb430108104441a3da7a0a333809f5c80b354157eaa4d fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/subprojects/freetype2.wrap000066400000000000000000000002421503113465200265330ustar00rootroot00000000000000[wrap-git] directory=freetype2 url=https://gitlab.freedesktop.org/freetype/freetype.git push-url=git@gitlab.freedesktop.org:freetype/freetype.git revision=master fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/subprojects/gperf.wrap000066400000000000000000000002601503113465200257310ustar00rootroot00000000000000[wrap-git] directory=gperf url=https://gitlab.freedesktop.org/tpm/gperf.git push-url=https://gitlab.freedesktop.org/tpm/gperf.git revision=meson [provide] program_names=gperf fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/subprojects/libintl/000077500000000000000000000000001503113465200253725ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/subprojects/libintl/meson.build000066400000000000000000000007711503113465200275410ustar00rootroot00000000000000project('libintl', 'c') libintl_cc = meson.get_compiler('c') libintl_inc = include_directories('/usr/local/include') if libintl_cc.has_header('libintl.h', include_directories: libintl_inc) dep = libintl_cc.find_library('intl', dirs: ['/usr/local/lib'], required: false) if dep.found() libintl_dep = declare_dependency(dependencies: dep, include_directories: libintl_inc) else libintl_dep = dependency('', required: false) endif else libintl_dep = dependency('', required: false) endif fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/subprojects/libpng.wrap000066400000000000000000000006521503113465200261060ustar00rootroot00000000000000[wrap-file] directory = libpng-1.6.37 source_url = https://github.com/glennrp/libpng/archive/v1.6.37.tar.gz source_filename = libpng-1.6.37.tar.gz source_hash = ca74a0dace179a8422187671aee97dd3892b53e168627145271cad5b5ac81307 patch_url = https://wrapdb.mesonbuild.com/v1/projects/libpng/1.6.37/1/get_zip patch_filename = libpng-1.6.37-1-wrap.zip patch_hash = 9a863ae8a5657315a484c94c51f9f636b1fb9f49a15196cc896b72e5f21d78f0 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/subprojects/libxml2.wrap000066400000000000000000000011451503113465200262020ustar00rootroot00000000000000[wrap-file] directory = libxml2-2.12.6 source_url = https://download.gnome.org/sources/libxml2/2.12/libxml2-2.12.6.tar.xz source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/libxml2_2.12.6-1/libxml2-2.12.6.tar.xz source_filename = libxml2-2.12.6.tar.xz source_hash = 889c593a881a3db5fdd96cc9318c87df34eb648edfc458272ad46fd607353fbb patch_filename = libxml2_2.12.6-1_patch.zip patch_url = https://wrapdb.mesonbuild.com/v2/libxml2_2.12.6-1/get_patch patch_hash = 777be7ffdc4167e4d0b3f405e13492664cbdef2e6cf6f6a88cc55ec80112614c wrapdb_version = 2.12.6-1 [provide] libxml-2.0 = libxml2_dep fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/subprojects/zlib.wrap000066400000000000000000000006241503113465200255720ustar00rootroot00000000000000[wrap-file] directory = zlib-1.2.11 source_url = http://zlib.net/fossils/zlib-1.2.11.tar.gz source_filename = zlib-1.2.11.tar.gz source_hash = c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1 patch_url = https://wrapdb.mesonbuild.com/v1/projects/zlib/1.2.11/4/get_zip patch_filename = zlib-1.2.11-4-wrap.zip patch_hash = f733976fbfc59e0bcde01aa9469a24eeb16faf0a4280b17e9eaa60a301d75657 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/000077500000000000000000000000001503113465200223515ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/4x6.pcf000066400000000000000000002124501503113465200234700ustar00rootroot00000000000000fcp d4d0z N,@d<@,d ,2>EKM[bqr}<KK(#1JU^c gFONTNAME_REGISTRYFOUNDRYMiscFAMILY_NAMEFixedWEIGHT_NAMEMediumSLANTRSETWIDTH_NAMENormalADD_STYLE_NAMEPIXEL_SIZEPOINT_SIZERESOLUTION_XRESOLUTION_YSPACINGCAVERAGE_WIDTHCHARSET_REGISTRYISO10646CHARSET_ENCODING1DESTINATIONCOPYRIGHTPublic domain font. Share and enjoy._XMBDFED_INFOEdited with xmbdfed 4.3.CAP_HEIGHTX_HEIGHTFONT-Misc-Fixed-Medium-R-Normal--6-60-75-75-C-40-ISO10646-1WEIGHTRESOLUTIONQUAD_WIDTH0H`x 8Ph(@Xp0H`x 8Ph(@Xp0H`x 8Ph(@Xp  0 H ` x  8 P h  ( @ X p  0 H ` x  8 P h (@Xp0H`x 8Ph(@Xp0H`x 8Ph(@Xp0H`x 8Ph(@Xp0H`x 8Ph(@Xp0H`x 8Ph(@Xp0H`x 8Ph ( @ X p !!0!H!`!x!!!!!!" "8"P"h"""""""#(#@#X#p######$$0$H$`$x$$$$$$% %8%P%h%%%%%%%&(&@&X&p&&&&&&''0'H'`'x''''''( (8(P(h((((((()()@)X)p))))))**0*H*`*x******+ +8+P+h+++++++,(,@,X,p,,,,,,--0-H-`-x------. .8.P.h......./(/@/X/p//////0000H0`0x0000001 181P1h11111112(2@2X2p2222223303H3`3x3333334 484P4h44444445(5@5X5p5555556606H6`6x6666667 787P7h77777778(8@8X8p8888889909H9`9x999999: :8:P:h:::::::;(;@;X;p;;;;;;<<0<H<`<x<<<<<<= =8=P=h=======>(>@>X>p>>>>>>??0?H?`?x??????@ @8@P@h@@@@@@@A(A@AXApAAAAAABB0BHB`BxBBBBBBC C8CPChCCCCCCCD(D@DXDpDDDDDDEE0EHE`ExEEEEEEF F8FPFhFFFFFFFG(G@GXGpGGGGGGHH0HHH`HxHHHHHHI I8IPIhIIIIIIIJ(J@JXJpJJJJJJKK0KHK`KxKKKKKKL L8LPLhLLLLLLLM(M@MXMpMMMMMMNN0NHN`NxNNNNNNO O8OPOhOOOOOOOP(P@PXPpPPPPPPQQ0QHQ`QxQQQQQQR R8RPRhRRRRRRRS(S@SXSpSSSSSSTT0THT`TxTTTTTTU U8UPUhUUUUUUUV+(VP                                                                                                                                 }}~}}}|~|~}~}}|}|~}}}}}~~~~~~~~~~~~~~~|~|}~|&  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ '.6@LVajou|  *4AMX^`bdfhjlnprtvxz|~!,3>ELVbpvy !$-4;GQX_kuy"(+4;BNX_fr| !)07COZelsz*7COTY`gow~ $).5<CJWdkr~ "+4;BO\cjot{   + 6 = D J R Y f s    % 2 ; E R _ j |   - 6 @ U [ ` f l t y }    $ . 8 B L V ` j t ~   ( 2 < F P Z d n x ",6@JT^hr|&0:DNXblv&0:DNXblv $,4<DLT[bipz (5=DNU]l{ %/7BLV`jr~'4<KS[cpy #+5=EMU]emu} #+3;CKS[cks{'/7?GOW_gow "-5=EMU]emu}!)2:BJS[ckt|&.7?GOW_gox"+4=FOXajs| %-5=EMU]emu} #+3;AIQYcjrx}char0spaceexclamquotedblnumbersigndollarpercentampersandquotesingleparenleftparenrightasteriskpluscommahyphenperiodslashzeroonetwothreefourfivesixseveneightninecolonsemicolonlessequalgreaterquestionatABCDEFGHIJKLMNOPQRSTUVWXYZbracketleftbackslashbracketrightasciicircumunderscoregraveabcdefghijklmnopqrstuvwxyzbraceleftbarbracerightasciitildespaceexclamdowncentsterlingcurrencyyenbrokenbarsectiondieresiscopyrightordfeminineguillemotleftlogicalnothyphenregisteredmacrondegreeplusminustwosuperiorthreesuperioracutemuparagraphperiodcenteredcedillaonesuperiorordmasculineguillemotrightonequarteronehalfthreequartersquestiondownAgraveAacuteAcircumflexAtildeAdieresisAringAECcedillaEgraveEacuteEcircumflexEdieresisIgraveIacuteIcircumflexIdieresisEthNtildeOgraveOacuteOcircumflexOtildeOdieresismultiplyOslashUgraveUacuteUcircumflexUdieresisYacuteThorngermandblsagraveaacuteacircumflexatildeadieresisaringaeccedillaegraveeacuteecircumflexedieresisigraveiacuteicircumflexidieresisethntildeograveoacuteocircumflexotildeodieresisdivideoslashugraveuacuteucircumflexudieresisyacutethornydieresisAmacronamacronAbreveabreveAogonekaogonekCacutecacuteCcircumflexccircumflexCdotaccentcdotaccentCcaronccaronDcarondcaronDcroatdcroatEmacronemacronEbreveebreveEdotaccentedotaccentEogonekeogonekEcaronecaronGcircumflexgcircumflexGbrevegbreveGdotaccentgdotaccentGcommaaccentgcommaaccentHcircumflexhcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIdotaccentdotlessiIJijJcircumflexjcircumflexKcommaaccentkcommaaccentkgreenlandicLacutelacuteLcommaaccentlcommaaccentLcaronlcaronLdotldotLslashlslashNacutenacuteNcommaaccentncommaaccentNcaronncaronnapostropheEngengOmacronomacronObreveobreveOhungarumlautohungarumlautOEoeRacuteracuteRcommaaccentrcommaaccentRcaronrcaronSacutesacuteScircumflexscircumflexScedillascedillaScaronscaronTcommaaccenttcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuringUhungarumlautuhungarumlautUogonekuogonekWcircumflexwcircumflexYcircumflexycircumflexYdieresisZacutezacuteZdotaccentzdotaccentZcaronzcaronlongsuni018FflorinScommaaccentscommaaccentTcommaaccenttcommaaccentuni0259circumflexcaronmacronbrevedotaccentringogonektildehungarumlautuni0374uni0375uni037Auni037EtonosdieresistonosAlphatonosanoteleiaEpsilontonosEtatonosIotatonosOmicrontonosUpsilontonosOmegatonosiotadieresistonosAlphaBetaGammaDeltaEpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiOmegaIotadieresisUpsilondieresisalphatonosepsilontonosetatonosiotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdamunuxiomicronpirhosigma1sigmatauupsilonphichipsiomegaiotadieresisupsilondieresisomicrontonosupsilontonosomegatonosafii10023afii10051afii10052afii10053afii10054afii10055afii10056afii10057afii10058afii10059afii10060afii10061afii10062afii10145afii10017afii10018afii10019afii10020afii10021afii10022afii10024afii10025afii10026afii10027afii10028afii10029afii10030afii10031afii10032afii10033afii10034afii10035afii10036afii10037afii10038afii10039afii10040afii10041afii10042afii10043afii10044afii10045afii10046afii10047afii10048afii10049afii10065afii10066afii10067afii10068afii10069afii10070afii10072afii10073afii10074afii10075afii10076afii10077afii10078afii10079afii10080afii10081afii10082afii10083afii10084afii10085afii10086afii10087afii10088afii10089afii10090afii10091afii10092afii10093afii10094afii10095afii10096afii10097afii10071afii10099afii10100afii10101afii10102afii10103afii10104afii10105afii10106afii10107afii10108afii10109afii10110afii10193afii10050afii10098uni0492uni0493afii57664afii57665afii57666afii57667afii57668afii57669afii57670afii57671afii57672afii57673afii57674afii57675afii57676afii57677afii57678afii57679afii57680afii57681afii57682afii57683afii57684afii57685afii57686afii57687afii57688afii57689afii57690uni1E02uni1E03uni1E0Auni1E0Buni1E1Euni1E1Funi1E40uni1E41uni1E56uni1E57uni1E60uni1E61uni1E6Auni1E6BWgravewgraveWacutewacuteWdieresiswdieresisYgraveygraveuni2010uni2011figuredashendashemdashafii00208uni2016underscoredblquoteleftquoterightquotesinglbasequotereversedquotedblleftquotedblrightquotedblbaseuni201Fdaggerdaggerdblbulletuni2023onedotenleadertwodotenleaderellipsisuni2027perthousandguilsinglleftguilsinglrightuni203EnsuperiorpesetaEuroafii61352trademarkOmegauni2127oneeighththreeeighthsfiveeighthsseveneighthsarrowleftarrowuparrowrightarrowdownarrowbotharrowupdnuniversaluni2201partialdiffexistentialuni2204emptysetDeltagradientelementnotelementuni220Asuchthatuni220Cuni220Duni220Eproductuni2210summationminusuni2213uni2214fractionuni2216asteriskmathuni2218periodcenteredradicaluni221Buni221Cproportionalinfinityorthogonalangleuni2221uni2222uni2223uni2224uni2225uni2226logicalandlogicalorintersectionunionintegraluni222Cuni222Duni222Euni222Funi2230uni2231uni2232uni2233thereforeuni2235uni2236uni2237uni2238uni2239uni223Auni223Bsimilaruni223Duni223Euni223Funi2240uni2241uni2242uni2243uni2244congruentuni2246uni2247approxequaluni2249uni224Auni224Buni224Cuni224Duni224Euni224Funi2250uni2251uni2252uni2253uni2254uni2255uni2256uni2257uni2258uni2259uni225Auni225Buni225Cuni225Duni225Euni225Fnotequalequivalenceuni2262uni2263lessequalgreaterequaluni2266uni2267uni2268uni2269uni226Auni226Buni226Cuni226Duni226Euni226Funi2270uni2271uni2272uni2273uni2276uni2277uni2278uni2279uni227Auni227Buni227Cuni227Duni227Euni227Funi2280uni2281propersubsetpropersupersetnotsubsetuni2285reflexsubsetreflexsupersetuni2288uni2289uni228Auni228Brevlogicalnotintegraltpintegralbtuni23BAuni23BBuni23BCuni23BDuni2409uni240Auni240Buni240Cuni240Duni2423uni2424SF100000uni2501SF110000uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250BSF010000uni250Duni250Euni250FSF030000uni2511uni2512uni2513SF020000uni2515uni2516uni2517SF040000uni2519uni251Auni251BSF080000uni251Duni251Euni251Funi2520uni2521uni2522uni2523SF090000uni2525uni2526uni2527uni2528uni2529uni252Auni252BSF060000uni252Duni252Euni252Funi2530uni2531uni2532uni2533SF070000uni2535uni2536uni2537uni2538uni2539uni253Auni253BSF050000uni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254FSF430000SF240000SF510000SF520000SF390000SF220000SF210000SF250000SF500000SF490000SF380000SF280000SF270000SF260000SF360000SF370000SF420000SF190000SF200000SF230000SF470000SF480000SF410000SF450000SF460000SF400000SF540000SF530000SF440000uni256Duni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Fupblockuni2581uni2582uni2583dnblockuni2585uni2586uni2587blockuni2589uni258Auni258Blfblockuni258Duni258Euni258Frtblockltshadeshadedkshadeuni2594uni2595filledboxH22073uni25C6spadeclubheartdiamonduni2669musicalnotemusicalnotedbluni266Cuni266Duni266Euni266FuniFFFDfontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/8x16.pcf000066400000000000000000000515101503113465200235530ustar00rootroot00000000000000fcp HdXD:XhB  F@|HHLdS ,2>EKM[bqr}xddPT [fozFONTNAME_REGISTRYFOUNDRYSonyFAMILY_NAMEFixedWEIGHT_NAMEMediumSLANTRSETWIDTH_NAMENormalADD_STYLE_NAMEPIXEL_SIZEPOINT_SIZERESOLUTION_XRESOLUTION_YSPACINGCAVERAGE_WIDTHCHARSET_REGISTRYISO8859CHARSET_ENCODING1COPYRIGHTCopyright (c) 1987, 1988 Sony Corp.FONT-Sony-Fixed-Medium-R-Normal--16-120-100-100-C-80-ISO8859-1WEIGHTRESOLUTIONX_HEIGHTQUAD_WIDTH@@@@@@@@@ @ @ @ @ @ @@@@@@@@@@@@@@@@@@ @ !@!!!"@"""#@###$@$$$%@%%%&@&&&'@'''(@((()@)))*@***+@+++,@,,,-@---.@.../@///0@0001@1112@2223@3334@4445@5556@6667 @7n>>>>II""II""II""II||<<DD<$D|<"""!#%%))1!| |@0  0@`$$$$"!@ 0H><J66$$HHH$$$$$*Ii (HKI)@F)))4LJJJ1  t**)1N@  @IkkI@@ $$BBBBBBBB$$>$BF@ DB~"AA@  @AA"<?#A@@CA"<Bb#AAAA"AA "AAA""AAA""AAAAb\@@A" @  @"AC@ <BAYeEEEeYB<"""">AAAc"BBB""BBBB?\bBABB<""BBBBBBB""BBBBBBBXdBAAABfXBBBB~BBBBBB@@@@@@@AAA"g"" ""BBBBAcUUUIIIAAAAcCEEEIIIQQQaC"AAAAAAAAA""BBBB"""AAAAAA]""`"BBB""""B,2! AAA#II>BBBBBBBBBBB<cAAAA""""cAAAIIIUUU"""w""""AccA""">!BBAxx @@"A <B@|BAAa"BBBBB"\bAAB<` <"!!!!!"|"AAB<p>"""!AA>:FBBBBBB``|@@@@@@AA"B"&"BB6IIIIIII;FBBBBBB"AAAAA""BBBB"|"!!!!"< x7LD?\bB<@AC=?DD8cBBBBBBbcAA"""IIIIUU"""w""wBD$( ~"DB``I0<JI IJ<0H><JB<$$<BAA""<B<BBB< @B<$$$<BB<8DxDdX|H$ $H``<BB<"""$ <$  $0 DDD""6*A_____^PPPPP0$$$$< $HH$ bLcPH@bl` iLcPH@8D8 """>AAAc""">AAAc"""">AAAc$""">AAAc""""">AAAc"""">AAAcr<BB< BBBBBBBB BBBB""BBBB """""BBBOBBB""$CEEIIIQQaC "AAAAAAA""AAAAAAA"""AAAAAAA"$"AAAAAAA""""AAAAAAA"B$$B@@<"aQQIIEEC" BBBBBBBBB<0BBBBBBBBB<$BBBBBBBBB<$$BBBBBBBBB<0cA"">"BBB""AAA!!AAAA9 <B@|BAAa<B@|BAAa$B<B@|BAAaL2<B@|BAAa$$<B@|BAAa$<B@|BAAa6IH| II6\bAAB< "AAB<"AAB<"A"AAB<"""A" $B$$&$<BAAAAAB<L2;FBBBBBB "AAAAA""AAAAA"""AAAAA"L2"AAAAA""""AAAAA"\"QQIEE" cBBBBBBbcBBBBBBb"cBBBBBBb$$cBBBBBBb0BD$( "BBBB"$$BD$( y{{ux{~{{ww~~z|vwu}v{}{uxzzvzz{~~   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ #(-27<AFKPUZ_dinsx}   "$&(*,.02468:<>@BDFHJLNPRTVXZ\afkpuz $).38=BGLQV[`ejoty~ #(-27C001C002C003C004C005C006C007C010C011C012C013C014C015C016C017C020C021C022C023C024C025C026C027C030C031C032C033C034C035C036C037C040!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~C241C242C243C244C245C246C247C250C251C252C253C254C255C256C257C260C261C262C263C264C265C266C267C270C271C272C273C274C275C276C277C300C301C302C303C304C305C306C307C310C311C312C313C314C315C316C317C320C321C322C323C324C325C326C327C330C331C332C333C334C335C336C337C340C341C342C343C344C345C346C347C350C351C352C353C353C354C355C356C357C360C361C362C363C364C365C366C367C370C371C372C373C374C375C376fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/Makefile.am000066400000000000000000000127521503113465200244140ustar00rootroot00000000000000# # test/Makefile.am # # Copyright © 2003 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. check_SCRIPTS=run-test.sh TEST_EXTENSIONS = \ .sh \ $(NULL) AM_TESTS_ENVIRONMENT= \ src=${srcdir}; export src; \ EXEEXT=${EXEEXT}; export EXEEXT; \ LOG_COMPILER=${LOG_COMPILER} ; export LOG_COMPILER; \ $(NULL) BUILT_SOURCES = $(builddir)/out.expected SH_LOG_COMPILER = sh if OS_WIN32 LOG_COMPILER = ${srcdir}/wrapper-script.sh endif TESTS=run-test.sh TESTDATA = \ 4x6.pcf \ 8x16.pcf \ fonts.conf.in \ test-45-generic.json \ test-60-generic.json \ test-70-no-bitmaps-and-emoji.json \ test-70-no-bitmaps-except-emoji.json \ test-90-synthetic.json \ test-filter.json \ test-issue-286.json \ test-style-match.json \ $(NULL) if FREETYPE_PCF_LONG_FAMILY_NAMES $(builddir)/out.expected: $(srcdir)/out.expected-long-family-names Makefile cp $(srcdir)/out.expected-long-family-names $(builddir)/out.expected else $(builddir)/out.expected: $(srcdir)/out.expected-no-long-family-names Makefile cp $(srcdir)/out.expected-no-long-family-names $(builddir)/out.expected endif AM_CPPFLAGS = -I$(top_srcdir) -I$(top_builddir) check_PROGRAMS = if HAVE_PTHREAD check_PROGRAMS += test-pthread test_pthread_LDADD = $(top_builddir)/src/libfontconfig.la # We don't enable this test by default because it will require config and fonts # to meaningfully test anything, and we are not installed yet. #TESTS += test-pthread check_PROGRAMS += test-crbug1004254 test_crbug1004254_LDADD = $(top_builddir)/src/libfontconfig.la # Disabling this for the same reason as above but trying to run in run-test.sh. #TESTS += test-crbug1004254 endif check_PROGRAMS += test-bz89617 test_bz89617_CFLAGS = \ -DSRCDIR="\"$(abs_srcdir)\"" test_bz89617_LDADD = $(top_builddir)/src/libfontconfig.la TESTS += test-bz89617 check_PROGRAMS += test-bz131804 test_bz131804_LDADD = $(top_builddir)/src/libfontconfig.la TESTS += test-bz131804 noinst_PROGRAMS = $(check_PROGRAMS) if !OS_WIN32 check_PROGRAMS += test-migration test_migration_LDADD = $(top_builddir)/src/libfontconfig.la endif check_PROGRAMS += test-bz96676 test_bz96676_LDADD = $(top_builddir)/src/libfontconfig.la TESTS += test-bz96676 check_PROGRAMS += test-name-parse test_name_parse_LDADD = $(top_builddir)/src/libfontconfig.la TESTS += test-name-parse if ENABLE_JSONC check_PROGRAMS += test-conf test_conf_CFLAGS = $(JSONC_CFLAGS) test_conf_LDADD = $(top_builddir)/src/libfontconfig.la $(JSONC_LIBS) endif TESTS += run-test-conf.sh check_PROGRAMS += test-bz106618 test_bz106618_LDADD = $(top_builddir)/src/libfontconfig.la if !OS_WIN32 check_PROGRAMS += test-bz106632 test_bz106632_CFLAGS = \ -I$(top_builddir) \ -I$(top_builddir)/src \ -I$(top_srcdir) \ -I$(top_srcdir)/src \ -DFONTFILE='"$(abs_top_srcdir)/test/4x6.pcf"' \ -DHAVE_CONFIG_H \ $(NULL) test_bz106632_LDADD = $(top_builddir)/src/libfontconfig.la TESTS += test-bz106632 endif check_PROGRAMS += test-issue107 test_issue107_LDADD = \ $(top_builddir)/src/libfontconfig.la \ $(NULL) TESTS += test-issue107 if !ENABLE_SHARED if !OS_WIN32 check_PROGRAMS += test-issue110 test_issue110_CFLAGS = \ -I$(top_builddir) \ -I$(top_builddir)/src \ -I$(top_srcdir) \ -I$(top_srcdir)/src \ -DHAVE_CONFIG_H \ -DFONTCONFIG_PATH='"$(BASECONFIGDIR)"' \ $(NULL) test_issue110_LDADD = \ $(top_builddir)/src/libfontconfig.la \ $(NULL) TESTS += test-issue110 check_PROGRAMS += test-d1f48f11 test_d1f48f11_CFLAGS = \ -I$(top_builddir) \ -I$(top_builddir)/src \ -I$(top_srcdir) \ -I$(top_srcdir)/src \ -DHAVE_CONFIG_H \ -DFONTCONFIG_PATH='"$(BASECONFIGDIR)"' \ $(NULL) test_d1f48f11_LDADD = \ $(top_builddir)/src/libfontconfig.la \ $(NULL) TESTS += test-d1f48f11 endif endif check_PROGRAMS += test-bz1744377 test_bz1744377_LDADD = $(top_builddir)/src/libfontconfig.la TESTS += test-bz1744377 check_PROGRAMS += test-issue180 test_issue180_LDADD = $(top_builddir)/src/libfontconfig.la TESTS += test-issue180 check_PROGRAMS += test-family-matching test_family_matching_LDADD = $(top_builddir)/src/libfontconfig.la TESTS += test-family-matching check_PROGRAMS += test-filter test_filter_LDADD = $(top_builddir)/src/libfontconfig.la EXTRA_DIST=run-test.sh run-test-conf.sh wrapper-script.sh $(TESTDATA) out.expected-long-family-names out.expected-no-long-family-names CLEANFILES = \ fonts.conf \ out \ out1 \ out2 \ out.expected \ run*.log \ run*.trs \ test*.log \ test*.trs \ $(NULL) -include $(top_srcdir)/git.mk fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/check-consist-nlang.c000066400000000000000000000075371503113465200263630ustar00rootroot00000000000000/* Copyright (C) 2025 fontconfig Authors */ /* SPDX-License-Identifier: HPND */ #include #include #include #include #include #include int check_consistency (char *file) { int ret, id = 0, nfaces = 0, i, err = 0; FcFontSet *fs; do { fs = FcFontSetCreate(); ret = FcFreeTypeQueryAll (file, id, NULL, &nfaces, fs); if (!ret) { break; } for (i = 0; i < fs->nfont; i++) { FcPattern *pat = fs->fonts[i]; FcPatternIter iter; int nobj, nlang; //fprintf (stderr, "Checking %s:%u[%d]\n", file, id, i); FcPatternIterStart (pat, &iter); /* check for family */ if (!FcPatternFindIter (pat, &iter, FC_FAMILY)) { fprintf (stderr, "No family in %s:%u\n", file, id); err++; break; } nobj = FcPatternIterValueCount (pat, &iter); if (!FcPatternFindIter (pat, &iter, FC_FAMILYLANG)) { fprintf (stderr, "No familylang in %s:%u\n", file, id); err++; break; } nlang = FcPatternIterValueCount (pat, &iter); if (nobj != nlang) { fprintf (stderr, "%s:%u: nfamily: %d nfamilylang: %d\n", file, id, nobj, nlang); err++; } /* check for style */ if (!FcPatternFindIter (pat, &iter, FC_STYLE)) { fprintf (stderr, "No style in %s:%u\n", file, id); err++; break; } nobj = FcPatternIterValueCount (pat, &iter); if (!FcPatternFindIter (pat, &iter, FC_STYLELANG)) { fprintf (stderr, "No stylelang in %s:%u\n", file, id); err++; break; } nlang = FcPatternIterValueCount (pat, &iter); if (nobj != nlang) { fprintf (stderr, "%s:%u: nstyle: %d nstylelang: %d\n", file, id, nobj, nlang); err++; } /* check for fullname */ if (!FcPatternFindIter (pat, &iter, FC_FULLNAME)) { fprintf (stderr, "No fullname in %s:%u\n", file, id); err++; break; } nobj = FcPatternIterValueCount (pat, &iter); if (!FcPatternFindIter (pat, &iter, FC_FULLNAMELANG)) { fprintf (stderr, "No fullnamelang in %s:%u\n", file, id); err++; break; } nlang = FcPatternIterValueCount (pat, &iter); if (nobj != nlang) { fprintf (stderr, "%s:%u: nfullname: %d nfullnamelang: %d\n", file, id, nobj, nlang); err++; } } id++; FcFontSetDestroy (fs); } while (id < nfaces); return err; } int scan (char *name) { int ret = 0; if (FcFileIsDir (name)) { DIR *d; struct dirent *e; char fullname[PATH_MAX]; size_t len = strlen (name); strcpy (fullname, name); fullname[len] = '/'; len++; d = opendir (name); if (!d) { fprintf (stderr, "Unable to open a directory: %s\n", name); } else { while ((e = readdir (d))) { if (e->d_name[0] == '.' && (e->d_name[1] == 0 || (e->d_name[1] == '.' && e->d_name[2] == 0))) continue; strcpy (&fullname[len], e->d_name); ret += scan (fullname); } } } else { ret += check_consistency (name); } return ret; } int main (int argc, char **argv) { int i, ret = 0; for (i = 1; i < argc; i++) { ret += scan (argv[i]); } return ret; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/fonts.conf.in000066400000000000000000000001331503113465200247530ustar00rootroot00000000000000 @REMAPDIR@ @FONTDIR@ @CACHEDIR@ fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/meson.build000066400000000000000000000072761503113465200245270ustar00rootroot00000000000000fetch_test_fonts = custom_target( 'fetch_test_fonts', output: 'testfonts', command: [ python3, join_paths(meson.project_source_root(), 'build-aux', 'fetch-testfonts.py'), '--target-dir', '@BUILD_ROOT@/testfonts', '--try-symlink', ], build_by_default: false, build_always_stale: true, ) tests = [ ['test-bz89617.c', {'c_args': ['-DSRCDIR="@0@"'.format(meson.current_source_dir())]}], ['test-bz131804.c'], ['test-bz96676.c'], ['test-name-parse.c'], ['test-bz106618.c'], ['test-bz1744377.c'], ['test-issue180.c'], ['test-family-matching.c'], ['test-ptrlist.c', {'include_directories': include_directories('../src'), 'dependencies': libintl_dep}], ] tests_not_parallel = [] if host_machine.system() != 'windows' tests += [ # FIXME: ['test-migration.c'], ['test-bz106632.c', {'c_args': ['-DFONTFILE="@0@"'.format(join_paths(meson.current_source_dir(), '4x6.pcf'))]}], ['test-issue107.c'], # FIXME: fails on mingw ] tests_not_parallel += [ # FIXME: this needs NotoSans-hinted.zip font downloaded and unpacked into test build directory! see run-test.sh ['test-crbug1004254.c', {'dependencies': dependency('threads')}], # for pthread ['test-mt-fccfg.c', {'include_directories': include_directories('../src'), 'dependencies': dependency('threads')}], ] if get_option('default_library') == 'static' tests += [ ['test-issue110.c'], ['test-d1f48f11.c'], ] endif endif link_with_libs = [libfontconfig_internal] if get_option('fontations').enabled() link_with_libs += [fc_fontations] endif foreach test_data : tests + tests_not_parallel fname = test_data[0] opts = test_data.length() > 1 ? test_data[1] : {} extra_c_args = opts.get('c_args', []) extra_deps = opts.get('dependencies', []) extra_incdir = opts.get('include_directories', []) test_name = fname.split('.')[0].underscorify() exe = executable(test_name, fname, fcstdint_h, fclang_h, c_args: c_args + extra_c_args, include_directories: [incbase] + extra_incdir, link_with: link_with_libs, dependencies: extra_deps, ) if test_data in tests test(test_name, exe, timeout: 600, is_parallel: true) else test(test_name, exe, timeout: 600, is_parallel: false) endif endforeach if get_option('fontations').enabled() rust = import('rust') rust.test('fc_fontations_rust_tests', fc_fontations, link_with: [libfontconfig_internal], depends: fetch_test_fonts, env: ['builddir=@0@'.format(meson.project_build_root())],) endif fs = import('fs') if host_machine.system() != 'windows' if conf.get('FREETYPE_PCF_LONG_FAMILY_NAMES') out_expected = fs.copyfile('out.expected-long-family-names', 'out.expected') else out_expected = fs.copyfile('out.expected-no-long-family-names', 'out.expected') endif test('run_test_sh', find_program('run-test.sh'), timeout: 600, env: ['srcdir=@0@'.format(meson.current_source_dir()), 'builddir=@0@'.format(meson.current_build_dir()), 'EXEEXT=@0@'.format(conf.get('EXEEXT')), 'VERBOSE=1']) if pytest.found() test('pytest', pytest, args: ['--tap'], workdir: meson.current_source_dir(), env: ['builddir=@0@'.format(meson.project_build_root())], protocol: 'tap', timeout: 600, depends: fetch_test_fonts) endif endif if jsonc_dep.found() test_conf = executable('test-conf', 'test-conf.c', dependencies: [fontconfig_dep, jsonc_dep]) test('run_test_conf_sh', find_program('run-test-conf.sh'), timeout: 120, env: [ 'srcdir=@0@'.format(meson.current_source_dir()), 'builddir=@0@'.format(meson.current_build_dir()) ], depends: test_conf) endif fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/out.expected-long-family-names000066400000000000000000000002211503113465200302130ustar00rootroot00000000000000Misc Fixed:pixelsize=6 Sony Fixed:pixelsize=16 = Misc Fixed:pixelsize=6 Sony Fixed:pixelsize=16 = Misc Fixed:pixelsize=6 Sony Fixed:pixelsize=16 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/out.expected-no-long-family-names000066400000000000000000000001631503113465200306320ustar00rootroot00000000000000Fixed:pixelsize=16 Fixed:pixelsize=6 = Fixed:pixelsize=16 Fixed:pixelsize=6 = Fixed:pixelsize=16 Fixed:pixelsize=6 fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/run-test-conf.sh000066400000000000000000000042421503113465200254130ustar00rootroot00000000000000#!/bin/sh # test/run-test-conf.sh # # Copyright © 2000 Keith Packard # Copyright © 2018 Akira TAGOH # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. set -e case "$OSTYPE" in msys ) MyPWD=`pwd -W` ;; # On Msys/MinGW, returns a MS Windows style path. * ) MyPWD=`pwd` ;; # On any other platforms, returns a Unix style path. esac TESTDIR=${srcdir-"$MyPWD"} BUILDTESTDIR=${builddir-"$MyPWD"} RUNNER=$BUILDTESTDIR/test-conf$EXEEXT if [ ! -f ${RUNNER} ]; then echo "${RUNNER} not found!\n" echo "Building this test requires libjson-c development files to be available." exit 77 # SKIP fi for i in \ 45-generic.conf \ 48-guessfamily.conf \ 60-generic.conf \ 70-no-bitmaps-and-emoji.conf \ 70-no-bitmaps-except-emoji.conf \ 90-synthetic.conf \ ; do test_json=$(echo test-$i|sed s'/\.conf/.json/') echo $RUNNER $TESTDIR/../conf.d/$i $TESTDIR/$test_json $RUNNER $TESTDIR/../conf.d/$i $TESTDIR/$test_json done for i in \ test-issue-286.json \ test-style-match.json \ test-filter.json \ test-appfont.json \ ; do echo $RUNNER $TESTDIR/$i ... $RUNNER $TESTDIR/../conf.d/10-autohint.conf $TESTDIR/$i done fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/run-test-map.sh000077500000000000000000000061271503113465200252520ustar00rootroot00000000000000#!/bin/bash # fontconfig/test/run-test-cache-map.sh # # Copyright © 2018 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that copyright # notice and this permission notice appear in supporting documentation, and # that the name of the copyright holders not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. The copyright holders make no representations # about the suitability of this software for any purpose. It is provided "as # is" without express or implied warranty. # # THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE # OF THIS SOFTWARE. # case "$OSTYPE" in msys ) MyPWD=`pwd -W` ;; # On Msys/MinGW, returns a MS Windows style path. * ) MyPWD=`pwd` ;; # On any other platforms, returns a Unix style path. esac TESTDIR=${srcdir-"$MyPWD"} BUILDTESTDIR=${builddir-"$MyPWD"} FONTDIRA="$MyPWD"/fontsa FONTDIRB="$MyPWD"/fontsb CACHEDIR="$MyPWD"/cache.dir EXPECTEDIN=${EXPECTEDIN-"out-map.expected.in"} EXPECTEDA="out-map-a.expected" EXPECTEDB="out-map-b.expected" EXPECTED="out-map.expected" FCLIST=../fc-list/fc-list$EXEEXT FCCACHE=../fc-cache/fc-cache$EXEEXT which bwrap > /dev/null 2>&1 if [ $? -eq 0 ]; then BWRAP=`which bwrap` fi FONT1=$TESTDIR/4x6.pcf FONT2=$TESTDIR/8x16.pcf check () { $FCLIST - file family pixelsize | sort > out echo "=" >> out $FCLIST - file family pixelsize | sort >> out echo "=" >> out $FCLIST - file family pixelsize | sort >> out tr -d '\015' out.tmp; mv out.tmp out if cmp out $BUILDTESTDIR/$EXPECTED > /dev/null ; then : ; else echo "*** Test failed: $TEST" echo "*** output is in 'out', expected output in '$EXPECTED'" exit 1 fi rm -f out } prep() { rm -rf $CACHEDIR rm -rf $FONTDIRA $FONTDIRB mkdir $FONTDIRA mkdir $CACHEDIR } dotest () { TEST=$1 test x$VERBOSE = x || echo Running: $TEST } sed "s!@FONTDIR@!$FONTDIRA! s!@MAP@!! s!@CACHEDIR@!$CACHEDIR!" < $TESTDIR/fonts.conf.in > fonts-a.conf sed "s!@FONTDIR@!$FONTDIRB! s!@MAP@!map="'"'"$FONTDIRA"'"'"! s!@CACHEDIR@!$CACHEDIR!" < $TESTDIR/fonts.conf.in > fonts-b.conf sed "s!@FONTDIR@!$FONTDIRA!" < $EXPECTEDIN > $EXPECTEDA sed "s!@FONTDIR@!$FONTDIRB!" < $EXPECTEDIN > $EXPECTEDB FONTCONFIG_FILE="$MyPWD"/fonts-a.conf export FONTCONFIG_FILE dotest "Basic check" prep cp $FONT1 $FONT2 $FONTDIRA cp $EXPECTEDA $EXPECTED $FCCACHE $FONTDIRA check dotest "mapped check" prep cp $FONT1 $FONT2 $FONTDIRA cp $EXPECTEDB $EXPECTED $FCCACHE $FONTDIRA mv $FONTDIRA $FONTDIRB export FONTCONFIG_FILE="$MyPWD"/fonts-b.conf check fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/run-test.d/000077500000000000000000000000001503113465200243545ustar00rootroot00000000000000fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/run-test.d/functions000066400000000000000000000022551503113465200263130ustar00rootroot00000000000000#! /bin/sh # -*- sh -*- # Copyright (C) 2023 fontconfig Authors # SPDX-License-Identifier: MIT set -e : "${TMPDIR=/tmp}" case "$OSTYPE" in msys ) MyPWD=$(pwd -W) ;; # On Msys/MinGW, returns a MS Windows style path. * ) MyPWD=$(pwd) ;; # On any other platforms, returns a Unix style path. esac TESTDIR=${srcdir-"$MyPWD"} BUILDTESTDIR=${builddir-"$MyPWD"} BASEDIR=$(mktemp -d "$TMPDIR"/fontconfig.XXXXXXXX) FONTDIR="$BASEDIR"/fonts CACHEDIR="$BASEDIR"/cache.dir EXPECTED=${EXPECTED-"out.expected"} FCLIST="$LOG_COMPILER ../../fc-list/fc-list$EXEEXT" FCCACHE="$LOG_COMPILER ../../fc-cache/fc-cache$EXEEXT" FCMATCH="$LOG_COMPILER ../../fc-match/fc-match$EXEEXT" if [ -x "$(command -v bwrap)" ]; then BWRAP="$(command -v bwrap)" fi FONT1=$TESTDIR/../4x6.pcf FONT2=$TESTDIR/../8x16.pcf TEST="" clean_exit() { rc=$? trap - INT TERM ABRT EXIT if [ "x$TEST" != "x" ]; then echo "Aborting from '$TEST' with the exit code $rc" fi rm -rf $BASEDIR exit $rc } trap clean_exit INT TERM ABRT EXIT prep() { rm -rf "$CACHEDIR" rm -rf "$FONTDIR" mkdir "$FONTDIR" } dotest () { TEST=$1 test x"$VERBOSE" = x || echo "Running: $TEST" } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/run-test.d/remap-flatpak.sh000066400000000000000000000115201503113465200274330ustar00rootroot00000000000000#! /bin/sh # -*- sh -*- # Copyright (C) 2023 fontconfig Authors # SPDX-License-Identifier: MIT . $(dirname $0)/functions dotest "Remap - same family name but different filename" prep TESTRESULT1=$(mktemp "$TMPDIR"/fontconfig.XXXXXXXX) TESTRESULT2=$(mktemp "$TMPDIR"/fontconfig.XXXXXXXX) TESTRESULT3=$(mktemp "$TMPDIR"/fontconfig.XXXXXXXX) TESTFONT1DIR=$(mktemp -d "$TMPDIR"/fontconfig.XXXXXXXX) TESTFONT2DIR=$(mktemp -d "$TMPDIR"/fontconfig.XXXXXXXX) TESTCACHE1DIR=$(mktemp -d "$TMPDIR"/fontconfig.XXXXXXXX) TESTCACHE2DIR=$(mktemp -d "$TMPDIR"/fontconfig.XXXXXXXX) TESTBUILD1DIR=$(mktemp -d "$TMPDIR"/fontconfig.XXXXXXXX) TESTBUILD2DIR=$(mktemp -d "$TMPDIR"/fontconfig.XXXXXXXX) TESTRUNDIR=$(mktemp -d "$TMPDIR"/fontconfig.XXXXXXXX) mkdir -p "$TESTBUILD1DIR"/build mkdir -p "$TESTBUILD2DIR"/build mkdir -p "$TESTRUNDIR"/fonts mkdir -p "$TESTRUNDIR"/fonts-cache cp "$FONT1" "$TESTFONT1DIR"/foo.pcf cp "$FONT1" "$TESTFONT2DIR"/bar.pcf touch -m -t $(date -d @0 +%y%m%d%H%M.%S) "$TESTFONT1DIR" touch -m -t $(date -d @0 +%y%m%d%H%M.%S) "$TESTFONT1DIR"/* touch -m -t $(date -d @0 +%y%m%d%H%M.%S) "$TESTFONT2DIR" touch -m -t $(date -d @0 +%y%m%d%H%M.%S) "$TESTFONT2DIR"/* cat<<_EOF_>>"$TESTBUILD1DIR"/fonts.conf /usr/share/fonts /usr/lib/fontconfig/cache _EOF_ cat<<_EOF_>>"$TESTBUILD2DIR"/fonts.conf /usr/share/fonts /usr/lib/fontconfig/cache _EOF_ cat<<_EOF_>>"$TESTBUILD2DIR"/bind-fonts.conf /usr/share/fonts $TESTRUNDIR/fonts /usr/lib/fontconfig/cache $TESTRUNDIR/fonts-cache $TESTRUNDIR/fonts _EOF_ # Generate host caches $BWRAP --bind / / --bind "$TESTCACHE1DIR" /usr/lib/fontconfig/cache --bind "$TESTFONT1DIR" /usr/share/fonts --bind "$TESTBUILD1DIR" /usr/share/fontconfig --dev-bind /dev /dev --setenv FONTCONFIG_FILE "$TESTBUILD1DIR"/fonts.conf $FCCACHE touch -m -t $(date -d @0 +%y%m%d%H%M.%S) "$TESTCACHE1DIR" touch -m -t $(date -d @0 +%y%m%d%H%M.%S) "$TESTCACHE1DIR"/* $BWRAP --bind / / --bind "$TESTCACHE1DIR" /usr/lib/fontconfig/cache --bind "$TESTFONT1DIR" /usr/share/fonts --bind "$TESTBUILD1DIR" /usr/share/fontconfig --dev-bind /dev /dev --setenv FONTCONFIG_FILE "$TESTBUILD1DIR"/fonts.conf $FCMATCH Fixed file > "$TESTRESULT1" if grep foo.pcf "$TESTRESULT1" > /dev/null; then : ; else echo "*** Test failed: $TEST" echo "file property doesn't point to the expected file." cat "$TESTRESULT1" exit 1 fi # Generate runtime caches $BWRAP --bind / / --bind "$TESTCACHE2DIR" /usr/lib/fontconfig/cache --bind "$TESTFONT2DIR" /usr/share/fonts --bind "$TESTBUILD2DIR" /usr/share/fontconfig --dev-bind /dev /dev --setenv FONTCONFIG_FILE "$TESTBUILD2DIR"/fonts.conf $FCCACHE touch -m -t $(date -d @0 +%y%m%d%H%M.%S) "$TESTCACHE2DIR" touch -m -t $(date -d @0 +%y%m%d%H%M.%S) "$TESTCACHE2DIR"/* $BWRAP --bind / / --bind "$TESTCACHE2DIR" /usr/lib/fontconfig/cache --bind "$TESTFONT2DIR" /usr/share/fonts --bind "$TESTBUILD2DIR" /usr/share/fontconfig --dev-bind /dev /dev --setenv FONTCONFIG_FILE "$TESTBUILD2DIR"/fonts.conf $FCMATCH Fixed file > "$TESTRESULT2" if grep bar.pcf "$TESTRESULT2" > /dev/null; then : ; else echo "*** Test failed: $TEST" echo "file property doesn't point to the expected file." cat "$TESTRESULT2" exit 1 fi # Ask for fonts on similar environemnt to flatpak $BWRAP --bind / / --ro-bind "$TESTCACHE2DIR" /usr/lib/fontconfig/cache --ro-bind "$TESTFONT2DIR" /usr/share/fonts --bind "$TESTBUILD2DIR" /usr/share/fontconfig --ro-bind "$TESTRUNDIR" "$TESTRUNDIR" --ro-bind "$TESTCACHE1DIR" "$TESTRUNDIR"/fonts-cache --ro-bind "$TESTFONT1DIR" "$TESTRUNDIR"/fonts --dev-bind /dev /dev --setenv FONTCONFIG_FILE "$TESTBUILD2DIR"/bind-fonts.conf $FCMATCH Fixed file > "$TESTRESULT3" $BWRAP --bind / / --ro-bind "$TESTCACHE2DIR" /usr/lib/fontconfig/cache --ro-bind "$TESTFONT2DIR" /usr/share/fonts --bind "$TESTBUILD2DIR" /usr/share/fontconfig --ro-bind "$TESTRUNDIR" "$TESTRUNDIR" --ro-bind "$TESTCACHE1DIR" "$TESTRUNDIR"/fonts-cache --ro-bind "$TESTFONT1DIR" "$TESTRUNDIR"/fonts --dev-bind /dev /dev --setenv FONTCONFIG_FILE "$TESTBUILD2DIR"/bind-fonts.conf ls $(sed 's/:file=//' "$TESTRESULT3") > /dev/null # Check the amount of cache files if [ $(ls "$TESTCACHE1DIR"|wc -l) == 2 ]; then : ; else echo "*** Test failed: $TEST" echo "Too much cache files created at host cache dir." ls "$TESTCACHE1DIR" exit 1 fi if [ $(ls "$TESTCACHE2DIR"|wc -l) == 2 ]; then : ; else echo "*** Test failed: $TEST" echo "Too much cache files created at runtime cache dir." ls "$TESTCACHE2DIR" exit 1 fi rm -rf "$TESTFONT1DIR" "$TESTFONT2DIR" "$TESTCACHE1DIR" "$TESTCACHE2DIR" "$TESTBUILD1DIR" "$TESTBUILD2DIR" rm -f "$TESTRESULT1" "$TESTRESULT2" TEST="" echo "Success." fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/run-test.sh000066400000000000000000000511451503113465200244740ustar00rootroot00000000000000#!/bin/bash # fontconfig/test/run-test.sh # # Copyright © 2000 Keith Packard # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of the author(s) not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. The authors make no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. set -e : "${TMPDIR=/tmp}" case "$OSTYPE" in msys ) MyPWD=$(pwd -W) ;; # On Msys/MinGW, returns a MS Windows style path. * ) MyPWD=$(pwd) ;; # On any other platforms, returns a Unix style path. esac normpath() { printf "%s" "$1" | sed -E 's,/+,/,g' } TESTDIR=${srcdir-"$MyPWD"} BUILDTESTDIR=${builddir-"$MyPWD"} BASEDIR=$(mktemp -d "$TMPDIR"/fontconfig.XXXXXXXX) FONTDIR=$(normpath "$BASEDIR"/fonts) CACHEDIR=$(normpath "$BASEDIR"/cache.dir) EXPECTED=${EXPECTED-"out.expected"} FCLIST="$LOG_COMPILER $BUILDTESTDIR/../fc-list/fc-list$EXEEXT" FCCACHE="$LOG_COMPILER $BUILDTESTDIR/../fc-cache/fc-cache$EXEEXT" if [ -x "$(command -v bwrap)" ]; then BWRAP="$(command -v bwrap)" fi if [ -x "$(command -v md5sum)" ]; then MD5SUM="$(command -v md5sum)" elif [ -x "$(command -v md5)" ]; then MD5SUM="$(command -v md5)" else echo "E: No md5sum or equivalent command" exit 1 fi FONT1=$(normpath $TESTDIR/4x6.pcf) FONT2=$(normpath $TESTDIR/8x16.pcf) TEST="" export TZ=UTC fdate() { sdate=$1 ret=0 date -d @0 > /dev/null 2>&1 || ret=$? if [ $ret -eq 0 ]; then ret=$(date -u -d @${sdate} +%y%m%d%H%M.%S) else ret=$(date -u -j -f "%s" +%y%m%d%H%M.%S $sdate) fi echo $ret } fstat() { fmt=$1 fn=$2 ret=0 stat -c %Y "$fn" > /dev/null 2>&1 || ret=$? if [ $ret -eq 0 ]; then # GNU ret=$(stat -c "$fmt" "$fn") else # BSD if [ "x$fmt" == "x%Y" ]; then ret=$(stat -f "%m" "$fn") elif [ "x$fmt" == "x%y" ]; then ret=$(stat -f "%Sm" -t "%F %T %z" "$fn") elif [ "x$fmt" == "x%n %s %y %z" ]; then ret=$(stat -f "%SN %z %Sm %Sc" -t "%F %T %z" "$fn") else echo "E: Unknown format" exit 1 fi fi echo $ret } clean_exit() { rc=$? trap - INT TERM ABRT EXIT if [ "x$TEST" != "x" ]; then echo "Aborting from '$TEST' with the exit code $rc" fi exit $rc } trap clean_exit INT TERM ABRT EXIT check () { { $FCLIST - family pixelsize | sort; echo "="; $FCLIST - family pixelsize | sort; echo "="; $FCLIST - family pixelsize | sort; } > "$BUILDTESTDIR"/out tr -d '\015' <"$BUILDTESTDIR"/out >"$BUILDTESTDIR"/out.tmp; mv "$BUILDTESTDIR"/out.tmp "$BUILDTESTDIR"/out if cmp "$BUILDTESTDIR"/out "$BUILDTESTDIR"/"$EXPECTED" > /dev/null ; then : ; else echo "*** Test failed: $TEST" echo "*** output is in 'out', expected output in '$EXPECTED'" exit 1 fi rm -f "$BUILDTESTDIR"/out } prep() { rm -rf "$CACHEDIR" rm -rf "$FONTDIR" mkdir "$FONTDIR" } dotest () { TEST=$1 test x"$VERBOSE" = x || echo "Running: $TEST" } sed "s!@FONTDIR@!$FONTDIR! s!@REMAPDIR@!! s!@CACHEDIR@!$CACHEDIR!" < "$TESTDIR"/fonts.conf.in > "$BUILDTESTDIR"/fonts.conf FONTCONFIG_FILE="$BUILDTESTDIR"/fonts.conf export FONTCONFIG_FILE dotest "Basic check" prep cp "$FONT1" "$FONT2" "$FONTDIR" if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then touch -m -t "$(fdate ${SOURCE_DATE_EPOCH})" "$FONTDIR" fi check dotest "With a subdir" prep cp "$FONT1" "$FONT2" "$FONTDIR" if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then touch -m -t "$(fdate ${SOURCE_DATE_EPOCH})" "$FONTDIR" fi $FCCACHE "$FONTDIR" check dotest "Subdir with a cache file" prep mkdir "$FONTDIR"/a cp "$FONT1" "$FONT2" "$FONTDIR"/a if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then touch -m -t "$(fdate ${SOURCE_DATE_EPOCH})" "$FONTDIR"/a fi $FCCACHE "$FONTDIR"/a check dotest "with a dotfile" prep FONT3=$(basename $FONT1) FONT4=$(basename $FONT2) cp "$FONT1" "$FONTDIR"/."$FONT3" cp "$FONT2" "$FONTDIR"/."$FONT4" if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then touch -m -t "$(fdate ${SOURCE_DATE_EPOCH})" "$FONTDIR" fi $FCCACHE "$FONTDIR" check dotest "with a dotdir" prep mkdir "$FONTDIR"/.a cp "$FONT1" "$FONT2" "$FONTDIR"/.a if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then touch -m -t "$(fdate ${SOURCE_DATE_EPOCH})" "$FONTDIR" fi $FCCACHE "$FONTDIR" check dotest "Complicated directory structure" prep mkdir "$FONTDIR"/a mkdir "$FONTDIR"/a/a mkdir "$FONTDIR"/b mkdir "$FONTDIR"/b/a cp "$FONT1" "$FONTDIR"/a if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then touch -m -t "$(fdate ${SOURCE_DATE_EPOCH})" "$FONTDIR"/a fi cp "$FONT2" "$FONTDIR"/b/a if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then touch -m -t "$(fdate ${SOURCE_DATE_EPOCH})" "$FONTDIR"/b/a fi check dotest "Subdir with an out-of-date cache file" prep mkdir "$FONTDIR"/a $FCCACHE "$FONTDIR"/a sleep 1 cp "$FONT1" "$FONT2" "$FONTDIR"/a check dotest "Dir with an out-of-date cache file" prep cp "$FONT1" "$FONTDIR" $FCCACHE "$FONTDIR" sleep 1 mkdir "$FONTDIR"/a cp "$FONT2" "$FONTDIR"/a check dotest "Keep mtime of the font directory" prep cp "$FONT1" "$FONTDIR" touch -t $(fdate 0) "$FONTDIR" fstat "%y" "$FONTDIR" > "$BUILDTESTDIR"/out1 $FCCACHE -v "$FONTDIR" fstat "%y" "$FONTDIR" > "$BUILDTESTDIR"/out2 if cmp "$BUILDTESTDIR"/out1 "$BUILDTESTDIR"/out2 > /dev/null ; then : ; else echo "*** Test failed: $TEST" echo "mtime was modified" exit 1 fi if [ x"$BWRAP" != "x" ] && [ "x$EXEEXT" = "x" ]; then dotest "Basic functionality with the bind-mounted cache dir" prep cp "$FONT1" "$FONT2" "$FONTDIR" if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then touch -m -t "$(fdate ${SOURCE_DATE_EPOCH})" "$FONTDIR" fi $FCCACHE "$FONTDIR" sleep 1 ls -l "$CACHEDIR" > "$BUILDTESTDIR"/out1 TESTTMPDIR=$(mktemp -d "$TMPDIR"/fontconfig.XXXXXXXX) # Once font dir is remapped, we could use $FONTDIR as different one in theory. # but we don't use it here and to avoid duplicate entries, set the non-existing # directory here. sed "s!@FONTDIR@!$FONTDIR/a! s!@REMAPDIR@!$TESTTMPDIR/fonts! s!@CACHEDIR@!$TESTTMPDIR/cache.dir!" < "$TESTDIR"/fonts.conf.in > "$BUILDTESTDIR"/bind-fonts.conf $BWRAP --bind / / --bind "$CACHEDIR" "$TESTTMPDIR"/cache.dir --bind "$FONTDIR" "$TESTTMPDIR"/fonts --bind "$BUILDTESTDIR"/.. "$TESTTMPDIR"/build --dev-bind /dev /dev --setenv FONTCONFIG_FILE "$TESTTMPDIR"/build/test/bind-fonts.conf "$TESTTMPDIR"/build/fc-match/fc-match"$EXEEXT" -f "%{file}\n" ":foundry=Misc" > "$BUILDTESTDIR"/xxx if test -x "$BUILDTESTDIR"/test-bz106618"$EXEEXT"; then TESTEXE=test-bz106618"$EXEEXT" elif test -x "$BUILDTESTDIR"/test_bz106618"$EXEEXT"; then TESTEXE=test_bz106618"$EXEEXT" else echo "*** Test failed: no test case for bz106618" exit 1 fi $BWRAP --bind / / --bind "$CACHEDIR" "$TESTTMPDIR"/cache.dir --bind "$FONTDIR" "$TESTTMPDIR"/fonts --bind "$BUILDTESTDIR"/.. "$TESTTMPDIR"/build --dev-bind /dev /dev --setenv FONTCONFIG_FILE "$TESTTMPDIR"/build/test/bind-fonts.conf "$TESTTMPDIR"/build/test/"$TESTEXE" | sort > "$BUILDTESTDIR"/flist1 $BWRAP --bind / / --bind "$CACHEDIR" "$TESTTMPDIR"/cache.dir --bind "$FONTDIR" "$TESTTMPDIR"/fonts --bind "$BUILDTESTDIR"/.. "$TESTTMPDIR"/build --dev-bind /dev /dev find "$TESTTMPDIR"/fonts/ -type f -name '*.pcf' | sort > "$BUILDTESTDIR"/flist2 ls -l "$CACHEDIR" > "$BUILDTESTDIR"/out2 if cmp "$BUILDTESTDIR"/out1 "$BUILDTESTDIR"/out2 > /dev/null ; then : ; else echo "*** Test failed: $TEST" echo "cache was created/updated." echo "Before:" cat "$BUILDTESTDIR"/out1 echo "After:" cat "$BUILDTESTDIR"/out2 exit 1 fi if [ x"$(cat $BUILDTESTDIR/xxx)" != "x$TESTTMPDIR/fonts/4x6.pcf" ]; then echo "*** Test failed: $TEST" echo "file property doesn't point to the new place: $TESTTMPDIR/fonts/4x6.pcf" exit 1 fi if cmp "$BUILDTESTDIR"/flist1 "$BUILDTESTDIR"/flist2 > /dev/null ; then : ; else echo "*** Test failed: $TEST" echo "file properties doesn't point to the new places" echo "Expected result:" cat "$BUILDTESTDIR"/flist2 echo "Actual result:" cat "$BUILDTESTDIR"/flist1 exit 1 fi rm -rf "$TESTTMPDIR" "$BUILDTESTDIR"/out1 "$BUILDTESTDIR"/out2 "$BUILDTESTDIR"/xxx "$BUILDTESTDIR"/flist1 "$BUILDTESTDIR"/flist2 "$BUILDTESTDIR"/bind-fonts.conf dotest "Different directory content between host and sandbox" prep cp "$FONT1" "$FONTDIR" if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then touch -m -t "$(fdate ${SOURCE_DATE_EPOCH})" "$FONTDIR" fi $FCCACHE "$FONTDIR" sleep 1 ls -1 --color=no "$CACHEDIR"/*cache*> "$BUILDTESTDIR"/out1 fstat "%n %s %y %z" "$(cat $BUILDTESTDIR/out1)" > "$BUILDTESTDIR"/stat1 TESTTMPDIR=$(mktemp -d "$TMPDIR"/fontconfig.XXXXXXXX) TESTTMP2DIR=$(mktemp -d "$TMPDIR"/fontconfig.XXXXXXXX) cp "$FONT2" "$TESTTMP2DIR" if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then touch -m -t "$(fdate ${SOURCE_DATE_EPOCH})" "$TESTTMP2DIR" fi sed "s!@FONTDIR@!$TESTTMPDIR/fonts
$FONTDIR! s!@REMAPDIR@!$TESTTMPDIR/fonts! s!@CACHEDIR@!$TESTTMPDIR/cache.dir!" < "$TESTDIR"/fonts.conf.in > "$BUILDTESTDIR"/bind-fonts.conf $BWRAP --bind / / --bind "$CACHEDIR" "$TESTTMPDIR"/cache.dir --bind "$FONTDIR" "$TESTTMPDIR"/fonts --bind "$TESTTMP2DIR" "$FONTDIR" --bind "$BUILDTESTDIR"/.. "$TESTTMPDIR"/build --dev-bind /dev /dev --setenv FONTCONFIG_FILE "$TESTTMPDIR"/build/test/bind-fonts.conf "$TESTTMPDIR"/build/fc-match/fc-match"$EXEEXT" -f "%{file}\n" ":foundry=Misc" > "$BUILDTESTDIR"/xxx if test -x "$BUILDTESTDIR"/test-bz106618"$EXEEXT"; then TESTEXE=test-bz106618"$EXEEXT" elif test -x "$BUILDTESTDIR"/test_bz106618"$EXEEXT"; then TESTEXE=test_bz106618"$EXEEXT" else echo "*** Test failed: no test case for bz106618" exit 1 fi $BWRAP --bind / / --bind "$CACHEDIR" "$TESTTMPDIR"/cache.dir --bind "$FONTDIR" "$TESTTMPDIR"/fonts --bind "$TESTTMP2DIR" "$FONTDIR" --bind "$BUILDTESTDIR"/.. "$TESTTMPDIR"/build --dev-bind /dev /dev --setenv FONTCONFIG_FILE "$TESTTMPDIR"/build/test/bind-fonts.conf "$TESTTMPDIR"/build/test/"$TESTEXE" | sort > "$BUILDTESTDIR"/flist1 $BWRAP --bind / / --bind "$CACHEDIR" "$TESTTMPDIR"/cache.dir --bind "$FONTDIR" "$TESTTMPDIR"/fonts --bind "$TESTTMP2DIR" "$FONTDIR" --bind "$BUILDTESTDIR"/.. "$TESTTMPDIR"/build --dev-bind /dev /dev find "$TESTTMPDIR"/fonts/ -type f -name '*.pcf' | sort > "$BUILDTESTDIR"/flist2 ls -1 --color=no "$CACHEDIR"/*cache* > "$BUILDTESTDIR"/out2 fstat "%n %s %y %z" "$(cat $BUILDTESTDIR/out1)" > "$BUILDTESTDIR"/stat2 if cmp "$BUILDTESTDIR"/stat1 "$BUILDTESTDIR"/stat2 > /dev/null ; then : ; else echo "*** Test failed: $TEST" echo "cache was created/updated." cat "$BUILDTESTDIR"/stat1 "$BUILDTESTDIR"/stat2 exit 1 fi if grep -v -- "$(cat $BUILDTESTDIR/out1)" "$BUILDTESTDIR"/out2 > /dev/null ; then : ; else echo "*** Test failed: $TEST" echo "cache wasn't created for dir inside sandbox." cat "$BUILDTESTDIR"/out1 "$BUILDTESTDIR"/out2 exit 1 fi if [ x"$(cat $BUILDTESTDIR/xxx)" != "x$TESTTMPDIR/fonts/4x6.pcf" ]; then echo "*** Test failed: $TEST" echo "file property doesn't point to the new place: $TESTTMPDIR/fonts/4x6.pcf" exit 1 fi if cmp "$BUILDTESTDIR"/flist1 "$BUILDTESTDIR"/flist2 > /dev/null ; then echo "*** Test failed: $TEST" echo "Missing fonts should be available on sandbox" echo "Expected result:" cat "$BUILDTESTDIR"/flist2 echo "Actual result:" cat "$BUILDTESTDIR"/flist1 exit 1 fi rm -rf "$TESTTMPDIR" "$TESTTMP2DIR" "$BUILDTESTDIR"/out1 "$BUILDTESTDIR"/out2 "$BUILDTESTDIR"/xxx "$BUILDTESTDIR"/flist1 "$BUILDTESTDIR"/flist2 "$BUILDTESTDIR"/stat1 "$BUILDTESTDIR"/stat2 "$BUILDTESTDIR"/bind-fonts.conf dotest "Check consistency of MD5 in cache name" prep mkdir -p "$FONTDIR"/sub cp "$FONT1" "$FONTDIR"/sub if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then touch -m -t "$(fdate ${SOURCE_DATE_EPOCH})" "$FONTDIR"/sub fi $FCCACHE "$FONTDIR" sleep 1 (cd "$CACHEDIR"; ls -1 --color=no ./*cache*) > "$BUILDTESTDIR"/out1 TESTTMPDIR=$(mktemp -d "$TMPDIR"/fontconfig.XXXXXXXX) mkdir -p "$TESTTMPDIR"/cache.dir # Once font dir is remapped, we could use $FONTDIR as different one in theory. # but we don't use it here and to avoid duplicate entries, set the non-existing # directory here. sed "s!@FONTDIR@!$FONTDIR/a! s!@REMAPDIR@!$TESTTMPDIR/fonts! s!@CACHEDIR@!$TESTTMPDIR/cache.dir!" < "$TESTDIR"/fonts.conf.in > "$BUILDTESTDIR"/bind-fonts.conf $BWRAP --bind / / --bind "$FONTDIR" "$TESTTMPDIR"/fonts --bind "$BUILDTESTDIR"/.. "$TESTTMPDIR"/build --dev-bind /dev /dev --setenv FONTCONFIG_FILE "$TESTTMPDIR"/build/test/bind-fonts.conf "$TESTTMPDIR"/build/fc-cache/fc-cache"$EXEEXT" "$TESTTMPDIR"/fonts (cd "$TESTTMPDIR"/cache.dir; ls -1 --color=no ./*cache*) > "$BUILDTESTDIR"/out2 if cmp "$BUILDTESTDIR"/out1 "$BUILDTESTDIR"/out2 > /dev/null ; then : ; else echo "*** Test failed: $TEST" echo "cache was created unexpectedly." echo "Before:" cat "$BUILDTESTDIR"/out1 echo "After:" cat "$BUILDTESTDIR"/out2 exit 1 fi rm -rf "$TESTTMPDIR" "$BUILDTESTDIR"/out1 "$BUILDTESTDIR"/out2 "$BUILDTESTDIR"/bind-fonts.conf dotest "Fallback to uuid" prep cp "$FONT1" "$FONTDIR" if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then touch -m -t "$(fdate ${SOURCE_DATE_EPOCH})" "$FONTDIR" fi touch -t "$(fdate $(fstat "%Y" "$FONTDIR"))" "$FONTDIR" $FCCACHE "$FONTDIR" sleep 1 _cache=$(ls -1 --color=no "$CACHEDIR"/*cache*) _mtime=$(fstat "%Y" "$FONTDIR") _uuid=$(uuidgen) _newcache=$(echo "$_cache" | sed "s/\([0-9a-f]*\)\(\-.*\)/$_uuid\2/") mv "$_cache" "$_newcache" echo "$_uuid" > "$FONTDIR"/.uuid touch -t "$(fdate "$_mtime")" "$FONTDIR" (cd "$CACHEDIR"; ls -1 --color=no ./*cache*) > "$BUILDTESTDIR"/out1 TESTTMPDIR=$(mktemp -d "$TMPDIR"/fontconfig.XXXXXXXX) mkdir -p "$TESTTMPDIR"/cache.dir sed "s!@FONTDIR@!$TESTTMPDIR/fonts! s!@REMAPDIR@!$TESTTMPDIR/fonts! s!@CACHEDIR@!$TESTTMPDIR/cache.dir!" < "$TESTDIR"/fonts.conf.in > "$BUILDTESTDIR"/bind-fonts.conf $BWRAP --bind / / --bind "$CACHEDIR" "$TESTTMPDIR"/cache.dir --bind "$FONTDIR" "$TESTTMPDIR"/fonts --bind "$BUILDTESTDIR"/.. "$TESTTMPDIR"/build --dev-bind /dev /dev --setenv FONTCONFIG_FILE "$TESTTMPDIR"/build/test/bind-fonts.conf "$TESTTMPDIR"/build/fc-match/fc-match"$EXEEXT" -f "" (cd "$CACHEDIR"; ls -1 --color=no ./*cache*) > "$BUILDTESTDIR"/out2 if cmp "$BUILDTESTDIR"/out1 "$BUILDTESTDIR"/out2 > /dev/null ; then : ; else echo "*** Test failed: $TEST" echo "cache was created unexpectedly." echo "Before:" cat "$BUILDTESTDIR"/out1 echo "After:" cat "$BUILDTESTDIR"/out2 exit 1 fi rm -rf "$TESTTMPDIR" "$BUILDTESTDIR"/out1 "$BUILDTESTDIR"/out2 "$BUILDTESTDIR"/bind-fonts.conf else echo "No bubblewrap installed. skipping..." fi # if [ x"$BWRAP" != "x" -a "x$EXEEXT" = "x" ] if [ "x$EXEEXT" = "x" ]; then dotest "sysroot option" prep mkdir -p "$BUILDTESTDIR"/sysroot/"$FONTDIR" mkdir -p "$BUILDTESTDIR"/sysroot/"$CACHEDIR" mkdir -p "$BUILDTESTDIR"/sysroot/"$BUILDTESTDIR" cp "$FONT1" "$BUILDTESTDIR"/sysroot/"$FONTDIR" if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then touch -m -t "$(fdate ${SOURCE_DATE_EPOCH})" "$BUILDTESTDIR"/sysroot/"$FONTDIR" fi cp "$BUILDTESTDIR"/fonts.conf "$BUILDTESTDIR"/sysroot/"$BUILDTESTDIR"/fonts.conf $FCCACHE -y "$BUILDTESTDIR"/sysroot dotest "creating cache file on sysroot" md5=$(printf "%s" "$FONTDIR" | $MD5SUM | sed 's/ .*$//') echo "checking for cache file $md5" if ! ls "$BUILDTESTDIR/sysroot/$CACHEDIR/$md5"*; then echo "*** Test failed: $TEST" echo "No cache for $FONTDIR ($md5)" ls "$BUILDTESTDIR"/sysroot/"$CACHEDIR" exit 1 fi rm -rf "$BUILDTESTDIR"/sysroot dotest "read newer caches when multiple places are allowed to store" prep cp "$FONT1" "$FONT2" "$FONTDIR" if [ -n "${SOURCE_DATE_EPOCH:-}" ]; then # epoch 0 has special meaning. increase to avoid epoch 0 old_epoch=${SOURCE_DATE_EPOCH} SOURCE_DATE_EPOCH=$(("$SOURCE_DATE_EPOCH" + 1)) fi if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then touch -m -t "$(fdate ${SOURCE_DATE_EPOCH})" "$FONTDIR" fi MYCACHEBASEDIR=$(mktemp -d "$TMPDIR"/fontconfig.XXXXXXXX) MYCACHEDIR="$MYCACHEBASEDIR"/cache.dir MYOWNCACHEDIR="$MYCACHEBASEDIR"/owncache.dir MYCONFIG=$(mktemp "$TMPDIR"/fontconfig.XXXXXXXX) mkdir -p "$MYCACHEDIR" mkdir -p "$MYOWNCACHEDIR" sed "s!@FONTDIR@!$FONTDIR! s!@REMAPDIR@!! s!@CACHEDIR@!$MYCACHEDIR!" < "$TESTDIR"/fonts.conf.in > "$BUILDTESTDIR"/my-fonts.conf FONTCONFIG_FILE="$BUILDTESTDIR"/my-fonts.conf $FCCACHE "$FONTDIR" sleep 1 cat<"$MYCONFIG" $FONTDIR/4x6.pcf 8 EOF sed "s!@FONTDIR@!$FONTDIR! s!@REMAPDIR@!$MYCONFIG! s!@CACHEDIR@!$MYOWNCACHEDIR!" < "$TESTDIR"/fonts.conf.in > "$BUILDTESTDIR"/my-fonts.conf if [ -n "${SOURCE_DATE_EPOCH:-}" ]; then SOURCE_DATE_EPOCH=$(("$SOURCE_DATE_EPOCH" + 1)) fi FONTCONFIG_FILE="$BUILDTESTDIR"/my-fonts.conf $FCCACHE -f "$FONTDIR" if [ -n "${SOURCE_DATE_EPOCH:-}" ]; then SOURCE_DATE_EPOCH=${old_epoch} fi sed "s!@FONTDIR@!$FONTDIR! s!@REMAPDIR@!$MYCONFIG! s!@CACHEDIR@!$MYCACHEDIR$MYOWNCACHEDIR!" < "$TESTDIR"/fonts.conf.in > "$BUILDTESTDIR"/my-fonts.conf { FONTCONFIG_FILE="$BUILDTESTDIR"/my-fonts.conf $FCLIST - family pixelsize | sort; echo "="; FONTCONFIG_FILE="$BUILDTESTDIR"/my-fonts.conf $FCLIST - family pixelsize | sort; echo "="; FONTCONFIG_FILE="$BUILDTESTDIR"/my-fonts.conf $FCLIST - family pixelsize | sort; } > "$BUILDTESTDIR"/my-out tr -d '\015' <"$BUILDTESTDIR"/my-out >"$BUILDTESTDIR"/my-out.tmp; mv "$BUILDTESTDIR"/my-out.tmp "$BUILDTESTDIR"/my-out sed -e 's/pixelsize=6/pixelsize=8/g' "$BUILDTESTDIR"/"$EXPECTED" > "$BUILDTESTDIR"/my-out.expected if cmp "$BUILDTESTDIR"/my-out "$BUILDTESTDIR"/my-out.expected > /dev/null ; then : ; else echo "*** Test failed: $TEST" echo "*** output is in 'my-out', expected output in 'my-out.expected'" echo "Actual Result" cat "$BUILDTESTDIR"/my-out echo "Expected Result" cat "$BUILDTESTDIR"/my-out.expected exit 1 fi rm -rf "$MYCACHEBASEDIR" "$MYCONFIG" "$BUILDTESTDIR"/my-fonts.conf "$BUILDTESTDIR"/my-out "$BUILDTESTDIR"/my-out.expected fi # if [ "x$EXEEXT" = "x" ] if [ -x "$BUILDTESTDIR"/test-crbug1004254 ]; then dotest "MT-safe global config" prep curl -s -o "$FONTDIR"/noto.zip https://noto-website-2.storage.googleapis.com/pkgs/NotoSans-hinted.zip (cd "$FONTDIR"; unzip noto.zip) if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then touch -m -t "$(fdate ${SOURCE_DATE_EPOCH})" "$FONTDIR" fi "$BUILDTESTDIR"/test-crbug1004254 else echo "No test-crbug1004254: skipped" fi if [ "x$EXEEXT" = "x" ]; then dotest "empty XDG_CACHE_HOME" prep export XDG_CACHE_HOME="" export old_HOME="$HOME" export temp_HOME=$(mktemp -d "$TMPDIR"/fontconfig.XXXXXXXX) export HOME="$temp_HOME" cp "$FONT1" "$FONT2" "$FONTDIR" if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then touch -m -t "$(fdate ${SOURCE_DATE_EPOCH})" "$FONTDIR" fi echo "$FONTDIRfontconfig" > "$BUILDTESTDIR"/my-fonts.conf FONTCONFIG_FILE="$BUILDTESTDIR"/my-fonts.conf $FCCACHE "$FONTDIR" || : if [ -d "$HOME"/.cache ] && [ -d "$HOME"/.cache/fontconfig ]; then : ; else echo "*** Test failed: $TEST" echo "No \$HOME/.cache/fontconfig directory" ls -a "$HOME" ls -a "$HOME"/.cache exit 1 fi export HOME="$old_HOME" rm -rf "$temp_HOME" "$BUILDTESTDIR"/my-fonts.conf unset XDG_CACHE_HOME unset old_HOME unset temp_HOME fi # if [ "x$EXEEXT" = "x" ] rm -rf "$FONTDIR" "$CACHEFILE" "$CACHEDIR" "$BASEDIR" "$FONTCONFIG_FILE" out TEST="" fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-45-generic.json000066400000000000000000000012321503113465200260610ustar00rootroot00000000000000{ "fonts": [ { "family": "Foo" }, { "family": "math" }, { "family": "Baz" } ], "tests": [ { "method": "match", "query": { "family": "Bar", "lang": "und-zmth" }, "result": { "family": "math", "lang": "und-zmth" } }, { "method": "match", "query": { "lang": [ "en", "fr" ] }, "result": { // Exercise complex value promotion. No ASAN issues. } } ] } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-48-guessfamily.json000066400000000000000000000010411503113465200267760ustar00rootroot00000000000000{ "fonts": [], "tests": [ { "method": "pattern", "query": { "family": "Adwaita Mono" }, "result": { "family": ["Adwaita Mono", "monospace"] } }, { "method": "pattern", "query": { "family": "Adwaita Sans" }, "result": { "family": ["Adwaita Sans", "sans-serif"] } }, { "method": "pattern", "query": { "family": "Foo Serif" }, "result": { "family": ["Foo Serif", "serif"] } } ] } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-60-generic.json000066400000000000000000000012251503113465200260600ustar00rootroot00000000000000{ "fonts": [ { "family": "Foo", "color": true }, { "family": "Bar", "color": false }, { "family": "Baz", "color": "DontCare" } ], "tests": [ { "method": "list", "query": { "color": true }, "result_fs": [ { "family": "Foo", "color": true }, { "family": "Baz", "color": "DontCare" } ] } ] } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-70-no-bitmaps-and-emoji.json000066400000000000000000000010021503113465200303500ustar00rootroot00000000000000{ "fonts": [ { "family": "Noto Color Emoji", "style": "Regular", "outline": false, "scalable": true }, { "family": "Fixed", "style": "Regular", "outline": false, "scalable": false } ], "tests": [ { "method": "match", "query": { "family": "Noto Color Emoji" }, "result": { } }, { "method": "match", "query": { "family": "Fixed" }, "result": { } } ] } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-70-no-bitmaps-except-emoji.json000066400000000000000000000015431503113465200311100ustar00rootroot00000000000000{ "fonts": [ { "family": "Noto Color Emoji", "style": "Regular", "outline": false, "scalable": true }, { "family": "Fixed", "style": "Regular", "outline": false, "scalable": false } ], "tests": [ { "method": "match", "query": { "family": "Noto Color Emoji" }, "result": { "family": "Noto Color Emoji", "style": "Regular", "outline": false, "scalable": true } }, { "method": "match", "query": { "family": "Fixed" }, "$comment": "fontconfig always fallback to something. Even though the expected result here would be no result.", "result": { "family": "Noto Color Emoji", "style": "Regular", "outline": false, "scalable": true } } ] } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-90-synthetic.json000066400000000000000000000027111503113465200264620ustar00rootroot00000000000000{ "fonts": [ { "family": "Foo", "style": "Medium", "weight": 100 }, { "family": "Bar", "style": "Regular", "weight": 80 }, { "family": "Baz", "style": "Bold", "weight": 200 } ], "tests": [ { "method": "match", "query": { "family": "Foo", "weight": 200 }, "result": { "family": "Foo", "weight": 200, "embolden": true } }, { "method": "match", "query": { "family": "Bar", "weight": 102 }, "result": { "family": "Bar", "weight": 80 } }, { "method": "match", "query": { "family": "Bar", "weight": 200 }, "result": { "family": "Bar", "weight": 200, "embolden": true } }, { "method": "match", "query": { "family": "Baz", "weight": 200 }, "result": { "family": "Baz", "weight": 200, "embolden": null } } ] } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-appfont.json000066400000000000000000000020511503113465200256660ustar00rootroot00000000000000{ "fonts": [ { "family": [ "Foo" ], "style": [ "Regular" ], "lang": "en", "charset": [ "a", "b" ], "file": "/system/path/to/Foo.ttf", "fontversion": 1, } ], "appfonts": [ { "family": [ "Foo" ], "style": [ "Regular" ], "lang": "en", "charset": [ "a", "b" ], "file": "/app/path/to/Foo.ttf", "fontversion": 2, } ], "tests": [ { "config": { "prefer_app_font": false }, "method": "sort", "query": { "family": "Foo", "style": "Regular" }, "result_fs": [ { "family": "Foo", "style": "Regular", "file": "/system/path/to/Foo.ttf", "fontversion": 1 } ] }, { "config": { "prefer_app_font": true }, "method": "sort", "query": { "family": "Foo", "style": "Regular" }, "result_fs": [ { "family": "Foo", "style": "Regular", "file": "/app/path/to/Foo.ttf", "fontversion": 2 } ] } ] } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-bz106618.c000066400000000000000000000031241503113465200245730ustar00rootroot00000000000000/* * fontconfig/test/test-bz89617.c * * Copyright © 2000 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include #include int main (int argc, char **argv) { const FcFontSet *fs = FcConfigGetFonts (NULL, FcSetSystem); int i; if (!fs) return 1; for (i = 0; i < fs->nfont; i++) { FcPattern *p = fs->fonts[i]; FcChar8 *file; if (FcPatternGetString (p, FC_FILE, 0, &file) != FcResultMatch) return 1; printf ("%s\n", file); } FcFini(); return 0; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-bz106632.c000066400000000000000000000200151503113465200245650ustar00rootroot00000000000000/* * fontconfig/test/test-bz89617.c * * Copyright © 2000 Keith Packard * Copyright © 2018 Akira TAGOH * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #ifndef HAVE_STRUCT_DIRENT_D_TYPE # include # include #endif #include #ifdef _WIN32 # define FC_DIR_SEPARATOR '\\' # define FC_DIR_SEPARATOR_S "\\" #else # define FC_DIR_SEPARATOR '/' # define FC_DIR_SEPARATOR_S "/" #endif #ifdef _WIN32 # include # define mkdir(path, mode) _mkdir (path) #endif #ifdef HAVE_MKDTEMP # define fc_mkdtemp mkdtemp #else char * fc_mkdtemp (char *template) { if (!mktemp (template) || mkdir (template, 0700)) return NULL; return template; } #endif FcBool mkdir_p (const char *dir) { char *parent; FcBool ret; if (strlen (dir) == 0) return FcFalse; parent = (char *)FcStrDirname ((const FcChar8 *)dir); if (!parent) return FcFalse; if (access (parent, F_OK) == 0) ret = mkdir (dir, 0755) == 0 && chmod (dir, 0755) == 0; else if (access (parent, F_OK) == -1) ret = mkdir_p (parent) && (mkdir (dir, 0755) == 0) && chmod (dir, 0755) == 0; else ret = FcFalse; free (parent); return ret; } FcBool unlink_dirs (const char *dir) { DIR *d = opendir (dir); struct dirent *e; size_t len = strlen (dir); char *n = NULL; FcBool ret = FcTrue; #ifndef HAVE_STRUCT_DIRENT_D_TYPE struct stat statb; #endif if (!d) return FcFalse; while ((e = readdir (d)) != NULL) { size_t l; if (strcmp (e->d_name, ".") == 0 || strcmp (e->d_name, "..") == 0) continue; l = strlen (e->d_name) + 1; if (n) free (n); n = malloc (l + len + 1); if (!n) { ret = FcFalse; break; } strcpy (n, dir); n[len] = FC_DIR_SEPARATOR; strcpy (&n[len + 1], e->d_name); #ifdef HAVE_STRUCT_DIRENT_D_TYPE if (e->d_type == DT_DIR) #else if (stat (n, &statb) == -1) { fprintf (stderr, "E: %s\n", n); ret = FcFalse; break; } if (S_ISDIR (statb.st_mode)) #endif { if (!unlink_dirs (n)) { fprintf (stderr, "E: %s\n", n); ret = FcFalse; break; } } else { if (unlink (n) == -1) { fprintf (stderr, "E: %s\n", n); ret = FcFalse; break; } } } if (n) free (n); closedir (d); if (rmdir (dir) == -1) { fprintf (stderr, "E: %s\n", dir); return FcFalse; } return ret; } int main (void) { FcChar8 *fontdir = NULL, *cachedir = NULL; char *basedir, template[512] = "/tmp/bz106632-XXXXXX"; char cmd[512]; FcConfig *config; const FcChar8 *tconf = (const FcChar8 *) "\n" " %s\n" " %s\n" "\n"; char conf[1024]; int ret = 0; FcFontSet *fs; FcPattern *pat; fprintf (stderr, "D: Creating tmp dir\n"); basedir = fc_mkdtemp (template); if (!basedir) { fprintf (stderr, "%s: %s\n", template, strerror (errno)); goto bail; } fontdir = FcStrBuildFilename ((const FcChar8 *)basedir, (const FcChar8 *)"fonts", NULL); cachedir = FcStrBuildFilename ((const FcChar8 *)basedir, (const FcChar8 *)"cache", NULL); fprintf (stderr, "D: Creating %s\n", fontdir); mkdir_p ((const char *)fontdir); fprintf (stderr, "D: Creating %s\n", cachedir); mkdir_p ((const char *)cachedir); fprintf (stderr, "D: Copying %s to %s\n", FONTFILE, fontdir); snprintf (cmd, 512, "sleep 1; cp -a %s %s; sleep 1", FONTFILE, fontdir); (void)system (cmd); fprintf (stderr, "D: Loading a config\n"); snprintf (conf, 1024, (const char *)tconf, fontdir, cachedir); config = FcConfigCreate(); if (!FcConfigParseAndLoadFromMemory (config, (const FcChar8 *)conf, FcTrue)) { printf ("E: Unable to load config\n"); ret = 1; goto bail; } if (!FcConfigBuildFonts (config)) { printf ("E: unable to build fonts\n"); ret = 1; goto bail; } fprintf (stderr, "D: Obtaining fonts information\n"); pat = FcPatternCreate(); fs = FcFontList (config, pat, NULL); FcPatternDestroy (pat); if (!fs || fs->nfont != 1) { printf ("E: Unexpected the number of fonts: %d\n", !fs ? -1 : fs->nfont); ret = 1; goto bail; } FcFontSetDestroy (fs); fprintf (stderr, "D: Removing %s\n", fontdir); snprintf (cmd, 512, "sleep 1; rm -f %s%s*; sleep 1", fontdir, FC_DIR_SEPARATOR_S); (void)system (cmd); fprintf (stderr, "D: Reinitializing\n"); if (FcConfigUptoDate (config)) { fprintf (stderr, "E: Config reports up-to-date\n"); ret = 2; goto bail; } if (!FcInitReinitialize()) { fprintf (stderr, "E: Unable to reinitialize\n"); ret = 3; goto bail; } if (FcConfigGetCurrent() == config) { fprintf (stderr, "E: config wasn't reloaded\n"); ret = 3; goto bail; } FcConfigDestroy (config); config = FcConfigCreate(); if (!FcConfigParseAndLoadFromMemory (config, (const FcChar8 *)conf, FcTrue)) { printf ("E: Unable to load config again\n"); ret = 4; goto bail; } if (!FcConfigBuildFonts (config)) { printf ("E: unable to build fonts again\n"); ret = 5; goto bail; } fprintf (stderr, "D: Obtaining fonts information again\n"); pat = FcPatternCreate(); fs = FcFontList (config, pat, NULL); FcPatternDestroy (pat); if (!fs || fs->nfont != 0) { printf ("E: Unexpected the number of fonts: %d\n", !fs ? -1 : fs->nfont); ret = 1; goto bail; } FcFontSetDestroy (fs); fprintf (stderr, "D: Copying %s to %s\n", FONTFILE, fontdir); snprintf (cmd, 512, "sleep 1; cp -a %s %s; sleep 1", FONTFILE, fontdir); (void)system (cmd); fprintf (stderr, "D: Reinitializing\n"); if (FcConfigUptoDate (config)) { fprintf (stderr, "E: Config up-to-date after addition\n"); ret = 3; goto bail; } if (!FcInitReinitialize()) { fprintf (stderr, "E: Unable to reinitialize\n"); ret = 2; goto bail; } if (FcConfigGetCurrent() == config) { fprintf (stderr, "E: config wasn't reloaded\n"); ret = 3; goto bail; } FcConfigDestroy (config); config = FcConfigCreate(); if (!FcConfigParseAndLoadFromMemory (config, (const FcChar8 *)conf, FcTrue)) { printf ("E: Unable to load config again\n"); ret = 4; goto bail; } if (!FcConfigBuildFonts (config)) { printf ("E: unable to build fonts again\n"); ret = 5; goto bail; } fprintf (stderr, "D: Obtaining fonts information\n"); pat = FcPatternCreate(); fs = FcFontList (config, pat, NULL); FcPatternDestroy (pat); if (!fs || fs->nfont != 1) { printf ("E: Unexpected the number of fonts: %d\n", !fs ? -1 : fs->nfont); ret = 1; goto bail; } FcFontSetDestroy (fs); FcConfigDestroy (config); bail: fprintf (stderr, "Cleaning up\n"); if (basedir) unlink_dirs (basedir); if (fontdir) FcStrFree (fontdir); if (cachedir) FcStrFree (cachedir); FcFini(); return ret; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-bz131804.c000066400000000000000000000102141503113465200245640ustar00rootroot00000000000000/* * fontconfig/test/test-bz89617.c * * Copyright © 2000 Keith Packard * Copyright © 2015 Akira TAGOH * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include #include FcLangResult comp (const FcChar8 *l1, const FcChar8 *l2) { FcLangSet *ls1, *ls2; FcLangResult result; ls1 = FcLangSetCreate(); ls2 = FcLangSetCreate(); FcLangSetAdd (ls1, l1); FcLangSetAdd (ls2, l2); result = FcLangSetCompare (ls1, ls2); FcLangSetDestroy (ls1); FcLangSetDestroy (ls2); return result; } int main (void) { int i = 1; /* 1 */ if (comp ((const FcChar8 *)"ku-am", (const FcChar8 *)"ku-iq") != FcLangDifferentTerritory) return i; i++; /* 2 */ if (comp ((const FcChar8 *)"ku-am", (const FcChar8 *)"ku-ir") != FcLangDifferentTerritory) return i; i++; /* 3 */ if (comp ((const FcChar8 *)"ku-am", (const FcChar8 *)"ku-tr") != FcLangDifferentTerritory) return i; i++; /* 4 */ if (comp ((const FcChar8 *)"ku-iq", (const FcChar8 *)"ku-ir") != FcLangDifferentTerritory) return i; i++; /* 5 */ if (comp ((const FcChar8 *)"ku-iq", (const FcChar8 *)"ku-tr") != FcLangDifferentTerritory) return i; i++; /* 6 */ if (comp ((const FcChar8 *)"ku-ir", (const FcChar8 *)"ku-tr") != FcLangDifferentTerritory) return i; i++; /* 7 */ if (comp ((const FcChar8 *)"ps-af", (const FcChar8 *)"ps-pk") != FcLangDifferentTerritory) return i; i++; /* 8 */ if (comp ((const FcChar8 *)"ti-er", (const FcChar8 *)"ti-et") != FcLangDifferentTerritory) return i; i++; /* 9 */ if (comp ((const FcChar8 *)"zh-cn", (const FcChar8 *)"zh-hk") != FcLangDifferentTerritory) return i; i++; /* 10 */ if (comp ((const FcChar8 *)"zh-cn", (const FcChar8 *)"zh-mo") != FcLangDifferentTerritory) return i; i++; /* 11 */ if (comp ((const FcChar8 *)"zh-cn", (const FcChar8 *)"zh-sg") != FcLangDifferentTerritory) return i; i++; /* 12 */ if (comp ((const FcChar8 *)"zh-cn", (const FcChar8 *)"zh-tw") != FcLangDifferentTerritory) return i; i++; /* 13 */ if (comp ((const FcChar8 *)"zh-hk", (const FcChar8 *)"zh-mo") != FcLangDifferentTerritory) return i; i++; /* 14 */ if (comp ((const FcChar8 *)"zh-hk", (const FcChar8 *)"zh-sg") != FcLangDifferentTerritory) return i; i++; /* 15 */ if (comp ((const FcChar8 *)"zh-hk", (const FcChar8 *)"zh-tw") != FcLangDifferentTerritory) return i; i++; /* 16 */ if (comp ((const FcChar8 *)"zh-mo", (const FcChar8 *)"zh-sg") != FcLangDifferentTerritory) return i; i++; /* 17 */ if (comp ((const FcChar8 *)"zh-mo", (const FcChar8 *)"zh-tw") != FcLangDifferentTerritory) return i; i++; /* 18 */ if (comp ((const FcChar8 *)"zh-sg", (const FcChar8 *)"zh-tw") != FcLangDifferentTerritory) return i; i++; /* 19 */ if (comp ((const FcChar8 *)"mn-mn", (const FcChar8 *)"mn-cn") != FcLangDifferentTerritory) return i; i++; /* 20 */ if (comp ((const FcChar8 *)"pap-an", (const FcChar8 *)"pap-aw") != FcLangDifferentTerritory) return i; i++; return 0; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-bz1744377.c000066400000000000000000000034731503113465200246750ustar00rootroot00000000000000/* * fontconfig/test/test-bz1744377.c * * Copyright © 2000 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include int main (void) { const FcChar8 *doc = (const FcChar8 *) "" "\n" " blahblahblah\n" "\n" ""; const FcChar8 *doc2 = (const FcChar8 *) "" "\n" " blahblahblah\n" "\n" ""; FcConfig *cfg = FcConfigCreate(); if (!FcConfigParseAndLoadFromMemory (cfg, doc, FcTrue)) return 1; if (FcConfigParseAndLoadFromMemory (cfg, doc2, FcTrue)) return 1; if (!FcConfigParseAndLoadFromMemory (cfg, doc2, FcFalse)) return 1; FcConfigDestroy (cfg); return 0; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-bz89617.c000066400000000000000000000030211503113465200245200ustar00rootroot00000000000000/* * fontconfig/test/test-bz89617.c * * Copyright © 2000 Keith Packard * Copyright © 2015 Akira TAGOH * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include #include int main (void) { FcConfig *config = FcConfigCreate(); if (!FcConfigAppFontAddFile (config, (const FcChar8 *)SRCDIR "/4x6.pcf") || FcConfigAppFontAddFile (config, (const FcChar8 *)"/dev/null")) return 1; FcConfigDestroy (config); return 0; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-bz96676.c000066400000000000000000000025541503113465200245350ustar00rootroot00000000000000/* * fontconfig/test/test-bz96676.c * * Copyright © 2000 Keith Packard * Copyright © 2016 Akira TAGOH * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include #include int main (int argc, char **argv) { return FcWeightFromOpenType (INT_MAX) != FC_WEIGHT_EXTRABLACK; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-conf.c000066400000000000000000000533621503113465200244300ustar00rootroot00000000000000/* * fontconfig/test/test-conf.c * * Copyright © 2000 Keith Packard * Copyright © 2018 Akira TAGOH * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include struct _FcConfig { FcStrSet *configDirs; /* directories to scan for fonts */ FcStrSet *fontDirs; FcStrSet *cacheDirs; FcStrSet *configFiles; /* config files loaded */ void *subst[FcMatchKindEnd]; int maxObjects; /* maximum number of tests in all substs */ FcStrSet *acceptGlobs; FcStrSet *rejectGlobs; FcFontSet *acceptPatterns; FcFontSet *rejectPatterns; FcFontSet *fonts[FcSetApplication + 1]; }; static void apply_config (FcConfig *config, json_object *obj) { json_object_iter iter; json_object_object_foreachC (obj, iter) { if (strcmp (iter.key, "prefer_app_font") == 0) { if (json_object_get_type (iter.val) != json_type_boolean) { fprintf (stderr, "W: invalid type of prefer_app_font: (%s)\n", json_type_to_name (json_object_get_type (iter.val))); continue; } FcConfigPreferAppFont (config, json_object_get_boolean (iter.val)); } else { fprintf (stderr, "W: unknown object in config: %s\n", iter.key); } } } static FcPattern * build_pattern (json_object *obj) { json_object_iter iter; FcPattern *pat = FcPatternCreate(); json_object_object_foreachC (obj, iter) { FcValue v; FcBool destroy_v = FcFalse; FcMatrix matrix; if (json_object_get_type (iter.val) == json_type_boolean) { v.type = FcTypeBool; v.u.b = json_object_get_boolean (iter.val); } else if (json_object_get_type (iter.val) == json_type_double) { v.type = FcTypeDouble; v.u.d = json_object_get_double (iter.val); } else if (json_object_get_type (iter.val) == json_type_int) { v.type = FcTypeInteger; v.u.i = json_object_get_int (iter.val); } else if (json_object_get_type (iter.val) == json_type_string) { const FcObjectType *o = FcNameGetObjectType (iter.key); if (o && (o->type == FcTypeRange || o->type == FcTypeDouble || o->type == FcTypeInteger)) { const FcConstant *c = FcNameGetConstant ((const FcChar8 *)json_object_get_string (iter.val)); if (!c) { fprintf (stderr, "E: value is not a known constant\n"); fprintf (stderr, " key: %s\n", iter.key); fprintf (stderr, " val: %s\n", json_object_get_string (iter.val)); continue; } if (strcmp (c->object, iter.key) != 0) { fprintf (stderr, "E: value is a constant of different object\n"); fprintf (stderr, " key: %s\n", iter.key); fprintf (stderr, " val: %s\n", json_object_get_string (iter.val)); fprintf (stderr, " key implied by value: %s\n", c->object); continue; } v.type = FcTypeInteger; v.u.i = c->value; } else if (strcmp (json_object_get_string (iter.val), "DontCare") == 0) { v.type = FcTypeBool; v.u.b = FcDontCare; } else { v.type = FcTypeString; v.u.s = (const FcChar8 *)json_object_get_string (iter.val); } } else if (json_object_get_type (iter.val) == json_type_null) { v.type = FcTypeVoid; } else if (json_object_get_type (iter.val) == json_type_array) { json_object *o; json_type type; int i, n; n = json_object_array_length (iter.val); if (n == 0) { fprintf (stderr, "E: value is an empty array\n"); continue; } o = json_object_array_get_idx (iter.val, 0); type = json_object_get_type (o); if (type == json_type_string) { const FcObjectType *fc_o = FcNameGetObjectType (iter.key); if (fc_o && fc_o->type == FcTypeCharSet) { FcCharSet *cs = FcCharSetCreate(); if (!cs) { fprintf (stderr, "E: failed to create charset\n"); continue; } v.type = FcTypeCharSet; v.u.c = cs; destroy_v = FcTrue; for (i = 0; i < n; i++) { const FcChar8 *src; int len, nchar, wchar; FcBool valid; FcChar32 dst; o = json_object_array_get_idx (iter.val, i); type = json_object_get_type (o); if (type != json_type_string) { fprintf (stderr, "E: charset value not string\n"); FcValueDestroy (v); continue; } src = (const FcChar8 *)json_object_get_string (o); len = json_object_get_string_len (o); valid = FcUtf8Len (src, len, &nchar, &wchar); if (valid == FcFalse) { fprintf (stderr, "E: charset entry not well formed\n"); FcValueDestroy (v); continue; } if (nchar != 1) { fprintf (stderr, "E: charset entry not a codepoint\n"); FcValueDestroy (v); continue; } FcUtf8ToUcs4 (src, &dst, len); if (FcCharSetAddChar (cs, dst) == FcFalse) { fprintf (stderr, "E: failed to add to charset\n"); FcValueDestroy (v); continue; } } } else if (fc_o && fc_o->type == FcTypeString) { for (i = 0; i < n; i++) { o = json_object_array_get_idx (iter.val, i); type = json_object_get_type (o); if (type != json_type_string) { fprintf (stderr, "E: unable to convert to string\n"); continue; } v.type = FcTypeString; v.u.s = (const FcChar8 *)json_object_get_string (o); FcPatternAdd (pat, iter.key, v, FcTrue); v.type = FcTypeVoid; } continue; } else { FcLangSet *ls = FcLangSetCreate(); if (!ls) { fprintf (stderr, "E: failed to create langset\n"); continue; } v.type = FcTypeLangSet; v.u.l = ls; destroy_v = FcTrue; for (i = 0; i < n; i++) { o = json_object_array_get_idx (iter.val, i); type = json_object_get_type (o); if (type != json_type_string) { fprintf (stderr, "E: langset value not string\n"); FcValueDestroy (v); continue; } if (FcLangSetAdd (ls, (const FcChar8 *)json_object_get_string (o)) == FcFalse) { fprintf (stderr, "E: failed to add to langset\n"); FcValueDestroy (v); continue; } } } } else if (type == json_type_double || type == json_type_int) { const FcObjectType *fc_o = FcNameGetObjectType (iter.key); double values[4]; if (fc_o && fc_o->type == FcTypeDouble) { for (i = 0; i < n; i++) { o = json_object_array_get_idx (iter.val, i); type = json_object_get_type (o); if (type == json_type_double) { v.type = FcTypeDouble; v.u.d = json_object_get_double (o); } else if (type == json_type_int) { v.type = FcTypeInteger; v.u.i = json_object_get_int (o); } else { fprintf (stderr, "E: unable to convert to double\n"); continue; } FcPatternAdd (pat, iter.key, v, FcTrue); v.type = FcTypeVoid; } continue; } else { if (n != 2 && n != 4) { fprintf (stderr, "E: array starting with number not range or matrix\n"); continue; } for (i = 0; i < n; i++) { o = json_object_array_get_idx (iter.val, i); type = json_object_get_type (o); if (type != json_type_double && type != json_type_int) { fprintf (stderr, "E: numeric array entry not a number\n"); continue; } values[i] = json_object_get_double (o); } if (n == 2) { v.type = FcTypeRange; v.u.r = FcRangeCreateDouble (values[0], values[1]); if (!v.u.r) { fprintf (stderr, "E: failed to create range\n"); continue; } destroy_v = FcTrue; } else { v.type = FcTypeMatrix; v.u.m = &matrix; matrix.xx = values[0]; matrix.xy = values[1]; matrix.yx = values[2]; matrix.yy = values[3]; } } } else { fprintf (stderr, "E: array format not recognized\n"); continue; } } else { fprintf (stderr, "W: unexpected object to build a pattern: (%s %s)", iter.key, json_type_to_name (json_object_get_type (iter.val))); continue; } if (v.type != FcTypeVoid) FcPatternAdd (pat, iter.key, v, FcTrue); if (destroy_v) FcValueDestroy (v); } return pat; } static FcFontSet * build_fs (FcConfig *config, json_object *obj, FcBool filter) { FcFontSet *fs = FcFontSetCreate(); int i, n; n = json_object_array_length (obj); for (i = 0; i < n; i++) { json_object *o = json_object_array_get_idx (obj, i); FcPattern *pat; if (json_object_get_type (o) != json_type_object) continue; pat = build_pattern (o); if (FcConfigAcceptFont (config, pat) && (!filter || FcConfigAcceptFilter (config, pat))) FcFontSetAdd (fs, pat); else FcPatternDestroy (pat); } return fs; } static FcBool filter_func (const FcPattern *f, void *user_data) { FcPattern *filter = (FcPattern *)user_data; FcPatternIter iter; FcBool ret = FcTrue; FcPatternIterStart (filter, &iter); if (!(ret = FcPatternIterIsValid (filter, &iter))) goto bail; do { const char *obj = FcPatternIterGetObject (filter, &iter); int i, n = FcPatternIterValueCount (filter, &iter); for (i = 0; i < n; i++) { FcValue v, v2; FcValueBinding b; if (FcPatternIterGetValue (filter, &iter, i, &v, &b) != FcResultMatch) { ret = FcFalse; goto bail; } if (FcPatternGet (f, obj, 0, &v2) != FcResultMatch) { ret = FcFalse; goto bail; } if (!FcValueEqual (v, v2)) { ret = FcFalse; goto bail; } } } while (FcPatternIterNext (filter, &iter)); bail: return ret; } static FcBool build_fonts (FcConfig *config, json_object *root) { json_object *fonts, *filter, *appfonts; FcFontSet *fs; FcPattern *filterpat; if (json_object_object_get_ex (root, "filter", &filter)) { if (json_object_get_type (filter) != json_type_object) { fprintf (stderr, "W: Invalid filter defined\n"); return FcFalse; } filterpat = build_pattern (filter); FcConfigSetFontSetFilter (config, filter_func, (FcDestroyFunc)FcPatternDestroy, filterpat); } if (!json_object_object_get_ex (root, "fonts", &fonts) || json_object_get_type (fonts) != json_type_array) { fprintf (stderr, "W: No fonts defined\n"); return FcFalse; } fs = build_fs (config, fonts, FcTrue); /* FcConfigSetFonts (config, fs, FcSetSystem); */ if (config->fonts[FcSetSystem]) FcFontSetDestroy (config->fonts[FcSetSystem]); config->fonts[FcSetSystem] = fs; if (json_object_object_get_ex (root, "appfonts", &appfonts)) { if (json_object_get_type (appfonts) != json_type_array) { fprintf (stderr, "W: Invalid appfonts defined\n"); return FcFalse; } fs = build_fs (config, appfonts, FcTrue); if (config->fonts[FcSetApplication]) FcFontSetDestroy (config->fonts[FcSetApplication]); config->fonts[FcSetApplication] = fs; } return FcTrue; } static int process_match (FcConfig *config, FcPattern *query, FcPattern *result) { int fail = 0; FcPattern *match = NULL; FcResult res; if (!query) { fprintf (stderr, "E: no query defined.\n"); fail++; goto bail; } if (!result) { fprintf (stderr, "E: no result defined.\n"); fail++; goto bail; } FcConfigSubstitute (config, query, FcMatchPattern); FcConfigSetDefaultSubstitute (config, query); match = FcFontMatch (config, query, &res); if (match) { FcPatternIter iter; int x, vc; FcPatternIterStart (result, &iter); do { vc = FcPatternIterValueCount (result, &iter); for (x = 0; x < vc; x++) { FcValue vr, vm; if (FcPatternIterGetValue (result, &iter, x, &vr, NULL) != FcResultMatch) { fprintf (stderr, "E: unable to obtain a value from the expected result\n"); fail++; goto bail; } if (FcPatternGet (match, FcPatternIterGetObject (result, &iter), x, &vm) != FcResultMatch) { vm.type = FcTypeVoid; } if (!FcValueEqual (vm, vr)) { printf ("E: failed to compare %s:\n", FcPatternIterGetObject (result, &iter)); printf (" actual result:"); FcValuePrint (vm); printf ("\n expected result:"); FcValuePrint (vr); printf ("\n"); fail++; goto bail; } } } while (FcPatternIterNext (result, &iter)); bail: if (match) FcPatternDestroy (match); } else { FcPatternIter iter; int vc; FcPatternIterStart (result, &iter); vc = FcPatternIterValueCount (result, &iter); if (vc > 0) { fprintf (stderr, "E: no match\n"); fail++; } } return fail; } static int process_fs (FcConfig *config, FcFontSet *fs, FcFontSet *result_fs) { int fail = 0; int j; if (fs->nfont != result_fs->nfont) { printf ("E: The number of results is different:\n"); printf (" actual result: %d\n", fs->nfont); printf (" expected result: %d\n", result_fs->nfont); fail++; goto bail; } for (j = 0; j < fs->nfont; j++) { FcPatternIter iter; int x, vc; FcPatternIterStart (result_fs->fonts[j], &iter); do { vc = FcPatternIterValueCount (result_fs->fonts[j], &iter); for (x = 0; x < vc; x++) { FcValue vr, vm; if (FcPatternIterGetValue (result_fs->fonts[j], &iter, x, &vr, NULL) != FcResultMatch) { fprintf (stderr, "E: unable to obtain a value from the expected result\n"); fail++; goto bail; } if (FcPatternGet (fs->fonts[j], FcPatternIterGetObject (result_fs->fonts[j], &iter), x, &vm) != FcResultMatch) { vm.type = FcTypeVoid; } if (!FcValueEqual (vm, vr)) { printf ("E: failed to compare %s:\n", FcPatternIterGetObject (result_fs->fonts[j], &iter)); printf (" actual result:"); FcValuePrint (vm); printf ("\n expected result:"); FcValuePrint (vr); printf ("\n"); fail++; goto bail; } } } while (FcPatternIterNext (result_fs->fonts[j], &iter)); } bail: return fail; } static int process_list (FcConfig *config, FcPattern *query, FcFontSet *result_fs) { FcFontSet *fs = NULL; int fail = 0; if (!query) { fprintf (stderr, "E: no query defined.\n"); fail++; goto bail; } if (!result_fs) { fprintf (stderr, "E: no result_fs defined.\n"); fail++; goto bail; } fs = FcFontList (config, query, NULL); if (!fs) { fprintf (stderr, "E: failed on FcFontList\n"); fail++; } else { fail += process_fs (config, fs, result_fs); } bail: if (fs) FcFontSetDestroy (fs); return fail; } static int process_sort (FcConfig *config, FcPattern *query, FcFontSet *result_fs, const char *method) { int fail = 0; FcFontSet *fs = NULL; FcResult res; if (!query) { fprintf (stderr, "E: no query defined.\n"); fail++; goto bail; } if (!result_fs) { fprintf (stderr, "E: no result_fs defined.\n"); fail++; goto bail; } fs = FcFontSort (config, query, method[4] == 0 ? FcTrue : FcFalse, NULL, &res); if (!fs) { fprintf (stderr, "E: failed on FcFontSort\n"); fail++; } else { fail += process_fs (config, fs, result_fs); } bail: if (fs) FcFontSetDestroy (fs); return fail; } static int process_pattern (FcConfig *config, FcPattern *query, FcPattern *result) { FcPatternIter iter; int x, vc, fail = 0; if (!query) { fprintf (stderr, "E: no query defined.\n"); fail++; goto bail; } if (!result) { fprintf (stderr, "E: no result defined.\n"); fail++; goto bail; } FcConfigSubstitute (config, query, FcMatchPattern); FcPatternIterStart (result, &iter); do { vc = FcPatternIterValueCount (result, &iter); for (x = 0; x < vc; x++) { FcValue vr, vp; if (FcPatternIterGetValue (result, &iter, x, &vr, NULL) != FcResultMatch) { fprintf (stderr, "E: unable to obtain a value from the expected result\n"); fail++; goto bail; } if (FcPatternGet (query, FcPatternIterGetObject (result, &iter), x, &vp) != FcResultMatch) { vp.type = FcTypeVoid; } if (!FcValueEqual (vp, vr)) { printf ("E: failed to compare %s:\n", FcPatternIterGetObject (result, &iter)); printf (" actual result:"); FcValuePrint (vp); printf ("\n expected result:"); FcValuePrint (vr); printf ("\n"); fail++; goto bail; } } } while (FcPatternIterNext (result, &iter)); bail: return fail; } static FcBool run_test (FcConfig *config, json_object *root) { json_object *tests; int i, n, fail = 0; if (!json_object_object_get_ex (root, "tests", &tests) || json_object_get_type (tests) != json_type_array) { fprintf (stderr, "W: No test cases defined\n"); return FcFalse; } n = json_object_array_length (tests); for (i = 0; i < n; i++) { json_object *obj = json_object_array_get_idx (tests, i); json_object_iter iter; FcPattern *query = NULL; FcPattern *result = NULL; FcFontSet *result_fs = NULL; const char *method = NULL; if (json_object_get_type (obj) != json_type_object) continue; json_object_object_foreachC (obj, iter) { if (strcmp (iter.key, "config") == 0) { if (json_object_get_type (iter.val) != json_type_object) { fprintf (stderr, "W: invalid type of config: (%s)\n", json_type_to_name (json_object_get_type (iter.val))); continue; } apply_config (config, iter.val); } else if (strcmp (iter.key, "method") == 0) { if (json_object_get_type (iter.val) != json_type_string) { fprintf (stderr, "W: invalid type of method: (%s)\n", json_type_to_name (json_object_get_type (iter.val))); continue; } method = json_object_get_string (iter.val); } else if (strcmp (iter.key, "query") == 0) { if (json_object_get_type (iter.val) != json_type_object) { fprintf (stderr, "W: invalid type of query: (%s)\n", json_type_to_name (json_object_get_type (iter.val))); continue; } if (query) FcPatternDestroy (query); query = build_pattern (iter.val); } else if (strcmp (iter.key, "result") == 0) { if (json_object_get_type (iter.val) != json_type_object) { fprintf (stderr, "W: invalid type of result: (%s)\n", json_type_to_name (json_object_get_type (iter.val))); continue; } if (result) FcPatternDestroy (result); result = build_pattern (iter.val); } else if (strcmp (iter.key, "result_fs") == 0) { if (json_object_get_type (iter.val) != json_type_array) { fprintf (stderr, "W: invalid type of result_fs: (%s)\n", json_type_to_name (json_object_get_type (iter.val))); continue; } if (result_fs) FcFontSetDestroy (result_fs); result_fs = build_fs (config, iter.val, FcFalse); } else if (strcmp (iter.key, "$comment") == 0) { /* ignore it */ } else { fprintf (stderr, "W: unknown object: %s\n", iter.key); } } if (method != NULL && strcmp (method, "match") == 0) { fail += process_match (config, query, result); } else if (method != NULL && strcmp (method, "list") == 0) { fail += process_list (config, query, result_fs); } else if (method != NULL && (strcmp (method, "sort") == 0 || strcmp (method, "sort_all") == 0)) { fail += process_sort (config, query, result_fs, method); } else if (method != NULL && strcmp (method, "pattern") == 0) { fail += process_pattern (config, query, result); } else { fprintf (stderr, "W: unknown testing method: %s\n", method); } if (method) method = NULL; if (result) { FcPatternDestroy (result); result = NULL; } if (result_fs) { FcFontSetDestroy (result_fs); result_fs = NULL; } if (query) { FcPatternDestroy (query); query = NULL; } } return fail == 0; } static FcBool run_scenario (FcConfig *config, char *file) { FcBool ret = FcTrue; json_object *root; root = json_object_from_file (file); if (!root) { fprintf (stderr, "E: Unable to read the file: %s\n", file); return FcFalse; } if (!build_fonts (config, root)) { ret = FcFalse; goto bail1; } if (!run_test (config, root)) { ret = FcFalse; goto bail1; } bail1: json_object_put (root); return ret; } static FcBool load_config (FcConfig *config, char *file) { FILE *fp; long len; char *buf = NULL; FcBool ret = FcTrue; if ((fp = fopen (file, "rb")) == NULL) return FcFalse; fseek (fp, 0L, SEEK_END); len = ftell (fp); fseek (fp, 0L, SEEK_SET); buf = malloc (sizeof (char) * (len + 1)); if (!buf) { ret = FcFalse; goto bail1; } fread (buf, (size_t)len, sizeof (char), fp); buf[len] = 0; ret = FcConfigParseAndLoadFromMemory (config, (const FcChar8 *)buf, FcTrue); bail1: fclose (fp); if (buf) free (buf); return ret; } int main (int argc, char **argv) { FcConfig *config; int retval = 0; if (argc < 3) { fprintf (stderr, "Usage: %s \n", argv[0]); return 1; } config = FcConfigCreate(); if (!load_config (config, argv[1])) { fprintf (stderr, "E: Failed to load config\n"); retval = 1; goto bail1; } if (!run_scenario (config, argv[2])) { retval = 1; goto bail1; } bail1: FcConfigDestroy (config); return retval; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-crbug1004254.c000066400000000000000000000061231503113465200253360ustar00rootroot00000000000000/* * fontconfig/test/test-pthread.c * * Copyright © 2000 Keith Packard * Copyright © 2013 Raimund Steger * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include #include struct thr_arg_s { int thr_num; }; static void run_query (void) { FcPattern *pat = FcPatternCreate(), *match; FcResult result; FcPatternAddString (pat, FC_FAMILY, (const FcChar8 *)"sans-serif"); FcPatternAddBool (pat, FC_SCALABLE, FcTrue); FcConfigSubstitute (NULL, pat, FcMatchPattern); FcConfigSetDefaultSubstitute (NULL, pat); match = FcFontMatch (NULL, pat, &result); if (result != FcResultMatch || !match) { fprintf (stderr, "ERROR: No matches found\n"); } if (match) FcPatternDestroy (match); FcPatternDestroy (pat); } static void run_reinit (void) { if (!FcInitReinitialize()) { fprintf (stderr, "ERROR: Reinitializing failed\n"); } } #define NTEST 3000 static void * run_test_in_thread (void *arg) { struct thr_arg_s *thr_arg = (struct thr_arg_s *)arg; int thread_num = thr_arg->thr_num; fprintf (stderr, "Worker %d: started (round %d)\n", thread_num % 2, thread_num / 2); if ((thread_num % 2) == 0) { run_query(); } else { run_reinit(); } fprintf (stderr, "Worker %d: done (round %d)\n", thread_num % 2, thread_num / 2); return NULL; } int main (int argc, char **argv) { pthread_t threads[NTEST]; struct thr_arg_s thr_arg[NTEST]; int i, j; for (i = 0; i < NTEST; i++) { int result; fprintf (stderr, "Thread %d (worker %d round %d): creating\n", i, i % 2, i / 2); thr_arg[i].thr_num = i; result = pthread_create (&threads[i], NULL, run_test_in_thread, (void *)&thr_arg[i]); if (result != 0) { fprintf (stderr, "Cannot create thread %d\n", i); break; } } for (j = 0; j < i; j++) { pthread_join (threads[j], NULL); fprintf (stderr, "Joined thread %d\n", j); } FcFini(); return 0; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-d1f48f11.c000066400000000000000000000152601503113465200246340ustar00rootroot00000000000000/* * fontconfig/test/test-d1f48f11.c * * Copyright © 2000 Keith Packard * Copyright © 2018 Akira TAGOH * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #ifndef HAVE_STRUCT_DIRENT_D_TYPE # include # include #endif #include #ifdef _WIN32 # define FC_DIR_SEPARATOR '\\' # define FC_DIR_SEPARATOR_S "\\" #else # define FC_DIR_SEPARATOR '/' # define FC_DIR_SEPARATOR_S "/" #endif #ifdef _WIN32 # include # define mkdir(path, mode) _mkdir (path) int setenv (const char *name, const char *value, int o) { size_t len = strlen (name) + strlen (value) + 1; char *s = malloc (len + 1); int ret; snprintf (s, len, "%s=%s", name, value); ret = _putenv (s); free (s); return ret; } #endif extern FcChar8 * FcConfigRealFilename (FcConfig *, FcChar8 *); extern FcChar8 * FcStrCanonFilename (const FcChar8 *); #ifdef HAVE_MKDTEMP # define fc_mkdtemp mkdtemp #else char * fc_mkdtemp (char *template) { if (!mktemp (template) || mkdir (template, 0700)) return NULL; return template; } #endif FcBool mkdir_p (const char *dir) { char *parent; FcBool ret; if (strlen (dir) == 0) return FcFalse; parent = (char *)FcStrDirname ((const FcChar8 *)dir); if (!parent) return FcFalse; if (access (parent, F_OK) == 0) ret = mkdir (dir, 0755) == 0 && chmod (dir, 0755) == 0; else if (access (parent, F_OK) == -1) ret = mkdir_p (parent) && (mkdir (dir, 0755) == 0) && chmod (dir, 0755) == 0; else ret = FcFalse; free (parent); return ret; } FcBool unlink_dirs (const char *dir) { DIR *d = opendir (dir); struct dirent *e; size_t len = strlen (dir); char *n = NULL; FcBool ret = FcTrue; #ifndef HAVE_STRUCT_DIRENT_D_TYPE struct stat statb; #endif if (!d) return FcFalse; while ((e = readdir (d)) != NULL) { size_t l; if (strcmp (e->d_name, ".") == 0 || strcmp (e->d_name, "..") == 0) continue; l = strlen (e->d_name) + 1; if (n) free (n); n = malloc (l + len + 1); if (!n) { ret = FcFalse; break; } strcpy (n, dir); n[len] = FC_DIR_SEPARATOR; strcpy (&n[len + 1], e->d_name); #ifdef HAVE_STRUCT_DIRENT_D_TYPE if (e->d_type == DT_DIR) #else if (stat (n, &statb) == -1) { fprintf (stderr, "E: %s\n", n); ret = FcFalse; break; } if (S_ISDIR (statb.st_mode)) #endif { if (!unlink_dirs (n)) { fprintf (stderr, "E: %s\n", n); ret = FcFalse; break; } } else { if (unlink (n) == -1) { fprintf (stderr, "E: %s\n", n); ret = FcFalse; break; } } } if (n) free (n); closedir (d); if (rmdir (dir) == -1) { fprintf (stderr, "E: %s\n", dir); return FcFalse; } return ret; } char template[512] = "/tmp/fc-d1f48f11-XXXXXX"; char systempl[512] = "/tmp/fc-d1f48f11-XXXXXX"; char *rootdir, *sysroot; int setup (char *dir) { FcChar8 *confdir = NULL, *availdir = NULL, *real = NULL, *link = NULL; FILE *fp; int ret = 1; confdir = FcStrBuildFilename (dir, "conf.d", NULL); availdir = FcStrBuildFilename (dir, "conf.avail", NULL); mkdir_p (confdir); mkdir_p (availdir); real = FcStrBuildFilename (availdir, "00-foo.conf", NULL); link = FcStrBuildFilename (confdir, "00-foo.conf", NULL); if (!real || !link) { fprintf (stderr, "E: unable to allocate memory\n"); goto bail; } if ((fp = fopen (real, "wb")) == NULL) { fprintf (stderr, "E: unable to open a file\n"); goto bail; } fprintf (fp, "%s", real); fclose (fp); if (symlink ("../conf.avail/00-foo.conf", link) != 0) { fprintf (stderr, "%s: %s\n", link, strerror (errno)); goto bail; } ret = 0; bail: if (real) free (real); if (link) free (link); if (availdir) free (availdir); if (confdir) free (confdir); return ret; } void teardown (const char *dir) { unlink_dirs (dir); } int main (void) { FcConfig *cfg = NULL; FcChar8 *dc = NULL, *da = NULL, *d = NULL; FcChar8 *ds = NULL, *dsa = NULL, *dsac = NULL; int ret = 1; rootdir = fc_mkdtemp (template); if (!rootdir) { fprintf (stderr, "%s: %s\n", template, strerror (errno)); return 1; } sysroot = fc_mkdtemp (systempl); if (!sysroot) { fprintf (stderr, "%s: %s\n", systempl, strerror (errno)); return 1; } ds = FcStrBuildFilename (sysroot, rootdir, NULL); if (setup (rootdir) != 0) goto bail; if (setup (ds) != 0) goto bail; dc = FcStrBuildFilename (rootdir, "conf.d", "00-foo.conf", NULL); da = FcStrBuildFilename (rootdir, "conf.avail", "00-foo.conf", NULL); cfg = FcConfigCreate(); d = FcConfigRealFilename (cfg, dc); if (strcmp ((const char *)d, (const char *)da) != 0) { fprintf (stderr, "E: failed to compare for non-sysroot: %s, %s\n", d, da); goto bail; } free (d); FcConfigDestroy (cfg); setenv ("FONTCONFIG_SYSROOT", sysroot, 1); cfg = FcConfigCreate(); dsa = FcStrBuildFilename (sysroot, da, NULL); dsac = FcStrCanonFilename (dsa); d = FcConfigRealFilename (cfg, dc); if (strcmp ((const char *)d, (const char *)dsac) != 0) { fprintf (stderr, "E: failed to compare for sysroot: %s, %s\n", d, dsac); goto bail; } ret = 0; bail: if (cfg) FcConfigDestroy (cfg); if (ds) free (ds); if (dsa) free (dsa); if (dsac) free (dsac); if (dc) free (dc); if (da) free (da); if (d) free (d); teardown (sysroot); teardown (rootdir); return ret; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-family-matching.c000066400000000000000000000127041503113465200265470ustar00rootroot00000000000000/* * fontconfig/test/test-family-matching.c * * Copyright © 2020 Zoltan Vandrus * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #define FC_TEST_RESULT "testresult" typedef enum _TestMatchResult { TestMatch, TestNoMatch, TestMatchError } TestMatchResult; typedef enum _TestResult { TestPassed, TestFailed, TestError } TestResult; static TestMatchResult TestMatchPattern (const char *test, FcPattern *p) { const FcChar8 *xml_pre = (const FcChar8 *) "" "\n" " \n" ""; const FcChar8 *xml_post = (const FcChar8 *) "" " \n" " true\n" " \n" " \n" "\n" ""; FcPattern *pat = NULL; FcChar8 *concat = NULL; FcChar8 *xml = NULL; FcConfig *cfg = NULL; FcResult result; FcBool dummy; TestMatchResult ret = TestMatchError; pat = FcPatternDuplicate (p); if (!pat) { fprintf (stderr, "Unable to duplicate pattern.\n"); goto bail; } concat = FcStrPlus (xml_pre, (const FcChar8 *)test); if (!concat) { fprintf (stderr, "Concatenation failed.\n"); goto bail; } xml = FcStrPlus (concat, xml_post); if (!xml) { fprintf (stderr, "Concatenation failed.\n"); goto bail; } cfg = FcConfigCreate(); if (!cfg) { fprintf (stderr, "Unable to create a new empty config.\n"); goto bail; } if (!FcConfigParseAndLoadFromMemory (cfg, xml, FcTrue)) { fprintf (stderr, "Unable to load a config from memory.\n"); goto bail; } if (!FcConfigSubstitute (cfg, pat, FcMatchPattern)) { fprintf (stderr, "Unable to substitute config.\n"); goto bail; } result = FcPatternGetBool (pat, FC_TEST_RESULT, 0, &dummy); switch (result) { case FcResultMatch: ret = TestMatch; break; case FcResultNoMatch: ret = TestNoMatch; break; default: fprintf (stderr, "Unable to check pattern.\n"); break; } bail: if (cfg) FcConfigDestroy (cfg); if (xml) FcStrFree (xml); if (concat) FcStrFree (concat); if (pat) FcPatternDestroy (pat); return ret; } static TestResult TestShouldMatchPattern (const char *test, FcPattern *pat, int negate) { switch (TestMatchPattern (test, pat)) { case TestMatch: if (!negate) { return TestPassed; } else { printf ("Following test unexpectedly matched:\n%s", test); printf ("on\n"); FcPatternPrint (pat); return TestFailed; } break; case TestNoMatch: if (!negate) { printf ("Following test should have matched:\n%s", test); printf ("on\n"); FcPatternPrint (pat); return TestFailed; } else { return TestPassed; } break; case TestMatchError: return TestError; break; default: fprintf (stderr, "This shouldn't have been reached.\n"); return TestError; } } #define MAX(a, b) ((a) > (b) ? (a) : (b)) static TestResult UpdateResult (TestResult *res, TestResult resNew) { *res = MAX (*res, resNew); return *res; } static TestResult TestFamily (void) { const char *test; TestResult res = TestPassed; FcPattern *pat = FcPatternBuild (NULL, FC_FAMILY, FcTypeString, "family1", FC_FAMILY, FcTypeString, "family2", FC_FAMILY, FcTypeString, "family3", NULL); if (!pat) { fprintf (stderr, "Unable to build pattern.\n"); return TestError; } #define SHOULD_MATCH(p, t) \ UpdateResult (&res, TestShouldMatchPattern (t, p, 0)) #define SHOULD_NOT_MATCH(p, t) \ UpdateResult (&res, TestShouldMatchPattern (t, p, 1)) test = "\n" " foo\n" "\n" ""; SHOULD_MATCH (pat, test); test = "" "\n" " family2\n" "\n" ""; SHOULD_NOT_MATCH (pat, test); test = "" "\n" " family3\n" "\n" ""; SHOULD_MATCH (pat, test); test = "" "\n" " foo\n" "\n" ""; SHOULD_NOT_MATCH (pat, test); FcPatternDestroy (pat); return res; } int main (void) { return (TestFamily()); } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-filter.c000066400000000000000000000023271503113465200247630ustar00rootroot00000000000000#include #include #include static FcBool filter (const FcPattern *f, void *user_data) { FcChar8 *s = NULL; if (FcPatternGetString (f, FC_FONT_WRAPPER, 0, &s) == FcResultMatch) { /* accept "SFNT" only */ if (FcStrCmp (s, (FcChar8 *)"SFNT") == 0) return FcTrue; } return FcFalse; } int main (void) { FcPattern *p; FcObjectSet *os; FcFontSet *fs; int i, ret = 0; FcChar8 *s = NULL, *f; FcConfigSetFontSetFilter (NULL, filter, NULL, NULL); p = FcPatternCreate(); os = FcObjectSetBuild (FC_FAMILY, FC_STYLE, FC_FILE, FC_FONT_WRAPPER, NULL); fs = FcFontList (NULL, p, os); FcObjectSetDestroy (os); FcPatternDestroy (p); printf ("%d matched\n", fs->nfont); for (i = 0; i < fs->nfont; i++) { if (FcPatternGetString (fs->fonts[i], FC_FONT_WRAPPER, 0, &s) == FcResultMatch) { f = FcPatternFormat (fs->fonts[i], (FcChar8 *)"%{=fclist}\n"); printf ("%s", f); FcStrFree (f); if (FcStrCmp (s, (FcChar8 *)"SFNT") != 0) { printf ("failed:\n"); fail: ret = 1; } } else { printf ("no font wrapper\n"); goto fail; } } FcFontSetDestroy (fs); return ret; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-filter.json000066400000000000000000000017311503113465200255100ustar00rootroot00000000000000{ "fonts": [ { "family": [ "Foo" ], "style": [ "Regular" ], "file": "/path/to/Foo.ttf", "fontwrapper": "SFNT" }, { "family": [ "Bar" ], "style": [ "Regular" ], "file": "/path/to/Bar.otf", "fontwrapper": "CFF" }, { "family": [ "Baz" ], "style": [ "Regular" ], "file": "/path/to/Baz.woff", "fontwrapper": "WOFF" }, { "family": [ "Blah" ], "style": [ "Regular" ], "file": "/path/to/Baz.bdf" } ], "filter": { "fontwrapper": "SFNT" }, "tests": [ { "method": "list", "query": { }, "result_fs": [ { "family": [ "Foo" ], "style": [ "Regular" ], "file": "/path/to/Foo.ttf", "fontwrapper": "SFNT" } ] } ] } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-issue-286.json000066400000000000000000000015371503113465200256740ustar00rootroot00000000000000{ "fonts": [ { "family": "Foo", "style": "Italic", "pixelsize": [15, 16, 17, 18], "file": "/path/to/Foo-Italic.ttf", "fontversion": 133365 }, { "family": "Foo", "style": "Regular", "pixelsize": [11, 12, 13, 14, 15, 16, 17, 18, 22], "file": "/path/to/Foo-Regular.ttf", "fontversion": 133365 } ], "tests": [ { "method": "match", "query": { "family": "Foo", "style": "Regular", "pixelsize": 16 }, "result": { "family": "Foo", "style": "Regular", "pixelsize": 16, "file": "/path/to/Foo-Regular.ttf", "fontversion": 133365 } } ] } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-issue107.c000066400000000000000000000143771503113465200250660ustar00rootroot00000000000000/* * fontconfig/test/test-issue107.c * * Copyright © 2000 Keith Packard * Copyright © 2018 Akira TAGOH * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #ifndef HAVE_STRUCT_DIRENT_D_TYPE # include # include #endif #include #ifdef _WIN32 # define FC_DIR_SEPARATOR '\\' # define FC_DIR_SEPARATOR_S "\\" #else # define FC_DIR_SEPARATOR '/' # define FC_DIR_SEPARATOR_S "/" #endif #ifdef _WIN32 # include # define mkdir(path, mode) _mkdir (path) int setenv (const char *name, const char *value, int o) { size_t len = strlen (name) + strlen (value) + 1; char *s = malloc (len + 1); int ret; snprintf (s, len, "%s=%s", name, value); ret = _putenv (s); free (s); return ret; } #endif extern FcChar8 * FcConfigRealFilename (FcConfig *, FcChar8 *); #ifdef HAVE_MKDTEMP # define fc_mkdtemp mkdtemp #else char * fc_mkdtemp (char *template) { if (!mktemp (template) || mkdir (template, 0700)) return NULL; return template; } #endif FcBool mkdir_p (const char *dir) { char *parent; FcBool ret; if (strlen (dir) == 0) return FcFalse; parent = (char *)FcStrDirname ((const FcChar8 *)dir); if (!parent) return FcFalse; if (access (parent, F_OK) == 0) ret = mkdir (dir, 0755) == 0 && chmod (dir, 0755) == 0; else if (access (parent, F_OK) == -1) ret = mkdir_p (parent) && (mkdir (dir, 0755) == 0) && chmod (dir, 0755) == 0; else ret = FcFalse; free (parent); return ret; } FcBool unlink_dirs (const char *dir) { DIR *d = opendir (dir); struct dirent *e; size_t len = strlen (dir); char *n = NULL; FcBool ret = FcTrue; #ifndef HAVE_STRUCT_DIRENT_D_TYPE struct stat statb; #endif if (!d) return FcFalse; while ((e = readdir (d)) != NULL) { size_t l; if (strcmp (e->d_name, ".") == 0 || strcmp (e->d_name, "..") == 0) continue; l = strlen (e->d_name) + 1; if (n) free (n); n = malloc (l + len + 1); if (!n) { ret = FcFalse; break; } strcpy (n, dir); n[len] = FC_DIR_SEPARATOR; strcpy (&n[len + 1], e->d_name); #ifdef HAVE_STRUCT_DIRENT_D_TYPE if (e->d_type == DT_DIR) #else if (stat (n, &statb) == -1) { fprintf (stderr, "E: %s\n", n); ret = FcFalse; break; } if (S_ISDIR (statb.st_mode)) #endif { if (!unlink_dirs (n)) { fprintf (stderr, "E: %s\n", n); ret = FcFalse; break; } } else { if (unlink (n) == -1) { fprintf (stderr, "E: %s\n", n); ret = FcFalse; break; } } } if (n) free (n); closedir (d); if (rmdir (dir) == -1) { fprintf (stderr, "E: %s\n", dir); return FcFalse; } return ret; } int main (void) { FcConfig *cfg = FcConfigCreate(); char *basedir = NULL, template[512] = "/tmp/fc107-XXXXXX"; char *sysroot = NULL, systempl[512] = "/tmp/fc107-XXXXXX"; FcChar8 *d = NULL, *dd = NULL; FcCache *c = NULL; const FcChar8 *doc = (const FcChar8 *) "" "\n" " %s\n" "\n" ""; int retval = 0; size_t len; retval++; basedir = fc_mkdtemp (template); if (!basedir) { fprintf (stderr, "%s: %s\n", template, strerror (errno)); goto bail; } retval++; sysroot = fc_mkdtemp (systempl); if (!sysroot) { fprintf (stderr, "%s: %s\n", systempl, strerror (errno)); goto bail; } retval++; fprintf (stderr, "D: Creating %s\n", basedir); mkdir_p (basedir); len = strlen ((const char *)doc) + strlen (basedir) + 1; dd = malloc (len); snprintf ((char *)dd, len, (char *)doc, basedir); if (!FcConfigParseAndLoadFromMemory (cfg, dd, FcFalse)) { fprintf (stderr, "%s: Unable to load a config\n", basedir); goto bail; } sleep (1); c = FcDirCacheRead ((const FcChar8 *)basedir, FcFalse, cfg); FcDirCacheUnload (c); sleep (1); retval++; if (!FcConfigUptoDate (cfg)) { fprintf (stderr, "updated. need to reload.\n"); goto bail; } setenv ("FONTCONFIG_SYSROOT", sysroot, 1); fprintf (stderr, "D: Creating %s\n", sysroot); mkdir_p (sysroot); retval++; d = FcStrBuildFilename ((const FcChar8 *)sysroot, basedir, NULL); fprintf (stderr, "D: Creating %s\n", d); mkdir_p ((const char *)d); free (d); retval++; free (dd); len = strlen ((const char *)doc) + strlen (basedir) + 1; dd = malloc (len); snprintf ((char *)dd, len, (char *)doc, basedir); if (!FcConfigParseAndLoadFromMemory (cfg, dd, FcFalse)) { fprintf (stderr, "%s: Unable to load a config\n", basedir); goto bail; } sleep (1); c = FcDirCacheRead ((const FcChar8 *)basedir, FcFalse, cfg); FcDirCacheUnload (c); sleep (1); retval++; if (!FcConfigUptoDate (cfg)) { fprintf (stderr, "updated. need to reload (sysroot)\n"); goto bail; } retval = 0; bail: fprintf (stderr, "Cleaning up\n"); if (basedir) unlink_dirs (basedir); if (sysroot) unlink_dirs (sysroot); if (dd) free (dd); FcConfigDestroy (cfg); return retval; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-issue110.c000066400000000000000000000140311503113465200250430ustar00rootroot00000000000000/* * fontconfig/test/test-issue110.c * * Copyright © 2000 Keith Packard * Copyright © 2018 Akira TAGOH * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #ifndef HAVE_STRUCT_DIRENT_D_TYPE # include # include #endif #include #ifdef _WIN32 # define FC_DIR_SEPARATOR '\\' # define FC_DIR_SEPARATOR_S "\\" #else # define FC_DIR_SEPARATOR '/' # define FC_DIR_SEPARATOR_S "/" #endif #ifdef _WIN32 # include # define mkdir(path, mode) _mkdir (path) int setenv (const char *name, const char *value, int o) { size_t len = strlen (name) + strlen (value) + 1; char *s = malloc (len + 1); int ret; snprintf (s, len, "%s=%s", name, value); ret = _putenv (s); free (s); return ret; } #endif extern FcChar8 * FcConfigRealFilename (FcConfig *, FcChar8 *); #ifdef HAVE_MKDTEMP # define fc_mkdtemp mkdtemp #else char * fc_mkdtemp (char *template) { if (!mktemp (template) || mkdir (template, 0700)) return NULL; return template; } #endif FcBool mkdir_p (const char *dir) { char *parent; FcBool ret; if (strlen (dir) == 0) return FcFalse; parent = (char *)FcStrDirname ((const FcChar8 *)dir); if (!parent) return FcFalse; if (access (parent, F_OK) == 0) ret = mkdir (dir, 0755) == 0 && chmod (dir, 0755) == 0; else if (access (parent, F_OK) == -1) ret = mkdir_p (parent) && (mkdir (dir, 0755) == 0) && chmod (dir, 0755) == 0; else ret = FcFalse; free (parent); return ret; } FcBool unlink_dirs (const char *dir) { DIR *d = opendir (dir); struct dirent *e; size_t len = strlen (dir); char *n = NULL; FcBool ret = FcTrue; #ifndef HAVE_STRUCT_DIRENT_D_TYPE struct stat statb; #endif if (!d) return FcFalse; while ((e = readdir (d)) != NULL) { size_t l; if (strcmp (e->d_name, ".") == 0 || strcmp (e->d_name, "..") == 0) continue; l = strlen (e->d_name) + 1; if (n) free (n); n = malloc (l + len + 1); if (!n) { ret = FcFalse; break; } strcpy (n, dir); n[len] = FC_DIR_SEPARATOR; strcpy (&n[len + 1], e->d_name); #ifdef HAVE_STRUCT_DIRENT_D_TYPE if (e->d_type == DT_DIR) #else if (stat (n, &statb) == -1) { fprintf (stderr, "E: %s\n", n); ret = FcFalse; break; } if (S_ISDIR (statb.st_mode)) #endif { if (!unlink_dirs (n)) { fprintf (stderr, "E: %s\n", n); ret = FcFalse; break; } } else { if (unlink (n) == -1) { fprintf (stderr, "E: %s\n", n); ret = FcFalse; break; } } } if (n) free (n); closedir (d); if (rmdir (dir) == -1) { fprintf (stderr, "E: %s\n", dir); return FcFalse; } return ret; } int main (void) { FcConfig *cfg = FcConfigCreate(); char *basedir, template[512] = "/tmp/fc110-XXXXXX"; char *sysroot, systempl[512] = "/tmp/fc110-XXXXXX"; FcChar8 *d = NULL; FcChar8 *ret = NULL; FcChar8 *s = NULL; FILE *fp; int retval = 0; retval++; basedir = fc_mkdtemp (template); if (!basedir) { fprintf (stderr, "%s: %s\n", template, strerror (errno)); goto bail; } retval++; sysroot = fc_mkdtemp (systempl); if (!sysroot) { fprintf (stderr, "%s: %s\n", systempl, strerror (errno)); goto bail; } fprintf (stderr, "D: Creating %s\n", basedir); mkdir_p (basedir); setenv ("HOME", basedir, 1); retval++; s = FcStrBuildFilename (basedir, ".fonts.conf", NULL); if (!s) goto bail; retval++; fprintf (stderr, "D: Creating %s\n", s); if ((fp = fopen (s, "wb")) == NULL) goto bail; fprintf (fp, "%s", s); fclose (fp); retval++; fprintf (stderr, "D: Checking file path\n"); ret = FcConfigRealFilename (cfg, "~/.fonts.conf"); if (!ret) goto bail; retval++; if (strcmp ((const char *)s, (const char *)ret) != 0) goto bail; free (ret); free (s); FcConfigDestroy (cfg); setenv ("FONTCONFIG_SYSROOT", sysroot, 1); cfg = FcConfigCreate(); fprintf (stderr, "D: Creating %s\n", sysroot); mkdir_p (sysroot); retval++; d = FcStrBuildFilename (sysroot, basedir, NULL); fprintf (stderr, "D: Creating %s\n", d); mkdir_p (d); free (d); s = FcStrBuildFilename (sysroot, basedir, ".fonts.conf", NULL); if (!s) goto bail; retval++; fprintf (stderr, "D: Creating %s\n", s); if ((fp = fopen (s, "wb")) == NULL) goto bail; fprintf (fp, "%s", s); fclose (fp); retval++; fprintf (stderr, "D: Checking file path\n"); ret = FcConfigRealFilename (cfg, "~/.fonts.conf"); if (!ret) goto bail; retval++; if (strcmp ((const char *)s, (const char *)ret) != 0) goto bail; retval = 0; bail: fprintf (stderr, "Cleaning up\n"); unlink_dirs (basedir); if (ret) free (ret); if (s) free (s); return retval; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-issue180.c000066400000000000000000000045101503113465200250530ustar00rootroot00000000000000/* * fontconfig/test/test-issue180.c * * Copyright © 2000 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include #include #include int main (void) { const FcChar8 *doc = (const FcChar8 *) "" "\n" " \n" "\n" ""; const FcChar8 *doc2 = (const FcChar8 *) "" "\n" " \n" "\n" ""; FcConfig *cfg = FcConfigCreate(); FcStrList *l; FcChar8 *p; if (!FcConfigParseAndLoadFromMemory (cfg, doc, FcTrue)) { fprintf (stderr, "Unable to load a config from memory.\n"); return 1; } l = FcConfigGetCacheDirs (cfg); if ((p = FcStrListNext (l)) != NULL) { fprintf (stderr, "There was one or more cachedirs\n"); return 1; } FcStrListDone (l); FcConfigDestroy (cfg); cfg = FcConfigCreate(); if (!FcConfigParseAndLoadFromMemory (cfg, doc2, FcTrue)) { fprintf (stderr, "Unable to load a config from memory (with prefix).\n"); return 1; } l = FcConfigGetCacheDirs (cfg); if ((p = FcStrListNext (l)) != NULL) { fprintf (stderr, "There was one or more cachedirs (with prefix)\n"); return 1; } FcStrListDone (l); FcConfigDestroy (cfg); return 0; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-migration.c000066400000000000000000000124611503113465200254670ustar00rootroot00000000000000/* * fontconfig/test/test-migration.c * * Copyright © 2000 Keith Packard * Copyright © 2013 Akira TAGOH * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #ifndef HAVE_STRUCT_DIRENT_D_TYPE # include # include #endif #include #ifdef HAVE_MKDTEMP # define fc_mkdtemp mkdtemp #else char * fc_mkdtemp (char *template) { if (!mktemp (template) || mkdir (template, 0700)) return NULL; return template; } #endif FcBool mkdir_p (const char *dir) { char *parent; FcBool ret; if (strlen (dir) == 0) return FcFalse; parent = (char *)FcStrDirname ((const FcChar8 *)dir); if (!parent) return FcFalse; if (access (parent, F_OK) == 0) ret = mkdir (dir, 0755) == 0 && chmod (dir, 0755) == 0; else if (access (parent, F_OK) == -1) ret = mkdir_p (parent) && (mkdir (dir, 0755) == 0) && chmod (dir, 0755) == 0; else ret = FcFalse; free (parent); return ret; } FcBool unlink_dirs (const char *dir) { DIR *d = opendir (dir); struct dirent *e; size_t len = strlen (dir); char *n = NULL; FcBool ret = FcTrue; #ifndef HAVE_STRUCT_DIRENT_D_TYPE struct stat statb; #endif if (!d) return FcFalse; while ((e = readdir (d)) != NULL) { size_t l; if (strcmp (e->d_name, ".") == 0 || strcmp (e->d_name, "..") == 0) continue; l = strlen (e->d_name) + 1; if (n) free (n); n = malloc (l + len + 1); strcpy (n, dir); n[len] = '/'; strcpy (&n[len + 1], e->d_name); #ifdef HAVE_STRUCT_DIRENT_D_TYPE if (e->d_type == DT_DIR) #else if (stat (n, &statb) == -1) { fprintf (stderr, "E: %s\n", n); ret = FcFalse; break; } if (S_ISDIR (statb.st_mode)) #endif { if (!unlink_dirs (n)) { fprintf (stderr, "E: %s\n", n); ret = FcFalse; break; } } else { if (unlink (n) == -1) { fprintf (stderr, "E: %s\n", n); ret = FcFalse; break; } } } if (n) free (n); closedir (d); if (rmdir (dir) == -1) { fprintf (stderr, "E: %s\n", dir); return FcFalse; } return ret; } int main (void) { char template[32] = "fontconfig-XXXXXXXX"; char *tmp = fc_mkdtemp (template); size_t len = strlen (tmp), xlen, dlen; char xdg[256], confd[256], fn[256], nfn[256], ud[256], nud[256]; int ret = -1; FILE *fp; char *content = ""; strcpy (xdg, tmp); strcpy (&xdg[len], "/.config"); setenv ("HOME", tmp, 1); setenv ("XDG_CONFIG_HOME", xdg, 1); xlen = strlen (xdg); strcpy (confd, xdg); strcpy (&confd[xlen], "/fontconfig"); dlen = strlen (confd); /* In case there are no configuration files nor directory */ FcInit(); if (access (confd, F_OK) == 0) { fprintf (stderr, "%s unexpectedly exists\n", confd); goto bail; } FcFini(); if (!unlink_dirs (tmp)) { fprintf (stderr, "Unable to clean up\n"); goto bail; } /* In case there are the user configuration file */ strcpy (fn, tmp); strcpy (&fn[len], "/.fonts.conf"); strcpy (nfn, confd); strcpy (&nfn[dlen], "/fonts.conf"); if (!mkdir_p (confd)) { fprintf (stderr, "Unable to create a config dir: %s\n", confd); goto bail; } if ((fp = fopen (fn, "wb")) == NULL) { fprintf (stderr, "Unable to create a config file: %s\n", fn); goto bail; } fwrite (content, sizeof (char), strlen (content), fp); fclose (fp); FcInit(); if (access (nfn, F_OK) != 0) { fprintf (stderr, "migration failed for %s\n", nfn); goto bail; } FcFini(); if (!unlink_dirs (tmp)) { fprintf (stderr, "Unable to clean up\n"); goto bail; } /* In case there are the user configuration dir */ strcpy (ud, tmp); strcpy (&ud[len], "/.fonts.conf.d"); strcpy (nud, confd); strcpy (&nud[dlen], "/conf.d"); if (!mkdir_p (ud)) { fprintf (stderr, "Unable to create a config dir: %s\n", ud); goto bail; } FcInit(); if (access (nud, F_OK) != 0) { fprintf (stderr, "migration failed for %s\n", nud); goto bail; } FcFini(); ret = 0; bail: unlink_dirs (tmp); return ret; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-mt-fccfg.c000066400000000000000000000027711503113465200251670ustar00rootroot00000000000000/* Copyright (C) 2025 fontconfig Authors */ /* SPDX-License-Identifier: HPND */ #include #include #define __USE_XOPEN #include #include #define NTHR 100 struct thr_arg_s { int thr_num; }; static void * run_test_in_thread (void *arg) { FcPattern *pat, *m; FcResult result; FcInit(); pat = FcNameParse ((const FcChar8 *)"sans-serif"); FcConfigSubstitute (NULL, pat, FcMatchPattern); FcConfigSetDefaultSubstitute (NULL, pat); m = FcFontMatch (NULL, pat, &result); FcPatternDestroy (pat); FcPatternDestroy (m); FcFini(); return NULL; } int test (void) { pthread_t threads[NTHR]; struct thr_arg_s thr_args[NTHR]; FcConfig *c1, *c2, *c3; int i, j; c1 = FcConfigGetCurrent(); for (i = 0; i < NTHR; i++) { int result; thr_args[i].thr_num = i; result = pthread_create (&threads[i], NULL, run_test_in_thread, (void *)&thr_args[i]); if (result != 0) { fprintf (stderr, "Cannot create thread %d\n", i); break; } } for (j = 0; j < i; j++) { pthread_join (threads[j], NULL); } FcFini(); c3 = FcConfigCreate(); /* To avoid allocation at the same place */ c2 = FcConfigGetCurrent(); FcConfigDestroy (c3); printf ("cur: %p\n", c2); if (c1 == c2) return 1; /* To make visible if we have any references */ putenv ("FC_DEBUG=16"); FcFini(); return 0; } int main (int argc, char **argv) { return test(); } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-name-parse.c000066400000000000000000000053211503113465200255230ustar00rootroot00000000000000#include #include static int test (const FcChar8 *query, const FcPattern *expect) { FcPattern *pat; int c = 0; c++; pat = FcNameParse (query); if (!pat) goto bail; c++; if (!FcPatternEqual (pat, expect)) goto bail; c = 0; bail: FcPatternDestroy (pat); return c; } #define BEGIN(x) \ (x) = FcPatternCreate(); \ c++; #define END(x) \ FcPatternDestroy (x); \ (x) = NULL int main (void) { FcPattern *expect; int c = 0, ret; BEGIN (expect) { FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"sans-serif"); if ((ret = test ((const FcChar8 *)"sans\\-serif", expect)) != 0) goto bail; } END (expect); BEGIN (expect) { FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"Foo"); FcPatternAddInteger (expect, FC_SIZE, 10); if ((ret = test ((const FcChar8 *)"Foo-10", expect)) != 0) goto bail; } END (expect); BEGIN (expect) { FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"Foo"); FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"Bar"); FcPatternAddInteger (expect, FC_SIZE, 10); if ((ret = test ((const FcChar8 *)"Foo,Bar-10", expect)) != 0) goto bail; } END (expect); BEGIN (expect) { FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"Foo"); FcPatternAddInteger (expect, FC_WEIGHT, FC_WEIGHT_MEDIUM); if ((ret = test ((const FcChar8 *)"Foo:weight=medium", expect)) != 0) goto bail; } END (expect); BEGIN (expect) { FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"Foo"); FcPatternAddInteger (expect, FC_WEIGHT, FC_WEIGHT_MEDIUM); if ((ret = test ((const FcChar8 *)"Foo:weight_medium", expect)) != 0) goto bail; } END (expect); BEGIN (expect) { FcPatternAddInteger (expect, FC_WEIGHT, FC_WEIGHT_MEDIUM); if ((ret = test ((const FcChar8 *)":medium", expect)) != 0) goto bail; } END (expect); BEGIN (expect) { FcPatternAddInteger (expect, FC_WEIGHT, FC_WEIGHT_NORMAL); if ((ret = test ((const FcChar8 *)":weight=normal", expect)) != 0) goto bail; } END (expect); BEGIN (expect) { FcPatternAddInteger (expect, FC_WIDTH, FC_WIDTH_NORMAL); if ((ret = test ((const FcChar8 *)":width=normal", expect)) != 0) goto bail; } END (expect); BEGIN (expect) { FcRange *r = FcRangeCreateDouble (FC_WEIGHT_MEDIUM, FC_WEIGHT_BOLD); FcPatternAddRange (expect, FC_WEIGHT, r); FcRangeDestroy (r); if ((ret = test ((const FcChar8 *)":weight=[medium bold]", expect)) != 0) goto bail; } END (expect); bail: if (expect) FcPatternDestroy (expect); return ret == 0 ? 0 : (c - 1) * 2 + ret; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-namedinstance.json000066400000000000000000000030231503113465200270300ustar00rootroot00000000000000{ "fonts": [ { "family": [ "Foo" ], "style": [ "Regular" ], "file": "/path/to/Foo-VF.otf", "index": 1, "namedinstance": false, "fontversion": 1 }, { "family": [ "Foo", "Foo Bold" ], "style": [ "Bold", "Regular" ], "file": "/path/to/Foo-VF.otf", "index": 65537, "namedinstance": true, "fontversion": 1 } ], "tests": [ { "method": "match", "query": { "family": "Foo", "style": "Bold", "namedinstance": false }, "result": { "family": "Foo", "style": "Regular", "file": "/path/to/Foo-VF.otf", "index": 1, "namedinstance": false, "fontversion": 1 } }, { "method": "match", "query": { "family": "Foo", "style": "Bold", "namedinstance": true }, "result": { "family": "Foo", "style": "Bold", "file": "/path/to/Foo-VF.otf", "index": 65537, "namedinstance": true, "fontversion": 1 } } ] } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-pthread.c000066400000000000000000000052601503113465200251240ustar00rootroot00000000000000/* * fontconfig/test/test-pthread.c * * Copyright © 2000 Keith Packard * Copyright © 2013 Raimund Steger * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the author(s) not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include #include #define NTHR 100 #define NTEST 100 struct thr_arg_s { int thr_num; }; static void test_match (int thr_num, int test_num) { FcPattern *pat; FcPattern *match; FcResult result; FcInit(); pat = FcNameParse ((const FcChar8 *)"New Century Schoolbook"); FcConfigSubstitute (0, pat, FcMatchPattern); FcConfigSetDefaultSubstitute (0, pat); match = FcFontMatch (0, pat, &result); FcPatternDestroy (pat); FcPatternDestroy (match); } static void * run_test_in_thread (void *arg) { struct thr_arg_s *thr_arg = (struct thr_arg_s *)arg; int thread_num = thr_arg->thr_num; int i = 0; for (; i < NTEST; i++) test_match (thread_num, i); printf ("Thread %d: done\n", thread_num); return NULL; } int main (int argc, char **argv) { pthread_t threads[NTHR]; struct thr_arg_s thr_args[NTHR]; int i, j; printf ("Creating %d threads\n", NTHR); for (i = 0; i < NTHR; i++) { int result; thr_args[i].thr_num = i; result = pthread_create (&threads[i], NULL, run_test_in_thread, (void *)&thr_args[i]); if (result != 0) { fprintf (stderr, "Cannot create thread %d\n", i); break; } } for (j = 0; j < i; j++) { pthread_join (threads[j], NULL); printf ("Joined thread %d\n", j); } FcFini(); return 0; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-ptrlist.c000066400000000000000000000014351503113465200251760ustar00rootroot00000000000000/* Copyright (C) 2025 fontconfig Authors */ /* SPDX-License-Identifier: HPND */ /* Internal API test case */ #include "fcint.h" #include int main (void) { FcPtrList *p; FcPtrListIter iter; int i, n; p = FcPtrListCreate (NULL); FcPtrListIterInitAtLast (p, &iter); FcPtrListIterAdd (p, &iter, (intptr_t *)0); FcPtrListIterAdd(p, &iter, (intptr_t *)1); FcPtrListIterAdd(p, &iter, (intptr_t *)2); FcPtrListIterAdd (p, &iter, (intptr_t *)3); FcPtrListIterInit (p, &iter); for (i = 0; FcPtrListIterIsValid (p, &iter); FcPtrListIterNext (p, &iter), i++) { n = (intptr_t)(void *)FcPtrListIterGetValue (p, &iter); if (i != n) { printf("mispatch the order: %d(%d)\n", i, n); return 1; } } FcPtrListDestroy (p); return 0; } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test-style-match.json000066400000000000000000000013671503113465200264620ustar00rootroot00000000000000{ "fonts": [ { "family": [ "Foo", "Foo Caption" ], "style": [ "Caption", "Regular" ], "file": "/path/to/Foo-Capt.ttf", "fontversion": 133365 }, { "family": "Foo", "style": "Regular", "file": "/path/to/Foo-Regular.ttf", "fontversion": 133365 } ], "tests": [ { "method": "match", "query": { "family": "Foo", "style": "Regular" }, "result": { "family": "Foo", "style": "Regular", "file": "/path/to/Foo-Regular.ttf", "fontversion": 133365 } } ] } fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test_fontations_ft_query.py000066400000000000000000000035271503113465200300730ustar00rootroot00000000000000#! /usr/bin/env python3 # Copyright (C) 2025 Google LLC. # SPDX-License-Identifier: HPND import os from pathlib import Path import pytest import re import requests import subprocess def builddir(): return Path(os.environ.get("builddir", Path(__file__).parent.parent)) def list_test_fonts(): font_files = [] for root, _, files in os.walk(builddir() / "testfonts"): for file in files: # Variable .ttc not supported yet. if file.endswith(".ttf"): font_files.append(os.path.join(root, file)) return font_files def run_fc_query(font_file, with_fontations=False): fc_query_path = builddir() / "fc-query" / "fc-query" env = os.environ.copy() if with_fontations: env["FC_FONTATIONS"] = "" result = subprocess.run( [fc_query_path, font_file], stdout=subprocess.PIPE, env=env, stderr=subprocess.PIPE, text=True, check=False, ) assert ( result.returncode == 0 ), f"fc-query failed for {font_file} with error: {result.stderr}" assert result.stdout, f"fc-query produced no output for {font_file}" return result @pytest.mark.parametrize("font_file", list_test_fonts()) def test_fontations_freetype_fcquery_equal(font_file): print(f"Testing with: {font_file}") # Example usage font_path = Path(font_file) if not font_path.exists(): pytest.skip(f"Font file not found: {font_file}") # Skip if file missing result_freetype = run_fc_query(font_file).stdout.strip().splitlines() result_fontations = ( run_fc_query(font_file, with_fontations=True) .stdout.strip() .splitlines() ) assert ( result_freetype == result_fontations ), f"FreeType and Fontations fc-query result must match. Fontations: {result_fontations}, FreeType: {result_freetype}" fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/test_issue431.py000066400000000000000000000023011503113465200253360ustar00rootroot00000000000000#! /usr/bin/env python3 # Copyright (C) 2024 fontconfig Authors # SPDX-License-Identifier: HPND import os import pytest import re import requests import shutil import subprocess from pathlib import Path def test_issue431(tmp_path): builddir = Path(os.environ.get("builddir", Path(__file__).parent.parent)) roboto_flex_font = ( builddir / "testfonts" / "roboto-flex-fonts/fonts/variable/RobotoFlex[GRAD,XOPQ,XTRA,YOPQ,YTAS,YTDE,YTFI,YTLC,YTUC,opsz,slnt,wdth,wght].ttf" ) if not roboto_flex_font.exists(): pytest.skip(f"Font file not found: {roboto_flex_font}") result = subprocess.run( [ builddir / "fc-query" / "fc-query", "-f", "%{family[0]}:%{index}:%{style[0]}:%{postscriptname}\n", roboto_flex_font, ], stdout=subprocess.PIPE, ) for line in result.stdout.decode("utf-8").splitlines(): family, index, style, psname = line.split(":") normstyle = re.sub("[\x04\\(\\)/<>\\[\\]{}\t\f\r\n ]", "", style) assert ( psname.split("-")[-1] == normstyle ), f"postscriptname `{psname}' does not contain style name `{normstyle}': index {index}" fontconfig-2.17.1-6d0a98982ec351c165c9224c8b7dbdfca3010e47/test/wrapper-script.sh000077500000000000000000000005631503113465200256760ustar00rootroot00000000000000#! /bin/bash CC=${CC:-gcc} case "$1" in *.exe) export WINEPATH=$(${CC} -print-sysroot)/mingw/bin fccwd=`pwd` cd $(IFS=:;for i in $PATH; do echo $i|grep mingw> /dev/null; [ $? -eq 0 ] && echo $i; done) if [ "x$(dirname $@)" = "x." ]; then /usr/bin/env wine $fccwd/$@ else /usr/bin/env wine $@ fi ;; *) $@ ;; esac