Beispiel #1
0
		Indent(Indent engine)
		{
			this.indentStack = engine.indentStack.Clone();
			this.options = engine.options;
			this.curIndent = engine.curIndent;
			this.extraSpaces = engine.extraSpaces;
			this.indentString = engine.indentString;
		}
		JSonIndentEngine (JSonIndentEngine jSonIndentEngine)
		{
			this.editor = jSonIndentEngine.editor;
			this.ctx = jSonIndentEngine.ctx;
			this.offset = jSonIndentEngine.offset;
			this.line = jSonIndentEngine.line;
			this.column = jSonIndentEngine.column;
			this.thisLineIndent = jSonIndentEngine.thisLineIndent.Clone ();
			this.nextLineIndent = jSonIndentEngine.nextLineIndent.Clone ();
			this.currentIndent = jSonIndentEngine.currentIndent != null ? new StringBuilder (jSonIndentEngine.currentIndent.ToString ()) : null;
			this.previousChar = jSonIndentEngine.previousChar;
			this.isLineStart = jSonIndentEngine.isLineStart;
			this.isInString = jSonIndentEngine.isInString;
		}
		public void Reset ()
		{
			offset = 0;
			line = column = 1;
			thisLineIndent = new Indent (ctx.GetOptionSet ());
			nextLineIndent = new Indent (ctx.GetOptionSet ());
			currentIndent = new StringBuilder ();
			// previousNewline = '\0';
			previousChar = '\0';
			isLineStart = true;
			isInString = false;
		}
		public void Push (char ch)
		{
			var isNewLine = NewLine.IsNewLine (ch);
			if (!isNewLine) {
				if (ch == '"')
					isInString = !IsInsideString;
				if (ch == '{' || ch == '[') {
					nextLineIndent.Push (IndentType.Block);
				} else if (ch == '}' || ch == ']') {
					if (thisLineIndent.Count > 0)
						thisLineIndent.Pop ();
					if (nextLineIndent.Count > 0)
						nextLineIndent.Pop ();
				} 
			} else {
				if (ch == NewLine.LF && previousChar == NewLine.CR) {
					offset++;
					previousChar = ch;
					return;
				}
			}

			offset++;
			if (!isNewLine) {
				// previousNewline = '\0';

				isLineStart &= char.IsWhiteSpace (ch);

				if (isLineStart)
					currentIndent.Append (ch);

				if (ch == '\t') {
					var nextTabStop = (column - 1 + editor.Options.IndentationSize) / editor.Options.IndentationSize;
					column = 1 + nextTabStop * editor.Options.IndentationSize;
				} else {
					column++;
				}
			} else {
				// previousNewline = ch;
				currentIndent.Length = 0;
				isLineStart = true;
				column = 1;
				line++;
				thisLineIndent = nextLineIndent.Clone ();
			}
			previousChar = ch;
		}
Beispiel #5
0
		public void Push(Indent indent)
		{
			foreach (var i in indent.indentStack)
				Push(i);
		}
Beispiel #6
0
		public static Indent ConvertFrom(string indentString, Indent correctIndent, OptionSet options = null)
		{
			options = options ?? correctIndent.options;
			var result = new Indent(options);

			var indent = string.Concat(indentString.Where(c => c == ' ' || c == '\t'));
			var indentTypes = new Stack<IndentType>(correctIndent.indentStack);

			foreach (var _ in indent.TakeWhile(c => c == '\t'))
			{
				if (indentTypes.Count > 0)
					result.Push(indentTypes.Pop());
				else
					result.Push(IndentType.Continuation);
			}

			result.ExtraSpaces = indent
				.SkipWhile(c => c == '\t')
				.TakeWhile(c => c == ' ')
				.Count();

			return result;
		}
Beispiel #7
0
		public Indent GetIndentWithoutSpace ()
		{
			var result = new Indent(options);
			foreach (var i in indentStack)
					result.Push(i);
			return result;
		}