bool CAniTextInput::HandleChar (char chChar, DWORD dwKeyData) // HandleChar // // Handle the character { if (!m_Properties[INDEX_ENABLED].GetBool()) return false; // If this is a backspace, delete a character else if (chChar == VK_BACK) { CString sText = m_Properties[INDEX_TEXT].GetString(); sText = strSubString(sText, 0, sText.GetLength() - 1); m_Properties.SetString(PROP_TEXT, sText); return true; } // If this is a text character, then add it to the input else if (strIsAlphaNumeric(&chChar) || chChar == ' ' || strIsASCIISymbol(&chChar)) { CString sText = m_Properties[INDEX_TEXT].GetString(); sText.Append(CString(&chChar, 1)); m_Properties.SetString(PROP_TEXT, sText); return true; } else return false; }
void AddText (TraverseCtx &Ctx, const CString &sText) { enum States { stateInText, stateInDelimeter, stateDone, }; // Parse the text into words char *pPos = sText.GetASCIIZPointer(); char *pStart = pPos; int iState = stateInText; CString sWord; while (iState != stateDone) { bool bText = strIsAlphaNumeric(pPos); switch (iState) { case stateInText: { if (!bText) { AddWord(Ctx, CString(pStart, pPos - pStart)); iState = stateInDelimeter; } break; } case stateInDelimeter: { if (bText) { pStart = pPos; iState = stateInText; } break; } } // Next if (*pPos == '\0') iState = stateDone; else pPos++; } }