Ignore:
Timestamp:
Dec 9, 2017, 5:14:40 PM (15 months ago)
Author:
cameron
Message:

resolveGraphemeMode

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/re/re_parser.cpp

    r5770 r5772  
    2525#include <re/re_assertion.h>
    2626#include <re/printer_re.h>
    27 #include <UCD/resolve_properties.h>
    28 #include <UCD/CaseFolding.h>
    2927#include <sstream>
    3028#include <string>
     
    123121        RE * re = parse_next_item();
    124122        if (re == nullptr) {
    125             if (fGraphemeBoundaryPending == true) {
    126                 seq.push_back(makeZeroWidth("GCB"));
    127                 fGraphemeBoundaryPending = false;
    128             }
    129123            break;
    130124        }
     
    184178                mCursor++;
    185179                re = parse_charset();
    186                 if ((fModeFlagSet & ModeFlagType::GRAPHEME_CLUSTER_MODE) != 0) {
    187                     re = makeSeq({re, makeZeroWidth("GCB")});
    188                 }
    189180                break;
    190181            case '.': // the 'any' metacharacter
     
    196187            default:
    197188                re = createCC(parse_literal_codepoint());
    198                 if ((fModeFlagSet & ModeFlagType::GRAPHEME_CLUSTER_MODE) != 0) {
    199                     fGraphemeBoundaryPending = true;
    200                 }
    201189        }
    202190    }
     
    283271                                               (fModeFlagSet & CASE_INSENSITIVE_MODE_FLAG) == 0 ? Group::Sense::Off : Group::Sense::On);
    284272                    }
     273                    if ((changed & GRAPHEME_CLUSTER_MODE) != 0) {
     274                        group_expr = makeGroup(Group::Mode::GraphemeMode, group_expr,
     275                                               (fModeFlagSet & GRAPHEME_CLUSTER_MODE) == 0 ? Group::Sense::Off : Group::Sense::On);
     276                    }
    285277                    fModeFlagSet = savedModeFlagSet;
    286278                    break;
     
    288280                    ++mCursor;
    289281                    auto changed = fModeFlagSet ^ savedModeFlagSet;
    290                     if ((changed & CASE_INSENSITIVE_MODE_FLAG) != 0) {
     282                    if ((changed & (CASE_INSENSITIVE_MODE_FLAG|GRAPHEME_CLUSTER_MODE)) != 0) {
    291283                        group_expr = parse_seq();
    292                         return makeGroup(Group::Mode::CaseInsensitiveMode, group_expr,
    293                                                (fModeFlagSet & CASE_INSENSITIVE_MODE_FLAG) == 0 ? Group::Sense::Off : Group::Sense::On);
     284                        if ((changed & CASE_INSENSITIVE_MODE_FLAG) != 0) {
     285                            group_expr = makeGroup(Group::Mode::CaseInsensitiveMode, group_expr,
     286                                                   (fModeFlagSet & CASE_INSENSITIVE_MODE_FLAG) == 0 ? Group::Sense::Off : Group::Sense::On);
     287                        }
     288                        if ((changed & GRAPHEME_CLUSTER_MODE) != 0) {
     289                            group_expr = makeGroup(Group::Mode::GraphemeMode, group_expr,
     290                                                   (fModeFlagSet & GRAPHEME_CLUSTER_MODE) == 0 ? Group::Sense::Off : Group::Sense::On);
     291                        }
     292                        return group_expr;
    294293                    }
    295294                    else return parse_next_item();
Note: See TracChangeset for help on using the changeset viewer.