1694 {
1700
1701#ifdef FT_DEBUG_LEVEL_TRACE
1703#endif
1704
1705
1706
1710
1712
1713 zone->base = charstring_base;
1714 limit =
zone->limit = charstring_base + charstring_len;
1716
1718
1719
1721 {
1725
1726
1727#ifdef FT_DEBUG_LEVEL_TRACE
1728 if ( bol )
1729 {
1732 }
1733#endif
1734
1735
1736
1737
1738
1739
1740
1741
1743 {
1744 case 1:
1745 case 3:
1746 case 4:
1747 case 5:
1748 case 6:
1749 case 7:
1750 case 8:
1751 case 9:
1752 case 14:
1753 case 15:
1754 case 21:
1755 case 22:
1756 case 30:
1757 case 31:
1758 goto No_Width;
1759
1760 case 10:
1762 break;
1763 case 11:
1765 break;
1766
1767 case 13:
1769 break;
1770
1771 case 12:
1773 {
1774 FT_ERROR((
"t1_decoder_parse_metrics:"
1775 " invalid escape (12+EOF)\n" ));
1776 goto Syntax_Error;
1777 }
1778
1780 {
1781 case 7:
1783 break;
1784 case 12:
1786 break;
1787
1788 default:
1789 goto No_Width;
1790 }
1791 break;
1792
1793 case 255:
1795 {
1796 FT_ERROR((
"t1_decoder_parse_metrics:"
1797 " unexpected EOF in integer\n" ));
1798 goto Syntax_Error;
1799 }
1800
1801 value = (FT_Int32)( ( (FT_UInt32)
ip[0] << 24 ) |
1802 ( (FT_UInt32)
ip[1] << 16 ) |
1803 ( (FT_UInt32)
ip[2] << 8 ) |
1806
1807
1808
1809
1810
1811
1812
1813
1815 {
1816 if ( large_int )
1817 {
1818 FT_ERROR((
"t1_decoder_parse_metrics:"
1819 " no `div' after large integer\n" ));
1820 goto Syntax_Error;
1821 }
1822 else
1824 }
1825 else
1826 {
1827 if ( !large_int )
1828 value = (FT_Int32)( (FT_UInt32)
value << 16 );
1829 }
1830
1831 break;
1832
1833 default:
1835 {
1837 value = (FT_Int32)
ip[-1] - 139;
1838 else
1839 {
1841 {
1842 FT_ERROR((
"t1_decoder_parse_metrics:"
1843 " unexpected EOF in integer\n" ));
1844 goto Syntax_Error;
1845 }
1846
1848 value = ( (
ip[-2] - 247 ) * 256 ) +
ip[-1] + 108;
1849 else
1850 value = -( ( (
ip[-2] - 251 ) * 256 ) +
ip[-1] + 108 );
1851 }
1852
1853 if ( !large_int )
1854 value = (FT_Int32)( (FT_UInt32)
value << 16 );
1855 }
1856 else
1857 {
1858 FT_ERROR((
"t1_decoder_parse_metrics:"
1859 " invalid byte (%d)\n",
ip[-1] ));
1860 goto Syntax_Error;
1861 }
1862 }
1863
1865 {
1866 FT_ERROR((
"t1_decoder_parse_metrics:"
1867 " no `div' after large integer\n" ));
1868 goto Syntax_Error;
1869 }
1870
1871
1872
1873
1874
1875
1877 {
1879 {
1880 FT_ERROR((
"t1_decoder_parse_metrics: stack overflow\n" ));
1881 goto Syntax_Error;
1882 }
1883
1884#ifdef FT_DEBUG_LEVEL_TRACE
1885 if ( large_int )
1887 else
1889#endif
1890
1893 }
1894 else
1895 {
1897
1898
1900
1902 goto Stack_Underflow;
1903
1904#ifdef FT_DEBUG_LEVEL_TRACE
1905
1907 {
1911 break;
1912
1913 default:
1916 " too much operands on the stack"
1917 " (seen %ld, expected %d)\n",
1919 break;
1920 }
1921
1922#endif
1923
1925
1927 {
1930
1932
1935
1938
1939
1940
1941
1944
1947
1949
1954
1957
1958
1959
1960
1963
1966
1967
1968
1969
1972
1974 break;
1975
1977 {
1979
1980
1982
1984
1986 {
1989
1990
1993 else
1995 }
1996
1997 if ( idx < 0 || idx >=
decoder->num_subrs )
1998 {
1999 FT_ERROR((
"t1_decoder_parse_metrics:"
2000 " invalid subrs index\n" ));
2001 goto Syntax_Error;
2002 }
2003
2005 {
2006 FT_ERROR((
"t1_decoder_parse_metrics:"
2007 " too many nested subrs\n" ));
2008 goto Syntax_Error;
2009 }
2010
2012
2014
2015
2016
2017
2019
2022 else
2023 {
2024
2025
2028 }
2029
2031
2033 {
2034 FT_ERROR((
"t1_decoder_parse_metrics:"
2035 " invoking empty subrs\n" ));
2036 goto Syntax_Error;
2037 }
2038
2042 break;
2043 }
2044
2047
2048 if ( zone <= decoder->zones )
2049 {
2050 FT_ERROR((
"t1_decoder_parse_metrics:"
2051 " unexpected return\n" ));
2052 goto Syntax_Error;
2053 }
2054
2059 break;
2060
2061 default:
2062 FT_ERROR((
"t1_decoder_parse_metrics:"
2063 " unhandled opcode %d\n",
op ));
2064 goto Syntax_Error;
2065 }
2066
2068
2069 }
2070
2071 }
2072
2074
2075 No_Width:
2076 FT_ERROR((
"t1_decoder_parse_metrics:"
2077 " no width, found op %d instead\n",
2079 Syntax_Error:
2081
2082 Stack_Underflow:
2083 return FT_THROW( Stack_Underflow );
2084 }
FT_DivFix(FT_Long a, FT_Long b)
#define FT_ASSERT(condition)
#define FT_TRACE0(varformat)
#define FT_TRACE5(varformat)
#define FT_TRACE4(varformat)
size_t * ft_hash_num_lookup(FT_Int num, FT_Hash hash)
#define T1_MAX_CHARSTRINGS_OPERANDS
#define T1_MAX_SUBRS_CALLS
FT_BEGIN_HEADER typedef unsigned char FT_Bool
GLdouble GLdouble GLdouble GLdouble top
T1_ParseState parse_state
static const FT_Int t1_args_count[op_max]
enum T1_Operator_ T1_Operator