Mercurial > repos > IBBoard.Ini
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 |
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 | 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 | 15 /// <summary> |
16 /// Checks whether <code>line</code> appears to be the start of a new INI section | |
17 /// </summary> | |
18 /// <param name="line"> | |
19 /// The string to check to see if it matches the INI section header format | |
20 /// </param> | |
21 /// <returns> | |
22 /// <code>true</code> if the string looks like an INI section header, else <code>false</code> | |
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 | 29 |
30 /// <summary> | |
31 /// Checks whether a string looks like an INI section by starting with a section header and zero or more lines | |
32 /// </summary> | |
33 /// <param name="potentialSection"> | |
34 /// The string to check to see if it matches the INI section format | |
35 /// </param> | |
36 /// <returns> | |
37 /// <code>true</code> if the string looks like an INI section, else <code>false</code> | |
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 | 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 | 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 | 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 | 68 IIniLine iniLine = IniLineParser.ParseIniLine(sectionLines[i]); |
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 } |