Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Hello all!

I need to replace all emoticons in a large LaTeX-file with some icons. I put up a little file with:

😘 🚕

and made a perl-filter to replace the first one with an icon. But I am unable to find the right unicode search-pattern.

Could somebody be so kind and help with this?

#!/usr/bin/perl use strict; use warnings; use utf8; use charnames ':full'; # while(<>) { # s!\x{D83D}\x{DE18}!\\includegraphics[height=15pt]{/Users/mstep/Doc +uments/private_txt/anette/pix/emo01.png}!g # } # while(<>) { # foreach (/\x{0020}/g) {print "hurray!\n"}; # this is working! (Searc +hes for a space!) # } while(<>) { foreach (/\N{FACE THROWING A KISS}/g) {print "hurray! And here is your + emoticon!\n"}; # this is not working! (Searches for the emoticon &#1 +28536; !) } # while(<>) { # foreach (/&#128536;/g) {print "hurray! And here is your emoticon!\n" +}; # this is not working! (Searches for the emoticon &#128536; !) # } # while(<>) { # foreach (/\x{D83D}\x{DE18}/g) {print "hurray! And here is your emoti +con!\n"}; # this is not working! (Searches for the emoticon &#128536; + !) # } # while(<>) { # foreach (/\N{U+D83DDE18}/g) {print "hurray! And here is your emotico +n!\n"}; # this is not working! (Searches for the emoticon &#128536; ! +) # } # while(<>) { # foreach (/\N{U+D83D}\N{U+DE18}/g) {print "hurray! And here is your e +moticon!\n"}; # this is not working! (Searches for the emoticon &#128 +536; !) # } # in BBEdit the search pattern \x{D83D}\x{DE18} for the emoticon was w +orking # hexdump is giving U+D83D U+DE18

Replies are listed 'Best First'.
Re: replace some emoticons - search pattern needed
by Anonymous Monk on Dec 19, 2014 at 07:15 UTC
    But I am unable to find the right unicode search-pattern.
    Your patterns look ok. You just need to open STDIN in ':encoding(utf-8)' mode. Use binmode or use open pragma.
    #!/usr/bin/perl use strict; use warnings; use utf8; use charnames ':full' # STDIN, STDOUT, STDERR and all opened files are utf-8 use open qw( :encoding(utf-8) :std ); ...

      Thank you for your reply! For the first time my search succeeded! But if I try to replace it with my LaTeX-code, it is not working anymore! And this is the crucial question: I need to replace every emoticon with a small icon!

      But the search is succeeding in a "buggy" way ... Only two attempts worked:

      while(<>) { foreach (/\N{FACE THROWING A KISS}/g) {print "hurray! And here is your + emoticon!\n"}; }

      And putting the emoticon directly in. Here once again my Perl-Filter:

      #!/usr/bin/perl use strict; use warnings; use utf8; use charnames ':full'; use open qw( :encoding(utf-8) :std ); # while(<>) { # Not working # s!\N{FACE THROWING A KISS}!\\includegraphics[height=15pt]{/Users/m +step/Documents/private_txt/anette/pix/emo01.png}!g; # } # while(<>) { # Not working # s!&#128536;!\\includegraphics[height=15pt]{/Users/mstep/Documents/ +private_txt/anette/pix/emo01.png}!g; # } # while(<>) { # foreach (/\x{0020}/g) {print "hurray!\n"}; # this is working! (Searc +hes for a space!) # } # while(<>) { # foreach (/\N{FACE THROWING A KISS}/g) {print "hurray! And here is yo +ur emoticon!\n"}; # this is working!!! # } # while(<>) { # foreach (/&#128536;/g) {print "hurray! And here is your emoticon!\n" +}; # this is working!!! # } # while(<>) { # foreach (/\x{D83D}\x{DE18}/g) {print "hurray! And here is your emoti +con!\n"}; # this is not working! # } # while(<>) { # foreach (/\x{3DD8}\x{18DE}/g) {print "hurray! And here is your emoti +con!\n"}; # this is not working! # } # while(<>) { # foreach (/\N{U+D83DDE18}/g) {print "hurray! And here is your emotico +n!\n"}; # this is not working! # } # while(<>) { # foreach (/\N{U+D83D}\N{U+DE18}/g) {print "hurray! And here is your e +moticon!\n"}; # this is not working! # }
        echo "😘 🚕" | perl -CSD -nE 'printf "%x\n", ord $1 while m{(.)}g'

        suggests that the hex code for the face is 1f618 and for the taxi is 1f695

        (-CSD is the command-line equivalent of use open...)
        But if I try to replace it with my LaTeX-code, it is not working anymore!
        Post your code then...

        echo "😘 🚕" | perl -CSD -pE 's/\x{1f618}/some_latex_code/'

        output:

        some_latex_code 🚕