/// <summary>
        /// Automatski pravi value read zonu na mestu gde je stao kursor
        /// </summary>
        /// <returns></returns>
        protected selectZone autoValueReadZone()
        {
            var        sr     = selectToCorner(textCursorZoneCorner.Right);
            selectZone output = new selectZone(x, y, sr.x, 1);

            return(output);
        }
        // ------------

        /// <summary>
        /// Pravi selectZone na osnovu sadrzaja trenutne linije. Trazi [ i ] kao granicnike zone. Ako ih ima vise, upotrebice prvi par.
        /// </summary>
        /// <param name="zoneHeight">Height of the zone.</param>
        /// <param name="zoneWidth">Width of the zone.</param>
        /// <param name="option">The option.</param>
        /// <returns>
        /// selectZone objekat koji treba upotrebiti kao inputReadZone ili za nesto drugo
        /// </returns>
        /// <remarks>
        /// Ako u trenutnoj liniji:
        /// - ima vise [ ] parova: upotrebice prvi
        /// - je sve prazno ili popunjeno razmacima: upotrebice celu liniju kao zonu
        /// - ako je od x-a do desnog inner x-a prazno
        /// </remarks>
        public selectZone getSelectZone(Int32 zoneHeight = -1, Int32 zoneWidth = -1, params selectZoneOption[] option)
        {
            var        optionList = option.ToList();
            selectZone output     = new selectZone();

            output.y = y;

            if (zoneHeight == -1)
            {
                zoneHeight    = 1;
                output.height = zoneHeight;
            }

            selectZoneOption takeOption = option.takeFirstFromList(selectZoneOption.takeDefinedWidth,
                                                                   selectZoneOption.takeFromPositionToRightEnd,
                                                                   selectZoneOption.takeBracetDefinedArea,
                                                                   selectZoneOption.takeCompleteLine);

            if (takeOption == selectZoneOption.takeDefinedWidth)
            {
                if (zoneWidth == -1)
                {
                    takeOption = selectZoneOption.takeFromPositionToRightEnd;
                }
            }

            if (takeOption == selectZoneOption.takeBracetDefinedArea)
            {
                //if (target is ISupportsCursorWriteAndSelect)
                //{
                //    ISupportsCursorWriteAndSelect target2 = target as ISupportsCursorWriteAndSelect;
                //    String lastLine = target2.select(this, -1, true);
                //    Int32 si = lastLine.IndexOf("[");

                //    if (si == -1)
                //    {
                //        prevLine();
                //        lastLine = target2.select(this, -1, true);
                //        if (lastLine.IndexOf("[") == -1)
                //        {
                //            nextLine();
                //        } else
                //        {
                //            si = lastLine.IndexOf("[");
                //        }
                //    }

                //    Int32 ln = lastLine.IndexOf("]") - si;
                //    if (ln < 0)
                //    {
                //        takeOption = selectZoneOption.takeFromPositionToRightEnd;
                //    } else
                //    {
                //        output.y = y;
                //        output.x = si;
                //        output.weight = ln;
                //    }
                //}
            }

            switch (takeOption)
            {
            case selectZoneOption.takeFromPositionToRightEnd:
                output.x     = x;
                output.width = selectToCorner(textCursorZoneCorner.Right).x;
                break;

            case selectZoneOption.takeCompleteLine:
                output.x     = frame.innerLeftPosition;
                output.width = frame.innerWidth;
                break;
            }

            var moveOption = option.takeFirstFromList(selectZoneOption.none,
                                                      selectZoneOption.moveCursorToBottomEndOfZone,
                                                      selectZoneOption.moveCursorToBeginningOfZone);

            switch (moveOption)
            {
            case selectZoneOption.moveCursorToBeginningOfZone:
                moveLineTo(output.y);
                moveXTo(output.x);
                break;

            case selectZoneOption.moveCursorToBottomEndOfZone:
                moveLineTo(output.y + output.height);
                break;
            }

            return(output);
        }