The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
History file for ack.  http://betterthangrep.com/

1.93_02     Wed Oct  6 21:39:58 CDT 2010
    [FIXES]
    --man and --version now return with an exit code of 0.  They
    used to exit with a 1. Thanks to Bo Borgerson.

    [ENHANCEMENTS]
    The --ignore-dir option now can ignore entire paths relative
    to your current directory.  Thanks to Nick Hooey.  For example:

        ack --ignore-dir=t/subsystem/test-data

    Added --invert-file-match switch to negate the sense of the
    -g/-G switches.  Thanks, Lars Dieckow.


1.93_01     Sun Sep  5 16:00:29 CDT 2010
    [FILE TYPE UPDATES]

    Added --verilog, --vhdl and --clojure.

    Files that match *.mk and *.mak as well as GNUmakefile are now included in
    the ack filetype 'make' (issue 88).

    Added RSpec's .spec type to the --ruby list.


    [ENHANCEMENTS]
    Updated the README to Markdown format.  Thanks to Mark Szymanski
    for the idea.

    Added docs for -r, -R, --recurse options.

    Added new switch --color-lineno and environment variable ACK_COLOR_LINENO,
    which allow setting the line number color.  (Marq Schneider)

    Added option --show-types to output the types that ack considers
    a file to have. (Torsten Blix)

    'ack --count --no-filename regex' doesn't output a list of numbers but a
    sum of all occurences. This is NOT what grep does but is the more sensible
    behavior.


    [FIXES]
    Fixed ack misbehavior when using --match or not specifying a regex:

        ack --match Sue
        cat foo | ack --perl

    Fixed issue 74: analog to grep, 'ack --count regex file' now
    only outputs the number of found matches, if only one file is
    given.

    Fixed issue 76: Giving both --line and a regex (with --match)
    now leads to an error. The same is true for -f or -g in conjunction
    with --match. (Torsten Blix)

    Fixed issue 80: Piping into ack --count now works as expected.
    ack always returned 0 when piped into, no matter how many matches
    where found. (Torsten Blix)

    Fixed issue 81: .ackrc now ignores leading/trailing whitespace.
    (Torsten Blix)


