示例#1
0
        protected object GetTokenAsSinglyQuotedString(int startIndex, Encoding /*!*/ encoding, bool forceBinaryString)
        {
            PhpStringBuilder result = new PhpStringBuilder(encoding, forceBinaryString, TokenLength);

            int buffer_pos = token_start + startIndex + 1;

            // the following loops expect the token ending by '
            Debug.Assert(buffer[buffer_pos - 1] == '\'' && buffer[token_end - 1] == '\'');

            //StringBuilder result = new StringBuilder(TokenLength);
            char c;

            while ((c = buffer[buffer_pos++]) != '\'')
            {
                if (c == '\\')
                {
                    switch (c = buffer[buffer_pos++])
                    {
                    case '\\':
                    case '\'':
                        result.Append(c);
                        break;

                    // ??? will cause many problems ... but PHP allows this
                    //case 'C':
                    //  if (!inUnicodeString) goto default;
                    //  result.Append(ParseCodePointName(ref buffer_pos));
                    //  break;

                    //case 'u':
                    //case 'U':
                    //  if (!inUnicodeString) goto default;
                    //  result.Append(ParseCodePoint( c == 'u' ? 4 : 6, ref buffer_pos));
                    //  break;

                    default:
                        result.Append('\\');
                        result.Append(c);
                        break;
                    }
                }
                else
                {
                    result.Append(c);
                }
            }

            return(result.Result);
        }
示例#2
0
        private Expression CreateConcatExOrStringLiteral(Position p, List <Expression> exprs, bool trimEoln)
        {
            PhpStringBuilder encapsed_str = strBufStack.Pop();

            if (trimEoln)
            {
                encapsed_str.TrimEoln();
            }

            if (exprs.Count > 0)
            {
                if (encapsed_str.Length > 0)
                {
                    exprs.Add(encapsed_str.CreateLiteral(p));
                }

                return(new ConcatEx(p, exprs));
            }
            else
            {
                return(encapsed_str.CreateLiteral(p));
            }
        }
示例#3
0
        protected object GetTokenAsSinglyQuotedString(int startIndex, Encoding/*!*/ encoding, bool forceBinaryString)
		{
            PhpStringBuilder result = new PhpStringBuilder(encoding, forceBinaryString, TokenLength);

			int buffer_pos = token_start + startIndex + 1;

			// the following loops expect the token ending by '
			Debug.Assert(buffer[buffer_pos - 1] == '\'' && buffer[token_end - 1] == '\'');

			//StringBuilder result = new StringBuilder(TokenLength);
			char c;

			while ((c = buffer[buffer_pos++]) != '\'')
			{
				if (c == '\\')
				{
					switch (c = buffer[buffer_pos++])
					{
						case '\\':
						case '\'':
							result.Append(c);
							break;

						// ??? will cause many problems ... but PHP allows this
						//case 'C':
						//  if (!inUnicodeString) goto default;
						//  result.Append(ParseCodePointName(ref buffer_pos));
						//  break;

						//case 'u':
						//case 'U':
						//  if (!inUnicodeString) goto default;
						//  result.Append(ParseCodePoint( c == 'u' ? 4 : 6, ref buffer_pos));
						//  break;

						default:
							result.Append('\\');
							result.Append(c);
							break;
					}
				}
				else
				{
					result.Append(c);
				}
			}

            return result.Result;
        }
示例#4
0
        //protected void GetTokenAsQualifiedName(int startIndex, List<string>/*!*/ result)
        //{
        //    Debug.Assert(result != null);

        //    int current_name = token_start + startIndex;
        //    int next_separator = token_start + startIndex;

        //    for (; ; )
        //    {
        //        while (next_separator < token_end && buffer[next_separator] != '\\')
        //            next_separator++;

        //        if (next_separator == token_end) break;

        //        result.Add(new String(buffer, current_name, next_separator - current_name));
        //        next_separator += QualifiedName.Separator.ToString().Length;
        //        current_name = next_separator;
        //    }

        //    // last item:
        //    result.Add(new String(buffer, current_name, token_end - current_name));
        //}

        #region GetTokenAs*QuotedString

        protected object GetTokenAsDoublyQuotedString(int startIndex, Encoding/*!*/ encoding, bool forceBinaryString)
		{
            PhpStringBuilder result = new PhpStringBuilder(encoding, forceBinaryString, TokenLength);

			int buffer_pos = token_start + startIndex + 1;

			// the following loops expect the token ending by "
			Debug.Assert(buffer[buffer_pos - 1] == '"' && buffer[token_end - 1] == '"');

			//StringBuilder result = new StringBuilder(TokenLength);

            char c;
            while ((c = buffer[buffer_pos++]) != '"')
			{
				if (c == '\\')
				{
					switch (c = buffer[buffer_pos++])
					{
						case 'n':
							result.Append('\n');
							break;

						case 'r':
							result.Append('\r');
							break;

						case 't':
							result.Append('\t');
							break;

						case '\\':
						case '$':
						case '"':
							result.Append(c);
							break;

						case 'C':
							if (!inUnicodeString) goto default;
							result.Append(ParseCodePointName(ref buffer_pos));
							break;

						case 'u':
						case 'U':
							if (!inUnicodeString) goto default;
							result.Append(ParseCodePoint(c == 'u' ? 4 : 6, ref buffer_pos));
							break;

						case 'x':
							{
								int digit;
								if ((digit = Convert.AlphaNumericToDigit(buffer[buffer_pos])) < 16)
								{
									int hex_code = digit;
									buffer_pos++;
									if ((digit = Convert.AlphaNumericToDigit(buffer[buffer_pos])) < 16)
									{
										buffer_pos++;
										hex_code = (hex_code << 4) + digit;
									}

                                    //encodeBytes[0] = (byte)hex_code;
                                    //result.Append(encodeChars, 0, encoding.GetChars(encodeBytes, 0, 1, encodeChars, 0));
                                    result.Append((byte)hex_code);
								}
								else
								{
									result.Append('\\');
									result.Append('x');
								}
								break;
							}

						default:
							{
								int digit;
								if ((digit = Convert.NumericToDigit(c)) < 8)
								{
									int octal_code = digit;

									if ((digit = Convert.NumericToDigit(buffer[buffer_pos])) < 8)
									{
										octal_code = (octal_code << 3) + digit;
										buffer_pos++;

										if ((digit = Convert.NumericToDigit(buffer[buffer_pos])) < 8)
										{
											buffer_pos++;
											octal_code = (octal_code << 3) + digit;
										}
									}
                                    //encodeBytes[0] = (byte)octal_code;
                                    //result.Append(encodeChars, 0, encoding.GetChars(encodeBytes, 0, 1, encodeChars, 0));
                                    result.Append((byte)octal_code);
								}
								else
								{
									result.Append('\\');
									result.Append(c);
								}
								break;
							}
					}
				}
				else
				{
					result.Append(c);
				}
			}

			return result.Result;
		}
