# rvm_css v0.9.1 # 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: # ...................................................................... YToxMDp7czo3OiJ2ZXJzaW9uIjtzOjU6IjAuOS4xIjtzOjY6ImF1dGhvciI7czoxNToiUnV1 ZCB2YW4gTWVsaWNrIjtzOjEwOiJhdXRob3JfdXJpIjtzOjIxOiJodHRwOi8vdmFubWVsaWNr LmNvbS8iO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjE4OiJTdGF0aWMgQ1NTIGNhY2hpbmciO3M6 NDoidHlwZSI7aToxO3M6NToiZmxhZ3MiO2k6MjtzOjQ6Im5hbWUiO3M6NzoicnZtX2NzcyI7 czo0OiJoZWxwIjtzOjI1ODA6Igk8cD5UaGlzIHBsdWdpbiBhdXRvbWF0aWNhbGx5IHN0b3Jl cyBhIGNvcHkgb2YgeW91ciBzdHlsZSBzaGVldChzKSBhcyBhIHN0YXRpYyBmaWxlLiBTdGF0 aWMgZmlsZXMgYXJlIHNlcnZlZCBzZXZlcmFsIG9yZGVycyBvZiBtYWduaXR1ZGUgZmFzdGVy IHRoYW4gPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmlsZXMgKDIwMCB0aW1lcyBm YXN0ZXIsIGluIG15IG93biB0ZXN0cyBvbiBhIEZhc3RDR0ktYmFzZWQgc2VydmVyKS48L3A+ CgoJPHA+UG9zdC1pbnN0YWxsYXRpb24gc3RlcHM6Cgk8b2w+CgkJPGxpPkFjdGl2YXRlIHRo ZSBwbHVnaW4uPC9saT4KCQk8bGk+Q3JlYXRlIGEgZGlyZWN0b3J5IGZvciB0aGUgc3RhdGlj IHN0eWxlIHNoZWV0IGZpbGVzIGluIHRoZSByb290IG9mIHlvdXIgdGV4dHBhdHRlcm4gaW5z dGFsbGF0aW9uLiBZb3Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IDxzcGFuIGNsYXNzPSJjYXBz Ij5QSFA8L3NwYW4+IGlzIGFibGUgdG8gd3JpdGUgdG8gdGhhdCBkaXJlY3RvcnkuPC9saT4K CQk8bGk+VmlzaXQgdGhlIDxhIGhyZWY9ImluZGV4LnBocD9ldmVudD1wcmVmcyZhbXA7c3Rl cD1hZHZhbmNlZF9wcmVmcyI+YWR2YW5jZWQgcHJlZmVyZW5jZXM8L2E+IGFuZCBtYWtlIHN1 cmUgdGhlICYjODIyMDtTdHlsZSBkaXJlY3RvcnkmIzgyMjE7IHByZWZlcmVuY2UgY29udGFp bnMgdGhlIGRpcmVjdG9yeSB5b3UgY3JlYXRlZCBpbiBzdGVwIDIuIFRoaXMgcGF0aCBpcyBh bHdheXMgYSByZWxhdGl2ZSBwYXRoICh0byB0aGUgZGlyZWN0b3J5IG9mIHlvdXIgcm9vdCB0 ZXh0cGF0dGVybiBpbnN0YWxsYXRpb24pLjwvbGk+CgkJPGxpPlZpc2l0IHRoZSA8YSBocmVm PSJpbmRleC5waHA/ZXZlbnQ9Y3NzIj5zdHlsZTwvYT4gdGFiIGFuZCBzYXZlIGVhY2ggb2Yg eW91ciBzdHlsZSBzaGVldHMgYWdhaW4gKHNhdmluZyBjcmVhdGVzIHRoZSBzdGF0aWMgZmls ZSkuPC9saT4KCQk8bGk+UmVwbGFjZSBhbGwgb2NjdXJyZW5jZXMgb2YgPGNvZGU+Jmx0O3R4 cDpjc3MgLyZndDs8L2NvZGU+IHdpdGggPGNvZGU+Jmx0O3R4cDpydm1fY3NzIC8mZ3Q7PC9j b2RlPi48L2xpPgoJPC9vbD48L3A+CgoJPHA+VGhlIDxjb2RlPiZsdDt0eHA6cnZtX2NzcyAv Jmd0OzwvY29kZT4gdGFnIHN1cHBsaWVkIGJ5IHRoaXMgcGx1Z2luIGhhcyB0aGUgZXhhY3Qg c2FtZSBhdHRyaWJ1dGVzIGFzIHRoZSBidWlsdC1pbiA8Y29kZT4mbHQ7dHhwOmNzcyAvJmd0 OzwvY29kZT4gdGFnIGFuZCBjYW4gYmUgdXNlZCBhcyBhIGRyb3AtaW4gcmVwbGFjZW1lbnQu PC9wPgoKCTxwPk5vdGU6IGJlY2F1c2Ugbm90IGFsbCBjaGFyYWN0ZXJzIGFyZSBhbGxvd2Vk IGluIGZpbGVuYW1lcywgYXZvaWQgdXNpbmcgbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJz IGluIHN0eWxlIHNoZWV0IG5hbWVzLjwvcD4KCgk8cD5JZiB5b3Ugd2lzaCB0byB1c2UgPGEg aHJlZj0iaHR0cDovL2xlc3Njc3Mub3JnLyI+PHNwYW4gY2xhc3M9ImNhcHMiPkxFU1M8L3Nw YW4+PC9hPiBzeW50YXggaW4geW91ciBzdHlsZXNoZWV0cywgeW91IG5lZWQgdG8gZG8gdGhl IGZvbGxvd2luZyAodGhpcyBjb3VsZCBiZSBpbXBsZW1lbnRlZCBhcyBhIHBsdWdpbik6Cgk8 b2w+CgkJPGxpPkRvd25sb2FkIHRoZSBmaWxlIDxhIGhyZWY9Imh0dHBzOi8vcmF3LmdpdGh1 Yi5jb20vbGVhZm8vbGVzc3BocC9tYXN0ZXIvbGVzc2MuaW5jLnBocCI+bGVzc2MuaW5jLnBo cDwvYT4gZnJvbSB0aGUgPGEgaHJlZj0iaHR0cDovL2xlYWZvLm5ldC9sZXNzcGhwLyI+bGVz c3BocDwvYT4gd2Vic2l0ZSBhbmQgdXBsb2FkIGl0IHRvIHlvdXIgd2Vic2l0ZS48L2xpPgoJ CTxsaT5FZGl0IHlvdXIgY29uZmlnLnBocCBmaWxlIGFuZCBhZGQgdGhpcyBqdXN0IGJlbG93 IHRoZSAmIzgyMTY7JHR4cGNmZyYjODIxNzsgY29uZmlndXJhdGlvbiBsaW5lczogPGNvZGU+ cmVxdWlyZSAmIzM5Oy9wYXRoL3RvL2xlc3MuaW5jLnBocCYjMzk7OzwvY29kZT48L2xpPgoJ PC9vbD48L3A+CgoJPHA+VGhpbmdzIHlvdSBzaG91bGQga25vdyB3aGVuIHVzaW5nIDxzcGFu IGNsYXNzPSJjYXBzIj5MRVNTPC9zcGFuPiBzeW50YXg6Cgk8b2w+CgkJPGxpPlJlbWVtYmVy IHRvIHNhdmUgZWFjaCBzdHlsZSBzaGVldCBhbmV3IGVhY2ggdGltZSB5b3UgdXBkYXRlIHRo ZSBsZXNzc2MuaW5jLnBocCBmaWxlLjwvbGk+CgkJPGxpPklmIHlvdXIgPHNwYW4gY2xhc3M9 ImNhcHMiPkxFU1M8L3NwYW4+IGNvZGUgY2Fubm90IGJlIHBhcnNlZCwgYW4gZXJyb3Igd2ls bCBiZSBzaG93biBhdCB0aGUgYm90dG9tIG9mIGNzcyBhZG1pbiB0YWIgYW5kIHRoZSBzdGF0 aWMgY3NzIGZpbGUgd2lsbCBub3QgYmUgdXBkYXRlZC48L2xpPgoJCTxsaT5XaGVuIHNwZWNp Znlpbmcgb25seSB0aGUgZmlsZW5hbWUgaW4gYW4gJiM4MjIwO0BpbXBvcnQgJiM4MjE2O3N0 eWxlLmxlc3MmIzgyMTc7JiM4MjIxOyBzdGF0ZW1lbnQsIHRoZSBwbHVnaW4gYXNzdW1lcyBp dCYjODIxNztzIGluIHRoZSAmIzgyMjA7U3R5bGUgZGlyZWN0b3J5JiM4MjIxOy4gRG8gbm90 IGxlYXZlIG91dCB0aGUgJiM4MjE2Oy5sZXNzJiM4MjE3OyBleHRlbnNpb24hPC9saT4KCTwv b2w+PC9wPiI7czo0OiJjb2RlIjtzOjM0NDA6IgppZiAodHhwaW50ZXJmYWNlID09ICdhZG1p bicpCnsKICByZWdpc3Rlcl9jYWxsYmFjaygncnZtX2Nzc19zYXZlJywgJ2NzcycsICdjc3Nf c2F2ZScpOwogIHJlZ2lzdGVyX2NhbGxiYWNrKCdydm1fY3NzX3NhdmUnLCAnY3NzJywgJ2Nz c19zYXZlX3Bvc3RlZCcpOwogIHJlZ2lzdGVyX2NhbGxiYWNrKCdydm1fY3NzX3NhdmUnLCAn Y3NzJywgJ2RlbF9kZWMnKTsKICByZWdpc3Rlcl9jYWxsYmFjaygncnZtX2Nzc19kZWxldGUn LCAnY3NzJywgJ2Nzc19kZWxldGUnKTsKICByZWdpc3Rlcl9jYWxsYmFjaygncnZtX2Nzc19w cmVmcycsICdwcmVmcycsICcnLCAxKTsKICByZWdpc3Rlcl9jYWxsYmFjaygncnZtX2Nzc19j bGVhbnVwJywgJ3BsdWdpbl9saWZlY3ljbGUucnZtX2NzcycsICdkZWxldGVkJyk7Cn0KCgpm dW5jdGlvbiBydm1fY3NzKCRhdHRzKQp7CiAgZ2xvYmFsICR0eHBfZXJyb3JfY29kZSwgJHMs ICRwYXRoX3RvX3NpdGUsICRydm1fY3NzX2RpciwgJHZlcnNpb247CgogIGV4dHJhY3QobEF0 dHMoYXJyYXkoCiAgICAnZm9ybWF0JyA9PiAndXJsJywKICAgICdtZWRpYScgID0+ICdzY3Jl ZW4nLAogICAgJ24nICAgICAgPT4gJycsCiAgICAnbmFtZScgICA9PiAnJywKICAgICdyZWwn ICAgID0+ICdzdHlsZXNoZWV0JywKICAgICd0aXRsZScgID0+ICcnLAogICksICRhdHRzKSk7 CgogIGlmICghJG4gYW5kICEkbmFtZSkKICB7CiAgICBpZiAoJHMpCiAgICB7CiAgICAgICRu YW1lID0gc2FmZV9maWVsZCgnY3NzJywgJ3R4cF9zZWN0aW9uJywgIm5hbWU9JyIuZG9TbGFz aCgkcykuIiciKTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgJG5hbWUgPSAnZGVmYXVs dCc7CiAgICB9CiAgfQogIGVsc2VpZiAoISRuYW1lKQogIHsKICAgICRuYW1lID0gJG47CiAg fQoKICAkZmlsZSA9ICRydm1fY3NzX2Rpci4nLycuc3RydG9sb3dlcihzYW5pdGl6ZUZvclVy bCgkbmFtZSkpLicuY3NzJzsKCiAgaWYgKGVtcHR5KCRydm1fY3NzX2Rpcikgb3IgIWlzX3Jl YWRhYmxlKCRwYXRoX3RvX3NpdGUuJy8nLiRmaWxlKSkKICB7CiAgICBpZiAodmVyc2lvbl9j b21wYXJlKCR2ZXJzaW9uLCAnNC4zLjAnLCAnPj0nKSkKICAgIHsKICAgICAgdW5zZXQoJGF0 dHNbJ24nXSk7CiAgICAgICRhdHRzWyduYW1lJ10gPSAkbmFtZTsKICAgIH0KICAgIGVsc2UK ICAgIHsKICAgICAgdW5zZXQoJGF0dHNbJ25hbWUnXSk7CiAgICAgICRhdHRzWyduJ10gPSAk bmFtZTsKICAgIH0KCiAgICByZXR1cm4gY3NzKCRhdHRzKTsKICB9CgogIGlmICgkZm9ybWF0 ID09ICdsaW5rJykKICB7CiAgICByZXR1cm4gJzxsaW5rIHJlbD0iJy4kcmVsLiciIHR5cGU9 InRleHQvY3NzIicuCiAgICAgICgkbWVkaWEgPyAnIG1lZGlhPSInLiRtZWRpYS4nIicgOiAn JykuCiAgICAgICgkdGl0bGUgPyAnIHRpdGxlPSInLiR0aXRsZS4nIicgOiAnJykuCiAgICAg ICcgaHJlZj0iJy5odS4kZmlsZS4nIiAvPic7CiAgfQoKICByZXR1cm4gaHUuJGZpbGU7Cn0K CgpmdW5jdGlvbiBydm1fY3NzX3NhdmUoKQp7CiAgZ2xvYmFsICRwYXRoX3RvX3NpdGUsICRy dm1fY3NzX2RpcjsKCiAgJG5hbWUgPSAocHMoJ2NvcHknKSBvciBwcygnc2F2ZW5ldycpKSA/ IHBzKCduZXduYW1lJykgOiBwcygnbmFtZScpOwogICRmaWxlbmFtZSA9IHN0cnRvbG93ZXIo c2FuaXRpemVGb3JVcmwoJG5hbWUpKTsKCiAgaWYgKGVtcHR5KCRydm1fY3NzX2Rpcikgb3Ig ISRmaWxlbmFtZSkKICB7CiAgICByZXR1cm47CiAgfQoKICAkY3NzID0gc2FmZV9maWVsZCgn Y3NzJywgJ3R4cF9jc3MnLCAibmFtZT0nIi5kb1NsYXNoKCRuYW1lKS4iJyIpOwoKICBpZiAo JGNzcykKICB7CiAgICBpZiAocHJlZ19tYXRjaCgnIV5bYS16QS1aMC05LytdKj17MCwyfSQh JywgJGNzcykpCiAgICB7CiAgICAgICRjc3MgPSBiYXNlNjRfZGVjb2RlKCRjc3MpOwogICAg fQoKICAgICRmaWxlID0gJHBhdGhfdG9fc2l0ZS4nLycuJHJ2bV9jc3NfZGlyLicvJy4kZmls ZW5hbWU7CgogICAgaWYgKGNsYXNzX2V4aXN0cygnbGVzc2MnKSkKICAgIHsKICAgICAgJGNz cyA9IHByZWdfcmVwbGFjZSgnL0BpbXBvcnRcc1tcJyJdKFteXC9cXFxcXSs/XC5sZXNzKVtc JyJdOy8nLCAnQGltcG9ydCAiJy4kcGF0aF90b19zaXRlLnByZWdfcXVvdGUoRFMpLiRydm1f Y3NzX2Rpci5wcmVnX3F1b3RlKERTKS4nJDEiOycsICRjc3MpOwoKICAgICAgJGhhbmRsZSA9 IGZvcGVuKCRmaWxlLicubGVzcycsICd3YicpOwogICAgICBmd3JpdGUoJGhhbmRsZSwgJGNz cyk7CiAgICAgIGZjbG9zZSgkaGFuZGxlKTsKICAgICAgY2htb2QoJGZpbGUuJy5sZXNzJywg MDY0NCk7CgogICAgICAkbGVzcyA9IG5ldyBsZXNzYygpOwoKICAgICAgdHJ5CiAgICAgIHsK ICAgICAgICAkY3NzICA9ICRsZXNzLT5wYXJzZSgkY3NzKTsKICAgICAgfQogICAgICBjYXRj aCAoRXhjZXB0aW9uICRleCkKICAgICAgewogICAgICAgIGVjaG8gImxlc3NwaHAgZmF0YWwg ZXJyb3I6ICIuJGV4LT5nZXRNZXNzYWdlKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAg ICB9CgogICAgJGhhbmRsZSA9IGZvcGVuKCRmaWxlLicuY3NzJywgJ3diJyk7CiAgICBmd3Jp dGUoJGhhbmRsZSwgJGNzcyk7CiAgICBmY2xvc2UoJGhhbmRsZSk7CiAgICBjaG1vZCgkZmls ZS4nLmNzcycsIDA2NDQpOwogIH0KfQoKCmZ1bmN0aW9uIHJ2bV9jc3NfZGVsZXRlKCkKewog IGdsb2JhbCAkcGF0aF90b19zaXRlLCAkcnZtX2Nzc19kaXI7CgogIGlmIChzYWZlX2ZpZWxk KCdjc3MnLCAndHhwX2NzcycsICJuYW1lPSciLmRvU2xhc2gocHMoJ25hbWUnKSkuIiciKSkK ICB7CiAgICByZXR1cm47CiAgfQoKICAkbmFtZSA9IHN0cnRvbG93ZXIoc2FuaXRpemVGb3JV cmwocHMoJ25hbWUnKSkpOwogICRmaWxlID0gJHBhdGhfdG9fc2l0ZS4nLycuJHJ2bV9jc3Nf ZGlyLicvJy4kbmFtZTsKCiAgaWYgKCFlbXB0eSgkcnZtX2Nzc19kaXIpIGFuZCAkbmFtZSkK ICB7CiAgICB1bmxpbmsoJGZpbGUuJy5jc3MnKTsKCiAgICBpZiAoY2xhc3NfZXhpc3RzKCds ZXNzYycpKQogICAgewogICAgICB1bmxpbmsoJGZpbGUuJy5sZXNzJyk7CiAgICB9CiAgfQp9 CgoKZnVuY3Rpb24gcnZtX2Nzc19wcmVmcygpCnsKICBnbG9iYWwgJHRleHRhcnJheTsKCiAg JHRleHRhcnJheVsncnZtX2Nzc19kaXInXSA9ICdTdHlsZSBkaXJlY3RvcnknOwoKICBpZiAo IXNhZmVfZmllbGQgKCduYW1lJywgJ3R4cF9wcmVmcycsICJuYW1lPSdydm1fY3NzX2Rpcici KSkKICB7CiAgICBzYWZlX2luc2VydCgndHhwX3ByZWZzJywgInByZWZzX2lkPTEsIG5hbWU9 J3J2bV9jc3NfZGlyJywgdmFsPSdjc3MnLCB0eXBlPTEsIGV2ZW50PSdhZG1pbicsIGh0bWw9 J3RleHRfaW5wdXQnLCBwb3NpdGlvbj0yMCIpOwogIH0KfQoKCmZ1bmN0aW9uIHJ2bV9jc3Nf Y2xlYW51cCgpCnsKICAgIHNhZmVfZGVsZXRlKCd0eHBfcHJlZnMnLCAibmFtZT0ncnZtX2Nz c19kaXInIik7Cn0KIjtzOjM6Im1kNSI7czozMjoiZGMzNmYyYjk5MTMxYTUyY2Y1ZmRiZGFk ZTY4YzFiOTAiO30=