[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freetype2] master a0f3a1f: Formatting.
From: |
Werner LEMBERG |
Subject: |
[freetype2] master a0f3a1f: Formatting. |
Date: |
Fri, 8 Jul 2016 04:54:05 +0000 (UTC) |
branch: master
commit a0f3a1f25a69a7c5268e87ee6e7a9238c26e6242
Author: Werner Lemberg <address@hidden>
Commit: Werner Lemberg <address@hidden>
Formatting.
---
ChangeLog | 32 +++++-----
include/freetype/config/ftstdlib.h | 3 +-
src/base/ftinit.c | 119 ++++++++++++++++++++++++++++++++++++
src/smooth/ftgrays.c | 2 +-
4 files changed, 138 insertions(+), 18 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index e5bbe83..199ed91 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,25 +2,25 @@
[smooth] Sub-banding protocol revision.
- Rasterization sub-banding is utilized at large sizes while using
- rather small fixed memory pool. Indeed it is possible to make an
+ Rasterization sub-banding is utilized at large sizes while using a
+ rather small fixed memory pool. Indeed it is possible to make an
educated guess how much memory is necessary at a given size for a
- given glyph. It turns out that, for large majority of European glyphs,
- you should store about 8 times more boundary pixels than their height.
- Or, vice versa, if your memory pool can hold 800 pixels the band
- height should be 100 and you should sub-band anything larger than
- that. Should you still run out of memory, FreeType bisects the band
- but you have wasted some time. This is what has been implemented in
- FreeType since the beginning.
-
- It was overlooked, however, that the top band could grow to twice the
- default band size leading to unnecessary memory overflows there. This
- commit fixes that. Now the bands are distributed more evenly and
- cannot exceed the default size.
+ given glyph. It turns out that, for a large majority of European
+ glyphs, you should store about 8 times more boundary pixels than
+ their height. Or, vice versa, if your memory pool can hold 800
+ pixels the band height should be 100 and you should sub-band
+ anything larger than that. Should you still run out of memory,
+ FreeType bisects the band but you have wasted some time. This is
+ what has been implemented in FreeType since the beginning.
+
+ It was overlooked, however, that the top band could grow to twice
+ the default band size leading to unnecessary memory overflows there.
+ This commit fixes that. Now the bands are distributed more evenly
+ and cannot exceed the default size.
Now the magic number 8 is really suitable for rather simple European
- scripts. For complex Chinese logograms the magic number should be 13
- but that is subject for another day.
+ scripts. For complex Chinese logograms the magic number should be
+ 13 but that is subject for another day.
* src/smooth/ftgrays.c (gray_convert_glyph): Revise sub-banding
protocol.
diff --git a/include/freetype/config/ftstdlib.h
b/include/freetype/config/ftstdlib.h
index 562e255..58b95a7 100644
--- a/include/freetype/config/ftstdlib.h
+++ b/include/freetype/config/ftstdlib.h
@@ -142,7 +142,8 @@
/**********************************************************************/
-#define ft_atol atol
+#define ft_atol atol
+#define ft_getenv getenv
/**********************************************************************/
diff --git a/src/base/ftinit.c b/src/base/ftinit.c
index c2dd0a7..a0a09db 100644
--- a/src/base/ftinit.c
+++ b/src/base/ftinit.c
@@ -226,6 +226,123 @@
}
+#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
+
+#define MAX_LENGTH 128
+
+ /*
+ * The `FREETYPE_PROPERTIES' environment variable has the following
+ * syntax form (broken here into multiple lines for better readability)
+ *
+ * <whitespace>
+ * <module-name1> ':'
+ * <property-name1> '=' <property-value1>
+ * <whitespace>
+ * <module-name2> ':'
+ * <property-name2> '=' <property-value2>
+ * ...
+ *
+ * Example:
+ *
+ * FREETYPE_PROPERTIES=truetype:interpreter-version=35 \
+ * cff:no-stem-darkening=1 \
+ * autofitter:warping=1
+ *
+ */
+
+ static void
+ ft_get_default_properties( FT_Library library )
+ {
+ const char* env;
+ const char* p;
+ const char* q;
+
+ char module_name[MAX_LENGTH + 1];
+ char property_name[MAX_LENGTH + 1];
+ char property_value[MAX_LENGTH + 1];
+
+ int i;
+
+
+ env = getenv( "FREETYPE_PROPERTIES" );
+ if ( !env )
+ return;
+
+ for ( p = env; *p; p++ )
+ {
+ module_name[0] = '\0';
+ property_name[0] = '\0';
+ property_value[0] = '\0';
+
+ /* skip leading whitespace and separators */
+ if ( *p == ' ' || *p == '\t' )
+ continue;
+
+ /* read module name, followed by `:' */
+ q = p;
+ for ( i = 0; i < MAX_LENGTH; i++ )
+ {
+ if ( !*p || *p == ':' )
+ break;
+ module_name[i] = *p++;
+ }
+ module_name[i] = '\0';
+
+ if ( !*p )
+ break;
+ if ( *p != ':' || p == q )
+ break;
+
+ /* read property name, followed by `=' */
+ q = p;
+ for ( i = 0; i < MAX_LENGTH; i++ )
+ {
+ if ( !*p || *p == '=' )
+ break;
+ property_name[i] = *p++;
+ }
+ property_name[i] = '\0';
+
+ if ( !*p )
+ break;
+ if ( *p != '=' || p == q )
+ break;
+
+ /* read property value, followed by whitespace (if any) */
+ q = p;
+ for ( i = 0; i < MAX_LENGTH; i++ )
+ {
+ if ( !*p || *p == ' ' || *p == '\t' )
+ break;
+ property_value[i] = *p++;
+ }
+ property_value[i] = '\0';
+
+ if ( !( *p == '\0' || *p == ' ' || *p == '\t' ) || p == q )
+ break;
+
+ /* we have all data; resolve them into a call to FT_Property_Set */
+ /* if possible */
+
+ /* we completely ignore errors */
+ FT_Property_Set( library,
+ module_name,
+ property_name,
+ property_value );
+ }
+ }
+
+#else
+
+ static void
+ ft_get_default_properties( FT_Library library )
+ {
+ FT_UNUSED( library );
+ }
+
+#endif
+
+
/* documentation is in freetype.h */
FT_EXPORT_DEF( FT_Error )
@@ -256,6 +373,8 @@
else
FT_Add_Default_Modules( *alibrary );
+ ft_get_default_properties( *alibrary );
+
return error;
}
diff --git a/src/smooth/ftgrays.c b/src/smooth/ftgrays.c
index 12df14d..0bf3ac6 100644
--- a/src/smooth/ftgrays.c
+++ b/src/smooth/ftgrays.c
@@ -1911,7 +1911,7 @@ typedef ptrdiff_t FT_PtrDist;
min = ras.min_ey;
max_y = ras.max_ey;
- for (; min < max_y; min = max )
+ for ( ; min < max_y; min = max )
{
max = min + band_size;
if ( max > max_y )
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [freetype2] master a0f3a1f: Formatting.,
Werner LEMBERG <=