diff options
-rw-r--r-- | src/local.mk | 3 | ||||
-rw-r--r-- | src/text.c | 91 | ||||
-rw-r--r-- | src/text.h | 39 |
3 files changed, 132 insertions, 1 deletions
diff --git a/src/local.mk b/src/local.mk index f6a381d..397a9a2 100644 --- a/src/local.mk +++ b/src/local.mk @@ -1,3 +1,4 @@ fbcon2png_SOURCES += \ %reldir%/image.c \ - %reldir%/main.c + %reldir%/main.c \ + %reldir%/text.c diff --git a/src/text.c b/src/text.c new file mode 100644 index 0000000..68d86eb --- /dev/null +++ b/src/text.c @@ -0,0 +1,91 @@ +/* + * Text layout and parsing functions + * + * Copyright (C) 2019 Patrick McDermott + * + * This file is part of fbcon2png. + * + * fbcon2png 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; either version 2 of the License, or + * (at your option) any later version. + * + * fbcon2png 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 fbcon2png. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "text.h" + +#include <stdlib.h> + +#define MAX(a, b) (((a) > (b)) ? (a) : (b)) + +struct text { + const char *string; + int width; + int height; +}; + +struct text * +text_new(const char *string) +{ + struct text *text; + int width; + + if (!string) { + return NULL; + } + text = calloc(1, sizeof(*text)); + if (!text) { + return NULL; + } + + text->string = string; + + width = 0; + while (string && *string) { + if (*string == 0x1B && *(string + 1) == '[') { /* CSI */ + string += 2; + for (; *string >= 0x30 && *string <= 0x3F; ++string); + for (; *string >= 0x20 && *string <= 0x2F; ++string); + if (*string >= 0x40 && *string <= 0x7E) { + ++string; + } + } else if (*string == '\n') { + text->width = MAX(text->width, width); + ++text->height; + } else { + ++width; + } + } + + return text; +} + +int +text_get_width(struct text *text) +{ + return text->width; +} + +int +text_get_height(struct text *text) +{ + return text->height; +} + +struct text * +text_destroy(struct text **text_p) +{ + struct text *text; + + text = *text_p; + + free(text); + return text = NULL; +} diff --git a/src/text.h b/src/text.h new file mode 100644 index 0000000..0671bb6 --- /dev/null +++ b/src/text.h @@ -0,0 +1,39 @@ +/* + * Text layout and parsing functions + * + * Copyright (C) 2019 Patrick McDermott + * + * This file is part of fbcon2png. + * + * fbcon2png 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; either version 2 of the License, or + * (at your option) any later version. + * + * fbcon2png 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 fbcon2png. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef TEXT_H +#define TEXT_H + +struct text; + +struct text * +text_new(const char *string); + +int +text_get_width(struct text *text) __attribute__((pure)); + +int +text_get_height(struct text *text) __attribute__((pure)); + +struct text * +text_destroy(struct text **text_p); + +#endif /* TEXT_H */ |