1688 {
1693
1694#ifdef FT_DEBUG_LEVEL_TRACE
1696#endif
1697
1698
1699
1703
1705
1706 zone->base = charstring_base;
1707 limit =
zone->limit = charstring_base + charstring_len;
1709
1710
1712 {
1716
1717
1718#ifdef FT_DEBUG_LEVEL_TRACE
1719 if ( bol )
1720 {
1723 }
1724#endif
1725
1726
1727
1728
1729
1730
1731
1732
1734 {
1735 case 1:
1736 case 3:
1737 case 4:
1738 case 5:
1739 case 6:
1740 case 7:
1741 case 8:
1742 case 9:
1743 case 10:
1744 case 11:
1745 case 14:
1746 case 15:
1747 case 21:
1748 case 22:
1749 case 30:
1750 case 31:
1751 goto No_Width;
1752
1753 case 13:
1755 break;
1756
1757 case 12:
1759 {
1760 FT_ERROR((
"t1_decoder_parse_metrics:"
1761 " invalid escape (12+EOF)\n" ));
1762 goto Syntax_Error;
1763 }
1764
1766 {
1767 case 7:
1769 break;
1770
1771 default:
1772 goto No_Width;
1773 }
1774 break;
1775
1776 case 255:
1778 {
1779 FT_ERROR((
"t1_decoder_parse_metrics:"
1780 " unexpected EOF in integer\n" ));
1781 goto Syntax_Error;
1782 }
1783
1784 value = (FT_Int32)( ( (FT_UInt32)
ip[0] << 24 ) |
1785 ( (FT_UInt32)
ip[1] << 16 ) |
1786 ( (FT_UInt32)
ip[2] << 8 ) |
1789
1790
1791
1792
1793
1794
1795
1796
1798 {
1799 FT_ERROR((
"t1_decoder_parse_metrics:"
1800 " large integer found for width\n" ));
1801 goto Syntax_Error;
1802 }
1803 else
1804 {
1805 value = (FT_Int32)( (FT_UInt32)
value << 16 );
1806 }
1807
1808 break;
1809
1810 default:
1812 {
1814 value = (FT_Int32)
ip[-1] - 139;
1815 else
1816 {
1818 {
1819 FT_ERROR((
"t1_decoder_parse_metrics:"
1820 " unexpected EOF in integer\n" ));
1821 goto Syntax_Error;
1822 }
1823
1825 value = ( (
ip[-2] - 247 ) * 256 ) +
ip[-1] + 108;
1826 else
1827 value = -( ( (
ip[-2] - 251 ) * 256 ) +
ip[-1] + 108 );
1828 }
1829
1830 value = (FT_Int32)( (FT_UInt32)
value << 16 );
1831 }
1832 else
1833 {
1834 FT_ERROR((
"t1_decoder_parse_metrics:"
1835 " invalid byte (%d)\n",
ip[-1] ));
1836 goto Syntax_Error;
1837 }
1838 }
1839
1840
1841
1842
1843
1844
1846 {
1848 {
1849 FT_ERROR((
"t1_decoder_parse_metrics: stack overflow\n" ));
1850 goto Syntax_Error;
1851 }
1852
1853#ifdef FT_DEBUG_LEVEL_TRACE
1855#endif
1856
1859 }
1860 else
1861 {
1863
1864
1866
1868 goto Stack_Underflow;
1869
1870#ifdef FT_DEBUG_LEVEL_TRACE
1871
1874 " too much operands on the stack"
1875 " (seen %d, expected %d)\n",
1877
1878#endif
1879
1881
1883 {
1886
1888
1891
1894
1895
1896
1897
1900
1903
1905
1910
1913
1914
1915
1916
1919
1920 default:
1921 FT_ERROR((
"t1_decoder_parse_metrics:"
1922 " unhandled opcode %d\n",
op ));
1923 goto Syntax_Error;
1924 }
1925
1926 }
1927
1928 }
1929
1931
1932 No_Width:
1933 FT_ERROR((
"t1_decoder_parse_metrics:"
1934 " no width, found op %d instead\n",
1936 Syntax_Error:
1938
1939 Stack_Underflow:
1940 return FT_THROW( Stack_Underflow );
1941 }
#define FT_ASSERT(condition)
#define FT_TRACE0(varformat)
#define FT_TRACE5(varformat)
#define FT_TRACE4(varformat)
#define T1_MAX_CHARSTRINGS_OPERANDS
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