C (gcc), 179 159 146 139 137 116 107 103103 102 bytes
Edit 7: Use && on final check to replace ? - thanks jxh.
c,h;f(char*s){while(c=*s++)putchar(c),h=h%10816*104+c%27,memchr("&;@X\\ru{",h%3817,9)?putchar&&putchar(h=32):1;;}