Getting the next word ends at a comment (;)
authorDavid Neto <dneto@google.com>
Tue, 25 Aug 2015 17:53:19 +0000 (13:53 -0400)
committerDavid Neto <dneto@google.com>
Mon, 26 Oct 2015 16:52:01 +0000 (12:52 -0400)
source/text.cpp
source/text.h
test/TextWordGet.cpp

index 534e4b1..793bb58 100644 (file)
@@ -155,6 +155,7 @@ spv_result_t spvTextWordGet(const spv_text text,
   while (true) {
     switch (text->str[endPosition->index]) {
       case ' ':
+      case ';':
       case '\t':
       case '\n':
       case '\0': {  // NOTE: End of word found!
index fb9acf7..768b4e4 100644 (file)
@@ -85,7 +85,9 @@ spv_result_t spvTextAdvanceLine(const spv_text text, spv_position_t *pPosition);
 /// @return result code
 spv_result_t spvTextAdvance(const spv_text text, spv_position_t *pPosition);
 
-/// @brief Fetch the next word from the text stream
+/// @brief Fetch the next word from the text stream.
+///
+/// A word ends at the next comment or whitespace.
 ///
 /// @param[in] text stream to read from
 /// @param[in] startPosition current position in text stream
index b67b788..133703a 100644 (file)
@@ -68,6 +68,20 @@ TEST(TextWordGet, SpaceTerminator) {
   ASSERT_STREQ("Word", word.c_str());
 }
 
+TEST(TextWordGet, SemicolonTerminator) {
+  char textStr[] = "Wo;rd ";
+  spv_text_t text = {textStr, strlen(textStr)};
+  spv_position_t startPosition = {};
+  std::string word;
+  spv_position_t endPosition = {};
+  ASSERT_EQ(SPV_SUCCESS,
+            spvTextWordGet(&text, &startPosition, word, &endPosition));
+  ASSERT_EQ(2, endPosition.column);
+  ASSERT_EQ(0, endPosition.line);
+  ASSERT_EQ(2, endPosition.index);
+  ASSERT_STREQ("Wo", word.c_str());
+}
+
 TEST(TextWordGet, MultipleWords) {
   char textStr[] = "Words in a sentence";
   spv_text_t text = {textStr, strlen(textStr)};