diff --git a/siteupdate/cplusplus/classes/Route/read_wpt.cpp b/siteupdate/cplusplus/classes/Route/read_wpt.cpp index 7253ece7..e2c33867 100644 --- a/siteupdate/cplusplus/classes/Route/read_wpt.cpp +++ b/siteupdate/cplusplus/classes/Route/read_wpt.cpp @@ -80,6 +80,7 @@ void Route::read_wpt w->label_invalid_ends(datacheckerrors); w->bus_with_i(datacheckerrors); w->label_looks_hidden(datacheckerrors); + w->lacks_generic(datacheckerrors); } } delete[] wptdata; diff --git a/siteupdate/cplusplus/classes/Waypoint/Waypoint.cpp b/siteupdate/cplusplus/classes/Waypoint/Waypoint.cpp index 9ec0d0fc..e964b9bc 100644 --- a/siteupdate/cplusplus/classes/Waypoint/Waypoint.cpp +++ b/siteupdate/cplusplus/classes/Waypoint/Waypoint.cpp @@ -346,6 +346,16 @@ inline bool Waypoint::label_too_long(DatacheckEntryList *datacheckerrors) return 0; } +inline void Waypoint::lacks_generic(DatacheckEntryList *datacheckerrors) +{ // label lacks generic highway type + const char* c = label[0] == '*' ? label.data()+1 : label.data(); + if ( (*c == 'O' || *c == 'o') + && (*(c+1) == 'l' || *(c+1) == 'L') + && (*(c+2) == 'd' || *(c+2) == 'D') + && *(c+3) >= '0' && *(c+3) <= '9') + datacheckerrors->add(route, label, "", "", "LACKS_GENERIC", ""); +} + inline void Waypoint::out_of_bounds(DatacheckEntryList *datacheckerrors, char *fstr) { // out-of-bounds coords if (lat > 90 || lat < -90 || lng > 180 || lng < -180) @@ -379,8 +389,9 @@ inline void Waypoint::visible_distance(DatacheckEntryList *datacheckerrors, char inline void Waypoint::bus_with_i(DatacheckEntryList *datacheckerrors) { // look for I-xx with Bus instead of BL or BS - if (label[0] != 'I' || label[1] != '-' || route->region->country->first != "USA") return; - const char *c = label.data()+2; + const char *c = label.data(); + if (*c == '*') c++; + if (*c++ != 'I' || *c++ != '-' || route->region->country->first != "USA") return; if (*c < '0' || *c > '9') return; while (*c >= '0' && *c <= '9') c++; if ( *c == 'E' || *c == 'W' || *c == 'C' || *c == 'N' || *c == 'S' diff --git a/siteupdate/cplusplus/classes/Waypoint/Waypoint.h b/siteupdate/cplusplus/classes/Waypoint/Waypoint.h index 9d7ddc2c..f0862cb8 100644 --- a/siteupdate/cplusplus/classes/Waypoint/Waypoint.h +++ b/siteupdate/cplusplus/classes/Waypoint/Waypoint.h @@ -52,5 +52,6 @@ class Waypoint inline void label_slashes(DatacheckEntryList *, const char *); inline void label_selfref(DatacheckEntryList *, const char *); inline bool label_too_long(DatacheckEntryList *); + inline void lacks_generic(DatacheckEntryList *); inline void underscore_datachecks(DatacheckEntryList *, const char *); }; diff --git a/siteupdate/python-teresco/siteupdate.py b/siteupdate/python-teresco/siteupdate.py index 769217bb..1ec7e47c 100755 --- a/siteupdate/python-teresco/siteupdate.py +++ b/siteupdate/python-teresco/siteupdate.py @@ -2922,10 +2922,10 @@ def run(self): # create label->index hashes and check if AltLabels duplicated if w.alt_labels[a] in r.pri_label_hash: datacheckerrors.append(DatacheckEntry(r, [w.alt_labels[a]], "DUPLICATE_LABEL")) - r.duplicate_labels.add(a) + r.duplicate_labels.add(w.alt_labels[a]) elif w.alt_labels[a] in r.alt_label_hash: datacheckerrors.append(DatacheckEntry(r, [w.alt_labels[a]], "DUPLICATE_LABEL")) - r.duplicate_labels.add(a) + r.duplicate_labels.add(w.alt_labels[a]) else: r.alt_label_hash[w.alt_labels[a]] = index index += 1 @@ -3949,7 +3949,7 @@ def run(self): datacheckerrors.append(DatacheckEntry(r,[w.label],'NONTERMINAL_UNDERSCORE')) # look for I-xx with Bus instead of BL or BS - if re.fullmatch('I\-[0-9]+[EeWwCcNnSs]?[Bb][Uu][Ss].*', w.label) and all_regions[w.route.region][2] == "USA": + if re.fullmatch('\*?I\-[0-9]+[EeWwCcNnSs]?[Bb][Uu][Ss].*', w.label) and all_regions[w.route.region][2] == "USA": datacheckerrors.append(DatacheckEntry(r,[w.label],'BUS_WITH_I')) # look for labels that look like hidden waypoints but @@ -3957,6 +3957,10 @@ def run(self): if re.fullmatch('X[0-9][0-9][0-9][0-9][0-9][0-9]', w.label): datacheckerrors.append(DatacheckEntry(r,[w.label],'LABEL_LOOKS_HIDDEN')) + # lacks generic highway type + if re.fullmatch('^\*?[Oo][lL][dD][0-9].*', w.label): + datacheckerrors.append(DatacheckEntry(r,[w.label],'LACKS_GENERIC')) + # look for USxxxA but not USxxxAlt, B/Bus (others?) ##if re.fullmatch('US[0-9]+A.*', w.label) and not re.fullmatch('US[0-9]+Alt.*', w.label) or \ ## re.fullmatch('US[0-9]+B.*', w.label) and \