public static PdfArrayDataType Parse(string s) { s = s.Trim(); if (!s.StartsWith("[") || !s.EndsWith("]")) { throw new InvalidOperationException("{0} is not a valid array"); } PdfArrayDataType pdfArrayDataType = new PdfArrayDataType(); int i = 0; InternalParse(pdfArrayDataType, s, ref i); return(pdfArrayDataType); }
private static void InternalParse(PdfArrayDataType pdfArrayDataType, string s, ref int i) { i++; while (i < s.Length) { if (PdfStringDataType.IsStartChar(s, i)) { string item = PdfStringDataType.GetRawData(s, ref i); pdfArrayDataType.StringElements.Add(item); pdfArrayDataType.Elements.Add(item); } if (PdfHexStringDataType.IsStartChar(s, i)) { string item = PdfHexStringDataType.GetRawData(s, ref i); pdfArrayDataType.StringElements.Add(item); pdfArrayDataType.Elements.Add(item); } else if (PdfNumericDataType.IsStartChar(s, i)) { string item = PdfNumericDataType.GetRawData(s, ref i); pdfArrayDataType.StringElements.Add(item); pdfArrayDataType.Elements.Add(float.Parse(item, NumberFormatInfo.InvariantInfo)); } else if (PdfArrayDataType.IsStartChar(s, i)) { string item = PdfArrayDataType.GetRawData(s, ref i); pdfArrayDataType.StringElements.Add(item); PdfArrayDataType innerPdfArrayDataType = new PdfArrayDataType(); InternalParse(innerPdfArrayDataType, s, ref i); pdfArrayDataType.Elements.Add(innerPdfArrayDataType); } else if (s[i] == ']') { return; } else if (s[i] == ' ') { i++; } else { throw new ArgumentException(string.Format("{0} is not an array", s)); } } }