annotate IniSectionParser.cs @ 13:ee9f11c67399 default tip

* Correct version number pattern no-open-ticket
author IBBoard <dev@ibboard.co.uk>
date Mon, 28 Feb 2011 20:22:41 +0000
parents f6f726c92e56
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
1 // This file (IniSectionParser.cs) is a part of the IBBoard.Ini library and is copyright 2009 IBBoard.
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
2 //
6
f6f726c92e56 Re #8 - License code
IBBoard <dev@ibboard.co.uk>
parents: 2
diff changeset
3 // The file and the library/program it is in are licensed under the GNU LGPL license, either version 3 of the License or (at your option) any later version. Please see COPYING.LGPL for more information and the full license.
0
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
4
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
5 using System;
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
6 using System.Text.RegularExpressions;
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
7
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
8 namespace IBBoard.Ini
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
9 {
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
10 /// <summary>
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
11 /// The IniSectionParser provides parsing of a single section from an INI file
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
12 /// </summary>
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
13 public class IniSectionParser
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
14 {
2
2dde4c1d19d9 Closes #6 - Create INI parser
IBBoard <dev@ibboard.co.uk>
parents: 1
diff changeset
15 /// <summary>
2dde4c1d19d9 Closes #6 - Create INI parser
IBBoard <dev@ibboard.co.uk>
parents: 1
diff changeset
16 /// Checks whether <code>line</code> appears to be the start of a new INI section
2dde4c1d19d9 Closes #6 - Create INI parser
IBBoard <dev@ibboard.co.uk>
parents: 1
diff changeset
17 /// </summary>
2dde4c1d19d9 Closes #6 - Create INI parser
IBBoard <dev@ibboard.co.uk>
parents: 1
diff changeset
18 /// <param name="line">
2dde4c1d19d9 Closes #6 - Create INI parser
IBBoard <dev@ibboard.co.uk>
parents: 1
diff changeset
19 /// The string to check to see if it matches the INI section header format
2dde4c1d19d9 Closes #6 - Create INI parser
IBBoard <dev@ibboard.co.uk>
parents: 1
diff changeset
20 /// </param>
2dde4c1d19d9 Closes #6 - Create INI parser
IBBoard <dev@ibboard.co.uk>
parents: 1
diff changeset
21 /// <returns>
2dde4c1d19d9 Closes #6 - Create INI parser
IBBoard <dev@ibboard.co.uk>
parents: 1
diff changeset
22 /// <code>true</code> if the string looks like an INI section header, else <code>false</code>
2dde4c1d19d9 Closes #6 - Create INI parser
IBBoard <dev@ibboard.co.uk>
parents: 1
diff changeset
23 /// </returns>
0
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
24 public static bool IsLineStartOfNewSection(string line)
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
25 {
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
26 line = line.Trim();
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
27 return line.StartsWith("[") && line.EndsWith("]");
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
28 }
2
2dde4c1d19d9 Closes #6 - Create INI parser
IBBoard <dev@ibboard.co.uk>
parents: 1
diff changeset
29
2dde4c1d19d9 Closes #6 - Create INI parser
IBBoard <dev@ibboard.co.uk>
parents: 1
diff changeset
30 /// <summary>
2dde4c1d19d9 Closes #6 - Create INI parser
IBBoard <dev@ibboard.co.uk>
parents: 1
diff changeset
31 /// Checks whether a string looks like an INI section by starting with a section header and zero or more lines
2dde4c1d19d9 Closes #6 - Create INI parser
IBBoard <dev@ibboard.co.uk>
parents: 1
diff changeset
32 /// </summary>
2dde4c1d19d9 Closes #6 - Create INI parser
IBBoard <dev@ibboard.co.uk>
parents: 1
diff changeset
33 /// <param name="potentialSection">
2dde4c1d19d9 Closes #6 - Create INI parser
IBBoard <dev@ibboard.co.uk>
parents: 1
diff changeset
34 /// The string to check to see if it matches the INI section format
2dde4c1d19d9 Closes #6 - Create INI parser
IBBoard <dev@ibboard.co.uk>
parents: 1
diff changeset
35 /// </param>
2dde4c1d19d9 Closes #6 - Create INI parser
IBBoard <dev@ibboard.co.uk>
parents: 1
diff changeset
36 /// <returns>
2dde4c1d19d9 Closes #6 - Create INI parser
IBBoard <dev@ibboard.co.uk>
parents: 1
diff changeset
37 /// <code>true</code> if the string looks like an INI section, else <code>false</code>
2dde4c1d19d9 Closes #6 - Create INI parser
IBBoard <dev@ibboard.co.uk>
parents: 1
diff changeset
38 /// </returns>
0
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
39 public static bool IsStringAnIniSection(string potentialSection)
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
40 {
2
2dde4c1d19d9 Closes #6 - Create INI parser
IBBoard <dev@ibboard.co.uk>
parents: 1
diff changeset
41 return Regex.IsMatch(potentialSection, "^\\s*\\[[a-zA-Z0-9]+\\]\\s*(\\n|$)", RegexOptions.Multiline);
0
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
42 }
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
43
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
44 /// <summary>
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
45 /// Creates an IniSection object from a string. The new line (\n) character is used to determine line breaks.
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
46 /// </summary>
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
47 /// <param name="sectionString">
2
2dde4c1d19d9 Closes #6 - Create INI parser
IBBoard <dev@ibboard.co.uk>
parents: 1
diff changeset
48 /// The text of a section including the section header and any additional lines
0
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
49 /// </param>
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
50 /// <returns>
2
2dde4c1d19d9 Closes #6 - Create INI parser
IBBoard <dev@ibboard.co.uk>
parents: 1
diff changeset
51 /// An <see cref="IniSection"/> with the header and INI lines that were parsed from <code>sectionString</code>
0
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
52 /// </returns>
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
53 public static IniSection CreateSection(string sectionString)
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
54 {
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
55 if (!IsStringAnIniSection(sectionString))
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
56 {
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
57 throw new InvalidIniSectionException("Ini section did not start with an INI header");
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
58 }
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
59
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
60 string[] sectionLines = sectionString.Split('\n');
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
61 string headerLine = sectionLines[0];
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
62 string sectionName = headerLine.Trim().Substring(1, headerLine.Length - 2);
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
63 IniSection section = new IniSection(sectionName);
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
64 int lineCount = sectionLines.Length;
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
65
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
66 for (int i = 1; i < lineCount; i++)
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
67 {
1
f9444f1786cd Re #6 - INI parsing library
IBBoard <dev@ibboard.co.uk>
parents: 0
diff changeset
68 IIniLine iniLine = IniLineParser.ParseIniLine(sectionLines[i]);
f9444f1786cd Re #6 - INI parsing library
IBBoard <dev@ibboard.co.uk>
parents: 0
diff changeset
69 section.AddIniLine(iniLine);
0
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
70 }
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
71
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
72 return section;
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
73 }
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
74 }
fbde5e1920ba Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
75 }