--------------020108040905050308080407 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit Dave Burt wrote: > Tabs and spaces that are followed by something printable on the same line > should not be escaped; see the following: Oh, I misread the quiz -- I thought I would have to escape multiple whitespace characters as well which seemed to also make sense. (XML can sometimes collapse multiple whitespace characters into one.) This in fact simplifies my algorithm. Note that the new code will also escape at the file end in case there is no new line character there. I think that that is actually a good thing. >>>- allows too-long lines (my tests saw up to 104 characters on a line) >> >>Any hints on when this is happening? I can't see why and when this would >>happen. > > test_encode_12 also demonstrates this. I fixed it by changing > /[\t ](?:[\v\t ]|$)../ to /[\t ]$../. > This (obviously) fixes the mid-line whitespace as well. Still not sure why this was happening. Line breaks should be applied after the escaping has already happened. But I guess it's fixed now anyway. > Also, this, on line 10: "char[0 ... -1] + ...", seems redundant - with char > as a one-character match, it's an empty string. It wasn't when I was escaping all repeated whitespace. It now is. >>I'll repost the full source when I've sorted out that other problem as >>well. Which is now. See attachment. I've also decided to do proper escaping of the "[" and "]" characters in the also_encode argument. Note that it's still possible to cause an invalid Regexp by supplying b-a which I think is okay. --------------020108040905050308080407 Content-Type: application/x-ruby; name uoted_printable.rb" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename uoted_printable.rb" bW9kdWxlIFF1b3RlZFByaW50YWJsZQ0KICBleHRlbmQgc2VsZg0KDQogICMgRW5jb2RlcyB0 ZXh0IGFzIHF1b3RlZCBwcmludGFibGUuIFRoZSBzZWNvbmQgYXJndW1lbnQgc3BlY2lmaWVz IGNoYXJhY3RlcnMgdGhhdA0KICAjIHNob3VsZCBiZSBlbmNvZGVkIGluIGFkZGl0aW9uIHRv IHRoZSBvbmVzIHRoYXQgYXJlIGF1dG9tYXRpY2FsbHkgcXVvdGVkIG9uZXMuDQogICMgSXQg aXMgYSBzdHJpbmcgdGhhdCBzcGVjaWZpZXMgY2hhcmFjdGVycyBhbmQgY2hhcmFjdGVyIHJh bmdlcyBhcyB0YWtlbiBieQ0KICAjIFN0cmluZyNkZWxldGUgYW5kIHNvIG9uLg0KICBkZWYg ZW5jb2RlKHRleHQsIGFsc29fZW5jb2RlID0gIiIpDQogICAgYWxzb19lbmNvZGUuZ3N1YiEo L1xbfFxdLykgeyB8bWF0Y2h8ICJcXCIgPDwgbWF0Y2ggfQ0KICAgIHRleHQuZ3N1YigvW1x0 IF0kfFs9XHgwMC1ceDA4XHgwQi1ceDFGXHg3Ri1ceEZGI3thbHNvX2VuY29kZX1dLykgZG8g fGNoYXJ8DQogICAgICAiPSUwMlgiICUgY2hhclswXQ0KICAgIGVuZC5nc3ViKC9eKC57NzV9 KSguezIsfSkkLykgZG8gfG1hdGNofA0KICAgICAgYmFzZSwgY29udGludWF0aW9uID0gJDEs ICQyDQogICAgICBjb250aW51YXRpb24gPSBiYXNlLnNsaWNlISgvPSguezAsMn0pXFovKS50 b19zICsgY29udGludWF0aW9uDQogICAgICBiYXNlICsgIj1cbiIgKyBjb250aW51YXRpb24N CiAgICBlbmQuZ3N1YigiXG4iLCAiXHJcbiIpDQogIGVuZA0KDQogICMgRGVjb2RlcyBxdW90 ZWQgcHJpbnRhYmxlIHRleHQuIFRoZSBzZWNvbmQgYXJndW1lbnQgc3BlY2lmaWVzIHdoZXRo ZXIgPWFmIHNob3VsZA0KICAjIGJlIGFjY2VwdGVkIGFzIHdlbGwgYXMgPUFGLg0KICBkZWYg ZGVjb2RlKHRleHQsIGFsbG93X2xvd2VyY2FzZSA9IGZhbHNlKQ0KICAgIGVuY29kZWRfcmUg PSBSZWdleHAubmV3KCI9KFswLTlBLUZdezJ9KSIsIGFsbG93X2xvd2VyY2FzZSA/ICJpIiA6 ICIiKQ0KICAgIHRleHQuZ3N1YigvWyBcdF0qXHI/XG4vLCAiXG4iKS5nc3ViKCI9XG4iLCAi IikuZ3N1YihlbmNvZGVkX3JlKSBkbw0KICAgICAgJDEudG9faSgxNikuY2hyDQogICAgZW5k DQogIGVuZA0KZW5kDQoNCmlmIF9fRklMRV9fID09ICQwIHRoZW4NCiAgcmVxdWlyZSAnb3B0 cGFyc2UnDQoNCiAgb3B0aW9ucyA9IHsNCiAgICA6bW9kZSA9PiA6ZW5jb2RlLA0KICAgIDph bHNvX2VuY29kZSA9PiAiIg0KICB9DQoNCiAgQVJHVi5vcHRpb25zIGRvIHxvcHRzfA0KICAg IHNjcmlwdF9uYW1lID0gRmlsZS5iYXNlbmFtZSgkMCkNCiAgICBvcHRzLmJhbm5lciA9ICJV c2FnZTogcnVieSAje3NjcmlwdF9uYW1lfSBbb3B0aW9uc10iDQoNCiAgICBvcHRzLnNlcGFy YXRvciAiIg0KICAgIG9wdHMuc2VwYXJhdG9yICJTcGVjaWZpYyBvcHRpb25zOiINCg0KICAg IG9wdHMub24oIi1kIiwgIi0tZGVjb2RlIiwgIkRlY29kZSBxdW90ZWQgcHJpbnRhYmxlIHRv IHBsYWluIHRleHQuIikgZG8NCiAgICAgIG9wdGlvbnNbOm1vZGVdID0gOmRlY29kZQ0KICAg IGVuZA0KDQogICAgb3B0cy5vbigiLWUiLCAiLS1lbmNvZGUiLCAiRW5jb2RlIHBsYWluIHRl eHQgdG8gcXVvdGVkIHByaW50YWJsZS4gKERlZmF1bHQpIikgZG8NCiAgICAgIG9wdGlvbnNb Om1vZGVdID0gOmVuY29kZQ0KICAgIGVuZA0KDQogICAgb3B0cy5vbigiLXgiLCAiLS1lbmNv ZGUteG1sIiwgIkFsc28gZW5jb2RlIFhNTCBtZXRhIGNoYXJhY3RlcnMuIikgZG8NCiAgICAg IG9wdGlvbnNbOmFsc29fZW5jb2RlXSA8PCAiPD4mIg0KICAgIGVuZA0KDQogICAgb3B0cy5v bigiLWEiLCAiLS1hbHNvLWVuY29kZT1jaGFycyIsIFN0cmluZywNCiAgICAgICJBbHNvIGVu Y29kZSB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlcnMgb3IgY2hhcmFjdGVyIHJhbmdlcy4iDQog ICAgKSBkbyB8YXJnfA0KICAgICAgb3B0aW9uc1s6YWxzb19lbmNvZGVdIDw8IGFyZw0KICAg IGVuZA0KDQogICAgb3B0cy5zZXBhcmF0b3IgIiINCiAgICBvcHRzLnNlcGFyYXRvciAiQ29t bW9uIG9wdGlvbnM6Ig0KDQogICAgb3B0cy5vbigiLWgiLCAiLS1oZWxwIiwgIlNob3cgdGhp cyBoZWxwIG1lc3NhZ2UuIikgZG8NCiAgICAgIHB1dHMgb3B0cw0KICAgICAgZXhpdA0KICAg IGVuZA0KDQogICAgb3B0cy5wYXJzZSENCiAgZW5kDQoNCiAgQVJHRi5iaW5tb2RlIGlmIG9w dGlvbnNbOm1vZGVdID09IDpkZWNvZGUNCiAgdGV4dCA9IEFSR0YucmVhZA0KDQogIHJlc3Vs dCA9IGNhc2Ugb3B0aW9uc1s6bW9kZV0NCiAgICB3aGVuIDplbmNvZGUgdGhlbg0KICAgICAg UXVvdGVkUHJpbnRhYmxlLmVuY29kZSh0ZXh0LCBvcHRpb25zWzphbHNvX2VuY29kZV0pDQog ICAgd2hlbiA6ZGVjb2RlIHRoZW4NCiAgICAgIFF1b3RlZFByaW50YWJsZS5kZWNvZGUodGV4 dCkNCiAgZW5kDQoNCiAgU1RET1VULmJpbm1vZGUgaWYgb3B0aW9uc1s6bW9kZV0gPT0gOmVu Y29kZQ0KICBTVERPVVQucHV0cyByZXN1bHQNCmVuZA0K --------------020108040905050308080407--