2 // PoResourceReader.cs: Reader from monoresgen.
5 // Marek Sieradzki (marek.sieradzki@gmail.com)
6 // Paolo Molaro (lupus@ximian.com)
7 // Gonzalo Paniagua Javier (gonzalo@ximian.com)
9 // (C) 2005 Marek Sieradzki
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32 using System
.Collections
;
34 using System
.Resources
;
37 namespace Mono
.XBuild
.Tasks
.GenerateResourceInternal
{
38 internal class PoResourceReader
: IResourceReader
{
43 public PoResourceReader (Stream stream
)
45 data
= new Hashtable ();
50 public virtual void Close ()
55 public IDictionaryEnumerator
GetEnumerator()
57 return data
.GetEnumerator ();
60 string GetValue (string line
)
62 int begin
= line
.IndexOf ('"');
64 throw new FormatException (String
.Format ("No begin quote at line {0}: {1}", line_num
, line
));
66 int end
= line
.LastIndexOf ('"');
68 throw new FormatException (String
.Format ("No closing quote at line {0}: {1}", line_num
, line
));
70 return line
.Substring (begin
+ 1, end
- begin
- 1);
75 StreamReader reader
= new StreamReader (s
);
79 bool ignoreNext
= false;
81 while ((line
= reader
.ReadLine ()) != null) {
87 if (line
[0] == '#') {
88 if (line
.Length
== 1 || line
[1] != ',')
91 if (line
.IndexOf ("fuzzy") != -1) {
95 throw new FormatException ("Error. Line: " + line_num
);
96 data
.Add (msgid
, msgstr
);
104 if (line
.StartsWith ("msgid ")) {
105 if (msgid
== null && msgstr
!= null)
106 throw new FormatException ("Found 2 consecutive msgid. Line: " + line_num
);
108 if (msgstr
!= null) {
110 data
.Add (msgid
, msgstr
);
117 msgid
= GetValue (line
);
121 if (line
.StartsWith ("msgstr ")) {
123 throw new FormatException ("msgstr with no msgid. Line: " + line_num
);
125 msgstr
= GetValue (line
);
129 if (line
[0] == '"') {
130 if (msgid
== null || msgstr
== null)
131 throw new FormatException ("Invalid format. Line: " + line_num
);
133 msgstr
+= GetValue (line
);
137 throw new FormatException ("Unexpected data. Line: " + line_num
);
142 throw new FormatException ("Expecting msgstr. Line: " + line_num
);
145 data
.Add (msgid
, msgstr
);
149 IEnumerator IEnumerable
.GetEnumerator ()
151 return GetEnumerator();
154 void IDisposable
.Dispose ()