# rvm_css v1.2 # Static CSS caching # # License: GNU GPLv2 or later # # Ruud van Melick # http://vanmelick.com/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YToxMTp7czo0OiJuYW1lIjtzOjc6InJ2bV9jc3MiO3M6NzoidmVyc2lvbiI7czozOiIxLjIi O3M6NjoiYXV0aG9yIjtzOjE1OiJSdXVkIHZhbiBNZWxpY2siO3M6MTA6ImF1dGhvcl91cmki O3M6MjE6Imh0dHA6Ly92YW5tZWxpY2suY29tLyI7czoxMToiZGVzY3JpcHRpb24iO3M6MTg6 IlN0YXRpYyBDU1MgY2FjaGluZyI7czo0OiJ0eXBlIjtpOjU7czo1OiJmbGFncyI7aToyO3M6 ODoidGV4dHBhY2siO3M6MjY4OiIjQHByZWZzCiNAb3duZXIgcnZtX2Nzcwpydm1fY3NzX2Rp ciA9PiBTdHlsZXNoZWV0IGRpcmVjdG9yeQojQGxhbmd1YWdlIGVuLWdiCnJ2bV9jc3NfZGly ID0+IFN0eWxlc2hlZXQgZGlyZWN0b3J5CiNAbGFuZ3VhZ2UgbmwtbmwKcnZtX2Nzc19kaXIg PT4gU3R5bGVzaGVldC1tYXAKI0BsYW5ndWFnZSBkZS1kZQpydm1fY3NzX2RpciA9PiBTdGls dm9ybGFnZXZlcnplaWNobmlzCiNAbGFuZ3VhZ2UgZnItZnIKcnZtX2Nzc19kaXIgPT4gUsOp cGVydG9pcmUgZGVzIHN0eWxlIjtzOjQ6ImhlbHAiO3M6MjM5MDoiPHA+VGhpcyBwbHVnaW4g YXV0b21hdGljYWxseSBzdG9yZXMgYSBjb3B5IG9mIHlvdXIgc3R5bGUgc2hlZXQocykgYXMg YSBzdGF0aWMgZmlsZS4gU3RhdGljIGZpbGVzIGFyZSBzZXJ2ZWQgc2V2ZXJhbCBvcmRlcnMg b2YgbWFnbml0dWRlIGZhc3RlciB0aGFuIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+ IGZpbGVzICgyMDAgdGltZXMgZmFzdGVyLCBpbiBteSBvd24gdGVzdHMgb24gYSBGYXN0Q0dJ LWJhc2VkIHNlcnZlcikuPC9wPgoKUG9zdC1pbnN0YWxsYXRpb24gc3RlcHM6CjxvbD4KCTxs aT5WaXNpdCB0aGUgPGEgaHJlZj0iaW5kZXgucGhwP2V2ZW50PXByZWZzJmFtcDtzdGVwPWFk dmFuY2VkX3ByZWZzIj5hZHZhbmNlZCBwcmVmZXJlbmNlczwvYT4gYW5kIG1ha2Ugc3VyZSB0 aGUgJiM4MjIwO1N0eWxlIGRpcmVjdG9yeSYjODIyMTsgcHJlZmVyZW5jZSBjb250YWlucyB0 aGUgZGlyZWN0b3J5IHdoZXJlIHlvdSB3YW50IHRvIHN0b3JlIHRoZSBzdGF0aWMgPHNwYW4g Y2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gZmlsZXMuIFRoaXMgcGF0aCBpcyBhbHdheXMgYSBy ZWxhdGl2ZSBwYXRoICh0byB0aGUgZGlyZWN0b3J5IG9mIHlvdXIgcm9vdCB0ZXh0cGF0dGVy biBpbnN0YWxsYXRpb24pLiBZb3Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IDxzcGFuIGNsYXNz PSJjYXBzIj5QSFA8L3NwYW4+IGlzIGFibGUgdG8gd3JpdGUgdG8gdGhhdCBkaXJlY3Rvcnku PC9saT4KCTxsaT5BY3RpdmF0ZSB0aGUgcGx1Z2luLjwvbGk+Cjwvb2w+Cgo8cD5UaGUgPGNv ZGU+Jmx0O3R4cDpydm1fY3NzIC8mZ3Q7PC9jb2RlPiB0YWcgc3VwcGxpZWQgYnkgdGhpcyBw bHVnaW4gaGFzIHRoZSBleGFjdCBzYW1lIGF0dHJpYnV0ZXMgYXMgdGhlIGJ1aWx0LWluIDxj b2RlPiZsdDt0eHA6Y3NzIC8mZ3Q7PC9jb2RlPiB0YWcgYW5kIGNhbiBiZSB1c2VkIGFzIGEg ZHJvcC1pbiByZXBsYWNlbWVudCwgYnV0IHlvdSBzaG91bGRuJiM4MjE3O3QgaGF2ZSB0byB1 c2UgaXQsIGJlY2F1c2UgdGhpcyBwbHVnaW4gb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGJlaGF2 aW91ciBvZiB0aGUgPGNvZGU+Jmx0O3R4cDpjc3MmZ3Q7PC9jb2RlPiB0YWcuPC9wPgoKPHA+ Tm90ZTogYmVjYXVzZSBub3QgYWxsIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQgaW4gZmlsZW5h bWVzLCBhdm9pZCB1c2luZyBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgaW4gc3R5bGUg c2hlZXQgbmFtZXMuPC9wPgoKSWYgeW91IHdpc2ggdG8gdXNlIDxhIGhyZWY9Imh0dHA6Ly9s ZXNzY3NzLm9yZy8iPjxzcGFuIGNsYXNzPSJjYXBzIj5MRVNTPC9zcGFuPjwvYT4gc3ludGF4 IGluIHlvdXIgc3R5bGVzaGVldHMsIHlvdSBuZWVkIHRvIGRvIHRoZSBmb2xsb3dpbmcgKHRo aXMgY291bGQgYmUgaW1wbGVtZW50ZWQgYXMgYSBwbHVnaW4pOgo8b2w+Cgk8bGk+RG93bmxv YWQgdGhlIGZpbGUgPGEgaHJlZj0iaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9sZWFmby9sZXNz cGhwL21hc3Rlci9sZXNzYy5pbmMucGhwIj5sZXNzYy5pbmMucGhwPC9hPiAodmVyc2lvbiAw LjMuNSBvciBoaWdoZXIpIGZyb20gdGhlIDxhIGhyZWY9Imh0dHA6Ly9sZWFmby5uZXQvbGVz c3BocC8iPmxlc3NwaHA8L2E+IHdlYnNpdGUgYW5kIHVwbG9hZCBpdCB0byB5b3VyIHdlYnNp dGUuPC9saT4KCTxsaT5FZGl0IHlvdXIgY29uZmlnLnBocCBmaWxlIGFuZCBhZGQgdGhpcyBq dXN0IGJlbG93IHRoZSAmIzgyMTY7JHR4cGNmZyYjODIxNzsgY29uZmlndXJhdGlvbiBsaW5l czogPGNvZGU+cmVxdWlyZSAmIzM5Oy9wYXRoL3RvL2xlc3NjLmluYy5waHAmIzM5Ozs8L2Nv ZGU+PC9saT4KPC9vbD4KClRoaW5ncyB5b3Ugc2hvdWxkIGtub3cgd2hlbiB1c2luZyA8c3Bh biBjbGFzcz0iY2FwcyI+TEVTUzwvc3Bhbj4gc3ludGF4Ogo8b2w+Cgk8bGk+UmVtZW1iZXIg dG8gc2F2ZSBlYWNoIHN0eWxlIHNoZWV0IGFuZXcgZWFjaCB0aW1lIHlvdSB1cGRhdGUgdGhl IGxlc3NzYy5pbmMucGhwIGZpbGUuPC9saT4KCTxsaT5JZiB5b3VyIDxzcGFuIGNsYXNzPSJj YXBzIj5MRVNTPC9zcGFuPiBjb2RlIGNhbm5vdCBiZSBwYXJzZWQsIGFuIGVycm9yIHdpbGwg YmUgc2hvd24gYXQgdGhlIGJvdHRvbSBvZiBjc3MgYWRtaW4gdGFiIGFuZCB0aGUgc3RhdGlj IGNzcyBmaWxlIHdpbGwgbm90IGJlIHVwZGF0ZWQuPC9saT4KCTxsaT5XaGVuIHNwZWNpZnlp bmcgb25seSB0aGUgZmlsZW5hbWUgaW4gYW4gJiM4MjIwO0BpbXBvcnQgJiM4MjE2O3N0eWxl Lmxlc3MmIzgyMTc7JiM4MjIxOyBzdGF0ZW1lbnQsIHRoZSBwbHVnaW4gYXNzdW1lcyBpdCYj ODIxNztzIGluIHRoZSAmIzgyMjA7U3R5bGUgZGlyZWN0b3J5JiM4MjIxOy4gRG8gbm90IGxl YXZlIG91dCB0aGUgJiM4MjE2Oy5sZXNzJiM4MjE3OyBleHRlbnNpb24hPC9saT4KPC9vbD4i O3M6NDoiY29kZSI7czozODMzOiIKaWYgKGNsYXNzX2V4aXN0cygnXFRleHRwYXR0ZXJuXFRh Z1xSZWdpc3RyeScpKSB7CiAgVHhwOjpnZXQoJ1xUZXh0cGF0dGVyblxUYWdcUmVnaXN0cnkn KQogICAgLT5yZWdpc3RlcigncnZtX2NzcycpCiAgICAtPnJlZ2lzdGVyKCdydm1fY3NzJywg J2NzcycpOwp9CgppZiAodHhwaW50ZXJmYWNlID09ICdhZG1pbicpCnsKICByZWdpc3Rlcl9j YWxsYmFjaygncnZtX2Nzc19zeW5jJywgJ2NzcycsICdjc3Nfc2F2ZScpOwogIHJlZ2lzdGVy X2NhbGxiYWNrKCdydm1fY3NzX3N5bmMnLCAnY3NzJywgJ2Nzc19zYXZlX3Bvc3RlZCcpOwog IHJlZ2lzdGVyX2NhbGxiYWNrKCdydm1fY3NzX3N5bmMnLCAndHhwLmNzcycsICdpbXBvcnQn KTsKICByZWdpc3Rlcl9jYWxsYmFjaygncnZtX2Nzc19zeW5jJywgJ3BsdWdpbl9saWZlY3lj bGUucnZtX2NzcycsICdlbmFibGVkJyk7CiAgcmVnaXN0ZXJfY2FsbGJhY2soJ3J2bV9jc3Nf c2V0dXAnLCAncGx1Z2luX2xpZmVjeWNsZS5ydm1fY3NzJywgJ2luc3RhbGxlZCcpOwogIHJl Z2lzdGVyX2NhbGxiYWNrKCdydm1fY3NzX2NsZWFudXAnLCAncGx1Z2luX2xpZmVjeWNsZS5y dm1fY3NzJywgJ2RlbGV0ZWQnKTsKfQoKCmZ1bmN0aW9uIHJ2bV9jc3MoJGF0dHMpCnsKICBn bG9iYWwgJGRvY3R5cGUsICRwcmV0ZXh0OwoKICBleHRyYWN0KGxBdHRzKGFycmF5KAogICAg J2Zvcm1hdCcgPT4gJ3VybCcsCiAgICAnbWVkaWEnICA9PiAnc2NyZWVuJywKICAgICduYW1l JyAgID0+ICRwcmV0ZXh0Wydjc3MnXSwKICAgICdyZWwnICAgID0+ICdzdHlsZXNoZWV0JywK ICAgICd0aGVtZScgID0+IGlzc2V0KCRwcmV0ZXh0Wydza2luJ10pID8gJHByZXRleHRbJ3Nr aW4nXSA6ICcnLAogICAgJ3RpdGxlJyAgPT4gJycsCiAgKSwgJGF0dHMpKTsKCiAgaWYgKCRu YW1lID09PSAnJykKICB7CiAgICAgICRuYW1lID0gJ2RlZmF1bHQnOwogIH0KCiAgaWYgKCRm b3JtYXQgPT09ICdsaW5rJyBhbmQgc3RycG9zKCRuYW1lLCAnLCcpICE9PSBmYWxzZSkKICB7 CiAgICAkbmFtZXMgPSBkb19saXN0KCRuYW1lKTsKICAgICRjc3MgPSAnJzsKCiAgICBmb3Jl YWNoICgkbmFtZXMgYXMgJG5hbWUpCiAgICB7CiAgICAgICRhdHRzWyduYW1lJ10gPSAkbmFt ZTsKICAgICAgJGNzcyAuPSBydm1fY3NzKCRhdHRzKTsKICAgIH0KCiAgICByZXR1cm4gJGNz czsKICB9CgogIGlmICgkdGhlbWUpCiAgewogICAgJHNraW5kaXIgPSBzdHJ0b2xvd2VyKHNh bml0aXplRm9yVXJsKCR0aGVtZSkpLicvJzsKICB9CgogICRmaWxlID0gZ2V0X3ByZWYoJ3J2 bV9jc3NfZGlyJykuJy8nLiRza2luZGlyLnN0cnRvbG93ZXIoc2FuaXRpemVGb3JVcmwoJG5h bWUpKS4nLmNzcyc7CgogIGlmIChlbXB0eShnZXRfcHJlZigncnZtX2Nzc19kaXInKSkgb3IK ICAgICFpc19yZWFkYWJsZShnZXRfcHJlZigncGF0aF90b19zaXRlJykuJy8nLiRmaWxlKSBh bmQKICAgICghcnZtX2Nzc19zeW5jKCkgb3IgIWlzX3JlYWRhYmxlKGdldF9wcmVmKCdwYXRo X3RvX3NpdGUnKS4nLycuJGZpbGUpKQogICkKICB7CiAgICAkYXR0c1snbmFtZSddID0gJG5h bWU7CgogICAgcmV0dXJuIGNzcygkYXR0cyk7CiAgfQoKCiAgaWYgKCRmb3JtYXQgPT0gJ2xp bmsnKSB7CiAgICByZXR1cm4gdGFnX3ZvaWQoJ2xpbmsnLCBhcnJheSgKICAgICAgJ3JlbCcg ICA9PiAkcmVsLAogICAgICAndHlwZScgID0+ICRkb2N0eXBlICE9ICdodG1sNScgPyAndGV4 dC9jc3MnIDogJycsCiAgICAgICdtZWRpYScgPT4gJG1lZGlhLAogICAgICAndGl0bGUnID0+ ICR0aXRsZSwKICAgICAgJ2hyZWYnICA9PiBodS4kZmlsZSwKICAgICkpOwogIH0KCiAgcmV0 dXJuIGh1LiRmaWxlOwp9CgoKZnVuY3Rpb24gcnZtX2Nzc19zeW5jKCkKewogIGlmICghZ2V0 X3ByZWYoJ3J2bV9jc3NfZGlyJykpCiAgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgJGJh c2VkaXIgPSBnZXRfcHJlZigncGF0aF90b19zaXRlJykuJy8nLmdldF9wcmVmKCdydm1fY3Nz X2RpcicpLicvJzsKCiAgaWYgKCFmaWxlX2V4aXN0cygkYmFzZWRpcikpCiAgewogICAgbWtk aXIoJGJhc2VkaXIsIDA3NTUpOwogIH0KICBlbHNlaWYgKCFpc193cml0YWJsZSgkYmFzZWRp cikpCiAgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgaWYgKCRycyA9IHNhZmVfcm93c19z dGFydCgnKicsICd0eHBfY3NzJywgJzE9MScpKQogIHsKICAgIHdoaWxlICgkcm93ID0gbmV4 dFJvdygkcnMpKQogICAgewogICAgICBleHRyYWN0KCRyb3cpOwoKICAgICAgaWYgKHByZWdf bWF0Y2goJyFeW2EtekEtWjAtOS8rXSo9ezAsMn0kIScsICRjc3MpKQogICAgICB7CiAgICAg ICAgJGNzcyA9IGJhc2U2NF9kZWNvZGUoJGNzcyk7CiAgICAgIH0KCiAgICAgIGlmICghZW1w dHkoJHNraW4pKQogICAgICB7CiAgICAgICAgJHNraW4gPSBzdHJ0b2xvd2VyKHNhbml0aXpl Rm9yVXJsKCRza2luKSk7CgogICAgICAgIGlmICghZmlsZV9leGlzdHMoJGJhc2VkaXIuJHNr aW4pKQogICAgICAgIHsKICAgICAgICAgIG1rZGlyKCRiYXNlZGlyLiRza2luLCAwNzU1KTsK ICAgICAgICB9CiAgICAgICAgZWxzZWlmICghaXNfd3JpdGFibGUoJGJhc2VkaXIuJHNraW4p KQogICAgICAgIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgJHNr aW5kaXIgPSAkc2tpbi4nLyc7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAg JHNraW5kaXIgPSAnJzsKICAgICAgfQoKICAgICAgJGJhc2VmaWxlID0gJGJhc2VkaXIuJHNr aW5kaXIuc3RydG9sb3dlcihzYW5pdGl6ZUZvclVybCgkbmFtZSkpOwogICAgICAkY3NzZmls ZSAgPSAkYmFzZWZpbGUuJy5jc3MnOwoKICAgICAgaWYgKGZpbGVfZXhpc3RzKCRjc3NmaWxl KSBhbmQgIWlzX3dyaXRhYmxlKCRjc3NmaWxlKSkKICAgICAgewogICAgICAgIGNvbnRpbnVl OwogICAgICB9CgogICAgICBpZiAoY2xhc3NfZXhpc3RzKCdsZXNzYycpKQogICAgICB7CiAg ICAgICAgJGhhbmRsZSA9IGZvcGVuKCRmaWxlLicubGVzcycsICd3YicpOwogICAgICAgIGZ3 cml0ZSgkaGFuZGxlLCAkY3NzKTsKICAgICAgICBmY2xvc2UoJGhhbmRsZSk7CiAgICAgICAg Y2htb2QoJGZpbGUuJy5sZXNzJywgMDY0NCk7CgogICAgICAgICRsZXNzID0gbmV3IGxlc3Nj KCk7CiAgICAgICAgJGxlc3MtPnNldEZvcm1hdHRlcignY29tcHJlc3NlZCcpOwogICAgICAg ICRsZXNzLT5zZXRJbXBvcnREaXIoZ2V0X3ByZWYoJ3BhdGhfdG9fc2l0ZScpLicvJy5nZXRf cHJlZigncnZtX2Nzc19kaXInKS4nLycpOwoKICAgICAgICB0cnkKICAgICAgICB7CiAgICAg ICAgICAkY3NzICA9ICRsZXNzLT5wYXJzZSgkY3NzKTsKICAgICAgICB9CiAgICAgICAgY2F0 Y2ggKEV4Y2VwdGlvbiAkZXgpCiAgICAgICAgewogICAgICAgICAgZXJyb3JfbG9nKCJsZXNz cGhwIGZhdGFsIGVycm9yOiAiLiRleC0+Z2V0TWVzc2FnZSgpKTsKICAgICAgICAgIHJldHVy biBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCRj c3NmaWxlLCAkY3NzKSBhbmQgY2htb2QoJGNzc2ZpbGUsIDA2NDQpOwogICAgfQogIH0KCiAg cmV0dXJuIHRydWU7Cn0KCgpmdW5jdGlvbiBydm1fY3NzX3NldHVwKCkKewogIGlmICghZ2V0 X3ByZWYoJ3J2bV9jc3NfZGlyJykpCiAgewogICAgc2V0X3ByZWYoJ3J2bV9jc3NfZGlyJywg J2NzcycsICdhZG1pbicsICcxJywgJ3RleHRfaW5wdXQnLCAnMjAnKTsKICB9Cn0KCgpmdW5j dGlvbiBydm1fY3NzX2NsZWFudXAoKQp7CiAgICBzYWZlX2RlbGV0ZSgndHhwX3ByZWZzJywg Im5hbWU9J3J2bV9jc3NfZGlyJyIpOwogICAgc2FmZV9kZWxldGUoJ3R4cF9sYW5nJywgIm93 bmVyPSdydm1fY3NzJyIpOwp9CiI7czozOiJtZDUiO3M6MzI6IjE0ZmQ3ODAxNTExZjZkMDU5 NTg3YjJkMDdlNzM2YTFlIjt9