WeasyPrint のパブリック API では、HTML 入力としてファイル名または URL (他の種類の中でも) を受け入れます。
document = HTML(filename='/foo/bar/baz.html')
document = HTML(url='http://example.net/bar/baz.html')
引数に名前を付けず、WeasyPrint にその型を推測させるオプションもあります。
document = HTML(sys.argv[1])
場合によっては簡単です。Unix で で始まる/
場合はファイル名であり、で始まる場合はhttp://
おそらく URL です。しかし、任意の文字列に対して答えを返す一般的なアルゴリズムが必要です。
現在、この正規表現に一致させようとしています: ^([a-z][a-z0-1.+-]*):
. 一致する文字列は、 RFC 3986 (URI)に従って有効な URI スキームで始まります。これは Unix では悪くありませんが、Windows では完全に失敗します:C:\foo\bar.html
一致し、URL のように扱われます。
*
正規表現のtoを変更し+
て、少なくとも 2 文字の長さの URI スキームにのみ一致させることができます。どうやらそれより短いURI スキームは知られていないようです。
それとももっと良い基準がありますか?おそらく、「推測された」URL を少数のスキームに制限する必要があります。よりエキゾチックなケースでは、まだ使用できますHTML(url=foo)
。
url.startswith(['http:', 'https:', 'ftp:', 'data:'])