PrettyStyleFormatter
Represents the an CSS3 markup formatter with inserted intends.
using AngleSharp.Extensions;
using System.Collections.Generic;
using System.IO;
using System.Linq;
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)
{
StringBuilder sb = Pool.NewStringBuilder();
bool flag = true;
using (StringWriter stringWriter = new StringWriter(sb)) {
foreach (IStyleFormattable rule in rules) {
if (flag)
flag = false;
else {
stringWriter.Write(_newLineString);
stringWriter.Write(_newLineString);
}
rule.ToCss(stringWriter, this);
}
}
return sb.ToPool();
}
string IStyleFormatter.Block(IEnumerable<IStyleFormattable> rules)
{
StringBuilder stringBuilder = Pool.NewStringBuilder().Append('{').Append(' ');
using (StringWriter stringWriter = new StringWriter(stringBuilder)) {
foreach (IStyleFormattable rule in rules) {
stringWriter.Write(_newLineString);
stringWriter.Write(Intend(rule.ToCss(this)));
stringWriter.Write(_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, from m in declarations
select m + ";");
}
string IStyleFormatter.Medium(bool exclusive, bool inverse, string type, IEnumerable<IStyleFormattable> 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, IStyleFormattable rules)
{
StringBuilder stringBuilder = Pool.NewStringBuilder().Append(selector).Append(" {");
string text = rules.ToCss(this);
if (!string.IsNullOrEmpty(text)) {
stringBuilder.Append(_newLineString);
stringBuilder.Append(Intend(text));
stringBuilder.Append(_newLineString);
} else
stringBuilder.Append(' ');
return stringBuilder.Append('}').ToPool();
}
string IStyleFormatter.Comment(string data)
{
return CssStyleFormatter.Instance.Comment(data);
}
private string Intend(string content)
{
return _intendString + content.Replace(_newLineString, _newLineString + _intendString);
}
}
}