NAME
        doc/examples/file_encoding

DESCRIPTION
        The driver needs to know the file encoding for files to read.
        This is an example for detecting the encoding like Python does
        (PEP 263): It looks at the first or second line (which must
        be in ASCII) to have a comment like:

            // coding=<encoding name>
        or
            // -*- coding: <encoding name> -*-
        or
            // vim: set fileencoding=<encoding name> :

EXAMPLES
        #include <driver_hook.h>
        #include <regexp.h>

        /* Read the first two lines from the file and look for
         * encoding specifications.
         */
        private string get_file_encoding(string filename)
        {
            string lines = read_file(filename, 0, 2, "ascii");

            if (!lines)
                return "UTF-8";

            string* enc = regmatch(lines,
                "(^|\n)[ \t]*/[/*].*coding[:=][ \t]*([-_.a-zA-Z0-9]+)",
                RE_MATCH_SUBS);

            /* Use UTF-8 as a fallback if no encoding is given. */
            if (!enc)
                return "UTF-8";

            return enc[2];
        }

        string *epilog(int eflag)
        {
            set_driver_hook(H_FILE_ENCODING, #'get_file_encoding);
        }


SEE ALSO
        file_encoding(H)
