Start to sketch APIs for subsetting
This commit is contained in:
parent
fcb8be1a38
commit
9ccb8366f6
|
@ -27,7 +27,9 @@ HBNONPCLIBS =
|
|||
HBDEPS =
|
||||
HBSOURCES = $(HB_BASE_sources)
|
||||
HBSOURCES += $(HB_BASE_RAGEL_GENERATED_sources)
|
||||
HBSOURCES += $(HB_SUBSET_sources)
|
||||
HBHEADERS = $(HB_BASE_headers)
|
||||
HBHEADERS += $(HB_SUBSET_headers)
|
||||
HBNODISTHEADERS = $(HB_NODIST_headers)
|
||||
|
||||
if HAVE_OT
|
||||
|
|
|
@ -181,6 +181,10 @@ HB_UCDN_sources = hb-ucdn.cc
|
|||
HB_ICU_sources = hb-icu.cc
|
||||
HB_ICU_headers = hb-icu.h
|
||||
|
||||
# Sources for libharfbuzz-subset
|
||||
HB_SUBSET_sources = hb-subset.cc
|
||||
HB_SUBSET_headers = hb-subset.h
|
||||
|
||||
HB_GOBJECT_sources = hb-gobject-structs.cc
|
||||
HB_GOBJECT_STRUCTS_headers = hb-gobject-structs.h
|
||||
HB_GOBJECT_headers = hb-gobject.h $(HB_GOBJECT_STRUCTS_headers)
|
||||
|
|
|
@ -0,0 +1,88 @@
|
|||
/*
|
||||
* Copyright © 2018 Google
|
||||
*
|
||||
* This is part of HarfBuzz, a text shaping library.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* Google Author(s): Rod Sheeter
|
||||
*/
|
||||
|
||||
#ifndef HB_H_IN
|
||||
#error "Include <hb.h> instead."
|
||||
#endif
|
||||
|
||||
#ifndef HB_SUBSET_H
|
||||
#define HB_SUBSET_H
|
||||
|
||||
#include "hb-common.h"
|
||||
#include "hb-face.h"
|
||||
|
||||
HB_BEGIN_DECLS
|
||||
|
||||
/*
|
||||
* hb_subset_profile_t
|
||||
* Things that change based on target environment, e.g. OS
|
||||
*/
|
||||
|
||||
typedef struct hb_subset_profile_t hb_subset_profile_t;
|
||||
|
||||
HB_EXTERN hb_subset_profile_t *
|
||||
hb_subset_profile_create();
|
||||
|
||||
HB_EXTERN void
|
||||
hb_subset_profile_destroy(hb_subset_profile_t *profile);
|
||||
|
||||
/*
|
||||
* hb_subset_input_t
|
||||
* Things that change based on the input. Characters to keep, etc.
|
||||
*/
|
||||
|
||||
typedef struct hb_subset_input_t hb_subset_input_t;
|
||||
|
||||
HB_EXTERN hb_subset_input_t *
|
||||
hb_subset_input_create();
|
||||
|
||||
HB_EXTERN void
|
||||
hb_subset_input_destroy(hb_subset_input_t *subset_input);
|
||||
|
||||
/*
|
||||
* hb_subset_face_t
|
||||
* Reusable subset-ready plan for a given face. Threadsafe for multiple
|
||||
* concurrent subset operations.
|
||||
*/
|
||||
|
||||
typedef struct hb_subset_face_t hb_subset_face_t;
|
||||
|
||||
HB_EXTERN hb_subset_face_t *
|
||||
hb_subset_face_create(hb_face_t *face);
|
||||
|
||||
HB_EXTERN void
|
||||
hb_subset_face_destroy(hb_subset_face_t *face);
|
||||
|
||||
|
||||
HB_EXTERN hb_bool_t
|
||||
hb_subset(hb_subset_profile_t *profile,
|
||||
hb_subset_input_t *input,
|
||||
hb_subset_face_t *face
|
||||
hb_blob_t *result /* OUT */);
|
||||
|
||||
HB_END_DECLS
|
||||
|
||||
#endif /* HB_SUBSET_H */
|
|
@ -46,6 +46,9 @@ endif # HAVE_FREETYPE
|
|||
hb_shape_SOURCES = $(HB_SHAPE_sources)
|
||||
bin_PROGRAMS += hb-shape
|
||||
|
||||
hb_subset_SOURCES = $(HB_SUBSET_sources)
|
||||
bin_PROGRAMS += hb-subset
|
||||
|
||||
if HAVE_OT
|
||||
hb_ot_shape_closure_SOURCES = $(HB_OT_SHAPE_CLOSURE_sources)
|
||||
bin_PROGRAMS += hb-ot-shape-closure
|
||||
|
|
|
@ -28,3 +28,7 @@ HB_OT_SHAPE_CLOSURE_sources = \
|
|||
options.hh \
|
||||
main-font-text.hh \
|
||||
$(NULL)
|
||||
|
||||
HB_SUBSET_sources = \
|
||||
hb-subset.cc \
|
||||
$(NULL)
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/mman.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "hb-private.hh"
|
||||
#include "hb-blob.h"
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
int exit_code = 0;
|
||||
int fd = open("/tmp/Lobster-Regular.ttf", O_RDONLY);
|
||||
if (fd == -1) {
|
||||
perror("Unable to open file");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
void *mapped_file = MAP_FAILED;
|
||||
char *raw_font = nullptr;
|
||||
|
||||
struct stat stat;
|
||||
if (fstat(fd, &stat) != -1) {
|
||||
printf("File is %zu bytes\n", stat.st_size);
|
||||
|
||||
void *mapped_file = mmap(NULL, stat.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
|
||||
if (mapped_file != MAP_FAILED) {
|
||||
raw_font = static_cast<char*>(mapped_file);
|
||||
} else {
|
||||
perror("Failed to map file");
|
||||
}
|
||||
} else {
|
||||
perror("Unable to fstat");
|
||||
}
|
||||
|
||||
if (raw_font) {
|
||||
printf("Mapped file\n");
|
||||
for (int i = 0; i < 4; i++) {
|
||||
printf("%02x", *(raw_font + i));
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
hb_blob_t *font_blob = hb_blob_create(raw_font, stat.st_size, HB_MEMORY_MODE_READONLY, nullptr, nullptr);
|
||||
}
|
||||
|
||||
if (mapped_file != MAP_FAILED) {
|
||||
if (munmap(mapped_file, stat.st_size) == -1) {
|
||||
perror("Unable to unmap file");
|
||||
exit_code = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (close(fd) == -1) {
|
||||
perror("Unable to close file");
|
||||
exit_code = 1;
|
||||
}
|
||||
return exit_code;
|
||||
}
|
Loading…
Reference in New Issue