示例#5
0
        //protected void GetTokenAsQualifiedName(int startIndex, List<string>/*!*/ result)
        //{
        //    Debug.Assert(result != null);

        //    int current_name = token_start + startIndex;
        //    int next_separator = token_start + startIndex;

        //    for (; ; )
        //    {
        //        while (next_separator < token_end && buffer[next_separator] != '\\')
        //            next_separator++;

        //        if (next_separator == token_end) break;

        //        result.Add(new String(buffer, current_name, next_separator - current_name));
        //        next_separator += QualifiedName.Separator.ToString().Length;
        //        current_name = next_separator;
        //    }

        //    // last item:
        //    result.Add(new String(buffer, current_name, token_end - current_name));
        //}

        #region GetTokenAs*QuotedString

        protected object GetTokenAsDoublyQuotedString(int startIndex, Encoding /*!*/ encoding, bool forceBinaryString)
        {
            PhpStringBuilder result = new PhpStringBuilder(encoding, forceBinaryString, TokenLength);

            int buffer_pos = token_start + startIndex + 1;

            // the following loops expect the token ending by "
            Debug.Assert(buffer[buffer_pos - 1] == '"' && buffer[token_end - 1] == '"');

            //StringBuilder result = new StringBuilder(TokenLength);

            char c;

            while ((c = buffer[buffer_pos++]) != '"')
            {
                if (c == '\\')
                {
                    switch (c = buffer[buffer_pos++])
                    {
                    case 'n':
                        result.Append('\n');
                        break;

                    case 'r':
                        result.Append('\r');
                        break;

                    case 't':
                        result.Append('\t');
                        break;

                    case '\\':
                    case '$':
                    case '"':
                        result.Append(c);
                        break;

                    case 'C':
                        if (!inUnicodeString)
                        {
                            goto default;
                        }
                        result.Append(ParseCodePointName(ref buffer_pos));
                        break;

                    case 'u':
                    case 'U':
                        if (!inUnicodeString)
                        {
                            goto default;
                        }
                        result.Append(ParseCodePoint(c == 'u' ? 4 : 6, ref buffer_pos));
                        break;

                    case 'x':
                    {
                        int digit;
                        if ((digit = Convert.AlphaNumericToDigit(buffer[buffer_pos])) < 16)
                        {
                            int hex_code = digit;
                            buffer_pos++;
                            if ((digit = Convert.AlphaNumericToDigit(buffer[buffer_pos])) < 16)
                            {
                                buffer_pos++;
                                hex_code = (hex_code << 4) + digit;
                            }

                            //encodeBytes[0] = (byte)hex_code;
                            //result.Append(encodeChars, 0, encoding.GetChars(encodeBytes, 0, 1, encodeChars, 0));
                            result.Append((byte)hex_code);
                        }
                        else
                        {
                            result.Append('\\');
                            result.Append('x');
                        }
                        break;
                    }

                    default:
                    {
                        int digit;
                        if ((digit = Convert.NumericToDigit(c)) < 8)
                        {
                            int octal_code = digit;

                            if ((digit = Convert.NumericToDigit(buffer[buffer_pos])) < 8)
                            {
                                octal_code = (octal_code << 3) + digit;
                                buffer_pos++;

                                if ((digit = Convert.NumericToDigit(buffer[buffer_pos])) < 8)
                                {
                                    buffer_pos++;
                                    octal_code = (octal_code << 3) + digit;
                                }
                            }
                            //encodeBytes[0] = (byte)octal_code;
                            //result.Append(encodeChars, 0, encoding.GetChars(encodeBytes, 0, 1, encodeChars, 0));
                            result.Append((byte)octal_code);
                        }
                        else
                        {
                            result.Append('\\');
                            result.Append(c);
                        }
                        break;
                    }
                    }
                }
                else
                {
                    result.Append(c);
                }
            }

            return(result.Result);
        }