Add tool to generate unicode font for greek and hiragana (jp)
This commit is contained in:
parent
01d67bcfcc
commit
ee2ae58ed1
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -1,6 +1,3 @@
|
|||||||
[submodule "tools/font8x8"]
|
|
||||||
path = tools/font8x8
|
|
||||||
url = https://github.com/dhepper/font8x8
|
|
||||||
[submodule "tools/8x8fonts/font8x8"]
|
[submodule "tools/8x8fonts/font8x8"]
|
||||||
path = tools/8x8fonts/font8x8
|
path = tools/8x8fonts/font8x8
|
||||||
url = https://github.com/dhepper/font8x8
|
url = https://github.com/dhepper/font8x8
|
||||||
|
|||||||
2
tools/8x8fonts/.gitignore
vendored
Normal file
2
tools/8x8fonts/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
*.o
|
||||||
|
generate_png_fonts
|
||||||
43
tools/8x8fonts/Makefile
Normal file
43
tools/8x8fonts/Makefile
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# There is no uname under windows, but we can guess we are there with the COMSPEC env.var
|
||||||
|
# Windows specific
|
||||||
|
ifdef ComSpec
|
||||||
|
# sometimes, it is ComSpec, sometimes it is COMSPEC
|
||||||
|
COMSPEC = $(ComSpec)
|
||||||
|
endif
|
||||||
|
ifdef COMSPEC
|
||||||
|
WIN32 = 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
PKG_CONFIG = $(shell which pkg-config)
|
||||||
|
MKDIR = mkdir -p
|
||||||
|
|
||||||
|
ifeq ($(WIN32),1)
|
||||||
|
PKG_CONFIG := PKG_CONFIG_PATH=../../3rdparty/usr-win32/lib/pkgconfig $(PKG_CONFIG)
|
||||||
|
endif
|
||||||
|
|
||||||
|
CFLAGS = -Wall
|
||||||
|
CFLAGS += $(shell $(PKG_CONFIG) --cflags libpng)
|
||||||
|
LDFLAGS += $(shell $(PKG_CONFIG) --libs-only-L libpng)
|
||||||
|
LDLIBS += $(shell $(PKG_CONFIG) --libs-only-l libpng)
|
||||||
|
|
||||||
|
FONTDIR = ../../share/grafx2/skins/
|
||||||
|
FONTFILES = unicode_0390-03C9.png unicode_3040-309F.png
|
||||||
|
FONTPATHS = $(addprefix $(FONTDIR), $(FONTFILES))
|
||||||
|
|
||||||
|
BINDIR = ../../bin
|
||||||
|
BIN = $(BINDIR)/generate_png_fonts
|
||||||
|
|
||||||
|
.PHONY: all clean
|
||||||
|
|
||||||
|
all: $(FONTPATHS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) *.o $(BIN)
|
||||||
|
$(RM) $(FONTPATHS)
|
||||||
|
|
||||||
|
$(BIN): generate_png_fonts.o
|
||||||
|
$(MKDIR) $(BINDIR)
|
||||||
|
$(CC) $(LDFLAGS) -o $@ $^ $(LOADLIBES) $(LDLIBS)
|
||||||
|
|
||||||
|
$(FONTPATHS): $(BIN)
|
||||||
|
$(BIN) $(FONTDIR)
|
||||||
142
tools/8x8fonts/generate_png_fonts.c
Normal file
142
tools/8x8fonts/generate_png_fonts.c
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
/* vim:expandtab:ts=2 sw=2:
|
||||||
|
*/
|
||||||
|
/* Grafx2 - The Ultimate 256-color bitmap paint program
|
||||||
|
|
||||||
|
Copyright 2019 Thomas Bernard
|
||||||
|
|
||||||
|
Grafx2 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; version 2
|
||||||
|
of the License.
|
||||||
|
|
||||||
|
Grafx2 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 Grafx2; if not, see <http://www.gnu.org/licenses/>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <png.h>
|
||||||
|
#include <zlib.h>
|
||||||
|
|
||||||
|
#include "font8x8/font8x8_greek.h"
|
||||||
|
#include "font8x8/font8x8_hiragana.h"
|
||||||
|
|
||||||
|
#define GENERATE_PNG(font, start) generate_png_font(directory, (const char *)font, start, sizeof(font) / 8)
|
||||||
|
|
||||||
|
int generate_png_font(const char * directory, const char * font, unsigned int start, size_t count)
|
||||||
|
{
|
||||||
|
char filename[256];
|
||||||
|
FILE * fp;
|
||||||
|
png_structp png;
|
||||||
|
png_infop info;
|
||||||
|
unsigned int width = 256; // 32 chars
|
||||||
|
unsigned int height;
|
||||||
|
unsigned int end = start + count - 1;
|
||||||
|
unsigned char * pixels;
|
||||||
|
unsigned int c, l, b, x, y;
|
||||||
|
png_color palette[2] = { { 0, 0, 192}, {255, 255, 255} };
|
||||||
|
|
||||||
|
snprintf(filename, sizeof(filename), "%sunicode_%04X-%04X.png",
|
||||||
|
directory, start, end);
|
||||||
|
printf("writing %s\n", filename);
|
||||||
|
height = 8 * ((count + 31) >> 5);
|
||||||
|
printf(" size : %dx%d\n", width, height);
|
||||||
|
pixels = malloc(width * height);
|
||||||
|
if (pixels == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Failed to allocate %d bytes\n", width * height);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
memset(pixels, 0, width * height);
|
||||||
|
|
||||||
|
// generate the bitmap
|
||||||
|
for (c = 0; c < count; c++)
|
||||||
|
{
|
||||||
|
x = (c & 31) << 3;
|
||||||
|
y = (c >> 5) << 3;
|
||||||
|
for (l = 0; l < 8; l++)
|
||||||
|
{
|
||||||
|
int data = font[8*c + l];
|
||||||
|
for (b = 0; b < 8; b++)
|
||||||
|
{
|
||||||
|
if (data & 1)
|
||||||
|
pixels[((y + l) << 8) + x + b] = 1;
|
||||||
|
data >>= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// write to file
|
||||||
|
fp = fopen(filename, "wb");
|
||||||
|
if (fp == NULL)
|
||||||
|
{
|
||||||
|
free(pixels);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
png = png_create_write_struct(PNG_LIBPNG_VER_STRING,
|
||||||
|
(png_voidp)NULL/*user_error_ptr*/,
|
||||||
|
/*user_error_fn*/NULL, /*user_warning_fn*/NULL);
|
||||||
|
if (png == NULL)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
info = png_create_info_struct(png);
|
||||||
|
if (info == NULL)
|
||||||
|
{
|
||||||
|
png_destroy_write_struct(&png, NULL);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (setjmp(png_jmpbuf(png)))
|
||||||
|
{
|
||||||
|
png_destroy_write_struct(&png, &info);
|
||||||
|
fclose(fp);
|
||||||
|
free(pixels);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
png_init_io(png, fp);
|
||||||
|
/* Set the zlib compression level */
|
||||||
|
png_set_compression_level(png, Z_BEST_COMPRESSION);
|
||||||
|
/* Set PNG header */
|
||||||
|
png_set_IHDR(png, info, width, height, 8, PNG_COLOR_TYPE_PALETTE,
|
||||||
|
PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT,
|
||||||
|
PNG_FILTER_TYPE_DEFAULT);
|
||||||
|
/* Set palette */
|
||||||
|
png_set_PLTE(png, info, palette, 2);
|
||||||
|
|
||||||
|
png_write_info(png, info);
|
||||||
|
for (y = 0; y < height; y++)
|
||||||
|
png_write_row(png, pixels + (y << 8));
|
||||||
|
png_write_end(png, info);
|
||||||
|
//png_write_flush(png);
|
||||||
|
|
||||||
|
png_destroy_write_struct(&png, &info);
|
||||||
|
fclose(fp);
|
||||||
|
free(pixels);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char * * argv)
|
||||||
|
{
|
||||||
|
const char * directory = "./";
|
||||||
|
int r;
|
||||||
|
|
||||||
|
printf("GrafX2 unicode font generator\n");
|
||||||
|
if (argc > 1)
|
||||||
|
directory = argv[1];
|
||||||
|
|
||||||
|
r = GENERATE_PNG(font8x8_greek, 0x0390);
|
||||||
|
if (r != 0)
|
||||||
|
return r;
|
||||||
|
r = GENERATE_PNG(font8x8_hiragana, 0x3040);
|
||||||
|
if (r != 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user