struct resbuf* AecUiPrEntitySet::keywordCallback(const TCHAR* str) { if (AecUiPrEntitySet::m_currentPromptObj == NULL) { AEC_ASSERT(0); return NULL; } AecRmCString tmpStr; AecRmCString tmpStr2(GetAecUiBaseAppName(), AECU_STR_KEYWORDCALLBACK_AECUIPRENTITYSET_FILTERS, TRUE); AecRmCString tmpStr3(GetAecUiBaseAppName(), AECU_STR_KEYWORDCALLBACK_AECUIPRENTITYSET_ALLOWED_OBJECT, TRUE); ads_printf(tmpStr2); //~ "\nFILTERS:" Aec::ads_printf(GetAecUiBaseAppName(), AECU_STR_KEYWORDCALLBACK_AECUIPRENTITYSET_LOCKED_LAYERS, //~ "\n Locked Layers: %s" Aec::booleanToStr(AecUiPrEntitySet::m_currentPromptObj->m_filterLockedLayers, tmpStr)); ads_printf(tmpStr3); //~ "\n Allowed Object Types:" int len = AecUiPrEntitySet::m_currentPromptObj->m_classTypeCache.length(); if (len == 0) { AecRmCString tmpStr4(GetAecUiBaseAppName(), AECU_STR_KEYWORDCALLBACK_AECUIPRENTITYSET_ALL_ENTITIES, TRUE); ads_printf(tmpStr4); //~ "\n All entities allowed." } else { AcRxClass* classType; for (int i=0; i<len; i++) { classType = static_cast<AcRxClass*>(AecUiPrEntitySet::m_currentPromptObj->m_classTypeCache[i]); ads_printf(_DNT(_T("\n %s")), classType->name()); } } ads_printf(_DNT(_T("\n"))); return NULL; }
void parse(const char * filename, SSUStruct& ssus) { void * parser = ssuParserAlloc(malloc); FILE * f = fopen(filename, "rt"); ssus.fileName.push_back(filename); ssus.row.push_back(0); ssus.col.push_back(0); int lineNo = 0; while(!feof(f)) { char s[4096]; ++ lineNo; if(fgets(s, 4096, f) == NULL) continue; ++ ssus.row.back(); size_t len = strlen(s); if(len == 0) continue; int i = (int)len - 1; while(i >= 0 && typeFromChar(s[i]) == 9) -- i; if(i < 0) continue; s[i + 1] = 0; int err = 0; char * cmt = extractComment(s, err); if(err) { fprintf(stderr, "[%s] %d:1 Unpaired quotes!", filename, lineNo); exit(0); } if(cmt != NULL) ssuParser(parser, TK_COMMENT, strdup(cmt), &ssus); char * sstart = s; char * scurrent = s; bool nextLine = false; int currentCharId = -1; while(!nextLine) { int charId = typeFromChar(*scurrent); switch(charId) { case 9: if(scurrent != sstart) { PUSH_LASTTOKEN; } nextLine = true; break; case 8: { PUSH_LASTTOKEN; do { ++ scurrent; } while(typeFromChar(*scurrent) == 8); sstart = scurrent; currentCharId = -1; continue; } case 7: { PUSH_LASTTOKEN; sstart = scurrent + 1; scurrent = strchr(sstart, *scurrent); std::string tmpStr2(sstart, scurrent); ssuParser(parser, TK_CUSTOM, strdup(tmpStr2.c_str()), &ssus); sstart = scurrent + 1; } break; case 1: case 0: if(charId != currentCharId) { PUSH_LASTTOKEN currentCharId = charId; sstart = scurrent; } if(charId == 0) { ssus.col.back() = scurrent - s + 1; ssus.word = *scurrent; push(parser, &ssus); sstart = scurrent + 1; } break; } if(nextLine) break; ++ scurrent; } } fclose(f); ssuParser(parser, 0, NULL, &ssus); ssuParserFree(parser, free); ssus.fileName.erase(ssus.fileName.end() - 1); ssus.row.erase(ssus.row.end() - 1); ssus.col.erase(ssus.col.end() - 1); }