有.net的Css写手吗?

本文关键字:Css net | 更新日期: 2023-09-27 18:03:05

我注意到微软已经实现了一个内部的CssTextWriter

internal sealed class CssTextWriter : TextWriter
{
  ....
}

有。net的Css作家吗?

例如,我想写这样的代码:

CssTextWriter writer = new CssTextWriter(textWriter);
writer.WriteBeginCssRule("p");
writer.WriteAttribute("font-family", "Arial,Liberation Sans,DejaVu Sans,sans-serif");
writer.WriteEndCssRule();

以上代码将输出到流如下:

p { font-family: Arial,Liberation Sans,DejaVu Sans,sans-serif; }

有.net的Css写手吗?

无点http://www.dotlesscss.org/看起来会完成这项工作,但有点多,我只需要一个类

我包装了对内部Microsoft类的调用(是的顽皮,它可能会在未来的。net等版本中消失....)

public class CssTextWriter
{
    public CssTextWriter(TextWriter writer)
    {
        if (writer == null)
        {
            throw new ArgumentNullException("writer");
        }
        this.Writer = writer;
        this.Initialize();
    }
    /// <summary>
    /// Gets the writer.
    /// </summary>
    /// <value>
    /// The writer.
    /// </value>
    public TextWriter Writer { get; private set; }
    /// <summary>
    /// Gets or sets the internal CSS text writer.
    /// </summary>
    /// <value>
    /// The internal CSS text writer.
    /// </value>
    private object InternalCssTextWriter
    {
        get;
        set;
    }
     public void WriteBeginCssRule(string selector)
    {
        this.InternalCssTextWriter.InvokeMethod("WriteBeginCssRule", new[] { selector });
    }
    public void WriteEndCssRule()
    {
        this.InternalCssTextWriter.InvokeMethod("WriteEndCssRule");
    }
    public void WriteAttribute(string name, string value)
    {
        this.InternalCssTextWriter.InvokeMethod("WriteAttribute", new[] { name, value }, new Type[] { typeof(string), typeof(string) });
    }
    public void Write(string value)
    {
        this.InternalCssTextWriter.InvokeMethod("Write", new[] { value }, new Type[] { typeof(string) });
    }
    public void WriteAttribute(HtmlTextWriterStyle key, string value)
    {
        this.InternalCssTextWriter.InvokeMethod("WriteAttribute", new object[] { key, value }, new Type[] { typeof(HtmlTextWriterStyle), typeof(string) });
    }
    private void Initialize()
    {
        Type internalType = typeof(System.Web.UI.HtmlTextWriter).Assembly.GetType("System.Web.UI.CssTextWriter");
        ConstructorInfo ctor = internalType.GetConstructors(BindingFlags.Instance | BindingFlags.Public)[0];
        this.InternalCssTextWriter = ctor.Invoke(new[] { this.Writer });
    }
}