Class it_html:

/**
 * Return HTML header on first call or empty string on subsequent calls
 *
 * @param args... any number of assoc arrays and strings. strings will be content of <head>
 * @param $p['content-type']  content type (default: "text/html; charset=iso-8859-1")
 * @param $p['headers']       Array of HTTP headers (e.g. [ 'Vary' => "User-Agent,Accept-Language" ])
 * @param $p['cssinline']     stylesheet to be put in header
 * @param $p['description']   data for <meta name="description"> tag
 * @param $p['keywords']      data for <meta name="keywords"> tag
 * @param $p['stylesheets']   array mediatype => url of styleshests
 * @param $p['title']         content of <title>, will be html encoded
 */
function head($args = array())
{
    if (!
$this->head_sent++)
    {
        list(
$data$p) = it_parse_args($args);

        
$p += $this->p;
        
$this->= ($p += array('content-type' => "text/html; charset={$p['charset']}"));

        
$header $p['show_content_type'] ? meta(array('http-equiv' => "Content-Type"'content' => $p['content-type'])) : "";

        
# Enable latest IE mode
        
if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE'))
            
$header .= meta(array('http-equiv' => "X-UA-Compatible"'content' => "IE=edge"));

        foreach(array(
'description''keywords') as $name)
            if (!empty(
$p[$name]))
                
$header .= meta(array('name' => $name'content' => $p[$name]));

        
# Add favicon
        
if ($p['favicon'])
            
$header .= tag('link', array('rel' => "shortcut icon"'href' => $p['favicon']));
        else if (
$p['show_favicon'] && @file_exists($_SERVER['DOCUMENT_ROOT'] . '/favicon.ico'))
            
$header .= tag('link', array('rel' => "shortcut icon"'href' => "/favicon.ico"));

        foreach((array)
$p['stylesheets'] as $type => $url)
            
$header .= tag('link', array('rel' => "stylesheet"'type' => "text/css"'href' => $url) + (is_int($type) ? array() : array('media' => $type)));

        if (!empty(
$p['cssinline']))
            
$header .= tag('style', array('type' => "text/css""\n" preg_replace(array('/\s*\/\*[^\*]+\*\//Um''/\s*\{\s*/''/;\s+/'), array('''{'';'), $p['cssinline'])));

        
$header .= $p['head'] . ($p['title'] ? tag('title'strip_tags(Q(strip_tags($p['title'])))) : ""); # remove coloring by .texts and .q debug param

        
if($this->p['htmltype'] == "xhtml-mobile" && strpos($_SERVER['HTTP_USER_AGENT'], 'W3C_Validator'))
            
header("Content-Type: application/xhtml+xml; charset={$this->p['charset']}"); # for validation
        
else if (!headers_sent()) # prevent warnings when ED() in use
        
{
            
header("Content-Type: " $p['content-type']);
            foreach ((array)
$p['headers'] as $key => $value)
                
header("$key$value");
        }

        
$js = isset($p['jsenv']) ? "var env = " itjs::serialize($p['jsenv']) . ";\n" '';
        
$js .= $this->_itjs($p['jsinline']);

        if (
$js)
            
$data .= $this->js(array(self::_cleanup($js$p['charset'])));

        return 
tag('head'$header$data);
    }
}