<commit_before>#include "mime_types.h"

std::unordered_map<std::string, rs::httpserver::MimeTypes::Item> rs::httpserver::MimeTypes::lookup_ = { 
    { ".txt", { "text/plain" } },
    { ".htm", { "text/html" } },
    { ".html", { "text/html" } },
    { ".css", { "text/css" } },
    { ".js", { "text/javascript" } },
    { ".csv", { "text/csv" } },
    { ".rtf", { "text/rtf" } },
    { ".xml", { "text/xml" } },
    { ".png", { "image/png", false } },
    { ".jpg", { "image/jpeg", false } },
    { ".jpeg", { "image/jpg", false } },
    { ".gif", { "image/gif", false } },
    { ".ico", { "image/ico" } },    
    { ".woff", { "application/font-woff", false } },
    { ".svg", { "image/svg+xml" } },
    { ".json", { "application/json" } },
    { ".pdf", { "application/pdf", false } },
    { ".ps", { "application/postscript" } },
    { ".zip", { "application/zip", false } },
    { ".gz", { "application/gzip", false } }
};

boost::optional<rs::httpserver::MimeTypes::Item> rs::httpserver::MimeTypes::GetType(const char* extn) {
    return GetType(std::string(extn));
}

boost::optional<rs::httpserver::MimeTypes::Item> rs::httpserver::MimeTypes::GetType(const std::string& extn) {
    if (extn.length() > 0) {    
        if (extn[0] != '.') {
            auto index = extn.rfind(".");
            if (index != std::string::npos) {
                return GetType(std::string(std::string(&extn[index])));
            }
        }
        <commit_msg>Added more font mime types<commit_after>#include "mime_types.h"

std::unordered_map<std::string, rs::httpserver::MimeTypes::Item> rs::httpserver::MimeTypes::lookup_ = { 
    { ".txt", { "text/plain" } },
    { ".htm", { "text/html" } },
    { ".html", { "text/html" } },
    { ".css", { "text/css" } },
    { ".js", { "text/javascript" } },
    { ".csv", { "text/csv" } },
    { ".rtf", { "text/rtf" } },
    { ".xml", { "text/xml" } },
    { ".png", { "image/png", false } },
    { ".jpg", { "image/jpeg", false } },
    { ".jpeg", { "image/jpg", false } },
    { ".gif", { "image/gif", false } },
    { ".ico", { "image/ico" } },    
    { ".woff", { "application/font-woff", false } },
    { ".woff2", { "application/font-woff2", false } },
    { ".eot", { "application/vnd.ms-fontobject", false } },
    { ".ttf", { "application/x-font-ttf" } },
    { ".otf", { "application/x-font-opentype" } },
    { ".svg", { "image/svg+xml" } },
    { ".json", { "application/json" } },
    { ".pdf", { "application/pdf", false } },
    { ".ps", { "application/postscript" } },
    { ".zip", { "application/zip", false } },
    { ".gz", { "application/gzip", false } }
};

boost::optional<rs::httpserver::MimeTypes::Item> rs::httpserver::MimeTypes::GetType(const char* extn) {
    return GetType(std::string(extn));
}

boost::optional<rs::httpserver::MimeTypes::Item> rs::httpserver::MimeTypes::GetType(const std::string& extn) {
    if (extn.length() > 0) {    
        if (extn[0] != '.') {
            auto index = extn.rfind(".");
            if (index != std::string::npos) {
                return GetType(std::string(std::string(&extn[index])));
            }
        }
        
{'fraction_non_alphanumeric': 0.26046660274848193, 'fraction_numerical': 0.0019175455417066154, 'mean_word_length': 2.6823529411764704, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 11, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 6}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2954652', 'n_tokens_mistral': 1156, 'n_tokens_neox': 1140, 'n_words': 166}