Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

New Feature - Support loading Data URI files#3478

Open
jetrotal wants to merge 2 commits intoEasyRPG:master from
EasyRPG-NewFeatures:Jetrotal-DataURI
Open

New Feature - Support loading Data URI files #3478
jetrotal wants to merge 2 commits intoEasyRPG:master from
EasyRPG-NewFeatures:Jetrotal-DataURI

Conversation

@jetrotal
Copy link
Contributor

@jetrotal jetrotal commented Oct 8, 2025

This PR uses base64.hpp from https://github.com/tobiaslocker/base64/ under its MIT license.

Data URI is the most common format for encoding/decoding files as strings. This implementation uses Base64 encoder and can load files through commads such as:

@pic[11].show {
 "data:image/png;base64,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"
 .pos 160, 120 .center
}

This PR uses `base64.hpp` from https://github.com/tobiaslocker/base64/
under its MIT license.
Data URI is the most common format for encoding/decoding files as strings.
This implementation uses Base64 encoder and can load files through commads such as:
```cpp
@pic[11].show {
 "data:image/png;base64,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"
 .pos 160, 120 .center
}
```
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR adds support for loading Data URI files by implementing Base64 decoding functionality. It integrates a third-party base64 library from https://github.com/tobiaslocker/base64/ under MIT license to enable loading files encoded as data URIs in base64 format.

  • Adds base64 encoding/decoding library with comprehensive lookup tables for both little and big endian systems
  • Implements Data URI parsing logic to extract mime type and decode base64 payload
  • Integrates Data URI support into existing file loading infrastructure

Reviewed Changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 9 comments.

File Description
src/base64.h Adds complete base64 encoding/decoding library with endianness support
src/filefinder.cpp Implements Data URI parsing and integrates it into file finding/opening logic
Makefile.am Adds base64.h header to build system
CMakeLists.txt Adds base64.h header to CMake build system

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

Copy link
Member

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

Reviewers

Copilot code review Copilot Copilot left review comments

At least 2 approving reviews are required to merge this pull request.

Assignees

No one assigned

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Comments

AltStyle によって変換されたページ (->オリジナル) /