
@import
url()
を取り出すのに1度かかった。 しかし、.NETの場合、曲がった工芸品の程度はさまざまでした。 ExCSSは最高のライブラリでしたが、メディアクエリなどの些細なことに重点を置いていました。 そこで、私はギャップを埋めることに決めました。
オプションがありました:Chromeを拾う、Firefoxを拾う、左のライブラリを拾う。 品質保証と定期的な更新が必要だったため、最後のオプションは不要になりました。 Chromeでは、CSSとHTMLの構文解析が文法に基づいて生成され、ツールの互換性は言うまでもなく、.NETのさまざまなツールの大まかな研究は落胆しました。 手動で作成されたパーサーを備えたFirefoxのままです。
(...)
結果は、簡潔に言えば、それに供給されるCSSファイルを完全に解析するライブラリーになります。 Firefoxのテストは、変換するには問題が大きすぎることが判明しました。これらはまったく単体テストではありません。JSで記述され、HTML内にあります。 したがって、ライブラリの動作を完全に検証することには問題がありました。 CSSの優れた単体テストの入手先について提案がある場合は、すべての注意を払っています。 ライブラリが少なくとも誰かに役立つことを本当に願っています。問題があれば、私はこれについて知らされます。
利用可能なもの
- Mozilla Firefoxでサポートされているすべてのルール、プロパティ、値などがサポートされています。 FF固有の拡張(
-moz-*
)など。 - 2つの互換モード:完全な標準(標準への厳密な準拠)およびQuirks(測定単位を指定できず、他の同様の自由を許可する)。
- すべての値は、複雑な構造に解析されます。 簡単な
background
プロパティは、それぞれがURLまたはグラデーションである背景画像のリストを含むbackground-image
など、いくつかのプロパティに展開されます。 後者の場合、グラデーションには個々のポイントとすべてのパラメーターが含まれます。 - すべての仕様に従ったエラー処理。 何かが認識されない場合、パーサーは単に理解できない部分をスキップします。
- 詳細なエラーログ。 誤った構文およびプロパティに関するすべての警告は、
TraceSource "Alba.CsCss.CssParser"
ダンプされ、イベントをスローします。
利用できないもの
- エンコーディングのサポート。 Unicodeでは、自分で投げる必要があります。
- 変更して文字列に戻す変換。
- DOM CSS。 C#コーディング標準の観点からのインターフェースは非常に疑わしいため、利点は疑問です。
- 他のブラウザのベンダープレフィックスを持つプロパティ(-webkit-、-ms-、-o-)は無視されます。
- .NET 4.0以前。 .NET 4.5から
IReadOnlyList
のみIReadOnlyList
ますが、これまでのところ、バージョンを台無しにするのは少しIReadOnlyList
。 - NuGetパッケージ。 図書館で調理中。
エンコード、変更、シリアル化、.NET 4.0およびNuGetパッケージを追加する予定です。 これが発生するまでの時間は、誰かがそれを必要とするかどうかによって異なります。
使用例
// CSS, URL ( ) URL ( ) CssStyleSheet css = new CssLoader().ParseSheet("h1, h2 { color: #123; }", "http://example.com/sheet.css", "http://example.com/"); Console.WriteLine(css.SheetUri); // http://example.com/sheet.css // ( ) Console.WriteLine(css.StyleRules.Single().Declaration.Color.Color.R); // 17 Console.WriteLine(css.Rules.OfType<CssStyleRule>.Single().Declaration .Data.Single().Color.R); // 17 Console.WriteLine(css.Rules.OfType<CssStyleRule>.Single().Declaration .GetValue(CssProperty.Color).Color.R); // 17 // Console.WriteLine(css.StyleRules.Single().SelectorGroups.First().Selectors.Single().Tag); // h1
プロジェクトの組み立て
-
Alba.CsCss
ライブラリ自体。 他のプロジェクトに依存しません。 ソリューションでライブラリを使用する場合は、このプロジェクトをオンにします。 -
Alba.CsCss.Tests
単体テスト。 その量は、まともな社会では沈黙を保つことが習慣的であるほどです。 -
Alba.Framework
自転車フレームワークの個人的なコレクション。 T4変換のコードを簡素化します。 これらを実行するには、デバッグバージョンをビルドする必要があります。 -
Alba.Framework.CodeGeneration
フレームワークのT4部分。 カスタムツール「AttachT4」をインストールするには、管理者アカウントで収集する必要があります(T4 Toolboxに関連し、不要な機能は大量にありません)。 これは、プロジェクトでT4を使いやすくする場合に必要です。 -
Alba.Framework.Testing
テストで使用されます。
免許
Mozilla Public License 。 BSDとGPLを組み合わせます。 ウイルスに似たGPL ですが 、MPLコードを使用して個々の並べ替えファイルにのみ感染します。 他のすべてはライセンスを気にしません。 クローズドソースコードの商用ライセンスを含む、他のライセンスに基づくプロジェクトでの使用に関する制限はありません。
もちろん、より自由で理解しやすいBSD / MITライセンスでライブラリをリリースしたいと思いますが、MPLはほとんどのファイルに「感染」したため、オプションはありませんでした。
まとめ
ライブラリが作成されます。 進化するかどうかは、使用するかどうかによって決まります。 私自身はほんの一部しか必要としません。 大胆なものがあれば、バグ報告、さらにはプルリクエストまでお願いします。
CSSパーサーが必要な場合は、使用方法を記述してください。 さらなる開発パスと優先事項を理解することは非常に重要です。
参照資料
PSライブラリをどのように変換したか、私の目標は何でしたかなど。 -GitHubのReadMeでトリミング。 ハブルは試練について語ろうとする私の試みに感謝しなかったので、事実は乾燥している。 すべてに良い。