michael@0: /* GRAPHITE2 LICENSING michael@0: michael@0: Copyright 2010, SIL International michael@0: All rights reserved. michael@0: michael@0: This library is free software; you can redistribute it and/or modify michael@0: it under the terms of the GNU Lesser General Public License as published michael@0: by the Free Software Foundation; either version 2.1 of License, or michael@0: (at your option) any later version. michael@0: michael@0: This program is distributed in the hope that it will be useful, michael@0: but WITHOUT ANY WARRANTY; without even the implied warranty of michael@0: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU michael@0: Lesser General Public License for more details. michael@0: michael@0: You should also have received a copy of the GNU Lesser General Public michael@0: License along with this library in the file named "LICENSE". michael@0: If not, write to the Free Software Foundation, 51 Franklin Street, michael@0: Suite 500, Boston, MA 02110-1335, USA or visit their web page on the michael@0: internet at http://www.fsf.org/licenses/lgpl.html. michael@0: michael@0: Alternatively, the contents of this file may be used under the terms of the michael@0: Mozilla Public License (http://mozilla.org/MPL) or the GNU General Public michael@0: License, as published by the Free Software Foundation, either version 2 michael@0: of the License or (at your option) any later version. michael@0: */ michael@0: #include "graphite2/Font.h" michael@0: #include "inc/Face.h" michael@0: #include "inc/FeatureMap.h" michael@0: #include "inc/FeatureVal.h" michael@0: #include "inc/NameTable.h" michael@0: michael@0: using namespace graphite2; michael@0: michael@0: extern "C" { michael@0: michael@0: michael@0: gr_uint16 gr_fref_feature_value(const gr_feature_ref* pfeatureref, const gr_feature_val* feats) //returns 0 if either pointer is NULL michael@0: { michael@0: if (!pfeatureref || !feats) return 0; michael@0: michael@0: return pfeatureref->getFeatureVal(*feats); michael@0: } michael@0: michael@0: michael@0: int gr_fref_set_feature_value(const gr_feature_ref* pfeatureref, gr_uint16 val, gr_feature_val* pDest) michael@0: { michael@0: if (!pfeatureref || !pDest) return 0; michael@0: michael@0: return pfeatureref->applyValToFeature(val, *pDest); michael@0: } michael@0: michael@0: michael@0: gr_uint32 gr_fref_id(const gr_feature_ref* pfeatureref) //returns 0 if pointer is NULL michael@0: { michael@0: if (!pfeatureref) michael@0: return 0; michael@0: michael@0: return pfeatureref->getId(); michael@0: } michael@0: michael@0: michael@0: gr_uint16 gr_fref_n_values(const gr_feature_ref* pfeatureref) michael@0: { michael@0: if(!pfeatureref) michael@0: return 0; michael@0: return pfeatureref->getNumSettings(); michael@0: } michael@0: michael@0: michael@0: gr_int16 gr_fref_value(const gr_feature_ref* pfeatureref, gr_uint16 settingno) michael@0: { michael@0: if(!pfeatureref || (settingno >= pfeatureref->getNumSettings())) michael@0: { michael@0: return 0; michael@0: } michael@0: return pfeatureref->getSettingValue(settingno); michael@0: } michael@0: michael@0: michael@0: void* gr_fref_label(const gr_feature_ref* pfeatureref, gr_uint16 *langId, gr_encform utf, gr_uint32 *length) michael@0: { michael@0: if(!pfeatureref || !pfeatureref->getFace()) michael@0: { michael@0: langId = 0; michael@0: length = 0; michael@0: return NULL; michael@0: } michael@0: uint16 label = pfeatureref->getNameId(); michael@0: NameTable * names = pfeatureref->getFace()->nameTable(); michael@0: if (!names) michael@0: { michael@0: langId = 0; michael@0: length = 0; michael@0: return NULL; michael@0: } michael@0: return names->getName(*langId, label, utf, *length); michael@0: } michael@0: michael@0: michael@0: void* gr_fref_value_label(const gr_feature_ref*pfeatureref, gr_uint16 setting, michael@0: gr_uint16 *langId, gr_encform utf, gr_uint32 *length) michael@0: { michael@0: if(!pfeatureref || (setting >= pfeatureref->getNumSettings()) || !pfeatureref->getFace()) michael@0: { michael@0: langId = 0; michael@0: length = 0; michael@0: return NULL; michael@0: } michael@0: uint16 label = pfeatureref->getSettingName(setting); michael@0: NameTable * names = pfeatureref->getFace()->nameTable(); michael@0: if (!names) michael@0: { michael@0: langId = 0; michael@0: length = 0; michael@0: return NULL; michael@0: } michael@0: return names->getName(*langId, label, utf, *length); michael@0: } michael@0: michael@0: michael@0: void gr_label_destroy(void * label) michael@0: { michael@0: free(label); michael@0: } michael@0: michael@0: gr_feature_val* gr_featureval_clone(const gr_feature_val* pfeatures/*may be NULL*/) michael@0: { //When finished with the Features, call features_destroy michael@0: return static_cast(pfeatures ? new Features(*pfeatures) : new Features); michael@0: } michael@0: michael@0: void gr_featureval_destroy(gr_feature_val *p) michael@0: { michael@0: delete p; michael@0: } michael@0: michael@0: michael@0: } // extern "C"