package xm::code::read;

use xm::o;
use xm::code::vars;
use xm::code::func;

use xm::code::ada;
use xm::code::awk;
use xm::code::c;
use xm::code::cxx;
use xm::code::groff;
use xm::code::html;
use xm::code::java;
use xm::code::javascript;
use xm::code::m4;
use xm::code::make;
use xm::code::pascal;
use xm::code::perl;
use xm::code::povray;
use xm::code::ruby;
use xm::code::sql;

use xm::code::plain;

sub DESC{"
  highlight sourcecode - automatic mode
"}

sub detect # $code_ref # $filename
{
    my ($code_ref, $filename) = @_;
    my $lang;

    for $lang (keys %LANGUAGE)
    {
	if (  (($LANGUAGE{$lang}->{'filename'} ne '') && 
	       ($filename =~  m/$LANGUAGE{$lang}->{filename}/))  ||
	      (($LANGUAGE{$lang}->{'regex'}    ne '') && 
	       ($$code_ref =~  m/$LANGUAGE{$lang}->{regex}/   ))   )
	{
	    return $lang;
	};
    };
    return undef;
}


sub DO # @$filenames
{
    my $F;
    my $code;
    my $lang;
    my $out;

    for $F (@{@_[0]})
    {
	open F, "<$F" or next;
	$code = join ('',<F>); close F;
	$lang = detect (\$code, $F);
	$lang = "plain" if not defined $lang; # fixme: need fallback mode
	$out .= "<file name=\"".$F."\" type=\"".$lang."\">";
	$out .= xm::code::func::DO($code,$LANGUAGE{$lang}{patterns});
	$out .= "</file>\n\n";
    }
	
    return $out;
}

sub ARGS { return    xm::o::args_command(@_, DESC); }
sub main { return DO(xm::o::args_command(@_, DESC)); }

1;