⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pathextractorimpl.java

📁 这是java 开发的的免费语音播放插件,很值得学习参考!!!!!!!!!!!!111
💻 JAVA
字号:
/** * Portions Copyright 2001 Sun Microsystems, Inc. * Portions Copyright 1999-2001 Language Technologies Institute,  * Carnegie Mellon University. * All Rights Reserved.  Use is subject to license terms. *  * See the file "license.terms" for information on usage and * redistribution of this file, and for a DISCLAIMER OF ALL  * WARRANTIES. */package com.sun.speech.freetts;import java.util.Map;import java.util.HashMap;import java.util.List;import java.util.ArrayList;import java.util.Iterator;import java.util.StringTokenizer;import com.sun.speech.freetts.util.Utilities;/** * Interface that Manages a feature or item path. Allows navigation * to the corresponding feature or item. * This class in controlled by the following system properties: * * <pre> *   com.sun.speech.freetts.interpretCartPaths - default false *   com.sun.speech.freetts.lazyCartCompile - default true * </pre> *   com.sun.speech.freetts.interpretCartPaths * * Instances of this class will optionally pre-compile the paths. * Pre-compiling paths reduces the processing time and objects needed * to extract a feature or an item based upon a path. */public class PathExtractorImpl implements PathExtractor {    /**      * If this system property is set to true, paths will      * not be compiled.      */    public final static String INTERPRET_PATHS_PROPERTY =	"com.sun.speech.freetts.interpretCartPaths";    /**     * If this system property is set to true, CART feature/item     * paths will only be compiled as needed.     */    public final static String LAZY_COMPILE_PROPERTY =	"com.sun.speech.freetts.lazyCartCompile";    private final static boolean INTERPRET_PATHS = 	Utilities.getProperty(INTERPRET_PATHS_PROPERTY, "false").equals("true");    private final static boolean LAZY_COMPILE  = 	Utilities.getProperty(LAZY_COMPILE_PROPERTY, "true").equals("true");    private String pathAndFeature;    private String path;    private String feature;    private Object[] compiledPath;    private boolean wantFeature = false;    /**     * Creates a path for the given feature.     */    public PathExtractorImpl(String pathAndFeature, boolean wantFeature) {	this.pathAndFeature = pathAndFeature;	if (INTERPRET_PATHS)  {	    path = pathAndFeature;	    return;	}    	if (wantFeature) {	    int lastDot = pathAndFeature.lastIndexOf(".");	    // string can be of the form "p.feature" or just "feature"	    if (lastDot == -1) {		feature = pathAndFeature;		path = null;	    } else {		feature = pathAndFeature.substring(lastDot + 1);		path = pathAndFeature.substring(0, lastDot);	    }	    this.wantFeature = wantFeature;	} else {	    this.path = pathAndFeature;	}	if (!LAZY_COMPILE) {	    compiledPath = compile(path);	}    }    /**     * Finds the item associated with this Path.     * @param item the item to start at     * @return the item associated with the path or null     */    public Item findItem(Item item) {	if (INTERPRET_PATHS) {	    return item.findItem(path);	}	if (compiledPath == null) {	    compiledPath = compile(path);	}	Item pitem = item;	for (int i = 0; pitem != null && i < compiledPath.length; ) {	    OpEnum op = (OpEnum) compiledPath[i++];	    if (op == OpEnum.NEXT) {		pitem = pitem.getNext();	    } else if (op == OpEnum.PREV) {		pitem = pitem.getPrevious();	    } else if (op == OpEnum.NEXT_NEXT) {		pitem = pitem.getNext();		if (pitem != null) {		    pitem = pitem.getNext();		}	    } else if (op == OpEnum.PREV_PREV) {		pitem = pitem.getPrevious();		if (pitem != null) {		    pitem = pitem.getPrevious();		}	    } else if (op == OpEnum.PARENT) {		pitem = pitem.getParent();	    } else if (op == OpEnum.DAUGHTER) {		pitem = pitem.getDaughter();	    } else if (op == OpEnum.LAST_DAUGHTER) {		pitem = pitem.getLastDaughter();	    } else if (op == OpEnum.RELATION) {		String relationName = (String) compiledPath[i++];		pitem = pitem.getSharedContents().getItemRelation(relationName);	    } else {		System.out.println("findItem: bad feature " + op +			" in " + path);	    }	}	return pitem;    }    /**     * Finds the feature associated with this Path.     * @param item the item to start at     * @return the feature associated or "0"  if the     * feature was not found.     */    public Object findFeature(Item item) {	if (INTERPRET_PATHS) {	    return item.findFeature(path);	}	Item pitem = findItem(item);	Object results = null;	if (pitem != null) {	    Utilities.debug("findFeature: Item [" + pitem + "], feature '" + feature + "'");	    FeatureProcessor fp =		pitem.getOwnerRelation().getUtterance().		    getVoice().getFeatureProcessor(feature);	    if (fp != null) {		Utilities.debug("findFeature: There is a feature processor for '" + feature + "'");		try {		    results = fp.process(pitem);		} catch (ProcessException pe) {		     pitem.getOwnerRelation().getUtterance().			 getVoice().error("trouble while processing " + fp);		}	    } else {		results = pitem.getFeatures().getObject(feature);	    }	}	results = (results == null) ? "0" : results;	Utilities.debug("findFeature: ...results = '" + results + "'");	return results;    }    /**     * Compiles the given path into the compiled form     * @param path the path to compile     * @return the compiled form which is in the form     * of an array path traversal enums and associated strings     */    private Object[] compile(String path) {	List list = new ArrayList();	if (path == null) {	    return list.toArray();	}	StringTokenizer tok = new StringTokenizer(path, ":.");	while (tok.hasMoreTokens()) {	    String token = tok.nextToken();	    OpEnum op = OpEnum.getInstance(token);	    if (op == null) {		throw new Error("Bad path compiled " + path);	    } 	    list.add(op);	    if (op == OpEnum.RELATION) {		list.add(tok.nextToken());	    }	}	return list.toArray();    }    // inherited for Object    public String toString() {	return pathAndFeature;    }    // TODO: add these to the interface should we support binary    // files    /*    public void writeBinary();    public void readBinary();    */}/** * An enumerated type associated with path operations. */class OpEnum {    static private Map map = new HashMap();    public final static OpEnum NEXT = new OpEnum("n");    public final static OpEnum PREV = new OpEnum("p");    public final static OpEnum NEXT_NEXT = new OpEnum("nn");    public final static OpEnum PREV_PREV = new OpEnum("pp");    public final static OpEnum PARENT = new OpEnum("parent");    public final static OpEnum DAUGHTER = new OpEnum("daughter");    public final static OpEnum LAST_DAUGHTER = new OpEnum("daughtern");    public final static OpEnum RELATION = new OpEnum("R");    private String name;    /**     * Creates a new OpEnum.. There is a limited     * set of OpEnums     * @param name the path name for this Enum     */    private OpEnum(String name) {	this.name = name;	map.put(name, this);    }    /**     * gets an OpEnum thats associated with     * the given name.     * @param name the name of the OpEnum of interest     */    public static OpEnum getInstance(String name) {	return (OpEnum) map.get(name);    }    // inherited from Object    public String toString() {	return name;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -