isn't it simply that 39 is not in the activated ranges? \@inpenc@loop\^^A\^^H% \@inpenc@loop\^^K\^^K% \@inpenc@loop\^^N\^^_% \@inpenc@loop\^^?\^^ff% In that case \catcode`\'=\active \DeclareInputText{39}{\textquotesingle} % ^ this is input character 39 would work?