Esempio n. 1
0
        /// <summary>
        /// Breaks the specified field value into lines that
        /// do not exceeding the field width, and aligns the text
        /// on each line according to the specified alignment rules.
        /// </summary>
        private static Queue <string> MakeFieldLines(
            string text,
            FieldRule fieldRule)
        {
            List <string> resultingLines = new List <string>();

            // Account for top padding
            // -
            resultingLines.AddRange(
                Enumerable.Repeat(EmptyLine(fieldRule), fieldRule.PaddingTop));

            if (fieldRule.LineBreaking == LineBreaking.Anywhere)
            {
                resultingLines.AddRange(text
                                        .Split(fieldRule.Width)
                                        .Select(characters => new string(characters.ToArray())));
            }
            else if (fieldRule.LineBreaking == LineBreaking.Whitespace)
            {
                resultingLines.AddRange(text.MakeLinesByWhitespace(fieldRule.Width));
            }

            // Account for bottom padding
            // -
            resultingLines.AddRange(
                Enumerable.Repeat(EmptyLine(fieldRule), fieldRule.PaddingBottom));

            return(new Queue <string>(resultingLines.Select(line =>
            {
                // Account for alignment
                // -
                if (fieldRule.Align == Align.Left)
                {
                    return line.PadRight(fieldRule.Width);
                }
                else if (fieldRule.Align == Align.Right)
                {
                    return line.PadLeft(fieldRule.Width);
                }
                else if (fieldRule.Align == Align.Center)
                {
                    int remainingSpace = fieldRule.Width - line.Length;

                    return
                    " ".Replicate(remainingSpace / 2) +
                    line +
                    " ".Replicate((remainingSpace + 1) / 2);
                }
                else
                {
                    throw new Exception();
                }
            }).Select(line =>
            {
                // Account for left and right padding
                // -
                return line
                .PadLeft(fieldRule.Width + fieldRule.PaddingLeft)
                .PadRight(fieldRule.FullWidth);
            })));
        }
Esempio n. 2
0
 /// <summary>
 /// Gets an empty line with whose width
 /// is equal to the provided field rule's
 /// width (excluding any left or right padding).
 /// </summary>
 private static string EmptyLine(FieldRule fieldRule)
 {
     return(" ".Replicate(fieldRule.Width));
 }