コード例 #1
0
        private static IScriptExtent GetExtentFromConstant(string value, IScriptExtent source)
        {
            string startLine        = null;
            int    newLineCount     = 1;
            int    positionInColumn = 1;
            int    lastNewLineIndex = -1;

            for (int i = 0; i < value.Length; i++)
            {
                switch (value[i])
                {
                case '\n':
                    if (startLine == null)
                    {
                        startLine = value.Substring(0, i + 1);
                    }

                    lastNewLineIndex = i;
                    newLineCount++;
                    positionInColumn = 1;
                    break;

                case '\r':
                    break;

                default:
                    positionInColumn++;
                    break;
                }
            }

            if (startLine == null)
            {
                startLine = value;
            }

            IScriptPosition oldStart   = source.StartScriptPosition;
            string          fullScript = oldStart.GetFullScript();

            string endLine =
                lastNewLineIndex > -1
                    ? value.Substring(lastNewLineIndex + 1, value.Length - lastNewLineIndex)
                    : value;

            var start = new ScriptPosition(
                oldStart.File,
                1,
                1,
                startLine,
                fullScript);

            var end = new ScriptPosition(
                oldStart.File,
                newLineCount,
                positionInColumn,
                endLine,
                fullScript);

            return(new ScriptExtent(start, end));
        }
コード例 #2
0
 public static IScriptPosition Position(IScriptPosition position = null)
 {
     return(PositionImpl(position?.File, position?.GetFullScript()));
 }