Changeset 4633


Ignore:
Timestamp:
Jul 2, 2015, 6:49:13 PM (4 years ago)
Author:
cameron
Message:

Add ExtensionPropertyObject? for scx

Location:
icGREP/icgrep-devel/icgrep/UCD
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/UCD/PropertyObjects.cpp

    r4631 r4633  
    77
    88#include "PropertyObjects.h"
     9#include "PropertyObjectTable.h"
    910#include <sstream>
    1011#include <algorithm>
     
    6667}
    6768
     69const UnicodeSet & ExtensionPropertyObject::GetCodepointSet(const std::string & value_spec) {
     70    int property_enum_val = GetPropertyValueEnumCode(value_spec);
     71    if (property_enum_val == -1) {
     72        throw std::runtime_error("Extension Property " + UCD::property_full_name[the_property] +  ": unknown value: " + value_spec);
     73    }
     74    return GetCodepointSet(property_enum_val);
     75}
     76
     77const UnicodeSet & ExtensionPropertyObject::GetCodepointSet(const int property_enum_val) const {
     78    assert (property_enum_val >= 0);
     79    return *(property_value_sets[property_enum_val]);
     80}
     81
     82int ExtensionPropertyObject::GetPropertyValueEnumCode(const std::string & value_spec) {
     83    int c = property_object_table[base_property]->GetPropertyValueEnumCode(value_spec);
     84    return c;
     85}
     86
    6887UnicodeSet BinaryPropertyObject::GetCodepointSet(const std::string & value_spec) const {
    6988    if (value_spec.length() != 0) {
  • icGREP/icgrep-devel/icgrep/UCD/PropertyObjects.h

    r4631 r4633  
    2222        public:
    2323        enum class ClassTypeId : unsigned {
    24             NumericProperty, CodepointProperty, StringProperty, MiscellaneousProperty, EnumeratedProperty, CatalogProperty, BinaryProperty,  UnsupportedProperty
     24            NumericProperty, CodepointProperty, StringProperty, MiscellaneousProperty, EnumeratedProperty, ExtensionProperty, CatalogProperty, BinaryProperty,  UnsupportedProperty
    2525        };
    2626        inline ClassTypeId getClassTypeId() const {
     
    4747        };
    4848       
    49         class EnumeratedPropertyObject : public PropertyObject {
    50         public:
     49        class EnumeratedPropertyObject : public PropertyObject {
     50        public:
    5151        static inline bool classof(const PropertyObject * p) {
    5252            return p->getClassTypeId() == ClassTypeId::EnumeratedProperty;
     
    5555            return false;
    5656        }
    57                
     57               
    5858
    59                 EnumeratedPropertyObject(UCD::property_t p,
     59                EnumeratedPropertyObject(UCD::property_t p,
    6060                                 const std::vector<std::string> & enum_names,
    6161                                 const std::vector<std::string> & names,
     
    7575        const UnicodeSet & GetCodepointSet(const std::string & value_spec);
    7676        const UnicodeSet & GetCodepointSet(const int property_enum_val) const;
    77                
    78         private:
     77               
     78        private:
    7979        const std::vector<std::string> & property_value_enum_names;  // never changes
    8080        const std::vector<std::string> & property_value_full_names;  // never changes
     
    8282        bool uninitialized; // full names must be added dynamically.
    8383        const std::vector<const UnicodeSet *> property_value_sets;
    84         };
    85        
     84        };
     85       
     86        class ExtensionPropertyObject : public PropertyObject {
     87        public:
     88        static inline bool classof(const PropertyObject * p) {
     89            return p->getClassTypeId() == ClassTypeId::ExtensionProperty;
     90        }
     91        static inline bool classof(const void *) {
     92            return false;
     93        }
     94               
     95
     96                ExtensionPropertyObject(UCD::property_t p,
     97                                 UCD::property_t base,
     98                                 std::vector<const UnicodeSet *> && sets)
     99        : PropertyObject(p, ClassTypeId::ExtensionProperty)
     100        , base_property(base)
     101        , property_value_sets(sets) {
     102
     103
     104        }
     105
     106        virtual int GetPropertyValueEnumCode(const std::string & value_spec);
     107        const UnicodeSet & GetCodepointSet(const std::string & value_spec);
     108        const UnicodeSet & GetCodepointSet(const int property_enum_val) const;
     109               
     110        private:
     111        const property_t base_property;
     112        const std::vector<const UnicodeSet *> property_value_sets;
     113        };
     114       
    86115        class BinaryPropertyObject : public PropertyObject {
    87116        public:
  • icGREP/icgrep-devel/icgrep/UCD/ScriptExtensions.h

    r4631 r4633  
    13311331              0xff800000, 0xffe00000, 0xc0000000, 0xc0000000, 0xfffffffd,
    13321332              0xffff0000}};
    1333         static EnumeratedPropertyObject property_object
     1333        static ExtensionPropertyObject property_object
    13341334       {scx,
    1335         SCX_ns::enum_names,
    1336         SCX_ns::value_names,
    1337         SCX_ns::aliases_only_map,
     1335        UCD::sc,
    13381336       {&aghb_Ext, &arab_Ext, &armi_Ext, &armn_Ext, &avst_Ext, &bali_Ext,
    13391337        &bamu_Ext, &bass_Ext, &batk_Ext, &beng_Ext, &bopo_Ext, &brah_Ext,
Note: See TracChangeset for help on using the changeset viewer.