Exemplo n.º 1
0
 public PGNParser(TextReader reader)
 {
     tokenizer = new PGNTokenizer (reader, false);
 }
Exemplo n.º 2
0
            /*
               private static void loadTokensTillDelim(string delim, StringBuilder buf, PGNTokenizer tokenizer) {
               string token;
               while((token = tokenizer.nextToken()) != null) {
               buf.Append(token);
               if(token.Equals(delim))
               return;
               }

               throw new PGNParserException();
               }
             */
            private static void readTagValuePair(IList
							      tagList,
							      PGNTokenizer
							      tokenizer)
            {
                string name, value;
                if ((name = tokenizer.nextToken ()) == null)
                    throw new
                        PGNParserException
                        ("Reached the end after starting a token begin!");
                if (name.Equals ("]"))	/* empty tag */
                    return;

                StringBuilder value_buf =
                    new StringBuilder ();
                while (true)
                  {
                      value = tokenizer.nextToken ();
                      if (value == null)
                        {
                            throw new
                                PGNParserException
                                ("No more tokens but i'm trying to read the tag value");
                        }
                      if (value.Equals ("]"))
                        {
                            PGNTag tag =
                                new PGNTag (name,
                                    extractTagValue
                                    (value_buf.
                                     ToString
                                     ()));
                            if (!tagList.
                            Contains (tag))
                                tagList.Add (tag);
                            break;
                        }
                      value_buf.Append (value);
                  }
            }
Exemplo n.º 3
0
            private static string readComment(string begintoken,
							   PGNTokenizer
							   tokenizer)
            {
                string token = begintoken;
                StringBuilder commentBuffer =
                    new StringBuilder ();
                Stack stack = new Stack ();
                string expected_token =
                    (string) matching_tokens[token];

                stack.Push (token);
                //      commentBuffer.Append(token);
                tokenizer.ReturnDelimiterAsToken = true;

                while ((token =
                    tokenizer.nextToken ()) != null)
                  {
                      if (token.Equals ("\\"))
                        {
                            string nextToken =
                                tokenizer.
                                nextToken ();
                            if (nextToken == null)
                                throw new
                                    PGNParserException
                                    ("Unable to find the next token after the escape char");
                            if (!isSpecialToken
                            (nextToken))
                                throw new
                                    PGNParserException
                                    ("Invalid escape char: "
                                     +
                                     nextToken);
                            commentBuffer.
                                Append
                                (nextToken);
                            continue;
                        }
                      //      if(token.Equals("{") || token.Equals("(") || token.Equals("[") || token.Equals("<")) {
                      if (token.Equals ("{")
                          || token.Equals (begintoken))
                        {
                            stack.Push (token);
                            expected_token =
                                (string)
                                matching_tokens
                                [token];
                            if (commentBuffer.Length >
                            0)
                              {
                                  // Another comment within a comment. Add one extra space to the comment buffer since
                                  // we are not adding the delims
                                  commentBuffer.
                                      Append
                                      (" ");
                              }
                        }
                      else if (token.
                           Equals (expected_token))
                        {
                            stack.Pop ();
                            if (stack.Count == 0)
                                break;
                            expected_token =
                                (string)
                                matching_tokens
                                [stack.Peek ()];
                        }
                      else if (token.Equals ("\""))
                        {
                            commentBuffer.
                                Append (token);
                            commentBuffer.
                                Append (readString
                                    (token,
                                     tokenizer));
                            commentBuffer.
                                Append (token);
                        }
                      else
                          commentBuffer.
                              Append (token);
                  }

                if (token == null)
                  {
                      StringBuilder stackinfo =
                          new StringBuilder ();
                      foreach (string str in stack)
                          stackinfo.Append (str +
                                    ", ");
                      throw new
                          PGNParserException
                          ("Waiting for delimiter tokens for: "
                           + stackinfo);
                  }

                tokenizer.ReturnDelimiterAsToken = false;
                return commentBuffer.ToString ();
            }
Exemplo n.º 4
0
            private static string readString(string token,
							  PGNTokenizer
							  tokenizer)
            {
                bool orig = tokenizer.ReturnDelimiterAsToken;
                tokenizer.ReturnDelimiterAsToken = true;
                StringBuilder buffer = new StringBuilder ();
                while ((token =
                    tokenizer.nextToken ()) != null)
                  {
                      if (token.Equals ("\\"))
                        {	// escape char
                            string nextToken =
                                tokenizer.
                                nextToken ();
                            if (nextToken == null)
                                throw new
                                    PGNParserException
                                    ("No character after \\");
                            if (!nextToken.
                            Equals ("\"")
                            && !nextToken.
                            Equals ("\\"))
                                throw new
                                    PGNParserException
                                    ("Invalid escape char: "
                                     +
                                     nextToken
                                     [0]);
                            buffer.Append (nextToken);
                        }
                      else if (token.Equals ("\""))	// end of the string
                          break;
                      else
                          buffer.Append (token);
                  }

                tokenizer.ReturnDelimiterAsToken = orig;
                return buffer.ToString ();
            }
Exemplo n.º 5
0
            // This type of a comment starts with ';' and goes on till the end of the line
            private static string readLineComment(string token,
							       PGNTokenizer
							       tokenizer)
            {
                StringBuilder buffer = new StringBuilder ();
                tokenizer.ReturnDelimiterAsToken = true;
                while ((token =
                    tokenizer.nextToken ()) != null)
                  {
                      if (token.Equals ("\n"))
                          break;
                      buffer.Append (token);
                  }
                tokenizer.ReturnDelimiterAsToken = false;
                return buffer.ToString ();
            }
Exemplo n.º 6
0
            private static void ignoreLine(string token,
							PGNTokenizer
							tokenizer)
            {
                tokenizer.ReturnDelimiterAsToken = true;
                while ((token =
                    tokenizer.nextToken ()) != null)
                  {
                      if (token.Equals ("\n"))
                          break;
                  }
                tokenizer.ReturnDelimiterAsToken = false;
            }