first commit

This commit is contained in:
ZennDev1337 2024-01-08 09:23:06 +01:00
commit 8c39952965
1956 changed files with 1460685 additions and 0 deletions

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,21 @@
# Marlin fonts
## Author and license
The original author of the following font files is [A. Hardtung](https://github.com/AnHardt).
Any copyright is dedicated to the Public Domain.
https://creativecommons.org/publicdomain/zero/1.0/
- HD44780_C.fon ([fe2bd23](https://github.com/MarlinFirmware/Marlin/commit/fe2bd237d556439499dfdee852c1550c7a16430a))
- HD44780_J.fon ([fe2bd23](https://github.com/MarlinFirmware/Marlin/commit/fe2bd237d556439499dfdee852c1550c7a16430a))
- HD44780_W.fon ([fe2bd23](https://github.com/MarlinFirmware/Marlin/commit/fe2bd237d556439499dfdee852c1550c7a16430a))
- ISO10646-1.fon ([be79235](https://github.com/MarlinFirmware/Marlin/commit/be79235ef255a5c42fd385820447ec351f23b9b1))
- ISO10646_5_Cyrillic.fon ([fe2bd23](https://github.com/MarlinFirmware/Marlin/commit/fe2bd237d556439499dfdee852c1550c7a16430a))
- ISO10646_CN.fon ([6b1b718](https://github.com/MarlinFirmware/Marlin/commit/6b1b71837c98ceab55db7433357a13cd829d1ede))
- ISO10646_Kana.fon ([fe2bd23](https://github.com/MarlinFirmware/Marlin/commit/fe2bd237d556439499dfdee852c1550c7a16430a))
- Marlin_symbols.fon ([fe2bd23](https://github.com/MarlinFirmware/Marlin/commit/fe2bd237d556439499dfdee852c1550c7a16430a))
Additional changes to the original font files distributed with Marlin are copyrighted under the terms of the [GPLv3](https://www.gnu.org/licenses/gpl-3.0.txt) license.
## Documentation
For detailed information about adding new fonts to Marlin [see this article](https://marlinfw.org/docs/development/fonts.html).

View file

@ -0,0 +1,140 @@
#!/usr/bin/env bash
#####################################################################
# genallfont.sh for Marlin
#
# This script generates font data for language headers
#
# Copyright 2015-2018 Yunhui Fu <yhfudev@gmail.com>
# License: GPL/BSD
#####################################################################
my_getpath() {
local PARAM_DN="$1"
shift
#readlink -f
local DN="${PARAM_DN}"
local FN=
if [ ! -d "${DN}" ]; then
FN=$(basename "${DN}")
DN=$(dirname "${DN}")
fi
cd "${DN}" > /dev/null 2>&1
DN=$(pwd)
cd - > /dev/null 2>&1
echo -n "${DN}"
[[ -z "$FN" ]] || echo -n "/${FN}"
}
#DN_EXEC=`echo "$0" | ${EXEC_AWK} -F/ '{b=$1; for (i=2; i < NF; i ++) {b=b "/" $(i)}; print b}'`
DN_EXEC=$(dirname $(my_getpath "$0") )
EXEC_WXGGEN="${DN_EXEC}/uxggenpages.sh"
#
# Locate the bdf2u8g command
#
EXEC_BDF2U8G=`which bdf2u8g`
[ -x "${EXEC_BDF2U8G}" ] || EXEC_BDF2U8G="${DN_EXEC}/bdf2u8g"
[ -x "${EXEC_BDF2U8G}" ] || EXEC_BDF2U8G="${PWD}/bdf2u8g"
[ -x "${EXEC_BDF2U8G}" ] || { EOL=$'\n' ; echo "ERR: Can't find bdf2u8g!${EOL}See uxggenpages.md for bdf2u8g build instructions." >&2 ; exit 1; }
#
# Get language arguments
#
LANG_ARG="$@"
#
# Use 6x12 combined font data for Western languages
#
FN_FONT="${DN_EXEC}/marlin-6x12-3.bdf"
#
# Change to working directory 'Marlin'
#
OLDWD=`pwd`
[[ $(basename "$OLDWD") != 'Marlin' && -d "Marlin" ]] && cd Marlin
[[ -f "Configuration.h" ]] || { echo -n "cd to the 'Marlin' folder to run " ; basename $0 ; exit 1; }
#
# Compile the 'genpages' command in-place
#
(cd ${DN_EXEC}; cc -o genpages genpages.c getline.c)
#
# By default loop through all languages
#
LANGS_DEFAULT="an bg ca cz da de el el_gr en es eu fi fr gl hr hu it jp_kana ko_KR nl pl pt pt_br ro ru sk sv tr uk vi zh_CN zh_TW test"
#
# Generate data for language list MARLIN_LANGS or all if not provided
#
for LANG in ${LANG_ARG:=$LANGS_DEFAULT} ; do
echo "Generating Marlin language data for '${LANG}'" >&2
case "$LANG" in
zh_* ) FONTFILE="wenquanyi_12pt" ;;
ko_* ) FONTFILE="${DN_EXEC}/NanumGothic.bdf" ;;
* ) FONTFILE="${DN_EXEC}/marlin-6x12-3.bdf" ;;
esac
DN_WORK=`mktemp -d`
cp Configuration.h ${DN_WORK}/
cp src/lcd/language/language_${LANG}.h ${DN_WORK}/
cd "${DN_WORK}"
${EXEC_WXGGEN} "${FONTFILE}"
sed -i fontutf8-data.h -e 's|fonts//|fonts/|g' -e 's|fonts//|fonts/|g' -e 's|[/0-9a-zA-Z_\-]*buildroot/share/fonts|buildroot/share/fonts|' 2>/dev/null
cd - >/dev/null
mv ${DN_WORK}/fontutf8-data.h src/lcd/dogm/fontdata/langdata_${LANG}.h
rm -rf ${DN_WORK}
done
#
# Generate default ASCII font (char range 0-255):
# Marlin/src/lcd/dogm/fontdata/fontdata_ISO10646_1.h
#
#if [ "${MARLIN_LANGS}" == "${LANGS_DEFAULT}" ]; then
if [ 1 = 1 ]; then
DN_WORK=`mktemp -d`
cd ${DN_WORK}
${EXEC_BDF2U8G} -b 1 -e 127 ${FN_FONT} ISO10646_1_5x7 tmp1.h >/dev/null
${EXEC_BDF2U8G} -b 1 -e 255 ${FN_FONT} ISO10646_1_5x7 tmp2.h >/dev/null
TMP1=$(cat tmp1.h)
TMP2=$(cat tmp2.h)
cd - >/dev/null
rm -rf ${DN_WORK}
cat <<EOF >src/lcd/dogm/fontdata/fontdata_ISO10646_1.h
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* This program 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 3 of the License, or
* (at your option) any later version.
*
* This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#include <U8glib.h>
#if defined(__AVR__) && ENABLED(NOT_EXTENDED_ISO10646_1_5X7)
// reduced font (only symbols 1 - 127) - saves about 1278 bytes of FLASH
$TMP1
#else
// extended (original) font (symbols 1 - 255)
$TMP2
#endif
EOF
fi
(cd ${DN_EXEC}; rm genpages)
cd "$OLDWD"

View file

@ -0,0 +1,193 @@
/**
* @file genpages.c
* @brief generate required font page files
* @author Yunhui Fu (yhfudev@gmail.com)
* @version 1.0
* @date 2015-02-19
* @copyright Yunhui Fu (2015)
*/
#include <stdio.h>
#include <stdint.h> /* uint8_t */
#include <stdlib.h> /* size_t */
#include <string.h>
#include <assert.h>
#include "getline.h"
wchar_t get_val_utf82uni(uint8_t *pstart) {
size_t cntleft;
wchar_t retval = 0;
if (0 == (0x80 & *pstart)) return *pstart;
if (((*pstart & 0xE0) ^ 0xC0) == 0) {
cntleft = 1;
retval = *pstart & ~0xE0;
}
else if (((*pstart & 0xF0) ^ 0xE0) == 0) {
cntleft = 2;
retval = *pstart & ~0xF0;
}
else if (((*pstart & 0xF8) ^ 0xF0) == 0) {
cntleft = 3;
retval = *pstart & ~0xF8;
}
else if (((*pstart & 0xFC) ^ 0xF8) == 0) {
cntleft = 4;
retval = *pstart & ~0xFC;
}
else if (((*pstart & 0xFE) ^ 0xFC) == 0) {
cntleft = 5;
retval = *pstart & ~0xFE;
}
else {
/* encoding error */
cntleft = 0;
retval = 0;
}
pstart++;
for (; cntleft > 0; cntleft --) {
retval <<= 6;
retval |= *pstart & 0x3F;
pstart++;
}
return retval;
}
/**
* @brief UTF-8 Unicode (wchar_t)
*
* @param pstart : UTF-8
* @param pval : Unicode
*
* @return UTF-8
*
* UTF-8 Unicode (wchar_t)
*/
uint8_t* get_utf8_value(uint8_t *pstart, wchar_t *pval) {
uint32_t val = 0;
uint8_t *p = pstart;
/*size_t maxlen = strlen(pstart);*/
assert(NULL != pstart);
#define NEXT_6_BITS() do{ val <<= 6; p++; val |= (*p & 0x3F); }while(0)
if (0 == (0x80 & *p)) {
val = (size_t)*p;
p++;
}
else if (0xC0 == (0xE0 & *p)) {
val = *p & 0x1F;
NEXT_6_BITS();
p++;
assert((wchar_t)val == get_val_utf82uni(pstart));
}
else if (0xE0 == (0xF0 & *p)) {
val = *p & 0x0F;
NEXT_6_BITS();
NEXT_6_BITS();
p++;
assert((wchar_t)val == get_val_utf82uni(pstart));
}
else if (0xF0 == (0xF8 & *p)) {
val = *p & 0x07;
NEXT_6_BITS();
NEXT_6_BITS();
NEXT_6_BITS();
p++;
assert((wchar_t)val == get_val_utf82uni(pstart));
}
else if (0xF8 == (0xFC & *p)) {
val = *p & 0x03;
NEXT_6_BITS();
NEXT_6_BITS();
NEXT_6_BITS();
NEXT_6_BITS();
p++;
assert((wchar_t)val == get_val_utf82uni(pstart));
}
else if (0xFC == (0xFE & *p)) {
val = *p & 0x01;
NEXT_6_BITS();
NEXT_6_BITS();
NEXT_6_BITS();
NEXT_6_BITS();
NEXT_6_BITS();
p++;
assert((wchar_t)val == get_val_utf82uni(pstart));
}
else if (0x80 == (0xC0 & *p)) {
/* error? */
for (; 0x80 == (0xC0 & *p); p++);
}
else {
/* error */
for (; ((0xFE & *p) > 0xFC); p++);
}
/*
if (val == 0) {
p = NULL;
*/
/*
}
else if (pstart + maxlen < p) {
p = pstart;
if (pval) *pval = 0;
}
*/
if (pval) *pval = val;
return p;
}
void usage(char *progname) {
fprintf(stderr, "usage: %s\n", progname);
fprintf(stderr, " read data from stdin\n");
}
void utf8_parse(const char *msg, unsigned int len) {
uint8_t *pend = NULL;
uint8_t *p;
uint8_t *pre;
wchar_t val;
int page;
pend = (uint8_t *)msg + len;
for (pre = (uint8_t *)msg; pre < pend;) {
val = 0;
p = get_utf8_value(pre, &val);
if (NULL == p) break;
page = val / 128;
if (val >= 256) {
fprintf(stdout, "%d %d ", page, (val % 128));
for (; pre < p; pre++) fprintf(stdout, "%c", *pre);
fprintf(stdout, "\n");
}
pre = p;
}
}
int load_file(FILE *fp) {
char * buffer = NULL;
size_t szbuf = 0;
szbuf = 10000;
buffer = (char*)malloc(szbuf);
if (NULL == buffer) return -1;
//pos = ftell (fp);
while (getline( &buffer, &szbuf, fp ) > 0)
utf8_parse((const char*)buffer, (unsigned int)strlen ((char *)buffer));
free(buffer);
return 0;
}
int main(int argc, char * argv[]) {
if (argc > 1) {
usage(argv[0]);
exit(1);
}
load_file(stdin);
}

View file

@ -0,0 +1,35 @@
#!/usr/bin/env bash
#####################################################################
# get-bdf2u8g.sh for Marlin
#
# This script downloads, patches, and builds bdf2u8g
# License: CC-SA
#
# Execute from within buildroot/share/fonts
#
#####################################################################
HERE=$(pwd)
for CMD in curl unzip patch make; do
which $CMD >/dev/null || { echo "'$CMD' is required for this script." ; exit 1 ; }
done
[[ $HERE =~ 'buildroot/share/fonts'$ ]] || { echo "Change to buildroot/share/fonts to run $(basename $0)" ; exit 1; }
# Download u8glib
curl -LJO https://github.com/olikraus/u8glib/archive/master.zip
unzip u8glib-master.zip >/dev/null 2>&1
# Patch and build bdf2u8g
cd u8glib-master/tools/font/bdf2u8g
patch -p0 <../../../../u8glib-bdf2u8g.patch bdf2u8g.c >/dev/null 2>&1
make >/dev/null 2>&1
mv bdf2u8g ../../../../
# Clean up
cd -
rm -rf u8glib-master*
cd "$HERE"

View file

@ -0,0 +1,126 @@
/**
* getline.c --- Based on...
*
* getdelim.c --- Implementation of replacement getdelim function.
* Copyright (C) 1994, 1996, 1997, 1998, 2001, 2003, 2005 Free
* Software Foundation, Inc.
*
* This program 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, or (at
* your option) any later version.
*
* This program 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 this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*/
/* Ported from glibc by Simon Josefsson. */
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#if !HAVE_GETLINE
//#include "getdelim.h"
#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
#include <errno.h>
#ifndef SIZE_MAX
#define SIZE_MAX ((size_t) -1)
#endif
#ifndef SSIZE_MAX
#define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2))
#endif
#if !HAVE_FLOCKFILE
#undef flockfile
#define flockfile(x) ((void)0)
#endif
#if !HAVE_FUNLOCKFILE
#undef funlockfile
#define funlockfile(x) ((void)0)
#endif
/* Read up to (and including) a DELIMITER from FP into *LINEPTR (and
NUL-terminate it). *LINEPTR is a pointer returned from malloc (or
NULL), pointing to *N characters of space. It is realloc'ed as
necessary. Returns the number of characters read (not including
the null terminator), or -1 on error or EOF. */
ssize_t
getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp) {
ssize_t result;
size_t cur_len = 0;
if (lineptr == NULL || n == NULL || fp == NULL) {
errno = EINVAL;
return -1;
}
flockfile (fp);
if (*lineptr == NULL || *n == 0) {
*n = 120;
*lineptr = (char *) malloc(*n);
if (*lineptr == NULL) {
result = -1;
goto unlock_return;
}
}
for (;;) {
int i;
i = getc(fp);
if (i == EOF) {
result = -1;
break;
}
/* Make enough space for len+1 (for final NUL) bytes. */
if (cur_len + 1 >= *n) {
size_t needed_max =
SSIZE_MAX < SIZE_MAX ? (size_t) SSIZE_MAX + 1 : SIZE_MAX;
size_t needed = 2 * *n + 1; /* Be generous. */
char *new_lineptr;
if (needed_max < needed)
needed = needed_max;
if (cur_len + 1 >= needed) {
result = -1;
goto unlock_return;
}
new_lineptr = (char *) realloc (*lineptr, needed);
if (new_lineptr == NULL) {
result = -1;
goto unlock_return;
}
*lineptr = new_lineptr;
*n = needed;
}
(*lineptr)[cur_len] = i;
cur_len++;
if (i == delimiter) break;
}
(*lineptr)[cur_len] = '\0';
result = cur_len ? (int) cur_len : (int) result;
unlock_return:
funlockfile(fp);
return result;
}
#endif

View file

@ -0,0 +1,12 @@
#ifndef MYGETLINE_H
#define MYGETLINE_H
//#include "config.h"
#if !HAVE_GETLINE
#include <stdio.h>
ssize_t getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp);
#define getline(lineptr, n, stream) getdelim (lineptr, n, '\n', stream)
#endif
#endif // MYGETLINE_H

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,32 @@
178c178
< fprintf(out_fp, "%d", data_buf[i]);
---
> fprintf(out_fp, "0x%02x", data_buf[i]);
180c180
< fprintf(out_fp, "%3d", data_buf[i]);
---
> fprintf(out_fp, "0x%02x", data_buf[i]);
487c487,488
< int bdf_delta_x; /* DWIDTH arg 1 */
---
> int bdf_delta_x_default = -1;
> int bdf_delta_x = -1; /* DWIDTH arg 1 */
1097a1099,1114
> else if ( strcmp(p_buf, "CHARS") == 0 )
> {
> if (bdf_delta_x < 0) {
> bdf_delta_x = 0;
> }
> if (bdf_delta_x_default < 0) {
> bdf_delta_x_default = bdf_delta_x;
> }
> }
> else if ( strcmp(p_buf, "STARTCHAR") == 0 )
> {
> if (bdf_delta_x_default < 0) {
> bdf_delta_x_default = 0;
> }
> bdf_delta_x = bdf_delta_x_default;
> }
1293d1309
< fprintf(out_fp, "#include \"u8g.h\"\n");

View file

@ -0,0 +1,110 @@
## Language engine and tools
### Supported hardware
Marlin supports HD44780 character LCD and 128x64 graphical LCD via U8GLIB. Because of the limitation of HD44780 hardwares, Marlin can only support three character sets for that hardware: Japanese (kana_utf8), Russian/Cyrillic (ru), or Western (Roman characters)
For the graphical LCD modules, there's far less limitation. Users and language maintainers can easily change the language translation strings when saved with UTF-8 encoding. The only extra step is to regenerate the font data from an existing BDF font file.
### How to support a new language?
1. Prepare the translation source file
You need to add a language header file `language_xx.h`, replacing xx with the language/country code. (e.g., "en" for English). You can start with a existing language file by copying it to a new location:
```bash
cp language_zh_CN.h language_zh_TW.h
```
Then simply replace the strings inside the `_UxGT()` macros.
Make sure the file is saved as UTF-8 encoded.
2. Generate the font data file
This step gathers the glyphs used in the language file from a 9pt bitmap font and saves the data in a language_data_xx.h file. So the font used for conversion should contain all the characters in your language file.
The default bitmap font is WQY's 9pt bitmap font.
Download from [here](http://wenq.org/daily/wqy-bitmapfont-bdf-gb18030-nightly_build.tar.gz), or to install in a Debian/Ubuntu system:
```
sudo apt-get install xfonts-wqy
```
You also need to compile the `bdf2u8g` binary to convert BDF font files into U8glib data structures:
```bash
cd marlin-git/buildroot/share/fonts/
./get-bdf2u8g.sh
```
The `genallfont.sh` script generates font data for all language translation files.
You may specify a list of languages to process. For example:
```bash
MARLIN_LANGS="zh_CN zh_TW"
```
and run the script to generate the font data (`language_data_xx.h`):
```bash
cd marlin-git/Marlin/
MARLIN_LANGS="zh_CN zh_TW" ../buildroot/share/fonts/genallfont.sh
```
3. Change the language settings
To compile Marlin with your language, choose a language in `Configuration.h`. For Chinese (Taiwan) you would use:
```cpp
#define LCD_LANGUAGE zh_TW
```
4. Compile and Upload the firmware
Open `Marlin.ino` in your IDE and compile the firmware. Once the build succeeds, upload it to your board.
### Update the language translation
Whenever language files are changed, you need to run the script `genallfont.sh` again to update the font data file.
### Use a cool font
You may need to use a different font to support your own language, because the default 9pt font is not complete. (You may also support them by adding the missing glyphs to the font.)
After you've prepared your font, specify the font file path as an argument to `genallfont.sh`, so that the font used for your language is your new font. For example, if your font is named `newfont.bdf` run the following command:
```bash
cd Marlin/
../buildroot/share/fonts/genallfont.sh ./newfont.bdf
```
...or to regenerate the language font data for a specific language:
```bash
MARLIN_LANGS="zh_TW" ../buildroot/share/fonts/genallfont.sh ./newfont.bdf
```
### Suggestions for Maintainers
The tool and the language engine can be easily updated. Since it uses common bitmap font files and UTF-8 text, the maintainer needs to confirm that the font contains the glyphs in the language files.
At this time, the font file `marlin-6x12-3.bdf` is used to generate the font data. It combines all of Marlin's ISO10646-1 fonts and the WQY 9pt bitmap font.
### Related resources
#### Fonts
- [WQY](http://wenq.org/)
- [WQY 9pt bitmap font](http://wenq.org/daily/wqy-bitmapfont-bdf-gb18030-nightly_build.tar.gz)
- [unifont (16x8 or 16x16)](https://unifoundry.com/unifont.html)
Documents related to the old version of the language engine:
- [Marlin Fonts Documentation](https://www.marlinfw.org/docs/development/fonts.html)
- [Marlin LCD Language](https://marlinfw.org/docs/development/lcd_language.html)
- [U8GLIB](https://github.com/olikraus/u8glib.git)
- [UTF-8 for U8GLIB](https://github.com/yhfudev/u8glib-fontutf8.git)
- [Standalone test project for the Marlin UTF-8 language engine](https://github.com/yhfudev/marlin-fontutf8.git)

View file

@ -0,0 +1,176 @@
#!/usr/bin/env bash
#####################################################################
# genpages.sh for u8g
#
# This script will generate u8g c files for specified fonts
#
# Copyright 2015-2018 Yunhui Fu <yhfudev@gmail.com>
# License: GPL/BSD
#####################################################################
my_getpath() {
local PARAM_DN="$1"
shift
#readlink -f
local DN="${PARAM_DN}"
local FN=
if [ ! -d "${DN}" ]; then
FN=$(basename "${DN}")
DN=$(dirname "${DN}")
fi
cd "${DN}" > /dev/null 2>&1
DN=$(pwd)
cd - > /dev/null 2>&1
echo -n "${DN}"
[[ -z "$FN" ]] || echo -n "/${FN}"
}
#DN_EXEC=`echo "$0" | ${EXEC_AWK} -F/ '{b=$1; for (i=2; i < NF; i ++) {b=b "/" $(i)}; print b}'`
DN_EXEC=$(dirname $(my_getpath "$0") )
#####################################################################
EXEC_GENPAGES=${DN_EXEC}/genpages
[ -x "${EXEC_GENPAGES}" ] || EXEC_GENPAGES="$(my_getpath ${DN_EXEC}/../../../genpages)"
[ -x "${EXEC_GENPAGES}" ] || EXEC_GENPAGES=$(which genpages)
[ -x "${EXEC_GENPAGES}" ] || { echo "Error: genpages not found!" ; exit 1; }
#echo "EXEC_GENPAGES=${EXEC_GENPAGES}"
EXEC_BDF2U8G=${DN_EXEC}/bdf2u8g
[ -x "${EXEC_BDF2U8G}" ] || EXEC_BDF2U8G="${DN_EXEC}/../../../bdf2u8g"
[ -x "${EXEC_BDF2U8G}" ] || EXEC_BDF2U8G=$(which bdf2u8g)
[ -x "${EXEC_BDF2U8G}" ] || { echo "Error: bdf2u8g not found!" ; echo "Please compile u8glib/tools/font/bdf2u8g/bdf2u8g and link to it from here!"; exit 1; }
DN_CUR=$(pwd)
DN_DATA=$(pwd)/datatmp
mkdir -p "${DN_DATA}"
#####################################################################
FONTHOME=/usr/share/fonts
FN_FONT_BASE="marlin-6x12-3"
#FN_FONT_BASE=unifont
#FN_FONT_BASE=wenquanyi_12pt
#FN_FONT_BASE=wenquanyi_9pt
FN_FONT="${1:-}"
DN_FONT0=`dirname ${FN_FONT}`
DN_FONT="$(my_getpath ${DN_FONT0})"
FN_FONT="$(my_getpath "${DN_FONT}")/"`basename ${FN_FONT}`
[ -z "${FN_FONT}" ] && FN_FONT=${DN_DATA}/../${FN_FONT_BASE}.bdf
[ -f "${FN_FONT}" ] || FN_FONT=${DN_EXEC}/${FN_FONT_BASE}.bdf
[ -f "${FN_FONT}" ] || FN_FONT="$FONTHOME/wenquanyi/${FN_FONT_BASE}.bdf"
[ -f "${FN_FONT}" ] || FN_FONT="$FONTHOME/X11/misc/${FN_FONT_BASE}.bdf"
[ -f "${FN_FONT}" ] || FN_FONT="$FONTHOME/misc/${FN_FONT_BASE}.bdf"
#echo "uxggenpages.sh: FN_FONT=${FN_FONT}"
if [ ! -f "${FN_FONT}" ]; then
FN_FONT_PCF="$FONTHOME/X11/misc/${FN_FONT_BASE}.pcf"
[ -f "${FN_FONT_PCF}" ] || FN_FONT_PCF="$FONTHOME/misc/${FN_FONT_BASE}.pcf"
[ -f "${FN_FONT_PCF}" ] || FN_FONT_PCF="$FONTHOME/wenquanyi/${FN_FONT_BASE}.pcf"
if [ -f "${FN_FONT_PCF}" ]; then
EXEC_PCF2BDF=$(which pcf2bdf)
if [ ! -x "${EXEC_PCF2BDF}" ]; then
echo "Error: not found pcf2bdf!"
echo " Please install pcf2bdf."
exit 1
fi
FN_FONT="./${FN_FONT_BASE}.bdf"
echo ${EXEC_PCF2BDF} -o "${FN_FONT}" "${FN_FONT_PCF}"
${EXEC_PCF2BDF} -o "${FN_FONT}" "${FN_FONT_PCF}"
fi
fi
[ -f "${FN_FONT}" ] || { echo "Error: can't find font ${FN_FONT}!" ; exit 1; }
#####################################################################
#(cd ${DN_EXEC}; gcc -o genpages genpages.c getline.c)
rm -f tmpa tmpb
touch tmpa tmpb
#rm -f ${DN_EXEC}/fontpage_*.h
rm -f fontpage_*.h
cat << EOF >"proc.awk"
BEGIN {
cur_page=0;
val_begin=0;
val_pre=0;
utf8_pre="";
utf8_begin="";
}{
page=\$1;
val_real=\$2;
utf8=\$3;
# assert (val_real < 128);
val=val_real + 128;
if (cur_page != page) {
if (cur_page != 0) {
if (val_begin != 0) {
print cur_page " " val_begin " " val_pre " " utf8_begin " " utf8_pre;
}
}
cur_page=page;
val_begin=val;
val_pre=val;
utf8_begin=utf8;
utf8_pre=utf8;
} else {
if (val_pre + 1 != val) {
if (cur_page != 0) {
print cur_page " " val_begin " " val_pre " " utf8_begin " " utf8_pre;
}
val_begin=val;
val_pre=val;
utf8_begin=utf8;
utf8_pre=utf8;
} else {
val_pre = val;
utf8_pre=utf8;
}
}
} END {
if (cur_page != 0) {
print cur_page " " val_begin " " val_pre " " utf8_begin " " utf8_pre;
}
}
EOF
AWK=$(which gawk || which awk)
grep -Hrn _UxGT . | grep '"' \
| sed 's/_UxGT("/\n&/g;s/[^\n]*\n_UxGT("\([^"]*\)[^\n]*/\1 /g;s/.$//' \
| ${EXEC_GENPAGES} \
| sort -k 1n -k 2n | uniq \
| "$AWK" -v EXEC_PREFIX=${DN_EXEC} -f "proc.awk" \
| while read PAGE BEGIN END UTF8BEGIN UTF8END; do \
if [ ! -f ${DN_DATA}/fontpage_${PAGE}_${BEGIN}_${END}.h ]; then \
${EXEC_BDF2U8G} -u ${PAGE} -b ${BEGIN} -e ${END} ${FN_FONT} fontpage_${PAGE}_${BEGIN}_${END} ${DN_DATA}/fontpage_${PAGE}_${BEGIN}_${END}.h > /dev/null 2>&1 ;
fi ; \
grep -A 10000000000 u8g_fntpgm_uint8_t ${DN_DATA}/fontpage_${PAGE}_${BEGIN}_${END}.h >> tmpa ; \
echo " FONTDATA_ITEM(${PAGE}, ${BEGIN}, ${END}, fontpage_${PAGE}_${BEGIN}_${END}), // '${UTF8BEGIN}' -- '${UTF8END}'" >> tmpb ;\
done
TMPA=$(cat tmpa)
TMPB=$(cat tmpb)
EOL=$'\n'
[[ ! "$TMPA" == "" ]] && TMPA="$EOL$TMPA$EOL"
[[ ! "$TMPB" == "" ]] && TMPB="$EOL$TMPB$EOL"
rm -f tmpa tmpb "proc.awk"
cat <<EOF >fontutf8-data.h
/**
* Generated automatically by buildroot/share/fonts/uxggenpages.sh
* Contents will be REPLACED by future processing!
* Use genallfont.sh to generate font data for updated languages.
*/
#include <U8glib.h>
$TMPA
#define FONTDATA_ITEM(page, begin, end, data) { page, begin, end, COUNT(data), data }
static const uxg_fontinfo_t g_fontinfo[] PROGMEM = {$TMPB};
EOF