1.92        Fri Dec 11 11:47:56 CST 2009

    The source code for ack is now at github: http://github.com/petdance/ack

    [FIXES]
    The --pager flag would not work.  Now it does.  Thanks Packy
    Anderson.

    File matching for Emacs work files that match #*# was wrong.
    It was checking the entire path, not just the basename.  This
    is fixed.  (http://github.com/petdance/ack/issues/closed/#issue/101)

    Fixed URLs that pointed to old Google Code.


    [ENHANCEMENTS]
    Added Scala support.  Thanks to Dan Sully.

    Added .phtml as an extension for PHP.

    Using -f or -g now return a proper error code.  If files are
    found, ack returns 0.  If none are found, ack returns 1.  This
    is a change in the specification, but the code didn't match the
    specfication anyway.

    No man pages are created for any of the .pm files any more.


1.90        Mon Sep  7 23:24:24 CDT 2009

    [ENHANCEMENTS]
    Added Ada support.  Thanks to Shaun Patterson.

    Added -r, -R and --recurse options as in grep.  They have no
    effect because directory recursion is on by default.  Also added
    --no-recurse for orthoganality. Thanks to Mark Stosberg and
    Ryan Niebur.

    Version in --version is prettier.  Thanks, Ori Avtalion.

    Added an updated ack.bash_completion.sh from Adam James.


    [FIXES]
    Expanded --files-without-match to --files-without-matches.

    Removed all the hi-bit characters, so we don't have any encoding
    problems.  It's all entities now.

    Fixed capture-stderr to localize some globals that were obscuring
    errors.  Thanks very much to Christopher Madsen.

    Fixed uninitialized errors in tickets #138 and #159.


    [DOCUMENTATION]
    Fixed an incorrect command line in the docs for -f.

    Added notes on --pager.  Thanks to Mike Morearty.


    [BUILD]
    Made the squash program more robust when handling POD.  Thanks
    to Kent Fredric.


1.89_02     Wed May 13 16:20:21 CDT 2009

    [DISTRIBUTION]
    Updated Makefile.PL to use new ExtUtils::MakeMaker features.
    Thanks, Schwern.

    [FEATURES]
    --version now shows the version of Perl that ack is running
    under, and the full path to the Perl executable.

    Added new switches --color-match and --color-filename, which
    let you define ACK_COLOR_MATCH and ACK_COLOR_FILENAME from the
    command line.

    Added new switch --column to display the column of the first
    hit on the row.  Thanks to Eric Van Dewoestine.

    Added .ss to --scheme.

    [FIXES]
    No longer die if you have a .tar.gz file in your tree.

    More tweaks to get the detection of input and output pipes
    working.

    Fixed an amazingly bad call to cmp_ok() in t/ack-passthru.t.

    [DOCUMENTATION]
    Started an ack FAQ.


1.88        Sat Feb  7 13:51:35 CST 2009
    [BIG CHANGES]
    ack-standalone no longer exists.  ack is now built from ack-base.
    What used to be called "ack-standalone" is now just "ack."

    ack has a new plugin system, so you can build plugins to search
    whatever filetype you want.  The plugin API is not yet set in
    stone.

    The plugin system has not been optimized.  ack is about 1/3rd
    slower than before.


    [ENHANCEMENTS]
    Added support for .hrl Erlang header files.  Thanks, Richard
    Carlsson.

    Added support for --rake files, which are also --ruby files.


    [FIXES]
    Fixed a bug where files ending in "Makefile" were mistakenly
    identified as Makefiles.

    We now use the C<-p> file test operator to see if input is
    coming from a pipe, rather than than faking it with C<-t> and
    C<eof>.  Thanks to Sitaram Chamarty.


    [ADDITIONS]
    Created a new etc/ directory and its first addition, a bash
    auto-completion file from Adam James.


    [DOCUMENTATION]
    Clarified the licensing information that hand-waved "under the
    same terms as Perl itself."


1.86        Wed Jul  9 01:27:21 CDT 2008
    [ENHANCEMENTS]
    Added --smart-case option.  Thanks, Leland Johnson.

    --shell file type now recognizes tcsh.  Thanks to Chris Dolan
    and, indirectly, Perl::Critic.

    Added --[no]colour to go with --[no]color.

    [DOCUMENTATION]
    Added a Tips section.

    [INTERNALS]
    Tweaking in the file-finding iterator shaves of entire hundredths
    of a second in my test runs!  Because everyone deserves performance.


1.84        Sun May 25 00:17:41 CDT 2008
    [ENHANCEMENTS]
    Support color on Windows.  Thanks, Jan Dubois.

    ack --help outputs the current version number of ack now.

    Added Lua support.  Thanks, Ben Klaas.

    Added --flush to unbuffer output.

    [FIXES]
    t/file-permissions.t should work now running as root

    Fixed link in documentation to Phil Jackson's Emacs extension.

    Fixed documentation regarding caveats in defining your own
    types in the .ackrc file. Multiple people reported this, thanks.

    Added ack --man documentation for -L option.


1.82        Sun Apr 13 11:36:56 CDT 2008

    [FIXES]
    Added --pager/--nopager to the --help text

    Redirecting output makes ack not set up the pager.  The following
    does not make sense:

        ack foo --pager=more > save.txt

    so now ack will ignore the --pager and ACK_PAGER.

    [ENHANCEMENTS]
    Added extensions for Ruby's new Rails format and tcsh.

    [DOCUMENTATION]
    Added a new Debugging section to the docs.

    Pointed to Phil Jackson's Emacs extension and Pedro Melo's
    TextMate extension.


1.80        Wed Mar 26 10:07:53 CDT 2008

    [FIXES]
    --noenv now correctly ignores ACK_PAGER.

    More Windows compatibility path fixes.  Thanks, Jan Dubois.

    Fixed an install problem with t/file-permission.t.


1.78        Mon Mar 24 00:32:36 CDT 2008
    [ENHANCEMENTS]
    ack can now feed its output to a pager.  It can be specified
    with --pager on the command-line, or with the ACK_PAGER environment
    variable.  The --pager differs from piping the output on the
    command line, because ack doesn't turn off coloring and grouping
    if its output goes through the --pager.

    Added CFMX support.  Thanks, Will Coleda.

    Added more extensions for --asm and --tcl. Added new
    extension --batch for .bat and .cmd files. Thanks, Jan Dubois.

    [FIXES]
    Fighting the never-ending battle for Windows compatibility.
    Thanks to Jan Dubois and Christoper J. Madsen.

    [INTERNALS]
    I removed t/pod-coverage.t, because I don't care about the
    documentation.  The user-servicable parts are only for hardcore
    ack hacks.


1.77_04     Fri Mar 14 00:23:46 CDT 2008
    [FIXES]
    --[no]ignore-dir option now works also with trailing slash
    in the directory name.

    A match on the last line of a file where the newline is
    missing gets the newline added by ack for free!

    [ENHANCEMENTS]
    Added --break and --heading options.  --group is the same as
    --break --heading.

    Ack gives a better error message when running with an illegal
    regex.

    Added Actionscript support.  Thanks, Yuichi Tateno.

    Added XML Entity file (.ent) support.  Thanks, Tim Jenness.


    [INTERNALS TESTING]
    Fixed test count in case of skipped tests for ack-types.t.

    Fixed test in run_ack for stderr output, again. This should no
    longer report unexpected succeeds for TODO tests - and now really
    work.

    Changed method of capturing stderr in tests, should now work on
    Windows. Thanks, Christopher J. Madsen!

    Changed quoting of command line arguments and adjusted tests to
    it. Thanks also for the idea this, Christopher J. Madsen!

    And more stuff spotted by Christopher: ack-standalone is no longer
    set to readonly on Windows.

    More test fixes on Windows provided by Christopher J. Madsen and
    Jan Dubois.


1.77_03     Wed Feb 20 11:16:43 CST 2008
    [CHANGED FUNCTIONALITY]
    ack -i -g=regex no longer treats the regex as case-insensitive.
    This was changed for added consistency. Now -i, -w, -v and -Q
    only apply to normal ack PATTERN while -g and -G are not affected
    by these regex modifiers at all.

    [ENHANCEMENTS]
    Added option -G REGEX to search only files whose path+filename
    matches REGEX. Thanks go to Michael Hendricks for providing a
    patch!

    Added option --[no]env to ignore all environment settings
    including .ackrc.

    Added a --[no]ignore-dir option, to include/exclude additional
    directories. Many thanks for this patch go to Matthew Wickline!

    Added option --match REGEX to specify a regex explicitly.

    [FIXES]
    Fixed bug with -v not finding all files correctly (introduced
    with the performance optimizations in ack 1.75)

    Removed spurious new line after last match in --group output.

    Fixed typos in docs concerning context matching and removed
    option --rc from docs, since it was never implemented.

    [INTERNALS]
    Fixed some cross-platform issues in the test cases.

    Fixed test in run_ack for stderr output. This should no longer
    report unexpected succeeds for TODO tests.


1.77_02     Mon Jan 28 16:19:30 CST 2008
    [ENHANCEMENTS]
    Added .lsp for --lisp, .st for --smalltalk.

    Added testing for spurious output in the test suite.


1.77_01     Sun Jan 27 20:52:27 CST 2008
    [CHANGED FUNCTIONALITY]
    ack now always searches files given on the command line, even
    if they are of the wrong type or not recognized or normally
    skipped.

    .bak files are now automatically skipped.  I don't know how I
    missed this before.

    [FIXES]
    Added a test for the Perl 5.10 regex bug fixed in 1.76.

    Made the regex for --thppptttt a little more robust.  It used
    to have to end with a single "t", but now it's more flexible.

    Changed year in copyright note to 2008.

    Updated references in README (removed link to CPAN RT Queue).

    Fixed a problem with files with non-native line-ending (DOS or
    MacOS on Unix). Instead of the matching line an empty line was
    output. This was reported by multiple people, thanks!

    Rewrote a test to work around a bug in old versions of
    Test::More (before 0.48_2).

    Fixed ack failure when encountering unreadable files. Reported
    by David Dyck, thank you!

    [ENHANCEMENTS]
    Ack warns now when the files/directories given on the command
    line don't exist.

    Finally ack allows you to define your own types! See options
    --type-set and --type-add. There are some restrictions left,
    but it should suffice for most things.

1.76        Wed Dec 19 23:23:05 CST 2007
    [FIXES]
    Now runs correctly under Perl 5.10.  ack had been relying on a
    mistaken regex behavior of Perl 5.8, and Perl 5.10 fixed it.

    [ENHANCEMENTS]
    Add .xhtml to --html

    Added types --objc (.m .h) and -objcpp (.mm .h) for Objective-C
    and Objective-C++. Thanks, Jjgod Jiang.

    Added type --plone (.pt .cpt .metadata .cpy .py). Thanks, Jason
    Porritt.

    Skips Module::Build's _build directory.  Thanks, Elliot Shank.

    Added a --print0 option: When outputting filenames (-f, -g, -l,
    -L, -c) separate them by null bytes instead of new lines.
    Useful e.g. in conjunction with 'xargs -0' and spaces in
    filenames.

    [FIXES]
    Fixed problem with coloring and pattern with backreferences,
    spotted by Jason Porritt.

    [DOCUMENTATION]
    Removed some old references to rt.cpan.org.


1.75_01     Thu Dec  6 20:37:57 CST 2007
    [ENHANCEMENTS]
    Optimized the usually-common case where you're searching through
    a lot of source files and finding relatively few strings.  ack
    now slurps up the entire file at once and scans it quickly to
    decide if it needs to do so line-by-line.  This cuts run-time
    by about 40% in my test cases, and 70% if context is on.  Thanks
    to Uri Guttman for the idea.

    Excludes backup directories for Mac Interface Builder: ~.dep,
    ~.dot, ~.nib, ~.plst.  Thanks, Peter Lewis.

    [FIXES]
    XML sniffing now is case-insensitive.


1.74        Wed Nov 28 22:08:16 CST 2007
    [ENHANCEMENTS]
    Added -u, --unrestricted options that search absolutely all
    files and directories, just like grep.

    Ignores Codeville's .cdv directories.

    Ignores SourceGear's _sgbak directories.

    [THINGS THAT HAVE CHANGED]
    ack -o emulates grep now and shows filenames unless explicitly
    suppressed with -h.

    [FIXES]
    Added workaround for older Getopt::Long.

    Fixed some testcases so that they are more robust (order of
    files, forward/backward slashes and shellquoting).

    Fixed a test that would fail if the files weren't sorted.


1.72        Wed Nov  7 23:16:46 CST 2007
    Please note that I have moved the bug/issue queue to Google
    Code at http://code.google.com/p/ack/issues/list.  The RT queue
    at rt.cpan.org will no longer be maintained.

    [FIXES]
    The test suite will now run with a TTY, and as part of the
    Debian packaging process.

    Fixed some grouping bugs.  Thanks, Torsten Blix.

    [ENHANCEMENTS]
    Skips Mercurial's .hg and Bazaar's .bzr directories.  Thanks,
    Ori Avtalion.

    Added .cc, .hpp, and .hh for C++.  Thanks, Kevin Riggle.


1.70        Sun Nov  4 21:13:55 CST 2007
    [ENHANCEMENTS]
    Added --lines argument.

    [FIXES]
    Added -1 to the --help output.  Thanks Elliot Shank.

    Added sanity checks for -m, --after_context and --before_context.

    -m and -C didn't play nicely together.  Now they do.


1.69_01     Fri Oct 26 2007
    [ENHANCEMENTS]
    Added -A, -B and -C options for showing context after, before
    and around your match, respectively.  Thanks very much to Torsten
    Blix for writing code and tests for this most popular request.

    Skips directory autom4te.cache, a cache for autoconf tools, and
    cover_db, used by Devel::Cover.


    [FEATURES REMOVED]
    ack used to check for options that didn't make sense together,
    like "ack -l --group", and wouldn't run.  Now, with the ability
    to have options in the environment, and in your .ackrc file, I
    was getting a lot of conflicts that didn't make sense.  If I
    specify "ack -l --group" on the command line, I should get an
    error, but if I do "ack -l" and I have "--group" in my .ackrc,
    that shouldn't throw an error.

    So I know what I want the behavior to be, but I don't know how
    I want to code it.  So, in the meantime, I'm removing the
    feature.


1.68    Tue Oct 16 14:58:27 CDT 2007
    [FIXES]
    Implemented --with-filename and --no-filename, which were
    documented but never implemented.  Thanks to Nigel Metheringham
    for the heads-up.

    [ENHANCEMENTS]
    Added Erlang support.

    [INTERNALS]
    Added tests for ack -h and -H.


1.67_02     Sun Oct  7 14:50:38 CDT 2007
    [FIXES]
    ack no longer uses -T, but the tests still use it.

    Check for ~/_ackrc, too.

    --passthru would highlight every single zero-width space between
    characters.  Oops.  The effect would be to have your output be
    15x larger than necessary.

    [ENHANCEMENTS]
    Added still more sanity checks on option conflicts.

    The output for -v negative searching now matches regular searching.


1.67_01     Wed Sep 26 13:36:18 CDT 2007
    [FIXES]
    Color coding no longer "smears" the following line if the colored
    part of the match wraps to the next line.

    [ENHANCEMENTS]
    Support for an .ackrc file.

    Little bitty speed enhancements inside.  Nothing major, but it
    all adds up, especially on something as commonly-used as ack.

    ack now runs under -T (taint mode).  This is just a good idea,
    although there's nothing that ack does that executes code.  Thanks to
    Bill Ricker for bringing this up via what turns out to be a non-issue,
    but still nudged me to do this.


1.66    Fri Aug 24 00:04:02 CDT 2007
    [FIXES]
    New Macs are shipping with Test::Harness 1.85, and ack's test
    confuse it.  I added a requirement of Test::Harness 2.50.  The
    specific version is somewhat arbitrary.

    The -o and --output switches now properly show all matches on
    a line, not just the first one.

    [ENHANCEMENTS]
    Added the -1 switch, which makes ack only give one match of
    whatever it is you're looking for, and stop searching after it
    finds it.  Say that you know there's a Perl file with "foo" in
    the name, you can do

        ack -1 --perl -g foo

    and ack will show the first file matching "foo", and stop once
    it finds the file.

    [INTERNALS]
    Split up more of the code into functions in App::Ack.  This is
    to make things easier for Gabor Szabo's wack project.


1.65_01 Fri Aug 10 00:28:55 CDT 2007

    [ENHANCEMENTS]
    Added --passthru switch, to print all lines, whether or not they
    match.  This is something that could potentially get used a lot,
    so I'm not sure that --passthru is the best name.  I'm open to
    suggestions.

    Added FORTRAN support.  Thanks, Tod Hagan.

    Now ignores .pc directories for the Quilt patch management
    system.  Thanks, Dirk Jagdmann.

    The -i switch now works with the -g switch.  Thanks, Leland Johnson.


1.64    Tue Jul 17 10:51:47 CDT 2007

    [ENHANCEMENTS]
    Sped up searching by using the /o flag.  Duh!

    Added --hh for C header files.

    Specifically excluding a type with --no-whatever trumps its
    inclusion in --something-else.  For example, if you want to
    search .c files, but excluding .h files, you can use --cc
    --no-hh.  (In fact, that's the very reason I wrote this feature.)

    Added -g=regex to let you do -f listings, but filter out only
    those files matching the regex.  This is exactly the same as
    "ack -f | ack regex".

    The standalone version of ack gets unused functions pruned out
    from it.

    Removed the discussion of -A, -B and -C which doesn't work yet.


1.63_03     Thu Jun 14 09:47:39 CDT 2007

    [FIXES]
    The tests didn't clear ACK_OPTIONS before running, so if you
    set this useful environment variable, your tests would fail.
    Thanks, Michael Hendricks.

    [ENHANCEMENTS]
    Added a filetype of "--text", which matches any text file.  This
    is off by default, just as --binary is.

    Added a filetype of "--skipped", which matches any file that
    ack skips, like core dumps and backup files.  It will NOT
    include files that are in ignored directories like blib/ and
    .svn/


1.63_02     Thu Jun 14 09:39:23 CDT 2007
    Buggy release.  Ignore.


1.63_01     Tue Jun  5 2007
    [THINGS THAT MAY BREAK FOR YOU]
    The changes I made to detect if ack is outputting to the screen
    may break some automated build tools.  If so, please contact
    me.  That's why this is a dev release.

    [FIXES]
    Colorized output to the screen is now the default, correctly.
    I got rid of the is_interactive() I took from IO::Interactive
    and just checked for C<-t *STDOUT>, because that's what we're
    really checking for: Is the output going to the screen?


1.62    Mon May 21 15:22:19 CDT 2007

    [THINGS THAT MAY BREAK FOR YOU]
    The extensions .tt and .ttml are no longer part of the --perl
    type.  They are now only in the --tt type.

    [FIXES]
    RT #26953: Util.pm was in the wrong directory, but only the
    Perl from Darwinports complained, because apparently most other
    Perl installs have "." in @INC.

    RT #25391: Fixed test failures under Win32.

    Spelled Slaven Rezić's name properly.  Look, my first utf-8 string!

    [ENHANCEMENTS]
    Added .properties extension for --java.

    Added -L as a negation to -l.  This is equivalent to -l -v.

    Added more GNU-style long opts.  Thanks to Ævar Arnfjörð Bjarmason,
    my second utf-8 string.


1.60    Fri Mar  9 22:34:15 CST 2007

    [FIXES]
    ack should behave better when running under a shell now.

    [ENHANCEMENTS]
    ack now recognizes makefiles and Visual Basic files.

    Added new extensions for Mason per
    http://masonhq.com/?FAQ:ServerConfiguration#h-what_filename_extensions_should_i_use_for_mason_components_
    Thanks, Elias Lutfallah.

    Added .rxml to --ruby.  Thanks, Ian Langworth.

    Added .php3, .php4 and .php5 to --php5.  Added --jsp extensions.
    Thanks, Stephen Steneker.

    Teeny speed optimizations on some regexes.

    Changed App::Ack::should_ignore to ::is_searchable() (and
    reversed the meaning).

    Added error checking on file closes.

    Improved how it knows if it's running interactive by stealing
    is_interactive() from IO::Interactive.

    [DOCUMENTATION]
    Added example of using with vim.  Thanks, Mark Stosberg.


1.58    Thu Jan 18 22:46:36 CST 2007

    [THINGS THAT MAY BREAK FOR YOU]
    The PHP list of extensions no longer includes .htm and .html.

    [FIXES]
    Directories with a file named "0" would stop ack's searching.

    [ENHANCEMENTS]
    Added a --tcl flag.  Thanks, Matt Diephouse.


1.56    Wed Jan 17 12:55:38 CST 2007

    [FIXES]
    Now correctly handles filetypes of files with multiple periods.

    [ENHANCEMENTS]
    Added .xs to the list of --cc files.

    Warning messages now include the name "ack" at the beginning
    of them.

    Now skips .git directories.


1.54    Sun Jan  7 22:34:57 CST 2007

    [THINGS THAT MAY BREAK FOR YOU]
    ack no longer follows symlinks by default, except for starting
    points specified on the command line.

    [ENHANCEMENTS]
    Added the --follow/--nofollow switches for following symlinks.

    Added .sty and .cls to the --tex files.  Thanks, Uwe Voelker.

    [FIXES]
    t/filetypes.t would fail sometimes based on hash order.


1.52        Fri Dec 22 00:41:45 CST 2006

    [FIXES]
    In 1.51_01, I changed how we check the -B of a file, but it's
    not reliable.  Perl's -B operator acts differently if you call
    -B $filename vs. -B $fh.

    [ENHANCEMENTS]
    I changed some internal code to figure out a file's extension.
    By using my own, instead of File::Basename, I cut out over 50%
    of the run time on my test of acking through a large tree.

    When using -a, it's not necessary to determine the filetype
    before searching, only if we should ignore the file or not.
    This cut out an additional 10% or so of execution time when
    doing -a searces.

    [INTERNALS]
    We no longer need to build a list of all used suffixes.  This
    makes startup quicker.


1.51_01     Mon Dec 18 12:59:28 CST 2006

    Development version.  I'm putting this out so hardcore ack users
    can test out some new features.

    [FIXES]
    Tests now pass under Windows.

    [FEATURES]
    You can now set the colors for display with the ACK_COLOR_MATCH
    and ACK_COLOR_FILENAME environment variables.

    [ENHANCEMENTS]
    ack-standalone now builds with a shebang line of "#!/usr/bin/env
    perl", which is more compatible.  Of course, you're welcome to
    change it to whatever you like.

    I now check for binaryness on the already-open file, rather
    than reopening it from the filesystem.  This gave me about a
    1% speedup in my tests.

    Started adding sanity checks to the options.  For instance, it
    doesn't make sense to use -l and -C together, so ack will
    complain about that.

    Added a --sort-files option.

    [INTERNALS]
    More testing on XML and PHP detection courtesy Bill Ricker.

    Lots of refactoring of search() in preparation for showing
    context around matches.