Provide two versions of StringViewTemplate<>::span().

Similar to the raw_str()/unterminated_c_str() methods, one of which
returns a span of the UnsignedChar type, and the other returns a span
of the CharType.

Needed for a forthcoming CL.

Change-Id: Ie816592c8fe2e24842016eeb251946efd92b8964
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/52670
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/font/cpdf_cmap.cpp b/core/fpdfapi/font/cpdf_cmap.cpp
index 3db1acc..d6fdd23 100644
--- a/core/fpdfapi/font/cpdf_cmap.cpp
+++ b/core/fpdfapi/font/cpdf_cmap.cpp
@@ -338,7 +338,7 @@
 
 uint32_t CPDF_CMap::GetNextChar(ByteStringView pString, size_t* pOffset) const {
   size_t& offset = *pOffset;
-  auto pBytes = pString.span();
+  auto pBytes = pString.raw_span();
   switch (m_CodingScheme) {
     case OneByte: {
       return offset < pBytes.size() ? pBytes[offset++] : 0;
diff --git a/core/fpdfdoc/cpdf_defaultappearance.cpp b/core/fpdfdoc/cpdf_defaultappearance.cpp
index c39deb3..e6ef4f7 100644
--- a/core/fpdfdoc/cpdf_defaultappearance.cpp
+++ b/core/fpdfdoc/cpdf_defaultappearance.cpp
@@ -59,7 +59,7 @@
     return {};
 
   ByteString csFontNameTag;
-  CPDF_SimpleParser syntax(m_csDA.AsStringView().span());
+  CPDF_SimpleParser syntax(m_csDA.AsStringView().raw_span());
   if (FindTagParamFromStart(&syntax, "Tf", 2)) {
     csFontNameTag = ByteString(syntax.GetWord());
     csFontNameTag.Delete(0, 1);
@@ -75,7 +75,7 @@
   if (m_csDA.IsEmpty())
     return {};
 
-  CPDF_SimpleParser syntax(m_csDA.AsStringView().span());
+  CPDF_SimpleParser syntax(m_csDA.AsStringView().raw_span());
   if (FindTagParamFromStart(&syntax, "g", 1)) {
     fc[0] = StringToFloat(syntax.GetWord());
     return {CFX_Color::kGray};
diff --git a/core/fpdfdoc/cpdf_metadata_unittest.cpp b/core/fpdfdoc/cpdf_metadata_unittest.cpp
index c130514..9433162 100644
--- a/core/fpdfdoc/cpdf_metadata_unittest.cpp
+++ b/core/fpdfdoc/cpdf_metadata_unittest.cpp
@@ -16,7 +16,7 @@
       "</node>";
 
   CPDF_Stream stream;
-  stream.SetData(ByteStringView(data).span());
+  stream.SetData(ByteStringView(data).raw_span());
   CPDF_Metadata metadata(&stream);
 
   auto results = metadata.CheckForSharedForm();
@@ -33,7 +33,7 @@
       "</node>";
 
   CPDF_Stream stream;
-  stream.SetData(ByteStringView(data).span());
+  stream.SetData(ByteStringView(data).raw_span());
   CPDF_Metadata metadata(&stream);
 
   auto results = metadata.CheckForSharedForm();
@@ -50,7 +50,7 @@
       "</node>";
 
   CPDF_Stream stream;
-  stream.SetData(ByteStringView(data).span());
+  stream.SetData(ByteStringView(data).raw_span());
   CPDF_Metadata metadata(&stream);
 
   auto results = metadata.CheckForSharedForm();
@@ -67,7 +67,7 @@
       "</node>";
 
   CPDF_Stream stream;
-  stream.SetData(ByteStringView(data).span());
+  stream.SetData(ByteStringView(data).raw_span());
   CPDF_Metadata metadata(&stream);
 
   auto results = metadata.CheckForSharedForm();
@@ -85,7 +85,7 @@
       "</parent></grandparent>";
 
   CPDF_Stream stream;
-  stream.SetData(ByteStringView(data).span());
+  stream.SetData(ByteStringView(data).raw_span());
   CPDF_Metadata metadata(&stream);
 
   auto results = metadata.CheckForSharedForm();
@@ -99,7 +99,7 @@
       "<node></node>";
 
   CPDF_Stream stream;
-  stream.SetData(ByteStringView(data).span());
+  stream.SetData(ByteStringView(data).raw_span());
   CPDF_Metadata metadata(&stream);
 
   auto results = metadata.CheckForSharedForm();
@@ -115,7 +115,7 @@
       "</node>";
 
   CPDF_Stream stream;
-  stream.SetData(ByteStringView(data).span());
+  stream.SetData(ByteStringView(data).raw_span());
   CPDF_Metadata metadata(&stream);
 
   auto results = metadata.CheckForSharedForm();
@@ -145,7 +145,7 @@
       "</grandparent>";
 
   CPDF_Stream stream;
-  stream.SetData(ByteStringView(data).span());
+  stream.SetData(ByteStringView(data).raw_span());
   CPDF_Metadata metadata(&stream);
 
   auto results = metadata.CheckForSharedForm();
diff --git a/core/fxcrt/bytestring_unittest.cpp b/core/fxcrt/bytestring_unittest.cpp
index 1b932bf..b9cab63 100644
--- a/core/fxcrt/bytestring_unittest.cpp
+++ b/core/fxcrt/bytestring_unittest.cpp
@@ -1381,7 +1381,7 @@
 
   pdfium::span<const uint8_t> span5(
       pdfium::as_bytes(pdfium::make_span("hello", 5)));
-  EXPECT_EQ(byte_string_c.span(), span5);
+  EXPECT_EQ(byte_string_c.raw_span(), span5);
 }
 
 TEST(ByteStringView, OperatorNE) {
diff --git a/core/fxcrt/cfx_seekablemultistream_unittest.cpp b/core/fxcrt/cfx_seekablemultistream_unittest.cpp
index 95f6a08..977563f 100644
--- a/core/fxcrt/cfx_seekablemultistream_unittest.cpp
+++ b/core/fxcrt/cfx_seekablemultistream_unittest.cpp
@@ -41,11 +41,11 @@
   auto stream3 = pdfium::MakeUnique<CPDF_Stream>();
 
   // 16 chars total.
-  stream1->InitStream(ByteStringView("one t").span(),
+  stream1->InitStream(ByteStringView("one t").raw_span(),
                       pdfium::MakeUnique<CPDF_Dictionary>());
-  stream2->InitStream(ByteStringView("wo ").span(),
+  stream2->InitStream(ByteStringView("wo ").raw_span(),
                       pdfium::MakeUnique<CPDF_Dictionary>());
-  stream3->InitStream(ByteStringView("three!!!").span(),
+  stream3->InitStream(ByteStringView("three!!!").raw_span(),
                       pdfium::MakeUnique<CPDF_Dictionary>());
 
   streams.push_back(stream1.get());
diff --git a/core/fxcrt/string_view_template.h b/core/fxcrt/string_view_template.h
index df9e36f..90022c8 100644
--- a/core/fxcrt/string_view_template.h
+++ b/core/fxcrt/string_view_template.h
@@ -158,7 +158,11 @@
     return strid << ((4 - size) * 8);
   }
 
-  pdfium::span<const UnsignedType> span() const { return m_Span; }
+  pdfium::span<const UnsignedType> raw_span() const { return m_Span; }
+  pdfium::span<const CharType> span() const {
+    return pdfium::make_span(reinterpret_cast<const CharType*>(m_Span.data()),
+                             m_Span.size());
+  }
   const UnsignedType* raw_str() const { return m_Span.data(); }
   const CharType* unterminated_c_str() const {
     return reinterpret_cast<const CharType*>(m_Span.data());
diff --git a/fpdfsdk/fpdf_transformpage.cpp b/fpdfsdk/fpdf_transformpage.cpp
index aedfff4..f6cabcd 100644
--- a/fpdfsdk/fpdf_transformpage.cpp
+++ b/fpdfsdk/fpdf_transformpage.cpp
@@ -200,7 +200,7 @@
 
   CPDF_Stream* pEndStream =
       pDoc->NewIndirect<CPDF_Stream>(nullptr, 0, pDoc->New<CPDF_Dictionary>());
-  pEndStream->SetData(ByteStringView(" Q").span());
+  pEndStream->SetData(ByteStringView(" Q").raw_span());
 
   if (CPDF_Array* pContentArray = ToArray(pContentObj)) {
     pContentArray->InsertAt(0, pStream->MakeReference(pDoc));
diff --git a/fpdfsdk/fpdf_view.cpp b/fpdfsdk/fpdf_view.cpp
index 0123035..9b1e84b 100644
--- a/fpdfsdk/fpdf_view.cpp
+++ b/fpdfsdk/fpdf_view.cpp
@@ -1056,7 +1056,7 @@
   CPDF_NameTree name_tree(pDoc, "Dests");
   ByteStringView name_view(name);
   return FPDFDestFromCPDFArray(
-      name_tree.LookupNamedDest(pDoc, PDF_DecodeText(name_view.span())));
+      name_tree.LookupNamedDest(pDoc, PDF_DecodeText(name_view.raw_span())));
 }
 
 #ifdef PDF_ENABLE_V8
@@ -1160,7 +1160,7 @@
         break;
       i++;
     }
-    wsName = PDF_DecodeText(bsName.span());
+    wsName = PDF_DecodeText(bsName.raw_span());
   } else {
     pDestObj = nameTree.LookupValueAndName(index, &wsName);
   }