Skip to content

feat: add support for Ideographic Variation Sequences (IVS) in TrueTy…#1481

Closed
wang0331 wants to merge 1 commit intoLibrePDF:1.3-java8from
wang0331:1.3-java8
Closed

feat: add support for Ideographic Variation Sequences (IVS) in TrueTy…#1481
wang0331 wants to merge 1 commit intoLibrePDF:1.3-java8from
wang0331:1.3-java8

Conversation

@wang0331
Copy link
Contributor

  1. I have fixed the issues identified by SonarQube for the newly added code, and did not refactor the unchanged code. Please inform me whether I need to fix any reported errors (if any).
  2. Only errors in the DecryptAES256R6Test and FontTest classes occurred during the unit test execution. These errors are related to environmental configurations/information and not caused by code changes.

Description
This PR implements support for Ideographic Variation Sequences (IVS) in TrueType font rendering. IVS allows proper display of variant glyphs for CJK (Chinese, Japanese, Korean) characters, which is essential for correct typography in East Asian languages.

Key Changes
Added IVS lookup tables parsing in TrueType font processor
Implemented Unicode Variation Selector matching logic
Enhanced glyph substitution mechanism to handle IVS variants
Added fallback mechanisms for fonts without IVS support
Updated font metrics calculation for variant glyphs

Technical Details
Supports Unicode Variation Selectors
Implements gsub table lookup for uvs and non-default UVS features
Maintains backward compatibility with existing font rendering

Testing
✅ use template text and font export for IVS sequence detection
✅ Tested with known IVS-enabled fonts (e.g., Source Hei_MSCS)
✅ Verified rendering of CJK variant characters
✅ Confirmed backward compatibility with standard TrueType fonts

Impact
Enables correct display of CJK typographic variants
Improves PDF generation quality for East Asian documents
No breaking changes to existing API
Minimal performance impact (only activates when IVS sequences are present)
Related Issues
Closes #[issue-number-here]

Compatibility
✅ Fully backward compatible
✅ No changes to public API signatures
✅ Works with existing TrueType/OpenType fonts

Additional Notes
This implementation follows the Unicode Standard Annex #44 and OpenType specification for IVS handling. The feature only activates when both the font supports IVS and the text contains variation selector characters, ensuring minimal overhead for regular documents.

Your Name: oBo
Testing Instructions:
Use a font with IVS support (e.g., Source Han Sans)
Create PDF with CJK text containing variation selectors
Verify variant glyphs render correctly
Test with fonts without IVS support to confirm fallback behavior

@wang0331
Copy link
Contributor Author

@andreasrosdal

@sonarqubecloud
Copy link

@andreasrosdal
Copy link
Collaborator

The target branch needs to be master.

@wang0331
Copy link
Contributor Author

@andreasrosdal you mean merge my 1.3-java8 to target master?

@andreasrosdal
Copy link
Collaborator

The target branch of your pull request needs to be master.

@wang0331
Copy link
Contributor Author

The target branch of your pull request needs to be master.

I'm not quite clear about this:

If I want to submit code for Java 8 and Java 21 separately, how should I do it? Shouldn't I submit pull requests (PRs) to the corresponding Java version branches respectively?

@andreasrosdal
Copy link
Collaborator

image This needs to be with target master branch. The master branch is where your PR will be accepted.

@wang0331
Copy link
Contributor Author

image This needs to be with target master branch. The master branch is where your PR will be accepted.

I submit a new pr, thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants