shlomi-fish-homepage / bin / find_ascii_quotes-xmlp.pl

#!/usr/bin/perl

use strict;
use warnings;

use XML::Parser;

binmode STDOUT, ":encoding(utf8)";

foreach my $filename (@ARGV)
{
    my $parser = XML::Parser->new(
        Handlers => {
            Char => sub {
                my ($expat, $string) = @_;

                my @lines = split /\n/, $string, -1;

                foreach my $idx (0 .. $#lines)
                {
                    my $l = $lines[$idx];

                    if ($l =~ m{["']})
                    {
                        printf {*STDOUT}
                        (
                            "%s:%d:%s\n", 
                                $filename, 
                                $idx+$expat->current_line(), 
                                $l
                        );
                    }
                }

                return;
            },
        },
    );

    eval {
        $parser->parsefile($filename);
    };

    if (my $err = $@)
    {
        die "Error '$err' at filename '$filename'";
    }
}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.