Refactor CPDF_SimpleParser part 3

Remove the size variable, which is usually just `cur_pos_ - start_pos`.
Handle special cases accordingly.

Avoid stepping back the current position. Instead, prefer processing the
current character before incrementing the position. This makes the logic
easier to follow and makes the size easier to understand.

Also update a double negative conditional to use positive instead.

Change-Id: I2b8a9bccd8b4e8b7c3ccb260ff46e898d2965328
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/123412
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Andy Phan <andyphan@chromium.org>
diff --git a/core/fpdfapi/parser/cpdf_simple_parser.cpp b/core/fpdfapi/parser/cpdf_simple_parser.cpp
index 9856e2f..38c1bdb 100644
--- a/core/fpdfapi/parser/cpdf_simple_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_simple_parser.cpp
@@ -48,35 +48,29 @@
     }
   }
 
-  uint8_t size = 0;
   uint32_t start_position = cur_position_ - 1;
   if (PDFCharIsDelimiter(cur_char)) {
     // Find names
     if (cur_char == '/') {
-      while (true) {
-        if (cur_position_ >= data_.size()) {
-          break;
+      while (cur_position_ < data_.size()) {
+        cur_char = data_[cur_position_];
+        // Stop parsing after encountering a whitespace or delimiter.
+        if (PDFCharIsWhitespace(cur_char) || PDFCharIsDelimiter(cur_char)) {
+          return ByteStringView(
+              data_.subspan(start_position, cur_position_ - start_position));
         }
-
-        cur_char = data_[cur_position_++];
-        if (!PDFCharIsOther(cur_char) && !PDFCharIsNumeric(cur_char)) {
-          cur_position_--;
-          size = cur_position_ - start_position;
-          break;
-        }
+        ++cur_position_;
       }
-      return ByteStringView(data_.subspan(start_position, size));
+      return ByteStringView();
     }
 
-    size = 1;
     if (cur_char == '<') {
       if (cur_position_ >= data_.size()) {
-        return ByteStringView(data_.subspan(start_position, size));
+        return ByteStringView(
+            data_.subspan(start_position, cur_position_ - start_position));
       }
       cur_char = data_[cur_position_++];
-      if (cur_char == '<') {
-        size = 2;
-      } else {
+      if (cur_char != '<') {
         while (cur_position_ < data_.size() && data_[cur_position_] != '>') {
           cur_position_++;
         }
@@ -84,18 +78,14 @@
         if (cur_position_ < data_.size()) {
           cur_position_++;
         }
-
-        size = cur_position_ - start_position;
       }
     } else if (cur_char == '>') {
       if (cur_position_ >= data_.size()) {
-        return ByteStringView(data_.subspan(start_position, size));
+        return ByteStringView(
+            data_.subspan(start_position, cur_position_ - start_position));
       }
-      cur_char = data_[cur_position_++];
-      if (cur_char == '>') {
-        size = 2;
-      } else {
-        cur_position_--;
+      if (data_[cur_position_] == '>') {
+        ++cur_position_;
       }
     } else if (cur_char == '(') {
       int level = 1;
@@ -124,21 +114,18 @@
       if (cur_position_ < data_.size()) {
         cur_position_++;
       }
-
-      size = cur_position_ - start_position;
     }
-    return ByteStringView(data_.subspan(start_position, size));
+    return ByteStringView(
+        data_.subspan(start_position, cur_position_ - start_position));
   }
 
-  size = 1;
   while (cur_position_ < data_.size()) {
-    cur_char = data_[cur_position_++];
-
+    cur_char = data_[cur_position_];
     if (PDFCharIsDelimiter(cur_char) || PDFCharIsWhitespace(cur_char)) {
-      cur_position_--;
       break;
     }
-    size++;
+    ++cur_position_;
   }
-  return ByteStringView(data_.subspan(start_position, size));
+  return ByteStringView(
+      data_.subspan(start_position, cur_position_ - start_position));
 }