Changeset 6194


Ignore:
Timestamp:
Nov 7, 2018, 6:38:47 AM (6 months ago)
Author:
cameron
Message:

Canonicalize property names for lookup

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

Legend:

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

    r6161 r6194  
    2424#include "UCD/PropertyValueAliases.h"
    2525#include <llvm/Support/ErrorHandling.h>
     26#include <llvm/Support/raw_ostream.h>
    2627
    2728using namespace UCD;
     
    99100        std::string prop = name->getNamespace();
    100101        std::string value = name->getName();
     102        llvm::errs() << "resolveUnicodeSet(" << prop << ":" << value << ")\n";
    101103        if (prop.length() > 0) {
    102104            prop = canonicalize_value_name(prop);
     
    137139        else {
    138140            // No namespace (property) name.   Try as a general category.
     141            std::string canon = canonicalize_value_name(value);
    139142            const auto & gcobj = cast<EnumeratedPropertyObject>(property_object_table[gc]);
    140             int valcode = gcobj->GetPropertyValueEnumCode(value);
     143            int valcode = gcobj->GetPropertyValueEnumCode(canon);
    141144            if (valcode >= 0) {
    142145                return gcobj->GetCodepointSet(valcode);
    143146            }
    144147            const auto & scObj = cast<EnumeratedPropertyObject>(property_object_table[sc]);
    145             valcode = scObj->GetPropertyValueEnumCode(value);
     148            valcode = scObj->GetPropertyValueEnumCode(canon);
    146149            if (valcode >= 0) {
    147150                return scObj->GetCodepointSet(valcode);
    148151            }
    149152            // Try as a binary property.
    150             auto propit = alias_map.find(value);
     153           
     154            auto propit = alias_map.find(canon);
    151155            if (propit != alias_map.end()) {
    152156                auto theprop = propit->second;
     
    161165            // Now compatibility properties of UTR #18 Annex C
    162166                   
    163             else if (value == ".") return UnicodeSet(0, 0x10FFFF);
    164             else if (value == "alnum") {
     167            else if (canon == ".") return UnicodeSet(0, 0x10FFFF);
     168            else if (canon == "alnum") {
    165169                Name * digit = makeName("nd", Name::Type::UnicodeProperty);
    166170                Name * alpha = makeName("alphabetic", Name::Type::UnicodeProperty);
    167171                return resolveUnicodeSet(digit) + resolveUnicodeSet(alpha);
    168             } else if (value == "xdigit") {
     172            } else if (canon == "xdigit") {
    169173                Name * digit = makeName("nd", Name::Type::UnicodeProperty);
    170174                Name * hexdigit = makeName("hexdigit", Name::Type::UnicodeProperty);
    171175                return resolveUnicodeSet(digit) + resolveUnicodeSet(hexdigit);
    172             } else if (value == "blank") {
     176            } else if (canon == "blank") {
    173177                Name * space_sep = makeName("space_separator", Name::Type::UnicodeProperty);
    174178                return resolveUnicodeSet(space_sep) + UnicodeSet(0x09) /* tab */;
    175             } else if (value == "print") {
     179            } else if (canon == "print") {
    176180                Name * graph = makeName("graph", Name::Type::UnicodeProperty);
    177181                Name * space_sep = makeName("space_separator", Name::Type::UnicodeProperty);
    178182                return resolveUnicodeSet(graph) + resolveUnicodeSet(space_sep);
    179             } else if (value == "word") {
     183            } else if (canon == "word") {
    180184                Name * alnum = makeName("alnum", Name::Type::UnicodeProperty);
    181185                Name * mark = makeName("mark", Name::Type::UnicodeProperty);
     
    183187                Name * join = makeName("joincontrol", Name::Type::UnicodeProperty);
    184188                return resolveUnicodeSet(alnum) + resolveUnicodeSet(mark) + resolveUnicodeSet(conn) + resolveUnicodeSet(join);
    185             } else if (value == "graph") {
     189            } else if (canon == "graph") {
    186190                Name * space = makeName("space", Name::Type::UnicodeProperty);
    187191                Name * ctrl = makeName("control", Name::Type::UnicodeProperty);
  • icGREP/icgrep-devel/icgrep/pablo/builder.hpp

    r6173 r6194  
    66#include <pablo/pe_var.h>
    77#include <util/not_null.h>
     8#include <sstream>
    89
    910namespace pablo {
  • icGREP/icgrep-devel/icgrep/re/grapheme_clusters.cpp

    r6191 r6194  
    201201    }
    202202
    203     // RE * ExtendedPictographic = makeName("Extended_Pictographic", Name::Type::UnicodeProperty));
    204     // RE * EmojiSeq = makeSeq({ExtendedPictographic, makeRep(GCB_EX, 0, Rep::UNBOUNDED_REP), GCB_ZWJ});
    205     // RE * GCX_11 = makeSeq({Behind(EmojiSeq), Ahead(ExtendedPictographic)});
     203    RE * ExtendedPictographic = makeName("Extended_Pictographic", Name::Type::UnicodeProperty);
     204    RE * EmojiSeq = makeSeq({ExtendedPictographic, makeRep(GCB_EX, 0, Rep::UNBOUNDED_REP), GCB_ZWJ});
     205    RE * GCX_11 = makeSeq({Behind(EmojiSeq), Ahead(ExtendedPictographic)});
    206206   
    207207    RE * GCB_RI = makeName("gcb", "ri", Name::Type::UnicodeProperty);
     
    211211   
    212212    //Name * gcb = makeName("gcb", Name::Type::UnicodeProperty);
    213     RE * GCX = makeAlt({GCX_1, GCX_6, GCX_7, GCX_8, GCX_9, GCX_12_13});
     213    RE * GCX = makeAlt({GCX_1, GCX_6, GCX_7, GCX_8, GCX_9, GCX_11, GCX_12_13});
    214214   
    215215    RE * gcb = makeDiff(makeSeq(), GCX);
Note: See TracChangeset for help on using the changeset viewer.