# cno_replace_file v0.3 # Replace file plugin # Christian Nowak # http://www.cnowak.de # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjc6InZlcnNpb24iO3M6MzoiMC4zIjtzOjY6ImF1dGhvciI7czoxNToiQ2hyaXN0 aWFuIE5vd2FrIjtzOjEwOiJhdXRob3JfdXJpIjtzOjIwOiJodHRwOi8vd3d3LmNub3dhay5k ZSI7czoxMToiZGVzY3JpcHRpb24iO3M6MTk6IlJlcGxhY2UgZmlsZSBwbHVnaW4iO3M6NDoi dHlwZSI7aToxO3M6NDoibmFtZSI7czoxNjoiY25vX3JlcGxhY2VfZmlsZSI7czo0OiJoZWxw IjtzOjE5NjoiCTxwPlRoZSBwbHVnaW4gZXh0ZW5kcyB0aGUgZmlsZSBlZGl0IHNjcmVlbiB3 aXRoIGFuIG9wdGlvbiB0byB1cGxvYWQgYSBuZXcgdmVyc2lvbi48L3A+CgoJPHA+SnVzdCBz ZWxlY3QgYSBuZXcgZmlsZSBhbmQgcHJlc3MgcmVwbGFjZS4gVGhlIG9yaWdpbmFsIGZpbGUg d2lsbCB0aGVuIGJlIHJlcGxhY2VkIHdpdGggdGhlIG5ldyBvbmUuPC9wPiI7czo0OiJjb2Rl IjtzOjI0Njk6IgoJLyoqCgkgKiBDb25maWd1cmUgcGx1Z2luCgkgKi8KCWlmIChAdHhwaW50 ZXJmYWNlID09ICdhZG1pbicpIHsKCgkJLy8gUmVnaXN0ZXIgZmlsZSBlZGl0aW5nIGNhbGxi YWNrCgkJcmVnaXN0ZXJfY2FsbGJhY2soImNub19maWxlX2VkaXQiLCAiZmlsZSIsICJmaWxl X2VkaXQiLCAwKTsKCgkJLy8gUmVnaXN0ZXIgbmV3IGV2ZW50IGZvciByZXBsYWNpbmcgZmls ZQoJCXJlZ2lzdGVyX2NhbGxiYWNrKCJjbm9fZmlsZV9yZXBsYWNlIiwgImZpbGUiLCAiZmls ZV9saXN0IiwgMCk7CgoJfQoKCS8qKgoJICogRW5oYW5jZSBmaWxlIGVkaXQgcGFnZQoJICov CglmdW5jdGlvbiBjbm9fZmlsZV9lZGl0KCkgewoKCQlnbG9iYWwgJGZpbGVfbWF4X3VwbG9h ZF9zaXplOwoKCQkkaWQgPSBncHMoJ2lkJyk7CgoJCWlmICghJGZpbGVfbWF4X3VwbG9hZF9z aXplIHx8IGludHZhbCgkZmlsZV9tYXhfdXBsb2FkX3NpemUpPT0wKSAkZmlsZV9tYXhfdXBs b2FkX3NpemUgPSAyKigxMDI0KjEwMjQpOwoJCSRmb3JtID0KCQkJJzxmb3JtIGVuY3R5cGU9 Im11bHRpcGFydC9mb3JtLWRhdGEiIGFjdGlvbj0iaW5kZXgucGhwIiBtZXRob2Q9InBvc3Qi PicuCgkJCShpbnR2YWwoJGZpbGVfbWF4X3VwbG9hZF9zaXplKT09MD8nJzpoSW5wdXQoJ21h eF9maWxlX3NpemUnLCRmaWxlX21heF91cGxvYWRfc2l6ZSkpLgoJCQlncmFmKCdSZXBsYWNl IGZpbGUgd2l0aDogJy4KCQkJc0lucHV0KCdmaWxlX2xpc3QnKS4KCQkJZUlucHV0KCdmaWxl JykuCgkJCWhJbnB1dCgnaWQnLCRpZCkuCgkJCWhJbnB1dCgncmVwbGFjZV9maWxlJywgJzEn KS4KCQkJZklucHV0KCdmaWxlJywnZmlsZScsJycsJ2VkaXQnKS5zcC4KCQkJZklucHV0KCdz dWJtaXQnLCcnLGdUeHQoJ3JlcGxhY2UnKSwnc21hbGxlcmJveCcpKS4KCQkJJzwvZm9ybT4n OwoKCQkvLyBSZWFkIHRoZSBidWZmZXIgYW5kIGVuZCBidWZmZXJpbmcKCQkkYnVmZmVyID0g b2JfZ2V0X2NsZWFuKCk7CgoJCS8vIFJlc3RhcnQgYnVmZmVyaW5nLCB0byBtYWtlIHN1cmUs IHRoYXQgb3RoZXIgcGx1Z2lucyBjYW4gdXNlIHRoZSBidWZmZXIgdG9vCgkJb2Jfc3RhcnQo KTsKCgkJLy8gVGhlIFBsdWdpbiBzaG91bGQgYmUgZGlzcGxheWVkIGJlZm9yZSB0aGUgdXBk YXRlIGZvcm0KCQkkaW5zZXJ0UGx1Z2luID0gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9u PSJpbmRleC5waHAiPic7CgkJJHBsdWdpbkNvZGUgPSAkZm9ybS4kaW5zZXJ0UGx1Z2luOwoJ CSRidWZmZXIgPSBzdHJfcmVwbGFjZSgkaW5zZXJ0UGx1Z2luLCRwbHVnaW5Db2RlLCRidWZm ZXIpOwoKCQllY2hvICRidWZmZXI7CgoJfQoKCS8qKgoJICogUmVwbGFjZSBvbGQgZmlsZSB3 aXRoIG5ldyBvbmUKCSAqLwoJZnVuY3Rpb24gY25vX2ZpbGVfcmVwbGFjZSgpIHsKCgkJJHJl cGxhY2VfZmlsZSA9IHBzKCdyZXBsYWNlX2ZpbGUnKTsKCgkJaWYgKCRyZXBsYWNlX2ZpbGU9 PTEpIHsKCgkJCW9iX2VuZF9jbGVhbigpOwoJCQlvYl9zdGFydCgpOwoKCQkJZ2xvYmFsICR0 eHBjZmcsJGV4dGVuc2lvbnMsJHR4cF91c2VyLCRmaWxlX2Jhc2VfcGF0aDsKCQkJZXh0cmFj dCgkdHhwY2ZnKTsKCQkJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ2NhdGVnb3J5Jywn cGVybWlzc2lvbnMnLCdkZXNjcmlwdGlvbicpKSkpOwogICAgICAgCQkJJGlkID0gcHMoJ2lk Jyk7CgkJCSRycyA9IHNhZmVfcm93KCJmaWxlbmFtZSIsICJ0eHBfZmlsZSIsICJpZD0nJGlk JyIpOwoJCQlleHRyYWN0KCRycyk7CgoJCQlpZihpc3NldCgkX0ZJTEVTWydmaWxlJ11bJ3Rt cF9uYW1lJ10pKSB7CgoJCQkJJGZpbGUgPSBnZXRfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWydm aWxlJ11bJ3RtcF9uYW1lJ10pOwoKCQkJCWlmICgkZmlsZSA9PT0gZmFsc2UpIHsKCgkJCQkJ Ly8gY291bGQgbm90IGdldCB1cGxvYWRlZCBmaWxlCgkJCQkJZmlsZV9lZGl0KGdUeHQoJ2Zp bGVfdXBsb2FkX2ZhaWxlZCcpIC4iICRmaWxlbmFtZSAtICIudXBsb2FkX2dldF9lcnJvcm1z ZygkX0ZJTEVTWydmaWxlJ11bJ2Vycm9yJ10pLCAkaWQpOwoKCQkJCX0gZWxzZSB7CgoJCQkJ CSRuZXdwYXRoID0gYnVpbGRfZmlsZV9wYXRoKCRmaWxlX2Jhc2VfcGF0aCx0cmltKCRmaWxl bmFtZSkpOwoKCQkJCQlpZighc2hpZnRfdXBsb2FkZWRfZmlsZSgkZmlsZSwgJG5ld3BhdGgp KSB7CgoJCQkJCQlmaWxlX2VkaXQoJG5ld3BhdGguJyAnLmdUeHQoJ3VwbG9hZF9kaXJfcGVy bXMnKSwkaWQpOwoKCQkJCQl9IGVsc2UgewoKCQkJCQkJZmlsZV9zZXRfcGVybSgkbmV3cGF0 aCk7CgkJCQkJCWZpbGVfZWRpdChtZXNzZW5nZXIoJ2ZpbGUnLCRmaWxlbmFtZSwndXBsb2Fk ZWQnKSwkaWQpOwoKCQkJCQl9CgoJCQkJfQoKCQkJfSBlbHNlIHsKCgkJCQkvLyAkX0ZJTEVT IGlzIGVtcHR5CgkJCQlmaWxlX2VkaXQoJ0ZpbGUgVXBsb2FkIHdhc25cJ3Qgc3VjY2Vzc2Z1 bCEnLCAkaWQpOwoKCgkJCX0KCgkJCWNub19maWxlX2VkaXQoKTsKCgkJfQoKCX0KCiI7czoz OiJtZDUiO3M6MzI6IjdmYWViNjgyMWM5YjE0NmVkMmRkMDIyMDMwMDMyNTEwIjt9