private String sourceString(int begin, int end) {
        int a = Math.max(begin, 0);
        int b = Math.min(end, source.length());
        b = Math.max(b, 0);
        try {
            return source.substring(a, b);
        } catch (StringIndexOutOfBoundsException sx) {
            // Silent here, only happens for weird encodings in file
            return "";
        }
    }