private void WriteEntry(FormatObjectProperty entry, int maxNameWidth, int totalWidth)
        {
            bool          nameWritten   = false;
            string        value         = entry.Value;
            StringBuilder line          = new StringBuilder();
            int           spaceForValue = totalWidth - maxNameWidth - 3; // - space for " : "

            while (value != "")
            {
                if (!nameWritten)
                {
                    if (entry.PropertyName.Length > maxNameWidth)
                    {
                        line.Append(entry.PropertyName.Substring(0, maxNameWidth));
                    }
                    else
                    {
                        line.Append(entry.PropertyName.PadRight(maxNameWidth));
                    }
                    line.Append(" : ");
                    nameWritten = true;
                }
                else
                {
                    line.Append("".PadLeft(maxNameWidth + 3)); // + space for " : "
                }
                var len = spaceForValue > value.Length ? value.Length : spaceForValue;
                line.Append(value.Substring(0, len));
                value = value.Substring(len);
                OutputWriter.WriteLine(line.ToString());
                line.Clear();
            }
        }
        protected override void ProcessFormatEntry(FormatEntryData data)
        {
            var list = data as ListFormatEntryData;

            if (list == null)
            {
                throw new PSInvalidOperationException("ListFormatProcessor can only process ListFormatEntryData");
            }
            if (list.Entries.Count < 1)
            {
                return;
            }
            OutputWriter.WriteToErrorStream = data.WriteToErrorStream;
            OutputWriter.WriteLine("");                      // a blank line in front of every entry
            int maxPropNameWidth = list.Entries.Max(entry => entry.PropertyName.Length);
            int totalWidth       = OutputWriter.Columns - 1; // -1 because of newline

            if (totalWidth <= 0)
            {
                totalWidth = OutputWriter.DefaultColumns - 1;
            }
            int availableForName = totalWidth - 4; // need place for " : x" where x is the first char of the value

            if (maxPropNameWidth > availableForName)
            {
                maxPropNameWidth = availableForName;
            }
            foreach (var curEntry in list.Entries)
            {
                WriteEntry(curEntry, maxPropNameWidth, totalWidth);
            }
        }
Exemple #3
0
        private void WriteHeader(TableFormatEntryData tableEntry)
        {
            List <string> values         = (from cell in tableEntry.Row select cell.PropertyName).ToList();
            var           referenceEntry = new TableFormatEntryData(tableEntry);

            referenceEntry.Wrap = true;
            WriteValuesInRows(values, referenceEntry);
            // now print borders
            StringBuilder line = new StringBuilder(_fullWidth);

            OutputWriter.WriteToErrorStream = referenceEntry.WriteToErrorStream;
            for (int i = 0; i < _currentColumns.Length; i++)
            {
                var cellWidth   = _currentColumns[i].Value;
                var curVal      = values[i];
                var borderWidth = curVal.Length > cellWidth ? cellWidth : curVal.Length;
                var borderLine  = "".PadLeft(borderWidth, '-');
                if (referenceEntry.Row[i].Align.Equals(Alignment.Right))
                {
                    borderLine = borderLine.PadLeft(cellWidth);
                }
                else
                {
                    borderLine = borderLine.PadRight(cellWidth);
                }
                line.Append(borderLine);
                if (i < values.Count - 1)
                {
                    line.Append(" ");
                }
            }
            OutputWriter.WriteLine(line.ToString());
        }
Exemple #4
0
        private void CalculateColumns(List <FormatObjectProperty> row)
        {
            _fullWidth = OutputWriter.Columns - 1; // -1 because of newline
            if (_fullWidth <= 0)
            {
                _fullWidth = OutputWriter.DefaultColumns - 1;
            }
            var cols = row.Count;

            // make sure it fits
            if (2 * cols - 1 > _fullWidth)
            {
                cols = (_fullWidth + 1) / 2;
                string format = "Warning: {0} columns have to be omitted in this format" +
                                "as they don't fit the available width.";
                OutputWriter.WriteLine(String.Format(format, row.Count - cols));
            }
            int perColumn = (_fullWidth - cols + 1) / cols;
            int rest      = _fullWidth - cols + 1 - perColumn * cols; // because of rounding

            _currentColumns = new KeyValuePair <string, int> [cols];
            for (int i = 0; i < cols; i++)
            {
                _currentColumns[i] = new KeyValuePair <string, int>(row[i].PropertyName,
                                                                    i < rest ? perColumn + 1 : perColumn);
            }
        }
Exemple #5
0
        private void WriteValuesInRows(List <string> originalValues, TableFormatEntryData referenceEntry)
        {
            StringBuilder line   = new StringBuilder(_fullWidth);
            var           values = originalValues.ToArray();

            OutputWriter.WriteToErrorStream = referenceEntry.WriteToErrorStream;
            var printOneMoreLine = true;

            while (printOneMoreLine)
            {
                printOneMoreLine = false;
                for (int i = 0; i < _currentColumns.Length; i++)
                {
                    var    alignRight = referenceEntry.Row[i].Align.Equals(Alignment.Right);
                    string rest;
                    line.Append(TrimString(values[i], _currentColumns[i].Value, alignRight,
                                           !referenceEntry.Wrap, out rest));
                    values[i]        = referenceEntry.Wrap ? rest : "";
                    printOneMoreLine = printOneMoreLine || (referenceEntry.Wrap && !String.IsNullOrEmpty(rest));
                    // add space between columns
                    if (i < values.Length - 1)
                    {
                        line.Append(" ");
                    }
                }
                OutputWriter.WriteLine(line.ToString());
                line.Clear();
            }
        }
Exemple #6
0
 protected virtual void ProcessFormatEntry(SimpleFormatEntryData data)
 {
     OutputWriter.WriteToErrorStream = data.WriteToErrorStream;
     if (!String.IsNullOrEmpty(data.Value))
     {
         OutputWriter.WriteLine(data.Value);
     }
 }
Exemple #7
0
 protected virtual void ProcessGroupStart(GroupStartData data)
 {
     OutputWriter.WriteToErrorStream = false;
     OutputWriter.WriteLine("");
     if (!String.IsNullOrEmpty(data.GroupName))
     {
         var output = String.Format("\t{0}: {1}" + Environment.NewLine, data.GroupType ?? "", data.GroupName);
         OutputWriter.WriteLine(output);
     }
 }
Exemple #8
0
 protected virtual void ProcessGroupEnd(GroupEndData data)
 {
     OutputWriter.WriteToErrorStream = false;
     OutputWriter.WriteLine("");
 }