Actually call hb_subset
This commit is contained in:
parent
7b01761ade
commit
edcd3b80e9
|
@ -28,6 +28,7 @@
|
|||
#include <unistd.h>
|
||||
|
||||
#include "main-font-text.hh"
|
||||
#include "hb-subset.h"
|
||||
|
||||
/*
|
||||
* Command line interface to the harfbuzz font subsetter.
|
||||
|
@ -51,28 +52,44 @@ struct subset_consumer_t
|
|||
{
|
||||
}
|
||||
|
||||
hb_bool_t
|
||||
write_file (const char *output_file, hb_blob_t *blob) {
|
||||
unsigned int data_length;
|
||||
const char* data = hb_blob_get_data (blob, &data_length);
|
||||
|
||||
int fd_out = open(output_file, O_CREAT | O_WRONLY, S_IRWXU);
|
||||
if (fd_out == -1) {
|
||||
fprintf(stderr, "Unable to open output file");
|
||||
return false;
|
||||
}
|
||||
ssize_t bytes_written = write(fd_out, data, data_length);
|
||||
if (bytes_written == -1) {
|
||||
fprintf(stderr, "Unable to write output file\n");
|
||||
return false;
|
||||
}
|
||||
if (bytes_written != data_length) {
|
||||
fprintf(stderr, "Expected %u bytes written, got %ld\n", data_length,
|
||||
bytes_written);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void finish (const font_options_t *font_opts)
|
||||
{
|
||||
hb_face_t *face = hb_font_get_face (font);
|
||||
hb_blob_t *result = hb_face_reference_blob (face);
|
||||
unsigned int data_length;
|
||||
const char* data = hb_blob_get_data (result, &data_length);
|
||||
// TODO(Q1) check for errors from creates and such
|
||||
hb_subset_profile_t *subset_profile = hb_subset_profile_create();
|
||||
hb_subset_input_t *subset_input = hb_subset_input_create();
|
||||
hb_face_t *face = hb_font_get_face (font);
|
||||
hb_subset_face_t *subset_face = hb_subset_face_create(face);
|
||||
|
||||
int fd_out = open(options.output_file, O_CREAT | O_WRONLY, S_IRWXU);
|
||||
if (fd_out != -1) {
|
||||
ssize_t bytes_written = write(fd_out, data, data_length);
|
||||
if (bytes_written == -1) {
|
||||
fprintf(stderr, "Unable to write output file");
|
||||
failed = true;
|
||||
} else if (bytes_written != data_length) {
|
||||
fprintf(stderr, "Wrong number of bytes written");
|
||||
failed = true;
|
||||
}
|
||||
} else {
|
||||
fprintf(stderr, "Unable to open output file");
|
||||
failed = true;
|
||||
}
|
||||
hb_blob_t *result = nullptr;
|
||||
failed = !(hb_subset(subset_profile, subset_input, subset_face, &result)
|
||||
&& write_file(options.output_file, result));
|
||||
|
||||
hb_subset_profile_destroy (subset_profile);
|
||||
hb_subset_input_destroy (subset_input);
|
||||
hb_subset_face_destroy (subset_face);
|
||||
hb_blob_destroy (result);
|
||||
hb_font_destroy (font);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue