idTech4.Text.idLexer.ReadWhiteSpace C# (CSharp) Method

ReadWhiteSpace() private method

Reads spaces, tabs, C-like comments, etc.
When a newline character is found the scripts line counter is increased.
private ReadWhiteSpace ( ) : bool
return bool
		private bool ReadWhiteSpace()
		{
			char c;

			while(true)
			{
				// skip white space
				while((c = GetBufferCharacter(_scriptPosition)) <= ' ')
				{
					if(c == '\0')
					{
						return false;
					}

					if(c == '\n')
					{
						_line++;
					}

					_scriptPosition++;
				}

				// skip comments
				if(GetBufferCharacter(_scriptPosition) == '/')
				{
					// comments //
					if(GetBufferCharacter(_scriptPosition + 1) == '/')
					{
						_scriptPosition++;

						do
						{
							_scriptPosition++;

							if(GetBufferCharacter(_scriptPosition) == '\0')
							{
								return false;
							}
						}
						while(GetBufferCharacter(_scriptPosition) != '\n');

						_line++;
						_scriptPosition++;

						if(GetBufferCharacter(_scriptPosition) == '\0')
						{
							return false;
						}

						continue;
					}
					// comments /* */
					else if(GetBufferCharacter(_scriptPosition + 1) == '*')
					{
						_scriptPosition++;

						while(true)
						{
							_scriptPosition++;

							if(GetBufferCharacter(_scriptPosition) == '\0')
							{
								return false;
							}

							if(GetBufferCharacter(_scriptPosition) == '\n')
							{
								_line++;
							}
							else if(GetBufferCharacter(_scriptPosition) == '/')
							{
								if(GetBufferCharacter(_scriptPosition - 1) == '*')
								{
									break;
								}

								if(GetBufferCharacter(_scriptPosition + 1) == '*')
								{
									Warning("nested comment");
								}
							}
						}

						_scriptPosition += 2;

						if(GetBufferCharacter(_scriptPosition) == '\0')
						{
							return false;
						}

						continue;
					}
				}

				break;
			}

			return true;
		}
		#endregion