Ignore:
Timestamp:
Dec 31, 2014, 9:44:46 PM (4 years ago)
Author:
cameron
Message:

UCD property resolution initial check in

File:
1 edited

Legend:

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

    r4189 r4380  
    1010#include <string>
    1111#include <vector>
     12#include <iostream>
    1213#include <unordered_map>
    1314#include "unicode_set.h"
     
    2021        for (unsigned int i = 0; i < prop_or_val.length(); ++i) {
    2122                char c = prop_or_val.at(i);
    22                 if ((c != '_') && (c != '.') && (c != '-')) {
     23                if ((c != '_') && (c != ' ') && (c != '-')) {
    2324                        s += std::tolower(c, loc);
    2425                }
    2526        }
    26         return s;
     27        return s;
    2728}
    2829
     
    4041                property_kind_t the_kind;
    4142               
    42                 virtual UnicodeSet GetCodepointSet(std::string value_spec) = 0; 
     43                virtual UnicodeSet GetCodepointSet(std::string value_spec) = 0;
    4344        };
    4445       
     
    5859               
    5960                EnumeratedPropertyObject(UCD::property_t p,
    60                                          const std::vector<std::string> names,
     61                                 const std::vector<std::string> enum_names,
     62                                 const std::vector<std::string> names,
    6163                                         const std::unordered_map<std::string, int> aliases,
    6264                                         const std::vector<UnicodeSet> sets) :
    63                 PropertyObject(p, EnumeratedProperty), property_value_full_names(names), property_value_aliases(aliases), aliases_initialized(false), property_value_sets(sets) {}
     65                PropertyObject(p, EnumeratedProperty), property_value_enum_names(enum_names), property_value_full_names(names), property_value_aliases(aliases), aliases_initialized(false), property_value_sets(sets) {}
    6466                int GetPropertyValueEnumCode(std::string s);
    6567                UnicodeSet GetCodepointSet(std::string value_spec);     
    6668               
    6769        private:
    68                 const std::vector<std::string> property_value_full_names;  // never changes
    69                 std::unordered_map<std::string, int> property_value_aliases;
     70        const std::vector<std::string> property_value_enum_names;  // never changes
     71        const std::vector<std::string> property_value_full_names;  // never changes
     72                std::unordered_map<std::string, int> property_value_aliases;
    7073                bool aliases_initialized; // full names must be added dynamically.
    7174                std::vector<UnicodeSet> property_value_sets;                 
     
    8891                // to save space in the executable.   Add them if the property is used.
    8992                if (!aliases_initialized) {
    90                         for (int v = 0; v < property_value_full_names.size(); v++) {
    91                                 property_value_aliases.insert({canonicalize_value_name(property_value_full_names[v]), v});
    92                         }
     93            for (int v = 0; v < property_value_full_names.size(); v++) {
     94                property_value_aliases.insert({canonicalize_value_name(property_value_full_names[v]), v});
     95            }
     96            for (int v = 0; v < property_value_enum_names.size(); v++) {
     97                property_value_aliases.insert({canonicalize_value_name(property_value_enum_names[v]), v});
     98            }
    9399                        aliases_initialized = true;
    94100                }
     
    106112       
    107113        UnicodeSet BinaryPropertyObject::GetCodepointSet(std::string value_spec) {
    108                 int property_enum_val = Binary::Y; // default value
     114                int property_enum_val = Binary_ns::Y; // default value
    109115                if (value_spec != "") {
    110                         auto valit = Binary::aliases_only_map.find(value_spec);
    111                         if (valit == Binary::aliases_only_map.end()) {
     116                        auto valit = Binary_ns::aliases_only_map.find(value_spec);
     117                        if (valit == Binary_ns::aliases_only_map.end()) {
    112118                                std::cerr << "Binary property " << property_full_name[the_property] << ": bad value: " << value_spec << ".\n";
    113119                                exit(-1);
    114120                        }
    115121                        else property_enum_val = valit->second;
    116                         if (property_enum_val == Binary::Y) return the_codepoint_set;
     122                        if (property_enum_val == Binary_ns::Y) return the_codepoint_set;
    117123                        else return uset_complement(the_codepoint_set);
    118124                }
     125        else return the_codepoint_set;
    119126        }
    120127}
Note: See TracChangeset for help on using the changeset viewer.