<? 
/*******************************************************************************
 * Copyright (c) 2007 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
 *******************************************************************************/
function get_title_from_html_document(&$file_name) {
	$header = get_header_from_html_document($file_name);
	
	/*
	 * Break the header up into multiple lines. Handle the
	 * case where line breaks are lf, crlf, or cr.
	 */
	
	$lines = preg_split("/\r?\n|\r/", $header); 
	
	/*
	 * Merge the lines into a single line so that eregi
	 * can find the title even if it is split over multiple
	 * lines
	 */
	$one_line = implode(" ", $lines); 
	
	/*
	 * If we can match a title tag, extract it.
	 */
	if (eregi("<title>(.*)</title>", $one_line, $title)) {
    	return "Eclipse Corner Article: $title[1]";
	}
	
	return "Eclipse Corner Article";
}

function get_header_from_html_document(&$file_name) {
	$handle = @fopen($file_name, "r");
	$content = "";
    while (!feof($handle)) {
        $part = fread($handle, 1024);
        $content .= $part;
        
        /*
         * Only read up to the part that includes the
         * end tag for the header area.
         */
        if (eregi("</head>", $part)) break;
    }
    fclose($handle);
    return $content;
}