PrettyStyleFormatter
Represents the an CSS3 markup formatter with inserted intends.
using System.Collections.Generic;
using System.Text;
namespace AngleSharp.Css
{
public class PrettyStyleFormatter : IStyleFormatter
{
private string _intendString;
private string _newLineString;
public string Indentation {
get {
return _intendString;
}
set {
_intendString = value;
}
}
public string NewLine {
get {
return _newLineString;
}
set {
_newLineString = value;
}
}
public PrettyStyleFormatter()
{
_intendString = "\t";
_newLineString = "\n";
}
string IStyleFormatter.Sheet(IEnumerable<IStyleFormattable> rules)
{
List<string> list = new List<string>();
foreach (IStyleFormattable rule in rules) {
list.Add(rule.ToCss(this));
}
return string.Join(_newLineString + _newLineString, list);
}
string IStyleFormatter.Block(IEnumerable<IStyleFormattable> rules)
{
StringBuilder stringBuilder = Pool.NewStringBuilder().Append('{').Append(' ');
foreach (IStyleFormattable rule in rules) {
string value = Intend(rule.ToCss(this));
stringBuilder.Append(_newLineString).Append(value).Append(_newLineString);
}
return stringBuilder.Append('}').ToPool();
}
string IStyleFormatter.Declaration(string name, string value, bool important)
{
return CssStyleFormatter.Instance.Declaration(name, value, important);
}
string IStyleFormatter.Declarations(IEnumerable<string> declarations)
{
return string.Join(_newLineString, declarations);
}
string IStyleFormatter.Medium(bool exclusive, bool inverse, string type, string[] constraints)
{
return CssStyleFormatter.Instance.Medium(exclusive, inverse, type, constraints);
}
string IStyleFormatter.Constraint(string name, string value)
{
return CssStyleFormatter.Instance.Constraint(name, value);
}
string IStyleFormatter.Rule(string name, string value)
{
return CssStyleFormatter.Instance.Rule(name, value);
}
string IStyleFormatter.Rule(string name, string prelude, string rules)
{
return CssStyleFormatter.Instance.Rule(name, prelude, rules);
}
string IStyleFormatter.Style(string selector, string rules)
{
if (!string.IsNullOrEmpty(rules)) {
StringBuilder stringBuilder = Pool.NewStringBuilder().Append(selector);
stringBuilder.Append(' ').Append('{');
stringBuilder.Append(_newLineString);
stringBuilder.Append(Intend(rules));
stringBuilder.Append(_newLineString);
return stringBuilder.Append('}').ToPool();
}
return selector + " { }";
}
private string Intend(string content)
{
return _intendString + content.Replace(_newLineString, _newLineString + _intendString);
}
}
}