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); } }
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()); }
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); } }
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(); } }
protected virtual void ProcessFormatEntry(SimpleFormatEntryData data) { OutputWriter.WriteToErrorStream = data.WriteToErrorStream; if (!String.IsNullOrEmpty(data.Value)) { OutputWriter.WriteLine(data.Value); } }
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); } }
protected virtual void ProcessGroupEnd(GroupEndData data) { OutputWriter.WriteToErrorStream = false; OutputWriter.WriteLine(""); }