19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this work for additional information regarding copyright ownership. 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (the "License"); you may not use this file except in compliance with 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the License. You may obtain a copy of the License at 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @author Ilya S. Okomin 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @version $Revision$ 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage org.apache.harmony.awt.gl.font; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.Font; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.peer.FontPeer; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.File; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.IOException; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Properties; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Vector; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.harmony.awt.gl.font.FontManager; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.harmony.awt.gl.font.FontProperty; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.harmony.awt.internal.nls.Messages; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class AndroidFontManager extends FontManager { 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // set of all available faces supported by a system 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String faces[]; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // weight names according to xlfd structure 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] LINUX_WEIGHT_NAMES = { 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "black", "bold", "demibold", "medium", "light" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // slant names according to xlfd structure 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] LINUX_SLANT_NAMES = { 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "i", "o", "r" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Singleton AndroidFontManager instance */ 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final AndroidFontManager inst = new AndroidFontManager(); 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private AndroidFontManager() { 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(); 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project faces = new String[] {/*"PLAIN",*/ "NORMAL", "BOLD", "ITALIC", "BOLDITALIC"}; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project initFontProperties(); 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void initLCIDTable(){ 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new RuntimeException("Not implemented!"); 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns temporary File object to store data from InputStream. 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This File object saved to `~/.fonts/' folder that is included in the 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * list of folders searched for font files, and this is where user-specific 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * font files should be installed. 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public File getTempFontFile()throws IOException{ 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project File fontFile = File.createTempFile("jFont", ".ttf", new File(System.getProperty("user.home") +"/.fonts")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fontFile.deleteOnExit(); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return fontFile; 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Initializes fProperties array field for the current system configuration font 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * property file. 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * RuntimeException is thrown if font property contains incorrect format of 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * xlfd string. 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true is success, false if font property doesn't exist or doesn't 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * contain roperties. 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean initFontProperties(){ 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project File fpFile = getFontPropertyFile(); 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (fpFile == null){ 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Properties props = getProperties(fpFile); 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (props == null){ 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i=0; i < LOGICAL_FONT_NAMES.length; i++){ 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String lName = LOGICAL_FONT_NAMES[i]; 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int j=0; j < STYLE_NAMES.length; j++){ 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String styleName = STYLE_NAMES[j]; 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Vector propsVector = new Vector(); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Number of entries for a logical font 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int numComp = 0; 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Is more entries for this style and logical font name left 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean moreEntries = true; 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String value = null; 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project while(moreEntries){ 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Component Font Mappings property name 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String property = FONT_MAPPING_KEYS[0].replaceAll("LogicalFontName", lName).replaceAll("StyleName", styleName).replaceAll("ComponentIndex", String.valueOf(numComp)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project value = props.getProperty(property); 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // If the StyleName is omitted, it's assumed to be plain 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((j == 0) && (value == null)){ 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project property = FONT_MAPPING_KEYS[1].replaceAll("LogicalFontName", lName).replaceAll("ComponentIndex", String.valueOf(numComp)); //$NON-NLS-1$ //$NON-NLS-2$ 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project value = props.getProperty(property); 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (value != null){ 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String[] fields = parseXLFD(value); 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (fields == null){ 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // awt.08=xfld parse string error: {0} 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new RuntimeException(Messages.getString("awt.08", value)); //$NON-NLS-1$ 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String fontName = fields[1]; 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String weight = fields[2]; 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String italic = fields[3]; 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int style = getBoldStyle(weight) | getItalicStyle(italic); 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Component Font Character Encodings property value 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String encoding = props.getProperty(FONT_CHARACTER_ENCODING.replaceAll("LogicalFontName", lName).replaceAll("ComponentIndex", String.valueOf(numComp))); //$NON-NLS-1$ //$NON-NLS-2$ 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Exclusion Ranges property value 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String exclString = props.getProperty(EXCLUSION_RANGES.replaceAll("LogicalFontName", lName).replaceAll("ComponentIndex", String.valueOf(numComp))); //$NON-NLS-1$ //$NON-NLS-2$ 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] exclRange = parseIntervals(exclString); 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FontProperty fp = new AndroidFontProperty(lName, styleName, null, fontName, value, style, exclRange, encoding); 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project propsVector.add(fp); 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project numComp++; 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project moreEntries = false; 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fProperties.put(LOGICAL_FONT_NAMES[i] + "." + j, propsVector); //$NON-NLS-1$ 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns style according to the xlfd weight string. 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If weight string is incorrect returned value is Font.PLAIN 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param str weight name String 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int getBoldStyle(String str){ 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < LINUX_WEIGHT_NAMES.length;i++){ 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (str.equalsIgnoreCase(LINUX_WEIGHT_NAMES[i])){ 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (i < 3) ? Font.BOLD : Font.PLAIN; 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Font.PLAIN; 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns style according to the xlfd slant string. 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If slant string is incorrect returned value is Font.PLAIN 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param str slant name String 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int getItalicStyle(String str){ 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < LINUX_SLANT_NAMES.length;i++){ 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (str.equalsIgnoreCase(LINUX_SLANT_NAMES[i])){ 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (i < 2) ? Font.ITALIC : Font.PLAIN; 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Font.PLAIN; 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Parse xlfd string and returns array of Strings with separate xlfd 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * elements.<p> 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * xlfd format: 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -Foundry-Family-Weight-Slant-Width-Style-PixelSize-PointSize-ResX-ResY-Spacing-AvgWidth-Registry-Encoding 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param xlfd String parameter in xlfd format 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static String[] parseXLFD(String xlfd){ 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int fieldsCount = 14; 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String fieldsDelim = "-"; //$NON-NLS-1$ 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String[] res = new String[fieldsCount]; 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!xlfd.startsWith(fieldsDelim)){ 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project xlfd = xlfd.substring(1); 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int i=0; 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int pos; 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (i=0; i < fieldsCount-1; i++){ 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pos = xlfd.indexOf(fieldsDelim); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (pos != -1){ 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project res[i] = xlfd.substring(0, pos); 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project xlfd = xlfd.substring(pos + 1); 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pos = xlfd.indexOf(fieldsDelim); 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // check if no fields left 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(pos != -1){ 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project res[fieldsCount-1] = xlfd; 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return res; 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getFaceIndex(String faceName){ 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < faces.length; i++) { 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(faces[i].equals(faceName)){ 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return i; 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return -1; 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String[] getAllFamilies(){ 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (allFamilies == null){ 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allFamilies = new String[]{"sans-serif", "serif", "monospace"}; 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return allFamilies; 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Font[] getAllFonts(){ 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Font[] fonts = new Font[faces.length]; 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i =0; i < fonts.length;i++){ 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fonts[i] = new Font(faces[i], Font.PLAIN, 1); 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return fonts; 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public FontPeer createPhysicalFontPeer(String name, int style, int size) { 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AndroidFont peer; 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int familyIndex = getFamilyIndex(name); 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (familyIndex != -1){ 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // !! we use family names from the list with cached families because 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // they are differ from the family names in xlfd structure, in xlfd 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // family names mostly in lower case. 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project peer = new AndroidFont(getFamily(familyIndex), style, size); 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project peer.setFamily(getFamily(familyIndex)); 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return peer; 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int faceIndex = getFaceIndex(name); 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (faceIndex != -1){ 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project peer = new AndroidFont(name, style, size); 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return peer; 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public FontPeer createDefaultFont(int style, int size) { 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.i("DEFAULT FONT", Integer.toString(style)); 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new AndroidFont(DEFAULT_NAME, style, size); 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 278